Posteado por: fzapataramirez | Jueves, marzo 19, 2009

Introducción a la criptografía

 

Una de las tareas mas habituales a la hora de proteger información, es sin duda alguna el cifrado de datos. Mediante esta técnica podemos incrementar el nivel de seguridad de los datos que maneja nuestra aplicación, estableciendo un control sobre quien puede leer y/o modificar dicha información.

Hay que tener presente que la criptografía no evita el que las personas que no deben, accedan a la información que tratamos de proteger, sino que evita el entendimiento de la misma, que a la final es lo que nos importa ya que de “nada” le sirve al atacante acceder a las contraseñas de los usuarios de mi sistema si estas contienen un conjunto de caracteres “incoherentes”.

Por ejemplo, digamos que se tiene la cadena “894658987” la cual representa el número de la tarjeta de crédito de un usuario de mi sistema. Al ser esto un dato crítico, considero que debería mantenerlo cifrado en mi base de datos para evitar que un atacante tenga acceso a esta información en caso de que logre vulnerar mi servidor de base de datos. Para esto, se aplica un algoritmo de cifrado mediante el cual se obtiene una cadena “incoherente” para todo aquel que no haga el proceso de descifrado. Para este caso, la cadena cifrada sería algo como Y=?)(/&%ttr6%.

La única manera de obtener la cadena original es aplicando el proceso de descifrado con el mismo algoritmo que se utilizó para cifrar la cadena. La ventaja de todo esto, es que no cualquiera puede descifrar la cadena ya que en los algoritmos criptográficos utilizan llaves (equivalentes a una contraseña) para cifrar y se descifrar y además se garantiza que solo con la llave correcta se puede descifrar. Esto es algo parecido a los procesos de autenticación por contraseña, donde la seguridad está basada en la privacidad de la contraseña. Del mismo modo, la seguridad del cifrado radica en la privacidad de la llave porque todo el que la tenga, podrá acceder a la cadena original.

Pero que es una llave?. Una llave no es más que un conjunto de bytes que cumplen ciertas condiciones según el algoritmo. Uno de los aspectos más importantes de las llaves es su longitud. La longitud de una llave se mide generalmente en bits y se determina según el algoritmo de cifrado utilizado. Por ejemplo el algoritmo DES utiliza llaves de 56 bits. Gran parte de la seguridad de las llaves radica en su longitud debido a que entre más pequeña sea, más fácil será obtener la combinación de bytes mediante fuerza bruta. Por esta razón, quizás la longitud de las llaves utilizadas, sea un factor para elegir el algoritmo de cifrado a utilizar en nuestra aplicación.

Otro de los factores que influye a la hora de elegir el algoritmo adecuado, es el tipo de criptografía que se utiliza: Publica (Asimétrica) o Privada (Simétrica). Ambas son técnicas que difieren en cómo se utiliza la o las llaves de cifrado. A continuación se dará una breve explicación sobre cada una.

Cifrado Simétrico (Privado) 

El cifrado simétrico, utiliza una llave para cifrar y descifrar el mensaje, es decir, se utiliza exactamente la misma llave tanto para cifrar como para descifrar. Esto implica que la llave deberá ser compartida entre todos los que deben acceder a los datos cifrados, lo cual implica un riesgo de seguridad ya que si por ejemplo se transfiere la llave por la red (correo electrónico por ejemplo), existe la posibilidad de que una persona no deseada tenga acceso a la llave y pueda acceder a la información confidencial cifrada.

El proceso consiste entonces en emplear uno de los algoritmos de cifrado simétrico existentes (DES, AES, 3DES, etc) con una llave especifica. Después de aplicar el algoritmo se obtendrá la cadena cifrada que podrá ser transmitida por la red o almacenada en algún lugar específico. Luego cuando sea necesario conocer la cadena original, el destinatario (aplicación, servidor, persona, etc.) deberá usar el mismo algoritmo y la misma llave que se utilizaron para cifrar el mensaje. Únicamente, aquellos remitentes que tengan la llave, podrán descifrar el mensaje.

Cifrado Asimétrico (Público) 

La técnica de cifrado asimétrico no es una mejora de la técnica anterior, es más, no es posible decir que el cifrado asimétrico es mejor que el simétrico ni viceversa. La técnica de cifrado asimétrico, nació para atacar nuevas necesidades.

A lo que voy es que uno de los puntos que ataca el cifrado asimétrico es el hecho de tener que compartir la llave secreta y está pensado para facilitar la comunicación entre un remitente y un destinatario sin necesidad de correr un riesgo a la hora de compartir la llave.

 El cifrado asimétrico usa un total de dos llaves para cifrar los mensajes. Una llave privada y una llave pública. Como sus nombres lo indican, la llave privada es personal y no deberá ser divulgada bajo ninguna circunstancia (ni siquiera a los destinatarios con los que deseo comunicarme), mientras que la llave publica podrá ser publicada y divulgada.

El secreto de esta técnica radica en que todo lo que se cifre con la llave privada, solo podrá ser descifrado con la llave pública y todo lo que se cifre con la llave pública sólo podrá ser descifrado con la llave privada. Esto implica entonces que lo que yo cifre con mi llave privada, podrá ser interpretado por todo aquel que tenga mi llave pública (que en teoría es todo el mundo porque es pública y generalmente se comparte en un servidor Web por ejemplo). De este modo el destinatario solo estaría seguro (en teoría) que el mensaje enviado lo escribí yo y digo que en teoría porque eso no sería cierto en caso de que mi llave privada la tenga otra persona.

En sentido contrario, si el remitente usa la llave publica del destinatario, se podrá garantizar que el mensaje sólo podrá ser descifrado por el destinatario ya que sólo él tiene su propia llave privada. Esto evita entonces el riesgo que implica el tener que compartir una llave que es privada como se tiene que hacer en el cifrado simétrico ya que lo que se comparte en este caso en una llave publica que no hay ningún peligro de que se conozca.

Lo que hay que tener presente en esta técnica, es que si yo deseo comunicarme con un destinatario siempre debo usar la llave pública del destinatario para garantizar que solo él podrá entender el mensaje. Si yo firmara el mensaje con mi llave privada, lo podría descifrar todo el que tenga mi llave pública, lo cual no garantizaría privacidad de los datos sino que le garantizaría al destinatario que yo fui quien escribí el mensaje (esta es la base de las firmas digitales).

El algoritmo adecuado para usar en nuestras aplicaciones va de acuerdo a las necesidades de cada quien. Si se pretende cifrar información que solo será descifrada por la misma aplicación o por otras pocas, es buena idea usar el cifrado simétrico ya que es más rápido y requiere menos procesamiento. Por otro lado, si la información que se cifra es para compartirla por la red o hacia múltiples destinatarios, será buena idea usar cifrado asimétrico para evitar los riesgos de compartir la llave privada.

 

 

 

 


Responses

  1. Super que sigas poniendo articulos🙂

  2. simple y clara tu explicaion, muy interesante, gracias


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

Categorías

A %d blogueros les gusta esto: