miércoles, 4 de julio de 2012

Brindando seguridad a nuestras aplicaciones

Son muchas las ocasiones en que necesitamos implementar mecanismos de seguridad confiables en nuestras aplicaciones, sin que sean excesivamente complicadas o difíciles de desarrollar. En esta ocasión voy a implementar una solución basada en hash, usando para ello las utilidades de encripción aportada por el Framework de .NET

Este tipo de mecanismos ofrecen un buen nivel de seguridad a nuestras aplicaciones, ya que las hash son de tamaño fijo, y pueden representar una gran cantidad de datos. Sumado a ello cualquier cambio que se realice en los datos ocasionan grandes cambios imprevisibles en el valor hash

En esta guía utilizaremos el algoritmo SHA1, el cual es de 160 bits. Este mecanismo esta pensado como una solución para manejar las contraseñas de usuarios, pues se buscaba un mecanismo que garantizara que no hubiese forma de descifrar las contraseñas.

Así en lugar de almacenar una contraseña cifrada, se almacena la hash de dicha contraseña. Esto significa que la contraseña es irrecuperable, lo que garantiza un buen nivel de seguridad pues aun cuando la información sea sustraída no hay posibilidad alguna de recuperar las contraseñas.

Servicios de Criptografía

En .Net los servicios de criptografía están definidos en el namespace System.Security.Cryptography, el cual provee mecanismos de codificación y decodificación de datos, además de otras operaciones tales como hashing, generación números aleatorios, y mensajes de autenticación.

Manos a la obra

El siguiente es el método que obtiene la hash:

   1: public string GetSHA1(string data)
   2: {
   3:     SHA1CryptoServiceProvider Sha1 = new SHA1CryptoServiceProvider();
   4:     Byte[] buffer;
   5:  
   6:     //Convertimos la cadena en un arreglo0 de bytes
   7:     buffer = Encoding.ASCII.GetBytes(data);
   8:  
   9:     //Obtenemos la hash, y la codificamos en base 64 para evitar caracteres no soportados
  10:     return Convert.ToBase64String(Sha1.ComputeHash(buffer));
  11: }

Como se puede ver es bastante sencillo de implementar, si se desea elevar el nivel de seguridad se puede cifrar la contraseña antes de calcular la hash. En mi caso esta ultima ha sido la solución implementada.


Etiquetas de Technorati: ,,,

No hay comentarios: