Vés al contingut

Red Pike (xifrat)

De la Viquipèdia, l'enciclopèdia lliure
Red Pike (xifrat)
Detall
EstructuraXarxa del tipus RC5

Red Pike és un algorisme de xifratge del govern del Regne Unit classificat, proposat per al Servei Nacional de Salut pel GCHQ, però dissenyat per a una "amplia gamma d'aplicacions al govern britànic " [1] Arxivat 2004-04-23 a Wayback Machine. Poc se sap públicament sobre Red Pike, excepte que és un xifrat de blocs amb una mida de bloc de 64 bits i una longitud de clau de 64 bits. Segons l'estudi acadèmic del xifrat citat a continuació i citat en un article de Ross Anderson i Markus Kuhn, "utilitza les mateixes operacions bàsiques que RC5 " (afegir, XOR i desplaçament a l'esquerra) i "no té taules de cerca, pràcticament no hi ha programació de claus i només requereix cinc línies de codi"; "la influència de cada bit de clau cau ràpidament en cascada" i "cada xifratge implica de l'ordre de 100 operacions". 64 bits d'entropia de clau ja no es consideren segurs.[1]

Red Pike està disponible per als contractistes aprovats del govern britànic en forma de programari, per utilitzar-lo en sistemes de comunicació governamentals confidencials (no secrets). GCHQ també va dissenyar el sistema criptogràfic Rambutan per al mateix segment.[2]

Tenint en compte que Red Pike és un algorisme de xifratge britànic, el seu nom probablement es refereix a una caiguda particular al districte dels llacs anglès occidental.[3]

Suposat codi font

[modifica]

El febrer de 2014, el suposat codi font de Red Pike es va publicar de la següent manera a la llista de correu Cypherpunk.

 /* Red Pike cipher source code */

 #include <stdint.h>

 typedef uint32_t word;

 #define CONST 0x9E3779B9
 #define ROUNDS 16

 #define ROTL(X, R) (((X) << ((R) & 31)) | ((X) >> (32 - ((R) & 31))))
 #define ROTR(X, R) (((X) >> ((R) & 31)) | ((X) << (32 - ((R) & 31))))

 void encrypt(word * x, const word * k)
 {
   unsigned int i;
   word rk0 = k[0];
   word rk1 = k[1];

   for (i = 0; i < ROUNDS; i++)
   {
     rk0 += CONST;
     rk1 -= CONST;

     x[0] ^= rk0;
     x[0] += x[1];
     x[0] = ROTL(x[0], x[1]);

     x[1] = ROTR(x[1], x[0]);
     x[1] -= x[0];
     x[1] ^= rk1;
   }

   rk0 = x[0]; x[0] = x[1]; x[1] = rk0;
 }

 void decrypt(word * x, const word * k)
 {
   word dk[2] =
   {
     k[1] - CONST * (ROUNDS + 1),
     k[0] + CONST * (ROUNDS + 1)
   };

   encrypt(x, dk);
 }

Referències

[modifica]
  1. «Red Pike (cipher)» (en anglès). [Consulta: 2 octubre 2024].
  2. FRSE, Prof Bill Buchanan OBE. «From AES to Red Pike» (en anglès), 31-10-2022. [Consulta: 2 octubre 2024].
  3. «Red Pike» (en anglès). [Consulta: 2 octubre 2024].