
RSA公開鍵暗号のための純Rustライブラリ: 鍵生成、PKCS#1 v1.5およびOAEP暗号化/復号、PSS署名、さらに鍵のインポート/エクスポート。
純粋なRustによるポータブルなRSA実装で、暗号化および署名スキームはPKCS#1 v2.2 (RFC8017)で規定されています。
| スキーム | 用途 | 仕様 |
|---|---|---|
| RSAES-OAEP | 暗号化 | RFC8017 §7.1 |
| RSAES-PKCS1-v1_5 | 暗号化 | RFC8017 §7.2 |
| RSASSA-PSS | 署名 | RFC8017 §8.1 |
| RSASSA-PKCS1-v1_5 | 署名 | RFC8017 §8.2 |
PKCS#1 v1.5暗号化は、レガシーアプリケーションとの互換性のためにのみ提供されています。 新しい暗号化アプリケーションにはOAEPおよびPSSを推奨します。
既知の実装上の脆弱性については、以下のセキュリティ警告を参照してください。
use rsa::{Oaep, RsaPrivateKey, RsaPublicKey};
use sha2::Sha256;
let mut rng = rand::rng();
let bits = 2048;
let priv_key = RsaPrivateKey::new(&mut rng, bits).expect("failed to generate a key");
let pub_key = RsaPublicKey::from(&priv_key);
// Encrypt
let data = b"hello world";
let enc_data = pub_key.encrypt(&mut rng, Oaep::<Sha256>::new(), &data[..]).expect("failed to encrypt");
assert_ne!(&data[..], &enc_data[..]);
// Decrypt
let dec_data = priv_key.decrypt_blinded(&mut rng, Oaep::<Sha256>::new(), &enc_data).expect("failed to decrypt");
assert_eq!(&data[..], &dec_data[..]);
注:
RsaPrivateKey::newを使用中に鍵生成が異常に遅い場合は、リリースモードでコンパイルするか、Cargo.tomlに以下を追加してみてください。最適化レベルを高くしてビルドすると鍵生成は大幅に速くなりますが、コンパイル時間が少し増加します。[profile.debug] opt-level = 3
現在はフェーズ1 (v) です 🚧
1.0 🚢 をリリースする前に3つのフェーズがあります。
このクレートは Include Security によるセキュリティ監査 を1回受けており、 その後修正された軽微な指摘が1件のみでした。
その他の既知の問題については、イシュートラッカーの 未解決のセキュリティイシュー を参照してください。
特に 剰余冪演算の実装は定数時間ではありませんが、
タイミングの変動は一般的に用いられる手法である ランダムブラインディング によって
マスクされています。 このクレートは Marvin Attack に対して脆弱であり、ネットワーク攻撃者による
秘密鍵の復元を可能にする可能性があります(RUSTSEC-2023-0071 を参照)。
この問題の緩和に向けた取り組みは #390 で追跡できます。
このクレートは Rust 1.85 以上をサポートします。
将来的に MSRV は変更される可能性がありますが、その場合はマイナーバージョンの更新で行われます。
以下のいずれかのライセンスの下で提供されます
お好みで選択してください。
明示的に別段の定めをしない限り、Apache-2.0 ライセンスで定義されているように、あなたが意図的に 作品への包含のために提出したコントリビューションは、追加の条項や条件なしに、上記のように デュアルライセンスされます。