Cifrado de bloque
En criptografía , el algoritmo de cifrado Tiny ( TEA ) es un cifrador de bloques que destaca por su simplicidad de descripción e implementación , normalmente unas pocas líneas de código. Fue diseñado por David Wheeler y Roger Needham del Laboratorio de Computación de Cambridge ; se presentó por primera vez en el taller Fast Software Encryption en Lovaina en 1994, y se publicó por primera vez en las actas de ese taller. [4]
El cifrado no está sujeto a ninguna patente .
Propiedades
TEA opera con dos enteros sin signo de 32 bits (podrían derivarse de un bloque de datos de 64 bits ) y utiliza una clave de 128 bits . Tiene una estructura Feistel con 64 rondas sugeridas, implementadas típicamente en pares denominados ciclos . Tiene un programa de claves extremadamente simple , mezclando todo el material de la clave exactamente de la misma manera para cada ciclo. Se utilizan diferentes múltiplos de una constante mágica para evitar ataques simples basados en la simetría de las rondas. La constante mágica, 2654435769 o 0x9E3779B9, se elige como ⌊2 32 ⁄ 𝜙⌋ , donde 𝜙 es la proporción áurea (como un número que no se esconde bajo la manga ). [4]
TEA tiene algunas debilidades. En particular, sufre de claves equivalentes: cada clave es equivalente a otras tres, lo que significa que el tamaño de clave efectivo es de solo 126 bits . [5] Como resultado, TEA es especialmente malo como función hash criptográfica . Esta debilidad condujo a un método para hackear la consola de juegos Xbox de Microsoft , donde el cifrado se usó como función hash. [6] TEA también es susceptible a un ataque de clave relacionada que requiere 2 23 textos simples elegidos bajo un par de claves relacionadas, con una complejidad de tiempo de 2 32. [2] Debido a estas debilidades, se diseñó el cifrado XTEA .
Versiones
La primera versión publicada de TEA se complementó con una segunda versión que incorporó extensiones para hacerla más segura. Block TEA (que se especificó junto con XTEA ) opera en bloques de tamaño arbitrario en lugar de los bloques de 64 bits del original.
Una tercera versión ( XXTEA ), publicada en 1998, describió mejoras adicionales para aumentar la seguridad del algoritmo Block TEA.
Código de referencia
A continuación se presenta una adaptación de las rutinas de cifrado y descifrado de referencia en C , publicadas en el dominio público por David Wheeler y Roger Needham: [4]
#include <stdint.h> void encrypt ( uint32_t v [ 2 ], const uint32_t k [ 4 ]) { uint32_t v0 = v [ 0 ], v1 = v [ 1 ], suma = 0 , i ; /* configuración */ uint32_t delta = 0x9E3779B9 ; /* una constante de programación de claves */ uint32_t k0 = k [ 0 ], k1 = k [ 1 ], k2 = k [ 2 ], k3 = k [ 3 ]; /* clave de caché */ for ( i = 0 ; i < 32 ; i ++ ) { /* inicio de ciclo básico */ suma += delta ; v0 += (( v1 << 4 ) + k0 ) ^ ( v1 + suma ) ^ (( v1 >> 5 ) + k1 ); v1 += (( v0 << 4 ) + k2 ) ^ ( v0 + suma ) ^ (( v0 >> 5 ) + k3 ); } /* fin del ciclo */ v [ 0 ] = v0 ; v [ 1 ] = v1 ; } void decrypt ( uint32_t v [ 2 ], const uint32_t k [ 4 ]) { uint32_t v0 = v [ 0 ], v1 = v [ 1 ], suma = 0xC6EF3720 , i ; /* configuración; la suma es (delta << 5) y 0xFFFFFFFF */ uint32_t delta = 0x9E3779B9 ; /* una constante de programación de claves */ uint32_t k0 = k [ 0 ], k1 = k [ 1 ], k2 = k [ 2 ], k3 = k [ 3 ]; /* clave de caché */ for ( i = 0 ; i < 32 ; i ++ ) { /* inicio del ciclo básico */ v1 -= (( v0 << 4 ) + k2 ) ^ ( v0 + suma ) ^ (( v0 >> 5 ) + k3 ); v0 -= (( v1 << 4 ) + k0 ) ^ ( v1 + suma ) ^ (( v1 >> 5 ) + k1 ); suma -= delta ; } /* fin del ciclo */ v [ 0 ] = v0 ; v [ 1 ] = v1 ; }
Tenga en cuenta que la implementación de referencia actúa sobre valores numéricos de varios bytes. El artículo original no especifica cómo derivar los números sobre los que actúa a partir de contenido binario u otro.
Véase también
- RC4 : un cifrado de flujo que, al igual que TEA, está diseñado para ser muy sencillo de implementar.
- XTEA – Primera versión del sucesor de Block TEA.
- XXTEA – Bloque corregido sucesor del TEA.
- Treyfer : un algoritmo de cifrado simple y compacto con un tamaño de clave y tamaño de bloque de 64 bits.
Notas
- ^ Matthew D. Russell (27 de febrero de 2004). «Tinyness: An Overview of TEA and Related Ciphers» (Pequeñez: una descripción general de TEA y cifrados relacionados). Archivado desde el original el 12 de agosto de 2007.
- ^ ab Kelsey, John; Schneier, Bruce ; Wagner, David (1997). "Criptoanálisis de claves relacionadas de 3-WAY, Biham-DES, CAST, DES-X, NewDES, RC2 y TEA". Seguridad de la información y las comunicaciones. Apuntes de clase en informática. Vol. 1334. págs. 233–246. CiteSeerX 10.1.1.35.8112 . doi :10.1007/BFb0028479. ISBN. 978-3-540-63696-0.
- ^ Bogdanov, Andrey; Wang, Meiqin (2012). "Criptoanálisis lineal de correlación cero con complejidad de datos reducida". Cifrado rápido de software (PDF) . Apuntes de clase en informática. Vol. 7549. págs. 29–48. doi :10.1007/978-3-642-34047-5_3. ISBN 978-3-642-34046-8.
- ^ abc Wheeler, David J.; Needham, Roger M. (16 de diciembre de 1994). "TEA, un pequeño algoritmo de cifrado". Cifrado rápido de software. Apuntes de clase sobre informática. Vol. 1008. Lovaina, Bélgica. págs. 363–366. doi :10.1007/3-540-60590-8_29. ISBN 978-3-540-60590-4.
{{cite book}}
: Mantenimiento de CS1: falta la ubicación del editor ( enlace ) - ^ Kelsey, John; Schneier, Bruce ; Wagner, David (1996). "Criptoanálisis de programación de claves de IDEA, G-DES, GOST, SAFER y Triple-DES". Avances en criptología — CRYPTO '96 (PDF) . Apuntes de clase en informática. Vol. 1109. págs. 237–251. doi :10.1007/3-540-68697-5_19. ISBN 978-3-540-61512-5. Archivado desde el original (PDF) el 8 de febrero de 2012 . Consultado el 25 de febrero de 2008 .
- ^ Michael Steil. «17 errores que cometió Microsoft en el sistema de seguridad de Xbox». Archivado desde el original el 16 de abril de 2009.
Referencias
- Andem, Vikram Reddy (2003). "Un criptoanálisis del algoritmo de cifrado Tiny, tesis de maestría" (PDF) . Tuscaloosa: Universidad de Alabama.
- Hernández, Julio César; Isasi, Pedro; Ribagorda, Arturo (2002). "Una aplicación de algoritmos genéticos al criptoanálisis de TEA de una ronda". Actas del Simposio de 2002 sobre Inteligencia Artificial y su Aplicación .
- Hernández, Julio César; Sierra, José María; Isasi, Pedro; Ribargorda, Arturo (2003). "Encontrar diferenciadores eficientes para mapeos criptográficos, con una aplicación al cifrado por bloques TEA". Congreso de Computación Evolutiva de 2003, 2003. CEC '03 . Vol. 3. pp. 2189–2193. doi :10.1109/CEC.2003.1299943. hdl :10016/3944. ISBN 978-0-7803-7804-9.S2CID62216777 .
- Hernández, Julio César; Sierra, José María; Ribagorda, Arturo; Ramos, Benjamín; Mex-Perera, JC (2001). "Distinguir TEA de una permutación aleatoria: las versiones de ronda reducida de TEA no tienen el SAC o no generan números aleatorios". Criptografía y codificación (PDF) . Apuntes de clase en informática. Vol. 2260. págs. 374–377. doi :10.1007/3-540-45325-3_34. ISBN 978-3-540-43026-1. Archivado desde el original (PDF) el 26 de abril de 2012.
- Moon, Dukjae; Hwang, Kyungdeok; Lee, Wonil; Lee, Sangjin; Lim, Jongin (2002). "Criptoanálisis diferencial imposible de XTEA y TEA de ronda reducida". Fast Software Encryption (PDF) . Apuntes de clase en informática. Vol. 2365. págs. 49–60. doi :10.1007/3-540-45661-9_4. ISBN 978-3-540-44009-3.
- Hong, Seokhie; Hong, Deukjo; Ko, Youngdai; Chang, Donghoon; Lee, Wonil; Lee, Sangjin (2004). "Criptoanálisis diferencial de TEA y XTEA". Seguridad de la información y criptología - ICISC 2003. Apuntes de clase en informática. Vol. 2971. págs. 402–417. doi :10.1007/978-3-540-24691-6_30. ISBN 978-3-540-21376-5.
Enlaces externos
- Vectores de prueba para TEA
- Implementación de XXTEA en JavaScript con Base64 Archivado el 28 de abril de 2006 en Wayback Machine.
- Implementación PHP de XTEA (idioma alemán)
- Implementación de XXTEA en JavaScript
- Implementaciones de XTEA en JavaScript y PHP (texto en holandés)
- Implementación de AVR ASM
- Algoritmo de cifrado escalable SEA para pequeñas aplicaciones integradas (Standaert, Piret, Gershenfeld, Quisquater - julio de 2005 UCL Bélgica y MIT EE. UU.)