¿Está desarrollando este software?
Simplemente generaría un token único almacenado en una base de datos como:
- TokenId
- UserId (o alguna entidad con la que se relaciona este token)
- TokenKey (que se usará como una identificación para el público)
- Ha expirado
- Ip (que tiene un hash como SHA512, por lo que no expone la IP de los usuarios si está comprometida)
- CreatedOn
- UsedOn
Ahora, necesitamos reducir el riesgo de robo de fichas.
Entonces, comencemos con IP. Si la IP no coincide con los propietarios del token, entonces querrá rechazar al ladrón de tokens ya que no coincide con la IP del propietario. O un enfoque más agresivo sería vencer el token ya que la computadora debe haber estado comprometida para obtener acceso a ese token. Podría enviar otra información, como una clave basada en seriales de hardware, etc., pero, por supuesto, es fácil de falsificar.
Si el token ha caducado, tendrán que volver a autenticarse y obtener un nuevo token.
Editar para contraseñas de almacenamiento local:
Vaya, debo de malinterpretar tu publicación. Cuando leí tu publicación sobre tokens de contraseña, pensé que eso era lo que estabas buscando. El cifrado de una contraseña siempre es un no-no. Solo use el cifrado cuando TIENE QUE descifrar los datos confidenciales. Para las contraseñas, querrá usar hashes como SHA512. Hay muchos compromisos (tamaño, velocidad, etc.) en los hashes pero hay publicaciones que explican todas las diferencias.
Métodos para robar el hash:
- La persona con acceso físico o remoto a la carpeta podría obtener acceso a su contraseña.
- Un rastreador de red como Cain podría obtener contraseñas que pasan por la red.
Por lo tanto, guardar una contraseña localmente es realmente reducir la seguridad de su software a costa de la conveniencia del usuario.