# ECDSA (Elliptic Curve Digital Signature Algorithm)

ECDSA(Elliptic Curve Digital Signature Algorithm, 타원곡선 전자서명 알고리즘)는 DSA를 타원곡선 위로 옮긴 전자서명 방식으로, Bitcoin·Ethereum·Tron 등 대부분의 블록체인에서 트랜잭션 서명에 사용됩니다. NIST FIPS 186-5와 SEC 1에 표준화되어 있습니다.

## 자세히 알아보기

개인 키 d, 공개 키 Q = d·G, 곡선 위수 n이 있을 때 메시지 해시 z에 대한 서명은 다음처럼 만듭니다. ① 1~n−1 사이의 비밀 난수 k를 고르고 R = k·G를 계산합니다. ② r = R의 x좌표 mod n. ③ s = k⁻¹(z + r·d) mod n. 서명은 (r, s) 한 쌍입니다. 검증자는 공개 키 Q로 u₁ = z·s⁻¹, u₂ = r·s⁻¹을 구한 뒤 u₁·G + u₂·Q의 x좌표가 r과 같은지 확인합니다.

가장 중요한 주의점은 난수 k입니다. 같은 k로 두 메시지에 서명하면 두 식을 연립해 개인 키 d가 바로 계산됩니다. 2010년 게임기 서명 키 유출, 2013년 일부 안드로이드 Bitcoin 지갑의 난수 결함 사건이 이 유형입니다. k가 조금만 치우쳐도 격자(lattice) 공격으로 키가 복구될 수 있습니다. 그래서 오늘날에는 개인 키와 메시지로부터 k를 결정적으로 유도하는 RFC 6979 방식을 쓰는 것이 권장됩니다.

ECDSA 서명은 가변성(malleability)이 있습니다. (r, s)가 유효하면 (r, n − s)도 유효하므로 제3자가 서명을 바꿔 트랜잭션 ID를 변경할 수 있습니다. 이를 막기 위해 Bitcoin은 'low-S' 규칙을, Ethereum은 EIP-2(Homestead)에서 s ≤ n/2 조건을 도입했습니다. 또한 ECDSA는 슈노르 서명과 달리 서명을 선형으로 합치기 어려워 다자간 서명·임계값 서명 구현이 복잡합니다.

## 블록체인·암호화폐에서는

Bitcoin(레거시·SegWit 출력)과 Ethereum, Tron은 secp256k1 위 ECDSA로 트랜잭션에 서명합니다. Ethereum은 (r, s)에 복구 식별자 v를 붙여 서명만으로 공개 키를 되살릴 수 있게 하며(ecrecover), 덕분에 트랜잭션에 공개 키를 따로 넣지 않습니다. 거래소 출금, 지갑 전송, USDT 컨트랙트의 transfer 호출 모두 이 서명이 '키 소유자가 승인했다'는 유일한 증거입니다.

## 쉽게 말하면

매번 새로 뽑은 일회용 비밀 숫자를 섞어 찍는 도장입니다. 같은 비밀 숫자를 두 번 쓰면 도장 원판 자체가 드러나 버립니다.

## 예시

Ethereum 서명은 r(32바이트), s(32바이트), v(1바이트)로 총 65바이트이며, s는 EIP-2에 따라 곡선 위수의 절반 이하여야 합니다.

---
출처: https://achivx.kr/glossary/ecdsa-%ED%83%80%EC%9B%90%EA%B3%A1%EC%84%A0-%EC%A0%84%EC%9E%90%EC%84%9C%EB%AA%85-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98/ · ACHIVX 용어 사전 · 수정일 2026-10-20
