Diffie-Hellman key exchange library
Project description
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
Авторы
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 diffiehellmanlib-5.0.1.tar.gz.
File metadata
- Download URL: diffiehellmanlib-5.0.1.tar.gz
- Upload date:
- Size: 21.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
01c7254d5236be7e70ef9f6de2e4bff5d3f949bb71062c10fd760d9662266534
|
|
| MD5 |
72a9e885ad055544ed93b9dc8eeef880
|
|
| BLAKE2b-256 |
46f5c5690aa27a7baa08128ebd963b4f1b040adb06f467ec22f396738035869c
|
File details
Details for the file diffiehellmanlib-5.0.1-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: diffiehellmanlib-5.0.1-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 272.1 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 |
bf04e137f518a954bad10c2db8e08f80a99451ad889fec4a3eb7551a83790962
|
|
| MD5 |
a8c370bd527008ca458e7e459316721c
|
|
| BLAKE2b-256 |
51a8f8946ef51705c8dfaacb3d9ca151d41360ce9d38db02e09f64d63039650e
|
File details
Details for the file diffiehellmanlib-5.0.1-cp312-cp312-manylinux_2_34_x86_64.whl.
File metadata
- Download URL: diffiehellmanlib-5.0.1-cp312-cp312-manylinux_2_34_x86_64.whl
- Upload date:
- Size: 416.5 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 |
ddc40f46dedfb5dbd2b76bcb0ccac3d4bac9ae14de310c3d913a986aa5d049aa
|
|
| MD5 |
09fd78f4ea951d6303267390a366f751
|
|
| BLAKE2b-256 |
3e85e7d2e8e5084132012e0f10ebf1b9f00dfacd53933209e73b71cc915c080a
|