Está en la página 1de 5

CRIPTOGRAFÍA

CLAVES PRIVADAS PAREJAS (CPP) en RSA

Recopilado por:
Miguel José Navas Jaime
miguelnavasj@gmail.com

Para hablar de Claves Privadas Parejas (CPP) tenemos que hacer referencia a RSA y a la
generación de sus claves pública y privada. Recordemos como se generan están claves.

Partimos de un par de primos p y q diferentes que serán secretos, con ellos encontramos el
cuerpo de cifrado n = p * q y el indicador de Euler ∅(n) = (p – 1) * (q – 1) con este valor se
calcula la clave privada d partiendo de la clave pública e que será un número que cumpla lo
siguiente: 1 < e < ∅ y que el mcd (∅, e) = 1 para asegurar el inverso d exista. Con esto
aseguramos además que este número d (clave privada) es el único número inverso de e
(clave pública) en el cuerpo ∅(n).

Sin embargo, los cifrados se realizan en el cuerpo de cifrado n que será público, por obvias
razones, para que todos puedan hacer uso de él.

Pero aquí debemos considerar que, en dicho cuerpo de cifrado n, no se cumple que el
inverso de la clave pública e, el d hallado como clave privada, sea único. En conclusión,
tenemos que d (clave privada) inverso multiplicativo de e (clave pública) es única en el
cuerpo de cifrado ∅(n) pero no es única en el cuerpo de cifrado n.

Por lo que podremos deducir que existirán otros valores, por lo menos uno, diferentes a d
que podrán, utilizando las mismas funciones de cifrado, descifrar los mensajes que hayan
sido cifrados con la clave pública e. A este conjunto de claves se llama Claves Privadas
Parejas (CPP).

Cálculo de Claves Privadas Parejas (CPP)

Primero: Se calcula la primera clave pareja, que denominamos como (dγ o d0) así:

dγ = d0 = inv (e, γ)

donde, γ = mcm [(p – 1), (q – 1)]

mcm es el mínimo común múltiplo, recuerde como se realiza el cálculo del mcm.

Segundo: Se busca la cantidad de claves parejas, lo expresamos como (λ) y se calculan así:

λ = [(n – dγ) / γ]

Este número se conoce como la cantidad de CPP, se toma la parte entera del resultado.
Tercero: Con estos dos datos anteriores se encuentra el resto de claves parejas, así:

di = dγ + i*γ
con i = 0, 1, … λ

Es decir que las claves privadas parejas se obtienen así:

Clave 0 = d0 = dγ + 0*γ  simplemente dγ


Clave 1 = d1 = dγ + 1*γ  d 1 = d0 + γ
Clave 2 = d2 = dγ + 2*γ  d 2 + d1 + γ

Y así hasta completar la cantidad de claves λ.

Podemos ver que estas claves están separadas un valor constante entre ellas, el valor γ esto
permite calcularlas de una manera más sencilla y rápida.

Práctica Resuelta

Dados los valores de p, q, e y realizado el cálculo de la clave d con RSA, se tienen estos
datos:
p = 6709 y q = 1567
n = 10513003
∅(n) = 10504728
e=5
d = 6302837

Ciframos el valor M = 2071 con la clave pública e = 5 y tenemos:

C = Me mod n  C = 20715 mod 10513003  C = 6477907

Ahora desciframos el criptograma C = 6477907 con la clave privada d = 6302837

M = Cd mod n  M = 64779076302837 mod 10513003  M = 2071


Hemos recuperado el mensaje secreto.

Ahora, vamos a encontrar las Claves Privadas Parejas CPP, para esta clave privada d en RSA,
usaremos las ecuaciones presentadas anteriormente en el apartado de Cálculo de Claves
Privadas Parejas CPP.

Primero: Calcular la primera clave pareja (dγ):

dy = inv (e, γ)

hallamos γ = mcm [(p – 1), (q – 1)] = mcm (6708, 1566) = 1750788

dy = inv (e, γ) = inv (5, 1750788) = 1050473  dy = 1050473


Segundo: Se busca la cantidad de claves parejas (λ) así:

λ = [(n – dy) / γ]

λ = [(10513003 - 1050473) / 1750788 = 5 (Se toma la parte entera)

λ = 5 (este es el número de CPP)

Tercero: Se busca el resto de claves, así:

di = dy + i*γ

Como λ = 5 tenemos i = 0, 1, 2, 3, 4, 5

CPP 0  d0 = 1050473 + 0 𝑥 1750788 = 1050473


CPP 1  d1 = 1050473 + 1 𝑥 1750788 = 2801261
CPP 2  d2 = 1050473 + 2 𝑥 1750788 = 4552049
CPP 3  d3 = 1050473 + 3 𝑥 1750788 = 6302837 (Corresponde al valor de la Privada e)
CPP 4  d4 = 1050473 + 4 𝑥 1750788 = 8053625
CPP 5  d5 = 1050473 + 5 𝑥 1750788 = 9804413

Y así tenemos todas las claves privadas parejas.

Con estas CPP, vamos a intentar recuperar el mensaje secreto M partiendo del mensaje
cifrado C de esta práctica resuelta.

Recordemos que teníamos:


C = 6477907
M = 2071, que lo recuperamos usando la clave privada d = 6302837

Ahora vamos a usar las CPP y veamos si recuperamos el mensaje M

Para d0
Desciframos el criptograma C = 6477907 con la clave privada d0 = 1050473
M = Cd mod n  M = 64779071050473 mod 10513003
M = 2071

Para d1
Desciframos el criptograma C = 6477907 con la clave privada d1 = 2801261
M = Cd mod n  M = 64779072801261 mod 10513003
M = 2071

Para d2
Desciframos el criptograma C = 6477907 con la clave privada d2 = 4552049
M = Cd mod n  M = 64779074552049 mod 10513003
M = 2071

Para d3 = d porque d3 es la misma clave privada d


Para d4
Desciframos el criptograma C = 6477907 con la clave privada d4 = 8053625
M = Cd mod n  M = 64779078053625 mod 10513003
M = 2071

Para d5
Desciframos el criptograma C = 6477907 con la clave privada d5 = 9804413
M = Cd mod n  M = 64779078053625 mod 10513003
M = 2071

Se usaron todas las claves privadas parejas d1 a d5 y demostrado que con cualquiera de estas
CPP se puede recuperar el mensaje cifrado, pues hacen el mismo trabajo que la clave
privada d.

Esto podría verse como un problema o una vulnerabilidad del algoritmo RSA, sin embargo,
encontrar estas claves privadas parejas CPP (di) es igual de costoso que encontrar la clave
privadas (d). Por lo que no es motivo de preocupación, pues en el manejo de claves reales
con valores de p y q de por lo menos 1024 bits, los valores de estas CPP tienden al valor del
módulo n, son muy grandes y muy difíciles de conocer.

Pero algo muy importante es lograr reducir al máximo (minimizar) el número de claves
privadas parejas, anteriormente habíamos dicho que por lo menos existe una CPP, pues
reducir está a una o por lo menos muy cerca a una, es posible usando números primos
seguros.

Números primos seguros:


Un número primo es seguro si se cumple que dicho número primo es el resultado de
sumarle 1 al producto de 2 por otro número también primo.

Esto se puede expresar numéricamente así:

p es un numero primo seguro, si se cumple que p = 2*r + 1, siendo r un número primo.

Veamos un ejemplo: sea p = 12899, comprobar si p es un número primo seguro.

Debe cumplirse que p = 2*r + 1, entonces 12899 = 2*r + 1, es decir que si r = 6449 es primo
entonces p es un primo seguro.

Otro ejemplo más sencillo sería verificar si p = 23 es un numero primo seguro. Utilizando el
mismo procedimiento anterior tenemos:

p = 2*r + 1, entonces 23 = 2*r + 1, es decir que si r = 11 es fácil ver que r es primo, por lo
tanto, p es un primo seguro.
Usar primos seguros garantiza minimizar la cantidad de CPP:
Para comprobar esto, repitamos el ejercicio de la práctica resuelta, anterior, pero esta vez
usando números p y q primos seguros, muy cercanos a los del ejercicio. En el ejemplo
anterior se usaron los números p = 6709 y q = 1567 que nos son números primos seguros y
una clave pública e = 5 y se obtuvieron 4 CPP además de la clave d.

Para este ejemplo usemos números primos seguros muy cercanos a los anteriores. En este
caso p = 6719 y q = 1523 y la misma clave pública e = 5.

Verifique que efectivamente p y q son primos seguros.


p = 6719 y q = 1523

¿Qué debe hacer para comprobarlo?

Con esos valores de p, q y e tenemos:


n = 10233037
∅(n) = 10224796
e=5
d = 8179837

Aquí tenemos solamente una CPP d0 = 3067439. Verifique esta respuesta

Lo que ratifica lo dicho sobre como minimizar la cantidad de CPP, pero es importante aclarar
que no siempre los primos seguros garantizan una sola CPP, lo que si es cierto es que se
logran valores muy bajos de CPP.

También podría gustarte