In passato ho usato varchar(255)
per memorizzare le password con hash (senza sale). È ancora abbastanza? O sono richiesti campi più lunghi?
La dimensione del campo nel database deve corrispondere esattamente alla dimensione dell'output della funzione di derivazione della chiave. Quindi se l'output è lungo 60 caratteri , usa un varchar(60)
(o forse char(60)
se è più piccolo o più veloce nel tuo database) .
E per favore, non solo cancellare la password e chiamarla un giorno. Fallo bene .
Un campo di database più lungo o un tipo diverso non fa alcuna differenza per la sicurezza, se questa è la tua domanda.
Dovresti scegliere una lunghezza del campo che sia sufficientemente lunga solo per contenere l'intera lunghezza di bit dell'hash risultante. Questo è solo per l'overhead minimo di archiviazione e le prestazioni. (Vedi questo come guida link )
Un algoritmo di hash restituirà esattamente la stessa quantità di dati (è la sua lunghezza di bit) indipendentemente dalla quantità di dati inseriti.
vale a dire. (password o password + sale o 100 righe di testo) hash restituirà esattamente la stessa quantità di bit dopo l'hashing attraverso lo stesso algoritmo.
Per aumentare la sicurezza dovresti cambiare il modo in cui hai gestito l'hashing, la raccolta e la conservazione di sale (se lo fai) come è già stato detto.
Qualunque input tu usi, hashing produce sempre un risultato con la stessa lunghezza.
Inoltre, la salatura non influisce sulla lunghezza dell'hash, perché è necessario immettere il sale prima di applicare la funzione di hashing: hash(password+salt)
.
Non è necessario utilizzare i campi DB più lunghi della lunghezza dell'output di hashing.
Inoltre, l'iterazione della funzione di hashing non influisce sulla lunghezza: length(hash(hash(input))) == length(hash(input))