아마추어 암호 설계자에게 주는 충고 by 브루스 슈나이어

2005.12.22 00:18

단장 조회 수:983 추천:30

홍순명님이 번역하여 올리신 암호체계에 대한 글입니다. 문제되면 삭제해주세용~ ^^


이 글을 쓴 Schneier는 암호학계의 베스트셀러 중 하나인 'applied cryptography'의 저자이며
자신이 만든 twofish란 암호가 미국의 차세대 암호 표준인 AES의 최종 후보에 오른 바 있기도 합니다.



--
아마추어 암호 설계자에게 주는 충고
(Bruce Schneier)

축하한다. 당신은 방금 대단한 새 암호를 발명했다. 그래서 그걸 갖고 뭔가 해보려고 한다. 당신은 이 분야에 있어 신참이기 때문에 아무도 당신의 이름을 들어본 적이 없고 암호분석가(cryptanalyst)로서 아무런 자격도 없다. 따라서 당신은 잘 알려진 암호학자들이 당신의 작품을 봐주기를 원한다. 그러기 위해서는 무엇을 할 수 있을까?

불행하게도 당신 앞에는 험난한 길이 가로놓여 있다. 내 경우 아마추어 암호설계자가 보내오는 새로운 암호 설계를 매주 두건 정도는 받아보고 있다. 그 암호들이 안전할 확률은 희박하다. 그중 하나라도 안전하면서도 효율적인 것이 있을 가능성은 무시할 수 있을 정도이다. 그중 하나라도 실제로 돈값을 할 가능성은 존재하지 않는다고 해도 과언이 아니다.

가장 무능한 아마추어로부터 최고의 암호학자에 이르기까지 누구라도 자신이 깰 수 없는 알고리즘을 만들 수 있다. 그것은 어렵지도 않다. 진짜 어려운 것은 여러 해 동안의 연구에도 불구하고 다른 사람이 아무도 깰 수 없는 알고리즘을 만드는 것이다.
그리고 그것을 증명하는 유일한 방법은 그 알고리즘을 일류 암호학자들에 의한 다년간의 분석의 대상이 되게 하는 것이다.

“세계의 일류 암호학자”들은 여러 암호들을 깨왔다. 학계의 문헌 곳곳에는 그들의 분석에 의해 해독된 암호들의 잔해들이 널브러져 있다. 하지만 그들은 바쁜 사람들이다. 그들은 모든 것을 깨부술 시간이 없다. 그들은 무엇을 살펴볼 것인지 어떻게 결정하는가?

이론적으로 말하면 암호학자들은 안전할 가능성을 충분히 가진 암호들만을 살펴보아야 한다. 그런데 누구나 자신이 생각하기에는 안전한 것 같은 암호를 만들 수 있는 이상, 경청할만한 실력을 가진 사람들에 의해 만들어진 암호만을 살펴보아야 한다는 것을 의미한다.
누군가 임의의 사람이 자신이 해독할 수 없는 암호를 만들었다고 해도 아무도 주목하지 않는다. 하지만 세계 최고의 암호학자들 중 한명이 자신이 깰 수 없는 암호를 만들었다고 선언하면 이제 그것은 주목할 가치가 있는 것이 된다.

현실 세계는 그렇게 깔끔하지 않다. 암호학자들은 흥미롭거나 논문을 쓸 수 있을 정도의 결과를 얻을 수 있을 법한 알고리즘을 살펴본다. 이는 그 사람들이 저명한 암호학자가 만든 것, 현실세계에서 널리 쓰이고 있는 것(휴대폰, 유료케이블TV 디코더, 마이크로소프트 제품 같은), 학술지에 실렸던 알고리즘들을 살펴본다는 것을 의미한다. 모르는 사람이 인터넷 게시판에 올린 알고리즘 같은 것은 눈길 한번 주지 않는다. 특허출원 되었으나 미공표된 알고리즘이나 잘 알려지지 않은 제품에 내장된 “소유권이 존재하는”(proprietary) 알고리즘도 마찬가지다.

암호학적 알고리즘이 발표되기란 어렵다. 대부분의 학회나 워크샵은 방대한 분석이 첨부되지 않은 이상 모르는 사람이 투고한 디자인을 받아주지 않는다. 이것은 공정하지 않은 것처럼 보일지도 모른다. 무명의 암호설계자는 “그들이 무명이기 때문”에 자신의 암호를 발표할 수 없다. 그리고 그렇기 때문에 아무도 그들의 작업을 볼 수 없을 것이다.
현실에서 그들이 한 “유일한 일”이 암호를 설계한 것이라면 그것은 아마도 발표될 가치가 없을 것이다. 무명은 기존의 암호들을 해독한 내용을 발표함으로서 유명이 될 수 있다. 대부분의 학회들은 이러한 논문을 받아준다.

내가 『응용 암호학(Applied Cryptography)』이란 책을 쓰기 시작했을 때, 나는 기존의 암호설계들을 분석하는데 오랫동안 노력해온 사람들만이 좋은 암호 알고리즘 설계자가 될 수 있다는 격언을 들었다. 그 격언은 합당한 것처럼 느껴졌고 나는 그것을 믿었다. 세월이 흐르고 내가 암호 분석과 설계에 더 오랜 시간을 보냄에 따라 그 격언의 진실성은 더욱 더 강해져 갔다. Twofish 설계를 위해 일하면서 나는 이것을 더욱 더 절감했다.
암호의 강도는 그것의 설계에 있지 않다. 그따위 것은 누구나 설계할 수 있다. 진정한 힘은 그것의 분석에 있다. 우리는 Twofish를 분석하는데 1000인시 이상의 시간을 소모했고, 단순화된 버전들과 변형들을 깨보고, 수정사항들을 연구했다. 그렇지 않다면 우리는 그 분석을 해낼 수 없었을 것이고, 분석에 확신을 가질 수도 없었을 것이며, 전원이 많은 다른 알고리즘 설계들을 해독해 온 경험을 지닌 설계팀을 가질 수도 없었을 것이다.

어떤 암호학자 친구가 자신이 발명한 암호를 갖고 그를 귀찮게 한 아마추어에 대한 이야기를 해준 적이 있다. 이 친구는 그 암호를 해독했다, 그러자 아마추어는 그것을 “고친” 수정판을 내놓았고 이 친구는 그것을 다시 깨야 했다. 이 왔다갔다는 이 친구가 넌덜머리를 내며 두 손 들 때까지 몇 차례나 반복되었다. 아마추어가 이 친구의 견해를 듣기 위해 그를 방문했을 때, 암호학자는 테이블 위에 세 개의 봉투를 내놓았다.
“각각의 봉투에는 당신 암호에 대한 해독법이 들어 있소. 하나를 골라서 읽어 보시오. 그리고 당신이 나머지 두 공격을 스스로 알아낼 때까지 다시 나를 찾아오지 마시오.”
아마추어는 그 뒤로 다시는 나타나지 않았다고 한다.

나는 전적으로 부정적인 이야기를 하려는 것이 아니다. 사람들은 이따금씩 강한 암호들을 설계하기도 한다. 아마추어 암호학자조차도 강한 암호들을 만들 수 있다. 그러나 당신이 암호학계에 알려져 있지 않고, 다른 암호학자들이 당신의 작업을 봐주길 원한다면 다음과 같은 일을 해야 한다.

1. 당신의 암호를 표준적인 표기법(standard notation)을 사용해 기술하라. 이는 C 코드를 의미하지 않는다. 이 바닥에는 학술문헌에서 사용되는 확립된 전문용어와 기호들이 있다. 그것을 배워 사용하라. 당신만의 특수한 표기법을 배우려고 할 사람은 아무도 없다.

2. 다른 설계들과 당신의 암호를 비교하라. 십중팔구 그것은 예전에 발표된 몇몇 개념들을 사용하고 있을 것이다. 그것들을 참조(reference)하라. 이는 다른 사람들이 당신의 작업을 이해하기 쉽도록 만들어 줄 것이고, 다른 한편으로 당신이 학술문헌을 이해하고 있음을 보여줄 것이다.

3. 왜 당신의 암호가 문헌에 언급된 주요한 공격기법 각각으로부터 면역성을 갖고 있는지를 설명하라. 단순이 “이것은 안전합니다.”라고만 말하는 것은 좋지 않다. 당신은 왜 이것이 그러한 공격들로부터 안전한지 보여줘야만 한다. 이것은 당연한 이야기지만 당신이 단순히 문헌을 읽어봤을 뿐만 아니라 그것을 이해하고 있을 것을 요구한다. 이 과정에 여러 달이 걸리고 방대한 수학적 문서가 나올 것임을 각오하라.
그리고 기억해 둬라. 통계적 테스트는 그다지 의미가 없다.

4. 왜 당신의 암호가 기존의 대안들보다 나은지를 설명하라. 기존의 것들보다 명백한 이점이 없는 한 뭔가 새로운 것을 살펴보아야 할 이유가 없다. 그것은 펜티엄에서 더 빠른가? 하드웨어로 만들었을 때 더 작은가? 어떤가? 나는 종종 이런 이야길 한다, 충분히 많은 라운드가 있다면 웬만한 것은 다 안전하다고. 당신의 설계는 괄목할 만한 성능상의 장점이 필요하다. 그리고 “이것은 깰 수 없습니다”는 장점이 아니다. 그것은 필수조건이다.

5. 암호를 공표하라. 경험적으로 볼 때 공표되지 않은 암호들은 대부분 매우 취약하다. 암호를 비밀로 하는 것은 일단 암호가 널리 사용되기 시작하면 보안성을 증가시켜주지 못한다. 그리고 당신의 암호가 안전하기 위해 비밀이 유지될 필요가 있다면 그것은 어쨌든 쓸모가 없다.

6. 암호에 특허를 걸지 마라. 당신은 암호를 팔아서 돈을 벌 수 없다. 이 세상에는 단순히 너무 많은 우수한 공짜 암호들이 널려 있다. AES에 암호를 제출한 모든 사람들은 그것을 기꺼이 포기했다. 제안된 것들 중 많은 것은 이미 공개 암호였다. 만약 당신이 당신의 설계에 특허를 낸다면 모든 사람들은 단순히 다른 것을 쓰고 말 것이다. 그리고 (당신이 돈 주고 그 일을 시키지 않는 이상) 아무도 당신을 위해 그것을 분석해 주지 않을 것이다. 왜 그들이 당신을 위해 공짜로 그 일을 해야 하나?

7. 참을성을 가져라. 현재 당장 살펴보아야 할 많은 암호들이 있다. AES 경쟁은 암호학자들에게 분석해야 할 15개의 새로운 설계들을 내놓았다. 그리고 우리는 2000년 봄까지 승자를 가려내야만 한다. 여유시간이 있는 훌륭한 암호학자라면 이들 설계들을 캐고 있을 것이다.

당신이 알고리즘을 설계하고 싶다면, 거기 있는 것들 중 하나를 깨는 것으로부터 시작하라. 이미 깨어진 알고리즘을 (답을 들춰보지 말고) 깨는 연습을 하는 것부터 시작하라. 다른 사람이 깬 적이 없는 어떤 것을 깨보라. 또 다른 것을 깨보라. 당신의 해독결과를 공표하라. 자신이 기존의 알고리즘을 깰 수 있는 사람임을 입증했을 때, 당신은 새 알고리즘을 설계하기 시작할 수 있다. 그 전에는, 아무도 당신을 심각하게 상대해주지 않을 것이다.

암호를 만드는 것은 쉽다. 그것을 분석하는 것은 어렵다.

댓글 0

파일 첨부

여기에 파일을 끌어 놓거나 파일 첨부 버튼을 클릭하세요.

파일 크기 제한 : 0MB (허용 확장자 : *.*)

0개 첨부 됨 ( / )
 
목록
번호 제목 글쓴이 날짜 조회 수
24 이펙터 단장 2006.06.14 962
23 R6002 floating point not loaded ??? 단장 2006.05.16 973
22 해외 취업, 미국으로 가는 길 단장 2006.04.26 849
21 부동산 매수 시 고려해야 할 38가지 단장 2006.04.19 882
20 형법총론 핵심정리 단장 2006.04.19 1246
19 VC 디버그빌드에서 들어가는 쓰레기값들의 의미 단장 2006.04.15 964
18 일어 12월명 [1] 단장 2006.03.21 933
» 아마추어 암호 설계자에게 주는 충고 by 브루스 슈나이어 단장 2005.12.22 983
16 원핸드 스트링 기본. 마운트. [1] 단장 2005.12.05 1075
15 요요회사간의 베어링 규격 단장 2005.12.05 1084
14 니콜라 테슬라 단장 2005.11.26 1168
13 비싼 카메라 이야기 단장 2005.11.21 1000
12 귤화위지의 고사 단장 2005.10.03 924
11 오자서 평전 단장 2005.09.26 855
10 순수 탄소 - 퓔러렌 단장 2005.07.19 989
9 Direct3D API들의 실행 사이클 단장 2005.07.15 988
8 음식 칼로리표 -_-;;; [3] 단장 2005.07.14 1040
7 CPU 평균온도 단장 2005.07.13 1087
6 AMD CPU 리퍼런스 테이블 단장 2005.07.11 978
5 맥 탄생비화 (1) 단장 2005.07.04 1177