Sto cercando di progettare un algoritmo per condividere pubblicamente messaggi autenticati.
Ovviamente, schemi chiave pubblici / privati asimmetrici lo fanno, ma voglio evitare il requisito che gli utenti debbano tenere traccia di una lunga chiave asimmetrica. Invece, voglio solo che gli utenti tengano traccia di una password che può essere sottoposta a hash per rendere le chiavi di cui hanno bisogno. Tutte le altre informazioni sono condivise pubblicamente.
Spero di ottenere questo risultato utilizzando uno schema elaborato che coinvolge gli HMAC in cui le chiavi HMAC vengono rilasciate dopo che il messaggio è stato firmato e pubblicato con successo. Un utente malintenzionato non può simulare un messaggio, perché sarebbe in grado di firmare e pubblicare un messaggio solo dopo che è stata rilasciata la corrispondente chiave HMAC.
Il vero autore deve dimostrare che la chiave HMAC utilizzata è la chiave HMAC corretta. Per fare questo devono prima pubblicare un hash (o HMAC) della chiave HMAC, così quando condividono la chiave HMAC possono essere autenticati.
Quindi in pratica funzionerà in questo modo:
- Alice vuole condividere pubblicamente i messaggi autenticati usando solo una password segreta.
- Genera una chiave HMAC iniziale usando la sua password.
- Pubblica l'hash di quella chiave HMAC in modo che possa essere successivamente verificata.
-
Successivamente, quando desidera pubblicare un messaggio, fa quanto segue:
- Utilizza la sua password e un contatore per generare una chiave HMAC sostitutiva e un hash di quella chiave HMAC sostitutiva.
- utilizza la precedente chiave HMAC per firmare il messaggio che desidera pubblicare.
- utilizza la precedente chiave HMAC per firmare l'hash della chiave HMAC sostitutiva.
- condivide il messaggio firmato e l'hash firmato della chiave HMAC sostitutiva.
- Dopo che entrambi sono stati pubblicati, condivide la stessa chiave HMAC stessa.
- Tutti gli altri usano l'hash della chiave HMAC precedentemente pubblicato per verificare che la chiave HMAC sia corretta.
- Quindi utilizzano la chiave HMAC per autenticare il messaggio e la chiave HMAC sostitutiva.
Gradirei un feedback sulle implicazioni di sicurezza del mio schema inventato se hai tempo per comprendere a fondo l'algoritmo descritto.
Questo è il mio miglior tentativo di creare uno schema per l'autenticazione pubblica dei messaggi usando solo una password. Quello che mi piacerebbe davvero sapere è se esiste un modo valido per farlo.
Mi sono convinto che l'alternativa migliore è che gli utenti che non vogliono tenere traccia di una lunga chiave privata utilizzino un servizio di terze parti attendibile che memorizza una versione crittografata di quella chiave. Quando vogliono firmare un messaggio, scaricano la chiave crittografata da quel servizio, la decodificano e quindi firmano il loro messaggio nel modo normale. Se potessi fare di meglio mi piacerebbe sapere.