В криптографии XTEA ( eXtended TEA ) — это блочный шифр, разработанный для исправления недостатков TEA . Разработчиками шифра были Дэвид Уилер и Роджер Нидхэм из Кембриджской компьютерной лаборатории , а алгоритм был представлен в неопубликованном техническом отчете в 1997 году (Needham and Wheeler, 1997). Он не является предметом каких-либо патентов . [1]
Как и TEA, XTEA — это 64-битный блочный шифр Фейстеля с 128-битным ключом и предлагаемыми 64 раундами. Несколько отличий от TEA очевидны, включая несколько более сложную схему ключей и перестановку сдвигов, XOR и дополнений.
Этот стандартный исходный код на языке C , адаптированный из эталонного кода, переданного в общественное достояние Дэвидом Уилером и Роджером Нидхэмом, шифрует и расшифровывает с помощью XTEA:
#include <stdint.h> /* берем 64 бита данных в v[0] и v[1] и 128 бит key[0] - key[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 ], sum = 0 , delta = 0x9E3779B9 ; for ( i = 0 ; i < num_rounds ; i ++ ) { v0 += ((( v1 << 4 ) ^ ( v1 >> 5 )) + v1 ) ^ ( sum + key [ sum & 3 ]); sum += delta ; v1 += ((( v0 << 4 ) ^ ( v0 >> 5 )) + v0 ) ^ ( sum + key [( sum >> 11 ) & 3 ]); } v [ 0 ] = v0 ; v [ 1 ] = v1 ; } void decipher ( unsigned int num_rounds , uint32_t v [ 2 ], uint32_t const key [ 4 ]) { unsigned 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 ) ^ ( sum + key [( sum >> 11 ) & 3 ]); sum -= delta ; v0 -= ((( v1 << 4 ) ^ ( v1 >> 5 )) + v1 ) ^ ( sum + key [ sum & 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, поскольку каждая итерация цикла выполняет два раунда шифра Фейстеля. Для дополнительного повышения скорости цикл можно развернуть, предварительно вычислив значения sum+key[].
В 2004 году Ко и др. представили дифференциальную атаку на основе связанных ключей на 27 из 64 раундов XTEA, требующую 2 20,5 выбранных открытых текстов и временную сложность 2 115,15 . [2] [3]
В 2009 году Лу представил атаку прямоугольника связанного ключа на 36 раундов XTEA, взломав больше раундов, чем любые ранее опубликованные криптоаналитические результаты для XTEA. В статье представлены две атаки, одна без и со слабым предположением ключа, что соответствует 2 64,98 байтам данных и 2 126,44 операциям, и 2 63,83 байтам данных и 2 104,33 операциям соответственно. [4]
Представленный вместе с XTEA блочный шифр переменной ширины, названный Block TEA , который использует раундовую функцию XTEA, но Block TEA применяет ее циклически по всему сообщению в течение нескольких итераций. Поскольку он работает со всем сообщением, Block TEA обладает тем свойством, что ему не нужен режим работы . Атака на полный Block TEA была описана Саариненом [5] , который также подробно описывает слабость в преемнике Block TEA, XXTEA .