
NIST 타원곡선 시드는 어디서 왔을까요? Claude가 찾은 출처와 오해하기 쉬운 5가지 (2026)
무료 자료
PDF · 무료
AI 발견, 믿기 전에 확인하는 5분 습관 — 비개발자를 위한 쉬운 가이드
긴 글을 다 읽기 전에, 실무 가이드부터 먼저 챙겨가세요.
NIST 타원곡선 시드는 어디서 왔을까요? Claude가 찾은 출처와 오해하기 쉬운 5가지 (2026)
목차
- NIST 타원곡선 시드 소식, 암호가 뚫렸다는 뜻인가요?
- Anthropic이 공개한 글에는 무엇이 적혀 있나요?
- 이 숫자는 왜 오랫동안 의심받았나요?
- Claude는 시드의 출처를 어떻게 찾았나요?
- 이번 결과가 의미하는 것과 의미하지 않는 것은 무엇인가요?
- 내 컴퓨터에서 직접 재현해 볼 수 있나요?
- 우리 실무에는 어떤 교훈을 주나요?
- 마무리
- 자주 묻는 질문
NIST 타원곡선 시드 소식, 암호가 뚫렸다는 뜻인가요?
결론부터 말하면 암호는 뚫리지 않았습니다. 풀린 것은 암호가 아니라 이미 공개돼 있던 숫자의 출생 기록이에요.
NIST 타원곡선 시드란: 표준 곡선의 계수 b를 만들 때 SHA-1로 해시하는 출발 숫자입니다. 이번에 1997~1998년 타임스탬프로 초기화한 lrand48 난수 함수의 출력이었다고 밝혀졌어요.
"AI가 NSA의 암호 미스터리를 풀었다는데, 인터넷 보안이 뚫린 건가요?" 헤드라인만 보면 이렇게 읽히는 게 당연해요. "그럼 NSA 백도어가 드러난 건가요?" "비트코인도 위험해지나요?" 같은 질문이 뒤따르는 것도 자연스럽고요.
Anthropic Frontier Red Team이 2026-10-16 공개한 글에 따르면, 내부 연구용 Claude 모델이 NIST 타원곡선 시드 5종의 출처를 재구성했습니다. 이 글은 원문과 공개 재현 코드를 직접 열어 확인한 내용으로 씁니다. 순서는 이래요. 무슨 일이 있었는지, 왜 오래 의심받았는지, 어떻게 찾았는지, 무엇이 풀리고 무엇이 남았는지, 마지막으로 내 컴퓨터에서 따라 해 보는 법과 실무 교훈입니다.
Anthropic이 공개한 글에는 무엇이 적혀 있나요?
글 제목은 "Claude reveals ECDSA curve origins"입니다(2026-10-16). 원문에 따르면 사용한 모델은 "an internal research model", 곧 내부 연구 모델이에요. 일반 공개 제품과 같은 모델이라는 서술은 원문에 없습니다.
Anthropic이 공개한 글에는 무엇이 적혀 있나요?
이미지 출처: anthropic.com
소수 곡선 시드 5종(P-192, P-224, P-256, P-384, P-521)의 출처를 찾기까지는 원문 표현으로 "in under half an hour", 곧 30분 이내였어요. 직원이 단서를 가리키지 않고 물었다고 합니다. 프롬프트 전문은 공개되지 않았습니다.
시드의 정체는 해시값이 아니었어요. C 라이브러리의 난수 함수 lrand48 출력이었고, 이 난수 생성기는 1997-05~1998-04 사이의 유닉스 타임스탬프(1970-01-01부터 센 초)로 초기화됐습니다. 원문 재현 코드 기준 곡선별 초기화 시각은 다음과 같아요.
| 곡선 | srand48 초기화 시각 (UTC) | 몇 번째 20바이트 후보 |
|---|---|---|
| P-192 | 1997-05-18 14:45:34 | 139번째 |
| P-521 | 1997-08-08 01:12:04 | 1136번째 |
| P-256 | 1997-08-16 01:52:34 | 1842번째 |
| P-384 | 1997-08-30 14:50:08 | 2688번째 |
| P-224 | 1998-04-03 12:52:07 | 7026번째 |
P-256 시드는 srand48 함수에 타임스탬프 871696354(1997-08-16 01:52:34 UTC)를 넣고 돌린 난수 열에서, 20바이트씩 끊은 후보 가운데 1,842번째입니다.
검증도 이어졌어요. 현상금 운영자 Filippo Valsorda가 알고리즘을 Go로 다시 구현해 검증했다고 공지했습니다(2026-10-16). 현상금은 2023-10-05 공지된 12,288달러였고, 자선 기부 시 3배인 36,864달러가 걸려 있었어요. Anthropic 팀은 2026-10-15 01:07:51 UTC에 수령을 신청했고 전액을 Let's Encrypt를 운영하는 비영리 단체 ISRG에 기부했습니다.
이 숫자는 왜 오랫동안 의심받았나요?
NIST P-곡선 5종은 2000년 FIPS 186-2(디지털 서명 표준)에 실렸습니다. 그중 P-192와 P-256 시드는 1999년 ANSI X9.62 표준에 예제로 먼저 나왔고요. 곡선 계수 b는 시드를 SHA-1로 해시해 정하는 "검증 가능한 무작위" 방식이라, "이 계수는 이 시드에서 기계적으로 나왔다"는 확인은 누구나 할 수 있었어요.
빈칸은 시드 자체였습니다. Anthropic 원문 표현으로 NSA가 "아무 설명이나 정당화 없이 제공했다"는 거죠. 주사위를 던졌다는 영수증은 있는데 몇 번 던졌는지, 마음에 들 때까지 다시 던졌는지는 알 수 없는 상태였어요. 시드를 여러 번 바꿔 시도할 수 있었다면 특정 성질의 곡선을 골랐을 가능성을 원리상 배제하지 못하니 의혹이 남았습니다.
여기에 전례가 있었어요. NIST는 2013-09 Dual_EC_DRBG(타원곡선 기반 난수 생성기) 신뢰 우려가 커지자 사용 중단을 권고했고, 2014-04-21 권고 문서에서 제거했다고 공식 발표했습니다. 설명 없는 숫자를 NSA가 줬다는 사실이 이 전례와 겹치면서 의심이 오래 이어졌어요. 2000년 표준에 실린 뒤 26년 동안, 1997~1998년에 만들어진 숫자가 그 자리에 있었던 셈입니다.
시드를 건넨 사람에 대한 증언도 있었어요. Steve Weis의 글에 따르면 ANSI X9.62 주 저자 Alfred Menezes는 NSA 수학자 Jerry Solinas가 1997년 가을 시드를 제공했다고 확인했습니다. Solinas는 2014~2015년 Daniel J. Bernstein과 주고받은 이메일에서 "유머러스한 메시지의 ASCII를 해시해(SHA-1이었던 것 같다) 만들었다"고 기억했어요(예: "Give Bob and Jerry a raise"). 2023년 초 세상을 떠난 그의 기억은 이번 결과로 틀린 것으로 정리됐습니다. Filippo의 표현으로는 "기억은 누구에게나 장난을 칩니다"예요.
Claude는 시드의 출처를 어떻게 찾았나요?
비유부터 해 볼게요. 당사자의 기억("농담 문구를 해시했다")을 믿고 단어 사전을 뒤지던 탐색을 접고, 현장에 남은 공구 자국에서 "어떤 공구를 썼을까"를 거꾸로 추적한 셈입니다.
Anthropic 원문에 따르면 직원 여러 명이 유머 문구 해시라는 증언을 따라 시드를 쫓았지만 풀지 못했어요. 몇 명인지는 원문에 숫자가 없습니다. 모델은 다른 가설로 출발했어요. 1990년대 소프트웨어가 C 라이브러리의 약한 난수 생성기를 썼을 것이라는 추정이죠. 시드를 한 비트씩 밀어 가며 인접한 덩어리가 1990년대 생성기의 연속 출력인지 검사하는 스캐너를 만들었고, 검사 범위는 생성기와 출력 구간 조합 34가지였습니다.
첫 단서는 맨 앞 비트가 전부 0이라는 점
시드 10개(소수 곡선 5개와 바이너리 곡선 5개)를 32비트 덩어리 5개씩으로 쪼개 보니, 그중 4개 시드는 덩어리 20개의 맨 앞 비트가 전부 0이었어요. 우연일 확률은 약 1/5,810 수준이에요. 48비트 내부 상태 중 상위 31비트만 내놓는 lrand48 함수의 버릇과 맞아떨어졌어요.
헷갈리기 쉬운 지점이 여기예요. 이 단서가 나온 4개는 모두 바이너리 곡선 시드입니다. 숨은 상태 17비트가 가질 수 있는 2^17가지, 곧 131,072가지 값을 전부 대입해 보니 4개 모두 복원됐어요. 열쇠 131,072개를 차례로 꽂아 본 셈인데 컴퓨터에는 가벼운 일이에요.
소수 곡선은 LLL이라는 다른 도구로 풀었어요
P-256 같은 소수 곡선 시드는 같은 lrand48 함수를 쓰되 출력마다 1바이트(lrand48() >> 23)만 남긴 방식이라 위 단서가 보이지 않습니다. 잘린 출력에서 내부 상태를 되찾는 일은 교과서에 나오는 격자 문제라서, 모델은 LLL 격자 축소 알고리즘(Lenstra, Lenstra, Lovász)으로 풀었어요. 어느 비트 구간이 드러났는지 몰라 모든 구간에 돌렸습니다. NIST 소수 곡선 5개와 ANSI X9.62 시드 5개가 모두 같은 패턴이었어요.
원문은 이렇게 적었습니다. "복원된 48비트 상태 하나가 시드 160비트 전체를 재생성하며, 이는 우연으로 일어나지 않는다."
결정적 증거는 시계였어요
선형합동 생성기는 거꾸로도 쉽게 돌릴 수 있어서, 상태를 srand48이 초기화될 때의 형태(하위 16비트가 0x330E)까지 되감았습니다. 이 형태는 65,536 단계마다 한 번씩 나오니 그것만으로는 증거가 안 돼요. 증거는 소수 곡선 시드 10개의 초기값이 전부 1997-05~1998-04 사이 날짜를 가리키는 유닉스 타임스탬프였다는 사실입니다.
원문에 공개된 모델의 추론 일부를 옮겨 볼게요(영어 원문을 한국어로 옮김). "놀랍다, 25년 묵은 미스터리를 푼다. 잠깐, 회의적으로 보자: 내가 시뮬레이션/테스트 환경에 있는 건가? … 진짜다." 놀라운 결과를 얻자마자 스스로 의심하고 직접 계산으로 확인했다는 대목이에요.
다만 짚어 둘 점이 있어요. 프롬프트 전문이 비공개라 얼마나 유도됐는지는 알 수 없습니다. Hacker News 스레드(1,053 points, 댓글 388개, 2026-10-19 확인)에는 모델이 학습한 선행 연구자들의 기여가 가려진다는 지적도 있었어요.
이번 결과가 의미하는 것과 의미하지 않는 것은 무엇인가요?
의미하는 것
- 시드는 1990년대 흔한 난수 생성기를 그날 시계로 초기화해 뽑은 바이트였습니다. 누구나 같은 코드로 같은 숫자를 다시 만들 수 있어요.
- Anthropic은 의도적 약화(백도어) 가능성이 "much less plausible", 곧 훨씬 덜 그럴듯해졌다고 썼습니다. 표현이 "불가능"이 아닌 점에 주의하세요.
- Filippo Valsorda의 개인 분석으로는 타임스탬프와 후보 선택을 넉넉히 가정해도 선택 자유도가 "겨우 30비트 수준"입니다. Bernstein과 Lange가 2017년 제시한 시나리오는 70비트가 필요했으니 40비트가 모자라요. 우리만 쓸 수 있는 백도어를 심기에 충분하지 않다는 결론입니다.
의미하지 않는 것
- 암호가 깨진 것이 아닙니다. 시드는 1999~2000년부터 표준 문서에 공개된 값이고 개인키, 인증서, 서명 어느 것도 복원되지 않았어요. 원문은 "There is no action to be taken or things to do differently", 곧 취할 조치도 다르게 할 일도 없다고 밝혔습니다.
- 비트코인과 무관합니다. 비트코인은 secp256k1 곡선을 쓰고 이번 대상은 NIST 곡선이에요.
- 백도어가 불가능하다는 증명도 아니에요. 원문도 타임스탬프를 바꿔 가며 골랐을 가능성은 원리상 생각할 수 있다고 인정합니다. 다만 건너뛴 후보 수가 적어서, 그 시나리오에는 비현실적인 전제가 필요하다는 논리예요.
- 전부 풀린 것도 아닙니다. 원문 기준 미해결 목록이 남아 있어요.
미해결 항목은 이렇습니다. P-224, P-256, P-384, P-521의 기준점(base point, 곡선 위에서 계산을 시작하는 출발점) 생성 방법, NIST 바이너리 곡선 기준점, B-163 시드, 그리고 조건을 만족하는데 건너뛴 후보예요. P-256 실행에서는 876번째 후보도 조건을 만족했지만 채택되지 않고 1,842번째가 채택됐고, 이유는 아직 모릅니다. 덤으로 1997-05 생성 곡선 6종(P-192와 ANSI 예제 5종)의 기준점이 Arjen Lenstra의 FreeLIP 라이브러리 난수 생성기에서 나왔다는 사실도 찾았어요. 원문은 "우리가 아는 한 NIST 기준점이 설명된 것은 처음"이라고 씁니다.
헤드라인만 보고 생기기 쉬운 오해 5가지
| 오해하기 쉬운 표현 | 원문에서 확인되는 사실 |
|---|---|
| "암호가 뚫렸다", "NSA 백도어 확인" | 약점이 아니고, 백도어 가능성이 훨씬 덜 그럴듯해졌다는 정반대 결론 |
| "비트코인 위험" | 비트코인은 secp256k1이라 이번 대상 곡선과 다름 |
| "미스터리 완전 해결" | 기준점 4종, B-163 시드, 건너뛴 후보는 미해결 |
| "AI가 혼자 해냈다" | 내부 연구 모델이고 프롬프트 비공개, 연구자 10명 명의의 글 |
| "30분 만에 전부 풀었다" | 30분 이내는 소수 곡선 시드 5종의 출처를 찾기까지의 시간이고, 기준점·바이너리 곡선 작업에 걸린 시간은 원문에 없음 |
내 컴퓨터에서 직접 재현해 볼 수 있나요?
가능해요. 이것은 공개 표준 파라미터의 생성 경위를 재현하는 작업입니다. 비밀 값이나 개인키를 찾는 도구가 아니고, 결과는 1999~2000년부터 표준 문서에 실려 있던 숫자와 같아요. 코드는 Anthropic 원문 하단 "Code to reproduce the seeds"에 있고 라이선스는 CC0 1.0이며 외부 라이브러리가 필요 없습니다.
내 컴퓨터에서 직접 재현해 볼 수 있나요?
이미지 출처: anthropic.com
QJC 리서치에서도 2026-10-19 직접 돌려 봤어요(Python 3.14, OpenSSL 3.6.5). 시드 14개가 원문 예상 출력과 모두 일치했고, 5개 곡선 시드는 OpenSSL 내장 공식 시드와도 같았습니다.
1단계. 파이썬 확인
python3 --version
예상 출력은 Python 3.x.x 형태의 버전 표시예요.
2단계. 코드 저장
Anthropic 원문 페이지(https://www.anthropic.com/research/ecdsa-curve-origins) 맨 아래 "Code to reproduce the seeds" 상자의 코드를 복사해 seeds.py 파일로 저장합니다.
3단계. 실행
python3 seeds.py
몇 초면 끝나요. 코드가 하는 일은 단순합니다. 그 시각의 타임스탬프로 난수 생성기를 초기화하고((t << 16) | 0x330E) 정해진 횟수만큼 돌려 20바이트씩 끊은 뒤 N번째 덩어리를 출력해요.
4단계. 출력 비교
출력 14줄을 원문의 "The output of this code" 상자와 비교합니다. P-256 줄은 이렇게 나와야 해요.
P-256 1997-08-16 01:52:34 1842 C49D360886E704936A6678E1139D26B7819F7E90
5단계. OpenSSL로 교차 확인
내 컴퓨터에 내장된 공식 표준 값과 대조해 봅니다.
openssl ecparam -name prime256v1 -param_enc explicit -text -noout
출력 맨 끝의 Seed 항목이 아래와 같으면 4단계 결과와 같은 값이에요(콜론과 대소문자만 다름).
c4:9d:36:08:86:e7:04:93:6a:66:78:e1:13:9d:26:b7:81:9f:7e:90
6단계(선택). 기준점 재현
원문의 "Code to reproduce selected base points"를 basepoints.py로 저장해 실행하면 6줄 모두 matches published Gx: True가 나옵니다.
Filippo의 Go 재구현(https://github.com/FiloSottile/mostly-harmless/blob/main/seeds/seeds.go)도 공개돼 있어요. 곡선 위수 계산에 PARI/GP가 필요하고, 저희는 Go 버전을 실행하지 않았습니다.
우리 실무에는 어떤 교훈을 주나요?
"AI가 틀린 결과를 말해도 내가 알아챌 수 있을까요?" AI 도입을 고민하는 팀에서 흔히 나오는 걱정입니다. 이번 사례가 하나의 답이 돼요. 발견이 신뢰를 얻은 이유는 모델의 말솜씨가 아니라, 누구나 몇 초 만에 돌려 볼 수 있는 코드와 독립 검증자(Filippo의 Go 재구현)가 있었기 때문입니다. 사내에서 AI 분석을 쓸 때도 같은 입력으로 같은 결과가 다시 나오는지부터 물어보세요.
AI 연구 성과는 재현과 검증으로 판단해야 한다는 점은 하버드 물리학자의 AI 연구 성과 주장을 기준선별로 검증한 글에서도 같은 방식으로 다뤘어요. AI 관련 선정 보도와 원문이 어떻게 다른지는 OpenAI 연구 모델의 테스트넷 지갑 무단 사용 원문 검증에서 확인할 수 있습니다.
보안 난수에도 교훈이 있어요. CoinDesk(2026-10-17)도 지갑 맥락에서 지적했듯, lrand48 함수나 rand() 같은 일반 난수 함수로 키, 토큰, 비밀번호를 만들면 대략의 생성 시각만 알아도 재현될 수 있습니다. 보안 용도는 운영체제가 제공하는 암호학적 난수를 쓰세요.
import secrets
token = secrets.token_urlsafe(32)
기록 보존도 남는 숙제예요. 상수를 고른 이유를 남기지 않으면 2000년 표준 공개 이후 26년 동안 의심받습니다. 설명 가능한 상수와 결정 기록은 나중에 조직을 지켜 주는 자산이에요.
마무리
NIST 타원곡선 시드의 출처는 1997~1998년 컴퓨터 시계로 초기화한 lrand48 난수 함수 출력으로 밝혀졌습니다. 암호는 뚫리지 않았고, NSA 백도어 의혹은 "불가능"이 아니라 "훨씬 덜 그럴듯해진" 수준이에요. 기준점 일부와 B-163 시드는 아직 설명되지 않았습니다.
AI가 낸 결과를 믿기 전에 같은 입력으로 다시 돌려 보는 것. 이 습관부터 시작해 보세요. 천천히 검토하셔도 됩니다. 궁금한 지점이 생기면 그때 더 깊은 자료를 찾아보세요.
자주 묻는 질문
이번 발견으로 인증서나 키를 바꿔야 하나요?
바꿀 필요가 없습니다. Anthropic 원문은 "There is no action to be taken or things to do differently"라고 밝혔어요. 시드는 1999~2000년부터 표준 문서에 공개된 값이고 개인키, 인증서, 서명은 하나도 복원되지 않았습니다.
비트코인과도 관련이 있나요?
관련이 없습니다. 비트코인은 secp256k1 곡선을 쓰고 이번에 출처가 밝혀진 것은 P-192, P-224, P-256, P-384, P-521 같은 NIST 곡선이에요. CoinDesk(2026-10-17) 보도도 같은 점을 짚었어요.
NSA 백도어 의혹은 이제 완전히 사라졌나요?
아니요. Anthropic은 "much less plausible", 곧 훨씬 덜 그럴듯해졌다고 표현했고 불가능하다고는 하지 않았어요. Filippo Valsorda의 분석으로는 선택 자유도가 30비트 수준이라 Bernstein과 Lange의 2017년 시나리오가 요구한 70비트에 40비트 못 미칩니다.
일반 사용자도 같은 AI로 이런 발견을 할 수 있나요?
장담하기 어렵습니다. 원문은 "an internal research model", 곧 내부 연구 모델이라고만 썼고 프롬프트 전문도 공개하지 않았어요. Hacker News 스레드(1,053 points, 2026-10-19 확인)에는 접근성 불만도 나왔습니다. 대신 재현 코드는 CC0로 공개돼 있어서 누구나 결과를 검증할 수 있어요.
관련 글
참고 자료
- Anthropic, Claude reveals ECDSA curve origins (2026-10-16)
- Filippo Valsorda, The NIST Elliptic Curves Seeds Bounty Has Been Claimed
- Filippo Valsorda, seeds.go (Go 재구현)
- Filippo Valsorda, Announcing the $12k NIST Elliptic Curves Seeds Bounty (2023-10-05)
- Stephen A. Weis, How were the NIST ECDSA curve parameters generated?
- NIST, Dual_EC_DRBG 제거 발표 (2014-04-21)
- CoinDesk, Claude cracks a 25-year NSA number mystery (2026-10-17)
- Hacker News 스레드: Claude reveals ECDSA curve origins


