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 bit | Secondo bit | Bit risultato |
|---|---|---|
| 1 | 1 | 0 |
| 1 | 0 | 1 |
| 0 | 1 | 1 |
| 0 | 0 | 0 |
[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.

