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()
  • shared_secret_enc, ciphertext = PythonKyber.Kyber512.encapsulate(public_key)
  • shared_secret_dec = PythonKyber.Kyber512.decapsulate(secret_key, ciphertext)
  1. Kyber768:
  • public_key, secret_key = PythonKyber.Kyber768.generate_keypair()
  • shared_secret_enc, ciphertext = PythonKyber.Kyber768.encapsulate(public_key)
  • shared_secret_dec = PythonKyber.Kyber768.decapsulate(secret_key, ciphertext)
  1. Kyber1024:
  • public_key, secret_key = PythonKyber.Kyber1024.generate_keypair()
  • shared_secret_enc, ciphertext = 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.0.tar.gz (8.2 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.0-cp312-cp312-win_amd64.whl (137.5 kB view details)

Uploaded CPython 3.12Windows x86-64

PythonKyber-1.0.0-cp312-cp312-manylinux_2_34_x86_64.whl (317.4 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.34+ x86-64

File details

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

File metadata

  • Download URL: PythonKyber-1.0.0.tar.gz
  • Upload date:
  • Size: 8.2 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.0.tar.gz
Algorithm Hash digest
SHA256 ce95e9542104f81f6d3779131870085d371f0fc427ccd95b580419f37419320c
MD5 6763760631bb11cf490b41b47fef80c3
BLAKE2b-256 8ebc1921460cb694c0db9349cfe183ecf92214ee33f3ead7af521c8ae5ce1974

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for PythonKyber-1.0.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 78f888192f82ee49dd7cdd82e7342bbc6f0ca8c9817598f77a7a92a7bf274073
MD5 859d8c27ffdc791e5ae102c42480c04a
BLAKE2b-256 5885b8948db97b4516d5e0cf8faeba59b95e5d2cc576d4c42d046dde007b1eba

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for PythonKyber-1.0.0-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 52a604fa4cebf16a93efe4093a4831e9a92a2eb97f439472a1a5b94007a81ded
MD5 578e6848b95f716ad9bdb433c9d5c905
BLAKE2b-256 00e721c02e3d637d0546049aad79fd27e21d4ada51a975c789a6dfacaadfde47

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