CoderTools

Шифрование/Дешифрование TEA/XTEA/XXTEA

Семейство Tiny Encryption Algorithm - Легковесные симметричные блочные шифры

Уведомление о безопасности

TEA/XTEA/XXTEA - это легковесные шифры, используемые в основном во встроенных системах и играх. Для приложений с высокими требованиями безопасности используйте AES.

Все алгоритмы семейства TEA используют фиксированный 128-битный (16 байт) ключ.
Параметры формата

О семействе TEA

TEA (Tiny Encryption Algorithm) разработан Дэвидом Уилером и Роджером Нидхемом в Компьютерной лаборатории Кембриджского университета в 1994 году. Главная отличительная черта — радикальная простота: вся шифровальная петля умещается менее чем в 10 строк C и при этом обеспечивает безопасность 64-битного блочного шифра благодаря 32 итерациям двойного раунда типа Фейстеля. Магическая константа δ = 0x9E3779B9 (приблизительно φ × 2³², где φ — золотое сечение) добавляется к накапливаемой сумме в каждом раунде, предотвращая неподвижные точки слабых ключей.

Семейство TEA эволюционировало для последовательного устранения обнаруженных уязвимостей. XTEA (1997) исправил атаки со связанными ключами в TEA, переработав расписание ключей: четыре 32-битных слова ключа теперь используются в разном порядке в каждом раунде. XXTEA (1998) расширил конструкцию на произвольную длину блока, применив технику перемешивания Фейстеля по всему сообщению. Все три варианта используют 128-битный ключ и структуру на основе δ, но существенно отличаются свойствами безопасности и гибкостью длины блока.

Сравнение алгоритмов

Алгоритм Размер блока Длина ключа Раунды Безопасность
TEA 64 bits 128 bits 64 Устаревший
XTEA 64 bits 128 bits 64 Хорошая
XXTEA Переменный (≥64 бит) 128 bits Переменные (6+52/n) Хорошая

Основные характеристики

  • Ядро TEA: всего 7 строк на C — самый компактный блочный шифр, пригодный для производственного применения
  • 128-битный ключ разделён на четыре 32-битных слова; в XTEA/XXTEA каждый раунд использует другую перестановку подключей
  • 32 двойных раунда (64 операции одного раунда) с использованием δ = 0x9E3779B9 в качестве константы раунда
  • XXTEA поддерживает блоки переменной длины — ключевое преимущество для шифрования данных произвольного размера без дополнения

Режимы шифрования (только TEA/XTEA)

  • CBC: Цепочка зашифрованных блоков — каждый 64-битный блок TEA/XTEA перед 32 двойными раундами XOR-ируется с предыдущим блоком шифртекста. 64-битный IV связывает блоки в цепочку; одинаковые данные в разных позициях дают разный шифртекст.
  • ECB: Электронная кодовая книга — каждый 64-битный блок независимо проходит через 32 двойных раунда с тем же ключом. Два одинаковых блока открытого текста всегда дают одинаковый шифртекст, раскрывая структуру данных. Не рекомендуется, кроме случаев шифрования единственного блока.
  • CFB: Обратная связь по шифртексту — TEA/XTEA работает как генератор ключевого потока; предыдущий шифртекст обрабатывается TEA/XTEA и XOR-ируется со следующим сегментом открытого текста. Преобразует 64-битный блочный шифр в побайтовый потоковый шифр, удобный для игровых потоков данных произвольной длины.
  • OFB: Обратная связь по выходу — ключевой поток генерируется итеративным шифрованием IV алгоритмом TEA/XTEA, независимо от открытого текста. Отсутствие распространения ошибок означает, что повреждённый байт влияет ровно на один байт восстановленного открытого текста — подходит для встраиваемой телеметрии, где ошибки бит должны быть локализованы.
  • RAW: Сырой блок - Прямое шифрование одного блока без режима сцепления. IV не требуется.

Соображения безопасности

  • Исходный TEA: Дэвид Вагнер (1997) продемонстрировал атаки со связанными ключами; избегайте TEA, если злоумышленник может выбирать связанные ключи — для любых новых реализаций используйте XTEA или XXTEA
  • XTEA устраняет уязвимость TEA к связанным ключам, но размер блока 64 бита по-прежнему ограничивает безопасность 2³² блоками (~32 ГБ) на ключ до наступления вероятных коллизий по принципу дня рождения
  • Перемешивание всего сообщения в XXTEA требует не менее 2 проходов для корректности; для очень малых блоков (≤ 2 слова) уменьшенное число шагов смешивания ослабляет защиту — дополняйте короткие данные хотя бы до 3 слов
  • Все три варианта TEA непригодны для новых приложений общего назначения; для современных встраиваемых систем предпочтительнее ChaCha20 или AES-128-CTR — оставьте семейство TEA для совместимости с устаревшими форматами и сред с экстремально ограниченными ресурсами

Типичные случаи использования

  • Защита игровых сохранений Xbox и Xbox 360: оригинальная Xbox от Microsoft использовала XTEA внутренне для подписи и проверки данных сохранений консоли, предотвращая подделку через карты памяти
  • Мессенджер QQ: ранний протокол QQ компании Tencent использовал модифицированный вариант XTEA для шифрования данных сессий между клиентами и серверами (задокументировано в проектах обратной разработки протокола QQ с открытым исходным кодом)
  • Шифрование игровых ресурсов в Cocos2d-x и Unity: семейство TEA популярно в игровых движках для обфускации файлов ресурсов (текстуры, аудио, скрипты) из-за крошечного размера кода в облегчённых мобильных сборках
  • Реализации на микроконтроллерах и FPGA, где ПЗУ измеряется в килобайтах: ядро TEA из 7 строк компилируется менее чем в 100 байт машинного кода ARM Thumb-2, что делает его применимым на MCU с очень ограниченной flash-памятью

Ссылки

Быстрое меню

Нет недавних инструментов