
기본 의존성 제로 Rust 암호화: BLAKE3, Ed25519/X25519, 해시, MAC, KDF, AEAD, 그리고 완전한 SIMD/ASM 가속을 갖춘 체크섬
rscrypto는 하나의 기능 모델 뒤에서 순수 Rust 암호화 프리미티브, 암호화 및 고속 해시, 비밀번호 해싱, 체크섬을 제공합니다.
프로덕션 C/FFI, OpenSSL 또는 시스템 라이브러리 의존성이 없습니다. 개별 기능은 좁은 빌드를 지원하고, 포괄 기능은 더 넓은 표면을 구성합니다.
하나의 프리미티브에는 개별 기능 하나를, 프리미티브 하위 집합에는 그룹을, 전체 크레이트 표면에는 full을 사용하세요. 이식 가능한 Rust 백엔드는 항상 존재합니다. SIMD와 ASM은 단지 가속기일 뿐입니다.
공개 벤치마크 스냅샷: Linux 러너에서 가장 빠른 외부 경쟁 구현 대비 1.59x 기하 평균, 4,052 / 6,750 승리 및 6,101 / 6,750 승리 또는 무승부.
macOS Apple Silicon 로컬 증거: 가장 빠른 외부 경쟁 구현 대비 1.37x 기하 평균, 382 / 774 승리 및 708 / 774 승리 또는 무승부.
원시 실행, 방법론 및 알려진 손실은
benchmark_results/OVERVIEW.md에 있습니다.
차트: 벤치마크 성과표. 1.00x 이상의 값은 rscrypto가 가장 빠른 일치 외부 구현보다 빠름을 의미합니다.
no_std, WASM, 서버, CLI, 임베디드 및 감사 환경 제약 빌드는 동일한 개별 기능 모델을 사용합니다.rscrypto는 프리미티브 크레이트입니다. TLS 스택, PKI 툴킷, 키 저장소 또는 프로토콜 구현이 아닙니다. FIPS 140-3 검증, 제3자 감사, 정형 검증 또는 크레이트 전체 상수 시간 동작을 주장하지 않습니다.
최소 no_std SHA-2 빌드:
[dependencies]
rscrypto = { version = "0.7.8", default-features = false, features = ["sha2"] }
OS 난수를 활성화한 전체 프리미티브 스택:
[dependencies]
rscrypto = { version = "0.7.8", features = ["full", "getrandom"] }
no_std 빌드에는 default-features = false를 사용하세요. 운영 체제에서 솔트, 키, 논스 또는 RSA 키 생성 엔트로피를 생성하는 API가 필요할 때만 getrandom을 활성화하세요.
use rscrypto::Sha256;
let one_shot = Sha256::digest(b"hello world");
let mut h = Sha256::new();
h.update(b"hello ");
h.update(b"world");
assert_eq!(h.finalize(), one_shot);
일반적인 API 형태는 편리할 때 one-shot, 필요할 때 스트리밍입니다.
전체 타입 맵이 필요하면 docs/types.md를, 가장 작은 기능 집합이 필요하면 docs/features.md를 사용하세요.
플래그는 용도에 따라 계층화됩니다:
sha2, blake3, aes-gcm, ed25519, x25519, ml-kem, crc32 등.hashes, checksums, macs, kdfs, password-hashing, aead, signatures, key-exchange.전체 기능 목록: docs/features.md.
공개 타입 목록: docs/types.md.
rscrypto는 크레이트의 모든 함수가 아니라 비밀을 다루는 연산에 대해서만 릴리스에 귀속된 범위 제한 상수 시간 주장을 합니다. ct.toml은 후보 프리미티브/구성 집합을 기록하며, 그 자체로 공개 주장을 만들지는 않습니다. 주장은 해당 정확한 버전, 커밋, 타깃, 프로필 및 기능 집합에 대해 모든 필수 게이트를 통과하는 증명된 rscrypto-X.Y.Z-ct-evidence.tar.gz 번들을 일치하는 서명된 GitHub 릴리스가 포함할 때만 존재합니다.
비밀을 담는 고정 크기 소유자 타입은 PartialEq나 Eq를 구현하지 않습니다. 해당 ct_eq 메서드는 불투명한 CtDecision을 반환하며, 호출자는 분기 가능한 비트를 얻기 위해 declassify()로 이를 명시적으로 소비해야 합니다. 검증 API는 해당 경계를 내부에 유지하고 하나의 불투명한 Result를 반환합니다. 이는 Rust API 경계에서의 오용 저항성이며, 다운스트림 머신 코드에 대한 증명이 아닙니다.
ct.toml의 주요 후보 비밀 처리 표면은 MAC/태그 검증, AEAD 인증 실패 형태, X25519 스칼라 곱셈, Ed25519 서명 및 비밀 공개키 파생, ECDSA P-256/P-384 블라인드 서명, ML-KEM-512/768/1024 키 생성, 캡슐화, 역캡슐화 비밀 표면, RSA 개인키 서명/복호화 리프, 그리고 선택된 비밀번호 검증 비교입니다.
공개 파싱, 목록에 없는 키 생성, OS 난수, 원시 해시, 체크섬, 비암호화 해시, 벤치마크 경로 및 공개키 검증 연산은 포괄적인 상수 시간 주장 대상이 아닙니다. 정확한 주장 및 검증 모델은 docs/constant-time.md를, 검토 경계는 docs/compliance.md를 참조하세요. v0.6.4까지의 릴리스에는 이 번들이 포함되지 않으므로 릴리스에 귀속된 상수 시간 주장이 없습니다.
rscrypto는 바이트 단위로 일치하는 기준을 이식 가능한 Rust 경로로 유지합니다. ISA 커널은 타깃 및 런타임 CPU가 지원하는 경우에만 선택됩니다.
전체 플랫폼 매트릭스: docs/platforms.md.
rscrypto는 모든 API나 빌드가 아니라, 일치하는 릴리스가 필요한 증거 번들을 게시할 때에만 범위 제한 상수 시간 주장을 합니다. docs/secret-ownership.md에 명명된 고정 크기 비밀 소유자 타입은 drop 시 소유한 바이트를 덮어쓰고 Debug를 마스킹합니다. 이 주장은 호출자의 복사본에는 적용되지 않습니다. 검증 실패는 불투명한 오류를 사용하며, 실패한 AEAD 열기는 호출자 출력 버퍼를 지웁니다. 릴리스 아티팩트는 서명된 태그로 게이트되며, crates.io Trusted Publishing을 통해 게시되고 GitHub 빌드 출처 증명으로 보호됩니다.
제3자 감사, FIPS 140-3 인증 또는 공식적인 크레이트 전체 증명은 주장되지 않습니다. 취약점은 공개 이슈가 아닌 GitHub Private Vulnerability Reporting 또는 SECURITY.md를 통해 신고하세요.
examples/, docs/features.md, docs/types.mdSECURITY.md, THREAT_MODEL.md, docs/constant-time.md, docs/compliance.mddocs/test-vector-coverage.md, docs/platforms.md, Rust 1.91.0.
rust-toolchain.toml에 고정된 nightly는 Miri, 퍼징 및 특수 아키텍처 검사에 사용됩니다.
Apache-2.0 또는 MIT에 따라 이중 라이선스로 제공되며, 선택은 사용자에게 달려 있습니다.
| 작업 | 기능 | 시작 위치 |
|---|
| AEAD 봉인/열기 | chacha20poly1305,getrandom | examples/aead_seal_open.rs |
| Ed25519 및 ECDSA 서명 | ed25519,ecdsa-p256,getrandom | examples/signatures.rs |
| RSA-PSS 검증 | rsa | examples/rsa_pss_verify.rs |
| ML-KEM 공유 비밀 | ml-kem,getrandom | examples/mlkem_encapsulation.rs |
| Argon2id 및 scrypt 비밀번호 해싱 | password-hashing,getrandom | examples/password_hashing.rs |
| 필요 | 포함 항목 | 기능 경로 |
|---|
| 암호화 해시 | SHA-2, SHA-3, SHAKE, cSHAKE128/256, BLAKE2, BLAKE3, Ascon-Hash/XOF/CXOF | hashes 또는 개별 기능 |
| MAC 및 KDF | HMAC-SHA-2/SHA-3, KMAC128/256, 독립형 Poly1305, HKDF-SHA-2, PBKDF2-HMAC-SHA-2 | auth 또는 개별 기능 |
| 비밀번호 해싱 | Raw Argon2d/i/id 및 scrypt KDF, 생성되며 길이 제한이 있는 PHC 비밀번호 레코드 | auth, argon2, scrypt, phc-strings |
| 공개키 프리미티브 | ECDSA P-256/P-384 서명/검증, Ed25519 서명, RSA 서명/검증/OAEP/RSAES-PKCS1-v1_5/키 생성, X25519 키 교환, ML-KEM-512/768/1024 KEM | auth, signatures, key-exchange, ecdsa, ecdsa-p256, ecdsa-p384, ed25519, rsa, x25519, ml-kem |
| AEAD 암호화 | AES-128/256-GCM, AES-128/256-GCM-SIV, ChaCha20-Poly1305, XChaCha20-Poly1305, AEGIS-256, Ascon-AEAD128 | aead 또는 개별 기능 |
| 체크섬 | CRC-16, CRC-24, CRC-32, CRC-32C, CRC-64/XZ, CRC-64/NVMe | checksums 또는 개별 기능 |
| 빠른 해시 | XXH3-64/128, RapidHash V3-64 | xxh3, rapidhash |
stdallocgetrandomparallelserdeportable-onlyserde-secretsserde| 대상 패밀리 | 가속 예시 |
|---|
| x86 / x86_64 | SSE4.2, AVX2, AVX-512, AES-NI, SHA-NI, VAES, VPCLMULQDQ |
| Arm / AArch64 / Apple Silicon | NEON, AES, PMULL, SHA2, SHA3, SVE2-PMULL |
| IBM Z | CPACF, MSA, VGFM, z/Vector ML-KEM 연산 |
| POWER / ppc64le | POWER8/9/10 벡터 및 암호화 확장 |
| RISC-V | RVV, Zbc, Zvkned, Zvbc |
| WASM | SIMD128 사용 가능 시, 그 외에는 항상 이식 가능한 폴백 |
docs/migration/CONTRIBUTING.mdCHANGELOG.md, docs/release.md