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.1.tar.gz (21.6 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.1-cp312-cp312-win_amd64.whl (272.1 kB view details)

Uploaded CPython 3.12Windows x86-64

diffiehellmanlib-5.0.1-cp312-cp312-manylinux_2_34_x86_64.whl (416.5 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.34+ x86-64

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

Hashes for diffiehellmanlib-5.0.1.tar.gz
Algorithm Hash digest
SHA256 01c7254d5236be7e70ef9f6de2e4bff5d3f949bb71062c10fd760d9662266534
MD5 72a9e885ad055544ed93b9dc8eeef880
BLAKE2b-256 46f5c5690aa27a7baa08128ebd963b4f1b040adb06f467ec22f396738035869c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for diffiehellmanlib-5.0.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 bf04e137f518a954bad10c2db8e08f80a99451ad889fec4a3eb7551a83790962
MD5 a8c370bd527008ca458e7e459316721c
BLAKE2b-256 51a8f8946ef51705c8dfaacb3d9ca151d41360ce9d38db02e09f64d63039650e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for diffiehellmanlib-5.0.1-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 ddc40f46dedfb5dbd2b76bcb0ccac3d4bac9ae14de310c3d913a986aa5d049aa
MD5 09fd78f4ea951d6303267390a366f751
BLAKE2b-256 3e85e7d2e8e5084132012e0f10ebf1b9f00dfacd53933209e73b71cc915c080a

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