Skip to main content

Python bindings for Kyber post-quantum cryptography using pqcrypto

Project description

PythonKyber

Привязки Python для постквантовой криптографии Kyber с использованием pqcrypto

Пару слов про алгоритм Kyber

Kyber — это схема постквантового шифрования, основанная на решении задачи «среднего проблемы» в теории вычислительной сложности, известной как «проблема вычисления полиномиального представления». Он использует математическую структуру, называемую решётками, и является одной из рекомендованных схем для использования в постквантовых системах безопасности, поскольку он предполагает стойкость против атак с использованием квантовых компьютеров.

Вот как работает Kyber на высоком уровне:

  1. Ключи:

    • Публичный ключ — используется для шифрования данных.
    • Приватный ключ — используется для дешифрования.
  2. Процесс шифрования:

    • Шифрование в Kyber включает в себя выбор случайного вектора и применение операции на решётке для создания зашифрованного сообщения.
    • Зашифрованное сообщение состоит из нескольких частей, и для его дешифрования нужен приватный ключ.
  3. Процесс дешифрования:

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

    • Секретность схемы основывается на сложности задачи нахождения точного представления решётки.
    • В Kyber используется структура решётки для создания криптографических функций, которые являются вычислительно сложными для решения даже с использованием квантовых компьютеров.
  5. Безопасность:

    • Kyber имеет несколько параметров безопасности (например, размер ключа), которые можно настроить в зависимости от требуемого уровня безопасности.
    • Безопасность схемы основана на проблемах, которые считаются сложными даже для квантовых компьютеров, что делает Kyber привлекательным для постквантовых криптографических систем.

Таким образом, основная идея Kyber заключается в использовании математических решёток и сложных операций над ними, чтобы обеспечить высокий уровень безопасности для передачи данных в условиях квантовой вычислительной угрозы.

Как самой библиотекой пользоватся

Есть по 3 функции на каждый уровень kyber.

  1. Kyber512:
  • public_key, secret_key = PythonKyber.Kyber512.generate_keypair()
  • ciphertext, shared_secret_enc = PythonKyber.Kyber512.encapsulate(public_key)
  • shared_secret_dec = PythonKyber.Kyber512.decapsulate(secret_key, ciphertext)
  1. Kyber768:
  • public_key, secret_key = PythonKyber.Kyber768.generate_keypair()
  • ciphertext, shared_secret_enc = PythonKyber.Kyber768.encapsulate(public_key)
  • shared_secret_dec = PythonKyber.Kyber768.decapsulate(secret_key, ciphertext)
  1. Kyber1024:
  • public_key, secret_key = PythonKyber.Kyber1024.generate_keypair()
  • ciphertext, shared_secret_enc = PythonKyber.Kyber1024.encapsulate(public_key)
  • shared_secret_dec = PythonKyber.Kyber1024.decapsulate(secret_key, ciphertext)

Нормальный пример:

from PythonKyber import Kyber512, Kyber768, Kyber1024

# Пример для Kyber512
public_key_512, secret_key_512 = Kyber512.generate_keypair()
ciphertext_512, shared_secret_encrypted_512 = Kyber512.encapsulate(public_key_512)
shared_secret_decrypted_512 = Kyber512.decapsulate(secret_key_512, ciphertext_512)
assert shared_secret_encrypted_512 == shared_secret_decrypted_512

# Пример для Kyber768
public_key_768, secret_key_768 = Kyber768.generate_keypair()
ciphertext_768, shared_secret_encrypted_768 = Kyber768.encapsulate(public_key_768)
shared_secret_decrypted_768 = Kyber768.decapsulate(secret_key_768, ciphertext_768)
assert shared_secret_encrypted_768 == shared_secret_decrypted_768

# Пример для Kyber1024
public_key_1024, secret_key_1024 = Kyber1024.generate_keypair()
ciphertext_1024, shared_secret_encrypted_1024 = Kyber1024.encapsulate(public_key_1024)
shared_secret_decrypted_1024 = Kyber1024.decapsulate(secret_key_1024, ciphertext_1024)
assert shared_secret_encrypted_1024 == shared_secret_decrypted_1024

Установка

  1. Способ через pip:
  • Команда pip install PythonKyber
  • Условия:
    • Должен быть maturin
    • Должен быть Rust и Cargo если нет подходящего колеса, pip будет устаналивать из sdist
  1. Из исходников:
  • Установить Rust и Cargo
  • Клонировать репозиторий git clone https://github.com/kostya2023/PythonKyber.git
  • Создать venv или другую среду, python -m venv venv
  • Установить maturin
  • Прописать maturin build --release
  • После билдинга pip install target/wheels/PythonKyber*.whl

License

MIT См файл LICENSE

Авторы

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

PythonKyber-1.0.1.tar.gz (8.6 kB view details)

Uploaded Source

Built Distributions

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

PythonKyber-1.0.1-cp312-cp312-win_amd64.whl (133.7 kB view details)

Uploaded CPython 3.12Windows x86-64

PythonKyber-1.0.1-cp312-cp312-manylinux_2_34_x86_64.whl (354.6 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.34+ x86-64

File details

Details for the file PythonKyber-1.0.1.tar.gz.

File metadata

  • Download URL: PythonKyber-1.0.1.tar.gz
  • Upload date:
  • Size: 8.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.3

File hashes

Hashes for PythonKyber-1.0.1.tar.gz
Algorithm Hash digest
SHA256 e5a4ce068a1fab33c4b3458cab84d0f5885128c1ac0f5c5d9395ada1733f014b
MD5 015717abfdddd13220b3bd5a688aaf3a
BLAKE2b-256 98dfd2ac70bfc7291ed4f8fdd1cacb277ba41761c2dc50d8731e2025227bfe29

See more details on using hashes here.

File details

Details for the file PythonKyber-1.0.1-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for PythonKyber-1.0.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 270331b8cd8d65a3332d37df3ebb598110544c0cae724161c45af8db985682c8
MD5 ae84698438fd0deb241f9d2dc8ea55f5
BLAKE2b-256 6ef118103fbaadf43f807dffa416c80affe43c72c3f49e9382c61f27f1e00f18

See more details on using hashes here.

File details

Details for the file PythonKyber-1.0.1-cp312-cp312-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for PythonKyber-1.0.1-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 ca342ae443f2d103d7c93eb6af0192311455fdb3ffc6446a134a60d551e53c07
MD5 b79e7bc12f8d3c7a87bd76b111f4f089
BLAKE2b-256 7c0d211744d39e06fb369ec37db63d4ae1ff8441a07990e72798c14b491d9a37

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