Pepper (crittografia)
# Pepper (crittografia)

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.

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

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.

