Encriptación y Criptografía

Técnicas de cifrado

Las técnicas de cifrado consisten en manipular la información para intentar conseguir:

  1. Confidencialidad: que sólo pueda acceder a la información su legítimo destinatario.
  2. Autentificación: que tanto el emisor como el receptor puedan confirmar la identidad de la otra parte.
  3. Integridad: que la información no pueda ser alterada sin ser esto detectado.

Un sistema de cifrado será bueno si toda la seguridad reside en la clave y ninguna en el algoritmo. En otras palabras, no debería ser de ninguna ayuda para un atacante conocer el algoritmo que se está usando. Sólo si el atacante obtuviera la clave, le serviría conocer el algoritmo. Dado que toda la seguridad descansa en la clave el tamaño de la clave es una medida de la seguridad del sistema:

  • para cifrados simétricos se consideran seguras claves de 128 bits.
  • para cifrados asimétricos se recomienda el uso de claves de 1024 bits.

Existen algoritmos de cifrado libres y patentados. El software de encriptación usado en Linux (OpenSSH, GPG y OpenSSL) no usa algoritmos protegidos por patentes, sólo algoritmos libres.

Los sistemas de cifrado se basan en funciones-trampa de un sólo sentido:

  • una función de un sólo sentido es aquélla cuya computación es fácil, mientras que su inversa resulta extremadamente difícil.
  • una función-trampa de un sólo sentido es una función de un sólo sentido que tiene una trampa: si se conoce alguna pieza de la información es fácil computar el inverso.

Por ejemplo, es fácil multiplicar dos números primos, pero es muy difícil averiguar de qué números primos se trata si sólo nos dan el resultado de esa multiplicación. Sólo se puede resolver fácilmente si se conoce uno de los números primos.

El cifrado basado en factorización de números primos utiliza un número compuesto de dos factores primos grandes (mayores que 10100) para cifrar el mensaje. El algoritmo para descifrar el mensaje requiere el conocimiento de los factores primos: el descifrado será fácil si poseemos uno de los factores, pero extremadamente difícil en caso contrario. La seguridad de este algoritmo radica en que no hay maneras rápidas de factorizar un número grande en sus factores primos utilizando computadoras tradicionales.

Existen varios tipos de métodos criptográficos:

  • Cifrado simétrico: utilizan una única clave compartida.
  • Cifrado asimétrico: utilizan claves públicas y privadas.
  • Funciones hash: asocian un número a un documento.
  • Cifrado híbrido: combina cifrado simétrico, cifrado asimétrico y funciones hash.

Cifrado simétrico

El cifrado simétrico consiste en el uso de una clave que es conocida tanto por el emisor como por el receptor, y se supone que por nadie más. El emisor genera el mensaje cifrado utilizando un algoritmo de cifrado simétrico y la clave, y transmite el mensaje cifrado al receptor. Éste, aplicando la misma clave y el algoritmo inverso obtiene nuevamente el mensaje original. Este método garantiza confidencialidad y autentificación, pero el hecho de que ambas partes deban conocer la clave genera dos problemas:

  1. el intercambio de claves. Una vez que el remitente y el destinatario hayan intercambiado las claves pueden usarlas con seguridad, pero ¿era seguro el canal de comunicación que han usado para transmitirse la clave? Para un atacante es mucho más fácil interceptar una clave que probar las posibles combinaciones del espacio de claves.
  2. el gran número de claves que se necesitan, ya que cada persona necesita una clave distinta para cada interlocutor.

Los algoritmos de cifrado simétrico más utilizados son 3DES (libre) e IDEA (patentado).

Cifrado asimétrico

Las técnicas de cifrado asimétrico se basan en el uso de dos claves, una pública y otra privada, de modo que lo que una de ellas cifra, sólo puede descifrarlo la otra, y viceversa. Se inventaron para evitar el problema del intercambio de claves de los sistemas de cifrado simétricos. Tanto el emisor como el receptor poseen dos claves: una privada (conocida sólo por él) y una pública (conocida por cualquiera), de manera que no es necesario que el emisor y el receptor intercambien claves secretas. Además, sólo se necesitan un par de claves privada/pública por persona. El método empleado dependerá de los objetivos buscados:

  • Confidencialidad: Cifrar
    • cifrar un mensaje para enviarlo a un receptor: si el emisor desea transmitir un mensaje al receptor, de manera que sólo el receptor pueda conocer su contenido generará el mensaje cifrado utilizando un algoritmo de cifrado asimétrico y la clave pública del receptor. En este caso sólo se garantiza la confidencialidad del mensaje, ya que sólo el receptor, utilizando el algoritmo inverso y su clave privada podrá reproducir el mensaje original, pero no la identidad del emisor ni la integridad del mensaje. Este método se denomina cifrado simple.
    • cifrar un mensaje para guardarlo con seguridad: si el mensaje lo ciframos con nuestra clave pública, sólo nosotros podremos descifrarlo. Esto se utiliza para proteger archivos que no queremos que nadie pueda leer.
  • Autentificación: Firmar

    Si el emisor desea transmitir un mensaje al receptor, de manera que éste tenga garantizado que la única persona que pudo haberlo generado es el emisor, generará el mensaje cifrado utilizando un algoritmo de cifrado asimétrico y su clave privada. El receptor, utilizando el algoritmo inverso y la clave pública del emisor podrá reproducir el mensaje original. En este caso sólo se asegura la autentificación, no la confidencialidad (ya que la clave pública del emisor es conocida por cualquiera, por lo que cualquiera podría haber obtenido el mensaje) ni la integridad. Este método se denomina firma digital.

  • Confidencialidad + Autentificación: Cifrar + Firmar

    Cuando el emisor desea transmitir un mensaje al receptor asegurando la confidencialidad y la autentificación, realizará los dos pasos anteriores consecutivamente:

    • primero cifra el mensaje con la clave pública del receptor.
    • a continuación lo firma con su clave privada.

    El receptor, utilizando el algoritmo inverso, su clave privada y la clave pública del emisor podrá reproducir el mensaje original. Este método se denomina doble cifrado.

Los algoritmos de cifrado asimétrico más utilizados son RSA (libre) y DSA (libre).

Funciones hash

Una función hash (también denominadas función resumen, función de reducción o función de mezcla), es un algoritmo matemático que asocia a la entrada (un documento), un número (valor hash, resumen, suma, huella digital, fingerprint o checksum), de manera que se cumplan dos requisitos:

  1. es casi imposible que a dos documentos distintos les corresponda el mismo valor hash. Teóricamente es posible que dos documentos diferentes den lugar al mismo valor hash, pero las posibilidades son ínfimas.
  2. conocido el valor hash, es casi imposible obtener el documento origen.

Así, un valor hash identifica casi unívocamente a un documento, de modo que se utiliza para garantizar la integridad de un documento. Las funciones hash más utilizadas son MD5 (libre) y SHA (libre), siendo sus principales aplicaciones el login en Linux y la verificación de archivos descargados de Internet.

Cifrado híbrido

La complejidad computacional de los algoritmos de cifrado asimétrico hace que sea muy costoso el uso del doble cifrado, por lo que generalmente se utiliza el cifrado híbrido, que combina cifrado asimétrico, cifrado simétrico y funciones hash. Herramientas como GPG, OpenSSH y OpenSSL utilizan cifrado híbrido: criptografía asimétrica para intercambiar la clave de cifrado simétrico y criptografía simétrica para la transmisión de la información.

Se utiliza cifrado asimétrico para dos cosas:

  1. intercambiar de manera segura la clave que luego será utilizada con un algoritmo de cifrado simétrico para cifrar el resto de la comunicación. Como medida de seguridad adicional, la clave usada es diferente para cada sesión. De esta forma, si un atacante pudiera descifrar la clave de sesión, sólo le permitiría leer los mensajes de esa sesión.
  2. intercambiar de manera segura el valor hash del mensaje, que utilizaremos para garantizar la integridad del mensaje.

El sistema a emplear dependerá del objetivo buscado:

  • Confidencialidad: Cifrar
    • genero la clave de sesión.
    • cifrado simétrico del mensaje con la clave de sesión.
    • cifro la clave de sesión con la clave pública del receptor.
    • el receptor descifrará la clave de sesión con su clave privada, y con la clave de sesión y el algoritmo simétrico descifrará el mensaje.
  • Autentificación + Integridad: Firmar
    • aplico una función hash al mensaje, obteniendo el resumen_original (huella digital).
    • cifro el resumen_original con mi clave privada, obteniendo la firma digital.

    El receptor:

    • descifra la firma digital con mi clave pública, obteniendo el resumen_original.
    • aplica la función hash al mensaje, obteniendo el resumen_destino, y comprueba si resumen_original = resumen_destino.
  • Confidencialidad + Autentificación + Integridad: Cifrar + Firmar

    Consiste en realizar los dos pasos anteriores consecutivamente.

Artículos en la categoría "Encriptación y Criptografía"

  1. Checksum MD5
  2. Conexión remota segura SSH
  3. Software de encriptación GPG
  4. APT seguro (Secure APT)
  5. HTTPS (HTTP seguro): SSL

Un comentario:

  1. Deberían de publicar el codificado con matrices y sus inversas.
    buen artículo.
    gracias… XD