Come crittografare una password memorizzata in un database (è necessario decodificare in seguito)

8

Sto lavorando su un sistema che può connettersi a qualsiasi numero di sistemi diversi. Qualcuno inserisce le credenziali per un sistema a cui connettersi e il mio sistema memorizza le credenziali e le usa per autenticarsi e comunicare con esso in un secondo momento (cosa che succederà senza interazione dell'utente).

Tutte le altre domande come questa hanno la risposta "hash hash hash!", ma puoi vedere che hashing non funzionerà per me dato che ho bisogno di decrittografare la password in seguito per connettermi agli altri sistemi (che sono agnostici di il mio).

In questo momento sto pensando che dovrei generare dinamicamente una chiave casuale per ogni nuovo sistema e memorizzarla su disco, quindi memorizzare la password (crittografata con un algoritmo simmetrico) nel database. In questo modo le informazioni nel solo database non sono sufficienti per decodificare la chiave.

È meglio che posso fare?

    
posta 31.01.2012 - 17:29
fonte

2 risposte

4

Sei corretto se il sistema a cui ti stai connettendo non può accettare nient'altro che una password come credenziale. Se questo è il modo in cui funziona il sistema remoto, è sfortunatamente progettato e dovrebbe essere esteso, se possibile, per accettare qualche altro tipo di token. Esempi di token più appropriati sono ticket Kerberos, chiavi SSH, credenziali OpenID o altre credenziali personalizzate per applicazione.

Tutte le buone soluzioni di autenticazione hanno qualcosa in comune: consentono all'utente di autorizzarti a connetterti per loro conto, senza doverti fornire le credenziali. Un buon sistema consente al mio assistente amministrativo di acquistare biglietti aerei per mio conto. Non richiede che il mio amministratore impersoni me.

Se, tuttavia, i sistemi remoti sono mal progettati e non possono accettare questo tipo di credenziali delegate, non c'è altra scelta che memorizzare le password. In questo caso, è consuetudine nascondere la password nel database usando una sorta di "chiave di crittografia e algoritmo". (Ad esempio, AES codifica le password con una chiave memorizzata su disco.) Questo non deve essere confuso con la crittografia reale; è solo offuscamento. Ma può essere utile offuscarsi se non hai altre scelte.

Una soluzione migliore di una singola password memorizzata su disco è una chiave hardware che esegue la decrittografia per te. Tale dispositivo viene spesso chiamato modulo di sicurezza hardware e spesso assume la forma di una smartcard (a volte è un dispositivo montato su rack completo, una scheda o una chiave USB). Presentare la password crittografata all'HSM e restituire la password non crittografata. Il vantaggio di questo approccio è che se qualcuno clona il disco, non è ancora possibile decrittografare le password. Gli HSM sono difficili da clonare fisicamente, rendendo molto più difficile per un utente malintenzionato rubare le credenziali senza essere rilevato. Nei migliori progetti, il processo che parla con HSM ha una credenziale che viene inserita manualmente al boot e viene memorizzata solo in memoria. Quindi i processi casuali non possono interrogare l'HSM e, se la macchina è scollegata, non può più accedere alle password. Anche in questo scenario, è possibile che l'hacker induca il sistema a decodificare tutte le password per lui, ma la superficie di attacco è notevolmente ridotta.

    
risposta data 31.01.2012 - 17:59
fonte
0

Dovresti generare una chiave di crittografia dalla password dell'utente sul tuo sistema.

In questo modo, nessuno può vedere alcuna password a meno che non abbia già la password dell'utente.

Tuttavia, ciò significa che non puoi reimpostare le password degli utenti.

    
risposta data 31.01.2012 - 17:31
fonte

Leggi altre domande sui tag