Алгоритм Диффи-Хеллмана
история алгоритм появился благодаря трем людям бла бла в 1975 году и внезапно решил проблему распределения ключей. в основе алгоритма лежит чистая математика, а точнее теория чисел. благодаря теореме ферма бла бла
Как это работает:
- Алиса и Боб договариваются об односторонней функции вида $y^x\mod{p}$: генерируют большое простое число $p$ и подбирают подходящий базовый элемент $g$ - генератор.
- Алиса и Боб выбирают случайные натуральные числа $a$ и $b$ из множества {1,…,p-2} - закрытые ключи.
- Вычисляют значения односторонних функций: $A=g^a\mod{p}$ и $B=g^b\mod{p}$.
- Обмениваются полученными значениями $A$ и $B$.
- Вычисляют итоговый общий секретный ключ: $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)