Claude가 밝혀낸 ECDSA 곡선 시드의 기원
Claude reveals ECDSA curve origins
TL;DR Highlight
Claude가 30분 만에 NIST 곡선 시드가 lrand48+타임스탬프 출력임을 찾아냈다
Who Should Read
암호 표준이나 난수 생성기를 다루며 LLM이 코드·수학 역공학에 쓸모 있는지 궁금한 백엔드 개발자
Core Mechanics
- 시드는 해시가 아니라 lrand48 출력이었다
- NIST P-192, P-224, P-256, P-384, P-521 시드는 해시 결과가 아니었다.
- C 라이브러리 lrand48에 Unix 타임스탬프를 시드로 넣은 출력이었다.
- 후보 하나당 20바이트를 뽑았고, P-256은 1,842번째 후보가 공표된 시드였다.
- 접근법을 바꿔서 풀었다
- 소문으로 돌던 '재미있는 문구의 해시'를 찾는 방식은 성과가 없었다.
- Claude는 1990년대 C 라이브러리의 약한 난수 생성기(PRNG)를 쓰지 않았을지 추측했다.
- 시드를 1비트씩 밀며 연속 출력인지 검사하는 스캐너를 짰고, 34가지 생성기·출력 조합을 훑었다.
- 최상위 비트가 0이라는 단서가 결정적이었다
- 10개 시드 중 4개는 20개 워드(32비트) 전부의 최상위 비트가 0이었고, 우연일 확률은 1/5,810이다.
- 이는 48비트 상태에서 상위 31비트만 반환하는 lrand48의 특징이다.
- 숨은 17비트 2¹⁷가지를 전수 시도해 4개 시드의 상태를 복구했다.
- 소수 곡선은 LLL 격자 문제로 풀었다
- 소수 곡선 시드는 출력 비트가 더 적었지만, 잘린 선형합동생성기(LCG)의 상태 복구는 교과서적 격자 문제다.
- Claude는 LLL 알고리즘을 모든 비트 윈도우에 돌렸다.
- NIST 5개와 ANSI X9.62 5개 시드가 모두 lrand48() >> 23 패턴이었다.
Community Reactions
- 선택 과정은 여전히 모른다는 반론
- 생성 방식은 확인됐지만 버려진 후보는 보이지 않으므로 선택 기준은 알 수 없다는 의견이 있었다.
- 타임스탬프를 공개할 이유가 없었다는 원문 논리는, '아무 말도 안 하면 그만'이라 성립하지 않는다는 지적이다.
- B-163은 오타 때문일 수 있다는 의견
- 같은 방식으로 만들었지만 공표 과정에서 숫자 하나가 잘못 찍혀 못 찾았을 수 있다는 의견이 있었다.
- 프롬프트로 어떻게 하냐는 질문과 시연
- 내부 연구 모델 말고 일반 LLM으로 어떻게 시키는지 묻는 댓글이 있었다.
- 한 사용자는 Opus 5.5에 '첫 자리가 7을 넘지 않으니 lrand48 31비트 출력 아닐까'라는 힌트를 주고 풀이 과정을 지켜봤다는 경험을 공유했다.
- 모델 접근 격차를 우려하는 의견
- Anthropic 같은 곳은 이런 작업을 하지만 일반 사용자는 차단당한다는 점에서 제공자와 대중 사이 격차가 벌어진다는 우려가 있었다.
- 이를 메우는 것은 오픈 모델의 발전뿐이라는 의견이다.
How to Apply
- 코드 속 난수 사용처 점검하기
- 오늘 30분 동안 저장소에서 rand, lrand48, srand48, time 시드 사용을 검색하라.
- 키·토큰·비밀번호 같은 보안 용도에 쓰인 곳을 목록으로 뽑아라.
- 그런 곳은 암호학적으로 안전한 PRNG로 바꿔라.
- LLM에 역공학 문제를 가설 단위로 던지기
- 막힌 문제는 '정답 찾기' 대신 '당시 소프트웨어가 어떻게 만들었을지'를 추측하게 하라.
- 데이터에서 눈에 띄는 패턴(예: 최상위 비트 0)을 힌트로 같이 붙여라.
- 모델이 낸 가설은 직접 계산 코드로 검증하라.
- 모델이 짠 검증 코드를 직접 돌려 확인하기
- 원문이 공개한 파이썬 코드를 실행해 시드가 재현되는지 확인하라.
- 모델의 주장은 출력값 일치 여부로 판단하라.
Try It
# Claude나 ChatGPT 대화창에 붙여넣기 (원문 접근법의 간이 버전)
나는 아래 데이터가 어떤 소프트웨어로 생성됐는지 알아내려 한다. 해시 역추적은 이미 실패했다.
데이터:
{{데이터(예: 16진수 값 목록)}}
다음 순서로 진행해줘.
1. 이 데이터가 만들어진 시기의 소프트웨어가 어떤 방식(예: 당시 C 라이브러리의 PRNG)으로 만들었을지 가설 3개를 세워라.
2. 데이터에서 비트 패턴의 편향(예: 특정 비트가 항상 0)이 있는지 찾아라.
3. 각 가설을 검증하는 파이썬 코드를 짜라.
이어서 해 볼 것: 코드를 직접 실행해 출력이 데이터와 일치하는지 확인하고, 일치하면 어떤 입력(시드)이 쓰였는지 역산해 달라고 요청하라.Terminology
관련 논문
같은 시뮬레이션, 다른 근거: 도구 출력을 파일로 넘기면 LLM 에이전트 정확도가 어디서 깎이나
긴 툴 출력을 파일로 넘기자 GPT-5.1은 정확도 11.3%p 하락, 정식 출력 지정하니 회복
가짜 뉴스가 진짜 폭락을: LLM 트레이딩 에이전트 대상 정보 주입 공격
가짜 헤드라인 한 줄로 LLM 트레이딩 에이전트 62%를 조종했다(프롬프트 주입은 14%)
Harness Engineering 101: LLM은 뇌, harness는 몸
에이전트는 JSON 배열을 관리하는 루프이고, 16개 챕터로 직접 만들어 본다
Harness²: 에이전트 harness를 스스로 고쳐 쓰는 재귀 최적화 프레임워크
모델은 고정하고 harness를 재귀로 고쳤더니 벤치마크 점수가 최대 11.8%p 올랐다
해고된 Savannah 경찰관, ICE 요원 남편에게 Flock 계정 공유
경찰관이 Flock 계정을 남편(ICE 요원)에게 공유했고, 감사에서 983건 검색이 드러나 해고됐다
tmux와 Claude Code: 세션, send-keys, 그리고 한계선
tmux로 Claude Code 여러 개를 돌리면 편하지만 에이전트 4개쯤에서 한계가 온다
Hybrid Reasoning Agents: 잠재 공간에서 생각하고 텍스트로 행동하는 LLM 에이전트
잠재 공간 추론과 텍스트 도구 호출을 섞었더니 성능 10.4%↑, 토큰 최대 54.7%↓