Cualquier cosa que almacene localmente puede verse comprometida. Pero hay pasos que puede tomar para hacerlo más difícil. Hay un documento en Handling Passwords que puede considerar revisar. Considera que su clave Entropy es una contraseña específica para su aplicación.
Voy a referirme a su Entropy como su clave , ya que es funcionalmente una clave adicional.
Lo que no quiere hacer es almacenar su clave localmente en un formato no encriptado. En su lugar, desea cifrar su clave o derivarla de otra fuente obvia. Por supuesto, si cifras la clave, entonces necesitas almacenar la clave utilizada para encriptarla, pero muchas veces esta sola capa de indirección es suficiente para desalentar a la mayoría de los retadores.
Esa sería la ventaja de derivar su clave. Puede derivarlo como un hash de otra pieza de datos constantes (debe ser algo que no cambie con las revisiones de su aplicación). Sin embargo, un truco al derivar un hash es combinar el hash con algún otro valor constante (como un GUID o un gran número aleatorio) para que otra persona no pueda combinar un conocido algoritmo hash y obtener su clave. Esta es una alternativa mucho mejor que crear tu propio algoritmo hash (lo cual nunca debes hacer, a menos que tengas un PHD en Matemáticas).
En algún momento va a necesitar algún tipo de clave codificada en su aplicación. Esta clave se combina con algunos otros datos en un hash para crear su clave de entropía, o se usa para descifrar la clave de entropía. En realidad, puede cambiar la clave con una nueva revisión de su aplicación, siempre que mantenga la clave anterior para descifrar la clave existente. Luego puede volver a cifrarlo con la nueva clave o método.
Si quiere la mejor seguridad, puede almacenar la llave Entropy fuera de la computadora. Esto requeriría una conexión a Internet y un certificado SSL, pero luego la clave nunca se conserva localmente para ser descubierta. Para hacer esto, puede configurar un sistema de respuesta de desafío más sólido, de modo que la autenticación de solicitud sea diferente cada vez, y la clave se entregue a través del cifrado SSL para que no se pueda interceptar. Una vez que se usa la llave, se descarta. Por supuesto, este tipo de estrategia frustra el propósito de muchos escenarios en los que está utilizando DPAPI para el almacenamiento seguro local.
Hagas lo que hagas, ten en cuenta que se verá comprometido, eso siempre ocurre cuando alguien tiene acceso completo a la máquina local y a los datos almacenados en ella. La solución a eso es seguir lanzando actualizaciones que cambien el método lo suficiente como para que el viejo crack ya no funcione. Esto hará que la distribución de una grieta sea menos valiosa ya que será difícil encontrar una para la versión correcta.
Sería útil si describió su aplicación con más detalle. ¿Qué tipo de aplicación es esta: servicio de Windows, aplicación interactiva (Windows Forms/WPF), etc.? Además, ¿cómo almacena y recupera la clave simétrica? Quiero decir, si usa DPAPI con la tienda de usuario y almacena la clave usted mismo, entonces solo usted (o alguien que pueda iniciar sesión con sus credenciales) puede recuperar el valor, en cuyo caso, no estoy seguro de qué amenaza está intentando mitigue protegiendo la entropía secundaria (debe preocuparse por proteger sus credenciales). –
Cuando lo protege con LocalUser, cualquier aplicación que se ejecute bajo el usuario local puede acceder al almacén de claves. Es una aplicación de formularios de Windows. A diferencia de LocalMachine, cualquier aplicación que se ejecute en la máquina puede acceder a la tienda para obtener la clave, que básicamente no tiene ningún cifrado –
Su afirmación no es 100% precisa. Solo las aplicaciones que se ejecutan bajo la MISMA cuenta de usuario con perfil cargado (puede ser un usuario de dominio, no necesariamente un usuario local) tienen acceso al MISMO almacén de claves. Entonces, si el usuario X inicia su Formulario de Ganancia y encripta un secreto con la clave DPAPI del usuario X, solo las aplicaciones lanzadas por el mismo usuario X podrán descifrarlo. Esencialmente, este secreto está protegido por las credenciales del usuario X, de modo que mientras el usuario X no comparta la contraseña, no puedo pensar en una amenaza que esté mitigando. ¿Podría describir un caso de uso (escenario) que intenta evitar? –