Интернет магазин китайских планшетных компьютеров



Компьютеры - ECHO - COMPRESS512

09 июня 2011


Оглавление:
1. ECHO
2. Обозначения
3. COMPRESS512
4. COMPRESS1024



Дополненное сообщение M' делится на t блоков M1...Mt, каждый длиной MSIZE = 1536 бит. Эти блоки друг за другом подаются на вход функции COMPRESS512, при этом в итоге вычисляется t + 1 значений переменной цепочки:

 V_i = \mbox{COMPRESS}_{512}\mbox{ },\mbox{ }0 \le i \le t

Каждый блок Mi можно представить в виде двенадцати 128-битовых слов:

 M_i = m_{i}^{0} \| m_{i}^{1} \| m_{i}^{2} \| m_{i}^{3} \| m_{i}^{4} \| m_{i}^{5} \| m_{i}^{6} \| m_{i}^{7} \| m_{i}^{8} \| m_{i}^{9} \| m_{i}^{10} \| m_{i}^{11}

Переменная цепочки Vi − 1 аналогичным образом записывается в виде последовательности из 4 слов:

 V_{i-1} = v_{i-1}^{0} \| v_{i-1}^{1} \| v_{i-1}^{2} \| v_{i-1}^{3}

Дальнейшие операции проводятся над матрицей состояния S из 4 строк и 4 столбцов:

S\, =\,
w_{0}\, w_{4}\, w_{8}\, w_{12}\,
w_{1}\, w_{5}\, w_{9}\, w_{13}\,
w_{2}\, w_{6}\, w_{10}\, w_{14}\,
w_{3}\, w_{7}\, w_{11}\, w_{15}\,

В начале i-ой итерации вычисления значения COMPRESS512 Vi и Mi упаковываются в матрицу S следующим образом:

S\, =\,
v_{i-1}^{0} m_{i}^{0} m_{i}^{4} m_{i}^{8}
v_{i-1}^{1} m_{i}^{1} m_{i}^{5} m_{i}^{9}
v_{i-1}^{2} m_{i}^{2} m_{i}^{6} m_{i}^{10}
v_{i-1}^{3} m_{i}^{3} m_{i}^{7} m_{i}^{11}

Вычисление COMPRESS512 происходит в 8 раундов, называемых в ECHO BIG.ROUND. Каждый такой раунд состоит из последовательного применения 3 функций:

BIG.SUBWORDS

BIG.SHIFTROWS

BIG.MIXCOLUMNS

BIG.SUBWORDS

BIG.SUBWORDS — это 2 AES раунда. Обозначим действие одного раунда AES с ключом k на 128-битное слово w как

w' = AES

Здесь AES состоит из операций SubBytes, ShiftRows, MixColumns и AddRoundKey. Ключи k для вычисления w' создаются из параметров SALT и κ. Последний представляет собой внутренний счетчик, который инициализируется значением Ci и увеличивается во время вычисления COMPRESS512. Важно заметить, что, если в последнем блоке Mt биты исходного сообщения отсутствуют, то Ct полагается равным 0.

Значения ключей для двух раундов AES получаются следующим образом:

k_1=\kappa\|\overbrace{0..0}^{64}\mbox{, } k_2 = \mbox{SALT},

если счетчик Ci выбран 64-битным, и

k_1=\kappa\mbox{ , } k_2 = \mbox{SALT}\,

для 128-битного счетчика.

Операцию BIG.SUBWORDS можно описать равенствами

w0' = AES,k2), увеличить κ на 1 по модулю 2

w1' = AES,k2), увеличить κ на 1 по модулю 2

...

w15' = AES,k2), увеличить κ на 1 по модулю 2

Счетчик κ увеличивается на протяжении всех восьми раундов, то есть, например, в начале второго раунда κ = Ci + 16.

BIG.SHIFTROWS

Операция BIG.SHIFTROWS проводит циклический сдвиг влево строк матрицы состояния S:

w_{i+4j}' = w_{i+4\bmod 4)}, \mbox{ }0\le i,j\le 3.

Более наглядно:

w0 w4 w8 w12
w1 w5 w9 w13
w2 w6 w10 w14
w3 w7 w11 w15
\longrightarrow \mbox{  }\,
w0 w4 w8 w12
w5 w9 w13 w1
w10 w14 w2 w6
w15 w3 w7 w11

BIG.MIXCOLUMNS

BIG.MIXCOLUMNS состоит из последовательного применения операции MixColumns, определенной в AES. Рассмотрим столбцы матрицы S, состоящие из 128-битных слов w_{i}, ..., w_{i+3}\,, где i \in \{0, 4, 8, 12\}. Элементы столбцов можно представить в виде байтовых строк:

w_{i}\, =\, \,
w_{i+1}\, =\, \,
w_{i+2}\, =\, \,
w_{i+3}\, =\, \,

Тогда BIG.MIXCOLUMNS вычисляется как


\begin{pmatrix}
B_{16i+j}' \\
B_{16i+16+j}' \\
B_{16i+32+j}' \\
B_{16i+48+j}'
\end{pmatrix}
=
\begin{pmatrix}
02 & 03 & 01 & 01 \\
01 & 02 & 03 & 01 \\
01 & 01 & 02 & 03 \\
03 & 01 & 01 & 02
\end{pmatrix}
\cdot
\begin{pmatrix}
B_{16i+j} \\
B_{16i+16+j} \\
B_{16i+32+j} \\
B_{16i+48+j}
\end{pmatrix}
,\mbox{ }
i \in \{0, 4, 8, 12\},\mbox{ }
0 \le j \le 15

Последняя формула представляет собой операцию MixColumns, в которой сложение и умножение определены в поле GF по модулю многочлена x + x + x + x + 1.

Окончание вычисления COMPRESS512

Функцию COMPRESS512 можно описать, используя определенные выше операции:

for i := 1 to 8 do

begin
BIG.SUBWORDS
BIG.SHIFTROWS
BIG.MIXCOLUMNS
end
BIG.FINAL

Операция BIG.FINAL вычисляет значение переменной цепочки Vi, используя полученную в результате применения 8 раундов матрицу состояния S, блок сообщения Mi и предыдущее значение переменной цепочки Vi − 1:

v_{i}^{0} = v_{i-1}^{0} \oplus m_{i}^{0} \oplus m_{i}^{4} \oplus m_{i}^{8} \oplus w_{0} \oplus w_{4} \oplus w_{8} \oplus w_{12}
v_{i}^{1} = v_{i-1}^{1} \oplus m_{i}^{1} \oplus m_{i}^{5} \oplus m_{i}^{8} \oplus w_{1} \oplus w_{5} \oplus w_{9} \oplus w_{13}
v_{i}^{2} = v_{i-1}^{2} \oplus m_{i}^{2} \oplus m_{i}^{6} \oplus m_{i}^{9} \oplus w_{2} \oplus w_{6} \oplus w_{10} \oplus w_{14}
v_{i}^{3} = v_{i-1}^{3} \oplus m_{i}^{3} \oplus m_{i}^{7} \oplus m_{i}^{10} \oplus w_{3} \oplus w_{7} \oplus w_{11} \oplus w_{15}

Здесь за w0,...,w15 обозначены элементы матрицы S, \oplus — операция исключающего ИЛИ.

Конечное значение хеш-функции

Конечное значение переменной цепочки — это строка из 512 бит:

v_{t}^{0}\|v_{t}^{1}\|v_{t}^{2}\|v_{t}^{3}

Результатом хеширования с битовой длиной HSIZE, принимающей значения от 128 до 256, являются HSIZE крайних левых бит переменной цепочки. Например, для значения хеш-функции h с длиной HSIZE = 256:

h = v_{t}^{0} \| v_{t}^{1}.



Просмотров: 3370


<<< Dual EC DRBG
GSS-API >>>