Esempio di attacco del canale laterale di cronometraggio

1

Comprendo che l'attacco del canale laterale temporale è una misurazione del tempo impiegato per eseguire algoritmi crittografici. Mi piacerebbe vedere un semplice esempio che spiega come l'attacco di sincronizzazione prende posto su qualsiasi algoritmo crittografico.

Grazie.

    
posta David 06.02.2016 - 22:10
fonte

1 risposta

3

Un esempio tangibile è l'attacco a tempo sul confronto tra stringhe. Funziona misurando quanto ci vuole per l'applicazione per confrontare 2 stringhe.

Le implementazioni di confronto delle stringhe predefinite in quasi tutti i linguaggi di programmazione sono ottimizzate e funzionano confrontando 2 stringhe carattere per carattere e avvisano una mancata corrispondenza non appena vedono una differenza tra i 2 caratteri attualmente confrontati.

Quindi, se abbiamo questo codice nella nostra applicazione:

def string_compare(a, b) :
    if (a == b)
        return True
    else
        return False
1: string_compare('abcdefg', 'abctyf2')
2: string_compare('abcdefg', 'abcdefb')

Quello che succede è che (1) e (2) hanno bisogno di tempo diverso per essere eseguiti. (1) fallisce più velocemente di (2) quindi se cambiamo il nostro input (seconda stringa) un carattere alla volta misurando il tempo necessario per il ritorno della funzione, possiamo indovinare la prima stringa.

Per mitigare questo attacco di temporizzazione, dobbiamo cambiare il nostro codice in modo che impieghi una quantità di tempo fissa indipendentemente da quali siano gli input:

def safe_string_compare(a, b) :
    if (sha256(a) == sha256(b))
        return True
    else
        return False
OR

def safe_string_compare(a, b) :
    if len(a) != len(b):
        return False

    result = 0
    for x, y in zip(a, b) :
        result |= x ^ y
    return result == 0

Trovo utile questo riferimento: regole di codifica

    
risposta data 06.02.2016 - 22:34
fonte

Leggi altre domande sui tag