101 прием работы с OpenSSL Anton Karpov Хакер, номер #074, стр. 074-100-1 (toxa@real.xakep.ru) Забавы с OpenSSL Все знают, что такое OpenSSL. По крайней мере, хотя бы по уязвимостям в mod_ssl для апача ;). Однако OpenSSL - это настоящий криптографический тулкит, который разве что кофе не варит. Рассказать здесь обо всех его возможностях - нереально, но я попытаюсь познакомить тебя с основными областями применения этой полезной утилиты. Шифруем и подписываем Самое простое, что может делать openssl - шифровать файлы, как симметричными алгоритмами (когда для шифрования и расшифровки нужна одна и та же парольная фраза), так и ассиметричными - с использованием rsa-ключей. Например, зашифруем файл симметричным алгоритмом des3 с помощью "openssl enc": # echo veryverysecretinfo > plain.txt # openssl enc -des3 -e -in plain.txt -out enc.txt enter des-ede3-cbc encryption password: Verifying - enter des-ede3-cbc encryption password: Можно убедиться, что enc.txt содержит нечитаемый текст. Расшифровать файл можно, заменив ключ "-e" ключом "-d": # openssl enc -des3 -d -in enc.txt -out plain.txt enter des-ede3-cbc decryption password: Чтобы получить шифртекст в base64-кодировке (ASCII-текст), используй ключ "-a". Т.к. openssl установлен практически на каждой машине, с его помощью можно быстро зашифровать информацию, которую необходимо передать по недоверенным каналам. Не знающие данной фишки хацкеры по-прежнему используют убогий zip с паролем, чтобы слить дамп базы через чужой приватный проксик ;). К этому можно добавить, что openssl поддерживает великое множество симметричных шифров, в том числе самые криптостойкие на сегодняшний день AES (алгоритм Rijndael) и IDEA. Вместо "-des3" можно указать требуемый шифр. Если же ты хочешь, чтобы собеседник передал тебе файл в зашифрованном виде, а ты его расшифровал, то стоит озаботиться ассиметричной криптографией, сгенерировав себе пару rsa-ключей, публичный и приватный, с помощью "openssl genrsa": # openssl genrsa -out rsaprivatekey.pem -des3 2048 Generating RSA private key, 2048 bit long modulus .................+++ ................+++ e is 65537 (0x10001) Enter pass phrase for rsaprivatekey.pem: Verifying - Enter pass phrase for rsaprivatekey.pem: Аргумент "-des3" указывает, что приватный ключ следует защитить (зашифровать по алгоритму Triple DES) парольной фразой. При каждом использовании ключа тебе придется вводить эту фразу. Это безопасно, но часто неудобно, так что можешь опустить это параметр. Убедись, что на ключ проставлены права 600, чтобы никто в системе не мог прочитать твой ключ, да и вообще береги его, как зеницу ока. Получить соответствующий закрытому публичный ключ можно с помощью "openssl rsa": # openssl rsa -in rsaprivatekey.pem -pubout -out rsapublickey.pem Enter pass phrase for rsaprivatekey.pem: writing RSA key # cat rsapublickey.pem -----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4my4TOhq/X412X0UzKvK kccra9Gq9+SDkBQGfI483obV+V2d054PnDyZ7uZghgVbrATc4hWTy26UPpdyxnBn fGKiwtWjUlrMwEUZIQ4znTAcLey1Fc1TpbQchBtFaPe4UPNaLY1P/DxsHRXgI8mq ctzdQVdd3TQkg/FV4hSvF3LOUfBHJOj7C7E4H8z7w+DN+c9lgo6v1J55KPovvaQo |