공개키 · 키 합의
서명마다 필요한 비밀 난수를 없애 난수 결함으로 개인키가 새는 경로를 차단합니다.
규격 재현과 공격 거부를 이 페이지에서 직접 실행해 확인할 수 있습니다.
ECDSA는 서명마다 비밀 난수를 요구하며 이 값이 예측되거나 두 번 쓰이면 개인키가 그대로 복구됩니다. Ed25519는 이 값을 뽑는 대신 개인키와 메시지로부터 계산해, 난수원이 개입할 여지를 없앱니다. 같은 키와 메시지는 언제나 같은 서명을 내므로 규격이 인쇄한 서명과 바이트 단위로 대조할 수도 있습니다.
서명마다 필요한 값을 난수가 아니라 키와 메시지의 해시로 계산해 재사용 사고를 없앱니다.
32바이트 공개키와 64바이트 서명으로 배포와 저장이 단순해집니다.
새 내부 경계는 Ed25519가 낫지만 WebAuthn·OIDC처럼 남과 맞물리는 곳은 ES256을 요구합니다.
ECDSA 서명에는 매번 새로운 비밀 난수 k가 필요합니다. k가 예측되면 개인키가 즉시 복구되고, 서로 다른 두 메시지에 같은 k를 쓰면 두 서명만으로 개인키가 나옵니다. 2010년 PlayStation 3의 서명 키는 상수 k 때문에 통째로 공개됐고, 초기 안드로이드 비트코인 지갑들은 난수 결함으로 키를 잃었습니다. 알고리즘을 정확히 구현해도 난수원이 나쁘면 무너진다는 것이 이 설계의 약점입니다.
서명이 재현 가능해지므로 규격의 알려진 답과 직접 비교할 수 있습니다. ECDSA는 서명이 매번 달라 검증만 확인할 수 있는 것과 대조됩니다. 다만 결정론은 부채널 관점에서 장단이 있어, 같은 메시지를 반복 서명하는 환경에서는 결함 주입 공격을 별도로 고려해야 합니다.
아래 증명은 설명이 아니라 실제 실행입니다. 버튼을 누르면 이 서버에서 지금 계산합니다.
서명이 결정론적이라 규격의 알려진 답과 직접 대조할 수 있다 — ECDSA는 매번 다른 값을 내서 이 비교 자체가 불가능하다. 같은 키·같은 메시지는 몇 번을 서명해도 같은 64바이트가 나온다.
표준이 고정한 test vector 를 그대로 실행합니다.
검증은 공개키·메시지·서명 셋이 정확히 맞을 때만 통과한다. 메시지를 한 바이트 바꾸거나 서명을 한 비트 뒤집으면 즉시 거부되고, 다른 키로 만든 서명은 형태가 유효해도 통과하지 못한다.
막아야 할 입력을 실제로 넣고 거부되는지 확인합니다.
규격 원문을 우선합니다. 사례는 이 주제가 실제로 어떻게 뚫렸는지를 다룬 자료입니다.
Ed25519 원문. §7.1의 벡터를 증명에서 재현한다.
ECDSA를 계속 써야 할 때 nonce 위험을 줄이는 방법.
상수 nonce 하나로 서명 개인키가 복구된 실제 사례.
Next step
내부 서비스 간 신뢰 경계에 적용하고 ES256과의 공존 기간 동안 검증기가 두 알고리즘을 모두 다루게 합니다.