Standardoil:
oh, sia chiaro, io sono un dilettante e potrei aver preso una mega cantonata
Il problema con i procedimenti amatoriali di criptaggio è proprio questo, non siamo del settore, non abbiamo l'esperienza di chi si occupa professionalmente di codici cifrati, e quindi è facilissimo che sfugga una cosa banale che a prima vista ci sembra a prova di bomba (si può dire bomba su un forum?
)
Lo XOR in particolare è talmente semplice che si presta fin troppo a giochetti di reversibilità, come lo swap senza variabile temporanea:
a = a ^ b;
b = a ^ b;
a = a ^ b;
Si crede che sia tutto bello al sicuro xorato la dentro, e basta xorare con qualcos'altro che torna tutto fuori in chiaro. Esempio:
- Alice e Bob hanno un inconfessabile segreto in comune, la Kiave K (che non si trasmettono mai).
- Quando Alice vuole parlare con Bob lo chiama in chiaro: "helo!"
- Bob coscienzioso crea una stringa random B che xora con K e la trasmette ad Alice (il malefico Charlie vedrà ogni volta una stringa totalmente random "Vernam compliant").
- Alice la dexora con K riottenendo B.
- Alice a sua volta crea un'altra stringa random, la xora con K e la manda a Bob (anche qui Charlie vede solo una stringa random da cui non può ricavare nulla).
- Alice e Bob da questo momento si sentono al sicuro e parlano xorando tutti i messaggi sia con B che con A (E Charlie A e B non le può mai conoscere perché non ha K e non la può scoprire)
- Ma Charlie si sfrega le mani, perché due pivelli così non li aveva mai incontrati. Infatti basta xorare tutti i messaggi successivi con la prima stringa random (xorata K) trasmessa da Bob, e con la seconda stringa random (xorata K) trasmessa da Alice, per leggere tutti i messaggi perfettamente in chiaro.
helo
----------->
B ⊕ K
<-----------
A ⊕ K
----------->
A ⊕ B ⊕ M
<-----------
(A ⊕ B ⊕ M) ⊕ (A ⊕ K) ⊕ (B ⊕ K) = M
Si può cercare di confondere le acque, ma il massimo a cui si arriva usando la sola matematica dello XOR, una chiave di partenza K fissa, e un numero sufficientemente elevato di campioni, è ottenere la protezione M⊕K, cioè un normale Vigenère.