WikiDer > XXTEA
Один раунд XXTEA | |
Общее | |
---|---|
Дизайнеров | Дэвид Уиллер, Роджер Нидхэм |
Впервые опубликовано | Октябрь 1998 |
Полученный из | Блокировать ЧАЙ |
Деталь шифра | |
Ключевые размеры | 128 бит |
Размеры блоков | произвольно, не менее двух слов (64 бита) |
Структура | Несбалансированная сеть Фейстеля |
Раундов | зависит от размера блока; ~ 52 + 6 *слова (6-32 полных цикла) |
Лучшая публика криптоанализ | |
XXTEA уязвим для атака с выбранным открытым текстом требуя 259 запросы и незначительная работа.[1] |
В криптография, Исправленный блок TEA (часто упоминается как XXTEA) это блочный шифр разработан, чтобы исправить недостатки в оригинальном Блокировать ЧАЙ.[2][3]
XXTEA уязвим для атака с выбранным открытым текстом требуя 259 запросы и незначительная работа. См. Криптоанализ ниже.
В шифрдизайнеры были Роджер Нидхэм и Дэвид Уиллер из Кембриджская компьютерная лаборатория, а алгоритм был представлен в неопубликованной[требуется разъяснение] технический отчет в октябре 1998 г. (Wheeler and Needham, 1998). Не подлежит никакому патенты.
Формально XXTEA представляет собой последовательный неполный источник тяжелого гетерогенного УФН (несбалансированный Сеть Фейстеля) блочный шифр. XXTEA работает с блоками переменной длины, размер которых в произвольном порядке кратен 32 битам (минимум 64 бита). Количество полных циклов зависит от размера блока, но их не менее шести (возрастает до 32 для небольших размеров блока). Исходный блок TEA применяет XTEA Функция round для каждого слова в блоке и аддитивно комбинирует его со своим самым левым соседом. Медленная скорость распространения процесса дешифрования была немедленно использована для взлома шифра. Исправленный блок TEA использует более сложную функцию раунда, которая использует обоих непосредственных соседей при обработке каждого слова в блоке.
XXTEA, вероятно, будет более эффективным, чем XTEA, для более длинных сообщений.[нужна цитата]
Needham & Wheeler делает следующие комментарии по поводу использования Block TEA:
Для простоты использования и общей безопасности предпочтительнее использовать версию с большими блоками, если это применимо, по следующим причинам.
- Одно изменение битов изменит примерно половину битов всего блока, не оставив места, где начинаются изменения.
- Выбор режима отсутствует.
- Даже если используется правильное использование постоянного изменения отправляемых данных (возможно, по номеру сообщения), только идентичные сообщения дают тот же результат, а утечка информации минимальна.
- Номер сообщения всегда следует проверять, поскольку эта избыточность является проверкой случайного принимаемого сообщения.
- Атаки "разрезать и соединить", похоже, невозможны.
- Если недопустимо иметь очень длинные сообщения, их можно разбить на куски, скажем, по 60 слов и прикованный аналогично методам, применяемым для DES.
Однако из-за неполного характера функции раунда два больших шифротекста из 53 или более 32-битных слов, идентичных во всех словах, кроме 12, могут быть найдены простым перебором коллизий, требующим 296 − N память, 2N время и 2N+296 − N выбранные открытые тексты, другими словами, с общим временем * сложностью памяти 296, что на самом деле 2wordize * fullcycles / 2 для любого такого шифра. В настоящее время неизвестно, представляют ли такие частичные коллизии какую-либо угрозу безопасности шифра. Восемь полных циклов поднимут планку такого поиска коллизий по сравнению со сложностью параллельных атак грубой силой.[нужна цитата]
Необычно малый размер алгоритма XXTEA сделает его жизнеспособным вариантом в ситуациях, когда существуют крайние ограничения, например устаревшие аппаратные системы (возможно, встроенные), в которых количество доступных ОЗУ минимально, или альтернативно одноплатные компьютеры такой как Raspberry Pi, Банановый пи или Ардуино.
Криптоанализ
Атака, опубликованная в 2010 году Э. Яррковым, представляет собой атака по выбранному открытому тексту против полноразмерного XXTEA с широким блоком, требующим 259 запросы для размера блока 212 байтов или более, и незначительная работа. Он основан на дифференциальный криптоанализ.[1]
Для шифрования «212 байтов и более» алгоритм выполняет всего 6 раундов, а тщательно подобранные битовые комбинации позволяют обнаруживать и анализировать лавинный эффект. В документе говорится, что добавление двух дополнительных раундов (т.е. 8 раундов вместо 6) устраняет эту проблему.
Код ссылки
Первоначальная формулировка алгоритма Corrected Block TEA, опубликованная Дэвидом Уилером и Роджером Нидхэмом, выглядит следующим образом:[4]
#define MX ((z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k [p & 3 ^ e] ^ z)) длинная btea(длинная* v, длинная п, длинная* k) { беззнаковый длинная z=v[п-1], y=v[0], сумма=0, е, ДЕЛЬТА=0x9e3779b9; длинная п, q ; если (п > 1) { / * Кодирование * / q = 6 + 52/п; в то время как (q-- > 0) { сумма += ДЕЛЬТА; е = (сумма >> 2) & 3; для (п=0; п<п-1; п++) y = v[п+1], z = v[п] += MX; y = v[0]; z = v[п-1] += MX; } вернуть 0 ; } еще если (п < -1) { / * Часть декодирования * / п = -п; q = 6 + 52/п; сумма = q*ДЕЛЬТА ; в то время как (сумма != 0) { е = (сумма >> 2) & 3; для (п=п-1; п>0; п--) z = v[п-1], y = v[п] -= MX; z = v[п-1]; y = v[0] -= MX; сумма -= ДЕЛЬТА; } вернуть 0; } вернуть 1; }
Согласно Нидхэму и Уиллеру:
BTEA закодирует или декодирует n слов как один блок, где п > 1
- v - вектор данных n слов
- k - это ключ из 4 слов
- n отрицательно для декодирования
- если n равно нулю, результат равен 1 и никакое кодирование или декодирование не происходит, в противном случае результат равен нулю
- предполагает 32-битное "длинное" кодирование и декодирование с таким же порядком байтов
Обратите внимание, что инициализация z - это Неопределенное поведение для п <1, что может вызвать ошибка сегментации или другое нежелательное поведение - лучше поместить его в блок «Coding Part». Кроме того, в определении MX некоторые программисты предпочли бы использовать скобки для уточнения приоритета операторов.
Уточненная версия, включающая эти улучшения, выглядит следующим образом:
#включают <stdint.h> #define DELTA 0x9e3779b9 #define MX (((z >> 5 ^ y << 2) + (y >> 3 ^ z << 4)) ^ ((sum ^ y) + (key [(p & 3) ^ e] ^ z)) ) пустота btea(uint32_t *v, int п, uint32_t const ключ[4]) { uint32_t y, z, сумма; беззнаковый п, раунды, е; если (п > 1) { / * Кодирование * / раунды = 6 + 52/п; сумма = 0; z = v[п-1]; делать { сумма += ДЕЛЬТА; е = (сумма >> 2) & 3; для (п=0; п<п-1; п++) { y = v[п+1]; z = v[п] += MX; } y = v[0]; z = v[п-1] += MX; } в то время как (--раунды); } еще если (п < -1) { / * Часть декодирования * / п = -п; раунды = 6 + 52/п; сумма = раунды*ДЕЛЬТА; y = v[0]; делать { е = (сумма >> 2) & 3; для (п=п-1; п>0; п--) { z = v[п-1]; y = v[п] -= MX; } z = v[п-1]; y = v[0] -= MX; сумма -= ДЕЛЬТА; } в то время как (--раунды); } }
Смотрите также
- RC4: А потоковый шифр который, как и XXTEA, разработан таким образом, чтобы его было очень просто реализовать.
- XTEA: Блокировать прекурсор TEA.
- ЧАЙ: Предшественник XTEA.
использованная литература
- ^ а б Элиас Яррков (04.05.2010). «Криптоанализ XXTEA». Цитировать журнал требует
| журнал =
(Помогите) - ^ Мэтью Д. Рассел (27 февраля 2004 г.). «Крошечность: обзор TEA и родственных шифров». Архивировано из оригинал на 2007-08-12.
- ^ Роджер М. Нидхэм и Дэвид Дж. Уиллер (октябрь 1997 г.). «Чайные расширения» (PDF). Компьютерная лаборатория, Кембриджский университет, Англия. Получено 2008-07-04.
- ^ Дэвид Дж. Уиллер и Роджер М. Нидхэм (октябрь 1998 г.). "Поправка к XTEA" (PDF). Компьютерная лаборатория, Кембриджский университет, Англия. Получено 2008-07-04.