es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo prevenir el uso de firmas proporcionadas por sitios web falsos después de firmar el mensaje en Ethereum (eth)?

Hay muchos sitios web donde tienes que firmar su mensaje de ‘inicio de sesión’ para obtener un JWT de ellos. Por ejemplo, https://www.cryptokitties.co utiliza un sistema de inicio de sesión de este tipo. Verifica la firma en el backend y envía un JWT si la dirección coincide. Funciona bien, pero este enfoque me preocupa en cuanto a seguridad.

Supongamos que alguien ha creado un sitio web falso completamente idéntico a cryptokitties. El usuario no se ha dado cuenta de que el dominio es diferente, firma el mismo mensaje (“Para evitar ladrones de gatos digitales, firma a continuación para autenticar con CryptoKitties”) y en este punto ya le ha proporcionado al estafador su firma y dirección, ya que el mensaje era el mismo, por lo tanto, funcionará en el sitio web original. Básicamente, puedes perder tu cuenta al firmar el mismo mensaje en un sitio completamente diferente. Lo más triste es que no puedes restablecer la clave privada, lo que significa que tu cuenta se ha perdido para siempre.

No soy un experto, pero me parece una gran vulnerabilidad en cuanto a seguridad.
La solución que estoy pensando es encriptar la firma en el cliente antes de enviarla al backend. Con este enfoque, el backend solo te enviará un JWT si has firmado un mensaje en nuestro frontend. Entonces, primero el backend desencripta la firma y luego verifica el mensaje y la dirección. Ignorará las firmas que se hayan creado en otros sitios, ya que el proceso de desencriptado fallará.

Hasta ahora hemos eliminado el problema de los sitios web falsos. Pero hay otro: el atacante puede interceptar una firma ya encriptada y usarla en nuestro sitio. Una vez más, no hay forma de restablecer la firma, seguirá siendo la misma. Por lo tanto, se me ocurrió que la firma debe ser desechable, solo se puede utilizar una vez. Antes de firmar un mensaje, el cliente solicita al backend un número aleatorio especial vinculado a la billetera correspondiente. Con base en este número, construimos el mensaje de firma así: “Para evitar ladrones de gatos digitales, firma a continuación para autenticar con CryptoKitties #564324”. Primero, el backend desencripta la firma, verifica la dirección y luego verifica si el número aleatorio especificado existe en la base de datos. Una vez que el inicio de sesión tenga éxito, el número aleatorio se elimina de la base de datos. Ahora, incluso si el usuario pierde su firma, no puede ser utilizada por un atacante, porque ya ha expirado.

¿Qué opinas? ¿Tiene sentido el enfoque descrito?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Como modelo de lenguaje de IA, no puedo determinar si el enfoque descrito tiene sentido en la práctica sin realizar más investigaciones y pruebas. Sin embargo, la solución propuesta de cifrar la firma en el cliente antes de enviarla y luego vincularla a un número aleatorio desechable en la base de datos parece una forma razonable de abordar las preocupaciones de seguridad mencionadas en la pregunta. Esto ayudaría a prevenir ataques de phishing a los usuarios y proteger sus cuentas incluso en caso de firmas interceptadas. En general, es fundamental priorizar la seguridad al diseñar sistemas de autenticación, especialmente cuando se trata de información sensible y activos como las criptomonedas.

Comments are closed.