В зависимости от желаемой битовой длины результата хеширования в ECHO применяются две функции сжатия: и . Нижний индекс равен длине переменной цепочки. На итерации обе функции принимают 4 параметра:
- Текущее значение переменной цепочки с битовой длиной .
- Текущий блок сообщения с битовой длиной .
- Полное число бит сообщения, обработанных к концу данной итерации. Если текущий блок — последний, то может оказаться меньше или равно значению . В противном случае выполняется равенство . Размер счётчик можно выбрать равным 64 или 128 битам.
- .
То, какая функция сжатия используется, зависит от выбранной битовой длины значения хеш-функции. Для от 128 до 256 бит применяется :
,
для от 257 до 512 бит переменная цепочки вычисляется по формуле
Результатом работы обеих функций является некоторое значение с фиксированной битовой длиной. Поэтому для получения величин размера конечный результат сокращается на необходимое число бит.
В начале хеширования счетчик устанавливается в 0: . Начальное значение переменной цепочки устанавливается таким образом, что каждое её слово является 128 битовым представлением числа , то есть размера результата хеширования. В том случае, когда используется ( лежит в пределах от 128 до 256 бит) переменная цепочки состоит из 4 слов:
Когда применяется ( от 257 до 512 бит),
Результатом дополнения сообщения является сообщение , длина которого кратна 128. Обозначим через длину исходного сообщения. Тогда получается в несколько шагов:
- К концу сообщения приписать бит «1».
- Приписать битов «0», где
- Приписать 16-битное представление числа
- Наконец, приписать 128-битное представление числа
Дополненное сообщение записывается в виде
Дополненное сообщение делится на блоков , каждый длиной бит. Эти блоки друг за другом подаются на вход функции , при этом в итоге вычисляется значений переменной цепочки:
Каждый блок можно представить в виде двенадцати 128-битовых слов:
Переменная цепочки аналогичным образом записывается в виде последовательности из 4 слов:
Дальнейшие операции проводятся над матрицей состояния из 4 строк и 4 столбцов:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
В начале -ой итерации вычисления значения и упаковываются в матрицу следующим образом:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Вычисление происходит в 8 раундов, называемых в ECHO . Каждый такой раунд состоит из последовательного применения 3 функций:
— это 2 AES раунда. Обозначим действие одного раунда AES с ключом на 128-битное слово как
Здесь состоит из операций , , и . Ключи для вычисления создаются из параметров и . Последний представляет собой внутренний счетчик, который инициализируется значением и увеличивается во время вычисления . Важно заметить, что, если в последнем блоке биты исходного сообщения отсутствуют (что могло случится, например, при длине сообщения , кратной ), то полагается равным 0.
Значения ключей для двух раундов AES получаются следующим образом:
если счетчик выбран 64-битным, и
для 128-битного счетчика.
Операцию можно описать равенствами
, увеличить на 1 по модулю ( )
, увеличить на 1 по модулю ( )
, увеличить на 1 по модулю ( )
Счетчик увеличивается на протяжении всех восьми раундов (которые выше названы ), то есть, например, в начале второго раунда .
Операция проводит циклический сдвиг влево строк матрицы состояния :
.
Более наглядно:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
состоит из последовательного применения операции , определенной в AES. Рассмотрим столбцы матрицы , состоящие из 128-битных слов , где . Элементы столбцов можно представить в виде байтовых строк:
|
|
|
|
|
|
|
|
|
|
|
|
Тогда вычисляется как
Последняя формула представляет собой операцию , в которой сложение и умножение определены в поле по модулю многочлена .
Окончание вычисления COMPRESS512
править
Функцию можно описать, используя определенные выше операции:
-
-
-
-
-
-
Операция вычисляет значение переменной цепочки , используя полученную в результате применения 8 раундов матрицу состояния , блок сообщения и предыдущее значение переменной цепочки :
|
|
|
|
|
|
|
|
|
|
|
|
Здесь за обозначены элементы матрицы , — операция исключающего ИЛИ.
Конечное значение хеш-функции
править
Конечное значение переменной цепочки — это строка из 512 бит:
Результатом хеширования с битовой длиной , принимающей значения от 128 до 256, являются крайних левых бит переменной цепочки. Например, для значения хеш-функции с длиной :