Modulo senza fili? quale scelgo...

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? :smiley: :smiley: :smiley: )

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.