Криптография в Rust с библиотекой RustCrypto

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Что такое RustCrypto?

RustCrypto — это экосистема криптографических библиотек для языка Rust, предоставляющая реализации современных алгоритмов шифрования, хеширования, аутентификации и цифровых подписей. Она включает модули для AES, ChaCha20, SHA-2/3, ECDSA, Ed25519, Argon2 и других протоколов. Библиотеки написаны на чистом Rust с акцентом на безопасность памяти, производительность и аудит кода.

Зачем нужна RustCrypto?

В отличие от Python, где криптография часто требует вызовов C-расширений (PyCryptodome, cryptography), RustCrypto предлагает нативную реализацию с нулевыми накладными расходами. Это критично для встраиваемых систем, WebAssembly, высоконагруженных серверов и приложений, где важна защита от side-channel атак. RustCrypto активно используется в блокчейн-проектах (Solana, Polkadot), мессенджерах (Signal) и VPN-решениях.

Установка

Добавьте в Cargo.toml нужные крейты. Пример для AES-GCM и SHA-256:

[dependencies]
aes-gcm = "0.10"
sha2 = "0.10"
rand = "0.8"

Основные функции

  • Симметричное шифрование: AES-GCM, ChaCha20-Poly1305, Twofish
  • Хеширование: SHA-2, SHA-3, BLAKE2, RIPEMD
  • Асимметричная криптография: ECDSA, Ed25519, X25519, Ristretto255
  • Ключевые функции: Argon2, scrypt, PBKDF2
  • Цифровые подписи: Ed25519, ECDSA (secp256k1, P-256)

Пример кода на Rust

use aes_gcm::{Aes256Gcm, Key, Nonce};
use aes_gcm::aead::{Aead, KeyInit, OsRng};
use sha2::{Sha256, Digest};

fn main() {
    // 1. Хеширование SHA-256
    let mut hasher = Sha256::new();
    hasher.update(b"hello world");
    let hash = hasher.finalize();
    println!("SHA-256: {:x}", hash);

    // 2. Шифрование AES-GCM
    let key = Aes256Gcm::generate_key(&mut OsRng);
    let cipher = Aes256Gcm::new(&key);
    let nonce = Nonce::from_slice(b"unique nonce"); // 12 байт
    let ciphertext = cipher.encrypt(nonce, b"secret data".as_ref())
        .expect("encryption failure");
    println!("Ciphertext: {:?}", ciphertext);

    // 3. Расшифровка
    let plaintext = cipher.decrypt(nonce, ciphertext.as_ref())
        .expect("decryption failure");
    println!("Decrypted: {:?}", plaintext);
}

Когда использовать RustCrypto

Библиотека незаменима для проектов, где требуется высокая производительность и безопасность на уровне памяти: криптовалютные кошельки, P2P-сети, защищённое хранение паролей, аудит логов, WebAssembly-приложения. RustCrypto также подходит для замены OpenSSL в микросервисах на Rust.

Для Python-разработчиков, изучающих Rust, RustCrypto станет мостом: API интуитивно понятен, а отсутствие GIL позволяет достичь 10-100x ускорения криптографических операций.

Рекомендаций