azosi · 2026.10.18 00:01 · 조회 0
Claude, NIST 곡선 25년 미스터리를 30분에 푼다 — "그냥 유닉스 타임스탬프"
Anthropic이 2026년 10월 16일 자사 Frontier Red Team 카테고리에서 흥미로운 연구 결과를 공개했다. NIST 표준 타원곡선(ECDSA) 다섯 개 — P-192, P-224, P-256, P-384, P-521 — 의 “seed”가 어떻게 생성됐는지가 25년 동안 미스터리로 남아 있었는데, 사내 연구용 Claude 모델이 30분도 안 되는 시간에 그 답을 찾아낸 것이다.
무엇이 풀렸나
NIST는 2000년 FIPS 186-2 디지털 서명 표준에서 ECDSA 표준 곡선들을 채택했다. 각 곡선은 매개변수 b를 정의하는 16진수 시드 값을 함께 공개했는데, 이 시드의 출처는 설명 없이 NSA에서 그냥 받아서 실은 25년간 “A Riddle Wrapped in an Enigma”(Koblitz & Menezes, 2015)로 남아 있었다. 한때는 NSA의 Jerry Solinas가 “Bob and Jerry rule” 같은 유머 문구를 해시해 만들었을 것이라는 설이 제기됐고, 실제로는 그 가설이 틀렸음이 이번 분석에서 드러났다.
Anthropic 직원이 “그냥 유닉스 타임스탬프였어(It’s just timestamps)”라는 결론에 도달한 과정을 정리하면 다음과 같다.
- 상위 비트 패턴 인식 — 시드 5개 중 4개가 20워드 전체의 최상위 비트가 0이었다. 이게 우연일 확률은 1/5,810에 불과하다. 1990년대 C 라이브러리 PRNG인
lrand48는 48비트 상태의 상위 31비트만 노출하는데, 그 특이 패턴과 정확히 일치했다. - 상태 복원 — 상위 비트가 0인 비트(
lrand48() >> 23)에서 잘려나간 PRNG 상태 복원은 사실상 교과서 격 격자 문제다. LLL(Lenstra–Lenstra–Lovász) 기저 축소 알고리즘을 적용해 잘려나간 비트 위치를 모르는 상태에서 모든 케이스를 훑었다. - 시간 역추적 —
lrand48는srand48로 초기화할 때 하위 16비트가0x330E인 형태로 돌아가도록 PRNG 상태를 역방향으로 회전시킨다. 그 지점에 도달하면 그게 유닉스 타임스탬프였음을 확인할 수 있다. - 실제 검증 — 10개(5 NIST + 5 ANSI X9.62) 프라임 곡선 시드 모두 1997년 5월 ~ 1998년 4월 사이의 유닉스 타임스탬프로 초기화된 PRNG에서 나왔다. 4개의 바이너리 곡선은 1984년 2월 타임스탬프(타임스탬프를 두 배로 만들면 P-224 생성 2주 후인 1998년 4월 17일에 정확히 매핑됨)로 초기화됐다.
NIST P-256 시드는 같은 실행에서 1,842번째 후보였다. LLM이 시드를 추측한 것이 아니라, C 라이브러리 RNG 출력의 통계적 시그니처를 인식하고 기저 축소 알고리즘으로 PRNG 상태를 복원한 뒤, Unix 타임스탬프를 역추적한 것이다.
추가로 발견한 것: 일부 base point의 출처
시드만으로 곡선은 정의되지만, 실제로 ECDSA 서명에 쓰이는 base point G(모든 공개키의 배수인 고정점)는 별도로 정해진다. NIST는 base point 선택 과정을 공개한 적이 없다. Claude는 base point 조사에서 더 나아가 **6개의 곡선(P-192, ANSI X9.62 예제 곡선 5개)**의 base point가 Arjen Lenstra의 FreeLIP 패키지(초기 NTL 라이브러리에 동포됨) 난수 생성기에서 나왔다는 사실도 발견했다. 그 레시피는 단순하다 — 작은 정수로 시드 → 처음 7개 출력 버림 → 후보 x좌표를 mod p로 줄임 → 곡선 위에 있을 때까지 반복. seed 정수들은 P-192가 20000, prime239v1–v3가 20420/20507/20509, prime192v2/v3가 20512/20517이다. P-224/P-256/P-384/P-521의 base point는 아직 설명되지 못했고, 이 부분은 미해결로 남아 있다.
보안적으로 무엇을 의미하나
중요한 점부터: 이 연구는 ECDSA 곡선에 대한 암호학적 결함·새로운 공격·취약점이 아니다. 오히려 반대 결론이다. NIST 곡선이 채택된 1990년대 후반부터 “NSA가 의도적으로 backdoor를 심었을 수 있다”는 우려가 제기됐는데, 이번 발견은 시드가 PRNG + 유닉스 타임스탬프라는 누구나 재현 가능한 메커니즘으로 만들어졌음을 보여준다. 즉 backdoor 설계를 위한 공간이 거의 없었다는 뜻이다. 25년간의 의심이 사실은 **“진짜 그냥 무심코 만든 거였다”**로 정리된 셈이다.
다만 한 가지 미해결 관찰이 남아 있다. P-256의 경우 같은 실행에서 1,841개 후보가 먼저 있었고, 876번째 후보도 prime-order 곡선을 만들 수 있었다. P-224 실행에서도 3개, ANSI X9.62 실행에서도 7개의 viable 곡선을 지나쳤다. “어떤 기준으로 이 후보들을 건너뛰었는지, 아니면 그저 무관한 부산물인지”는 아직 모른다고 설명한다.
“25년짜리 미스터리를 30분 만에”의 의미
검색 기반 조사(“Bob and Jerry rule” 같은 구문 해시)는 여러 차례 실패했고, 보상금 형태로 bounty까지 걸려 있던 상태였다. Claude가 성공한 결정적 차이는 “검색”이 아니라 “PRNG 시그니처 인식 + 격자 축소”라는 다른 각도에서 접근한 것이다. 1990년대 PRNG의 약점을 알고, 출력 비트 일부만 관찰된 상태에서도 상태 복원이 가능한 표준 격자 알고리즘을 적용한 것. 그리고 그게 우연의 일치일 가능성을 “160비트 매칭 × 10개”라는 숫자로 직접 검증해냈다.
Anthropic은 “Readers should take this as a fun closing chapter … there is no action to be taken or things to do differently. Most researchers trusted the curves already. Enjoy.”라고 적으며 결과를 여유 있게 마무리했다. 또한 이 발견으로 발생한 bounty(미화 36,864달러)는 인터넷 보안 연구 그룹(ISRG)에 기부된다고 밝혔다.
시사점
- 암호학 표준의 신비화 — 표준 문서에서 “설명 없이” 제시된 매개변수는 25년 동안 의심의 대상이었다. 이번 사건은 PRNG + 타임스탬프라는 너무 평범한 사실이 오히려 평판을 지켜냈음을 보여준다. 향후 표준 작성에서 매개변수 생성 과정을 같이 공개하는 절차가 더 중요해지는 사례다.
- LLM과 검색 vs 생성의 차이 — 같은 미스터리에 여러 차례 사람이 도전했지만 실패했다. 결정적 차이는 검색이 아니라 **알고리즘적 사고(PRNG 가정 → 상태 복원 → 시간 역추적)**였고, 코드 작성과 LLL 같은 격자 알고리즘 실행을 모델이 직접 수행한 것이다.
- 유지 가능한 보안 표준 — 표준의 “진실 여부”가 외부 전문가의 반복 검증으로 계속 확인된다는 점이 강조된다. NIST는 이번 발견에 대해 즉각적인 코멘트를 내놓지 않았고, Anthropic도 “즉각 조치가 필요한 사안은 아니다”라는 점을 분명히 했다.
출처
- Anthropic — Claude reveals ECDSA curve origins (2026-10-16): https://www.anthropic.com/research/ecdsa-curve-origins
- Neal Koblitz, Alfred Menezes — A Riddle Wrapped in an Enigma (2015): https://eprint.iacr.org/2015/1018.pdf
- NIST FIPS 186-2 Digital Signature Standard: https://csrc.nist.gov/files/pubs/fips/186-2/final/docs/fips186-2.pdf
- Filippo Valsorda의 seeds bounty 게시글: https://words.filippo.io/seeds-bounty/
본 글은 Anthropic의 Frontier Red Team 공식 게시글과 원본 NIST 표준 문서를 1차 출처로 삼아 작성되었습니다. 인용된 수치(1842 후보, 36,864달러 bounty, 1997–1998 타임스탬프 범위, LLL 알고리즘 등)는 모두 Anthropic 공식 본문에서 직접 확인된 값입니다.
댓글
아직 댓글이 없습니다.
댓글을 작성하려면 로그인이 필요합니다.