На прошлой неделе мы изучали теорию чисел, необходимую для шифрования с открытым ключом
На этой неделе мы применим эти знания на практике и построим
несколько безопасных схем для шифрования с открытым ключом. Но прежде всего, нам нужно определить, что
такое шифрование с открытым ключом, и что означает безопасное шифрование с открытым ключом
Позвольте мне напомнить, что в схемах шифрования с открытым ключом есть
алгоритм шифрования, который обычно обозначается Е и алгоритм расшифрования,
который обозначается D. При этом алгоритм шифрования использует
открытый ключ в то время, как алгоритм дешифрования - секретный ключ. Эта пара называется
ключевой парой. Открытый ключ используется для шифрования сообщений, а секретный ключ
используется для расшифрования сообщений. Итак, в данном случае сообщение m шифруется с помощью
открытого ключа и в итоге получается шифротекст c. Аналогично,
передавая шифротекст в алгоритм расшифрования, с помощью секретного ключа
мы получаем исходное сообщение m. Сегодня у шифрования
с открытым ключом имеется множество приложений. На прошлой неделе мы рассматривали классические приложения такие, как
установка сессии, а именно, обмен ключами, а теперь мы будем рассматривать только обмен ключами,
защищенный от прослушивания. Вспомните, как работает протокол. Вначале Алиса
генерирует пару открытый/секретный ключ.
Отправляет открытый ключ Бобу. Боб генерирует случайный Х,
который будет использоваться в качестве разделяемого ими секрета, и затем отправляет Алисе Х,
зашифрованный ее открытым ключом. Алиса может расшифровать сообщение, восстановить Х, и теперь у них обоих
есть разделяемый секрет Х, который они могут использовать для безопасного общения друг с другом.
Все, что сможет получить злоумышленник - это открытый ключ,
шифрограмма полученная из Х с помощью открытого ключа. Из нее он не сможет получить
никакой информации об Х. Для понимания определим более точно, что означает
не сможет узнать ничего об Х. У шифрования с открытым ключом
на самом деле есть множество других приложений. Например, оно очень полезно в
не интерактивных приложениях. Подумайте, к примеру, о системах электронной почты. Вот Боб
хочет отправить письмо Алисе и отправляет его. Письмо проходит от
от почтового сервера к почтовому серверу, пока наконец не достигнет Алисы. В этой точке Алиса должна
расшифровать сообщение. Способ организации почтовой системы создан для не интерактивных
условий, в которых Боб отправляет письмо, а затем Алиса должна
его получить. И Алиса не должна общаться с Бобом для того, что расшифровать
письмо. В этом случае, из-за неинтерактивности, нет возможности
для получения разделяемого секрета между Алисой и Бобом. По этому, вот что произойдет данном случае,
Боб просто отправит email, зашифрованный с помощью открытого
ключа Алисы. Итак он отправит email. Кто угодно в мире может отправить Алисе email,
зашифрованный с помощью ее открытого ключа. Когда Алиса получит этот email, она использует свой
секретный ключ, чтобы расшифровать шифрограмму и восстановить открытый текст сообщения.
Конечно, существует одно возражение, состоящее в том, что в действительности Боб должен каким-то образом
получить открытый ключ Алисы. Поэтому пока просто будем предполагать, что у Боба уже есть
открытый ключ Алисы, но позже, когда мы будем говорить о цифровых подписях
мы увидим, как на самом деле можно это сделать очень эффективно, используя то, что называется
управлением открытыми ключами. И, как я уже сказал мы вернемся к этому позднее.
Но главное, о чем я хочу, чтобы вы помнили это то, что открытые ключи
используется для установки сессий. В сети очень распространена ситуация, когда шифрование
с открытым ключом используется для установки секретного ключа между web-браузером и web-сервером.