Pepper (crittografia)

sequenza di bit segreta aggiunta ad un input

In crittografia, un pepper è una sequenza di bit segreta aggiunta ad un input, per esempio una password, prima di effettuarne l'hash con una funzione crittografica di hash. Il pepper ha funzione similare al salt, ma a differenza di quest'ultimo non viene salvato insieme all'output della funzione di hash. Le configurazioni più comuni per il pepper sono le seguenti:

  • il pepper è lungo almeno quanto il salt, è salvato separatamente dal valore di cui deve essere fatto l'hash, e spesso è segreto all'interno dell'applicazione;
  • il pepper è un valore di piccole dimensioni generato casualmente, che non viene mai salvato; per verificare se l'input è corretto, l'applicazione itera sull'insieme dei possibili valori che il pepper può assumere (per evitare timing attacks) valutando per ognuno di questi l'output della funzione di hash.[1]

Il pepper aumenta la sicurezza del database in cui vengono salvati i valori di output della funzione di hash, perché aumenta il numero di elementi di cui bisogna essere in possesso per recuperare l'input, rendendo più difficoltoso un attacco brute force.

Esempio di utilizzo

modifica

Di seguito è riportato un esempio incompleto riguardo all'utilizzo di un pepper costante per salvare le password. La seguente tabella contiene due combinazioni di username e password.

Username Password
user1 password123
user2 password123

La password non è salvata, e il pepper di 8-byte (64-bit) 44534C70C6883DE2 è salvato in un luogo sicuro separato dai valori di output dell'hash.

Username Stringa di cui fare l'hashing Valore di output dell'hash = SHA256(Password + pepper)
user1 password123+44534C70C6883DE2 D63E21DF3A2A6853C2DC675EDDD4259F3B78490A4988B49FF3DB7B2891B3B48D
user2 password123+44534C70C6883DE2 D63E21DF3A2A6853C2DC675EDDD4259F3B78490A4988B49FF3DB7B2891B3B48D

A differenza del salt, il pepper non fornisce protezione ad utenti che utilizzano la stessa password, ma protegge da attacchi a dizionario, a meno che l'attaccante non abbia a disposizione il valore del pepper. Siccome lo stesso pepper non viene condiviso tra applicazioni diverse, un attaccante non è in grado di riutilizzare gli hash di un database compromesso ad un altro.

Uno schema completo per il salvataggio delle password solitamente comprende sia l'utilizzo del salt che quello del pepper.

  1. ^ Catena: A Memory-Consuming Password-Scrambling Framework, su citeseerx.ist.psu.edu. URL consultato il 9 dicembre 2016.

Voci correlate

modifica