Make your own free website on Tripod.com

CRIPTOGRAFÍA 

La criptografía es la técnica que permite codificar un objeto de manera que su significado no sea obvio en otras palabras es la ciencia de cifrar y descifrar información utilizando técnicas matemáticas que hagan posible el intercambio de mensajes de manera que solo pueden ser leído por las personas a quien van dirigido.

Es un medio para mantener datos seguros en un entorno inseguro, en el cual un objeto original (O) se puede convertir en un objeto cifrado (C) aplicando una función de cifrado (E). Es necesario que se pueda descifrar el mensaje cifrado, para volver a obtener el mensaje original aplicando una función de descifrado (D), que puede ser o no la inversa de E. un proceso de cifrado se puede mostrar como:

 

 

Existen dos conceptos básicos en criptografía: algoritmos de cifrado y claves. Ambos conceptos no están indisolublemente ligados, puesto que, habitualmente, un algoritmo de cifrado admite muchas claves y una clave podría servir para muchas funciones de cifra.

En el algoritmo de cifrado las funciones de cifrado y descifrado permiten cifrar y descifrar un objeto mediante la aplicación al mismo de procedimientos, generalmente repetitivos, que permiten ocultar el contenido del objeto y ponerlo en su forma original, respectivamente. Los algoritmos de cifrado son muchos y variados pero se pueden clasificar en dos gran grupos: sustitución, es decir, cambiar el contenido del objeto original por otro, y transposición, es decir, modificar el orden del contenido del objeto original.

Los algoritmos que se basan en la sustitución de partes del texto original por otros textos del mismo o de otros alfabetos tienen como objetivo básico aumentar la confusión. Se pueden dividir en dos grandes tipos según la complejidad del algoritmo:

  • Monoalfabéticos. Cambian cada carácter por otro carácter o símbolo. Son muy sencillos y se conocen desde antiguo. El primer algoritmo con nombre es el denominado Julio César, porque se dice que fue el primero en usarlo. Es muy sencillo, pero efectivo: cada letra del original se cambia por la que está un cierto número de posiciones más adelante. Ejemplo : en el algoritmo de julio cesar que tiene un desplazamiento de tres y consiste en sumar 3 al número de orden de cada letra, de esta forma a la A le corresponde la D, a la B la E y asi sucesivamente. Si asignamos a cada letra un número (A = 0,B = 1. . . ), y consideramos un alfabeto de 26 letras, la transformación criptográfica seria:C = (M + 3) mod 26

Sustituir A B C D E F G H Y J K L M N Ñ O P Q R S T U V W X Y Z

PorD E F G H Y J K L M N Ñ O P Q R S T U V W X Y Z C B A

Ejemplo:

Texto:“El Hacker acecha de nuevo”

Cifrado:Hñ kdfnhu dfhfkd gh pxhyr

  • Polialfabéticos. Cambian grupos de caracteres por otros caracteres o símbolos dependiendo de la frecuencia de su distribución en el texto original.

Ejemplo: Con una clave 2-3-1

Sustituir A B C D E F G H Y J K L M N Ñ O P Q R S T U V W X Y Z.

Por :

1/ F Q R A L K Z S J Ñ M Y T Y V D B E W V N O C X H P G

2/ G A W H V M U Y F Q L B R C J N D S K T Ñ P Z O Y X E

3/ C Ñ O G D Q H A R P Y T X E W V B M V L Y F S N Z K J

texto:“El Hacker acecha de nuevo”

cifrado:vt sgomhm fwdrvaf hd ypdcj

El objetivo de estos algoritmos es evitar un defecto de los monoalfabéticos que hace aparente la distribución del alfabeto del objeto original a partir del estudio del objeto codificado. El código Morse es un ejemplo muy sencillo de algoritmo polialfabético en el que cada carácter se sustituye por una secuencia de puntos y líneas.

Los algoritmos de transposición o permutación reordenan la estructura interna del objeto original para obtener un objeto cifrado cuya estructura no es aparente. Los algoritmos más populares de este tipo son los de transposición por columnas, que reordenan el objeto en columnas de forma que un cierto número de elementos (número de columnas) se agrupan y luego se reordenan aplicando el algoritmo de cifrado. Como ejemplo, el nombre “Julio Cesar”, organizado en 4 columnas y transpuesto sería:

JulioCesarJosu alcrie

Tambiénlos algoritmos de cifrado se pueden clasificar atendiendo al conjunto de datos sobre el que trabajan. Existen dos tipos básicos:

  • Flujo de caracteres que convierten la entrada inmediatamente en código cifrado. La transformación depende únicamente del símbolo de entrada, la clave y el algoritmo de cifrado. Son rápidos y tienen muy poca propagación de error. Sin embargo, son susceptibles de sufrir modificaciones o inserciones en línea. El código Morse es de este tipo.
  • Bloques que trabajan sobre un bloque completo del objeto original. Una transposición por columnas es un ejemplo de este tipo de algoritmos. Generan mucha difusión y son inmunes a inserciones en el bloque, tienen el problema de ser lentos y de propagar posibles errores a todo el bloque. Hay sistemas de archivos que codifican bloques antes de guardarlos en disco.

Para dar solución a los problemas de criptografía causada en década setenta se publicaron tres nuevos algoritmos basados en la realización de cálculos masivos por computadora:

  • El de Merkle-Hellman, que se basaba en el uso de un conjunto de enteros positivos y una suma objetivo, a principios de la década de los ochenta se encontró una forma de romper este algoritmo de cifrado.
  • El RSA, que tiene los mismos fundamentos matemáticos que el anterior pero incorpora resultados de la teoría de grandes números y la determinación de números primos. Su implementación software proporciona un rendimiento muy pobre, por lo que es muy frecuente el uso de hardware que lleva a cabo el cifrado con este tipo de algoritmo.
  • El Data Encryption Standard (DES) fue desarrollado por el U. S. National Institute of Standards and Technology para su uso en aplicaciones comerciales. Este algoritmo combina sustitución y transposición, aplicando ambas repetidamente con un total de 16 ciclos. Para ello usa únicamente aritmética estándar y operaciones lógicas, se permite su implementación en cualquier computadora. El DES ya no es un algoritmo seguro, tiene debilidades en su diseño, claves muy cortas (56 bits) y por posibilitar la existencia de puertas traseras que permitirían a la NSA descifrar cualquier objeto cifrado con este algoritmo, es un algoritmo muy popular y varias versiones del mismo son ampliamente usadas en la actualidad. Además, para reforzar la seguridad del algoritmo se ha incrementado la longitud de la clave.

El segundo concepto importante en criptografía es clave, donde la clave (k) es el patrón que usan los algoritmos de cifrado y descifrado para manipular los mensajes en uno u otro sentido. Existen sistemas criptográficos que no usan clave pero el uso de claves añade más seguridad a los mecanismos de cifrado porque con distintas claves se pueden obtener distintos mensajes cifrados usando la misma función de cifrado. De esta forma, para romper un sistema de cifrado es necesario conocer tanto las funciones correspondientes como la clave usada para cifrar un determinado objeto. es necesario tener sistemas de criptografía en los que siempre se pueda recuperar el objeto original a partir del objeto, dependiendo de los pasos a aplicar para ejecutar el proceso de cifrado, los sistemas de criptografía se pueden clasificar en dos tipos básicos:

  • Simétricos. En este caso, D es la función inversa de E y la clave usada en ambos casos es la misma. También se denominan sistemas de clave privada. Puesto que ambos comparten la clave, pueden trabajar de forma independiente. La simetría del proceso es muy útil siempre que se mantenga el secreto, ya que en ese caso se puede usar la clave como medio de autenticación. Sin embargo, estos métodos tienen problemas asociados con la filtración de las claves, su distribución, su debilidad criptográfica y el número creciente de claves.
  • Asimétricos. En este caso existen claves distintas para cifrar y descifrar y la función de descifrado no es exactamente inversa a la de cifrado. La asimetría permite reducir el número de claves a intercambiar entre los participantes en el proceso de cifrado.

Todos los sistemas que usan claves son sensibles a la pérdida, filtración o robo de claves. La única solución posible para este problema es que cuando un usuario sospeche que una clave ha sido interceptada lo notifique a quien corresponda para que éste a su vez cambie la clave y notifique que, a partir de un determinado instante, los mensajes codificados con la clave anterior no son válidos. Este método es el mejor posible pero no es óptimo. Si un usuario tiene objetos cifrados con una clave y le notifican que es inválida, deberá recodificar los objetos con la nueva clave y notificar la invalidez de la clave anterior. El uso de claves tiene varias ventajas:

  • Permite que las funciones de cifrado y descifrado puedan ser públicas.
  • Se pueden usar las mismas funciones para generar distintos cifrados.
  • El resultado cifrado no depende únicamente del diseñador del algoritmo sino también de una clave fijada por el dueño del objeto cifrado.

El uso de claves también genera problemas. En primer lugar, la clave debe ser conocida por el codificador y el descodificador de un objeto. En segundo lugar, la clave debe tener una cierta complejidad. En tercer lugar, limita la comunicación entre procesos a aquellos que conocen sus respectivas claves, lo que obliga a establecer protocolos de intercambio de claves que permiten llevar acabo comunicaciones seguras aunque se ejecuten sobre canales inseguros.

Sistemas de clave privada y sistemas de clave pública

Los sistemas de clave privada se basan en la ocultación de la clave de cifrado. Se supone que la clave es conocida únicamente por el usuario que cifra el objeto original. Estos sistemas que se han usado convencionalmente ejecutan el cifrado (E) aplicando la clave (K) al objeto origen para obtener el objeto cifrado (C):

C = E (K, O)

El problema de estos sistemas es que para que alguien descifre el objeto cifrado debe conocer la clave con que está cifrado. Hay dos soluciones para este problema:

  • Propagar la clave
  • Recodificar y añadir nuevas claves

Por ejemplo si se quiere que tres procesos (A,B,C) compartan objetos cifrados. Distribuir a todos ellos la misma clave propagando la clave original no parece muy seguro. Es mejor que cada par de procesos, por ejemplo A y B, compartan una clave KAB para cifrar sus interacciones. Lo mismo debería hacerse para las interacciones

(A, C)y (B, C). Para n usuarios serian necesarias n* (n-1) / 2 claves, lo que hace que para un número grande de usuarios sea muy difícil mantener claves confidenciales y con buenas características, debido principalmente a dos problemas:

  • Es necesario tener una base de datos de claves almacenadas en un sistema seguro, por la imposibilidad de recordar todas aquellas.
  • Estos sistemas violan el principio de diseño que recomienda mostrar al exterior lo más posible para evitar la curiosidad y los ataques de usuarios dispuestos a romper la seguridad del sistema.

El sistema DES (Data Encription Standard) es el más popular de los sistemas de clave privada. Para resolver los problemas de propagación de claves, Diffie y Helman propusieron un sistema de clave pública, en el que cada usuario tiene una clave de cifrado que puede se conocer todo el mundo. Así cada usuario puede publicar su clave de cifrado para que cualquiera pueda enviar un mensaje cifrado con dicha clave. Sin embargo, cada usuario tiene también una clave de descifrado secreta o privada.

Con este método sólo se necesitan dos claves para cualquier número de usuarios: clave pública y privada. Cualquier proceso A puede enviar a B mensajes cifrados con la clave pública de B. Sólo el proceso B podrá descifrar el mensaje, ya que es el único que posee la clave privada, necesaria para descifrar el mensaje cifrado con la clave pública. Este método asegura la confidencialidad, puesto que aunque un intruso obtenga el mensaje cifrado, no podrá descifrarlo. Además, soluciona los dos problemas principales de los sistemas de clave privada:

  • No es necesario intercambiar claves para poder comunicarse con un servidor de forma segura.
  • Muestran lo más posible al exterior, evitando que los intrusos tengan curiosidad por conocer las claves de los servidores.

Se han propuesto varios algoritmos de cifrado con clave pública: Merkle-Hellman Knapsacks, RSA, Hash, DAS, etc. El más popular es el RSA (Rivest-Shamir-Adehnan), que fue presentado en 1978 y que se mantiene seguro hasta el momento. Este algoritmo usa operaciones de grandes números y dos claves, para cifrar (c) y descifrar (d). Cada bloque B se codifica como Bc mod n. La clave de descifrado se elige cuidadosamente de forma que (Bc)d mod n B. Por tanto, el receptor legítimo del bloque, al conocer d, sólo tiene que llevar a cabo esa operación.

Firmas Digitales 

Una variante de los algoritmos de clave pública son las firmas digitales, que se usan para realizar autorizaciones en un entorno de computación donde no hay objetos tangibles (p. ej.: la pupila o la firma) para identificar al usuario. Una firma digital es un protocolo que produce el mismo efecto que una firma real. Es una marca que sólo el dueño puede proporcionar, pero que otros pueden reconocer fácilmente como perteneciente a dicho usuario. Se puede implementar mediante:

  • Sistemas de clave privada, donde la posesión de la clave garantiza la autenticidad del mensaje y su secreto.
  • Sistemas de sello, donde no es necesaria una clave. Se puede hacer que el usuario tenga un sello que lo identifique, que puede ser una función matemática o una tarjeta electrónica con información grabada en la banda magnética.
  • Sistemas de clave pública, donde la posesión de la clave de descifrado hace que sólo el receptor adecuado pueda descifrar un mensaje cifrado con su clave pública.

Una firma digital debe ser auténtica, no falsificable, no alterable y no reusable. Para satisfacer estos requisitos, las firmas digitales pueden incluir sellos con fechas y números de orden o números aleatorios.

 

 

 

Pagina Principal | | ©2005 Universidad Tecnologica de Panama |