Come posso progettare efficacemente l'autenticazione della password per la crittografia nel mio progetto?

0

Sto lavorando a un piccolo progetto personale che prevede l'inserimento di una password da parte dell'utente che consentirebbe loro di visualizzare un file di testo che altrimenti verrebbe crittografato.

Ho dei problemi che mi impediscono di memorizzare la password da qualche parte in modo che il programma possa autenticare che è stato inserito correttamente Se non posso garantire il 100% di uptime. Se salvi una password predefinita come stringa letterale, non sarebbe possibile disassemblare il file binario in modo da trovarlo? Sto scrivendo questo in Go se è di qualche rilevanza.

    
posta Grant Seltzer 17.04.2016 - 04:23
fonte

2 risposte

4

Non memorizzare la password ovunque. Invece, derivane una chiave e usa quella chiave per decodificare il file. È possibile memorizzare una stringa sentinella all'inizio del file e controllarla dopo la decrittografia. Se la sentinella non è presente, la password fornita era errata o il file è stato danneggiato. Il valore della sentinella non deve essere tenuto segreto.

La memorizzazione della password, indipendentemente dalla sua oscurità, nel regno della persona che sta per autenticare non fornisce alcuna sicurezza.

    
risposta data 17.04.2016 - 08:53
fonte
1

Non dovresti mai memorizzare una password o una maschera di hash (o salt ) direttamente nel tuo codice. Per la ragione che hai già affermato: qualcuno decompilerà il tuo codice alla fonte. Quindi avranno la password.

Un paio di modi semplicissimi

È possibile eseguire la password tramite un algoritmo di hashing unidirezionale e salvare i risultati da qualche parte (magari in un database). Potresti facilmente scrivere questo metodo tu stesso. Potrebbe essere semplice come XORare ogni carattere nella stringa password con una sequenza di caratteri semi-casuali. Potrebbe essere più complesso (ad esempio, Controlli ridondanti ciclici ). Nessuno di questi metodi avrebbe il severo controllo di un decodificatore.

Un metodo più complesso, ma più sicuro

Questo è il punto in cui inizi a entrare in hash crittograficamente sicuri .

A cryptographic hash function is a hash function which is considered practically impossible to invert, that is, to recreate the input data from its hash value alone. These one-way hash functions have been called "the workhorses of modern cryptography".

...

Storing all user passwords as cleartext can result in a massive security breach if the password file is compromised. One way to reduce this danger is to only store the hash digest of each password. To authenticate a user, the password presented by the user is hashed and compared with the stored hash. (Note that this approach prevents the original passwords from being retrieved if forgotten or lost, and they have to be replaced with new ones.) The password is often concatenated with a random, non-secret salt value before the hash function is applied. The salt is stored with the password hash. Because users have different salts, it is not feasible to store tables of precomputed hash values for common passwords.

Qualche aiuto

Per fortuna, Go ha implementato una versione più vicina (non sono esperto di Go) agli hash crittograficamente sicuri in Vai pacchetto Crypto .

    
risposta data 17.04.2016 - 05:38
fonte

Leggi altre domande sui tag