Un scambio di messaggi casuali su reddit ieri mi ha fatto pensare se potrebbe essere possibile progettare un protocollo che rimuova la necessità per gli utenti di ricordare una password unica per ogni servizio a cui si connette.
L'idea è che essenzialmente ogni utente fornisce credenziali identificative (nome, data di nascita, città di nascita) e una frase segreta segreta. In base a queste informazioni e al servizio a cui si accede (facoltativo, nel caso in cui l'utente non desideri essere tracciato tra i servizi), il software client può generare in modo deterministico una coppia di chiavi RSA (utilizzando uno schema di hashing sicuro, forse SHA-512). / p>
Il componente pubblico di questa coppia di chiavi viene passato al servizio e funge sia da token di autenticazione che da chiave di crittografia. L'utente deve solo ricordare una pass-frase e le credenziali per accedere a qualsiasi servizio da qualsiasi client, con la chiave pubblica come identificazione sicura. È possibile utilizzare le chiavi effimere specifiche della sessione per la segretezza in avanti.
Mi chiedo quali sono gli svantaggi di questo schema? Non è suscettibile di spoofing a meno che l'impostore non imponga la chiave privata, la mancanza di password multiple lo rende più sicuro e affidabile per gli utenti. È suscettibile di MITM e di un client compromesso (perché vede la passphrase), ma oggi è lo stesso di SSL e la minaccia dei key-logger.
Quindi, mi stavo chiedendo se ci sono dei seri inconvenienti che mi sono sfuggiti, e anche se qualcuno volesse sperimentare con questo, avrebbe senso crearlo sopra TLS (un'estensione a http, forse), o per sostituirlo?
Grazie!
Modifica :
Grazie Thomas Pornin per la risposta ben ragionata.
Mi chiedo se le seguenti sono valide confutazioni alle obiezioni sollevate:
1. Poiché in questo schema esiste una sola password, non è irragionevole che vi siano requisiti di complessità stringenti (ad esempio almeno 128 byte, ecc.), quindi non è suscettibile agli attacchi di dizionario. Gli attacchi ai dizionari sono in realtà gli stessi che dire se l'attaccante ha a disposizione infinite risorse, può forzare la forza con qualsiasi schema. Finché lo schema è tale che nessuna informazione può essere ottenuta indovinando porzioni di password, allora è sicuramente possibile rendere gli attacchi di dizionario poco pratici?
- Per quanto riguarda la necessità di cambiare la password: questo non sarebbe possibile all'interno del protocollo limitato descritto nella domanda. Forse quando si registra l'identità pubblica degli utenti, il server può inviare un segreto codificato con la chiave degli utenti che dovrebbe essere usato solo per invalidare l'identità quando richiesto? Finché esiste una chiave pubblica per servizio (cioè generata deterministicamente in base a una combinazione non modificabile di password utente e identità del servizio, un utente malintenzionato può solo compromettere l'accesso a un particolare servizio).
Btw, conosci qualche algoritmo noto per generare la coppia di chiavi basata solo su un numero (per esempio) di 512 bit? Suppongo che questo sia lo stesso che chiedere se esiste un modo per trovare l'innesco sicuro più vicino dato un numero. Grazie!