Ver índice
 Cifrado con clave asimétrica 

        Ocultar índice  

   Índice de contenidos
   Instalación en Windows
   Instalación en Ubuntu
   Servidores seguros
   Páginas dinámicas
   Sintaxis básica
   Operaciones
   Arrays
   Formatos de presentación
   Operadores
   Bucles
   Extraer y ord. información
   Funciones
   Ficheros externos
   Imágenes dinámicas
   Gestión de directorios
   Cookies y sesiones
   Clases y objetos
   Ficheros en formato PDF
   Bases de datos MySQL
   PHP y XML
   PDO - Bases SQLite / MySQL
   MySQL a traves de misqli
   Algo de JavaScript y AJAX


Cifrado asimétrico

El protocolo de Diffie-Hellman que hemos visto en la página anterior es un claro ejemplo de lo que se conoce como cifrado asimétrico. A la hora de convenir la clave de cifrado cada uno de los intelocutores utilizaba dos claves. Una de carácter público (podía ser conocida sin riesgo) y otro de carácter privado dado que el usuario la mantenía en secreto. El primero de los números sería el conocido como clave pública y el segundo de ellos la clave privada. El cifrado asimétrico, también llamado cifrado de clave pública se fundamenta la utilización conjunta de esas dos claves.

En el esquema puedes ver las posibilidades que ofrece el uso de este algoritmo en sus dos opciones. Lo cifrado con la clave pública de un usuario puede ser descifrado con su clave privada. De igual forma, lo cifrado con la clave privada será descifrado con su clave pública.


A partir de esas premisas y tal como se ve en el esquema es factible establecer la estrategia para garantizar la confidencialidad y, en cierta medida (hablaremos de esto más adelante) la autenticidad del remitente.

El algoritmo RSA

El algoritmo de cifrado asimétrico más popular en este momento es el conocido como RSA (acrónimo de los apellidos de los criptólogos Ronald L. Rivest, Adi Shamir y Leonard Adleman que fueron quienes lo desarrollaron en 1977). La aplicación de este algoritmo requiere tres pasos:

Generación de claves

Es un proceso que sigue la siguiente secuencia:

Obtenidos esos valores, el par (n,e) será la clave pública y (n,d) la clave privada de carácter secreto. Los tamaños habituales de las claves son actualmente de 1024 ó 2048 bits de longitud.

En el cuadro que tienes a continuación intentamos ejemplificar, con valores minúsculos, los mecanismos de generación de claves utilizando este algoritmo.

Algoritmo asimétrico RSA
NúmeroEjemploProceso de cálculo
p3Primo muy grande. Aleatorio
q11Primo muy grande. Aleatorio
n=p*q3*11=33Se calcula el producto p*q
Z=(p-1)*(q-1)(3-1)*(11-1)=20Producto Calculado
e7
cumple la condición
Se calcula un número que sea:
  • - Primo
  • - Coprimo de Z. Es decir, MCD (e,Z)=1
  • - Positivo
  • - <Z
d3
cumple la condición
Resto de (7*3)/20=1
Ha de cumplirse que
  • - d*e (mod Z)=1
Par (n,e)Par (33,7)
Clave pública- Módulo y exponente
Par (n,d)Par (33,3)
Clave privada- Módulo y exponente
 

Cifrado y descifrado

En este cuadro tienes un ejemplo de funcionamiento del cifrado/descifrado de un número. Hablamos de números porque cuando se utiliza este procedimiento las cadenas de caracteres se convierten en bloques numéricos (utilizando los códigos ASCII de los caracteres) agregando al resultado un método de camuflaje conocido como Paddings Schemes que consiste en añadir algunos bits al mensaje de forma que el proceso de cifrado incluya esos bits añadidos que minimizan riesgos de vulnerabilidad de propio proceso.

Cifrado con clave privada y descifrado con clave pública
(numero)d (mod n)numero=5
53(mod 33)=
Resto de (53)/33=26
cifrado=26
Para cifrar se eleva el número a cifrar al valor de la clave privada y se determina el resto de dividir el resultado entre n

53=125; cociente entero 125/33=3; resto de la división=26
ya que: 3*33+26=99+26=125
(cifrado)e (mod n)cifrado=26
267(mod 33)=
Resto (267)/33=5
numero=5
Para descifrar eleva el número cifrado al valor de la clave pública y se determina el resto de dividir el resultado entre n

267=8031810176; cociente entero 8031810176/33=243388187;
resto de la división=5
ya que: 243388187*33+5=8031810171+5=8031810176
 
Cifrado con clave pública y descifrado con clave privada
(numero)e (mod n)numero=5
57(mod 33)=
Resto de (57)/33=14
cifrado=14
Para cifrar se eleva el número a cifrar al valor de la clave pública y se determina el resto de dividir el resultado entre n

57=78125; cociente entero 78125/33=2367; resto de la división=14
ya que: 2367*33+26=78111+14=78125
(cifrado)d (mod n)cifrado=14
143(mod 33)=
Resto de (143)/33=5
numero=5
Para descifrar eleva el número cifrado al valor de la clave privada y se determina el resto de dividir el resultado entre n

143=2744; cociente entero 2744/33=83; resto de la división=5
ya que: 83*33+5=2739+5=2744

Obviamente los ejemplos anteriores no son otra cosa que muestras simplificadas de los procedimientos aritméticos de cifrado y descifrado.

Limitaciones del algoritmo RSA

El cifrado asimétrico presenta algunos problemas operativos tales como:

Tabla comparativa de tamaños de claves de similiar resistencia a ataques de fuerza bruta
SimétricaAsimétrica
64 bits512 bits
80 bits768 bits
112 bits1792 bits
128 bits2304 bits