TEA | Tiny Encryption Algorithm

Is a block cipher notable for its simplicity of description and implementation, typically a few lines of code. It was designed by David Wheeler and Roger Needham of the Cambridge Computer Laboratory. The cipher is not subject to any patents. Es un algoritmo para el cifrado por bloques notable por su simplicidad de descripción e implementación, generalmente unas pocas líneas de código. Fue diseñado por David Wheeler y Roger Needham del Cambridge Computer Laboratory. No está sujeto a ningún tipo de patente. https://en.wikipedia.org/wiki/Tiny_Encryption_Algorithm

Breve introducción:

Existen en general dos tipos de cifrado: simétrico y asimétrico, el primero utiliza la misma clave tanto para cifrar como para descifrar la información y el segundo utiliza dos tipos de claves diferentes, uno para cifrar y otro para recuperar la información.

Incluso podemos encontrar algunos algoritmos de cifrado que solo se encargan de proteger la información sin contar con un método para recuperarla a partir del resultado del cifrado.

En este caso, TEA es un algoritmo de clave simétrica

Más información: https://es.wikipedia.org/wiki/Cifrado_(criptograf%C3%ADa)

Descripción

Este algoritmo requiere dos bloques a cifrar de 32 bits y una clave de 128 bits dividida en 4 sub-claves de 32 bits, con estos elementos deberemos ejecutar 64 rondas en grupos de dos bloques simétricos que se encargarán de cifrar la información. El flujo se detalla en el siguiente diagrama:

Esencialmente se realiza un proceso con uno de los bloques y dos claves cuyo resultado es sumado al flujo opuesto, enseguida se invierte los bloques y se realiza el mismo proceso, esto representa dos rondas, por lo que deberemos repetir este proceso 31 veces más para completar 64 rondas totales.

Antes de continuar, es importante mencionar que este algoritmo cuenta con diferentes puntos débiles que deben ser considerados antes de implementarlo, uno de ellos es que una sufre de equivalencia de llaves, esto significa que cada llave de cifrado es equivalente a otras 3, lo que reduce el rango de 2¹²⁸ a 2¹²⁶ claves diferentes esto también reduce los costos de romper el cifrado por fuerza bruta.

Implementación en Go

Mensaje original:
Hola Mundo!

Mensaje cifrado: 
|O\iXY�L6�I�

Mensaje decodificado: 
Hola Mundo!

Referencias: