Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ dist/
*.iml
test-vectors/
.DS_*
*.pdf

### Rust template
# Generated by Cargo
Expand Down
81 changes: 58 additions & 23 deletions COMPLIANCE.md
Original file line number Diff line number Diff line change
@@ -1,49 +1,84 @@
# 인증 및 규정 준수 사항

> [!IMPORTANT]
> 테스트 벡터를 통과했다고 해서, 각 암호화 모듈 및 알고리즘 구현이 완전히 검증됐다는 것이 아닙니다.
> 이러한 테스트 벡터의 사용은 CAVP(Cryptographic Algorithm Validation Program)를 통해 얻은 검증을 대체하지 않습니다.
> 테스트 벡터를 통과했다고 해서 각 암호화 모듈 및 알고리즘 구현이 완전히 검증됐다는 것이 아닙니다.
> 이러한 CAVP(Cryptographic Algorithm Validation Program) 테스트 벡터 검증은 아무런 효력이 없으며, 암호 알고리즘이 '정상적으로 작동한다'를 알려줄 뿐 입니다.

NIST CAVP는 단일 알고리즘에 대한 검증 작업입니다. 실제 프로덕션 환경에서 사용되기 위해서는 FIPS 140-2/3에 따른 CMVP(Cryptographic Module Validation Program) 검증이 필요합니다. 즉, CAVP 인증은 CMVP 인증의 필수 선수 조건입니다.

## RNG
## RNG SP 800-90A Rev. 1 (B, C)

> [NIST CAVP - Random Number Generators](https://csrc.nist.gov/Projects/cryptographic-algorithm-validation-program/Random-Number-Generators)

- [ ] SP 800-90A DRBG(Deterministic Random Bit Generators)
- [ ] Hash DRBG
- [ ] HMAC DRBG
- [ ] CTR DRBG

> [KCMVP](https://seed.kisa.or.kr/kisa/kcmvp/EgovVerification.do) (KS X ISO/IEC 18031)
> [KCMVP](https://seed.kisa.or.kr/kisa/kcmvp/EgovVerification.do)

- [ ] Security techniques - Hash-functions - Part 3: Dedicated hash-functions (2018)
- [ ] Hash DRBG
- [ ] HMAC DRBG
- [ ] CTR DRBG

## SHA2
## SHA2 (FIPS 180-4)

> [NIST CAVP - Secure Hashing](https://csrc.nist.gov/projects/cryptographic-algorithm-validation-program/secure-hashing)

- [ ] FIPS 180-4 SHA Test Vectors for Hashing Bit/Byte-Oriented Messages
- [ ] SHA-224
- [ ] SHA-256
- [ ] SHA-384
- [ ] SHA-512

> [KCMVP](https://seed.kisa.or.kr/kisa/kcmvp/EgovVerification.do) (KS X ISO/IEC 10118-3:2001)
> [KCMVP](https://seed.kisa.or.kr/kisa/kcmvp/EgovVerification.do)

- [ ] Security techniques - Hash-functions - Part 3: Dedicated hash-functions (2018)
- [X] SHA-224
- [X] SHA-256
- [X] SHA-384
- [X] SHA-512

## SHA3
## SHA3 (FIPS 202)

> [NIST CAVP - Secure Hashing](https://csrc.nist.gov/projects/cryptographic-algorithm-validation-program/secure-hashing)

- [X] FIPS 202 SHA-3 Hash Function Test Vectors for Hashing Bit/Byte-Oriented Messages
- [X] FIPS 202 SHA-3 XOF Test Vectors for Bit/Byte-Oriented Output
- [X] SHA-3 224
- [X] SHA-3 256
- [X] SHA-3 384
- [X] SHA-3 512
- [X] XOF (SHAKE128)
- [X] XOF (SHAKE256)

> [KCMVP](https://seed.kisa.or.kr/kisa/kcmvp/EgovVerification.do) (KS X ISO/IEC 10118-3:2001)
> [KCMVP](https://seed.kisa.or.kr/kisa/kcmvp/EgovVerification.do)

- [X] Security techniques - Hash-functions - Part 3: Dedicated hash-functions (2018)
- [X] SHA-3 224
- [X] SHA-3 256
- [X] SHA-3 384
- [X] SHA-3 512

## HKDF
## HKDF (SP 800-108)

> [NIST CAVP - Key Derivation](https://csrc.nist.gov/projects/cryptographic-algorithm-validation-program/key-derivation) (SP 800-108)
> [NIST CAVP - Key Derivation](https://csrc.nist.gov/projects/cryptographic-algorithm-validation-program/key-derivation)

- [ ] KDF in Counter Mode Test Vectors
- [ ] KDF in Feedback Mode Test Vectors where no counter is used
- [ ] KDF in Feedback Mode Test Vectors where zero length IV is allowed
- [ ] KDF in Feedback Mode Test Vectors where zero length IV is not allowed
- [ ] KDF in Double-Pipeline Iteration Mode Test Vectors where no counter is used
- [ ] KDF in Double-Pipeline Iteration Mode Test Vectors where counter is used
- [ ] HKDF SHA-2
- [ ] HKDF SHA-3

## HMAC (FIPS 198-1)

> [NIST CAVP - Keyed-Hash Message Authentication Code](https://csrc.nist.gov/Projects/cryptographic-algorithm-validation-program/Message-Authentication)

- [ ] HMAC

> [KCMVP](https://seed.kisa.or.kr/kisa/kcmvp/EgovVerification.do)

- [X] HMAC (SHA-2)
- [X] HMAC (SHA-3)

## Digital Signature (Composite)

> [Post-Quantum-Cryptography/KAT/MLDSA](https://github.com/post-quantum-cryptography/KAT/tree/main/MLDSA) (FIPS 204)

- [ ] ML-DSA-44 KeyPair generation
- [ ] ML-DSA-44 Sign/Verify
- [ ] ML-DSA-65 KeyPair generation
- [ ] ML-DSA-65 Sign/Verify
- [ ] ML-DSA-87 KeyPair generation
- [ ] ML-DSA-87 Sign/Verify
85 changes: 83 additions & 2 deletions COMPLIANCE_EN.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,84 @@
# Certification or Compliance
# Certification and Compliance

In Progressss...
> [!IMPORTANT]
> Passing the test vectors does not mean that each cryptographic module and algorithm implementation is fully validated.
> These CAVP (Cryptographic Algorithm Validation Program) test vector validations have no legal effect and merely indicate that the cryptographic algorithm 'operates normally.'

NIST CAVP is a validation process for individual algorithms. For use in actual production environments, CMVP (Cryptographic Module Validation Program) validation according to FIPS 140-2/3 is required. In other words, CAVP certification is a mandatory prerequisite for CMVP certification.

## RNG SP 800-90A Rev. 1 (B, C)

> [NIST CAVP - Random Number Generators](https://csrc.nist.gov/Projects/cryptographic-algorithm-validation-program/Random-Number-Generators)

- [ ] Hash DRBG
- [ ] HMAC DRBG
- [ ] CTR DRBG

> [KCMVP](https://seed.kisa.or.kr/kisa/kcmvp/EgovVerification.do)

- [ ] Hash DRBG
- [ ] HMAC DRBG
- [ ] CTR DRBG

## SHA2 (FIPS 180-4)

> [NIST CAVP - Secure Hashing](https://csrc.nist.gov/projects/cryptographic-algorithm-validation-program/secure-hashing)

- [ ] SHA-224
- [ ] SHA-256
- [ ] SHA-384
- [ ] SHA-512

> [KCMVP](https://seed.kisa.or.kr/kisa/kcmvp/EgovVerification.do)

- [X] SHA-224
- [X] SHA-256
- [X] SHA-384
- [X] SHA-512

## SHA3 (FIPS 202)

> [NIST CAVP - Secure Hashing](https://csrc.nist.gov/projects/cryptographic-algorithm-validation-program/secure-hashing)

- [X] SHA-3 224
- [X] SHA-3 256
- [X] SHA-3 384
- [X] SHA-3 512
- [X] XOF (SHAKE128)
- [X] XOF (SHAKE256)

> [KCMVP](https://seed.kisa.or.kr/kisa/kcmvp/EgovVerification.do)

- [X] SHA-3 224
- [X] SHA-3 256
- [X] SHA-3 384
- [X] SHA-3 512

## HKDF (SP 800-108)

> [NIST CAVP - Key Derivation](https://csrc.nist.gov/projects/cryptographic-algorithm-validation-program/key-derivation)

- [ ] HKDF SHA-2
- [ ] HKDF SHA-3

## HMAC (FIPS 198-1)

> [NIST CAVP - Keyed-Hash Message Authentication Code](https://csrc.nist.gov/Projects/cryptographic-algorithm-validation-program/Message-Authentication)

- [ ] HMAC

> [KCMVP](https://seed.kisa.or.kr/kisa/kcmvp/EgovVerification.do)

- [X] HMAC (SHA-2)
- [X] HMAC (SHA-3)

## Digital Signature (Composite)

> [Post-Quantum-Cryptography/KAT/MLDSA](https://github.com/post-quantum-cryptography/KAT/tree/main/MLDSA) (FIPS 204)

- [ ] ML-DSA-44 KeyPair generation
- [ ] ML-DSA-44 Sign/Verify
- [ ] ML-DSA-65 KeyPair generation
- [ ] ML-DSA-65 Sign/Verify
- [ ] ML-DSA-87 KeyPair generation
- [ ] ML-DSA-87 Sign/Verify
38 changes: 23 additions & 15 deletions CONTRIBUTION.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,33 +4,38 @@

_안녕하세요. 저희는 팀 퀀트(Quant)이며, 저는 Quant Theodore Felix라고 합니다._

**이 프로젝트에 기여해주시는 모든 여러분에게 정말 감사드리며,** 몇 가지 사전 준비 사항을 알려드리고자 합니다. 우선, 이 프로젝트는 [`MIT LICENSE`](LICENSE)를 따릅니다.
**이 프로젝트에 기여해주시는 모든 여러분에게 정말 감사드리며,** 몇 가지 사전 준비 사항을 알려드리고자 합니다. 우선, 이 프로젝트는 [`MIT LICENSE`](LICENSE)를 따르지만 상위 프로젝트인 "얽힘 라이브러리"는 `PolyForm Noncommercial License 1.0.0` 라이선스를 따르기 때문에 상업(경제)적 선에서 자유롭지 못한 것을 이해해주시길 바랍니다. 정리하면 다음의 용도가 가능합니다.

저희 팀은 모든 프로젝트를 진행함에 있어 **매우 엄격한 보안**과 **효율적인 메모리 관리**를 중요시합니다. 여러분은 [이 프로젝트의 보안 정책](SECURITY.md)을 참고하실 수 있습니다. 만약 여러분이 이 프로젝트에 기여하고자 한다면 "내가 작성하는 모든 코드에 있어 기본적으로 보안에 충실하다." 라는 사항에 반드시 동의해주셔야 합니다. 이하, 여러분이 기여해주시면 이 사항에 전적으로 동의한 것으로 간주됩니다.
- **허용**: 학습, 개인 프로젝트, 비영리 연구, 교육 목적의 내부적 사용 등.
- **금지**: 직접적 판매 행위, 상용 서비스 내부 활용, 영리 회사 내 업무 사용 등.

여러분이 쉽고 빠르게 코드를 작성하고, 저희는 여러분의 변경을 적극적으로 반영하기 위해 다음의 기본 규칙을 정의했습니다. 해당 규칙은 기여자 여러분들에게 1차적으로 적용되며, 병합 작업을 처리하는 저희들에게 다시금 적용됩니다. 이러한 부분에서 다소 불편을 드려 죄송할 따름입니다. **하지만 저희는 매우 엄격한 보안 규칙에 대해 깊은 신념을 가지고 있고, 이를 이해해주십사 합니다.**
저희 팀은 모든 프로젝트를 진행함에 있어 **매우 엄격한 보안**과 **효율적인 메모리 관리**를 중요시합니다. 여러분은 [이 프로젝트의 보안 정책](SECURITY.md)을 참고하실 수 있습니다.

이 프로젝트에 기여하기 전, 얽힘 라이브러리의 보안 철학에 따라 **"내가 작성한 코드는 보안에 충실한가?"** 라는 의문을 가져주시길 바랍니다!

## 기여 규칙

1. 여러분은 Rust 기반의 코드를 작성하실 수 있습니다. 이 떄 명심해야 하는 것은, 해당 코드는 [얽힘 라이브러리](https://github.com/Quant-Off/entanglementlib) 측에서 [FFM API](https://openjdk.org/jeps/454)를 통해 호출됩니다. 말인 즉슨, 작성되는 코드는 해당 라이브러리로부터 접근 가능한 부분이 관측되어야 합니다. 이는 곧 "정밀한 구현의 캡슐화"라는 의미로 직결됩니다. **API로서 공개 가능한 부분과, 내부 구현을 명확히 캡슐화**하여 주시길 바랍니다.
2. 기본적으로 저희는 **적극적인 테스트**를 기대하고 예상합니다. 이는 간단히, 여러분이 작성한 기능에 대해서 **아주 명확한 테스트가 존재해야 함**을 의미합니다. 테스트는 아시다시피 프로젝트 발전 뿐 아니라 **여러분이 작성한 코드를 파악하는 데 아주 큰 도움이 됩니다.** 작성한 기능이 어떻게 동작해야 하고, 특수한 경우에는 어떻게 동작하는지(엣지케이스)에 대해 명확히 테스트를 작성해 주시길 바랍니다. **테스트에서도 아주 치명적인 취약점을 발견할 수도 있습니다!**
3. 그리고 벤치마킹에 관해 알려드리고 싶습니다. 이 프로젝트는 `Criterion` 크레이트를 사용하여 벤치마킹을 진행하고, 그 결과를 [benchmarks/](benchmarks) 하위에 명명백백히 기록합니다. 다만 여러분이 진행한 벤치마킹 결과를 관련 문서에 정리하실 필요는 없습니다! 어쨌든, 저희가 진행하는 벤치마킹은 일반적으로 "보안성(security)", "처리량(throughout)" 평가로 나뉩니다. 여러분도 일관된 스타일로 벤치마킹 코드를 작서해주셨으면 합니다. **그리고 이 사항은 필수가 아님을 말씀드리고 싶습니다!**
여러분이 쉽고 빠르게 코드를 작성하고, 여러분의 변경을 적극적으로 반영하기 위해 다음의 기본 규칙을 정의했습니다. 해당 규칙은 메인테이너와 기여자 여러분 모두에게 공통적으로 적용됩니다.

1. 여러분은 Rust, C/C++ 기반의 코드를 작성하실 수 있습니다. 이 떄 명심해야 하는 것은, **FFI 경계 통신 표준을 위한 구현**입니다. 말인 즉슨, 작성되는 코드가 외부로부터 접근 가능한 부분과 핵심 연산이 수행되는 부분이 엄격히 차별(캡슐화)되어 있어야 합니다.
2. 기본적으로 저희는 **적극적인 테스트**를 예상합니다. 이는 간단히, 여러분이 작성한 기능에 대해 **명확한 테스트가 존재해야 함**을 의미합니다. 테스트는 프로젝트 발전 뿐 아니라 **여러분이 작성한 코드를 파악하는 데 아주 큰 도움이 됩니다.** 작성한 기능이 어떻게 동작해야 하고, 특수한 경우에는 어떻게 동작하는지(엣지케이스)에 대해 명확히 테스트를 작성해 주시길 바랍니다. **테스트에서도 아주 치명적인 취약점을 발견할 수도 있습니다!**
3. 그리고 벤치마킹에 관해 알려드리고 싶습니다. 이 프로젝트는 `Criterion` 크레이트를 사용하여 벤치마킹을 진행하고, 그 결과를 [benchmarks/](benchmarks) 하위에 명명백백히 기록합니다. `entlib-native`의 벤치마킹은 "보안성(security)", "처리량(throughout)"의 성능 평가로 구분됩니다. (이 사항은 필수가 아닙니다!)

여러분은 **위 규칙에 전적으로 해당되는 아주 방대한 양의 특수 보안 기능에 대한 코드를 작성**하실 수 있고, 단순 최적화나 버그, `docstring` 및 문서 오타 발견 등의 문제를 발견하여 이를 수정하고자 하실 수도 있습니다. 간단한 변경이라 판단되는 경우 위 규칙을 **엄격하게 따르실 필요는 없습니다.**

좀 더 구체적으로 설명드리자면, 위 규칙은 여러분이 작성한 코드에 **외부 가시성**, **함수 및 변수 등의 멤버 정의**, **기존 기능의 변경**이 포함된 경우에만 적용됩니다. 갑작스러운 오류에 대비하기 위해 저희가 해당 변경을 면밀히 검토하겠습니다.
좀 더 구체적으로 설명드리자면, 위 규칙은 여러분이 작성한 코드에 **외부로부터의 가시성**, **함수 및 변수 등의 멤버 정의**, **기존 기능의 변경**이 포함된 경우에만 적용됩니다. 갑작스러운 오류에 대비하기 위해 저희가 해당 변경을 면밀히 검토하겠습니다.

꽤 특수한 경우는 존재합니다. **만약 여러분이 워크플로를 추가 및 수정하고자 한다면, 반드시 이슈(issues)로 알려주시길 바랍니다.** 이는 혼동의 위험이 있기 때문입니다.
꽤 특수한 경우로, **만약 여러분이 워크플로를 추가 및 수정(또는 아이디어 논의)하고자 한다면, 반드시 `Level 2`(후술) 이슈(issues)로 알려주시길 바랍니다.** 이는 혼동의 위험이 있기 때문입니다.

## 마음 편하게 기여해주세요

이 프로젝트는 상당히 기여 기준점이 높다는 것을 저희도 알고 있습니다. **하지만 이것이 "당신의 코드가 이 규칙을 충족하지 않으면 사용하지 않겠다." 라는 의미가 아님을 명확히** 말씀드리고 싶습니다.
상당히 기여 기준점이 높다는 것을 저희도 알고 있습니다. **하지만 이것이 "당신의 코드가 이 규칙을 충족하지 않으면 사용하지 않겠다." 라는 의미가 아님을 명확히** 말씀드리고 싶습니다.

저희는 여러분의 피드백이 큰지, 작은지, 중요한지, 필요한지, 의미 있는지 등을 기계처럼 평가하는 단체가 아닙니다. **어디까지나 중요한 것은 여러분 개개인이 가진 철학을 이 코드에** 심어주시는 것이며, 단순히 **코드에 대한 감상을 말씀해주시는 것 만으로도 저희는 너무나 감사할 따름입니다!** 저희가 말하고 싶은 것은 **여러분이 이 코드를 어떠한 방식으로든 리뷰함에 있어 기본적으로 감사함을 느끼고 있다**는 것입니다.
저희는 여러분의 피드백이 큰지, 작은지, 중요한지, 필요한지, 의미 있는지 등을 기계처럼 평가하는 단체가 아닙니다. **어디까지나 중요한 것은 여러분 개개인이 가진 철학을 이 코드에** 심어주시는 것이며, 단순히 **코드에 대한 감상을 말씀해주시는 것 만으로도 저희는 너무나 감사할 따름입니다! **저희가 말하고 싶은 것은 **여러분이 이 코드를 어떠한 방식으로든 리뷰함에 있어 기본적으로 감사함을 느끼고 있다**는 것입니다.

짜증나는 규칙으로 인해 이 프로젝트와의 상호 작용을 그만두진 않으셨으면 합니다. **여러분이 이 코드를 리뷰함에 있어 부담감을 느낀다면, 이 프로젝트는 존재 가치가 없다고 저희는 생각하고 있습니다.**

저희 팀은 보안의 측면에서 가능한 수에 대비하고, 또 그 행동을 모두와 함께 하는 미래를 그리고 있다는 걸 알아주시면 감사하겠습니다!
저희 팀은 보안의 측면에서 가능한 많은 수에 대비하고, 또 그 행동을 모두와 함께 하는 미래를 그리고 있다는 걸 알아주시면 감사하겠습니다.

# 손쉬운 접근 및 방향성

Expand All @@ -54,14 +59,17 @@ _안녕하세요. 저희는 팀 퀀트(Quant)이며, 저는 Quant Theodore Felix

# 최신 릴리즈 업데이트 기준 주요 기여

이 프로젝트에 있어 다음 항목에 해당하는 기여는 저희가 1순위로 검토합니다(물론 보안 기여는 0순위입니다).
이 프로젝트에 있어 다음 항목에 해당하는 기여는 `Level 3`으로 분류되며, 1순위로 검토합니다(물론 보안 기여는 0순위입니다).

- 공통
- 많은 크레이트의 핵심 기능은 `Result` 열거형을 통해 `SecureBuffer` 구조체와 문자열 참조를 반환합니다. 이는 오류 전파에 부적절합니다.
- **올바른 오류 전파 방법**: 많은 크레이트의 핵심 기능은 `Result` 열거형을 통해 `SecureBuffer` 구조체와 문자열 참조를 반환합니다. 이는 오류 전파에 부적절합니다.
- **컴플라이언스 문제**: 암호 모듈 구현에 있어 국제적 인증 및 규정을 준수하지 않은 부분을 발견했다면, 즉시 연락주세요.
- 보안 버퍼 크레이트 `entlib-native-secure-buffer`
- `zeroizer.rs` 내 no_std 폐쇄 환경을 위한 Fall-back 시, 해당 환경의 하드웨어(CPU) 특성에 따라 캐시 라인 플러시가 보장되지 않을 수 있다고 합니다. 이 부분에 대해 섬세한 평가검증이 필요합니다.
- **베어메탈 캐시 플러시 문제**: `zeroizer.rs` 내 no_std 폐쇄 환경을 위한 Fall-back 시, 해당 환경의 하드웨어(CPU) 특성에 따라 캐시 라인 플러시가 보장되지 않을 수 있다고 합니다. 이 부분에 대해 섬세한 평가검증이 필요합니다.
- **이중 잠금**: JO(Java-Owned) 패턴을 통해 상호 작용 시 메모리 lock 수행 후 전달됩니다. Rust 측 `SecureMemoryBlock` 구조체는 이 데이터에 대해 한 번 더 lock을 수행합니다. 이 작업에 대해 어떻게 생각하시나요?
- CI 워크플로
- CC 상수-시간 감사 워크플로의 Level 3(바이너리 메모리 오염 추적)은 Unix 환경에서 Valgrind를 사용하여 테스트를 수행합니다. 하지만 저는 아직 이 부분에 대해 큰 아이디어가 없어 임시 비활성화해둔 상태입니다. 이 부분에 대해 좋은 아이디어를 가지고 있다면 알려주세요.
- **엄격한 상수-시간 검사**: 현재 구현된 상수-시간 연산이 부족해 보이시거나, 엄격한 검증을 위해서는 어떻게 해야 한다고 생각하시나요?
- **메모리 오염 추적 방법**: CC 상수-시간 감사 워크플로의 Level 3(바이너리 메모리 오염 추적)은 Unix 환경에서 Valgrind를 사용하여 테스트를 수행합니다. 하지만 저는 아직 이 부분에 대해 큰 아이디어가 없어 임시 비활성화해둔 상태입니다. 이 부분에 대해 좋은 아이디어를 가지고 있다면 알려주세요.

# 연락

Expand Down
Loading
Loading