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



Компьютеры - SEAL (криптографический алгоритм) - Описание

12 февраля 2011


Оглавление:
1. SEAL (криптографический алгоритм)
2. История
3. Описание
4. Свойства и практическое применение



При описании алгоритма используются следующие операции и обозначения:

  • числа шестнадцатеричной системы счисления начинаются с символов «0x» и используют в записи кроме десятичных цифр символы «a», «b», «c», «d», «e» и «f», которые обозначают десятичные числа от 10 до 15 соответственно;
  • под выражением Y \ggg t следует понимать циклический сдвиг регистра Y вправо на t бит;
  • под выражением Y \lll t следует понимать циклический сдвиг регистра Y влево на t бит;
  • операция X \And Y означает побитовое логическое умножение регистров X и Y;
  • операция X \lor Y означает побитовое логическое сложение регистров X и Y;
  • операция X \oplus Y означает побитовое сложение по модулю 2 регистров X и Y;
  • под X \lVert Y следует понимать конкатенацию регистров X и Y;
  • выражение odd обозначает логическую функцию аргумента X, которая принимает значение ИСТИНА только, если X — чётное число.

Создание таблиц шифрования из ключа

Чтобы избежать потери скорости шифрования на медленных операциях алгоритм использует три таблицы: R, S и T. Эти таблицы вычисляются с помощью процедуры из алгоритма SHA-1 и зависят только от ключа. Заполнение данных таблиц можно описать с помощью функции G, которая из 160-битной строки ~a и 32-битного числа ~i возвращает 160-битное значение ~G_a.

Введем следующие функции и переменные в зависимости от индекса ~t:

  • для 0 \le t \le 19 установим ~K_t = \mbox{0x}5a827999 и f_t = \lor;
  • для 20 \le t \le 39 установим ~K_t = \mbox{0x}6ed9eba1 и f_t = B \oplus C \oplus D;
  • для 40 \le t \le 59 установим ~K_t = \mbox{0x}8f1bbcdc и f_t = \lor \lor;
  • для 60 \le t \le 79 установим ~K_t = \mbox{0x}ca62c1d6 и f_t = B \oplus C \oplus D.

Затем 160-битную строка ~a разбивается на пять 32-битных слов так, что ~a = H_0 \lVert H_1 \lVert H_2 \lVert H_3 \lVert H_4.

Также создается шестнадцать 32-битных слов ~W_0 = i,~~W_1 = W_2 =...= W_{15} = 0^{32}.

Затем выполняются финальные вычисления:

  1. \mbox{For}~t = 16~\mbox{to}~79~\mbox{do}~W_t = \lll 1;
  2. A = H_0;~B = H_1;~C = H_2;~D = H_3;~E = H_4;
  3. \mbox{For}~t = 0~\mbox{to}~79~\mbox{do}
    \mbox{TEMP} = A \lll 5 + f_t + E + W_t + K_t;
    E = D;~D = C;~C = B \lll 30;~B = A;~A = TEMP;
  4. H_0 = H_0 + A;~H_1 = H_1 + B;~H_2 = H_2 + C;~H_3 = H_3 + D; H_4 = H_4 + E;
  5. ~G_a = H_0 \lVert H_1 \lVert H_2 \lVert H_3 \lVert H_4.

Введем функцию ~\Gamma_a = H^i_{i~mod~5} где H_0^{5j} \lVert H_1^{5j+1} \lVert H_2^{5j+2} \lVert H_3^{5j+3} \lVert H_4^{5j+4} = G_a для ~j = \mathcal {b} i/5 \mathcal {c}.

Тогда таблицы:

~T = \Gamma_a,~~0 \le i < 512;

~S = \Gamma_a,~~0 \le j < 256;

~R = \Gamma_a,~~0 \le k < 256.

Далее ключ ~a в алгоритме не используется.

Инициализация служебных регистров

Перед генерацией псевдослучайной функции нужно подготовить четыре 32-битовых служебных регистра и четыре 32-битовых слова. Их значения определяются из таблиц R и T, 32-битового числа n и некоторого числа l в следующей процедуре.

\mbox{procedure}~\mbox{Initialize}~

A \leftarrow n \oplus R;
B \leftarrow \oplus R;
C \leftarrow \oplus R;
D \leftarrow \oplus R;

\mbox{for}~j \leftarrow 1~\mbox{to}~2~\mbox{do}

P \leftarrow A \And \mbox{0x}7fc;~~B \leftarrow B + T;~~A \leftarrow A  \ggg 9;
P \leftarrow B \And \mbox{0x}7fc;~~C \leftarrow C + T;~~B \leftarrow B  \ggg 9;
P \leftarrow C \And \mbox{0x}7fc;~~D \leftarrow D + T;~~C \leftarrow C  \ggg 9;
P \leftarrow D \And \mbox{0x}7fc;~~A \leftarrow A + T;~~D \leftarrow D  \ggg 9;

 \leftarrow;

P \leftarrow A \And \mbox{0x}7fc;~~B \leftarrow B + T;~~A \leftarrow A  \ggg 9;
P \leftarrow B \And \mbox{0x}7fc;~~C \leftarrow C + T;~~B \leftarrow B  \ggg 9;
P \leftarrow C \And \mbox{0x}7fc;~~D \leftarrow D + T;~~C \leftarrow C  \ggg 9;
P \leftarrow D \And \mbox{0x}7fc;~~A \leftarrow A + T;~~D \leftarrow D  \ggg 9;

Создание псевдослучайной функции

Для шифрования текста необходимо создать псевдослучайную функцию.

\mbox{function}~\mbox{SEAL}~

~y = 0^L;

\mbox{for}~l \leftarrow 0~\mbox{to}~\infty~\mbox{do}

      \mbox{Initialize}~;

      \mbox{for}~i \leftarrow 1~\mbox{to}~64~\mbox{do}

            P \leftarrow A \And \mbox{0x}7fc;~~B \leftarrow B + T;~~A \leftarrow A  \ggg 9;~~B \leftarrow B \oplus A;

            Q \leftarrow B \And \mbox{0x}7fc;~~C \leftarrow C \oplus T;~~B \leftarrow B  \ggg 9;~~C \leftarrow C + B;

            P \leftarrow \And \mbox{0x}7fc;~~D \leftarrow D + T;~~C \leftarrow C  \ggg 9;~~D \leftarrow D \oplus C;

            Q \leftarrow \And \mbox{0x}7fc;~~A \leftarrow A \oplus T;~~D \leftarrow D  \ggg 9;~~A \leftarrow A + D;

            P \leftarrow \And \mbox{0x}7fc;~~B \leftarrow B \oplus T;~~A \leftarrow A  \ggg 9;

            Q \leftarrow \And \mbox{0x}7fc;~~C \leftarrow C + T;~~B \leftarrow B  \ggg 9;

            P \leftarrow \And \mbox{0x}7fc;~~D \leftarrow D \oplus T;~~C \leftarrow C  \ggg 9;

            Q \leftarrow \And \mbox{0x}7fc;~~A \leftarrow A + T;~~D \leftarrow D  \ggg 9;

            y \leftarrow y~\lVert~B + S~\lVert~C \oplus S~\lVert~D + S~\lVert~A \oplus S;

            \mbox{if}~|y| \ge L~\mbox{then}~\mbox{return}~~y_0y_1...y_{L-1};

            \mbox{if}~odd~\mbox{then}~ \leftarrow;

                                \mbox{else}~ \leftarrow;


Процесс шифрования состоит из большого числа итераций, каждая из которых завершается генерацией псевдослучайной функции. Количество пройденных итераций показывает счетчик l. Все они подразделяются на несколько этапов с похожими операциями. На каждом этапе старшие 9 битов одного из регистров используются в качестве указателя, по которому из таблицы T выбирается значение. Это значение складывается арифметически или поразрядно по модулю 2 со следующим регистром. Затем первый выбранный регистр преобразуется циклическим сдвигом вправо на 9 позиций. Далее либо значение второго регистра модифицируется сложением или XORом с содержимым первого и выполняется переход к следующему этапу, либо этот переход выполняется сразу. После 8 таких этапов значения A, B, C и D складываются с определенными словами из таблицы S и добавляются в ключевую последовательность y. Завершающий этап итерации заключается в прибавлении к регистрам дополнительных 32-битных значений. Причем выбор конкретного значения зависит от четности номера данной итерации.



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


<<< Salsa20
Sinople >>>