Cifratura a XOR

Da Hacknowledge.

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:

Primo bitSecondo bitBit risultato
110
101
011
000

[modifica] 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:

  • Si ha un testo in chiaro in caratteri ASCII;
  • Il testo in caratteri ASCII viene convertito in caratteri esadecimali;
  • I caratteri esadecimali vengono convertiti in codice binario;
  • 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;
}

In Java:

char[] xor_string(char[] str, char[] key) {
    int i;
    //str è la stringa, key è la chiave	
    for(i=0; i<str.length; i++) {
        str[i] =(char) (str[i]^key[i%key.length]);						
    }
 
    return str;
}

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:

  • Sia il mandante che il destinatario devono conoscere la chiave binaria, che durante la trasmissione potrebbe venir intercettata;
  • 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.

Strumenti personali