101 прием работы с OpenSSL Anton Karpov Хакер, номер #074, стр. 074-100-2 HikfnixunYbOoIlD6V/vVoApjY4CeLomDECj4eE8w3B0oZdYeqq/iMkttCcK56p7 kymX8DpFItwFiDLvnwlN+oiKtyno+Ctf8yxwFNCNJNOXXE1IV4YAkY8ZO7Q3JhGp MQIDAQAB -----END PUBLIC KEY----- Этот публичный ключ ты передаешь собеседнику, и он шифрует файл на нем, используя "openssl rsautl": # openssl rsautl -encrypt -pubin -inkey rsapublickey.pem -in plain.txt -out cipher.txt Теперь ты получаешь файл и расшифровываешь его, используя свой секретный ключ: # openssl rsault -decrypt -inley rsaprivatekey.pem -in cipher.txt -out plain.txt Разумеется, знание твоего публичного ключа не поможет вскрыть шифртекст. Кроме шифрования, можно также подписывать файлы, предоставляя гарантии, что данный файл послан лично тобой, и давая возможность проверить его аутентичность. Делается это с помощью "openssl dgst": # openssl dgst -sha1 -sign rsaprivatekey.pem -out sign.txt myfile.tar.gz Весьма логично, что шифрование происходит на публичном ключе, тогда как для подписи используется секретный. Естественно, процесс подписывания никоим образом не шифрует файл (но файл, разумеется, может быть и зашифрован, и подписан). Все, что нужно получателю файла - это проверить подпись, используя твой публичный ключ: # openssl dgst -sha1 -verify rsapublickey.pem -signature sign.txt myfile.tar.gz Verified OK. Если подпись не совпадает, ты получишь сообщение Verification Failure. Строго говоря, в предыдущем примере подписывался не файл, а message digest, или контрольная сумма файла. Она также может быть вычислена и без использования ключей. Тебе наверняка знакома утилита md5, которая высчитывает хэш файла (md5-сумму), позволяющий убедиться в его аутентичности. Если изменить в файле хотя бы бит, его md5-сумма полностью изменится. OpenSSL позволяет вычислять хэш, используя md5, sha, sha1, mdc2, и т.д. Во многих Linux-дистрибутивах утилита md5 отсутствует, но ты все равно можешь вычислить контрольную сумму, используя "openssl dgst": # openssl dgst -md5 myfile.tar.gz MD5(myfile.tar.gz) =65b36f8d54b8bab0a787cbd4a8dd8aef Еще с помощью OpenSSL можно быстро сгенерировать себе пароль, WEP-ключ и прочее, используя "openssl rand": # openssl rand -base64 45 0JZmfHQL3WI7PTUYcq1w8yQ8wFE3mB7Wd7vdAYd2A6x0cTHmVYqI/Su3o5qh Если нужно найти соответствие пароля его шифру, например, если ты по какой-то причине решил напрямую править /etc/master.passwd (/etc/shadow), можно использовать "openssl passwd": # openssl passwd -1 mypassword $1$OsmexMtO$0CtV.Lb6nhGOSGKM8jKNO. Параметр "-1" в данном случае указывает использование алгоритма md5 (им по умолчанию шифруются пароли во FreeBSD/NetBSD и многих дистрах линуха, в OpenBSD используется Blowfish). Работаем с сертификатами OpenSSL очень часто применяют именно для работы с цифровыми сертификатами. И немудрено, ведь в этом тулките есть все, чтобы построить свой маленький CA и выдавать сертификаты. Сейчас очень модно говорить о цифровых сертификатах и сертификационных (удостоверяющих) центрах. Что же это такое? Обратись к началу статьи, где я рассказываю про ассиметричную криптографию и RSA-ключи. Для того чтобы N человек могли общаться между собой (например, подписывать и шифровать файлы), каждый должен иметь пару ключей - публичный и секретный - и каким-то образом (например, через персональную web-страничку) предоставить свой public key всем (N-1) людям. Очевидны две проблемы: |