Cifratura a XOR

 

Autori: Rootkit per la parte teorica, BlackLight per gli esempi pratici in C e Perl.


Lo XOR (exclusive or) è un connettivo logico dell'algebra booleana utilizzato nei cosiddetti sistemi di crittografia a XOR. Viene utilizzato per una sua utile particolarità: se applicato due volte alla stessa stringa, restituisce la stringa originaria. Ciò è facilmente deducibile osservando i suoi valori in una truth table:






Procedimento

Per cifrare a XOR, si procede in questo modo: Per prima cosa, bisogna creare una chiave binaria; essa può essere lunga quanto il messaggio, ma generalmente viene utilizzata una chiave corta (8 caratteri) ripetuta più volte. In seguito, si procede con i seguenti passi:

1.Si ha un testo in chiaro in caratteri ASCII;

2.Il testo in caratteri ASCII viene convertito in caratteri esadecimali;

3.I caratteri esadecimali vengono convertiti in codice binario;

4.Ai caratteri binari viene applicata la chiave binaria, cambiando i bit con XOR, usando i casi soprariportati in tabella.


Esempio pratico in C:

char* xor_string (char *str, char *key)  {

  int i,j;

 

  // cifrato = stringa XOR chiave

  for (i=1, j=1; i<strlen(str); i++, j++)

    str[i] = str[i]^key[j%strlen(key)];

 

  return str;

}

In Perl:

sub Xor  {

  $text=shift;

  $key=int(shift);

  $crypt=substr($text,0,1);

 

  for ($i=1, $j=1; $i<length($text); $i++,$j++)  {

     $a=ord(substr($text,$i,1));

     $b=ord(substr($key,$j%length($key),1));

     $crypt = $crypt.(chr($a^$b));

  }

 

  return $crypt;

}


La fortuna della cifratura a XOR sta nella sua completa reversibilità. Se come str inserisco la mia stringa in chiaro e come key la mia chiave (una stringa qualsiasi) ottengo un testo cifrato. Se invece possiedo una chiave e un testo cifrato posso inserire come str il testo cifrato e come key la chiave e ottenere il testo originale.

Questo sistema di crittografia è molto sicuro, e può essere utilizzato come un'implementazione di un cifrario one-time-pad. Tuttavia, presenta alcune scomode caratteristiche:

1.Sia il mandante che il destinatario devono conoscere la chiave binaria, che durante la trasmissione potrebbe venir intercettata;

2.Non esistono metodologie per "firmare" il messaggio, ed un possibile intercettatore potrebbe modificarlo a suo piacimento od addirittura spedirne uno falso.


Questi sono solo due dei motivi per i quali la crittografia a XOR non è diventato l'unico sistema di crittografia, ma è in ogni caso usato in algoritmi più avanzati come DES.