
RSA公開鍵暗号のための純Rustライブラリ: 鍵生成、PKCS#1 v1.5およびOAEP暗号化/復号、PSS署名、さらに鍵のインポート/エクスポート。
純粋なRustによるポータブルなRSA実装です。
use rsa::{Pkcs1v15Encrypt, RsaPrivateKey, RsaPublicKey};
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, Pkcs1v15Encrypt, &data[..]).expect("failed to encrypt");
assert_ne!(&data[..], &enc_data[..]);
// Decrypt
let dec_data = priv_key.decrypt(Pkcs1v15Encrypt, &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件ありましたが、その後対応済みです。
その他の既知の問題については、私たちの issue トラッカーの未解決のセキュリティ問題を参照してください。
特に、モジュラ指数演算は定数時間ではなく、タイミング変動は広く使われる手法であるランダムブラインディングによってマスクされています。 このクレートはMarvin Attackに対して脆弱であり、ネットワーク攻撃者による秘密鍵の回復を可能にする可能性があります (RUSTSEC-2023-0071 を参照)。
この問題の緩和に向けた取り組みは #390 で追跡できます。
このクレートは Rust 1.85 以降をサポートしています。
将来 MSRV は変更される可能性がありますが、その場合はマイナーバージョンの引き上げを伴います。
次のいずれかのライセンスの下で提供されます:
選択の上、どちらか一方を適用できます。
明示的に別途宣言しない限り、Apache-2.0 ライセンスで定義されている通り、あなたがこの作品に含めるために意図的に提出した貢献は、追加の条件なしに上記のとおりデュアルライセンスされます。