Anthropic은 연구용 Claude가 자사 암호학 팀을 도와, 공개된 여러 타원곡선 시드의 출처를 재구성했다고 밝혔다. 10월 16일 보고서는 NIST 소수체 곡선 시드 5개와 NIST 이진곡선 시드 4개의 출처를 다음 생성기의 출력과 연결한다: lrand48. 이 오래된 C 의사난수 생성기는 시계에서 얻은 값으로 초기화됐다. 보고서는 제시한 시드를 출력하고 일부 기준점 좌표를 재현하는 코드도 제공한다.

이 결과는 표준화된 매개변수의 역사에 관한 질문을 다룬다. Anthropic은 새로운 공격이나 암호 체계를 깨뜨리는 결과를 보고하지 않았다. 재구성으로도 일부 선택은 설명되지 않았으며, 여기에는 유효한 일부 후보 곡선을 건너뛴 이유가 포함된다.

큰 변화

  • 달라진 점: Anthropic은 NIST P-192, P-224, P-256, P-384, P-521과 NIST 이진곡선 4개, ANSI X9.62 예제 곡선 5개의 시드를 생성하는 구체적인 방법과 코드를 공개했다. 별도의 기준점 생성 방법은 P-192와 ANSI 예제 5개에 일치한다.
  • 방법: 팀은 Claude가 공개된 시드 비트에서 패턴을 알아보고 생성기 상태를 복원한 뒤, 시계 값의 형태를 띤 초기값까지 상태를 역추적했다고 설명한다. 기준점 6개에 대해서는 오래된 긴 정수 연산 소프트웨어에 쓰인 생성기를 식별했다.
  • 한계: 제안한 일치 관계는 코드로 확인할 수 있지만, 값이 맞는 생성 방법이 모든 역사적 선택 결정을 기록하거나 곡선의 안전성을 입증하는 것은 아니다. BIG CHANGE는 공개 게시물과 과거 표준을 검토했으며 독립적인 재현을 실행하지 않았다.

곡선 시드가 설명하는 것

NIST가 보관한 FIPS 186-2는 2000년 1월 27일자로, 소수체 곡선 5개 각각에 대해 160비트 시드를 나열한다. 지정된 SHA-1 기반 절차가 시드를 곡선 계수로 바꾼다. 표준은 체, 곡선의 위수와 기준점 좌표도 각각 제시한다. 제공된 시드로 계수가 지정된 절차에 따라 나오는지 확인할 수 있다고 설명하지만, 시드 자체를 어떻게 골랐는지는 설명하지 않는다. 시드는 공개키를 만드는 데 쓰는 고정점인 기준점을 결정하지도 않는다.

이 구분이 Anthropic 발견의 범위를 정한다. 시드를 추적하면 표준화된 곡선의 입력 하나를 설명할 수 있다. 기준점을 설명하려면 별도의 설명이 필요하며, 출력이 일치해도 매개변수를 고른 사람들이 내린 모든 결정을 알 수는 없다.

Anthropic이 시드를 추적한 방법

Anthropic에 따르면 Claude는 먼저 공개된 값에서 오래된 C 의사난수 생성기의 흔적을 찾았다. 일부 이진곡선 시드에서는 32비트 워드마다 최상위 비트가 0이었다. Anthropic은 이 패턴이 다음 생성기를 가리켰다고 설명한다: lrand48. 이 생성기는 48비트 내부 상태에서 31비트를 반환한다. 이어서 모델은 가능한 상태를 복원하고 연속 출력이 시드와 맞는지 확인했다. 소수체 곡선에서는 각 출력에서 더 적은 비트만 남았기 때문에, Anthropic은 Claude가 격자 방법으로 숨겨진 상태를 복원했다고 밝혔다.

Anthropic의 게시물 속 코드는 srand48 방식의 상태에서 시작해 lrand48 점화식을 진행하고 20바이트 후보 시드를 출력한다. 표에는 P-192, P-224, P-256, P-384, P-521과 ANSI 예제 prime192v2, prime192v3, prime239v1부터 prime239v3까지의 타임스탬프와 후보 번호가 지정돼 있다. P-256의 지정된 실행은 1,842번째 후보에서 공개된 시드에 도달한다. Anthropic 예제에 출력된 P-256 값은 FIPS 186-2의 시드와 일치한다.

Anthropic은 B-233, B-283, B-409, B-571에서도 관련된 일치를 보고한다. 코드는 생성기를 초기화하기 전에 시계 값을 2로 나눠 사용한다. Anthropic은 이 시계 값을 절반으로 해석하는 방식을 하나의 가능성으로 설명한다. 복원한 상태를 역추적하면 1984년 2월의 날짜가 나왔고, 값을 두 배로 하면 1998년 4월 17일에 해당한다. 공개된 일치는 생성 방법을 뒷받침하지만, 원래 작성자들이 어떤 시계 처리 방식을 선택했는지 입증하지는 않는다.

Anthropic은 이 작업을 직원의 질문, 내부 연구 모델의 탐색과 코드, 그리고 팀의 검증이 협력한 결과로 설명한다. 보고서는 다른 사람이 살펴볼 수 있는 코드와 예제 출력을 제공한다. 이 기사에 인용할 독립적인 재현은 찾지 못했으며 BIG CHANGE도 코드를 실행하지 않았다. 따라서 출처는 이를 Anthropic이 보고한 재구성으로 설명하는 것을 뒷받침하고, 과거 NIST 값은 목표 매개변수의 외부 기록 역할을 한다.

기준점 6개와 남은 공백

Anthropic은 Arjen Lenstra의 긴 정수 패키지 FreeLIP와 Victor Shoup의 초기 NTL 버전에 쓰인 다른 오래된 생성기가 P-192와 ANSI 예제 5개의 기준점 x좌표와 일치한다고 밝혔다. 두 번째 코드 목록은 작은 정수로 그 생성기를 초기화하고 출력 7개를 버린 다음, 곡선 위에 놓일 때까지 후보 x좌표를 뽑는다. 6개 예제는 P-192, prime192v2, prime192v3, prime239v1부터 prime239v3까지다. Anthropic은 공개된 각 x좌표에 대한 일치를 출력한다. NIST의 과거 P-192 목록은 이 비교에 사용한 값을 제공한다.

Anthropic 자체 설명에도 여러 한계가 남는다. B-163의 시드는 복원하지 못했다. P-224, P-256, P-384, P-521이나 NIST 이진곡선의 기준점도 설명하지 못했다. 실행 과정에서는 Anthropic이 명시된 크기와 소수 위수 조건을 충족했을 것이라고 보는 후보들도 건너뛰었다. P-256의 876번째 후보는 공개된 1,842번째 후보보다 앞선 사례다. Anthropic은 P-224 실행에서 유효한 후보 3개를, 두 ANSI 예제 실행에서 합계 7개를 건너뛰었다고 보고한다. 팀은 선택 기준이나 이 건너뛰기가 어떤 기술적 산물이었는지 알지 못한다.

보안 엔지니어에게 유용한 새 결과물은 여러 매개변수 값의 생성 경로로 보이는 과정을 확인할 수 있는 설명이다. 불투명한 시드에 관한 오랜 질문 하나의 범위를 좁히지만, 곡선 선택에 관한 모든 질문에 답하지는 않는다. Anthropic도 이 발견이 사용자의 암호 운용 관행을 바꿀 이유는 아니라고 말한다.

출처 및 추가 읽을거리