it-swarm-eu.dev

È possibile archiviare le password in modo sicuro utilizzando la crittografia reversibile?

Tutti affermano che è necessario utilizzare un hash non reversibile quando si memorizzano le password in modo che, anche se il database è trapelato, le password stesse siano ancora sicure. Mi chiedo se sia comunque possibile utilizzare la crittografia reversibile per archiviare le password.

Come minimo, dovresti richiedere che qualsiasi exploit che perde il database (iniezione SQL, accesso alla shell del server, ecc.) Non perda la chiave di crittografia e che non sarebbe ragionevolmente possibile capire la chiave di crittografia usando una password in chiaro nota se si dispone del database trapelato.

Non sto seriamente pensando di farlo perché sembra che anche se tecnicamente possibile, sarebbe difficile farlo correttamente, ma sembra un problema interessante.

23
Steve

La crittografia reversibile non viene comunemente utilizzata per le password poiché i requisiti e i parametri specifici dell'autenticazione con password sono incompatibili con la debolezza della crittografia reversibile.

Il principale punto debole della crittografia reversibile è semplice: se la chiave viene compromessa, i dati crittografati vengono compromessi, punto.

Le password vengono utilizzate sempre, ogni volta che gli utenti effettuano l'accesso. Pertanto, il processo di autenticazione deve poter accedere alle credenziali degli utenti in qualsiasi momento, in modo automatizzato, senza controlli ostruttivi. Ciò significa che la chiave per la crittografia reversibile deve essere sempre su disco o in memoria. Se quel programma, disco o memoria sono in qualche modo compromessi, allora tutte quelle password crittografate in modo reversibile sono tutte compromesse in un colpo solo.

Al contrario, considera l'uso di hash non reversibili. Se il programma, il disco o la memoria sono compromessi, l'attaccante ottiene gli hash "bloccati" e non c'è chiave. Possono quindi attaccare ulteriormente - noto attacco di testo cifrato, forza bruta, ecc. - ma non hanno ancora "vinto".

Usiamo continuamente la crittografia reversibile (per così dire con chiave): dischi, file, allegati e-mail. Ciò che tutti questi usi hanno in comune, tuttavia, è che incoraggiano (se non richiedono) l'intervento umano per fornire la chiave.

Non sono sicuro del perché te lo stia chiedendo, ma che dire di un modello ibrido? Considera che potrebbe essere ragionevole archiviare entrambi testo cifrato reversibile e non reversibile per le password degli utenti. Quando vengono create le password, memorizzare due versioni crittografate: una creata con una funzione di hashing unidirezionale e l'altra creata con un algoritmo di crittografia asimmetrica ("crittografia a chiave pubblica"). Tutti i processi di autenticazione automatizzati utilizzano gli hash non reversibili per scopi di autenticazione. Mantieni la metà della "chiave pubblica" della coppia sul sistema per generare le password crittografate e archivia la metà della "chiave privata" della coppia offline . Nel caso in cui sia necessaria la password in chiaro, porta offline la password crittografata e decodificala con la chiave appropriata. Finché la chiave di decodifica non è accessibile al sistema di autenticazione, un utente malintenzionato non può trarre vantaggio dal fatto che è stata utilizzata la crittografia "reversibile" per memorizzare le password in chiaro.

Ciò sarà utile solo se la necessità di accedere alle password in chiaro non è un'esigenza automatizzata, ovviamente. Ma mi sembra un'idea ingegnosa.

21
gowenfawr

È possibile archiviare le password in modo sicuro utilizzando la crittografia reversibile?

Sì, ma è molto più difficile e richiede uno sforzo e una spesa molto maggiori. La digitazione è difficile da fare bene.

Per supportare la crittografia reversibile (non necessariamente simmetrica come note @goenfawr ), è necessaria almeno una chiave (due per la crittografia a chiave pubblica). È necessario generare la chiave, archiviarla in modo sicuro, proteggerla dalla corruzione o dalla distruzione, recuperarla per l'uso, proteggerla mentre è in uso e sostituirla periodicamente.

Una parte significativa del problema è come proteggere la chiave mentre non è in uso. Se si crittografa la chiave, è necessaria un'altra chiave per decrittografarla. Nel qual caso sei tornato da dove hai iniziato. Altri metodi di protezione utilizzano hardware speciale, sistemi operativi sicuri o persino computer personalizzati con memoria e processori separati per i parametri di sicurezza. Tutte queste soluzioni richiedono costi aggiuntivi di formazione e supporto.

Confronta queste soluzioni con l'uso di un computer al dettaglio, un sistema operativo al dettaglio e una funzione hash.

6
this.josh

Una cosa da aggiungere alle risposte esistenti è che è possibile utilizzare la crittografia simmetrica (reversibile) per memorizzare i segreti (comprese le password) ma è un po 'più complessa/costosa.

Un buon esempio di ciò è rappresentato dalle reti di bancomat/bancomat, che tradizionalmente utilizzavano la gestione simmetrica delle chiavi (sebbene si stiano spostando da una soluzione basata su PKI).

La chiave (nessun gioco di parole previsto) è che le chiavi di crittografia sono archiviate in una posizione attendibile, in questo caso è necessario seguire un modulo di sicurezza hardware (HSM) e seguire rigorose procedure relative al caricamento e alla gestione delle chiavi, per garantire che le chiavi rimangano segreto.

4
Rory McCune

Dai un'occhiata alla pagina wiki di Ciphers. Sebbene ci siano molte cifre sicure, c'è sempre il rischio di perdere la chiave. L'uso di un hash unidirezionale evita questo rischio non avendo una chiave.

Un principio dell'ingegneria della sicurezza è ridurre al minimo le informazioni ottenibili dato che il sistema è compromesso.

2
nik3daz