Todo el mundo habla de lo vulnerable que es RSA y de la importancia de los números primos envueltos en las llaves, muchos saben que la seguridad radica en la dificultad de factorizar, hace poco en twitter a muchos les interesó el cómo se hace, ahora lo mostrasre en GuadalajaraCON para que lo hagan ustedes.
Hablaremos de cómo funciona RSA y romperemos una llave al azar en tiempo real generada con OpenSSL, reconstruiremos la llave privada dada la pública y analizaremos la matemática detrás de este problema.
Vamos a romper una llave RSA de 256 bits la cual no es tan grande pero tampoco es tristemente pequeña en menos de 5 minutos. Una razón mas para investigar más con otro tipo de esquemas de logaritmo discreto como los que mostraré en mi otra conferencia y de los cuales me la paso dando charlas sobre Jacobianas con curvas algebraicas u otras variedades abelianas.
GUADALAJARACON 2012
http://www.guadalajaracon.org
Guadalajara, Jalisco, México - 20 y 21 de abril del 2012
CPMX5 - Las nuevas generaciones de redes por Luis Colunga
Rompiendo llaves RSA explícitamente con OpenSSL [GuadalajaraCON 2012]
1. Rompiendo llaves RSA expl´
ıcitamente con OpenSSL
Eduardo Ruiz Duarte
Facultad de Ciencias UNAM
21 de Abril 2012, GuadalajaraCON M´xico
e
21 de Abril 2012, GuadalajaraCON M´xico
e
Eduardo Ruiz Duarte (Facultad de Ciencias UNAM)
Rompiendo llaves RSA expl´
ıcitamente con OpenSSL / 19
2. Agenda
Criptograf´ asim´trica y conceptos fundamentales
ıa e
RSA
Criptoan´lisis expl´
a ıcito de una llave generada con OpenSSL 256 bits
Conclusiones
21 de Abril 2012, GuadalajaraCON M´xico
e
Eduardo Ruiz Duarte (Facultad de Ciencias UNAM)
Rompiendo llaves RSA expl´
ıcitamente con OpenSSL / 19
3. Introducci´n
o
En las telecomunicaciones hay dos tipos de cifrado muy importantes
Sim´trico: Utiliza la misma llave para cifrar y descifrar
e
Dk (Ek (x)) = x
Asim´trico: Utiliza una llave para cifrar y otra para descifrar
e
Ds (Ep (x)) = x
21 de Abril 2012, GuadalajaraCON M´xico
e
Eduardo Ruiz Duarte (Facultad de Ciencias UNAM)
Rompiendo llaves RSA expl´
ıcitamente con OpenSSL / 19
4. Introducci´n
o
Sim´tricos El sim´trico generalmente se usa para cifrar flujos de
e e
informaci´n, y estos suelen ser muy rapidos.
o
´
Este tiene una desventaja, requiere una negociaci´n previa de una llave, Y
o
si las entidades est´n separadas, esta llave se tendr´ que negociarse a
a ıa
trav´s de un medio no seguro, lo cual ser´ absurdo.
e ıa
Ejemplos de algoritmos sim´tricos
e
Rijndael-AES, Blowfish, TEA, A5
21 de Abril 2012, GuadalajaraCON M´xico
e
Eduardo Ruiz Duarte (Facultad de Ciencias UNAM)
Rompiendo llaves RSA expl´
ıcitamente con OpenSSL / 19
5. Introducci´n
o
Asim´tricos Aqu´ hay dos llaves, p´blica y privada, la p´blica se usa para
e ı u u
cifrar y la privada para descifrar unicamente, a partir de la llave p´blica es
´ u
Turing-intratable el problema de calcular la llave privada utilizando
algoritmos asim´tricos basados en factorizaci´n en n´meros primos o el
e o u
problema de logaritmo discreto en ciertos grupos
Ejemplos de algoritmos asim´tricos
e
RSA, Elgamal, XTR, Diffie-Hellman
21 de Abril 2012, GuadalajaraCON M´xico
e
Eduardo Ruiz Duarte (Facultad de Ciencias UNAM)
Rompiendo llaves RSA expl´
ıcitamente con OpenSSL / 19
6. Introducci´n
o
Asim´tricos Estos algoritmos son muy importantes en internet ya que
e
proveen la manera de cifrar y firmar datos entre dos entidades sin la
necesidad de negociaci´n de password, muchos servicios usan esto, y tal
o
vez sin darte cuenta usas criptograf´ asim´trica diario
ıa e
21 de Abril 2012, GuadalajaraCON M´xico
e
Eduardo Ruiz Duarte (Facultad de Ciencias UNAM)
Rompiendo llaves RSA expl´
ıcitamente con OpenSSL / 19
7. Conceptos b´sicos
a
N´mero primo: Un n´mero primo n > 1 es aquel que no se puede
u u
descomponer como multiplicaci´n de otros n´meros (s´lamente como
o u o
n ∗ 1), dicho de otra manera, s´lo tiene dos divisores, n y 1
o
m´ximo com´n divisor: El m´ximo com´n divisor (mcd) de dos n´meros
a u a u u
x,y es el m´ximo n´mero que divide a ambos sin dejar residuo
a u
Funci´n φ(n): Esta funci´n φ(n) nos dice cuantos n´meros menores que
o o u
n tienen como m´ximo com´n divisor al 1 s´lamente, o sea, cuantos
a u o
n´meros menores que n son primos relativos con n
u
21 de Abril 2012, GuadalajaraCON M´xico
e
Eduardo Ruiz Duarte (Facultad de Ciencias UNAM)
Rompiendo llaves RSA expl´
ıcitamente con OpenSSL / 19
8. Conceptos b´sicos
a
Ejemplos:
primos
2, 3, 11, 29, 233
M´ximo com´n divisor
a u
mcd(48, 60) = 12 ya que el 12 es el m´ximo divisor de ambos
a
Funci´n φ(n)
o
φ(9) = 6 ya que #A = {1, 2, 4, 5, 7, 8} = 6 y mcd(i , 9) = 1 ∀i ∈ A
φ(p) = p − 1 para p primo
φ(pq) = (p − q)(q − 1) para p, q primos
21 de Abril 2012, GuadalajaraCON M´xico
e
Eduardo Ruiz Duarte (Facultad de Ciencias UNAM)
Rompiendo llaves RSA expl´
ıcitamente con OpenSSL / 19
9. Conceptos b´sicos
a
Aritm´tica modular La artim´tica modular sobre Z resumida en un slide
e e
es operar enteros en un conjunto acotado, es decir a ∗ b ≡ c mod n por lo
que c es el n´mero m´s chico que cumple que (a ∗ b) − c es m´ltiplo de n,
u a u
esto es muy f´cil calcularlo, veamos un ejemplo
a
21 de Abril 2012, GuadalajaraCON M´xico
e
Eduardo Ruiz Duarte (Facultad de Ciencias UNAM)
Rompiendo llaves RSA expl´
ıcitamente con OpenSSL / 19
10. Conceptos b´sicos
a
Aritm´tica modular
e
5 ∗ 3 ≡ 1 mod 2 ya que 5 ∗ 3 es 15 y el residuo de 15 entre 2 es 1 9 ∗ 2 ≡ 3
mod 5 ya que 9 ∗ 2 es 18 y el residuo de 18 entre 5 es 3
21 de Abril 2012, GuadalajaraCON M´xico
e
Eduardo Ruiz Duarte (Facultad de Ciencias UNAM)
Rompiendo llaves RSA expl´
ıcitamente con OpenSSL / 19
11. RSA
Generaci´n de llaves:
o
Se escogen dos dos n´meros primos aleatorios (p, q)
u
Se computa n = pq este nombre ser´ el m´dulo
a o
Se computa φ(n) = (p − 1)(q − 1)
Se escoge un e tal que 1 ≤ e < φ(n) y mcd(φ(n), e) = 1
Se computa d tal que d ∗ e ≡ 1 mod φ(n)
Ahora (d, p, q) ser´ la llave privada y (e, n) la llave p´blica
a u
21 de Abril 2012, GuadalajaraCON M´xico
e
Eduardo Ruiz Duarte (Facultad de Ciencias UNAM)
Rompiendo llaves RSA expl´
ıcitamente con OpenSSL / 19
12. RSA
Cifrado
A recibir´ M entonces A le manda a B su llave p´blica (e, n)
a u
B computa c = M e mod n y le manda c a A
21 de Abril 2012, GuadalajaraCON M´xico
e
Eduardo Ruiz Duarte (Facultad de Ciencias UNAM)
Rompiendo llaves RSA expl´
ıcitamente con OpenSSL / 19
13. RSA
Descifrado
A para obtener M computa sobre c lo siguiente:
M = c d mod n que es lo mismo que M = (M e )d mod n
y as´ obtiene el mensaje M .
ı
21 de Abril 2012, GuadalajaraCON M´xico
e
Eduardo Ruiz Duarte (Facultad de Ciencias UNAM)
Rompiendo llaves RSA expl´
ıcitamente con OpenSSL / 19
14. RSA
Seguridad Si un atacante obtiene la llave p´blica (e, n) tenemos que
u
d =e −1 mod φ(n) lo que es lo mismo que d = e −1 mod (p − 1)(q − 1)
Esta persona tendr´ que factorizar n = pq para poder calcular e −1 mod
a
(p − 1)(q − 1)
ya que se debe de saber (p − 1)(q − 1) para calcular e tal que ed ≡ 1 mod
(p − 1)(q − 1)
El problema de factorizar es no determin´ ıstico, es decir no se pueden
calcular los factores de un entero en tiempo polinomial, al menos con una
computaora no cu´ntica
a
21 de Abril 2012, GuadalajaraCON M´xico
e
Eduardo Ruiz Duarte (Facultad de Ciencias UNAM)
Rompiendo llaves RSA expl´
ıcitamente con OpenSSL / 19
15. RSA
Conjeturas El problema m´s importante de la historia de las matem´ticas
a a
modernas, actualmente sin responder, es la hip´tesis de Riemann la cual
o
como corolario nos dice que tan densos son los n´meros primos usando la
u
funci´n zeta de Riemann, este problema de los n´meros primos se ha ido
o u
resolviendo a ”maquinazos” haciendo cada d´ el uso de las llaves m´s
ıa a
grandes por lo que esto implica mayor c´mputo, por lo que existen mejores
o
problemas para criptograf´ asim´trica como lo es el problema del
ıa e
logaritmo discreto el cual veremos en mi otra presentaci´n
o
21 de Abril 2012, GuadalajaraCON M´xico
e
Eduardo Ruiz Duarte (Facultad de Ciencias UNAM)
Rompiendo llaves RSA expl´
ıcitamente con OpenSSL / 19
16. Rompiendo una llave OpenSSL
OpenSSL es el standard de SSL libre que se usa actualmente para asegurar
confidencialidad en sitios de internet por ejemplo ´ste tiene una interfaz
e
para generar llaves, las cuales son standares los formatos y son los que
usan los navegadores por ejemplo, veamos como funciona el cifrado y
como se generan las llaves
Creamos archivo plano de mensaje:
echo ”jojojo” > msg.txt
Cifrado:
openssl rsautl -encrypt -pubin -inkey pubkey.pem -in msg.txt -out
msg.enc
Descifrado:
openssl rsautl -decrypt -inkey priv.pem -in msg.enc -out msg.nuevo
21 de Abril 2012, GuadalajaraCON M´xico
e
Eduardo Ruiz Duarte (Facultad de Ciencias UNAM)
Rompiendo llaves RSA expl´
ıcitamente con OpenSSL / 19
17. Rompiendo una llave OpenSSL
Para generar una llave privada priv.pem (es decir (p, q)
openssl genrsa -out privada.pem 256
Para generar una llave p´blica pub.pem con la privada, es decir (e, n)
u
openssl rsa -in privada.pem -pubout -out pub.pem
Para extraer el m´dulo :
o
openssl rsa -in pub.pem -pubin -text -modulus El m´dulo nos los da
o
en hex por lo que para convertirlo a decimal:
echo ”ibase=16; 9ABAAD5BBE954A26BB1F9871865F”—bc
Factorizamos:
msieve -v 3138281169008962629484387769615967
Generamos la llave privada en formato PEM con los dos factores:
http://math.co.ro/cgi-
bin/genpriv?p=FACTOR1&q=FACTOR2&e=EXP
21 de Abril 2012, GuadalajaraCON M´xico
e
Eduardo Ruiz Duarte (Facultad de Ciencias UNAM)
Rompiendo llaves RSA expl´
ıcitamente con OpenSSL / 19
18. Rompiendo una llave OpenSSL
Con esto tendremos una llave en este formato que solo habremos generado
con informaci´n de la p´blica y tambi´n nos servir´ para descifrar nuestro
o u e a
ejemplo msg.enc
—–BEGIN RSA PRIVATE KEY—–
MIGsAgEAAiEAtOcoQsRl82tLz6QxHYKz/G9J0FaO408sJ2Yj/GTyVSsCAwEA
AJIb8USb48wK6Rw3/QNcwYjRJctW0ZZl4n0j6y8QFBcBAhEA4z4k7kv3F7RI
YbAICwIRAMvLxM4XkDsjvd+jGmtme2ECEQDQpainHBzeKOw1TMlQdJ6NA
G5SYwsQIkexpVC00oQIQInCIzHp3Ex91s7AV+9Dm8A==
—–END RSA PRIVATE KEY—–
21 de Abril 2012, GuadalajaraCON M´xico
e
Eduardo Ruiz Duarte (Facultad de Ciencias UNAM)
Rompiendo llaves RSA expl´
ıcitamente con OpenSSL / 19
19. ¡Gracias! Eduardo Ruiz Duarte
beck@math.co.ro
http://math.co.ro
blog: http://b3ck.blogspot.com
twitter: @toorandom
PGP key fingerprint: 0xFEE7F2A0
21 de Abril 2012, GuadalajaraCON M´xico
e
Eduardo Ruiz Duarte (Facultad de Ciencias UNAM)
Rompiendo llaves RSA expl´
ıcitamente con OpenSSL / 19