ECDSA 서명·검증 계산기
타원곡선 위에서 개인키와 임시값(nonce) k로 서명 (r, s)을 만들고 공개키로 검증하는 ECDSA 절차를 단계별로 보여줍니다. 같은 k를 두 번 쓰면 개인키가 새는 취약점도 재현합니다.
서명 (r, s)
(9, 2)
검증식이 성립합니다 — 유효한 서명입니다
임시값(nonce) 재사용 — 소니 PS3 사고 재현
위와 같은 k로 다른 메시지 z′를 서명하면, 두 서명만으로 k와 개인키 d를 되찾을 수 있습니다.
사용 방법
- 1작은 곡선(y² = x³ + 2x + 2 mod 17, 생성점 G의 위수 19)에서 개인키 d를 정합니다.
- 2메시지 해시 z와 임시값(nonce) k를 정하면 서명 (r, s)가 계산됩니다.
- 3공개키 Q = dG와 서명으로 검증식이 성립하는지 확인합니다.
- 4같은 k로 서로 다른 메시지 두 개를 서명한 뒤, 그 두 서명만으로 k와 개인키 d를 되찾는 과정을 확인합니다.
자주 묻는 질문
임시값 k로 R = kG를 구해 r = R의 x좌표(mod n)를 얻고, s = k⁻¹(z + rd) mod n을 계산합니다(z는 메시지 해시, d는 개인키, n은 생성점의 위수). 서명은 (r, s) 두 숫자입니다.
w = s⁻¹ mod n, u₁ = zw mod n, u₂ = rw mod n을 구한 뒤 u₁G + u₂Q의 x좌표가 r과 같은지 확인합니다. 서명이 올바르면 u₁G + u₂Q = kG = R이 되어 항상 성립합니다.
서로 다른 메시지를 같은 k로 서명하면 r이 같아지고, 두 서명의 s값 차이에서 k를 바로 계산할 수 있습니다. k를 알면 서명식을 거꾸로 풀어 개인키까지 그대로 새어 나갑니다. 2010년 소니가 플레이스테이션 3 서명에 고정된 k를 썼다가 이 방법으로 개인키가 유출된 사고가 실제 사례입니다.
아니요. 학습용입니다. 여기 쓰인 곡선은 숫자가 작아 손으로 검산할 수 있게 만든 예시일 뿐이고, 코드도 상수 시간이 아니라 부채널 공격에 노출됩니다. 실제 서명에는 검증된 암호 라이브러리를 쓰세요.
아니요. 개인키·임시값·메시지 해시 모두 브라우저에서만 계산되며 서버로 전송되지 않습니다.
알아두면 좋은 점
- 학습용 작은 곡선만 다룹니다. secp256k1 같은 실제 곡선의 서명·검증은 다루지 않습니다(스칼라곱 자체는 dev/elliptic-curve의 secp256k1 모드에서 확인할 수 있습니다).
- 상수 시간 구현이 아니라 부채널 공격에 노출됩니다. 실제 서명에 쓰지 마세요.
함께 보면 좋은 도구
마지막 검증: 2026년 9월 3일 · 결과는 참고용 추정치입니다.