TEMA 1: INTRODUCCION A LA COMPLEJIDAD DE LA SEGURIDAD INFORMATICA
TEMA 2: CRIPTOLOGIA
TEMA 3: SEGURIDAD EN REDES
TEMA 4: SEGURIDAD EN SISTEMAS OPERATIVOS: UNIX
TEMA 5: AMENAZAS PROGRAMADAS

TEMA 2: CRIPTOLOGIA

        2.1 Definición. Criptosistema.Tipos
        2.2.Fundamentos teóricos.
                   2.2.1 Teoría de la información.
                   2.2.2 Matemática Discreta.
        2.3.Algoritmos de cifrado elemental.
        2.4.Criptosistema de llave privada: Redes de feistel.Algoritmo DES. Modos de operación
        2.5.Criptosistema de llave pública.Algoritmo RSA.
        2.6Aplicaciones del los critposistemas.
                     2.6.1.Funciones Hash y Huellas digitales.
                     2.6.2.Estándard X509.

2.1 Definición. Criptosistema.Tipos.

En primer lugar indicar que se trata de un concepto compuesto por dos términos que se encuentran íntimamente ligados. La criptología es la conjunción de dos técnicas, la criptografía y el criptoanálsis. La criptografía es la ciencia que nos va asegurar en principio la confidencialidad de la información , establece una serie de patrones a partir de los cuales la información no es accesible a individuos no autorizados ajenos a esta. El secreto por tanto , de esta ciencia consiste en que la información no desaparece, sí su significado. Entre los patrones más importantes , se encuentra el estableciemiento de claves privadas que son las que le dan significado.  Si la clave se pierde o es expuesta a individuos ajenos , el método criptográfico ya no resulta eficiente Así pues lo que va a dar seguridad al sistema criptográfico va a ser la clave que utilice para ocultar el significado de la información. Esta definicion de criptografía converge en que todo sistema criptográfico debe poseer una serie de transformaciones de cifrado , unas de descifrado , una serie de claves, una series de mensajes a cifrar y una serie de mensajes cifrados. Lógicamente para que el sistema disponga de aceptación , lo que será   accesible ( público ) por quien desee utilizar uno de estos sistemas será claramente las transformaciones que se realizan sobre la información.Todos estos términos se agrupan bajo lo que se conoce bajo el nombre de criptosistema. Un  criptosistema es una quintupla formada por cinco conjuntos (M,C,K,E,D), donde

M ->  Conjunto de los mensajes en claro , sin cifrar .
C  ->  Representa el conjunto de todos los posibles mensajes cifrados.
K  ->  Representa el conjunto de claves que se pueden utilizar en el sistema
E  ->  Conjunto de las transformaciones de cifrado o familia de funciones que se aplica a cada elemento de M para obtener C. Existe un transformación diferente para cada valor de la clave k.
D  -> Conjunto de las transformaciones de descifrado o familia de funciones que se aplica a los elementos de C para obtener los mensajes iniciales.
Así pues parece que cualquier critpsosistema debe cumplir que al aplicar las transformaciones de cifrado con una clave k sobre un mensaje M debemos obtener C de tal forma que contenga la mínima información posible sobre M, y al aplicar el conjunto de las transformaciones de descifrado sobre el mensaje C  con la misma clave k podamos obtener M sin ningún tipo de problema. Lo anteriormente expuesto se puede resumir en la siguiente expresión matemática:

Así pues parece razonable que cualquier criptosistema que no goce de estas características no será válido para lograr los objetivos deseados. Si ciframos el mensaje con un clave k y luego lo desciframos con la misma clave k y no obtenemos lo que teníamos al principio parece claro que el sistema además de fallar no cumple con los principios básicos de la seguridad informática(integridad de la información).

La otra técnica fundamental por la que está formada la criptología es el criptoanálisis: consiste en comprometer la seguridad de un determido sistema criptográfico ( criptosistema ). Lógicamente la seguridad de un determinado sistema criptográfico se verá altamente corrompido ( perderá validez) cuando de alguna forma se obtenga la clave que le proporciona seguridad y razón de ser. El descubrimiento de esta clave puede ser llevado a cabo de diversas formas. Desde sabotear los canales de comunicación , hasta estudiar  altos contenidos de texto cifrado para obtener información sobre estos.(estadíticas...).
Si observamos meticulosamente la constitución de un criptosistema llegamos a la conclusión de que existen dos formas fundamentales de cifrar la información , que constituyen los 2 principales tipos de criptosistemas:

Criptosistemas simétricos o de clave privada. En estos sistemas se utiliza una llave k  que sirve tanto para encriptar como para desencriptar. En estos criptosistemas la longitud de la clave es fundamental , lo que genera el problema de que si la longitud de la clave es corta el método no es seguro, y si la longitud de la clave es larga resulta incomódo. También presentan el problema de que ambas partes deben conocer la clave k , por lo que habrá que establecer una forma de transmisión de datos que nos asegure mantener la privacidad de la clave que constituye el secreto del sistema. Como ventaja , indicar que el coste computacional no es excesivamente elevado al contrario de lo que veremos en los criptosistemas de clave pública.

Criptosistemas asimétricos o de clave pública. Para evitar el problema de tener que transmitir la clave privada de forma segura se emplean los criptosistemas de clave pública o de cifrado asimétrico. Se emplean dos claves distintas , una para cifrar y la otra para descifrar. La clave de cifrado  es pública , conocida por todo el mundo , la de descifrado privada y por tanto "idealmente" sólo conocida por su propietario. Ambos consitutyen un par de claves (K,P). Las principal desventaja de los criptosistemas de clave privada frente a los criptosistemas de clave pública es el coste computacional que emplean estos métodos para realizar las transformaciones de cifrado y de descifrado. Además , un  individuo que disponga de  la clave pública ( que puede ser cualquiera ) dispone de cantidades infinitas de texto cifrado , y por tanto de información de los mensajes cifrados sobre los mensajes iniciales .
 

Para equilibrar los problemas de ambos criptosistemas en la prática se utilizan la conjunción  de ambos métodos. Así pues parte del mensaje cifrado contendra información cifrada con un clave privada k1 de un algoritmo de cifrado simétrico y parte de este mensaje contendrá elementos cifrados con la clave privada k2 del algortimo de cifrado asimétrico. Normalmente, por convenio se codifican los mensajes largos mediante algoritmos simétricos que suelen ser muy eficientes, y luego se hace uso de la criptografía asimétrica para codificar las claves simétricas. Los dos algoritmos utilizados por excelencia en la actualidad son el DES ( Data Encription Standard ) como algortimo simétrico y el RSA ( Rivest , Shamir y Adleman) como algoritmo asimétrico.

2.2. Fundamentos teóricos.

A partir del desarrollo de Claude Shanon la criptografía pasa a ser de un arte a una ciencia. Fundamentalmente la teoría desarrollada  se agrupa en dos bloques fundamentales. La teoría de la información y la matemática discreta. La primera aporta toda una serie de magnitudes que nos permiten establecer el nivel de información de un determinado mensaje ,  es importante para el estudio de la criptografía ya que nos permite realizar estudios estadísticos de la información codificada junto con los mensajes iniciales y ver las relaciones que existen entre ambos. Cuando la información cifrada contenga una información nula sobre  la inicial nos encontraremos en una situación ideal deseable para cualquier criptosistema. Además , mensajes muy redundantes serán susceptibles de ser comprimidos y así reducir información del mensaje cifrado con respecto al inicial para evitar posibles criptoanálisis. La segunda exposición de la teoria de Shannon,  matematica discreta , nos va a permitir en primer lugar aportar procedimientos para realizar tareas de la forma más eficiente posible( reducción de la complejidad algorítmica) y además , lo que es más importante a través del desarrollo de la aritmética modular establecer métodos para  evitar obtener claves privadas a partir de claves públicas. Estas claves están relacionadas matemáticamente, la fortaleza del sistema depende de la imposibilidad computacional de obtener una a partir de la otra.

2.2.1 Teoría de la información.Entropía.
 En primer lugar definimos como cantidad de información de un mensaje como una función de la probabilidad. Parece evidente que si un suceso A es altamente improbable la información que nos aportaría en caso de darse sería mucho mas alta que la de otro suceso que sea mucho más probable. En el caso límite, en el caso de que una determinada varible aleatoría pudiera tomar un único valor ( un dado con seis caras con todo unos) la información que nos aportaría es suceso "Sacar 1" sería nula, ya que la conociamos de antemano.Por tanto la información de un suceso es una función de su imprevisibilidad. Existe una formulación matemática que nos va a plasmar esta situación. Es la siguiente:
Sea una variable aleatoria V , Xi el suceso í-esimo de dicha variable ,  P(Xi) la probabilidad asociada a dicho suceso y n el número de sucesos posibles, definimos cantidad de información del suceso i como:

Observese que si la probabilidad de un estado de la variable aleatoria fuera 1 ( máxima ) ,la cantidad de información que nos aporta sería igual 0 , mientras que si su probabilidad se acercara a 0 , tendería a +infinito - esto es lógico y nos demuestra que el modelo matemático de la cantidad de información representa la realidad, un suceso que no puede ocurrir nos aportaría una cantidad de información infinita si llegará a ocurrir.
En segundo lugar otra de las magnitudes que nos va a definir la teoría de la información va a ser la entropía. Cuando hablamos de entropia de una variable aleatoria nos referimos al nivel de imprevisibilidad , fruto del desorden ,de dicha variable aleatoria.Se define matemáticamente hablando como una suma ponderada de las probabilidades de todos los estados de dicha información por el nivel de información de dichos estados. Esto es:

Parece fácil deducir a partir de la fórmula que la entropia mínima de una variable aleatoria V de n estados va a ser 0 ( caso en el que la cantidad de información de  los n estados sea nula y por tanto nada desordenada ), en este caso necesitaremos 0 bits para codificar cada uno de los posibles estados de la variable aleatoria ya que sabemos de antemano que valor va a tomar, y será máxima ( máximo desorden , imprevisivilidad máxima), cuando disponemos de una variable aleatoria de n estados donde todos los estados son equiprobables, en este caso el número medio de bits empleados para codificar los estados de la variable aleatoria sería log2(n).
La magnitud en la que se encuentra expresada la entropía son bits de información, el numero medio de bits que debemos emplear para codificar cada uno de los estados de la variables. Así pues si tenemos el caso de una variable aleatoria "tirar moneda" obtenemos que dispone de entropía 1 bit, es decir empleamos 1 bit para codificar los des estados de V ( 0 para sacar cara, 1 para sacar cruz). 1 bit es la cantidad mínima de información  y representa la cantidad de información asociada al suceso más simple, aquel que consta unicamente de dos posibilidades equiprobables.
 La entropía y la cantidad de información son dos magnitudes que  nos van a permiitr definir una tercera magnitud denominada redundancia que si que va a tener una relación directa con la criptografía. Todos alguna vez hemos leído  mensajes en los que falta información (algun caracter) y hemos podido reconstruir el mensaje de la forma correcta sin conocer de forma directa el símbolo que faltaba para completar el mensaje Esto es debido a que los lenguajes naturales son en general redundantes , es decir , la información que representan esta duplicada. Así pues esta redundancia será susceptible de ser medida de la forma correcta . Para definir la redundancia nos hacen falta dos conceptos. Son los siguientes:

Índice del lenguaje--> Definimos el índice del lenguaje para mensajes de longitud k como:

siendo Hk(m) la entropia de todos los posibles mensajes de longitud k. Estamos pues midiendo cual es el número de bits de información que debemos emplear por unidad de caracter para bloques de m caracteres.

Indice absoluto-->Es el máximo número de bits de información que pueden ser codificados en cada carácter , asumiendo que todas las combinaciones de caracteres son igualmente probables

Así pues la redundancia se define como:

La principal aplicación de esta determinación  del nivel de redundancia de un determinado mensaje va a ser claramente obtener que mensajes son redundantes y por tanto para aquellos mensajes que sean redundantes intentar diluir la redundancia del mensaje evitando e intentando así cambiar el significado intrinseco de la información que se encuentra en ese mensaje.Fundamentalmente existen dos métodos fundamentales de ocultación de redundancia : son la difusión y la confusión.Se presentan a continuación:

-Difusión: El propósito de la difusión de la información es distribuir las propiedades estadísticas de los mensajes en claro, sobre todo el texto cifrado.Esto se puede lograr fundamentalmente de dos formas:
1.  Haciendo que se altere la posición de los caracteres mediante cifrados por transposición.
2.  Haciendo que cada carácter del texto cifrado dependa de tantos caracteres del mensaje como sea posible.
-Confusión: El propósito de la confusión es establecer una relación lo más compleja posible entre la clave y el texto cifrado. De este modo, un criptoanalista no podrá deducir información acerca de la clave mediante un estudio del texto cifrado. Esta propiedad puede conseguirse por ejemplo mediante la aplicación de sustituciones.
 Ambas técnicas, la difusión y la confusión, por separado, proporcionan fortaleza a los criptosistemas, sin embargo utilizadas conjuntamente pueden dar lugar a sistemas muy difíciles de atacar. El ejemplo más característico de combinación de estas técnicas es el DES (Data Encryption Standard). En este, las permutaciones (P-boxes) proporcion an difusión, mientras las sustituciones (S-boxes) proveen la necesaria confusión.

Pata acabar con este bloque acerca de la teoría de la información , definiremos matemáticamente lo que resulta ser la entropía condicionada. Ella nos llevará a obtener una magnitud denominada cantidad de información que nos va a permitir determinar cual es el nivel de información que en un determinado criptosistema va a tener los mensajes cifrados con respecto a los mensajes original. Tambien este estudio nos permitirá definir lo que se conoce como la distancia de unicidad que nos va a indicar cual es la cantidad mínima  de mensaje cifrado que nos hace falta para obtener una de las llaves de un criptosistema.

Así pues, supongamos que tenemos una variable aleatoria bidimensional  (X,Y). Recordemos las distribuciones de probabilidad más usuales que podemos definir sobre esa variable, teniendo n posibles casos para X y m para Y:

Distribución conjunta de probabilidad

Distribuciones marginales de X y de Y

Distribuciones condicionales de X sobre Y y viceversa:

Así pues dadas estas definiciones previas , la entropía condicionada de X sobre Y se define como una suma ponderada de cada una de las probabilidades conjuntas por la cantidad de información que nos da un suceso Xi condicionado a otro suceso Yj

Por ultimo se cumple una  Ley de probabilidad total  , que recibe el nombre de la Ley de Entropías totales:

Se conoce como cantidad de información de una variable X sobre una variable Y al resultado de la expresión:

Esto quiere decir que la cantidad de información que nos aporta el hecho de conocer X al medir la incertidumbre sobre Y es igual a la disminución de entropía que este conociemiento conlleva. Así pues dada esta magnitud denominaremos a un criptosistema, seguro de Shannon como aquel en el que la cantidad de información que nos reporta conocer el mensaje cifrado C, sobre el mensaje original es nula es decir, aquel criptosistema que verifique:

Por último, otra de las aplicaciones del estudio del nivel de desorden para dos variables aleatorias que  evoluacionan conjuntamente es lo que se denomina distancia de unicidad. La distancia de unicidad de un criptosistema se conoce como la longitud mínima del mensaje cifrado que aproxima H(K/C) a 0 es decir, la cantidad de texto cifrado que necesitamos para poder  descubrir la clave. Los criptosistemas seguros de Shannon tienen distancia de unicidad infinita. Nuestro objetivo pues, a la hora de diseñar un criptosistema lo más seguro posible, es que la distancia de unicidad sea lo más grande posible.
 

2.2.2. Matemática discreta.

En esta sección , vamos a estudiar en primer lugar , el desarrollo matemático de la aritmética modular , esta nos va a definir una serie de subconjuntos de números naturales que van a cumplir ciertas propiedades, sobre los cuales se definen toda una serie de magnitudes y criterios, que van a constituir los pilares teóricos , sobre los cuales se apoyan los algoritmos de cifrado actuales.Posteriormente estudiaremos algunas propiedades de los números primos, (test de primalidad, generación de números primos, primos fuertes...) y por último presentaremos algunas implementaciones que nos permitan reducir el coste computacional de algunas operaciones, que por su naturaleza , son frecuentemente utilizadas en los algoritmos de cifrado asimétricos.

Aritmética modular. La aritmética modular es la parte del desarrollo matemático , que estudia subconjuntos de n elementos ( {0,1,2.....,n-1}) de los números naturales, restringidos por ciertas condiciones.Este subconjunto recibe el nombre del subconjunto de los residuos ( a partir de ahora CR)  Lo que va a caracterizar al CR va a ser el número n que recibe el nombre de módulo. Así pues , entre los números enteros que se encuentran fuera del rango 0...n-1, va a existir una relación de equivalencia con respecto a los elementos del CR. Esta relación recibe el nombre de congruencia y se define de la siguiente forma:

Sean a , b y n elementos pertenecientes a los números enteros , diremos que a es congruente con b en módulo n y lo denotaremos por (a triple guíón b) , si cumplen la siguiente relación de igualdad:

Así pues , si tenemos que n=12 , el CR estará formado por los elementos {0,1,2,3,4,5,6,7,8,9,10,11}. Si queremos expresar la relación de congruencia del número  513 con alguno de estos elementos, deberemos expresar en primer lugar dicho número como un número que se encuentre entre 0 y n-1. Esto se realiza con la operación módulo 12. Así pues, 513 módulo 12 nos devuelve 9. Esto nos indicará que 9 y 513 son congruentes en modulo 12 ya que 513=9+12*42. Observerse que si a pertenece al CR , su elemento congruente será el mismo . Si obtenemos por ejemplo a=2, realizamos la operación mod 12 , obtenemos b=2 , por tanto todo número perteneciente al CR es congruente con sí mismo.
De entre todas las operaciones  que se pueden definir sobre el CR no interesa particularmente la inversa. La inversa  de un determinado número a expresado en aritmética modular módulo n  , se define como un número b que cumple a*b es congruente con 1 en módulo n. Parece claro que no todos los números pertenecientes al CR van a tener inversa. La aritmética modular nos indica que un número tiene inversa si es primo entre sí con  el módulo n, es decir , si cumple la siguiente expresión condicional:

Así pues , una vez conocido el significado de la operación inversa , definimos conjunto reducido de los residuos módulo n ( a partir de ahora CRR ) como al conjunto de elementos del CR que son primos entre sí con el módulo n , es decir con los elementos del CR que admiten inversa. Como en cualquier tipo de conjunto será susceptible calcular su cardinalidad. Existe una expresión que nos permite calcular el número de elementos del CRR sin necesidad de tener que recorrer el rango desde 0 hasta n-1 observando los elementos de CR que tienen inversa. Esta expresión se conoce con la función de Euler , que nos indica la cardinalidad del CRR a partir de la descomposición de n en números primos. Esta expresión es la siguiente:


Así pues si n fuera 13, el CRR sería {1,2,3,4,5,6,7,8,9,10,11,12}.Si obtenemos la cardinalidad del CRR a través de la expresión de la fórmula de Euler obtenemos que euler(13)=13^(0)*(13-1)=12, que efectivamente es el número de elementos de CR que tienen inversa módulo 13. Si por ejemplo , obtenemos el 4 , la inversa del 4  en módulo 13 sería 10 , ya que 40 mod 13 es 1.
De la expresión de Euler se derivan  las siguientes propiedades:
1.Si mcd(a,n)=1

             Es decir , si a tiene inversa módulo n,  a^(euler(n)) módulo n es congruente con 1.

 
             2.Basándonos en la propiedad anterior podemos definir el cálculo de inversas través de las siguientes transformaciones:


Una vez adquiridas unas nociones básicas estudiaremos propiedades de los números primos y veremos que realmente son básicos para el desarrollo de la criptografía. Esta parte estará intimamente relacionada con el desarrollo de la aritmética modular. La ventaja de los números primos, es que en la práctica no existe una forma directa ni fórmula algebraica que nos permita desfactorizar un número n en sus factores primos.Además si un número n ( entero muy grande ) es el producto de dos primos que tienen ciertas propiedades , es computacionalmente imposible descomponer n en el producto de p y q. Estos números reciben el nombre de primos fuertes y verifican las siguientes condiciones:
1. El máximo común divisor entre p-1 y q-1 debe ser un  número pequeño.
2. p-1 y q-1 deben tener algún factor primo grande ( p',q').
2. p'-1 y q'-1 tienen factores primos grandes .
3. p'+1, y q'+1 tienen factores primos grandes.
Así pues parece que en cualquier procedimiento práctico en el que se desee,  obtener p y q , va a existir una primera fase de generación de números primos aleatorios y una segunda fase de comprobación de que realmente se trata de números primos. La primera parte va a estar condicionada por la generación de números aleatorios. Esta generación de números aleatorios va a resultar bastante complicada, no existen secuencias lo suficientemente aleatorias. Por tanto se trata de  secuencias pseudoaleatorias. La segunda parte se centra en los llamados test de primalidad. Se tratan de una serie de pasos algoritmicos que no nos van a dar una certeza absoluta de la primalidad de una determinado número, pero que siendo repetidos varias veces nos dan unos indices de certeza lo suficientemente válidos. Uno de los test de primalidad más extendidos es el llamado test de Lehmann , que resulta fácil de implementar y que nos da unos índices probabilísticos de primalidad bastante aceptables. Se constituye de los siguientes pasos:
1. Escoger un número aleatorio a < p.
2. Calcular b=a^((p-1)/2) expresado en módulo p.
3. Si b<>1 (mod p) y (b<>-1)  mod p , p no es primo.
4. Si b=1 (mod p) o b=-1 (mod p) , la probabilidad de que p sea primo es igual o superior al 50%.
Repetiendo este proceso n veces , la probabilidad de que p supere el test y sea compuesto será de 1 contra 2^n  En la práctica para generar un número pseudoprimo se emplea una secuencia de pasos en los que intervienen además de la generación de números pseudoaleatorios , test de primalidad. Los pasos son los siguientes:
1. Generar un número aleatorio p de n bits.
2. Poner a 1 el bit más y menos significativo.(Garantizamos que sea impar y que tenga n bits)
3. Intentar dividir p por una tabla de primos precacalculados (usualmente aquellos que sean menores que 2000). Esto elimina gran cantidad de números no primos de una forma muy rápida.
4.Ejecutar un test de primalidad como mínimo dos veces.
5.Si el test  falla, incrementar p en dos unidades y volver al paso 3.
Por ultimo , para finalizar presentaremos dos implementaciones,una para calcular el mcd  de un deteminado número y la otra para calcular la exponenciación de un determinado número de la forma más rápida y eficiente. La primera se conoce como el algoritmo de Euclides,  se fundamenta en las propiedades de la división y de la resta , de la relación ente ambas. Se define de la siguiente forma:
Sean a y b dos números enteros de los que queremos caldular su mcd. El algoritmo de Euclides se fundamenta en las siguientes propiedades:
 
 

Si ahora llamamos c a (a mod b) , pòdemos aplicar de nuevo la propiedad anterior y tenemos

La implementación del algoritmo sería la siguiente:

function  mcd (a:integer,b:integer):integer;
var
g0,g1:integer;
begin
      g0:=a;
      g1:=b;
      while  (g0<>0) do  begin
               x:=g0 mod g1;
               g0:=g1;
               g1:=x;
     end;
     mcd:=g1;
end;
La segunda de las implementaciones , recibe nombre del método de la exponenciación rápida , y nos permite calcular la operación a^b , sin tener que multiplicar a*a b veces , lo que resultaría un método de elevado coste computacional y operacional. Para ello partiremos de la notación binaria de b:

Si expresamos la potencia que vamos a calcular en función de dicha representación obtenemos:

recordemos que los bi solo pueden valer 0 o 1 , por tanto para calcular a^b solo hemos de multiplicar los a^(2i) correspondientes a los dígitos binarios de b que valgan 1 ( En el algoritmo se plasma con la instrucción if z mod 2 =1 then begin resul=resul*x; ). Obsérvese , además que a^(2^i)=(a^(2^(i-1)))^2, por lo que partiendo de a, podemos calcular el siguiente valor de esta serie elevando al cuadrado la anterior ( en la implementación x=x*x;). Así pues el algoritmo de exponenciación rápida queda como sigue a continuación:

function exprap ( a:integer, b:integer):integer;
var
       z.x:integer;
begin
      z:=b;
      x:=a;
      resul:=1;
      while (z>0) begin
                    if z mod 2 = 1 then
                           resul:=resul*x;
                   x:=x*x;
                   z:=z div 2;
          end;
      exprap:=resul;
end;
2.3 Algoritmos de cifrado elemental.

En primer lugar definir que dentro de este grupo de algoritmos de cifrado se encuentran aquellos algoritmos que se habían utilizado, históricamente , antes de la aparición de sistemas computacionales. Decir que son importantes porque la combinación de múltiples de ellos pueden dar lugar a métodos criptográficos altamente eficientes y difíciles de criptoanalizar ( caso del DES que es una combinación de métodos de difusión y confusión). Indicar que por sí solos en la actualidad no disponen de credibilidad ya que se pueden criptoanalizar con facilidad por medio de métodos estadísticos y de la teoría de la información . Así pues clasificaremos los métodos criptográficos elementales en :

Algoritmos de sustitución alfabética: En este tipo de métodos los elementos del texto en claro se sustituyen por otros símbolos que pertenecen a otro alfabeto. Existen dos fundamentalmente:
-Generalización del algortimo de César. La generalización del algoritmo de César se basa en primer lugar en el método simple de César. Este consiste en sustituir los simbolos del mensaje inicial por simbolos de otro alfabeto.Este alfabeto es una función del alfabeto en el que esta escrito el mensaje inicial. Esta función consiste en desplazar los simbolos del alfabeto i posiciones a la derecha. Así pues al símbolo A le corresponde el símbolo del alfabeto resultante de desplazar A i posiciones a la derecha, al B el símbolo del alfabeto resultante de desplazar B i posiciones a la derecha y así sucesivamente. Podemos generalizar el cálculo del simbolo cifrado a partir del símbolo del mensaje inicial mediante una expresión. Suponemos que n es el número de símbolos del alfabeto inicial , i el desplazamiento  y  M la posición del símbolo del mensaje inicial en el alfabeto , asi pues calcularemos la posición del simbolo cifrado en el alfabeto de sustitución con la expresión

C= (M+i) mod n

Así pues si consideramos el alfabeto Ascii que dispone con  n=256, con un desplazamiento de 5 , y consideramos que el mensaje inicial es "H", el resultado sería posición del símbolo cifrado=(posición("H")+3) mod 256 , es decir, c= 93, que se corresponde con el símbolo "M", es decir el símbolo del alfabeto inicial  resultante de desplazar 5 posiciones a la derecha el símbolo del mensaje inicial. Indicar que el algoritmo simple de Cesar tenia el valor constante i=3. Indicar tambien que el secreto del algoritmo no se basa en la clave sino en el propio algoritmo. Esto rompe claramente con el sentido de criptosistema, las transformaciones de cifrado y de descifrado son públicas, la clave privada

-Algoritmo de cifrado vigenere. Se trata de un algoritmo de sustitución polialfabética, en este caso el cifrado de un determinado símbolo depende no solo de la posición que ocupa en un determinado alfabeto como en el caso anterior , sino también de la posición que ocupe dentro del texto nativo que se procederá a cifrar.La clave no estará formada por un único desplazamiento, sino por d desplazamientos { i0,i1,i2,i3...id-1}.Así pues para cifrar un texto vigenere consitirá en agrupar el mensaje inicial en bloques de d símbolos , aplicandole a cada uno de los símbolos de cada uno de los bloques desde j=0 hasta j=d-1 la siguiente expresión:

C= (Mj +ij) mod n

donde Mj es la posición que ocupa el símbolo j-ésimo del bloque de d caracteres en el alfabeto j-ésimo.Indicar que el algoritmo anterior constituye la base de éste. El algoritmo de Vigenere no es más que una aplicación reiterada del algoritmo de césar con alfabetos y claves variables.
 

Algoritmos de cifrado por transposición de símbolos. Se agrupan todos los algoritmos y transformaciones sobre el mensaje inicial en los que se atiende a la posición y no al contenido del mensaje en claro . Nos encontramos principalemente con dos tipos:
 -Algoritmos de tranposición para bloques de n caracteres. Este algoritmo se fundamenta , al igual que todos los métodos de transposición  en cambiar el orden de los mensajes del texto inicial, siendo el fruto de esta variación del orden el mensaje cifrado.Así pues será necesario la longitud de los bloques así como una permutación de n elementos. Esta permutación va a indicar de que forma se va a variar el orden de los símbolos del mensaje inicial.De tal forma que el contenido de la posición i-ésima indica , que en el mensaje cifrado la posición i-esima debe ir en la posición que indica el contenido de la permutación en dicha posición. Así pues si por ejemplo nos encontramos con el mensaje "Hola" y con la permutación {1,3,2,4} el mensaje cifrado sería "Hloa". Para descifrar algo cifrado con este método , consisitirá en aplicar la permutación de n elementos en orden inverso.
-Algoritmos de transposición por columnas . En este se dispone el texto por filas de una determinada longitud, rellenándose el final de la última fila con un
carácter cualquiera.( por ejemplo el espacio) El texto cifrado se obtiene leyendo la matriz resultante por columnas. La clave de descifrado es simplemente el número de columnas utilizado.
A continuación se presenta un ejemplo para n_columnas=3. El texto en claro es "TRABAJO DE SPI" , así pues se tratará de agrupar el texto por filas de tres en tres caracteres de la siguiente forma
 
T R A
B A J
O D
E S
P I

Posteriormente concatenando las columnas obtendremos el mensaje cifrado "TBOEPRA  I AJDS "

2.4.Criptosistema de llave privada: Redes de feistel.Algoritmo DES.

Esta sección trata de estudiar conceptos básicos del algoritmo de cifrado simétrico más utilizado en la actualidad. En primer lugar, se explicarán unas consideraciones previas , como por quien fue inventado , porque goza de tanto uso es decir, donde radica su versatilidad y porque es tan díficil de criptoanalizar , además de unas cuestiones previas que nos van a permitir definir las transformaciones de cifrado. Posteriormente , hablaremos de las redes de Feistel, que son utilizados en gran parte de los algoritmos de cifrado simétricos, así como de cuantas claves dispone, como se obtienen , y en que consisten las transformaciones de cifrado y de descifrado. Por último, se describirán métodos de encadenamiento de bloques que nos permitan cifrar mensajes en claro  de más o menos  longitud que la unidad mínima de cifrado.

El algoritmo de cifrado simétrico DES (Data Encription Standard) es uno de los algoritmos de cifrado más populares y de uso más extendido en el mundo de la criptografía, ya que ha sido reconocido como el algoritmo standard por las agencias americanas y dispone de una gran fortaleza. El origen del DES se debe a una petición realizada en 1973 por el NBS (National Bureau of Standards) a distintos fabricantes para someter criptosistemas que pudieran servir como base a un estándar de cifrado de textos reservados no clasificados.
Se basa en el algoritmo desarrollado por IBM, conocido con el sobrenombre de LUCIFER, que utilizaba claves de 128 bits de longitud y que dotaba de una gran seguridad. Así pues del intento de creación de un standard nació el DES. Tras ser analizado por expertos de la NSA (National Security Agency) el algoritmo LUCIFER, redujeron las claves de 128 bits que usaba este , a  56 bits naciendo así el nuevo criptosistema de llave privada.
Como en la mayoría de los criptosistemas de llave privada, también en el DES,  no se da la existencia de una única clave para cifrar, sino que como criptosistema , disponen de varias claves para realizar las transformaciones de cifrado ( en el caso del DES son 16 claves K1,K2,...K16.) Por lo tanto,   el mensaje M en claro  tendrá que pasar por sucesivas transformaciones (iteraciones) , en las que se utilizen de la forma correcta cada una de las claves. Este encadenamiento de transformaciones de cifrado se conoce como Red de Feistel: Como la mayoría de estos algoritmos son de cifrado por bloques , en una iteración inicial , se divide la longitud del bloque minimo de cifrado ( también conocido como n bits ), en dos partes que se suelen nombrar L y R, de tal forma que L almacena o consta de los n/2 bits de menor peso y R de los n/2 bits de menor peso.Así pues la red de feistel , se define como un cifrado iterativo en el que la salida de cada una de las rondas o iteraciones se usa como entrada para la siguiente según la siguiente relación:

Esta representación nos muestra , que en la iteración i, la entrada de datos va a depender de la salida del anterior iteración . La entrada estará constituida por el contenido de los registros Li y Ri. El contenido de Li pasa a ser el contenido del registro Ri-1, de la fase anterior, y la entrada del registro Ri , va a ser una función no solo de Li-1, sino también de una transformación conocida como función "f" , que recibe un bloque de de n/2 bits y una clave Ki ( la clave correpondiente a la ronda i ),y nos devuelve otro bloque de n/2 bits transformado. La salida de esta función f , se opera a través del operando   XOR con el contenido del registro Li-1. Indicar que el secreto de las redes de Feistel , gracias a las propiedades de XOR, es que a la hora de descifrar no hace falta rediseñar otra disposición de los registros , sino que consistirá en realizar las transformaciones desde la iteración n hasta la 0 de la siguiente forma:

Indicar que la función f depende de cual se el algoritmo de cifrado utilizado. A continuación se pasa a describir el funcionamiento del DES , que se reducirá a la descripción de los parámetros que intervienen en la red de Feistel ( numero de  bits, función f , numero de iteraciones por tanto número de claves). El algortimo de DES codifica bloques de n=64 bits empleando claves de una longitud de 56 bits. Es una red de Feistel de 16 rondas, por tanto dispondrá de 16 claves para las transformaciones de cifrado, más dos permutaciones , una que se aplica al principio sobre el bloque inicial de 64 bits , y otra que se aplica al contenido de los registros L16 y R16 resultantes de las 16 rondas de la red de Feistel. Para calcular cada una de las claves que se emplean en cada una de las 16 rondas, se parte de una clave inicial de 64 bits , se aplica una permutación inicial (EP1) que reduce la clave a 56 bits, y posteriormente se separa en dos registros  de 28 bits cada uno, aplicando desplazamientos de bits a cada una de las dos mitades . Sobre cada uno de los registros desplazados se realiza una elección (EP2) permutada ,que nos permite obtener  una clave de 48 bits para cada una de las 16 elecciones permutadas.La obtención de las 16 claves del DES se describen a continuación:

Así pues solo nos hace falta para dar por acabado la descripción del algoritmo DES ,la descripción de la función f. Recordemos que la función f recibe un dato de 32 bits ( Ri-1) y una clave ( ki ) y devuelve un dato transformado de 32 bits. La función f , dispone de dos permutaciones, una inicial y otra final. La permutación inicial (E), que , además de cambiar el orden de los carácteres, convierte el dato de 32 bits en uno de 48, y la permutación final (P) que  recibe un dato de 32 bits procedente de sucesivas transformaciones y nos devuelve el valor final de 32 bits transformado.El resultado de E se opera XOR con la clave utilizada en la ronda i (Ki) y este  resultado es pasado a través de 8 cajas de sustitución multialfabética , que a partir de los 48 bits nos devuelven los 32 bits de entrada de la permutación  P. A continuación se presenta un gráfico que ilustra de forma adecuada , la trasnformación realizada por f :






A continuación se presenta , en forma de gráfico , la estructura de la red de feistel para el algoritmo DES. Como se puede observar, dispone de 16 rondas ( 16 claves) , en lo que los resultados de una fase son determinantes para la constitución de la siguiente fase:

Pot último indicar que debido a que la longitud de las claves DES es de únicamente 56 bits , se demostró que es posible realizar una ataque por fuerza bruta al sistema DES , y obtener la clave en un tiempo razonable. Para ello se emplea, lo que es conocido como DES3 que consiste en una combinación de cifrados y descifrados con 3 claves DES de la siquiente forma :

Esto se puede realizar gracias a que el conjunto de claves del criptosistema DES no cumple con una estructura de grupo ,es decir, que dadas dos claves no existe una clave equivalente a otras claves: Esto nos permite aumentar la longitud de las claves del DES, lo que hace disminuir las posibilidades de que un ataque por fuerza bruta tenga éxito.
Una vez descrito , el DES y sus posibles mejoras , describirermos tres modos de encadenamiento de bloques , algunos de ellos muy importantes, ya que nos permiten cambiar la filosofía de cifrado del algortmo DES ( y para cualquier algoritmo de cifrado simétrico también )  , desde el cifrado por bloques al cifrado de flujo.

El primero de los modos de encadenamiento recibe el nombre de ECB, que se trata del modo más sencillo e intuitivo para cifrar mensajes y datos de texto en claro con una longitud mayor que la unidad mínima de cifrado. Llamaremos Mi a cada uno de los bloques de n bits en los que se puede dividir el texto en claro. Así pues , consitirá en dividir el texto en claro en bloques de n bits ( Mi )
aplicando las transformaciones de cifrado correspondientes a cada uno de estos bloques cifrados, obteniendo así el mensaje cifrado ( C ) como la concatenación del resultado de cada una de estas transformaciones (Ci). Indicar que cada uno de los bloques de texto en claro se codifican con la misma clave. Si hablamos en el caso del DES, cifrar el texto en claro con una clave de 56 bits K  según el modo ECB,  consisitiría en dividir el texto en bloques de 64 bits, aplicando a cada uno de los bloques de texto en claro  con la clave K , las transfomaciones de cifrado que se describieron con anterioridad.
Este método tiene ventajas e inconvenientes. En cuanto a las ventajas indicar que , este método funciona muy bien en canales en los que puede ser probable que se de un fallo en la codificación de algunos de los bloques, de tal forma que si se consuma el error no deberemos cifrar todo el texto otra vez, sino que solamente se tratará de cifrar el bloque de mensaje inicial  en el que se ha producido el error de cifrado. Por otra parte , también presenta varios inconvenientes , entre los que se encuentran el hecho de que de que pueden eliminarse porciones del texto cifrado sin que se note, esto es, puede ocurrir que si se conocen las características y posición de cierta información en el mensaje inicial , ésta puede eliminarse del texto cifrado sin impedir un correcto descifrado del mismo.
El segundo de los modos de encadenamiento recibe el nombre de CBC , y en el que el cifrado de un bloque del mensaje ( Mi )  depende no sólo de Mi, sino del cifrado de los (i-1) bloques anteriores.Para ello el CBC, divide el trabajo a realizar en fases o iteraciones. En cada una de estas fases , realiza una operación XOR del sector o bloque que  queremos cifrar  ( Mi )
con el resultado de las transformaciones de cifrado con la clave k ( Ek ), de la fase anterior. Existe por tanto una retroalimentación  de datos en cada una de las fases ,  siendo necesario para una determinada fase , la ejecución de las fases anteriores. Como en la primera fase ( cifrado de M1 ), no existen resultados de la ejecución de la fase anterior ,se utiliza un vector de incialización o un registro que alamcene un valor inicial de n bits ( longitud de los bloques ), posteriormente se pasará a discutir cual debe ser el valor de este registro de inicialización. El funcionamiento del CBC , se decribe con un ejemplo a continuación, en el que los parámetros referidos al criptosistema empleado ( n, k ...), corresponderán al DES. Suponemos que disponemos de un mensaje inicial de 192 bits y deseamos cifrarlo con una clave k . Así pues el CBC ,deberá dividir el mensaje en  bloques de longitud de 64 bits. En este caso obtendremos 3 bloques (P1, P2, P3) de texto en claro, que serán objeto de ser cifrados. La concatenación  de los 3 bloques cifrados (C1,C2,C3), darán como resultado C , el mensaje cifrado. A continuación se presenta un dibujo que ilustra el modo de encadenamiento CBC para este ejemplo concreto , se puede observar que para obtener C2, por ejemplo ,se realiza la operación , C2=Ek( Ek(VI XOR P1) XOR  P2), cosa que representa la cualidad de recursividad-retroalimentación de este modo de encadenamiento de bloques, ya que sin Ek(VI XOR P1) calculado en la fase 1 , no es posible obtener C2 para la fase 2.

En cuanto al descifrado , indicar que las propiedades de XOR , nos permiten utilizar la misma filosofía para el cifrado. En el ejemplo , para descifrar C,  lo dividiríamos en 3 partes (C1, C2, C3),
y sutituiriamos en el gráfico las transformaciones de cifrado del criptosistema correspondiente ( en este caso DES   Ek) por las transformaciones de descifrado Dk. También ubicariamos C1, C2,C3 en la posición en la que lo hacen P1, P2,P3 obteniendo en cada una de las fases , los bloques de texto en claro P1,P2,P3, cuya concatenación   constituiría el mensaje original.
Al igual que el método anterior presenta ventajas e incovenientes. En cuanto a sus ventajas nos encontramos con que  el uso  de esta filosofía de retroalimentación, hace imposible sustituir un bloque de texto cifrado , como una posible medida de criptoanálisis. Una posible desventaja , sería ( si el contenido de VI es fijo) es que mensajes iguales se codificarán de la misma forma , y lo que es más grave , mensajes iguales hasta ciertos puntos , se codificarían de las misma forma hasta  alcanzar dichos puntos. Una forma de solucionar este problema consiste en alamacenar en VI un dato de n bits aleatorio. Así pues , lograremos que comparando dos mensajes cifrados que guarden ciertos parecidos ( misma cabecera por ejemplo) , sea imposible obtener información relacionada con el criptosistema.

El último de los modos de operación para algoritmos simétricos es el que se conoce bajo el sobrenombre CFB. Este modo de operación , nos permite obtener unidades de mensaje cifrado inferiores a n ( longitud de un bloque ) .Supongamos que p es la longitud en bits de la nueva unidad de cifrado.(p debe ser múltiplo de n y por tanto < ) En este modo se mantiene un registro de n bits donde se van a ir almacenando por la derecha el resultado de operaciones de cifrado  para la iteración siguiente   Se cifran bloques sucesivos de n bits de dicho registro. El byte más significativo del resultado se combina (XOR) con el siguiente bloque de p bits  del mensaje inicial para dar lugar al  bloque de  cifradode p bits  a transmitir. Además este último byte se reintroduce en el registro provocando un desplazamiento de su contenido.Al igual que en el CBC el valor inicial del registro debe ser aleatorio por la misma razón. El siguiente gráfico intenta aclarar cual es el funcionamiento de este modo de operación. En el grafico n es p y p es n. R es el registro de desplazamiento, Mi el bloque de p bits siguiente a criptar del mensaje en claro, Ci el bloque de p bits cifrado que será pasado a la fuente que lo solicite. En el gráfico , se puede observar el sentido de retroalimentación del que dispone este modo de operación . Se observa o se puede observar claramente , que para obtener Ci  , nos hace falta los  p bits más significativos del resultado de cifrar con K el contenido de R en la fase anterior.





Con respecto al CFB indicar que es muy útil cuando necesitemos el resultado o fracciones del mensaje cifrado, al mismo tiempo en el que se están cifrando. Este método es muy utilizado por ejemplo para cifrar carácteres según un stream o flujo de datos,de tal forma que a la misma vez que escrbamos el texto original , obtengamos de forma simultánea el mensaje cifrado. Por último , indicar que tanto el CFB como el CBC , nos permiten cambiar la filosofía de los algoritmos de cifrado , de algoritmos de cifrado por bloques a algoritmos de cifrado por flujo o stream.
 

2.5.Criptosistema de llave pública.Algoritmo RSA.

El algoritmo de cifrado RSA es sin lugar a dudas el criptosistema de clave pública más extendido. Su nombre proviene de sus creadores Rivest, Shamir y Adleman, quienes lo desarrollaron en el
MIT en 1978.  Como cualquier criptosistema de clave pública, dispone de una clave pública P y de una clave privada K, existiendo una relación entre ambas , de tal forma que  ,aunque sea conocida esta relación ,  no podamos obtener K conociendo P.  En el RSA esta relación se fundamenta en la aritmética modular , y   la imposibilidad de obtener K a partir de  P, en la imposibilidad computacional de descomponer un número no primo con ciertas caracteristicas  , en sus factores primos. El cifrado y descifrado de información ,  se basa en la realización de una operación de  exponenciación , que va suponer  un elevado coste computacional, pero que va a ser necesario utilizar , para que se cumpla la propiedad que debe cumplir cualquier criptosistema  m=Dk( Ep(m) ).
Como cada una de las claves está formada a su vez por varios parámetros, y cada uno de los parámetros de cada una de las claves pueden ser públicos o privados, además de otros parámetros. a continuación se pasa a exponer cualidades de los parámetros que forman las claves así como parámetros externos que van a dar sentido al algoritmo RSA.

En primer lugar, como parámetros externos  a las claves , nos encontramos los números primos p y q . Estos dos números , son dos números especiales que deben cumplir ciertas propiedades, entre las que se encuentran ser primos y además ser fuertes.Ambos números son privados , y a la hora se ser generados y utilizados deben ser eliminados.
En lo que se refiere a los parámetros que se requieren en las claves, nos encontramos el número e , llamado exponente público, el número d, llamado exponente privado , y el número n , conocido como módulo. Tanto e como n,  son públicos , sin embargo , d es privado. Así pues a partir de ahora llamaremos al par (e,n) clave pública y al par (d,n) clave privada.El módulo n es una función de p y q , n=f(p,q)=p*q, igual al producto de los número p y q. El secreto del algoritmo RSA se fundamenta en el hecho de la relación , que exite entre e y d . e y d cumplen la siguiente relación :

La clave se encuentra en  que el módulo en el que e y d son inversas  sea euler(n) y no el mismo n. De primeras podríamos pensar que si es posible obtener d a partir de  e a través de  la  expresión d=e^(euler(euler(n))-1) mod euler(n) , que como vimos en secciones anteriores nos permitían obtener inversas a partir del Euler del módulo en que dos números son inversos. El problema es que para hallar el resultado de esa expresión y por tanto el exponente privado d, nos hace falta calcular primero Euler(n). Como Euler(n)=(p-1)*(q-1), donde p y q son los factores primos de n, y n no se puede desfactorizar( el producto de dos primos fuertes no se puede desfactorizar) , no podemos saber cual es el valor de Euler(n). Este hecho constata la seguridad del algoritmo RSA, a partir de e y de n , que son públicos , no puedo obtener Euler(n) y por tanto d que es privado.El número e suele ser normalmente 3 o 0x10001 , en cuanto a detalles de implementación.
Pues bien, una vez definidas las claves y por están consituidas, procederemos a la definición de como se realiza el cifrado de información y porque la relación entre e y d nos va a permitir descifrar con d , textos cifrados con e. El cifrado de información consiste en realizar la siguiente operación:
C=Me mod n
Una vez descrita , la  operación de cifrado , debemos pensar como a partir de C, y del exponente privado d , podemos obtener el mensaje original es decir, descifrar  lo cifrado por e. Para ello , se nos puede ocurrir aplicar una operación a ambos lados  de la igualdad y obtener el resultado deseado. Para obtener dicho resultado va a ser fundamental basarnos en la expresión *.La operación es la siguiente:
(Me)d = Cd mod n=>M=Cd mod n

Así pues , tendremos que realizar una operación de exponenciación, para obentener M a partir de C y de d. Ambas operaciones , y sus equivalencias , muestran que , la relación entre e y d, hace posible que todo lo cifrado por la clave pública , pueda ser cifrado por la clave privada d.Indicar , que tanto las operaciones de cifrado como las de descifrado, implican una elevada actividad  computacional, esta es la razón por la que en  los algoritmos de cifrado asimétricos el cifrado y descifrado  se realice de forma muy poco eficiente. Por , último indicar que cuando , se habla de las claves de RSA, por el número de bits ( "Una clave RSA de n bits"), nos estamos refiriendo , al número de bits para codificar en notación , el módulo n ( entero ). Longitudes de claves RSA, de 512 bits se consideran con un grado débil de seguridad,  768 bits grado medio de seguridad, y claves RSA de 1024 bits se consideran sólidas, altamente díficil de criptoanalizar.

2.6. Aplicaciones del los critposistemas.

Una vez estudiadas, las características de algunos de los criptosistemas de clave pública y privada, más extendidos, procederemos a estudiar, de que forma se combinan para ser útiles en la práctica. Fundamentalmente, estudiaremos de que forma se combinan, para asegurar la confidencialidad de la información (encriptación ) y  para asegurar integridad y autenticidad ( concepto de firma electrónica y estándard X509).
Para ello , y para simplificar , partimos de un ejemplo que nos va a ser de apoyo para la exposición correcta de los conceptos que se desean exponer. Supongamos, que un individuo A y un individuo B mantienen transferencias de información en un determinado canal de comunicación según el siguiente gráfico:

Donde las K`s son las claves privadas y las P`s las claves públicas de sendos individuos. Así pues , si ambos desean confidencialidad , es decir, que ningún individuo ajeno a A y a B pueda leer y acceder a dicha información,  deberán realizar la siguiente tarea con un mensaje original M:

 C=Epb(M) y M=Dkb(C)
A será el encargado de encriptar el mensaje M con las transformaciones de cifrado del algoritmo de clave pública empleado , con la clave pública del receptor, de B, pb. Si el algoritmo funciona correctamente, solo el que posea la clave privada asociada a Pb, es decir, Kb, podrá desifrar el mensaje correctamente. Así pues, B para recuperar la información inicial deberá realizar las transformaciones de desencriptación con su clave privada sobre el mensaja cifrado , obteniendo así m.
Si por ejmplo el algoritmo de clave pública empleado es el RSA, las transformaciones de cifrado y de descifrado sobre el mensaje inicial son altamente costosas, algoritmicamente hablando. Esto hace que sea necesario , el diseño de otro método que nos permita enviar la información encriptada sin la implicación de tantas operaciones innecesarias. Para ello , en la práctica , se emplea como solución, la combinación de los dos tipos de algoritmos,para dar confidencialidad en un determinado canal de comunicación. Dicha combinación , consistirá en cifrar la información o el mensaje inicial, con un algoritmo simétrico de clave S, y enviar junto con dicha transfomación la clave S cifrada con la clave pública de quien recibe el mensaje. Lo dicho se puede resumir en el siguiente cuadro:

Así pues , A genera aleatoriamente una clave privada S, llamada clave de sesión , y encripta m con dicha clave. Posteriormente cifra con el algoritmo asimétrico , S  con la clave Pb, y envía ambas informaciones en el mensaje. B recibe el mensaje , y deberá realizar las siguientes transformaciones sobre la información que recibe:

S=Dkb(Epb(s)) y M=Ds(C)

Así pues, como se observa en dichas transformaciones , lo único que se cifra y se descifra con el algoritmo asimétrico es la clave de sesión S.  Como dicha clave es una clave privada de un algoritmo simétrico, tendrá una longitud mucha más reducida de lo que podría tener un mensaje original, por lo que , se reducen en alto grado las operaciones computacionales sobre la información.
También se da el caso de que, si el emisor desea enviar un mismo mensaje a varios receptores, este método nos permite reducir al máximo la información enviada, y duplicar únicamente lo que sea estrictamente necesario. Para enviar un mensaje a varios receptores A, deberá mandar únicamente la clave de sesión cifrada con cada una de las claves públicas de cada uno de los receptores.Si lo que desea es guardarse el mensaje se incluirá a él mismo dentro de los receptores.

2.6.1.Funciones Hash y Huellas digitales.

Si lo que deseamos es autenticidad, es decir, que realmente podamos asegurar que el mensaje fue mandado ,  por quien lo asegura haber mandado , se utiliza una técnica criptográfica que , consiste  en aplicar las transformaciones de cifrado de  la información con la clave privada del emisor ( esta información será pública ) y enviar esta información al receptor. El receptor deberá aplicar las transformaciones de descifrado con la clave pública del emisor. Si la información que obtenemos es correcta , indica que realmente el mensaje proviene de A. Así pues A  realizaría C=Eka(m) y enviaría esta información a B. B para validar esta información, debería en primer lugar buscar la clave pública de A, y realizar m=Dpa(c). Si la información que obtiene es correcta, sabremos que el mensaje proviene de A, ya que solo el ha podido ser capaz de realizar esa operación , ya que es el único que dispone de su clave privada.

Al igual que ocurría  a la hora de cifrar y descifrar un mensaje, aplicar sucesivas transformaciones con un algoritmo de clave pública supone un elevado coste, para ello existen los conceptos de firma electrónica y de funciones Hash o funciones de resumen.

Los algoritmos de resumen , son un serie de transformaciones matemáticas ( suma , resta , xor , xnor ...) que nos permiten , reducir una información determinada , bajo ciertos principios o pautas que los van a caracterizar y los van a hacer muy útiles para la criptografía. Principalmente estos principios son tres y se resumen en:

-La entrada de una función Hash es de un tamaño cualquiera. La salida es siempre del mismo tamaño.
-Dado un mensaje y su correspondiente resumen , cualquier cambio que se realice , por mínimo que sea, en el mensaje original , produce cambios importantes en el resumen de dicho mensaje.
-Dado el resumen de una determinada información, ha de ser altamente complicado , obtener una determinada información que obtenga el mismo resumen.Es decir, las funciones de resumen idealmente deberá ser inyectivas.
Algunas de las funciones de resumen más utilizados son el md5 ( message diggester nº5) el sha1 , y el sha2.  El md5 , reduce la información hasta 128 bits, el sha1 a 160. Indicar que el mínimo razonable de la salida de una función Hash debe ser de 100 bits. En caso contrario, fallarían algunos de los pilares básicos , sobre los que se apoya el funcionamiento de las funciones de resumen.
Una vez visto las caracteristicas fundamentales de los algortimos de  resumen , la siguiente sección se encargará de estudiar su aplicación para la autentificación de la información.
Las funciones de resumen , nos van a permitir autentificar una determinada información , sin la necesidad de tener que realizar las transformaciones de cifrado con la clave privada del emisor sobre el mensaje m . A continuación se presenta un cuadro en el que se especifica como las funciones de resumen pueden ayudar a reducir el coste computacional de las operaciones sobre la información que se envia:

A transforma el resumen del mensaje  con Ka y  la envía junto con el mensaje m. Observese que se tranforma con Ka el resultado de la función de resumen y no m. Esto nos permite reducir el coste computacional, ya que transformar el resultado de una función de resumen , que puede ser de un longitud de 100 o 160 bits dependiendo del tipo de algoritmo empleado, supone un menor trabajo , que el extender dicha tarea a todo el mensaje. El resultado F=Eka(H(m)) se conoce bajo el nombre de firma electrónica.Así pues, B debería en primer lugar obtener de la firma electrónica el resultado de la función de resumen calculado por A ( lo llamaremos resumen del mensaje de salida) realizando la tarea H(mi)=Dpa(F). Una vez obtenido el resultado del resumen del mensaje de salida, B deberá calcular el resumen del mensaje de llegada ( que podría no ser el mismo, lo llamaremos H(mf) ) y posteriormente comparar H(mi) y H(mf). Si son iguales ambos resultados, en primer lugar garantizamos que , realmente ha sido A quien nos ha enviado el mensaje y por otra parte, que  el mensaje que mando A es el que le llega a B, esto supone autentificacion y por otra parte integridad, ya que por el principio 2 , una modificación de un mensaje , por pequeña que sea, produce un cambio muy notable en el resultado de su resumen. Otro posible ataque , que podriamos pensar, sería no solo modificar la informacion m sino tambien la firma poniendo dentro de la firma el resumen del mensaje nuevo, pues bien , gracias a las características del modelo diseñado, esto no podríamos realizarlo ya que al no disponer de Ka, no podríamos volver a construir la firma electrónica.
En la práctica , se nos presenta la posibilidad de querer garantizar autenticidad y confidencialidad al mensaje , en este caso nos interesaría realizar dos operaciones FIRMAR Y CIFRAR. Se nos presentan dos alternativas, ambas equivalentes,  son
1 Epb(Eka(m)) o 2 Eka(Epb(m))
La primera de las alternativas supondría, primero firmar y posteriormente cifrar , la segunda implicaría primero cifrar y luego firmar . Ambos métodos son equivalentes, sin embargo, sería más correcto el método 1 , ya que nos aportaría menos información que el método 2. Del método 2 se podría extraer , que se trata de un mensaje firmado por A, es decir que proviene de A. Como lo que deseamos es confidencialidad , es decir, que aporte la menor informacion al exterior , el método más correcto, y utilizado en la práctica es el método 1. El método 1 consistiría en lo siguiente:
 
 

El método 2 en la práctica consistiría en :
 
 

En el caso 2 si yo obtengo H(mi) con la clave pública de A y coincide con el resumen del mensaje de llegada, puedo asegurar que el mensaje proviene de A, por lo que ya obtendría información acerca del mensaje.
El segundo problema que se nos plantea para autentificar un determinado mensaje,  es el como asegurar que la clave pública de A es realmente de A y no de otro individuo. Bien existen dos posibles soluciones :

- Métodos legales,  un documento jurídico firmado por un notario que especifique realmente que Pa es la clave pública de A.También se podría ,en el caso de que A y B tuvieran algun tipo de relación ( proximidad fisica ) , organizar un encuentro físico para transferir ambas claves. Esto entraña el problema de como asegurar de que el encuentro se realiza con quien dice ser. Habría que recurrir entonces a documentos legales (DNI).
-Métodos de Autoridades Cerificadoras. Las autoridades certificadoras, son entidades que disponen de un reconocimiento en la red , y que certifican , segun cual sea su politica de certificación, que una deteminada clave pública es de un determinado individuo.En la práctica el método de las autoridades certificadoras se lleva a cabo con el estándard X509 que se define en el siguiente apartado.
2.6.2.Estándard X509.

Este standard define toda una serie de objetos criptográficos.Fundamentalmente estudiaremos 3, el objeto X509 conocido como certificado, el objeto pkcs10 , conocido como Certificate Request (solicitud de certificado) y por último el objeto pkcs12.

El certificado es un objeto que está formado por  una serie de campos , en los que se especifican una serie de datos acerca de quien posee dicho certificado. Estos campos son fundamentalmente los siguientes:

DN subject : Este es el campo donde se especifican los datos personales del poseedor del certificado. Esta formado por los siguientes subcampos:
-CM: Common name : Es el campo que almacena su nombre.
-OU: Organization Unit. Es el nombre del departamento de gestión donde trabaja.
-C: Es el campo donde se especifican las siglas del pais de procedencia.
-L: Indica el pueblo (localidad) de donde procede.
-ST:.Indica la comunidad o estado de  donde procede.
-Email:Su valor corresponde al Email del poseedor.
 Indicar con respecto al DN , que  puede darse el caso de que algunos de los campos estén vacios.Tambien puede darse el caso que otros de sus subcampos sean opcionales. El standard X509 define que el nombre CM , no tiene porque ser el nombre completo del individuo, podría valer tambien su alias.Se trata de un campo  importante , ya que nos va a permitir diferenciar entre dos certificados de distintas CA`s con un mismo número de serie.

DN issues:  Esta formado por los mismos campos que el DN subject , a diferencia que el valor de todos sus campos se refieren a la Autoridad certificadora que se ha encargado de emitir el certificado.
Serial Number: Este campo especifica el número de serie del certificado. El valor de este campo lo emite la autoridad certificadora cuando valida el certificado, es una función del número de certificados expedidos antes de la solicitud de nuestro certificado. El número de serie, va a depender de la CA, de tal forma que dos certificados emitidos por una misma CA , no pueden tener el mismo número de serie. Este campo, es importante ya que nos va a permitir diferenciar nuestro certificado entre otros certificados emitidos por una misma CA.
Fecha de expedición: Día en el que la CA emite el certificado.
Fecha de caducidad: Día en el que el certificado deja de ser válido.
Clave pública: Campo que contiene la clave pública del poseedor del certificado.
Referencias a los algoritmos empleados: En este campo , se indica a que algoritmo de clave pública pertenece la clave pública, así como cual ha sido el algoritmo o funcion de resumen con el que se ha firmado.
Firma de la CA: El valor de este campo es generado por la CA cuando emite el certificado. La información a la cual se le aplica el resumen , suele ser una combinación de algunos de los campos anteriores.
 

Como hemos visto en la sección anterior , la firma correspondiente a uno de los campos del certificado, la emite la CA, cuanto da validez a una solicitud de certificado. Esto principalmente, sirve para dar autenticidad a los datos que almacena el certificado. En el caso de que un individuo, modificara alguno de los datos del certificado, podriamos detectar rapidamente esa alteración de la integridad de los datos, comprobando la validez de la firma de la CA.
Así pues para certificar nuestros mensajes nos hace falta solicitar un certificado.Esta solicitud de certificado se realiza a través de unos objetos criptográficos que reciben el nombre de objetos pkcs10 ( certificate request).  Para generar este objeto, para posteriormente ser enviado a la CA correspondiente deberemos , en primer lugar , decidirnos entre una tecnología u otra en función de nuestras necesidades. Decidiremos , el algoritmo de clave pública a utilizar, la longitud de las claves de dicho algoritmo, el algoritmo de firma ... Una vez decidida la tecnología a emplear, se procederá a generar las claves privada y pública. En el proceso de generación de claves , existen dos alternativas, en primer lugar que sea el solicitante del certificado, quien se encargue de generar dichas claves o que se encargue la CA.El standard X509 define que debe ser el solicitante quien deba generar dichas claves. Así pues, el solicitante genera un par de llaves K y P , se guarda K, e incluye en el objeto pkcs10, sus datos personales junto con la clave pública, y todo lo anterior firmado con su clave privada. Se trataría por tanto de enviar la siguiente información:

Destacar, la importancia de la inclusión de la firma en la petición de certificado. Esto nos permite probar en primer lugar , la validez de k y p , y por otro lugar, asegurar que los datos que lleguen a la CA, coincidan con los que enviamos. De esta forma, la CA, comprobaría la validez de la firma con P (que se había incluido en el objeto), y solo en caso de ser válido procedería al proceso de certificación. El proceso de certificación va a consistir en , analizar cada uno de los campos del DN, y según cual sea la política de certificación y las fuentes de las que dispone validará unos campos u otros. La CA, al tratarse de una entidad gestora , dispondrá de unas fuentes, en las que podrá  observar si realmente los campos incluidos en la petición de certificado son correctos o no lo son.  En función de cual sea el nivel de restricción del certificado y el campo validado, la CA dispone de distintos niveles de certificación CA1, CA2.....CAn,  así pues por ejemplo si  una CA tuviera únicamente , CA1 y CA2, CA1  podría implicar una certificación del campo Mail, y un acceso con restricciones a parte de la información y CA2, una validación del CN y un acceso libre a toda la información.Así, pues en  la caracterización de los certificados, no va a influir únicamente el DN y el número de serie, sino las restricciones de  acceso a la información y los campos validados por la CA.Existe un documento legal llamado CPS (certificate practic statement ) que especifica el nivel de certificación de cada uno de los tipos de certficado emitidos por la CA.
Así pues parece bastante importante , que a la hora de pedir un determinado certificado , el solicitante tenga presente cual es la política de certificación de la CA.
Una vez que la CA, ha validado los campos correspondientes, se encargará de enviar o publicar el certificado, del solicitante. Normalmente lo enviado por la CA, se corresponde con la información necesaria para constitur el certificado, además de la información anterior firmada por la CA ( con la clave privada de la CA Kca), imprescindible para constituir el valor del campo firma del certificado. La información enviada por la CA se correspondería con lo siguiente:

Como hemos observado todo individuo , que desee certificar sus mensajes  a través de canales de comunicación debe poseer un certificado validado por una determinada CA que acredita la asociación de una serie de datos abstractos ( clave pública etc...) a una determinada persona o entidad física. Esto genera el problema de que los datos asociados a una CA ( el DN subject y su clave pública ) también han de ser acreditados. Para solucionar existen dos alternativas fundamentales , en primer lugar que esta CA sea acreditada por otra CA, que disponga de un mayor reconocimiento, o que sea ella misma quien acredite sus propios datos. Esto da lugar , a un nuevo tipo de certificado , denominado CERTIFICADO AUTOFIRMADO, que es aquel certificado que cumple la particularidad  de que la clave privada con la que se ha firmado en el campo CAsign , se corresponde con su homóloga pública, correspondiente al campo que almacena la clave pública del mismo certficado.Diremos que aquellas entidades que dispongan de certificados autofirmados son autoridades certificadoras raiz.

Bien, el proceso anterior , fue descrito suponiendo que es el solicitante quien genera el para de llaves K y P , pero que ocurre , si a la CA le interesa generar el par de llaves?. Para solucionar y facilitar esta tarea el standard  X509 define unos objetos criptográficos denominados pkcs12, que encriptan una determinada información. La información a encriptar, será el objeto X509 del solicitante y su clave privada. Así pues el proceso de solicitud, consistirá , por parte del solicitante únicamente enviar el campoDN. La autoridad certificadora generará la clave privada y el certificado y lo incluirá , encriptado en el objeto pkcs12, enviandole esa información posteriormente. Como dicha información, por la descripción del pkcs12, va encriptada, la CA , también deberá encargarse de transmitir la clave que protege al certificado y a la clave privada. Esto genera el problema de como enviar de la forma segura , la clave que protege al pkcs12.El otro problema fundamental que presenta este método consiste en que la CA al disponer de la clave privada, puede acceder a la información, que otros usuarios encriptan con nuestra clave pública.

La siguiente parte de la exposición del significado de los certificados, va a consistir en realizar una serie de preguntas que posteriormente serán contestadas, estas preguntas van a consistir  desde como se almacenan los certificados en la práctica hasta como representarlos de una forma compacta para ser más portables.

¿ COMO SE EMPLEAN LOS CERTIFICADOS EN LA PRÁCTICA ?

En la práctica , las utilidades que se van a encargar de un intercambio de información segura ( navegadores web, clientes de correo ...) , mantienen una serie de bases de datos que nos van a pemitir almacenar los datos necesarios y establecer correspondencias entre datos pertenecientes a bases de datos distintas para lograr nuestro fin. En primer lugar establecen una base de datos de certificados propios y otra de autoridades certificadoras ,  estableciendo una relación de correspondencia entre los certificados propios y las autoridades certificadoras que los certifican.
Por otra parte , dispone de otra base de datos denominada base de datos de claves privadas, que establece una correspondencia con la base de datos de certificados propios. Como la información relativa   a las claves privadas no es pública, el agente correspondiente protegerá dicha base de datos ( la de claves privadas) con una clave , que será solicitada a la hora de añadir un nuevo certificado a nuestra base de datos de certificados. La primera relación de correspondencia nos va a permitir certificar nuestros mensajes de la forma correcta y la segunda, desencriptar información que ha sido criptada con nuestra clave pública.

¿QUE OCURRE SI PERDEMOS NUESTRA CLAVE PRIVADA?

En primer lugar indicar , que esta "pérdida", no sólo se hace efectiva cuando  no podemos tener un acceso a dicha clave sino , cuando aún poseyéndola ha sido expuesta a individuos ajenos a nuestra clave. Así pues , lo primero que se nos podría ocurrir para solucionar el problema sería solicitar otro certificado, el problema que existe , es que la política  de las CA`s indica que no pueden haber dos certificados iguales. Así pues , solicitamos una revocación de certificado ,  que consiste en adelantar la fecha de fin de validez del certificado. Así pues , la CA cuando recibe una petición de revocación del certificado , almacena el certificado en una base de datos de certificados  revocados. También dispondrá de una base de datos no revocados, lo que le permitirá tener un control, acerca de que certificados expedidos son válidos y cuales no.
Para indicar cuales certificados han sido revocados , las autoridades certificadoras disponen de un documento que recibe el nombre de CRL, y en el que se muestra una lista con los números de serie de los certificados revocados hasta la fecha de consulta. En la actualidad existen protocolos para consultar on-line  a la CA si un determinado certificado está o no revocado.

¿COMO SE REPRESENTAN LOS CERTIFICADOS?

El formato binario ( su representación) de un certificado se define utilizandola notación ASN.1. Esta notación define cómo especificar los contenidos; y las reglas de codificación definen cómo esta información se traduce a una forma binaria. La codificación binaria del certificado se define utilizando las Distinguished Encoding Rules (DER), que se basan en las Basic Encoding Rules (BER) más generales. Para aquellas transmisiones que no acepten transmisiones binarias, la forma binaria, se puede traducir en una forma ASCII ( subconjunto ASCII)  utilizando la codificación Base64. A esta versión codificada se le denomina codificación PEM (el nombre viene del inglés "Privacy Enhanced Mail"), se situa entre líneas delimitadoras de principio y fin de certificado.

PEM es la abreviatura de Privacy Enhanced Mail. Nació a partir de las necesidades de transferir información criptográfica a través del correo electrónico, principalmente,  de ahí su nombre. Por ejemplo, supongamos que  tenemos  un certificado X509 y deseamos transferirlo a otra máquina. El hecho de transferir dicho certificado se debe hacer siguiendo un protocolo (PEM), ya que no es posible enviar información binaria tal cual a través del correo electrónico. Sólamente es posible transferir información en forma de caracteres ASCII, y es en esto en lo que se basa PEM.

En este caso, lo que debería hacer antes de la transferencia es lo siguiente: a partir de un fichero que contenga su certificado X509, PEM obtendrá en otro fichero y con el formato aplicado  su certificado listo para ser enviado por mail o transferido mediante cualquier otro método de transferencia de ficheros, teniendo en cuenta que el fichero nuevo es ASCII y no binario..