На главную
Памятка по OpenSSL
Сборка для Windows. На Linux-системах уже установлена.
Версия OpenSSL
openssl version
Вывод краткой справки по параметрам, например, команды rand
openssl help rand
Более полное описание вы можете найти в интернете или посмотрев страницы man в Linux.
Перекодировать двоичный файл в кодировку base64
openssl base64 -A -in W:\sym.key -out W:\pwds.txt
Из кодировки обратно
openssl base64 -A -d -in W:\pwds.txt -out W:\sym.key
base64 можно использовать для отсылки двоичных файлов в виде текста либо для генерации парольного файла для OpenSSL из двоичного случайного файла, т.к. пароль для OpenSSL должен быть на первой строке файла.
Уберите параметр "-A" если хотите, чтобы данные в base64 были многострочными (не подходит для парольного файла).
Вычисление хешей
Вычислить 512-битный хеш по стандарту sha-3. Результат в файл W:\hash
openssl dgst -sha3-512 -out W:\hash W:\data.txt
Результат на экран консоли. Хеш sha-2 512 бит
openssl dgst -sha512 W:\data.txt
hmac: хеш sha-3 512 бит файла W:\data.txt с паролем из файла file:W:\pwd.txt .
openssl dgst -sha3-512 -hmac file:W:\pwd.txt -out W:\hmac W:\data.txt
hmac может применяться для дополнительного удостоверения подлинности сообщения. Если файл W:\pwd.txt есть у обоих собеседников, то они могут передать data.txt и hmac, не передавая при этом pwd.txt. Если hmac сходится, то файл подлинный.
Все пароли в файлах паролей должны быть на первой строке текстового файла как для hmac, так и для симметричного шифрования. Строка должна быть только одна, т.к. вторая может тоже задать пароль (для выходного файла, но только в некоторых режимах).
Симметричное шифрование
Доступные симметричные шифры
openssl enc -ciphers
OpenSSL никогда не выравнивает размер файлов. Поэтому, старайтесь при шифровании шифровать архивы, где один из файлов будет просто заполнен белибердой, чтобы скрыть истинный размер шифруемого файла. Особенно это касается небольших файлов.
Сгенерировать файл со случайными байтами (1024 байта):
openssl rand -out W:\noise 1024
В иных случаях (для генерации ключей) лучше использовать другие генераторы случайных чисел.
Разумеется, вместо 1024 байтов вы можете сгенерировать гораздо больше данных
openssl rand -out W:\noise 512000
(чуть меньше половины мегабайта данных). Это особенно хорошо, если вы генерируете файл для заполнения флешки, который затем будет расширен иной программой шифрования.
Каждый раз вводите разные значения размера генерируемого файла, т.к. если злоумышленник будет знать, какой размер вы используете постоянно, то сможет догадаться о размере основного файла.
Так что сегодня вы введёте
openssl rand -out W:\noise 512000
завтра
openssl rand -out W:\noise 387545
послезавтра
openssl rand -out W:\noise 982884
и так далее. Размер можно задавать отбалды, просто набирая тот размер, который вам не жалко.
Если вы хотите (зачем либо) сгенерировать файл в текстовом формате (HEX-кодировка случайных данных), введите
openssl rand -hex -out W:\noise 1024
Шифруем AES 256 бит в режиме CBC с паролем из файла W:\pwds.txt (не используйте тот же файл пароля, что и для hmac! не забывайте, что этот файл также надо шифровать при хранении и расшифровывать при использовании).
openssl enc -e -aes-256-cbc -md sha3-512 -salt -pbkdf2 -iter +1000000 -pass file:W:\pwds.txt -in W:\data.txt -out W:\data.txt.crypted
Расшифровать
openssl enc -d -aes-256-cbc -md sha3-512 -salt -pbkdf2 -iter +1000000 -pass file:W:\pwds.txt -in W:\data.txt.crypted -out W:\decrypted.txt
Аналогично с шифром chacha20
openssl enc -e -chacha20 -md sha3-512 -salt -pbkdf2 -iter +1000000 -pass file:W:\pwds.txt -in W:\data.txt -out W:\data.txt.crypted
openssl enc -d -chacha20 -md sha3-512 -salt -pbkdf2 -iter +1000000 -pass file:W:\pwds.txt -in W:\data.txt.crypted -out W:\decrypted.txt
Если вы хотите вводить пароль с клавиатуры
openssl enc -e -chacha20 -md sha3-512 -salt -pbkdf2 -iter +1000000 -in W:\data.txt -out W:\data.txt.crypted
openssl enc -d -chacha20 -md sha3-512 -salt -pbkdf2 -iter +1000000 -in W:\data.txt.crypted -out W:\decrypted.txt
На всякий случай проверяйте, что файлы действительно зашифровались. Если забыть ввести алгоритм шифрования, то файл просто скопируется в расшифрованном виде.
Асимметричное шифрование: генерация ключей
В файле W:\rnd сгенерированная другим приложением псевдослучайная последовательность (не обязательно)
openssl genrsa -rand W:\rnd -out W:\key.priv 16384
Извлечь публичный ключ
openssl rsa -in W:\key.priv -out W:\key.pub -pubout -check
Проверьте, что key.pub намного меньше, чем key.priv (например, 3 кб и 13 кб).
key.priv нужно зашифровать вручную, как показано выше (варианты автошифрования ниже немного хуже).
То же, но шифрованный AES с паролем с клавиатуры
openssl genrsa -rand W:\rnd -out W:\key.priv -aes-256-cbc 16384
Извлечь публичный ключ
openssl rsa -in W:\key.priv -out W:\key.pub -pubout -check
То же, но шифрованный с паролем из файла W:\pwds.txt
openssl genrsa -rand W:\rnd -out W:\key.priv -aes-256-cbc -passout file:W:\pwds.txt 16384
Извлечь публичный ключ
openssl rsa -passin file:W:\pwds.txt -in W:\key.priv -out W:\key.pub -pubout -check
Асимметричное шифрование: шифрование
Зашифровать RSA можно файл, несколько меньше размера ключа RSA. Так что не пытайтесь зашифровать 256-битный файл ключом длиной 2048 битов - не получится.
Зашифровать ключевой файл W:\sym.key с помощью RSA (RSA шифрует только маленькие файлы)
openssl rsautl -inkey W:\key.pub -pubin -encrypt -oaep -in W:\sym.key -out W:\sym.key.rsa
Расшифровать ключевой файл
openssl rsautl -inkey W:\key.priv -decrypt -oaep -in W:\sym.key.rsa -out W:\sym.key
Асимметричное шифрование: подписывание и проверка подписи
Вычисляем подписываемый хеш
openssl dgst -sha3-512 -out W:\hash W:\data.txt
Подписываем хеш
openssl rsautl -sign -inkey W:\key.priv -in W:\hash -out W:\sig
Расшифровываем хеш для проверки
openssl rsautl -verify -pubin -inkey W:\key.pub -in W:\sig -out W:\hash2
Далее проверяем на идентичность вычисленный от файла hash и расшифрованный из подписи hash2 вручную.
???