ГОСТ Р 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

Реализации алгоритма в открытых исходных текстах










































Chat.ru ТЕЛПНЕОДХЕФ: ФПЧБТЩ ЙЪ лЙФБС ОБ УБКФЕ Asia.ru!