Python bindings for Kyber post-quantum cryptography using pqcrypto
Project description
PythonKyber
Привязки Python для постквантовой криптографии Kyber с использованием pqcrypto
Пару слов про алгоритм Kyber
Kyber — это схема постквантового шифрования, основанная на решении задачи «среднего проблемы» в теории вычислительной сложности, известной как «проблема вычисления полиномиального представления». Он использует математическую структуру, называемую решётками, и является одной из рекомендованных схем для использования в постквантовых системах безопасности, поскольку он предполагает стойкость против атак с использованием квантовых компьютеров.
Вот как работает Kyber на высоком уровне:
-
Ключи:
- Публичный ключ — используется для шифрования данных.
- Приватный ключ — используется для дешифрования.
-
Процесс шифрования:
- Шифрование в Kyber включает в себя выбор случайного вектора и применение операции на решётке для создания зашифрованного сообщения.
- Зашифрованное сообщение состоит из нескольких частей, и для его дешифрования нужен приватный ключ.
-
Процесс дешифрования:
- Для дешифрования приватный ключ используется для извлечения исходного сообщения из зашифрованных данных.
- Процесс дешифрования использует операцию, которая является «обратной» операции шифрования, но с использованием приватного ключа.
-
Решётки:
- Секретность схемы основывается на сложности задачи нахождения точного представления решётки.
- В Kyber используется структура решётки для создания криптографических функций, которые являются вычислительно сложными для решения даже с использованием квантовых компьютеров.
-
Безопасность:
- Kyber имеет несколько параметров безопасности (например, размер ключа), которые можно настроить в зависимости от требуемого уровня безопасности.
- Безопасность схемы основана на проблемах, которые считаются сложными даже для квантовых компьютеров, что делает Kyber привлекательным для постквантовых криптографических систем.
Таким образом, основная идея Kyber заключается в использовании математических решёток и сложных операций над ними, чтобы обеспечить высокий уровень безопасности для передачи данных в условиях квантовой вычислительной угрозы.
Как самой библиотекой пользоватся
Есть по 3 функции на каждый уровень kyber.
- 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)
- 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)
- 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
Установка
- Способ через pip:
- Команда
pip install PythonKyber - Условия:
- Должен быть
maturin - Должен быть
RustиCargoесли нет подходящего колеса, pip будет устаналивать из sdist
- Должен быть
- Из исходников:
- Установить
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ce95e9542104f81f6d3779131870085d371f0fc427ccd95b580419f37419320c
|
|
| MD5 |
6763760631bb11cf490b41b47fef80c3
|
|
| BLAKE2b-256 |
8ebc1921460cb694c0db9349cfe183ecf92214ee33f3ead7af521c8ae5ce1974
|
File details
Details for the file PythonKyber-1.0.0-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: PythonKyber-1.0.0-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 137.5 kB
- Tags: CPython 3.12, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
78f888192f82ee49dd7cdd82e7342bbc6f0ca8c9817598f77a7a92a7bf274073
|
|
| MD5 |
859d8c27ffdc791e5ae102c42480c04a
|
|
| BLAKE2b-256 |
5885b8948db97b4516d5e0cf8faeba59b95e5d2cc576d4c42d046dde007b1eba
|
File details
Details for the file PythonKyber-1.0.0-cp312-cp312-manylinux_2_34_x86_64.whl.
File metadata
- Download URL: PythonKyber-1.0.0-cp312-cp312-manylinux_2_34_x86_64.whl
- Upload date:
- Size: 317.4 kB
- Tags: CPython 3.12, manylinux: glibc 2.34+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
52a604fa4cebf16a93efe4093a4831e9a92a2eb97f439472a1a5b94007a81ded
|
|
| MD5 |
578e6848b95f716ad9bdb433c9d5c905
|
|
| BLAKE2b-256 |
00e721c02e3d637d0546049aad79fd27e21d4ada51a975c789a6dfacaadfde47
|