Python bindings for Dilithium post-quantum signatures
Project description
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.
Автор
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file dilithium_python-0.1.0.tar.gz.
File metadata
- Download URL: dilithium_python-0.1.0.tar.gz
- Upload date:
- Size: 8.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9f8faa391ba47b3b784c49ba357d7dd2e52d11782c73bd8d5a28bc2ae24edf8d
|
|
| MD5 |
1cacf47df0bed18d4a927705b8ba75c7
|
|
| BLAKE2b-256 |
9882ab3a73ef03ca5be61b857ef9ae9b787763f7d93fc3e28671e9b3afd35af3
|
File details
Details for the file dilithium_python-0.1.0-cp37-abi3-win_amd64.whl.
File metadata
- Download URL: dilithium_python-0.1.0-cp37-abi3-win_amd64.whl
- Upload date:
- Size: 159.5 kB
- Tags: CPython 3.7+, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
766689747f47a9b8c4817cc99adbc6f4ac1265f8f3e3db43e4cc828a081a18a8
|
|
| MD5 |
7d655044f308a96434f0a308a10476b9
|
|
| BLAKE2b-256 |
7714b329b8954427d8860c68f4c8de77aa12ecdadf6ba3e8785df3402fc0b363
|
File details
Details for the file dilithium_python-0.1.0-cp37-abi3-manylinux_2_34_x86_64.whl.
File metadata
- Download URL: dilithium_python-0.1.0-cp37-abi3-manylinux_2_34_x86_64.whl
- Upload date:
- Size: 392.1 kB
- Tags: CPython 3.7+, manylinux: glibc 2.34+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
04690c44866cf75947e5d25f782d8b45cbd1f2cc89c8ee3846604881dce2a7ad
|
|
| MD5 |
414607714b9627e9c26de45492df4043
|
|
| BLAKE2b-256 |
45b429f132c96826abf7d1cea5c381475c9919c90e3090459e76e5af310c8230
|