TL;DR

  • Cryptopals는 실제 시스템과 현대 암호 구성의 약점에서 도출한 공격 과제를 제공하며, 이를 풀면서 암호 시스템의 구축 방식과 공격 방법을 익히는 구성임.
  • 과제는 규칙 없이 누구나 풀 수 있으며, 현재 8개 세트가 있고 점진적으로 어려워짐.
  • 필요한 수학과 암호 지식은 없으며, 어떤 언어든 능숙하게 코딩할 수 있는 능력이 필요함.
  • 암호 소프트웨어 보안은 1990년대 소프트웨어 보안과 비슷한 상태이며, 작은 구현 실수만으로도 안전해야 할 시스템이 쉽게 공격될 수 있다는 문제의식임.
  • Cryptopals의 최초 제작자는 Thomas Ptacek, Sean Devlin, Alex Balducci, Marcin Wielgoszewski이며, Set 8부터 Sean Devlin과 NCC Group 암호화 서비스 팀이 유지·확장함.

도전 과제 소개

  • Maciej Ceglowski가 쓴 블로그 글을 먼저 읽어보는 것을 권함.
  • 실제 암호 시스템의 공격 사례를 보여주는 연습 문제 모음임.
  • 수업을 듣거나 책을 읽는 대신 문제를 직접 풀며 암호를 배우는 방식임. 문제는 실제 시스템과 현대 암호 구성의 약점에서 도출되며, 기반이 되는 암호 개념을 스스로 배울 수 있을 만큼의 정보를 제공함.
  • 과제를 마치면 암호 시스템이 구축되는 방식뿐 아니라 공격받는 방식도 상당 부분 이해하게 됨.

규칙은 무엇인가?

  • 규칙은 없음.
  • 수년 동안 이메일로 과제를 운영하면서 참가자에게 결과를 공유하지 말아 달라고 요청했으며, 명예에 의존하는 방식이 잘 작동함.
  • 이제는 그런 의례를 거두고 모든 사람이 풀 수 있도록 과제를 공개함.

수학은 얼마나 알아야 하는가?

  • 문제의 수학이 어렵다면 주변의 중학교 3학년 학생에게 도움을 받을 수 있을 정도임.
  • 현대 암호 공격 상당수에는 어려운 수학이 많이 필요하지 않음.

암호 지식은 얼마나 필요한가?

  • 필요한 암호 지식은 없음. 그 점이 과제의 취지임.

그럼 무엇을 알아야 하는가?

  • 어떤 언어로든 능숙하게 코딩할 수 있어야 함.
  • 제출에 사용된 언어는 C, C++, Python, Ruby, Perl, Visual Basic, X86 Assembly, Haskell, Lisp임.
  • 다른 언어로 도전해도 좋으며, 새 언어를 배우는 방법으로도 과제를 활용할 수 있음. Clojure나 Rust를 시작할 기회가 될 수 있음.

무엇을 기대해야 하는가?

  • 현재 과제는 8개 세트이며, 세트가 진행될수록 난도가 높아짐.
  • 과제는 실제 취약점을 바탕으로 하며, 퍼즐이 아니고 참가자를 함정에 빠뜨리도록 설계되지 않음.
  • 일부 공격은 기발하며, 그런 암호 공격 방식에 익숙하지 않다면 퍼즐 풀이를 즐기는 태도가 도움이 됨.
  • 1990년대 초 MTV 힙합을 좋아하면 도움이 될 수도 있음.

왜 이런 과제를 만들었는가?

  • 암호에 익숙하지 않거나 지식 대부분이 《Applied Cryptography》 같은 책에서 비롯됐다면, 암호 대부분이 치명적으로 깨져 있다는 사실이 놀라울 수 있음.
  • 현재 의존하는 시스템 가운데 치명적으로 깨진 사실이 알려지지 않은 시스템도, 그렇게 깨지기를 기다리는 상태임. TLS 1.2, SSH 2, OTR가 설계대로 계속 안전할지 확신하는 사람은 없음.
  • 현재 암호 소프트웨어 보안 상태는 1990년대 소프트웨어 보안 상태와 비슷함. 특히 1995년 무렵까지는 사람이 만든 소프트웨어가 수를 세는 데 실패할 수 있다는 점이 널리 알려지지 않았음.
  • 그 결과 버퍼 크기를 제대로 정하지 못했고, 메모리 손상 취약점을 긴급히 수정하는 작업이 15년 동안 이어지면서 인류는 수십억 달러의 정리 비용을 부담함.
  • 수 세기는 어려운 문제가 아니지만 암호는 어려움. 버퍼 크기를 잘못 정하게 만드는 실수는 몇 가지뿐인 반면, 원자보다 많은 CPU 코어를 가진 공격자에게도 안전해야 할 암호 시스템을 Perl 스크립트와 15초 만에 풀 수 있게 만드는 미묘한 실수는 수십 개, 어쩌면 수백 개임.
  • 이를 그대로 믿을 필요 없이 과제를 직접 풀어보면 확인할 수 있음.
  • 사람들은 이 사실을 이미 알고 있다고 생각하지만 실제로 체감하지는 못함. 가장 잘 알려진 공격을 직접 구현해본 사람이 매우 적기 때문이라는 것이 과제의 문제의식임.

어떻게 시작하는가?

  • 여기서 시작하면 됨.

제작자

  • 최초 제작자:
  • Thomas Ptacek (@tqbf)
  • Sean Devlin (@spdevlin)
  • Alex Balducci (@iamalexalright)
  • Marcin Wielgoszewski (@marcinw)
  • Set 8부터 Sean Devlin이 NCC Group의 Cryptography Services Team과 함께 Cryptopals를 유지·확장함.
  • 기여자와 기여 내용:
  • Nate Lawson은 암호에 관해 알고 있는 거의 모든 것을 전수함.
  • Trevor Perrin은 그중 일부를 Nate에게 가르침. 지난 5년간 TLS에 대한 모든 성공적인 공격의 지적 기원이 Trevor라는 설득력 있는 이야기가 있음.
  • Thai Duong과 Juliano Rizzo는 실용적인 암호 소프트웨어 보안의 선구자임. 이 도전 과제의 몇몇 내용은 두 사람이 주류 소프트웨어에서 공격을 수행한 뒤에야 이해할 수 있었음.

법적 고지

  • 개별 과제 제출물의 소유권은 제출자에게 있으며, 오픈 소스 라이선스로 배포될 수도 있고 아닐 수도 있음.