Il testo significa "semplice" per opposizione a ciò che è stato usato nel vecchio tradizionale basato su DES crypt()
dove il sale era un valore a 12 bit, rappresentato come esattamente due caratteri in un set limitato. Ulrich Drepper vuole dire che la sua creazione è meno schizzinosa e può prendere come sale qualsiasi sequenza fino a 16 byte.
Anche se la funzione di hashing può funzionare con qualsiasi byte (compresi gli zeri, che non sono in alcun modo speciali per una funzione hash), il codice C mostrato nel testo a cui si fa riferimento utilizza un'API basata su stringhe:
char *
sha256_crypt (const char *key, const char *salt)
vale a dire. il sale si fermerà appena prima del primo byte del valore zero, o subito dopo il 16 ° byte, a seconda dell'evento che si verifica per primo. Inoltre, il valore di salt sarà parte della stringa di output prodotta, quindi il sale dovrebbe consistere in caratteri ASCII stampabili e non includere il segno '$'
, poiché è ciò che viene usato come separatore all'interno di quella stringa.
Un modo semplice per generare una "stringa di sale corretta" per questa funzione è generare una sequenza di esattamente 12 byte casuali (presi da un buon PRNG, cioè /dev/urandom
), e codificarli con Base64 . Questo genererà 16 caratteri casuali, in un alfabeto contenente lettere (maiuscole e minuscole), cifre, '+'
e '/'
- e nessun altro, in particolare nessun '$'
e nessun carattere di controllo fastidioso. Il sale avrà ancora 96 bit di entropia, rendendo il riutilizzo del sale considerevolmente improbabile (quindi le cose andranno bene).