Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #58, СЕНТЯБРЬ 2005 г.

Сделай это безопасным!

Alek Silverstone

Спецвыпуск: Хакер, номер #058, стр. 058-072-8


5 марта этого года MD5 поимели так, что мне, например, становится страшно. В этот день на странице cryptography.hyperlink.cz/MD5_collisions.html появился документ, гласящий, что чешский ученый нашел способ нахождения коллизии на ноутбуке с P4-1600Mhz за восемь часов! Чуть позже появилось и полное описание метода.

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

OpenSSL

Самой популярной реализацией протокола SSL является тулкит OpenSSL (www.openssl.org), входящий в большинство дистрибутивов Linux, и именно он используется в mod_ssl для Apache. На сайте доступны исходные коды, так что при определенном навыке можно скомпилировать их и под Windows. Он обеспечивает полную поддержку SSL v2/v3 и TLS v1 (улучшенная версия SSL v3, являющаяся стандартом, – RFC-2246). Понятно, что для этого в библиотеке должны быть реализованы алгоритмы шифрования, хэширования и т.д. Ничто не мешает тебе использовать эти функции напрямую. Например команда:

openssl enc -cast -in secret.txt -out secret.enc

зашифрует файл secret.txt шифром CAST, ключ шифрования будет сгенерирован на основе введенного с клавиатуры пароля. Команда

openssl genrsa -aes256 -out private.rsa 4096

сгенерирует тебе RSA-пару с длиной ключей по 4096 бит и зашифрует ее алгоритмом AES с длиной ключа и блока в 256 бит.

За годы отладки в этих функциях не осталось уязвимостей (сильно сказано - согласен), так что они часто используются разработчиками: для решения криптографических задач многие программы под Linux'ом используют именно вызовы OpenSSL. И все же основной задачйе протокола SSL остается установка безопасного аутентичного зашифрованного соединения. Сейчас мы рассмотрим небольшой пример. Для начала создай две пары ключей server.rsa (ключ сервера) и CA.rsa (ключ центра сертификации) так, как показано выше. Далее наберем:

openssl req –new –x509 –key CA.rsa –out CA.cert

Команда req формирует запрос на получение сертификата, а аргумент –x509 преобразует этот запрос в сертификат стандарта X.509. Другими словами, ключ CA подписывается на самом себе, что, в общем-то, логично: если CA сам себе не доверяет, что же говорить о других :)?

Теперь сформируем запрос на получение сертификата для сервера:

openssl req –new –key server.rsa –out server.req

На основе запроса сформируем сертификат: подпишем запрос секретным ключом CA и проверим подпись:

openssl x509 –req –CA CA.cert –CAkey CA.rsa –CAcreateserial –in server.req –out server.cert

openssl verify –CAfile CA.cert server.cert

Параметр -CAcreateserial указывает на необходимость создания файла, в котором будет храниться серийный номер последнего выданного сертификата, если его еще не существует.

Назад на стр. 058-072-7  Содержание  Вперед на стр. 058-072-9