Glossario

Cos'è Salt (crittografia)?

Un salt crittografico è un valore casuale che viene combinato con una password o un altro input prima che venga elaborato da una funzione hash o da una funzione di derivazione della chiave, garantendo che input identici producano output diversi e rendendo inefficaci le tabelle di attacco precalcolate.

Noto anche come: salt, cryptographic salt

Senza un salt, password identiche producono sempre hash identici. Un attaccante con una tabella precalcolata che mappa le password comuni ai loro valori hash (una rainbow table) può cercare immediatamente qualsiasi hash corrispondente in un database rubato. Il salting sconfigge questo attacco mischiando un valore casuale univoco in ogni password prima dell'hashing. Anche se due utenti hanno la stessa password, salt diversi garantiscono output hash diversi.

Un salt non deve essere segreto — viene tipicamente archiviato in plaintext insieme all'hash o alla chiave derivata. Il suo scopo è costringere l'attaccante a calcolare ogni hash individualmente invece di usare tabelle precalcolate. Un salt casuale da 16 byte fornisce 2^128 variazioni possibili per ogni password, rendendo la precomputazione completamente impraticabile.

I salt sono essenziali in due contesti: l'hashing delle password (dove proteggono gli hash delle password memorizzate nei database) e la derivazione delle chiavi (dove garantiscono che la stessa passphrase produca chiavi derivate diverse per operazioni diverse). In entrambi i casi, il salt deve essere generato usando un generatore di numeri casuali crittograficamente sicuro ed essere univoco per ogni operazione — mai riutilizzato tra utenti o operazioni di cifratura.

Come Vaulted usa Salt (crittografia)

Quando viene aggiunta una passphrase a un segreto di Vaulted, viene generato lato client un salt casuale da 16 byte tramite la Web Crypto API. Questo salt viene inserito in PBKDF2 insieme alla passphrase e a 100.000 iterazioni per derivare una chiave di wrapping AES-KW. Il salt viene poi incluso nel frammento URL affinché il browser del destinatario possa ri-derivare la stessa chiave di wrapping dalla passphrase. Ogni segreto con una passphrase riceve il proprio salt univoco, garantendo che la stessa passphrase usata su segreti diversi produca chiavi di wrapping diverse.