Extended Tiny Encryption Algorithm
# Extended Tiny Encryption Algorithm

Extended Tiny Encryption Algorithm (XTEA (eXtended TEA) es un algoritmo criptográfico utilizado para el cifrado por bloques, al igual que el algoritmo TEA (presentado en 1994), pero corrigiendo las deficiencias de este último.
Sus diseñadores fueron David Wheeler y Roger Needham del Laboratorio de Informática de Cambridge, los cuales presentaron un informe técnico sobre el algoritmo que fue publicado en 1997 (Needham y Wheeler, 1997). Este algoritmo no está sujeto a ninguna patente.

# Extended Tiny Encryption Algorithm
## Descripción

Al igual que TEA, XTEA está basado en una estructura de red de Feistel con 64 rondas. Además, también opera sobre bloques de 64 bits utilizando una clave de 128 bits. Las diferencias que posee con respecto a TEA es que incluye una generación de claves más compleja y reordenación de los turnos o rondas, la operación XOR y adiciones.
Junto con XTEA, se ha presentado un algoritmo de cifrado de bloque variable denominado Block TEA, el cual utiliza la función de redondeo de XTEA pero aplicada cíclicamente a través del mensaje completo en varias iteraciones. Debido a que opera sobre todo el mensaje, una de las propiedades que tiene Block TEA es que no es necesario utilizar cifrado por bloques. Posteriormente, se encontró un ataque sobre todo el Block TEA descrito en (Saarinen, 1998), donde también se detalla las debilidades del sucesor de Block TEA, XXTEA.
Uno de los mejores ataques que ha sufrido XTEA, ha sido relacionado con la clave que fue derribada en 27 de las 64 rondas que tiene XTEA y para ello se necesitaron 2$^{20.5}$ textos planos y una complejidad temporal de 2$^{115.15}$.

# Extended Tiny Encryption Algorithm
## Implementación en C

Este código en C, es una adaptación de la versión del código de referencia del dominio público de David Wheeler y Roger Needham. La funcionalidad que posee es la de cifrar y descifrar usando XTEA:
La diferencia existente entre este código y el original es la utilización de uint32_t en vez de unsinged long (64 bits) o la utilización de const. Además, en el original se omitían paréntesis redundantes.