A maioria dos informáticos, incluíndo os que trabalham em segurança, tem apenas noções básicas sobre criptografia assimétrica. A maioria de nós sabe utilizar os vários algoritmos, embora desconheça como operam. Nesta talk pretendo falar um pouco mais em detalhe sobre estes algoritmos, em particular o RSA. Irei falar sobre aplicações práticas de criptografia assimétrica (desde o SSL, passando pela Playstation 3 até ao Cartão do Cidadão), limitações dos algoritmos, ataques aos mesmos e falhas de implementação recentemente conhecidas. O objectivo principal desta talk é desmistificar esta "vaca sagrada" que é a criptografia assimétrica, demonstrando que não é uma panaceia: também tem falhas e limitações.
3. História da criptografia moderna
• Colossus:
– Primeiro computador electrónico programável;
– Desenvolvido para quebrar códigos na 2ª Grande
Guerra (cifra Lorenz).
• Bletchley Park
– Onde nasceu a Criptografia Moderna;
– Onde nasceu a teoria da computação.
4. Alan Turing
• “Pai” da teoria da
computação;
• Matemático
• Criptógrafo:
– Responsável por quebrar a
cifra Enigma
9. Diffie-Hellman
• Algoritmo de troca de
chaves;
• Permite troca de chaves
secretas em público sem
que sejam reveladas;
• Não fornece autenticação
dos intervenientes.
Fonte: wikipedia
15. Codebits V Security Quiz
último “nível”
“key”:
-----BEGIN PUBLIC KEY-----
MD4wDQYJKoZIhvcNAQEBBQADLQAwKgIjBj8NqV9VQV2i
QgEZrI75OHukFe5yMEwUkrAs6KGRuMCNhMUCAwEAAQ==
-----END PUBLIC KEY-----
“Ciphertext”:
ArQiAjIwhpFedXJD2g14PPD11XD4UMOB8NAqDWs4sTHG
OLs=
E agora?
21. RSA: O que é
• O algoritmo criptográfico de chave pública mais
utilizado no mundo
– há outros, menos utilizados
• Utilizado em:
– Certificados Digitais:
• Cartão do Cidadão
• Web (HTTPS)
• Serviços de actualizações/patching (Windows Update)
– Secure Shell (SSH)
– PGP - Pretty Good Privacy
22. RSA: O que é (2)
– Trusted Platform Module (TPM Chip) em PC's
desktop
– Trusted Software validation (iOS, Android)
– DRM em conteúdos digitais
– Protecção (“lock down”) de Hardware
especializado:
• Meo / Vodafone TV
• XBOX 360
– (A Playstation 3 usa ECDSA)
32. Factorização do módulo (2)
• A maior chave foi quebrada em 2009
– 768 bits
– ~1500 anos de CPU time (2.2 GHz Opteron, 2GB
RAM)
• Estima-se que RSA 1024 seja ~1000x mais
difícil
33. Factorização do módulo (3)
“If we are optimistic, it may be possible to factor a 1024-bit RSA
modulus within the next decade by means of an academic
effort on the same limited scale as the effort presented here.
From a practical security point of view this is not a big deal, given
that standards recommend phasing out such moduli by the end
of the year 2010.”
“Another conclusion from our work is that we can confidently say
that if we restrict ourselves to an open community, academic
effort as ours and unless something dramatic happens in
factoring, we will not be able to factor a 1024-bit RSA modulus
within the next five years. After that, all bets are off.”
Factorization of a 768-bit RSA modulus
18 de Fevereiro, 2010
34.
35. “The NSA Is Building the Country’s Biggest
Spy Center (Watch What You Say)”
- Wired, 15 de Março de 2012
38. RSA: Problemas / Ataques
2. Ataques à implementação
• Timing / Side channel attacks:
– Remote timing attacks are practical (Boneh, 2003)
– On the Power of Simple Branch Prediction Analysis
(Seifert 2006)
– A New Side-Channel Attack on RSA Prime
Generation (Schindler 2009)
• Falhas na geração de chaves:
– Expoente público demasiado pequeno (3);
– Fraca escolha de factores primos (PRNG fraco).
41. O que acontece se duas chaves partilharem
factores primos?
42. Aleatoriedade é fundamental
• Se o gerador de nºs aleatórios for fraco,
corremos o risco de repetir nºs primos;
• Acidentes de percurso:
– Debian OpenSSL package (2008):
43. Aleatoriedade é fundamental (2)
• Pesquisa recente (Fevereiro de 2012):
“More worrisome is that among the 4.7 million
distinct 1024-bit RSA moduli that we had
originally collected, 12720 have a single large
prime factor in common.”
- Ron was wrong, Whit is right,
http://eprint.iacr.org/2012/064.pdf
44. Security Metrics
Ou
“If you can’t measure it, you can’t
manage it”.
45. Pesquisa em Portugal
• Acesso a porto 443 de todos os IP’s
portugueses
• Obtenção do certificado SSL
• Trabalhar os dados obtidos
• Disclaimer: Não houve nem acesso ilegítimo
nem tentativa.
46. Pesquisa em Portugal
Passo 1: Recolha
nmap -n -P0 -iL portugal.ranges
-sS -p 443 --script=ssl-cert -v
--max-hostgroup=16384 -T5
-oX portugal.certs
~1,5 dias
Amazon EC2 FTW
47. Pesquisa em Portugal
Passo 2: Pré-processamento
• PERL para parsar o ficheiro XML do nmap
• Output: .db file (PERL Storable) contendo certificados
recolhidos
48. # ./certstats.pl certs.storable.db
31557 certificates loaded
20545 self signed certificates
528 keys found of bit length 512
156 keys found of bit length 768
6 keys found of bit length 1020
21633 keys found of bit length 1024
2 keys found of bit length 1536
9041 keys found of bit length 2048
191 keys found of bit length 4096
sha1WithRSA keys: 187
ripemd160WithRSA keys: 1
sha512WithRSAEncryption keys: 5
sha256WithRSAEncryption keys: 74
md5WithRSAEncryption keys: 11053
dsaWithSHA1 keys: 19
sha1WithRSAEncryption keys: 20218
49. Pesquisa em Portugal
Passo 3: Processamento dos módulos
• Imprimir os módulos dos certificados RSA 1024 para
um ficheiro (PERL);
# ./printmodulo.pl certs.storable.db > moduli.txt
• NOTA: Apróx. 11k módulos repetidos (self-signed
certs?):
# wc -l moduli.txt ; sort -u moduli.txt | wc –l
21624 moduli.txt
10418
50. Pesquisa em Portugal
Passo 3: Processamento dos módulos (2)
• Identificar factores primos comuns entre módulos;
• Algoritmo de Euclides (gcd()) descobre-os em tempo
polinomial;
– Foram necessárias algumas optimizações ao gcd
roubadas ao Dan Bernstein, ver post de Nadia
Heninger no blog “Freedom to Tinker”;
• PERL não chega → C
– #include <gmp.h>
51. Pesquisa em Portugal
Passo 3: Processamento dos módulos (3)
• Programa em C que itera sobre uma lista de módulos
e corre o “greatest common divisor” entre eles:
# time ./mp uniqmoduli.txt > primefactors.txt
real 3m1.798s
user 2m47.286s
sys 0m13.289s
• Resultados:
# sort -u primefactors.txt
10249387753767103692784797669342525230742191756836309921481183045956057
51800105024766018701797053149445419595902893031774418216435258304910660
7645204813147
11119395432118879179519544495595597502419989036052902267031102247273337
46132400213686002954086505407830524612102104573142722649728178279819107
7518647710597
12153720331412318215233052052111267605013844797673577393238753478791461
21527583795843913325300705869416126187666668809666225371151350505703162
5120636958709
52. Pesquisa em Portugal
Passo 4: Análise de Resultados
• Com os factores primos obtidos, podemos identificar
quais as chaves privadas que podemos gerar:
# cat commonfactors.txt | ./factorkeys.pl certs.storable.db
ips.storable.db
53. “That’s a bingo!”
21624 1024 RSA certificates loaded
CN=self-signed, CN=system generated, CN=0162052010005424 from ip x.x.x.x is factorable!
expires: Dec 30 00:00:45 2010 GMT.
EXTRACTED PUBLIC KEY:
-----BEGIN RSA PUBLIC KEY-----
MIGJAoGBAL81B1v8Jrk7k5Bc4qkGunksKoiYkMKcwcxuApD3wpp1J+2ziVMrBFcA
nNuA+nMeshxgOMst6lKqXMTwgPxFPz4ks0kg9LC1c7f8jKqoe6icYsFE2FxUm6l4
Sxrfopbv+e3+1c9THOLkD/WXj624PB16IyMp1sqO6Y5IS08OWZnnAgMBAAE=
-----END RSA PUBLIC KEY-----
GENERATED **PRIVATE** KEY:
-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQC/NQdb/Ca5O5OQXOKpBrp5LCqImJDCnMHMbgKQ98KadSfts4lT
KwRXAJzbgPpzHrIcYDjLLepSqlzE8ID8RT8+JLNJIPSwtXO3/IyqqHuonGLBRNhc
VJupeEsa36KW7/nt/tXPUxzi5A/1l4+tuDwdeiMjKdbKjumOSEtPDlmZ5wIDAQAB
AoGAWa9x6D95mmDLcmdfGZFCXhvNR4zoOaB1doITShQsf258cA5KV2xR+M0cxgjV
cLHxMUYg3YyH4IZwRR/aIHoKkzZd+EPkP2zJWYkEKFLp+hgouozFeBfw37DZzt3h
6XZkA4GZr85ukGiMFV7tsSqa8wgxhIZjymx5Gj61YsAORyECQQDDsfa5PzwOHlzg
ajaGO4WREt6uRV1iDI54FwiqxM2CwqgbrGuq1Cqh3+BEjUGA4j8F6bD4cV4roqGL
oEMvShVbAkEA+iEDPbtbhy5lLwIYzQ2x1VtjbNWlMbW3fAsqsXIHc0y1vAKz53Te
CpYq4pcojssMXVWwOFKHZr7S9JFzbNwXZQJAROP+ZgJDwvifW4UogqKrh4GsEI9s
q1qeQNpi+7LiYfjiszNEh9O+2lN0oM1VVOjQpOU6notSSmwrEHsvi5M55wJBALSg
6HVI+rTpZTqIOh7CV/zqjSdINY5rWsCiU8dmwEicSdUm4oIwHDTq8rdFT42mxhwU
yDg0KQGipjblXsRrQB0CQBDPavnn9i/dC8TzjTLr1mIHzrVSKKOZSjO9uK1YHEDK
qdq23XbYpYlBiyQY/8jUjt3YIhSBVEDZVj8ElOfoxYQ=
-----END RSA PRIVATE KEY-----
54. Pesquisa em Portugal
Resultados
• 11 chaves RSA 1024 factorizáveis (em 21624);
• Todas as chaves self-signed e com a data de
expiração no passado;
• Todas de uma única classe de dispositivo SSL VPN
(Juniper).
55. Dados interessantes
Data de expiração Common Name
(certificados gerados “em série”?) (provavelmente nº de série)
expires: Dec 30 00:00:40 2010 GMT. CN=0162032010001816
expires: Dec 30 00:00:41 2010 GMT. CN=0162052010005424
expires: Dec 30 00:00:42 2010 GMT. CN=0162092010004308
expires: Dec 30 00:00:43 2010 GMT. CN=0162122008002400
expires: Dec 30 00:00:44 2010 GMT. CN=0162122008003338
expires: Dec 30 00:00:44 2010 GMT. CN=0164022008001154
expires: Dec 30 00:00:45 2010 GMT. CN=0164022008001728
expires: Dec 30 00:00:51 2010 GMT. CN=0164042008000522
expires: Dec 30 00:00:51 2010 GMT. CN=0164042008001376
expires: Dec 30 00:00:57 2010 GMT. CN=0164072009000933
expires: Dec 30 00:01:01 2010 GMT. CN=0164072009000933
56. • Certificados expirados;
• Self-signed;
• O facto de a chave
privada ser
comprometida não é um
grande problema a esta
luz;
• Apenas 11 certificados e
de “baixo valor”.
58. Cartão do Cidadão
• Chave RSA 1024 começa a parecer curta…
– “As of 2011, new RSA keys generated by unclassified
applications used by the U.S. Federal Government, should
have a moduli of at least bit size 2048” – NIST SP800-57
– Talvez porque Cartões RSA 2048 são caros?
• Onde são geradas as chaves?
– No cartão?
• Se sim, será o PRNG do cartão robusto?
– Fora do cartão?
• Se sim, será que o estado português tem uma cópia da minha
chave privada?
• Seria interessante repetir esta análise para chaves
públicas do CC (Olá AMA, Multicert )
60. Conclusões
• Objectivos iniciais:
– Aprender mais sobre o RSA;
– Retirar-lhe a aura mística
• Pelo caminho:
– Certificados SSL em Portugal relativamente seguros a
este ataque
– Cartão do cidadão é um alvo interessante para análise
mais aprofundada:
• Factores primos comuns?
• Robustez face a timing/side channel attacks?
61. Obrigado!
Q&A?
Luis Grangeia
lgrangeia@sysvalue.com