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는 실용적인 암호 소프트웨어 보안의 선구자임. 이 도전 과제의 몇몇 내용은 두 사람이 주류 소프트웨어에서 공격을 수행한 뒤에야 이해할 수 있었음.
법적 고지
- 개별 과제 제출물의 소유권은 제출자에게 있으며, 오픈 소스 라이선스로 배포될 수도 있고 아닐 수도 있음.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요