Алгоритм шифрования данных.pptx
- Количество слайдов: 23
Алгоритм шифрования данных NUSH
Описание алгоритма NUSH — блочный алгоритм симметричного шифрования, разработанный Анатолием Лебедевым и Алексеем Волчковым для российской компании LAN Crypto. NUSH имеет несколько различных вариантов, имеющих разный размер блока, различное число раундов и использует длину ключа в 128, 192 или 256 бит. Алгоритм не использует S-блоки, а только такие операции, как AND, OR, XOR, сложение по модулю и циклические сдвиги. Перед первым и последнего раунда проводится «отбеливание» ключа. Данный алгоритм был выдвинут в проекте NESSIE, но не был выбран, так как было показано, что линейный криптоанализ может быть эффективнее, чем атака перебором. Алгоритм NUSH, шифрующий данные 64 -битными блоками, (аналогично, например, известному алгоритму RC 5) весьма легко преобразуется под другие размеры блока. На конкурс NESSIE, помимо 64 -битного варианта, были представлены еще и варианты алгоритма, обрабатывающие 128 битные и 256 -битные блоки данных В отличие от алгоритмов CS-Cipher и Nimbus, алгоритм NUSH имеет несколько фиксированных размеров шифруемого блока данных: 64, 128 и 256 бит. Рассмотрим 64 -битный вариант алгоритма.
СТРУКТУРА АЛГОРИТМА Рис. 1. Структура алгоритма NUSH
Структура алгоритма показана на рис. 1. Шифруемый блок данных разбивается на 4 субблока по 16 бит (обозначаемые как a, b, c, d). Прежде всего, выполняется начальное преобразование, состоящее в том, что на каждый субблок операцией XOR накладывается фрагмент расширенного ключа (процедура расширения ключа будет описана ниже) для начального преобразования KS 0. . . KS 3: A = a KS 0, B = b KS 1, C = c KS 2, D = d KS 3, где A, B, C, D – значения соответствующих субблоков после выполнения текущей операции. Затем выполняется 9 раундов преобразований; структура раунда будет описана ниже. По завершении 9 раундов выполняется финальное преобразование, в котором операцией XOR на субблоки накладываются подключи для финального преобразования KF 0. . . KF 3: A = a KF 0, B = b KF 1, C = c KF 2, D = d KF 3.
Основой каждого раунда алгоритма является преобразование ("итерация" согласно спецификации алгоритма) R (X 1, X 2, X 3, X 4, k, s); в одной итерации выполняются следующие действия (см. рис. 2): Y 3 = (X 2 + (X 3 k) mod 216) >>> s, Y 1 = X 1 + (Y 3 # X 4) mod 216, Y 2 = X 2 , Y 4 = X 4 , где X 1. . . X 4 и Y 1. . . Y 4 - соответственно, входные и выходные значения обрабатываемых субблоков, k – модифицированный фрагмент расширенного ключа для текущей итерации, >>> – побитовый циклический сдвиг операнда вправо на переменное число бит,
Рис. 2. Итерация алгоритма NUSH
s – число бит сдвига, различно для каждой итерации и выбирается из таблицы 1 : таблица 1 Раунд 0 0 1 1 2 2 3 3 4 4 Итерация 0 1 2 3 0 1 s 4 7 11 8 7 14 5 4 8 2 9 4 13 1 14 6 7 12 Раунд 4 4 5 5 6 6 7 7 8 8 Итерация 2 3 0 1 2 3 s 5 1 2 4 12 3 9 2 11 13 12 3 6 11 7 15 4 14
Символом # обозначена побитовая логическая операция "и" (&) или побитовая логическая операция "или" (|), конкретная из которых также выбирается из таблицы 2: таблица 2 Раунд 0 0 1 1 2 2 3 3 4 Итерация 0 1 2 3 0 # & | | | & | | | Раунд 4 4 5 5 6 6 7 7 8 8 8 Итерация 2 3 0 1 2 # & & & | | | & & | | &
Раунд состоит из четырех итераций (в таблицах они пронумерованы от 0 до 3), выполняемых по следующему закону: R(a, b, c, d, KRC 4 i, S[4 i]), R(b, c, d, a, KRC 4 i + 1, S[4 i + 1]), R(c, d, a, b, KRC 4 i + 2, S[4 i + 2]), R(d, a, b, c, KRC 4 i + 3, S[4 i + 3]), где i – номер текущего раунда, начиная с 0, KRCn – модифицированный фрагмент расширенного ключа для текущей итерации (KRn): KRCn = KRn + c mod 216, где c – модифицирующая константа согласно таблице 3:
таблица 3 Раунд 0 0 1 1 2 2 3 3 4 4 Итерация 0 1 2 3 0 1 с AC 25 8 A 93 243 D 262 E F 887 C 4 F 2 8 E 36 9 FA 1 7 DC 0 6 A 29 6 D 84 34 BD A 267 CC 15 04 FE B 94 A DF 24 40 EF Раунд 4 4 5 5 6 6 7 7 8 8 Итерация 2 3 0 1 2 3 с 96 DA 905 F D 631 AA 62 4 D 15 70 CB 7533 45 FC 5337 D 25 E A 926 1 C 7 B 5 F 12 4 ECC 3 C 86 28 DB FC 01 7 CB 1
РАСШИФРОВАНИЕ Расшифрование выполняется применением обратных операций в обратной последовательности. Таким образом, при расшифровании сначала выполняется обратное финальное преобразование, затем 9 раундов по 4 обратных итерации, после чего – обратное начальное преобразование. Обратные финальное и начальное преобразования полностью аналогичны прямым – на субблоки a, b, c, d операцией XOR накладываются, соответственно, фрагменты расширенного ключа KF 0. . . KF 3 и KS 0. . . KS 3. Итерации каждого раунда также выполняются в обратной последовательности (i = 9… 1): R-1(d, a, b, c, KRC 4 i - 1, S[4 i - 1]), R-1(c, d, a, b, KRC 4 i - 2, S[4 i - 2]), R-1(b, c, d, a, KRC 4 i - 3, S[4 i - 3]), R-1(a, b, c, d, KRC 4 i - 4, S[4 i - 4]). Итерация R-1(X 1, X 2, X 3, X 4, k, s) выглядит следующим образом: Y 1 = X 1 – (X 3 # X 4) mod 216, Y 2 = X 2, Y 3 = ((X 3 >>> (16 – s)) k) – X 2 mod 216 , Y 4 = X 4. (см. рис. 3):
Рис. 3. Обратная итерация алгоритма NUSH
РАСШИРЕНИЕ КЛЮЧА Процедура расширения ключа весьма проста и напоминает таковую у отечественного стандарта шифрования ГОСТ 28147 -89 – исходный ключ шифрования делится на фрагменты K 0. . . Kn-1 n – размер ключа шифрования в 16 -битных словах, т. е. : K 0. . . K 7 для 128 -битного ключа, K 0. . . K 11 для 192 -битного ключа, K 0. . . K 15 для 256 -битного ключа. таблица 4 Применение KS 0 KS 1 KS 2 KS 3 KF 0 KF 1 KF 2 KF 3 KR i Используемый фрагмент ключа (в зависимости от его размера) 128 бит 192 бита 256 бит K 4 K 12 K 5 K 13 K 6 K 14 K 7 K 15 K 3 K 11 K 13 K 2 K 10 K 12 K 1 K 9 K 15 K 0 K 8 K 14 Ki mod n Затем фрагменты ключа используются в итерациях, а также в начальном и финальном преобразованиях согласно таблице 4. Символом i в таблице обозначен сквозной номер итерации (от 0 до 35), т. е. в итерациях фрагменты ключа используются поочередно в прямом порядке.
128 -БИТНЫЙ ВАРИАНТ АЛГОРИТМА NUSH Отличия 128 -битного алгоритма NUSH от 64 -битного состоят в следующем: 1. Выполняется 17 раундов преобразований вместо 9. 2. Блок данных делится на те же 4 субблока, но они имеют размер по 32 -бита (а не по 16 бит). Соответственно, операции сложения и вычитания выполняются по модулю 232. 3. Используются другие константы c (константы для модификации ключей, используемых в итерациях алгоритма) и s (число бит сдвига), а также другая последовательность логических операций #. Их значения сведены в таблицу 5:
таблица 5
4. Изменена процедура расширения ключа. В 128 -битном алгоритме NUSH фрагменты исходного ключа K 0. . . Kn-1 (n – размер ключа шифрования в 32 битных словах) используются в итерациях (ниже i – сквозной номер итерации, начиная с 0), а также в начальном и финальном преобразованиях следующим образом: таблица 6 Применение KS 0 KS 1 KS 2 KS 3 KF 0 KF 1 KF 2 KF 3 KRi Используемый фрагмент ключа (в зависимости от его размера) 128 бит 192 бита 256 бит K 3 K 2 K 4 K 2 K 3 K 5 K 1 K 4 K 6 K 0 K 5 K 7 K 1 K 5 K 0 K 4 K 3 K 7 K 2 K 6 Ki mod n
256 -БИТНЫЙ ВАРИАНТ АЛГОРИТМА NUSH 256 -битный вариант алгоритма, по сути, имеет те же отличия от 64 -битного варианта: 1. Количество раундов алгоритма увеличено до 33. 2. Субблоки имеют размер по 64 бита, а операции сложения и вычитания выполняются по модулю 264. 3. Используются другие константы c и s согласно следующей таблице: таблица 7
Продолжение таблицы 7
4. 5. Что касается логических операций #, то они выполняются в той же последовательности, что и для 128 -битного алгоритма. В раундах, которые отсутствуют в 128 -битном варианте, используются операции согласно следующему правилу: #i = #i mod 64, где i – сквозной номер итерации. Фрагменты исходного ключа используются в преобразованиях алгоритма согласно таблице 8 (в данном случае ключ делится на 64 -битные слова): таблица 8 Применение KS 0 KS 1 KS 2 KS 3 KF 0 KF 1 KF 2 KF 3 KRi Используемый фрагмент ключа (в зависимости от его размера) 128 бит K 1 K 0 K 0 K 1 192 бита K 2 K 1 K 0 K 2 K 1 K 2 K 0 Ki mod n 256 бит K 3 K 2 K 1 K 0 K 2 K 3 K 0 K 1
БЫСТРОДЕЙСТВИЕ В алгоритме отсутствуют операции с битовою сложностью выше, чем O(k), где k - битовая длина модуля или операндов (например, у произведения по модулю, нахождения обратного (по умножению) элемента или наибольшего общего делителя битовая сложность O(k 2), а у возведения в степень - O(k 3)). Поэтому естественно ожидать высокой скорости работы алгоритма. Авторами приводятся следующие данные: таблица 9 Размер блока, бит Программа на С Программа на Ассемблере Тактов на блок Тактов на байт 64 180 23 130 17 128 340 22 250 16
БЕЗОПАСНОСТЬ Главной причиной отсеивания алгоритма NUSH в конкурсе NESSIE стала найденная Ву Венлингом и Фенгом Денго уязвимость алгоритма к линейному криптоанализу. В своей статье "Линейный криптоанализ блочного шифра NUSH" они используют понятие сложности атаки , где ε характеризует потребности в памяти, а η - в объёме вычислений. Для N=64 и N=128 бит предложено 3 вида атак, а для N=256 - два. Сложности соответствующих атак: таблица 10 Длина блока, бит Длина ключа, бит δ 128 192 256 128 128 192 256 64 192 256 § Для некоторых случаев версия с 192 -битным ключом существенно надежнее, чем с более длинным ключом. § Есть случаи, когда сложности атак шифра с самой маленькой длиной ключа и самой большой практически совпадают. § Увеличение длины ключа сказывается не так сильно на сложности атаки, как хотелось бы. Таким образом, существуют атаки на шифр NUSH эффективнее полного перебора.
КРИПТОАНАЛИЗ АЛГОРИТМА В качестве примера рассмотрим вторую атаку на шифр с длиной блока N=64 бита. Криптоанализ основан на построении зависимостей между битами ключа, исходного и зашифрованного текста, справедливых с вероятностью, отличающейся от 1/2. Эти соотношения строятся на основе уравнения, справедливого с вероятностью 3/4 , Это уравнение можно проверить, используя описание алгоритма, и учтя, что для последнего (младшего) разряда операции "+" и совпадают. Действительно, имеем соотношение : Добавив к обеим частя равенства соотношение ai[0] = bi − 1[0] получим требуемое. Далее учитывая конкретные значения Si можно показать, что зависит не от всех бит ключа и открытого текста, а именно: Рассмотрев 4 первых раунда дешифрования, можно установить, что . Используя Piling-up лемму, с вероятностью 0. 5 + 2 − 30 получаем связь между m 0 битами ключа и открытым и зашифрованным текстами.
Из расписания ключей можно получить, что если длина ключа составляет 128 или 256 бит, то m 0 = 78, если же ключ состоит из 192 бит, то m 0 = 96. Из этих данных оцениваем временную сложность атаки, задаваемой следующим алгоритмом: для каждого "ключа" считаем количество открытых текстов, удовлетворяющих найденному соотношению; находим максимальное из них; находим оставшиеся биты ключа: или похожим образом, находя соотношения, или путем перебора. Сложность по объёму хранимой информации оценивается как 260. Именно стольким количеством пар открытый-шифрованный текст должен обладать криптоаналитик. При этом тексты отнюдь не произвольные. Из приведенных соотношений видно, что зависят не от всех битов входного и выходного блоков. Соответственно, среди выборки блоков открытого и зашифрованых текстов должны быть блоки с отличающимися соответствующими битами. Работа алгоритма с меньшим числом известных текстов возможна, но тогда с меньшей вероятностью найденное "максимальное" число на втором этапе будет действительно соответствовать настоящему ключу в виду непревышения корня из дисперсии числа событий "уравнение выполняется" над математическим ожиданием разницы чисел этого события и ему противоположного (можно рассмотреть схему Бернулли, где вероятность "успеха" равна вероятности выполнения соотношения). Другие атаки отличаются анализом на последней стадии соотношений для других раундов и самостоятельного интереса не представляют.


