utilizzando il contatore anziché il sale per l'hashing

3

Sto sviluppando un proprio protocollo per lo scambio sicuro di messaggi. Ogni messaggio contiene i seguenti campi: HMAC, ora, sale e messaggio stesso. HMAC è calcolato su tutti gli altri campi utilizzando la chiave segreta conosciuta.

Il protocollo dovrebbe proteggere dagli attacchi di risposta. In caso di intervallo di tempo elevato, il record "time" protegge dall'attacco di replay (entrambi i lati dovrebbero avere orologi sincronizzati). Ma per proteggersi da attacchi replay su brevi intervalli di tempo (gli orologi non sono troppo precisi) sto pianificando di sostituire il campo "salt" con contatore crescente ogni volta, quando viene inviato un nuovo messaggio. La parte ricevente getterà via messaggi con valore contatore inferiore o uguale al contatore dei messaggi precedente.

Cosa sto facendo male?

Il valore iniziale del contatore può essere diverso (posso usare l'identificatore della parte come valore iniziale), ma sarà noto all'attaccante (identificatore della parte trasmesso in forma non crittografata). ( Cos'è un sale abbastanza buono per un SaltedHash? )

Ma l'attaccante può precomputare le tabelle arcobaleno per il contatore + 1, contatore + 2, contatore + 3 ... se non userò sale veramente casuale?

    
posta fk0 27.11.2013 - 15:17
fonte

1 risposta

3

Il problema principale è che i sali dovrebbero preferibilmente essere globalmente unici per evitare tabelle arcobaleno esistenti. Se si sceglie di utilizzare hash 1,2,3,4,5, ecc., Esiste già una tabella arcobaleno per loro. È leggermente meno rischioso se lo fai come incrementi di un numero casuale che rende improbabile un attacco, tuttavia non ci sono davvero buone ragioni per farlo. È molto meglio usare un valore casuale per ciascuno. Non ci sono molti dati extra da archiviare.

Per quanto riguarda il modo in cui si applica alla tua situazione, sembra che tu stia cercando di scambiare messaggi. Gli hash non sono usati per lo scambio di messaggi poiché sono a senso unico. Sono usati solo per dire se qualcun altro ha lo stesso valore senza memorizzare il valore reale. In genere, un sale è necessario solo per le password, non per la firma dei messaggi, quindi non sono sicuro che i sali e gli hash si applichino anche a ciò che stai cercando di fare come descritto.

    
risposta data 27.11.2013 - 16:22
fonte

Leggi altre domande sui tag