
rscrypto v0.9.0
Rust 암호화, 필수 의존성 제로: 해시, 체크섬, MAC, KDF, 비밀번호 해싱, AEAD, 서명, RSA, 키 교환, ML-KEM, ML-DSA. SIMD 및 ASM 백엔드를 갖춘 이식 가능한 Rust 참조 구현.
rscrypto
rscrypto는 암호화 기본 요소, 해시, 비밀번호 해싱, 체크섬을 제공하는 Rust 라이브러리입니다.
하나의 기능 모델이 이 모든 것을 제어합니다.
이식 가능한 Rust가 참조 구현입니다.
SIMD 및 어셈블리 백엔드는 지원되는 대상에서 더 빠르게 만듭니다.
프로덕션 빌드는 C, FFI, OpenSSL 또는 시스템 라이브러리에 의존하지 않습니다.
rscrypto는 기본 요소만 제공합니다.
TLS 스택, PKI 툴킷, 키 저장소 또는 프로토콜 구현이 아닙니다.
설치
rscrypto는 Rust 1.100이 필요합니다.
Rust 1.100이 안정화될 때까지는 1.100 베타 또는 더 새로운 nightly를 사용하세요.
가속화된 POWER, IBM Z 및 RISC-V 빌드는 nightly 컴파일러가 필요합니다;
portable-only 빌드는 선언된 MSRV를 지원합니다.
툴체인을 참조하세요.
SHA-2만 포함하는 최소 no_std 빌드:
[dependencies]
rscrypto = { version = "0.11", default-features = false, features = ["sha2"] }
운영 체제 무작위성을 사용하는 모든 기본 요소:
[dependencies]
rscrypto = { version = "0.11", features = ["full", "getrandom"] }
기본 기능은 std입니다.
이를 제거하려면 default-features = false로 설정하세요.
운영 체제에서 솔트, 키, 논스 또는 RSA 키 생성 엔트로피를 가져오는 API에만 getrandom을 활성화하세요.
기능 가이드는 기능을 선택하는 방법을 설명합니다.
Cargo.toml은 정확한 기능 그래프를 정의합니다.
빠른 시작
use rscrypto::Sha256;
let one_shot = Sha256::digest(b"hello world");
let mut hasher = Sha256::new();
hasher.update(b"hello ");
hasher.update(b"world");
assert_eq!(hasher.finalize(), one_shot);
해시 타입은 일회성 및 스트리밍 사용을 지원합니다.
examples/README.md에는 AEAD, 서명, RSA, P-256 및 P-384 ECDH,
X25519, ML-KEM, 비밀번호 해싱 및 백엔드 내부 검사를 위한 실행 가능한 예제가 있습니다.
기본 요소 및 기능
| 패밀리 | 기본 요소 | 기능 |
|---|---|---|
| 체크섬 | CRC-16, CRC-24, CRC-32, CRC-32C, CRC-64/XZ, CRC-64/NVMe | checksums 또는 리프 기능 |
| 암호화 해시 | SHA-2, SHA-3, SHAKE, cSHAKE, BLAKE2, BLAKE3, Ascon-Hash/XOF/CXOF | crypto-hashes 또는 리프 기능 |
| 고속 해시 | XXH3-64/128, RapidHash V3-64 | fast-hashes 또는 리프 기능 |
| MAC 및 KDF | HMAC-SHA-2/SHA-3, KMAC128/256, Poly1305, HKDF-SHA-2, PBKDF2-HMAC-SHA-2 | macs, kdfs 또는 리프 기능 |
| 비밀번호 해싱 | Argon2d/i/id, scrypt, 제한된 PHC 비밀번호 레코드 | password-hashing 또는 리프 기능 |
| 서명 및 RSA | ECDSA P-256/P-384, Ed25519, ML-DSA-44/65/87, SLH-DSA (모든 12개 FIPS 205 세트, pure 및 HashSLH-DSA), RSA 서명, 검증, 암호화 및 키 생성 | signatures 또는 리프 기능 |
| 키 교환 및 KEM | P-256 ECDH, P-384 ECDH, X25519, ML-KEM-512/768/1024 | key-exchange 또는 리프 기능 |
| AEAD | AES-GCM, AES-GCM-SIV, AES-SIV-CMAC, ChaCha20-Poly1305, XChaCha20-Poly1305, AEGIS-256, Ascon-AEAD128 | aead 또는 리프 기능 |
서명 및 KEM 키는 ECDSA, Ed25519, RSA, ML-DSA, ML-KEM 및 SLH-DSA에 대해 표준 DER (PKCS #8 및 SubjectPublicKeyInfo)을 가져오고 내보냅니다.
WebSocket accept 다이제스트는 프로토콜 호환성을 위해서만 존재합니다.
websocket-sha1 기능이 필요합니다.
full을 포함한 어떤 우산 기능도 이를 활성화하지 않습니다.
정확한 타입과 메서드는 docs.rs를 참조하세요. API 호환성 노트는 출력 타입, 컬렉션 시드 및 유지된 메서드 이름을 설명합니다. 암호화 복원력 가이드는 보안 가정, 마이그레이션 경계 및 더 강력한 암호화를 선택할 때 검토해야 할 증거를 설명합니다.
플랫폼 및 디스패치
이식 가능한 Rust 구현은 바이트 단위로 정확한 출력을 정의합니다.
모든 가속 백엔드는 동일한 출력을 제공해야 합니다.
컴파일 시 대상은 사용 가능한 백엔드를 설정합니다.
std를 사용하면 rscrypto는 런타임에 CPU 기능을 감지하고 백엔드를 선택합니다.
가속 백엔드를 사용할 수 없으면 이식 가능한 구현이 실행됩니다.
플랫폼 가이드는 지원되는 대상을 나열합니다.
또한 디스패치, no_std 지원 및 portable-only의 한계를 설명합니다.
보증
보안 주장은 그 증거가 통과하는 동안에만 존재합니다. 증거가 없거나 오래되면 주장이 제거되며, 게이트가 약화되지 않습니다.
- 정확성: NIST, RFC, 업스트림 및 Wycheproof 벡터, 독립 구현, 속성 테스트, 부정 테스트 및 Miri.
- 퍼징: 퍼즈 대상은 기본 요소, 파서, 상태 머신 및 트레이트 경계 전반에 걸쳐 프로덕션 코드를 실행합니다. 최소화된 입력은 테스트로 재생됩니다. 별도의 레인이 새니타이저와 함께 실행합니다.
- 백엔드: 차등 테스트는 각 가속 백엔드를 이식 가능한 Rust와 비교합니다. 길이, 정렬, 꼬리, 상태 전환, 디스패치 및 네이티브 대상에서의 폴백을 다룹니다.
- 상수 시간:
ct.toml은 테스트 중인 정확한 작업을 나열합니다. 증거는 최적화된 링크된 바이너리 검사, 고정 형태 커널에 대한 BINSEC 증명 및 엔드투엔드 작업에 대한 DudeCT 타이밍 테스트를 결합합니다. - 비밀: 비밀을 소유하는 타입은
Debug출력에서 내용을 숨기고 드롭 시 초기화된 저장소를 지웁니다. 복사 규칙은 타입에 따라 다릅니다; 예를 들어 키가 있는 BLAKE2 및 BLAKE3 상태는Clone을 지원합니다. 비밀 소유권 인벤토리는 각 타입을 나열합니다. - 실패: 검증 실패는 실패 이유를 알려주지 않습니다. 실패한 AEAD 열기는 인증되지 않은 평문을 지웁니다.
상수 시간 주장은 그 증거가 다루는 대상, 기능, 컴파일러, 프로필 및 작업에만 적용됩니다. 분기 없는 것처럼 보이는 소스 코드는 증명이 아닙니다.
자세한 내용은 테스트 증거, 상수 시간 모델, 비밀 수명 주기 및 위협 모델을 참조하세요.
rscrypto는 제3자 보안 감사를 받은 적이 없습니다.
프로젝트는 현재 비용을 지불할 수 없으며 자동화된 증거가 이를 대체하지 않습니다.
rscrypto는 감사, FIPS 140-3 검증, 형식 검증 또는 전체 크레이트로서 상수 시간이라고 주장하지 않습니다.
의심되는 취약점은 GitHub Private Vulnerability Reporting을 통해 보고하세요.
SECURITY.md 프로세스를 따르세요.
공개 이슈를 열지 마세요.
성능
벤치 실행 #37092266645는 2026-10-03에
8개 플랫폼에서 v0.10.0 소스를 측정했습니다.
각 플랫폼은 해시, 체크섬, MAC, XOF 및 scrypt의 346개 동등 비교를 가집니다.
각 비교는 가장 빠른 외부 크레이트의 중앙값 시간을 rscrypto의 중앙값 시간으로 나눕니다.
1.00x 이상의 비율은 rscrypto가 더 빠르다는 것을 의미합니다.
| 플랫폼 | 더 빠름 | 3% 이내 | 더 느림 | 중앙값 비율 |
|---|---|---|---|---|
Intel Linux (c8i) | 211 | 88 | 47 | 1.09x |
AMD Linux (c8a) | 256 | 81 | 9 | 1.13x |
Intel Windows (c8i) | 186 | 105 | 55 | 1.05x |
AMD Windows (c8a) | 262 | 68 | 16 | 1.09x |
Graviton5 Linux (c9g) | 147 | 121 | 78 | 1.01x |
| POWER10 Linux | 206 | 122 | 18 | 1.07x |
| IBM Z Linux | 301 | 19 | 26 | 2.77x |
| RISC-V Linux | 197 | 79 | 70 | 1.05x |
이 결과는 클라우드 및 공유 호스트에서의 한 번의 실행에서 나온 것입니다. AEAD, 서명, 키 교환, ML-KEM, ML-DSA, Argon2 또는 RSA 사례를 포함하지 않으며 macOS도 포함하지 않습니다. 벤치마크 개요는 패밀리별 결과, 방법 및 한계를 제공합니다. 비교 계약은 동등한 ML-KEM 및 Argon2 워크로드를 정의합니다. 이전 요약 표는 서로 다른 워크로드를 혼합했습니다. 이는 역사적 기록이며 현재 주장이 아닙니다.
프로젝트
가이드와 예제는 이 저장소의 소스를 설명합니다. 게시된 버전의 경우 일치하는 API 문서를 사용하세요.
코드를 변경하기 전에 CONTRIBUTING.md를 읽으세요.
CHANGELOG.md는 게시된 변경 사항을 나열합니다.
라이선스
Apache-2.0 또는 MIT에 따라 이중 라이선스가 부여되며, 선택은 귀하에게 있습니다.