ГОСТ Р 34.11-94 криптографическая хэш-функция
Стандарт ГОСТ Р 34.11-94, разработанный в 1994 г. описывает одноимённую российскую криптографическую хэш-функцию.
На самом деле в стандарте описан довольно абстрактный алгоритм вычисления хэша,
при этом выбор параметров алгоритма оставлен на усмотрение того, кто его реализует.
Стандарт также не специфицирует формат вывода вычисленного хэша 256-битного числа,
что породило дополнительную путанницу в реализациях. Заметим, что описания иностранных
хэш функций обычно более практичны, однозначно описывая алгоритм, формат хэша и
предоставляя proof-of-concept реализацию.
На этой странице собрано немного информации о спецификациях хэш функции, наиболее популярных реализациях,
а также приведены наборы тестовых векторов.
Скачать текст ГОСТ Р 34.11-94.
Положение дел с интернет стандартами
В 2006 г. компанией CryptoPro опубликован RFC 4357
Additional Cryptographic Algorithms for Use with GOST 28147-89, GOST R 34.10-94, GOST R 34.10-2001, and GOST R 34.11-94 Algorithms.
Данный документ, содержа пиар компании, для реализации алгоритма обязывает использовать разработанные компанией параметры.
Формат вывода хэша не специфицируется.
Позже, в 2010 г., другой компанией Cryptocom был написан RFC 5831
GOST R 34.11-94: Hash Function Algorithm, обязывающий при реализации использовать
«тестовые» параметры, указанные в ГОСТ Р 34.11-94, приложении А.
В тексте самого стандарта тестовые параметры рекомендовалось использовать только
для проверки приведённых примеров. Но данные параметры, используются довольно часто.
RFC 5831 также не указывает прямо каков формат вывода хэша.
Тем не менее, скопированные из стандарта примеры записывают хэш,
как 256-битное число в шестнадцатеричной форме, оставляя впечатление,
что именно эта запись является правильной.
Оба RFC имеют лишь информационный статус и стандартами Интернет не являются.
Тестовые векторы
Данный раздел восполняет недостаток тестовых векторов для ГОСТ Р 34.11-94 в интернете.
Значения хэшей приведены в little-endian записи (младшие байты первыми).
Достоверность векторов легко можно проверить с помощью приведённых ниже программ.
ГОСТ Р 34.11-94 с «тестовыми» параметрами
GOST("") = ce85b99cc46752fffee35cab9a7b0278abb4c2d2055cff685af4912c49490f8d
GOST("a") = d42c539e367c66e9c88a801f6649349c21871b4344c6a573f849fdce62f314dd
GOST("abc") = f3134348c44fb1b2a277729e2285ebb5cb5e0f29c975bc753b70497c06a4d51d
GOST("message digest") = ad4434ecb18f2c99b60cbe59ec3d2469582b65273f48de72db2fde16a4889a4d
GOST("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") = 95c1af627c356496d80274330b2cff6a10c67b5f597087202f94d06d2338cf8e
GOST("12345678901234567890123456789012345678901234567890123456789012345678901234567890") = cc178dcad4df619dcaa00aac79ca355c00144e4ada2793d7bd9b3518ead3ccd3
GOST("This is message, length=32 bytes") = b1c466d37519b82e8319819ff32595e047a28cb6f83eff1c6916a815a637fffa
GOST("Suppose the original message has length = 50 bytes") = 471aba57a60a770d3a76130635c1fbea4ef14de51f78b4ae57dd893b62f55208
GOST(128 of "U") = 53a3a3ed25180cef0c1d85a074273e551c25660a87062a52d926a9e8fe5733a4
GOST(1000000 of "a") = 5c00ccc2734cdd3332d3d4749576e3c1a7dbaf0e7ea74e9fa602413c90a129fa
GOST("The quick brown fox jumps over the lazy dog") = 77b7fa410c9ac58a25f49bca7d0468c9296529315eaca76bd1a10f376d1f4294
GOST("The quick brown fox jumps over the lazy cog") = a3ebc4daaab78b0be131dab5737a7f67e602670d543521319150d2e14eeec445
ГОСТ Р 34.11-94 с параметрами CryptoPro
GOST("") = 981e5f3ca30c841487830f84fb433e13ac1101569b9c13584ac483234cd656c0
GOST("a") = e74c52dd282183bf37af0079c9f78055715a103f17e3133ceff1aacf2f403011
GOST("abc") = b285056dbf18d7392d7677369524dd14747459ed8143997e163b2986f92fd42c
GOST("message digest") = bc6041dd2aa401ebfa6e9886734174febdb4729aa972d60f549ac39b29721ba0
GOST("The quick brown fox jumps over the lazy dog") = 9004294a361a508c586fe53d1f1b02746765e71b765472786e4770d565830a76
GOST("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") = 73b70a39497de53a6e08c67b6d4db853540f03e9389299d9b0156ef7e85d0f61
GOST("12345678901234567890123456789012345678901234567890123456789012345678901234567890") = 6bc7b38989b28cf93ae8842bf9d752905910a7528a61e5bce0782de43e610c90
GOST("This is message, length=32 bytes") = 2cefc2f7b7bdc514e18ea57fa74ff357e7fa17d652c75f69cb1be7893ede48eb
GOST("Suppose the original message has length = 50 bytes") = c3730c5cbccacf915ac292676f21e8bd4ef75331d9405e5f1a61dc3130a65011
GOST(128 of "U") = 1c4ac7614691bbf427fa2316216be8f10d92edfd37cd1027514c1008f649c4e8
GOST(1000000 of "a") = 8693287aa62f9478f7cb312ec0866b6c4e4a0f11160441e8f4ffcd2715dd554f
Реализации алгоритма в открытых исходных текстах
OpenSSL. Консольная утилита openssl входящая
в популярную бесплатную библиотеку OpenSSL 1.0.0
поддерживает ГОСТ Р 34.11-94 c параметрами CryptoPro.
Формат вывода хэша - младшие байты первыми. Пример вызова:
openssl dgst -md_gost94 empty.txt
md_gost94(empty.txt)= 981e5f3ca30c841487830f84fb433e13ac1101569b9c13584ac483234cd656c0
Консольная утилита gostsum из OpenSSL
поддерживает оба распространённых набора параметров.
Используйте опцию -t для «тестовых» параметров.
Формат вывода - шестнадцатеричное 256-битное число (обратный порядок байт, т.е. в начале старшие байты).
Скачать gostsum для Windows XP/2K/Vista/7.
Пример использования:
gostsum -bt empty-file.txt
8d0f49492c91f45a68ff5c05d2c2b4ab78027b9aab5ce3feff5267c49cb985ce empty-file.txt
Программа RHash поддерживает вычисление ГОСТ Р 34.11-94
с тестовыми и CryptoPro параметрами и оба формата вывода хэша (по-умолчанию младшие байты первыми). Примеры вызова:
rhash --gost empty-file.txt
ce85b99cc46752fffee35cab9a7b0278abb4c2d2055cff685af4912c49490f8d empty-file.txt
rhash --gost --gost-reverse empty-file.txt
8d0f49492c91f45a68ff5c05d2c2b4ab78027b9aab5ce3feff5267c49cb985ce empty-file.txt
rhash --gost-cryptopro empty-file.txt
981e5f3ca30c841487830f84fb433e13ac1101569b9c13584ac483234cd656c0 empty-file.txt
rhash --gost-cryptopro --gost-reverse empty-file.txt
c056d64c2383c44a58139c9b560111ac133e43fb840f838714840ca33c5f1e98 empty-file.txt
Программа ReHash вычисляет ГОСТ
с тестовыми параметрами выводя младшие байты хэша первыми. Пример:
rehash -none -gost empty-file.txt
<empty-file.txt>
GOST-Hash : CE85B99C C46752FF FEE35CAB 9A7B0278 ABB4C2D2 055CFF68 5AF4912C 49490F8D
Chat.ru ТЕЛПНЕОДХЕФ: ФПЧБТЩ ЙЪ лЙФБС ОБ УБКФЕ Asia.ru!