Estoy desarrollando una aplicación del lado del cliente en C# que se comunicará con un servidor (página php) para credenciales y para algunos servicios críticos. Me pregunto si es peligroso almacenar una contraseña bien hash en la máquina del cliente. Por "bien hash", quiero decir con una semilla aleatoria que usa una conocida función de hashing segura. A los efectos de esta discusión, supongamos que la fuente está disponible gratuitamente (ya que todos los binarios pueden ser de ingeniería inversa).¿Peligroso para almacenar una contraseña bien hash y el método utilizado para hash it a plena vista?
Mi idea era que almacenara el nombre de usuario y la contraseña hash en la computadora del usuario y que este nombre de usuario y hash fueran enviados en texto plano a través de una conexión http no encriptada al servidor para validación. Esto, por supuesto, no evitará que un pirata informático use el hash de nombre de usuario y contraseña de otra persona como propio sin conocer la contraseña de origen (con algunos ajustes de código).
- ¿Podría una persona malévola hacer algo con una contraseña hash y el código utilizado para producir el hash? (además de iniciar sesión como otro usuario si obtuvieron esta información)
- ¿Qué hacen otras aplicaciones del lado del cliente para evitar que un usuario inicie sesión como otro usuario, si el pirata informático no tiene acceso a la contraseña de origen? (por ejemplo, Steam)
- ¿Existe una manera más fácil, económica (tanto de costo como de tiempo) de manejar esto?
Ejemplo de cómo un hacker falsificar credenciales de acceso de otra persona usando mi lógica actual:
- usuario se Legit en por primera vez, las credenciales se almacenan
- ganancias de hackers el acceso al sistema de archivos , localiza nombre de usuario y contraseña hash
- Hacker modifica el código fuente (o utiliza la inyección de código) para enviar el nombre de usuario y la contraseña hash adquiridos en lugar de lo que el programa normalmente haría
El producto que estoy produciendo no va a ser el próximo ebay, facebook o stackexchange, y tiene un bajo presupuesto. No necesito algo de primera categoría, y no me importan los robos ya que estoy planeando usar un modelo de "Paga lo que quieras". Principalmente estoy publicando esto por curiosidad.
"Mi pensamiento era que iba a almacenar el nombre de usuario y contraseña de hash en el ordenador del usuario" - No hagas eso. Como máximo, almacene un token que caduque que no guarde ninguna relación con credenciales que no sean las que se pueden enviar al servidor para reconocer al usuario. –
No es una respuesta, pero la "Criptografía Aplicada" proporciona una buena comprensión de las transacciones seguras. [http://www.amazon.com/Applied-Cryptography-Protocols-Algorithms-Source/dp/0471117099] –