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,

Published 19/12/2008 2:17 por Sergio Tarrillo
Archivado en: ,,
Comparte este post:
http://geeks.ms/blogs/sergiotarrillo/archive/2008/12/19/131910.aspx

Comentarios

# re: encriptando o cifrando informacion?

Muy interesante la recopilación y clasificación de la información Sergio.

Friday, December 19, 2008 11:57 AM por José Fortes

# re: encriptando o cifrando informacion?

Se dice "cifrando". Encriptando y encriptación no son neologismos, son barbarismos que no vienen en el diccionario.

Lo que si se puede decir en español es "criptografía".

Friday, December 19, 2008 12:38 PM por Alfredo Novoa

# re: encriptando o cifrando informacion?

Hola:

pareciera que solo has googleado y enumeras los algoritmos, ya que por ejemplo en md5 dices "dicen que es inseguro"..., en esto tengo que aceptar tu sinceridad.....

pero creo que seria bueno que investigues ahora cuales son seguros, cuales no y por que... es mas,  que tu mismo intentes romper los algoritmos - con los metodos que hay en el internet, para que no te la quiebres mucho - y asi des una opinion de cual seria mejor usar :).

sobre lo otro de aplicarlo en .net, si me parece bueno ;)

Salu2

Ddaz

Friday, December 19, 2008 7:32 PM por David Daniel Arroyo Zari "Ddaz"

# re: encriptando o cifrando informacion?

Ddaz así es, sólo es una lista recopilatoria de los algoritmos y funciones hash de cifrado, además de las clases de como implementarno en .Net.

Hacer un análisis detallado no acabo nunca, y quería tener la lista, por que me habían pedido la codificación de un algoritmo (además la pidió en C# con Windows forms), ahora podré referenciarlo a esta página.

Pero de todas maneras voy agregar tu comentario al draft de Writer: "investigar seguridad, ventajas de los diversos algoritmos de encriptaciòn" (junto con los posts de WCF, SOA, Ado.Net EF, ObjectDataSource, etc...)

P.D.: Para los amigos lectores, que deseen ventajas o desventajas, de algoritmos de encriptación, algunas sugerencias: averiguar como lo hacen los otros.

¿Vas a cifrar passwords? Parece que todos lo hacen usando una función HASH, para que no se pueda recuperar el password, con el input es suficiente para hacer el match, ahora varios sitios usan MD5 o SHA1, cómo que por ahí va la cosa no?

¿vas a cifrar textos, pero también necesitas decifrarlos? .Net para cifrar sus secciones personalizidas de web.config usa DPAPI y RSA, imagino que la gentita de MS ha hecho una investigación, y debido a su investigación usa esos dos. Así que si ellos lo usan, no serán tan malos no?

Si no tienes tiempo de investigar tu mismo cuál algoritmo usar, tomar como referencia los sitios modelos que tengas. ¿qué usa gmail para guardar los password?, es decir, aprovechar la investigación que ellos ya hicieron por ti (claro, asumiendo que ellos la hicieron :D).

Saludos,

Friday, December 19, 2008 8:41 PM por Sergio Tarrillo

# re: encriptando o cifrando informacion?

sergio....

me dejaste sin palabras... no se si reir o llorar... con esa respuesta..., definitivamente necesitas leer un poco mas de encriptacion :)

Ddaz

Friday, December 19, 2008 9:06 PM por David Daniel Arroyo Zari "Ddaz"

# re: encriptando o cifrando informacion?

Si me falta leer bastante, estará dentro de los pendientes :D. Pero como lista de recopilación, la entrada parece que cumplió su objetivo.

Por otro lado, creo que para todos sería mejor si creas una entrada, contado tus experiencias con encriptación. Y que no quede en el draft aduciendo: "no puedo contarlo públicamente porque todos pueden atacar", por que eso ya suena a floro. Y si vas a comentar algo, que sea en una entrada mejor (con la experiencias que tienes) y no entre "", que es lo mismo que nada, así aprendemos todos :D.

Saludos,

Friday, December 19, 2008 9:22 PM por Sergio Tarrillo

# re: encriptando o cifrando informacion?

ta weno pues .. me haras repetir casi todo lo que te dije por el msn.... pero bueno a ver que sale ...

Salu2

Ddaz

Saturday, December 20, 2008 1:06 AM por David Daniel Arroyo Zari "Ddaz"

# re: encriptando o cifrando informacion?

jajajaja grande sergio, grande!!! yo no me considero ni ala mitad de tu nivel, tu me destruyes :S pero creo que todo comentario debe ser constructivo y no destructivo, aplaudo por la informacion que brindas, realmente me acabas de motivar a seguir aprendiendo :D gracias, y no hagas caso a comentarios "Zs" :D un abrazo brother,

Sunday, December 21, 2008 6:48 AM por Blad

# re: encriptando o cifrando informacion?

Hola Blad,

Creo que si hay hacer caso a Ddaz, tiene experiencia en el tema, por eso hay que animarlo a que cuente más sobre el tema en su blog, y que no sólo quede en comentarios entre líneas.

P.D.: Nunca se acaba el aprendizaje, es imposible saberlo todo, por eso hay especialistas por temas, pero es bueno tratar de aprender algo nuevo cada día (tecnlogicamente y humanamente)... y da gusto saber que este blog motive a otros a seguir aprendiendo :D

Saludos,

Sunday, December 21, 2008 9:00 PM por Sergio Tarrillo

# re: encriptando o cifrando informacion?

Si, estaremos ala espera del post de David, contare las horas, la ansiedad me carcome.. :D

Salu2,

Monday, December 22, 2008 5:41 AM por Blad

# Seguridad de Aplicaciones I – Preludio y mi opinión sobre la realidad de las empresas y el Testing de Software.

Espero que este sea el primero de varios, sobre seguridad en aplicaciones ( y tantito en servers ), hay

Monday, December 22, 2008 7:01 AM por David Daniel Arroyo Zari - Ddaz -