Welcome to 3Dev Blogs Sign in | Join | Help

encriptando o cifrando informacion?

http://sergiot2.com/blogimages/2008/12Dic/Criptografia.jpg

La necesidad de encriptar (ocultar a simple vista) información no es necesidad propia en los sistemas de información, su inicio y apogeo fue marcado por las diversas guerras que hubo en la historia, se presume desde las campañas militares de los romanos hasta las últimas guerras mundiales.

¿Qué ha cambiado, en el presente? Pues que ahora contamos con computadores más potentes capaces de poder desencriptar (vamos a usar estos neologismos en la entrada, si prefiere, reemplazar por cifrar/descifrar) la información "oculta", utilizando fuerza bruta por ejemplo. Y desde hace décadas se tratado de mejorar y llevar al proceso de estandarización los algoritmos de encriptación.

Veamos, un ejemplo sencillo usando el método de encriptación CCQSMO cualquier cosa que se me ocurra:

La palabra Geeks.ms:

  1. Obtener el código Ascii: 7110110110711546109115
  2. Le sumamos 10 (clave) a cada código Ascii: 8111111111712556119125
  3. Volvemos a convertir a cadena, y tenemos nuestra cadena encriptada: Qoou}8w}

Obviamente hay algoritmos de encriptación, y hay "algoritmos". Vamos a repasar algunos de estos métodos y sus respectivas codificaciones, pero antes vamos diferenciar algoritmos de encriptación y métodos de cifrado Hash.

¿Se han preguntado porqué cuando se registran en algunos foros, al hacer un "recovery password", no me devuelve el password que he perdido, el sistema devuelve un nuevo password. ¿Por qué? Es que no esta usando un algoritmo de encriptación para ocultar el password, esta usando una función Hash, y es en un sólo sentido, en otras palabras, no se puede recuperar la cadena original a partir del password. ¿Entonces, cómo hace el match?, pues lo que hace no es desencriptar el password cifrado, para compararlo con el input del usuario, lo que hace es volver a cifrar/encriptar el input, y si el input cifrado coincide con el password cifrado que esta en la base de datos, entonces valida exitosamente tus credenciales. Mas detalles: Hash vs Encryption y Hashing vs. Encryption.

Hecho esta aclaraciones vamos a listar los métodos de criptografía, a los cuales podemos encontrar en dos grandes grupos:

1.a) Criptografía simétrica (en):

Estos algoritmos, usan una misma clave para encriptar/desencriptar el mensaje. En .Net tenemos el namespace: System.Security.Cryptography, para las operación de encriptación:

 

 1.b) Criptografía asimétrica (en):

Usa dos claves para el envió de mensajes, una clave pública y una clave privada. El destinatario del mensaje es el que posee estas dos claves, y envía la clave pública al remitente, y sólo con la clave privada (que tiene sólo el destinatario) puede desencriptar el mensaje.

2) Funciones de encriptación hash:

Como comenté al inicio, es encriptación (o cifrado) en un sólo sentido, no se puede recuperar el texto original a parte del texto encriptado. Además de tener la particularidad de generar un texto de un tamaño específico, siendo único cada contenido generado.

 

Ahora que ya vimos, los algoritmos de encriptación y funciones hash. Vayamos con algunos ejemplos, y su aplicabilidad dentro del entorno .Net

a) Encriptando secciones del web.config, con estos artículos queda clarísimo: Cifrado de información en los archivos de configuración de ASP.NET y Encrypting Configuration Information in ASP.NET 2.0 Applications. Podemos usar dos providers: RSA o DPAPI, básicamente DPAPI es más segura por que esta atada a la máquina donde se realiza la encriptación (leer los comentarios de José M.A.). Pero el proveedor DPAPI (DpapiProtectedConfigurationProvider), qué algoritmo usa? Utiliza una API del sistema operativo llamada Windows Data Protection, y es expuesta a través de: Crypt32.dll (Win32).

b) ¿Que algoritmo de encriptación usa el servicio de membership de ASP.NET 2.0+? Si estamos usando el servicio de Membership de ASP.NET 2.0+, dentro del web.config, en el elemento membership, nosotros podemos definir el formato del password a almacenar en la base de datos, y puede ser de tres tipos: Clear, Encrypted, and Hashed. Clear, almacena el password en texto plano (por si me olvidó, o me gusta modificar el password directamente en la base de datos con un Open Table), Hashed para usar una función hash (en un sólo sentido), y Encrypted, para poder encriptar/desencriptar un password. ¿Qué implicancia tiene, usar Hashed o Encrypted?, pues que si estamos usando el control PasswordRecovery, con el formato Hashed no vamos a poder recuperar el password, lo que hará el control es generar un nuevo password, recuerden que Hash es un sólo sentido. ¿Qué algoritmos usa, y donde lo configuro? La configuración se hace en el elemento machineKey, y puedo usar las funciones hash MD5 y SHA1, y los algoritmos de encriptación simétrica 3DES y AES.

P.D.: Esto es el fruto de dos amanecidas hasta las 2:00 a.m., una rápida revisión a los algoritmos de encriptación, y sus respectivas implementaciones en .NET, que lo disfruten!

Saludos,

Crossposting desde ...
Published Friday, December 19, 2008 2:17 AM by starrillo
Filed Under: , ,

Comments

No Comments

Anonymous comments are disabled