rscrypto: 高性能Pure-Rust暗号化ライブラリ
概要
rscryptoは、高いパフォーマンス、小さなバイナリサイズ、および厳格なデプロイメント制御を必要とするプロジェクト向けに設計された、包括的なPure-Rust暗号プリミティブスタックです。RSA、Ed25519、X25519、AEADs、ハッシュ、KDFsを含む幅広いプリミティブに対して単一の依存関係を提供し、必須のCライブラリ、OpenSSL、または複数のクレートの複雑な構成を排除します。
主な技術的特徴
統合されたプリミティブスタック
rscryptoは、APIの断片化と一貫性のないセキュリティ慣習を避けるために、多数の暗号学的ニーズを一つのクレートに集約しています。このライブラリは以下をサポートしています:
- 暗号学的ハッシュ: SHA-2, SHA-3, SHAKE, cSHAKE256, BLAKE2, BLAKE3, および Ascon-Hash/XOF/CXOF。
- MACs と KDFs: HMAC-SHA-2, KMAC256, HKDF-SHA-2, および PBKDF2-HMAC-SHA-2。
- パスワードハッシュ: Argon2d/i/id, scrypt, および PHC文字列エンコーディング/検証。
- 公開鍵プリミティブ: Ed25519署名, X25519鍵交換, および完全なRSAサポート(署名, 検証, OAEP, RSAES-PKCS1-v1_5, および鍵生成)。
- AEAD暗号化: AES-GCM, AES-GCM-SIV, ChaCha20-Poly1305, XChaCha20-Poly1305, AEGIS-256, および Ascon-AEAD128。
- チェックサムと非暗号学的ハッシュ: CRC-16/24/32/32C/64, XXH3, および RapidHash。
可搬性とハードウェアアクセラレーション
本ライブラリは、ポータブルなRustバックエンドを真実のソースおよびリファレンス実装として使用します。ハードウェア固有のカーネルは、CPUサポートに基づいて実行時にディスパッチされます:
- 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), IBM POWER (vector/crypto extensions), RISC-V (RVV, Zbc, Zvkned, Zvbc), および WASM (SIMD128)。
デプロイメントとセキュリティ制御
rscryptoは、no_stdターゲット(組み込み, bare-metal, WASM)を含む制約のある環境向けに設計されています。
- 機能ベースの包含: ユーザーは特定のリーフ機能(例:
sha2)またはグループ(例:hashes)を有効にすることで、バイナリサイズを小さく保つことができます。 - 監査可能性:
portable-only機能は、決定論的なディスパッチのために、ハードウェアアクセラレータをバイパスして定数時間(constant-time)のポータブルバックエンドの使用を強制します。 - セキュリティ・ハイジーン: 本ライブラリは、MAC, AEAD, および署名検証において定数時間の等価性判定を行い、ドロップ時に秘密情報を保持する型をゼロ化(zeroize)し、サイドチャネル攻撃を防ぐために不透明な検証エラーを使用します。
パフォーマンス・ベンチマーク
rscryptoは、最速の既存のRustベースライン(aws-lc-rs, ring, RustCrypto, および blake3を含む)と比較して、大幅なスピードアップを報告しています。
| メトリック | Linux CI 結果 | Apple Silicon (M1) 結果 |
|---|---|---|
| 最速の外部幾何平均 | 1.61x | 1.25x |
| Wins/Ties (Linux) | 5,210 / 5,832 | N/A |
| Wins/Ties (Apple) | N/A | 450 / 463 |
| BLAKE3 (>=64 KiB) | 2.31x | 1.80x |
| AEAD 幾何平均 | 1.57x | 1.47x |
| RSA Import + Verify | 1.32x | 1.45x |
既知のパフォーマンス上の弱点:
- PBKDF2-SHA256のセットアップ(
iters=1) (Linux)。 - X25519 Diffie-Hellman (Linux)。
- RSA-4096検証 (Linux)。
- 小規模メッセージのAEADオーバーヘッド。
aws-lc-rsに対するHMAC-SHA256のバルク負荷 (Apple Silicon)。
コミュニティによる批判とセキュリティ上の警告
パフォーマンスの主張にもかかわらず、本ライブラリはHacker Newsにおいて、特にそのセキュリティ体制と開発プロセスに関して、暗号学コミュニティから大きな批判を受けています。
定数時間実装のギャップ
Rosenpass Protocolの設計者であるKarolin Varner氏は、本ライブラリが完全な定数時間実装ではないという懸念を表明しました。著者は、グローバルな定数時間に関する主張は、以下には適用されないことを認めました:
- パーサー, インポーター, DER/PHCデコーディング。
- アルゴリズム/プロファイルの交渉。
- 鍵生成およびOSの乱数パス。
- 公開RSA検証/暗号化処理。
- ハッシュおよびチェックサムのAPI全体。
- Argon2d/scryptとしての包括的なプリミティブ。
レビューと信頼性の懸念
批判者は、rscryptoを本番環境で使用することに関連するいくつかのリスクを強調しています:
- サードパーティによる監査の欠如: 本ライブラリは、専門的なサードパーティによるセキュリティ監査を受けていません。
- Pre-v1ステータス: 著者はコードを「pre-v1」と説明していますが、一方で、批判者たちは、暗号ソフトウェアとしてそれは時期尚早であると主張するような方法で宣伝されています。 本ライブラリは、LLM(大規模言語モデル)の使用に関する疑問がも提起されており、コードやドキュメントの生成にLLMを使用していることが、微妙な実装上の落とし穴を招く可能性があると批判者が示唆しています。
- 実装戦略: 一部のコミュニティメンバーは、既存の検証済みRust暗号エコシステム(例:
RustCrypto)に貢献するのではなく、新しいライブラリを作成することは、レビューのための不必要な労働をコミュニティに強いることになると主張しています。
"If you want your projects to be secure, please do not use this... Constant-time security is a basic guarantee all cryptography code MUST follow." — Karolin Varner
インストールと使用方法
最小限の no_std SHA-2ビルド:
[dependencies]
rscrypto = { version = "0.3.1", default-features = false, features = ["sha2"] }
OSの乱数を使用したフルスタック:
[dependencies]
rscrypto = { version = "0.3.1", features = ["full", "getrandom"] }
MSRV: Rust 1.91.0。