Несколько вопросов про Алгоритм Diffie-Hellman'a
Решая CTF, в котором было предоставлено задание,в котором было сказано расшифровать дамп трафика TLS, я познакомился с алгоритмом Диффи-Хелмана.
В классике шифр работает как показано на картинке:
Теперь сами вопросы:
- Если число
pбыло не простое, это делает его уязвимым к ??? Не очень понятно, почему если числоp- простое, оно менее уязвимо. - Где генерируется
p & g- на сервере, или на клиенте и если это согласовывается, то где? - Может ли в реальных условиях встретится такое, что
pи (или)gчисла не простые?
Ответы (1 шт):
Дисклеймер: Я не криптоаналитик и вообще с трудом ориентируюсь в теории чисел.
Здесь и далее подразумеваются обозначения из изложения в вики.
В данном примере число "p" было не простым, что делает его уязвимым к ??? Не очень понятно, почему если число "p" - простое, оно менее уязвимо.
Как написано во всех букварях, надёжность протокола Диффи—Хеллмана основана на сложности дискретного логорифмирования, т.е. нахождения такого а, что A ≡ ga (mod p). Если p будет составным, то это собственно сильно упростит дело. Если кратко, то нужно найти все ai для всех делителей pi, таких что A ≡ gai (mod pi) с помощью «тяжёлых» методов, например, с помощью ро-метода Полларда, а затем с помощью китайской теоремы об остатках и малой теоремы Ферма вычислить a. Нахождение общего секрета далее — тривиальная задача. Хорошее подробное описание этого алгоритма есть на code.stackexchange.
Где генерируется "p" & "g" - на сервере, или на клиенте и если это согласовывается, то где?
Генерация p относительно тяжёлый и ответственный процесс: может занимать от нескольких секунд до нескольких часов и в случае неудачного значения криптостойкость алгоритма сильно страдает. В качестве g выбирается обычно очень небольшое число, например 2. Так что эти значения генерируются «заранее». В частности не редко используются заранее вычисленные константы, например, для того же TLS 1.3 они есть прямо в rfc протокола. Для других протоколов, в частности более старых версий TLS, они обычно хранятся на сервере.
Может ли в реальных условиях встретится такое, что "p" и (или) "g" числа не прсотые?
Может. Иногда это может произойти по ошибке т.к. проверка больших чисел на простоту — процесс стохастический. Но иногда это вызывает подозрения в бекдорах. Простота g, вообще говоря, не имеет значения. Важно, чтобы оно порождало достаточно большую подгруппу в Zp.
Также для общего обзора см. Брюс Шнайер — «Прикладная криптография»: главы 11 и 22.1.
