TEA – un semplice ma efficace algoritmo di Encryption

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
Scarica subito una copia gratis

Una risposta

  1. Avatar photo Maurizio 26 Marzo 2016

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend