Получи случайную криптовалюту за регистрацию!

Security basics, часть 1: симметричное и ассиметричное шифрова | Java: fill the gaps

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

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

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

Что делать?

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

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

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

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

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

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

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

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

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

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

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

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

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