top of page
  • 박시몽님이 제일 처음 연구를 시작하게 된 계기(기술의 목적성)는?

저는 원래 암호 전문가는 아닙니다.  제가 참여했던 대부분 프로젝트들은 임베디드(embedded) 시스템이었습니다. 그중에서도 전투기, 무장(미사일 등), 항법장치, 센서퓨전 등 데이터의 초고속 실시간 처리를 해야 하는 부분이 많았고, 덕분에 수많은 형식의 데이터를 여러 방법으로 다루는 것에 익숙하게 되었습니다.  또한 임베디드 시스템 환경인 이유로 인하여 여러 가지 다른 CPU 들의 특성을 분석하여 실용적인 (속도 및 footprint 관점) 시스템을 설계하는 것이 가장 중요한 목적이었고, 저의 모든 시스템 설계는 그 영향을 받았습니다.

수년 전 자율비행 및 군집비행 등의 대형 분산시스템을 설계할 당시, 운항경로 계산을 위한 좌표계를 독자적으로 설계하였습니다.  수십, 수백만 개의 개체(비행기, 드론, 자동차 등)들이 이 좌표계를 이용하면 빠른 경로계산 및 충돌예측 등이 가능했고, 공간상에서 다수 개체가 고속으로 위치정보를 처리하여 전송하는 것이 가능했습니다.  베스퍼에서 사용되는 lattice (격자) 시스템은 바로 이 좌표계를 응용하여 만들어졌습니다.

데이터의 전송 측면에서 속도 못지않게 중요한 부분은 바로 보안입니다.  제가 참여했던 프로젝트들 대부분은 미국 NSA와 미국 국방성의 보안규정 및 법규를 반드시 따라야 했습니다.  또한 제가 설계한 많은 시스템은 극비에 해당하는 데이터를 다루어야 했기 때문에, 실제 사용 측면에서 고려해야 할 부분들은 물론, 예상치 못한 사고가 발생할 때의 보안까지도 고려해야 하였습니다.  따라서 시스템상의 보안 관련 artifact(흔적)의 유무 및 처리도 다루었습니다.  이러한 이유로 일반적인 암호체계를 자연스럽게 접하게 되었고, 사용에 따른 각기 다른 특성은 어느 정도 이해하고 있습니다.  우선 RSA 계열과 같은 수학 계산에 기반한 암호들의 문제는 계산속도입니다.  하지만 빠른 속도를 잃지 않으면서 블록암호의 버퍼링(buffering, message overlapping) 문제를 해결할 수 있는, 실시간 처리에 적합한 보안성을 가진 암호체계는 찾기 쉬운 일이 아니었습니다.  그러한 이유로 베스퍼를 개발하기 시작하게 되었습니다.

  • 동형암호는 실용적인 측면에서 적용이 어렵다고 하셨는데, 그 이유가 무엇일까요?

느린 처리 속도와 사용 시 요구되는 시스템 리소스(resource, 저장공간 및 메모리 크기 등)가 가장 큰 문제입니다.  현재 알려진 동형암호들은 수학적으로는 큰 의미가 있으며 당연히 연구 가치가 있습니다.  하지만 좋은 이론과 연구가 항상 좋은 실용 시스템이 되는 것은 아닙니다.

예를 들어, 비행기에서 폭탄의 투하 지점을 수 cm 이내의 오차로 계산할 수 있는, 부동소수점 밑으로 100자리까지의 정확성을 계산할 수 있는 훌륭한 공식이 있다고 하고, 한 번의 계산을 완료하는데 0.1초의 시간이 소요된다고 하겠습니다.

시스템 관점에서 이 공식을 판단하자면, 결론부터 말씀드리면 아쉽지만 이 공식은 실용적인 측면에서는 전혀 의미가 없습니다.  우선 현존하는 CPU는 소수점 100 자리를 정확히 표현할 수 없습니다. (IEEE-754 참조) 64비트 소수점이라 할지라도 정수 자리 포함 십 수 자리 이상의 유효숫자(significant digit)가 넘어가면 이미 정확도를 보장하지 못합니다.  따라서 수학적인 정확도는 이론적으로는 무한대의 계산이 가능하지만 실용적, 현실적인 한계와는 큰 차이가 있습니다.

폭탄 투하가 가능한 최저속도가 600km/h라 하면 0.1초 동안 비행기는 거의 17m를 이동하며 그것은 이미 그 계산이 제공하는 정밀도 보다 큰 오차를 만들어 냅니다.  또한 아무리 구형 비행기라 하더라도 일반적인 비행기 내부 데이터 통신은 16Hz, 즉 0.0625초 (62.5ms) 단위로 일어납니다.  따라서 수학적으로는 수준(?)이나 정확도가 조금 떨어진다고 할지라도 소수점 밑 6 자리 정도의 정확성을 주고 60ms 이내의 계산시간이 소요되는 공식이 있다면 그것을 사용하는 것이 훨씬 실용적이며, 추후 문제해결 및 보완 측면에서도 현실적이라 할 수 있습니다.

현재 사용되는 동형암호가 수십 배의 배 수로 데이터(키 포함)양을 증가시키고, 동시에 계산시간이 길다고 알려져 있습니다.  또한 데이터 및 처리에 따른 리소스 사용량의 관계나 비례가 딱히 일정하지 않은 것으로 알고 있습니다.  이는 실용적인 서버나 용량 등에 대한 예측이 불가능하다는 가장 큰 문제입니다.  실행속도에 관해서는 굳이 언급할 필요가 없다고 생각합니다.

  • 그럼 Vesper의 기능에는 정확히 어떤 것들이 있나요?

베스퍼는 데이터가 암호화된 상태에서 원문의 내용을 읽어낼 수 있어 복호화 없이 검색(search), 리플레이스(replace) 그리고 연산까지 빠른 속도로 처리할 수 있습니다.  그리고 외부로 유출될 수 있는 가능성을 고려하여, 하나의 키로 암호화된 데이터를 복호화 작업이 없이 바로 다른 키의 암호문으로 변환해 주는 ‘key-morphing’이라는 기능이 있습니다.  순간적으로 처음 생성해 낸 키를 무력화시키는 것이죠.

그리고 베스퍼의 빠른 속도는 거의 stream cipher에 가깝기 때문에 일반 HD급 영상 정도는 스트리밍과 동시에 암호화 및 복호화를 할 수 있습니다.  따라서 사진이나 영상 등 멀티미디어 분야에 응용도 가능합니다.  (다시 말씀드리지만, 베스퍼는 스트림 암호는 아닙니다.)

  • 키모핑의 개념은 알겠는데 실무적으로 정확히 어떻게 유용하게 쓸 수 있는 건가요?

키모핑은 암호문이 한 타입에서 다른 타입으로 복호화 없이 바로 변하는 것입니다.  따라서 키모핑을 하기 위해서는 이 전의 키와 새로 만들어진 키가 동시에 존재해야 합니다.  예를 들면 제가 개인적으로 암호화된 데이터를 가지고 있는 상태에서 키를 잃어버리게 되면 키모핑을 하지 못합니다.  하지만 요즘 대부분의 사용자가 암호화된 데이터를 직접 가지고 있기 보다는 대부분 서버에 저장해 놓기 때문에 그 서버에서 키모핑이 가능합니다.

만약 내 암호키가 저장된 핸드폰을 분실했을 시, PC 등으로 인터넷에 접속하여 키모핑을 명령하면 그 순간 서버에 저장된 모든 데이터는 새로운 키의 암호문으로 변환되어 분실된 키를 무력화하게 됩니다.  카드를 분실했을 때 카드회사에 전화해서 사용을 막는 것과 같은 개념입니다.

개인 간 이메일이나 데이터 전송 시, 송신자 측에서 암호화된 데이터가 서버에 도착하는 즉시, 데이터를 통신포트 단에서 키모핑을 한 다음에 서버에 저장합니다.  즉, 일단 서버에서 받고 저장하는 것이 아니라 통신단에 데이터가 도착하는 즉시 키모핑을 해서 저장하는 것이지요.  따라서 송신자의 키는 데이터 전송이 끝나는 순간 무력화되어 버리고, 서버에 저장된 암호화된 데이터는 서버 내부의 키로만 복호화할 수 있습니다.  그리고 수신자가 데이터를 요청하면 새로운 키를 생성하여 수신자에게 전달하고, 그 키로 서버에 있는 데이터를 키모핑하여 전송함으로써 서버 내부의 키는 외부로 유출되지 않습니다.  또한 송신자의 원래 키로도 수신자가 받은 암호문을 복호화할 수 없으므로 비대칭키화 비슷한 역할도 하게 됩니다.

또한 주기적으로 서버 내부의 암호화된 데이터를 키모핑하는 것으로 내부 키를 계속 변환해 보안성을 높일 수 있습니다.

  • 수 년 전 부터 대기업에서도 개발 중이었던 동형암호가 몇 년째 실질적으로 사용이 되지 못하고 있는 이유는 뭐라고 생각하시나요?

학문과 현실의 괴리가 가장 큰 이유라 생각합니다.  동형암호의 학문적인 가치는 대단합니다.  그 원리는 아름답기까지 합니다.  하지만 이것을 현실에 적용하려면 컴퓨터, 정확히 말하면 CPU라는 현실의 한계에 직면하게 됩니다.

예를 들어 0.1이라는 수는 너무나 쉽죠.  하지만 CPU는 이 수를 표현할 수 없다는 것을 많은 분들은 모르고 계십니다.  IEEE-754 표준에 따라 0.1은 16진수로 ‘0x3dcccccd’로 컴퓨터에 저장됩니다.  이 값은 실제로는 ‘0.100000001490116119384765625’입니다.  그렇다면 ‘0.100000005’는 어떻게 컴퓨터에 저장될까요?  0.1과 똑같습니다.  그럼 소수점 아랫부분만 그럴까요?  ‘123456789’라는 숫자는 ‘123456792’로 저장됩니다.  다시 말해서 처음 7자리 정도의 유효숫자(significant digits)를 제외하고 그 이후부터는 오차가 커집니다.  이것이 32비트 소수라 그럴까 생각하시겠지만 64비트 소수의 경우 유효숫자가 조금 증가할 뿐, 결과는 대동소이합니다.

동형암호의 또 다른 문제는 부동소수점 계산입니다.  CPU 내부의 FPU라고 하는 부동소수점 연산을 전담하는 장치가 있습니다.  CPU 가 계산을 할 때 부동소수점 계산속도가 너무 느려 아예 이를 전담하는 부분을 따로 만들어 놓은 것입니다.  따라서 CPU와 FPU 간 데이터 전송 및 타이밍 등 부가적인 시간을 소요하게 되는 것은 당연한 일입니다.  그리고 기본적으로 FPU의 속도가 아무리 빠르다고 해도 정수의 계산을 능가할 수는 없습니다.  거기에 32비트가 아닌 64비트의 경우 속도는 더욱 느려집니다.

동형암호는 거의 모든 계산이 소수점 연산으로 이루어져 있습니다.  거기에 더하여 암호를 강화하기 위해 노이즈, 즉 에러를 주입하는데, 당연히 연산이 진행될수록 그 에러는 점차 증가하고, 에러가 한계치에 다다르면 부트스트랩(bootstrap) 과정을 거쳐 에러를 다시 줄이는 작업을 합니다.

이처럼 노트에서는 몇 줄 되지 않는 수학 공식이라 할지라도 실제 CPU 에게는 엄청난 양의 오버헤드(overhead)를 초래하게 되며, 결과적으로 실용성이 떨어지게 되는 것이죠.  따라서 동형암호 알고리즘은 수학적인 우수성에 비해 실용성은 아직은 좀 떨어지며, 이를 극복하기 위한 노력이 있으나, 적어도 근시일 내에는 실용화되기는 어렵다고 생각합니다.

베스퍼는 거의 모든 계산이 정수연산으로만 이루어져 있습니다.  또한 사용되는 연산도 대부분이 매우 기본적이며 CPU에서 빠르게 실행되는 것으로 이루어져 있습니다.  게다가 사용되는 메모리도 수 메가바이트에 지나지 않고, 이마저도 최적화 및 설정에 따라 더 작거나 크게 조정할 수 있습니다.

  • 베스퍼가 가진 암호강도의 차별성 및 양자컴퓨터를 통한 해킹위험은 없는지요?

베스퍼는 RSA 계열의 암호가 아니기 때문에 쇼어(Shor) 알고리즘의 영향을 받지 않습니다.  따라서 양자내성 여부와는 직접적인 관련이 없습니다.  하지만 brute-force 공격을 대비하여 말씀드리자면 기존의 AES보다 훨씬 더 강력합니다.

베스퍼의 격자(lattice)는 다수의 소수(prime number) 및 자연수의 조합으로 이루어져 있으며, 사용자의 설정에 따라 복잡성의 변경이 가능합니다.  (물론 복잡성이 커질수록 암호문의 크기는 그에 비례하여 증가합니다.)  AES-256과 비교하자면 AES-256의 brute-force 공격에 대한 경우의 수가 대략 1.15792E+77 정도인 데 비하여 현재 베스퍼 데모 버전은 2.6992E+112 정도입니다. (데모 버전은 최소 개 수의 상수만을 사용하며 128바이트 키를 사용합니다.)

데모버전은 128바이트의 키를 사용한 데 반해, 현재 베스퍼는 1024바이트 (1메가 바이트) 길이의 키를 사용합니다.  따라서 brute-force 공격에 대한 방어력은 더욱 강해졌습니다.

  • 검색기능은 관리자에게만 주고 분석자는 사용할 수 없도록 하는 것이 가능한가요?

 (이유는 동형암호를 사용하는 목적이 특정고객 1개의 레코드값을 모르게하고 연산을 통한 결과는 쉽게 얻을수 있게 하는 것이 목적이라 분석자가 검색도 가능하면 금지해야 하기 때문에 드리는 질문입니다.)

우선, 암호문에서의 ‘검색’ 기능은 현재 어떠한 동형암호 및 일반암호도 지원하지 않습니다.

말씀하신 시나리오는 분석자가 복호화 또는 계산 결과를 보지 못하게 하는 것이 목적입니다.  동형암호가 가진 최고의 장점이기도 하며, 현재 동형암호가 제안하는 방법이기도 하여, 여기서는 베스퍼에 관해서만 말씀을 드리겠습니다.

우선 분석자가 결과를 보지 못하도록 하는 것입니다.  베스퍼의 1메가바이트 키는 단순한 암호화/복호화 정보 이외에 여러 기능을 가지고 있습니다.  암호, 원작자 등을 이용하여 분석자가 정보를 보지 못하도록 할 수도 있고, 결과를 암호화할 새로운 키를 작성하도록 'seed'를 줄 수도 있습니다.  현재 데모에서는 검색 등이 작동되는 것을 보여드리기 위해 그러한 기능을 사용하지 않았지만, 사용자의 요구나 실무적으로 필요한 기능이 있는 경우 그에 관련된 기능은 쉽게 응용 및 추가가 가능합니다.

또 다른 사항은, 사실 베스퍼는 두 가지 버전이 있습니다.  앞서 말씀드린 모든 기능을 가진 일반 베스퍼와, 동형암호 형태의 사용 및 계산을 위한 동형암호 버전의 베스퍼입니다.  동형암호 버전의 경우 복호화나 검색 등 일반 베스퍼가 제공하는 특수기능을 사용할 수 없습니다.  RDBMS 데모에서와 같이 간단한 설정 파일로 작동하며, 계산 속도는 1초 당 약 4천 만개의 숫자를 계산할 수 있습니다.  암호화 된 파일의 용량은 입력값에 따라 약간의 차이는 있으나 8배 정도입니다.  베스퍼는 기하학적 벡터를 이용한 알고리즘이기 때문에 동형암호 형태의 계산이 쉽게 가능하며, 동형암호 형태의 계산에서도 대부분 정수 기반의 계산만 사용합니다.

동형암호 버전 베스퍼의 개발을 계속하지 않은 이유는, 일반 베스퍼의 기능만으로도 충분히 대부분 실용적인 용도를 충족시킬 수 있다는 생각에서였습니다.  하지만 만약 꼭 동형암호 방식의 사용이 불가피할 경우에는 동형암호 버전의 베스퍼를 개발하는 것은 큰 문제가 없습니다.

  • 기술적인 메리트가 전환비용 + 물리적 시간의 기회비용에 비해 높다고 생각하시나요?

베스퍼는 독립적인 암호체계가 아닌 독자적인 보안 솔루션의 한 방법으로 시스템 레벨로 시장에 접근하려 합니다.

제가 주로 실시간 임베디드 시스템을 개발하다 보니 프로그램의 속도 및 리소스에 대해 상당히 예민한 편입니다.  베스퍼 역시 실시간 처리 및 실용적인 하나의 보안 수단으로 개발되었기에 속도는 물론이고 리소스 사용을 염두에 두고 만들어졌습니다.

리소스 사용, 즉 실행 시 필요한 시스템의 'footprint'가 작다는 것은, 이 시스템이 임베디드 시스템에 적용이 가능하며, 컴퓨터뿐만 아니라 일반 소형 기기장치(예를 들어 IP 카메라)에도 탑재가 가능하다는 것입니다.

더구나 베스퍼의 기본 알고리즘은 이미 완성되어 데모프로그램으로 실행시키고 있으며 베스퍼를 안드로이드에 이식하여 사진 촬영 앱 데모 프로그램도 완성했습니다.  따라서 기존 시장에 판매 중인 아이템에 탑재하는 데에 필요한 시간은 상당히 짧으며 차별화된 기능은 시장에서 독보적인 위치를 차지할 것입니다.

아주 현실적인 예로 방범용 IP 카메라를 들 수 있습니다.  사진이 촬영되는 동시에 암호화되어 저장되고 키를 별도로 관리하는 시스템입니다.  수술실 및 공공시설은 물론, 강력범죄가 발생하는 지하철역 화장실 등에 CCTV 설치 요구가 발생하지만, 사생활 침해 등의 이유로 설치가 이루어지지 않고 있습니다.  만약 카메라에서 촬영된 영상이 저장되기 전에 실시간으로 암호화되어 저장이된다면 이런 문제는 해결됩니다.  특히 공공시설의 경우 정부의 허가없이 키를 사용할 수 없기 때문에 암호화된 데이터가 유출된다고 하더라도 사생활 침해가 될 수 없는 것입니다.  또한 아파트 월패드 카메라의 해킹으로 인한 피해가 자주 발생하는데 베스퍼가 탑재되면 해킹을 당한다고 해도 주인의 키가 없으면 영상을 볼 수 없으므로 이러한 범죄 피해를 방지할 수 있습니다.

  • XOR masking을 사용하는 One Time Pad와 다른 점은 무엇인지요?

베스퍼는 마스킹에 있어 Vigenère 암호원리를 사용하고, 이것은 OTP와 기능적으로 비슷한 역할을 합니다.  Vigenère는 암호학에서 일정 조건만 충족되면 절대로 풀 수 없다고 증명된 암호화 알고리즘입니다.

OTP와 비교하여 역할이나 기능은 비슷하지만 구현 방법은 많이 다릅니다.  하지만 결과적으로 두 방법 모두 풀기 어렵다는 것은 동일합니다.  XOR 마스킹은 대부분이 암호들이 사용하는데, 베스퍼는 자체 암호 알고리즘에 더하여 obfuscation을 위한 랜덤 마스킹, 거기에 빈도수(frequency) 측정 공격을 방어하기 위한 Vigenère 원리를 이용한 마스킹 방법을 모두 사용합니다.

  • 적용할 수 있는 여러 분야 들이 있겠지만 최근 신용카드사들이 데이터 관리에 있어 현재 이름, 주민번호에 이어 신용카드 번호까지 암호화하라는 지침이 내려와 유예기간 중에 있습니다.  베스퍼는 이에 대해 어떤 실용성과 어떻게 적용이 될 수 있나요?

데이터를 암호화하면 보안, 규정문제가 동시에 해결되는 것은 모두 알고 있습니다.  문제는 현재 사용되는 암호기술은 반드시 복호화를 해야만 처리할 수 있고, 이 과정에서 유출 또는 리소스 사용이 발생되죠.  동형암호 기술로는 앞서 말씀드린 실용적인 문제들이 있고요.  베스퍼는 암호화된 상태에서 복호화 없이 검색, 바꾸기, 그리고 연산이 가능하므로 암호화된 데이터베이스에 바로 적용이 가능합니다.  베스퍼는 암호화 데이터에서 풀 스캔으로 상용 가능한 쿼리 속도를 보입니다.  그래서 최소한의 비용으로 별도의 인덱싱 없이 적용할 수 있을 것으로 보입니다.

  • 베스퍼를 이용하여 데이터를 연산하는 내용을 알 수 있을까요?

물론입니다.  참고로 최근버전(Vesper 1.3rc)으로 각각 10개의 필드를 가진 100만 명의 신체 데이터에서 신장 170 이상 190 이하의 사람을 찾아 최대 최소 값, 평균값, 그리고 표준편차를 계산한 RDBMS 데모의 스크린샷을 보여드리겠습니다.  물론, 모든 실행은 복호화 없이 암호문만을 사용하여 계산한 것입니다.  제 개인 PC(인텔 i9 3.2GHz)에서 실행하였습니다.

qa1.jpg

암호문의 크기는 396MB이며, 1초당 약 3백 6십만 명(1인당 10개의 필드)의 데이터를 분석하였습니다.  조금 더 복잡한 쿼리(query)를 사용한 예는 다음 스크린샷을 보시기 바랍니다.

qa2.jpg

이것은 100명의 신체 데이터에서 8개의 쿼리를 실행시킨 결과입니다.

 

다음은 10만 명 및 100만 명의 카드 사용자 데이터(1명당 6개의 필드)에서 하나의 쿼리로 카드번호가 ‘7996846196808697’인 고객을 검색한 결과입니다.

qa3.jpg

보시는 것처럼 1초당 2백 1십만 개가 넘는 검색 속도를 보입니다.

 

마지막으로 100명의 카드 사용자 데이터(1명당 6개의 필드)에 17개의 쿼리를 사용한 예입니다.

qa4.jpg

보시는 것처럼 쿼리의 개수에 따라 검색 속도는 변하게 되지만, 그런데도 베스퍼는 상당한 속도를 보입니다.

bottom of page