Skip to main content

Diffie-Hellman key exchange library

Project description

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

Авторы

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

diffiehellmanlib-5.0.0.tar.gz (11.5 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

diffiehellmanlib-5.0.0-cp312-cp312-win_amd64.whl (272.1 kB view details)

Uploaded CPython 3.12Windows x86-64

diffiehellmanlib-5.0.0-cp312-cp312-manylinux_2_34_x86_64.whl (416.4 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.34+ x86-64

File details

Details for the file diffiehellmanlib-5.0.0.tar.gz.

File metadata

  • Download URL: diffiehellmanlib-5.0.0.tar.gz
  • Upload date:
  • Size: 11.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.3

File hashes

Hashes for diffiehellmanlib-5.0.0.tar.gz
Algorithm Hash digest
SHA256 d0eac1ebda42df728eef108f98d581c9a90200e1ed145944e1d3ef544be05374
MD5 92a7f6805da5f0c4522535bd1188a97c
BLAKE2b-256 223620af2c4cea7628fd2e43e95d6dd12471f3d4df85245b96b4ada86212ecd3

See more details on using hashes here.

File details

Details for the file diffiehellmanlib-5.0.0-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for diffiehellmanlib-5.0.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 ee07a650097dc458cbfacebfc765995bb62edc01fb58607437562bff1e41ddf5
MD5 44883aa6902e160b44f512141c95349a
BLAKE2b-256 3d17e80beb39361edda4c8528a96ac408923ffb2d600252a4785279c53cca056

See more details on using hashes here.

File details

Details for the file diffiehellmanlib-5.0.0-cp312-cp312-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for diffiehellmanlib-5.0.0-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 e14df2c40ee1f00f0dd82144f491a43f2b7cc1a35af2d24ffa241216dd4d6e3a
MD5 00ef815182d5464add9ecda08b94fb9c
BLAKE2b-256 344f5bd55b2dd4228e3e92f57e3cfc1e16746adb8d1c76af5b3e2368fcc5b9ca

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page