В случае симметричного шифрования перед собеседниками всегда стоят две важные задачи:
- выбор криптостойкого ключа;
- распределение ключа (надежный обмен).
В случае асимметричного шифрования возникает другая задача:
- обмен собеседников открытыми ключами.
Важная задача симметричной криптографии помимо выбора суперстойкого ключа является распределение ключей — надежный и защищенный от перехвата способ обмена ключами.
При симметричном шифровании и выработке совместного ключа со своим товарищем сложные схемы ни к чему — можно использовать простой алгоритм Диффи-Хеллмана:
1. Я и мой товарищ знаем два абсолютно несекретных числа g и p. Я придумываю большое число a, а мой товарищ большое число b.
2. Я вычисляю A = g^a mod p и отправляю товарищу.
3. Товарищ вычисляет B = g^b mod p и отправляет мне.
4. Я вычисляю B’ = B^a mod p = g^(ab) mod p.
5. Товарищ вычисляет A’ = A^b mod p = g^(ab) mod p.
В итоге, A’ = B’ и есть согласованный ключ.
Рассмотрим пример на небольших числах. Пусть g = 2, p = 100, мое число a = 4, а число товарища b = 2:
A = 2^4 mod 100 = 16
B = 2^2 mod 100 = 4
A’ = B^a =4^4 mod 100 = 56
B’ = A^b = 16^2 mod 100 = 56
Если использовать достаточно большие числа a, b и p, шансов получить ключ у злоумышленника будет очень мало.
Протокол Диффи-Хеллмана в чистом виде сейчас, разумеется, нигде не используется. Однако многие протоколы аутентификации построены на его основе: модификации обмена ключами Диффи-Хеллмана можно встретить и в сетевых протоколах, таких как IPSec и TLS, и в отдельных криптографических приложениях.
УПРАВЛЕНИЕ КЛЮЧАМИ В АСИММЕТРИЧНЫХ КРИПТОСИСТЕМАХ