Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

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

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 구현

저장소 보기
24168806일 전Kitploit 검토 완료

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
웹사이트

mlkem-native

CI Benchmarks C90

License: Apache License: ISC License: MIT

mlkem-native은 ML-KEM[^FIPS203]의 안전하고 빠르며 이식 가능한 C90[^C90] 구현체입니다. 이는 ML-KEM 참조 구현체[^REF]의 포크입니다.

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

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 빠른 시작

# 기본 패키지 설치
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 코드는 적절한 배리어와 상수 시간 패턴을 통해 컴파일러 도입 타이밍 부채널(KyberSlash[^KyberSlash] 또는 clangover[^clangover] 등)에 대해 강화되었습니다.

비밀 종속 분기, 메모리 접근 패턴 및 가변 지연 명령어의 부재는 다양한 컴파일러 및 컴파일 옵션 조합으로 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 논문[^SLOTHY_Paper]에 설명된 접근 방식을 따라 SLOTHY 슈퍼최적화기를 사용하여 개발되었습니다: '깨끗한' 어셈블리를 수동으로 작성하고 마이크로 최적화를 자동화합니다(예: clean vs optimized AArch64 NTT 참조). 자세한 내용은 dev/README.md를 참조하세요.

테스트 벡터

mlkem-native는 모든 공식 ACVP ML-KEM 테스트 벡터[^ACVP] 및 Wycheproof[^wycheproof] ML-KEM 테스트 벡터에 대해 테스트됩니다.

ACVP

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

# 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 클라이언트를 직접 사용하여 Wycheproof[^wycheproof] 테스트를 실행할 수 있습니다:

# tests 스크립트 사용
./scripts/tests wycheproof

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

벤치마킹

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

# 속도 벤치마크 (-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를 가져올 수 있나요?

도구 다운로드