XTEA
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]
XTEA | |
---|---|
Dues rondes Feistel (un cicle) de TEA | |
Detall | |
Estructura | Xarxa del tipus Feistel |
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
modificaAquest 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
modificaEl 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- ↑ «XTEA» (en anglès). [Consulta: 1r octubre 2024].
- ↑ «xtea» (en anglès). [Consulta: 1r octubre 2024].
- ↑ «XTEA Encrypt & Decrypt - A.Tools» (en anglès). [Consulta: 1r octubre 2024].
- ↑ 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.