Vés al contingut

XTEA

De la Viquipèdia, l'enciclopèdia lliure
XTEA
Dues rondes Feistel (un cicle) de TEA
Detall
EstructuraXarxa del tipus Feistel

En criptografia, XTEA (eXtended TEA) és un xifratge de blocs dissenyat per corregir les debilitats en TEA. Els dissenyadors del xifrat van ser David Wheeler i Roger Needham del Cambridge Computer Laboratory, i l'algoritme es va presentar en un informe tècnic inèdit el 1997 (Needham i Wheeler, 1997). No està subjecte a cap patent.[1]

Igual que TEA, XTEA és un xifratge Feistel de blocs de 64 bits amb una clau de 128 bits i 64 rondes suggerides. Són evidents diverses diferències amb TEA, inclosa una programació de claus una mica més complexa i una reordenació dels torns, XOR i addicions.[2]

Implementacions

[modifica]

Aquest codi font C estàndard, adaptat del codi de referència llançat al domini públic per David Wheeler i Roger Needham, xifra i desxifra mitjançant XTEA: [3]

#include <stdint.h>

/* take 64 bits of data in v[0] and v[1] and 128 bits of key[0] - key[3] */

void encipher(unsigned int num_rounds, uint32_t v[2], uint32_t const key[4]) {
 unsigned int i;
 uint32_t v0=v[0], v1=v[1], sum=0, delta=0x9E3779B9;
 for (i=0; i < num_rounds; i++) {
 v0 += (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + key[sum & 3]);
 sum += delta;
 v1 += (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + key[(sum>>11) & 3]);
 }
 v[0]=v0; v[1]=v1;
}

void decipher(unsigned int num_rounds, uint32_t v[2], uint32_t const key[4]) {
 unsigned int i;
 uint32_t v0=v[0], v1=v[1], delta=0x9E3779B9, sum=delta*num_rounds;
 for (i=0; i < num_rounds; i++) {
 v1 -= (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + key[(sum>>11) & 3]);
 sum -= delta;
 v0 -= (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + key[sum & 3]);
 }
 v[0]=v0; v[1]=v1;
}

Els canvis respecte al codi font de referència són menors:

  • El codi font de referència utilitzava el tipus unsigned long en lloc de l' uint32_t net de 64 bits.
  • El codi font de referència no utilitzava tipus const.
  • El codi font de referència va ometre parèntesis redundants, utilitzant la precedència C per escriure la funció rodona com, per exemple, v1 += (v0<<4 ^ v0>>5) + v0 ^ sum + k[sum>>11 & 3] ;

El valor recomanat per al paràmetre "num_rounds" és 32, no 64, ja que cada iteració del bucle fa dues rondes de xifrat Feistel. Per millorar addicionalment la velocitat, el bucle es pot desenrotllar calculant prèviament els valors de suma+clau[].

Cripanàlisi

[modifica]

El 2004, Ko et al. va presentar un atac diferencial de clau relacionada a 27 de les 64 rondes de XTEA, que va requerir 2 20,5 textos en pla escollits i una complexitat temporal de 2 115,15.

El 2009, Lu va presentar un atac de rectangle de clau relacionada a 36 rondes de XTEA, trencant més rondes que qualsevol resultat criptoanalític publicat anteriorment per a XTEA. El document presenta dos atacs, un sense i amb una hipòtesi de clau feble, que correspon a 2 64,98 bytes de dades i 2 126,44 operacions, i 2 63,83 bytes de dades i 2 104,33 operacions respectivament.[4]

Referències

[modifica]
  1. «XTEA» (en anglès). [Consulta: 1r octubre 2024].
  2. «xtea» (en anglès). [Consulta: 1r octubre 2024].
  3. «XTEA Encrypt & Decrypt - A.Tools» (en anglès). [Consulta: 1r octubre 2024].
  4. Lu, Jiqiang (en anglès) International Journal of Information Security, 8, 1, 02-07-2008, pàg. 1–11. DOI: 10.1007/s10207-008-0059-9. ISSN: 1615-5262.