Security basics, часть 1: симметричное и ассиметричное шифрование



Начнём с простой задачи: передать секретное сообщение по общедоступной сети.



Злоумышленник может прослушать канал связи, перехватить сообщение и даже поменять его. Такой тип атаки называется man in the middle🕵️



Что делать?



Самое простое — преобразовать сообщение, чтобы при перехвате злоумышленник ничего не понял. Например, сдвинуть каждую букву на 1:

Пирожок → Рйспзпл



Получатель выполнит обратную операцию и расшифрует сообщение.



Но для стандартных алгоритмов то же самое легко сделает и злоумышленник. Поэтому в преобразования вводится дополнительный параметр и формула становится сложнее. Например: символ → символ + k



Параметр (или ключ) вносит больше неопределённости в результат. Ключ может быть одним числом или состоять из нескольких чисел. Злоумышленнику нужно гораздо больше времени, чтобы взломать такой шифр.



🔸 Если для расшифровки используется тот же ключ, что и для шифрования, алгоритм называется симметричным.



Наиболее популярен алгоритм AES и его производные. Они, разумеется, более сложные, чем пример выше — сообщения делятся на блоки, блоки перемешиваются, внутри каждого блока выполняются десятки операций, и всё это проходит в несколько раундов.



На практике такой тип шифрования используется редко. Представьте, вы открыли сайт в браузере и хотите залогиниться. Чтобы безопасно передать пароль, вам с сервером нужен общий ключ. Но как получить его — непонятно.



🔸 Поэтому чаще применяется ассиметричное шифрование.



Создаётся пара ключей: один называется публичным, а другой — приватным.



🗝 Публичный ключ свободно распространяется и позволяет шифровать сообщения

🗝 Приватный ключ остаётся у получателя. И только он расшифрует полученное сообщение



Самый популярный ассимметричный алгоритм — RSA. Он основан на простых числах, вычислении степени и остатке от деления. Формулы несложные, а шифр получается вполне стойкий.



В последнее время в тренды выходит EdDSA. Он популярен тем, что активно используется в биткоине. Поддержка этого алгоритма появилась только в java 15.



Вообще алгоритмы шифрования используются не только для шифрования, но и входят в состав остальных инструментов безопасности. Но об этом позже🙂