Два ключа вместо одного
Главная идея асимметрии: что зашифровано одним ключом, расшифровывается только парным к нему вторым.
Эта идея, опубликованная в 1970-х, перевернула криптографию и сделала возможным безопасный интернет.
Проблема, которую надо было решить
Вспомним беду симметричного шифрования: чтобы переписываться, Алисе и Бобу нужен общий секретный ключ. Но как его передать, если канал прослушивается? Асимметричная криптография решает это элегантно: ключей становится два, и один из них можно вообще не прятать.
Открытый и закрытый ключи
У каждого человека есть пара ключей:
| Открытый ключ | Можно публиковать где угодно. Им шифруют сообщения для тебя. |
| Закрытый ключ | Хранится в строжайшем секрете. Только им можно расшифровать. |
Ключи связаны математически, но зная открытый ключ, вычислить закрытый практически невозможно.
Аналогия с почтовым ящиком
Представь почтовый ящик с прорезью. Опустить письмо в прорезь может кто угодно — это как шифрование открытым ключом. А достать письма может только хозяин с ключом от дверцы — это закрытый ключ. Прорезь (открытый ключ) видна всем, но это не помогает прочитать чужие письма.
Как Алиса пишет Бобу
- Боб публикует свой открытый ключ — пусть его видит хоть весь мир.
- Алиса шифрует сообщение открытым ключом Боба.
- Только Боб своим закрытым ключом может расшифровать.
Заметь: Алисе и Бобу не нужно заранее обмениваться секретом! Ева может видеть открытый ключ и шифр-текст — но без закрытого ключа Боба прочитать ничего не сможет.
Маленькая иллюстрация на числах
Покажем саму идею «легко в одну сторону, трудно обратно» на простом примере: перемножить два числа легко, а разложить результат обратно на множители — сложно.
p = 61
q = 53
n = p * q # умножить легко
print("Открытое число n =", n)
# А теперь представь, что известно только n.
# Найти исходные p и q (разложить на множители) — трудная задача.
for i in range(2, n):
if n % i == 0:
print("Чтобы взломать, врагу пришлось перебрать до делителя", i)
breakВывод:
Открытое число n = 3233 Чтобы взломать, врагу пришлось перебрать до делителя 53
Здесь числа крошечные, поэтому делитель нашёлся быстро. Но в настоящем RSA используют числа из сотен цифр — и тогда разложить n обратно не хватит времени всей жизни Вселенной. На этой асимметрии («умножить легко, разложить трудно») и держится защита.