본문 바로가기

MY개발생각

[개발생각] SSS 암호화 대해서

Sharmir’s Secret Sharing 암호화 방법 있는데, 일명 트리플 S...

 

 

 

요즘 알고리즘 공부를 하고있어서, 생각난 암호화기술이긴한데, 생각보다 재미도 있고,

예전직장에서 이 암화화방법을 이용해서 아이디어를 냈다가, 까인적도 있어서..기억에 많이 남는다.

(그런데, 왜 까였을까? ㅋ 아직도 모르겠다..)

 

 

예를 들면,

 

"Hello Word"라는 문장을 암호화한다고 할때

복호화 키를 몇개를 만들것이고, 해당 복호화키중에 몇개의 키가 있으면 복호화를 할수있는지를 미리 정해서 암호화를 할수있다.

 

 

예를 들면)

평문 : 123 있다고 하자.

함수:

 

f(x)=123 + 2x + x²
 

암호화후 결과 값 :

x=1 → 126
x=2 → 131
x=3 → 138
 

사람들에게:

(1,126)
(2,131)
(3,138)

 

위 3개 정보를 각자 나눠준다.

3개의 정보가 하나로 합쳐져야 실제로, 123이라는 평문으로 복호화가 가능하다.

 

다항식의 해를 이용하여, 다항식을 유도하고, 해당 유도한 다항식에서 f(0)이 되는 값을 찾는 식이라고 생각하면 된다.

 

이 sss암호화를 이용해서 아이디어를 냈던건,

요즘 보이스 피싱등으로 나이든 어르신들이 많은 피해를 보는것을 알았기에,

이체가 발생할때, 아들, 딸들에서 이중으로 이체 확인을 받은후, 이체가 되는 안심이체 시스템 아이디어를 낸적이 있다.

 

이름하여, [보이스피싱을 막는 안심이체 시스템] !!!

이체를 하려면, 아들,딸등 미리 대상을 설정해둔 이체확인자에게 푸시알림이 가고,

해당 금액의 이체를 컨펌해주면, 실제 이체가 되는 아이디어였는데,

이때 이체컨펌을 위한 정보를 디비등에 평문으로 가지고 있지않고,

sss암호화를 통해, 2명, 3명 또는 n명에게 암호키와 암호문조각을 전달하고, 해당 n명의 암호키와 암호문으로 복화화가 하여,

이체 컨펌을 하도록 하여, 분산 처리와 암호화를 동시에 만족하게 하는 아이디어였다.

 

그런데, 이 아이디어는 받아들여지지는 않았다.

(왜 인지는 사실 아직도 모르겠다.. 아마 생소한 암호화방법을 가지고 와서, 거부감이 있었던걸까?..)

 

이런것을 디비로 하려면, 상당히 스키마가 복잡해진다.

 

예를들면)

sender, amount, recevier, confirmUser1, confirmUser2, confirmUser3, confirm1_done, confirm2_done, confirm3_done

이런식의 컬럼이 있어야할것이다...

 

sender : 보낸사람

amount : 이체 금액

recevier : 받는 사람

confirmUser1 : 이체 컨펌자1

confirmUser2 : 이체 컨펌자2

confirmUser3: 이체 컨펌자3

confirm1_done : 이체 컨펌자1의 이체 컨펌 여부

confirm2_done : 이체 컨펌자2의 이체 컨펌 여부

confirm3_done : 이체 컨펌자3의 이체 컨펌 여부

 

이런식의 데이터를 테이블에 가지고 있어야한다.

 

하지만, sss암호화를 사용하면,

sender, amount, recevier, key1, key2, key3, done 으로 테이블을 구성할수있다.

 

sender : 보낸사람

amount : 이체 금액

recevier : 받는 사람

key1 : sss를 통한 암호조각1

key2 : sss를 통한 암호조각2

key3 : sss를 통한 암호조각3

done : 컨펌완료여부

 

 

즉, confirmUser1, confirmUser2, confirmUser3등의 유저정보를 테이블에 넣지않고,

해당 암호키를 가지고 유저가 key를 제출하면, key들을 가지고 복호화를 하여 컨펌해주는 방식으로 동작할수있다.

이렇게 key만을 가지고 컨펌여부를 체크하게하면, 컨펌User의 데이터와 독립적으로 테이블을 유지할수있고,

디펜던시가 사라져 훨씬 유연하게 테이블을 관리하고 사용할수있다.

단순 복호키만으로 컨펌User를 특정하지않고, 컨펌여부를 처리할수있기때문이다.

(zk 영지식 증명 비슷하기도!)

 

기회가 되면, 이런 비슷한 곳 (여러사람이 컨펌하여 무엇인가를 하는 행위)에 적용을 해봐야겠다!