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.
Автор
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 | |
|---|---|---|---|
| dilithium_python-0.1.0.tar.gz | 8.8 kB | Details |
Built distributions (wheels)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| dilithium_python-0.1.0-cp37-abi3-win_amd64.whl | CPython 3.7 | abi3 | Windows x86-64 | Details |
| dilithium_python-0.1.0-cp37-abi3-manylinux_2_34_x86_64.whl | CPython 3.7 | abi3 | Linux glibc 2.34+ x86-64 | Details |
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
|