Algoritmo One Time Pad senza condivisione di chiavi

2

Durante la mia passeggiata al lavoro oggi ho pensato al seguente algoritmo di crittografia e non sono riuscito a determinare il difetto. Usa un time pad che non ha bisogno di essere condiviso e ha un sapore di scambio chiave Diffie-Hellman ad esso:

  1. Dire che Alice vuole inviare un messaggio M a Bob così lei genera un casuale un pad singolo A e invia M '= (M xor A) a Bob.

  2. Bob genera anche un pad monouso B e invia M '' = (M 'xor B) indietro     ad Alice.

  3. Alice usa di nuovo il suo pad singolo e invia M '' '= (M' 'xor A)         torna a Bob.

  4. Bob quindi recupera semplicemente il messaggio originale che è (M '' '             xor B).

Quella cifra inviata nel passaggio 1 è (M xor A). Il cypher invia al punto 2 è (M xor A xo B). Il mittente del cypher nel passaggio 3 è (M xo A xo B xo A) = (M xo B). Bob quindi può decodificare il messaggio finale M = (M xo B xo B). Tutti gli intercettatori vedono solo i messaggi crittografati con una combinazione sicura dei tasti A e B. Anche se Bob può determinare il blocco A di Alice nel passaggio 3, non è mai stato necessario condividere chiavi.

Ecco un semplice esempio a 32 bit (^ = xor):

M = 1234ABCD  secret message
A = 4A3109AD  Alice's key
B = F499803C  Bob'e key

M         = 1234ABCD
M^A       = 5805A260
M^A^B     = AC9C225C
M^A^B^A   = E6AD2BF1
M^A^B^A^B = 1234ABCD

Perché non è perfettamente sicuro? (P.S., sto ignorando i problemi di fiducia e le questioni man-in-the-middle - che possono essere dov'è il problema)

    
posta wcochran 16.09.2016 - 21:51
fonte

2 risposte

7

Un intercettore vedrà tutti e tre i messaggi (M xor A) , (M xor A xor B) e (M xor B)

Li combina con (M xor A) xor (M xor A xor B) xor (M xor B) che dà M

    
risposta data 16.09.2016 - 22:04
fonte
-2

Sei andato e realizzato qualcosa di simile al mio algoritmo di crittografia. Il problema è che One Time Pad funziona solo con l'aggiunta modulare; ciò significa che ogni byte deve essere aggiunto a un byte nel flusso di chiavi. L'operazione generica sarebbe:

M="Ciao mondo!"

K="MyKeypadding"

Supponiamo che la codifica sia UTF-8

M="\ x48 \ x65 \ x6C \ x6C \ x6F \ x20 \ x77 \ x6F \ x72 \ x6C \ x64 \ x21"

K="\ x4D \ x79 \ x4B \ x65 \ x79 \ x70 \ x61 \ x64 \ x64 \ x69 \ x6E \ x67"

Aggiungi ogni byte e modulo 16

for (i = 1; i < = 11; i + 1) {// i < message_length

M[i] = (M[i] + K[i]) % 0xff

}

Che rende M '= "\ x95 \ xDE \ xB7 ..."

E per risolverlo, basta sottrarre la chiave. Se la differenza è inferiore a 0, aggiungi la differenza negativa a 0xff (255).

    
risposta data 17.09.2016 - 01:05
fonte

Leggi altre domande sui tag