Qual è il significato del termine "stringa semplice" per la stringa SALT in crypt Unix usando SHA-256 e SHA-512?

5

In crittografia Unix usando SHA-256 e SHA-512 il autore, Ulrich Drepper, introduce la stringa SALT come segue (evidenziata da me):

For the SHA-based methods the SALT string can be a simple string of which up to 16 characters are used.

Qual è la logica che chiama questa stringa una stringa semplice ? Cosa significa? Quali sono le conseguenze? Sono particolarmente interessato ai casi limite di fornire una stringa di 16 byte NUL, ad esempio.

    
posta hakre 23.07.2013 - 18:00
fonte

2 risposte

3

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).

    
risposta data 23.07.2013 - 21:49
fonte
1

In questo contesto una stringa semplice è qualsiasi array di caratteri in C, ad esempio: char[] . Il codice sta eseguendo un strlen () quindi è terminato con null. Un sale dovrebbe essere un nonce crittografico.

    
risposta data 23.07.2013 - 21:19
fonte

Leggi altre domande sui tag