1.1.0 릴리즈 준비 - 복합 업데이트 - #9
Open
Quant-TheodoreFelix wants to merge 68 commits into
Open
Conversation
- cross-confirm.md 추가 (구현 검증 현황 추적) - README.md / README_EN.md에 릴리즈 1.1.0 섹션 추가 - AI_SCOPE.md / AI_SCOPE_EN.md 모델명 업데이트 (Fable 5 반영) - rng/README_EN.md 추가 (영문 번역)
- block.rs: encrypt_block/decrypt_block state 소거, sub_bytes/inv_sub_bytes bytes 소거 - cbc.rs: debug_assert -> assert 로 교체, 루프 내 block/decrypted 소거 - ctr.rs: keystream 소거, counter 소거, CTR_MAX_INPUT_LEN 가드 추가 - gcm.rs: 상수시간 태그 비교(CtEqOps), keystream/cb/j0/icb/s/e_j0 소거, 입력 길이 가드 추가 - ghash.rs: reset()에서 state_n.zeroize() 사용 - key.rs: expand_key 시그니처 변경(반환값 제거 -> &mut 출력), temp 소거 - sbox.rs: bitslice plane q 소거 - lib.rs: Secret 내부에서 직접 키 확장 - Cargo.toml: workspace version 1.0.0 -> 1.1.0
Member
Author
|
aes 크레이트 보안 강화 커밋 완료 (20c1297) 이번 커밋에서 처리한 내용:
모든 aes 테스트 통과 (20 passed), 다음 단계로 다른 크레이트 검증 진행 예정. |
- 한/영 크로스 링크 추가 - 극 사소한 Docstring 린트 수정 - AES 검증 완료 -> cross-confirm.md 완료 수정
- cross-confirm.md SHA3 항목 완료 처리 - FIPS 202 공식 벡터 및 zeroize on drop 테스트 추가 - keccak c/d 배열 루프 외부 이동 후 소거 추가 - absorb_block 자기 차용 제거 및 스택 잔존 소거 강화
Member
Author
|
SHA3 검증 완료.
|
- sample.rs CoeffFromHalfByte 표준 구현 추가하고 rej_bounded_poly에 적용 - pack.rs BitPack/BitUnpack 부호 규칙을 b - w 로 정정
- PrivateKey k_seed 를 Secret 으로 감싸고 사용처는 expose 경유 - keygen_internal 비밀 스택 잔존값 명시적 소거 - sign_internal 거부 루프와 성공 경로 비밀 중간값 소거
- 44/65/87 첫 ACVP 벡터의 pk sk 정확 일치 검증 - 외부 의존 없이 수작업 hex 디코더 사용
Member
Author
|
mldsa 검증 완료. |
- 알고리즘 구현과 키 생성 서명 검증 흐름 기술 - 저수준 어셈블리 관점과 민감 데이터 소거 절 추가 - KAT 검증 결과와 발견한 문제 조치 기록
- mldsa/README.md 문서 사소한 수정
- README 수학 기호 LaTeX 표기로 수정 - README_EN 영문판 신규 작성
- README.md 신규 작성 (수학 기호 LaTeX 표기) - README_EN.md 영문판 신규 작성 - cross-confirm.md SHA3 항목 명세 완료 반영
- README_EN 어셈블리 수준 검증 섹션 추가 (llvm-objdump probe DSE 반례 형식 모델) - README 한국어판에 동일 내용 번역 반영 - cross-confirm 체크리스트에서 보강 필요 표기 제거
Member
Author
|
누락된 명세 추가 및 보강(수정) 완료. |
- 스칼라 곱셈 상수시간화 (비밀 비트 분기 제거) - 비정규 점 인코딩 거부 (RFC 8032 준수) - 죽은 코드 제거 및 비밀 중간값 소거 보강 - Scalar Sub 수정 및 RFC 8032 KAT 추가 - README 한영판 작성 및 cross-confirm Ed25519 반영
- diffie_hellman 저위수 점 거부 (all-zero 공유 비밀 -> X25519Error LowOrderPoint) - 몽고메리 사다리 루프 중간값 명시적 zeroize - FieldElement PartialEq 상수시간화 (XOR-OR 누적) - 미사용 dead code(neg, is_zero) 제거 및 PublicKey bit255 정규화
- README_EN 영문판 번역 - 양쪽 언어 배지 상호 링크 추가
- BLAKE3 new_keyed 키 워드 평문 잔류 제거 생성 즉시 Secret 래핑 - finalize 출력 길이 미달 시 잔여 다이제스트 바이트 소거 - 키드 BLAKE2b 및 blake2b_long KAT 추가 - 패닉 도스트링 헤더 및 RFC 9106 절 번호 정정
- 임의 길이 IV 용 encrypt_with_iv decrypt_with_iv 와 GCM_MIN_TAG_SIZE 추가 - GCM 테스트 케이스 18 19 와 태그 절단 검증 테스트 추가 - aes/tests 에 KCMVP CBC CTR GCM 하네스 추가 - sbox 주석 공백 정리
- all-zero 비트 패턴이 유효한 타입만 Secret 과 zeroize_flat 에 허용 - NonZero 나 Box 처럼 0 이 invalid value 인 타입 래핑을 컴파일타임 차단 - black_box 의 read_volatile 을 소유권 이동 반환으로 교체 - mldsa Poly PolyVec 과 elib-k0-ipc IsSecret 바운드 갱신
- internal 을 x86_64 aarch64 fallback ct128 로 분할 - 트레이트를 traits 모듈로 분리하고 CtGreeter 를 CtGtOps 로 개명 - 메서드명을 ct_eq ct_ne ct_gt ct_lt 로 통일해 표준 트레이트와 충돌 제거 - 배열과 Secret 에 대한 CtEqOps 구현 추가 - swap 임시값 소거를 zeroize 크레이트로 위임 - check_ct_asm 에 배열 ct_eq 분기 상한과 memcmp 치환 검사 추가 - 전 크레이트 호출부와 README 갱신
- HashDRBGSHA3_224 256 384 512 4종 구현과 재노출 - rng 에 sha3 워크스페이스 의존 추가 - rng/tests 에 KCMVP Hash_DRBG 하네스 추가
- tests/common/mod.rs 를 core 전용으로 작성해 no_std 베어메탈에서도 포함 가능하게 함 - FIPS 197 C3 와 SP 800-38A F2.5 F5.5 SP 800-38D case 14 15 16 벡터 수록 - GCM 태그 훼손 시 AuthenticationFailed 반환과 AES256 Drop 후 전 바이트 소거를 readback 으로 확인 - 진입점을 run_all 하나로 두고 실패 지점마다 고유 태그를 반환
- arch_x86_64.rs 와 arch_aarch64.rs 가 동일 KAT 배터리를 각 target_arch 에서 실행 - not(target_os = none) 술어로 베어메탈 빌드에서 std 하네스 요구를 차단 - target_arch guard 테스트로 cfg 게이트가 의도대로 걸렸음을 고정
- tests/baremetal.rs 를 no_std no_main 이중 모드로 작성해 호스트에서는 main 베어메탈에서는 _start 로 실행 - Cargo.toml 에 harness = false 테스트 타겟 선언 - black_box 로 KAT 호출이 lto opt-level z 환경에서 제거되지 않도록 고정 - arch guard 를 const 블록으로 옮겨 clippy assertions_on_constants 해소
- `dit.rs` 신설로 진입 시 PSTATE.DIT 설정하고 Drop 시 복원하는 `DitGuard` 제공 - 실제 asm 은 target_feature dit 빌드에서만 생성하고 그 외는 no-op 으로 두어 구형 코어 UNDEFINED 트랩 회피 - 하드웨어 보장 여부를 `DIT_HW_BACKED` 상수로 노출 - README 한영 양쪽에 구형 코어 잔여 위험과 x86 DOITM 커널 책임 기술 - AI_SCOPE 갱신
Quant-TheodoreFelix
left a comment
Member
Author
There was a problem hiding this comment.
이 릴리즈의 범위는 어디까지나 "암호 알고리즘 정확성 보강"으로, 이 작업은 후속 버전에서 담당할 예정.
추 후 이슈 등록해두고자 함.
| /// 타입이 소유권 있는 간접 참조(힙 포인터 등)를 포함하지 않아야 합니다. | ||
| /// `NonZeroU32`처럼 0이 invalid value인 타입이나 `Box`처럼 널이 될 수 없는 | ||
| /// 포인터 타입에 구현하면 소거 시점에 UB가 발생합니다. | ||
| pub unsafe trait Zeroable {} |
Member
Author
There was a problem hiding this comment.
트레이트명과 더불어 zeroize 크레이트명까지
중복되는 이름 변경을 고려할 필요 있음.
하지만 이 작업이 수행되면 다른 크레이트의 이름도 일관되게 변경될 예정.
반문 가능한 부분으로, 퍼블리시를 안 하면 괜찮음.
- `init_with` 로 기존 내용 소거 후 최종 위치에 직접 기록해 move 잔류 차단 - Drop 과 into_inner 의 중복 소거 블록을 `wipe` 로 통합 - `zeroize_readback.rs` 에 제자리 초기화 계약 테스트 추가
- 필드별 소거가 닿지 않던 Blake3 4바이트 ChunkState 3바이트 패딩이 잔류 - `zeroize_flat` 기반 구현으로 교체해 구조체 전체 바이트를 소거 - 두 구조체에 `Zeroable` 마커 부여
- AES256 CBC CTR GCM GHash 의 by-value 생성자를 제거해 라운드 키 이동 잔류 차단 - `GHash::finalize` 를 `&mut self` 로 바꿔 이동 소비 제거 - 단위 통합 KCMVP 베어메탈 하네스 호출처 이관
- ChaCha20Poly1305 ChaCha20 Poly1305 의 by-value 생성자 제거 - `Poly1305::finalize` 를 `&mut self` 로 변경 - KAT 하네스 호출처 이관
- `diffie_hellman_into` 로 호출자가 둔 버퍼에 직접 기록 - 몽고메리 사다리와 `to_bytes_into` 를 out 파라미터 방식으로 변경 - `generate_keypair` 도 비밀키를 제자리 생성하도록 수정
- SecretKey 와 Keypair 에 `init` 도입하고 by-value 생성자 제거 - `expand` 를 `expand_into` 로 바꿔 확장 비밀키 이동 제거 - 비밀 사본을 만드는 `Clone for SecretKey` 삭제 - 데몬 dispatcher 호출처 이관
- HashDRBG 8종에 `init_from_os` 와 `init_from_entropy` 도입해 by-value 반환 제거 - `SecureBuffer::init` 로 기존 상태 소거 후 길이 재설정 - KCMVP 하네스와 capability 회귀 테스트 호출처 이관
- `poly_tomsg` 와 `compress` 를 곱셈 시프트로 바꿔 비밀 의존 udiv 제거 - keygen encaps decaps 9개를 out 파라미터로 전환해 공유비밀 이동 잔류 차단 - KeyPair 3종에 Default 추가하고 KAT 하네스 이관 Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
- `keygen_internal` 과 `sk_decode` 를 out 파라미터로 변경 - PrivateKey PublicKey 에 Default 추가 - Secret 필드를 `init_with` 로 기록해 move 잔류 차단 Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
비밀 의존 나눗셈 제거와 Secret 이동 잔류 차단
- ACVP AFT/MCT 하네스 신설 - NIST CAVP GCM rsp 하네스 신설 - Wycheproof GCM CBC-PKCS5 하네스 신설
- ACVP AFT MCT LDT 하네스 신설 - Wycheproof HMAC 하네스 신설
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
기본적(PR 생성일 기준)으로는 다음의 수정이 반영되었습니다.
cross-confirm.md추가 - 크레이트별 구현 검증 현황 추적 문서 (SHA2, RNG, Constant-Time, Zeroize 검증 완료)README.md/README_EN.md- 릴리즈1.1.0섹션 추가 (교차 검증 진행 중 안내)AI_SCOPE.md/AI_SCOPE_EN.md- 사용 모델명 업데이트 (Opus 4.6 -> Fable 5 반영)rng/README_EN.md추가 - 한국어 README 영문 번역본이 외의 계속해서 KCMVP CAVP와 함께 암호 알고리즘을 검증하고, 문제를 찾아 해결하고, 정형 문서를 작성하며, 문서화를 보강할 예정입니다.
Notes
1.1.0릴리즈 반영에 관한 모든 변경은 이 브랜치에서만 진행됩니다.작업이 모두 완료되면
release1.1.0-confirm.md는 제거되며,1.1.0정식 릴리즈로 병합됩니다.