Summary

  • RFC 1750은 통계상 무작위처럼 보이는 출력과 공격자가 예측하기 어려운 초기 상태를 구분했다. 컴퓨터의 대략적인 시작 시간을 알면 시계값으로 시작한 생성기의 후보를 좁힐 수 있다.
  • 문서는 시계, 하드웨어 일련번호, 사람의 입력, 패킷 도착 시각을 검토했다. 2005년 RFC 4086은 엔트로피 원천과 풀에 관한 논의를 넓히며 이 문서를 대체했다.

컴퓨터가 화면 가득 암호키를 찍어 낸다. 숫자는 복잡하고, 가능한 조합은 천문학적이다. 그런데 공격자는 그 조합을 앞에서부터 세지 않는다. 컴퓨터가 켜진 시간을 먼저 찾는다. 생성기의 씨앗이 시계였다면, 검토할 값은 그 시간대의 몇 가지 후보로 줄어든다.

1994년 12월 발표된 RFC 1750이 겨눈 지점이 여기다. 소프트웨어 암호 기술이 네트워크에 퍼지면서 비밀번호와 암호키에는 남이 맞히기 어려운 숫자가 필요해졌다. 문서의 저자들은 알고리즘의 이름에서 한 걸음 물러나, 그 숫자가 처음 어떻게 생겨났는지 살폈다. 공격자에게는 완성된 키 전체보다 생성 당시의 환경을 재현하는 편이 쉬울 수 있었다.

겉보기의 불규칙성과 보안에 필요한 예측 불가능성은 다르다. 의사난수열이 통계 시험에서 좋은 점수를 받아도 초기 상태를 아는 사람은 같은 열을 다시 만들 수 있다. RFC는 공개 CRC 표를 예로 들었다. 숫자의 분포는 그럴듯해도 표 자체는 누구나 읽을 수 있다. 숫자들이 줄을 엉망으로 선 것처럼 보여도, 공격자 손에 명단이 있다면 소용없다.

시계는 손쉬운 재료였다. 어떤 시스템은 마이크로초까지 값을 내놓는다. 하지만 표시 자릿수가 모두 새로운 불확실성은 아니다. RFC 1750은 실제 장치와 운영체제에 따라 하위 자릿수가 반복되거나, 소프트웨어가 연속값을 인위적으로 만들어 내는 경우를 설명했다. 장치 일련번호도 길고 고유할 수 있지만 제조사와 발급 방식의 흔적을 담는다. 고유한 번호와 짐작하기 어려운 번호는 같은 말이 아니다.

사람과 네트워크가 만드는 움직임은 어떨까. 키를 누르는 간격, 마우스 움직임, 패킷이 도착하는 순간에는 변화가 있다. 그 변화를 프로그램이 정말 받는지가 문제다. 키보드 버퍼는 시간 차이를 숨길 수 있고, 사용자의 행동은 반복될 수 있다. 멀리 있는 공격자가 패킷의 도착 리듬에 영향을 줄 수도 있다. 원천의 이름보다 관측 경로와 상대방의 개입 가능성이 중요했다.

복잡한 처리에 관한 RFC의 비판은 특히 날카롭다. 뛰어난 생성기에 현재 시각을 초기값으로 넣고 아주 긴 비트열을 뽑아 보자. 시작 시간을 대략 아는 공격자는 가능한 시계값을 차례로 넣어 결과를 비교한다. 출력 길이는 늘어나도 출발점의 종류는 늘지 않는다. 주방장이 같은 재료 몇 개로 메뉴판을 백 쪽 채웠다고, 식자재 창고가 백 배 커진 것은 아니다.

당시 USENET 자료를 이용한 예도 같은 함정을 보여 준다. 공격자도 가진 커다란 공개 자료에서 32바이트를 떼어 낸다면, 숨겨지는 것은 주로 어느 지점에서 떼었는가 하는 선택이다. RFC는 그 예의 전제 아래 이 선택의 불확실성을 최대 약 25비트로 보았다. 이는 1994년의 특정 가정에 붙은 수치다. 서로 가진 창고의 크기를 그대로 비밀의 크기로 계산할 수는 없다.

문서가 제시한 일은 순서가 있다. 외부에서 예측하기 어려운 변화를 얻고, 그 변화를 샘플링 과정에서 잃지 않고, 여러 기여를 신중하게 섞는다. 그다음 생성기가 필요한 만큼 숫자를 내놓는다. 마지막 단계는 이미 가진 비밀 상태를 활용한다. 맨 앞에서 얻지 못한 놀라움을 나중에 계산만으로 보충할 수는 없다.

2005년 6월의 RFC 4086은 RFC 1750을 대체하면서 링 오실레이터, 엔트로피 풀, 당시 운영체제의 생성 방식을 더 폭넓게 다뤘다. 도구는 십 년 사이 바뀌었다. 검사 순서는 여전히 단순하다. 암호키가 얼마나 긴지 세기 전에, 첫 씨앗을 누가 어떤 근거로 얻었는지 확인한다. 시계가 답이라면 도둑도 시간을 읽을 줄 안다.