String Comparison Timing Attack in Plain English

3

Qualcuno potrebbe dirmi che cos'è un attacco a tempo per la comparazione delle stringhe in termini semplici? Ho cercato su Google questo, ma tutte le spiegazioni sono molto tecniche. Inoltre, questo attacco è migliore di un attacco di forza bruta? Per favore correggimi se sbaglio, ma credo che questo attacco sia usato per decifrare le password.

    
posta APCoding 22.07.2015 - 00:21
fonte

1 risposta

9

Quando controlli le stringhe per l'uguaglianza, devi controllare che ogni carattere corrisponda. La maggior parte dei linguaggi di programmazione prenderà una scorciatoia e restituirà False - o Non uguale - non appena troveranno un singolo carattere che non corrisponde. Ad esempio,

str1 = "1111111111111111"
str2 = "1101111111111111"

Sai che non sono uguali appena lo hai colpito, perché continueresti a controllare?

Questo è super-sfruttabile. Immagina di provare a craccare una password (o un hash, o un tag MAC, o qualsiasi cosa che debba essere confrontata per l'uguaglianza), sapendo che il server eseguirà un confronto lazy string da qualche parte all'interno, potrei ottenere i seguenti tempi risultati (completamente inventati):

Tried "aaaaaaaa", it took 0.2 ms
Tried "bbbbbbbb", it took 0.2 ms
Tried "cccccccc", it took 0.4 ms

Fantastico, ora so che la prima lettera è "c" perché ci è voluto più tempo. Ora posso fare lo stesso trucco con "caaaaaaa", "cbbbbbbb", ecc. Craccare una lettera alla volta è HUGELY più veloce che spezzare l'intera password alla volta.

Questo confronto "lazy" delle stringhe è generalmente una buona cosa per i programmatori perché fa girare le cose più velocemente, ma fa male alla sicurezza. I confronti di stringhe sicure controlleranno fino alla fine, anche se troveranno una differenza in modo che non ci sia mai una differenza temporale.

    
risposta data 22.07.2015 - 00:43
fonte

Leggi altre domande sui tag