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.2.tar.gz (8.7 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.2-cp312-cp312-win_amd64.whl (128.1 kB view details)

Uploaded CPython 3.12Windows x86-64

PythonKyber-1.0.2-cp312-cp312-manylinux_2_34_x86_64.whl (350.1 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.34+ x86-64

File details

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

File metadata

  • Download URL: PythonKyber-1.0.2.tar.gz
  • Upload date:
  • Size: 8.7 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.2.tar.gz
Algorithm Hash digest
SHA256 1f59121356b41783632d7df769eca1b39515fd832906a5585f7424713938e84e
MD5 d9d69dd3f40efe97d130e014171bc549
BLAKE2b-256 7e0c6276677c728473619a7e1acfe97359bcae62a72cf4fa7c8a9d82b6694e0f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for PythonKyber-1.0.2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 75b597d2e66b75640fad7666a09a045561441b3350d9740729d462d160fe54f6
MD5 8e91b2cd51d84c987fd4f4696fbfc916
BLAKE2b-256 f39d72ea5f4254c71f39f548a380f8424b370a66ceb6aac0308009235133d21d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for PythonKyber-1.0.2-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 5fc9dd8e82969337534f9432f7f82f11800d73087d63c14fbd7e5da77ffe62ce
MD5 179d8aa803e80bb0c8cfde9c45334c81
BLAKE2b-256 2b15e1777248da0a35e23a8447233a6777df9014373413e016ac015cb75941f4

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