Esiste una best practice per memorizzare le password in una crittografia a due vie?

4

Ho un sistema .NET con gli utenti che si collegano normalmente e hashing standard e / o login di terze parti (google, fb etc). Ho un plugin di terze parti che richiede username / login per ciascun utente oltre al nostro api secret che ci consente di effettuare richieste per conto dell'utente. Gli utenti possono anche accedere direttamente da un portale Web utilizzando queste credenziali, ma non abbiamo alcun interesse a esporre gli utenti a questa funzionalità. Purtroppo non possiamo spegnerlo neanche.

Quindi, dal punto di vista dell'interfaccia utente, l'utente non dovrebbe mai aver bisogno di conoscere il proprio utente / pass per il sistema di terze parti. D'altra parte, abbiamo bisogno di generare e archiviare questi record e i dati utente / pass possono fornire l'accesso ai dati sensibili dei clienti e la possibilità di danneggiare tali dati.

Non riesco a trovare un modo per archiviare le password utilizzando la crittografia bidirezionale. Esiste una best practice raccomandata per questo tipo di processo? Mi mancano alcune opzioni?

    
posta BZN_DBer 03.01.2017 - 22:14
fonte

1 risposta

3

Alcuni sistemi di terze parti offrono una gestione delle sessioni esplicitamente per questo scopo.

Ad esempio, Google potrebbe richiedere l'autenticazione a due fattori se gli utenti lo configurano e, per le app (come la tua?) che non supportano TFA, hanno password specifiche dell'app o una sorta di sessione permanente.

Potrebbero esserci più di un tipo, ad esempio l'accesso a Stack Exchange ha richiesto a SE una piccola quantità di dati da Google, ma potrebbero ottenere molto di più se l'utente lo ha consentito. D'altra parte ci possono essere altre API o possibilità di sessioni a lungo termine che richiedono semplicemente all'utente di reinserire la propria password quando succede qualcosa. (che è raro)

Ciascun servizio di terze parti (Google, Facebook, ecc.) avrà le sue diverse opzioni qui.

Se continui a determinare che in modo permanente è necessario memorizzare una password , allora sì, la crittografia a due vie è la strada da percorrere .

AES-128 (o superiore) è l'algoritmo di crittografia simmetrica raccomandato da utilizzare. Finché la chiave viene generata utilizzando un generatore di numeri casuali crittograficamente sicuro (pseudo-), allora non sarà pratico per l'attaccante alla forza bruta. Quindi, l'attaccante cercherà invece un modo per rubare la chiave.

Supponendo che i dati siano in un server SQL, la semplice memorizzazione della chiave al di fuori del database fornirà almeno una copertura contro gli attacchi SQLi. Non codificare la chiave nel codice sorgente dell'applicazione, ma piuttosto, posiziona la chiave in un file separato , in modo che il codice sorgente possa essere copiato in un ambiente di test, se necessario, e un separato (non -secret) può essere utilizzato per tali ambienti.

Tuttavia, questo ti protegge solo da perdite SQLi e codice sorgente. Altri tipi di intrusioni potrebbero consentire all'utente malintenzionato di leggere i file sul server.

Assicurati che la tua applicazione (e il sistema di autenticazione su cui si basa) sia eseguito in il proprio account utente sul sistema operativo e sul filesystem. Il file chiave non dovrebbe essere leggibile da altri utenti (tu senza sudo ) o applicazioni (ad esempio sendmail ) sul sistema in questo modo. (Ad esempio, imposta le autorizzazioni keyfile su 600 o 400 per sistemi UNIX-like)

Nel complesso, dovresti proteggere la tua applicazione e tutti i servizi in questo ambiente da tutti i tipi di attacchi. Questa è la prima linea di difesa. Qualsiasi altro suggerimento qui è una misura di sicurezza per aiuto per ridurre l'impatto di un hack di successo.

È sempre possibile che ci sia un errore e un'intrusione potrebbe raggiungere l'account utente sensibile. (quello che accede al file chiave)

Potrebbe essere possibile separare gli account utente all'interno della tua unica applicazione, ma questo diventa complicato.

La protezione finale è usa la password e la sessione dell'utente finale per ottenere la chiave di decrittografia . Questa è la soluzione più sicura dopo che hai trattato nei punti precedenti, ma è complessa da implementare e non è compatibile con una funzionalità di reimpostazione della password autonoma.

    
risposta data 03.01.2017 - 23:02
fonte

Leggi altre domande sui tag