HTMLWeb
manuales - recursos - gráficos - programación...

Home - Seguridad - Criptografía - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13

Criptografía (VI)
por Luciano Moreno, del departamento de diseño web de BJS Software.


Fundamentos matemáticos.-

NOTA: Este capítulo puede resultar complejo para aquellas personas con un conocimineto limitado de matemáticas, especialmente de Álgebra de conjuntos, Matemática Discreta y Aritmética Modular. No obstante, lo incluyo porque es necesario si se quiere adquirir una base sólida de cómo funcionan y se crean los sistemas de codificación en Criptografía. Procuraré ser lo más somero en conceptos matemáticos puros, usando sólo aquellos necesarios para dar sentido al capítulo, y dejando en vuestras manos el ampliar conocimientos si os interesa.

Los sistemas criptográficos modernos, tanto si son de clave simétrica como de llave pública, para ser considerados tales deben cumplir una serie de requisitos que los hagan seguros, reversibles y viables. Para obtener sistemas que cumplan estas condiciones se ha desarrollado un campo matemático completo, la Teoría de Códigos, basada en el álgebra de los sistemas discretos y en las clases residuales de módulo dado, que sirve para definir alfabetos y funciones que permiten obtener sistemas robustos.

Generalmente, todo sitema criptográfico se basa en la obtención de un conjunto de elementos, llamados letras o símbolos, que forman un conjunto finito llamado alfabeto fuente, alfabeto fuente y en una función de transformación de dichos símbolos en otros pertenecientes a un conjunto imagen denominado código. A la función de transformación de le llama función de codificación, fk, y a las sucesiones finitas de elementos del alfabeto fuente se les denominan palabras. En general, habrá una función de codificación fk para cada valor de la clave k, definiendo éstas el conjunto de claves del sistema, K.

Si consideramos ahora otro conjunto de símbolos A y el conjunto asociado A* de todas las palabras posibles que se pueden formar con las letras de A, se denomina código C a todo subconjunto finito de éste. Si C está formado por palabras de longitud fija "n", a n se le llama longitud del código C, y a sus elementos n-palabras. Y si C está formado por "m" elementos, se dice entonces que C es un (n,m) código.

Se define un criptosistema como una quintupla (M,C,K,E,D), donde:

Con esta nomenclatura, todo sistema de cifrado debe cumplir la condición:

Dk(Ek(m))=m

Para aclarar un poco estos conceptos, vamos a ver un ejemplo baasdo en nuestro alfabeto castellano. Este sería el alfabeto fuente, las letras (a, b, c, d, e, ...) serían las letras o símbolos del mismo, y las combinaciones de diferentes letras (casa, perro, silla, ...) serán las palabras del alfabeto. Sólo nota que desde un punto de vista matemático y criptográfico también serán palabras dekid, podretyp, lloeer y cualquier otra formada por cualesquiera de las letras del alfabeto fuente, no siendo necesario que tengan sentido alguno.

Sea A=alfabeto castellano.

Sea S el alfabeto fuente, subconjunto de A, que es esta caso va a ser S=A, es decir, vamos a considerar como alfabeto fuente todo el alfabetocastellano.

Sea C elcódigoC=A=alfabetocastellano.

función de codificación

Definimos nuestra función de codificación, f1, como: S--f1-->C,  tal que a cada letra le hace corresponder su siguiente en el alfabeto fuente, es decir, la función realizará las siguientes transformaciones:

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

Consideremos entonces el conjunto M de textos en plano que se pueden formar con las palabras de S, y dentro de él el elemento M1=HOLA MUNDO. La función de codificación sería en esta caso f1(s)= s+k=s+1, es decir, la función de cifrado desplaza k posiciones cada letra del alfabeto, siendo en nuestro caso k=1 (k es la clave de cifrado).

Por lo tanto, al aplicar la función f1 a M1 tendremos: f1(M1)=f1(HOLA MUNDO)=IPMB NVÑEP.

ejemplo de función de cifrado

Para que una función pueda ser considerada de codificación debe ser biyectiva, por lo que debe cumplir:

  1. elementos diferentes deben tener imágenes diferentes, es decir, no puede haber dos palabras del alfabeto fuente que tengan la misma transformación en el código.
  2. todos los elementos deben tener imagen, o lo que es lo mismo, no puede haber palabras del alfabeto fuente que no tengan su transformación en el código.
  3. no puede haber palabras del código que no se correspondan con alguna palabra del alfabeto fuente.

Estas tres propiedades se resumen diciendo que f debe ser una aplicación uno a uno.

La exigencia de ser biyectiva se traduce en evitar errores, en que la codificación de un mensaje sea única, y su decodificación también. No obstante, muchos sistemas criptográficos implementan una serie de elementos para la identificación y corrección de errores, ya que durante su viaje por el medio los datos pueden sufrir tales alteraciones que la decodificación resulte incorrecta.

No vamos a extendernos mucho más, pero tenemos que ver otro concepto importante. Normalmente las funciones de codificación reales trabajan con números, ya que es la forma que tiene el computador de operar con rapidez, sobre todo teniendo en cuenta que él pasa los números al sistema binario.

Una función de codificación debe ser tal que con ella obtener las imágenes en el código de los elementos del alfabeto fuente sea un proceso simple y rápido, pero la operación contraria, obtener elementos del alfabeto fuente a partir de sus imágenes en el código, si no se conocen ciertos datos (la clave) debe resultar lo más complicado posible. Ese es el verdadero sentido de una buena función de codificación.

La inclusión de las claves en los procesos de encriptación y desencriptación se realiza introduciendo las mismas en los procesos matemáticos pertinentes, generalmente como constantes en la función de codificación. Cuánto más longitud tenga la clave usada, más seguro será el sistema de encriptación y más dificil será romperlo por criptoanálisis, aunque esta fortaleza del cifrado también depende del sistema en sí.

Por ejemplo, los sistemas simétricos tienen, a igualdad de longitud de clave, mucha más fortaleza que los de clave pública. Es por esto que los sistemas simétricos usan 58-128 bits generalmente, mientras que los asimétricos deben manejar claces de más de 512 bits para ser considerados seguros.

* Un último concepto es el de las clases residuales. Dados dos numeros enteros, a y b, se dice que a es congruente con b módulo n si a y b tienen el mismo resto al ser divididos por n. Por ejemplo, 7 y 10 son congruentes módulo 3, ya que al dividir ambos por 3 nos queda de resto 1.

Con esta consideración, dado un conjunto C se definen sobre él la clases residuales de módulo n como los subconjuntos de C formados por todos sus elementos tales que al ser divididos por n dan el mismo resto.

Por ejemplo, si C={13,14,15,16,17,18,19} tendremos como clases residuales de módulo 3:

C1={15,18}       (al dividirlos entre 3 el resto es 0)

C2={13,16,19}  (al dividirlos entre 3 el resto es 1)

C3={14,17}       (al dividirlos entre 3 el resto es 2)

Este concepto es importante, ya que muchas de las funciones de codificación usados en los sistemas criptográficos más usados están basadas en las clases residuales del alfabeto fuente.

Para ello manejan la denominada función módulo discreto. De esta forma, a mod(b) representa el resto de dividir a entre b. Si a es inferior a b, tendremos que a mod(b)=a. Vamos a ver algunos ejemplos:

17 mod(6)=5     (ya que 17/6=2 con resto 5)

51 mod(6)=3     (ya que 51/6=8 con resto 3)

4 mod(6)=4     (ya que 4<6)

Y trás este capítulo un poco más dificultoso, que ampliaremos extensamente en el dedicado al Criptoanálisis, vamos a seguir ahora viendo los sitemas criptográficos más usados.

 

siguiente
siguiente

Home - Seguridad - Criptografía - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13