È sicuro utilizzare le chiavi pubbliche Diffie-Hellman come protezione da attacchi di riproduzione?

1

Ho un caso interessante riguardante la protezione dagli attacchi di replay. Partendo dal presupposto che Alice e Bob hanno utilizzato lo scambio di chiavi Diffie-Hellman per stabilire una sessione temporanea sicura, sarebbe sicuro per loro utilizzare la parte pubblica delle loro chiavi DH come seeders nonce in combinazione con HMAC per proteggere dagli attacchi di replay? In pseudo codice -

Stabilire una sessione:

a:
    (dhA, dhSecret) = DH_GEN(common)
    a->b (dhA)

b:
    (dhB, dhSecret) = DH_GEN(common)
    b->a (dhB)

a:
    a<-b (dhB)
    sessionKey = DH_KEY(dhB, dhSecret)

b:
    b<-a (dhA)
    sessionKey = DH_KEY(dhA, dhSecret)

Ora, quando Alice vuole inviare alcuni dati a Bob:

a:
    data = ENCRYPT(sessionKey, data)
    dhA++
    hmac = HMAC(sessionKey, data | dhA)
    a->b (data, hmac)

E sul lato di Bob il processo è invertito:

b:
    b<-a (data, hmac)
    if (hmac == HMAC(sessionKey, data | dhA+1)) {
        dhA++
        data = DECRYPT(sessionKey, data)
    }

La stessa cosa accade nella direzione opposta:

b:
    data = ENCRYPT(sessionKey, data)
    dhB++
    hmac = HMAC(sessionKey, data | dhB)
    b->a (data, hmac)

a:
    a<-b (data, hmac)
    if (hmac == HMAC(sessionKey, data | dhB+1)) {
        dhB++
        data = DECRYPT(sessionKey, data)
    }

E la seconda domanda: sarebbe più facile e altrettanto sicuro usare un nonce autoincrementante a partire da un numero fisso (per esempio 0) invece di usare chiavi pubbliche DH piuttosto grandi per il nonce iniziale?

Quali sono i pericoli (se ce ne sono) di tale approccio, a parte un possibile attacco MITM durante la sessione stabilita che può essere contrastato usando qualche forma di Diffie-Hellman KE autenticato (ad esempio con le chiavi pubbliche generate firmate da certificati attendibili durante lo scambio)?

Grazie

    
posta BeagleEagle 06.03.2014 - 13:32
fonte

2 risposte

1

Un nonce è un "numero usato una volta".

Questa è una domanda che chiede "dovrei usare sempre lo stesso valore per il mio nonce". La risposta è no.

Inizia con un numero che non è prevedibile, ad es. da una buona fonte casuale.

Modifica 2: hai dato la risposta da solo. Il nonce non deve essere tenuto segreto. Ma la chiave condivisa DH deve essere. Se usi la chiave per il nonce dovrai quindi mantenere il segreto nonce ...

Modifica: penso che quello che abbiamo qui è che nessuno ha mai considerato la domanda, nello stesso modo in cui nessuno ha mai chiesto "è sicuro di lavarmi i denti con la punta di lucidatura su Dremel". Passare del tempo a pensare alla domanda è una perdita di tempo.

  • Per lavarsi i denti, usa uno spazzolino da denti.
  • Per un nonce, usa una buona fonte casuale.

Quindi vai avanti con il prossimo lavoro.

Oppure, per essere leggermente meno snarky, è necessario assicurarsi che il numero venga usato una sola volta. Una buona fonte casuale lo raggiunge statisticamente. Usando per es. l'IP remoto del tempo lo raggiunge fisicamente. Nessuno di questi utilizza informazioni che devono essere mantenute segrete.

    
risposta data 06.03.2014 - 14:13
fonte
0

Alla tua seconda domanda - usa un nonce autoincrementante a partire da 0 (per esempio), se idealmente un nonce non è difficile da indovinare? Un nonce a incremento lineare è, per sua natura, prevedibile.

    
risposta data 06.03.2014 - 18:30
fonte