다니엘 번스타인 교수의 두 번째 미국과의 소송

암호학계에 꽤나 공격적인 어투로 유명한 다니엘 번스타인 (Daniel J. Bernstein)이라는 교수가 있다. 바로 기억나는 것만 해도 공개된 메일링에서 (대략) 상대방의 논문에 대해 “그거 Bullshit인거 너도 알지 않냐” 라는 말과, 학회 초청강연에서 깨진 암호 스킴을 줄줄이 말하면서 공격 논문의 부분을 강단에서 주르륵 읽는 -_- 공격적인 성향이 강하시다. 직접 얘기해본적은 없지만, 학회에서 만난 학생은 굉장히 좋은 사람이라고 하긴 했는데 굉장히 무서운 사람이라고 생각이 든다.

이 사람은 연구도 잘하지만 학계에서는 학계의 방향에 대해 논의하는 논문/평론이나 암호 표준화, 외부적인 활동으로 꽤나 유명하다. 표준은 이름 말해도 알기 어려우니 제끼고, 외부 활동으로의 대표적인 예시가 바로 Bernstein v. United State. 소송사건.

요약하자면 미국에서 암호학 기술의 외부반출을 금지하는 법(위키 페이지)이 있었고, 1992년까지 꽤나 엄격했다고 한다. 이 법에 대해 번스타인 교수가 1995년 학생시절 암호 논문을 출판할 때 소스코드를 함께 동봉하기 위해 소송을 해서 (처음에는 다른 사람들과 함께, 나중에는 혼자서가 된 듯 하다.) 결국은 이겼다고.

번스타인 교수의 홈페이지에 공개된 글에 따르면 이번 소송은 대략 NSA의 정책이 암호학 표준을 망치고 있다..에 관한 것 같다. 사실 여러가지 면으로 NSA/미국 정부가 암호 표준에 영향을 많이 주고, 실제로 이상한 결정을 한 것도 여럿 있어서 그런지 사례를 많이 들어가며 글을 썼다. 대략 DES의 키 길이 문제, DualEC의 백도어에 관한 의혹 등이 대표적인 사례인듯 (잘 몰랐는데, 스노든이 공개한 서류에도 약간 관계되는 내용이 있다고 한다.)

NSA가 의심스러운 행동을 자주 하는거야 사실이지만, 다른 여러 학자들은 번스타인 교수가 최근의 NIST 대양자암호 표준화에 떨어져서 하는 소송이 아니냐는 의견도 좀 있다. 공격적인 비난으로는 이러한 번스타인의 행동이 표준화와 대양자암호로의 변화를 늦추는 요인이 될거라고 ㅋㅋ

큰 언어 모델의 안전성에 대한 염려

지난번 굉장히 성공적인 모델인 GPT-3와 그 변형에 대해 포스팅한적 있다. [지난글 1, 지난글 2, 지난글 3] 최근의 언어 모델들은 주어진 문장(의 부분)에서 다음 단어를 예측하는 형태로 많이 이루어진다. 이러한 형태의 문제를 푸는 언어 모델들은 최근의 GPT-3처럼 굉장히 큰 데이터를 기반으로 굉장히 많은 파라미터를 이용해 만드는것이 트렌드로 보인다. 지난번 Zariski님의 포스팅에서 소개했듯 이미 만든 모델의 많은 부분을 제거하고 비슷한 성능을 내는 것이 종종 가능한 것으로 보이지만, 대체적으로 학습 자체와 기본이 되는 모델은 엄청 크다는 이야기.

그렇다면 여기서 보안의 시각으로 모델을 보면 자연스러운 질문이 떠오른다: 학습에 사용된 데이터가 혹시 모델 안에 그대로, 혹은 복원 가능하게 저장되어있는게 아닐까? 최근 구글, 하버드, 스탠포드, OpenAI, 애플, 노스이스턴의 많은 연구자가 발표한 논문 링크에 따르면 큰 언어 모델이 있을 때, 이 모델에 질문을 하는 것만으로 (즉, 문장의 일부를 주고 다음 단어를 보는 것) 모델을 학습하는데 사용되었던 구체적인 데이터를 복원해냈다고 한다.

논문에 소개된 Figure. 결과가 정확해서 일부를 숨겼다고.

연구진은 이러한 공격을 GPT-2에 적용된 결과를 논문에 소개했다. 구체적인 공격 결과로는 다음과 같은 정보들을 GPT-2 모델에서 추출해냈다고. 1800개의 후보군 중 600여개를 복원했다고 한다. (수작업으로 결과를 검증해야해서 후보군의 수를 제한했다고 한다.)

  • 뉴스 헤드라인
  • 메세지 로그
  • 자바스크립트 코드
  • 개인 식별정보

또한 GPT-2의 여러 모델을 비교한 결과 파라미터/학습량이 클수록 복원하는 정보가 더욱 더 커진다고. 현재 GPT-3 등은 훨~씬 많은 학습량과 파라미터를 쓰니 이러한 공격에 더욱 더 취약할듯 하다.

연구자들에 따르면 이런 공격이 다른 모델에 적용되지 않는다는 말은 아니고, GPT-2가 공개된 데이터만을 이용해서 학습했기 때문에 현실에 대한 (윤리적인 이유로) 위협을 줄이기 위해 GPT-2를 타겟으로 삼았다고. 이 공격은 다른 모델에도 당연히 적용될 수 있을것으로 보이고, 큰 언어 모델은 이러한 공격을 방어하는 것을 하나의 목표로 삼아야 한다는게 논문의 제안중 하나.

연구자들은 이 공격을 막는 방법의 하나로 대규모 정보 분석에서 개인 정보를 보호하는 수단인 Differential Privacy를 이용하는 것을 제안한다. 지난 Cynthia Dwork에 대한 글 [링크]에서 이를 살짝 소개한적 있다.


2021년 1월 13일 추가: 한국의 인공지능 챗봇 이루다가 비슷한 논란(과 다른 여러 논란)으로 화제가 되고있다. 페이스북 TensorFlow KR에 올라온 글 [글 1,글 2]가 아주 잘 정리되어 있다.

난독화 이야기 (2) 가장 좋은 난독화란?

난독화 이야기 (1) 에서 가상 블랙박스 난독화, 즉 임의의 프로그램을 인풋-아웃풋만 알 수 있도록 일종의 “프로그램을 암호화”하는 난독화 기술이 불가능함을 설명했다. 그렇다면 자연스러운 질문은 얼마나 강력한 난독화가 가능한지, 가장 좋은 난독화가 무엇인지에 관한 것이다. 한참 쉬었는데, 난독화에 관한 콴타매거진 기사가 올라와서 다시 돌아와서 조금 더 써봄ㅋ


사실 2001년의 가상 블랙박스 난독화 불가능성 논문에서 이미 제시한 개념이 있다. 바로 구별불가능성 난독화, indistinguishability obfuscation, 소위 “IO”라고 불리는 난독화이다. 구별불가능성 난독화는 두 동등한 프로그램, 즉 크기가 같고 입출력이 같은 프로그램 A와 B를 난독화한 결과 O(A)와 O(B)가 구별 불가능하게 만들어준다.

[정의]구별불가능성 난독화 O는 프로그램 P를 인풋으로 받아 다른 프로그램 O(P)를 아웃풋으로 내는 효율적인 컴파일러로써 다음을 만족한다.

  1. (정확성) P의 입출력을 그대로 보존하여 O(P)(x)=P(x)를 만족한다
  2. (안전성) 크기가 같고 입출력이 같은 프로그램 A,B에 대해 O(A)와 O(B)가 구별 불가능하다.

여기서 구별불가능하다는 것은 임의의 효율적인 알고리즘을 들고와도, X=A 또는 B에 대해 O(X)에서 X가 A인지 B인지 결정할 확률이 맞출 확률이 1/2, 즉 찍는 것에 가깝다는 것.처음 보면 이게 뭔 의미인가 싶다. 나도 그랬다 -_- 하지만 이 정의만으로도 꽤 많은 프로그램의 정보를 숨길 수 있다. 다음 예시를 보자.

은행 등의 앱을 편리하게 이용하기 위해서는 일부 개인정보, 예를 들어 계좌번호와 비밀번호 등을 앱에 저장해놓는 것이 편리하다. 이를 가장 효율적으로 구현하는 방식은 그냥 비밀번호와 계좌번호를 그대로 앱에 저장해놓는 것. 근데 이건 앱을 뜯어볼 수 있으면 비밀번호와 계좌번호를 그대로 볼 수 있고, 바로 개인정보의 유출로 이어진다.

그렇지만 만약 발전한 암호기술을 바탕으로 계좌번호와 비밀번호를 암호화한 상태로 똑같은 태스크를 할 수 있다면? 이 경우에는 앱을 뜯어도 얻을 수 있는 정보가 없다. 바로 IO가 말하는 것은, 이 두 프로그램을 IO로 난독화 한 경우 구별이 불가능하고, 따라서 단순히 구현한 프로그램을 난독화하는 것만으로 프로그램을 뜯어보는 것에 대한 강력한 보안을 얻을 수 있다는 것.


잠깐, 우리는 난독화된 프로그램의 안전성을 논하기 위해 다른 안전한 프로그램을 들고왔다. 이 생각을 천천히 살펴보면 다음과 같은 직관을 얻을 수 있다.

IO를 이용해 난독화한 프로그램은 모든 입출력이 같은 프로그램 중 가장 안전하다!

이런 직관에 착안하여 2007년 골드와서 교수님과 그 제자였던 Guy Rothblum이 Best-possible obfuscation이라는 개념을 제안했다. 즉 난독화된 프로그램이 동등한 프로그램 중 가장 안전해지는 난독화 기술이 무엇인지에 대해 질문을 제시한 것.

저자들의 대답은 다음과 같다.

[정리] 컴파일러 O가 효율적인 IO 방법인 것과 효율적인 Best-possible 난독화인 것은 동치이다.

아주 간단하고 깔끔하다. 이 정리를 조금 더 엄밀하게 말하기 위해 Best-possible obfuscation (BPO)의 정의를 다음과 같이 살짝 정의하자.

[정의] Best-possible 난독화 O는 프로그램 P를 인풋으로 받아 다른 프로그램 O(P)를 아웃풋으로 내는 효율적인 컴파일러로써 다음을 만족한다.

  1. (정확성) P의 입출력을 그대로 보존하여 O(P)(x)=P(x)를 만족한다
  2. (안전성) 임의의 알고리즘 L에 대해서, 그리고 임의의 크기가 같고 입출력이 같은 프로그램 A,B에 대해 다음을 만족하는 효율적인 알고리즘 S가 존재한다:

L(O(A))와 S(B)의 결과 분포가 구별 불가능하다.

정확성은 IO와 정확히 같고, 안전성은 언뜻 봐서는 무슨 뜻인지 꽤 헷갈린다. 대충 그 뜻을 해석해보자면, 난독화 결과 O(A)에서 얻을수 있는 결과는 사실 임의의 다른 동등한 프로그램 B에서 얻을수 있었다는 뜻. 다시 말하면 O(A)에서 유출되는 정보는 다른 모든 동등한 프로그램에서 이미 유출되고 있다는 것.

이제 위 정리는 다음과 같이 증명할 수 있다.

[BPO=>IO] O가 BPO라고 하자. L을 identity, 즉 O(A)의 결과를 그대로 내는 알고리즘이라고 하면 임의의 동등한 두 프로그램 A,B에 대해 (O(A), S(A)), (S(A),O(B))가 각각 구별 불가능하고, 따라서 O(A)와 O(B)도 구별 불가능하다.
[IO=>BPO] O가 IO라고 하자. 임의의 L에 대해 S를 잡아줘야 한다. S(*)=L(O(*))로 정의하면 O(A)와 O(B)가 구별 불가능한 것에서 L(O(A))와 L(O(B))도 구별 불가능.

아주 간단하고 쉽다. 이 논문 이후 난독화의 이론적 연구는 IO가 옳은 목표라는 것에 많이들 동의하게 되었고, 이후 수년간 정체되어 있다가 2013년에 처음으로 그럴듯한 일반적인 난독화 기술이 나온다. 이는 다음 글에서 다룰 예정.

마지막으로 이 논문의 독특한 결과는 다음과 같다.

[정리] P=NP라면 BPO가 존재한다.

암호학적으로는 굉장히 어이없는 결과인게, 암호 시스템이 안전하다는 것은 보통 P≠NP보다도 강력한 결과이다. (즉, 암호가 (다른 가정 없이) 안전하면 P≠NP가 성립한다.) 증명은 자세히는 조금 복잡하고, 대충 아래와 같다.

P=NP라면 임의의 프로그램에 대해 동등한 프로그램 중 "가장 짧은" 프로그램을 효율적으로 찾을 수 있다. 그리고 이 가장 짧은 프로그램은 동등한 두 프로그램 A,B에 대해 같으므로, 이 과정은 IO이고 따라서 BPO이다.

암호란 무엇인가? (2) 안전성의 모델: 완전한 안전성

꽤나 오래 전 쓴 글 암호란 무엇인가? (1)에서 암호학적으로 어려운 문제와 무시할만한(negligible) 사건/확률에 대해 다루었다.

이 글에서는 좀 더 나아가 가장 이상적으로 안전한 암호의 정의, 그렇게 정의하는 합리적인 이유, 그리고 그 한계에 대해 다루겠다. 이 글에서 다루는 암호와 완전한 안전성의 정의는 정보이론(Information Theory)의 아버지로 불리는 클로드 섀넌(Claude Shannon)의 논문 [2]에서 처음으로 제시되었다. 즉, 저 논문 자체가 암호학의 시초격 논문이다. 또한 그 다른 의미에 대해서는 튜링상, 괴델상을 받은 샤피 골드와서(Shafi Goldwasser), 실비오 미칼리(Silvio Micali)의 Probabilistic encryption [3]에서 제시되었다. 이 논문 이전에도 공개키암호에 대한 논의는 있었지만 [3]에서 처음으로 그 안전성에 대한 엄밀한 정의가 논의되었다. 이 공로와 Interactive proof에 관한 논의에 대한 공로로 두 분이 2012년 튜링상을 수상하였다. 놀랍게도 [3]은 골드와서가 대학원생일때 (!) 썼다고 한다 -_-!!

구체적으로, 이 글에서는 다음과 같은 내용들을 다룰 것이다.

  • 암호의 문법과 공격 모델
  • 완전하게 안전한 암호
  • 완전하게 안전한 암호의 성질
  • One-time pad와 그 한계

물론 이 블로그의 특성상 모든것을 엄밀하게 다루지는 않고, 대략적으로 아이디어를 중심으로 설명한다. 사실 그럴수밖에 없는 부분도 있다 -_-.. 안그러면 몇페이지에 걸쳐 여기 언급되지 않는 대상들을 공부하고 돌아와야함. 아주아주 엄밀한 레퍼런스는 골드리치(Oded Goldreich)의 Foundations of Cryptography [4]를 참조하면 좋다. 내 생각에는 거의 암호학의 성서에 가깝다. 혹은 훨씬 최신의 책은 보네(Dan Boneh)와 쇼프(Victor Shoup)의 책 [5]도 아주 좋다.

더 보기

난독화 이야기 (1) 가상 블랙박스 난독화는 불가능하다

한동안 연구 주제로 잡았던 것 중 프로그램을 “읽기 어렵게 만드는” 난독화라는 기술이 있다. 프로그램 난독화 기술은 여러가지 이유로 2013년 정도부터 (이론적) 암호학에서 현재 가장 중요한 주제로 떠올랐다.

특히 구별불가능성 난독화(Indistinguishability Obfuscation)의 존재성이 그 핵심 문제인데, 이를 가장 활발히 풀던 연구자들이 해당 기술이 가능하다고 주장하는 논문을 최근 포스팅했다.

따라서 이를 기념(?)하기 위해 이 방향의 연구의 큰 이야기들을 몇 개의 글로 정리해보고자 한다. 다만 의욕이 항상 없어 다음 이야기가 언제 나올지는 의문 ㅋ

이번 글에서는 프로그램 난독화의 초창기 결과인 2001년의 보아즈 바락(Boaz Barak)등이 증명한 가상 블랙박스 난독화(Virtual Black-box Obfuscation)이 불가능하다는 논문에 대한 이야기를 하고자 한다. 증명이 아주 간단하다!

계속 읽기

암호학 단신

1. 유한체 \mathbb F_{2^{30750}} 위에서의 이산로그가 풀렸다는 소식. 기존의 유한체위의 이산로그 최고기록은 2014년의 \mathbb F_{2^{9234}} 에서의 문제였고, NMBTHRY mailing list 항목에서 확인할 수 있다. 기존 기록은 45 core-year가 필요했고, 이번 기록은 2900 core-year가 들었다고 한다. 지난번 정수위에서의 소인수분해/이산로그 글에서 소개했던 것도 있고, 이런 실험들을 하는 여러 그룹들이 있는가보다.

2. 7월 7일 새로나온 논문에 따르면 소인수분해 등을 푸는데 사용되는 NFS (Number field sieve)의 점근적 시간복잡도가 약간 현실과 맞지 않는다고 한다. 좀 자세히 말하면, NFS의 복잡도는 다음과 같다.

\exp\left(\sqrt[3]{\frac{64}{9}} (\log N)^{1/3}(\log \log N)^{2/3} (1+o(1))\right)

여기서 주로 $o(1)$ 항을 0으로 두고 최적화를 진행하는데, 이 $o(1)$ 항이 0에 가까워지려면 $N>\exp(\exp(25))$정도는 되어야 하고, 따라서 지금까지 이를 이용한 최적화가 현실적으로 다양하게 약간 잘못되었을 수 있다고. 이런걸 고려하면 소인수분해를 약간은 더 빨리할 수 있을듯.

3. 암호학적 증명을 컴퓨터로 확인할 수 있다는 소식. 특히 IND-CPA 공개키 암호를 IND-CCA후지사키-오카모토 변환의 대양자 안전성 증명을 컴퓨터로 확인했다는 논문.

논문에 따르면 암호학계의 증명이 틀리는 것은 꽤나 흔한 일이라고 한다. 예를 들어 일전에 소개한 OCB2의 증명이 틀렸다는 소식이나, 더 이전에는 RSA-OAEP라는 산업에서도 굉장히 잘 쓰이는 RSA의 변형의 안전성이 틀렸고, 여러번 수정되었다는 사실 (링크된 위키페이지에도 잘 소개되어있다.), 그리고 난수함수와 난수행렬이 구별이 어렵다는 유명한 PRF/PRP switching lemma의 교과서에도 소개되던 증명이 틀렸다는 사실 등. 그래서 Code-based game-playing proof라는걸 로가웨이와 벨라르가 소개하며 안전성 증명의 컴퓨터 검증의 방향을 제시했고, 그 이후 여러가지 논문이 정말 있었나보다. (이 논문 등) 이번에는 그런 방향을 양자안전성 증명까지 확장한듯. 증명 검증 툴은 Coq정도만 알고있었는데, 생각보다 다양한 것이 있군.

양자컴퓨터를 이용한 소인수분해는 어디까지 왔을까?

이 글에서는 피터 쇼어(Peter Shor)가 1994년 (Arxiv논문 링크), 이제는 쇼어의 알고리즘이라고 불리는 양자 소인수분해 알고리즘을 제안한 이후, 여러가지 측면에서 양자컴퓨터가 소인수분해 문제를 풀기에 얼마나 발전했는지, 그리고 얼마나 빨리 소인수분해를 할것으로 예측하고 있는지를 정리하고자 한다.

이 글은 다음과 같이 구성된다.

  1. 쇼어알고리즘의 간략한 설명
  2. 쇼어알고리즘의 구체적 구현과 최적화 논문들
  3. 양자컴퓨터를 이용한 실제 소인수분해 실험들

그치만 결론만 먼저 요약하면 앞선 글에서 소개했듯 RSA-240,250, 즉 약 800비트 정수를 소인수분해 하는데 2000 core-년이 필요한 반면, 2천만 큐비트의 에러가 있는 양자컴퓨터가 있다면 그럴듯한 가정 하에 RSA-2048, 즉 2048비트 정수를 소인수분해 하는데 8시간이면 충분하다고 한다! 이게 바로 양자컴퓨터의 위력 ㅡㅡ!

다만 쇼어알고리즘을 양자컴퓨터로 실제로 돌리는 것은 (내가 아는바에 의하면) 딱히 실험적으로 진행한 바가 없다. 쇼어알고리즘에 어느정도 치팅을 한 버젼이나, Adiabatic quantum computer등을 이용한 방식이 진행되었을 뿐이다. 치팅을 한 버젼도 최대한 치팅을 한것은 아니고, 그럴듯한 정도로 해서 양자 소인수분해에 대한 어느정도 근거를 주기는 하지만 말이다.

계속 읽기

OCB2 인증암호는 안전하지 않다

얼마전 Crypto 2020에 발표될 논문들이 공개되었다. 이중에 재밌을만한걸 소개해보려 했는데, 딱히 비-암호학자에게 흥미로운 내용은 안보이는듯 -_- 대신 작년 Crypto 2019에서 발표되고 Best paper award를 받은 결과인 OCB2 인증암호에 대한 공격에 대해 살짝 소개해보려 한다.

OCB2는 필립 로가웨이(Phillip Rogaway)가 2004년 Aisacrypt에서 소개한 블럭암호(의 Mode of operation)를 이용한 인증방식으로, 2001년 로가웨이가 미히르 벨라르(Mihir Bellare)와 존 블랙(John Black)과 함께 만들었던 OCB1의 변형이다. 이후 OCB3도 제안되었는데, OCB1,2,3 모두 ISO/IEC 19772:2009로 아예 스탠다드로 정해진 방식이다. 또한 이전의 많은 연구에서 그 이론적 안전성이 다양하게 증명되고 뒷받침 되었다.

그런데 놀랍게도 Inoue등에 따르면 이 인증암호가 엄청나게 간단한 공격으로 평문이 복원되는 등의 문제가 있다고 한다! 이 논문의 결과로 OCB2는 ISO/IEC 스탠다드에서 제외되었다. 어떻게 이런 일이 일어날 수 있을까?

답은 간단하다. 로가웨이가 증명에서 실수한 부분이 있기때문 -_- 엄청 자세히 본건 아닌데, 로가웨이는 OCB2의 설계의 기반이 되는 방식으로 XEX*라는 새로운 연산을 정의했다. 이는 XE와 XEX라는 간단한 연산의 혼합인데, XEX*는 인풋을 받을때 태그를 같이 받아서 XE를 적용할지, XEX를 적용할지 선택할 수 있다. 근데 XEX*는 같은 메세지에 대한 다른 태그(즉, XE와 XEX)를 적용할 수 있다면 전혀 안전하지 않다고 한다.

로가웨이도 이걸 알았는데, OCB2에서 그런 방식의 계산이 없다고 생각한 듯 했나보다. 꽤나 subtle한 문제인가봄. 그런 가정 하에서는 안전성 증명이 가능하다고 한다. 근데 사실은 가능했던것 -_- 이게 15년 넘게 간과되고 있었고, 이번에 이게 사실 문제라는게 지적되었던 것. 증명이 별로 어려운 것도 아닐텐데, 조금 어이가 없다.

다행인 점이 몇가지 있는데,

  • OCB1과 OCB3는 XEX*를 쓰지 않고, 그래서 이 공격에 영향을 받지 않는다. (뿐만 아니라 증명이 아마 틀리지 않을것이라고 믿고있다.) 참고로 현재 가장 많이 쓰이는 것은 효율성 등의 이유로 OCB3. 사실은 로가웨이도 예전부터 OCB3를 쓰라고 추천했다고 한다. 그리고 OCB2도 XEX*대신 그냥 XEX를 쓰면 안전하다고 한다.
  • OCB2는 특이하게 특허가 걸려있고, 그래서 OCB2를 이용하는 예시가 거의 없다! 한 트위터 타래에서는 암호 특허의 최초의 현실적 쓸모라고 비꼬았다 ㅋㅋㅋ

이 문제가 발견된 이야기도 꽤 흥미로운데, 저자 카즈히코 미네마츠(Kazuhiko Minematsu)가 대학원생인 아키코 이노우에(Akiko Inoue)에게 교육를 목적으로 OCB2의 안전성 증명을 확인했다고 한다. 근데 두 사람은 어느순간 위에 언급한 증명의 문제를 찾아내었고, 크지 않은 갭이라고 생각해서 메꾸려고 한참 노력하다가 결국 existential forgery라는 공격(인증 부분을 깨는것)을 찾았다고 한다. 그래서 이걸 ePrint아카이브에 올리고, 그 두어주 후 베르트람 포테링(Bertram Poettering)과 테츠 이와타(Tetsu Iwata)가 각각 IND-CCA, OW-CCA공격(혹은 평문 복호화)을 찾았다고 한다. 논문의 Appendix A에서 대충 확인할 수 있음 ㅋ.

사실 나는 다른 사람에게 썰을 듣고 증명과 설계가 달라서 공격이 된거로 알고 있었는데, 알고보니 증명 자체가 틀린거네 -_- 아마 그 사람이 결론의 다음 문장을 읽고 착각한것 같다.

This was possible due to the discrepancy between the proof of OCB2 and the actual construction.

실제 공격에 대한 설명은 논문이나 유튜브에 기록된 발표, 혹은 react0r 블로그글정도에 꽤 잘 정리되어 있는듯.

암호학계에서는 증명이 꽤 그럴듯하면 어느정도 대충 읽는 경향이 있는것같다. 특히 로가웨이정도면 굉장히 유명한 학자라서 더 그랬던듯. 결론부에 따르면 이거 말고도 이전에 몇몇 안전성이 증명된 스킴들이 틀린 부분이 발견된 적이 있나보다. 다행히도 듣기로는 스탠다드로 정해진것 중에서 공격이 된건 OCB2가 처음이라는듯. 정말 암호 특허의 현실적인 쓰임이다 -_-

여튼, 논문에 나온대로 결론은 안전성 증명의 퀄리티와 검증이 굉장히 중요하다는 것!

암호란 무엇인가? (1) 암호학적으로 어려운 문제

인터넷 세상에 살다보면 RSA니 SHA니 뭐니 암호란게 굉장히 자주 접하는 대상이고, 피할 수 없는 대상이다. 따라서 학술적 커뮤니티도 꽤나 크고 다양하게 연구되고, 그 나름의 엄밀성이 다 잘 정의되어있다. 그런데 한국 커뮤니티 여기저기에서는 (아마 외국에서도?) 이런 논의를 다루는 글을 찾아보기가 굉장히 힘들다. (개인적으로는) 더 이해하기 힘든 양자역학 등도 훨씬 다양한 글에서 소개하는데말이다. 기껏해야 암호 encryption, decryption이 뭔지, public key encryption이 뭔지 다루는 등등 정도이고 RSA라는게 있고, 이게 소인수분해가 안전하면 안전하다는 거짓말을 아무 설명없이 하는정도가 끝인듯. 심지어 대학교 수업들에서도 잘 깊게 다루지 않는듯. 그래서 언젠가 이걸 정리해야지 생각하고 지난달쯤 DC 수잘갤약간 정리하다가 힘이 빠져서 그만 둠. 그래도 공부하다보니 딴짓을 하고싶어서 여기 저 글들을 훨씬 더 다듬어서 새로 정리함.

계속 읽기

RSA-240, 250이 깨졌다는 소식

다들 아시는 RSA암호의 안전성 기반의 가장 기초인 소인수분해를 빨리 하는 챌린지인 RSA Factoring Challenge가 있다. 이 챌린지는 1991년에 시작되어 2007년에 이제 우리가 소인수분해를 잘 이해하는것 같다는 이유로 -_- 중단되었는데, 당연히 그 이후에도 계속 연구되었다. 기존 최고 기록은 2009년 Kleinjung et al.의 768bit의 자연수를 소인수분해하는 RSA-768. 이 문제는 2000 core-년 (즉 single core로 2000년정도) 정도의 연산시간에 해결했었음.

이번에 발표된 결과는 Boudot et al.의 결과로 RSA-240, 250, 즉 10진법으로 240, 250자리를 갖는 수들을 소인수분해한 것이다. 즉 각각 795, 829비트를 갖는 자연수를 1000, 2500 core-년씩 써서 소인수분해했다고 한다. 쓴 라이브러리는 Cado-NFS라고 하는데, 이들의 메일링리스트에서는 이 결과가 이미 작년 12월, 올해 2월에 각각 발표되었었나보다. 또 DLP-240도 3000 core-년에 해결한 모양. 이 결과는 2016년 발표된 DLP-768의 5300 core-년 해결보다 훨씬 빠르다. 이런것들은 완전 새로운 알고리즘인건 아니고, 오래전부터 써오던 NFS 알고리즘을 이리저리 변형하고 파라미터를 훨씬 잘 잡은것에서 나온것인가봄.

이 분야도 계속 어찌저찌 발전은 계속 하고있나보다. 여튼 현재 한국의 많은 암호시스템은 RSA-2048에 해당하는 파라미터를 쓰니 아주 안전하다 ㅎㅎ. 개인적인 생각으로는 고전컴퓨터가 이걸 깨는거보다 양자컴퓨터가 나와서 깨는게 더 빠를것같음.