Estoy tratando de diseñar un algoritmo para compartir públicamente mensajes autenticados.
Obviamente, los esquemas asimétricos de clave pública / privada hacen esto, pero quiero evitar el requisito de que los usuarios tengan que realizar un seguimiento de una clave asimétrica larga. En su lugar, solo quiero que los usuarios realicen un seguimiento de una contraseña que se puede hashear para crear las claves que necesitan. Toda otra información se comparte públicamente.
Espero lograr esto utilizando un esquema elaborado que involucre HMACs donde se liberen las claves HMAC después de que el mensaje se haya firmado y publicado con éxito. Un atacante no puede falsificar un mensaje, ya que solo podría firmar y publicar un mensaje después de que se haya liberado la clave HMAC correspondiente.
El autor real debe demostrar que la clave HMAC que utilizaron es la clave HMAC correcta. Para hacer esto, deben publicar un hash (o HMAC) de la clave HMAC de antemano, por lo que cuando comparten la clave HMAC también se puede autenticar.
Así que básicamente funcionará así:
- Alice quiere compartir públicamente mensajes autenticados usando solo una contraseña secreta.
- Ella genera una clave HMAC inicial usando su contraseña.
- Ella publica el hash de esa clave HMAC para que luego pueda verificarse.
-
Más tarde, cuando quiere publicar un mensaje, hace lo siguiente:
- Utiliza su contraseña y un contador para generar una clave HMAC de reemplazo y un hash de esa clave HMAC de reemplazo.
- utiliza la clave HMAC anterior para firmar el mensaje que desea publicar.
- utiliza la clave HMAC anterior para firmar el hash de la clave HMAC de reemplazo.
- comparte el mensaje firmado y el hash firmado de la clave HMAC de reemplazo.
- Una vez que ambos se han publicado, ella comparte la clave HMAC anterior.
- Todos los demás usan el hash de clave HMAC publicado anteriormente para verificar que la clave HMAC sea correcta.
- Luego, usan esa clave HMAC para autenticar el mensaje y la clave HMAC de reemplazo.
Apreciaría algunos comentarios sobre las implicaciones de seguridad de mi esquema inventado si tiene tiempo para entender completamente el algoritmo descrito.
Este es mi mejor intento de crear un esquema para autenticar mensajes públicamente usando solo una contraseña. Lo que realmente me gustaría saber es si existe una forma viable de hacer esto.
Me he convencido de que la mejor alternativa es que los usuarios que no desean realizar un seguimiento de una clave privada prolongada utilicen un servicio de terceros de confianza que almacene una versión cifrada de esa clave. Cuando quieren firmar un mensaje, descargan su clave cifrada de ese servicio, la descifran y luego firman su mensaje de la manera habitual. Si pudiera hacerlo mejor, me gustaría saber.