Geradores de Números, HASH e MAC
Geradores aleatórios e pseudoaleatórios. Autenticação de Mensagem. Algoritmos MAC. Requisitos. HASH (SHA, MD5, Whirlpool). Definições. Requisitos para função de HASH.
Aleatoriedade
A palavra aleatoriedade é utilizada para exprimir
quebra de ordem, propósito, causa, ou
imprevisibilidade em uma terminologia não
científica.
•
Um processo aleatório é o processo repetitivo
cujo resultado não descreve um padrão
determinístico, mas segue uma distribuição de
probabilidade.
• É possível criar aleatoriedade no computador através de um dispositivo que monitore um evento aleatório natural, e envie seus resultados para o computador.
• Exemplos de dispositivos que podem fornecer aleatoriedade.
– Contador geiger (a partir de um elemento radioativo) – Energia elétrica predial (centésimos da energia
fornecida)
Geração de um números aleatório
Por exemplo, você pode colocar um pedaço de material radioativo em frente a um contador Geiger e conectar o contador Geiger a um computador. Um vez que a radioatividade decaia em aleatoriedade, o contador Geiger irá criar números aleatórios administráveis. Este acesso é realmente raro, pois muitas pessoas não têm contadores Geiger conectados as suas máquinas.
• Números verdadeiramente aleatórios são muito difíceis de obter
• É possível criar uma fórmula que gere um número pseudo-aleatório.
• Quando projeta a fórmula, a idéia é produzir uma série de
números, que irão parecer aleatórios para qualquer um que não saiba o que é a fórmula.
Números Pseudoaleatórios
As características de uma boa fórmula incluem:
• não repetição: a seqüência não pode estar em ciclo e nem se repetir;
• boa distribuição numérica: se a fórmula está gerando números aleatórios entre 0 e 9, o número de zeros, uns, dois, etc. que ela gera devem ser aproximadamente iguais depois de um longo período de tempo;
• ausência de previsões: você não tem como prever qual será o próximo número, a não ser que conheça a fórmula e a origem (o valor inicial, ou semente).
• a mesma semente sempre produz a mesma sequência • rápida e de baixo custo computacional
Método do Meio do Quadrado
• eleva-se o número anterior, Nn, ao quadrado e extrai-se do resultado apenas os dígitos do meio, que constituirão o próximo elemento da sequência, Nn+1.
Por exemplo: para sequências de três dígitos N0 = 121 → N02 = 14641
N1 = 464 → N02 = 215296 e assim por diante.
• O problema nesse método é que ele tende a gerar um ciclo muito curto, especialmente depois que um dígito 0 (zero) entra no padrão.
Emprego de algoritmos pseudoaleatórios
• Em algoritmos de cifra de fluxo, para gerar cifras contínuas
• Na criação de chaves de criptografia simétrica • Na criação de chaves de sessão.
Obs.: em algoritmos de cifra de fluxo, não é possível
utilizar cifras aleatórias, pois é necessário decifrar, a partir de uma semente (chave) previamente acordada entre as partes !!!
• São outros algoritmos geradores de números pseudoaleatórios:
– Blum Blum Shub – Linear Congruente
Autenticação de mensagem
•
a autenticação de mensagem é voltada para:
– proteger a integridade da mensagem
– validar a identidade afirmada pelo emissor
– irretratabilidade da origem (solução de controvérsias)
•
consideraremos os requisitos de segurança
•
são três funções alternativas:
– criptografia de mensagens
– código de autenticação de mensagens (MAC) – função de hash
Requisitos de autenticação
A autenticação deve impedir: • divulgação • análise de tráfego • mascaramento • modificação de conteúdo • modificação de seqüência • modificação de tempo • retratação da origem • retratação do destino
Criptografia de mensagens
• a criptografia de mensagens, por si só, pode oferecer uma medida de autenticação
• se a criptografia simétrica for usada, então:
– o receptor sabe que o emissor deve tê-la criado uma vez que somente o emissor e o receptor conhecem a chave usada
– agora o conteúdo não pode ser alterado
– se a mensagem tem estrutura adequada, uma soma de verificação poderá detectar alterações
Criptografia de mensagens
•
se é usada a criptografia de chave pública:
– a criptografia não oferece confidencialidade para o emissor, uma vez que qualquer um, potencialmente, conhece a chave pública
– todavia, caso o emissor assine a mensagem usando a chave privada e criptografe com a chave pública do receptor, ele terá confidencialidade e autenticação
– novamente é necessário identificar as mensagens adulteradas, mas a custo do uso de duas chaves públicas para a mensagem.
Código de autenticação de mensagem (MAC)
• gerado por um algoritmo que cria um pequeno bloco de dados de tamanho fixo
• depende tanto da mensagem quanto da chave
– todavia não precisa ser reversível, ao contrário de outras cifras criptográficas
• fica anexado à mensagem como uma assinatura • o receptor realiza o mesmo cálculo na mensagem e
verifica se corresponde ao MAC
• oferece garantia de que a mensagem está inalterada e provém do emissor
Códigos de autenticação de mensagem
• como mostrado, o MAC oferece autenticação
• também pode usar criptografia para confidencialidade – geralmente usa uma chave separada para cada
– podemos calcular o MAC tanto antes como depois da criptografia
– em geral, considera-se que é melhor calcular antes • porque usar um MAC?
– às vezes, é necessária somente a autenticação
– às vezes, é necessária a autenticação para se
permanecer mais tempo do que em criptografia (por exemplo, em arquivamento)
Propriedades do MAC
•
o MAC é uma soma de verificação criptográfica
MAC = CK(M)
– condensa uma mensagem M de comprimento variável
– usando uma chave secreta K
– para um autenticador de comprimento fixo
•
é uma função muitos-para-um
– potencialmente, muitas mensagens têm o mesmo MAC
Requisitos para MACs
levando em consideração o tipo de ataque
é necessário que o MAC satisfaça o seguinte:
1. conhecendo a mensagem e o MAC, é inviável
encontrar outra mensagem com o mesmo MAC
2. os MACs devem ser uniformemente distribuídos 3. o MAC deveria depender igualmente de todos os
Funções de hash
• condensam a mensagem arbitrariamente para um tamanho fixo, sem a necessidade de chave.
h = H(M)
• o hash é usado para detectar alterações na mensagem • podemos usá-lo de várias formas com mensagens
Funções de hash e assinaturas digitais
PR – chave privada PU – chave pública
E(PRa[H(M)]
Requisitos para uma função de hash
1. pode ser aplicado a uma mensagem M de qualquer
tamanho
2. produz uma saída de comprimento fixo h
1. Para qualquer h é inviável encontrar x, tal que H(x)=h
• propriedade unidirecional
2. para qualquer x é inviável encontrar y, tal que
H(y)=H(x)
• resistência fraca a colisões
3. é inviável encontrar qualquer par x,y, tal que H(y)=H(x)
• Resistência forte a colisões •
• Importante: Uma propriedade sendo quebrada, a cifra estará quebrada.
Segurança das funções de hash e MACs
•
assim como as cifras de blocos, têm:
•
ataques por força bruta
– para forte resistência a colisão, a função de hash tem um nível de esforço 2m/2
• há um projeto de uma máquina de busca de colisão para MD5
• um código de 128 bits parece vulnerável, um de 160 bits é melhor
• um ataque por força bruta a um MAC requer pares mensagem-MAC conhecidos
• pode atacar todo o conjunto de valores possíveis de chave ou atacar o valor MAC
• para segurança, é necessário, pelo menos, um código MAC de 128 bits
Algoritmos de hash e de MAC
•
funções de hash
– condensam arbitrariamente o tamanho da mensagem para um tamanho fixo
– processando a mensagem em blocos
– por meio de uma função de compressão
– sejam baseadas em projeto específico ou em cifra de bloco
•
código de autenticação de mensagem (MAC)
– autenticador de tamanho fixo para algumas mensagens
– oferece autenticação para a mensagem usando uma cifra de bloco simétrico, em um modo de
Estrutura Básica de um algoritmo de hash
IV = valor inicial L = número de blocos de entrada CVi = variável de encadeamento n = tamanho do código de hash Yi = i-ésimo bloco de entrada b = tamanho do bloco de entrada F = algoritmo de compressão
Algoritmo de hash seguro
• o SHA foi originalmente desenvolvido pelo NIST, em 1993
• foi revisado em 1995 como SHA-1
• padrão para uso com esquema de assinatura digital
– o padrão é FIPS 180-1 1995, também Internet RFC 3174 – note que o algoritmo é o SHA, o padrão é o SHS
• baseado no projeto do MD4 com diferenças de chave • produz um valor de hash de 160 bits
• em 2005 o NIST anunciou a intenção de retirar
gradualmente a aprovação do SHA-1 e que passará a contar com outras versões do SHA por volta de 2010
Versão revisada do padrão
•
o NIST publicou a versão FIPS 180-2 em 2002
•
acrescentou três versões adicionais do SHA
– SHA-256, SHA-384, SHA-512
•
objetivando compatibilidade com aumento de
segurança proporcionado pela cifra AES
•
estrutura e detalhes são similares ao SHA-1
•
portanto,a análise deve ser similar
Whirlpool
•
Tese de doutorado de um brasileiro, Paulo Barreto,
tem como co-autor o americano radicado na Bélgica
Vincent Rijman, co-autor do algoritmo RSA.
•
recomendada pelo projeto europeu NESSIE
•
usa funções de compressão e internas do AES
modificadas
•
há questões quanto ao uso de cifras de bloco vistas
anteriormente
•
com desempenho comparável ao de algoritmos
Desempenho e segurança do Whirlpool
• o Whirlpool é ainda considerada uma proposta muito recente
• portanto, há pouca experiência de uso
• mas, pela semelhança de características, muitas conclusões referentes ao AES podem ser aplicáveis
• aparentemente, necessita de mais recursos de hardware que o SHA, mas funciona melhor em termos de saída
Comentários:
Funções de hash cifradas como MACs
•
requerem uma MAC baseada em uma função de
hash
– porque as funções de hash, em geral, são mais rápidas
– os códigos para criptografar funções de hash são amplamente disponíveis
•
o hash inclui uma chave, juntamente com a
mensagem
•
proposta original:
KeyedHash = Hash(Key|Message)
– alguns pontos fracos foram encontrados, conseqüentemente, apontando para o
HMAC
• especificado como um padrão de Internet RFC2104 • emprega uma função de hash onde se cifra com uma
chave.
• a exigência é a de mais três cálculos de hash do que a mensagem precisa sozinha
• qualquer função de hash pode ser usada
HMAC Security
• a segurança do HMAC está baseada na função de hash embutida
• um ataque ao HMAC requer:
– um ataque por força bruta à chave
– ou um ataque de aniversário (mas o atacante teria de observar um grande número de mesagens)