Password recuperabile crittografata

2

Ho un enigma della password. Ho bisogno di memorizzare una password crittografata in una tabella DB ma in un modo che mi consenta di recuperare la password in seguito come testo semplice.

Si prega di notare che questa è una decisione guidata dal business che ho avuto il compito di trovare una soluzione tecnica per. Qualcuno potrebbe fornire suggerimenti su come ciò potrebbe essere realizzato?

Mi sono imbattuto in queste domande che non sembrano fornire la soluzione al mio problema.

Memorizzare la password di un utente in modo recuperabile
Archiviazione sicura dei dati in un database

    
posta BustedSanta 21.11.2014 - 19:00
fonte

2 risposte

6

Se lavori con solo le necessità online della password per l'integrazione con un sistema mentre l'utente è connesso, allora dovresti memorizzare le password crittografate sia con una chiave di database sia con una chiave derivata basata su password per il tuo servizio. Quando l'utente invia la password per l'accesso, è possibile utilizzarla per produrre una chiave derivata da password e utilizzare tale PDK per decodificare il valore dal DB.

Si crittografa con la chiave DB stessa per garantire una crittografia strong contro un attacco offline in cui vengono persi solo i dati del DB. Si utilizza il PDK (molto più debole) per evitare un compromesso banale nel caso in cui il DB e la chiave DB siano persi entrambi.

La chiave per progettare un sistema come questo è provare a mettere i pezzi necessari per ottenere la password in più posti distinti possibili. Se si dispone di un pezzo sul server DB (chiave db), un pezzo sul server Web (credenziali di connessione db), un pezzo nei dati DB e un pezzo che è solo in possesso dell'utente, allora un utente malintenzionato deve compromettere molto di più aree per far fallire il sistema.

    
risposta data 21.11.2014 - 21:42
fonte
2

Se hai bisogno di recuperare la password in chiaro a un certo punto, allora hai davvero bisogno di encryption e non di hashing (fai attenzione che molte persone chiamano "encryption" che cosa è veramente hashing). Suppongo che il tuo "bisogno di business" derivi dalla necessità di supportare alcuni protocolli in cui il server deve conoscere la password in chiaro (ad esempio Metodo di autenticazione APOP nel protocollo POP).

Il punto cruciale con la crittografia è che è fatto con un tasto , che è un dato molto sensibile, dal momento che conoscere la chiave consente di decrittografare le password. Il server dovrà conoscere la chiave quando è necessario memorizzare una password (dopo la registrazione dell'utente e la modifica della password) e quando la password deve essere recuperata (in base alle esigenze aziendali). Se si archivia la chiave nel database stesso, così com'è, allora non si è ottenuto nulla con la crittografia: si cripta la password perché si immagina il caso di un utente malintenzionato che ottiene l'accesso in lettura al contenuto del database (ad esempio con qualche attacco SQL injection) ma non per l'intero server.

Il tuo DB potrebbe essere in grado di eseguire la crittografia per te, senza memorizzare la chiave in una postazione che potrebbe essere rivelata tramite l'iniezione SQL. È possibile trovare alcune indicazioni per SQL Server .

    
risposta data 21.11.2014 - 19:40
fonte

Leggi altre domande sui tag