Skip to main content

DiffieHellmanLib

Библиотека для генерации параметров протокола Диффи-Хеллмана (Diffie-Hellman).

Возможности

  • Генерация криптографически безопасных параметров p и g.
  • Генерация приватных ключей a и b.
  • Генерация публичных ключей A и B.
  • Вычисление общего секрета на основе публичных и приватных ключей.

Как оно работает

Основные функции библиотеки реализованы на языке Rust для повышения производительности. Для ускорения генерации простых чисел p используется кэш, хранящий сгенерированные значения с меткой времени. Если срок хранения (1 час) истек, генерируется новое значение p, а старое удаляется.

Принцип работы Diffie-Hellman:

  1. Обе стороны договариваются о согласовании общих публичных параметров: большого простого числа p и примитивного корня по модулю p - g. Размер простого числа p напрямую влияет на безопасность алгоритма: чем больше p, тем сложнее его взломать. В библиотеке установлено ограничение на размер p: от 512 до 8192 бит. Рекомендуемый размер p - 2048 бит. На моей системе (Intel Core i3-7gen, 6 ГБ ОЗУ) генерация p занимает около 6-8 секунд, но благодаря кэшированию удается достичь прироста скорости до 21 раза (результаты могут отличаться на других системах).
  2. Каждая сторона генерирует свой приватный ключ (a или b) – случайное число в диапазоне от 1 до p - 1, используя криптографически безопасный генератор случайных чисел.
  3. Каждая сторона вычисляет свой публичный ключ:
    • Алиса: A = g^a mod p
    • Боб: B = g^b mod p
  4. Стороны обмениваются публичными ключами.
  5. Каждая сторона вычисляет общий секрет K:
    • Алиса: K = B^a mod p
    • Боб: K = A^b mod p

В результате обе стороны получают одинаковый общий секрет K, который далее может быть использован для генерации ключей шифрования и векторов инициализации. Для повышения безопасности, K проходит хеширование SHA-256 и HKDF с использованием встроенной соли.

Безопасность

  • Важно! При передаче сгенерированных параметров (p и g) по сети используйте надежные механизмы аутентификации и проверки целостности данных (например, цифровые подписи, HMAC и т.п.).
  • Размер p в 512 бит следует использовать только для тестирования. Для реальных задач рекомендуется использовать 1024 или 2048 бит.
  • При использовании кэширования учитывайте, что скомпрометированное значение p в кэше может снизить безопасность.

Установка

  1. Убедитесь, что у вас установлены Rust и Cargo. Вы можете установить их с помощью rustup.

  2. Убедитесь, что у вас установлен Python 3.7 или выше.

  3. Установите библиотеку с помощью pip:

    pip install diffiehellmanlib
    

    (Для Linux x64-x86 доступны готовые wheel-пакеты).

  4. Если установка через 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)

Source distribution for diffiehellmanlib 5.0.1
File Size Uploaded
diffiehellmanlib-5.0.1.tar.gz 21.6 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for diffiehellmanlib 5.0.1
File Interpreter ABI Platform
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
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page