270 likes | 357 Views
Seminário de Informática Teórica. Henrique Borges Alencar Siqueira. Motivação. Geradores randômicos. Blocos fundamentais da Segurança. Roteiro. Motivação Algoritmos de criptografia Geradores pseudo-randômicos Explorando a falha Requisitos para geradores seguros Corrigindo a falha
E N D
Seminário de Informática Teórica Henrique Borges Alencar Siqueira
Geradores randômicos Blocos fundamentais da Segurança
Roteiro • Motivação • Algoritmos de criptografia • Geradores pseudo-randômicos • Explorando a falha • Requisitos para geradores seguros • Corrigindo a falha • Conclusão
Algoritmos de criptografia • Iludem tentativas de análise de padrões e ataques de força-bruta • Assumem que existe uma fonte randômica (não reproduzível) de bits para gerar: • Números primos • Chaves públicas e privadas
Algoritmos de criptografia • Falham quando não existe uma fonte randômica segura: • Netscape implementation of SSL • I. Goldberg and D. Wagner. Randomness and the Netscape browser. Dr Dobb’s, pages 66–70, January 1996. • Java session-ids • Z. Gutterman and D. Malkhi. Hold your sessions: An attack on Java session-id generation. In A. J. Menezes, editor, CT-RSA, LNCS vol. 3376, pages 44–57. Springer, February 2005.
Roteiro • Motivação • Algoritmos de criptografia • Geradores pseudo-randômicos • Explorando a falha • Requisitos para geradores seguros • Corrigindo a falha • Conclusão
Geradores pseudo-randômicos • Ou “Deterministic Random Bit Generator” • Todos os geradores randômicos por software
Geradores pseudo-randômicos java.util.Random Número “randômico” Função geradora One-way Hash Solicitação r.nextInt() seed = (seed * multiplier + addend) & mask return seed >> 16 Hora atual Estado interno Seed: (Fontes de entropia)
Geradores pseudo-randômicos • Mesmas fontes (seeds) + mesmo algoritmo = mesma seqüência de números • java.util.Random • long seed = 0; • Random r = new Random(seed); • assert (r.nextInt() == -1155484576);
Roteiro • Motivação • Algoritmos de criptografia • Geradores pseudo-randômicos • Explorando a falha • Requisitos para geradores seguros • Corrigindo a falha • Conclusão
Explorando a falha • OpenWRT • Implementação do Linux para roteadores wireless • Provê • SSL termination • SSH server • Wireless encryption • A segurança de todos estes serviços depende do gerador pseudo-randômico
Explorando a falha • OpenWRT • Fontes de entropia (seeds) do gerador randômico (Março de 2006) • Hora de inicialização • Recebimento de pacotes desde a inicialização • Fontes observáveis!!! • Pacotes em rede wireless • Ambiente facilmente reproduzido
Explorando a falha Código Java: Usando RSA com gerador randômico ruim
Roteiro • Motivação • Algoritmos de criptografia • Geradores pseudo-randômicos • Explorando a falha • Requisitos para geradores seguros • Corrigindo a falha • Conclusão
Requisitos para geradores seguros • Pseudorandomness • A saída do gerador não pode ser prevista por um observador externo • Provê segurança suficiente para adversários sem acesso ao estado interno do gerador • Obtida usando fontes de entropia (seeds) randômicas (não reproduzíveis)
Requisitos para geradores seguros • Forward security • Saber o estado interno atual não implica descobrir saídas anteriores • Obtida usando funções one-way (injetoras) para a geração de números randômicos
Requisitos para geradores seguros • Break-in recovery / backward security • Saber o estado interno atual não implica descobrir saídas futuras • Obtida usando re-seed periódico (re-alimentação)
Roteiro • Motivação • Algoritmos de criptografia • Geradores pseudo-randômicos • Explorando a falha • Requisitos para geradores seguros • Corrigindo a falha • Conclusão
Corrigindo a falha • Usar fontes de entropia secretas e com a segurança desejada • Seeds com 256 bits para segurança de 256 bits • Usar múltiplas fontes de entropia real • Hora atual, teclas digitadas, ruído do microfone, giro do HD, ... • Re-seed periódico
Corrigindo a falha • OpenWRT: Fontes de entropia • Hora de inicialização • Recebimento de pacotes desde a inicialização
Corrigindo a falha • OpenWRT: Fontes de entropia • Persistir o estado do gerador randômico ao desligar o S.O. • Re-seed • Horário de (re) inicialização • Recebimento de pacotes
Corrigindo a falha • Código Java: Fontes de entropia • Timestamp
Corrigindo a falha • Código Java: Fontes de entropia • Usar a implementação nativa do gerador randômico (que tem seeds melhores) • Usar re-seed periódico com outras fontes de entropia
Roteiro • Motivação • Algoritmos de criptografia • Geradores pseudo-randômicos • Explorando a falha • Requisitos para geradores seguros • Corrigindo a falha • Conclusão
Conclusão • Um atacante sofisticado pode descobrir ser mais fácil reproduzir oambiente que gerou os dados e procurar noconjunto de possibilidades geradas do que em todo o espaço amostral
Dúvidas? Obrigado