Rust로 작성한 모듈 격자 기반 전자 서명 알고리즘(Module Lattice-based Digital Signature Algorithm, ML-DSA)입니다. NIST FIPS 204 명세를 따르며, 공식 NIST ACVP 테스트 벡터로 바이트 단위 준수를 검증했습니다.
전반적 구현은 ELIB-K0-NT의 ml-dsa 크레이트와 동일하나, 이 크레이트는 검증된 몇 가지의 외부 의존성을 사용했으며 아직 HashML-DSA를 구현하지 않았습니다. 폐쇄 친화적 원칙에 따라, 외부 의존성은 vendor/ 하위에 로드되었으며 버전을 이 크레이트에 안정적이도록 맞춰두었습니다.
- ML-DSA-44/65/87 파라미터 셋 지원
- 핵심 알고리즘 구현:
KeyGen,Sign,Verify - 시드 기반 결정론적 키 생성(DRBG)
- 헤지드/결정론 서명 선택(서명 시 rnd 주입 방식)
- 강타입 키/서명, 비밀 키 자동 소거(zeroize)
no_std동작(bare-metal/WASM 노드 내장 가능)- 폐쇄 친화적 빌드: 모든 의존성을
vendor/에 귀속, 네트워크 차단
use ml_dsa::MLDSA44;
let seed = [0x42u8; 32]; // 실제로는 CSPRNG 출력
let (pk, sk) = MLDSA44::key_gen(&seed);
let msg = b"Hello, Quantum World!";
let ctx = b"";
let rnd = [0u8; 32]; // 헤지드는 CSPRNG, 결정론은 0
let sig = MLDSA44::sign(&sk, msg, ctx, &rnd).unwrap();
assert!(MLDSA44::verify(&pk, msg, &sig, ctx));tests/kat.rs는 tests/vectors/ 의 공식 NIST ACVP 벡터로, 다음을 확인합니다.
- keyGen 75건 (셋별 25): seed -> (pk, sk) 바이트 일치
- sigGen 45건 (external·pure·deterministic): 서명 바이트 일치
- sigVer 45건 (external·pure): 검증 판정 일치 (부정 케이스 포함)
$ cargo test --offline
Important
다른 추가적인 검증 방식에 대한 기여를 진심으로 환영합니다.
# 호스트
$ cargo build --offline
$ cargo build --offline --release
# no_std bare-metal
$ cargo build --offline --target thumbv7em-none-eabi --lib
.cargo/config.toml이 vendor/하위 크레이트를 의존성 소스로 지정하고, net.offline = true로 네트워크를 차단합니다.
- HashML-DSA 해시 변형
-
internal/externalMu서명 인터페이스