Сделай это безопасным! Alek Silverstone Спецвыпуск: Хакер, номер #058, стр. 058-072-3 2. Выходное значение имеет строго фиксированный размер. 3. Значение функции от любого аргумента должно вычисляться быстро. 4. Задача нахождения аргумента функции по ее значению должна быть вычислительно трудоемкой – функция однонаправленная. 5. Задача нахождения такой пары аргументов, при которой значения функций от них одинаковы (нахождение коллизии), должна быть вычислительно трудоемкой. Применяя хэш-функцию, можно составить протокол №2 (посмотрим на соответствующий рисунок). В этом случае Банк сначала посылает свое сообщение открытым текстом, после этого - зашифрованное на своем секретном ключе значение хэш-функции от своего сообщения, что, по большому счету, есть не что иное, как электронно-цифровая подпись этого сообщения. Андрей расшифровывает полученное значение, хэширует исходное сообщение и сравнивает результаты – проверяет подпись. Совпадение значений хэш-функций является доказательством того, что Банк является подлинным источником информации. Теперь будем составлять протокол передачи открытого ключа Банка Андрею. Посмотрим на первый вариант (протокол 3). В нем Вася может выдать себя за Банк. Для этого ему всего лишь нужно иметь свою пару ключей. Он будет перехватывать все обращения Андрея Банку и отвечать на них, подставляя свой открытый и секретный ключи вместо ключей Банка. Андрей же не имеет возможности обнаружить подлог. Эта проблема, известная как проблема распределения ключей, решается в SSL путем введения сертификатов, как и во многих протоколах (другой способ решения этой проблемы – использование доверителей – реализован, к примеру, в PGP). Сертификат выдается центром сертификации (Certification Authority, CA) и содержит следующие обязательные поля: - Серийный номер сертификата; - Имя центра сертификации; - Имя объекта сертификации; - Открытый ключ объекта сертификации; - Срок действия сертификата. Здесь речь идет об объекте сертификации. Это может быть все что угодно: человек, программа, сайт, оборудование и т.д. Сертификат подписывается секретным ключом CA и выкладывается в открытый доступ. Посмотрим на рисунок "Протокол 4: сертификаты" и разберемся. Для начала обращаю всеобщее внимание на тот факт, что и Андрей, и Банк должны полностью доверять CA, а он должен оправдывать это доверие :). Другими словами, все должны быть уверены, что сертификат Банка принадлежит именно Банку. Получив сертификат, Андрей проверяет его подпись, объект сертификации (им должен быть Банк), срок действия и убеждается в подлинности открытого ключа Банка. Необходимый для этого открытый ключ CA выкладывается в открытый доступ. Если наш бравый Вася пошлет Андрею сертификат Банка от своего имени, то он все равно выдаст себя с головой: не зная секретного ключа Банка, он не сможет отправить последнее сообщение. Убедившись в подлинности источника информации, Андрей генерирует симметричный сеансовый ключ, шифрует его открытым ключом Банка и отправляет. Банк дешифрует сообщение своим секретным ключом и получает сеансовый ключ. Таким образом, метод двухключевой криптографии применяется для пересылки сеансового ключа с последующим использованием его в схеме симметричного шифрования – гибридная модель. Рассмотрим этот протокол на схеме "Протокол 5". |