Come posso aggiungere un livello di sicurezza alle password cleartext e SSL?

1

Sto creando un'API web in .Net per un'applicazione web. Mi chiedo quale sia lo standard del settore per l'autenticazione di accesso.

So che la maggior parte delle persone crede che l'invio di username / password in chiaro su SSL sia sufficiente per la sicurezza, ma non voglio riporre tutta la mia fiducia sul fatto che SSL non sarà interrotto in futuro e sono fermamente convinto in sicurezza a strati.

In quale altro modo posso aggiungere più livelli di sicurezza all'autenticazione di accesso oltre a SSL e nomi utente / password chiari? Crittografia lato client? Challenge-response?

    
posta Chrisgozd 22.04.2014 - 22:54
fonte

3 risposte

2

Se credi nei livelli, aggiungi alcuni livelli. Ad esempio, esegui il tuo SSL all'interno di un altro SSL e fai in modo che i due livelli SSL utilizzino algoritmi distinti (ad esempio il SSL esterno funziona con crittografia AES e uno scambio temporaneo Diffie-Hellman effimero, mentre il SSL interno utilizza la crittografia RC4 e lo scambio di chiavi basato su RSA). Questo è indubbiamente stratificato, e, per quanto riguarda i livelli, probabilmente il meglio che si può ottenere (in particolare, è relativamente ovvio che non si danno la sicurezza in quel modo).

    
risposta data 22.04.2014 - 23:50
fonte
1

Considerati i problemi che abbiamo riscontrato recentemente con SSL (sia problemi di CA che bug di implementazione), sono d'accordo sul fatto che avere un altro livello di sicurezza che protegge la password sia una buona idea. L'opzione migliore che conosco è il protocollo Secure Remote Password ( wikipedia , Stanford , crypto.SE ) - idealmente, combinato con un lento funzione di hash come scrypt o PBKDF2 .

Usando SRP, un utente malintenzionato di rete che ha completamente violato il livello SSL non può ottenere alcuna informazione sulla password (o qualsiasi cosa che possa essere usata per esempio un attacco pass-the-hash), e anche un completo compromesso del server lo farà solo perdere il verificatore (che richiederebbe un attacco di dizionario per recuperare la password).

    
risposta data 23.04.2014 - 01:30
fonte
0

Dato che stai costruendo un'API da zero, potresti implementare una funzione di hashing in cui un hash SHA256 (o qualunque) viene inserito nella matrice nome utente e password e inviato. In questo modo, solo l'hash viene inviato sul filo. Questa non è una soluzione per tutti, ma è solo un altro livello.

    
risposta data 23.04.2014 - 00:00
fonte

Leggi altre domande sui tag