Seminário de Informática Teórica Henrique Borges Alencar Siqueira.
Transcript of Seminário de Informática Teórica Henrique Borges Alencar Siqueira.
Seminário de Informática Seminário de Informática TeóricaTeórica
Henrique Borges Alencar Henrique Borges Alencar SiqueiraSiqueira
MotivaçãoMotivação
Geradores randômicosGeradores randômicos
Blocos fundamentais da Blocos fundamentais da Segurança Segurança
RoteiroRoteiro
MotivaçãoMotivação Algoritmos de criptografiaAlgoritmos de criptografia Geradores pseudo-randômicosGeradores pseudo-randômicos Explorando a falhaExplorando a falha Requisitos para geradores segurosRequisitos para geradores seguros Corrigindo a falhaCorrigindo a falha ConclusãoConclusão
Algoritmos de criptografiaAlgoritmos de criptografia
Iludem tentativas de análise de Iludem tentativas de análise de padrões e ataques de força-brutapadrões e ataques de força-bruta
Assumem que existe uma fonte Assumem que existe uma fonte randômica (não reproduzível) de bits randômica (não reproduzível) de bits para gerar:para gerar: Números primosNúmeros primos Chaves públicas e privadasChaves públicas e privadas
Algoritmos de criptografiaAlgoritmos de criptografia
Falham quando não existe uma fonte Falham quando não existe uma fonte randômica segura:randômica segura: Netscape implementation of SSLNetscape implementation of SSL
I. Goldberg and D. Wagner. Randomness and the Netscape I. Goldberg and D. Wagner. Randomness and the Netscape browser. Dr Dobb’s, pages 66–70, January 1996.browser. Dr Dobb’s, pages 66–70, January 1996.
Java session-idsJava session-ids Z. Gutterman and D. Malkhi. Hold your sessions: An attack Z. Gutterman and D. Malkhi. Hold your sessions: An attack
on Java session-id generation. In A. J. Menezes, editor, CT-on Java session-id generation. In A. J. Menezes, editor, CT-RSA, LNCS vol. 3376, pages 44–57. Springer, February RSA, LNCS vol. 3376, pages 44–57. Springer, February 2005.2005.
RoteiroRoteiro
MotivaçãoMotivação Algoritmos de criptografiaAlgoritmos de criptografia Geradores pseudo-randômicosGeradores pseudo-randômicos Explorando a falhaExplorando a falha Requisitos para geradores segurosRequisitos para geradores seguros Corrigindo a falhaCorrigindo a falha ConclusãoConclusão
Geradores pseudo-Geradores pseudo-randômicosrandômicos
Ou “Deterministic Random Bit Ou “Deterministic Random Bit Generator”Generator”
Todos os geradores randômicos por Todos os geradores randômicos por softwaresoftware
r.nextInt()Solicitação Função geradoraOne-way
Hash
Hora atual
Geradores pseudo-Geradores pseudo-randômicosrandômicos
Seed:
Número “randômico”
Estado interno
java.util.Random
(Fontes de entropia)
seed = (seed * multiplier + addend) & maskreturn seed >> 16
Geradores pseudo-Geradores pseudo-randômicosrandômicos
Mesmas fontes (seeds) + mesmo Mesmas fontes (seeds) + mesmo algoritmo = mesma seqüência de algoritmo = mesma seqüência de númerosnúmeros
java.util.Randomjava.util.Random long seed = 0;long seed = 0; Random r = new Random(seed);Random r = new Random(seed); assert (r.nextInt() == -1155484576);assert (r.nextInt() == -1155484576);
RoteiroRoteiro
MotivaçãoMotivação Algoritmos de criptografiaAlgoritmos de criptografia Geradores pseudo-randômicosGeradores pseudo-randômicos Explorando a falhaExplorando a falha Requisitos para geradores segurosRequisitos para geradores seguros Corrigindo a falhaCorrigindo a falha ConclusãoConclusão
Explorando a falhaExplorando a falha
OpenWRTOpenWRT Implementação do Linux para Implementação do Linux para
roteadores wirelessroteadores wireless Provê
SSL termination SSH server Wireless encryption
A segurança de todos estes serviços depende do gerador pseudo-randômico
Explorando a falhaExplorando a falha
OpenWRTOpenWRT Fontes de entropia (seeds) do gerador Fontes de entropia (seeds) do gerador
randômico (Março de 2006)randômico (Março de 2006) Hora de inicializaçãoHora de inicialização Recebimento de pacotes desde a Recebimento de pacotes desde a
inicializaçãoinicialização Fontes observáveis!!!Fontes observáveis!!!
Pacotes em rede Pacotes em rede wirelesswireless Ambiente facilmente reproduzidoAmbiente facilmente reproduzido
Explorando a falhaExplorando a falha
Código Java: Usando RSA com Código Java: Usando RSA com gerador randômico ruimgerador randômico ruim
RoteiroRoteiro
MotivaçãoMotivação Algoritmos de criptografiaAlgoritmos de criptografia Geradores pseudo-randômicosGeradores pseudo-randômicos Explorando a falhaExplorando a falha Requisitos para geradores segurosRequisitos para geradores seguros Corrigindo a falhaCorrigindo a falha ConclusãoConclusão
Requisitos para geradores Requisitos para geradores segurosseguros
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 Requisitos para geradores segurosseguros
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 Requisitos para geradores segurosseguros
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)
RoteiroRoteiro
MotivaçãoMotivação Algoritmos de criptografiaAlgoritmos de criptografia Geradores pseudo-randômicosGeradores pseudo-randômicos Explorando a falhaExplorando a falha Requisitos para geradores segurosRequisitos para geradores seguros Corrigindo a falhaCorrigindo a falha ConclusãoConclusão
Corrigindo a falhaCorrigindo a falha
Usar fontes de entropia secretas e Usar fontes de entropia secretas e com a segurança desejadacom a segurança desejada Seeds com 256 bits para segurança de Seeds com 256 bits para segurança de
256 bits256 bits Usar múltiplas fontes de entropia realUsar múltiplas fontes de entropia real
Hora atual, teclas digitadas, ruído do Hora atual, teclas digitadas, ruído do microfone, giro do HD, ...microfone, giro do HD, ...
Re-seed periódicoRe-seed periódico
Corrigindo a falhaCorrigindo a falha
OpenWRT: Fontes de entropiaOpenWRT: Fontes de entropia Hora de inicializaçãoHora de inicialização Recebimento de pacotes desde a Recebimento de pacotes desde a
inicializaçãoinicialização
Corrigindo a falhaCorrigindo a falha
OpenWRT: Fontes de entropiaOpenWRT: Fontes de entropia Persistir o estado do gerador randômico Persistir o estado do gerador randômico
ao desligar o S.O.ao desligar o S.O. Re-seedRe-seed
Horário de (re) inicializaçãoHorário de (re) inicialização Recebimento de pacotesRecebimento de pacotes
Corrigindo a falhaCorrigindo a falha
Código Java: Fontes de entropiaCódigo Java: Fontes de entropia TimestampTimestamp
Corrigindo a falhaCorrigindo a falha
Código Java: Fontes de entropiaCódigo Java: Fontes de entropia Usar a implementação nativa do gerador Usar a implementação nativa do gerador
randômico (que tem seeds melhores)randômico (que tem seeds melhores) Usar Usar re-seedre-seed periódico com outras periódico com outras
fontes de entropiafontes de entropia
RoteiroRoteiro
MotivaçãoMotivação Algoritmos de criptografiaAlgoritmos de criptografia Geradores pseudo-randômicosGeradores pseudo-randômicos Explorando a falhaExplorando a falha Requisitos para geradores segurosRequisitos para geradores seguros Corrigindo a falhaCorrigindo a falha ConclusãoConclusão
ConclusãoConclusão
Um atacante sofisticado pode Um atacante sofisticado pode descobrir ser mais fácil descobrir ser mais fácil reproduzir oreproduzir o ambienteambiente que gerou os dados e que gerou os dados e procurar noprocurar no conjunto de conjunto de possibilidades geradas do que em possibilidades geradas do que em todo o espaço amostraltodo o espaço amostral
Dúvidas?Dúvidas?
ObrigadoObrigado