ASP.NET Machinekey encryption

3

En Asp.NET puede usar MachineKey.Protect para cifrar datos. Estamos pensando en usar esto para cifrar algunos datos que se almacenarán en campos ocultos dentro de una página web, estos campos ocultos se usan cuando la página web se devuelve.

He leído que cuando se encripta es mejor usar un Vector de inicialización diferente cada vez que si se usara una y otra vez, la encriptación se vuelve más fácil de descifrar.

Seguramente al usar MachineKey.Protect una y otra vez, el cifrado se vuelve más fácil de descifrar a medida que se usa el mismo IV. Los datos que estoy protegiendo no son súper sensibles, por lo que no necesito una solución estándar de oro, solo estoy comprobando que no estoy dispuesto a hacer algo que sea muy débil. Si MachineKey.Protect es una solución mediana, está bien.

Gracias por tu ayuda.

    
pregunta Jake 18.05.2015 - 14:30
fuente

1 respuesta

2

El método MachineKey.Protect genera automáticamente un IV aleatorio durante el cifrado. Puede ver esto vigente protegiendo los mismos valores varias veces:

for (int n = 0; n < 10; n++)
{
    byte[] data = MachineKey.Protect(Encoding.ASCII.GetBytes("This is a test."), "testing");
    var sb = new StringBuilder();
    for (int i = 0; i < data.Length; i++)
        sb.AppendFormat("{0:x2}", data[i]);
    Console.WriteLine(sb.ToString());
}

Salida:

beb18d854f133f948e090a9d563d5670f3ccf9d337449357fba831e728e105fed44785e432d3f1dbe8c50a7f867570a3ce7d198b51faf34fb3f44511c876f715
dd62fe62ca56ff6f9cf4bb6b0f715f77106aa11ef081105099800850ce38a2d7d8d986f35f8e0db3ac32d5702a7cbfb2efb421770449a90587cd4895ec70a5af
fa548a8fb928fa3039eed3b2d0bf2fc53c4899da39acaad443170726f8a2fdfacf40684542b5429445c82f66cac529f94a750c2ec52532984e752e722f6accfa
ef37f809db93f2e8e1a45a58bc5def741239be955038b87d8712dcb8bfbae853e2dd21556b836dde41c56dcce6970c699107cc9a796dbbf14cf8ff231cfe7f08
fdb4e87ee327dfe4b0d3ae3edf66a4b3dc9eab7434d8e730eaf3424034bd2b6935b0b92613b13bf703cac6951d92761e9a34ec815dd5e66e9e514baf5181edab
1203a0891da6e7bc09f6037a3419be62a07dbb1b5e3c3ab2449e7163e5b082d9a6ef4338b17132e95e04ef8df00582afca2aa0576003260766f256659b971f11
0a96d6f17169789d86c0812c810826efe356c5ec5ad4f88d1d79620c7d9a31b665244e095ef711a3f555b29ac04dc684de4971396cdb621c34c6753ad16cbebe
0a537e35e7554831c0870e762996f3b9d23ed3ae3363133341097e7a80ed3fca12c9beb1592ecb1d4d2ca4cc2178837996484ee71773e4ce5dcd911220d38e17
9e943971c1847254cba338a69973d55e857e55fb0bdaf62b18bbe4cfd39647256d31ac88a9c75823594c062b2def6c618429af60618150f640590c6ef7a0d565
18028aa0c81dd5dc03ed972d0a066803841f1cb0a43eadbb4cf001ecafbc38f3604579f84196e9c6344cb3f676f53add0d4054b1daa5eca119c46522201ae27c

Si ingresa en las fuentes descompiladas para System.Web.dll y System.Security.dll , encontrará que la llamada MachineKey.Protect carga un proveedor de una fábrica que finalmente envuelve el subyacente DPAPI métodos de protección, específicamente CryptProtectData , usando el hash de la lista de propósitos como el campo" entropía opcional ". La DPAPI aplica automáticamente un salt y un MAC.

    
respondido por el Polynomial 18.05.2015 - 15:02
fuente

Lea otras preguntas en las etiquetas