L’algoritmo TEA è stato sviluppato da David Wheeler e Roger Needham al Computer Laboratory dell’Università di Cambridge ed è uno dei più veloci ed efficienti algoritmi di crittografia dati esistenti.
TEA: un semplice ma efficace algoritmo di Encryption
Implementato su un PIC16F877 a 8MHz, un ciclo di cifratura/decifratura avviene in 32 iterazioni in poco più di 10ms. Le risorse occupate sono 946 byte di ROM e 33 Byte di RAM. Su un PIC18F452 a 32MHz il tempo necessario scende sotto i 2ms con un’occupazione di 1548 byte di ROM e 37 byte di RAM. Nel listato 3 le funzioni per l’implementazione dell’algoritmo. Il codice è scritto in C per PIC per il compilatore CCS.
/* Numero di iterazioni: 32 sono ampie, 16 sono sufficienti. */ const signed int8 TEA_ITERATIONS = 32; /* Golden ratio */ const unsigned int32 TEA_DELTA = 0x9E3779B9; /* Somma iniziale per decryption */ const unsigned int32 TEA_DEC_SUM = 0xC6EF3720; /* Cifratura di 8 bytes usando una chiave a 128-bit. "in" e "out" sono array di due interi a 32 bit, "key" è un array di 4 interi a 32 bit. */ #separate void tea_encipher (unsigned int32 * in, unsigned int32 * out, unsigned int32 * key) { unsigned int32 y, z, a, b, c, d, sum = 0; signed int8 n = TEA_ITERATIONS; y = in[0]; z = in[1]; a = key[0]; b = key[1]; c = key[2]; d = key[3]; while(n > 0) { sum += TEA_DELTA; y += z<<4; y += a^z; y += sum^(z>>5); y += b; z += y<<4; z += c^y; z += sum^(y>>5); z += d; n--; } out[0] = y; out[1] = z; } /* Decifratura con chiave a 128 bit. "in" e "out" sono array di due interi a 32 bit, "key" è un array di 4 interi a 32 bit. */ #separate void tea_decipher (unsigned int32 * in, unsigned int32 * out, unsigned int32 * key) { unsigned int32 y, z, a, b, c, d, sum = TEA_DEC_SUM; signed int8 n = TEA_ITERATIONS; y = in[0]; z = in[1]; a = key[0]; b = key[1]; c = key[2]; d = key[3]; while(n > 0) { z -= y<<4; z -= c^y; z -= sum^(y>>5); z -= d; y -= z<<4; y -= a^z; y -= sum^(z>>5); y -= b; sum -= TEA_DELTA; n--; } out[0] = y; out[1] = z; }
Listato 3 |

Sarebbe bello implementarlo con l’assembler…anche se e’ piu’ bello vederlo cosi’ 🙂