DiffieHellmanLib
Библиотека для генерации параметров протокола Диффи-Хеллмана (Diffie-Hellman).
Возможности
- Генерация криптографически безопасных параметров
pиg. - Генерация приватных ключей
aиb. - Генерация публичных ключей
AиB. - Вычисление общего секрета на основе публичных и приватных ключей.
Как оно работает
Основные функции библиотеки реализованы на языке Rust для повышения производительности. Для ускорения генерации простых чисел p используется кэш, хранящий сгенерированные значения с меткой времени. Если срок хранения (1 час) истек, генерируется новое значение p, а старое удаляется.
Принцип работы Diffie-Hellman:
- Обе стороны договариваются о согласовании общих публичных параметров: большого простого числа
pи примитивного корня по модулюp-g. Размер простого числаpнапрямую влияет на безопасность алгоритма: чем большеp, тем сложнее его взломать. В библиотеке установлено ограничение на размерp: от 512 до 8192 бит. Рекомендуемый размерp- 2048 бит. На моей системе (Intel Core i3-7gen, 6 ГБ ОЗУ) генерацияpзанимает около 6-8 секунд, но благодаря кэшированию удается достичь прироста скорости до 21 раза (результаты могут отличаться на других системах). - Каждая сторона генерирует свой приватный ключ (
aилиb) – случайное число в диапазоне от 1 доp - 1, используя криптографически безопасный генератор случайных чисел. - Каждая сторона вычисляет свой публичный ключ:
- Алиса:
A = g^a mod p - Боб:
B = g^b mod p
- Алиса:
- Стороны обмениваются публичными ключами.
- Каждая сторона вычисляет общий секрет
K:- Алиса:
K = B^a mod p - Боб:
K = A^b mod p
- Алиса:
В результате обе стороны получают одинаковый общий секрет K, который далее может быть использован для генерации ключей шифрования и векторов инициализации. Для повышения безопасности, K проходит хеширование SHA-256 и HKDF с использованием встроенной соли.
Безопасность
- Важно! При передаче сгенерированных параметров (
pиg) по сети используйте надежные механизмы аутентификации и проверки целостности данных (например, цифровые подписи, HMAC и т.п.). - Размер
pв 512 бит следует использовать только для тестирования. Для реальных задач рекомендуется использовать 1024 или 2048 бит. - При использовании кэширования учитывайте, что скомпрометированное значение
pв кэше может снизить безопасность.
Установка
-
Убедитесь, что у вас установлены Rust и Cargo. Вы можете установить их с помощью rustup.
-
Убедитесь, что у вас установлен Python 3.7 или выше.
-
Установите библиотеку с помощью pip:
pip install diffiehellmanlib
(Для Linux x64-x86 доступны готовые wheel-пакеты).
-
Если установка через pip не удалась, можно установить из исходников:
git clone https://github.com/kostya2023/diffiehellmanlib.git cd diffiehellmanlib python -m venv venv # Создание виртуального окружения source venv/bin/activate # Активация виртуального окружения (Linux/macOS) .\venv\Scripts\activate # Активация виртуального окружения (Windows) pip install maturin # Установка maturin - инструмента для сборки Python-расширений на Rust maturin build --release # Сборка расширения в режиме release pip install ./target/wheels/diffiehellmanlib*.whl # Установка собранного wheel-файла
Использование
import diffiehellmanlib as dh
# Генерация криптографических параметров
p, g = dh.generate_p_g(1024)
print(f"p (первые 20 символов): {p[:20]}...")
print(f"g: {g}")
# Генерация ключей Алисы
a = dh.generate_a_or_b(p)
A = dh.generate_A_or_B(p, g, a)
print(f"\nАлиса:\nСекретный ключ (начало): {a[:10]}...\nПубличный ключ (начало): {A[:20]}...")
# Генерация ключей Боба
b = dh.generate_a_or_b(p)
B = dh.generate_A_or_B(p, g, b)
print(f"\nБоб:\nСекретный ключ (начало): {b[:10]}...\nПубличный ключ (начало): {B[:20]}...")
# Вычисление общего секрета
shared_key_alice = dh.generate_shared_key(B, p, a)
shared_key_bob = dh.generate_shared_key(A, p, b)
print(f"\nРезультат:\nКлюч Алисы: {shared_key_alice}\nКлюч Боба: {shared_key_bob}")
Лицензия
- “Буду рад, если вы укажете меня как автора при использовании этого софта.” =)
- MIT
Авторы
Metadata
Release files for diffiehellmanlib 5.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| diffiehellmanlib-5.0.1.tar.gz | 21.6 kB | Without provenance | Details for diffiehellmanlib-5.0.1.tar.gz |
Built distributions (wheels)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| diffiehellmanlib-5.0.1-cp312-cp312-win_amd64.whl | CPython 3.12 | CPython 3.12 | Windows x86-64 | Details for diffiehellmanlib-5.0.1-cp312-cp312-win_amd64.whl |
| diffiehellmanlib-5.0.1-cp312-cp312-manylinux_2_34_x86_64.whl | CPython 3.12 | CPython 3.12 | Linux glibc 2.34+ x86-64 | Details for diffiehellmanlib-5.0.1-cp312-cp312-manylinux_2_34_x86_64.whl |
Total release size: 710.2 kB
Release files / diffiehellmanlib-5.0.1.tar.gz
| Download URL | diffiehellmanlib-5.0.1.tar.gz |
|---|---|
| Size | 21.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
01c7254d5236be7e70ef9f6de2e4bff5d3f949bb71062c10fd760d9662266534
|
|
BLAKE2b-256 checksum How to use checksums |
46f5c5690aa27a7baa08128ebd963b4f1b040adb06f467ec22f396738035869c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.3
|
Release files / diffiehellmanlib-5.0.1-cp312-cp312-win_amd64.whl
| Download URL | diffiehellmanlib-5.0.1-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 272.1 kB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
bf04e137f518a954bad10c2db8e08f80a99451ad889fec4a3eb7551a83790962
|
|
BLAKE2b-256 checksum How to use checksums |
51a8f8946ef51705c8dfaacb3d9ca151d41360ce9d38db02e09f64d63039650e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.3
|
Release files / diffiehellmanlib-5.0.1-cp312-cp312-manylinux_2_34_x86_64.whl
| Download URL | diffiehellmanlib-5.0.1-cp312-cp312-manylinux_2_34_x86_64.whl |
|---|---|
| Size | 416.5 kB |
| Tags | CPython 3.12 Linux glibc 2.34+ x86-64 |
|
SHA-256 checksum How to use checksums |
ddc40f46dedfb5dbd2b76bcb0ccac3d4bac9ae14de310c3d913a986aa5d049aa
|
|
BLAKE2b-256 checksum How to use checksums |
3e85e7d2e8e5084132012e0f10ebf1b9f00dfacd53933209e73b71cc915c080a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.3
|
Security for diffiehellmanlib 5.0.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.