С увеличением нашей жизни, связанной с Интернетом, криптография привлекает большое внимание. В мире, полном злоумышленников, стремящихся получить ваши электронные письма, пароли и банковские счета, как мы можем обеспечить безопасность? Сегодня мы обсудим два основных элемента: конфиденциальность и честность. Исходя из этого, мы обсудим на концептуальном уровне, как гарантировать и то, и другое с помощью шифрования с проверкой подлинности (например, SSH, SSL, IPSec).

Конфиденциальность — это защита вашей информации. Скажем, вы отправляете электронное письмо своему другу. Вы хотите, чтобы вашу электронную почту мог прочитать только ваш друг, верно? Вот тут-то и вступает в игру конфиденциальность. Конфиденциальность заключается в том, чтобы только предполагаемые получатели могли получить доступ к информации, которой вы делитесь.

Даже если ваши сообщения являются конфиденциальными, их можно подделать. Вот тут-то и появляется честность. Допустим, вы отправляете такое же сообщение своему другу. Допустим, кто-то перехватывает сообщение. Это конфиденциально, поэтому они не могут его прочитать. Но что, если они присоединятся к нему? Например, они пересылают ваше сообщение с добавлением «Я тебя ненавижу. Никогда больше не разговаривай со мной». Ваше исходное сообщение по-прежнему конфиденциально, но вашему другу это не понравится. Это целостность: гарантия того, что исходное сообщение не подделано. Если кто-то изменит его, получатель должен знать, иначе сообщение должно стать нечитаемым.

Шифрование с проверкой подлинности — это способ обеспечить оба этих качества. Шифрование обеспечивает конфиденциальность, а аутентификация — целостность. Как это гарантируется на высоком уровне?

Конфиденциальность

Как передать конфиденциальное сообщение?

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

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

Потрясающе, мы добились конфиденциальности! Вы шифруете свое сообщение, и никто не может его прочитать. Как мы можем обеспечить целостность?

Перерыв на кофе: ключевая симметрия

Самое время сделать перерыв и обсудить ключевую симметрию. Если у отправителя и получателя есть секретный ключ, они могут зашифровать и расшифровать сообщение с помощью одного и того же ключа. Но что, если вы хотите использовать два ключа: открытый ключ для шифрования сообщения, которое кто-то отправляет вам, и закрытый ключ для расшифровки сообщения? Многие приложения делают именно это.

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

Целостность

Теперь давайте вернемся к целостности: убедиться, что наш друг знает, что наше сообщение не было подделано. Поскольку наша схема шифрования безопасна, наше сообщение не может быть изменено, но существует несколько атак. Давайте обсудим два распространенных: повторные атаки и битовые модификации.

При повторной атаке зашифрованный текст повторно отправляется получателю. Скажем, интернет-магазин взимает с вас плату за ваш заказ. При повторной атаке злоумышленник, который получает зашифрованный зашифрованный текст, может повторно отправить его в ваш банк, чтобы несколько раз списать средства с вашего счета. Как вы противостоите этому? Вы можете включить счетчик и зашифровать его вместе с вашим сообщением. Таким образом, если сообщение будет отправлено снова, счетчик не совпадет. Получатель будет знать, что это повтор старого сообщения. Отлично, мы отразили повторные атаки!

Предотвратить изменение битов зашифрованного текста злоумышленником может быть сложнее. Скажем, вы отправляете сообщение: «Давай встретимся в 5». Злоумышленник перехватывает сообщения и изменяет последний бит, в результате чего ваше сообщение выглядит следующим образом: «Давай встретимся в 6». Как мы можем противостоять этому? Как мы можем убедиться, что ваш друг знает, что ваше сообщение не было изменено?

Здесь вступают в действие коды аутентификации сообщений (MAC). MAC-адрес рассчитывается отдельно от зашифрованного сообщения. Существуют основные способы расчета MAC:

· Шифрование и MAC-адрес исходного сообщения параллельно (например, SSH)

· MAC затем шифрует исходное сообщение (например, SSL)

· Шифрование, а затем MAC-адрес исходного сообщения (например, IPSec)

Ключевым моментом MAC является то, что он опирается на внешнюю точку данных, такую ​​как рандомизированный вектор инициализации или отдельный ключ. Он также рассчитывается с использованием последовательности рандомизированных функций с добавлением этой внешней точки данных.

Это означает, что изменение зашифрованного текста приведет к несоответствию MAC. В результате изменение текста больше невозможно, поскольку MAC проверяет, не было ли изменено исходное сообщение. Изменение сообщения больше невозможно. Мы предотвратили возможность злоумышленника использовать две распространенные атаки!

Заключительные мысли

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