Lowent 매뉴얼←↑→

ed25519 — Ed25519 서명 검증

소스
lib/ed25519.low
층
L0 — 순수 계산(호출자의 뒷받침)
권한
없음

Curve25519 와 같은 소수 p = 2^255 − 19 위의 비틀린 에드워즈 곡선에서 서명을 검증한다(RFC 8032 §5.1.7). 소수가 같으므로 x25519 의 체 산술을 그대로 재사용한다 — 같은 소수면 같은 체다. 그쪽은 키 합의, 여기는 서명 검증이다.

무엇을 약속하고 무엇을 하지 않나

상수 시간을 약속하지 않고 감사받지 않았다. 서명 생성은 없다. ed25519ph · ed25519ctx · Ed448 도 없다. 공개 웹 HTTPS 서버의 인증서에는 이 알고리즘을 쓸 수 없다 — 공개 CA 가 Ed25519 서버 인증서를 사실상 발급하지 않는다. 그쪽은 p256 이다. 이 모듈은 상대의 서명을 검증하는 데 쓴다.

에드워즈 덧셈은 완비(complete)다. 확장 좌표 (X:Y:Z:T), xy = T/Z 를 쓴다. 에드워즈 덧셈 공식에는 예외가 없다 — 야코비와 달리 “같은 점이면 다른 식” 이 없다. p256 의 padd 안에 있는 갈래가 여기엔 아예 없고, 갈래가 없으면 그 갈래에서 틀릴 수도 타이밍으로 샐 수도 없다.

애매한 입력은 거절하는 쪽을 골랐다. RFC 8032 는 비정규 인코딩과 작은 위수 점의 처리를 구현마다 달라도 되게 둔다. 여기서는 거절한다 — S < L 을 강제하고 (안 하면 같은 메시지에 유효한 서명이 여럿 생긴다), 압축 해제가 실패하면 거절한다. 규격이 “둘 다 된다” 고 할 때 고른 쪽을 적어 두는 것이 문서의 일이다.

op하는 일
verify서명 sig 가 공개키 pub 와 메시지 msg 에 맞는가 — 보통은 이것만 쓴다
make_d · make_l · make_base곡선 상수 d · 위수 L · 기저점 B
eadd · esmul점 덧셈 · 스칼라 곱
compress · decompress점 ↔ 32 바이트 인코딩
fpow · feq · fbit0체 거듭제곱 · 같은가 · 최하위 비트
pow2_minus · reduce_l2^n − k · mod L 축약

표 50.1 — ed25519 의 op

검증식은 [S]B = R + [k]A, k = SHA-512(R ‖ A ‖ M) mod L 이다.

옮겨 적을 수밖에 없는 상수는 성질로 검사한다. d 와 √−1 과 B 는 계산으로 낸다 — 적을 것이 없다. 위수 L 은 유도되지 않아 적어야 했다. 그래서 시험이 [L]B 가 항등원인지 본다. 틀리게 적으면 그 검사가 깨진다 — 옮겨 적은 것을 믿지 않고 재는 방법이다.

확인하는 것 — RFC 8032 §7.1 양성 3 · 음성 6, [L]B = 항등원, VM·네이티브 일치.