Utilizza la chiave privata protetta da passphrase per convalidare le password degli utenti

0

Sono curioso di convalidare le password degli utenti (per gli accessi e simili). Vedo che è normale usare un hash salato per memorizzare (in sicurezza) le password degli utenti con l'intento di convalidare i login degli utenti.

La mia domanda:

Utilizzare le chiavi private protette da passphrase sarebbe un metodo di sicurezza equivalente a farlo?

Possibile implementazione:

Quando un utente crea un account sulla tua piattaforma ti darebbe la password che intende usare. Il server prenderebbe quindi la password e genererà una nuova chiave privata (in base alla scelta di entropia) e utilizzerà la password dell'utente come passphrase per "proteggere" la chiave privata. Dovresti quindi memorizzare la chiave privata protetta da passphrase abbinata al nome utente in modo che quando qualcuno cerca di accedere con un nome utente (registrato), puoi cercare la chiave privata e provare a sbloccarla con la password fornita.

    
posta MichaelMitchell 02.02.2018 - 09:56
fonte

2 risposte

2

Ok, vediamo cosa è coinvolto in entrambi i casi.

  1. Standard hash salato

    Durante la creazione della password, l'utente fornisce la password di testo chiaro. Viene sottoposto a hash con un algoritmo salato sicuro e memorizzato solo l'hash

    Su ulteriori accessi, l'utente fornisce la password di testo chiaro. Il sale viene estratto dall'archivio password e l'hash viene confrontato

    La sicurezza dipende in gran parte dalla qualità dell'algoritmo di hashing, ma è un punto strongmente documentato, e sulla qualità intrinseca della password - legge l'entropia della generazione della password

  2. La password viene utilizzata come password per una chiave privata

    È fondamentalmente lo stesso processo, l'unica differenza è che l'algoritmo di hash viene sostituito con un tentativo di sbloccare una chiave protetta da password. Ora dipende dall'algoritmo di crittografia utilizzato per crittografare la chiave privata. Anche questo è un punto strongmente documentato.

Ciò significa che hai solo modificato un algoritmo di hashing con uno crittografico. A proposito, l'algoritmo di hashing originale usato nel vecchio sistema Unix era basato sulla crittografia di una stringa di byte a zero bit con la password utente con DES (*), non lontano dalla tua proposta.

TL / DR: dipenderà solo dall'algoritmo di hashing e dall'algoritmo di crittografia utilizzato per crittografare la chiave privata

(*) In effetti è un po 'più complesso perché l'operazione di crypt è stata ripetuta 25 volte e perturbata con sale ( ref. ) - crediti per @RoyceWilliams per la precisione.

    
risposta data 02.02.2018 - 10:57
fonte
2

Per favore non farlo.

I due grandi inconvenienti della crittografia delle password piuttosto che il loro hashing sono la velocità per l'attaccante e la difficoltà per lo sviluppatore di eseguire in modo sicuro .

Innanzitutto, i veri algoritmi di hashing delle password sono progettati per essere molto lenti . Con il metodo proposto di un round singolo di crittografia, gli autori di attacchi con accesso ai dati possono provare miliardi di password al secondo e probabilmente bruteforce le password della maggior parte della tua base di utenti.

In secondo luogo, non appena tenti di eseguire il crypto da te stesso, è molto più facile commettere un errore che può essere sfruttato da un utente malintenzionato.

È molto più sicuro usare un algoritmo di hashing moderno e ben definito (tradizionalmente pbkdf2 o bcrypt, e più recentemente scrypt o Argon2) con alti fattori di lavoro.

Pornin risponde bene a questa domanda .

    
risposta data 02.02.2018 - 17:05
fonte

Leggi altre domande sui tag