8.17. Métodos de criptografía:

 

8.17.1. Criptografía:

La criptografía es la ciencia que permite convertir un determinado conjunto de códigos generalmente comprensibles en otro cuyas características lo hacen de difícil interpretación.

Este proceso se lleva a cabo a través de algoritmos matemáticos combinados con claves. El mayor o menor grado de complejidad del algoritmo, combinado con una determinada longitud de clave, harán que el nivel de dificultad para poder descifrar o interpretar un mensaje sin ser parte de los miembros que realizan estos pasos (es decir intruso) sea una tarea simple, dificultosa o prácticamente imposible.

Este arte, es milenario, y se empleó generalmente en el transporte de información de carácter militar o política. En sus comienzos se lo utilizaba para mensajes en tránsito, pero casi asociado a la aparición de la informática, se comienza a hacer necesario su empleo también en el almacenamiento de la información, pues la misma se presenta ahora de una manera más accesible a individuos que no necesariamente deberían tener acceso. Es evidente que con la aparición de las redes y la posibilidad de interconexión que existe hoy, la importancia de mantener la confidencialidad de la información por todos los métodos existentes, hace necesario el uso de esta herramienta en muchas actividades cotidianas.

Uno de los conceptos a tener en cuenta es que la información en tránsito en todos los casos es escuchada por muchas personas, ya sea dentro de una red LAN como cuando se desplaza a través de vínculos WAN tanto dedicados como por medio de redes X.25 o Frame Relay. Cualquiera que posea las herramientas adecuadas puede decodificar los distintos encabezados de estas tramas o paquetes y acceder a la información que está viajando.

Al criptografiar información, si se intenta interpretarla, será necesario poder revertir el proceso, para volver al mensaje original. Como se mencionó con anterioridad, el empleo de la clave es lo que hace posible esta actividad, la cual es análoga a la llave de un candado o cerradura y el algoritmo es el conjunto de engranajes o mecanismos. La cantidad de trabas o bolillas que posea esta cerradura, determinará la cantidad de posibilidades que existen para abrir o cerrar ese acceso. Si se mantiene este ejemplo para el caso de un candado de clave numérica, este podría tener cuatro ruedas de diez dígitos de las cuales una sola combinación liberaría el mecanismo, generando una posibilidad entre diez mil. Criptográficamente hablando, tendría un ESPACIO DE CLAVES de 10.000 posibilidades.

Si alguien tuviera acceso a este candado sin conocer la combinación (Clave), podría probar desde el 0000, luego el 0001, el 0002..... y así sucesivamente hasta lograr abrir el candado. Nuevamente en terminología criptográfica, esto se llamaría FUERZA BRUTA. Se debe tener en cuenta que si este intruso pudiera tener algún indicio respecto a esta combinación, como por ejemplo que la misma empieza con el dígito cuatro , el espacio de claves queda reducido a cien, con lo cual el tiempo necesario para abrir el candado sería diez veces menor. Esta última, es de especial interés pues en informática existe un sinnúmero de métodos de reducir el ESPACIO DE CLAVES, minimizando el tiempo necesario para vulnerar textos cifrados. Por ejemplo, un método muy conocido de cifrado (que se mencionará posteriormente) es el DES que tiene una clave de 64 bit. A primera vista se pensaría que su espacio de claves es 264, pero como primer detalle, esta clave emplea 8 bit de paridad, con lo cual ya se tiene un espacio de claves de 256 claves independientes. Como segunda medida se puede emplear por ejemplo un método llamado criptoanálisis diferencial que reduce las posibilidades a 234, con lo cual se reducen los tiempos casi a la mitad. Esto se menciona sólo a título de ejemplo, pues si se tiene en cuenta que cada intento de estos trae aparejado la comparación de un texto para verificar si es entendible, la realidad hace que si se trata de un mensaje extenso esta actividad sea poco rentable, existiendo métodos de análisis mucho más eficientes.

Otro detalle significativo es que la ENTROPIA de los códigos reales no es máxima en ningún caso, es decir que la frecuencia de aparición de los distintos símbolos no es equiprobable. Si se analiza cualquier texto escrito en Castellano, se podría apreciar que determinadas letras tienen mayores ocurrencias de aparición que otras, por ejemplo la E, N, S, A, etc. y por el contrario es poco frecuente encontrar X, W. Esta característica es de sumo interés pues un mensaje cifrado si se puede determinar su alfabeto fuente (por ejemplo Castellano) allanará las posibilidades de criptoanálisis. Es evidente que este detalle causa más impacto cuanto mayor sea la longitud del texto, pues en unas pocas palabras esta frecuencia de aparición puede no ser cierta, y absolutamente lo será si la longitud tiende a infinito. También se tiene en cuenta el CODIGO EN SU EXTENSION, pues volviendo al mismo ejemplo, la secuencia de extensión dos TH en Castellano tiene una probabilidad excesivamente baja pero en Inglés es cotidiana; más aún si se extiende en grado tres THR en Castellano no existe y en Inglés sí. Estos breves conceptos sirven para ilustrar escuetamente cómo se puede reducir de distintas maneras la tarea de criptoanalizar un mensaje, desde ya que estos conceptos son básicos, y que en la actualidad, esta actividad se encuentra altamente avanzada y tremendamente favorecida por las altas velocidades de procesamiento actuales.

 

8.17.2. Tipos de algoritmos:

El principio de funcionamiento de los distintos algoritmos y sus claves correspondientes, se puede clasificar clásicamente de tres formas: Simétrico, asimétrico e híbrido. En este texto se incluirá una cuarta forma que se llamará irreversible. A continuación se detallan cada una de ellas.

8.17.2.1. Cifrado simétrico:

Este tipo de algoritmo, emplea la misma clave para cifrar que para descifrar. Este algoritmo es el primero de todos, y se empleo casi con exclusividad hasta principios de los ochenta. Los ejemplos más conocidos son el DES, Triple DES, CAST, RC 4 y RC 5, Blowfish, IDEA, y CAST.

Como ejemplo simple, se desea encriptar el siguiente:

código ASCII: Mje fuente = {77, 69, 83, 65} = {MESA}

El algoritmo consiste en sumarle siete a cada símbolo (Clave = 7).

Mensaje Cripto = {84, 76, 90, 72} = {T, L, Z, H}

Para desencriptarlo, el algoritmo será la resta, y la Clave será la misma = 7 .

Este ejemplo que a simple vista parece trivial, de hecho no lo es tanto pues fue utilizado durante muchos siglos, y se llamaba el algoritmo del César. Se puede hacer la prueba de redactar un texto cualquiera y emplear distintas claves, comprobando que no es tan simple decodificarlo, también se puede incrementar la complejidad del algoritmo con distintas operaciones simples e inclusive con combinaciones de ellas, logrando paso a paso un grado de dificultad cada vez mayor.

Como conclusión, se puede apreciar que se emplea la misma clave para encriptar que para desencriptar, y el algoritmo es la inversa. Si se desea incrementar el grado de dificultad, se realiza fácilmente, incrementando la cantidad de operaciones y la longitud de la clave.

El gran problema radica en la forma en la cual se hace llegar la clave pues debería ser por otro medio de comunicaciones debido a que justamente este no es seguro. Este método posee la gran debilidad que esta clave no puede ser difundida pues a medida que más de dos personas conocen un secreto, este poco a poco va dejando de serlo. El gran inconveniente radica en que se está creyendo que la información es confidencial y sobre este concepto se fundamenta la toma de decisiones, siendo esto más peligroso que si se es consciente que la información puede ser escuchada y se opera al respecto.

Los algoritmos más conocidos que emplean esta técnica son:

 

 

8.17.2.2. Cifrado Asimétrico:

A mediados de los años 70` se descubre esta nueva técnica que permite el cifrado de una manera diferente, haciendo especial hincapié en la preservación del secreto, el cual como se mencionó anteriormente, sólo es seguro si lo conoce una sola persona (es decir el propietario) pues si ya se difundió a alguien más se pierde la certeza de su no distribución, los algoritmos más empleados en la actualidad son RSA y Diffie-Hellman.

Esta técnica se basa en el empleo de dos claves, una PUBLICA la cual se difunde sin ninguna limitación, como se hace con un número telefónico en la guía correspondiente, esta clave es la que se emplea para emitir un mensaje cifrado, es decir la emplea cualquier persona que desee enviar un mensaje seguro hacia un determinado remitente (por supuesto que cada remitente tendrá su propia clave pública, la cual dará a conocer a todas las personas que necesiten emplearla sin limitación). La segunda es la clave PRIVADA, la cual es conocida únicamente por su propietario y nadie más, y es la que se emplea para descifrar el mensaje cifrado con su correspondiente clave pública. Como se puede suponer, ambas claves están asociadas de alguna manera, conformando un PAR DE CLAVES, causa por la cual no es imposible partiendo desde la clave pública obtener la privada, pero en la actualidad aún es excesivamente cara la inversión de tiempo, recursos y algoritmos necesarios para hacerlo, y más aún a medida que se emplean claves extensas; esta cierta complejidad es la que hace a esta técnica altamente confiable y la convierte en la más segura que se emplea en la actualidad.

La lógica es la siguiente:

Mje fuente = {M}


ClAVE PÚBLICA <Mje fuente = {M}> = Mje cripto Emite


Recibe ClAVE PRIVADA <Mje cripto> = Mje fuente

En este método se soluciona el problema de la distribución de claves, pues no se necesita otro canal o procedimiento para esta tarea, pues no es necesario.

El primer problema que se plantea es cómo se puede estar seguro que la clave pública que dice ser, realmente es; es decir una persona puede confiar en la guía telefónica que publica anualmente la o las Empresas de telefonía local porque sabe que las mismas fueron impresas por esta Empresa y es su responsabilidad ser veraces, también se puede confiar en un teléfono o dirección que me suministra una persona conocida siempre y cuando la misma esté considerada como "confiable"; pero qué sucedería si la clave pública que se obtiene no es en realidad la que se corresponde con el remitente al cual se le desea enviar un mensaje cifrado, como ejemplo se presenta el siguiente:

PROCEDER CORRECTO

A desea enviar un mensaje a B.

A busca en la guía G la clave pública de B, la cual será KB(Pub)

Redacta el mensaje M = Mje M.


Lo criptografía con la clave pública de B, KB(Pub) {Mje M} = Mje cripto

Lo envía a B.

B lo recibe.


B lo decriptografía con su clave privada KB(Priv) , KB(Priv) {Mje cripto} = Mje M

Obteniendo el mensaje orijinal, Mje M.

PROCEDER INCORRECTO

J publica su lista falsa de claves públicas.

A desea enviar un mensaje a B.

A busca en la guía J la clave pública de B, la cual será KB(Pub falsa)

Redacta el mensaje M = Mje M.


Lo criptografía con la clave pública falsa de B, KB(Pub falsa) {Mje M} = Mje cripto falso

Lo envía a B.

J lo escucha y lo decriptografía con la clave privada falsa de B,


KB(Priv falsa) {Mje cripto falso} = Mje M

J criptografía el mensaje con la verdadera clave pública de B,


KB(Pub) {Mje M} = Mje cripto

J lo envía a B.

B lo recibe.


B lo decriptografía con su clave privada KB(Priv) , KB(Priv) {Mje cripto} = Mje M

Obteniendo el mensaje orijinal, Mje M.

Nótese como un intruso obtuvo el mensaje original, el cual desde ya que si se realiza el proceder inverso, también se tomará conocimiento de la respuesta de B hacia A.

Este como se mencionó es el primer problema que plantea este algoritmo, y es por esta razón que es de suma importancia garantizar la veraz distribución de claves públicas, la cual se realizará a través de listas conocidas de distribución que puedan garantizar la consistencia de sus datos o lo que es más eficiente a través de la seguridad individual de cada emisor, el cual deberá estar plenamente convencido de la confiabilidad de las fuentes de obtención, lo cual puede ser a través del propio receptor telefónicamente, vía terceros que son de confianza, dependencias dentro de la organización que garanticen, etc.

El segundo gran problema que presenta este método es la demora que introduce (llegando a ser en algunos casos hasta mil veces más lentos que las técnicas simétricas), y el mayor volumen de información que genera. Ambos problemas son naturales en todo proceso que se desee optimizar la seguridad, como regla general:

SIEMPRE QUE SE INCREMENTA LA SEGURIDAD, SE INTRODUCEN DEMORAS.

Esto da origen al cifrado híbrido.

Los algoritmos más conocidos asimétricos son RSA, Diffie-Hellman y EL Gammal, los cuales serán tratados en el capítulo 8.16. Métodos de autenticación y no repudio.

 

8.17.2.3. Cifrado Híbrido:

Esta técnica es la que se emplea en la mayoría de las aplicaciones de Software comercial, y se basa en el empleo de las dos algoritmos (Simétrico y asimétrico), para mejorar la velocidad y el volumen de datos, se procede a encriptar todo el mensaje con clave simétrica, luego se toma esta clave y se la criptografía con clave pública enviando todo el conjunto; el receptor entonces recibe un mensaje que en realidad está compuesto de dos partes, la primera de ellas es la clave simétrica criptografiada a través de una clave pública; sobre esta parte se aplica la clave privada obteniendo como resultado la clave simétrica original, una vez obtenida esta, se aplica sobre la segunda parte (mensaje criptografiado), obteniendo el texto original.

Esta técnica en general para optimizar la seguridad se suele emplear generando en cada sesión una clave simétrica en forma aleatoria, es decir para cada mensaje se implementará una clave simétrica diferente. Esta mejora permite incrementar el algoritmo pues aún en el caso de lograr descifrar la clave simétrica, esta sola sería de utilidad para ese mensaje y nada más.

 

8.17.2.4. Cifrado Irreversible:

Este procedimiento, consiste en poder criptografiar código, pero si bien puede existir un método de desencriptado, este no se difunde o no se emplea. Su aplicación más común se puede observar en la forma en que los sistemas operativos de red suelen tratar las cuentas de usuario y contraseñas, como por ejemplo Unix o Windows NT. Estos sistemas operativos, al crear una cuenta de usuario de red, la guardan en archivos dentro de alguna estructura de directorios en forma criptografiada. Al hacerse presente este usuario en la red, solicita validarse ante un servidor, colocando su nombre de usuario y contraseña. El o los servidores que reciben esta petición, aplican el mismo algoritmo de encriptado y comparan los resultados, si son los mismos códigos, lo reconocen como usuario de red, caso contrario le niegan el acceso. Lo importante a tener en cuenta es que en ningún momento se compara texto plano, sino código criptografiado, por lo tanto no se necesita el procedimiento inverso para desencriptar.

Lamentablemente este tipo de cifrado tiene poca difusión, pues tiene la enorme potencia de no poder volver atrás. Si se tiene en cuenta este detalle, se podría implementar en discursos políticos, programas de TV, etc, en los cuales sería importantísimo que ni siquiera el que generó el discurso o diálogo pueda volver a repetirlo.