Шифрование/Дешифрование TEA/XTEA/XXTEA
Семейство Tiny Encryption Algorithm - Легковесные симметричные блочные шифры
Уведомление о безопасности
TEA/XTEA/XXTEA - это легковесные шифры, используемые в основном во встроенных системах и играх. Для приложений с высокими требованиями безопасности используйте AES.
О семействе 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-памятью
Ссылки
Связанные инструменты
AES Шифрование/Дешифрование
Безопасное шифрование и дешифрование текста с использованием алгоритма AES
Blowfish Шифрование/Дешифрование
Быстрый симметричный блочный шифр, разработанный Брюсом Шнайером, с переменной длиной ключа (32-448 бит)
DES/3DES Шифрование/Дешифрование
Шифрование и дешифрование с использованием алгоритмов DES и 3DES с несколькими режимами и опциями заполнения