Открыть сервис

PyCryptodome

PyCryptodome — это библиотека для языка программирования Python, предоставляющая набор криптографических функций и протоколов. Она является форком более старой библиотеки PyCrypto и разрабатывается как самодостаточный пакет, не требующий внешних зависимостей. PyCryptodome включает в себя реализации симметричных и асимметричных шифров, хеш-функций, алгоритмов электронной подписи, генераторов случайных чисел и вспомогательных утилит для работы с криптографическими протоколами.

История

Предшественник: PyCrypto

Первоначальная библиотека PyCrypto была создана в начале 2000-х годов и долгое время оставалась стандартным криптографическим пакетом для Python. Однако к середине 2010-х годов её развитие практически остановилось: последний стабильный релиз (версия 2.6.1) вышел в 2013 году. Библиотека имела ряд недостатков: устаревшие алгоритмы, проблемы с поддержкой новых версий Python, неполную документацию и трудности с установкой на некоторых платформах.

Создание и развитие PyCryptodome

В 2014 году разработчик Ливио Кокки (Livio Cocchi) начал форк PyCrypto, названный PyCryptodome. Основной целью было исправление ошибок, добавление поддержки Python 3 и внедрение современных криптографических стандартов. Первый стабильный релиз PyCryptodome (версия 3.0) состоялся в 2016 году. С тех пор библиотека активно развивается: выходят новые версии, добавляются алгоритмы (например, ChaCha20-Poly1305, AES-GCM, Ed25519), улучшается производительность и безопасность. По состоянию на 2025 год PyCryptodome является де-факто стандартом для криптографии в Python, заменив устаревший PyCrypto.

Архитектура и модули

PyCryptodome организована в виде набора модулей, каждый из которых отвечает за определённый класс криптографических операций. Библиотека написана на Python с критическими участками на C для повышения производительности.

Симметричное шифрование

Модуль Crypto.Cipher предоставляет реализации симметричных блочных и поточных шифров. Поддерживаются следующие алгоритмы:

  • AES (Advanced Encryption Standard) — с длиной ключа 128, 192 или 256 бит, в режимах ECB, CBC, CFB, OFB, CTR, GCM, CCM, SIV, EAX, OCB.
  • DES и Triple DES (3DES) — устаревшие алгоритмы с длиной ключа 56 и 112/168 бит соответственно.
  • Blowfishблочный шифр с переменной длиной ключа.
  • Twofish — блочный шифр, финалист конкурса AES.
  • ChaCha20 — поточный шифр, часто используемый в паре с аутентификацией Poly1305 (режим ChaCha20_Poly1305).
  • Salsa20 — предшественник ChaCha20.

Асимметричное шифрование и подписи

Модуль Crypto.PublicKey реализует генерацию и управление ключами для асимметричных криптосистем. Модуль Crypto.Signature — алгоритмы электронной подписи.

  • RSA — шифрование и подпись (с поддержкой OAEP, PKCS1_v1_5, PSS).
  • DSA (Digital Signature Algorithm) — подпись.
  • ECDSA (Elliptic Curve Digital Signature Algorithm) — подпись на эллиптических кривых (кривые NIST P-192, P-224, P-256, P-384, P-521, а также кривая 25519).
  • Ed25519 и Ed448 — современные алгоритмы подписи на эллиптических кривых (EdDSA).
  • X25519 и X448 — алгоритмы обмена ключами на эллиптических кривых (Curve25519, Curve448).

Хеширование

Модуль Crypto.Hash содержит реализации криптографических хеш-функций:

  • SHA-1 (160 бит) — устаревший, не рекомендуется для новых проектов.
  • SHA-224, SHA-256, SHA-384, SHA-512 (семейство SHA-2).
  • SHA-3 (Keccak) — стандарт NIST 2015 года.
  • BLAKE2 (BLAKE2s и BLAKE2b) — высокопроизводительные хеш-функции.
  • MD5 (128 бит) — устаревший, используется только для совместимости.
  • RIPEMD-160 (160 бит).
  • Poly1305 — аутентификационный код сообщения (MAC).

Коды аутентификации сообщений (MAC)

Модуль Crypto.Hash также включает MAC-алгоритмы:

  • HMAC (Hash-based Message Authentication Code) — на основе любой хеш-функции.
  • CMAC (Cipher-based MAC) — на основе блочного шифра (например, AES-CMAC).
  • Poly1305 — часто используется с ChaCha20.

Генерация случайных чисел

Модуль Crypto.Random предоставляет криптографически стойкий генератор случайных чисел, основанный на системных источниках энтропии (например, /dev/urandom в Linux, CryptGenRandom в Windows). Также есть модуль Crypto.Util.number для генерации больших простых чисел, необходимых для RSA и DSA.

Протоколы и утилиты

  • Crypto.Protocol.KDF — функции формирования ключей (Key Derivation Functions): PBKDF2, scrypt, bcrypt, HKDF.
  • Crypto.Protocol.SecretSharing — схема разделения секрета Шамира (Shamir's Secret Sharing).
  • Crypto.Util.Padding — функции дополнения (padding) для блочных шифров (PKCS7, ISO 7816-4, X.923).
  • Crypto.Util.strxor — побитовое исключающее ИЛИ для строк.
  • Crypto.IO — модули для чтения/записи зашифрованных данных в форматах PEM, DER, PGP.

Установка и использование

PyCryptodome распространяется через менеджер пакетов pip. Установка производится командой:

`` pip install pycryptodome ``

Библиотека поддерживает Python версий 3.5 и выше (включая 3.11, 3.12). Для работы не требуются внешние зависимости, хотя для сборки из исходного кода может потребоваться компилятор C.

Пример использования: шифрование и дешифрование данных с помощью AES в режиме GCM:

```python from Crypto.Cipher import AES from Crypto.Random import get_random_bytes

key = get_random_bytes(16) # 128-битный ключ cipher = AES.new(key, AES.MODE_GCM) ciphertext, tag = cipher.encrypt_and_digest(b"Секретные данные") nonce = cipher.nonce

Дешифрование

cipher_dec = AES.new(key, AES.MODE_GCM, nonce=nonce) plaintext = cipher_dec.decrypt_and_verify(ciphertext, tag) print(plaintext) # b"Секретные данные" ```

Отличия от PyCrypto

PyCryptodome существенно переработана по сравнению с PyCrypto:

  • Поддержка Python 3 — в PyCrypto отсутствовала.
  • Современные алгоритмы — добавлены ChaCha20-Poly1305, SHA-3, Ed25519, X25519, scrypt.
  • Улучшенная безопасность — исправлены уязвимости, добавлены защищённые режимы (GCM, CCM, SIV).
  • Единый интерфейс — все шифры используют одинаковый API (объекты new(), encrypt(), decrypt()).
  • Самодостаточность — не требует установки OpenSSL или других внешних библиотек.
  • Производительность — критические функции реализованы на C и оптимизированы.

Критика и ограничения

Несмотря на широкую распространённость, PyCryptodome имеет некоторые недостатки:

  • Отсутствие поддержки постквантовой криптографии — библиотека не включает алгоритмы, устойчивые к атакам с использованием квантовых компьютеров (например, Kyber, Dilithium).
  • Ограниченная поддержка аппаратного ускорения — нет встроенной поддержки Intel AES-NI или ARM Crypto Extensions (хотя некоторые операции могут использовать их через низкоуровневые библиотеки).
  • Сложность с некоторыми протоколами — реализация TLS/SSL отсутствует; для этого используются другие библиотеки (например, ssl из стандартной библиотеки Python или cryptography).
  • Документация — хотя документация есть, она не всегда подробно описывает все нюансы использования.

Применение

PyCryptodome используется в широком спектре проектов:

  • Разработка защищённых приложений (шифрование файлов, сообщений).
  • Реализация криптографических протоколов (например, Signal, OTR, PGP).
  • Научные исследования и обучение криптографии.
  • Тестирование и аудит безопасности.
  • Встраивание в веб-фреймворки (Django, Flask) для обработки токенов и сессий.

См. также

  • Криптография
  • Python
  • PyCrypto
  • Библиотека cryptography (альтернативный криптографический пакет для Python)

Источники

  • Официальная документация PyCryptodome (pycryptodome.readthedocs.io)
  • Репозиторий PyCryptodome на GitHub (github.com/Legrandin/pycryptodome)
  • Статья «PyCrypto vs PyCryptodome» на Stack Overflow
  • Документация Python по стандартной библиотеке hashlib и hmac

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →