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