Estoy trabajando en una aplicación que almacena datos confidenciales (considérala como un bloqueador de contraseñas) para el UWP (Plataforma universal de Windows).
El requisito más importante es la capacidad de desplazarse por los datos entre los dispositivos del usuario, para que el usuario pueda agregar su contraseña en el escritorio y sincronizarla automáticamente en el dispositivo móvil.
Por supuesto, esto se abre a posibles problemas, ya que los datos deben estar cifrados antes de almacenarlos y sincronizarlos.
Para hacer las cosas más difíciles, también me gustaría que el usuario inicie sesión en la aplicación mediante un PIN corto o Windows Hello (biométrico o PIN).
Todo el escenario requiere mucha atención en diferentes cosas:
- Para evitar solicitar una contraseña cada vez que el usuario agrega / elimina datos, debo guardarla de alguna manera en la memoria durante toda la sesión, para poder cifrar y guardar los datos cada vez que ocurra un cambio. Mantenerlo en la memoria no me parece la mejor opción, ya que los atacantes potenciales pueden leer la memoria, pero no puedo pensar en nada mejor.
- Si el usuario elige usar un PIN como reemplazo de la contraseña, todavía necesitamos saber la contraseña para poder cifrar / descifrar datos, así que pensé que puedo usar este PIN para cifrar la contraseña maestra y sincronizar la contraseña cifrada junto con los datos encriptados (y tal vez el PIN con hash, para que el mismo PIN pueda ser usado en otro dispositivo). ¿Es esta una buena idea?
- Si el usuario elige usar Windows Hello, las cosas son un poco más difíciles: Hello genera una clave que depende tanto de la aplicación como del dispositivo actual, por lo que la misma aplicación tendrá diferentes claves en diferentes dispositivos, y esto anula el propósito de usar Hello en mi caso, ya que no podré cifrar la contraseña maestra con la clave Hello y usarla en otro dispositivo. Mi idea, por ahora, es usar los datos del usuario (por ejemplo, el correo electrónico o un ID de cuenta) para cifrar la contraseña maestra, y usar Hola solo como puerta de entrada a la aplicación, pero esto requerirá que mi aplicación solicite permisos en cada uno. dispositivo, lo que significa que el usuario deberá ejecutar la configuración inicial en cada dispositivo (y me gustaría evitar eso). Esto también significa que el correo electrónico o la identificación de la cuenta se deben sincronizar con el resto de los datos de la aplicación, lo que podría revelar la contraseña cifrada y su clave. ¿Qué harías en este caso?
Soy consciente de la existencia de un PasswordVault que podría usar para almacenar la contraseña maestra, de modo que solo puedo usar PIN o Hello para acceder al Vault, pero mi experiencia anterior fue horrible, ya que la sincronización de datos del usuario era más rápido que la contraseña de Valut, dejando la aplicación en un estado incoherente (por ejemplo, tener datos de usuario en el nuevo dispositivo pero no hay clave para descifrarlos).
Comprendo que la pregunta puede ser demasiado amplia y que tal vez pueda reducir mis solicitudes, pero me gustaría hacer las cosas de la mejor manera posible.