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
Авторы
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 | |
|---|---|---|---|
| diffiehellmanlib-5.0.1.tar.gz | 21.6 kB | Details |
Built distributions (wheels)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| diffiehellmanlib-5.0.1-cp312-cp312-win_amd64.whl | CPython 3.12 | CPython 3.12 | Windows x86-64 | Details |
| 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 |
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
|