Cifrado/Descifrado TEA/XTEA/XXTEA
Familia Tiny Encryption Algorithm - Cifradores de bloques simétricos ligeros
Aviso de seguridad
TEA/XTEA/XXTEA son cifradores ligeros utilizados principalmente en sistemas embebidos y juegos. Para aplicaciones de alta seguridad, utilice AES en su lugar.
Acerca de la familia TEA
TEA (Tiny Encryption Algorithm) fue diseñado por David Wheeler y Roger Needham en el Laboratorio de Computación de la Universidad de Cambridge en 1994. Su característica principal es la simplicidad radical: el bucle de cifrado completo cabe en menos de 10 líneas de C, logrando seguridad de cifrado por bloques de 64 bits mediante 32 iteraciones de un double-round tipo Feistel. La constante mágica δ = 0x9E3779B9 (aproximadamente φ × 2³², donde φ es la razón áurea) se suma al acumulador en cada ronda para evitar puntos fijos de claves débiles.
La familia TEA evolucionó específicamente para corregir debilidades descubiertas: XTEA (1997) abordó los ataques de claves relacionadas en TEA rediseñando el calendario de claves para permutar las cuatro palabras de 32 bits de forma diferente en cada ronda. XXTEA (1998) extendió el diseño a bloques de longitud variable mediante una técnica de mezcla Feistel sobre todo el mensaje. Las tres variantes comparten el mismo tamaño de clave de 128 bits y la estructura de constante de ronda basada en δ, pero difieren significativamente en propiedades de seguridad y flexibilidad de tamaño de bloque.
Comparación de algoritmos
| Algoritmo | Tamaño de bloque | Longitud de clave | Rondas | Seguridad |
|---|---|---|---|---|
| TEA | 64 bits | 128 bits | 64 | Heredado |
| XTEA | 64 bits | 128 bits | 64 | Buena |
| XXTEA | Variable (≥64 bits) | 128 bits | Variable (6+52/n) | Buena |
Características principales
- Bucle núcleo TEA: solo 7 líneas de C — el cifrado por bloques más compacto apto para producción
- Clave de 128 bits dividida en cuatro palabras de 32 bits; cada ronda usa una permutación de subclave diferente (XTEA/XXTEA)
- 32 double-rounds (64 operaciones single-round) usando δ = 0x9E3779B9 como constante de ronda
- XXTEA soporta bloques de longitud variable — ventaja clave para cifrar datos de tamaño arbitrario sin relleno
Modos de cifrado (solo TEA/XTEA)
- CBC: Encadenamiento de bloques de cifrado — cada bloque TEA/XTEA de 64 bits se combina con XOR con el bloque cifrado anterior antes de los 32 double-rounds. El IV de 64 bits encadena los bloques; cargas útiles idénticas en posiciones diferentes producen cifrado diferente.
- ECB: Libro de códigos electrónico — cada bloque de 64 bits es procesado independientemente por los 32 double-rounds con la misma clave. Dos bloques idénticos de texto plano siempre producen cifrado idéntico, revelando la estructura de datos. No recomendado salvo para un único bloque.
- CFB: Retroalimentación de cifrado — TEA/XTEA actúa como generador de flujo de clave; el cifrado anterior se procesa por TEA/XTEA y se hace XOR con el siguiente segmento de texto plano. Convierte el cifrado de bloques de 64 bits en un cifrado de flujo de granularidad de byte, útil para flujos de datos de juego de longitud variable.
- OFB: Retroalimentación de salida — el flujo de clave se produce iterando el cifrado TEA/XTEA sobre el IV, independientemente del texto plano. La no propagación de errores significa que un byte dañado afecta exactamente un byte del texto plano recuperado — apropiado para telemetría embebida donde los errores de bits deben estar contenidos.
- RAW: Bloque crudo - Cifrado directo de un solo bloque sin modo de encadenamiento. No requiere IV.
Consideraciones de seguridad
- TEA original: David Wagner (1997) demostró ataques de claves relacionadas; evitar TEA cuando el atacante puede elegir claves relacionadas — usar XTEA o XXTEA para cualquier nueva implementación
- XTEA corrige la vulnerabilidad de claves relacionadas de TEA, pero el tamaño de bloque de 64 bits sigue limitando la seguridad a 2³² bloques (~32 GB) por clave antes de que las colisiones de cumpleaños se vuelvan probables
- La mezcla sobre todo el mensaje de XXTEA requiere al menos 2 pasadas; para bloques muy pequeños (≤ 2 palabras), los pasos de mezcla reducidos debilitan la seguridad — rellenar datos cortos a al menos 3 palabras
- Las tres variantes TEA son inadecuadas para nuevas aplicaciones de propósito general; para sistemas embebidos modernos, preferir ChaCha20 o AES-128-CTR — reservar la familia TEA para compatibilidad con formatos heredados o entornos extremadamente restringidos donde el tamaño del código es la restricción principal
Casos de uso comunes
- Protección de archivos guardados de juegos Xbox y Xbox 360: la Xbox original de Microsoft usaba XTEA internamente para firmar y verificar datos de guardado de la consola, evitando la manipulación mediante tarjetas de memoria
- Mensajería instantánea QQ: el protocolo QQ inicial de Tencent usaba una variante XTEA modificada para cifrar datos de sesión entre clientes y servidores, documentado en proyectos de ingeniería inversa de código abierto del protocolo QQ
- Cifrado de activos de juego Cocos2d-x y Unity: TEA/XTEA es popular en motores de juego para ofuscar archivos de recursos (texturas, audio, scripts) debido a su mínima huella de código en versiones móviles reducidas
- Implementaciones en microcontroladores y FPGA donde la ROM se mide en kilobytes: el bucle núcleo de 7 líneas de TEA compila en menos de 100 bytes de código máquina ARM Thumb-2, haciéndolo viable en MCU con flash muy limitada
Referencias
Herramientas Relacionadas
Cifrado/Descifrado AES
Cifrar y descifrar texto de forma segura usando el algoritmo AES
Cifrado/Descifrado Blowfish
Cifrado de bloques simétrico rápido diseñado por Bruce Schneier, con longitud de clave variable (32-448 bits)
Cifrado/Descifrado DES/3DES
Cifrar y descifrar con algoritmos DES y 3DES, múltiples modos y opciones de relleno