Skip to main content

Python bindings for Dilithium post-quantum signatures

Project description

Dilithium Python/Rust

Данная библиотека предоставляет Python-биндинги на библиотеку pqcrypto-dilithium, причём очень удобные биндинги.


Пару слов про Dilithium

Dilithium — это один из алгоритмов цифровой подписи, разработанный для устойчивости к атакам с использованием квантовых компьютеров. Он является частью направления постквантовой криптографии, которое занимается созданием криптографических методов, устойчивых к взлому с помощью квантовых алгоритмов (например, алгоритма Шора).

Основные характеристики Dilithium

  1. Основа на решётках:

    • Dilithium построен на математических задачах, связанных с решётками (lattice-based cryptography). Эти задачи считаются устойчивыми к атакам как классических, так и квантовых компьютеров.
    • Основная проблема, на которой строится безопасность Dilithium, — это Learning With Errors (LWE) и её варианты.
  2. Эффективность:

    • Алгоритм оптимизирован для работы на обычных компьютерах. Он имеет относительно небольшие размеры ключей и подписей по сравнению с другими постквантовыми алгоритмами.
    • Dilithium обеспечивает высокую скорость генерации подписей и их проверки.
  3. Стандартизация:

    • В 2022 году Dilithium был выбран NIST (Национальный институт стандартов и технологий США) в качестве одного из стандартов для постквантовой цифровой подписи в рамках проекта по стандартизации постквантовой криптографии.
    • Он стал частью CRYSTALS (Cryptographic Suite for Algebraic Lattices) — набора криптографических алгоритмов, включающего также Kyber (для шифрования).
  4. Безопасность:

    • Dilithium предлагает несколько уровней безопасности (например, 128-битный, 192-битный и 256-битный уровни стойкости к атакам).
    • Его безопасность основывается на сложности решения задач в решётках, которые считаются устойчивыми к квантовым атакам.

Как работает Dilithium?

  1. Генерация ключей:

    • Алгоритм создаёт пару ключей: открытый ключ (public key) и закрытый ключ (private key). Открытый ключ используется для проверки подписи, а закрытый — для её создания.
  2. Создание подписи:

    • Для подписи сообщения используется закрытый ключ. Процесс включает в себя вычисления в решётках и добавление «шума» (на основе LWE), чтобы сделать подпись устойчивой к взлому.
  3. Проверка подписи:

    • Проверка подписи осуществляется с помощью открытого ключа. Алгоритм проверяет, соответствует ли подпись сообщению и открытому ключу.

Преимущества Dilithium

  1. Устойчивость к квантовым атакам:

    • В отличие от классических алгоритмов (например, RSA или ECDSA), Dilithium устойчив к атакам с использованием квантовых компьютеров.
  2. Компактность:

    • Размеры ключей и подписей в Dilithium значительно меньше, чем в некоторых других постквантовых алгоритмах, что делает его более практичным для использования.
  3. Высокая производительность:

    • Алгоритм оптимизирован для быстрой работы на современных процессорах.

Где применяется Dilithium?

Dilithium и другие постквантовые алгоритмы активно внедряются в:

  • Инфраструктуру цифровых подписей (например, для защиты документов, сертификатов).
  • Криптовалюты и блокчейн (для защиты транзакций от квантовых атак).
  • Защищённые коммуникации (например, TLS, VPN).

Почему это важно?

С появлением квантовых компьютеров классические криптографические алгоритмы (RSA, ECDSA) могут стать уязвимыми. Алгоритмы вроде Dilithium обеспечивают долгосрочную безопасность данных, защищая их от будущих угроз.


Как работать с библиотекой

Библиотека имеет 3 класса: Dilithium2, Dilithium3, Dilithium5. Во всех классах есть 3 функции:

  • generate_keypair() -> Tuple[str, str]
  • sign_message(message: str, private_key: str) -> str
  • verify_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

Для тех, кто хочет собрать библиотеку самостоятельно:

  1. Установите Rust edition 2021.
  2. Клонируйте репозиторий:
    git clone https://github.com/kostya2023/dilithium_python
    
    или через SSH:
    git clone git@github.com:kostya2023/dilithium_python.git
    
  3. Создайте виртуальную среду (например, с помощью python -m venv venv).
  4. Установите maturin:
    pip install maturin
    
  5. Соберите библиотеку:
    maturin build --release
    
  6. Установите собранное колесо:
    pip install target/wheels/*.whl
    
  7. Готово!

Лицензия

Библиотека распространяется под лицензией MIT.


Автор

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dilithium_python-0.1.0.tar.gz (8.8 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

dilithium_python-0.1.0-cp37-abi3-win_amd64.whl (159.5 kB view details)

Uploaded CPython 3.7+Windows x86-64

dilithium_python-0.1.0-cp37-abi3-manylinux_2_34_x86_64.whl (392.1 kB view details)

Uploaded CPython 3.7+manylinux: glibc 2.34+ x86-64

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

Hashes for dilithium_python-0.1.0.tar.gz
Algorithm Hash digest
SHA256 9f8faa391ba47b3b784c49ba357d7dd2e52d11782c73bd8d5a28bc2ae24edf8d
MD5 1cacf47df0bed18d4a927705b8ba75c7
BLAKE2b-256 9882ab3a73ef03ca5be61b857ef9ae9b787763f7d93fc3e28671e9b3afd35af3

See more details on using hashes here.

File details

Details for the file dilithium_python-0.1.0-cp37-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for dilithium_python-0.1.0-cp37-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 766689747f47a9b8c4817cc99adbc6f4ac1265f8f3e3db43e4cc828a081a18a8
MD5 7d655044f308a96434f0a308a10476b9
BLAKE2b-256 7714b329b8954427d8860c68f4c8de77aa12ecdadf6ba3e8785df3402fc0b363

See more details on using hashes here.

File details

Details for the file dilithium_python-0.1.0-cp37-abi3-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for dilithium_python-0.1.0-cp37-abi3-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 04690c44866cf75947e5d25f782d8b45cbd1f2cc89c8ee3846604881dce2a7ad
MD5 414607714b9627e9c26de45492df4043
BLAKE2b-256 45b429f132c96826abf7d1cea5c381475c9919c90e3090459e76e5af310c8230

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page