Í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 AJAXCifrado 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úmero | Ejemplo | Proceso de cálculo |
| p | 3 | Primo muy grande. Aleatorio |
| q | 11 | Primo muy grande. Aleatorio |
| n=p*q | 3*11=33 | Se calcula el producto p*q |
| Z=(p-1)*(q-1) | (3-1)*(11-1)=20 | Producto Calculado |
| e | 7 cumple la condición | Se calcula un número que sea:
|
| d | 3 cumple la condición Resto de (7*3)/20=1 | Ha de cumplirse que
|
| 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étrica | Asimétrica |
| 64 bits | 512 bits |
| 80 bits | 768 bits |
| 112 bits | 1792 bits |
| 128 bits | 2304 bits |