Dilithium Python/Rust
Данная библиотека предоставляет Python-биндинги на библиотеку pqcrypto-dilithium, причём очень удобные биндинги.
Пару слов про Dilithium
Dilithium — это один из алгоритмов цифровой подписи, разработанный для устойчивости к атакам с использованием квантовых компьютеров. Он является частью направления постквантовой криптографии, которое занимается созданием криптографических методов, устойчивых к взлому с помощью квантовых алгоритмов (например, алгоритма Шора).
Основные характеристики Dilithium
-
Основа на решётках:
- Dilithium построен на математических задачах, связанных с решётками (lattice-based cryptography). Эти задачи считаются устойчивыми к атакам как классических, так и квантовых компьютеров.
- Основная проблема, на которой строится безопасность Dilithium, — это Learning With Errors (LWE) и её варианты.
-
Эффективность:
- Алгоритм оптимизирован для работы на обычных компьютерах. Он имеет относительно небольшие размеры ключей и подписей по сравнению с другими постквантовыми алгоритмами.
- Dilithium обеспечивает высокую скорость генерации подписей и их проверки.
-
Стандартизация:
- В 2022 году Dilithium был выбран NIST (Национальный институт стандартов и технологий США) в качестве одного из стандартов для постквантовой цифровой подписи в рамках проекта по стандартизации постквантовой криптографии.
- Он стал частью CRYSTALS (Cryptographic Suite for Algebraic Lattices) — набора криптографических алгоритмов, включающего также Kyber (для шифрования).
-
Безопасность:
- Dilithium предлагает несколько уровней безопасности (например, 128-битный, 192-битный и 256-битный уровни стойкости к атакам).
- Его безопасность основывается на сложности решения задач в решётках, которые считаются устойчивыми к квантовым атакам.
Как работает Dilithium?
-
Генерация ключей:
- Алгоритм создаёт пару ключей: открытый ключ (public key) и закрытый ключ (private key). Открытый ключ используется для проверки подписи, а закрытый — для её создания.
-
Создание подписи:
- Для подписи сообщения используется закрытый ключ. Процесс включает в себя вычисления в решётках и добавление «шума» (на основе LWE), чтобы сделать подпись устойчивой к взлому.
-
Проверка подписи:
- Проверка подписи осуществляется с помощью открытого ключа. Алгоритм проверяет, соответствует ли подпись сообщению и открытому ключу.
Преимущества Dilithium
-
Устойчивость к квантовым атакам:
- В отличие от классических алгоритмов (например, RSA или ECDSA), Dilithium устойчив к атакам с использованием квантовых компьютеров.
-
Компактность:
- Размеры ключей и подписей в Dilithium значительно меньше, чем в некоторых других постквантовых алгоритмах, что делает его более практичным для использования.
-
Высокая производительность:
- Алгоритм оптимизирован для быстрой работы на современных процессорах.
Где применяется Dilithium?
Dilithium и другие постквантовые алгоритмы активно внедряются в:
- Инфраструктуру цифровых подписей (например, для защиты документов, сертификатов).
- Криптовалюты и блокчейн (для защиты транзакций от квантовых атак).
- Защищённые коммуникации (например, TLS, VPN).
Почему это важно?
С появлением квантовых компьютеров классические криптографические алгоритмы (RSA, ECDSA) могут стать уязвимыми. Алгоритмы вроде Dilithium обеспечивают долгосрочную безопасность данных, защищая их от будущих угроз.
Как работать с библиотекой
Библиотека имеет 3 класса: Dilithium2, Dilithium3, Dilithium5. Во всех классах есть 3 функции:
generate_keypair() -> Tuple[str, str]sign_message(message: str, private_key: str) -> strverify_message(signature: str, message: str, public_key: str) -> bool
Небольшой пример на Dilithium5
import dilithium_python as dilithium
message = "Hello, world!"
# Генерация ключей
public_key, private_key = dilithium.Dilithium5.generate_keypair()
# Подпись сообщения
signature = dilithium.Dilithium5.sign_message(message, private_key)
print("Signature:", signature)
# Проверка подписи
print("Signature valid:", dilithium.Dilithium5.verify_message(signature, message, public_key))
Особенности реализации
Специально чтобы не было ошибок, связанных с тем, что Vec<u8> в Rust при переходе в Python должен быть bytes, но становится list, было принято решение сразу же кодировать все значения в Base64. Это позволяет избежать проблем с типами данных и упрощает взаимодействие между Rust и Python.
Установка
Есть несколько вариантов установки: через pip или вручную через git.
1. Установка через pip
Просто выполните команду:
pip install dilithium_python
Примечание: Если у вас Linux x64-x86 или amd64, будет установлено предварительно собранное колесо (wheel). В противном случае будет использован исходный код (sdist), для чего потребуется установленный Rust и другие зависимости.
2. Установка вручную через git
Для тех, кто хочет собрать библиотеку самостоятельно:
- Установите Rust edition 2021.
- Клонируйте репозиторий:
git clone https://github.com/kostya2023/dilithium_python
или через SSH:git clone git@github.com:kostya2023/dilithium_python.git
- Создайте виртуальную среду (например, с помощью
python -m venv venv). - Установите maturin:
pip install maturin
- Соберите библиотеку:
maturin build --release
- Установите собранное колесо:
pip install target/wheels/*.whl
- Готово!
Лицензия
Библиотека распространяется под лицензией MIT.
Автор
Metadata
Release files for dilithium-python 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| dilithium_python-0.1.0.tar.gz | 8.8 kB | Without provenance | Details for dilithium_python-0.1.0.tar.gz |
Built distributions (wheels)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| dilithium_python-0.1.0-cp37-abi3-win_amd64.whl | CPython 3.7 | abi3 | Windows x86-64 | Details for dilithium_python-0.1.0-cp37-abi3-win_amd64.whl |
| dilithium_python-0.1.0-cp37-abi3-manylinux_2_34_x86_64.whl | CPython 3.7 | abi3 | Linux glibc 2.34+ x86-64 | Details for dilithium_python-0.1.0-cp37-abi3-manylinux_2_34_x86_64.whl |
Total release size: 560.5 kB
Release files / dilithium_python-0.1.0.tar.gz
| Download URL | dilithium_python-0.1.0.tar.gz |
|---|---|
| Size | 8.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9f8faa391ba47b3b784c49ba357d7dd2e52d11782c73bd8d5a28bc2ae24edf8d
|
|
BLAKE2b-256 checksum How to use checksums |
9882ab3a73ef03ca5be61b857ef9ae9b787763f7d93fc3e28671e9b3afd35af3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.0
|
Release files / dilithium_python-0.1.0-cp37-abi3-win_amd64.whl
| Download URL | dilithium_python-0.1.0-cp37-abi3-win_amd64.whl |
|---|---|
| Size | 159.5 kB |
| Tags | CPython 3.7 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
766689747f47a9b8c4817cc99adbc6f4ac1265f8f3e3db43e4cc828a081a18a8
|
|
BLAKE2b-256 checksum How to use checksums |
7714b329b8954427d8860c68f4c8de77aa12ecdadf6ba3e8785df3402fc0b363
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.0
|
Release files / dilithium_python-0.1.0-cp37-abi3-manylinux_2_34_x86_64.whl
| Download URL | dilithium_python-0.1.0-cp37-abi3-manylinux_2_34_x86_64.whl |
|---|---|
| Size | 392.1 kB |
| Tags | CPython 3.7 Linux glibc 2.34+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
04690c44866cf75947e5d25f782d8b45cbd1f2cc89c8ee3846604881dce2a7ad
|
|
BLAKE2b-256 checksum How to use checksums |
45b429f132c96826abf7d1cea5c381475c9919c90e3090459e76e5af310c8230
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.0
|
Security for dilithium-python 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.