Ed25519 Deep Dive

#cryptography #ed25519 #blockchain #solana

Original presentation by Jinwoo Lee on Dec 3, 2025

타원곡선 (Elliptic Curve)

더 자세한 내용은 Threshold Signature Scheme 초반부를 참고.

위수(Order)

  1. 전체 그룹 위수 (nn): 곡선 존재하는 모든 점들의 총 개수

    n=8qn = 8 \cdot q
    • 여기서 88cofactor라고 부름.
  2. 순환 부분군 위수 (qq): 실제 서명 및 키 파생 연산에 사용되는 부분군(subgroup)의 위수

    q=2252+27742317777372353535851937790883648493q = 2^{252} + 27742317777372353535851937790883648493

유한체 (Finite Field)

25519의 의미

Ed25519라는 이름은 유한체를 정의하는 소수 pp에서 유래함.

p=225519p = 2^{255} - 19

공개키 압축

xx좌표값이 255비트보다 살짝 작은 값이기 때문에 Public Key 압축에 있어 이점을 가짐.


HD Wallet in Solana

솔라나의 BIP-44 표준 Path

m/44/501/account/change/address_indexm / 44' / 501' / \text{account}' / \text{change} / \text{address\_index}

비밀키 활용 (Secret Key Usage)

서명 시 secp256k1 / secp256r1 (NIST-256)과 많은 차이점이 존재함.

1. 초기 시드 (Initial Seed)

2. Expanded Secret Key

초기 시드의 SHA-512 해시값을 Expanded Secret Key로 사용함.

2-1. 상위 32bytes (HhighH_{high})

디지털 서명에 필요한 nonce (rr) 값을 만들 때 사용됨.

2-2. 하위 32bytes (HlowH_{low}) = 비밀키 스칼라 xx


EdDSA - Schnorr 서명 기반

1. 서명 생성 (σ=(Rs)\sigma = (\text{R} \Vert s))

1-1. 임시 비밀값 rr 및 점 RR 계산 (Nonce Generation)

임시 비밀값 rrHhighH_{high}와 메시지 해시 MM으로부터 결정론적(Deterministic)으로 생성됨. (RFC-6979와 유사)

1-2. Challenge 값 kk 계산

R\text{R}, 공개키 PP, 메시지 MM을 모두 해시하여 도전 값 kk를 계산함.

1-3. 최종 서명 스칼라 ss 계산

rr, kk, xx (비밀키 HlowH_{low})를 사용하여 최종 서명 스칼라 ss를 계산함. 이는 사실상 Schnorr Signature 구조임.

1-4. 최종 서명 σ\sigma

서명 σ\sigmaR\text{R} (32bytes)과 ss (32bytes)를 순서대로 연결한 64바이트임.

σ=(Rs)\sigma = (\text{R} \Vert s)

2. 서명 검증 (Verification)

검증자는 서명 σ=(Rs)\sigma = (\text{R} \Vert s), 메시지 MM, 그리고 공개키 PP를 사용함.

2-1. Challenge 값 kk 재계산

서명 생성 시 사용된 것과 동일한 방식으로 kk를 재계산함.

k=SHA-512(RPM)(modq)k = \text{SHA-512}(\text{R} \Vert P \Vert M) \pmod q

2-2. 검증 공식 확인

다음 타원 곡선 방정식이 성립하는지 확인함.

sG=?R+kPs \cdot G \overset{?}{=} R + k \cdot P

Note: secp256k1 / secp256r1과 달리(e.g., Ethereum’s ecrecover), Ed25519 표준은 일반적으로 Public Key Recovery 인터페이스를 지원하지 않고, “성공/실패” 검증 방식임.


Public Key 압축 및 서명 R값 압축


Ed25519 vs X25519