Хеширования преобразует данные (большого или малого размеров), в относительно короткий отрезок данных, таких как строка или целое число.
Это осуществляется с помощью односторонней хэш-функции. “Односторонняя” означает, что очень трудно (практически невозможно) получить первоначальные данные.
Типичный пример хэш-функции — md5(), которая очень популярна в разных языках программирования.
Хэш-функцией называется односторонняя функция, предназначенная для получения дайджеста или "отпечатков пальцев" файла, сообщения или некоторого блока данных.
Для хеширования используются следующие команды:
$ openssl dgst -<алгоритм> <параметры>
$ openssl <алгоритм> <параметры>
Если используется первый вариант команды, один дефис перед именем алгоритма обязателен. Во втором варианте дефисов перед именем алгоритма быть не должно.
Среди алгоритмов хеширования могут применяться следующие:
- md2 (128 бит);
- md4 (128 бит);
- md5 (128 бит);
- mdc2 (128 бит);
- sha (160 бит);
- sha1 (160 бит);
- ripemd160 (160 бит).
В качестве параметров используются следующие ключи (дефисы перед ключами обязательны):
-c - вывести результат с разделяющими байты двоеточиями;
- hex - вывести результат без разделителей;
- binary - вывести результат как строку символов (не все символы являются печатаемыми);
- out <имя_файла> - вывести результат в указанный файл;
- sign <имя_файла> - подписать результат указанным закрытым ключом (поддерживаются только ключи в формате PEM);
- passin <источник_пароля> - указание на источник парольной фразы для ключа;
- verify <имя_файла> - проверить значение, используя открытый ключ в указанном файле;
- prverify <имя_файла> - проверить значение, используя закрытый ключ в указанном файле;
- signature <имя_файла> - файл с подписью, которую необходимо проверить;
- hmac <ключ> - создать хешированный код аутентификации сообщения, используя указанный ключ;
- rand <имя_файла> - использовать указанный файл как источник энтропии для создания зерна ГПСЧ;
- <имя_файла> - выполнить заданную операцию над указанным файлом (указывается последним параметром).
В качестве алгоритма может использоваться одно из следующих значений, выдаваемых командой list-message-digest-commands.
Практическая часть
1. Изучите теоретическое руководство.
2. Подготовьте (создайте или выберите) текстовый файл с семантически понятным содержимым. Дайте ему имя dok.txt.
3. С помощью OpenSSL вычислите значение хэш-функции MD5 от подготовленного текста. Измерьте время хеширования и запомните (запишите) его.
- openssl> dgst -md5 dok.txt
4. Выполните действие 3 для алгоритма SHA1.
- $ openssl> dgst –sha1 dok.txt
5. Сравните время хеширования с применением двух алгоритмов.
6. Измените содержимое исходного файла.
7. Посчитайте хеш-суммы MD5 и SHA1 от измененного файла. Убедитесь, что значения сумм от исходного и измененного файлов не совпадают.
8. Получите аутентификатор выбранного файла с применением алгоритма DES-CBC с помощью OpenSSL и вручную.
9. Выполните операции с хэш-функцией, используя закрытый и открытый ключ
1) Сгенерировать закрытый ключ длиной 2048 бит без парольной фразы для алгоритма RSA и записать их в файл keys.rsa:
- $ openssl> genpkey -out [путь] keys.rsa -algorithm RSA -pkeyopt rsa_keygen_bits:2048
2) Вывести информацию о закрытом ключе:
- $ openssl> rsa -in [путь]keys.rsa -text –noout
3) Извлечь открытый ключ в формате РЕМ из закрытого ключа:
- $ openssl> rsa -in [путь]keys.rsa -pubout -out [путь]pubkey.rsa -outform PEM
Откройте папку и убедитесь, что ключ pubkey.rsa создан.
4) Подписать хэш-сумму sha512 от файла file закрытым ключом алгоритма RSA, записать подпись в файл file.sig:
- $ openssl> dgst -sha512 -sign [путь]keys.rsa -out [путь]file.sig [путь]file
5) Проверить подпись хэш-суммы sha512 из файла file.sig для файла file по алгоритму RSA:
$ openssl >dgst -sha512 -verify [путь]pubrsa.pem -signature [путь]file.sig [путь]file
Данная команда выводит «Verification OK» при правильной подписи или «Verification Failure» в любом другом случае.
6) Снять защиту ключа парольной фразой:
$ openssl> rsa -in [путь]keys.rsa -passin pass:1234 -out keys_nopass.rsa
Лабораторная работа №4.
Тема: Создание цифровых сертификатов Х.509 и преобразование их форматов с применением пакета OpenSSL
Цель работы: получить навык применения программного продукта OpenSSL для создания сертификатов X.509 и их преобразования, изучить структуру сертификата X.509 и форматы DER и PEM.