Когда браузер открывает сайт по HTTPS, мессенджер шифрует сообщение, а сервис проверяет пароль, используются криптографические методы. Одни алгоритмы защищают данные при передаче, другие позволяют проверить их подлинность или безопасно хранить пароли. Разберёмся, как работает шифрование, чем симметричные алгоритмы отличаются от асимметричных, зачем сайтам TLS и почему пароли нельзя просто хранить в базе данных.
Что такое криптография простыми словами
Секретное сообщение мало спрятать — нужно сделать так, чтобы посторонний не смог его прочитать, даже если перехватит. Для этого и придумали шифры: исходный текст преобразуют так, что без нужного ключа он становится непонятным.
Сегодня такими способами защиты занимается криптография — область науки и техники, которая использует математические методы для защиты информации. С её помощью можно не только скрыть данные от посторонних, но и проверить, не были ли они изменены, а также подтвердить, от кого они получены.
Шифрование работает так: исходные данные проходят через криптографический алгоритм и превращаются в шифртекст. Для этого используется ключ — специальное значение, от которого зависит результат преобразования.
Как работает шифр Цезаря
Один из самых простых способов зашифровать текст — сдвинуть каждую букву на несколько позиций по алфавиту. Например, вместо первой буквы взять четвёртую, вместо второй — пятую и так далее. Такой способ называют шифром Цезаря. Название связано с Гаем Юлием Цезарем. Древнеримский автор Светоний описывал, как Цезарь использовал подобный способ преобразования текста в конфиденциальной переписке.
Число позиций, на которое сдвигаются буквы, служит ключом. Если ключ равен трём, каждая буква заменяется той, которая находится на три позиции дальше. В русском алфавите из 33 букв слово КОТ превратится в НСХ:
- К → Н;
- О → С;
- Т → Х.
За этим простым правилом стоит математика. Каждой букве можно присвоить номер, прибавить к нему величину сдвига и, дойдя до конца алфавита, продолжить счёт с его начала. Это и есть операция по модулю длины алфавита. При расшифровании делают обратное — величину сдвига вычитают.
Но у простоты шифра Цезаря есть обратная сторона: его легко взломать. Для русского алфавита из 33 букв существует всего 32 нетривиальных сдвига, поэтому компьютер может быстро перебрать все возможные ключи. Есть и другой способ — частотный анализ. В естественном языке одни буквы встречаются чаще других. Если зашифрованный текст достаточно длинный, можно сравнить частоту его символов с характерной частотой букв языка и предположить, какие буквы скрываются за символами шифртекста.
Симметричное и асимметричное шифрование
В современных системах ключи устроены иначе, но общий принцип сохраняется: от ключа зависит, как будут зашифрованы данные. Дальше возможны два подхода. При симметричном шифровании используется один общий секретный ключ, а при асимметричном — два связанных ключа: открытый и закрытый. Разберёмся, зачем нужны оба варианта и чем они отличаются.
Симметричное шифрование
Представим, что двум компьютерам нужно обмениваться зашифрованными данными. При симметричном шифровании у них есть один общий секретный ключ: с его помощью данные шифруют, а затем расшифровывают. Главное, чтобы этот ключ не попал к посторонним.
Один из основных современных алгоритмов такого типа — AES. Его приняли в США в 2001 году на основе алгоритма Rijndael. У AES есть три варианта длины ключа: 128, 192 и 256 бит. Чем длиннее ключ, тем больше вариантов придётся проверить при попытке подобрать его полным перебором.
У симметричного шифрования есть очевидная трудность: если двум сторонам нужен один секретный ключ, как безопасно им обменяться? Современные протоколы решают эту задачу с помощью публично-ключевых механизмов. Они позволяют установить общий секретный ключ даже через сеть, которой нельзя полностью доверять. Как это возможно — станет понятнее, если разобраться с асимметричной криптографией.
Асимметричная криптография
В асимметричной криптографии используются два связанных ключа — открытый и закрытый. Открытый ключ можно передавать другим, а закрытый остаётся только у владельца.
Как это помогает? Например, с помощью открытого ключа можно защитить данные так, чтобы расшифровать их смог владелец соответствующего закрытого ключа. При этом важно убедиться, что открытый ключ действительно принадлежит тому, кому ты собираешься отправить данные. Если злоумышленник незаметно подменит его своим, защита может быть нарушена.
Существуют разные алгоритмы асимметричной криптографии. Один из самых известных — RSA. Его надёжность основана на особенности математики: перемножить два больших простых числа сравнительно легко, а вот выполнить обратную задачу — по результату найти эти числа — при достаточно больших значениях очень сложно.
Пара открытого и закрытого ключей пригодилась и для другой задачи — цифровой подписи. Она позволяет проверить, от кого получены данные и не изменились ли они после подписания. Для этого владелец создаёт подпись с помощью закрытого ключа, а проверить её можно с помощью открытого.
Как HTTPS защищает данные
Когда ты заходишь на сайт, браузер и сервер обмениваются данными. Если используется HTTPS, этот обмен защищает протокол TLS: он шифрует данные, помогает обнаружить их изменение по пути и позволяет браузеру проверить подлинность сервера. Посторонний всё ещё может заметить сам факт обмена данными, но при правильно установленном TLS не должен иметь возможности прочитать или незаметно изменить содержимое трафика.
Для защиты соединения используются оба вида криптографии, о которых мы говорили выше. Сначала публично-ключевые механизмы помогают провести проверку и установить общий секретный ключ. Затем в дело вступает симметричное шифрование — с его помощью защищается основной обмен данными.
Как работает сквозное шифрование
Когда ты отправляешь сообщение в мессенджере, оно проходит через сервер сервиса, прежде чем попасть к собеседнику. При сквозном шифровании текст сообщения шифруется так, что прочитать его могут только участники переписки. Сервер помогает доставить сообщение, но сам не должен видеть его содержимое.
Допустим, кто-то получил доступ к серверу мессенджера. Если сквозное шифрование реализовано правильно, это само по себе не позволит прочитать переписку: на сервере сообщение остаётся в зашифрованном виде. Однако защита может не помочь, если злоумышленник получил доступ к самому устройству и может увидеть уже расшифрованные сообщения.
При HTTPS защищается передача данных между браузером и сайтом, а при сквозном шифровании содержимое переписки не должен расшифровывать даже сервер, через который она передаётся.
Как хранятся пароли
Кажется логичным, что сайт хранит твой пароль и при каждом входе сравнивает его с указанным. Но это опасно: если базу данных украдут, вместе с ней могут получить и пароли пользователей.
Поэтому вместо самого пароля сервис хранит его хеш — результат специального математического преобразования. При входе сервис снова преобразует указанный пароль и сравнивает результат с сохранённым. Если значения совпадают, сервис разрешает войти. Сам пароль хранить для этого не нужно.
Дополнительную защиту даёт соль — случайное значение, благодаря которому даже одинаковые пароли получают разные хеши. А чтобы усложнить подбор, используют специальные алгоритмы для паролей. Для новых систем OWASP рекомендует прежде всего Argon2id, а если он недоступен — scrypt.
Как создать надёжный пароль
Причём длина важнее привычных хитростей вроде замены буквы О на ноль или А на @. По современным рекомендациям, если пароль — единственный способ подтверждения личности, в нём должно быть не менее 15 символов.
Для каждого сервиса нужен свой пароль. Если использовать одну и ту же комбинацию в нескольких местах, утечка на одном сайте позволит попробовать эти же данные для входа в другие аккаунты. Уникальный пароль для каждого сервиса не даёт автоматически использовать его таким способом.
Запомнить много длинных и разных паролей трудно. С этим помогают менеджеры паролей: они умеют создавать и хранить уникальные пароли и автоматически подставлять данные для входа. Большинство таких программ защищают своё хранилище криптографическими средствами.
Как работает двухфакторная аутентификация
Даже сложный пароль могут украсть — например, с помощью фишинга. Поэтому к паролю можно добавить ещё одну проверку. Так работает двухфакторная аутентификация (2FA): для входа нужно подтвердить личность двумя разными способами. Например, ввести пароль, а затем код или подтвердить вход с устройства, которое находится у тебя.
Но и способы второй проверки отличаются по надёжности. Например, одноразовый код, который нужно ввести вручную, можно перехватить с помощью фишинга. Если сервис предлагает фишинг-устойчивый способ многофакторной аутентификации, лучше выбрать его.
MFA особенно полезна для важных аккаунтов — электронной почты, социальных сетей и других сервисов, которые нужно хорошо защищать. CAPTCHA и уведомления о подозрительных входах тоже помогают повысить безопасность, но работают иначе: CAPTCHA ограничивает автоматизированные атаки, а уведомления помогают заметить подозрительную активность. Заменить двухфакторную аутентификацию они не могут.
Главное
От простого шифра Цезаря до HTTPS и сквозного шифрования принцип остаётся похожим: информацию нужно защитить так, чтобы доступ к ней получили только те, кому он предназначен. Для разных задач используются разные инструменты — симметричное и асимметричное шифрование, TLS, хеширование и цифровые подписи.