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’ 🙂