Cifrado de datos de autenticación en ASP.NET


Para la encriptación de los datos de la autenticación mediante formularios (Forms Authentication Tickets), ASP.NET 2.0 utiliza la clave decryptionKey y el nuevo atributo decryption del elemento <machineKey> en el archivo de configuración web.config. El atributo decryption nos permite especificar el algoritmo de cifrado a utilizar tanto en la encriptación como la desencriptación en la autenticación mediante formularios. En ASP.NET 1.x se utiliza el algoritmo 3DES y no es configurable.

Para encriptar los datos de autenticación mediante formularios:

  1. Verificar que el valor del atributo protection del elemento <forms> del web.config esté establecido a All, tal y como se muestra a continuación:
    <forms protection="All" ... />

    Ejemplo:

    <system.web>
      <authentication mode="Forms">
        <forms name=".AuthCookie" 
            loginUrl="login.aspx" protection="All"/>
      </authentication>
    </system.web>

    De este modo se especifica que la aplicación utilice la validación de datos y encriptado para proteger la cookie de autenticación. All es el valor predeterminado y recomendado. Esta opción utiliza el algoritmo de validación de datos configurado en el elemento <machineKey>. Para la encriptación se utiliza Triple DES (3DES), si está disponible y si la clave tiene una longitud suficiente (al menos 48 bytes).

    Adicionalmente a lo anterior podemos usar SSL para prevenir que las cookies sean capturadas. Para ello, además de contar con la configuración requerida en el servidor web para utilizar SSL, debemos establecer el valor del atributo requireSSL del elemento <forms> del web.config a “true”.

    <forms requireSSL="true" ... />
    
  2. Utilizar el atributo decryption del elemento <machineKey> del web.config para especificar el algoritmo de cifrado tal y como se muestra a continuación:
    <machineKey decryption="Auto" ... />
    

    Existen tres valores que se pueden especificar para éste nuevo atributo:

    • Auto, que es el valor predeterminado, especifica que ASP.NET determina que algoritmo de cifrado será utilizado en base en las configuración definidas.
    • AES especifica que ASP.NET utilice el algoritmo de cifrado AES para la encriptación de datos. AES es el algoritmo predeterminado para esta tarea.
    • 3DES especifica que ASP.NET utilice el algoritmo TripleDES.

    Con el valor Auto, si el valor del atributo decryptionKey es de 8 bytes de longitud (16 caracteres) entonces Auto hace que se emplee el algoritmo DES. De otra forma, Auto hace que se emplee el algoritmo AES. ASP.NET 2.0 suporta los algoritmos AES, 3DES y DES. Deberíamos preferir utilizar AES debido a que ofrece llaves de tamaño mayor (128 bits, 192 bits, 256 bits) que 3DES (56 bits).

  3. Revisar que el valor del atributo decryptionKey del elemento <machineKey> del web.config.
    <machineKey decryptionKey="AutoGenerate,IsolateApps" ... />
    

    decryptionKey especifica la clave usada para encriptar datos. El valor predeterminado AutoGenerate especifica que ASP.NET debe generar una clave aleatoria y almacenarla en LSA (Local Security Authority, Autoridad de seguridad local). El modificador IsolateApps provoca que ASP.NET genere para cada aplicación una clave encriptada única utilizando el ID de la aplicación.

    A menos que la aplicación este instalada en un “web farm” o se necesite compartir las credenciales de autenticación a través de dos o mas aplicaciones, debemos dejar al atributo decryptionKey con sus valores predeterminado (AutoGenerate, IsolateApps). De otra forma deberíamos generar el valor del atributo decryptionKey de manera manual y asegurarnos que el mismo valor es utilizado por todos los servidores de la “granja” o matriz.

De este modo, para la encriptación de los datos de los formularios, la configuración de los atributos del <machineKey> debe verse como se muestra a continuación.

  <system.web>
    <machineKey 
      validationKey="AutoGenerate,IsolateApps" 
      decryptionKey="AutoGenerate,IsolateApps" 
      validation="AES" 
      decryption="Auto" />
  </system.web>

Para mayor información, leer: How To: Protect Forms Authentication in ASP.NET 2.0.

Acerca de Willy Mejia

Developer, Techie, Human... http://about.me/willyxoft
Esta entrada fue publicada en .NET, ASP.NET, Seguridad. Guarda el enlace permanente.

Una respuesta a Cifrado de datos de autenticación en ASP.NET

  1. Milagros dijo:

    Buen post, me has aclarado muchas cosas.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s