Два раунда Фейстеля (один цикл) XTEA | |
Общие | |
---|---|
Дизайнеры | Роджер Нидхэм, Дэвид Уиллер |
Впервые опубликовано | 1997 |
Получено из | TEA |
Преемники | Исправленный блок TEA |
Детали шифра | |
Размеры ключей | 128 бит |
Размеры блока | 64 бита |
Структура | Шифр Фейстеля |
Раунды | переменная; рекомендуется 64 раунда Фейстеля (32 цикла) |
Наилучший публичный криптоанализ | |
A атака с использованием связанных ключей прямоугольников на 36 раундов XTEA (Lu, 2009) |
В криптографии, XTEA (eXtended TEA ) - это блочный шифр, предназначенный для исправления слабых мест в TEA. Разработчиками шифра были Дэвид Уиллер и Роджер Нидхэм из Кембриджской компьютерной лаборатории, и алгоритм был представлен в неопубликованном техническом отчет в 1997 г. (Needham and Wheeler, 1997). На него не распространяется действие каких-либо патентов.
. Как и TEA, XTEA представляет собой 64-битный блок шифр Фейстеля с 128-битным ключом и предлагается 64 патрона. Очевидны некоторые отличия от TEA, включая несколько более сложное расписание клавиш и перестановку сдвигов, XOR и дополнения.
Этот стандартный исходный код C, адаптированный из справочного кода, выпущенного в общественное достояние Дэвидом Уилером и Роджером Нидхэмом, шифрует и дешифрует с помощью XTEA:
#include/ * взять 64 бита данных в v [0] и v [1] и 128 битов ключа [0] - ключ [3] * / void encipher (unsigned int num_rounds, uint32_t v [2], uint32_t const key [4]) {unsigned int i; uint32_t v0 = v [0], v1 = v [1], сумма = 0, дельта = 0x9E3779B9; for (i = 0; i >5)) + v1) ^ (сумма + ключ [сумма 3]); сумма + = дельта; v1 + = (((v0 << 4) ^ (v0>>5)) + v0) ^ (сумма + ключ [(сумма>>11) 3]); } v [0] = v0; v [1] = v1; } void decipher (unsigned int num_rounds, uint32_t v [2], uint32_t const key [4]) {беззнаковый int i; uint32_t v0 = v [0], v1 = v [1], delta = 0x9E3779B9, sum = delta * num_rounds; for (i = 0; i < num_rounds; i++) { v1 -= (((v0 << 4) ^ (v0>>5)) + v0) ^ (сумма + ключ [(сумма>>11) 3]); сумма - = дельта; v0 - = (((v1 << 4) ^ (v1>>5)) + v1) ^ (сумма + ключ [сумма 3]); } v [0] = v0; v [1] = v1; }
Изменения по сравнению с исходным кодом ссылки незначительны:
unsigned long
, а не 64-разрядный чистый uint32_t
.const
.v1 + = (v0 <<4 ^ v0>>5) + v0 ^ sum + k [sum>>11 3]
;Рекомендуемое значение параметра «num_rounds» - 32, а не 64, поскольку каждая итерация цикл выполняет два раунда шифра Фейстеля. Чтобы дополнительно повысить скорость, цикл можно развернуть, предварительно вычислив значения суммы + ключ.
В 2004 г. Ko et al. представили связанную клавишу дифференциальную атаку на 27 из 64 раундов XTEA, требуя 2 выбранных открытых текстов и временной сложности, равной 2 (Ко и др., 2004).
В 2009 году Лу представил атаку с использованием связанного прямоугольника на 36 раундов XTEA, взломав больше раундов, чем любые ранее опубликованные результаты криптоанализа для XTEA. В документе представлены две атаки, одна без и со слабым ключом предположения, что соответствует 2 байтам данных и 2 операциям, и 2 байтам данных и 2 операциям соответственно.
Вместе с XTEA был представлен блочный шифр переменной ширины, названный Block TEA, который использует функцию раунда XTEA, но Block TEA применяет ее циклически ко всему сообщению в течение нескольких итераций. Поскольку блок TEA работает со всем сообщением, он не требует режима работы . Атака на полный блок TEA была описана в (Saarinen, 1998), где также подробно описана слабость преемника блока TEA, XXTEA.
| journal =
()