
rscrypto v0.8.0
デフォルト依存関係ゼロのRust暗号: BLAKE3、Ed25519/X25519、ハッシュ、MAC、KDF、AEAD、チェックサムを完全なSIMD/ASMアクセラレーションで提供
rscrypto
rscrypto は、暗号プリミティブ、暗号学的ハッシュと高速ハッシュ、パスワードハッシュ、およびチェックサムを単一のフィーチャーモデルの背後にまとめます。
ターゲットでゲートされた SIMD とアセンブリは、本番環境での C/FFI、OpenSSL、システムライブラリへの依存なしに、ポータブルな Rust バックエンドを高速化します。
rscrypto はプリミティブのクレートであり、TLS スタック、PKI ツールキット、キーストア、プロトコル実装ではありません。
測定されたパフォーマンス
パフォーマンスの主張は、正確に保持されたキャンペーンと同等のワークロードに限定されます。 修正された 2026 年 9 月のキャンペーンには 19,614 件の完了したケースが含まれ、 修正された ML-KEM と Argon2 の比較も含まれますが、 代替となる集約スコアカードはまだキュレーションされていません。 エントロピー、鍵の準備、出力表現、またはソルト長を混在させた古い集約結果は 歴史的記録として残り、現在のパフォーマンスの主張ではありません。
ベンチマーク概要 には、キャンペーン、ターゲット固有の結果、および残された制限が記録されています。
比較契約 は、同等の ML-KEM および Argon2 ワークロードを定義しています。
保証
セキュリティの主張はフェイルクローズドです。証拠が欠落しているか 古い場合、ゲートを弱めるのではなく主張が削除されます。
- 正確性の証拠は、NIST、RFC、アップストリーム、および Wycheproof のベクターを、 別個の実装、プロパティ、ネガティブテスト、および Miri と組み合わせています。
- ファズターゲットは、プリミティブ、パーサー、ステートマシン、 およびトレイトの境界を越えて本番実装を実行します。 最小化されたシードはテストとして再生され、別個のサニタイザーレーンがあります。
- ポータブル対アクセラレーテッドの差分テストは、ネイティブターゲット上の長さ、アラインメント、 テール、状態遷移、ディスパッチ、およびフォールバック動作をカバーします。
- 定数時間ハーネスは、
ct.toml内の正確な操作をインベントリ化し、 最適化されたリンク済みバイナリ検査、宣言された固定形状カーネルの BINSEC 証明、 および宣言されたエンドツーエンドケースの DudeCT タイミングテストを組み合わせています。 - シークレットの所有者は
Debugを編集し、ドロップ時に初期化されたストレージをクリアします。 複製ルールは型によって異なります。キー付き BLAKE2/BLAKE3 状態はCloneをサポートします。 所有権インベントリ にこれらの境界が記載されています。 検証の失敗は不透明です。失敗した AEAD オープンは未認証の平文をクリアします。
定数時間の主張は、必要なターゲット、フィーチャー、コンパイラ、プロファイル、 および操作の証拠が合格した場合にのみ存在します。 ブランチレスに見えるソースは証明として扱われません。
テスト証拠、定数時間モデル、シークレットライフサイクル、および 脅威モデル を確認してください。
残る独立したレビューのギャップは、第三者によるセキュリティ監査です。
プロジェクトは現在、その資金を調達できません。
自動化された証拠はそのレビューを代替するものではないため、rscrypto は監査済み、
FIPS 140-3 検証済み、形式的に検証済み、またはクレート全体として定数時間であるとは主張しません。
疑わしい脆弱性は、公開 Issue ではなく、SECURITY.md プロセスに基づき
GitHub Private Vulnerability Reporting を通じて報告してください。
使用するものだけをインストール
最小限の no_std SHA-2 ビルド:
[dependencies]
rscrypto = { version = "0.10", default-features = false, features = ["sha2"] }
OS ランダム性を有効にした完全なプリミティブスタック:
[dependencies]
rscrypto = { version = "0.10", features = ["full", "getrandom"] }
デフォルトのフィーチャーは std です。default-features = false はそれを削除します。
getrandom は、ソルト、鍵、ノンス、または RSA 鍵生成エントロピーを
オペレーティングシステムから取得する API に対してのみ有効にしてください。
フィーチャーガイド はビルドの選択について説明しています。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);
ハッシュ API はワンショットとストリーミングの使用をサポートします。
AEAD、署名、RSA、P-256 および P-384 ECDH、X25519、ML-KEM、パスワードハッシュ、
およびバックエンドイントロスペクションの実行可能なワークフローは examples/README.md にあります。
プリミティブとフィーチャーのマップ
| ファミリー | 含まれるもの | 有効化 |
|---|---|---|
| チェックサム | 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, 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 またはリーフフィーチャー |
互換性専用の WebSocket accept ダイジェストには websocket-sha1 が必要であり、
これは full およびその他のすべてのアンブレラフィーチャーから除外されています。
正確な型とメソッドについては docs.rs を使用してください。
プラットフォームとディスパッチ
ポータブルな Rust 実装がバイト単位の権威です。
コンパイル時のターゲットサポート、および std がある場合は
検出されたランタイム CPU 機能が、適格な SIMD またはアセンブリカーネルを選択します。
サポートされていないアクセラレーションはポータブルな Rust にフォールバックします。
プラットフォームガイド は、サポートされるターゲットカタログ、ディスパッチ、no_std カバレッジ、
および portable-only の制限について説明しています。
プロジェクト
ガイドと例は、付随するソースを説明しています。 公開された依存関係には、一致するバージョンの API ドキュメント を使用してください。
コードを変更する前に CONTRIBUTING.md をお読みください。
公開された変更は CHANGELOG.md にあります。
ライセンス
Apache-2.0 または MIT のデュアルライセンスで、お好みで選択できます。