С помощью обобщенного алгоритма Евклида найдите числа х и у, удовлетворяющие уравнению 30х +12y = НОД(30,12). х=1, у=-2, НОД = 6. Где ошибка? |
Алгоритмы шифрования DES и AES
Расшифрование
Как известно, криптографическая система должна позволять не только зашифровать, но и расшифровать сообщения. Можно было бы ожидать, что процесс расшифрования по DES сильно запутан. Однако разработчики так подобрали различные компоненты стандарта, чтобы для зашифрования и расшифрования использовался один и тот же алгоритм. При расшифровании на вход алгоритма подается зашифрованный текст. Единственное отличие состоит в обратном порядке использования частичных ключей Ki. K16 используется на первом раунде, K1 — на последнем раунде.
После последнего раунда процесса расшифрования две половины выхода меняются местами так, чтобы вход заключительной перестановки был составлен из R16 и L16. Выходом этой стадии является незашифрованный текст.
Двухкратный DES и атака "встреча посередине"
В настоящее время основным недостатком DES считается маленькая длина ключа. Простейшим способом усложнения процесса криптоанализа является использование двухкратного шифрования с помощью одного и того же алгоритма с разными ключами. Если М – сообщение, К1, К2 – ключ, f – процесс шифрования по DES, а Е – зашифрованное сообщение, то можно записать
E=f(f(M,K1),K2),
то есть сначала блок шифруется одним ключом, затем получившийся шифротекст шифруется вторым ключом. Расшифрование проводится в обратном порядке ( f -1 – расшифрование по DES ):
E=f-1(f-1(M,K2),K1)
В этом случае длина ключа равна 56 * 2 = 112 бит, поэтому для обнаружения двойного ключа, которым зашифрован блок, потребуется в общем случае 2112 попыток.
Исследовав эту проблему, американские ученые Меркл и Хеллман придумали способ проведения атаки по открытому тексту, который требует проведения не 2112 попыток, а 257. (Меркл и Хеллман предложили эту схему против DES, но можно сделать обобщение на все блочные алгоритмы.)
Этот вариант атаки называется атака "встреча посередине". Он основан на следующем свойстве алгоритма. Мы имеем
E=f(f(M,K1),K2)
где М – сообщение, К1, К2 – ключ, f – процесс шифрования по DES, а Е – зашифрованное сообщение.
Тогда X=f(M,K1)=f-1(E,K2).
Атака состоит в следующем. Требуется, чтобы атакующий знал несколько пар "незашифрованный текст - соответствующий ему зашифрованный текст" (M, E). В этом случае вначале шифруется M для всех возможных 256 значений K1. Этот результат запоминается в памяти ЭВМ. Запомненные данные упорядочиваются по значению Х. Следующий шаг состоит в дешифровании E, с применением всех возможных 256 значений K2. Для каждого выполненного дешифрования ищется равное ему значение в первой таблице. Если такое значение найдено, то считается, что эти ключи могут быть правильными, и они проверяются для следующей известной пары "незашифрованный текст, зашифрованный текст". Максимальное количество попыток шифрования, которое, возможно, придется предпринять, равно 2*2n, или 2n+1 (где n – длина ключа в каждом из этапов шифрования; для DES n равно 56 ).
Название "встреча посередине" дано атаке по той причине, что с одной стороны выполняется шифрование, с другой – расшифрование, и полученные посередине результаты сравниваются.
Для проведения атаки "встреча посередине" нужен большой объем памяти: 2n блоков (где n – длина ключа). Для DES, в котором используется 56-битовый ключ потребуется 256 64-разрядных блоков памяти. Это составляет 262 байт или 222 Тбайт. Такой объем памяти достаточно трудно пока еще себе представить, кроме того, для проведения операций поиска в таком огромном массиве потребуется соответствующее время. Несмотря на это, двойное шифрование DES практически никогда не использовалась.
Трехкратный DES
В целях противодействия атаке "встреча посередине" было предложено использовать тройное шифрование с двумя ключами ( рис. 4.3).
В этом случае выполняется последовательность зашифрование-расшифрование-зашифрование ( EDE – от англ. Encrypt – Decrypt -Encrypt ). Этот процесс можно символически представить следующим образом:
E=f(f-1(f(M,K1),K2),K1)
Отправитель сначала шифрует сообщение первым ключом, затем расшифрует вторым и, наконец, окончательно шифрует первым. Получатель сначала расшифровывает первым ключом, затем шифрует вторым и снова расшифровывает первым. При этом длина ключа увеличивается вдвое и составляет 112 бит.
В качестве более надежной альтернативы предлагается метод трехкратного шифрования, использующий три разных ключа – на каждом из этапов свой. Общая длина ключа в таком методе возрастает ( 112+56=168 ), но хранение нескольких сотен бит обычно не является проблемой.
Тройной DES является достаточно популярной альтернативой DES и используется при управлении ключами в стандартах ANSI X9.17 и ISO 8732. Некоторые криптоаналитики предлагают для еще более надежного шифрования использовать пятикратный DES с тремя или пятью ключами.
Алгоритм Rijndael
Алгоритм Rijndael (читается "Рейндал") разработан бельгийскими специалистами Joan Daemen (Proton World International) и Vincent Rijmen (Katholieke Universiteit Leuven). Этот шифр победил в проведенном Национальным институтом стандартов и техники (NIST) США конкурсе на звание AES (Advanced Encryption Standard) и в 2001 году был принят в качестве нового американского стандарта. Алгоритм Rijndael достаточно сложен для описания, поэтому рассмотрим только основные аспекты построения и особенности использования шифра.
Шифр Rijndael/AES (то есть рекомендуемый стандартом) характеризуется размером блока 128 бит, длиной ключа 128, 192 или 256 бит и количеством раундов 10, 12 или 14 в зависимости от длины ключа. В принципе, структуру Rijndael можно приспособить к любым размерам блока и ключа, кратным 32, а также изменить число раундов.
В отличие от шифров, предлагаемых DES и ГОСТ 28147-89, в основе Rijndael не лежит сеть Фейштеля. Основу Rijndael составляют так называемые линейно-подстановочные преобразования. Блок данных, обрабатываемый с использованием Rijndael, делится на массивы байтов, и каждая операция шифрования является байт-ориентированной. Каждый раунд состоит из трех различных обратимых преобразований, называемых слоями. Эти слои следующие.
- Нелинейный слой. На этом слое выполняется замена байтов. Слой реализован с помощью S-блоков, имеющих оптимальную нелинейность, и предотвращает возможность использования дифференциального, линейного и других современных методов криптоанализа.
- Линейный перемешивающий слой гарантирует высокую степень взаимопроникновения символов блока для маскировки статистических связей. На этом слое в прямоугольном массиве байтов выполняется сдвиг строк массива и перестановка столбцов.
- Слой сложения по модулю 2 с подключом выполняет непосредственно шифрование.
Шифр начинается и заканчивается сложением с ключом. Это позволяет закрыть вход первого раунда при атаке по известному тексту и сделать криптографически значимым результат последнего раунда.
В алгоритме широко используются табличные вычисления, причем все необходимые таблицы задаются константно, т.е. не зависят ни от ключа, ни от данных.
Необходимо отметить, что в отличие от шифров, построенных по сети Фейштеля, в Rijndael функции шифрования и расшифрования различны.
Алгоритм Rijndael хорошо выполняется как в программной, так и в аппаратной реализации. Rijndael имеет небольшие требования к памяти, что делает его пригодным для систем с ограниченными ресурсами. Надежность шифрования алгоритмом Rijndael очень высоко оценивается специалистами.