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