Анимация
JavaScript
|
Главная Библионтека А {+} В - сложение по модулю 2-1;. Алгоритм криптографического преобразования предусматривает несколько режимов работы. Во всех режимах используется ключ W длиной 256 бит, представляемый в виде восьми 32-разрядных чисел Х(/). \V ~ Х7Х6Х5Х4Х3Х2Х1Х0 Для расшифрования используется тот же ключ, но процесс расшифрования является инверсным по отношению к исходному. Базовым режимом работы алгоритма является режгш простой замены. Пусть открытые блоки разбиты на блоки по 64 бит в каждом, которые обозначим как Tq. Очередная последовательность бит То разделяется на две последовательности 5(0) и А{0) по 32 бита (левый и правый блоки). Далее выполняется итеративный процесс шифрования, описываемый следуюш,ими формулами: для / = 1-=-24 А(0 = RK(A(i -1)[+] X(, i)(„od 8)) ® ВО -1). "в(0 = Д/-1) для/= 25-31 \А(0 = RK(A(i -1)[+]Х(32-о) Ф B(i-1) . [B(i) = A(i-\) и для / = 32 Д32) = Д31) В(32) = RK(A(31) [+] Хо) © В(Ъ 1) Здесь / обозначает номер итерации. Заметим, что подобно DES, на последнем цикле перестановка половин блока не производится. Функция шифрования включает две операции над 32-разрядным аргументом - К{) и R{). Первая операция является подстановкой. Блок подстановки К состоит из 8 узлов замены К{\)...К{%) с памятью по 64 бита каждый. Поступаюш,ий на блок подстановки 32-разрядный вектор разбивается на 8 последовательно идуш,их 4-разрядных вектора, каждый из который преобразуется в 4-разрядный вектор соответствуюш,им узлом замены, представляюш,им из себя таблицу из 16 целых чисел в диапазоне 0...15. Входной вектор определяет адрес строки в таблице, число из которой является выходным вектором. Затем полученные 4-разрядные векторы вновь последовательно объединяются в 32-разрядный выходной. ГОСТ 28147-89 в явном виде не указывает таблицы подстановок. Вторая операция - циклический сдвиг 32-разрядного вектора, полученного в результате подстановки на 11 шагов влево. 64-разрядный блок зашифрованных данных Т представляется в виде 7=(32)5(32). Остальные блоки открытых данных в режиме простой замены зашифровываются аналогично. Следует учитывать, что данный режим шифрования рекомендуется использовать только для шифрования ключевой информации. Для шифрования данных следует использовать два других режима. Второй режим шифрования называется режимом гаммирования. Открытые данные, разбитые на 64-разрядные блоки Т {i=\,2,...,m), где т определяется объемом шифруемых данных), зашифровываются в режиме гаммирования путем поразрядного сложения по модулю 2 с гаммой шифра Гш, которая вырабатывается блоками по 64 бита, т.е. Уравнение шифрования данных в режиме гаммирования может быть представлено в следуюш,ем виде: = г« е г> = Е, (Yi , [+] с,, z, , {+} Q) е г, (О о • В этом уравнении Т обозначает 64-разрядный блок зашифрованного текста, - функцию шифрования в режиме простой замены (аргументами этой функции являются два 32-разрядных числа). Cl = 01010104h и CzOlOlOlOlh - константы, заданные в ГОСТ 28147-89. Величины Yi и Z, определяются итерационно по мере формирования гаммы следующим образом: (Уо, Zo) = Ек (S), где S - 64-разрядная двоичная последовательность; (1, Z,) = (1 1 [+] Сг, Zm {+} q), /=1,2, т. 64-разрядная последовательность S, называемая синхропосылкой, не является секретным элементом шифра, но ее наличие необходимо как на передающей стороне, так и на приемной. Режгш гаммирования с обратной связью очень похож на режим гаммирования. Как и в последнем, разбитые на 64-разрядные блоки Т открытые данные зашифровываются путем поразрядного сложения по модулю 2 с гаммой шифра Гш, которая вырабатывается блоками по 64 бита: Уравнения шифрования данных в режиме гаммирования с обратной связью выглядят следующим образом: (О ш / (/-1)4 J (О о ш " -о Заметим, что в отличие от режиме режима гаммирования с обратной связью, в режиме гаммирования гамма шифра не зависит от исходного текста. 2.4.5. Алгоритмы SAFER+, SAFER++ Алгоритм SAFER+ был предложен калифорнийской корпорацией Cylink совместно с Армянской академией наук как один из кандидатов на принятие в качестве нового стандарта шифрования AES и прошел первый тур отбора. Он является еще одним примером шифра, не использующего структуру сети Фейстела Шифр работает с блоками длиной 128 бит и с ключами длиной 128, 192 или 256 бит, в соответствии с требованиями NIST к новому стандарту. Процедуры шифрования и расшифрования представляют собой последовательность итераций, число которых зависит от длины ключа и равно 8, 12 и 16 соответственно. При шифровании после (а при расшифровании - перед) всех итераций производится еще одно подмешивание подключа Каждая итерация состоит из четырех слоев - подмешивания первого подключа, нелинейной обратимой замены, подмешивания второго подключа и линейного перемешивания. При этом используются только байтовые операции, что делает этот шифр особенно привлекательным для реализации на микропроцессорах малой разрядности. Слои подмешивания первого и второго подключа имеют сходную структуру. На /-й итерации используются два подключа Кгм и Кг/ длиной по 128 бит. При добавлении первого подключа байты 1, 4, 5, 8, 9, 12, 13 и 16 текстового блока складываются с соответствующими байтами подключа поразрядно по модулю 2, а байты 2, 3, 6, 7, 10, 11, 14 и 15 складываются с байтами подключа по модулю 256. Второй подключ в конце итерации добавляется аналогично, только те байты, которые складывались поразрядно, теперь складываются по модулю 256, и наоборот. Слой нелинейной замены устроен следующим образом. Значение X байта j преобразуется в 45 (mod 257) для байтов с номерами j = 1, 4, 5, 8, 9, 12, 13 и 16. При этом если х = 128, то 45 (mod 257) = 256 представляется нулем. Значения байтов с номерами] = 2, 3, 6, 7, 10, 11, 14 и 15 преобразуются в log45(x), при этом если х = О, то log45(0) представляется числом 128. Нетрудно заметить, что эти операции являются обратимыми (в действительности, они обратны друг другу). Производить вычисления экспонент и логарифмов при шифровании и расшифровании не обязательно - можно заранее вычислить таблицы замены (всего для их хранения потребуется 512 байтов) и использовать их при работе. Линейное перемешивание представляет собой умножение текстового блока справа на специальную невырожденную матрицу М. При этом все операции выполняются побайтно по модулю 256. Подмешивание подключа Y2r+\ производится так же, как и подмешивание первого подключа в каждой итерации. При расшифровании вначале подмешивается подключ Кгг+ъ при этом операция сложения по модулю 256 заменяется на вычитание. Затем выполняются итерации расшифрования. /-Я итерация расшифрования выполняет преобразование, обратное к Г-/+1-Й итерации шифрования (г - число итераций) и также содержит 4 слоя. Вначале текстовый блок умножается на матрицу М ~, обратную к матрице шифрования. Затем подмешивается подключ Кг. 2/+2? так же, как и второй подключ в итерации шифрования, только сложение с ключом по модулю 256 заменяется вычитанием. После этого производится обратная нелинейная замена, т.е. те байты, которые при шифровании возводились в степень, логарифмируются, и наоборот. И, наконец, подмешивается подключ К2Г-2/+1 (с учетом тех же замечаний, что относились к подмешиванию подключа K2r-2i+2)- Для завершения описания алгоритма осталось указать, как из ключа пользователя получаются подключи для итераций. При обработке ключа пользователя применяются так называемые слова смещения Bj, В, 5зз длиной по 16 байт, которые вычисляются по формулам: •45(45l-mod257)257./- = 2n 45+ mod 257,/ = 1833 где Bij байт i-го слова смеш,ения (j = 1... 16). При этом значение Bij=256 представляется нулем. Слова смещения являются константами и могут быть вычислены заранее. Для длины ключа в 128 бит используются только слова2, ... Вп, для ключа в 192 бита используются слова смещения 52,...,S25, а для ключа в 256 бит используются все слова. Генерация подключей осуществляется по следующему алгоритму: В качестве первого подключа используются первые шестнадцать байтов пользовательского ключа. Далее пользовательский ключ записывается в ключевой регистр размером на один байт больше длины ключа. После этого все байты ключа суммируются поразрядно по модулю 2 и результат записывается в дополнительный байт регистра. После чего для получения требуемых подключей повторяется итеративная процедура, заключающаяся в следующем: Содержимое каждого байта в регистре циклически сдвигается влево на 3 позиции; 0 1 2 3 4 5 [ 6 ] 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |