Seminário de Informática Teórica Henrique Borges Alencar Siqueira

Preview:

Citation preview

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