Funções de Mão Única e Geradores Pseudoaleatórios
Objetivos de Aprendizagem
- Explicar por que o sigilo perfeito força chaves tão longas quanto as mensagens, e como a segurança computacional o relaxa limitando o adversário a algoritmos eficientes e sucesso desprezível.
- Definir funções de mão única e dar candidatas padrão, e explicar por que a existência delas implicaria P NP.
- Definir indistinguibilidade computacional e geradores pseudoaleatórios, e construir um gerador que estica um bit a partir de uma permutação de mão única e de um predicado hard-core.
- Escrever uma prova de segurança por redução: mostrar que uma cifra de fluxo construída a partir de um gerador pseudoaleatório é segura se o gerador for.
Contexto e Motivação
software-distributed/security-cryptography provou que o one-time pad alcança sigilo perfeito, um texto cifrado não revela absolutamente nada sobre a mensagem, e Shannon mostrou que isso exige uma chave verdadeiramente aleatória pelo menos tão longa quanto todas as mensagens já enviadas com ela. Isso é impraticável: ninguém compartilha antes um terabyte de chave para enviar um terabyte de dados. A mesma disciplina então usou cifras de bloco, funções hash, RSA e Diffie-Hellman, cuja segurança era defendida pela experiência: décadas de criptoanálise não os quebraram.
A criptografia teórica moderna, desenvolvida por Goldwasser, Micali, Blum, Yao e outros nos anos 1980 e ensinada no 6.875 do MIT e no CS127 de Barak em Harvard, troca "ninguém quebrou" por reduções: um esquema é provado seguro mostrando que qualquer ataque eficiente contra ele daria um algoritmo eficiente para um problema que se supõe difícil. A hipótese mínima desse tipo é a existência de funções de mão única. Só a partir delas dá para construir geradores pseudoaleatórios, funções pseudoaleatórias, criptografia de chave privada, autenticação de mensagens, assinaturas digitais e compromissos, e é por isso que as funções de mão única são o alicerce sobre o qual o resto se apoia.
Teoria Central
Segurança computacional
Dois relaxamentos tornam chaves curtas possíveis. O adversário é eficiente, um algoritmo probabilístico de tempo polinomial (PPT) no parâmetro de segurança (mais ou menos o comprimento da chave). E ele pode ter sucesso, mas só com probabilidade desprezível: uma função é desprezível se fica, a partir de certo ponto, menor do que para toda constante , como . Um sucesso desprezível não pode ser amplificado para perceptível com um número polinomial de repetições.
Funções de mão única
Uma função é de mão única se:
- é calculável em tempo polinomial, e
- para todo algoritmo PPT , é desprezível.
Inverter significa achar qualquer pré-imagem, não necessariamente . Candidatas padrão: a multiplicação de dois primos aleatórios de bits (inverter é fatorar), a exponenciação modular (inverter é o logaritmo discreto) e a soma de subconjuntos. Se P = NP, não existe função de mão única, já que checar uma pré-imagem candidata está em P e então achar uma estaria em NP. Provar que funções de mão única existem provaria, portanto, P NP, então toda a criptografia se apoia numa hipótese não provada, e o objetivo é deixar essa hipótese o mais fraca possível.
Indistinguibilidade e geradores pseudoaleatórios
Duas distribuições e são computacionalmente indistinguíveis se para todo distinguidor PPT ,
Um gerador pseudoaleatório (PRG) é uma função de tempo polinomial com cuja saída sobre uma semente uniformemente aleatória é computacionalmente indistinguível da uniforme em . A saída não pode ser verdadeiramente aleatória, já que há só saídas entre cadeias, mas nenhum teste eficiente percebe. Yao mostrou um critério equivalente: é um PRG se e somente se nenhum algoritmo eficiente prevê o próximo bit da saída a partir dos anteriores com probabilidade perceptivelmente acima de .
De permutações de mão única a um PRG
Um predicado hard-core de é um bit calculável a partir de , mas imprevisível a partir de : nenhum algoritmo PPT adivinha a partir de com probabilidade perceptivelmente acima de . Goldreich e Levin (1989) provaram que toda função de mão única tem um, numa forma levemente modificada: para , o produto interno é hard-core.
Se é uma permutação de mão única com bit hard-core , então
estica bits para . Os primeiros bits são uniformemente aleatórios porque é uma permutação de um uniforme, e o último bit é imprevisível a partir deles pela propriedade hard-core. Iterar (Blum-Micali: produza , troque por , repita) estica até qualquer comprimento polinomial. Håstad, Impagliazzo, Levin e Luby (1999) mostraram que PRGs podem ser construídos a partir de qualquer função de mão única e, na direção oposta, todo PRG é ele mesmo uma função de mão única. Então PRGs existem exatamente quando funções de mão única existem.
Usando um PRG: uma cifra de fluxo e a sua prova
Cifre com , um one-time pad cujo pad é gerado a partir de uma chave curta. Teorema: se é um PRG, nenhum adversário PPT consegue distinguir cifrações de duas mensagens escolhidas por ele com vantagem mais do que desprezível.
Prova por redução. Suponha que o adversário distingue com vantagem . Construa um distinguidor para : recebendo uma cadeia (ou ou verdadeiramente uniforme), roda , obtém , sorteia um bit , entrega a o texto cifrado e devolve 1 se adivinhar corretamente. Se , este é exatamente o jogo de cifração real, então vence com probabilidade . Se é uniforme, é um one-time pad verdadeiro e vence com probabilidade exatamente . Então distingue da uniforme com vantagem , que precisa ser desprezível. Toda prova de segurança nesse estilo tem o mesmo formato: um ataque ao esquema vira um ataque à hipótese.
Exemplos Resolvidos
Exemplo 1: quebrando um gerador ruim
Problema: Um gerador proposto produz , esticando bits para . Mostre que ele não é um PRG.
Rastreamento: Distinguidor : devolva 1 se o último bit de for igual à paridade dos primeiros bits. Em , devolve 1 com probabilidade 1. Numa cadeia uniforme, o último bit é independente do resto, então devolve 1 com probabilidade . A vantagem é , longe de desprezível. Esticar não basta: o bit extra precisa ser imprevisível, que é exatamente o que um predicado hard-core de uma permutação de mão única oferece e uma paridade de bits visíveis não.
Exemplo 2: reusar a chave destrói a cifra de fluxo
Problema: Um sistema cifra duas mensagens com a mesma chave: e . O que um bisbilhoteiro aprende, e qual passo da prova de segurança falha?
Resolução: , independente da chave. Se uma mensagem for conhecida ou adivinhável (um cabeçalho de protocolo, um formato de arquivo comum), a outra é recuperada diretamente; mesmo sem isso, estatísticas da língua natural muitas vezes revelam as duas. A prova cobria uma única cifração: usava o pad uma vez, como no one-time pad. Cifrar muitas mensagens com segurança exige aleatoriedade nova por mensagem, por exemplo uma função pseudoaleatória avaliada num nonce aleatório, que é como modos padrão como o modo contador funcionam. Exatamente esse erro já quebrou sistemas reais, incluindo a criptografia WEP de Wi-Fi.
Equívocos Comuns e Armadilhas
- "Pseudoaleatório significa estatisticamente aleatório." A saída de um PRG falha em alguns testes, por exemplo testar se a cadeia está na imagem de , mas esses testes levam tempo exponencial. A pseudoaleatoriedade é relativa a observadores eficientes.
- "Funções hash são funções de mão única, então são PRGs." Hashes criptográficos são projetados para serem de mão única e resistentes a colisões, mas a sua segurança é heurística, e ser de mão única por si só não torna uma saída pseudoaleatória. As construções precisam das propriedades específicas que as suas provas supõem.
- "Uma prova de segurança significa que o sistema é seguro." Significa que o sistema é tão seguro quanto a hipótese, no modelo que a prova considerou. Canais laterais, reuso de chave e bugs de implementação estão fora do modelo e quebram esquemas provados na prática.
Resumo
O sigilo perfeito exige chaves tão longas quanto os dados, então a criptografia moderna limita os adversários a algoritmos eficientes e probabilidade de sucesso desprezível. Funções de mão única, fáceis de calcular mas difíceis de inverter em entradas aleatórias, são a hipótese mínima; a existência delas implicaria P NP. Um gerador pseudoaleatório estica uma semente curta numa saída que nenhum distinguidor eficiente separa da uniforme; a partir de uma permutação de mão única e um bit hard-core, estica um bit e a iteração estica mais, e PRGs existem exatamente quando existem funções de mão única. A segurança de uma cifra de fluxo baseada em PRG segue por redução, transformando qualquer ataque à cifra num distinguidor para o gerador. O próximo conceito olha para uma hipótese de dificuldade específica escolhida para sobreviver a computadores quânticos.