Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Claves Privadas Parejas MJNJ
Claves Privadas Parejas MJNJ
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).
Primero: Se calcula la primera clave pareja, que denominamos como (dγ o d0) así:
dγ = d0 = inv (e, γ)
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, … λ
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
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.
dy = inv (e, γ)
λ = [(n – dy) / γ]
di = dy + i*γ
Como λ = 5 tenemos i = 0, 1, 2, 3, 4, 5
Con estas CPP, vamos a intentar recuperar el mensaje secreto M partiendo del mensaje
cifrado C de esta práctica resuelta.
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 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.
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.
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.