Quantum Stamp 

양자우표란?


개인의 보안에서 가장 강력하다고 하는 현재까지 적용된 종단간 암호화 알고리즘에는 몇가지의 문제점을 가지고 있다.
1. 94년에 퍼블리쉬된 소호의 양자 알고리즘에 의해서 RSA나 ECC 등이 더이상 안전하지 않고 10년 뒤에는 양자컴퓨터가 점점 발전한다는 것이다.
그러나 위의 문제는 당면한 문제는 아니라고 생각할 수 있다. 적어도 10년 정도의 시간이 아직은 남아 있다.

2. 
텔레그램이나 카톡, 현재 종단간 암호 알고리즘을 사용하는 알려진 거의 모든 앱들은 디필헬만 키 교환 알고리즘을 사용한다.
위의 알고리즘은 중간자 공격이라는 취약성을 가지고 있다. 
영희와 철수가 전화로 대화하는데 중간에 성우(성대모사를하는사람)가 한명이 끼어서 영희한테는 철수 흉내를 내고 철수에게는
영희 흉내를 내어서 두사람의 정보를 모두 빼내는 경우를 말한다.
이것을 극복하기 위해서 텔레그램이나 카톡에는 서로의 화면에 동일한 이미지가 나오도록하고 동일하지 않으면 신뢰할 수 없다고 함으로써
위의 취약성을 보완하고 있다.

멀리떨어진 사람끼리 화면에 나오는 그것도 몇번을 클릭해야 볼수있는 이미지가 서로 같음을 확인하면서 대화한다는 것은 거의 불가능하다.
딸라서 이러한 방법은 온라인 상의 대화이므로 실효성이 거의 없으며 개발사 측에서도 인지하고 있으나 대안이 없으므로 궁여지책으로 쓴 방법이 된다.

혹자는 중간자 공격을 위해서는 시스템이 필요하므로 쉽지않은 일이라고 생각할 수 있다.
하지만 2013년에 스노든이 열은 판도라의 상자에서처럼 보안분야의 전세계의 1위인 NSA에서 로비를 통해서 암호 알고리즘에 백도어를 심어서 전세계인의
대화내용을 감청했던 예를 생각하면 중간자 공격은 그에 비해서 너무나도 쉬운 행위가 된다.
더 나아가 정말 큰 맘 먹으면 개인이라도 할 수 있지 않을까하는 생각도 든다.

지금 화웨이 칩에 백도어를 심었느니 인텔 칩에 백도어를 심었느니해서
두 강대국들이 서로를 못 믿겠다고 국가적인 차원에서 업체들을 제제하는 상황에서 중간자 공격이 없을 것이라는 생각은 너무나 아름다운 생각이 아닌가 생각된다. 
여기서 세상이 아름답고 평등하면 우린 뭘먹고 사냐는 영화 타짜의 명대사가 생각난다.  
조금만 인터넷 서핑을 하면 백도어를 심는것을 생업으로 삼는 사람들도 많고 국가적으로 백도어 연구재단을 설립을 지원하는 예들도 있음을 확인할 수 있다.
드러나지 않아야 할 내용인데도 불구하고 드러난 예들을 이렇게 쉽게 찾아볼 수 있는데 과연 드러나지 않은 예들은 얼마나 많을지.. 우리는 두려워해야 한다.

3. 이러한 기술적인 문제 뿐만아니라 개발사의 신뢰성의 문제가 제기된다.
텔레그램이 2018년 러시아에서 추방된 이유가 암호키를 러시아 정부에게 주지 않아서 인것은 알려진 사실이다.
그렇다면 암호키만 주면 개인의 정보가 알려질 수 있다는 말인가? 묻고 싶다.
텔레그램 파벨 두로프 CEO는 2020년 6월 초순 "사용자 개인 정보에 영향을 주지 않고 과격한 콘텐츠 검색 및 제거를 위해 시스템을 크게 개선했다"고 밝힌바 있다
출처 : 글로벌 뉴스 미디어 채널 데일리포스트(http://www.thedailypost.kr)
과격한 콘텐츠 검색 및 제거하는 시스템이 있다는 것은 개인 정보를 실시간 감청한다는 것과 무엇이 다른가? 묻고 싶다.
이것은 일반대화에 관한 내용이며 비밀대화는 포함이 안된다고 항변할 수 있다. 하지만 과격한 콘텐츠 검색 및 제거라는 개발 방향성을 가지고 있는 개발사가 
비밀대화 내용을 감청할 수 있는 백도어를 심지 않았다고 어떻게 보장할 수 있는가?

종단간 암호화 알고리즘의 핵심은 개인키를 어디에 저장하는 가가 아니라
서버가 정말로 공개키 개인키를 만드는데 전혀 관여하지 않고 개인키를 보관하고 있지 않은가 하는 것이다.
서버와 독립적이기 위해서는 공개키와 개인키를 서버가 아닌 단말기에서 만들어야하고 그것도 수시로 바꿀수 있도록 설계되어야한다.
그러나 텔레그램과 카카오톡에서는 공개키는 이미지로 보여주는 것이 전부이며 개인키는 어디에 저장되는지도 개인은 모른다.
또한 개인키 공개키를 생성하는 절차가 없이 대화가 시작된다. 이것은 편리성의 측면을 고려한 것이겠지만
또 한편으로는 신뢰성을 떨어뜨리게된다. 키생성에 사용자가 직접관여하지 않았다는 것은 너무나 쉽게  단 한줄의 코드만으로도 백도어를 만들수 있는 구조이며
그렇게 하지 않았다는 것을 개발사에서 증명해야만 하는 부담을 가지게 한다.
그러나 앱과 서버 소스를 완전히 공개한 예는 한 건도 없다. OPEN SOURCE를 기반으로 제작된 텔레그램마저도 서버소스를 공개하지 않고 있다는 것은 숨길게 많다는 반증이 아닐까.
그러면 우리는 어떻게 개발사를 신뢰할 수 있단 말인가

본사가 개발한 프라이빗 SNS는 오픈소스를 바탕으로 하지 않았기 때문에 소스를 공개할 필요는 없다고 생각한다.
그러나 암호의 생성과 관리와 관련된 모든 부분은 투명하게 공개한다.
다른 시스템(예 텔레그램에서 공개한 내용, 카톡은 전혀 공개하지 않고 있음)에서 사용된 것에 비해서 얼마나 간략한지 비교해보면 놀랄 것이다.
우리는 simple is best라는 말을 생각한다.
나는 더 나아가 우아해질려면 심플해져야 한다고 말하고 싶다.
 

위의 예에서 중간자 공격이 발생한다는 것은 영희와 철수의 공개키가 제대로 관리되지못했기 때문이다.
만약 시스템에서 영희와 철수의 공개키를 신뢰할 수 있는 수준해서 관리해준다면 공격자의 공개키가 영희나 철수의 공개키로 오인되는 경우를 차단할 수 있게된다.
종단간 암호화에서 우리는 서버가 아무런 개입이 없어야지만 완벽한 시스템이라고 생각하기 쉽다. 그러나 그것은
개인키의 생성과 보관에있어서의 얘기다. 공개키는 글자그대로 모두에게 공개하는 것이기에 공개키는 서버가 관리한다고 해서 종단간 암호화시스템의
신뢰성이 깨지지 않는다. 오히려 영희의 공개키가 정말 영희 것이 맞는냐를 확인해주기 위한 인증절차 흔히 말하는 전자서명절차(지금의 은행서버에서처럼)를 두어서 서버가
맞다는 것을 인증해준다면 이러한 중간자 공격을 막을 수 있다. 그러나 이러한 전자서명절차를 메신저 시스템에 두게 되면
사용자들은 적어도 채팅창을 열때마다 자동로그인이 아닌 일일이 패스워드를 쳐가면서 로그인을 해야하는 만큼의 수고를 해야만 하는 문제가 발생한다.
그래서 텔레그램이나 카카오톡처럼 메신저들은 전자서명절차를 두지않고 단말기에 공개키 이미지를 보여줌으로써 두 단말기에 보여지는 이미지가 같다면
신뢰할 수 있는 것으로 간주된다고 한다. 그러나 이것은 위에서 말한 것처럼 미봉책일 수밖에 없다.


프라이빗에스앤에스는 중간자 공격의 문제와 개발사의 신뢰성 문제를 해결하기 위해서
단말기(앱)내에서 공개키-개인키를 필요시마다 생성하고 관리하는 모듈이 탑재되어있다.(특허 출원 : 채팅앱을 위한 공개키 관리 시스템)
임의의 시간에 사용자가 임의의 공개키-개인키를 단말기에서 생성하고 생성된 개인키는 단말기에 보관되고 공개키는 서버에 보관된다.
따라서 개인키의 생성과 보관에서 서버가 관여되지 않는다는 것이 보장된다.
또한 서버에 보관되는 공개키가 임의의 시점에 바뀌므로 해커가 서버에서 공개키를 탈취하는 것이 무의미해지게 된다.
이것은 패스워드의 신뢰성을 높이기 위해서 OTP(one time password)를 사용하는 예와 동일하다.
또한 비밀키를 생성하기위해서 DH알고리즘을 사용하지 않고 단톡방을 만드는 시점에서 OTP를 생성해서 비밀키로 사용하고 이것을
서버에 보관된 단톡방 맴버들의 공개키를 읽어서 암호화시킨 후에 서버에 임시 보관함으로써 
어떤 시점에서도 통신채널상의 모든 데이터들은 공개키로 암호화된 상태에서 이동되므로
공개키의 주인 즉 개인키를 가지고 있지 않은 사람은 데이터를 탈취한다고 하더라도 무의미해진다.

공개키와 개인키를 자주 바꾸다보면 이것을 관리하기 어려운 문제가 발생한다. 그래서 모든 공개키 개인키 및 암호문들은 뒷자리에 생성된 시간을 기입한다.
따라서 개인키는 바꾸지 않더라도 복호화에 사용되는 개인키는 뒤에 시간이 다르기 때문에 항상 이전과는 다른 키를 사용하게 된다.
공개키는 개인키에 넣어진 시간을 파일명과 공개키 이미지의 메타마크에 넣음으로써 시각적으로 확인할 수 있도록 한다.
또한 공개키를 보관하는 기간(예 한달)을 두어서 현시점에서 암호화된 데이터들 또한 이름에 시간을 두어서 해당 시점에 만들어진 개인키로 복호화할수 
있도록하며 관리 기간을 설정한다. 관리기간을 넘어서면 자동 삭제전에 데이터를 백업할 것을 알리는 알람창을 띄우며 데이터를 백업하기를 원하면
데이터를 복호화 한 후에 가장 최근의 공개키로 다시 암호화 시켜서 저장함으로써 계속적으로 데이터가 복호화 가능하도록 한다.
만약 폐기하기를 원한다면 자동 삭제한다.

만약 데이터 관리 폴더나 서버의 공개키 관리 폴더 이외에 임의로 보관되는 암호화된 파일이 있다면 기간이 지나면 사용할 수 없기 때문에
이때는 적어도 개인키 또는 공개키와 개인키를 함께 보관해서 관리해야만 한다.

PrivateSNS는 
1. 최초로 수학적으로 검증된 양자 내성 알고리즘을 사용한다. (논문..)
2. 키교환 알고리즘을 사용하지 않고 모든 네트웍 상의 데이터는 서로간의 파라미터 공유없이 개개인의 공개키로 암호화 되어 전송되므로 중간자 공격이라는 개념자체가 적용되지 못한다.
3. 키생성을 개인이 자유롭게 임의의 시점에서 하며 키생성과 관리에 관한 모든 소스가 투명하게 공개되어 있다.
 (본 논문을 읽고 이해한 몇몇 안된는 분들 중에서 국내의 모 암호컨설팅전문회사의 이사로 계시는 분의 말을 빌리면 sat기반의 양자내성알고리즘이 
지금까지 자신이 알아왔던 모든 암호알고리즘들 중에서 수학적으로 가장 우아한 알고리즘이다라고 했다.)
우아하다는 표현은 수학적으로 명확하고 간결하다는 뜻일 것이다. 그렇기 때문에 개념이 이해된 사람은 쉽게 가져다 쓸 수 있을 만큼 암호화복호화코드가  짧고 간결하다.
그러나 International patent panding 되어 있으므로 실시권은 적어도 천만불, 특허권은 적어도 1억불 이상 지불할 생각이 아니면 상업적 용도를 쓸 수 없음을 여기서 알린다.)