
Чистая библиотека на Rust для криптографии с открытым ключом RSA: генерация ключей, шифрование/расшифровка PKCS#1 v1.5 и OAEP, подписи PSS, а также импорт/экспорт ключей.
Переносимая реализация RSA на чистом Rust.
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, попробуйте скомпилировать в release-режиме или добавьте следующее в вашCargo.toml. Генерация ключей происходит гораздо быстрее при сборке с более высокими уровнями оптимизации, но это немного увеличит время компиляции.[profile.debug] opt-level = 3
В настоящее время на этапе 1 (v) 🚧
Перед выпуском 1.0 🚢 будет три этапа.
Этот крейт прошёл один аудит безопасности от Include Security, в ходе которого было обнаружено лишь одно незначительное замечание, которое с тех пор было устранено.
Другие известные проблемы см. в открытых проблемах безопасности в нашем трекере задач.
Стоит отметить, что реализация [модульного возведения в степень не выполняется за постоянное время], однако колебания времени маскируются с помощью [случайного ослепления] — широко используемого метода. Этот крейт уязвим к атаке Marvin, которая может позволить сетевому злоумышленнику восстановить закрытый ключ (см. RUSTSEC-2023-0071).
Вы можете следить за нашей работой по устранению этой проблемы в #390.
Этот крейт поддерживает Rust 1.85 и выше.
В будущем MSRV может быть изменена, но это будет сделано с повышением минорной версии.
Лицензируется на условиях одной из следующих лицензий:
по вашему выбору.
Если вы явно не заявите об обратном, любой вклад, намеренно представленный вами для включения в работу, как это определено в лицензии Apache-2.0, будет распространяться на условиях двойной лицензии, как указано выше, без каких-либо дополнительных условий.