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.