1. Отправитель шифрует сообщение с помощью открытого ключа получателя. Этот первый шаг гарантирует конфиденциальность.
2. Отправитель снова шифрует сообщение, на этот раз с помощью своего закрытого ключа. Таким образом удостоверяется подлинность сообщения, оно «подписано».
3. Получатель использует открытый ключ отправителя, чтобы расшифровать шифр шага 2. Таким образом проверяется подлинность сообщения.
4. Получатель теперь использует свой закрытый ключ, чтобы расшифровать шифр шага 1.
Хеш-функции
Одна из проблем теоретического процесса, о котором говорилось выше, заключается в том, что шифрование открытым ключом требует значительной вычислительной мощности и времени, и повторять этот процесс для подписания и проверки каждого сообщения было бы чрезвычайно невыгодно. Именно поэтому на практике подписание сообщения осуществляется с помощью математических ресурсов, называемых хеш-функциями. Для каждого оригинального сообщения эти функции генерируют простую цепочку битов (обычно 160), называемых хешем или хеш-кодом. Алгоритм работает таким образом, что вероятность того, что различные сообщения получат один и тот же хеш-код, почти равна нулю. Кроме того, практически невозможно обратить процесс и получить исходное сообщение, имея только хеш-код. Хеш каждого сообщения отправитель шифрует своим закрытым ключом и отправляет вместе с зашифрованным обычным образом исходным сообщением. Получатель расшифровывает с помощью открытого ключа отправителя ту часть сообщения, которая содержит хеш. Далее, определив таким образом хеш-код отправителя, получатель применяет хеш-функцию к полученному основному сообщению и сравнивает два хеша. Если они совпадают, личность отправителя подтверждается, и, кроме того, получатель теперь уверен, что никто не изменил исходное сообщение.
Небольшие различия в содержании сообщения приводят к совершенно разным хеш-кодам. Таким образом, получатель может быть уверен, что текст не был изменен.
Сертификаты открытых ключей
Однако наиболее важной проблемой систем криптографии с открытым ключом является проверка не подлинности сообщения, а подлинности самих открытых ключей. Как отправитель и получатель могут быть уверены, что открытые ключи их партнеров подлинны? Допустим, шпион обманул отправителя, дав ему свой открытый ключ и заставив его поверить, что это ключ получателя. Тогда, если шпиону удастся перехватить сообщение, он может использовать свой закрытый ключ для расшифровки. И чтобы избежать разоблачения, шпион затем использует открытый ключ получателя для повторного шифрования сообщения и отправляет это сообщение первоначальному адресату.
Вот почему существуют государственные и частные организации, занимающиеся независимой сертификацией открытых ключей. Сертификат такого типа содержит, помимо соответствующего ключа, информацию о владельце и сроке действия сертификата. Владельцы этого типа ключей делают свои сертификаты открытыми, чтобы ими можно было обмениваться с определенной степенью безопасности.
* * *
ЦИФРОВАЯ СТЕГАНОГРАФИЯ
Хотя это может показаться парадоксальным, развитие новых технологий привело к возрождению стеганографии. Обычный аудио-файл состоит из 16-битовых значений, воспроизводимых с частотой в 44,1 кГц. Очень просто использовать некоторые из этих битов для передачи секретных данных, так что слушатель вообще не заметит никакой акустической разницы. Файлы изображений также можно использовать для передачи скрытой информации.
Большинство интернет-шпионов и хакеров мало интересуются сообщениями, которыми обмениваются обычные люди, за одним исключением: если сообщения содержат номера кредитных карт. Но существует криптографическая система, которая защищает передачу такой важной информации, известная как TLS (Transport Layer Security — безопасность транспортного уровня). Она была разработана в 1994 г. корпорацией Netscape, занимающейся программным обеспечением для интернета, и была принята в качестве глобального стандарта два года спустя.