요약
- RFC 1938은 내림차순 단방향 해시 체인으로 수동적 비밀번호 리플레이에 저항했다: 서버는 응답을 해싱했을 때 저장된 검증값이 나오는 경우에만 응답을 수락했고, 수락된 응답으로 그 검증값을 교체했다.
- 따라서 성공은 다음 진위 조건을 바꾸었다. 원자적 갱신, 동시 세션 방어, 시퀀스 소진, 안전한 재초기화는 인증 자체의 일부였다.
- 이 설계는 비밀 문구를 네트워크에 보내지 않게 했지만, 세션을 암호화하거나 능동적 공격을 막지는 못했다. 이후 HOTP와 TOTP는 서로 다른 이동 상태 시스템을 정의했다.
증명과 동시에 만료되는 사실
두 터미널이 거의 같은 순간에 동일한 유효한 비밀번호를 제출한다고 상상해 보자. 일반적인 재사용 가능 비밀번호 시스템에서는 두 비교가 모두 참을 반환할 수 있다.RFC 1938이 규정한 시스템에서는 하나만 경계를 넘어야 한다. 첫 번째가 성공하면 서버의 기록이 바뀐다. 두 번째는 더 이상 동등한 증명이 아니며, 응답의 어떤 문자도 바뀌지 않았음에도 그렇다.
이것이 문서의 지속적인 아이디어다.RFC Editor 기록은 Proposed Standard를 1996년 5월로 기재하고 현재는 폐기(obsolete)로 표시하며 RFC 2289를 가리킨다. 그러나 역사적 관심은 상태 표기보다 “일회용 비밀번호”라는 문구 뒤에 숨은 상태 기계에 있다.
사용자는 비밀 문구와 공개 시드로 시작한다. 생성기는 이를 섞고 단방향 해시를 반복 적용한다. 체인 깊이 N에서 처음 제시되는 값은 가장 먼 끝 H^N(S)에 있다. 다음 로그인은 H^(N-1)(S)로 거슬러 내려간다. 서버는 비밀 문구를 보관할 필요가 없다. 마지막으로 수락된 64비트 검증값과 시퀀스 위치만 유지한다.
제출된 값 x에 대해 서버는 H(x)를 계산한다. 결과가 저장된 검증값과 같으면 x는 유효하다. 그러면 서버는 x를 저장한다. 결정적인 동사는 비교가 아니라 교체다. x를 수락 가능하게 만든 검증값은 사라지고, x가 다음 응답을 판정하는 기준이 된다. 나중에 제출되는 가로채기된 x는 기존 검증값으로는 해시되어도 새 검증값으로는 해시되지 않는다. 성공한 인증이 공유 경계를 옮겼기 때문에 리플레이는 실패한다.
이 아이디어는RFC 1760에 문서화된 Bellcore S/KEY 시스템에서 왔다. 목표는 실용적이고 좁았다: 사람들이 재사용 비밀번호가 관찰될 수 있는 네트워크를 통해 로그인하고 있었다. 일회용 체인은 사용자의 비밀 문구가 그 트래픽을 통과하지 않으면서 수동적으로 포착된 트래픽의 가치를 줄였다.
여섯 단어는 여섯 비밀이 아니라 인터페이스였다
RFC 1938의 챌린지는 이동 상태를 보이게 했다:otp-md5 487 dog2같은 형식으로 알고리즘, 시퀀스, 시드를 담았다. MD5 지원은 필수, SHA는 권장, MD4는 허용이었다. 양쪽 끝이 합의해야 했고, 수용되는 가장 약한 알고리즘이 보안 하한을 정할 수 있었다.
생성된 값은 64비트로 정확히 입력하기 불편했다. 표준은 이를 2,048개 항목 사전의 여섯 단어로 매핑했다. 각 단어는 11비트를 선택해 총 66비트를 담는다. 남는 2비트는 입력·복호화 오류를 잡는 체크섬이었다. 이는 오타가 난 문구와 유효한 인코딩을 구분하는 데 도움을 주었다. 그러나 사용자를 두 번째로 인증하는 것이 아니며, 단어 자체에 보호적 의미도 없었다.
이 구분이 중요한 이유는 표현 방식에 관습이 생기기 때문이다. 기억하기 쉬운 문구는 사람의 비밀처럼 보일 수 있지만, 이 프로토콜에서는 기계가 만든 상태의 인코딩이었다. 서버는 표준 단어 형식과 16진수를 수용해야 했고, 대체 사전 입력 수용도 권장되었다. 대소문자 처리, 사전 선택, 복호화는 상호운용 경로에 있었다. 표시상 정규화만으로 같은 64비트가 검증값에 도달하는지 여부가 갈릴 수 있었다.
압박 속에서도 한 번의 성공적 전이
이 상태 모델은 경쟁을 만들었다. RFC 1938은 여섯 단어 응답의 대부분을 들은 공격자가 나머지를 추측해 정당한 사용자보다 먼저 도달하려는 시나리오를 고려했다. 규격을 준수하는 서버는 이에 대비해야 했다. 한 계정에 대한 동시 인증 세션 차단이 제안되었고, 방어가 영구적인 서비스 거부가 되지 않도록 타임아웃도 함께 제안되었다.
위험은 그 예보다 넓었다. 두 서버 프로세스가 같은 기존 검증값을 읽고 독립적으로 같은 응답을 수락한 뒤에만 새 값을 기록한다면, 하나의 소비 가능한 증명이 두 번의 성공을 낳는다. 암호학적 비교는 완벽해도 거래적 동작이 틀릴 수 있다. 계정 기록에는 원자적 compare-and-advance 또는 동등한 직렬화 규칙이 필요하다. 동시성이야말로 프로토콜이 만들려는 진위를 결정하기 때문이다.
체인은 끝나기도 한다. 시퀀스 번호는 장식이 아니라 남은 사용 가능한 응답 수를 측정한다. 재초기화에는 새 시드나 비밀 문구가 필요하다. 둘 다 재사용하면 이미 관찰된 네트워크를 통과했을 수 있는 체인이 재생되기 때문이다. 상태를 복구하려고 비밀 문구를 평문으로 전송하는 것은 핵심 설계를 무너뜨린다.
특히 시사적인 경계가 있다. 권장 리셋 절차는 새 체인 설치 전에 이전 OTP를 요구할 수 있었다. 시퀀스 카운트 1에서 사용자는 마지막 응답을 로그인에 쓰고 재초기화를 승인할 응답이 남지 않을 수 있다. 가용성은 암호학적 재고가 0이 되기 전에 행동하는 데 달려 있었다. “비밀번호 시스템”에는 수명 주기 정책이 포함되어 있었다.
폐기가 경계를 지우지 않았다
RFC 2289의 현재 기록은 후속 표준을 1998년 Proposed Standard로 표시한다.대체 사양은 내림 체인 모델을 유지하면서 세부를 정리하고, 테스트 벡터를 추가하고 운영 조언을 다듬었다. TCP 연결 하이재킹 같은 위협에 IPsec 사용을 권한 점은 중요한 한계를 명시한다: OTP는 로그인 증명을 개선할 수 있어도 그 뒤를 잇는 연결을 보호하지는 않는다.
이후 표준은 이동 상태를 다른 곳에 두었다.HOTP는 공유 비밀과 증가하는 카운터로 값을 계산하고, 검증자는 룩어헤드 창을 검색해 재동기화할 수 있으며 성공 후 카운터를 앞당긴다.TOTP는 HOTP의 이동 인자로 시간 단계를 쓰고, 성공적으로 검증된 값이 그 단계 내에서 다시 수락되지 않도록 요구한다. 이들은 유용한 비교 대상이지 S/KEY에서 유래했다는 증거가 아니다. 비밀, 이동 방향, 재동기화 문제가 모두 다르다.
그러나 셋 모두에서 “번호가 맞는가?”는 너무 약한 모델이다. 검증자는 어떤 상태가 현재인지, 어떤 근처 상태를 허용할지, 성공이 무엇을 소비하는지, 복제본이 어떻게 합의하는지 알아야 한다. 인증은 부분적으로 암호학이고 부분적으로 변화의 거버넌스다.
유효한 로그인을 더 큰 주장으로 격상시켜서도 안 된다. RFC 1938은 프라이버시나 능동적 공격·소셜 엔지니어링에 대한 일반 보호를 제공하지 않았다. 수락은 응답이 구성된 계정 상태에 맞음을 증명할 뿐이다. 그것만으로 명령에 대한 권한 부여, 이후 세션의 기밀성, 지속적 접근, 성공적 실행, 키보드 앞 사람의 실제 신원을 입증하지 않는다.
표기와 기계 장치
Lu Heng의running-code primacy주장은 이 RFC가 여전히 유용한 이유를 드러낸다. 사양은 전이를 명명하지만, 구현이 두 프로세스가 모두 그 전이를 주장할 수 있는지, 상태가 실패 후에도 살아남는지, 리셋이 리플레이 경로를 닫는지 다시 여는지를 결정한다. 운영 증거가 약속을 검증한다.
최소 초기 사양의 규율도 보인다. 공유 코어는 간결할 수 있다: 체인, 챌린지, 표현, 수락 테스트, 상태 전진을 정의한다. 로컬 소프트웨어는 달라질 수 있지만, 하나의 소비 가능한 응답을 두 개의 수락된 세션으로 바꾸는 방식으로는 안 된다.
마지막으로현실 계층의 구분은 “일회용”이라는 문구가 시스템보다 더 많은 일을 하지 않게 막는다. 일회용은 상징적 주장이다. 그 운영적 현실은 저장된 검증값, 원자적 변이, 경쟁 정책, 유한 시퀀스, 통제된 리셋이다. 어떤 계층이 흐트러지면, 비밀번호는 계산상으로는 맞고 역사상으로는 틀릴 수 있다—일회용이라 불리는데도 두 번 수락될 수 있다.
RFC 1938의 가장 깊은 교훈은 비밀을 더 길게 하거나 코드를 자주 바꾸라는 것이 아니다. 증명이 다음 증명이 판정되는 세계를 바꿀 수 있다는 것이다. 인증이 그 성질을 갖는 순간, 성공은 더 이상 읽기가 아니다. 소유하고, 정렬하고, 기억해야 하는 쓰기다.
출처
- RFC Editor — RFC 1938 현재 기록
- RFC 1938 — A One-Time Password System
- RFC 1760 — The S/KEY One-Time Password System
- RFC Editor — RFC 2289 현재 기록
- RFC 2289 — A One-Time Password System
- RFC 4226 — HOTP: An HMAC-Based One-Time Password Algorithm
- RFC 6238 — TOTP: Time-Based One-Time Password Algorithm
- Lu Heng — Running-Code Primacy
- Lu Heng — Minimum Initial Specification, Localized Future Decision, and Voluntary Adoption
- Lu Heng — On Reality Layers, Symbolic Power, and Why Clarity Feels So Hostile
회원 브리핑
프로필 심층 컨텍스트
올바른 멤버십 등급으로 로그인하면 전체 브리핑과 출처 노트를 볼 수 있습니다.
Strategic Circle 전용
Strategic Circle
모든 독자에게 공개됩니다. 가입 후 로그인하면 프로필 브리핑를 열람할 수 있습니다.
Strategic Circle 가입하기Leadership Alliance 전용
Leadership Alliance
자격을 갖춘 IP 자산 소유자 및 운영진을 위한 콘텐츠입니다. 로그인하면 Leadership Alliance 브리핑을 열람할 수 있습니다.
Leadership Alliance 가입하기





