Сделай это безопасным! 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 указывает на необходимость создания файла, в котором будет храниться серийный номер последнего выданного сертификата, если его еще не существует. |