Алгоритм Диффи-Хеллмана

история алгоритм появился благодаря трем людям бла бла в 1975 году и внезапно решил проблему распределения ключей. в основе алгоритма лежит чистая математика, а точнее теория чисел. благодаря теореме ферма бла бла

Как это работает:

  1. Алиса и Боб договариваются об односторонней функции вида $y^x\mod{p}$: генерируют большое простое число $p$ и подбирают подходящий базовый элемент $g$ - генератор.
  2. Алиса и Боб выбирают случайные натуральные числа $a$ и $b$ из множества {1,…,p-2} - закрытые ключи.
  3. Вычисляют значения односторонних функций: $A=g^a\mod{p}$ и $B=g^b\mod{p}$.
  4. Обмениваются полученными значениями $A$ и $B$.
  5. Вычисляют итоговый общий секретный ключ: $K = A^b\mod{p} = B^a\mod{p}$.

В реальных приложениях обеспечение безопасности частично делегировано серверу - он отвечает за генерацию большого случайного $p$ и подбор генератора $g$.

graph LR
  client["<b>Сервер</b><br>a, g, p<br>A = gᵃ mod p<br>K = Bᵃ mod p"]
  server["<b>Клиент</b><br>b<br>B = gᵇ mod p<br>K = Aᵇ mod p"]

  client -- "g, p, A" --> server
  server -- "B" --> client

Базовый элемент (он же генератор)

рассказать простыми словами что такое базовый элемент

Функция НайтиГенератор(p):
    если p не простое:
        вернуть НИЧЕГО

    q_list ← ПростыеДелители(p - 1)  // без повторов

    для g от 2 до p - 2:
        если для всех q из q_list:
            g^((p - 1) / q) mod p ≠ 1
        тогда:
            вернуть g  // g — генератор

    вернуть НИЧЕГО  // генераторов почти всегда много, так что странно, если не нашёл

Уязвимости

Данный алгоритм подвержен атаке “человек посередине”. Когда атакующий (Ева) выступает в роли посредника при передаче сообщений между Алисой и Бобом. В таком случае он может выработать 2 независимых секретных ключа с Алисой и Бобом.

PKI используются цифровые подписи потому что челвоек по середине это не снежный человек и он существует.

Цифровая подпись

PKI (Public Key Infrastructure)