2009-08-25 19 views
16

Estoy usando Windows DPAPI para cifrar algunos datos confidenciales para mí. El cifrado se almacena en el registro. Todo esto funciona bien, pero me preguntaba si alguien podría aclarar mi comprensión de los bytes de "entropía" que (opcionalmente) se suministran a ProtectedData.Protect() en .NET.Windows DPAPI: ¿qué hacer con la entropía?

La matriz de bytes 'entropía' parece ser análoga a un vector de inicialización o sal utilizado con otros esquemas de criptografía, pero no pude ver una buena descripción de los bytes de entropía en MSDN. ¡Las muestras de código que he visto solo codifican en los bytes de entropía!

Son los bytes de entropía suministrados a ProtectedData.Protect() & ProtectedData.Unprotect análogo a un IV o sal? Por lo tanto, ¿pueden los bytes de entropía almacenarse de forma segura junto con el cifrado, o comprometería la seguridad?

Respuesta

13

Entropy es una clave secundaria que es específica de la aplicación que protege los datos. La idea general, si mal no recuerdo, era permitir que varias aplicaciones encriptaran datos bajo una sola cuenta de usuario, pero aún mantuvieran la seguridad entre ellos. Por ejemplo, su aplicación puede cifrar datos bajo UserA. Si Mi aplicación desea descifrar esos datos en UserA, realmente no hay nada que me impida hacerlo, ya que el DPAPI usa la clave de los usuarios. Sin embargo, si se tiene en cuenta una "entropía" específica de la aplicación, entonces necesitaría conocer su entropía para descifrar cualquier dato que proteger para UserA.

La entropía se podría considerar análoga a la sal, ya que es una clave o secreto adicional que se usa para abstraer aún más el contenido encriptado. A diferencia de la sal, la entropía de la aplicación debería permanecer igual para cada operación de cifrado con una credencial determinada. Con sal, generalmente es mejor cambiarlo tan a menudo como sea posible.

La entropía es esencialmente una clave adicional, y debe tratarse como cualquier otra clave criptográfica. Mantenerlo privado y seguro.

Por cierto, creo que 'entropía' era una palabra atroz para usar para este propósito. Algo como 'diferenciador', o tal vez incluso acuñando una palabra como 'distintivo', hubiera sido mejor. : P Uso muy confuso del término.

+0

Gracias, gran respuesta. Así que supongo que codificar la entropía en la aplicación no es un desastre completo, pero es mejor tratarlo como una clave. Como estoy encriptando una clave de todos modos, tener otra "clave" para proteger la clave es volverse un poco loco. – saille

+0

Sí, es un concepto un poco complicado. Pero el agujero de seguridad que la "entropía" pretende tapar es muy real. El cifrado específico de credenciales en Windows es muy conveniente para el usuario, pero abre nuevas oportunidades para que los programas maliciosos descifren esos datos cuando no deberían. Además, no asuma que cualquier "otro" programa es benigno ... malware que el usuario ni siquiera sabe que está en su sistema puede intentar buscar datos encriptados que no sean entrópicos. – jrista

1

Es útil si quiere proteger con contraseña la aplicación. La contraseña (u otra clave generada y cifrada con la contraseña para que los datos de la aplicación no necesiten volverse a enunciar cuando se cambia la contraseña) se puede usar como entropía mientras se almacenan los datos de la aplicación.

Cuestiones relacionadas