Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
mlkem-native — ML-KEM / FIPS 203의 안전하고 빠르며 휴대 가능한 C90 구현 | Kitploit
도구/GitHubGitHub/pq-code-package/mlkem-native
Embedded Systems SecurityStatic AnalysisCryptographyHardware Security
GitHubpq-code-package/mlkem-native

mlkem-native

ML-KEM / FIPS 203의 안전하고 빠르며 휴대 가능한 C90 구현

저장소 보기웹사이트
2236591일 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

mlkem-native

CI Benchmarks C90

License: Apache License: ISC License: MIT

mlkem-native은 ML-KEM1의 안전하고 빠르며 이식 가능한 C902 구현체입니다. 이는 ML-KEM 참조 구현체3의 포크입니다.

mlkem/src/* 및 mlkem/src/fips202/*의 모든 C 코드는 CBMC4를 사용하여 메모리 안전성(메모리 오버플로 없음)과 타입 안전성(정수 오버플로 없음)이 증명되었습니다. 모든 AArch64 및 x86_64 어셈블리는 HOL-Light5를 사용하여 기능적 정확성, 메모리 안전성, 비밀 독립적 타이밍(상수 시간)이 증명되었습니다.

mlkem-native는 Arm(64비트, Neon), Intel/AMD(64비트, AVX2), RISC-V(64비트, RVV), POWER(ppc64le, VSX)용 네이티브 백엔드를 포함합니다. 성능 데이터는 벤치마크를 참조하세요.

mlkem-native는 Linux Foundation의 일부인 Post-Quantum Cryptography Alliance의 지원을 받습니다.

Ubuntu 빠른 시작

root@kitploit:~
# 기본 패키지 설치
sudo apt-get update
sudo apt-get install make gcc python3 git

# mlkem-native 클론
git clone https://github.com/pq-code-package/mlkem-native.git
cd mlkem-native

# 빌드 및 테스트 실행
make build
make test

# `make`를 감싸는 편의 래퍼인 `tests`를 사용하는 동일한 방법
./scripts/tests all
# 모든 옵션 표시
./scripts/tests --help

자세한 내용은 BUILDING.md를 참조하세요.

응용 프로그램

mlkem-native는 다음에서 사용됩니다.

  • Open Quantum Safe 프로젝트의 libOQS (기본 ML-KEM 구현체로) 0.13.0부터
  • AWS의 암호화 라이브러리 AWS-LC v1.50.0부터
  • Rust로 작성된 rustls TLS 라이브러리 (기본 암호화 공급자로 AWS-LC를 통해) 0.23.28부터
  • Pavona - 모듈식, 테이프아웃 검증 완료, 기본 보안 오픈 실리콘 블록 라이브러리

정형 검증

mlkem/src/* 및 mlkem/src/fips202/*의 모든 C 코드는 메모리 안전성(메모리 오버플로 없음)과 타입 안전성(정수 오버플로 없음)이 증명되었습니다. 이는 C Bounded Model Checker (CBMC)를 사용하며 소스 코드의 함수 계약 및 루프 불변식 주석을 기반으로 합니다. 자세한 내용은 proofs/cbmc를 참조하세요.

모든 AArch64 및 x86_64 어셈블리는 객체 코드 수준에서 기능적 정확성, 메모리 안전성, 비밀 독립적 타이밍(상수 시간)이 증명되었습니다. 이는 HOL-Light 대화형 정리 증명기와 s2n-bignum 검증 인프라(Arm 및 x86 아키텍처의 관련 부분 모델 포함)를 사용합니다. 자세한 내용은 proofs/hol_light를 참조하세요.

참고: 정형 검증은 절대적이지 않습니다. mlkem-native 관련 정형 검증 노력의 범위, 가정 및 위험에 대한 자세한 분석은 SOUNDNESS.md를 참조하세요.

보안

mlkem-native의 모든 AArch64 및 x86_64 어셈블리는 HOL Light에서 비밀 종속 제어 흐름, 메모리 접근 패턴 및 가변 지연 명령어가 없음이 공식적으로 증명되어 대부분의 타이밍 부채널을 차단합니다 (자세한 내용은 proofs/hol_light 참조). C 코드는 적절한 배리어와 상수 시간 패턴을 통해 컴파일러 도입 타이밍 부채널(KyberSlash6 또는 clangover7 등)에 대해 강화되었습니다.

비밀 종속 분기, 메모리 접근 패턴 및 가변 지연 명령어의 부재는 다양한 컴파일러 및 컴파일 옵션 조합으로 valgrind를 사용하여 테스트됩니다.

기타 공격. mlkem-native는 타이밍 부채널에 대한 저항만을 목표로 합니다. 전력 및 전자기 부채널, 마이크로아키텍처 부채널(예: 추측 실행), 또는 오류 주입 공격과 같은 다른 공격 클래스는 현재 범위를 벗어납니다.

설계

mlkem-native는 산술 및 FIPS202 / SHA3용 _프론트엔드_와 두 개의 _백엔드_로 분할됩니다. 프론트엔드는 고정되어 있으며 C로 작성되고 성능에 중요하지 않은 모든 루틴을 다룹니다. 백엔드는 유연하며 성능에 민감한 루틴을 처리하고 C 또는 네이티브 코드(어셈블리/인트린직)로 구현할 수 있습니다. 산술 백엔드는 mlkem/src/native/api.h, FIPS-202 백엔드는 mlkem/src/fips202/native/api.h를 참조하세요.

mlkem-native는 현재 다음 백엔드를 제공합니다:

  • 기본 휴대용 C 백엔드
  • 64비트 Arm 백엔드 (Neon 사용)
  • 64비트 Intel/AMD 백엔드 (AVX2 사용)
  • 64비트 RISC-V 백엔드 (RVV 사용)
  • 64비트 POWER 백엔드 (ppc64le, VSX 사용; POWER8 이상 지원)
  • 32비트 Armv8.1-M 백엔드 (Helium/MVE 사용) -- #1501 참조. 아직 실험적이며 기본적으로 비활성화되어 있습니다.

새 백엔드를 기여하려면 연락하거나 PR을 열어주세요.

우리의 AArch64 어셈블리는 SLOTHY 논문8에 설명된 접근 방식을 따라 SLOTHY 슈퍼최적화기를 사용하여 개발되었습니다: '깨끗한' 어셈블리를 수동으로 작성하고 마이크로 최적화를 자동화합니다(예: clean vs optimized AArch64 NTT 참조). 자세한 내용은 dev/README.md를 참조하세요.

테스트 벡터

mlkem-native는 모든 공식 ACVP ML-KEM 테스트 벡터9 및 Wycheproof10 ML-KEM 테스트 벡터에 대해 테스트됩니다.

ACVP

tests 스크립트 또는 ACVP 클라이언트를 직접 사용하여 ACVP 테스트를 실행할 수 있습니다:

root@kitploit:~
# tests 스크립트 사용
./scripts/tests acvp
# 특정 ACVP 릴리스 사용
./scripts/tests acvp --version v1.1.0.41

# ACVP 클라이언트 직접 사용
python3 ./test/acvp/acvp_client.py
python3 ./test/acvp/acvp_client.py --version v1.1.0.41

# 특정 ACVP 테스트 벡터 파일 사용 (ACVP-Server에서 다운로드)
# python3 ./test/acvp/acvp_client.py -p {PROMPT}.json -e {EXPECTED_RESULT}.json
# 예를 들어, 위 명령을 실행했다고 가정
python3 ./test/acvp/acvp_client.py \
  -p ./test/acvp/.acvp-data/v1.1.0.41/files/ML-KEM-keyGen-FIPS203/prompt.json \
  -e ./test/acvp/.acvp-data/v1.1.0.41/files/ML-KEM-keyGen-FIPS203/expectedResults.json

Wycheproof

tests 스크립트 또는 Wycheproof 클라이언트를 직접 사용하여 Wycheproof10 테스트를 실행할 수 있습니다:

root@kitploit:~
# tests 스크립트 사용
./scripts/tests wycheproof

# Wycheproof 클라이언트 직접 사용
python3 ./test/wycheproof/wycheproof_client.py

벤치마킹

tests 스크립트를 사용하여 성능, 메모리 사용량 및 바이너리 크기를 측정할 수 있습니다:

root@kitploit:~
# 속도 벤치마크 (-c는 사이클 카운터 선택: NO, PMU, PERF 또는 MAC)
# 참고: PERF/MAC은 sudo로 벤치마킹 바이너리를 실행하기 위해 -r 플래그가 필요할 수 있습니다
./scripts/tests bench -c PMU
./scripts/tests bench -c PERF -r

# 스택 사용량 분석
./scripts/tests stack

# 바이너리 크기 측정
./scripts/tests size

CI 벤치마크 결과 및 과거 성능 데이터는 벤치마킹 페이지를 참조하세요.

사용법

mlkem-native를 사용하려면 mlkem을 프로젝트의 소스 트리로 가져오고 선호하는 빌드 시스템을 사용하여 빌드하세요. 자세한 내용은 mlkem을, 간단한 예제는 examples/basic을 참조하세요. 이 저장소에 제공된 빌드 시스템은 개발 목적으로만 사용됩니다.

반환 값, 포인터 유효성, 오류 시 출력 버퍼 상태 등 모든 공용 함수에 적용되는 규칙은 API-CONVENTIONS.md를 참조하세요.

자체 FIPS-202를 가져올 수 있나요?

mlkem-native는 FIPS-20211 구현에 의존하며 함께 제공됩니다. 라이브러리에 자체 FIPS-202 구현이 있는 경우 mlkem-native와 함께 제공되는 구현 대신 사용할 수 있습니다. FIPS202.md 및 tiny_sha312을 사용하는 예제는 examples/bring_your_own_fips202를 참조하세요.

어셈블리 백엔드를 사용해야 하나요?

아니요. C 전용 빌드를 원하면 가져오기에서 mlkem/src/native 및/또는 mlkem/src/fips202/native 디렉토리를 생략하고 mlkem_native_config.h에서 MLK_CONFIG_USE_NATIVE_BACKEND_ARITH 및/또는 MLK_CONFIG_USE_NATIVE_BACKEND_FIPS202를 설정 해제하세요.

mlkem-native를 사용하려면 CBMC를 설정해야 하나요?

아니요. 사용을 고려하는 것을 권장하지만 mlkem-native는 CBMC 없이도 잘 빌드되고 실행됩니다. cbmc.h를 포함하고 CBMC가 정의되지 않았는지 확인하기만 하면 됩니다. 특히 코드에서 모든 함수 계약 및 루프 불변식을 제거할 필요는 없습니다. CBMC가 설정되지 않은 한 무시됩니다.

mlkem-native는 ML-KEM의 모든 보안 수준을 지원하나요?

예. 보안 수준은 mlkem_native_config.h에서 MLK_CONFIG_PARAMETER_SET=512/768/1024를 설정하여 구성되는 컴파일 타임 매개변수입니다. 라이브러리/응용 프로그램에 여러 보안 수준이 필요한 경우 공통 코드를 공유하면서 mlkem-native의 세 인스턴스를 빌드하고 링크할 수 있습니다. 이를 '다중 수준 빌드'라고 하며 examples/multilevel_build에서 시연됩니다. mlkem도 참조하세요.

자체 백엔드를 가져올 수 있나요?

예, ML-KEM 네이티브 산술 및/또는 FIPS-202용 추가 백엔드를 추가할 수 있습니다. 기존 백엔드를 템플릿으로 따르거나 사용자 정의 백엔드를 등록하는 방법에 대한 최소 예제는 examples/custom_backend를 참조하세요.

질문이 있으신가요?

mlkem-native에서 보안 버그를 발견했다고 생각되면 Github의 비공개 취약점 보고를 통해 취약점을 보고해 주세요. 공개 GitHub 이슈를 생성하지 마십시오.

다른 질문 / 보안 관련 없는 이슈 / 기능 요청이 있으면 GitHub 이슈를 열어주세요.

기여

mlkem-native 구축을 도와주고 싶다면 연락해 주세요. PQCA Discord를 통해 mlkem-native 팀에 연락할 수 있습니다. CONTRIBUTING.md도 참조하세요.

Footnotes

  1. National Institute of Standards and Technology: FIPS 203 Module-Lattice-Based Key-Encapsulation Mechanism Standard, https://csrc.nist.gov/pubs/fips/203/final ↩

  2. 엄밀히 말하면 C90 + stdint.h + 64비트 unsigned long long에 의존합니다. ↩

  3. Bos, Ducas, Kiltz, Lepoint, Lyubashevsky, Schanck, Schwabe, Seiler, Stehlé: CRYSTALS-Kyber C reference implementation, https://github.com/pq-crystals/kyber/tree/main/ref ↩

  4. Diffblue, Amazon Web Services: C Bounded Model Checker, https://github.com/diffblue/cbmc ↩

  5. John Harrison: HOL-Light Theorem Prover, https://hol-light.github.io/ ↩

  6. Bernstein, Bhargavan, Bhasin, Chattopadhyay, Chia, Kannwischer, Kiefer, Paiva, Ravi, Tamvada: KyberSlash: Exploiting secret-dependent division timings in Kyber implementations, https://kyberslash.cr.yp.to/papers.html ↩

  7. Antoon Purnal: clangover, https://github.com/antoonpurnal/clangover

도구 다운로드
↩
  • Abdulrahman, Becker, Kannwischer, Klein: Fast and Clean: Auditable high-performance assembly via constraint solving, https://eprint.iacr.org/2022/1303 ↩

  • National Institute of Standards and Technology: Automated Cryptographic Validation Protocol (ACVP) Server, https://github.com/usnistgov/ACVP-Server ↩

  • Community Cryptography Specification Project: Project Wycheproof, https://github.com/C2SP/wycheproof ↩ ↩2

  • National Institute of Standards and Technology: FIPS202 SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions, https://csrc.nist.gov/pubs/fips/202/final ↩

  • Markku-Juhani O. Saarinen: tiny_sha3, https://github.com/mjosaarinen/tiny_sha3 ↩