Password master hash e chiave di crittografia generata in un programma di gestione password

0

Sto scrivendo un'applicazione di gestione password WPF per esercitarti nella programmazione, finora questo è lo schema che intendo utilizzare per memorizzare la password principale e la password del singolo sito:

Password principale:

  • Genera un sale casuale
  • Hash della password principale + sale con SHA256
  • Memorizzato l'hash e salt in DB come testo.

Per ogni singola password del sito:

  • Genera un sale casuale
  • Hash master password + sale con SHA256
  • Utilizza l'hash come chiave di crittografia AES256 per crittografare la password del sito.
  • Archivia la password del sito crittografato come blob binario e il sale come testo nel database.

Ovviamente per farlo funzionare l'utente dovrà ridigitare la password principale ogni volta che vorrà decifrare una password del sito, o dovrò memorizzare la master password in memoria.

Ora alla mia domanda:

  • Devo usare la stessa funzione di hash mentre eseguo il hashing della password principale e la creazione della chiave di crittografia, oppure dovrei usare 2 diverse funzioni di hash?
  • Il modo in cui gestisco la singola password del sito ha senso?
posta gzup 04.06.2015 - 12:49
fonte

2 risposte

1

Se si desidera creare una chiave di crittografia o memorizzare una password con hash, si desidera utilizzare una funzione di derivazione della chiave , non una semplice funzione di hashing come SHA-256. Un KDF è come un hash che viene applicato molte volte, ma in genere è progettato per essere computazionalmente costoso al fine di rendere più difficili le ricerche di forza bruta. Mentre potresti essere in grado di usare SHA-256 come KDF chiamandolo più volte, questo non è il modo standard per fare le cose, e potrebbe essere molto meno sicuro di quanto sembri dato che hai bisogno di un numero molto elevato di iterazioni per fornire un efficace mitigazione contro gli attacchi a forza bruta.

I più popolari (leggi: attentamente studiati e probabilmente sicuri) KDF in uso corrente sono PBKDF2 ("basato su password funzione di derivazione chiave 2 ") e bcrypt . O è adatto per l'hashing e la memorizzazione di password, nonché per la creazione di chiavi di crittografia. Ci sono anche alcuni algoritmi più recenti come scrypt che potrebbero essere più sicuri sotto alcune definizioni, ma è a mia conoscenza che sono più recente e meno studiato. "Sicurezza" non è, ovviamente, una variabile numericamente quantificabile, quindi non è del tutto significativo affermare che "l'algoritmo X è la scelta più sicura."

Generalmente, un KDF assumerà un parametro chiamato fattore di lavoro o il numero di round . Questo descrive quanto sforzo computazionale è richiesto per calcolare un hash o derivare una chiave. Man mano che i computer diventano più veloci, questo parametro deve essere aumentato per garantire che le tue password con hash rimangano sufficientemente resistenti agli attacchi di forza bruta.

    
risposta data 04.02.2016 - 04:42
fonte
0

Disclaimer : non sono affatto un esperto, ho appena studiato questo argomento per lo stesso motivo. Inoltre mi rendo conto che questo è da un po 'di tempo fa.

Un problema che potrebbe sorgere è che potrebbe effettivamente rendere più facile forzare la chiave di crittografia . Poiché gli algoritmi di hashing non sono 1: 1, potrebbero esistere più "password master" valide che producono lo stesso hash che usi per crittografare le password specifiche del sito.

Come menzionato da gzup, vorrei dare un'occhiata a come gli attuali gestori di password lo fanno e cercare di fare affidamento sulla propria crittografia il meno possibile. Inoltre, controlla BCrypt per un algoritmo di hashing più lento per hash la tua password principale (Questo rende la bruteforcing un po 'più noiosa).

    
risposta data 05.01.2016 - 01:20
fonte

Leggi altre domande sui tag