ГОСТ хеш-функция: российский криптографический алгоритм, обеспечивающий 256-битное хеширование. Стандарты ГОСТ Р 34.11-94 и ГОСТ 34.311-95. Основана на шифре ГОСТ.
Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Содержание
Введение
Российская криптографическая хеш-функция
Russian cryptographic hash function
Хеш-функция ГОСТ, определенная в стандартах GOST R 34.11-94 и GOST 34.311-95, является 256-битной криптографической хеш-функцией. Первоначально она была определена в российском национальном стандарте GOST R 34.11-94 «Информационные технологии – Криптографическая защита информации – Хеш-функция». Эквивалентный стандарт, используемый другими государствами-членами СНГ, – ГОСТ 34.311-95. Эту функцию не следует путать с другой хеш-функцией Streebog, которая определена в новой редакции стандарта GOST R 34.11-2012. Хеш-функция ГОСТ основана на блочном шифре ГОСТ.
The GOST hash function, defined in the standards GOST R 34.11 94 and GOST 34.311 95 is a 256 bit cryptographic hash function. It was initially defined in the Russian national standard GOST R 34.11 94 Information Technology – Cryptographic Information Security – Hash Function. The equivalent standard used by other member states of the CIS is GOST 34.311 95. This function must not be confused with a different Streebog hash function, which is defined in the new revision of the standard GOST R 34.11 2012. The GOST hash function is based on the GOST block cipher.
Алгоритм
ГОСТ обрабатывает сообщение переменной длины, преобразуя его в выходные данные фиксированной длины – 256 бит. Входное сообщение разбивается на блоки по 256 бит (восемь 32-битных целых чисел в формате little-endian). Сообщение дополняется нулями до достижения длины в 256 бит. Оставшиеся биты заполняются 256-битной целочисленной арифметической суммой всех ранее обработанных блоков, а затем 256-битным целым числом, представляющим длину исходного сообщения в битах.
GOST processes a variable length message into a fixed length output of 256 bits. The input message is broken up into chunks of 256 bit blocks (eight 32 bit little endian integers); the message is padded by appending as many zeros to it as are required to bring the length of the message up to 256 bits. The remaining bits are filled up with a 256 bit integer arithmetic sum of all previously hashed blocks and then a 256 bit integer representing the length of the original message, in bits.
Трансформация шифрования
После генерации ключей шифрование выполняется с использованием ГОСТ 28147-89 в режиме простой подстановки по ключам. Обозначим преобразование шифрования как E (шифрование 64-битных данных с использованием 256-битного ключа). Для шифрования исходные данные разбиваются на четыре 64-битных блока: , и каждый из этих блоков шифруется следующим образом:
After the keys generation, the enciphering of is done using GOST 28147 89 in the mode of simple substitution on keys Let's denote the enciphering transformation as E (enciphering 64 bit data using 256 bit key). For enciphering, the is split into four 64 bit blocks: , and each of these blocks is enciphered as:
После этого, результирующие блоки объединяются в один 256-битный блок: .
After this, the result blocks are concatenated into one 256 bit block: .
Криптоанализ
В 2008 году была опубликована атака, взламывающая полную раундовую хеш-функцию ГОСТ. В статье представлена атака на нахождение коллизий за 2¹⁰⁵ операций, а также атаки на нахождение первого и второго прообраза за 2¹⁹² операций (время 2ⁿ обозначает приблизительное количество вычислений алгоритма, выполненных в ходе атаки).
In 2008, an attack was published that breaks the full round GOST hash function. The paper presents a collision attack in 2105 time, and first and second preimage attacks in 2192 time (2n time refers to the approximate number of times the algorithm was calculated in the attack).