Prévia do material em texto
Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini Introdução à Criptogra�a e seus Fundamentos notas de aula � versão: 2019.11.28.20.34 Jerônimo C. Pellegrini id: e052a0bf8a7589c0c522c6b66cd88eb23b67d1b9 compilado em: 29 de novembro de 2019 Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini Sumário Sumário i I Conceitos Fundamentais 3 1 Introdução e visão geral 7 1.1 Encriptação simétrica . . . . . . . . . . . . . . . . . . . . . . . . 7 1.2 Encriptação assimétrica . . . . . . . . . . . . . . . . . . . . . . . 8 1.3 Resumos (hashes) criptográ�cos . . . . . . . . . . . . . . . . . . . 9 1.4 Assinatura digital . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1.5 Estabelecimento de chaves . . . . . . . . . . . . . . . . . . . . . . 11 1.6 Chaves públicas con�áveis . . . . . . . . . . . . . . . . . . . . . . 11 1.7 Protocolos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 1.8 Criptogra�a Pós-Quântica . . . . . . . . . . . . . . . . . . . . . . 14 1.9 Criptogra�a Quântica . . . . . . . . . . . . . . . . . . . . . . . . 14 1.10 Sobre este texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 1.10.1 Jogos e experimentos . . . . . . . . . . . . . . . . . . . . . 14 1.10.2 Notação e convenções . . . . . . . . . . . . . . . . . . . . 17 2 Criptossistemas e Noções de Segurança 19 2.1 Criptossistemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 2.2 Princípio de Kerckho�s . . . . . . . . . . . . . . . . . . . . . . . 20 2.3 Sigilo Perfeito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.4 Segurança empírica e com heurísticas . . . . . . . . . . . . . . . . 25 2.5 Segurança demonstrável . . . . . . . . . . . . . . . . . . . . . . . 25 2.5.1 Cenários de ataque . . . . . . . . . . . . . . . . . . . . . . 26 2.5.2 Probabilidade desprezível . . . . . . . . . . . . . . . . . . 27 2.5.3 Exemplo de de�nição de segurança . . . . . . . . . . . . . 28 3 Problemas Difíceis 33 3.1 Funções de mão única . . . . . . . . . . . . . . . . . . . . . . . . 33 3.1.1 Pré-Computação Quântica . . . . . . . . . . . . . . . . . . 34 3.1.2 Pós-quântica . . . . . . . . . . . . . . . . . . . . . . . . . 35 3.2 Predicados hard-core . . . . . . . . . . . . . . . . . . . . . . . . . 38 i Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini ii SUMÁRIO 3.3 Predicados hard-core para quaisquer funções de mão única . . . . 40 4 Geradores Pseudoaleatórios e Cifras de Fluxo 43 4.1 Geradores pseudoaleatórios . . . . . . . . . . . . . . . . . . . . . 43 4.2 Geradores com Funções de Mão Única . . . . . . . . . . . . . . . 47 4.3 Geração de números pseudoaleatórios . . . . . . . . . . . . . . . . 49 4.4 Geradores com Heurísticas . . . . . . . . . . . . . . . . . . . . . . 49 4.4.1 Propriedades de Sequências Pseudoaleatórias . . . . . . . 50 4.4.2 Testes Para Sequências de Bits . . . . . . . . . . . . . . . 56 4.5 Cifras de Fluxo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 4.5.1 Múltiplas Mensagens . . . . . . . . . . . . . . . . . . . . . 56 4.5.2 Ataques de Texto Claro Escolhido . . . . . . . . . . . . . 60 5 Cifras de Bloco 65 5.1 Esquemas de Encriptação usando Funções Pseudoaleatórias . . . 66 5.2 Permutações Pseudoaleatórias . . . . . . . . . . . . . . . . . . . . 68 5.3 Modos de Operação . . . . . . . . . . . . . . . . . . . . . . . . . 69 5.3.1 ECB � Electronic Code Book . . . . . . . . . . . . . . . . 69 5.3.2 CBC � Cipher Block Chaining . . . . . . . . . . . . . . . 70 5.3.3 OFB � Output Feedback . . . . . . . . . . . . . . . . . . . 70 5.3.4 CTR � Contador . . . . . . . . . . . . . . . . . . . . . . . 71 5.4 Cifras de bloco . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 5.4.1 Segurança de cifras de bloco . . . . . . . . . . . . . . . . . 74 5.4.2 Construção . . . . . . . . . . . . . . . . . . . . . . . . . . 74 5.5 Arquitetura de cifras de bloco . . . . . . . . . . . . . . . . . . . . 75 5.5.1 Confusão e difusão . . . . . . . . . . . . . . . . . . . . . . 75 5.5.2 Rede de substituição e permutação . . . . . . . . . . . . . 75 5.5.3 Rede de Feistel . . . . . . . . . . . . . . . . . . . . . . . . 78 5.5.4 Construção de Lai-Massey . . . . . . . . . . . . . . . . . . 81 5.6 Exemplo: DES . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 5.6.1 Escalonamento de chaves . . . . . . . . . . . . . . . . . . 85 5.6.2 3DES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 5.7 Exemplo: AES . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 5.7.1 Corpo de Rijndael . . . . . . . . . . . . . . . . . . . . . . 90 5.7.2 Passos do AES . . . . . . . . . . . . . . . . . . . . . . . . 90 5.8 FOX (IDEA-NXT) . . . . . . . . . . . . . . . . . . . . . . . . . . 95 6 Noções de Criptanálise 99 6.1 Uma rede de substituição e permutação . . . . . . . . . . . . . . 99 6.2 Criptanálise linear . . . . . . . . . . . . . . . . . . . . . . . . . . 102 6.2.1 O Lema do Empilhamento . . . . . . . . . . . . . . . . . . 103 6.2.2 Criptanálise da rede . . . . . . . . . . . . . . . . . . . . . 104 6.2.3 Escolha da trilha e resistência ao ataque . . . . . . . . . . 113 6.3 Criptanálise diferencial . . . . . . . . . . . . . . . . . . . . . . . . 113 6.4 Criptanálise Algébrica . . . . . . . . . . . . . . . . . . . . . . . . 119 6.5 Técnicas de criptanálise relacionadas . . . . . . . . . . . . . . . . 121 Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini SUMÁRIO iii 7 Resumos Criptográ�cos (funções de hashing) 125 7.1 Ataques e o problema do aniversário . . . . . . . . . . . . . . . . 127 7.2 Construção: transformação de Merkle-Damgård . . . . . . . . . . 128 7.3 Resistência a colisões com dexp . . . . . . . . . . . . . . . . . . . 129 7.4 SHA (Secure Hash Algorithm) . . . . . . . . . . . . . . . . . . . . 131 7.4.1 SHA-3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 7.5 Cifras de bloco usando funções de hash: Aardvark . . . . . . . . 133 7.6 O Oráculo Aleatório . . . . . . . . . . . . . . . . . . . . . . . . . 134 7.6.1 Propriedades do Oráculo Aleatório . . . . . . . . . . . . . 135 7.6.2 Objeções . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 8 Códigos de Autenticação de Mensagens 141 8.1 Segurança de códigos de autenticação de mensagens . . . . . . . 142 8.2 Estendendo MACs para tamanho variável de mensagem . . . . . 144 8.3 CBC-MAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 8.3.1 Mensagens de tamanho variável . . . . . . . . . . . . . . . 145 8.4 HMAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 8.5 Aplicação: segurança CCA . . . . . . . . . . . . . . . . . . . . . 148 9 Criptogra�a Assimétrica 151 9.1 Protocolos criptográ�cos . . . . . . . . . . . . . . . . . . . . . . . 151 9.2 Estabelecimento de chaves . . . . . . . . . . . . . . . . . . . . . . 151 9.3 Protocolo Di�e-Hellman para estabelecimento de chaves . . . . . 152 9.3.1 Ataque de homem-no-meio . . . . . . . . . . . . . . . . . 155 9.4 Criptossistemas Assimétricos . . . . . . . . . . . . . . . . . . . . 155 9.4.1 F Funções de mão única com segredo . . . . . . . . . . . 156 9.5 Segurança CCA . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 9.6 ElGamal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 9.7 Criptossistema de Rabin . . . . . . . . . . . . . . . . . . . . . . . 158 9.8 Segurança CPA . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 9.9 RSA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160 9.9.1 Aspectos de segurança do RSA . . . . . . . . . . . . . . . 162 9.9.2 Versão segura do RSA: OAEP . . . . . . . . . . . . . . . 164 9.10 Goldwasser-Micali . . . . . . . . . . . . . . . . . . . . . . . . . . 165 10 Assinaturas Digitais 171 10.1 Segurança . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 10.1.1 Segurança RMA . . . . . . . . . . . . . . . .. . . . . . . 173 10.1.2 Segurança KMA . . . . . . . . . . . . . . . . . . . . . . . 174 10.1.3 Segurança CMA . . . . . . . . . . . . . . . . . . . . . . . 175 10.2 Esquema de assinaturas para uma única mensagem . . . . . . . . 176 10.2.1 Esquema de assinaturas de Lamport . . . . . . . . . . . . 176 10.3 RSA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 10.3.1 Full-domain hash . . . . . . . . . . . . . . . . . . . . . . . 178 10.4 ElGamal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 10.4.1 DSA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini iv SUMÁRIO 10.5 F Full-domain hash com qualquer permutação de mão única . . 181 10.6 Árvores de assinaturas . . . . . . . . . . . . . . . . . . . . . . . . 181 10.6.1 Estendendo assinaturas de uma única mensagem, para muitas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 II Protocolos 185 11 Introdução a Protocolos. Exemplo: Comprometimento 189 11.1 Modelo computacional . . . . . . . . . . . . . . . . . . . . . . . . 189 11.2 Comprometimento . . . . . . . . . . . . . . . . . . . . . . . . . . 190 11.2.1 Comprometimento de bit . . . . . . . . . . . . . . . . . . 195 11.2.2 Veri�cação de igualdade de logaritmos . . . . . . . . . . . 196 11.2.3 Cara-ou-coroa . . . . . . . . . . . . . . . . . . . . . . . . . 197 12 Compartilhamento de Segredos 199 12.1 Esquemas com quórum . . . . . . . . . . . . . . . . . . . . . . . . 200 12.1.1 Esquema de Shamir . . . . . . . . . . . . . . . . . . . . . 201 12.1.2 Esquema de Blakley . . . . . . . . . . . . . . . . . . . . . 203 12.2 Segurança . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 12.2.1 Sigilo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 12.3 Estruturas gerais de acesso . . . . . . . . . . . . . . . . . . . . . 204 12.4 Compartilhamento veri�cável . . . . . . . . . . . . . . . . . . . . 207 12.5 Compartilhamento publicamente veri�cável . . . . . . . . . . . . 209 12.5.1 Segredos não aleatórios . . . . . . . . . . . . . . . . . . . 212 12.6 Encriptação com quórum . . . . . . . . . . . . . . . . . . . . . . 213 12.7 Notas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 12.8 Exercícios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 13 Provas de Conhecimento Zero 217 13.1 Provas Interativas . . . . . . . . . . . . . . . . . . . . . . . . . . 217 13.2 Conhecimento zero . . . . . . . . . . . . . . . . . . . . . . . . . . 218 13.2.1 Isomor�smo de grafo . . . . . . . . . . . . . . . . . . . . . 219 13.3 Σ-protocolos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 13.4 Protocolos de Identi�cação . . . . . . . . . . . . . . . . . . . . . 223 13.4.1 Esquema de Identi�cação de Feige-Fiat-Shamir . . . . . . 223 13.4.2 Protocolo de Schnorr . . . . . . . . . . . . . . . . . . . . . 225 13.5 Transformando provas interativas em não interativas . . . . . . . 226 14 Protocolos Seguros com Dois Participantes 229 14.1 Transferência Inconsciente . . . . . . . . . . . . . . . . . . . . . . 229 15 Computação Segura com Múltiplos Participantes 231 15.1 Sobre encriptação homomór�ca . . . . . . . . . . . . . . . . . . . 232 15.2 Um protocolo para participantes semi-honestos . . . . . . . . . . 232 15.3 Segurança . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini SUMÁRIO v 15.4 Componibilidade Universal . . . . . . . . . . . . . . . . . . . . . 236 15.5 Notas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 15.6 Exercícios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 III Outros Tópicos 239 16 Curvas Elípticas 243 16.1 Operação de grupo para curvas elípticas . . . . . . . . . . . . . . 246 16.1.1 Simétrico . . . . . . . . . . . . . . . . . . . . . . . . . . . 246 16.1.2 Soma de pontos . . . . . . . . . . . . . . . . . . . . . . . . 247 16.1.3 Dobrando um ponto . . . . . . . . . . . . . . . . . . . . . 248 16.2 Ordem do grupo . . . . . . . . . . . . . . . . . . . . . . . . . . . 249 16.3 Corpos �nitos usados em Criptogra�a . . . . . . . . . . . . . . . 249 16.3.1 Fp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249 16.3.2 GF2m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250 16.4 Criptossistemas e protocolos . . . . . . . . . . . . . . . . . . . . . 250 16.4.1 Logaritmo discreto . . . . . . . . . . . . . . . . . . . . . . 251 16.4.2 Di�e-Hellman . . . . . . . . . . . . . . . . . . . . . . . . 251 16.4.3 ElGamal . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 16.4.4 Outros criptossistemas e protocolos . . . . . . . . . . . . . 252 16.5 Emparelhamentos bilineares . . . . . . . . . . . . . . . . . . . . . 252 16.6 Fatoração de Inteiros . . . . . . . . . . . . . . . . . . . . . . . . . 253 17 Emparelhamentos Bilineares 255 17.1 Problemas difíceis em emparelhamentos bilineares . . . . . . . . 256 17.2 Encriptação baseada em identidades . . . . . . . . . . . . . . . . 256 17.3 Assinaturas baseadas em identidades . . . . . . . . . . . . . . . . 257 17.4 Acordo de chaves . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 17.5 Outras construções . . . . . . . . . . . . . . . . . . . . . . . . . . 258 18 Reticulados 259 18.0.1 Variantes . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 18.0.2 SIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 18.0.3 LWE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 18.0.4 SBP e Ortogonalidade . . . . . . . . . . . . . . . . . . . . 260 18.0.5 LLL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 18.0.6 CVP: algoritmo de Babai . . . . . . . . . . . . . . . . . . 261 18.1 GGH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 18.1.1 Detalhes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 18.1.2 Ataques ao GGH . . . . . . . . . . . . . . . . . . . . . . . 263 18.2 NTRU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 18.3 Ajtai-Dwork . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264 18.4 LWE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264 Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini vi SUMÁRIO 19 Códigos Corretores de Erros 267 19.1 Correção de erros . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 19.1.1 Códigos Lineares . . . . . . . . . . . . . . . . . . . . . . . 270 19.2 Criptogra�a com códigos corretores de erros . . . . . . . . . . . . 274 20 Criptogra�a Visual 277 20.1 Um único segredo (Naor e Shamir) . . . . . . . . . . . . . . . . . 277 20.1.1 Esquemas para k e n pequenos . . . . . . . . . . . . . . . 280 20.2 Dois segredos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280 20.3 Múltiplos segredos . . . . . . . . . . . . . . . . . . . . . . . . . . 280 21 Encriptação Negável 283 21.1 Esquema de Howlader-Basu . . . . . . . . . . . . . . . . . . . . . 285 21.2 Negabilidade por destinatário e negabilidade completa . . . . . . 290 21.3 Aplicações . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291 22 Votação Eletrônica 293 22.1 Mix Nets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294 22.2 Assinaturas cegas . . . . . . . . . . . . . . . . . . . . . . . . . . . 295 22.3 Exemplo: esquema de Chaum . . . . . . . . . . . . . . . . . . . . 296 22.3.1 Análise . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297 22.4 Exemplo: o esquema CGS (Cramer, Gennaro, Schoenmakers) . . 297 22.4.1 Análise . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298 22.4.2 Votação 1-de-L . . . . . . . . . . . . . . . . . . . . . . . . 299 22.5 Exemplo: esquema FOO (Fujioka, Okamoto, Ohta) . . . . . . . . 299 22.5.1 Análise . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300 23 Blockchain303 23.1 Construção . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303 23.2 Aplicações Notariais . . . . . . . . . . . . . . . . . . . . . . . . . 303 23.3 Dinheiro Eletrônico . . . . . . . . . . . . . . . . . . . . . . . . . . 303 IV Apêndices 305 A Probabilidade 307 A.1 O problema do aniversário . . . . . . . . . . . . . . . . . . . . . . 307 B Álgebra e Teoria dos Números 309 C Complexidade Computacional 341 C.1 Complexidade de tempo . . . . . . . . . . . . . . . . . . . . . . . 341 C.1.1 Recorrências . . . . . . . . . . . . . . . . . . . . . . . . . 344 C.1.2 Tamanho da entrada e número de bits . . . . . . . . . . . 348 C.2 Grafos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348 C.3 Problemas de decisão e de busca . . . . . . . . . . . . . . . . . . 351 C.4 Algoritmos não determinísticos . . . . . . . . . . . . . . . . . . . 352 Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini SUMÁRIO vii C.5 Algoritmos Randomizados . . . . . . . . . . . . . . . . . . . . . . 354 C.6 Classes de Complexidade . . . . . . . . . . . . . . . . . . . . . . 354 C.7 Reduções e completude . . . . . . . . . . . . . . . . . . . . . . . 356 C.7.1 Técnicas para demonstração de NP-completude . . . . . 358 C.7.2 Padrões comuns . . . . . . . . . . . . . . . . . . . . . . . 363 C.7.3 Problemas NP-completos na prática . . . . . . . . . . . . 364 C.7.4 Outros problemas NP-completos . . . . . . . . . . . . . . 368 C.8 Problemas indecidíveis . . . . . . . . . . . . . . . . . . . . . . . . 369 C.9 F Máquinas de Turing . . . . . . . . . . . . . . . . . . . . . . . . 370 D Respostas e Dicas 381 E Ficha Técnica 391 Índice Remissivo 406 Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini viii SUMÁRIO Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 1 Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 2 SUMÁRIO Notação ||x|| tamanho da representação binária de x, precedida pelo bit 1 a||b concatenação das sequências a e b [a]n a classe de equivalência a (mod n) 〈X〉 o grupo gerado por X A× o número A está representado na base 16 (hexadecimal) A ≈ B As distribuições das variáveis aleatóreas A e B são indistinguíveis x ≈ y x e y são números, e x é aproximação de y Π uma construção criptográ�ca (criptossistema, função de hashing etc) σ assinatura Zn grupo multiplicativo de inteiros módulo n A o adversário D o desa�ador T um teste (algoritmo que distingue duas distribuições) c texto encriptado C um código corretor de erros DHg(a, b) problema Di�e-Hellman g normalmente, o gerador de um grupo k chave L um reticulado m mensagem em claro p normalmente um número primo p(·) um polinômio q normalmente um número primo; às vezes uma quantidade t código de autenticação de mensagem m(x) polinômio irredutível que de�ne o corpo de Rijndael c(x) x4 + 1 (para multiplicação de colunas no AES) lsb (x) bit menos signi�cativo de x log(x) logaritmo de x na base 2 logg h logaritmo discreto de h na base g msb (x) bit mais signi�cativo de x negl(·) função desprezível retorne 〈a, b〉 o algoritmo ou função retornará dois valores, a e b rotlk(a) rotação dos bits de a, k posições à esquerda a← b b é computado e armazenado em a a ∈R S a é escolhido uniformemente ao acaso do conjunto S 〈a, b〉 ← f(· · · ) a função f retorna dois valores a ∧ b e lógico de a e b a ∨ b ou lógico de a e b a⊕ b ou exclusivo (XOR) de a com b (adição módulo 2) a não lógico (negação do bit a) perm_col (M) conjunto de todas as matrizes obtidas permutando colunas de M O ponto no in�nito, adicionado ao R2 QRn conjunto de resíduos quadráticos módulo n Jn conjunto de números em Zn com símbolo de Jacobi igual a +1 Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini Parte I Conceitos Fundamentais 3 Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 5 A primeira parte aborda os problemas básicos da Criptogra�a, expondo cons- truções clássicas. São dadas de�nições precisas para cada conceito, e há seções em cada Capítulo dedicadas a de�nições e demonstrações de segurança com razoável rigor. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 6 Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini Capítulo 1 Introdução e visão geral A Criptogra�a abrange desde a concepção até a implementação de sistemas de computação relacionados a diversos aspectos de segurança. As seções seguintes dão uma visão geral dos temas que abordaremos. Em alguns casos há exemplos concretos. 1.1 Encriptação simétrica O problema mais conhecido abordado pela Criptogra�a é o de modi�car mensa- gens para que �quem indecifráveis. Decifrar (ou decriptar) a mensagem só deve ser possível para quem tenha a posse de um segredo. Soluções para este pro- blema são chamadas de criptossistemas simétricos, e o segredo é normalmente chamado de chave. Todo criptossistema simétrico oferece ao usuário duas funções, cada uma com dois argumentos: uma para cifrar e outra para decifrar. Convencionaremos usar Enc(m, k) para a função que cifra e Dec(m, k) para a função que decifra m com a chave k. Evidentemente, é necessário que Dec(Enc(m, k), k) = m para todos m e k. A função que transforma a mensagem (que chamamos de texto claro) em algo irreconhecível (que chamamos de texto cifrado) deve necessariamente ser difícil de inverter sem o argumento k, de outra forma qualquer um com acesso à mensagem poderia facilmente decifrá-la. Ao algoritmo usado para calcular as funções Enc e Dec damos o nome de cifra. É comum classi�car cifras em dois tipos: • Cifras de �uxo, que transformam cada bit da mensagem em um bit do texto cifrado ao misturá-lo com um bit de outra fonte de bits (um gerador pseudoaleatório de bits, por exemplo) Esta �mistura� normalmente é uma operação de ou exclusivo, como ilustrado na �gura a seguir: 7 Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 8 CAPÍTULO 1. INTRODUÇÃO E VISÃO GERAL 1 0 0 1 0 1 1 1 0 1 0 0 1 1 1 0 1 0 1 1 1 0 1 0 1 1 0 1 1 0 mensagem bits aleatóreos texto cifrado A semente do gerador aleatório é a senha que permite encriptar e decriptar mensagens. Em uma cifra de �uxo usando ou exclusivo, Enc e Dec são idênticas; • Cifras de bloco, que transformam sequências de bits de tamanho �xo, re- alizando nelas transformações difíceis de inverter. mensagem texto cifrado 0 1 1 0 1 1 1 0 1 1 0 0 0 1 0 f ff 1 1 0 1 1 0 0 0 1 1 1 1 1 1 0 A função f(k,m) na �gura aceita dois parâmetros: um é a chave secreta usada para encriptar a mensagem e outra é a mensagem; f−1(k, c) deter- mina a mensagem a partir do texto cifrado e da chave. É importante que f−1 seja difícil de calcular sem a chave k (de�niremos com mais clareza esta �di�culdade� mais adiante). 1.2 Encriptação assimétrica Um problema dos esquemas simétricos de encriptação é que cada par de usuários que queira se comunicar em sigilo precisa compartilhar uma chave secreta. Se Alice e Bob estão �sicamente distantes e não podem fazê-lo de maneira simples, um esquema simétrico não é útil. Os criptossistemas assimétricos permitem que diferentes usuários se comuniquem em sigilo sem este problema. Em um criptossistema assimétrico, tanto Alice como Bob tem duas chaves � uma pública (conhecida de todos, possivelmente divulgada na Internet) e outra privada. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 1.3. RESUMOS (HASHES) CRIPTOGRÁFICOS 9 Quando Alice precisa cifrar uma mensagem para Bob, usa a chave pública de Bob (disponível publicamente). Ao receber a mensagem, Bob pode decifrá-la usando sua chave privada. 1.3 Resumos (hashes) criptográ�cos Resumos criptográ�cos (ou funçõesde hashing) são outra ferramenta de que trataremos. Funções de hashing mapeiam sequências de bits de tamanho arbi- trário (como arquivos e mensagens) em pequenas sequências, de tamanho �xo. Desta forma estes pequenos resumos podem ser usados para identi�car arqui- vos. É evidente que não podemos garantir que nunca teremos dois arquivos (ou mensagens) com o mesmo resumo, porque o número de bits usados no resumo é menor que o número de bits usado para representar os textos; no entanto, estas funções são projetadas de forma que colisões sejam improváveis. A fun- ção SHA3-384, por exemplo, representa o resumo com 384 bits, mas a entrada pode ter qualquer tamanho. O resultado da aplicação do SHA3-384 à cadeia de caracteres �mensagem secreta� é mostrado a seguir. mensagem secreta ↓ SHA3-384 ↓ ed7fd6ba5b95e6767efec077ac65327153833470c53aeccf e6d675dc876d7b518aeff2c2030284564db29eec858dc036 Algumas observações importantes: • O resultado da função SHA3-384 sempre será do mesmo tamanho (384 bits), não dependendo do tamanho da entrada; • Se a mensagem original for ligeiramente modi�cada, o hash parecerá com- pletamente diferente: Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 10 CAPÍTULO 1. INTRODUÇÃO E VISÃO GERAL mensagem secreta! ↓ SHA3-384 ↓ bd183551e5bc49956df597d80f802e86c83006bceba78010 2c6bb267bd41b96ef2bf0c37a352d7d1fdaa9ec27696181b • Embora seja fácil calcular, a função de hashing deve ser difícil de inverter (e portanto não deveria ser possível a alguém chegar à cadeia �mensagem secreta� a partir de ed7f· · · c036). Funções de hashing são diretamente úteis em diversas situações onde quere- mos garantir a integridade de dados, e também na construção de outras ferra- mentas criptográ�cas. Suponha que queiramos garantir a integridade de um arquivo ou mensagem, evitando que alguém mais o modi�que (um vírus ou um intruso, por exem- plo). Poderíamos computar �resumos� (hashes) destes arquivos (o resumo de um arquivo tem tamanho muito menor que o próprio arquivo) e armazená-los em uma tabela. No entanto, nada impede que o intruso recalcule os hashes e os modi�que também na tabela, tornando inócua nossa medida de precaução. No entanto, se concatenarmos cada arquivo (ou mensagem) com uma chave secreta antes de calcular o hash e armazenarmos este resumo na tabela, o intruso não terá como modi�cá-la (ele pode recalcular o resumo do arquivo modi�cado, mas não conhece a chave secreta � e portanto não poderá calcular o hash correto). A este tipo de resumo damos o nome de �código de autenticação de mensagem� (ou MAC � Message Authentication Code). Funções de hashing também podem ser usadas para construir geradores pseu- doaleatórios, para derivar novas chaves de uma única chave-mestra e construir cifras de bloco. 1.4 Assinatura digital Os esquemas de encriptação assimétricos garantem sigilo na comunicação entre duas partes, mas chaves públicas podem ser usadas também para garantir o não- repúdio (ou irretratabilidade) de documentos: se Alice usa sua chave privada para criar um documento, qualquer um de que tenha sua chave pública poderá veri�car que realmente Alice publicou aquele documento (e Alice não poderá posteriormente negar que o fez). Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 1.5. ESTABELECIMENTO DE CHAVES 11 É importante observar que um MAC (código de autenticação de mensagem, mencionado na seção sobre funções de hashing) não dá garantia de não-repúdio, uma vez a chave secreta incluída antes do cálculo de hash não está unicamente associada a alguma entidade da mesma forma que um par de chaves pública/- privada. 1.5 Estabelecimento de chaves Criptossistemas assimétricos normalmente são mais lentos que os simétricos. Assim, quando Alice e Bob quiserem se comunicar, idealmente usariam inicial- mente um criptossistema assimétrico apenas para poder em seguida estabelecer uma chave simétrica para que possam trocar informações. 1.6 Chaves públicas con�áveis Há um problema com os esquemas de encriptação assimétricos: quando a chave pública de Alice é oferecida a Bob, como Bob pode ter certeza de que foi real- mente Alice que a enviou? Há diferentes maneiras de abordar este problema. Podemos dar a uma entidade a autoridade para assinar chaves públicas. Desta forma quando Alice envia sua chave pública, envia também uma declaração da autoridade central de que aquela chave é de Alice. Outra maneira de lidar com este problema é construir uma rede de con�ança, onde cada pessoa assina a chave pública de outras, dando sua fé de que aquela chave realmente pertence àquela pessoa. Por último, há também a Criptogra�a baseada em identidades. 1.7 Protocolos Além dos problemas já descritos, a Criptogra�a moderna trata também de pro- blemas de interação entre partes onde não necessariamente há con�ança mútua. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 12 CAPÍTULO 1. INTRODUÇÃO E VISÃO GERAL Os procedimentos que estas partes executam em conjunto a �m de chegar a algum objetivo são chamados de protocolos. Esta Seção descreve alguns dos problemas e técnicas usualmente abordados no estudo de protocolos criptográ- �cos. Transferência opaca (ou �inconsciente�) Em determinadas situações pode ser necessário que Alice envie uma de duas mensagens, m0 ou m1 para Bob; que Alice tenha certeza de que Bob recebeu uma das duas mensagens, mas que não saiba qual delas foi recebida. Embora pareça inicialmente algo estranho, trata-se de uma ferramenta importante, usada para construir outros protocolos (é possível construir qualquer protocolo de duas partes usando como primitiva apenas transferência inconsciente). Compromisso Alice deve escolher um valor (ou um dado qualquer) e comprometer- se com ele, mas sem que Bob saiba qual foi o valor escolhido. Para que Alice não possa mudar sua escolha mais tarde, deve mostrar a Bob uma prova de que fez uma escolha, mas sem que a escolha seja revelada. O que Alice faz é semelhante a entregar a informação a Bob em um cofre (ou envelope lacrado). Quando o valor tiver que ser usado, Alice mostra um segredo que pode ser usado para revelar sua escolha. Pode-se implementar um esquema de compromisso usando uma função de hashing: Alice envia a Bob o resumo criptográ�co de sua esco- lha; mais tarde, quando Alice a revelará, e a escolha poderá ser veri�cada por Bob simplesmente calculando novamente o hash. Esquemas de compromisso po- dem ser usados para implementar diversos protocolos, como cara-ou-coroa por telefone, provas de conhecimento zero e computação segura por vários atores. Cara-ou-coroa por telefone Suponha que Alice e Bob estejam �sicamente distantes, e queriam decidir algo usando um sorteio � jogando uma moeda, por exemplo. Se ambos �zessem suas escolhas (cara ou coroa) primeiro para depois um deles jogar uma moeda, este último poderia obviamente trapacear. É possível, no entanto, �jogar cara ou coroa pelo telefone�, desde que usemos um mecanismo chamado comprometimento: Alice compromete-se com um bit (cara ou coroa), mas de maneira que Bob não possa conhecê-lo. Bob então joga a moeda e anuncia o resultado. Agora Alice envia a Bob o segredo que faltava para revelar sua opção. Assinatura simultânea de contrato Alice e Bob querem assinar um con- trato, mas como cada um deverá abrir mão de algo, nenhum dos dois quer assinar primeiro. Compartilhamento de segredos Uma senha dá acesso a muitas informa- ções de extrema importância. Queremos mantê-la em sigilo, mas não queremos deixar que uma única pessoa a tenha (esta pessoa pode não ser honesta, pode perder a senha e mesmo falecer). Também não queremos que a senha seja co- nhecida por muitos, porque teríamos que con�ar em cada um deles. Idealmente, Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 1.7. PROTOCOLOS 13 esta senha deveria ser guardada em segredo por um grupo de pessoas, até que, por exemplo, dois terços do grupo decidarevelá-lo. A di�culdade está em per- mitir que qualquer conjunto de pessoas com mais de 2/3 do grupo possa revelar o segredo (não basta quebrar uma chave criptográ�ca em várias partes). Esquemas de compartilhamento de segredos permitem resolver este pro- blema: derivamos de um segredo diversos pedaços de informação que podem ser usados (k por vez) para reconstruir o segredo original. O compartilhamento de segredos, além de ser diretamente útil, também é importante na construção de protocolos para computação segura por vários atores. Eleições eletrônicas Em uma eleição eletrônica com voto sigiloso há que nenhum eleitor vote mais de uma vez; que ninguém possa duplicar o voto de outro; que o resultado seja computado corretamente, e que seja possível a qual- quer um veri�car que o resultado está correto. É possível construir protocolos criptográ�cos para eleições eletrônicas com tais garantias. Computação segura por vários atores Pode-se realizar computação usando dados vindos de várias partes, mas sem que os dados vindos de cada fonte sejam conhecidos. Por exemplo, duas pessoas podem descobrir qual é a mais rica, sem que nenhuma �que sabendo exatamente qual é o patrimônio da outra. Provas de conhecimento zero Queremos transmitir informação a alguém preservando a possibilidade de negá-la (por exemplo, um agente da Inteligência de um país pode precisar dar prova de sua identidade a um agente de outro país, mas quer convencer apenas esta pessoa, sem que esta prova possa convencer mais ninguém). Podemos também querer provar que sabemos como realizar uma tarefa sem mostrar como fazê-lo. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 14 CAPÍTULO 1. INTRODUÇÃO E VISÃO GERAL 1.8 Criptogra�a Pós-Quântica Os computadores quânticos, embora ainda apenas teoricamente, poderiam resol- ver de maneira e�ciente problemas como o do logaritmo discreto e o da fatoração de inteiros. Como muito da Criptogra�a depende da di�culdade em resolver es- tes problemas, criptólogos tentam conseguir avanços em métodos criptográ�cos não-quânticos que sejam resistentes a ataques de algoritmos quânticos, usando em criptossistemas e esquemas criptográ�cos problemas diferentes destes. 1.9 Criptogra�a Quântica A Criptogra�a Quântica trata do uso de mecânica quântica em Criptogra�a. Em 1984 Charles Bennett e Gilles Brassard desenvolveram um protocolo para distribuição de chaves cuja segurança não se sustenta em complexidade com- putacional, mas em leis da Física. Este protocolo é chamado de �distribuição quântica de chaves�. 1.10 Sobre este texto Os fundamentos da Criptogra�a são bastante simples. Usamos apenas um pouco de Complexidade Computacional (tempo polinomial, tempo exponencial e NP- completude) e muito pouco de Probabilidade (alguns fatos básicos e uma única distribuição � a uniforme). A maneira como estes conceitos são usados pode, no entanto, ser um tanto estranha inicialmente. Felizmente o modus operandi para as demonstrações e descrições conceituais não muda muito na primeira parte do texto (exceto talvez pelo Capítulo sobre Criptanálise), então basta que o leitor se acostume com tal modo de pensar e a �uidez deverá vir rapidamente. Indo dos Fundamentos para as aplicações básicas, usamos Teoria de Núme- ros, Códigos Corretores de Erros e outras áreas da Matemática para desenvolver os sistemas descritos nas seções anteriores. 1.10.1 Jogos e experimentos Muitas das de�nições e demonstrações usam experimentos aleatórios que funcio- nam como jogos. Usamos estes �jogos� (ou �experimentos�) porque eles modelam naturalmente o funcionamento de ataques a criptossistemas: nestes jogos haverá um desa�ador e um adversário, e estaremos sempre interessados em calcular a probabilidade de que o adversário consiga ganhar o jogo (o que na prática se tra- duz na probabilidade do adversário quebrar alguma ferramenta criptográ�ca). O exemplo a seguir é um jogo extremamente simples de adivinhação de números entre um desa�ador D e um adversário A, onde usamos um parâmetro n. Damos a este jogo o nome NUMBER_GUESS(A, n). Experimento 1.1 (NUMBER_GUESS(A, n)). O desa�ador começa sorteando um número k entre um e n, e depois o envia a A. O adversário então tenta adivinhar Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 1.10. SOBRE ESTE TEXTO 15 o número e envia sua tentativa k1 a D. Se o adversário acertou, o desa�ador encerra o jogo e declara que o resultado do experimento é um (signi�cando que o adversário obteve sucesso). Se o adversário não acertou (ou seja, se k1 6= k), o desa�ador responde dizendo se k < ki ou k > ki, e o adversário pode tentar novamente. O desa�ador aceitará até três tentativas de A, mas depois encerrará o jogo. O jogo é mostrado no diagrama a seguir. A D k ∈R [1, n] k1 = k → 1, FIM k2 = k → 1, FIM k3 = k → 1 k3 6= k → 0 n k1 k1 ≶ k k2 k2 ≶ k k3 � Calculamos agora a probabilidade de sucesso de A neste jogo. Antes, uma observação. Quando o adversário envia um chute �ki�, e erra, a probabilidade de acerto no próximo chute dependerá dele ter errado para cima ou para baixo. Por exemplo, suponha que n = 100 e que o desa�ante tenha sorteado o número 40. D n=100−→ A D k1=20←− A D k>20−→ A Agora A tentará adivinhar novamente, mas sabe que deve tentar algum número maior que 20. Assim, a probabilidade de sucesso será 1/80: Pr(k2 = k|k > 20) = 1/80. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 16 CAPÍTULO 1. INTRODUÇÃO E VISÃO GERAL Mas, se ao invés de 20, o adversário tivesse tentado 60, ou seja, D n=100−→ A D k1=60←− A D k<60−→ A, então a próxima tentativa será com números menores que 60. Há 59 deles, logo Pr(k2 = k|k < 59) = 1/59. Dado o exposto, para maior clareza �xamos nomenclatura: • k é o número sorteado pelo desa�ante; • ki é a i-ésima tentativa do adversário; • zi são os valores que o adversário ainda pode usar na i-ésima tentativa. Estando clara a notação, prosseguimos. Na primeira tentativa, A acerta com probabilidade 1/n. Ao receber a resposta de D, o adversário poderá então descartar uma parte do intervalo, mantendo apenas z1 valores plausíveis. Na segunda tentativa, a probabilidade de acerto é 1/z1, e após a resposta o adver- sário restringirá o intervalo plausível a z2. A terceira e última tentativa será em um intervalo de tamanho z2, e a probabilidade de acerto nesta última tentativa é 1/z2. Cada zi é estritamente menor que n, portanto 1/zi > 1/n podemos dizer que Pr [NUMBER_GUESS(A, n) = 1] = 1 n + (n− 1) n 1 z1 + (n− 1) n (z1 − 1) z1 1 z2 > 1 n + (n− 1) n 1 n + (n− 1) n (n− 1) n 1 n Passamos agora a um exemplo diretamente relacionado à Criptogra�a. No pró- ximo experimento testamos um criptossistema Π contra um adversário A. O adversário escolhe duas mensagens e envia ao desa�ador. Em seguida D escolhe aleatoreamente um bit (b ∈R {0, 1} signi�ca que b é escolhido aleatoreamente no conjunto {0, 1}), e encripta a mensagem mb (que corresponde ao bit esco- lhido). D então envia mb encriptada ao adversário, que deve adivinhar qual das mensagens foi cifrada. Quando A consegue adivinhar qual era a mensagem, o experimento tem um como resultado; em caso contrário, o resultado é zero. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 1.10. SOBRE ESTE TEXTO 17 D A b ∈R { 0, 1 } b = b′ → 1 senão → 0 m0,m1 mb b′ Claramente, queremos que o adversário tenha probabilidade de sucesso muito pequena neste jogo (uma de�nição clara de �probabilidade muito pequena� é dada no Capítulo 2). Não a calculamos aqui porque ela dependerá do criptos- sistema Π usado no jogo (note que Π é um parâmetro do experimento). Quase sempre que descrevermos uma interação deste tipo um diagrama como este acompanhará a descrição. 1.10.2 Notação e convenções Se adotarmos um ponto de vista prático, notaremos imediatamente que é ne- cessário traduzir as �mensagens� práticas (que podem ser texto ou arquivos binários)para os números usados nas construções teóricas. Presumimos que há alguma maneira simples de traduzir as mensagens em sequências de bits, e que ao usar uma das construções criptográ�cas, estes bits serão interpretados como números. Ao longo do texto então presumirmos que os números são represen- tados em base dois, e de�niremos que o tamanho de um número é o número de bits necessário para representá-lo. Assim, log(x) neste texto refere-se ao logaritmo de x na base dois. A notação x ∈R X signi�ca �x é escolhido uniformemente ao acaso do con- junto X�. Usaremos || para concatenação de cadeias de bits: se a = 0010 e b = 1100, então a||b = 00101100. Muitas das demonstrações tem como componente algoritmos. Quando o al- goritmo é simples o su�ciente para ser descrito textualmente isso é feito; quando ele tem estrutura detalhada ou complexa demais, é apresentado na forma de pseudocódigo. Há uma única característica do pseudocódigo usado que merece apresentação: alguns dos algoritmos e funções descritos no texto retornam mais de um valor. A ordem dos valores não é especi�cada porque pode ser inferida facilmente pelo contexto. Denotamos retorne 〈a, b, c〉 quando uma função f(x) retorna os valores a, b, c. Quando um algoritmo usa vários valores retornados por uma função (ou por outro algoritmo), denotamos 〈a, b, c〉 ← f(x) Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 18 CAPÍTULO 1. INTRODUÇÃO E VISÃO GERAL Exercícios Ex. 1 � Considere novamente o Experimento 1.1. Se o adversário usado no experimento sempre tenta ki exatamente na metade do intervalo plausível, qual sua probabilidade de sucesso? Ex. 2 � Se não houver limite para o número de tentativas no Experimento 1.1, qual o mínimo e o máximo número de iterações? Ex. 3 � Considere o seguinte jogo entre um desa�ador D e um adversário A. O desa�ador sorteia cinco cartas de baralho e as envia ao adversário. O adversário é obrigado, então, a trocar uma das cartas � mas pode escolher qual delas trocar. A então devolve uma das cartas e recebe outra, escolhida aleatoreamente. Em seguida, A mostra suas cartas a D. Se as cartas mostradas forem todas do mesmo naipe, D determinará que o resultado do experimento é um (signi�cando sucesso de A); caso contrário, o resultado será zero. D A ci ∈R C c6 ∈R C \ {ci} ∀i, j N(ci) = N(cj)→ 1 senão → 0 c1, c2, . . . , c5 ci c6 c1, . . . , c6 Determine a probabilidade de sucesso de A no jogo. Ex. 4 � De�na um experimento aleatório que descreve o jogo de vinte-e-um (blackjack) de um adversário contra uma banca. Determine: i) A probabilidade do adversário conseguir vinte e um; ii) A probabilidade de a pontuação do adversário seja ≥ 21 após k rodadas para k = 1, 2, . . .. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini Capítulo 2 Criptossistemas e Noções de Segurança No restante dos Capítulos, fatos históricos serão concentrados em uma seção �Notas�. O presente Capítulo, no entanto, se diferencia por iniciar com alguns parágrafos que resumem, em muito alto nível de detalhes, a evolução dos con- ceitos de segurança em Criptogra�a. Isto porque a compreensão deste processo é algo demasiado importante para que se possa compreender completamente as noções atuais de segurança, incluindo os fatos que levaram ao seu desenvolvi- mento. As noções de segurança usadas em Criptogra�a passaram por diversas fases claramente distintas. Inicialmente criptossistemas eram criados e sua segurança dependia de quanto tempo ela permanecia útil, sem que adversários conseguis- sem frustrar os objetivos do usuário. No Século XX, Claude Shannon formalizou diversas ideias a respeito de segurança e propôs o conceito de sigilo perfeito. Infelizmente, criptossistemas com sigilo perfeito não são viáveis na prática. Uma vez que criptossistemas com sigilo perfeito não são construções viáveis, por certo tempo foram desenvolvidas construções criptográ�cas que �pareciam boas�, por basearem-se em ideias boas (como a de substituir e misturar partes da mensagem para obter o texto encriptado), mas sem nenhuma prova de que realmente eram seguras. A segurança dessas construções era aferida de acordo com seu grau de exposição: uma construção é mais segura se for mais ampla- mente conhecida e mais antiga do que outra, sem ter sofrido nenhum ataque com sucesso. No início da década de 80 surgiu uma percepção da necessidade de demons- trações formais de segurança para construções criptográ�cas, de forma a evitar a prática (comum até então) de usar critérios empíricos para determinar a con- �ança em criptossistemas e ferramentas criptográ�cas. 19 Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 20 CAPÍTULO 2. CRIPTOSSISTEMAS E NOÇÕES DE SEGURANÇA 2.1 Criptossistemas Embora o escopo da Criptogra�a seja muito mais amplo que o estudo de criptos- sistemas simétricos, os usaremos na descrição de conceitos fundamentais sobre segurança em criptogra�a. No decorrer do texto usaremos os nomes Enc e Dec para funções que en- criptam e decriptam mensagens. Normalmente estas funções aceitarão pelo menos dois argumentos: uma chave e um texto. Ao invés de denotar Enc(k, x) e Dec(k, x), usaremos Enck(x) e Deck(x). De�nição 2.1 (Criptossistema de chave privada). Um criptossistema de chave privada consiste de três algoritmos polinomiais: • Gen, um algoritmo randomizado que escolhe uma chave de acordo com alguma distribuição de probabilidades; • Enc, um algoritmo randomizado que aceita uma chave k, uma mensagem m e retorna um texto cifrado c; • Dec, um algoritmo determinístico que aceita uma chave k e um texto cifrado c e retorna uma mensagem m. Para toda chave k, toda mensagem m e todo texto cifrado c, é necessário que Deck(Enck(m)) = m. � Neste texto denotamos por K o espaço de chaves,M o espaço de mensagens e C o espaço de textos cifrados. Usaremos as distribuições de probabilidade sobre K, M e C. A distribui- ção sobre K é determinada pelo algoritmo Gen. A distribuição sobre M não é determinada pelo criptossistema, mas sim pelas probabilidades a priori das mensagens. As distribuições sobre K eM são independentes; já a distribuição sobre C é determinada pelas outras e pelo algoritmo Enc. Denotaremos as três variáveis aleatórias por K, M e C: Pr[K = k] é a probabilidade de a chave k ser escolhida por Gen; Pr[M = m] é a probabilidade da mensagem ser m; e Pr[C = c] é a probabilidade do texto cifrado ser c. Para simpli�car a notação poderemos omitir a variável aleatória: Pr(k) ao invés de Pr[K = k] etc. Neste caso o contexto determinará a variável aleatória. Por exemplo, se em um dado contexto x for uma chave então Pr(x) é o mesmo que Pr[K = x]. 2.2 Princípio de Kerckho�s Há um princípio para construção de criptossistemas, descrito por Auguste Kerckho�s em 1883, e que continua sendo relevante. Damos nesta Seção uma versão mo- derna dele (a parte relevante do texto original de Kerckho�s, traduzido, está na Seção de Notas). Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 2.3. SIGILO PERFEITO 21 O funcionamento interno de um criptossistema não pode ser secreto; deve-se presumir que o adversário conhece como o criptossistema funciona, e a segurança do sistema deve estar na escolha das chaves. 2.3 Sigilo Perfeito Informalmente, um criptossistema tem sigilo perfeito quando o conhecimento do texto cifrado não dá a um adversário qualquer informação a respeito da mensagem e que portanto, se um adversário pretende obter uma mensagem, o conhecimento do texto encriptado não muda sua probabilidade de sucesso (ou seja, o adversário não pode fazer melhor do que tentar �adivinhar� a mensagem). De�nição 2.2 (Sigilo Perfeito). Um criptossistema tem sigilo perfeito se, para todo m ∈M e c ∈ C, Pr(m|c) = Pr(m). � A formulação alternativa de sigilo perfeito, dada pelo Lema a seguir, nos será útil. Lema 2.3. Um criptossistema tem sigilo perfeito se e somente se, para todo m ∈M e c ∈ C, Pr(c|m)= Pr(c). Demonstração. Dada uma mensagem m e um texto cifrado c, considere a equa- ção Pr(c|m) = Pr(c). Multiplique ambos os lados por Pr(m)/Pr(c): Pr(c|m) Pr(m) Pr(c) = Pr(m) Pelo Teorema de Bayes o lado esquerdo é Pr(m|c). Assim, Pr(m|c) = Pr(m). � Criptossistemas com sigilo perfeito tem uma séria limitação, que demons- tramos no Teorema 2.4 a seguir: a quantidade de chaves deve ser tão grande quanto a quantidade de possíveis mensagens. Se as mensagens tiverem tama- nho �xo, isso implica que o tamanho das chaves deve ser igual ao tamanho dos documentos1 Teorema 2.4. Em um criptossistema com sigilo perfeito, |K| ≥ |M|. Demonstração. Suponha que |K| < |M|, e considere a distribuição uniforme sobre M. Seja c ∈ C tal que Pr(c) > 0, e seja M(c) o conjunto de todas as mensagens que poderiam ser o deciframento de c: M(c) = {m | m = Deck(c) para algum k ∈ K} 1Se quisermos cifrar documentos de 1 Mb, teremos que determinar M como todas as sequências de bits que formam documentos de 1 Mb, que é o mesmo que 8× 10242 = 8388608 bits. Teríamos então 28388608 possíveis mensagens, e este teria que ser também o tamanho do espaço de chaves. A representação de cada chave então ocuparia 1 Mb. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 22 CAPÍTULO 2. CRIPTOSSISTEMAS E NOÇÕES DE SEGURANÇA Como para cada mensagem m ∈M(c) há pelo menos uma chave k ∈ K tal que m = Deck(c), então |M(c)| ≤ |K|. Mas como nossa hipótese inicial era de que |K| < |M|, temos que |M(c)| ≤ |K| < |M| e portanto, como |M(c)| < |M|, deve haver alguma mensagem m′ ∈M tal que m′ /∈M(c), e neste caso Pr(m′|c) = 0 6= Pr(m′) = 1 |M| . (A distribuição sobreM é uniforme, por isso a�rmamos que Pr(m′) = 1|M| .) Mostramos assim que com |K| < |M| um criptossistema não tem sigilo perfeito. � Um exemplo de criptossistema com sigilo perfeito é o one-time pad, também chamado de cifra de Vernam. Usamos a notação 1n para a sequência de n bits iguais a um, e {0, 1}n para o conjunto de todas as sequências de n bits. Construção 2.5 (One-time pad). O one-time pad requer que o tamanho de cada chave seja igual ao da mensagem a ser encriptada, e igual também ao tamanho do texto cifrado. Assim, usando representação binária para as chaves, K =M = C = {0, 1}n para algum n. • Gen escolhe uniformemente uma chave k ∈ K • Enc e Dec realizam a operação ou-exclusivo bit a bit entre seus dois argu- mentos. Ou seja, Enck(m) = k ⊕m, Deck(c) = k ⊕ c. � A Figura a seguir ilustra o funcionamento do one-time pad. 0 1 1 0 1 0 0 1 0 1 1 0 1 0 0 0 0 1 1 0 1 1 1 0 0 1 1 1 0 1 0 0 1 1 0 0 1 0 1 1 1 0 0 0 1 1 1 0 0 0 1 0 0 1 0 0 1 1 0 1 texto encriptado chave mensagem Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 2.3. SIGILO PERFEITO 23 Usaremos o Lema a seguir na demonstração de que o one-time pad tem sigilo perfeito. Lema 2.6. Um criptossistema simétrico tem sigilo perfeito se e somente se para toda distribuição sobreM e para quaisquer mensagens m0, m1 e qualquer texto cifrado c, P (c|m0) = P (c|m1). Demonstração. (⇒) Suponha que o sistema tem sigilo perfeito e tome m0,m1 ∈ M e c ∈ C. Usando o Lema 2.3, Pr(c|m0) = Pr(c) = Pr(c|m1), e esta direção da prova está completa. (⇐) (Rascunho) Presuma P (c|m0) = P (c|m1), depois calcule P (c) usando o Lema 2.3. � Teorema 2.7. O one-time pad tem sigilo perfeito. Demonstração. Como a de�nição de sigilo perfeito não pressupõe qualquer dis- tribuição sobre M, deve valer para todas. Tomamos então uma distribuição qualquer sobre M, uma mensagem m e um texto cifrado c. Para o one-time pad, Pr(c|m) = Pr[M⊕K = c|M = m] = Pr[m⊕K = c] = Pr[K = m⊕ c] = 1 |K| Como isto vale para toda distribuição sobreM e para quaisquer mensagens m0, m1 e qualquer texto cifrado c, então P (c|m0) = 1 |K| = P (c|m1) e pelo Lema 2.6 o one-time pad tem sigilo perfeito. � Há uma de�nição alternativa de sigilo perfeito que usa uma simulação de ataque ao criptossistema por um adversário, como em um jogo. Neste jogo o adversário tem como objetivo determinar qual de duas mensagens, m0 ou m1, originou um texto cifrado c. Usaremos esta simulação de jogo para provar que a probabilidade de acerto do adversário é exatamente 1/2. Usaremos estes jogos também nas de�nições de outras noções de segurança ao longo do texto. Consideraremos possíveis ataques a um criptossistema. No modelo a ser usado há um adversário A. De�niremos um experimento para o criptossis- tema Π = (Gen, Enc, Dec) e o adversário A. Chamaremos este experimento de PRIV_EAV(A) (�eav� é para �eavesdropping�). Deixaremos que o adversário esco- lha duas mensagens. Em seguida, cifraremos uma delas (sem que ele saiba qual) e a enviaremos a ele. O adversário deverá então descobrir qual das mensagens foi cifrada. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 24 CAPÍTULO 2. CRIPTOSSISTEMAS E NOÇÕES DE SEGURANÇA O Experimento PRIV_EAV aceita dois parâmetros: o criptossistema e o ad- versário. A notação que usaremos neste texto é Π para um criptossistema qual- quer e A para um adversário. Quando um criptossistema tiver sigilo perfeito, ele poderá ser denotado Π∗. Experimento 2.8 (PRIV_EAV(Π,A)). 1. A escolhe duas mensagens m0 e m1 ∈M; 2. Uma chave k ∈ K é gerada usando Gen, e um bit b é escolhido aleatorea- mente. Então a mensagem mb é cifrada e enviada para A; 3. A mostra b′; 4. Se b = b′, o resultado do experimento é 1 (e dizemos que A teve sucesso), senão é 0. D A k ∈R { 0, 1 }n b ∈R { 0, 1 } b = b′ → 1 b 6= b′ → 0 m0,m1 Enck(mb) b′ � De�nição 2.9 (Sigilo perfeito de criptossistema simétrico (versão com adversá- rio)). Um criptossistema Π tem sigilo perfeito sobre um conjunto de mensagens M se para todo adversário A, Pr[PRIV_EAV(Π,A) = 1] = 1 2 . � Esta de�nição é equivalente à de�nição 2.2, mas não apresentaremos a de- monstração. Note que esta de�nição não impõe restrições ao tamanho das men- sagens e nem ao tempo que A pode demorar para executar. No decorrer deste texto várias de�nições de segurança semelhantes a esta, baseadas em experimentos, serão apresentadas. Todos os experimentos são pa- rametrizados (neste caso os parâmetros foram apenas Π e A; haverá variações). Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 2.4. SEGURANÇA EMPÍRICA E COM HEURÍSTICAS 25 2.4 Segurança empírica e com heurísticas As noções de segurança usadas na prática desde Shannon até o �nal da década de 70 não são rigorosas ou formais o su�ciente para serem descritas neste texto. No entanto, mesmo com o surgimento da segurança demonstrável no começo da década de 80, em muitas áreas da Criptogra�a não foi possível passar a usar construções com demonstrações de segurança. Um exemplo é o desenvolvimento de cifras de bloco, que sempre foram mais e�cientes que as cifras assimétricas, mas por outro lado carecem de demonstração de segurança. Há, porém, um conjunto de ideias e métodos usados na construção de cifras de bloco que foram sendo desenvolvidos e re�nados ao longo do tempo: métodos comuns de ataque, padrões de arquitetura que parecem resistir a estes métodos, e assim por diante. Estas ideias e métodos (�heurísticas�) mostraram ser bons o su�ciente para a construção de cifras de bloco cuja segurança �veri�cada em- piricamente� é bastante boa. As cifras de bloco (e funções de hashing) usadas na prática em sistemas são exemplo disso: não há para elas demonstração de segurança, mas foram desenvolvidas usando blocos básicos e arquitetura que são normalmente reconhecidos como �bons�. 2.5 Segurança demonstrável Para poder elaborar demonstrações de segurança em Criptogra�a, passou a ser necessário de�nir rigorosamente critérios de segurança e identi�car conjecturas nas quais as demonstrações se baseiam. Estes dois pontos são elaborados a seguir. • De�nir rigorosamente segurança: antes de demonstrar que uma constru- ção criptográ�ca é segura, é necessário de�nir o que signi�ca ser �seguro� no contextoem que trabalhamos. Isto é necessário obviamente porque não há como elaborar uma demonstração rigorosa sem de�nições precisas. No entanto, de�nições precisas também servem ao usuário ou engenheiro que queira escolher uma ferramenta criptográ�ca: ele saberá exatamente quais são os tipos de ataque a ferramenta resistirá (e poderá inclusive comparar diferentes ferramentas, de acordo com a segurança de cada uma). • Identi�cação de hipóteses precisas: na grande maioria dos casos, não é possível conseguir segurança incondicional, e sim dependendo de alguma conjectura: uma construção é segura �se a fatoração de inteiros for difí- cil�, ou se for difícil calcular o logaritmo de um número em um grupo, por exemplo. Há também conjecturas normalmente �mais con�áveis� que outras (e aqui surge novamente um critério subjetivo): problemas muito conhecidos e estudados por muito tempo normalmente são preferíveis a problemas novos e pouco estudados (é mais provável que um criptólogo con�e em uma construção baseada em fatoração de inteiros do que em outra, baseada em um problema desconhecido). Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 26 CAPÍTULO 2. CRIPTOSSISTEMAS E NOÇÕES DE SEGURANÇA A segurança demonstrável tornou-se o método padrão para desenvolvimento de algumas construções � em particular, na criptogra�a assimétrica. Algumas construções, no entanto, continuaram a ser desenvolvidas na prática com heu- rísticas, porque o trabalho teórico que foi possível desenvolver não levava a construções e�cientes. Este é o caso das cifras simétricas de �uxo e de bloco, e de funções de hashing. A segurança de cifras de bloco, por exemplo, passou de �arte� para �heu- rística�: com o tempo o conjunto do conhecimento a respeito de métodos de ataque e arquitetura de cifras de bloco permitiu identi�car estratégias melhores de projeto. Além disso, a Criptanálise passou a possibilitar diversas veri�cações de segurança para estas construções. Ao longo do tempo, no entanto, algum progresso foi feito na tentativa de aproximar os mundos da criptogra�a simétrica e da segurança demonstrável. 2.5.1 Cenários de ataque Suponha que um adversário queira quebrar um criptossistema simétrico (ou seja, obter uma mensagem m ou a chave secreta k, sem que estas tenham sido con�adas a ele). Há várias possíveis situações em que ele poderia tentar fazê-lo. As quatro mais simples são listadas a seguir. • Ataque de texto cifrado conhecido: o adversário tem apenas textos cifrados com uma chave k e tenta determinar as mensagens; • KPA, ataque com texto claro conhecido: aqui o adversário conhece pares de textos claros e cifrados, todos encriptados com uma mesma chave k, e tenta decriptar um outro texto cifrado, também encriptado com k; • CPA (Chosen Plaintext Attack), ataque de texto claro escolhido: o adver- sário pode obter a encriptação de textos à sua escolha usando a chave k. Seu objetivo é decriptar um outro texto que também foi encriptado com k; • CCA (Chosen Ciphertext Attack), ataque de texto cifrado escolhido. Aqui o adversário pode obter o deciframento de mensagens usando k, exceto daquela que realmente quer decifrar. Os dois primeiros ataques são chamados de passivos, e os dois últimos de ativos. Estes ataques dizem respeito a sigilo, e portanto fazem sentido apenas para criptossistemas ou outras construções onde mensagens são de alguma forma en- criptadas. De�nições de segurança para outros objetivos (resistência a fraude, por exemplo) e construções (esquemas de assinatura, funções de hashing e pro- tocolos) serão abordadas ao longo do texto. O experimento PRIV_EAV(Π,A), descrito anteriormente, está relacionado ao primeiro tipo de ataque (o adversário conhece apenas textos cifrados) em crip- tossistemas de chave privada. Outras variantes deste experimento (para chave Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 2.5. SEGURANÇA DEMONSTRÁVEL 27 privada, chave pública e para diferentes tipos de ataque) e outras de�nições de segurança serão apresentadas quando diferentes criptossistemas forem discuti- dos. 2.5.2 Probabilidade desprezível Precisaremos falar de criptossistemas onde o adversário tem �probabilidade des- prezível de sucesso�, portanto de�niremos �desprezível�: informalmente, uma função é dita desprezível quando se aproxima de zero mais rápido que o recí- proco de qualquer polinômio. De�nição 2.10 (Função desprezível). Uma função f : N→ R é desprezível se para todo polinômio p(·) existe um N tal que para todos os inteiros n > N , f(n) < 1|p(n)| . � Por exemplo, • f(n) = 12n é desprezível, porque para qualquer polinômio p, haverá um N a partir do qual 12n < 1 p(n) ; • g(n) = 1n4+100 não é desprezível: seja h(n) = 1 n5 . Há algum N a partir do qual h(n) < 1n4 . É importante observar que esta de�nição é assintótica: não a�rmamos nada para valores de n menores que N . No resto do texto será comum encontrarmos funções desprezíveis a partir do seguinte raciocínio: para um parâmetro n, um espaço amostral tem tamanho 2n; como supomos distribuição uniforme, a probabilidade de x é dada por 12n , e encontramos uma função desprezível. Os espaços amostrais de tamanho 2n normalmente são algo como �todas as sequências de n bits�. Denotaremos funções desprezíveis arbitrárias por negl2. Há duas propriedades importantes de funções desprezíveis: • A soma de duas funções desprezíveis também é desprezível; • Amultiplicação de uma função desprezível por um polinômio é uma função desprezível. Eventos com probabilidade desprezível podem ser ignorados para efeitos prá- ticos; aceitaremos como seguro um criptossistema que tenha probabilidade des- prezível de ser quebrado. 2Usamos negl para manter a consistência com textos em Inglês, onde tais funções são chamadas de �negligible�. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 28 CAPÍTULO 2. CRIPTOSSISTEMAS E NOÇÕES DE SEGURANÇA 2.5.3 Exemplo de de�nição de segurança A de�nição 2.9 implica em sigilo perfeito, e nada presume a respeito do poder computacional do adversário. Relaxaremos estas restrições para chegar a uma de�nição de segurança mais útil na prática: • Apenas consideraremos adversários executando algoritmos randomizados que executam em tempo polinomial; • Admitiremos que o adversário possa quebrar o sistema com probabilidade desprezível. De�niremos um experimento para o criptossistema Π e o adversário A. Cha- maremos este experimento de PRIV_EAV(Π,A, n). Note que este experimento não é o mesmo que aquele usado na De�nição 2.9, tendo inclusive nome dife- rente (o (n) indica que o experimento depende de um parâmetro n). Além disso, neste experimento admitiremos que o adversário terminará sua parte em tempo polinomial em n (o tamanho das mensagens). Damos ao adversário a entrada 1n e o deixaremos escolher duas mensagens de mesmo tamanho. Em seguida geraremos uma chave de tamanho n, cifraremos uma das mensagens (sem que o adversário saiba qual) e a enviaremos a ele. O adversário deverá então descobrir qual das mensagens foi cifrada. Formalizamos esta ideia da seguinte forma: Experimento 2.11 (PRIV_EAV(Π,A, n)). 1. O adversário A recebe uma entrada 1n e escolhe duas mensagens, m0 e m1 ∈M, que tenham o mesmo tamanho (o tamanho das mensagens deve ser o mesmo, mas não precisa ser igual a n); 2. Uma chave k ∈ K é gerada usando Gen(1n), e um bit b é escolhido aleato- reamente. Então a mensagem mb é cifrada e enviada para A; 3. A mostra b′; 4. Se b = b′, o resultado do experimento é 1 (e dizemos que A teve sucesso), senão é 0. D A k ∈R { 0, 1 }n b ∈R { 0, 1 } b = b′ → 1 b 6= b′ → 0 1n m0,m1 Enck(mb) b′ Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 2.5. SEGURANÇA DEMONSTRÁVEL 29 � Requeremos que o adversário execute em tempo polinomial em n. Podemos então dar uma de�nição de segurança contra ataques de texto cifrado conhecido. De�nição 2.12 (Segurança contra ataque detexto cifrado conhecido). Um criptossistema simétrico Π tem indistinguibilidade de texto cifrado na presença de um grampoM se para todo adversário A existe uma função desprezível negl tal que, Pr[PRIV_EAV(A, n) = 1] ≤ 1 2 + negl(n). � Esta nova de�nição de segurança contra ataque de texto cifrado não implica em sigilo perfeito, portanto podemos obtê-la com criptossistemas onde |K| < |M|. Notas A de�nição de criptossistema que demos é a mesma dada por Katz e Lindell [130] e também por Goldreich [88]. Auguste Kerckho�s publicou suas ideias a respeito de criptossistemas em seu artigo �La Cryptographie Militaire�, na revista francesa �Journal des sciences militaires� em 1883. Os princípios para construção de criptossistemas, descritos por Auguste Kerckho�s, são: 1. O sistema deve ser praticamente, se não matematicamente, indecifrável; 2. Não pode necessitar ser secreto, e pode ser tal que caindo nas mãos do inimigo não cause inconveniência; 3. Sua chave deve ser comunicável e armazenável sem a ajuda de notas es- critas, e modi�cável à vontade pelos correspondentes; 4. Deve ser aplicável a correspondências telegrá�cas; 5. Deve ser portável, e seu uso não deve requerer a participação de várias pessoas; 6. Finalmente, é necessário, dadas as circunstâncias de sua aplicação, que o sistema seja fácil de usar, não exigindo esforço mental ou o conhecimento de longas sequências de regras a serem aplicadas. A Teoria da Informação foi desenvolvida inicialmente por Claude Shannon em um artigo de 1948 [193] (e no livro de 1949 [195]). Shannon também de- senvolveu um modelo teórico para comunicação com sigilo em outro artigo, em 1949 [194]. Embora o artigo de Shannon de 1948 seja bastante claro e acessível, Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 30 CAPÍTULO 2. CRIPTOSSISTEMAS E NOÇÕES DE SEGURANÇA o livro de Cover e Thomas [55] também é muito boa introdução ao assunto, e cobre muitas aplicações modernas. Na conferência CRYPTO de 1999 Ueli Maurer apresentou um resumo de conceitos relacionados a Teoria da Informação com aplicações em Criptogra- �a [155]. O one-time pad foi descrito inicialmente por Vernam em um artigo de 1926 [215] (por isso também é conhecido como �cifra de Vernam�), sem qualquer demons- tração de segurança; em 1949 Shannon de�niu sigilo perfeito e mostrou que esta é uma propriedade da cifra de Vernam [194]. Embora o one-time pad isolado não seja útil como criptossistema, é usado no desenvolvimento de diversas outras ferramentas, como esquemas de comparti- lhamento de segredos e negação plausível � é importante portanto compreender não apenas sua importância teórica, mas também conseguir reconhecê-lo em outras construções criptográ�cas. O desenvolvimento de construções com forte ênfase em segurança demons- trável iniciou com a publicação do criptossistema de Sha� Goldwasser e Silvio Micali em 1982 [95]. Exercícios Ex. 5 � Implemente o one-time pad. Ex. 6 � [Stinson] Suponha que o one-time pad foi usado para encriptar m e m′, resultando em c e c′ respectivamente. Sabendo que a mesma chave foi usada (de forma contrária ao que se recomenda quando usamos o one-time pad), mostre que m⊕m′ = c⊕ c′. Ex. 7 � Prove a outra direção do Lema 2.3. Ex. 8 � (Fácil) Complete a prova do Lema 2.6 (há uma parte marcada como �rascunho�). Ex. 9 � (Fácil) Demonstre as duas propriedades de funções desprezíveis na Seção 2.5.2. Ex. 10 � Reescreva a de�nição de função desprezível usando a notação de crescimento assintótico, típica em análise de algoritmos. Ex. 11 � Considere o criptossistema a seguir (uma variante do one-time pad): Construção 2.13 (Criptossistema furado). •Gen(1n) seleciona uniformemente uma sequência de bits em {0, 1}n; •Enc(m, k) funciona da seguinte maneira: a mensagem m é dividida em blocos m0,m1, · · · ,mr de n bits. Cada bloco é encriptado separadamente, sendo que ci = mi ⊕ k; Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 2.5. SEGURANÇA DEMONSTRÁVEL 31 •Dec(c, k) é semelhante a Enc, mas permutando c e m. � a) Prove que o criptossistema funciona corretamente (ou seja, para todos k e m, Dec(Enc(m, k), k) = m). b) Prove que o criptossistema não é seguro de acordo com nenhuma das de�- nições dadas neste Capítulo. c) Implemente o criptossistema, e também tente implementar um programa que exempli�que sua insegurança. Ex. 12 � (Katz/Lindell) Prove ou refute: todo criptossistema onde as chaves tem o mesmo tamanho (�xo) das mensagens e são escolhidas ao acaso tem sigilo perfeito. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 32 CAPÍTULO 2. CRIPTOSSISTEMAS E NOÇÕES DE SEGURANÇA Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini Capítulo 3 Problemas Difíceis Funções de mão única são fundamentais para a Criptogra�a moderna. Informal- mente, uma função f é de mão única se é fácil de calcular e difícil de inverter: há algoritmo polinomial para calcular f(x), mas dado y não há algoritmo e�ciente para encontrar um elemento da pré-imagem de y (algum x tal que f(x) = y). Uma óbvia aplicação de funções de mão única é a encriptação de mensagens. Se f é de mão única, queremos encriptar mensagens usando f(m). Outra maneira clara de usar funções de mão única é na construção de funções de hash, cujo funcionamento é conceitualmente semelhante às funções de mão única. Também queremos construir geradores pseudoaleatórios de bits (que são usados em quase todas as ferramentas criptográ�cas). Para fazê-lo, podemos simplesmente usar uma função de mão única sobre alguma função que expanda a semente. 3.1 Funções de mão única Começamos com uma de�nição mais precisa para �fácil de computar e difícil de inverter�. Por fácil de computar entendemos que a função pode ser computada por algum algoritmo determinístico polinomial. Por difícil de inverter queremos dizer que, para qualquer algoritmo determinístico polinomial A, a probabilidade de A conseguir encontrar um elemento da pré-imagem de f deve ser desprezível no tamanho da entrada de f . De�nição 3.1 (Função de mão única). Uma função f é de mão única se é 1. Fácil de computar: Existe um algoritmo de tempo polinomial que computa f ; 2. Difícil de inverter: Todo algoritmo A randomizado de tempo polinomial deve ter probabilidade desprezível de encontrar uma pré-imagem de f . Ou seja, dado um elemento x com tamanho n escolhido uniformemente no 33 Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 34 CAPÍTULO 3. PROBLEMAS DIFÍCEIS domínio de f , para todo polinômio positivo p(·) e todo n su�cientemente grande, Pr [ A(f(x), 1n) ∈ f−1(f(x)) ] < 1 p(n) � A entrada 1n para A é necessária porque não queremos classi�car uma função como de mão única apenas porque ela diminui muito sua entrada (queremos um algoritmo polinomial em n, e não no tamanho de f(x)). Usaremos em diversas situações funções de mão única que preservam o ta- manho da entrada e que tem inversa. Estas são chamadas de permutações de mão única. De�nição 3.2 (Permutação de mão única). Uma função de mão única é cha- mada de permutação de mão única quando é uma bijeção e preserva o tamanho de sua entrada. � Não se sabe se existem funções de mão única. Só podemos provar a existência de funções de mão única condicionalmente: sabemos que elas devem se P 6= NP, ou se certas conjecturas forem verdadeiras. Assim, falaremos a seguir de funções candidatas a mão única. Daremos três exemplos de funções candidatas a mão única: • A exponenciação modular, que mostraremos ser permutação de mão única (condicionada a uma conjectura); • A multiplicação de inteiros. Mostraremos que esta função satisfaz uma de�nição relaxada de função de mão única (condicionada a uma conjec- tura); • A soma de subconjuntos. A obtenção da inversa é um problema NP- completo (e portanto é de mão única se P for diferente de NP). Tomamos a liberdade de, num abuso de linguagem,no resto deste Capítulo, denominar as funções candidatas por funções �de mão única�. 3.1.1 Pré-Computação Quântica As funções descritas nesta seção não são resistentes a ataques por computadores quânticos: embora não conheçamos algoritmo clássico que possa calcular f−1 rapidamente, existe algoritmo quântico para isso. Nosso exemplo de permutação de mão única é gx (mod p) onde p é primo e g é o gerador do grupo (Zp, ·). Exemplo 3.3 (Logaritmo Discreto). Sejam p um número primo; g um gerador de Zp com a operação de multiplicação1. Cremos que a função dexp p,g(x) = g x (mod p) seja de mão única, com o parâmetro de segurança sendo a quantidade de bits usada para representar p. J 1ou uma raiz primitiva módulo p � consulte o Apêndice B. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 3.1. FUNÇÕES DE MÃO ÚNICA 35 A função dexp é computável em tempo polinomial. Além disso, preserva o tamanho da entrada e é uma bijeção. Dado y = dexp p,g(x), não é conhecido algoritmo e�ciente (polinomial em p) para determinar x. Este problema (en- contrar um elemento na pré-imagem de dexp (x)) é conhecido como problema do logaritmo discreto, e tem sido usado como base para construção de ferramentas criptográ�cas há muito tempo. Usaremos a hipótese de que não existam algorit- mos e�cientes para resolvê-lo, e nos referiremos a tal hipótese como a �hipótese do logaritmo discreto�2: Conjectura 3.4 (Di�culdade do Logaritmo Discreto). Para qualquer algoritmo randomizado polinomial A, qualquer número x escolhido ao acaso em Zq, onde ||q|| = k é o número de bits usados para representar q, e qualquer polinômio positivo p(·), Pr[A(p, g,dexp p,g(x)) = x] < 1 p(k) . Exemplo 3.5 (Fatoração de Inteiros). Dados dois primos p, q, ambos com n bits de tamanho, seja mult (p, q) = pq. Acreditamos que a mult seja uma função de mão única, com o parâmetro de segurança sendo n. J É evidente que mult é computável em tempo polinomial. Não conhecemos, no entanto, algoritmo polinomial para determinar (p, q) a partir de pq. Usaremos a hipótese de que tal algoritmo não exista, e nos referiremos a ela como a �hipótese da fatoração de inteiros�3. Conjectura 3.6 (Di�culdade da Fatoração de Inteiros). Para qualquer algo- ritmo randomizado polinomial A, quaisquer inteiros x, y com n bits cada, e qualquer polinômio positivo p(·), Pr[A(xy) = (x, y)] < 1 p(n) . 3.1.2 Pós-quântica As funções descritas na seção anterior só podem ser consideradas candidatas a funções de mão única se nos restringirmos a computadores clássicos. Há algoritmo quântico que pode determinar elementos na pré-imagem de cada uma delas. Nesta seção apresentamos algumas funções que continuam sendo candidatas a funções de mão única, mesmo na presença de computadores quânticos. Exemplo 3.7 (Soma de Subconjuntos). Dados n inteiros x1, · · · , xn e uma descrição de um subconjunto deles, a função somasub retorna o somatório dos elementos do subconjunto. somasub(x1, x2, · · · , xn, S) = ( x1, x2, · · · , xn, ∑ i∈S xi ) 2�Discrete logarithm assumption� em Inglês. 3�Integer factorization assumption� nos textos em Inglês. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 36 CAPÍTULO 3. PROBLEMAS DIFÍCEIS Determinar o subconjunto S a partir dos elementos xi e da soma é um problema NP-completo, e também acreditamos que esta função seja de mão única. J No entanto, nem todo problema NP-completo pode ser usado como base para funções de mão única: para que a função seja de mão única, ela deve ser difícil de inverter quase sempre (exceto pela �probabilidade desprezível� já men- cionada). Um problema NP-completo pode ser fácil de resolver na maioria dos casos � somente não conhecemos algoritmos e�cientes para as piores instâncias de problemas NP-completos. Cremos que o problema da soma de subconjuntos seria um bom candidato não por ser NP-completo, mas por não conhecermos algoritmos e�cientes para resolvê-lo. Problemas difíceis em reticulados Reticulados são semelhantes a espaços vetoriais (porque são conjuntos de com- binações lineares de uma base), mas não são contínuos, porque na de�nição de um reticulado, usamos somente combinações lineares com coe�cientes inteiros. De�nição 3.8. Um reticulado em Rn é um conjunto L(B) = { n∑ i=1 λibi|λi ∈ Z } onde B = (b1, . . . , bn) é uma base de Rn. Dizemos que (b1, . . . , bn) é uma base de L(B). � Assim como com espaços vetoriais, é comum de�nir a base de um reticulado como uma matriz onde cada coluna é um dos vetores bi: b1,1 b2,1 · · · bn,1 b1,2 . . . ... ... . . . bn,n Exemplo 3.9. A �gura a seguir mostra o reticulado gerado pela base ( (0,−1), (2, 0) ) . b1 b2 Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 3.1. FUNÇÕES DE MÃO ÚNICA 37 A base do reticulado pode ser descrita matricialmente como segue.( 0 2 −1 0 ) Observamos que, assim como para espaços vetoriais, podemos ter mais de uma base para um reticulado. Por exemplo, uma nova base para o reticulado que descrevemos pode ser obtida com os vetores β1 = 2b1 + b2 = (2,−2) β2 = −3b1 − b2 = (−2, 3). Note que usamos somente números inteiros nos coe�cientes. A base é( 2 −2 −2 3 ) Esta base é ilustrada na próxima �gura. β1 β2 A base (b1, b2) é ortogonal, enquanto a base (β1, β2) é bastante distante de ser ortogonal. Isto interfere na di�culdade de resolver certos problemas em dimensão maior que dois, como pode ser visto no Capítulo 18. J Há diversos problemasNP-difíceis de�nidos em reticulados. Os mais simples deles são: • SVP: dada uma base B, determinar um vetor de L(B) com a menor norma; • CVP: dada uma base B com n vetores e um vetor t ∈ Rn, determinar o vetor v ∈ L(B) mais próximo de t; • SBP: dada uma base B gerando L(B), encontre outra base B′ para o mesmo reticulado que seja �menor� de alguma forma. Por exemplo, po- demos tentar encontrar dentre todas as bases aquela contendo o vetor de menor norma: ||B′|| = max i ||si|| Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 38 CAPÍTULO 3. PROBLEMAS DIFÍCEIS ou a que contém a menor soma dos quadrados dos vetores: ||B′|| = ∑ i ||si||2. Observamos a função de mão única associada ao problema CVP . De posse de qualquer base B e um vetor x ∈ L(B), podemos obter um vetor v ∈ Rn, próximo de x mas fora do reticulado. Basta adicionar um vetor de erro que não tenha norma grande demais: f(v) = x+ e Dado um ponto v e uma base B, o problema de encontrar x ∈ L(B) mais próximo de v é NP-difícil (mas é fácil se a base B for �bem comportada� � tratamos disso no Capítulo 18). 3.2 Predicados hard-core Embora em primeira análise possa parecer que funções de mão única sejam seguras o su�ciente para que as usemos no desenvolvimento de ferramentas criptográ�cas, há ainda um problema a ser tratado. Suponha que em um leilão um participante envie seu lance encriptado, e que o algoritmo para encriptação use uma função de mão única. Sabemos que não deve haver maneira e�ciente de obter o valor do lance, mas isso não signi�ca que não possamos descobrir outras coisas sobre a mensagem que foi encriptada. Por exemplo, poderíamos tentar descobrir se o valor é maior que um certo número (que no caso do leilão seria uma falha grave), ou a paridade do valor etc. Trataremos agora de como evitar estes problemas. No exemplo do leilão, o valor é x, e o valor encriptado é Enc(x). Não deve ser possível, a partir do valor encriptado, responder à pergunta �x é par?� � logo esta pergunta é o que chamamos de predicado hard-core da função Enc. Um predicado b é hard-core de uma função f se qualquer algoritmo pro- babilístico polinomial que calcule4 b(x) a partir de f(x) tiver probabilidade de sucesso perto de 1/2. Na próxima de�nição, H é uma função cujo domínio é o conjunto de todas as sequências de bits de tamanho arbitrário, que representamos por {0, 1}∗. O contradomínio é {0, 1} (ou seja, H(x) só pode valer zero ou um). De�nição 3.10 (PredicadoHard-Core). H : {0, 1}∗ → {0, 1} é um predicado hard-core de uma função f se i) Há um algoritmo polinomial para computar H(x); ii) Para qualquer algoritmo randomizado polinomial A e x escolhido ao acaso, Pr[A(f(x)) = H(x)] ≤ 1 2 + negl(k), onde k é o número de bits de x. 4Note que por ser um predicado, b(x) só pode assumir dois valores: verdadeiro ou falso. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 3.2. PREDICADOS HARD-CORE 39 Quando um predicado hard-core consiste em determinar se um certo bit da entrada de uma função f é igual a um, dizemos que aquele é um bit hard-core da entrada de f . � O próximo Teorema mostra que a possibilidade de computar algo a respeito de uma função de mão única não é apenas teórica: é realmente possível computar um dos bits de x dado dexp p.g(x). Teorema 3.11. Dado dexp p,g(x), é possível computar lsb (x) em tempo poli- nomial em p. Demonstração. O seguinte algoritmo computa lsb (x) dado y = dexp p,g(x). Calcule c = y(p−1)/2 (mod p). Se c = 1, pelo critério de Euler (Teorema B.38), y é resíduo quadrático módulo p. Além disso, pelo Lema B.37, como y é resíduo quadrático módulo p, o expoente x é par. Como x é par, sua representação binária termina com zero, e conseguimos determinar seu bit menos signi�cativo � neste caso o algoritmo retorna zero (que é o bit menos signi�cativo de números representados em binário). Se c 6= 1, então y não é resíduo quadrático, e pelo Lema B.37, o expoente x não pode ser par. Determinamos portanto que o bit menos signi�cativo é um. O algoritmo claramente tem complexidade de tempo polinomial. � Exemplo 3.12. Sejam p = 41 e g = 6 (que é raiz primitiva módulo 41). Calcu- lamos dexp p,g(14) (mod 41) = 21. Agora, dado que temos apenas p = 41 e o va- lor computado 21, calculamos c = 21 41−1 2 (mod 41) = 278218429446951548637196401 (mod 41) ≡ 1 (mod 41), e o bit é zero (de fato, 14 é par!). Usando os mesmos p e g, tentamos agora x = 31: temos dexp p.g(31) ≡ 13 (mod 41). Tendo agora apenas p = 41 e o valor 13, calculamos c = 13 41−1 2 (mod 41) = 19004963774880799438801 ≡ 40 (mod 41) e determinamos que x é ímpar. J O Lema a seguir é usado na demonstração de que dexp tem um bit hard-core. Lema 3.13. Se p é primo e x é resíduo quadrático módulo p há um algoritmo probabilístico polinomial para calcular as duas raízes quadradas de x módulo p. A demonstração do Lema não será dada. Teorema 3.14. Dado dexp p,g(x), msb (x) é um predicado hard-core de dexp . Demonstração. A demonstração a seguir mostra que um algoritmo determinís- tico para calcular msb (x) dado dexp p,g(x) implicaria na negação da conjectura do logaritmo discreto. É possível estender a demonstração também para algo- ritmos randomizados, mas não o faremos. Suponha que exista um algoritmo A polinomial que compute msb (x) dado dexp p,g(x). Temos p, g e y = dexp p,g(x). Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 40 CAPÍTULO 3. PROBLEMAS DIFÍCEIS Primeiro, calcule a paridade de x (usando o algoritmo do Teorema 3.11). Se x é ímpar (ou seja, era uma potência ímpar de g), divida y por g e agora temos uma potência par de g módulo p: g2k+1g−1 = g2k. Esta potência par de g tem duas raízes quadradas r1 e r2 módulo p (veja o Teorema B.34) e podemos calculá-las e�cientemente. Uma delas será gx/2 e a outra será g x 2+ (p−1) 2 . Podemos então usar o algoritmo A para determinar qual destas raízes é a menor (qual tem o bit mais signi�cativo igual a zero). Tomamos esta raiz (gx/2) e iniciamos novamente o algoritmo. Desta forma determinamos cada bit de x, e paramos quando chegarmos a 1. O algoritmo é mostrado em pseudocódigo a seguir, usando lsb (x) para o algoritmo que calcula paridade de x dado apenas y, e msb (x) para o suposto algoritmo e�ciente para calcular o bit mais signi�cativo de x. i← 0 x0 ← 0 enquanto y 6= 1 c← lsb (x) se c = 1 /∗ x era ímpar! ∗/ y ← yg−1 /∗ temos agora potência par ∗/ xi ← 1 /∗ achamos um bit de x ∗/ senao xi ← 0 /∗ achamos um bit de x ∗/ /∗ determinamos as duas raízes: ∗/ r1, r2 ← √ y (mod p) se msb (x) = 0 y ← r1 senao y ← r2 i← i+ 1 retorne (xi, xi−1, · · · , x0) � 3.3 Predicados hard-core para quaisquer funções de mão única Na Seção anterior mostramos que um determinado bit é hard-core para dexp . Na verdade podemos criar predicados hard-core para qualquer função de mão única. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 3.3. PREDICADOS HARD-CORE PARAQUAISQUER FUNÇÕES DEMÃOÚNICA41 Teorema 3.15. Seja f uma função de mão única, e seja g(x, r) = (f(x), r), onde x e r tem tamanho igual a k bits cada um, e r é escolhido ao acaso. Então, H(x, r) def = k∑ i=1 xiri (mod 2) (ou seja, o produto interno de x e r quando interpretados como vetores de bits5) é um predicado hard-core para g. A função H faz o ou-exclusivo de um subconjunto dos bits de x (determinado pelos bits um de r). Notas Os livros de Talbot e Welsh [211] e de Katz e Lindell [130] traz uma introdução às funções de mão única. Uma abordagem mais detalhada, e também a demons- tração do Teorema 3.15 podem ser encontradas no livro de Goldreich [87]. Exercícios Ex. 13 � Reescreva a de�nição de função de mão única usando um experi- mento (simulação de jogos), da mesma maneira que �zemos para as de�nições de segurança no Capítulo 2. Ex. 14 � Na demonstração do Teorema 3.14, não mostramos que o algoritmo executa em tempo polinomial. Mostre um argumento muito simples que não deixe dúvida a respeito disso. Ex. 15 � Tente construir funções de mão única usando os problemas (presu- mindo que P 6= NP): a) SAT b) TSP c) COBERTURA-POR-VERTICES d) GERACAO-DE-PERMUTACAO e) TETRIS f) CVP g) SBP Tome cuidado de determinar como a entrada será representada, qual exatamente serão o domínio e o contradomínio (que devem ambos ser �nitos, uma vez que só nos interessam funções que possamos implementar), e qual será o parâmetro de segurança n usado para determinar que a função é de mão única. Se não conseguir construir a função, explicite claramente o motivo. Em seguida responda: 5Em alguns casos usa-se a notação ⊕k i=1 xiri. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 42 CAPÍTULO 3. PROBLEMAS DIFÍCEIS i) Alguma delas é permutação de mão única? ii) Se o problema subjacente é numérico, há algoritmo pseudopolinomial para ele. Isso representa um problema para sua função de mão única? iii) Pesquise o problema e veri�que se há para ele algoritmos aproximados. Qual a consequência para sua função de mão única? iv) Existe algum subconjunto das instâncias do problema que possa ser resol- vido e�cientemente? Novamente, em que isso implica para sua função? v) Tente analisar a segurança de cada bit de entrada das funções. Há bits cla- ramente inseguros? Há bits hard-core? Se não conseguir mostrar nenhuma das duas coisas, consegue identi�car ao menos se existem bits �mais segu- ros� que outros? Ex. 16 � Ao invés de problemas NP-difíceis poderíamos tentar usar proble- mas indecidíveis em construções criptográ�cas. Comente esta ideia. Ex. 17 � (Katz/Lindell) Mostre que a função de adição f(x, y) = x+y, onde x e y são representados com a mesma quantidade de bits e interpretados como naturais, não é de mão única. Ex. 18 � (Talbot/Welsh) Um primo da forma p = 4k+3 é chamado de primo de Blum. Presumindo que aproximadamente metade de todos os primos com k bits são primos de Blum, mostre que se a conjectura da fatoração de inteiros for verdadeira (ou seja, se fatorar inteiros for difícil), não deve haver algoritmo e�ciente para fatorar inteiros que sejam produto de dois primos de Blum. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini Capítulo 4 Geradores Pseudoaleatórios e Cifras de Fluxo A aleatoriedade é parte fundamental da Criptogra�a � é usada na construção de praticamente todas as técnicas criptográ�cas de que trataremos. O exemplo mais clarotalvez seja o das cifras de �uxo, mencionadas brevemente na Seção 1.1. As cifras de �uxo emulam, de maneira imperfeita, o one-time pad. A parte mais importante de seu funcionamento, então, consiste em gerar uma sequência de números pseudoaleatórios. Além das cifras de �uxo, é essencial também que chaves sejam geradas com distribuição uniforme sobre o espaço de chaves (senhas digitadas por usuários não são seguras). Isto é importante porque as garantias de segurança dos algoritmos criptográ�cos dependem da seleção aleatória das chaves. Há também outros usos de aleatoriedade em Criptogra�a, que serão discutidos ao longo do texto: em diversas situações é necessário usar números ou elementos �não previsíveis� por um adversário. 4.1 Geradores pseudoaleatórios Conceitualmente, um gerador pseudoaleatório é uma função que recebe como entrada (a semente) uma sequência de bits de tamanho k e gera como saída outra sequência de bits de tamanho l(k) > k. 10111010 11000101 110001010100111010100... semente G bits gerados Um gerador pseudoaleatório de bits para aplicação em Criptogra�a deve ter a propriedade de ser difícil de distinguir de uma sequência completamente aleatória. Começamos de�nindo �sequência completamente aleatória�. De�nição 4.1 (Sequência escolhida uniformemente). Sejam n ∈ N e {0, 1}n o conjunto de todas as sequências de n bits. Dizemos que uma sequência s de 43 Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 44CAPÍTULO 4. GERADORES PSEUDOALEATÓRIOS E CIFRAS DE FLUXO n bits foi escolhida uniformemente se foi escolhida com probabilidade igual a 1/|{0, 1}n| = 1/2n. � Temos interesse em algoritmos que produzam sequências de bits difíceis de distinguir de alguma sequência escolhida uniformemente. Formularemos isto da seguinte maneira: qualquer algoritmo polinomial que possa distinguir entre a saída de nosso gerador e uma sequência escolhida uniformemente só deve poder fazê-lo com probabilidade desprezível. Dizemos que duas famílias A e B de distribuições (geradas por dois algo- ritmos) são estatisticamente próximas quando, para n su�cientemente grande, cadeias com n bits tem quase a mesma probabilidade de pertencer a A ou a B. Isto é de�nido rigorosamente a seguir. De�nição 4.2 (Distribuições estatisticamente próximas). Duas distribuições X e Y são estatisticamente próximas se a expressão∑ e ∣∣Pr [X = e]− Pr [Y = e] ∣∣ é desprezível em n. Claramente, o somatório é sobre todas as cadeias e ∈ { 0, 1 }n. � Se quisermos distinguir entre cadeias geradas por X e Y estatisticamente próximas, podemos obter cadeias su�cientes para fazê-lo (no máximo precisare- mos obter todas as cadeias de n bits para cada uma das distribuições: 2(2n)). Este algoritmo, no entanto, teria complexidade de tempo exponencial. Diferenciaremos agora distribuições que podem ser identi�cadas (distingui- das) em tempo polinomial, e aquelas que não podem. O Experimento 4.3 (DISTRIB_DISTINGUISH) testa duas distribuições e um teste que tenta distingui-las. De maneira resumida, neste experimento escolhe- mos uma cadeia de uma ou de outra distribuição (com probabilidade 1/2 para cada distribuição) e enviamos ao teste T para que tente decidir de qual distri- buição a cadeia foi sorteada. Este teste T representa qualquer programa que rode em tempo polinomial tentando distinguir uma sequência de bits, determi- nando se foi gerada de acordo com a distribuição X ou com a distribuição Y (Por exemplo, T pode executar algum teste estatístico). Experimento 4.3 (DISTRIB_DISTINGUISH(A, X, Y )). 1. Escolha s0 ∈ X e s1 ∈ Y 2. Sorteie um bit aleatoreamente (b ∈R { 0, 1 }) 3. Envie sb para A 4. Receba b′ de A 5. Se b = b′ o resultado do experimento é 1; senão é 0. � Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 4.1. GERADORES PSEUDOALEATÓRIOS 45 A Figura a seguir ilustra o experimento. D A s0 ∈ X s1 ∈ Y b ∈R { 0, 1 } b = b′ → 1 b 6= b′ → 0 sb b′ De�nimos então que duas distribuições são computacionalmente indistin- guíveis se a probabilidade de sucesso de T neste experimento é próxima de 1/2. De�nição 4.4 (Distribuições computacionalmente indistinguíveis). Duas dis- tribuições X e Y são computacionalmente indistinguíveis se para todo algoritmo polinomial T e n su�cientemente grande, existe uma função desprezível negl(·) tal que Pr [DISTRIB_DISTINGUISH(D,n,X, Y ) = 1] ≤ 1 2 + negl(n). � Embora a De�nição 4.4 esteja rigorosamente correta, a De�nição 4.5, mais compacta, é normalmente usada. Esta segunda de�nição possivelmente �ca mais clara após a compreensão da primeira. De�nição 4.5 (Distribuições computacionalmente indistinguíveis). Duas dis- tribuições X e Y são computacionalmente indistinguíveis se para todo algoritmo polinomial D e n su�cientemente grande, existe uma função desprezível negl(·) tal que ∣∣∣∣ Pru∈X [D(u) = 1]− Pru∈Y [D(u) = 1] ∣∣∣∣ ≤ negl(n). Quando duas distribuições A e B são computacionalmente indistinguíveis, de- notamos A ≈ B. � Exemplo 4.6 (Sequências de bits estatisticamente distantes). Suponha que queiramos construir um algoritmo que gera bits aleatórios a partir de um inteiro k. Decidimos usar uma sequência usando números de Fibonacci: para gerar uma sequência de l bits, calculamos os l primeiros números de Fibonacci Fk, Fk+1, . . . , Fk+l. Usamos o i-ésimo número de Fibonacci para determinar o i- ésimo bit da sequência Bn: para l bits, calcula-se b1, b2, . . . , bl de maneira que bi = { 0 se Fk+i é par 1 se Fk+i é ímpar. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 46CAPÍTULO 4. GERADORES PSEUDOALEATÓRIOS E CIFRAS DE FLUXO Por exemplo, escolhemos k = 10 e geramos uma sequência com 8 bits: F10 = 55 (→ 1) F11 = 89 (→ 1) F12 = 144 (→ 0) F13 = 233 (→ 1) F14 = 377 (→ 1) F15 = 610 (→ 0) F16 = 987 (→ 1) F17 = 1597 (→ 1) Temos então a sequência 11011011. No entanto, esta sequência é facilmente distinguível de uma distribuição selecionada uniformemente dentre todas as possíveis (e portanto não podemos usá-la para �ns criptográ�cos). Como há duas vezes mais números de Fibonacci ímpares do que pares, a probabilidade de uma sequência com muitos uns pertencer a Bn é maior1 do que a probabilidade da mesma sequência pertencer a An. Para a sequência s = 1111 . . . 1 (n bits iguais a um), temos Pr[s ∈ An] = ( 1 2 )( 1 2 ) . . . ( 1 2 ) = 1 2n . Pr[s ∈ Bn] = ( 2 3 )( 2 3 ) . . . ( 2 3 ) = 2n 3n . A diferença entre as duas probabilidades não é desprezível. J De�nição 4.7 (Gerador pseudoaleatório). Seja l um polinômio e G um al- goritmo polinomial determinístico que recebe como entrada sequências de bits s ∈ {0, 1}n. A saída de G(s) tem tamanho l(|s|). Então G é um gerador pseudoaleatório se: • Para todo n, l(n) > n (ou seja, G sempre expande sua entrada); • A saída de G para n bits é computacionalmente indistinguível de uma sequência de n bits escolhida uniformemente. � A segunda exigência da De�nição 4.7 é muitas vezes exposta da seguinte forma: a saída de um gerador pseudoaleatório deve �passar por todos os possíveis testes (de tempo polinomial) estatísticos�. É impossível, no entanto, que um gerador pseudoaleatório gere sequências com distribuição uniforme sobre todas as possíveis sequências de um dado com- primento. Teorema 4.8. A saída de um gerador pseudoaleatório de bits não pode ter distribuição uniforme. Demonstração. Considere um gerador G com l(n) = 2n (ou seja, G dobra o tamanho de sua entrada). Porque sua entrada tem n bits, ele poderá gerar 2n sequências diferentes apenas (mesmo que a saída tenha 2n bits). De todas as 22n sequências possíveis com 2n bits, G somente produzirá uma pequena parte: há 22n − 2n sequências que G nunca serão geradas. 1Há duas vezes mais números de Fibonacci ímpares do que pares. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 4.2. GERADORES COM FUNÇÕES DE MÃO ÚNICA 47 Assim, como a saída de G é de tamanho 2n, mas há somente 2n saídas possíveis,teremos probabilidade 2−n para algumas sequências de bits e zero para outras. � No entanto, nossa de�nição não exige que o gerador produza sequências com distribuição uniforme. Queremos apenas que os bits gerados sejam indistinguí- veis em tempo polinomial da distribuição uniforme. Um adversário poderia enumerar todas as saídas de G, enumerar todas as possíveis sequências de 2n bits e encontrar uma sequência de 2n bits que G nunca produz. No entanto, este algoritmo é exponencial (tem complexidade O(22n) porque enumera todas as sequências possíveis). Fica evidente que o tamanho da semente é importante: se ela for muito pequena, um atacante poderá realizar o ataque mencionado. Outra maneira de caracterizarmos a qualidade de um gerador pseudoalea- tório apropriado para criptogra�a é exigirmos que não seja fácil determinar o próximo bit de uma sequência a partir dos anteriores. De�nição 4.9 (Teste do próximo bit). Um gerador G passa no teste do próximo bit se e somente se não existe algoritmo polinomial que, a partir dos k primeiros bits de uma sequência gerada por G, possa predizer o bit k+1 com probabilidade maior que 1/2 + negl(k). � As duas caracterizações de gerador pseudoaleatório para Criptogra�a são equivalentes. Teorema 4.10 (de Yao). Um PRG G é pseudoaleatório se e somente se passa pelo teste do próximo bit. O leitor poderá facilmente veri�car que o gerador do exemplo 4.6 não passaria no teste do próximo bit. 4.2 Geradores com Funções de Mão Única Usaremos predicados hard-core de funções de mão única para construir gerado- res de números aleatórios, usando a seguinte ideia: dada uma semente x0 e uma função de mão única f , calculamos x1 = f(x0) e b0 = h(x0). Em seguida, faze- mos x2 = f(x1) e b1 = h(x1), e assim por diante. Como cada bit da sequência é hard-core de f , nenhum deles deve ser fácil de prever. Hf b_i+1x_i x_i+1x_0 O Teorema a seguir garante que podemos aumentar o resultado de f(x) em um bit, e o resultado será ainda indistinguível de uma cadeia gerada ao acaso. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 48CAPÍTULO 4. GERADORES PSEUDOALEATÓRIOS E CIFRAS DE FLUXO Teorema 4.11. Seja f uma permutação de mão única com predicado hard-core H. Então G(x) def = f(x)||H(x), onde || denota concatenação, é um gerador pseudoaleatório. Demonstração. (Rascunho) Se x for escolhido uniformemente dentre as cadeias de bits com tamanho k, como f é uma permutação, f(x) também terá distri- buição uniforme sobre as cadeias de tamanho k, e um adversário não terá como distinguir os valores de f(x) de uma distribuição uniforme. Além disso, a probabilidade do bit hard-core ser 1 é 1/2, donde concluímos que f(x)||H(x) é indistinguível de uma sequência de bits gerada ao acaso com probabilidade uniforme. � O Teorema 4.11 nos dá apenas geradores que aumentam em um bit o tama- nho da semente. É possível construir geradores que aumentam arbitrariamente a semente: Teorema 4.12. Seja f uma permutação de mão única para entrada de tamanho k bits, com predicado hard-core H. Então, dado um polinômio p(.), G(x) def = ( H(f(x)), H(f2(x)) · · · , H(fp(k)−1(x)) ) é um gerador pseudoaleatório. Este Teorema, que não demonstraremos, diz essencialmente que a ideia des- crita no início desta seção está correta. Agora usaremos dexp para construir um gerador pseudoaleatório. O predi- cado hard-core que usaremos é o bit mais signi�cativo. Construção 4.13 (Gerador de Blum-Micali). Seja p um primo grande; g uma raiz primitiva módulo p; e x0 (a semente) um inteiro. O i-ésimo bit gerado é bi: xi = g xi−1 (mod p) bi = msb (xi). � Teorema 4.14 (Blum-Micali é seguro). O gerador de Blum-Micali é seguro (ou seja, é um gerador pseudoaleatório de acordo com a De�nição 4.7). Demonstração. Como o algoritmo implementa exatamente a mesma construção G de�nida no Teorema 4.12, concluímos imediatamente que Blum-Micali é um gerador pseudoaleatório. � Outro gerador pseudoaleatório é mostrado a seguir. Construção 4.15 (Gerador de Blum-Blum-Shub). Sejam p e q dois primos grandes com p, q ≡ 3 (mod 4), e seja m = pq. Uma raiz x0 é escolhida que seja diferente de um, de p e de q. O i-ésimo bit gerado é bi: xn = x 2 n−1 (mod m) bi = lsb (xi). � Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 4.3. GERAÇÃO DE NÚMEROS PSEUDOALEATÓRIOS 49 4.3 Geração de números pseudoaleatórios Embora a geração de sequências de bits pseudoaleatórios seja imediatamente útil (já são su�cientes para a construção de cifras de �uxo, descritas na Seção 4.5), há também casos em que queremos produzir números (inteiros ou naturais) pseudoaleatórios. Quando queremos um número entre 0 e 2k − 1 podemos simplesmente gerar uma cadeia de k bits e interpretá-la como número na base dois. Isso preserva a distribuição, porque há 2k números que podem ser gerados, e ao interpretá-los como inteiros determinamos uma bijeção entre as cadeias de bits e os números. No entanto, podemos querer gerar números entre 0 e n− 1, para qualquer n natural. Seja k o menor número possível de bits necessário para representar o número n em base dois � ou seja, blog2(n)c. Seja G um gerador pseudoaleatório de bits. Há 2k strings de k bits que podem ser geradas por G. Como queremos escolher um dentre n números, há strings entre n e 2k − 1 que não podem ser usadas. Se tentarmos interpretar estas cadeias usando módulo n, a distribuição não será mais uniforme. Temos então que ignorar estas strings, e gerar um novo número quando elas forem encontradas. Esta ideia é detalhada no algoritmo a seguir. random_natural(G,n): k ← log2(n) repita s← próximos k bits de G interprete s como x até que x < n retorne x Os dois teoremas a seguir garantem que a saída do algoritmo é a que quere- mos, e que seu tempo esperado de execução é logarítmico. Teorema 4.16. Se G tem saída com distribuição uniforme, random_natural(G,n) produz números uniformemente distribuídos entre 0 e n− 1. Teorema 4.17. Se G é um gerador pseudoaleatório e n um número natural, o algoritmo random_natural(G,n) tem tempo de execução O(log(n)). 4.4 Geradores com Heurísticas Geradores baseados em funções candidatas a mão única como exponenciação ou quadrado modulares são lentos, porque envolvem aritmética modular com nú- meros grandes (muito maiores do que o tamanho de palavra de computadores). Quando a geração de bits deve ser muito rápida, podemos abrir mão das garan- tias dos métodos com demonstração de segurança. Usamos, então, heurísticas que nos dão alguma con�ança nas sequências geradas. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 50CAPÍTULO 4. GERADORES PSEUDOALEATÓRIOS E CIFRAS DE FLUXO Ao invés de demonstrar que não se pode (a não ser implicando em algoritmo e�ciente para um problema presumidamente difícil) prever o próximo bit da sequência, relaxamos este requisito e construímos geradores que geram sequên- cias que, tanto quanto podemos veri�car, são indistinguíveis por todos os testes estatísticos de sequências aleatórias. Isso signi�ca que (i) há baterias de testes estatísticos às quais um gerador de bits pode ser submetido para veri�car se pode ser usado em aplicações de Criptogra�a e (ii) devemos identi�car propri- edades desejáveis em sequências de bits que possam ser usadas como guia na elaboração de geradores que passem por tais testes. É importante frisar que estes testes e propriedades não dão a mesma garantia que os métodos baseados em funções de mão única. Por exemplo, um gerador pode ter como saída diver- sas sequências que passam todos os testes conhecidos hoje, mas isso não garante nada a respeito de novos testes estatísticos, e não garante tampouco que este gerador não possa produzir sequências com viés, dependendo da semente usada. 4.4.1 Propriedades de Sequências Pseudoaleatórias Nosso ponto de partida são os postulados de Golomb, que expressam proprieda- des desejáveis de sequências pseudoaleatórias de bits. Esses postulados não são su�cientespara caracterizar sequências pseudoaleatórias, mas são necessários. As de�nições a seguir, de período, subsequência constante e de autocorrela- ção, são usadas nos postulados. De�nição 4.18 (Período de sequência). O período de uma sequência X é o menor inteiro p tal que xi = xi+p, para i su�cientemente grande. � Por exemplo, o período da sequência 011011011 é três, o da sequência 00101010 é dois (o padrão 10 se repete depois de i = 2) e o da sequência 01101001 é oito. De�nição 4.19 (Subsequência constante). Seja X uma sequência. Uma sub- sequência xl, . . . xm de X é constante se xi = xj para quaisquer l ≤ i, j ≤ m. � A autocorrelação representa o quanto cada bit depende de bits anteriores � o que é claramente relevante, dado o Teorema 4.10 (teste do próximo bit). De�nição 4.20. Sejam X uma sequência de bits com período p; A(k) a quan- tidade de posições i tal que xi = xi+k; e D(k) a quantidade de posições onde isso não acontece. A(k) = |{i : xi = xi+k}| D(k) = |{i : xi 6= xi+k}|. A autocorrelação com deslocamento k para X é A(k)−D(k) p . � Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 4.4. GERADORES COM HEURÍSTICAS 51 Exemplo 4.21. Considere a sequência X = 100101110 . . . (o padrão mostrado repete-se; a sequência tem período nove). Calculamos a autocorrelação para k = 1. Contamos somente as posições em que xi 6= xj . Temos x0 6= x1 x2 6= x3 x3 6= x4 x4 6= x5 x7 6= x8 x8 6= x1. e portanto D(1) = 6. Como há nove posições, A(1) = 9− 6 = 3 e a autocorre- lação para k = 1 é −3/9 = −1/3. Agora veri�camos a autocorrelação para k = 2. x0 6= x2 x1 6= x3 x2 = x4 x3 = x5 x4 6= x6 x5 = x7 x6 6= x8. Temos D(2) = 4, A(2) = 3, portanto a autocorrelação para k = 2 é −1/9. J Uma das primeiras tentativas de estabelecer critérios de pseudoaleatoriedade para sequências é um conjunto de três postulados, conhecidos como postulados de Golomb, que enunciamos a seguir. G1) A diferença entre a quantidade de zeros e uns na sequência deve ser no máximo um. G2) O número de subsequências constantes de um dado comprimento deve ser o mesmo para uns e para zeros. Além disso, se o número de subsequências constantes de comprimento k é m, o número de subsequências constantes para comprimento k + 1 deve ser m/2. G3) A autocorrelação para deslocamentos diferentes de zero deve ser sempre a mesma, independente do valor do deslocamento. O postulado G1 tem razão de ser muito clara: se não for satisfeito, a sequên- cia passa a ser facilmente distinguível de uma sequência aleatória. Ou ainda, seria fácil prever o próximo bit da sequência com probabilidade de sucesso maior que 1/2 + negl(k). O postulado G2 é uma generalização do primeiro para sub- sequências de bits. O postulado G3 implica que o cálculo da autocorrelação não permite obter qualquer informação a respeito do período da sequência. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 52CAPÍTULO 4. GERADORES PSEUDOALEATÓRIOS E CIFRAS DE FLUXO Sequências que satisfaçam estas propriedades são chamadas de pseudo-ruído (ou PN , de pseudo-noise). Há uma ferramenta conceitual que pode ser usada em geradores pseudoale- atórios � uma variante de registradores de deslocamento, normalmente imple- mentados facilmente em hardware. Os registradores de deslocamento, além de usados na construção de geradores pseudoaleatórios, também são importantes na descrição de propriedades de sequências. Um registrador de deslocamento funciona como uma �la de bits. Em sua versão mais simples, há um bit de entrada, um de saída, e o estado interno do registrador é uma sequência de bits2. Como descreveremos algoritmos que operam nestes registradores, nossa visão deles será a de um vetor de variáveis binárias (aqui usamos �vetor� como objeto mutável, usado em algoritmos, e não como objeto matemático abstrato). A operação de deslocamento funciona da seguinte maneira: • cada bit é movido uma posição para a direita; o bit que estava mais à direita é removido e usado como saída do registrador; • um novo bit (o bit de entrada) é gravado sobre a posição mais à esquerda. A Figura a seguir ilustra o funcionamento de um registrador de deslocamento: na parte superior da �gura está representado o estado anterior do registrador, igual a 0011011101; na parte inferior, a operação de deslocamento com entrada igual a zero (a saída será o último bit do estado, que é igual a um). A saída de um registrador de deslocamento é serial se apenas o último bit é usado. Se mais de um bit é usado, a saída é dita paralela. 2Registradores de deslocamento são implementados em hardware como uma sequência de �ip-�ops do tipo D, com a saída de um alimentando a entrada de outro, como ilustra a �gura abaixo. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 4.4. GERADORES COM HEURÍSTICAS 53 De�nição 4.22 (Sequência gerada por registrador de deslocamento linearmente realimentado). Uma sequência gerada por registrador de deslocamento linear- mente realimentado é uma sequência (ai) tal que ai+i = n−1∑ k=0 ckai+k (mod 2), ou ainda, ai+i = n−1⊕ k=0 ckai+k. � Em outras palavras, se o estado interno de um registrador tem l bits então seu estado inicial é sl−1, sl−2, . . . , s0, e para i ≥ l o i-ésimo bit é determinado pela função linear si = c1si−1 + c2si−2 + · · ·+ clsi−l (mod 2), onde os coe�cientes cj podem ser um ou zero. Em outras palavras, uma função linear determina o próximo bit de entrada a partir do estado atual. A função que determina o bit de entrada a partir dos bits do estado é a função de feedback, ou função de realimentação. Abreviamos registrador de deslocamento linearmente realimentado por LFSR (linear feedback shift regis- ter). O polinômio 1 + c1x + · · · + clxl é chamado de polinômio de conexão do LFSR. Exemplo 4.23 (LFSR). Suponha que um LFSR com oito bits use a função de realimentação si = si−2 ⊕ si−5 ⊕ si−6 ⊕ si−8, onde ⊕ é o ou-exclusivo. Esta é uma função linear módulo dois3. Este LFSR é representado na Figura a seguir. 3Porque a⊕ b é o mesmo que a+ b (mod 2), e a função mostrada é a mesma que si = si−2 + si−5 + si−6 + si−8 (mod 2). Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 54CAPÍTULO 4. GERADORES PSEUDOALEATÓRIOS E CIFRAS DE FLUXO Para o estado inicial 00110011, alguns dos próximos estados e bits de saída são entrada estado saída 10011001→ 1 (0 + 1 + 0 + 1 = 0)→ 01001100→ 0 (1 + 1 + 1 + 0 = 1)→ 10100110→ 0 (0 + 0 + 1 + 0 = 1)→ 11010011→ 1 J Teorema 4.24. Toda sequência periódica de bits pode ser gerada por algum LFSR com no máximo n estados, onde n é o tamanho da sequência. Demonstração. Trivial (um LFSR com n estados e estado inicial igual à sequên- cia gera a própria sequência). � Apesar de ser trivialmente possível obter LFSRs de tamanho n para sequên- cias de comprimento n, notamos que é muitas vezes possível obter sequências de tamanho n com LFSRs muito menores que n. De�nição 4.25 (Complexidade linear de sequência). Seja S uma sequência de bits. • Se S é �nita e de comprimento |S|, a complexidade linear de S é o com- primento do menor LFSR que gera, para alguma semente, uma sequência cujos |S| primeiros bits formam a sequência S. • Se S é in�nita e só contém zeros, a complexidade linear de S é zero. • Se S é in�nita, diferente de zeros, e pode ser gerada por um LFSR, sua complexidade linear é a do menor LFSR que gera S. • Se S não pode ser gerada por um LFSR, complexidade linear de S é ∞. � Teorema 4.26. Uma sequência de período k não tem complexidade linear maior do que k. O algoritmo de Berlekamp-Massey determina a complexidade linear de uma sequência �nita. Na descrição do algoritmo, b(·) e c(·) são polinômios (o pseudocódigo não mostra detalhes da implementação destes � pode-se usar vetores, por exemplo). Denotamos b(x)xN−m a multiplicação do polinômio b(x) pelo termo xN−m. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini4.4. GERADORES COM HEURÍSTICAS 55 berlekamp−massey(s, n): b(x)← 1 c(x)← 1 L← 0 m← −1 para N de 0 a n− 1: d← sn + ∑L i=1 cisn−i (mod 2) se d = 1 t(x)← c(x) c(x)← c(x) + b(x)xN−m se L ≤ N/2: L← N + 1− L m← N b(x)← t(x) retorne L, c(x) O algoritmo retorna L, a complexidade linear da sequência, e c(x), o polinô- mio de conexão do LFSR que a gera. A complexidade de tempo do algoritmo de Berlekamp-Massey é O(n2): ape- sar de havermos explicitado somente um laço (N de zero a n− 1), as operações em polinômios tem complexidade linear em n. De�nição 4.27 (LFSR de comprimento máximo). Seja R um LFSR de n bits. Se, ao ser inicializado com qualquer semente diferente de 0n e deslocado repe- tidamente, o estado interno de R passa por todas as 2n − 1 permutações, então R é um LFSR de comprimento máximo. Sequências geradas por LFSRs de comprimento máximo são chamadas de m-sequências. � Teorema 4.28. Toda m-sequência satisfaz os postulados de Golomb. F Obtendo LFSRs de comprimento máximo O seguinte Teorema mostra como construir LFSRs de comprimento máximo. Teorema 4.29. Se o polinômio de conexão de um LFSR é primitivo e tem grau igual ao tamanho do LFSR (ou seja, tem cl = 1), então este LFSR é de comprimento máximo. Usando LFSRs Podemos inicializar um LFSR com uma semente e usar seus bits de saída, mas esta construção não seria segura, porque a função de realimentação é linear, e seria fácil recuperar estados anteriores do registrador. Normalmente alguma forma de não-linearidade é usada em conjunto com geradores do tipo LFSR para torná-los resistentes a criptanálise. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 56CAPÍTULO 4. GERADORES PSEUDOALEATÓRIOS E CIFRAS DE FLUXO 4.4.2 Testes Para Sequências de Bits (Esta Seção não está completa) Há muitos testes que podem ser utilizados para tentar distinguir uma sequên- cia de bits aleatórios. Esta Seção descreve apenas alguns deles. Observamos que passar em uma bateria de testes é uma condição necessária para um gerador pseudoaleatório, mas de forma alguma é su�ciente! Além de veri�car a complexidade linear da sequência e testar os postula- dos de Golomb, há outros testes que podem ser usados para veri�car se uma sequência não é pseudoaleatória. 4.5 Cifras de Fluxo Podemos construir cifras de �uxo usando geradores pseudoaleatórios (a segu- rança da cifra se sustentará na segurança do gerador pseudoaleatório). Ao invés de usar o one-time-pad com uma chave do mesmo tamanho que a mensagem, podemos usar como chave a semente de um gerador pseudoaleatório. Para ci- frar a mensagem, usamos o gerador para expandir a semente até o tamanho da mensagem. Com isto podemos construir criptossistemas que satisfazem a De�nição 2.12 (segurança contra ataque de texto cifrado conhecido). No entanto, aquela De�- nição de segurança não trata da situação (muito mais comum) em que queremos enviar mais de uma mensagem. 4.5.1 Múltiplas Mensagens Adaptaremos a De�nição 2.12 para que contemple a possibilidade de envio de várias mensagens. Experimento 4.30 (PRIV_MULT(Π,A, n)). 1. O adversário A recebe uma entrada 1n, e devolve duas sequências de mensagens, M0 = (m10,m 2 0, · · · ,mt0) e M1 = (m11,m21, · · · ,mt1); 2. Uma chave k é gerada usando Gen(1n), e um bit b é escolhido aleato- reamente. Então todas as mensagens da sequência Mi são encriptadas, resultando na sequência Enck(Mb) = (c1, c2, · · · , ct) onde ci = Enck(mib). Esta sequência Enck(Mb) é enviada para A; 3. A envia b′; 4. Se b = b′, o resultado do experimento é 1 (e dizemos que A teve sucesso), senão é 0. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 4.5. CIFRAS DE FLUXO 57 D A b ∈R {0, 1} k ∈R {0, 1}n b = b′ → 1 b 6= b′ → 0 1n M0 = (m 1 0,m 2 0, · · · ) M1 = (m 1 1,m 2 1, · · · ) Enck(mb) b′ � O adversário novamente tem em tempo de execução restrito a um polinômio em n. De�nição 4.31 (Segurança contra ataque de múltiplos textos cifrados conheci- dos). Um criptossistema simétrico Π tem indistinguibilidade de múltiplos textos cifrados na presença de grampoM se para todo adversário A existe uma função desprezível negl tal que, Pr[PRIV_MULT(Π,A, n) = 1] ≤ 1 2 + negl(n). onde a probabilidade é sobre as moedas usadas por A, para a escolha do bit b e usadas por Enc. � Damos agora um exemplo de criptossistema que é seguro de acordo com a De�nição 2.12, mas não de acordo com a De�nição 4.31. Construção 4.32. Seja G um gerador pseudoaleatório com fator de expansão p(.). O seguinte criptossistema simétrico é construído sobre G: • Gen: dado 1n, escolha uma chave k ∈ {0, 1}n com probabilidade uniforme; • Enc(k,m) = G(k)⊕m, desde que tanto k como m tenham k bits; • Dec(k, c) = G(k)⊕ c, desde que tanto k como c tenham k bits. � Teorema 4.33. O Criptossistema descrito na Construção 4.32 é seguro de acordo com a De�nição 2.12. Demonstração. Seja Π o criptossistema da Construção 4.32. Mostraremos que a existência de um adversário que possa distinguir as mensagens no experi- mento 2.8 (usado na De�nição 2.12) com probabilidade maior que a dada na Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 58CAPÍTULO 4. GERADORES PSEUDOALEATÓRIOS E CIFRAS DE FLUXO De�nição 2.12, teríamos um algoritmo para distinguir os bits gerados por G de bits aleatórios com distribuição uniforme. Seja A um adversário executando em tempo polinomial, e seja f(n) = Pr[PRIV_EAV(Π,A, n) = 1]− 1/2 (ou seja, a função f mede quão melhor que 1/2 é a probabilidade de o adversário obter sucesso no experimento. Construiremos um algoritmo (ou um teste) T para distinguir uma sequência s de bits, determinando se ela foi produzida por G ou se foi escolhida com distribuição uniforme no espaço amostral de tamanho n. T executa o experimento a seguir. 1. Chame A(1n) e obtenha duas mensagens de tamanho p(n).; 2. Escolha um bit b aleatoreamente; 3. Calcule c = s⊕mb; 4. Ao invés de Enc(k,mb) = k⊕mb, dê c a A � ou seja, ao invés de enviar a mensagem cifrada com uma chave gerada por Gen, use s como se fosse a chave. Obtenha a saída b′, e retorne 1 se b = b′, ou zero em caso contrário. Este experimento é ilustrado a seguir. T A b ∈R {0, 1} c← s⊕mb b = b′ → 1 b 6= b′ → 0 1n m0,m1 c b′ A �gura não diz como s é obtido, e isso é intencional: trataremos a seguir de duas maneiras de obter s. Primeiro, se s for obtida ao acaso uniformemente do espaço amostral {0, 1}p(n), teremos que a chaves usadas para cifrar as mensagens são escolhidas com distri- buição uniforme � exatamente como seria se tivéssemos usado o one-time pad ao invés de enviar c para A, e Pr[T (s) = 1] = Pr[PRIV_EAV(Π,A, n) = 1] = 1 2 . Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 4.5. CIFRAS DE FLUXO 59 Para o segundo caso, suponha então que s seja igual a G(k), com k esco- lhida aleatoreamente. Sabemos que s não pode ter distribuição uniforme (pelo Teorema 4.8). Neste caso o experimento é exatamente como seria se tivéssemos usado k = Gen(1n) ao invés de enviar c para A � e o experimento é o mesmo que o da De�nição 2.12, e Pr[T (s) = 1] = Pr[PRIV_EAV(Π,A, n) = 1] = 1 2 + f(n). Temos então que se houvesse um adversário A que obtivesse sucesso f(n) (que supomos não desprezível) no experimento PRIV_EAV(Π,A, n), teríamos também um algoritmo (T ) para distinguir a saída de G de bits aleatórios, com a mesma probabilidade de sucesso. Como G é pseudoaleatório, tal adversário não pode existir. � Proposição 4.34. O Criptossistema descrito na Construção 4.32 não é seguro de acordo com a De�nição 4.31. Demonstração. No Experimento 2.11 (usado na De�nição 4.31) o adversário A escolhe duas sequências de duas mensagens, M0 = (0n, 0n), M1 = (0n, 1n). Ao receber a sequência de mensagens cifradas C = (c1, c2), o adversário pode simplesmente veri�car se c1 = c2 (neste caso sabe que a sequência encriptada M1) ou não (e portanto a sequência deve ser M2). � O problema com a Construção 4.32 é o fatode ser um criptossistema de- terminístico: um mesmo par (chave, mensagem) sempre levará ao mesmo texto encriptado. Como este foi a única característica relevante do criptossistema que usamos na demonstração da Proposição 4.34, temos o seguinte teorema: Teorema 4.35 (Insegurança de criptossistemas determinísticos). Qualquer crip- tossistema simétrico determinístico é inseguro de acordo com a De�nição 4.31. Se usarmos uma chave diferente cada vez que encriptarmos uma mensagem teremos resolvido o problema. Ao cifrar uma mensagem, inicializamos G não apenas com uma semente (secreta), mas também com alguns bits a mais, esco- lhidos aleatoreamente com distribuição uniforme: iv ∈R {0, 1}n Enck(m) = (iv,G(k, iv)⊕m). Esta sequência adicional de bits é chamada de �vetor de inicialização�, e é enviada junto com o texto cifrado, em claro. Para decifrar, fazemos Deck(iv, c) = G(k, iv)⊕ c. A Construção a seguir é uma cifra de �uxo construída usando esta ideia. Construção 4.36. Seja G um gerador pseudoaleatório com fator de expansão p(.). O seguinte criptossistema simétrico é construído sobre G: Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 60CAPÍTULO 4. GERADORES PSEUDOALEATÓRIOS E CIFRAS DE FLUXO • Gen: dado 1n, escolha uma chave k ∈ {0, 1}n com probabilidade uniforme; • Enc(k,m) = (iv,G(k, iv)⊕m), desde que tanto k como m tenham k bits, e com iv sendo escolhido com distribuição uniforme; • Dec(iv, k, c) = G(k, iv)⊕ c, desde que tanto k como c tenham k bits. � A saída de G(k, iv) deve ser indistinguível de bits aleatórios, mesmo quando o adversário conhece iv (isto realmente ocorre, porque G é gerador pseudoalea- tório). 4.5.2 Ataques de Texto Claro Escolhido Consideramos agora a situação em que o adversário tem acesso limitado à função Enc: pode cifrar mensagens à vontade, mas não tem a chave k (suponha por exemplo que o adversário possa convencer alguém a cifrar para ele mensagens usando k). Experimento 4.37 (PRIV_CPA(Π,A, n)). 1. Uma chave k é gerada por Gen(1n); 2. O adversário recebe a entrada 1n e, podendo cifrar mensagens com Enck, nos devolve duas mensagens m0 e m1, ambas de mesmo tamanho; 3. Um bit b é escolhido aleatoreamente, e a mensagem correspondente é en- criptada: c = Enck(mb). Este texto cifrado (o �desa�o�) é enviado a A; 4. A, ainda podendo usar Enck, responde um bit b′; 5. O resultado do experimento é um se b = b′ e zero em caso contrário. D AEnck b ∈R {0, 1} k ← { 0, 1 } b = b′ → 1 b 6= b′ → 0 1n m0,m1 Enck(mb) b′ Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 4.5. CIFRAS DE FLUXO 61 � De�nição 4.38 (Segurança contra ataque de texto claro escolhido). Um crip- tossistema simétrico Π tem indistinguibilidade contra ataques de texto claro es- colhido se para todo adversário A existe uma função desprezível negl tal que, Pr[PRIV_CPA(Π,A, n) = 1] ≤ 1 2 + negl(n). � Notas Pseudoaleatoriedade é objeto do livros de Goldreich [85] e (mais antigo) de Luby [149]. O assunto também é abordado em outros livros, de Goldreich [87] e Kranakis [140]. A demonstração do Teorema 4.16 (a corretude do método para geração de números naturais) pode ser encontrada no livro de Shoup [198]. Há uma demonstração do Teorema de Yao no livro de Delfs e Knebl [66]. Há um interessante livro [59], de Thomas Cusick, Cunsheng Ding e Ari Renwall que estuda aspectos de cifras de �uxo relacionados a Teoria de Números. Os postulados de Golomb foram a primeira tentativa de formalizar a ideia de sequência pseudoaleatória. Seu livro de 1967 foi revisado em 1982 [96]. O livro de Daniel Neuenschwander [167] sobre métodos estatísticos em Criptogra�a aborda diversos testes para números aleatórios. O livro de Golomb e parte do livro de Neuenschwander tratam de registradores de deslocamento linearmente realimentados (linear feedback shift registers). Sequências geradas por LFSRs são estudadas extensivamente nos livros de Golomb [96], de Lidl e Niederreiter [146], e de Golomb e Gong [97]. O livro de Klein [133] traz uma discussão detalhada sobre cifras de �uxo, incluindo uma apresentação teórica de registradores de deslocamento e seu uso em construções práticas. Um dos primeiros a de�nir baterias de teste para aleatoriedade foi George Marsaglia, que criou a bateria de testes �Die Hard�. Há baterias de testes de�nidas pelo NIST [169]. Exercícios Ex. 19 � Calcule a autocorrelação e a complexidade linear das sequências, com deslocamentos 1, 2 e 3: a) 01101011 b) 10101010 c) 11101010 d) 100101101101 Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 62CAPÍTULO 4. GERADORES PSEUDOALEATÓRIOS E CIFRAS DE FLUXO Ex. 20 � Construa programas que calculem a autocorrelação e a complexi- dade linear de sequências de bits. Ex. 21 � Descreva em pseudocódigo um algoritmo que veri�que, para sequên- cias de bits, os postulados de Golomb. Calcule a complexidade de tempo de seu algoritmo. Ex. 22 � Sobre LFSRs, responda: i) Porque um LFSR tendo uma sequência de zeros como estado inicial gerará somente zeros? ii) Existe uma família de LFSRs que só gere uns? iii) Que LFSRs geram tanto zeros como uns? Ex. 23 � Prove que toda m-sequência satisfaz os postulados de Golomb. Ex. 24 � Uma sequência de bits é de deBrujin binária de ordem k se cada sequência binária de comprimento k aparece exatamente uma vez. Generali- zando, uma sequência de deBrujin n-ária de ordem k é uma sequência sobre um alfabeto de tamanho n onde cada sequência de comprimento k aparece uma única vez. i) Quantas sequências de deBrujin m-árias de ordem n existem? ii) Prove que m-sequências são de deBrujin, e diga para que ordem. Ex. 25 � Demonstre o Teorema 4.17 Ex. 26 � Na demonstração do Teorema 4.34 há um pequeno detalhe que omitimos: é possível que as duas mensagens, 0n e 1n, resultem no mesmo texto cifrado. a) Demonstre que isso deve necessariamente ser possível. b) Complete a demonstração tratando também deste caso. Ex. 27 � Mostre que se a sequência X tem período p e k|p, então a autocor- relação de X com deslocamento k é igual a um. Ex. 28 � Demonstre que a Construção 4.36 é segura contra ataques de múl- tiplos textos cifrados conhecidos. Ex. 29 � Implemente os geradores de Blum-Micali e Blum-Blum-Shub. Ex. 30 � Um gerador por congruência linear funciona da seguinte maneira: dados parâmetros a, b, n e uma semente s < n, x0 = s xi = axi−1 + b (mod n) Mostre que este tipo de gerador não é seguro. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 4.5. CIFRAS DE FLUXO 63 Ex. 31 � Construa despretensiosamente4 sua própria cifra de �uxo, usando um LFSR e uma função não linear. 4O Exercício 59, do Capítulo 6, pede que você quebre sua cifra. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 64CAPÍTULO 4. GERADORES PSEUDOALEATÓRIOS E CIFRAS DE FLUXO Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini Capítulo 5 Cifras de Bloco Cifras de bloco operam em sequências de bits de tamanho �xo. Para encriptar mensagens de tamanho maior que o do bloco da cifra, é necessário quebrar a mensagem em blocos consecutivos. No Capítulo 4 usamos geradores pseudoaleatórios para criar cifras de �uxo, fazendo ou exclusivo das mensagens com a sequência gerada de bits. Neste Capítulo usaremos como fundamento para cifras de bloco permutações pseu- doaleatórias, semelhantes em espírito aos geradores pseudoaleatórios, mas que trabalham com sequências de tamanho �xo. Ao invés de usarmos uma única função para encriptar mensagens, mudare- mos a função cada vez que Enc for usada. m seletor k F1 F2 ... Fn F1(m) F2(m) Fn(m) Suponha que temos um conjunto de funções Fi : {0, 1}n → {0, 1}n que poderiam ser usadas para encriptar mensagens. Podemos criar uma função F : {0, 1}n × {0, 1}n → {0, 1}n, onde o primeiro argumento é o índice usado para escolher qual Fi queremos usar. F é chamadade função indexada por chave. Denotaremos Fk(m) ao invés de F (k,m). Com |k| = n, podemos indexar 2k possíveis funções. No entanto, há muito mais funções com tamanho de entrada e saída igual a n bits. Cada função de n em n bits pode ser representada por sua tabela verdade, que tem n colunas e 2n linhas. Assim, cada uma destas funções pode ser repre- sentada por n2n bits � e cada string de n2n bits representa uma única função. A quantidade de cadeias de comprimento n2n é 2n2 n (ou ainda, (2n)(2 n)). 65 Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 66 CAPÍTULO 5. CIFRAS DE BLOCO Assim, usamos k como índice para escolher 2n dentre (2n)(2 n) funções. Uma função indexada por k desta forma não pode então induzir distribuição uniforme sobre todas as funções com entrada e saída de n bits, porque haverá funções que não poderão ser representadas. Queremos que a segurança de nossa construção criptográ�ca esteja na escolha da função. Assim, se permitirmos ao adversário acesso a uma função Fk (sem o índice k), ele não deve ser capaz de distinguir Fk de uma função qualquer escolhida ao acaso dentre todas as (2n)(2 n) possíveis funções com entrada e saída de n bits. Em outras palavras, a distribuição das 2n funções indexadas por k deve ser indistinguível da distribuição das (2n)(2 n), que é uniforme. Na De�nição 5.1, o algoritmo D tem o objetivo de tentar realizar esta distinção. De�nição 5.1 (Função Pseudoaleatória). Seja F : {0, 1}n × {0, 1}n → {0, 1}n uma função computável polinomialmente e que preserva o tamanho da entrada. F é pseudoaleatória se, para todo algoritmo polinomial D, existe uma função desprezível negl tal que∣∣∣Pr[D(Fk(·), 1n) = 1]− Pr[D(f(·), 1n) = 1]∣∣∣ ≤ negl(n), onde k é escolhido com distribuição uniforme sobre {0, 1}n e f é escolhida com distribuição uniforme sobre o conjunto de todas as funções com domínio e con- tradomínio {0, 1}n. O algoritmo D(Fk, 1n) executa em tempo polinomial em n (por isso denotamos 1n e não simplesmente n) e tem livre acesso à função Fk (mas não ao seu índice). � O Exercício 32 pede a demonstração de que toda função pseudoaleatória é de mão única. 5.1 Esquemas de Encriptação usando Funções Pseu- doaleatórias A di�culdade do adversário em determinar a função Fk escolhida pode ser usada para construir criptossistemas: poderíamos criar uma função Enc tal que Enck(m) = Fk(m). No entanto, este criptossistema seria determinístico, e portanto não seria resis- tente a ataques de múltiplos textos cifrados conhecidos. Para introduzir aleatoriedade podemos fazer r ∈R { 0, 1 }n , Enck(m) = 〈r, Fk(r)⊕m〉 , e enviar r junto com o texto encriptado. Como esperamos que a saída da função pseudoaleatória seja indistinguível de bits aleatórios, o ou exclusivo dela com m tem o efeito que desejamos. Temos assim o seguinte criptossistema usando funções pseudoaleatórias: Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 5.1. ESQUEMAS DE ENCRIPTAÇÃOUSANDO FUNÇÕES PSEUDOALEATÓRIAS67 Construção 5.2. Seja F : {0, 1}n × {0, 1}n → {0, 1}n uma função pseudoa- leatória. As seguintes funções são um criptossistema com tamanho de chave e mensagem igual a n: • Gen(1n) escolhe uniformemente uma chave em {0, 1}n. • Enck(m): escolha r ∈R { 0, 1 }n, e retorne 〈r, Fk(r)⊕m〉 . • Deck(r, c) = Fk(r)⊕ (c) � Construção 5.3. Seja Π∗ igual ao sistema de Construção 5.2 exceto por não usar Fk: ao invés disso, Π∗ seleciona uniformemente uma das (2n)(2 n) funções f de n em n bits (não conseguiríamos construir Π∗ na prática, mas ele servirá ao nosso argumento). � O Criptossistema Π∗ é equivalente ao one-time pad. Lema 5.4. Seja Π∗ o criptossistema da Construção 5.3 e A um adversário executando em tempo polinomial. Seja p(·) o polinômio dando o número de consultas feitas pelo adversário A ao oráculo Enck(·) no experimento 4.37. A probabilidade de b = b′ é Pr [PRIV_CPA(Π,A, n) = 1] ≤ 1 2 + p(n) 2n Demonstração. Cada vez que Enck é usada (tanto por Π∗ como pelo adversário A no experimento PRIV_CPA), um novo r é escolhido. Dado que temos um r, a probabilidade de r ser escolhido novamente é 12n . Suponha agora que no experimento o texto encriptado c = 〈 rc, f(rc)⊕mb〉 seja enviado a A. Há dois casos a tratar: • rc é usado por A em suas consultas ao oráculo que lhe permite usar f . Chamaremos este evento de RUIM . Quando isso acontece, A terá sucesso e b = b′. A fará uma quantidade polinomial de consultas ao oráculo. Seja então p(.) o polinômio que dá a quantidade de consultas. A probabilidade de b = b′ é 1 2n + 1 2n + · · ·+ 1 2n = p(n) 2n . • rc nunca é usado por A nas consultas ao oráculo; este evento é o comple- mento do anterior, e o denotaremos por RUIM . Neste caso o experimento é o mesmo que o Experimento 2.8 para o one-time pad, e a probabilidade de b = b′ é 12 . Concluímos que Pr [PRIV_CPA(Π∗,A, n) = 1] é Pr [PRIV_CPA(Π∗,A, n) = 1 ∧RUIM ] + Pr [ PRIV_CPA(Π∗,A, n) = 1 ∧RUIM ] ≤ Pr(RUIM) + Pr [ PRIV_CPA(Π∗,A, n) = 1|RUIM ] ≤ p(n) 2n + 1 2 . � Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 68 CAPÍTULO 5. CIFRAS DE BLOCO Teorema 5.5. O criptossistema descrito na Construção 5.2 é CPA-seguro. Demonstração. Seja g(n) uma função que nos diz quão acima de 12 é a proba- bilidade de sucesso do criptossistema Π no experimento PRIV_CPA: g(n) = Pr [PRIV_CPA(Π,A, n) = 1]− 1 2 , e então Pr [PRIV_CPA(Π,A, n) = 1] = g(n) + 1 2 . A diferença entre a probabilidade de sucesso para Π, que acabamos de calcular, e a probabilidade de sucesso para Π∗, dada pelo Lema 5.4, é∣∣∣∣(12 + g(n) ) − ( 1 2 + p(n) 2n )∣∣∣∣ = ∣∣∣∣g(n)− p(n)2n ∣∣∣∣ , e há então dois casos: • g(n) é desprezível. Se assim for, Π é CPA-seguro (pela de�nição de segu- rança CPA); • g(n) não é desprezível. Neste caso conseguiríamos distinguir Fk de f esco- lhida ao acaso, distinguindo Π da Construção 5.2 de Π∗ da Construção 5.3 � mas como F é função pseudoaleatória, isso não pode acontecer. � 5.2 Permutações Pseudoaleatórias Trataremos agora de permutações pseudoaleatórias, que são funções pseudoale- atórias bijetoras. De�nição 5.6 (Permutação indexada). Uma função indexada F é chamada de permutação se para todo k, Fk é bijetora. Quando Fk e F−1k são computáveis em tempo polinomial, dizemos que F é e�ciente. � Quando Fk é indistinguível de f escolhida ao acaso dentre todas as permu- tações de n bits, dizemos que é uma permutação pseudoaleatória. De�nição 5.7 (Permutação Pseudoaleatória). Uma permutação indexada F é pseudoaleatória se, para todo k escolhido uniformemente ao acaso, todo adver- sário polinomial D, toda f escolhida ao acaso dentre todas as permutações de n bits, existe uma função desprezível negl tal que∣∣∣Pr [D(Fk, 1n) = 1]− Pr [D(f, 1n) = 1] ∣∣∣ ≤ negl(n). � Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 5.3. MODOS DE OPERAÇÃO 69 Note que de acordo com a de�nição de permutação pseudoaleatória o ad- versário só tem acesso a Fk. Se re�zermos a De�nição 5.7 dando ao adversário acesso a F−1k , teremos uma permutação pseudoaleatória forte. 5.3 Modos de Operação Dada uma permutação pseudoaleatória Fk para n bits, suponha que uma men- sagem tenha tamanho maior que n. Podemos encriptar pedaços diferentes da mensagem, um de cada vez. Por exemplo, c1..n = F (k,m1..n) cn+1..2n = F (k,mn+1..2n) c2n+1..3n = F (k,m2n+1..3n) ... Um modo de operação de um esquema de encriptação usando permutações pseudoaleatórias é a maneira como a permutação é usada para construir um criptossistema simétrico. Esta seção traz apenas os modos de operação mais conhecidos. Todos os modos de encriptação descritos neste texto, exceto o primeiro (�ECB�), tem segurança CPA. Somente apresentamos a demonstração para um deles, porque para os outros casos as demonstrações são demasiado longas. 5.3.1 ECB � Electronic Code Book No modo ECB, cada bloco é encriptado independentemente com a chave k. F k F k F k m 1 2 3 m m cc c 12 3 Por ser determinístico, o modo ECB é completamente inseguro: não oferece indistinguibilidade contra ataque de múltiplos textos cifrados conhecidos; na verdade, há nele uma fragilidade ainda mais básica: dois blocos iguais de uma mensagem serão transformados em dois blocos iguais no texto encriptado. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 70 CAPÍTULO 5. CIFRAS DE BLOCO 5.3.2 CBC � Cipher Block Chaining No modo CBC, a mensagem passa por um ou-exclusivo com o vetor de iniciali- zação antes de ser usada como entrada para Fk. O bloco seguinte é encriptado usando a saída do anterior como vetor de inicialização. Enck(m) = 〈iv1, (c0, c1, · · · , cn)〉 , onde ci = Fk(ivi ⊕mi). O primeiro vetor de inicialização iv1 é escolhido ao acaso e para i > 1, ivi = ci−1. O modo CBC não é paralelizável: não é possível computar nem parcialmente um bloco sem antes computar o bloco anterior. Teorema 5.8. Se Fk é uma permutação pseudoaleatória e tanto iv como k são escolhidos ao acaso com distribuição uniforme, o modo CBC tem segurança CPA. 5.3.3 OFB � Output Feedback No modo OFB um vetor de inicialização é usado para gerar Fk; a saída de Fk é usada como vetor de inicialização para o próximo bloco. Para encriptar mensagens, fazemos ou-exclusivo de cada mi com a saída da i-ésima aplicação de Fk. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 5.3. MODOS DE OPERAÇÃO 71 F k F k F k m 1 2 3 m m cc c 1 2 3 iv + ++ iv Enck(m) = 〈iv1, (c0, c1, · · · , cn)〉 , onde ci = Fk(ivi)⊕mi. O primeiro vetor de inicialização iv1 é escolhido ao acaso e para i > 1, ivi = Fk(ivi−1). Assim como o modo CBC, o modo OFB não é paralelizável. No entanto, uma sequência de bits pode ser preparada com antecedência para vários blocos antes da encriptação (ou decriptação) das mensagens. Teorema 5.9. Se Fk é uma permutação pseudoaleatória e tanto iv como k são escolhidos ao acaso com distribuição uniforme, o modo OFB tem segurança CPA. 5.3.4 CTR � Contador No modo contador o vetor de inicialização é gerado e depois incrementado para cada bloco. Para encriptar o i-ésimo bloco, usa-se o contador somado com i como entrada para Fk, e o resultado é usado em um ou-exclusivo com a i-ésima parte da mensagem. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 72 CAPÍTULO 5. CIFRAS DE BLOCO Enck(m) = 〈ctr, (c0, c1, · · · , cn)〉 , onde ci = Fk(ctr + i)⊕mi. O modo CTR é paralelizável: cada bloco pode ser encriptado separadamente. Além disso, é possível encriptar ou decriptar o n-ésimo bloco isoladamente (ou seja, o modo CTR permite acesso aleatório). O Lema 5.10 é análogo ao 5.4, tendo demonstração semelhante àquele. Lema 5.10. Seja Π o modo CTR de encriptação usando uma função pseudoa- leatória F , e Π∗ o modo CTR, exceto que uma função verdadeiramente aleatória f é usada no lugar de F . Seja A um adversário polinomial restrito de forma que: (i) A pode realizar uma quantidade também polinomial em n de consultas a um oráculo; (ii) a quantidade de blocos em cada consulta ao oráculo é polinomial em n; (iii) a quantidade de blocos em m0 e m1 é polinomial em n. Então existe uma função desprezível negl tal que∣∣∣Pr[PRIV_CPA(Π,A, n) = 1]− Pr[PRIV_CPA(Π∗,A, n) = 1]∣∣∣ ≤ negl(n). O Lema 5.11 nos permitirá, junto com o Lema 5.10, demonstrar a segurança CPA do modo CTR. A demonstração é muito próxima da que é dada por Katz e Lindell [130]. Lema 5.11. Sejam Π∗ e A como no Lema 5.10. Então Pr[PRIV_CPA(Π∗,A, n) = 1] < 1 2 + negl(n). Demonstração. Durante o experimento PRIV_CPA(Π∗,A, n), o algoritmo de en- criptação é usado uma vez para encriptar m0,m1, e o oráculo é acessado por A uma quantidade p(n) de vezes. Seja k o tamanho dos blocos das mensagensm0,m1 enviadas no experimento, tal que k ≤ p(n), e ctr o valor do contador usado. Sejam ki e ctri os tamanhos dos blocos e o contador usados na i-ésima consulta feita por A ao oráculo. Assim, depois que as mensagens m0,m1 são encriptadas, A recebe f(crt∗ + 1), f(ctr∗ + 2), . . . , f(ctr∗ + k). Quando A consulta o oráculo pela i-ésima vez, ele recebe f(crti + 1), f(ctri + 2), . . . , f(ctri + ki). Identi�camos duas situações: aquela em que nenhum dos ctri+j é igual a algum ctr∗ + q; e aquela em que, para algum j, i e algum q, ctri + j = ctr∗ + q. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 5.3. MODOS DE OPERAÇÃO 73 • (Evento REPETE): se existem j, i e algum q tais que ctri + j = ctr∗ + q, A talvez possa identi�car a mensagem que foi enviada, porque sabe f(ctr∗+ q). Presumimos que a quantidade de blocos q é máxima, q = p(n). Denotamos por REPETEi o evento em que algum i é repetido, como acima. Assim, Pr[REPETE] ≤ Pr p(n)⋃ i=1 REPETEi = p(n)∑ i=1 Pr [REPETEi] . Dado um valor de ctr∗, para que REPETEi ocorra, ctri deve estar entre ctr∗− p(n) + 1 e ctr∗+ p(n)− 1, e portanto há (ctr∗+ p(n)− 1)− (ctr∗− p(n) + 1) + 1 = 2p(n) − 1 possíveis valores de ctri que resultam neste evento. Assim, Pr[REPETEi] = 2p(n)− 1 2n , de forma que Pr[REPETE] = p(n)∑ i=1 Pr [REPETEi] = p(n)∑ i=1 2p(n)− 1 2n < p(n)∑ i=1 2p(n) 2n = 2p(n)2 2n . • (Evento REPETE): neste caso, A não tem informação sobre qualquer um dos blocos encriptados f(ctr∗+ q) recebidos, e como ctr∗ é escolhido alea- toriamente e f é função verdadeiramente aleatória, a sequência de blocos cifrados é composta pelos blocos da mensagem, tendo sido passados por ou-exclusivo com bits aleatórios, da mesma forma que no one-time pad, e a probabilidade de b = b′ é 1/2. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 74 CAPÍTULO 5. CIFRAS DE BLOCO Finalmente, Pr[PRIV_CPA(Π∗,A, n) = 1] = Pr[PRIV_CPA(Π∗,A, n) = 1 ∧ REPETE] + Pr[PRIV_CPA(Π∗,A, n) = 1 ∧ REPETE] ≤ Pr[REPETE] + Pr[PRIV_CPA(Π∗,A, n) = 1 | REPETE] < 1 2 + 2p(n)2 2n = 1 2 + negl(n). � Teorema 5.12. Se Fk é uma permutação pseudoaleatória e tanto iv como k são escolhidos ao acaso com distribuição uniforme, o modo CTR usando Fk tem segurança CPA. Demonstração. Segue diretamente dos Lemas 5.10 e 5.11. � 5.4 Cifras de bloco Já de�nimos o comportamento de permutações pseudoaleatórias e determinamos diversas maneiras de usá-las (os modos de operação). Nos falta ainda tratar de métodos para a construção de cifras de bloco usando estas permutações. 5.4.1 Segurança de cifras de bloco As noções de segurança dadas anteriormente na análise da segurança de cifras de �uxo e de funções pseudoaleatórias eram baseadas em comportamento assin- tótico, e não fazem sentido para cifras de bloco, uma vez que estas trabalham com blocos e chaves de tamanho �xo. Ao invés disso, diremos que uma cifra de bloco é segura quando o melhor ataque contra ela tem complexidade de tempo igual à da busca exaustiva pela chave. Por exemplo uma cifra de bloco que trabalha com chaves de 256 bits é insegura se há algum ataque que exija uma quantidade de operações próxima de 2128, por exemplo (mesmo 2128 sendo um número muito grande). 5.4.2 Construção De�nição 5.13 (Cifra de Bloco). Uma cifra de bloco para chaves com n bits e mensagens com t bits é uma permutação indexada e�ciente F : {0, 1}n × {0, 1}t → {0, 1}t. � As chaves são portanto de tamanho n e os blocos de tamanho t. A de�nição de cifra de bloco não faz referência a permutações pseudoaleató- rias. Ao invés disso, uma permutação e�ciente indexada é usada. Isso porque, como já mencionamos, para cifras de bloco não faz sentido tratar de comporta- mento assintótico. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 5.5. ARQUITETURA DE CIFRAS DE BLOCO 75 Uma cifra de bloco deve ser indistinguível de uma permutação aleatória. In- felizmente não podemos usar diretamente permutações pseudoaleatórias: para representar uma permutação onde entrada e saída usam n bits precisaríamos de representar 2n! valores, e consequentemente teríamos que usar log(2n!) bits.Por exemplo, se quisermos que o bloco tenha 256 bits, precisaríamos de log(2256!) � algo inconcebível na prática. Na construção de cifras de bloco usam-se normal- mente funções representáveis de maneira mais compacta, que, do ponto de vista do adversário, parecem ser permutações pseudoaleatórias. 5.5 Arquitetura de cifras de bloco Há diferentes maneiras de organizar cifras de bloco. A seguir são destacados dois princípios básicos enunciados por Shannon e em seguida, três arquiteturas comuns de cifra de bloco são exploradas: redes de substituição e permutação, cifras de Feistel e esquemas de Lai-Massey. 5.5.1 Confusão e difusão Há dois conceitos básicos identi�cados por Claude Shannon no funcionamento de esquemas de encriptação, e que são claramente relacionados à arquitetura de cifras de bloco: • Confusão: a relação (estatística) entre o texto encriptado e a chave deve ser complexa o su�ciente para não permitir a obtenção da chave a partir do texto encriptado. • Difusão: a distribuição não-uniforme do texto claro não deve se re�etir no texto encriptado. Em outras palavras, o texto encriptado deve ter distribuição uniforme e independente da do texto claro � as redundâncias no texto claro são �diluídas�. A permutação das posições de bits da entrada é uma das maneiras de obter este efeito. 5.5.2 Rede de substituição e permutação Uma vez que não podemos representar uma permutação aleatória de todos os bits de um bloco, podemos tentar outra abordagem. Dividimos o bloco em pequenas partes menores e dentro de cada uma fazemos uma permutação alea- tória. Dizemos que esta operação introduz confusão no bloco original, e damos a estes pequenos blocos o nome de S-boxes (ou �caixas-S�). Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 76 CAPÍTULO 5. CIFRAS DE BLOCO SSS Como só permutamos bits dentro de pequenos blocos, alterações em uma parte da entrada causam modi�cações apenas na parte correspondente da saída. Introduzimos confusão, mas não difusão. Para conseguir difusão, tomamos a saída dos blocos e as distribuímos entre os outros (as modi�cações das S-boxes são �espalhadas�). À aplicação em sequência das S-boxes e à difusão de bits damos o nome de rodada. Uma rede de substituição e permutação normalmente executa várias ro- dadas, e ao �nal de cada rodada o resultado é combinado (normalmente usando ou-exclusivo) com uma chave. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 5.5. ARQUITETURA DE CIFRAS DE BLOCO 77 SS S K i S-boxes introduzem confusão passo de mistura traz difusão XOR com i-ésima chave Exemplo 5.14. Construiremos agora um protótipo de rede de substituição e permutação. A rede não é útil de forma alguma, a não ser como ferramenta didática. A �gura mostra quatro S-boxes que substituem dois bits cada, ligadas por uma permutação simples. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 78 CAPÍTULO 5. CIFRAS DE BLOCO Já a próxima �gura mostra a operação da rede para a entrada 1100. A entrada é dividida em partes, 11 e 00. A primeira parte, 11, é mapeada pela primeira S-box em 10, e a segunda parte, 00, é mapeada pela segunda S-box em 11. Os bits são permutados para a entrada de mais duas S-boxes, que transformam 11 em 01 e 01 em 10, resultando na saída 0110. J Sendo as S-boxes invertíveis, a cifra como um todo também o será � e as- sim será também uma permutação (porque é bijeção e preserva o tamanho da entrada). O projeto das S-boxes e dos passos de mistura deve ter como objetivo o efeito avalanche: uma mudança em um bit na entrada tem alta probabilidade de modi�car qualquer um dos bits da saída. 5.5.3 Rede de Feistel Redes de Feistel são parecidas com redes de substituição e permutação mas usam uma arquitetura diferente, não sendo necessário que as S-boxes sejam invertíveis. Em uma rede de Feistel a entrada é dividida em duas metades (esquerda e direita), denotadas Li e Ri. Em cada rodada, são calculados Li = Ri−1 Ri = Li−1 ⊕ fi(Ri−1,Ki) onde fi é uma função �xa para a cifra e Ki é a subchave para a i-ésima rodada. É comum que se use o ou-exclusivo como operação em redes de Feistel, mas na verdade pode-se usar outra operação (redes de Feistel exigem que as sequências de n/2 bits mais a operação + usada formem um grupo). A Figura a seguir mostra uma rodada de uma rede de Feistel. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 5.5. ARQUITETURA DE CIFRAS DE BLOCO 79 Exemplo 5.15. A S-box da segunda camada no exemplo 5.14 faz as seguintes substituições: f(00) = 10 f(01) = 11 f(10) = 00 f(11) = 01 De�niremos uma rede de Feistel simples usando esta S-box. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 80 CAPÍTULO 5. CIFRAS DE BLOCO A próxima �gura ilustra como a rede transforma a sequência de bits 1101 em 0011. J Uma característica importante das redes de Feistel é que sempre são inver- tíveis, mesmo que suas funções internas não o sejam. Teorema 5.16. Uma rede de Feistel sempre é invertível, independente da es- colha de sua função interna. Demonstração. Basta mostrarmos que uma rodada é invertível. E realmente: como Li é copiado de Ri−1, temos imediatamente Ri−1. Com Ri−1, f e Ri podemos calcular Li−1: Ri−1 = Li Li−1 = f(Ri−1)⊕Ri � Como as redes de Feistel tem entrada e saída de tamanho �xo e são invertíveis (e são bijeções), temos o seguinte Corolário: Corolário 5.17. Redes de Feistel são Permutações. Cifras de bloco são de�nidas como permutações, mas é mais natural analisar a segurança de uma cifra presumindo que ela é uma função pseudoaleatória, Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 5.5. ARQUITETURA DE CIFRAS DE BLOCO 81 e não uma permutação. Isso nos leva ao próximo Teorema, demonstrado por Michael Luby e Charles Racko�, que garante que se a função interna de uma rede de Feistel for uma função pseudoaleatória, então a permutação resultante da rede é pseudoaleatória, desde que a rede tenha pelo menos três rodadas. Mais precisamente, Luby e Racko� mostraram que a probabilidade de um ad- versário distinguir entre uma permutação verdadeiramente aleatória e uma cifra de Feistel de três rodadas construída com funções pseudoaleatórias é menor do que q2/2n. É muito importante observar que o enunciado do Teorema de Luby- Racko�, embora tenha alguma semelhança com a de�nição 4.7, de geradores pseudoaleatórios, é diferente em um aspecto: para PRGs usamos uma formula- ção assintótica (dissemos que sempre existe uma função desprezível maior que o valor); já aqui damos uma expressão exata. Fazemos isso porque, como já mencionamos, raciocínio assintótico não faz sentido para cifras de bloco. Teorema 5.18 (Luby-Racko�). Seja P ∗ uma permutação pseudoaleatória de n bits. Seja P a permutação de�nida por uma rede de Feistel para entrada de n bits com três rodadas, e funções internas F ∗1 , F ∗ 2 e F ∗ 3 , todas pseudoaleatórias. Seja D um adversário tentando distinguir P de P ∗ fazendo no máximo q consultas a um oráculo que lhe dê acesso a P . Então ∣∣∣Pr[D(P ) = 1]− Pr(D(P ∗) = 1]∣∣∣ ≤ q2 2n . 5.5.4 Construção de Lai-Massey Uma construção de Lai-Massey lembra uma rede de Feistel. Seja (G,+) um grupo e σ uma permutação em G. Um esquema de Lai- Massey com r rodadas em G é Λσ(F1,F2,...,Fr) = Λ σ (F2,...,Fr) (x+ σ(F (x− y)), y + F (x− y)) Λσ(F ) = (x+ F (x− y), y + F (x− y)) Em cada rodada a mensagem é dividida em duas partes, x e y; calcula-se então a diferença x− y, que é usada como entrada para uma função F . A saída de F é somada às duas metades. A Figura a seguir mostra uma rodada de uma construção de Lai-Massey, onde denotamos por x0, y0 a entrada da primeira rodada, e por x1, y1 a saída. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 82 CAPÍTULO 5. CIFRAS DE BLOCO 0 0 1 1 x y x y F σ Para que a construção deLai-Massey tenha a mesma garantia de segurança das redes de Feistel, a permutação σ deve ser um ortomor�smo). De�nição 5.19 (ortomor�smo). Seja (G,+) um grupo. Uma permutação θ : G → G é um ortomor�smo se γ : G → G, tal que γ(x) = θ(x) − x, também é uma permutação. � Teorema 5.20 (Hall-Paige). Um grupo �nito comutativo tem um ortomor�smo se e somente se sua ordem é ímpar, ou se tem algum subgrupo isomorfo a Z22. Em particular, Z2m não tem ortomor�smos. Teorema 5.21. Seja Λσ a construção de Lai-Massey com permutação σ. Seja (z, t) = Λσ(F1,F2,...,Fr)(x, y) Se σ é ortomor�smo, então t− z tem distribuição uniforme. Demonstração. z − t = (σ(x+ F (x− y))− (x+ F (x− y))) + (x− y) = σ′(x+ F (x− y)) + (x− y). onde σ′(u) = σ(u) − u. Se σ′ é permutação e F tem saída com distribuição uniforme, então z − t tem distribuição uniforme. � Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 5.6. EXEMPLO: DES 83 O Teorema 5.22 é análogo para esquemas de Lai-Massey, ao Teorema de Luby-Racko� para redes de Feistel. Teorema 5.22. Seja G um grupo com cardinalidade |G| = 2n. Sejam F1, F2, F3 funções aleatórias independentes e C uma permutação aleatória em G. Seja também σ um ortomor�smo em G. Seja D um adversário tentando distinguir C de Λσ(F1,F2,F3), usando no má- ximo q acessos a um oráculo que dê acesso a Λσ(F1,F2,F3). Então ∣∣∣Pr[(Λσ(F1,F2,F3) = 1]− Pr[C = 1]∣∣∣ ≤ q(q − 1)(2−2n + 2−4n), menor que uma função desprezível no tamanho do grupo, desde que a quantidade de acessos ao oráculo seja polinomial. As cifras IDEA e FOX são construções de Lai-Massey. 5.6 Exemplo: DES Em 1976 um criptossistema desenvolvido pela IBM foi escolhido como padrão pelo National Bureau of Standards americano. Este criptossistema passou a ser conhecido com DES (Data Encryption Standard). Embora já muito antigo, o DES é importante como exemplo de arquitetura de cifra de bloco. O DES é uma rede de Feistel com chave de 56 bits e mensagens de 64 bits, usando 16 rodadas e oito S-boxes. Antes de aplicar a entrada na rede de Feistel, o DES realiza uma permutação inicial na entrada. Esta permutação é revertida na saída da rede. A próxima Figura ilustra o funcionamento do DES. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 84 CAPÍTULO 5. CIFRAS DE BLOCO Descreveremos a função interna do DES. Como em uma rede de Feistel metade dos bits da mensagem é usado de cada vez como entrada para a função interna, a entrada é de 32 bits. A função interna da rede de Feistel do DES funciona da seguinte maneira: os 32 bits da entrada são expandidos em uma string de 48 bits. Após um ou-exclusivo com a subchave, a entrada é dividida em oito S-boxes (note que usam-se S-boxes, típicas de redes de substituição-permutação, como parte da função interna desta rede de Feistel). Estas S-boxes têm seis bits de entrada e quatro de saída (donde se conclui que a função usada pelo DES na rede de Feistel não tem inversa). Depois, a saída tem 8× 4 = 32 bits. A Figura a seguir ilustra a função interna do DES. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 5.6. EXEMPLO: DES 85 5.6.1 Escalonamento de chaves O algoritmo de escalonamento de chaves do DES gera 16 chaves de 32 bits a partir da chave de 56 bits usada na entrada. O escalonamento de chaves do DES inicia com a aplicação de uma permu- tação PC − 1, dando origem a uma sequência de bits, que dividimos em duas metades C0 e D0. Tanto C0 como D0 são rotacionados para a esquerda. A quantidade de bits Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 86 CAPÍTULO 5. CIFRAS DE BLOCO rotacionados depende da iteração, conforme a tabela a seguir. iteração deslocamentos à esq 1 1 2 1 3 2 4 2 5 2 6 2 7 2 8 2 9 1 10 2 11 2 12 2 13 2 14 2 15 2 16 1 Assim, após a primeira iteração rotacionam-se C0 e D0 um bit para a direita; na segunda iteração, um bit, na terceira, dois bits, e assim por diante. Em cada iteração, aplica-se a permutação PC-2, para obter a i-ésima chave. A Figura a seguir ilustra o processo de escalonamento de chaves do DES. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 5.6. EXEMPLO: DES 87 5.6.2 3DES O único problema do DES é o tamanho de sua chave: hoje é possível a um adversário percorrer o espaço de chaves (de tamanho 256) em tempo aceitável. Uma maneira de aumentar a segurança do DES é aumentando o tamanho de sua chave. Não devemos, no entanto, modi�car internamente uma cifra de bloco � o DES resistiu a décadas de ataques da forma como foi criado, e pequenas mudanças na sua estrutura podem enfraquecê-lo. Uma primeira tentativa de aumentar o tamanho das chaves é simplesmente encriptar as mensagens duas vezes, usando duas chaves diferentes: F ′k1,k2 = Fk1(Fk2(m)). Infelizmente esta ideia não traz segurança adicional à cifra. O ataque descrito a seguir é chamado de ataque do encontro no meio1. Suponha que um adversário tenha um par (m, c), sabendo que foi encriptado duplamente como a descrevemos (c = Fk1(Fk2(m))). Ele deve procurar duas 1Meet-in-the-middle em Inglês. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 88 CAPÍTULO 5. CIFRAS DE BLOCO chaves tais que Fk1(m) = x = F −1 k2 (c). • O adversário efetua Enc(m) com todas as chaves possíveis. Ao encriptar m com uma chave ki e obter o texto encriptado xi, ele guarda o par ki, xi em uma tabela. • Depois, o adversário faz um procedimento semelhante: decripta c com todas as chaves possíveis, guardando pares (xi, ki). • Em seguida, ordena as duas tabelas geradas usando xi como chave. Ao encontrar uma entrada na tabela pares com o mesmo xi, ele guarda as chaves (ki, kj) em um conjunto de possíveis soluções. Se sortearmos duas chaves ao acaso, elas poderão satisfazer a Equação 5.6.2 com probabilidade 12n (para perceber isto, imagine as duas chaves como uma única cadeia de 2n bits). O conjunto de possíveis soluções terá aproximadamente 22n 2n = 2 n. Se o adversário tiver mais pares de mensagem e texto encriptado, este conjunto �cará menor e ele conseguirá facilmente identi�car a chave. Tentamos então de outra forma: encriptar, decriptar e encriptar novamente, usando chaves diferentes: F ′k1,k2,k3 = Fk1(F −1 k2 (Fk3(m))). O 3DES opera exatamente desta forma, e com três chaves de 56 bits passamos a ter 168 bits no total. O espaço de chaves de 2168 bits é mais do que su�ciente para os padrões modernos. A encriptação tripla desta maneira não é vulnerável ao ataque de encontro no meio. Infelizmente, o 3DES é muito lento (são necessárias três operações onde antes usávamos uma). Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 5.7. EXEMPLO: AES 89 5.7 Exemplo: AES O AES é uma rede de substituição e permutação com blocos de 128 bits. A chave pode ter 128, 192 ou 256 bits. Como em qualquer cifra de bloco, as mensagens são divididas em trechos de igual comprimento (os blocos). No entanto, no AES os blocos são representados como matrizes 4×4, onde cada elemento é um byte (note que o número total de bits será 4 × 4 × 8 = 128. Representamos então um bloco do AES da seguinte maneira: a0,0 a0,1 a0,2 a0,3 a1,0 a1,1 a1,2 a1,3 a2,0 a2,1 a2,2 a2,3 a3,0 a3,1 a3,2 a3,3 O AES é uma cifra de bloco iterada: as mesmas transformações (incluindo a mistura com a chave) são aplicadas em diversas rodadas. O número de rodadas (N no algoritmo) é dez para chaves de 128 bits, doze para chaves de 192 bits e catorze para chaves de 256 bits. O pseudocódigo do AES é mostrado a seguir. // primeira rodada: AddRoundKey // rodadas intermediarias: para i de 2 a N − 1: SubBytes ShiftRows MixColumns AddRoundKey // rodada final: SubBytes ShiftRows AddRoundKey • AddRoundKey realiza ou exclusivo do bloco com a chave da rodada atual; • SubBytes é o único passo não linear da cifra, e tem o objetivo de evitar ataques que explorem a estruturalinear da cifra; • ShiftRows desloca as linhas, para adicionar difusão; • MixColumns aplica uma transformação nas colunas para adicionar difusão. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 90 CAPÍTULO 5. CIFRAS DE BLOCO 5.7.1 Corpo de Rijndael O AES é de�nido usando um corpo �nito, que descrevemos brevemente. De�nição 5.23 (Corpo de Rijndael). OAES (Rijndael) trabalha com elementos do corpo �nito GF (28), usando o polinômio irredutível m(x) = x8 + x4 + x3 + x+ 1. como módulo. � Todo byte no AES é interpretado como um elemento do corpo de Rijndael. Tome, por exemplo, o byte 1C×: 1C× = 0001 1100 que é interpretado como o polinômio 0x7 + 0x6 + 0x5 + 1x4 + 1x3 + 1x2 + 0x+ 0x0 5.7.2 Passos do AES SubBytes Este passo substitui cada um dos bytes da entrada, usando S-boxes, tento como resultado a aplicação de uma função não-linear em cada byte. As S-boxes foram projetadas com dois objetivos em mente: • Não-linearidade: a amplitude máxima de correlação entre entrada e saída foi minimizada tanto quanto possível, e além disso, a probabilidade de propagação de diferenças foi também minimizada; • Complexidade algébrica: A expressão da S-box no corpo �nito GF (28) é bastante complexa, a �m de evitar o sucesso de ataques de criptanálise algébrica. Neste passo, cada byte é visto como elemento no corpo de Rijndael, e duas operações são usadas. A primeira consiste em inverter o elemento no corpo de Rijndael: g(a) = a−1 g(0) = 0 Como exemplo, calculamos g aplicada no byte 2A×. Primeiro mudamos 2A× para a base dois, a �m de extrair os coe�cientes do polinômio: 2A× = 0010 1010, portanto o polinômio que 2A× representa deve ser p(x) = x5 + x3 + x. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 5.7. EXEMPLO: AES 91 O inverso deste polinômio é p−1(x) = x7 + x4 + x3. Veri�camos: p(x)p−1(x) = x12 + x10 + x9 + x8 + x7 + x6 + x5 + x4 (mod m) = 1. Assim, o inverso de 2A× é 1001 10002, ou 98× em hexadecimal. Depois de aplicada a transformação g, SubBytes aplica também uma trans- formação a�m f(x) = Ax+ b, onde A = 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 , b = 1 1 0 0 0 1 1 0 Observamos também que as substituições feitas por SubBytes são uma per- mutação caótica, e portanto não há a possibilidade de algum byte permanecer inalterado. ShiftRows O passo ShiftRows realiza transposições de bytes, tendo difusão como efeito. Como o tamanho do bloco é de 128 bits, cada uma das linhas é deslocada para a direita por 0, 1, 2 e 3 posições. Por exemplo: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 /−→//−→ ///−→ 1 2 3 4 6 7 8 5 11 12 9 10 16 13 14 15 A operação ShiftRows é facilmente invertível. Os critérios para o projeto deste passo foram • Difusão ótima: os quatro deslocamentos são diferentes; • Outros efeitos de difusão: os autores do AES consideraram este passo como defesa para diferentes ataques (criptanálise diferencial truncada, por exemplo). Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 92 CAPÍTULO 5. CIFRAS DE BLOCO MixColumns Cada coluna da matriz é interpretada como coe�cientes de um polinômio sobre GF (28) (porque são bytes).. Assim, uma coluna a0 a1 a2 a3 é interpretada como a3x3 + a2x2 + a1x+ a0, onde os coe�cientes ai são bytes (e portanto variam de 0 a 255 = FF×). Note que este polinômio não pertence ao corpo de Rijndael, porque seus coe�cientes não são binários (são bytes inteiros)2! Por exemplo, a coluna E0× 21× 0A× 72× é interpretada como 72×x 3 + 0A×x 2 + 21×x+ E0× = 114x3 + 10x2 + 33x+ 224. Cada um dos coe�cientes, por sua vez, pode ser visto como um polinômio de grau menor ou igual a sete. A operação MixColumns multiplica cada coluna pelo polinômio �xo c(x) = 3x3 + x2 + x+ 2. e o resultado é tomado módulo x4 + 1 (desta forma será um polinômio de grau menor ou igual a 3, e teremos uma nova coluna com quatro bytes). Por exemplo, a coluna 63× 2F× AF× A2× representa A2×x3 + AF×x2 + 2F×x+ 63×. A transformação MixColumns trocará esta coluna por (A2×x 3 + AF×x 2 + 2F×x+ 63×) · (3x3 + x2 + x+ 2) (mod x4 + 1), mas ao realizar a multiplicação dos polinômios, usa-se a aritmética no corpo de Rijndael! A Proposição a seguir nos dá uma maneira fácil de computar a multiplicação de polinômios módulo x4 + 1. 2Se representamos os elementos de GF (28) como polinômios, seus coe�cientes devem per- tencer a Z2. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 5.7. EXEMPLO: AES 93 Proposição 5.24. A multiplicação de dois polinômios a(x) = a3x3 + a2x2 + a1x+ a0 e b(x) = b3x3 + b2x2 + b1x+ b0 módulo x4 + 1 é dada por a(x)b(x) = b0 b3 b2 b1 b1 b0 b3 b2 b2 b1 b0 b3 b3 b2 b1 b0 a0 a1 a2 a3 Assim, o passo MixColumns realizará a multiplicação do estado por uma matrix � mas usando a multiplicação no corpo de Rijndael e soma em Z2. Exemplo 5.25 (Passo MixColumns do AES). Suponha que o estado atual seja B = F2× 02× 01× 33× 0A× 22× 22× FF× 01× 3E× F1× 2C× 10× B0× 0A× BB× Teremos a primeira coluna substituída por 02× 03× 01× 01× 01× 02× 03× 01× 01× 01× 02× 03× 03× 01× 01× 02× F2× 0A× 01× 10× , sendo que as multiplicações dos coe�cientes são feitas no corpo de Rijndael. O primeiro elemento da primeira coluna será transformado como segue. Mul- tiplicamos a primeira linha da matriz pela coluna, no corpo de Rijndael: F2× = 1111 0010⇒ x7 + x6 + x5 + x4 + x 0A× = 0000 1010⇒ x3 + x 01× = 0000 0001⇒ 1 10× = 0001 0000⇒ x4 As multiplicações, no corpo de Rijndael, tem os resultados a seguir. 02× ⊗ F2× = 0000 0010⊗ 1111 0010 = 1111 1111 03× ⊗ 0A× = 0000 0011⊗ 0000 1010 = 0001 1110 01× ⊗ 01× = 0000 0001⊗ 0000 0001 = 0000 0001 01× ⊗ 10× = 0000 0001⊗ 0001 0000 = 0001 0000 Somamos em Z2: 1111 1111 0001 1110 0000 0001 +0001 0000 1111 0000 Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 94 CAPÍTULO 5. CIFRAS DE BLOCO e o primeiro elemento será F0×. J Para �ns de implementação, a multiplicação pode ser realizada da seguinte maneira: a⊗ 1 = a a⊗ 2 = a� 1⊕ Y a⊗ 3 = (a� 1)⊕ Y ⊕ a, onde ⊕ é a operação de ou exclusivo, � é o operador de deslocamento para a esquerda (a � x desloca os bits de a x bits para a esquerda), e Y depende do primeiro bit de a antes de iniciar a operação: quando este bit é zero, Y = 0; quando é um, Y = 1b× Esta transformação é invertível e pode ser implementada e�cientemente, já que envolve poucas operações em bytes (deslocamento para a esquerda e ou exclusivo), todas disponíveis como instruções nativas em hardware. O passo MixColumns foi projetado com os seguintes critérios: • Dimensões: a operação é realizada em colunas de quatro bytes; • Linearidade: o passo é linear em GF (2); • Difusão: a transformação realiza difusão relevante; • Desempenho em processadores de oito bits: este foi um dos critérios para a seleção do AES como padrão. O concurso realizado pelo NIST tinha diversos requisitos além de segurança, e um deles era performance em dispositivos embarcados. AddRoundKey A chave é representada por uma matriz 4×4, assim como os blocos da mensagem, e a mistura do bloco com a chave é feita aplicando ou-exclusivo byte a byte. Claramente, a chave não é su�ciente para muitas rodadas. O AES usa um algoritmo de escalonamento de chaves, que, a partir da chave original, produz várias subchaves de rodada. Escalonamento de chave O escalonamento de chave do AES usa duas operações, • ou exclusivo com uma constante rcon • RotWord, que rotaciona palavras, contribuindo para a difusão na chave expandida • SubWord, a S-box do AES, contribuindo para a confusão Para cada rodada i, é de�nida uma constante rconi = (rci 0016 0016 0016), Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34- Jerônimo C. Pellegrini 5.8. FOX (IDEA-NXT) 95 onde rci é a representação, em bits, de um polinômio no corpo de Rijndael, de�nido a seguir. rci = x i−1. Por exemplo, rc6 é o polinômio x5, representado como 00010000. Já rc9 = x 8 (mod x8 + x4 + x3 + x+ 1) (corpo de Rijndael) = x4 + x3 + x+ 1, que é representado como rc9 = 000011011. Como os rci são constantes, podem ser apresentados em uma tabela. i 1 2 3 4 5 6 7 8 9 10 · · · rci 0116 0216 0416 0816 1016 2016 4016 8016 1b16 3616 · · · A operação RotWord toma uma palavra de quatro bytes e os rotaciona para a esquerda por um byte: RotWord(b0 b1 b2 b3) = (b1 b2 b3 b0). A operação SubWord recebe uma palavra de quatro bytes e aplica, em cada um deles, SubBytes, a S-box do AES. SubWord(b0 b1 b2 b3) = (SubBytes(b0) SubBytes(b1) SubBytes(b2) SubBytes(b3)). A chave para a i-ésima rodada do AES é composta de palavras de 32 bits W0,W1, . . . ,Wk; a quantidade de palavras depende da variante do AES. Para o AES-256, por exemplo, são necessárias oito palavras, portanto a chave de rodada é W0W1W2W3W4W5W6W7, portanto com 8× 32 = 256 bits. As subpalavras Wi são determinadas da seguinte maneira. Seja n o número de rodadas. Então, Wi = Ki i < n Wi−n ⊕ SubWord(RotWord(Wi−1))⊕ rconi/n i ≥ n, i ≡ 0 (mod n) Wi−n ⊕ SubWord(Wi−1) i ≥ n, n > 6, i ≡ 4 (mod n) Wi−n ⊕Wi−1 em outros casos. 5.8 FOX (IDEA-NXT) A cifra FOX é um esquema de Lai-Massey, e é a sucessora da cifra IDEA. Há variantes de FOX para blocos de 64 e de 128 bits. Da mesma forma que nas outras cifras de bloco apresentadas, há um algo- ritmo para escalonamento de chaves. A Figura a seguir mostra uma rodada do FOX64. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 96 CAPÍTULO 5. CIFRAS DE BLOCO f64 X1 X2 X3 X4 Ki Y1 Y2 Y3 Y4 Note que ⊕ é inversa de si mesma, por isso é a única operação usada. A função f64 na Figura é chamada de �função de rodada�, e realiza ou exclusivo com a chave de rodada, permutações e transformações lineares. Notas O conceito de função pseudoaleatória foi proposto por Oded Goldreich, Sha� Goldwasser e Silvio Micali [90]. Já permutações pseudoaleatórias (e a formaliza- ção do conceito de cifra de bloco) foram idealizadas por Michael Luby e Charles Racko� [150]. O Teorema 5.18 foi demonstrado por Luby e Racko� quando analisavam a segurança do DES. O DES foi desenvolvido na década de 1970 pela IBM, e um dos projetistas era Horst Feistel; o AES foi desenvolvido por Joan Daemen e Vincent Rijmen. A descrição do DES e do AES dadas aqui é super�cial. Uma descrição mais profunda do AES é dada por Daemen e Rijmen em um livro [61]. A União Soviética desenvolveu uma cifra de bloco bastante parecida com o DES. O padrão GOST 28147-89 de�ne a cifra, que usa blocos de 64 bits (GOST é um conjunto de padrões originalmente produzidos pela União Soviética3 � 3Hoje mantidos pela Comunidade de Estados Independentes (países antes membros da Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 5.8. FOX (IDEA-NXT) 97 GOST signi�ca padrão do estado em russo). A cifra era secreta até 1994, quando foi tornada pública. A cifra de bloco de�nida pelo GOST tem mais rodadas que o DES; o padrão não de�ne as S-boxes, que eram modi�cadas dependendo do contexto (o governo soviético decidia quem poderia usar quais conjuntos de S-boxes). A cifra IDEA [141] foi desenvolvida em 1991 por James Massey e Xuejia Lai, e sua arquitetura, com semelhanças com as redes de Feistel, mas também com características diferentes, é hoje conhecida como �arquitetura de Lai Massey�. A cifra FOX[126] foi criada por Pascal Junod e Serge Vaudenay como sucessora da cifra IDEA. Exemplos de redes de Feistel são as cifras Camellia (desenvolvida pela Mit- subishi) [6], Blow�sh (de Bruce Schneier) [186], e MARS (�nalista do concurso que selecionou o AES, desenvolvida pela IBM) [36]. Exercícios Ex. 32 � Seja F : { 0, 1 }n×{ 0, 1 }n → { 0, 1 }n uma função pseudoaleatória. Argumente que F deve ser de mão única. Ex. 33 � (Stinson) Prove que é possível decriptar a saída de uma rede de Feistel encriptando o texto cifrado, mas revertendo a ordem das subchaves usa- das em cada rodada. Ex. 34 � A respeito do Teorema de Luby-Racko�, analise os casos de redes de Feistel com apenas uma e apenas duas rodadas. Ex. 35 � O que acontece se retirarmos a permutação em cada rodada da construção de Lai-Massey? Ex. 36 � (Trappe/Washington) O modo CBC tolera erros no texto cifrado. Mostre que se há um erro em um bloco cj , somente dois blocos serão decriptados incorretamente (mostre quais). Ex. 37 � Prove o Teorema 7.10 (a demonstração dada é só um rascunho muito super�cial). Ex. 38 � Mostre4 que para o DES vale Enck(m) = Enck(m), onde x é a operação de complemento dos bits de x. Ex. 39 � Explique porque o ataque do encontro no meio não funciona para F ′k1,k2,k3 = Fk1(F −1 k2 (Fk3(m))). Ex. 40 � Observe apenas o passo SubBytes do AES. Se o repetirmos muitas vezes sobre uma mensagem, necessariamente voltaremos à mensagem original União Soviética). 4O Exercício 51 pede a descrição de um ataque que usa esta propriedade. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 98 CAPÍTULO 5. CIFRAS DE BLOCO (porque o número de con�gurações é �nito). Quantas vezes no máximo podemos iterar este passo sem repetir con�gurações? Ex. 41 � Você consegue usar o mesmo raciocínio usado na resposta do Exer- cício 40 para rodadas �quase� completa do AES, com todos os passos menos AddRoundKey? E para rodadas completas? Ex. 42 � Se você não leu a descrição algébrica do AES, tente determinar a inversa da operação MixColumns. Ex. 43 � O Teorema 5.22 trata da segurança de esquemas de Lai-Massey com pelo menos três rodadas. Mostre que, com menos que três rodadas, é fácil distinguir a saída de um esquema de Lai-Massey de uma permutação aleatória. Ex. 44 � Prove que a permutação usada na cifra FOX é de fato um ortomor- �smo. Ex. 45 � Desenvolva e implemente, despretensiosamente5, suas próprias ci- fras de bloco: a) Uma rede de permutação e substituição; b) Uma cifra de Feistel simples; c) Uma cifra de Feistel que usa S-boxes e permutações; d) Uma cifra de Lai-Massey. Será interessante que as S-boxes, permutações e �partes de cifras� em geral sejam parametrizáveis, para que seja possível mais tarde trocar facilmente uma S-box ou permutação da cifra sem ter que refazer completamente o programa. 5Dentre os exercícios do Capítulo 6, que trata de Criptanálise, há um (58) que sugere tentar quebrar estas cifras. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini Capítulo 6 Noções de Criptanálise Este Capítulo traz uma breve discussão de alguns métodos comuns de Cripta- nálise. Para isso construiremos (de maneira intencionalmente simplista e des- cuidada) uma rede de substituição e permutação, que analisaremos usando crip- tanálise linear e criptanálise diferencial. Também construiremos uma cifra de �uxo, que analisaremos usando criptanálise algébrica. 6.1 Uma rede de substituição e permutação Nossa rede terá entrada de 16 bits e quatro rodadas. Usaremos uma chave de 80 bits com escalonamento absolutamente simples: cada rodada usará uma parte da chave. A primeira rodada usará os primeiros 16 bits; a segunda rodada, os próximos 16 bits, e assim por diante. Após a última rodada aplicaremos uma última subchave, usando o total de 16× 5 = 80 bits. Inicialmente, presumimos que o esforço para obtenção da chave seja O(280), mas mostraremos que tal expectativa é ingênua. Os passos realizados em cada rodada da rede são descritos a seguir. • Substituição: A entrada será dividida em 4 S-boxes iguais (normalmente as S-boxes usadas em uma rodada são diferentes, mas usaremos apenas uma para simpli�car a exposição da rede). Cada S-box fará uma permu- tação e teremos 4 bits também na saída de cada S-box. A tabela a seguir mostra a S-box usada. Como a S-box tem entrada e saída de 4 bitsusa- mos todos os valores em hexadecimal, já que 24 = 16. Assim, o valor 0 deve ser lido como 0000, 1 como 0001, e assim por diante até E× = 1110 e F× = 1111. A linha superior mostra as entradas e a linha inferior mostra as saídas correspondentes. [ 0 1 2 3 4 5 6 7 8 9 A B C D E F 2 8 D 5 4 A C F E 3 B 9 7 1 6 0 ] 99 Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 100 CAPÍTULO 6. NOÇÕES DE CRIPTANÁLISE Por exemplo, se a entrada da S-box é 1011 veri�camos que 1011 = B× e a saída será 9, ou seja, a sequência de bits 1001. Nossa S-box é uma permutação simples (é bijeção e preserva o tamanho da entrada). Isso não é estritamente necessário para que a criptanálise linear funcione (uma S-box do DES, por exemplo, que tem entrada de seis bits e saída de quatro bits, também pode ser analisada usando esta técnica). • Permutação: Os 16 bits da saída do passo de substituição são permutados usando a seguinte tabela: 1 5 9 13 2 6 10 14 3 7 11 15 4 8 12 16 Esta tabela é semelhante àquelas vistas no Capítulo 5: os números repre- sentam as posições dos bits da entrada, e a ordem em que aparecem na tabela é a ordem em que aparecerão na saída. Como exemplo, o terceiro bit da entrada será o nono da saída, o quinto bit da entrada será o segundo da saída, e o primeiro e último bits não são trocados de lugar. O diagrama a seguir ilustra como os bits são reordenados. • Mistura com a chave: Após os passos de substituição e permutação um ou-exclusivo é feito com os 16 bits da chave. A saída de cada uma das S-boxes é distribuída para todas as quatro S-boxes da próxima rodada. A próxima �gura ilustra a rede de substituição e permutação, já com as quatro rodadas: as três primeiras consistem da aplicação de ou exclusivo com uma subchave seguida de um passo de substituição (com quatro S-boxes) e um de permutação. Na última rodada, ao invés de uma permutação temos mais um passo de mistura com chave, porque esta permutação de bits não seria útil (não seria propagada para uma próxima rodada, e pode ser trivialmente desfeita por qualquer atacante). Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 6.1. UMA REDE DE SUBSTITUIÇÃO E PERMUTAÇÃO 101 Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 102 CAPÍTULO 6. NOÇÕES DE CRIPTANÁLISE 6.2 Criptanálise linear A criptanálise linear trata de encontrar relações lineares entre bits de entrada e bits próximos da saída de uma cifra. Falamos de �relação (probabilística) linear� porque usamos representação binária de números e usamos aritmética módulo dois, onde a operação aditiva é o ou-exclusivo e a multiplicativa é o �e� lógico. Por exemplo, considere oito variáveis binárias a1, . . . , a4 e x1, . . . , x4. Podemos usar os ai como coe�cientes e os xi como variáveis de uma combinação linear a1x1 + a2x2 + a3x3 + a4x4 (mod 2), ou a1x1 ⊕ a2x2 ⊕ a3x3 ⊕ a4x4, onde �aixi� denota o �e� lógico de ai e xi. Como ai só pode valer um ou zero, cada ai tem o efeito de escolher quais xi participam do ou-exclusivo. Se a = 0110 e x = 1100, então a combinação linear ax é a1 · x1 ⊕ a2 · x2 ⊕ a3 · x3 ⊕ a4 · x4 = 0 · x1 ⊕ x2 ⊕ x3 ⊕ 0 · x4 = (0 · x1 ⊕ 0 · x4)⊕ x2 ⊕ x3 = 0⊕ x2 ⊕ x3 = x2 ⊕ x3 = 1⊕ 0 = 1. Presumimos que um atacante tem uma grande quantidade de pares de men- sagem/texto cifrado, todos gerados com a mesma chave. Após encontrar uma relação probabilística linear entre bits da entrada e bits da saída, conseguiremos obter a última subchave com esforço menor que o de uma busca exaustiva. A Figura mostra que estamos interessados em um valor V , que é extraído da última rodada da rede. Conhecendo alguma relação entre X e V , e conhecendo o valor da saída Y , podemos tentar deduzir algo a respeito da subchave k5 usada na última rodada. Analisaremos a parte da rede de substituição-permutação que não deve ser linear (ou seja, cuja saída não deveria ser representável como combinação linear da entrada): as S-boxes. Denotaremos por X e Y a entrada e a saída de uma S-box; por X1, X2, X3, X4 os bits de entrada e por Y1, Y2, Y3, Y4 os bits de saída. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 6.2. CRIPTANÁLISE LINEAR 103 O objetivo é encontrar variáveis aleatórias de�nidas por relações lineares do tipo Xi ⊕Xj ⊕ · · · ⊕Xm ⊕ Yk ⊕ Yl ⊕ · · · ⊕ Yn = 0 que tenham probabilidade distante de 1/2. 6.2.1 O Lema do Empilhamento A saída de uma rede de substituição e permutação deveria ser indistinguível da saída de uma permutação pseudoaleatória. Se escolhermos uma sequência de bits da mensagem mi, . . . ,mj e uma sequência de bits da saída cl, . . . , cm, seja p = Pr[mi ⊕ · · · ⊕mj ⊕ cl ⊕ · · · cm = 0]. Se c é a saída de uma função realmente aleatória, supomos que p é muito próxima de 1/2 � e a criptanálise linear é um método para identi�car casos onde isso não acontece. Começamos de�nindo esta �distância de 1/2�, que é um conceito central para a criptanálise linear. De�nição 6.1. O viés de uma variável aleatória binária Xi é εi = Pr(Xi) − 1/2. � O viés mede o quanto a probabilidade de um evento está acima de 1/2 (claramente o viés pode ser negativo, se Pr[Xi] < 1/2). Considere as entradas X1 e X2 na S-box que de�nimos. A expressão X1 ⊕X2 = 0 pode ser reescrita como X1 = X2. Suponha que as probabilidades de X1 e X2 sejam Pr[X1 = 0] = p1 Pr[X2 = 0] = p2. Se X1, X2 são independentes temos Pr[X1 = 0, X2 = 0] = p1p2 Pr[X1 = 0, X2 = 1] = p1(1− p2) Pr[X1 = 1, X2 = 0] = (1− p1)p2 Pr[X1 = 1, X2 = 1] = (1− p1)(1− p2). E portanto Pr[X1 ⊕X2 = 0] = Pr[X1 = X2] = p1p2 + (1− p1)(1− p2). Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 104 CAPÍTULO 6. NOÇÕES DE CRIPTANÁLISE Se p1 = 1/2 + ε1 e p2 = 1/2 + ε2, com |ε1| e |ε2| ≤ 1/2, então Pr[X1 ⊕X2 = 0] = 1 2 + 2ε1ε2 ou seja, ε1,2 = 2ε1ε2. O Lema do Empilhamento, que enunciamos a seguir, dá uma forma fechada para o cálculo do viés de diversas variáveis aleatórias binárias independentes. Lema 6.2. (Lema do Empilhamento) Sejam X1, X2, . . . , Xn variáveis aleatórias binárias independentes; seja εi o viés de Xi e ε1,2,...,n o viés de X1 ⊕ · · · ⊕Xn. Então Pr[X1 ⊕ · · · ⊕Xn] = 1 2 + 2n−1 n∏ i=1 εi, ou seja, ε1,2,...,n = 2 n−1 n∏ i=1 εi. Demonstração. Provamos por indução no número de variáveis. Para uma va- riável o resultado é claramente verdadeiro: (21−1)ε1 = ε1. O caso com duas variáveis já mostramos no texto, antes do enunciado do Lema. Nossa hipótese de indução é de que o Lema vale para k variáveis, com k ≥ 2. Mostraremos então a validade do Lema para k + 1. Para determinar o viés de X1 ⊕X2 ⊕ · · · ⊕Xik+1 , reescrevemos A = X1 ⊕ X2 ⊕ · · · ⊕Xik e X1 ⊕X2 ⊕ · · · ⊕Xik+1 = A⊕Xik+1 . Pela hipótese de indução, o viés de A é 2k−1Πkj=1εij . Já o viés de Xik+1 é εik+1 . Como sabemos calcular o viés para duas variáveis, basta fazê-lo para A e Xik+1 , obtendo 2 2k−1 k∏ j=1 εij εik+1 = 2k k+1∏ j=1 εij . � 6.2.2 Criptanálise da rede A tabela a seguir mostra o mapeamento dos bits de entrada nos de saída para a S-box que usamos em nossa cifra. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 6.2. CRIPTANÁLISE LINEAR 105 X X1 X2 X3 X4 Y1 Y2 Y3 Y4 Y 0 0 0 0 0 0 0 1 0 2 1 0 0 0 1 1 0 0 0 8 2 0 0 1 0 1 1 0 1 D 3 0 0 1 1 0 1 0 1 5 4 0 1 0 0 0 1 0 0 4 5 0 1 0 1 1 0 1 0 A 6 0 1 1 0 1 1 0 0 C 7 0 1 1 1 1 1 1 1 F 8 1 0 0 0 1 1 1 0 E 9 1 0 0 1 0 0 1 1 3 A 1 0 1 0 1 0 1 1 B B 1 0 1 1 1 0 0 1 9 C 1 1 0 0 0 1 1 1 7 D 1 1 0 1 0 0 0 1 1 E 1 1 1 0 0 1 1 0 6 F 1 1 1 1 0 0 0 0 0 Olharemos agora para combinações lineares (ou seja, somas de parte dos bits), tanto da entrada como da saída. Queremos veri�car quando a equação Xi1 ⊕Xi2 ⊕ · · · ⊕Xim ⊕ Yj1 ⊕ Yj2 ⊕ · · · ⊕ Yjn = 0 é verdadeira. Por exemplo, considere X3⊕X4 = Y1⊕Y2⊕Y3. A próxima tabela é obtida a partir da anterior com as seguintes modi�cações: • Apenas X3 e X4 são listados na entrada, e apenas Y1, Y2 e Y3na saída; • As colunas do meio mostram as duas combinações lineares, X3 ⊕ X4 e Y1 ⊕ Y2 ⊕ Y3; • As linhas em que as duas combinações coincidem estão destacadas. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 106 CAPÍTULO 6. NOÇÕES DE CRIPTANÁLISE X3 X4 X3 ⊕X4 Y1 ⊕ Y2 ⊕ Y3 Y1 Y2 Y3 0 0 0 1 0 0 1 0 1 1 1 1 0 0 1 0 1 0 1 1 0 1 1 0 1 0 1 0 0 0 0 1 0 1 0 0 1 1 0 1 0 1 1 0 1 0 1 1 0 1 1 0 1 1 1 1 0 0 0 1 1 1 1 0 1 1 1 0 0 1 1 0 1 0 1 0 1 1 1 0 1 1 0 0 0 0 0 0 0 1 1 0 1 1 0 0 0 0 1 0 1 0 0 1 1 1 1 0 0 0 0 0 Seja A = X3⊕X4⊕Y1⊕Y2⊕Y3. Esta variável será zero quando X3⊕X4 = Y1 ⊕ Y2 ⊕ Y3, ou seja, nas linhas em destaque. Esperamos que Pr[A = 0] seja aproximadamente 1/2 (quanto mais próximo de 1/2 melhor). No entanto, as colunas do meio coincidem 4 vezes e há 16 entradas, portanto Pr[A = 0] = 4/16 = 1/4. O viés de A é 1/4− 1/2 = −1/4. Para uma variável A qualquer (ou seja, para uma expressão linear qualquer) o número de coincidências pode �car entre zero e dezesseis. Se subtrairmos oito do valor, teremos um número entre −8 e +8 � que se dividido por 16 resultará no viés da variável (por exemplo, para A de�nida acima o valor seria (4− 8)/16 = −4/16 = −1/4). Construímos agora outra tabela: as linhas representam diferentes bits de X (combinações lineares de Xi), e as colunas representam bits de Y (combinações lineares de Yi). O elemento (i, j) da tabela é a quantidade de coincidências para ⊕X = ⊕Y menos oito. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 6.2. CRIPTANÁLISE LINEAR 107 ⊕Y ⊕X 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 +8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 +2 −2 0 −4 −2 −2 0 0 +2 −2 0 0 +2 +2 −4 2 0 +2 −2 0 +2 0 0 −2 +2 −4 0 +2 0 −2 −2 −4 3 0 0 0 0 −2 +2 +2 −2 +2 +2 +2 +2 0 +4 −4 0 4 0 −2 0 −2 +2 0 −2 +4 −2 0 −2 0 0 +2 −4 −2 5 0 0 −2 −2 +2 +2 0 0 −2 +2 +4 0 +4 0 +2 −2 6 0 +4 −2 +2 0 0 +2 +2 0 0 −2 −2 +4 0 −2 +2 7 0 +2 0 −6 0 −2 0 −2 0 −2 0 −2 0 +2 0 +2 8 0 +2 +2 0 −2 +4 −4 −2 −2 0 0 −2 0 −2 −2 0 9 0 0 +4 0 +2 −2 −2 −2 +2 +2 −2 +2 +4 0 0 0 A 0 +4 0 0 +4 0 0 0 0 +4 0 0 −4 0 0 0 B 0 −2 −2 0 0 −2 −2 0 +4 +2 +2 −4 0 −2 −2 0 C 0 0 +2 −2 0 +4 +2 +2 +4 0 −2 −2 0 0 +2 −2 D 0 −2 −4 −2 0 +2 0 −2 0 +2 −4 +2 0 −2 0 +2 E 0 −2 0 +2 +2 0 +2 −4 −2 0 −2 −4 0 +2 0 −2 F 0 0 −2 +2 +2 +2 −4 0 +2 −2 0 0 0 +4 +2 +2 Esta tabela é chamada de tabela de aproximação linear. Podemos veri�car o viés que já calculamos, de X3 ⊕ X4 ⊕ Y1 ⊕ Y2 ⊕ Y3: a linha é dada por 0011 = 3 e a coluna por 1110 = 14 = E×. E de fato, na posição (3, E×) temos −4 � o que signi�ca que o viés é −4/16 = −1/4, exatamente como calculamos anteriormente. Denotaremos por In a sequência de 16 bits na entrada das S-boxes da n- ésima rodada. De maneira semelhante, On é a sequência de 16 bits saindo das S-boxes da n-ésima rodada. Também denotaremos por Inj e O n j o j-ésimo dos 16 bits de In e On. Usaremos notação semelhante para as chaves de rodada: knj é o j-ésimo bit da chave da n-ésima rodada. A próxima �gura mostra In e On, além de �caminhos�, cuja natureza �cará clara no decorrer do texto. As S-boxes S1,1, S2,1, S3,2, S4,2 e S4,3 são ativas na aproximação que faremos. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 108 CAPÍTULO 6. NOÇÕES DE CRIPTANÁLISE Note que a �trilha� mostrada na rede não representa que tal entrada deve in�uenciar exatamente aqueles bits na rede. Signi�ca apenas que escolhemos um Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 6.2. CRIPTANÁLISE LINEAR 109 caminho que, com alta probabilidade, nos garantirá uma relação entre entrada e saída. Considere os bits 1 e 2 da entrada (ambos entram na S-box S11 como X1 e X2 após ou-exclusivo com bits de k1) e as seguintes variáveis aleatórias (cada uma com viés indicado entre parênteses): (+4/16) em S1,1 : X1 ⊕X2 = Y1 (+4/16) em S2,1 : X1 = Y2 ⊕ Y4 (−4/16) em S3,2 : X1 = Y2 ⊕ Y3 (−4/16) em S3,4 : X1 = Y2 ⊕ Y3. Reescrevemos: (+1/4) A1 = I 1 1 ⊕ I12 ⊕O11 = 0 (+1/4) A2 = I 2 1 ⊕O22 ⊕O24 = 0 (−1/4) A3 = I35 ⊕O36 ⊕O37 = 0 (−1/4) A4 = I313 ⊕O314 ⊕O315 = 0. É fácil identi�car cada variável aleatória na última �gura. Fazemos um ou- exclusivo de todas elas, de�nindo uma variável aleatória A: A = [A1 ⊕A2 ⊕A3 ⊕A4 = 0] O viés desta nova variável pode ser determinado usando o Lema do Empilha- mento, e é igual a ε1,2,3,4 = 2 3 4∏ i=1 εi = 8 ( 1 4 )( 1 4 )( −1 4 )( −1 4 ) = 1 32 . Expandimos A1 ⊕A2 ⊕A3 ⊕A4, obtendo (I11 ⊕ I12 ⊕O11) ⊕ (I21 ⊕O22 ⊕O24) ⊕ (I35 ⊕O36 ⊕O37) ⊕ (I313 ⊕O314 ⊕O315) Agora desenvolvemos esta expressão, reescrevendo as variáveis Ijk como ou- exclusivo do passo anterior com a subchave. Por exemplo, I11 → m1 ⊕ k11 I35 → O22 ⊕ k35. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 110 CAPÍTULO 6. NOÇÕES DE CRIPTANÁLISE Determinamos então que A1 ⊕A2 ⊕A3 ⊕A4 é igual a ([m1 ⊕ k11]⊕ [m2 ⊕ k12]⊕O11) ⊕ ([O11 ⊕ k21]⊕O22 ⊕O24) ⊕ ([O22 ⊕ k35]⊕O36 ⊕O37) ⊕ ([O24 ⊕ k313]⊕O314 ⊕O315), que é o mesmo que (m1 ⊕m2 ⊕ k11 ⊕ k12 ⊕ k21 ⊕ k35 ⊕ k313)⊕ O11 ⊕O11 ⊕O22 ⊕O24 ⊕O22 ⊕O36 ⊕O37 ⊕O24 ⊕O314 ⊕O315. Como x⊕ x = 0, (m1 ⊕m2 ⊕ k11 ⊕ k12 ⊕ k21 ⊕ k35 ⊕ k313) ⊕ O36 ⊕O37 ⊕O314 ⊕O315. Estamos interessados no caso em que A1⊕A2⊕A3⊕A4 = 0 (porque é como de�nimos nossa variável aleatória A), e sabemos que I46 = O 3 6 ⊕ k46 I48 = O 3 14 ⊕ k48 I410 = O 3 7 ⊕ k410 I412 = O 3 15 ⊕ k412, ou seja, podemos substituir O36 → I46 ⊕ k46 O37 → I410 ⊕ k410 O314 → I48 ⊕ k48 O315 → I412 ⊕ k412. Assim, (m1 ⊕m2 ⊕ k11 ⊕ k12 ⊕ k21 ⊕ k35 ⊕ k313) ⊕[I46 ⊕ k46]⊕ [I410 ⊕ k410]⊕ [I48 ⊕ k48]⊕ [I412 ⊕ k412] = 0. Como estamos interessados apenas na relação entre a entrada da rede e a saída I4, isolamos os bits de chave: Z = k11 ⊕ k12 ⊕ k21 ⊕ k35 ⊕ k313 ⊕ k46 ⊕ k410 ⊕ k48 ⊕ k412 Testaremos as chaves uma a uma � portanto podemos presumir que Z estará �xo em um ou em zero. Em um dos casos, o viés de A1 ⊕ A2 ⊕ A3 ⊕ A4 será +1/32, e no outro, −1/32. Conseguimos determinar então que o viés de m1 ⊕m2 ⊕ I46 ⊕ I410 ⊕ I48 ⊕ I412 (6.1) Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 6.2. CRIPTANÁLISE LINEAR 111 é ±1/32. Os bits da última chave (K5) que são combinados com a saída das S-boxes S4,2 e S4,3 são k55 · · · k512. Há 28 = 256 possíveis valores para estes bits, que são chamados de subchaves candidatas. Tendo o viés de A e uma quantidade su�ciente de pares (m, c) de texto claro e encriptado (todos com a mesma chave), podemos identi�car, dentre todas as subchaves candidatas, aquela para a qual a relação A (Equação 6.1) vale com a frequência que esperaríamos, dado o viés que calculamos. A Figura a seguir ilustra este processo. Quando a relação valer para um par, incrementamos o contador da subchave. O pseudocódigo a seguir mostra este processo. O vetor F contém os contadores de frequência (o algoritmo calcula, em Fk, a frequência de ocorrências para a k-ésima subchave). para cada subchave candidata k: Fk ← 0 para cada par (m, c): O4 ← c⊕ k // desfazemos ⊕ I4 ← S−1(O4) // inversa da S−box se m1 ⊕m2 ⊕ I46 ⊕ I410 ⊕ I48 ⊕ I412 = 0 Fk ← Fk + 1 Tendo as frequências da relação dada pela Equação 6.1 para cada subchave, tomamos a subchave com viés mais próximo de 1/32 e a usamos. Apresentamos a seguir os resultados de uma simulação, completando o exem- Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 112 CAPÍTULO 6. NOÇÕES DE CRIPTANÁLISE plo. Nesta simulação, usamos k1 = 0001 1011 1001 1001 k2 = 0010 1010 0011 0011 k3 = 1111 0000 0111 1000 k4 = 1011 1101 0100 0010 k5 = 1000 1001 1001 1100 A subchave que queremos encontrar é, portanto 10011001 (sublinhada acima). O número de pares de texto claro e encriptado que usamos é 1200. O ide- alizador da criptanálise linear, Mitsuru Matsui, argumentou que um número razoável de pares é 1 ε2 onde ε é o viés da relação linear que encontramos. Como temos ε = 1/32, concluímos que 1 (1/32)2 = 1024 pares são su�cientes. A próxima tabelamostra uma lista das chaves com o viés calculado da relação A = 0, onde A = m1 ⊕m2 ⊕ I46 ⊕ I410 ⊕ I48 ⊕ I412. Esperamos que o valor absoluto do viés �A da variável A para a chave correta seja próximo de 1/32 = 0.03125. Pode haver outras subchaves para as quais esta relação também valha com alta probabilidade, portanto podemos ter que buscar entre as diversas subchaves com �A mais próximos de 1/32. Nesta simulação, a subchave correta tem �A = 0.35. subchave |�A| 01010000 0.02325 01111011 0.02325 00011111 0.025 10111000 0.02525 10111110 0.0255 10010110 0.02625 01000011 0.0265 11011110 0.02675 00100000 0.02775 01101001 0.03025 00101110 0.033 10011001 0.035 Conseguimos, �nalmente, extrair oito bits da chave. Podemos repetir este processo para tentar obter subchaves para as outras duas S-boxes da última rodada, e posteriormente repetir o processo para as Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 6.3. CRIPTANÁLISE DIFERENCIAL 113 outras rodadas. Quando a chave tem muitos bits, o trabalho total dispendido na criptanálise linear de sucesso é muito menor do que a busca exaustiva pela chave. A chave tem 80 bits, e a busca exaustiva teria complexidade de tempo O(280). Com o trabalho já feito, �zemos uma busca em tempo O(28) para determinar oito dos bits. Restam 72 bits, e se os buscarmos exaustivamente teremos usado no total tempo O(272) + O(28), muito menor que O(280). Se conseguirmos repetir este processo para as outras S-boxes, duas por vez, a busca poderia levar tempo O(16×28) � um esforço muito pequeno quando comparado à busca exaustiva. 6.2.3 Escolha da trilha e resistência ao ataque A trilha que escolhemos no exemplo dado tinha quatro S-boxes. Deve ser claro que a probabilidade de sucesso do ataque linear é menor quando há mais S-boxes envolvidas e quando o viés das variáveis envolvidas é menor. O criptanalista deve encontrar trilhas que resultem em viés alto. Para cifras mais complexas e com mais rodadas do que a que construímos, isso pode ser feito usando técnicas de otimização combinatória (metaheurísticas). Por exem- plo, usando algoritmos genéticos (cada trilha é um indivíduo, e a função de adequação ao ambiente é o viés da trilha). 6.3 Criptanálise diferencial A criptanálise diferencial é outro conjunto de técnicas para encontrar fraquezas em construções criptográ�cas, particularmente aplicável a cifras de bloco. Con- siste basicamente em explorar as relações entre probabilidades de certos bits na mensagem e sua relação com a probabilidade de outros bits no texto cifrado. Dadas duas entradas X ′ e X ′′ para uma cifra, calculamos sua diferença ∆X e veri�camos a diferença entre as saídas Y ′ e Y ′′. Se a distribuição de ∆Y for muito distante de uniforme, podemos usá-la para acelerar a busca pela chave. Antes de mais nada é relevante recordar que em aritmética módulo dois a diferença entre dois números é igual ao ou exclusivo (0 − 0 = 0; 0 − 1 = 1; 1− 0 = 1; 1− 1 = 0). Sejam X ′ e X ′′ duas entradas para uma S-box. Estamos interessados na diferença entre estas entradas, que denotamos ∆X = X ′ ⊕X ′′. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 114 CAPÍTULO 6. NOÇÕES DE CRIPTANÁLISE Calculamos também as saídas da S-box Y ′ = S(X ′) e Y ′′ = S(X ′′), e observa- mos a diferença ∆Y = Y ′ ⊕ Y ′′. O par (∆X ,∆Y ) é chamado de diferencial. Idealmente, tendo �xado um ∆X , Pr[∆Y |∆X ] deveria ser igual a 1/2n para qualquer ∆Y . Isto infelizmente é impossível, como mostraremos adiante. Quando esta probabilidade é muito alta para algum diferencial (∆X ,∆Y ), ela pode ser usada para obter bits da chave. Escolhemos agora um ∆X e calculamos todos os possíveis X ′ e X ′′ que resul- tam em ∆X . Damos um exemplo usando a S-box que de�nimos anteriormente: se escolhermos ∆X = 0011, listamos todos os 16 valores de X ′, e para cada um deles teremos X ′′ = X ′ ⊕ 0011. Isto é feito na tabela a seguir. ∆X = 0011 X ′ X ′′ = X ′ ⊕∆X 0000 0011 0001 0010 0010 0001 0011 0000 0100 0111 0101 0110 0110 0101 0111 0100 1000 1011 1001 1010 1010 1001 1011 1000 1100 1111 1101 1110 1110 1101 1111 1100 A próxima tabela já mostra, para X ′ e X ′′, as saídas Y ′ e Y ′′ e a diferença ∆Y (ainda com ∆X �xo, igual a 0011). Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 6.3. CRIPTANÁLISE DIFERENCIAL 115 ∆X = 0011 X ′ X ′′ Y ′ Y ′′ ∆Y 0000 0011 0010 0101 0111 0001 0010 1000 1101 0101 0010 0001 1101 1000 0101 0011 0000 0101 0010 0111 0100 0111 0100 1111 1011 0101 0110 1010 1100 0110 0110 0101 1100 1010 0110 0111 0100 1111 0100 1011 1000 1011 1110 1001 0111 1001 1010 0011 1011 1000 1010 1001 1011 0011 1000 1011 1000 1001 1110 0111 1100 1111 0111 0000 0111 1101 1110 0001 0110 0111 1110 1101 0110 0001 0111 1111 1100 0000 0111 0111 Observamos as frequências de cada cadeia de quatro bits em ∆Y : 0101 2 0110 2 0111 8 1000 2 1011 2 A tabela a seguir mostra as frequências para cada diferencial (∆X ,∆Y ). ∆Y ∆X 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 2 2 0 0 4 0 2 0 2 0 0 2 2 0 2 0 4 0 0 0 4 0 0 2 0 2 0 0 2 0 2 3 0 0 0 0 0 2 2 8 2 0 0 2 0 0 0 0 4 0 2 4 0 0 0 2 0 0 4 2 0 0 2 0 0 5 0 0 2 0 2 0 0 0 2 2 0 2 2 0 0 4 6 0 0 0 2 0 0 0 2 4 2 0 0 2 0 2 2 7 0 2 0 0 2 2 0 2 0 0 2 0 0 2 4 0 8 0 0 0 2 0 0 2 0 0 0 2 4 4 0 0 2 9 0 2 0 0 2 2 2 0 0 2 0 0 2 2 2 0 A 0 2 2 2 0 0 2 0 0 2 2 2 0 0 2 0 B 0 0 0 2 2 0 0 0 2 0 0 4 2 2 2 0 C 0 0 0 0 0 4 2 2 0 4 2 2 0 0 0 0 D 0 0 0 4 4 2 0 2 0 0 0 0 0 2 0 2 E 0 0 2 2 4 0 0 0 2 0 2 0 2 0 0 2 F 0 4 4 0 0 0 0 0 0 0 0 0 2 2 2 2 Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 116 CAPÍTULO 6. NOÇÕES DE CRIPTANÁLISE As frequências que computamos para y = 0011 estão na linha 3. Idealmente, gostaríamos de construir uma S-box tal que para quaisquer ∆X e ∆Y , Pr[∆Y |∆X ] = 1 2n , ou seja, tal que todas as entradas na tabela de frequências sejam iguais a um. Lema 6.3. Todas as entradas na matriz de distribuição de diferença são pares. Além disso, a soma das entradas em qualquer linha ou coluna é igual a 2n. Teorema 6.4. Não existe S-box tal que para quaisquer ∆X e ∆Y , Pr[∆Y |∆X ] = 1 2n . Demonstração. Segue imediatamente do Lema 6.3. � Em nossa cifra, a saída Oi−1 de uma rodada é misturada com a chave ki da próxima, para somente depois servir de entrada para as S-boxes da i-ésima rodada. A diferença entre duas entradas para Ii, no entanto, não dependem da subchave ki, de acordo com o próximo Teorema. Teorema 6.5. Sejam O′(i−1) e O′′(i−1) saídas para a rodada i− 1 da rede; I ′(i) e I ′′(i) as entradas na i-ésima rodada. Sejam ∆I = I ′(i) ⊕ I ′′(i) ∆O = O ′(i−1) ⊕O′′(i−1) as diferenças na saída da rodada i − 1 e na entrada da rodada i. Então ∆I depende somente de ∆O, e não é in�uenciada pela subchave ki. Demonstração. O ou exclusivo das entradas é I ′(i) ⊕ I ′′(i) = ( O′(i−1) ⊕ ki ) ⊕ ( O′′(i−1) ⊕ ki ) = O′(i−1) ⊕O′′(i−1), ou seja, independente da chave ki. � Queremos encontrar taxas de propagação em cada rodada, de forma que o ou-exclusivo do diferencial na entrada de uma rodada seja o ou-exclusivo do di- ferencial de saída na rodada anterior, conseguiremos uma trilha de diferenciais. Presumimos que as taxas de propagação em diferentes rodadas são indepen- dentes, e assim multiplicamos as taxas em cada rodada para obter a taxa de propagação da trilha. Suponha que duas mensagens tenham diferençam1⊕m2 = 0000 0000 0000 0110. A diferença na entrada de S14 será 0110. Nas outras S-boxes, a diferença de entrada é zero, e portanto a diferença de saída também o será (m1 e m2 só diferem no último nibble). Podemos então analisar a propagação das diferenças traçando uma trilha como �zemos na criptanálise linear. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 6.3. CRIPTANÁLISE DIFERENCIAL 117 Usaremos 0110 como diferencial de entrada na S-box S14, e portanto o dife- rencial de entrada para a rede toda é 0000 0000 0000 0110. Denotaremospor O113..16 os bits de 13 a 16 de O 1 � que são a saída da S-box S14 � e usaremos notação semelhante para outros Ii e Oi. Na saída de S14 (ou seja, nos bits 13..16 de O1), teremos a diferença 0100 Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 118 CAPÍTULO 6. NOÇÕES DE CRIPTANÁLISE com probabilidade 4/16 = 1/4. Pr [ ∆(O113..16) = 0100|∆X = 0000 0000 0000 0110 ] = 1 4 . Na saída de S22 teremos 0110 com probabilidade 4/16 = 1/4. Portanto, Pr [ ∆(I35..8) = ∆(I 3/S33) = 0100|∆(O113..16) = 0110 ] = (1/4)2. Já em O3 temos Pr [ ∆(O35..8) = ∆(O 3 9..12) = 1100 ∣∣∆(O113..16) = 0110] = (14 )4 = 1 256 , muito maior que 1/2n = 1/65536. No processo de criptanálise usamos pares de texto claro com este valor para ∆X . A criptanálise diferencial termina de maneira parecida com a criptanálise linear, identi�cando subchaves e veri�cando a frequência da relação para cada possível subchave. Usamos muitos pares de mensagens (m∗,m∗∗) com diferença igual a 6 (ou seja, 0000 · · · 0110). gen_msg_dx (m,∆X): m′i ← mi ⊕∆X retorne m′ m∗ ← gen_msg(n) m∗∗ ← gen_msg_dx(m∗, 6×) c∗ ← enc_vector(m∗) c∗∗ ← enc_vector(m∗∗) Com alta probabilidade (1/256), a diferença entre os bits de S41 e S42 será 0110 0110. Para cada subchave candidata, decriptamos parcialmente muitos pares (c∗, c∗∗) resultando em (4∗, I 4 ∗∗) e observamos a diferença I 4 ∗ ⊕ I4∗∗. Quando esta for igual à diferença entre m∗ e m∗∗, incrementamos o contador para esta subchave. para cada subchave candidata k: Fk ← 0 para cada tupla (c∗, c∗∗,∆Y ) O4∗ ← c∗ ⊕ k // desfazemos ⊕ O4∗∗ ← c∗∗ ⊕ k I4∗ ← S−1(O4∗) // inversa da S−box I4∗∗ ← S−1(O4∗∗) se I4∗ ⊕ I4∗∗ = ∆Y Fk ← Fk + 1 Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 6.4. CRIPTANÁLISE ALGÉBRICA 119 A probabilidade de ∆Y = 6× para a subchave correta é 1/256, portanto basta dividir cada elemento do vetor F por N e veri�car os valores mais próximos de 1/256 = 0.00390625. É possível mostrar que uma quantidade razoável de pares de texto claro necessários para que a criptanálise tenha sucesso é aproximadamente c p onde p é a probabilidade que calculamos para o diferencial (em nosso exemplo, 1/256), e c é uma constante pequena. Simulamos um ataque usando 800 pares de texto claro gerados aleatoreamente (com os respectivos textos encriptados, evidentemente). Esta quantidade é mais que su�ciente, já que 1 (1/256) = 256. Simulando um ataque diferencial com esta cifra e com as mesmas chaves usadas no ataque linear, obtemos os dados na tabela a seguir. Fk/n é igual a 0.00375 para a chave correta � o valor mais próximo de 1/256 = 0.00390625 dentre todos. subchave Fk/n 11110100 0.00125 11111011 0.00125 11111100 0.00125 11111110 0.00125 00101011 0.0025 01010100 0.0025 01100100 0.0025 01101011 0.0025 01011011 0.00375 Assim como na Seção sobre criptanálise linear, conseguimos extrair oito bits da chave. 6.4 Criptanálise Algébrica A criptanálise algébrica se dá quando conseguimos representar a cifra como um sistema de equações (normalmente módulo dois, mas não necessariamente), e resolver o sistema. Suponha que a chave em nossa rede de substituição e permutação seja ge- rada a partir de uma chave inicial k0 = (KAKBKCKDKE), onde KA, etc são sequências de quatro bits. Por exemplo, KA = 0001 KB = 0110 KC = 1111 KD = 1010 Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 120 CAPÍTULO 6. NOÇÕES DE CRIPTANÁLISE então k0 = 0001 0110 1111 1010. Suponha agora que o escalonamento de chaves seja feito da seguinte maneira: k1 = k0 k2 = (KBKCKDKA) k3 = (KCKDKAKB) k4 = (KDKAKBKC) k5 = k2. Observamos que k2 = (k05..8k 0 9..12k 0 13..16k 0 1..4) k3 = (k09..12k 0 13..16k 0 5..8k 0 5..8) k4 = (k013..16k 0 5..8k 0 5..8k 0 9..12). Precisamos de modelos das S-boxes e da permutação como equações envol- vendo os bits de entrada e saída de cada uma. Sendo Yi o i-ésimo bit de saída da S-box e Xi o i-ésimo bit de entrada, a S-box pode ser descrita como Y1 = X1X2X4 ⊕X1X2X3 ⊕X1X2X3 ⊕X1X3X4 ⊕X1X3X4 Y2 = X1X3 ⊕X2X4 ⊕X1X3X4 Y3 = X1X2X4 ⊕X1X4 ⊕X2X3X4 ⊕X1X2X3 Y4 = X2X3 ⊕X1X3X4 ⊕X1X2X3 ⊕X1X3X4. Aqui A é a negação de booleana de A, que é o mesmo que 1−A (mod 2). A rede inteira pode ser descrita então como um sistema de equações módulo dois. Por exemplo, o bit c1 é c1 = k 5 1 ⊕O41. Mas como sabemos que o primeiro bit de uma S-box pode ser descrito em termos das entradas da S-box, temos c1 = k 5 1 ⊕ I41I42I44 ⊕ I41I42I43 ⊕ I41I42I43 ⊕ I41I43I44 ⊕ I41I43I44 . Reescrevemos cada I4j em função de O 3 e k4, e continuamos até termos descrito completamente um sistema de equações. Como as equações tem grau três, o sistema é difícil de resolver, mas em muitos casos é possível. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 6.5. TÉCNICAS DE CRIPTANÁLISE RELACIONADAS 121 6.5 Técnicas de criptanálise relacionadas As técnicas de criptanálise linear e diferencial não são métodos fechados. Po- demos usar variantes e combiná-las com outras técnicas. Alguns exemplos são listados a seguir. • Criptanálise linear diferencial: • Chave relacionada: semelhante à técnica de criptanálise diferencial, mas tendo como objeto os pares de chaves ao invés de pares de texto claro. • Criptanálise diferencial impossível: semelhante à criptanálise diferencial, mas ao invés de procurarmos características diferenciais que tenham alta probabilidade, procuramos características com probabilidade zero (ou seja, que não deveriam acontecer). Notas A criptanálise linear foi introduzida por Mitsuru Matsui em 1993 em um artigo explorando possíveis ataques ao DES [154]. A criptanálise diferencial foi pro- posta inicialmente por Biham e Shamir em 1991, usando como exemplo uma cifra semelhante ao DES [25]. A apresentação para criptanálise linear e diferen- cial é semelhante em espírito àquelas feitas por Stinson em seu livro [210] e por Howard Heys em um relatório técnico [108]. Em 1994 Don Coopersmith, um dos responsáveis pela criação do DES na IBM, publicou um artigo [53] a�rmando que a IBM já em 1974 conhecia a técnica de criptanálise diferencial, e apontou medidas tomadas no projeto do DES para di�cultar o sucesso desse tipo de ataque. De acordo com Coopersmith, IBM e NSA decidiram manter diversos objetivos de projeto do DES em segredo para não levar facilmente à descoberta de ataques como a criptanálise diferencial. Posteriormente Eli Biham, durante seu doutorado, redescobriu a técnica de criptanálise diferencial, possibilitando a recuperação de todos os bits da chave do DES. A tese de Biham foi transformada em livro [27], em cujo prefácio se lê1 A criptanálise diferencial é o primeiro ataque capaz de quebrar o DES completo com 16 rodadas com complexidade menor do que 255. A fase de análise de dados computa a chave analisando cerca de 236 textos cifrados em tempo 237. Os 236 textos cifrados são obtidos durante a fase de coleta de dados, de um pool maior de 247 textos claros escolhidos usando um critério simples de repetição de bits que descarta mais que 99.9% dos textos cifrados assim que são gerados. Uma introdução à Criptanálise Algébrica com exemplos de cifras reais que- bradas é dada no livro de Gregory Bard [18]. A técnica de chaves relacionadas foi desenvolvida independentemente por Biham e Knudsen em 1993 [26, 136]. 1Tradução livre. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 122 CAPÍTULO 6. NOÇÕES DE CRIPTANÁLISE Há diversas outras técnicas de Criptanálise além das duas cobertas neste Capítulo. A criptanálise diferencial truncada é semelhante à criptanálise dife- rencial, exceto que apenas alguns dos bits das diferenças são levados em conside- ração [135]. É possível combinar criptanálise diferencial e linear, resultando no método descrito por Hellman e Langford, chamado de criptanálise diferencial- linear[106]. O uso de metaheurísticas em criptanálise é discutido extensivamente na tesede John Clark [48]. Bruce Schneier publicou na revista Criptologia um guia para estudo individual de Criptanálise [187], onde observa que só se aprende Criptanálise através da prática, e propõe diversas tarefas criptanalíticas para o leitor. O método de Quine-McCluskey, mencionado no exemplo de criptanálise algé- brica, é usualmente descrito em livros sobre circuitos digitais, como o de Nelson e outros [166], em seu terceiro Capítulo. Há outros métodos que dão o mesmo resultado � por exemplo, os mapas de Karnaugh, descritos no livro de Idoeta e Capuano [40]. Exercícios Ex. 46 � Use a tabela de aproximação linear exposta neste Capítulo para calcular: a) Pr[X1 ⊕X4 = Y3] b) Pr[X1 ⊕ Y1 = 0] c) Pr[X1 ⊕ Y2 = 0] d) Pr[X2 ⊕X3 ⊕ Y2 ⊕ Y3 = 0] Ex. 47 � A respeito da tabela de aproximação linear que calculamos: a) Porque a primeira coluna e a primeira linha estão zeradas, exceto pela posição (0, 0)? Isso é uma propriedade especí�ca desta S-box ou é algo que deva ser verdade sempre? b) Porque a soma de qualquer linha ou coluna é sempre +8 ou −8? Ex. 48 � Tente refazer o processo de criptanálise linear na cifra apresentada neste Capítulo, mas desta vez usando os bits 1 e 4 da entrada. Ex. 49 � Escolha uma das S-boxes do DES e construa sua tabela de aproxi- mação linear. Ex. 50 � Prove o Lema 6.3. Ex. 51 � Mostre como usar a propriedade descrita no Exercício 38 para di- minuir pela metade o tempo necessário para busca exaustiva pela chave do DES em um ataque de texto cifrado conhecido. Quantos pares de mensagem e texto cifrado são necessários?. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 6.5. TÉCNICAS DE CRIPTANÁLISE RELACIONADAS 123 Ex. 52 � Nos exemplos dados neste Capítulo, encontramos maneiras de de- terminar bits de subchaves da última rodada da cifra. Complete os exemplos, mostrando como o processo pode ser usado para obter os outros bits também. Ex. 53 � Suponha que alguém tenha proposto um ataque criptanalítico teó- rico a uma cifra de bloco. O bloco da cifra tem 80 bits e a chave, 128 bits. O ataque proposto funcionaria com 2100 operações em 2110 pares de mensagem e texto encriptado. Aponte um problema com este ataque. Ex. 54 � (Programação) Construa ferramentas computacionais que automa- tizem parte do processo de Criptanálise. Ex. 55 � Considere a S-box descrita neste Capítulo. Use-a para construir redes de Feistel com duas, quatro e doze rodadas, e tente atacá-las usando criptanálise linear e criptanálise diferencial. (A função interna da rede de Feis- tel deve ser a aplicação da S-box seguida de ou exclusivo com a subchave da rodada). Ex. 56 � Construa uma cifra usando o esquema de Lai-Massey onde a per- mutação é a S-box usada neste Capítulo e a função interna é uma substituição de bytes não linear e sem ponto �xo (semelhante ao passo SubBytes do AES). Tente fazer a criptanálise desta cifra com três, cinco e oito rodadas. Ex. 57 � Como construções de Lai-Massey não podem ter saída pseudoalea- tória com menos de três rodadas, adapte a cifra do Exercício 56 para funcionar com uma ou duas rodadas e faça uma análise estatística da saída da cifra. Tente em seguida identi�car maneiras de usar o que descobriu para quebrar a cifra. Ex. 58 � Faça a criptanálise das cifras que você desenvolveu no Exercício 45, no Capítulo sobre cifras de bloco. Ex. 59 � Faça a criptanálise da cifra que você desenvolveu no Exercício 31, no Capítulo sobre cifras de �uxo. Ex. 60 � Faça a criptanálise de uma versão simpli�cada do DES e prossiga aumentando a di�culdade da tarefa: a) Uma única rodada. b) Quatro rodadas, sem S-boxes (somente as permutações). c) Quatro rodadas completas. d) Seis rodadas completas. Ex. 61 � Esboce o início da criptanálise (linear ou diferencial) do AES. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 124 CAPÍTULO 6. NOÇÕES DE CRIPTANÁLISE Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini Capítulo 7 Resumos Criptográ�cos (funções de hashing) Funções de hashing (ou resumos criptográ�cos) tem um papel análogo, de certa forma, ao dos geradores pseudoaleatórios: enquanto um PRG expande sua se- mente em uma saída indistinguível de bits aleatórios, uma função de hashing comprime uma entrada (possivelmente de tamanho ilimitado) em um resumo de tamanho �xo, mas de tal forma que seja difícil encontrar duas entradas com a mesma saída. Por ora de�niremos formalmente funções de hashing que sejam resistentes à colisão, e nosso modelo ideal de função de hashing será uma função f(·) para a qual seja difícil encontrar x, x′ tais que f(x) = f(x′). Posteriormente, na Seção 7.6, trataremos de outra idealização de funções de hashing, chamada de oráculo aleatório. O oráculo aleatório, embora seja um modelo teoricamente muito bom, permitindo demonstrações que não seriam possíveis de outra forma, traz problemas conceituais em sua implementação prática. Em nossa de�nição de função de hashing usaremos um algoritmo Gen, que cria uma chave. De�nição 7.1 (Função de hashing). Uma função de hashing é um par (Gen, H) onde • Gen é uma função que determina uma chave a partir de um parâmetro de segurança n. Assim, Gen(1n) = s, com s ∈ {0, 1}n • Se s foi gerada por Gen(1n), então há um polinômio p(·) tal que H cria resumos com p(n) bits a partir de s e de uma entrada x de tamanho arbitrário: H(s, x) = y com x ∈ {0, 1}∗ e y ∈ {0, 1}p(n). � Usaremos Hs(x) ao invés de H(s, x). 125 Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 126CAPÍTULO 7. RESUMOS CRIPTOGRÁFICOS (FUNÇÕES DEHASHING) Consideraremos inicialmente funções de hashing onde a entrada não é de tamanho arbitrário, mas de tamanho �xo (maior que o tamanho da saída). Como de�nimos uma função com domínio maior que o contradomínio, cer- tamente haverá x e x′ diferentes tais que Hs(x) = Hs(x′). Chamamos a isso de colisão. Tentaremos construir funções de hashing que minimizem a pro- babilidade de colisão � ou, de maneira mais precisa, funções para as quais a probabilidade de colisão seja desprezível. De�nimos a seguir a propriedade de resistência a colisão para funções de hashing. Experimento 7.2 (HASH_COL(Π,A, n)). Neste experimento, Π é a função de hashing (Gen, H). • s é escolhida usando Gen; • s é enviada para A; • O adversário envia de volta dois textos, x e x′; • Se Hs(x) = Hs(x′) o adversário teve sucesso e o resultado do experimento é um. Caso contrário é zero. D A s← Gen(1n) Hs(x) = Hs(x′)→ 1 Hs(x) 6= Hs(x′)→ 0 1n x, x′ � De�nição 7.3 (Resistência a colisão). Uma função de hashing Π = (Gen, H) é resistente a colisão se para todo adversário polinomial A existe uma função desprezível negl tal que Pr [HASH_COL(Π,A, n) = 1] ≤ negl(n) � Há outras noções, mais fracas, de resistência a colisão: • Resistência de segunda pré-imagem: ao invés de enviar apenas s ao ad- versário, enviamos s e um texto x (ou seja, enviamos um elemento da pré-imagem de H(x), e pedimos ao adversário que encontre um segundo elemento da pré-imagem). O adversário terá então que encontrar outro texto x′ que tenha o mesmo resumo de x na função Hs; Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 7.1. ATAQUES E O PROBLEMA DO ANIVERSÁRIO 127 • Resistência de pré-imagem: Enviamos s e um resumo y para o adversário. Este y é o resultado da aplicação de H(x), para algum x escolhido uni- formemente. O adversário deve encontrar algum x′ tal que H(x′) = y (ou seja, dada a imagem H(x), o adversário deve encontrar algum elemento na pré-imagem de H(x)). Proposição 7.4. Toda função de hashing resistente a colisões tem resistência de segunda pré-imagem, e toda função com resistência de segunda pré-imagem tem resistência de pré-imagem. 7.1 Ataques e o problema do aniversário Suponha que temos uma função de hashing H com saída de tamanho n, e seja N = 2n o tamanho do conjunto de possíveis saídas de H. Escolha k diferentes entradas x1,x2, . . . , xk, todas com tamanho 2n e calcule seus resumos y1, y2, . . . , yk usando H. Suporemos que os valores yi = H(xi) são distribuídos uniformemente em {0, 1}2n. Esta situação está claramente relacionada ao problema do aniversário, des- crito no Apêndice A. Suponha que o adversário queria tentar encontrar colisões em uma função de hashing com n bits de saída calculando sucessivamente resumos de entradas escolhidas ao acaso. Denotaremos por N = 2n a quantidade de possíveis saídas da função, e por C o evento que representa a situação onde o adversário en- controu uma colisão. Presumiremos que o adversário usará k = √ N amostras. Temos então que sua probabilidade de sucesso será N 2N ≥ Pr[C] ≥ N − √ N 4N . Por exemplo, suponha que o tamanho da saída de H seja 100 bits. Temos então N = 2100. Se o adversário tentar √ 2100 = 250 entradas, a probabilidade de colisão é k(k − 1) 4N ≤ Pr[C] ≤ k 2 2N 250(250 − 1) 4(2100) ≤ Pr[C] ≤ (2 50)2 2(2100) 1 4 ≤ Pr[C] ≤ 1 2 . Na verdade, como 250 é exatamente √ 2100, a probabilidade de sucesso do ad- versário será aproximadamente 1/2. O projeto de uma função de hashing deve, assim, levar em conta este fato. Suponha que uma função de hashing produza saída de 512 bits. Isso signi�ca que para conseguir probabilidade de sucesso no máximo igual a 1/2 em um ataque o adversário precisaria de √ 2512 = 2256 tentativas � tal ataque não seria factível. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 128CAPÍTULO 7. RESUMOS CRIPTOGRÁFICOS (FUNÇÕES DEHASHING) Veremos agora como seria a probabilidade de sucesso à medida que diminuí- mos a quantidade de tentativas: Para 2255, a probabilidade é < 1/4. Para 2254 é menor que 1/32. Para 2200 é menor que 9.6 × 10−35. Para 2128 é menor que 4.3× 10−78. A proteção contra ataques de aniversário se dá, então, pela escolha do ta- manho da saída da função. No entanto, é apenas medida necessária para a segurança de uma função de hashing, e não su�ciente. 7.2 Construção: transformação de Merkle-Damgård Se tivermos uma função de hashing para entrada de tamanho �xo, podemos usá-la para entradas de qualquer tamanho usando uma transformação descrita por Merkle e Damgård. Construção 7.5 (Transformação de Merkle-Damgård). Uma função de hashing (Gen, h) tem entrada de tamanho �xo, igual a n bits. A nova função será (Gen, H): a função Gen permanece a mesma, e Hs(x) é computada como segue. • h aceita entrada de n bits; quebramos x em k = 2|x|/n blocos diferentes, cada um com n/2 bits. Daremos a estes blocos os nomes x1, x2, . . . , xk. • Adicione um último bloco xk+1, cujo conteúdo é a representação do tama- nho de x em binário. • Usaremos hs em cada bloco (chamaremos cada aplicação de hs de passo. Como cada bloco tem n/2 bits, em cada passo precisaremos de mais n/2 bits. No primeiro passo, usamos um valor arbitrário z0. Nos outros, usamos a saída do passo anterior. A saída do último bloco é Hs(x). � A Figura a seguir ilustra esta construção. Cada aplicação da função hs (com entrada de tamanho �xo) é representada por trapézios e não retângulos, para simbolizar o fato da entrada de hs ser duas vezes maior que sua saída. Teorema 7.6. Seja (Gen, h) uma função de hashing de entrada de tamanho �xo resistente a colisão e (Gen, H) construída usando a transformação de Merkle- Damgård. Então (Gen, H) também é resistente a colisão. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 7.3. RESISTÊNCIA A COLISÕES COM DEXP 129 Demonstração. Provaremos apenas que o Teorema vale quando as entradas têm o mesmo tamanho (ou, equivalentemente, quando H tem entrada de tamanho �xo). Lembramos que as entradas para cada estágio da função transformada são xi (i-ésimo bloco da mensagem) e zi (i-ésimo vetor de inicialização). A entrada para cada estágio é xi||zi. Sejam x e x′ duas entradas diferentes de mesmo tamanho que colidem em Hs. Sejam x1, . . . , xk os k blocos da transformação de Merkle-Damgård. Como x 6= x′, deve haver algum bloco onde xi 6= x′i. Seja i∗ o maior índice de bloco tal que zi−1||xi e z′i−1||x′i são diferentes. Se i∗ = k+ 1, ou seja, as entradas do último bloco diferem, então zk||xk+1 e z′k||x′k+1 são cadeias diferentes para as quais há colisão em hs (na �gura acima isso signi�caria que não há mais blocos à direita). Suponha então que i∗ < k + 1 (as entradas de dois blocos antes dos dois últimos diferem). Neste caso, temos zi∗ = z′i∗ . No bloco anterior temos então zi∗−1||xi∗ e z′i∗−1||x′i∗ colidindo. Assim, uma colisão em Hs implica em uma colisão em hs. Com isto torna-se simples mostrar que se hs é resistente a colisão, Hs também é. � 7.3 Resistência a colisões com dexp A função de hashing a seguir é bastante simples e podemos demonstrar que é resistente a colisões. Construção 7.7. A função de hashing (Gen, H) descrita a seguir tem entrada de tamanho 2n e saída de tamanho n. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 130CAPÍTULO 7. RESUMOS CRIPTOGRÁFICOS (FUNÇÕES DEHASHING) • Gen(1n): Escolha um primo q cuja representação tenha n bits e devolva um grupo de ordem q com um gerador g e um elemento h do grupo: s = 〈G, q, g, h〉. • Hs(m): como m tem 2n bits, pode ser interpretada como a concatenação de dois números x e y (mod q), ou seja, m = x||y. Calcule Hs(m) = gxhy (mod q). � Teorema 7.8. Presumindo que vale a hipótese do logaritmo discreto, a Cons- trução 7.7 é uma função de hashing com resistência a colisões. Demonstração. Seja Π a Construção 7.7 e A um algoritmo polinomial para obtenção de colisões. Seja e(n) = Pr[HASH_COL(A,Π, n) = 1]. Podemos usar A para construir um algoritmo DL que resolve o problema do logaritmo discreto em tempo polinomial com probabilidade de sucesso e(n). DL(G, q, g, h): 〈x, x′〉 ← A(G, q, g, h) se x 6= x′ e x, x′ colidem em H: se h = 1 retorne zero senao interprete x como (x1||x2) interprete x′ como (x′1||x′2) retorne (x1 − x′1)(x′2 − x2)−1 (mod q) Agora mostramos que quando A encontra colisão (x 6= x′ e Hs(x) = Hs(x′)) DL retorna logg h. Primeiro observamos que quando h = 1 o resultado será obviamente correto, porque logg h = 0. Para o caso em que h 6= 1, veri�camos que Hs(x1||x2) = Hs(x′1||x′2) implica que gx1hx2 = gx ′ 1hx ′ 2 (7.1) gx1−x ′ 1 = hx ′ 2−x2 . (7.2) Seja d = x′2 − x2. Notamos que d 6≡ 0 (mod q), porque se o fosse, então teríamos hx ′ 2−x2 = h0 = 1, e como gx1−x ′ 1 = hx ′ 2−x2 , gx1−x ′ 1 = 1 Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 7.4. SHA (SECURE HASH ALGORITHM) 131 implicaria que (x1 − x′1) (mod q) seria zero, e teríamos então x = (x1||x2) = (x′1||x′2) = x′ � contradizendo o que já estabelecemos (x 6= x′). Como d 6≡ 0 (mod q) e q é primo, existe d−1 (mod q). Elevamos a Equação 7.2 a este valor (d−1 (mod q)) e obtemos g(x1−x ′ 1)d −1 = ( hx ′ 2−x2 )[d−1 (mod q)] = h[dd −1 (mod q)] = h. Como g(x1−x ′ 1)d −1 = h, conseguimos o logaritmo de h na base g: logg h = (x1 − x′1)d−1 (mod q) = (x1 − x′1)(x′2 − x2)−1 (mod q), que é a saída de DL. Temos um algoritmo DL que resolve o problema do logaritmo discreto com probabilidade e(n). Como presumimos este problema seja difícil, e(·) deve ser desprezível. � Esta função é muito pouco e�ciente para ser usada na prática, porque exige o cálculo de exponenciação modular. As próximas seções descrevem outras funções de hashing. 7.4 SHA (Secure Hash Algorithm) Em 1993 a NSA desenvolveu um algoritmo para que se tornasse padrão para resumos criptográ�cos. O algoritmo foi chamado de Secure Hash Algorithm, que passou por uma revisão em 1995, dando origem ao SHA-1. O SHA-1 é uma construção de Merkle-Damgård e tem saída de 160 bits. O SHA-2 é semelhante (é uma construção de Merkle-Damgård). 7.4.1 SHA-3 O NIST selecionou através de concurso um novo padrão para função de hash, que recebeu o nome de SHA-3. O algoritmo selecionado era chamado anteriormente de Keccac. O Keccac é uma construção esponja, quedetalhamos a seguir. Seja f uma permutação em {0, 1}k. A função esponja tem um estado interno com k bits, onde k = p + q. Os p primeiros bits são a parte do estado onde os blocos de mensagem interferem, e os outros q são usados, de certa forma, para acumular informação, q é chamado de �capacidade� da função. A construção esponja opera em duas fases: • Absorção: p bits da entrada são misturados via ou-exclusivo na parte �externa� do estado interno, e em seguida a função f é aplicada em todos os bits do estado. Se houver mais bits de entrada, repete-se a operação. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 132CAPÍTULO 7. RESUMOS CRIPTOGRÁFICOS (FUNÇÕES DEHASHING) • Extração1: Os p primeiros bits do estado interno são copiados para a saída. Se houver necessidade de mais bits, então a função f é aplicada novamente ao estado interno, e depois disso novamente os p primeiros bits são copiados. p q f f f f ff . .. . .. . .. . .. absorção extração m1 2 nmm 0 0 n1 2 yy y O algoritmo a seguir ilustra a construção esponja. esponja(m, f, p, q, l): // m é vista como sequência de blocos mi. r ← 0 c← 0 // fase de absorção: enquanto há próximo bloco mi: x← f(r ⊕mi|c) r ← x[0..p] c← x[p+1..q] // fase de extração: y ← r k ← p enquanto k < l: x← f(x) y ← y|x[0..p] k ← k + p retorne y 1Squeeze no original em Inglês. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 7.5. CIFRAS DE BLOCO USANDO FUNÇÕES DE HASH: AARDVARK133 7.5 Cifras de bloco usando funções de hash: Aard- vark Esta Seção descreve uma cifra de bloco menos conhecida do que as anteriores. Embora não haja cifra de bloco com segurança demonstrável baseando-se em funções de mão única, há um método para construir cifras de bloco usando cifras de �uxo e funções de hashing com a garantia de que, se a cifra de bloco for quebrada, uma das outras duas ferramentas também o será. Dizemos que Aardvark é uma cifra de bloco, embora se pareça mais com um �gabarito� (ou método para construção) de cifra de bloco � para cada combinação de cifra de �uxo, função de hashing e função de hashing com senha, é possível construir uma cifra de bloco usando o método Aardvark. A Figura a seguir ilustra esta construção. Construção 7.9 (Aardvark). Dadas uma cifra de �uxo S, uma função de hashing H e uma função de hashing H ′ com chave, pode-se construir uma cifra de bloco, com bloco do tamanho igual ao tamanho da saída de H. • Gen(1n) retorna k ∈R { 0, 1 }n. • Enck(m) retorna um par (c, c′), onde c′ = H(m) c = m⊕ S(H ′k(c′)). • Deck(c, c′) = c⊕ S(H ′k(c′)) Após decriptar uma mensagem é possível realizar uma veri�cação adicional: c′ deve ser igual a H(m). � A demonstração de segurança do Aardvark é condicionada a quatro carac- terísticas de seus componentes: • H é fortemente resistente a colisões: é difícil encontrar x, y tais queH(x) = H(y). • H ′ é resistente a fraude existencial. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 134CAPÍTULO 7. RESUMOS CRIPTOGRÁFICOS (FUNÇÕES DEHASHING) • S resiste a ataques de expansão: é difícil expandir qualquer �uxo parcial de S. • S e H ′ são independentes: Pr(H ′k(x)|k) = Pr(H ′k(x)). O Teorema a seguir é a demonstração de segurança do Aardvark. A prova detalhada é pedida no Exercício 37. Teorema 7.10. Dados oráculos para calcular Enck e Deck para uma chave k desconhecida, é difícil encontrar (m, c, c′) tais que Enck(m) = (c, c′) sem usar um dos oráculos para computar Enck(m) ou Deck(c, c′) diretamente Demonstração. (Rascunho) Suponha que é possível facilmente encontrar (m, c, c′) mencionados no enunciado. Ao fazê-lo ou encontramos colisão em H, ou conse- guimos fraude existencial em H ′, ou S e H ′ tem alguma correlação que conse- guimos explorar. � 7.6 O Oráculo Aleatório Há uma situação bastante comum no projeto de esquemas e protocolos cripto- grá�cos que usam funções de hashing como primitiva. Ainda que presumamos que a função de hashing é função de mão única e resistente a colisões, parece muito difícil encontrar uma demonstração de segurança. Nestas situações é pos- sível usar uma metodologia menos rigorosa que o padrão, mas que nos permite encontrar alguma demonstração de segurança, ainda que usando hipóteses que não podem ser concretizadas. É importante frisar que o método do oráculo aleatório não leva a demonstra- ções rigorosas como no modelo padrão (onde não se usam oráculos aleatórios), e que há exemplos de construções com demonstração de segurança neste mo- delo que tornam-se inseguras quando o oráculo aleatório é instanciado com uma função de hashing � independente de que função de hashing seja escolhida. Seja FA→B o conjunto de todas as funções com domínio A e contradomínio B. Na metodologia do oráculo aleatório, escolhemos uniformemente uma função em FA→B quando precisamos de uma função de hashing. Evidentemente não podemos representar tal função explicitamente, uma vez que há um número exponencial de funções. Podemos imaginar, no entanto, um simulador, que responde aleatoreamente quando é perguntado a respeito de uma entrada x ∈ A, mas que sempre responde à mesma pergunta com a mesma resposta. Normalmente o método do oráculo aleatório é visto como um meio termo entre a Criptogra�a com segurança demonstrável (ainda que resultando em cons- truções ine�cientes) e a Criptogra�a onde a segurança de construções e�cientes é avaliada de maneira empírica. A seguir temos um exemplo de demonstração usando o modelo do Oráculo Aleatório. Suponha que Alice deva comprometer-se com uma escolha, mas que Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 7.6. O ORÁCULO ALEATÓRIO 135 não possa revelar a ninguém esta escolha. Pode ser que Alice seja parte de uma banca avaliadora (e não possa divulgar seu voto antes que todos tenham votado), ou que esteja participando de uma licitação (e que a lei exija que as propostas sejam feitas em sigilo). A escolha de Alice pode ser vista como uma mensagem m de n bits (onde se lê seu voto, ou sua proposta para a licitação). Alice não con�a nos outros participantes, e quer garantir que ninguém poderá inferir absolutamente nada a respeito de sua mensagem. Tentamos então usar o seguinte protocolo: Alice usa uma função f e pu- blica y = f(m) para comprometer-se. Depois, quando revelar m, todos poderão conferir que f(m) = y. A intuição nos diz que poderíamos usar uma função de hashing como f . No entanto, as propriedades de funções de hashing não são su�cientes para demonstrar o sigilo do protocolo: • Uma função de mão única não é su�ciente para garantir que nada possa ser inferido a partir da mensagem; • Uma função resistente a colisões (ou resistente a pré-imagem) também não nos serve, pelo mesmo motivo: nada impede que o adversário determine alguns bits, ou alguma outra característica de m. Certamente, se f é de mão única, podemos calcular para ela um predicado hard-core. Se presumirmos que f é um oráculo aleatório, conseguiremos demonstrar o sigilo do protocolo: como f(m) é um valor escolhido aleatoreamente, o adver- sário não obtém dali qualquer informação. O melhor que pode fazer é tentar adivinhar m, escolhendo aleatoreamente m′ e depois veri�cando se f(m′) = y através de uma consulta ao oráculo. A probabilidade do adversário sortear m′ = m é 1/2n, desprezível em |m|. O método do Oráculo Aleatório difere do uso de funções pseudoaleatórias. Em ambos os casos, idealizamos um esquema ou protocolo presumindo que há uma função f completamente aleatória. Depois, • para usar uma função pseudoaleatória F , trocamos f por F , mas somente alguns participantes terão acesso à chave k. No entanto, a chave é parte da função: Fk é função de A em B, mas F é uma família de funções. Assim, o adversário não tem acesso à descrição da função; • para usar o oráculo aleatório, trocamos f por uma função de hashing �real� H. Esta função não é indexada, e estamos dando então uma descrição sucintacompleta da função que será usada na prática (não há informação secreta). 7.6.1 Propriedades do Oráculo Aleatório O oráculo aleatório é um modelo teoricamente muito poderoso: mostramos aqui que uma função concebida como oráculo aleatório é também de mão única e resistente a colisões. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 136CAPÍTULO 7. RESUMOS CRIPTOGRÁFICOS (FUNÇÕES DEHASHING) Resistência a colisões Todo oráculo aleatório funciona como uma função de hashing resistente a coli- sões. Teorema 7.11. Sejam um oráculo aleatório H e um adversário polinomial A. Seja n o maior tamanho de saída de H consultado por A. Então A só poderá encontrar x, x′ tais que H(x) = H(x′) com probabilidade desprezível em n. Demonstração. Observamos que o adversário não pode fazer mais que uma quantidade polinomial de consultas ao oráculo. Sejam então k a quantidade de consultas feitas por A ao oráculo e n o número de bits na saída de H. Como H é oráculo aleatório, sabemos que os valores yi consultados são gerados aleatoreamente com distribuição uniforme. Temos então A realizando um ataque como o descrito na Seção 7.1. Sua probabilidade de sucesso será então no máximo O(k2/2n), desprezível em n. � Funções de mão única Um oráculo aleatório funciona como uma função de mão única. O Exercício 74 pede a demonstração do Teorema 7.12. Teorema 7.12. Seja H um oráculo aleatório. Sejam também x escolhido do domínio de H com probabilidade uniforme e y = H(x) obtido por consulta ao oráculo. Qualquer adversário polinomial A, de posse de y poderá obter x com probabilidade menor ou igual que uma função desprezível em n. Podemos construir, a partir de um oráculo aleatório, uma família indexada de funções de mão única. Teorema 7.13. Se H é um oráculo aleatório então F , de�nida a seguir, é uma função de mão única. Fk(x) = H(k||x). O Teorema 7.13 é importante porque em tese, permite reconstruir boa parte da Criptogra�a usando funções de hashing no lugar de funções de mão única. 7.6.2 Objeções Há problemas conceituais no método do Oráculo Aleatório que levaram muitos teóricos a rejeitá-lo. Por outro lado, é o modelo usado nas demonstrações de segurança de diversos esquemas e protocolos usados na prática. Esta Seção resume os argumentos contra e a favor do uso do método. Contra o uso do conceito de oráculo aleatório, temos: • Funções de hashing reais (instanciadas concretamente) não podem funci- onar como oráculo aleatório; Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 7.6. O ORÁCULO ALEATÓRIO 137 • Algumas demonstrações de segurança exigem que o adversário tenha acesso controlado ao oráculo, permitindo somente que ele calcule H(x) para de- terminados valores de x. No entanto, funções de hashing reais tem sua descrição pública, e não temos portanto como impedir um adversário de usar o algoritmo (público) para calcular o valor de H(x′), para algum x′ que não queríamos permitir. Suportando o modelo (como Katz e Lindell [130] apontam): • O modelo do oráculo aleatório é o único que temos para produzir demons- trações que envolvem funções de hashing, e portanto é melhor que nenhum modelo (e portanto nenhuma demonstração); • Uma demonstração usando o modelo do oráculo aleatório garante que o único problema que pode ocorrer é instanciar o oráculo de forma incorreta (ou inadequada), usando uma função de hashing que tenha sido quebrada, ou que não tenha as propriedades necessárias (por exemplo, que tenha a saída muito pequena, ou que não seja resistente a colisões); • Não conhecemos qualquer ataque a esquemas que tenham usado o modelo do oráculo aleatório, desde que o oráculo aleatório seja instanciado por uma função de hashing apropriada, e sem ataques conhecidos. Notas A construção 7.7 é de Chaum, Heijst e P�tzmann [43]. Em 1996 Anderson e Biham criaram duas cifras para as quais era possível obter demonstração condicional de segurança: BEAR e LION [4]. Ambas usa- vam funções de hashing e cifras de �uxo. Pat Morin mostrou que ambas eram suscetíveis a um ataque de encontro no meio, e desenvolveu Aardvark [163], semelhante em espírito mas imune àquele ataque. O modelo do oráculo aleatório foi inicialmente sugerido na conferência CRYPTO de 1986 por Amos Fiat e Adi Shamir em um trabalho sobre problemas relaciona- dos a identi�cação e assinaturas [76]. Em uma das demonstrações de segurança os autores a�rmam que2 �A prova formal de segurança neste abstract estendido presume que n é su�cientemente grande e que f é uma função verdadeiramente aleatória.� Em um trabalho apresentado na primeira Conferência da ACM em Segu- rança de Computadores e Computadores no ano de 1993 [20], Mihir Bellare e Phillip Rogaway deram tratamento formal à ideia de �função verdadeiramente aleatória� usado anteriormente por Fiat e Shamir. 2Tradução livre. O original é �The formal proof of security in this extended abstract assumes that n is su�ciently large and that f is a truly random function.� Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 138CAPÍTULO 7. RESUMOS CRIPTOGRÁFICOS (FUNÇÕES DEHASHING) O Keccac é descrito por seus autores nos documentos submetidos ao concurso do NIST [23] e em outros artigos [207]. A evolução do Keccac foi também apresentada em Daghstul em 2009 [24]. O Capítulo 13 do livro de Katz e Lindell [130] apresenta uma discussão bastante extensa sobre o modelo do Oráculo Aleatório. Exercícios Ex. 62 � (Katz/Lindell) Sejam (Gen1, H1) e (Gen2, H2) duas funções de hashing, e seja (Gen, H) a função de hashing que combina as outras duas concatenando suas saídas: Hs1,s2(x) = Hs1(x)||Hs2(x) onde s1 é obtido usando Gen1 e s2 é obtido usando Gen2. a) Prove que para que H seja resistente a colisão, basta que uma das outras duas funções o seja. b) O mesmo vale para resistência de segunda pré-imagem e resistência de pré-imagem? Ex. 63 � Demonstre a Proposição 7.4. Ex. 64 � O Teorema 7.6 foi demonstrado apenas para duas entradas de mesmo tamanho. Generalize a demonstração mostrando que ele também vale para duas entradas de tamanhos diferentes. Ex. 65 � Quantas tentativas alguém deveria fazer para encontrar uma colisão em uma função de hashing resistente a colisões com saída de 256 bits, com probabilidade de sucesso maior ou igual que 3/4? Ex. 66 � A probabilidade de colisão dada na Seção sobre o problema do aniversário pode ser veri�cada por um experimento usando um gerador pseudo- aleatório e uma função de hashing. Descreva (e implemente) este experimento. Ex. 67 � O Teorema 7.6 não tem demonstração completa (leia o último pa- ragrafo da prova). Complete-a. Ex. 68 � Implemente a função de hashing resistente a colisões usando ex- ponenciação modular descrita neste Capítulo. Compare seu desempenho com alguma função de hashing criptográ�ca rápida. Ex. 69 � Invente uma função de hashing de entrada de tamanho �xo, implemente- a, e depois implemente sua transformação de Merkle-Damgård. Ex. 70 � Implemente uma instância da cifra Aardvark. Ex. 71 � Aardvark foi baseada em duas cifras, uma delas chamada LION. A cifra LION usa uma função de hashing H resistente a colisões e uma cifra de �uxo S. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 7.6. O ORÁCULO ALEATÓRIO 139 •Gen(1n) gere k1, k2 ∈R { 0, 1 }n. •Enc(m): a mensagem é dividida em partes esquerda (l) e direita (r), não necessariamente iguais (mas ambas devem ser menores do que n, o tamanho da chave) e calcula-se: r ← r ⊕ S(l ⊕ k1) l ← l ⊕H ′(r) r ← r ⊕ S(l ⊕ k2) •Dec(c): o texto encriptado é dividido em partes esquerda (l) e direita (r), da mesma forma que em Enc, e realiza-se o mesmo cálculo feito em Enc, invertendo apenas a ordem das chaves: r ← r ⊕ S(l ⊕ k2) l ← l ⊕H ′(r) r ← r ⊕ S(l ⊕ k1) A respeito da cifra LION, a) Desenhe um diagrama ilustrando o funcionamento da cifra. b) Prove que a cifra funciona (ou seja, que Deck(Enck(m)) = m). c) Mostre um ataque de encontro nomeio para esta cifra. Ex. 72 � O que pode ser dito a respeito de funções homomór�cas de hashing e o Oráculo Aleatório? Ex. 73 � Mostre concretamente porque uma função de hashing H construída usando a transformação de Merkle-Damgård não é uma instância de oráculo aleatório (ou seja, mostre como distinguir H de um oráculo aleatório). Ex. 74 � Demonstre o Teorema 7.12. Ex. 75 � Releia a descrição da cifra Aardvark, na Seção 7.5, e construa para ela uma demonstração de segurança usando o método do Oráculo Aleatório. Sua demonstração �cou mais simples que aquela já dada no texto (e que não depende do Oráculo Aleatório)? Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 140CAPÍTULO 7. RESUMOS CRIPTOGRÁFICOS (FUNÇÕES DEHASHING) Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini Capítulo 8 Códigos de Autenticação de Mensagens A encriptação permite proteger mensagens de forma que não possam ser lidas por entidades não autorizadas. O conceito de segurança, no entanto, não se reduz à privacidade apenas. Neste Capítulo trataremos de autenticidade de mensagens: se Alice recebe uma mensagem supostamente enviada por Bob, como ela pode ter certeza de que Bob é de fato o remetente? De�nição 8.1 (Esquema de Autenticação de Mensagem). Um esquema de au- tenticação de mensagem consiste de três algoritmos: • Gen cria uma chave a partir de um parâmetro de segurança n: Gen(1n) = k, com |k| ≥ n. • Mac recebe uma chave k, uma mensagem m e tem como saída um rótulo t. Denotamos t← Mack(m). • Vrf recebe uma chave k, uma mensagem m, um rótulo t, e retorna um (signi�cando válido) ou zero (signi�cando inválido). Denotamos v ← Vrfk(m, t). Para todo n, para toda k gerada por Gen(1n) e toda mensagem m, é mandatório que Vrfk(m, Mack(m)) = 1. � Quando para qualquer k, Mack somente for de�nido para mensagens de ta- manho p(n) (onde p é algum polinômio), dizemos que (Gen, Mac, Vrf) é um esquema de autenticação de mensagens de tamanho �xo para mensagens de tamanho p(n). A próxima Construção a seguir é um exemplo de MAC, que tem como base funções pseudoaleatórias. 141 Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 142 CAPÍTULO 8. CÓDIGOS DE AUTENTICAÇÃO DE MENSAGENS Construção 8.2. Seja F uma função pseudoaleatória. Um esquema de auten- ticação de mensagens pode ser construído da seguinte forma: • Gen(1n) escolhe k uniformemente ao acaso de {0, 1}n. • Mack(m) = Fk(m), desde que |m| = |k| = n. • Vrfk(m, t) = 1 se e somente se |m| = |k| = |t| = n, e t = Mack(m). Em outros casos, Vrf retorna zero. � Esta construção funciona apenas para mensagens de tamanho �xo. 8.1 Segurança de códigos de autenticação de men- sagens O único ataque que faz sentido para códigos de autenticação é a fraude: um adversário não deve conseguir criar um rótulo sem a chave. O Experimento MAC_FORGE(Π,A, n), que usaremos na de�nição de segurança para esquema de autenticação de mensagens, é descrito a seguir. Experimento 8.3 (MAC_FORGE(Π,A, n)). Neste experimento o adversário tem acesso a um oráculo que permite obter Mack(m) para qualquer mensagem m, sem, no entanto, conhecer a chave k. • Uma chave k é gerada por Gen(1n). • O parâmetro 1n é enviado a A. • A, com acesso ao oráculo Mack, gera o par (m, t). Seja Q o conjunto de mensagens que A enviou para o oráculo. • O resultado do experimento é um se e somente se Vrfk(m, t) = 1 e m /∈ Q. D AMack s← Gen(1n) Vrfk(m, t) = 1,m /∈ Q→ 1 1n m, t � De�nição 8.4 (Segurança de esquema de autenticação de mensagens). Um esquema de autenticação de mensagens Π é seguro (ou �não-fraudável por ataque adaptativo de mensagem escolhida�) se para todo adversário polinomial A existe uma função desprezível negl tal que Pr[MAC_FORGE(Π,A, n) = 1] ≤ negl(n). � Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 8.1. SEGURANÇADE CÓDIGOS DE AUTENTICAÇÃODEMENSAGENS143 Teorema 8.5. A Construção 8.2 é segura. Demonstração. Mostraremos que, se a construção não é segura (ou seja, se é possível fraudar códigos de autenticação), então poderíamos construir um algo- ritmo que distingue funções pseudoaleatórias de funções realmente aleatórias. Considere Π = (Gen, Mac, Vrf) e Π∗ = (Gen∗, Mac∗, Vrf∗) obtidos pela Cons- trução 8.2, sendo que Π foi construído com uma função pseudoaleatória, e em Π∗ uma função realmente aleatória foi usada. Seja A um algoritmo polinomial e e(n) = Pr[MAC_FORGE(Π,A, n) = 1]. Como Gen∗(1n) escolhe aleatoreamente uma função de n bits em n bits, ou seja, f ∈R {g|g : {0, 1}n → {0, 1}n} , então Pr[MAC_FORGE(Π∗,A, n) = 1] ≤ 1 2n . Isso porque se uma mensagem m não está na lista Q de mensagens consultadas o valor t = f(m) está uniformemente distribuído em {0, 1}n. É possível construir um teste polinomial T que distingue funções pseudoa- leatórias de funções verdadeiramente aleatórias com a mesma probabilidade de sucesso do adversário em MAC_FORGE (ou seja, e(n)). Se e(n) não for desprezí- vel, conseguiremos distinguir funções pseudoaleatórias de aleatórias � mas isso é impossível pela de�nição de função pseudoaleatória. O algoritmo T simula o Experimento 8.3, observando quando A tem sucesso conseguindo um rótulo válido. Suponha que queiramos distinguir uma função h. T recebe 1n e acesso a h : {0, 1}n → {0, 1}n via oráculo O. test executa A(1n). Cada vez que A pedir a seu oráculo para calcular o MAC de uma mensagem m, T usa O para obter t = h(m), e retorna t para A. Em outras palavras, T intermedia o acesso de A ao oráculo, enviando o valor de h para o adversário. T Ah (via T) 1n m, t Quando A retorna (m, t), test faz o seguinte: • Obtém t′ = h(m) via O; • Se A nunca perguntou o MAC de m e se t = t′, o resultado é um. Senão é zero. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 144 CAPÍTULO 8. CÓDIGOS DE AUTENTICAÇÃO DE MENSAGENS Há agora dois casos: • Se h é Fk pseudoaleatória com k escolhida ao acaso, T se torna igual ao Experimento 8.3 com Π, e Pr[T (Fk, 1n) = 1] = Pr[MAC_FORGE(Π,A, 1n)] = e(n). • Se h é realmente aleatória, T é igual ao Experimento 8.3 com Π∗, e Pr[T (h, 1n) = 1] = Pr[MAC_FORGE(Π∗,A, 1n)] ≤ 1 2n . Ou seja, se e(n) não for desprezível, T distinguirá facilmente os dois casos. � 8.2 Estendendo MACs para tamanho variável de mensagem A construção de MAC que realizamos anteriormente só funciona para mensa- gens de tamanho �xo. Descrevemos agora sua extensão teórica para MACs de tamanho variável. Construção 8.6. Seja (Mac′, Vrf′) um MAC para mensagens de tamanho �xo. Construiremos um MAC para mensagens de tamanho l < 2n/4: de�nimos (Mac, Vrf) da seguinte maneira: • Mack(m): 1. divida a mensagem em blocos m1,m2 . . . ,mq, tendo cada bloco l < n/4 bits. 2. escolha r ∈R {0, 1}n/4. 3. ti = Mac′k(r||l||i||mi) 4. Retorne (r, t1, . . . , tq) • Vrfk(m, t): 1. divida a mensagem em blocos m1, . . . ,m′q, da mesma forma que em Mack(m). 2. Retorne 1 se e somente se q = q′ (ou seja, as mensagens tem a mesma quantidade de blocos) e Vrfk(r||l||i||mi, ti) = 1 para todo i. � A Construção 8.6 funciona para mensagens de tamanho variável, mas com tamanho máximo de�nido (2n/4, onde n é o tamanho da chave). Esta é uma construção teórica, portanto podemos presumir que é possível escolher n tão grande quanto necessário para garantir a segurança do esquema. No entanto, a realização prática deste esquema necessita de atenção: pode ser que o tamanho da chave torne o esquema inviável. Teorema 8.7. Se Π′ é um MAC seguro para mensagens de tamanho �xo de acordo com a De�nição 8.4, então a Construção 8.6 o transforma em um MAC seguro para mensagens de tamanho arbitrário. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 8.3. CBC-MAC 145 8.3 CBC-MAC CBC-MAC é uma Construção semelhante ao modo CBC para encriptação (des- crito na Seção 5.3.2). A geração do rótulo é feita aplicando uma cifra de bloco no modo CBC, comduas diferenças. • No CBC-MAC o vetor de inicialização é 0n; • No CBC-MAC apenas a saída do último bloco é usada (na cifra de bloco a saída de todos os blocos era concatenada). As saídas dos outros blocos não podem ser mostradas, porque isto tornaria a construção insegura. Construção 8.8 (CBC-MAC com entrada de tamanho �xo). Seja F uma fun- ção pseudoaleatória. Para um polinômio p(·), as funções a seguir são uma construção MAC. • Gen(1n) escolhe k ∈R {0, 1}n • Mack(m) quebra a mensagem em blocos de tamanho |m|/q, onde q = p(n) é o tamanho (�xo) das mensagens. Em seguida, aplica Fk no modo CBC (veja Seção 5.3.2), mas usando 0n como vetor de inicialização e dando como saída apenas o resultado da encriptação do último bloco. • Vrfk(m, t) veri�ca se Mack(m) = t � A Figura a seguir ilustra o CBC-MAC para mensagens de tamanho �xo. 8.3.1 Mensagens de tamanho variável Da forma como descrevemos na última Seção, o CBC-MAC não é seguro para autenticar mensagens de tamanho variável. Teorema 8.9. A Construção 8.8 não é segura para mensagens de tamanho variável. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 146 CAPÍTULO 8. CÓDIGOS DE AUTENTICAÇÃO DE MENSAGENS Demonstração. Seja Π = (Gen, Mac, Vrf) como na Construção 8.8. Sejamm1,m2 duas mensagens com tamanho igual ao tamanho do bloco usado em Enc, e sejam M1, M2 os respectivos rótulos. Dados (m1,M1), (m2,M2), um adversário quer calcular o rótulo M3 de x = m1||z. Sabemos que Mi = Enck(mi) e o rótulo de m1||z deve ser Enck(M1 ⊕ z). Construímos agora a mensagem y = m2||(M1 ⊕ z ⊕M2). Seu rótulo é igual ao de x, e assim o adversário pode fraudar rótulos. � Para usar o CBC-MAC em mensagens de tamanho variável, há três modi�- cações com demonstração de segurança: • Aplicar Fk sobre o tamanho de m, e usar o resultado como chave para o CBC-MAC: x← Fk(|m|) t← Fx(m) • Usar uma construção semelhante ao CBC-MAC de tamanho �xo, mas pre�xando a mensagem m com |m| (o seu tamanho). Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 8.4. HMAC 147 • Mudar a construção para que duas chaves sejam geradas (k1 e k2). Ao calcular o MAC, primeiro usamos o CBC-MAC usando k1, obtendo como resultado t′. Depois calculamos t = Fk2(t ′) e o rótulo é t. Não demonstraremos a segurança destas três construções. 8.4 HMAC Há uma maneira diferente de obter um código de autenticação usando resu- mos criptográ�cos. Para gerar um rótulo para uma mensagem m e chave k, poderíamos simplesmente concatenar a m e k, e calcular o resumo Hs(m||k). Esta ideia, se implementada diretamente desta forma, não é segura. A Constru- ção 8.10 descreve a implementação de MAC usando resumos de forma segura. Construção 8.10 (HMAC). Seja (Gen′, h) uma função de hash de tamanho �xo e (Gen′, H) sua modi�cação usando a transformação de Merkle-Damgård. Tanto H como h produzem saída de n bits. As três funções a seguir constituem um código de autenticação de mensagens. • Gen(1n): use Gen(1n) para obter uma chave k, e também escolha k ∈R {0, 1}n. Retorne 〈s, k〉. • Mac(s,k)(m) retorna t = Hsiv ( (k ⊕ opad)||Hsiv ((k ⊕ ipad)||m) ) . • Vrf(s,k)(m, t) simplesmente veri�ca se t = Mac(s,k)(m). Tanto opad como ipad são constantes. � Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 148 CAPÍTULO 8. CÓDIGOS DE AUTENTICAÇÃO DE MENSAGENS A Figura a seguir ilustra esta Construção. Quando a Construção 8.10 é usada para obter um algoritmo prático, seu nome normalmente é �HMAC-� seguido do nome da função. Por exemplo, HMAC-MD5 e HMAC-SHA1 são os algoritmos construídos usando as funções MD5 e SHA-1. Construções do tipo HMAC são largamente utilizadas na prá- tica. 8.5 Aplicação: segurança CCA Até agora só construímos criptossistemas com nível de segurança CPA. Nesta Seção de�nimos segurança CCA e mostramos como usar MACs para construir criptossistemas com segurança CCA. Experimento 8.11 (PRIV_CCA(Π,A, n)). 1. Uma chave k é gerada por Gen(1n); 2. O adversário recebe a entrada 1n e, podendo cifrar mensagens com Enck e Deck, nos devolve duas mensagens m0 e m1, ambas de mesmo tamanho; 3. Um bit b é escolhido aleatoreamente, e a mensagem correspondente é en- criptada: c = Enck(mi). Este texto cifrado (o �desa�o�) é enviado a A; 4. A, ainda podendo usar Enck e Deck, responde um bit b′ (o adversário não pode usar Deck em c); 5. O resultado do experimento é um se b = b′ e zero em caso contrário. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 8.5. APLICAÇÃO: SEGURANÇA CCA 149 D AEnck,Deck b ∈R { 0, 1 } k ∈R { 0, 1 }n 1n m0,m1 Enck(mb) b′ � De�nição 8.12 (Segurança contra ataque de texto claro escolhido). Um crip- tossistema simétrico Π tem indistinguibilidade contra ataques de texto cifrado escolhido se para todo adversário A existe uma função desprezível negl tal que, Pr[PRIV_CCA(Π,A, n) = 1] ≤ 1 2 + negl(n). � Podemos usar um criptossistema CPA-seguro e um MAC para construir um criptossistema CCA-seguro. Construção 8.13 (Criptossistema com segurança CCA). Seja ΠE = (GenE , Enc, Dec) um criptossistema CPA-seguro e ΠM = (GenM , Mac, Vrf) um esquema seguro de autenticação de mensagens. De�nimos o seguinte criptossistema: • Gen(1n) usa GenE(1n) e GenM (1n) para determinar as duas chaves, ke e km. • Encke,km(m) calcula c = Encke(m) e t = Mackm(c), e retorna 〈c, t〉 • Decke,km(c, t) primeiro veri�ca se Vrfkm(c, t) = 1. Depois, decifra c usando ke, retornando Decke(c). � Teorema 8.14. Se ΠE é um criptossistema com segurança CPA e ΠM é um esquema seguro de autenticação de mensagens, a Construção 8.13 aplicada a ΠE e ΠM resulta em um criptossistema Π com segurança CCA. Notas A demonstração do Teorema 8.14 pode ser obtida no livro de Katz e Lindell [130]. Exercícios Ex. 76 � Além do CBC há algum outro modo de encriptação em bloco que possa ser usado para construir MACs? Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 150 CAPÍTULO 8. CÓDIGOS DE AUTENTICAÇÃO DE MENSAGENS Ex. 77 � Suponha que ao invés da Construção HMAC descrita neste Capí- tulo, usemos o seguinte: Construção 8.15 (MAC furado). Seja (Gen′, Hs) uma função de hashing ob- tida via transformação de Merkle-Damgård. Então construímos •Gen(1n) (sem mudanças) •Mack(m) = Hs(k||m) •Vrfk(m, t) veri�ca se Mack(m) = t. � Mostre que esta construção não é segura. Ex. 78 � Ao construir CBC-MAC para mensagens de tamanho variável, men- cionamos que podemos usar uma construção semelhante ao CBC-MAC de ta- manho �xo, mas pre�xando a mensagem m com |m| (o seu tamanho). Mostre que se o tamanho da mensagem fosse pós-�xado (incluído após a mensagem), a construção não seria segura. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini Capítulo 9 Criptogra�a Assimétrica A criptogra�a de chave privada permite proteger dados contra acesso não au- torizado (um arquivo encriptado só será lido por quem conheça a chave usada para encriptá-lo), e também oferece um método para comunicação privada: duas entidades podem se comunicar trocando mensagens encriptadas. Há um pro- blema, no entanto, que a criptogra�a de chave privada não resolve: se Alice e Beto querem se comunicar, precisam estabelecer uma chave comum para que possam usar ao encriptar sua comunicação. Supondo que não seja possível um encontro físico, como determinar, pela primeira vez, a chave a ser usada? Até 1976 era consenso que a comunicação por canal seguro dependia de esta- belecimento prévio de chave por algum outro canal seguro. Em 1976 um artigo publicado por Whit�eld Di�e e Martin Hellman [69] trouxe novas perspecti- vas para a Criptogra�a, descrevendo um método para estabelecimento de chave que não necessita de canal seguro previamente estabelecido. Nos anos que se seguiram diversos criptossistemas assimétricos foram propostos, dentre os quais o mais conhecido é provavelmente o RSA de Rivest, Shamir e Adelman. 9.1 Protocoloscriptográ�cos Um protocolo criptográ�co é uma descrição de como atores diferentes podem realizar uma computação em conjunto trocando mensagens. Neste Capítulo abordaremos apenas o protocolo de Di�e e Hellman para estabelecimento de chaves, que funciona com dois participantes, e usaremos uma de�nição de se- gurança elaborada especi�camente para um tipo de protocolo. Uma de�nição mais detalhada de protocolo será dada no Capítulo 11. 9.2 Estabelecimento de chaves A situação descrita no início deste Capítulo, em que Alice e Bob querem se comunicar quando não há canal seguro, pode ser remediada usando um protocolo para que ambos usem um canal inseguro (aberto) para estabelecer uma chave 151 Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 152 CAPÍTULO 9. CRIPTOGRAFIA ASSIMÉTRICA privada a ser usada em suas comunicações, sem que outros tenham acesso à chave. A comunicação subsequente poderá se dar usando apenas esta chave, e o canal seguro estará, então, estabelecido. De�niremos segurança para protocolos de estabelecimento de chaves antes de apresentar o protocolo de Di�e e Hellman. Começamos com o experimento KE_EAV (�key establishment / eavesdropping�), que identi�ca a probabilidade com que o segredo (chave) comum pode ser capturado por um adversário. Experimento 9.1 (KE_EAV(Π,A, n)). 1. Duas entidades A e B, ambas conhecendo n, executam o protocolo Π. Todas as mensagens trocadas entre A e B são guardadas em uma listaM . Ambos devem calcular uma chave k (que não é incluída na lista M). 2. Um bit aleatório b é escolhido. Se b = 0, k′ é escolhida uniformemente ao acaso. Se b = 1, k′ = k. 3. A lista de mensagens M e a chave k′ são enviadas ao adversário A. 4. A envia um bit b′ 5. O resultado do experimento é um se b = b′ ou zero em caso contrário. � De�nição 9.2 (Segurança para protocolo de estabelecimento de chaves). Um protocolo de estabelecimento de chaves Π é seguro se para todo adversário po- linomial A existe uma função desprezível negl tal que Pr[KE_EAV(Π,A, n) = 1] ≤ 1 2 + negl(n). � Esta noção de segurança é adequada a protocolos de estabelecimento de chaves: como há apenas dois atores e presumimos que há con�ança mútua, só temos que nos preocupar com a possibilidade de obtenção da chave por um adversário que não participa do protocolo. 9.3 Protocolo Di�e-Hellman para estabelecimento de chaves O protocolo de estabelecimento de chaves de Di�e e Hellman usa um algoritmo G que, dado um parâmetro n, retorna a descrição de um grupo cíclico G de ordem q tal que q tem n bits, e um gerador g de G. Construção 9.3 (Protocolo de Di�e e Hellman para estabelecimento de cha- ves). Dois participantes, A e B, estabelecem uma chave simétrica da seguinte maneira: • A usa G para obter (G, q, g) • A escolhe x ∈R Zq e calcula h1 = gx Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 9.3. PROTOCOLODIFFIE-HELLMAN PARA ESTABELECIMENTODE CHAVES153 • A envia (G, q, g, h1) para B • B escolhe y ∈R Zq e calcula h2 = gy. • B envia h2 para A e determina a chave secreta kB = hy1. • A recebe h2 e determina a chave secreta kA = hx2 . � Ao �nal da execução do protocolo, A como B tem chaves secretas kA e kB . Estas chaves são iguais, porque kA = h x 2 = (g y)x = gxy kB = h y 1 = (g x)y = gxy. É importante observar que o protocolo não especi�ca nada a respeito do grupo, exceto que q deve ter n bits. Com isso é possível usar diferentes grupos na construção prática do protocolo. Um exemplo é o ECDH (Elliptic Curve Di�e-Hellman), onde são usados pontos em uma curva elíptica. Um requisito evidente do Di�e-Hellman é que o problema do Logaritmo Discreto seja difícil � caso contrário qualquer um que observe as mensagens trocadas poderá inferir a chave. Este é, no entanto, apenas necessário. Podemos identi�car outro problema, relacionado ao logaritmo discreto, que captura a essência da di�culdade do protocolo. Este problema leva o mesmo nome do protocolo. De�nição 9.4 (Problema de Di�e-Hellman). Dados um grupo cíclico G e um gerador g gerados por um algoritmo G(1n), denotamos DHg(a, b) = g ab. O problema Di�e-Hellman computacional (ou CDH, �Computational Di�e- Hellman�) consiste em calcular DHg(a, b) dados ga e gb escolhidos ao acaso em G. O problema Di�e-Hellman decisional (ou DDH, �Decisional Di�e-Hellman�) consiste em reconhecer se um elemento x foi escolhido ao acaso em G ou se é igual a DHg(a, b) para algum a e algum b gerados aleatoreamente. Dizemos que CDH e DDH são difíceis com relação a um algoritmo G se não houver algoritmo polinomial que os resolva quando os grupos são gerados por G. � Há algoritmos G para os quais não se conhece algoritmo e�ciente para resolver CDH ou DDH (mas não há tampouco prova de que não existam). O que demonstramos então é que o protocolo de Di�e-Hellman é seguro se o problema é difícil para um algoritmo G. Teorema 9.5. Se o problema Di�e-Hellman decisional é difícil para um algo- ritmo G, o protocolo Di�e-Hellman (Construção 9.3) é seguro de acordo com a De�nição 9.2 quando G é usado. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 154 CAPÍTULO 9. CRIPTOGRAFIA ASSIMÉTRICA Demonstração. Supomos que o grupo G usado no experimento 9.1 foi gerado por um algoritmo G. O bit b é escolhido ao acaso, então Pr[b = 0] = 1/2. Pr [ KE_EAV(Π,A, n) = 1 ] = 1 2 Pr [ KE_EAV(Π,A, n) = 1|b = 1 ] + 1 2 Pr [ KE_EAV(Π,A, n) = 1|b = 0 ] . No experimento KE_EAV o adversário recebe k′, que pode ser um elemento ale- atório do grupo ou a chave. Assim, A pode ter, com igual probabilidade: • (G, q, g, h1, h2, gxy), ou • (G, q, g, h1, h2, k′), sendo que k′ foi escolhida aleatoreamente. Distinguir entre ambos é exatamente resolver o problema Di�e-Hellman decisi- onal: Pr [ KE_EAV(Π,A, n) = 1 ] = 1 2 Pr [ KE_EAV(Π,A, n) = 1|b = 1 ] + 1 2 Pr [ KE_EAV(Π,A, n) = 1|b = 0 ] = 1 2 Pr [ A(G, q, g, gx, gy, gxy) = 1 ] + 1 2 Pr [ A(G, q, g, gx, gy, gz) = 0 ] = 1 2 Pr [ A(G, q, g, gx, gy, gxy) = 1 ] + 1 2 1− Pr [ A(G, q, g, gx, gy, gz) = 1 ] = 1 2 + 1 2 ( Pr [ A(G, q, g, gx, gy, gxy) = 1 ] − Pr [ A(G, q, g, gx, gy, gz) = 1 ]) ≤ 1 2 + 1 2 ∣∣∣Pr [A(G, q, g, gx, gy, gxy) = 1]− Pr [A(G, q, g, gx, gy, gz) = 1]∣∣∣. Como g é gerador de G, gz é distribuído uniformemente no grupo se z for uniformemente distribuído em Zq. Se o problema Di�e-Hellman decisional é difícil para G, então existe negl desprezível tal que∣∣∣Pr [A(G, q, g, gx, gy, gxy) = 1]− Pr [A(G, q, g, gx, gy, gz) = 1]∣∣∣ ≤ negl(n). Concluímos que Pr [ KE_EAV(Π,A, n) = 1 ] ≤ 1 2 + 1 2 negl(n). � Note que esta demonstração parece ter um pequeno problema: quando b = 0, o adversário recebe um elemento aleatório do grupo G, e não uma cadeia alea- tória de bits. Para que a diferença �que clara, suponha que tenhamos escolhido o grupo Zq e que a ordem do grupo seja q = 257, que é representado por 100000001 em binário. Apenas um elemento do grupo tem o primeiro bit igual a um: 256 = 100000000. Este não é um problema com a demonstração, mas um fato a que o implementador deve dar atenção: não se pode usar números diretamente para representar elementos de G; ao invés disso deve-se usar al- guma representação dos elementos do grupo como cadeias de bits, que preserve a distribuição uniforme. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 9.4. CRIPTOSSISTEMAS ASSIMÉTRICOS 155 9.3.1 Ataque de homem-no-meio Apesar de seguro de acordo com a De�nição 9.2 o Di�e-Hellman, como proposto originalmente, é suscetível a um ataque de homem-no-meio: • O adversário A recebe a descrição (G, q, g, h1) vinda de A e calcula z ∈R Zq, h3 = gz. • A repassa a descrição alterada (G, q, g, h3) para B. • B escolhe y, computa h2 e determina kB = hy3 = gyz envia de volta h2 = g y. • A agora tem a chave kB = hz2 = gyz. • A impede que h2 siga para A, e envia h3 para A. • A recebe h3 e computa kA = hx3 = gxz. • A tem também a chave kA = hz1 = gxz. Porser vulnerável a este ataque o protocolo Di�e-Hellman não é usado na prática em sua formulação original, mas ainda assim é a base para diversos outros protocolos. 9.4 Criptossistemas Assimétricos O protocolo Di�e-Hellman não é exatamente um criptossistema assimétrico: ele apenas permite estabelecer um canal seguro para comunicação entre duas partes (oferecendo assim parte da funcionalidade dos criptossistemas assimétricos). No entanto, os criptossistemas assimétricos são de�nidos de forma diferente: cada participante tem uma chave pública e uma privada, e estas chaves são usadas para que ambos efetivamente se comuniquem. De�nição 9.6 (Criptossistema assimétrico). Um criptossistema assimétrico consiste de três algoritmos: • Gen, que aceita um parâmetro de segurança n e gera um par de chaves (pk, sk). A primeira é chamada de chave pública e a segunda de chave secreta. • Enc, randomizado, que aceita uma chave pública pk, uma mensagem m e calcula um texto cifrado c. • Dec, determinístico, que aceita uma chave privada sk, um texto cifrado c e retorna uma mensagem m. Requeremos por hora1 que Decsk(Encpk(m)) = m. � Enquanto para criptossistemas simétricos o sigilo perfeito implica em pro- blemas práticos, para os criptossistemas assimétricos o sigilo perfeito é absolu- tamente impossível. 1Mais adiante admitiremos que Dec falhe com probabilidade desprezível. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 156 CAPÍTULO 9. CRIPTOGRAFIA ASSIMÉTRICA 9.4.1 F Funções de mão única com segredo A De�nição 9.6 é diferente da De�nição 2.1: o algoritmo Gen não cria apenas uma chave, mas duas. Uma é usada para encriptar e outra para decriptar mensagens. De�nição 9.7 (Permutação de mão única com segredo). Uma permutação de mão única com segredo é uma tupla de algoritmos (Gen, Samp, f, Inv): • Gen retorna duas chaves, I e td. • (Gen′, Samp, f) é uma família de permutações de mão única • Para todo par (I, td) produzido por Gen, o segredo td deve permitir inverter f e�cientemente usando o algoritmo Inv: Invtd(fI(x)) = x. � 9.5 Segurança CCA Nesta seção de�nimos segurança CCA para criptossistemas de chave pública. Experimento 9.8 (PUB_CCA(Π,A, n)). 1. Gen(1n) é usado para determinar pk, sk. 2. O adversário recebe pk e acesso de oráculo a Decsk. 3. A retorna duas mensagens, m0,m1, do mesmo tamanho. 4. Um bit aleatório b é escolhido e mk é encriptada com Encsk e enviada a A (o adversário não pode usar o oráculo nesta mensagem) 5. A envia um bit b′ 6. O resultado do experimento é um se b = b′, ou zero em caso contrário. � De�nição 9.9 (Segurança CCA para criptossistemas assimétricos). Um crip- tossistema de chave pública Π tem segurança contra ataques de texto cifrado escolhido se para todo adversário polinomial A existe uma função desprezível negl tal que Pr[PUB_CCA(Π,A, n) = 1] ≤ 1 2 + negl(n). � 9.6 ElGamal O criptossistema de ElGamal, detalhado na Construção 9.10, tem como base o problema DDH. Nesta construção há um abuso de notação: escrevemos �a/b� para indicar �a · (b)−1�, onde (b)−1 é o inverso de b no grupo. Construção 9.10 (Criptossistema ElGamal). Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 9.6. ELGAMAL 157 • Gen(1n): use G(1n) para escolher um grupo cíclico G com ordem q, com gerador g, sendo que q é representável com n bits. x ∈R Zq h← gx A chave pública é 〈G, q, g, h〉. A chave privada é 〈G, q, g, x〉. • Enc: dada a chave pública pk = 〈G, q, g, h〉 e a mensagem m ∈ G, escolha y ∈R Zq e devolva 〈gy, hym〉 . • Dec: dada a chave sk = 〈G, q, g, x〉, e o texto cifrado c = 〈c1, c2〉, a função Dec retorna c2 cx1 . � A função Dec opera corretamente: c2 cx1 = hym (gy)x = (gx)ym gxy = gxym gxy =m. Exemplo 9.11 (Operação do criptossistema de ElGamal). Começamos su- pondo que G escolheu G = Z17 com g = 5. Escolhemos x = 9, e portanto h = 59 (mod 17) = 12. pk = (G, 17, 5, 12) sk = (G, 17, 5, 9). Para encriptar 15, escolhemos y = 3 e Encpk(15) = (5 3, 12315) (mod 17) = (6, 12) Para decriptar (6, 12): Decsk(6, 12) = 12 69 (mod 17) = 15. J Uma característica notável do criptossistema de ElGamal é que ele não é determinístico (um elemento y é escolhido aleatoreamente no procedimento de encriptação). Outro fato importante é que no ElGamal, a mensagem é um elemento de um grupo, e o texto encriptado consiste de dois elementos. Dizemos que o ElGamal tem um fator de expansão de dois para um. Teorema 9.12. Se o problema DDH for difícil para G, então o criptossistema de ElGamal (Construção 9.10) tem segurança contra ataques de texto cifrado conhecido. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 158 CAPÍTULO 9. CRIPTOGRAFIA ASSIMÉTRICA Teorema 9.13. O criptossistema ElGamal é homomór�co para multiplicação emM e C. 9.7 Criptossistema de Rabin O criptossistema mostrado a seguir foi proposto por Michael Rabin em 1979. Em essência, encriptar no Rabin é elevar ao quadrado, e decriptar é calcular raiz módulo N . Construção 9.14 (Criptossistema de Rabin). • Gen: Gere dois primos grandes e diferentes p, q tais que p, q ≡ 3 (mod 4). Seja N = pq. A chave privada sk é (p, q), e a chave pública pk é N . • Encpk(m) = m2 (mod N) • Decsk(c) = √ c (mod N) � Dados primos p, q com N = pq, e y = x2 (mod N), computar a raiz a é fácil quando se tem a fatoração de N , mas difícil caso contrário. De fato, não conhecemos algoritmo polinomial para computar tais raízes sem conhecer a fatoração de N . No entanto, sabendo que N = pq podemos determinar √ y (mod pq): Calculamos r1 = √ y (mod p) e r2 = √ y (mod q). Estas raízes podem ser calculadas e�cientemente quando p, q ≡ 3 (mod 4). As quatro raízes quadradas de y módulo N podem então ser encontradas resolvendo-se os quatro sistemas, que podem ser resolvidos usando o Teorema Chinês do resto (Teorema B.21): (1) x ≡r1 (mod p), x ≡ r2 (mod q), (2) x ≡r1 (mod p), x ≡ −r2 (mod q), (3) x ≡− r1 (mod p), x ≡ r2 (mod q), (4) x ≡− r1 (mod p), x ≡ −r2 (mod q). Exemplo 9.15 (Encriptando e decriptando com Rabin). Sejam p = 3 e q = 7. Temos N = 21. Para encriptar m = 11, calculamos 112 (mod 21) = 121 (mod 21) = 16. Para decriptar, calculamos r1 = √ 16 (mod 3) = 1 r2 = √ 16 (mod 7) = 4. Resolvemos o sistema (1) x ≡1 (mod 3), x ≡ 4 (mod 7) (2) x ≡1 (mod 3), x ≡ −4 (mod 7) (3) x ≡− 1 (mod 3), x ≡ 4 (mod 7) (4) x ≡− 1 (mod 3), x ≡ −4 (mod 7). Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 9.8. SEGURANÇA CPA 159 As soluções para este sistema são 4, 10, 11, 17 � note que o 11 está entre elas. J A segurança do criptossistema de Rabin se sustenta na suposição de que um problema (encontrar a raiz quadrada de um número módulo N sem sua fatoração) seja difícil. Reduziremos este problema ao de quebrar o criptossistema (ou seja, mos- traremos que se o Rabin puder ser quebrado, então podemos encontrar √ x (mod N) sem saber a fatoração de N). A redução é trivial: quebrar o Rabin signi�ca exatamente encontrar √ c (mod N) (veja a de�nição de Dec). Assim, ao quebrar o criptossistema, conseguimos calcular raízes quadradas módulo N sem conhecer a fatoração de N . É fácil veri�car agora o que já mencionamos: um criptossistema assimétrico como o Rabin não pode ter sigilo perfeito: a chave pública N contém toda a informação necessária para obter a chave privada (p, q): basta fatorarmos N . Acontece que sabemos que não é conhecido algoritmo e�ciente para obter a fatoração de N . 9.8 Segurança CPA Experimento 9.16 (PUB_EAV(A,Π, n)). 1. O par de chaves (pk, sk) é gerado por Gen(1n). 2. Envie pk para A. 3. A devolve m0,m1, ambas de mesmo tamanho. 4. Um bit b é escolhido aleatoreamente e uma das mensagens é encriptada: c← Encsk(mb). 5. c é enviada a A 6. A envia b′ de volta 7. Se b = b′ o resultado do experimento é um. Caso contrário, é zero. � De�nição 9.17 (Segurança contra ataque de texto cifrado conhecido para crip- tossistemas assimétricos). Um criptossistema de chavepública Π = (Gen, Enc, Dec) tem segurança contra ataque de texto cifrado conhecido se para todo adversário polinomial A existe uma função desprezível negl(·) tal que Pr[PUB_EAV(A,Π, n) = 1] ≤ 1 2 + negl(n). � Esta de�nição difere daquela semelhante para criptossistemas simétricos por- que o adversário recebe a chave pública pk. Isso signi�ca que A pode encriptar mensagens à vontade � e que esta de�nição é então equivalente à de�nição de segurança CPA. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 160 CAPÍTULO 9. CRIPTOGRAFIA ASSIMÉTRICA De�nição 9.18 (Segurança CPA para criptossistemas assimétricos). Um crip- tossistema de chave pública tem segurança CPA se tem segurança contra ataque de texto cifrado conhecido. � Interessantemente, as duas De�nições de segurança (texto cifrado conhecido e CPA) para criptossistemas assimétricos também são equivalentes à De�nição de segurança contra múltiplos textos cifrados conhecidos. 9.9 RSA O RSA é provavelmente um dos criptossistemas mais conhecidos. Dado um número N , produto de dois primos grandes p e q, a função de encriptação no RSA funciona em ZN elevando a mensagem a um expoente e (de encriptação) � ou seja, c = me (mod N)), e decriptar é o processo contrário: calculamos m = ce −1 . Assim, temos dois expoentes: e é público, para que todos possam encriptar, e o expoente d = e−1 (de decriptação) é privado, para que apenas o destinatário possa decriptar. Para que estas operações funcionem é necessário escolher os expoentes de um conjunto com uma propriedade especial: tendo escolhido o expoente secreto e, é necessário que ele tenha um inverso. Note que em Zn, onde n é um número composto qualquer (como é o caso do RSA), nem todo elemento terá inverso multiplicativo. O RSA funciona com exponenciação (que é multiplicação iterada), e não com soma � lembramos que a soma de inteiros não é de mão única, enquanto a multiplicação é candidata a função de mão única. Assim, para usar aritmética modular neste contexto, precisamos de um grupo onde a operação seja a mul- tiplicação. Mais ainda, queremos encontrar dois elementos, e e d, que tenham inverso multiplicativo. O grupo Zn, com a operação de soma, não nos serve. Observamos que um dado a ∈ Zn tem inverso se e somente se é co-primo com n, ou seja, mdc (a,m) = 1. Podemos então usar o conjunto dos elementos menores que n e coprimos com n: Z∗n = { x ∈ {1, 2, . . . , n− 1} : mdc (x, n) = 1 } . Este conjunto, com a operação de multiplicação, forma um grupo onde todos os elementos tem inverso. A ordem deste grupo é denotada |Z∗n| = φ(n); a função φ(n) é chamada de tociente2 Se p é primo, deve ser coprimo com todos os números menores que ele. Assim, φ(p) = p− 1. A função φ é multiplicativa � ou seja, φ(ab) = φ(a)φ(b), 2Veja a De�nição B.6 da função φ(n) (�φ de Euler�, ou função tociente) no Apêndice B. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 9.9. RSA 161 e como n = pq, temos φ(n) = (p− 1)(q − 1). O Teorema de Euler nos garante que para todo n > 1 e a ∈ Z∗n, aφ(n) ≡ 1 (mod n). Ao invés de escolher os expoentes em ZN , escolhemos e e d em Z∗φ(N). Primeiro escolhemos e < φ(N) ao acaso, depois calculamos d tal que ed ≡ 1 (mod φ(N)). Assim, pela de�nição de congruência, existe algum inteiro k tal que ed = kφ(N) + 1. Conseguiremos então encriptar (mb) e decriptar (ca) obtendo a mensagem ori- ginal3: (me)d ≡ mkφ(N)+1 (mod N) ≡ (mφ(N))km (mod N) ≡ (mkφ(p)φ(q))m (mod N) ≡ (mφ(p))kφ(q)m (mod N) ≡ (1)kφ(q)m (mod N) (Teorema de Euler) ≡ m (mod N). O valor de φ(N) no RSA é sempre (p − 1)(q − 1), porque N é o produto dos dois primos p e q. A Construção 9.19 é descrita muitas vezes como a versão de livro-texto do RSA, por ser normalmente usada em livros didáticos na descrição do criptossis- tema RSA. Esta construção, no entanto, é determinística e consequentemente insegura. Construção 9.19 (Criptossistema RSA (versão de livro-texto)). • Gen(1n): escolha primos p 6= q com n bits cada N ← pq escolha aleatoreamente 1 < e < φ(N), coprimo com N d← e−1 (mod φ(N)) retorne 〈(N, d), (N, e)〉 • Encpk(m) = Enc〈N,e〉(m) = me (mod N). 3Usamos nesta derivação o Teorema de Euler (Teorema B.27): se a e m são co-primos, então aφ(m) ≡ 1 (mod m). Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 162 CAPÍTULO 9. CRIPTOGRAFIA ASSIMÉTRICA • Decsk(c) = Dec〈N,d〉(c) = cd (mod N). � O cálculo de e−1 pode ser feito usando o algoritmo estendido de Euclides4. Aparentemente as mensagens (e consequentemente os textos encriptados) devem pertencer ao grupo de unidades Z∗N , mas um Exercício no �nal deste capítulo pede a demonstração de que o sistema funciona mesmo quando m ∈ Zn \ Z∗N . Exemplo 9.20. Sejam p = 101, q = 3. Temos N = 303 e φ(N) = 200. Queremos 1 < b < 200 coprimo com 200 = 2352, e escolhemos b = 7 (que não é divisível por 2 nem por 5, e portanto pertence a Z∗200). Assim, a = 7−1 (mod φ(N)) = 7−1 (mod 200) = 143. Temos então • pk = (N, b) = (303, 7) • sk = (N, a) = (303, 143) Para encriptar 53 (que pertence a Z∗303), fazemos Encpk(53) = 53 7 (mod 303) = 275. Para decriptar 37, Decsk(275) = 275 143 (mod 303) = 53. J Da mesma forma que identi�camos a essência da di�culdade do protocolo Di�e-Hellman, também o faremos como RSA, de�nindo o problema RSA. De�nição 9.21. Seja N o produto de dois primos, ambos com n bits. Seja e > 0 tal que gcd(e,N) = 1 e x ∈ Z∗N . O problema RSA computacional consiste em calcular y = x1/e (mod N). � Não se conhece qualquer algoritmo e�ciente para resolver o problema RSA. Sabemos que o RSA deve ser pelo menos tão difícil quanto a fatoração de in- teiros: se for possível fatorar N , basta então calcular φ(N) = (p − 1)(q − 1), calcular d = e−1 (mod φ(N)) e y = xd (mod N) (é importante observar que φ(N) e e−1 não são públicos, e devem ser calculados por um adversário que pretenda quebrar o RSA). 9.9.1 Aspectos de segurança do RSA Esta Seção descreve alguns ataques ao RSA. Estes ataques não caracterizam qualquer fraqueza do criptossistema, e somente são possíveis quando o RSA é usado de maneira ingênua (ou �incorreta�). 4O algoritmo estendido de Euclides é dado no Apêndice B Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 9.9. RSA 163 Fatoração do módulo n em p, q A fatoração do módulo em p e q deve ser mantida em segredo. Se um atacante obtiver estes dois números, ele pode usar o algoritmo estendido de Euclides para calcular o exponente de decriptação d. De acordo com a identidade de Bézout, existem X e Y tais que mdc (e, φ(n)) = eX + φ(n)Y 1 = eX + φ(n)Y (Identidade de Bézout) eX ≡ 1 (mod φ(n)) (def. de congruência) Evidentemente, X = d. O valor φ(n) O valor de φ(n) também deve ser mantido em segredo. Vemos o que um atacante poderá fazer tendo φ(n). φ(n) = (p− 1)(q − 1) φ(n) = pq − p− q + 1 φ(n) = (n+ 1)− (p+ q) (p+ q) = (n+ 1)− φ(n) q = (n+ 1)− φ(n)− p. Conseguimos uma descrição de q em função de n, φ(n) e p (que o atacante conhece). Observe que n = pq n = p [ (n+ 1)− φ(n)− p ] n = −p2 + p(n+ 1− φ(n)) Rearranjando, vemos que p é solução de uma equação do segundo grau, p2 − (n+ 1− φ(n))p+ n = 0, com a = 1, b = −(n+ 1− φ(n)) e c = n. Módulo comum Suponha que ao distribuir chaves para um grupo de pessoas usemos sempre o mesmo módulo N : a i-ésima pessoa recebe (ai, N) e (bi, N). Como aibi ≡ 1 (mod φ(N)), qualquer uma destas pessoas pode fatorar N e consequentemente calcular aj a partir de bj . Ainda que se suponha que no grupo com estas chaves haja con�ança mútua e que o fato de um conhecer as chaves privadas de todos os outros não seja um Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 164 CAPÍTULO 9. CRIPTOGRAFIA ASSIMÉTRICA problema, o módulo comum permite que um adversário externo ao grupo decifre mensagens sem precisar de qualquer chave privada. Suponha que m é enviada a duas pessoas com chaves (b1, N) e (b2, N): c1 =m b1 (mod N) c2 = m b2 (mod N). Como b1 e b2 são co-primos com N , são também co-primos entre si, e existem x, y tais que xb1 +yb2 = 1, facilmente computáveis. Um adversário que conheça c1, c2 e N pode decifrar a mensagem porque cx1c y 2 = m xb1myb2 = mxb1+yb2 = m1 = m (mod N). b e m pequenos Se b usado na chave pública e m são pequenos um adversário pode decriptar m. Por exemplo, se b = 5 e m < N1/5, não há redução modular na encriptação porque m5 < N . Observando c = m5 (mod N), e sabendo que b e m são pequenos, um adversário pode calcular c1/5 em Z (sem aritmética modular) e obter m. 9.9.2 Versão segura do RSA: OAEP Da mesma forma que tornamos cifras de �uxo seguras inserindo nelas elementos de aleatoriedade, tornaremos o RSA seguro modi�cando-o para que passe a ser um algoritmo probabilístico. A modi�cação que fazemos é adicionar uma cadeia de bits aleatórios à mensagem antes de encriptá-la. Descrevemos a seguir o OAEP (Optimal Asymmetric Encryption Padding). Se trocarmos o algoritmo Enc da Construção 9.19 pelo algoritmo Enc′ a seguir obteremos uma versão do RSA com segurança IND-CCA-2. O algoritmo Enc′ usa duas funções de hash, G e H. Zeros são adicionados à mensagem m para que tenha tamanho �xo; r é escolhido aleatoreamente. Enc′pk(m) = Encpk(m⊕G(r)||r ⊕H(m⊕G(r))) Observe que o algoritmo original é usado pelo novo. A próxima �gura ilustra o algoritmo � e deixa claro também que sua estrutura é a de uma rede de Feistel, para que possamos calcular a inversa ao decriptar a mensagem. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 9.10. GOLDWASSER-MICALI 165 Notamos também que a função G deve ser usada de forma a expandir os k bits de r para n bits, e que H deve comprimir n bits em k bits. A segurança IND-CCA-2 do esquema depende de tratarmos as duas funções de hash como oráculos aleatórios. Informalmente, podemos fazer algumas observações: se as duas funções de hashingG eH tem saída indistinguível de bits aleatórios e resistência de segunda pré-imagem, então m ⊕ G(r) deveria ter o mesmo efeito que o one-time pad. Mas usar apenas este valor (m⊕G(r)) não daria certo, porque não seria possível decriptar. Por isso usamos também a segunda função H. 9.10 Goldwasser-Micali O criptossistema de Goldwasser-Micali fundamenta-se na di�culdade do pro- blema do resíduo quadrático. Teorema 9.22. Seja p primo. Se y é resíduo quadrático módulo p, então y tem exatamente duas raízes quadradas módulo p. Demonstração. Seja x tal que (±x)2 = y. Suponha que x ≡ −x (mod p). Teríamos 2x ≡ 0 (mod p), e p|2x. Como p é primo, teríamos que p|2 ou p|x. Mas p > 2 e p > x, e portanto x 6≡ −x (mod p). Consequentemente y deve ter necessariamente duas raízes quadradas distintas módulo p. � Teorema 9.23. Seja n = pq, com p e q primos. Então y é resíduo quadrático módulo n se e somente se y (mod p) é resíduo quadrático módulo p e y (mod q) é resíduo quadrático módulo q. Demonstração. O resultado segue imediatamente do Teorema B.16. � Teorema 9.24. Seja n = pq, com p e q primos. Se y é resíduo quadrático módulo n, então y tem exatamente quatro raízes quadradas módulo n. Demonstração. Sejam a, b as raízes quadradas de y módulo p, e c, d as raí- zes quadradas de y módulo q. Pelo Teorema B.16, temos que y (mod p) ≡ y (mod q) ≡ y (mod pq). As raízes de y módulo p devem ser distintas das raízes de y módulo q, porque p e q são primos. � De�nição 9.25. O conjunto J+n contém os números x ∈ Z∗n tais que(x n ) = +1. � Observe que J+n contém os elementos do grupo de unidades Z∗n com símbolo de Jacobi igual a um módulo n. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 166 CAPÍTULO 9. CRIPTOGRAFIA ASSIMÉTRICA Teorema 9.26. Seja p primo. Então exatamente metade dos elementos em Zp é resíduo quadrático. Demonstração. Seja g uma raiz primitiva (e portanto pertencente a Zp). O conjunto Zp é { g0, g1, . . . , gp−2 } . Elevando todos os elementos ao quadrado, obtemos { g0, g2, . . . , gp−3, g0, g2, . . . , gp−3 } . Cada quadrado aparece duas vezes neste conjunto, e há nele metade dos ele- mentos de Zp. � Teorema 9.27. Seja n = pq, com p e q primos. Exatamente metade dos elementos de J+n é resíduo quadrático módulo n. Demonstração. Há (p − 1)/2 resíduos quadráticos em Zp e (q − 1)/2 resíduos quadráticos em Zq. Como p e q são primos, isso signi�ca que há exatamente5 • (p− 1)/2 números tais que (x|p) = +1, • (p− 1)/2 números tais que (x|p) = −1, • (q − 1)/2 números tais que (x|q) = +1, e • (q − 1)/2 números tais que (x|q) = −1. O símbolo de Jacobi (x|pq) será um quando( x p )( x q ) = +1, ou seja, quando (x|p) e (x|q) tiverem o mesmo sinal. Isso acontece exatamente metade das vezes. Temos então, em Z∗pq: • 1/2 de números com (x|pq) = −1; • 1/4 de números tais que (x|p) = (x|q) = −1. Não são resíduos quadráticos módulo pq, mas tem (x|pq) = +1; • 1/4 de números tais que (x|p) = (x|q) = +1. Estes são resíduos quadráti- cos módulo pq. � Se escolhermos uniformemente um elemento x ∈R J+n , a probabilidade de x ser resíduo quadrático será 1/2. Como não se conhece algoritmo e�ciente para determinar, sem a fatoração de n, se x é de fato resíduo quadrático módulo n, temos uma função de mão única. 5Lembre-se de que tanto p como q são ímpares, por isso as quantidades listadas são inteiras. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 9.10. GOLDWASSER-MICALI 167 De�nição 9.28 (Problema da residuosidade quadrática). O problema da re- siduosidade quadrática consiste em, dados n = pq e x ∈ J+n , se x é resíduo quadrático módulo n. � Conjectura 9.29. Para qualquer algoritmo randomizado polinomial A, quais- quer primos p, q com k bits cada, x tal que (x|pq) = +1, qualquer polinômio positivo p(·), a probabilidade de A determinar corretamente se x é resíduo qua- drático módulo pq é desprezível em k. No entanto, se conhecermos os fatores p e q, podemos computar os símbolos de Jacobi (x|p) e (x|q) e veri�car se são ambos positivos ou ambos negativos. Desta forma podemos determinar se (x|pq) é resíduo quadrático ou não. O criptossistema de Goldwasser-Micali fundamenta-se no problema da resi- duosidade quadrática. Construção 9.30 (Criptossistema de Goldwasser-Micali). • Gen(1k): escolha aleatoreamente dois primos p e q com k bits cada. Esco- lha também x tal que ( x p ) = ( x q ) = −1. A chave pública é (x, n). A chave privada é (p, q). • Enc(x,n)(m): a mensagem m é interpretada como uma sequência de bits mi. Para cada bit mi da mensagem, escolha a ∈R Z∗n e calcule ci = a 2xmi • Decp,q(c): o texto c é interpretado como uma sequência de bits ci. Para cada bit ci, mi = { 0 se ci é resíduo quadrático (mod n), 1 se ci caso contrário. � Por se basear no problema do resíduo quadrático, não há a necessidade de demonstrar segurança de bit (todo bit encriptado é seguro, porque cada um é tratado individualmente). Este criptossistema, no entanto, não é e�ciente no que tange ao espaço utilizado: cada bit do texto claro é representado como um número com k bits no texto encriptado. O criptossistema de Goldwasser-Micali tem a propriedade de encriptação homomór�ca, além de ser aleatorizado. Teorema 9.31. A função Enc no criptossistema de Goldwasser-Micali é homo- mór�ca para multiplicação em C e soma emM. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 168 CAPÍTULO 9. CRIPTOGRAFIA ASSIMÉTRICA Demonstração. Sejamm0 em1 duas mensagens, com Encpk(m0) = c0 e Encpk(m1) = c1. Então c0c1 = a 2xm0b2xm1 = a2b2xm0+m1 = (ab)2xm0+m1 , que é um possível valor para Encpk(m0 ⊕m1). � Notas O criptossistema ElGamal foi criado em 1985 por Taher ElGamal [73], e da mesma forma que o RSA, tornou-se um dos criptossistemas assimétricos mais usados em aplicações práticas. Michael Rabin publicou seu criptossistema em 1979 em um relatório técnico do MIT [179]. O criptossistema RSA foi elaborado por Ronald Rivest, Adi Shamir e Len Adelman em 1978[181]. John Talbot e Dominic Welsh apontam [211]6 que outro criptossistema, semelhante ao RSA, já havia sido descoberto por James Ellis e Cli�ord Cocks em 1973: em 1969 Ellis teria chegado à de�nição de função de mão única, mas somente em 1973 Cocks teria conseguido usar a de�nição na construção de um criptossistema assimétrico (que foi chamado de �criptossistema não-secreto�, porque não havia a necessidade de transmissão de chaves secretas). Uma análise cuidadosa de ataques ao RSA e medidas preventivas é feita no livro de Song Yan [220]. O esquema OAEP foi desenvolvido por Mihir Bellare e Phillip Rogaway [19], e combina e�ciência e segurança demonstrável. É possível demonstrar que se uma mensagem for codi�cada com OAEP antes de ser encriptada com o RSA, o resultado é um criptossistema CCA-seguro. Victor Shoup [199] mostrou que a demonstração de segurança do OAEP não é válida. Shoup propôs um novo esquema, OAEP+, um pouco mais complexo, com nova demonstração de segurança. A demonstração dada por Shoup é bas- tante interessante e instrutiva � diferentes experimentos (chamados de �jogos� no artigo de Shoup) são propostos, cada um sendo uma pequena variante do anterior. Eiichiro Fujisaki e outros [80] mostraram que o OAEP original garante se- gurança IND-CCA-2 apenas em algumas situações, mas dentre elas está o uso do criptossistema RSA. O criptossistema de Sha� Goldwasser e Silvio Micali foi publicado em 1982 [95]. Foi o primeiro criptossistema probabilístico, e é também um criptossistema ho- momór�co. 6Uma história detalhada da Criptogra�a está no livro de Simon Singh [203]. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 9.10. GOLDWASSER-MICALI 169 Exercícios Ex. 79 � Mostre como generalizar o protocolo Di�e-Hellman de distribuição de chaves para um número arbitrário de participantes. Qual é o custo com- putacional da sua construção, comparado com o do Di�e-Hellman para dois participantes? Ex. 80 � O que acontece se usarmos o RSA para encriptar uma mensagem m tal que m ∈ Zφ(N) \ Z∗φ(N)? Ex. 81 � Prove o Teorema 9.13. Ex. 82 � Que versão do RSA tem propriedade de encriptação homomór�ca? Ex. 83 � Descreva detalhadamente como decriptar mensagens usando o OAEP. Ex. 84 � No Teorema 9.24, mencionamos que se y é resíduo quadrático mó- dulo pq, as raízes quadradas de y módulo p e módulo q devem ser distintas porque p e q são primos. Mostre que isso é verdade. Ex. 85 � Implemente o criptossistema de ElGamal. Ex. 86 � Implemente o criptossistema de Rabin. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 170 CAPÍTULO 9. CRIPTOGRAFIA ASSIMÉTRICA Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini Capítulo 10 Assinaturas Digitais Os códigos de autenticação de mensagens descritos no Capítulo 8 funcionam da mesma forma que outras construções criptográ�cas de chave privada: uma única chave é usada pelo algoritmo, tanto para criar códigos de autenticação como para veri�cá-los. Queremos poder rotular mensagens sem ter que oferecer ao veri�cador a chave usada (porque não queremos que ele também possa rotular as mensagens). No cenário da criptogra�a assimétrica, onde cada entidade tem uma chave privada e uma pública, podemos conceber esquemas que permitam a alguém gerar um rótulo (ou assinatura) com sua chave privada, de forma que qualquer um possa veri�car a assinatura usando apenas a chave pública. Há uma consequência importante disso: dado que a chave usada para assinar uma mensagem é de conhecimento de uma única entidade, as assinaturas digitais feitas desta forma tem a característica de não repúdio: o assinante não pode negar a assinatura depois de produzi-la. Isso não é possível com códigos de autenticação usando chave simétrica. De�nição 10.1 (Esquema de assinaturas). Um esquema de assinaturas consiste de três funções (Gen, Sign, Vrf) computáveis em tempo polinomial: • Gen(1n) cria um par de chaves (pk, sk). Dizemos que pk é a chave pública e que sk é a chave secreta (ou privada). Ambas as chaves devem ter tamanho no mínimo igual a n, e deve ser possível determinar n apenas inspecionando pk ou sk. • Signsk(m) assina a mensagem m usando a chave sk, retornando uma assinatura σ. • Vrfpk(m,σ) retorna um (signi�cando �válida�) ou zero (signi�cando �invá- lida�). É necessário que para todo n, para todo par (pk, sk) gerado por Gen(1n) e toda mensagem m, Vrfpk(m, Signsk(m)) = 1. � 171 Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 172 CAPÍTULO 10. ASSINATURAS DIGITAIS 10.1 Segurança Assim como códigos de autenticação de mensagens, as assinaturas digitais devem ser consideradas seguras desde que não possam ser fraudadas. Essencialmente, entendemos por fraude a obtenção de assinatura sem acesso à chave privada que supostamente seria necessária para fazê-lo (formalizaremos esta noção de dife- rentes maneiras). Resumimos a seguir três aspectos da segurança de assinaturas digitais que usaremos na formulação das de�nições de segurança. Quanto aos pares de mensagem e assinatura aos quais o adversário possa ter acesso, identi�camos três casos: • RMA (random message attack): o adversário só tem acesso a mensagens sorteadas aleatoreamente com suas respectivas assinaturas; • KMA (known message attack): o adversário conhece, a priori, certas men- sagens, e poderá ter acesso às suas assinaturas antes de tentar iniciar sua fraude, mas as mensagens são determinadas antes do adversário conhecer a chave pública do assinante; • CMA (chosen message attack): o adversário pode escolher mensagens para que sejam assinadas, após conhecer a chave pública do assinante. Também observamos diferença entre tipos de fraude: • Resistência a fraude existencial: quando o adversário consegue assinar uma mensagem que nunca tenha sido assinada antes pelo assinante, tendo apenas a chave pública, mas não tem poder para escolher a mensagem, dizemos que o ataque é uma fraude existencial. • Resistência forte a fraude existencial: suponha que o adversário consiga gerar uma nova assinatura em uma mensagem já assinada anteriormente (mas a assinatura gerada é diferente da original). Dependendo do contexto podemos querer impedir que estas assinaturas sejam geradas. Dizemos que esquemas de assinatura que resistam a este tipo de fraude tem resistência forte contra fraude existencial. O número de vezes que um esquema de assinaturas pode ser usado também de�ne outro aspecto da segurança desses esquemas. • Única assinatura: há esquemas que só são seguros se a chave secreta for usada para uma única assinatura. Para gerar mais assinaturas, é necessá- rio gerar um novo par de chaves; • Número ilimitado de assinaturas: há também esquemas que podem ser usados sem limite para o número de assinaturas. Estes três aspectos (com três, dois e dois casos cada um) são independentes, e portanto de�nem doze casos. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 10.1. SEGURANÇA 173 10.1.1 Segurança RMA A noção mais fraca de segurança que formalizamos é a de mensagens aleatórias, onde o adversário não controla, de forma alguma, as assinaturas às quais tem acesso. Experimento 10.2 (SIG_FORGE_RMA(Π,A, n)). 1. k mensagens m1,m2, . . . ,mk são escolhidas uniformemente. 2. Gen(1n) é usada para obter (pk, sk). 3. As mensagens são todas assinadas com sk: σi ← Signsk(mi). 4. A recebe pk e todos os pares (mi, σi) 5. A retorna (m,σ). 6. A saída do experimento é um se e somente se Vrfpk(m,σ) = 1 e m /∈ {m1,m2, . . . ,mk }. D A m1, . . . ,mk ∈RM (pk, sk)← Gen(1n) σi ← Signsk(mi) Vrfpk(m,σ) = 1 m /∈ {m1,m2, . . . ,mk } 1n, pk, (m1, σ1, . . . ,mk, σk) (m,σ) � De�nição 10.3 (Segurança RMA para esquema de assinaturas digitais). Um esquema de assinaturas Π = (Gen, sign, Vrf) é seguro contra ataques com men- sagens aleatórias se para todo adversário polinomial A existe uma função des- prezível negl(·) tal que Pr[SIG_FORGE_RMA(Π,A,n) = 1] ≤ negl(n). � Se último passo do experimento for modi�cado da seguinte maneira: • A saída do experimento é um se e somente se Vrfpk(m,σ) = 1 e (m,σ) /∈ {(m1, σ1), (m2, σ2), . . . , (mk, σk)}. Então dizemos que o esquema é fortemente seguro contra ataques com mensa- gens aleatórias. Quando somente uma mensagem é sorteada no início do experimento, dize- mos que o esquema é �para somente uma assinatura�. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 174 CAPÍTULO 10. ASSINATURAS DIGITAIS 10.1.2 Segurança KMA A próxima de�nição de segurança é mais forte. Segurança KMA (contra ataques com mensagens conhecidas) implica em segurança RMA. Experimento 10.4 (SIG_FORGE_KMA(Π,A, n)). 1. A recebe 1n e escolhe um conjunto M = {m1, . . . ,mk } de mensagens. 2. Gen(1n) é usada para obter (pk, sk). 3. Cada mensagem é assinada com sk: σi ← Signsk(mi) 4. A recebe pk e as assinaturas σi. 5. O adversário retorna (m,σ). 6. A saída do experimento é um se e somente se Vrfpk(m,σ) = 1 e m /∈ M (ou seja, o adversário não pediu a assinatura de m ao oráculo). D A (sk, pk)← Gen(1n) σi ← Signsk(mi) Vrfpk(m,σ) = 1 m /∈ {m1,m2, . . . ,mk } 1n (m1, . . . ,mk) pk, (σ1, . . . , σk) (m,σ) � De�nição 10.5 (Segurança KMA para esquema de assinaturas digitais). Um esquema de assinaturas Π = (Gen, sign, Vrf) é seguro contra ataques adaptati- vos com mensagens conhecidas se para todo adversário polinomial A existe uma função desprezível negl(·) tal que Pr[SIG_FORGE_KMA(Π,A, n) = 1] ≤ negl(n). � Se último passo do experimento for modi�cado da seguinte maneira: • A saída do experimento é um se e somente se Vrfpk(m,σ) = 1 e (m,σ) /∈ {(m1, σ1), (m2, σ2), . . . , (mk, σk)}. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 10.1. SEGURANÇA 175 Então dizemos que o esquema é fortemente seguro contra ataques com mensa- gens escolhidas. Quando somente uma mensagem é sorteada no início do experimento, dize- mos que o esquema é �para somente uma assinatura�. 10.1.3 Segurança CMA A de�nição mais forte que temos para segurança é contra ataques adaptativos com mensagens escolhidas. Experimento 10.6 (SIG_FORGE_CMA(Π,A, n)). 1. Gen(1n) é usada para obter (pk, sk). 2. A recebe pk e acesso de oráculo a Signsk(·); seja M o conjunto de mensa- gens assinadas pelo oráculo, eX o conjunto de pares (mi, σi) de mensagens enviadas por A e assinaturas retornadas pelo oráculo. 3. O adversário retorna (m,σ). 4. A saída do experimento é um se e somente se Vrfpk(m,σ) = 1 e m /∈ M (ou seja, o adversário não pediu a assinatura de m ao oráculo). D ASign (pk, sk)← Gen(1n) Vrfpk(m,σ) = 1 m /∈M M = assinadas pelo oráculo 1n, pk (m,σ) � De�nição 10.7 (Segurança CMA para esquema de assinaturas digitais). Um esquema de assinaturas Π = (Gen, sign, Vrf) é seguro contra ataques adaptati- vos com mensagens escolhidas se para todo adversário polinomial A existe uma função desprezível negl(·) tal que Pr[SIG_FORGE_CMA(Π,A, n) = 1] ≤ negl(n). � Se o Experimento SIG_FORGE_CMA for modi�cado tal que seu último passo seja da seguinte forma: • A saída do experimento é um se e somente se Vrfpk(m,σ) = 1 e (m,σ) /∈ X (ou seja, o adversário não obteve exatamente a assinatura σ para a mensagem m a partir do oráculo), Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 176 CAPÍTULO 10. ASSINATURAS DIGITAIS então dizemos que Π é fortemente seguro contra ataques adaptativos de mensa- gem escolhida. Quando o adversário pode escolher uma única mensagem dizemos que o esquema tem segurança CMA para uma única vez. 10.2 Esquema de assinaturas para uma única men- sagem Experimento 10.8 (SIG_FORGE_ONE(Π,A, n)). 1. Gen(1n) é usada para obter (pk, sk). 2. A recebe pk e acesso de oráculo a Signsk(·), para uma única assinatura. 3. O adversário pede a assinatura de uma única mensagem, m′, ao oráculo. 4. O adversário retorna (m,σ). 5. A saída do experimento é um se e somente se Vrfpk(m,σ) = 1 e m 6= m′ (ou seja, o adversário não pediu a assinatura de m ao oráculo). D ASign (pk, sk)← Gen(1n) Vrfpk(m,σ) = 1 m 6= m′ somente m′ assinada pelo oráculo 1n, pk (m,σ) � De�nição 10.9. Um esquema de assinaturas Π tem segurança contra fraude existencial para ataque de uma única mensagem se, para todo adversário poli- nomial A exite uma função desprezível negl(.) tal que Pr [SIG_FORGE_ONE(Π,A, n) = 1] ≤ negl(n). � 10.2.1 Esquema de assinaturas de Lamport Um esquema de assinatura para o qual não se conhece ataque via algoritmo quântico é o de Lamport, onde cada chave é usada para realizar uma única assinatura. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 10.3. RSA 177 Construção 10.10 (Esquema de assinaturas de Lamport). Seja f uma função de mão única e z o tamanho da mensagem a ser assinada. • Gen(1n): Construa duas matrizes X e Y , ambas com duas linhas e z colunas. Primeiro, escolha aleatoreamente os elementos de X (que devem ter n bits cada): xi,j ∈R { 0, 1 }n . Depois preencha Y aplicando f em cada elemento de X: yi,j ← f(xi,j). A chave privada é X, a matriz com os valores xi,j A chave pública é Y , a matriz com os valores yi,j • Signsk(m): interprete a mensagemm como uma sequência de bitsm1,m2, . . . ,mz. A assinatura é x1,m1 , x2,m2 , · · · , xzmz . • Vrfpk(m,σ) veri�ca se, para todo 1 ≤ i ≤ z, f(xi) = yi,mi . � Exemplo 10.11 (Esquema de assinaturas de Lamport). Sejam n = 3 e p(n) = n. As chaves geradas são: sk = ( x1,0 x2,0 x3,0 x1,1 x2,1 x3,1 ) , pk = ( y1,0 y2,0 y3,0 y1,1 y2,1 y3,1 ) . Como n = 3 só podemos assinar mensagens de três bits. Se m = 5 (101 em binário), a assinatura é calculada usando as posições destacadas na chave: sk = ( x1,0 x2,0 x3,0 x1,1 x2,1 x3,1 ) , σ = (x1,1, x2,0, x3,1). Para veri�car esta assinatura, Vrf(101, (x1,1, x2,0, x3,1)) veri�ca: pk = ( y1,0 y2,0 y3,0 y1,1 y2,1 y3,1 ) f(x1) = y1,1 ? f(x2) = y2,0 ? f(x3) = y3,1 ? J Teorema 10.12. Para qualquer função f de mão única, o esquema de assinatu- ras de Lamport é um esquema de assinaturas seguro para uma única assinatura. 10.3 RSA O RSA tem uma propriedade interessante: se trocarmos o papel das chaves pública e privada, o resultado é um esquema de assinaturas. Para assinar, encriptamos com a chave privada. Para veri�car uma assinatura, decriptamos com a chave pública Construção 10.13 (Esquema RSA de assinaturas (versão livro-texto)). Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 178 CAPÍTULO 10. ASSINATURAS DIGITAIS • Gen (o mesmo do criptossistema RSA) gera pk = (b,N) e sk = (a,N). • Signsk(m) = ma (mod N). • Vrfpk(m,σ) = 1 se e somente se m = σb (mod N). � Exemplo 10.14 (Assinatura com RSA (livro-texto)). Sejam p = 101, q = 3. Temos N = 303 e φ(N) = 200, como no Exemplo 9.20. Escolhemos, como naquele exemplo, b = 7 e a = 143. Para assinar m = 74, encriptamos com a chave privada: Signsk(74) = 74 143 (mod 303) = 200. Para veri�car a assinatura de (m,σ) onde m é 74 e σ é 200, deciframos com a chave pública: Vrfpk(200) = 200 7 (mod 303) = 74 = m. J Esta versão do esquema de assinaturas RSA no entanto é insegura, como mostramos a seguir. Fraude #1: assinando uma mensagem aleatória Seja pk = (b,N) uma chave pública RSA. O adversário pode escolher uma assinatura σ ∈ Z∗N arbi- trariamente e calcular m = σb (mod N). Está claro que Signpk(m) = σ, e o adversário conseguiu uma mensagem e assinatura válidas. Embora este ataque pareça pouco interessante de um ponto de vista prático (porque o adversário não pode escolher nem a assinatura e nem a mensagem), ele torna o RSA inseguro de acordo com a De�nição 10.7. Além disso, pode haver situações práticas nas quais este ataque represente um problema. Fraude #2: assinando uma mensagem arbitrária Seja pk = (b,N) uma chave pública e m uma mensagem que o adversário queira assinar. Seja m1 uma mensagem com assinatura σ1 e m2 = m/m1 (mod N). O adversário de alguma forma convenceo detentor de sk a assinar m2, obtendo σ2 e calcula Signsk(m) sem precisar usar a chave secreta sk: basta calcular σ = (σ1σ2) (mod N). Veri�camos que esta realmente é a assinatura de m. O algoritmo Vrf veri�ca se σb = m; pois então temos: σb = (σ1σ2) b = (ma1m a 2) b = mab1 m ab 2 = m1m2 = m (mod N). 10.3.1 Full-domain hash Há diversos esquemas de assinatura baseados no RSA que tentam remediar os problemas descritos nesta Seção. Um deles é bastante simples: ao invés de aplicar diretamente o RSA para produzir assinaturas de mensagens m ∈ Z∗p, assinamos resumos criptográ�cos de mensagens. O resultado é o full-domain hash, ou FDH, outro esquema de assinaturas. Pode-se demonstrar a segurança do FDH usando o modelo do oráculo aleatório. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 10.4. ELGAMAL 179 Construção 10.15 (Full-domain hash usando RSA). • Gen(1n) gera um par de chaves RSA e uma função e hashing H com entrada e saída de n bits. • Signsk(m) = H(m)a (mod N) • Vrfpk(m,σ) = 1⇔ H(m) = σb (mod N). � O algoritmo Gen deve �gerar� uma função de hashing de n em n bits, já que é o que será necessário para Sign e Vrf. Veri�camos agora o efeito desta medida nos ataques descritos. • Fraude #1: o adversário precisaria computar m′ = σb (mod N) e depois tentar encontrar m tal que H(m) = m′. Se a função de hashing H for difícil de inverter, a di�culdade do ataque será a mesma; • Fraude #2: para obter 1 nalgum dos experimentos que descrevemos, o adversário precisaria encontrar três mensagensm,m1,m2 tais queH(m) = H(m1)H(m2) (mod N). Este ataque também deve ser difícil se H for difícil de inverter. 10.4 ElGamal ElGamal descreveu no mesmo artigo um criptossistema e um esquema de assi- naturas � mas o esquema de assinaturas não é apenas uma maneira diferente de usar o criptossistema (como no caso do RSA). Ele apenas tem como base o mesmo pressuposto (a intratabilidade do problema do logaritmo discreto) e usa o mesmo algoritmo para geração de chaves. Considere as chaves pública e privada do criptossistema ElGamal: pk = 〈G, q, g, h〉 e sk = 〈G, q, g, x〉, onde h = gx. Iniciamos com a seguinte congruência: m ≡ ax+ by (mod φ(q)). (10.1) Pelo Teorema B.46, as soluções para esta congruência são as mesmas soluções para gm ≡ gax+by (mod q) ≡ gaxgby (mod q) ≡ haab (mod q). No esquema ElGamal, a assinatura de uma mensagem é exatamente o par (a, b) acima, que esperamos só poder ser produzido e�cientemente por alguém de posse da chave privada (e portanto de x). Assinar uma mensagem é calcular (a, b) tais que m ≡ ax+ by (mod q − 1). Isso é feito da seguinte forma: a = gy (mod q) b = (m− ax)y−1 (mod q − 1). Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 180 CAPÍTULO 10. ASSINATURAS DIGITAIS Sendo x e y secretos, não é conhecido algoritmo para resolver e�cientemente a congruência na Equação 10.1. Veri�car a assinatura é fácil, mesmo sem a chave secreta: basta que gm ≡ haab (mod q) para que a assinatura (a, b) seja válida. Desta forma chegamos então ao esquema de assinaturas de ElGamal. Construção 10.16 (Esquema de assinaturas de ElGamal). • Gen(1n): use G(1n) para escolher um grupo cíclico G com ordem q, com gerador g, sendo que q é representável com n bits. x ∈R Zq h← gx A chave pública é 〈G, q, g, h〉. A chave privada é 〈G, q, g, x〉. • Sign: dada a chave privada pk = 〈G, q, g, x〉 e a mensagemm ∈ G, escolha y ∈R Zq, sejam a = gy (mod q) b = (m− ax)y−1 (mod q − 1). Devolva (a, b). • Vrf: dada a chave pública pk = 〈G, q, g, h〉, e a assinatura (a, b), retorne um se e somente se haab ≡ gm (mod q). � 10.4.1 DSA O DSA é uma variante do esquema ElGamal de assinaturas adotado como pa- drão pelo NIST. As diferenças do ElGamal para o DSA podem ser resumidas em dois pontos: • O DSA usa um grupo de ordem p, que deve ser um primo com tamanho l múltiplo de 64 e 512 ≤ l ≤ 1024, e também um subgrupo de ordem q cujo tamanho deve ser 160 bits. • No DSA a mensagem não é usada diretamente na assinatura: um resumo de 160 bits é usado (o DSA foi proposto para ser usado com a função de hashing SHA-1, mas o SHA-1 posteriormente foi considerado inseguro; pode-se usar SHA-2). Além disso, a subtração no cálculo de b do ElGamal é trocada por uma adição. Temos então b = (H(m) + ax)y−1 (mod q). A Construção a seguir é o esquema de assinaturas DSA. Construção 10.17 (Esquema de assinaturas DSA). Seja H uma função de hashing com saída de 160 bits. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 10.5. F FULL-DOMAIN HASH COMQUALQUER PERMUTAÇÃODEMÃOÚNICA181 • Gen(): Escolha um grupo cíclico G com ordem p e gerador g, sendo que p é representável com 160 bits. Escolha um subgrupo de G com ordem q, tal que o tamanho de q seja múltiplo de 64 e esteja entre 512 e 1024. x ∈R Zq h← gx (mod p) A chave pública é 〈G, q, g, h〉. A chave privada é 〈G, q, g, x〉. • Sign: dada a chave privada pk = 〈G, q, g, x〉 e a mensagemm ∈ G, escolha y ∈R Zq, sejam a = ( gy (mod p) ) (mod q) b = (H(m) + ax)y−1 (mod q). Devolva (a, b). • Vrf: dada a chave pública pk = 〈G, q, g, h〉, e a assinatura (a, b), e sejam e = H(m)b−1 (mod q) f = ab−1 (mod q). Retorne um se e somente se a = ( geyf (mod p) ) (mod q). � O documento FIPS-186-2 descreve uma instância do DSA onde o grupo usado é o de pontos em uma curva elíptica sobre Zp. Este esquema é conhecido como ECDSA (Elliptic Curve DSA). 10.5 F Full-domain hash com qualquer permuta- ção de mão única (Esta Seção não foi redigida ainda) É possível trocar o RSA no FDH por qualquer família de permutações de mão única, mantendo sua segurança. 10.6 Árvores de assinaturas Uma árvore de Merkle é uma árvore binária onde as folhas são hashes de men- sagens, e cada nó interno contém o hash do conteúdo de seus dois �lhos. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 182 CAPÍTULO 10. ASSINATURAS DIGITAIS 10.6.1 Estendendo assinaturas de uma única mensagem, para muitas Notas Assinaturas digitais usando pares de chaves pública e privada foram idealizadas inicialmente no mesmo artigo de Di�e e Hellman [69] onde expuseram a ideia de criptossistemas assimétricos. Neste texto seguimos a abordagem de Jonathan Katz [129] para a classi�ca- ção da segurança de esquemas de assinaturas. O esquema de assinaturas de uma única vez foi desenvolvido por Leslie Lam- port, e descrito em um relatório técnico [142]. O livro de Jonathan Katz [129] contém um estudo detalhado sobre os fun- damentos teóricos das assinaturas digitais, e uma discussão detalhada do full- domain hash. Exercícios Ex. 87 � Mostre que se a assinatura (a, 0) for gerada para uma mensagem usando o DSA, é possível a qualquer um determinar a chave privada do assi- nante. Ex. 88 � O padrão DSA determinava inicialmente que a função de hash usada deveria ser exatamente o SHA-1 (a crença até então era de que para encontrar colisões no SHA-1, que tem saída de 160 bits, um adversário precisa- ria de 280 operações). Desde então diversos ataques ao SHA-1 foram descobertos e publicados: •Em 2005, Xiaoyun Wang, Yiqun Lisa Yin, e Hongbo Yu mostraram [216] como encontrar colisões no SHA-1 usando 269 operações. •Em 2008 Stéphane Manuel publicou um ataque [153] ao SHA-1 que permite obter colisões com complexidade entre 251 e 227. A respeito disso, responda: a) Explique as consequências disso para o padrão DSA original. b) Uma maneira de resolver o problema poderia ser usar a função SHA256 e usar apenas os 160 bits da esquerda da saída. Não havendo ataques práticos ao SHA256, esta solução seria teoricamente melhor, pior ou semelhante ao uso de outra (boa) função de hash com 160 bits de saída? Ex. 89 � Implemente os esquemas de assinatura descritos neste Capítulo. Ex. 90 � A seguinte a�rmação é bastante difundida: Dado um criptossistema assimétrico qualquer, pode-se obter um es- quema de assinaturas simplesmente mudando o papel as chaves pú- blica e privada: para assinar,basta encriptar com a chave privada e para veri�car basta decriptar com a chave pública. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 10.6. ÁRVORES DE ASSINATURAS 183 Mostre que isto é um equívoco, usando como exemplos criptossistemas assimé- tricos do Capítulo 9. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 184 CAPÍTULO 10. ASSINATURAS DIGITAIS Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini Parte II Protocolos 185 Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 187 Nesta parte são descritos protocolos criptográ�cos. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 188 Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini Capítulo 11 Introdução a Protocolos. Exemplo: Comprometimento Um protocolo criptográ�co é uma descrição de como diversos agentes realizam uma computação de maneira distribuída comunicando-se através de mensagens, sem a necessidade de con�ança entre os atores. 11.1 Modelo computacional É costumeiro de�nir interação entre participantes de um protocolo usando má- quinas de Turing. Neste texto estes sistemas são de�nidos usando �atores� (al- goritmos) conectados por �portas de comunicação�. Um ator é semelhante a um algoritmo que pode usar portas para comunica- ção com outros atores. Cada ator (ou participante) tem: • Um gerador pseudoaleatório, diferente de qualquer outro (ou seja, não deve ser possível correlacionar as sequências de bits produzidas pelos dois geradores). • Um par de portas de entrada e saída para comunicação com o ambiente (por estas portas o ator recebe a entrada e devolve a saída). • Um par de portas de entrada e saída para comunicação com outro ator. O modelo computacional que usaremos tem dois atores (embora seja possível generalizá-lo para mais participantes); abreviamos seus nomes por A e B. • As portas de comunicação dos dois atores estão acopladas de maneira que ambos possam trocar mensagens (a porta de entrada de A é ligada à porta de saída de B e vice-versa); • Os atores interagem por troca de mensagens síncronas. Nenhum dos dois realiza qualquer computação enquanto a mensagem é transmitida de um para outro ou enquanto o outro está ativo; 189 Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 190CAPÍTULO 11. INTRODUÇÃOA PROTOCOLOS. EXEMPLO: COMPROMETIMENTO P V out in out in De�nição 11.1 (Resultado de uma computação em conjunto). Quando dois atores A e B estão acoplados como descrito no texto executam um procedimento, ambos usando a mesma entrada x, denotamos por 〈A,B〉(x) a variável aleatória que representa a saída local de A após interagir com B. � A complexidade de tempo de um algoritmo executado em uma única má- quina de Turing depende somente do tamanho de sua entrada. Quando um ator é acoplado a outro, como descrevemos, sua complexidade de tempo depende do outro ator com quem ele se comunica. De�nimos então que a complexidade de tempo de um ator deve ser seu tempo máximo de execução, independente de qual seja sua contraparte. De�nição 11.2 (Complexidade de tempo de ator). A complexidade de tempo de um ator A é uma função f se para todo ator B e toda entrada x, a execu- ção de A acoplado a B com entrada comum x termina após f(|x|) operações, independente dos bits aleatórios usados por A e B durante a execução. � 11.2 Comprometimento Um protocolo de comprometimento é usado quando uma das partes precisa comprometer-se com um valor (ou mensagem), mas sem tornar este valor pú- blico. Esta noção usada na construção de outras primitivas e protocolos cripto- grá�cos, mas também é útil por si mesma. Protocolos de comprometimento são caracterizados por duas fases: • Comprometimento: nesta fase uma das partes (Alice, por exemplo) se compromete com uma mensagem, mas sem revelar seu conteúdo. Alice envia ao outro participante (Bob) um certi�cado de comprometimento (que neste Capítulo chamamos de �um comprometimento�). Bob não deve ter acesso à mensagem. • Revelação: nesta fase Alice envia para Bob alguma informação adicional que permite que Bob �nalmente tenha acesso à mensagem. Alice não deve ser capaz de negar que se comprometeu, e nem de modi�car a mensagem. Há duas propriedades importantes de protocolos de comprometimento: Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 11.2. COMPROMETIMENTO 191 • A propriedade de vinculação preserva os interesses de quem recebe o com- prometimento: ele representa uma garantia de que a outra parte se com- prometeu com algum valor, e que este valor será revelado oportunamente; • A propriedade de sigilo preserva os interesses de quem se compromete: apesar de se comprometer com um valor, ele é mantido em sigilo. De�nição 11.3 (Protocolo de comprometimento). Um protocolo de compro- metimento é composto dos algoritmos polinomiais Gen, Commit e Reveal: • Gen(1n), que é usado para produzir uma das entradas de Commit. • Commitk(m), onde k é gerado por Gen. A saída de Commit é o par (c, d) onde c é o comprometimento, e d é o valor de abertura. • Revealk(c, d), que retorna uma mensagem m ou um valor especial indi- cando que (c, d) não foi gerado por Commit. Exigimos que para toda mensagem m e toda chave k gerada por Gen, Revealk(Commitk(m)) = m. � Uma das partes usará Commitk(m) para gerar c e d, e enviará c na fase de comprometimento e d na fase de revelação. Após receber d, o outro participante poderá obter m a usando Revealk(c, d) Informalmente, podemos dizer que um protocolo de comprometimento é vin- culante se nenhum adversário pode obter dois comprometimentos iguais para mensagens diferentes. Será útil, no entanto, de�nirmos variantes desta ideia: o protocolo é perfeitamente vinculante se não há como o adversário ter sucesso; é estatisticamente vinculante se a probabilidade de sucesso é desprezível, mesmo para adversários com poder de processamento in�nito; e é computavelmente vinculante se a probabilidade de sucesso de adversários de tempo polinomial é desprezível. Experimento 11.4 (COMMIT_BIND(Π,A, n)). 1. Gen(1n) é usado para gerar a chave k. 2. Envie 1n para o adversário; 3. O adversário determina uma mensagem m, um comprometimento c = Commitk(m) e dois valores de abertura d e d′. 4. O adversário devolve duas mensagens m,m′, os dois valores de abertura d, d′ e o comprometimento c. 5. O resultado do experimento é 1 se e somente se m 6= m′, m,m′ 6= ⊥, m = Revealk(c, d) e m′ = Revealk(c, d′). Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 192CAPÍTULO 11. INTRODUÇÃOA PROTOCOLOS. EXEMPLO: COMPROMETIMENTO D T k ← Gen(1n) m 6= m′m,m′ 6= ⊥, m = Revealk(c, d), m′ = Revealk(c, d ′)→ 1 1n m,m′, d, d′, c � De�nição 11.5. Um protocolo de comprometimento Π é (i) computacionalmente vinculante se para qualquer adversário polinomial A existe uma função desprezível negl(·) tal que Pr[COMMIT_BIND(Π,A, n) = 1] ≤ negl(n); (ii) estatisticamente vinculante se para todo adversárioA, não necessariamente executando em tempo polinomial, existe uma função desprezível negl(·) tal que Pr[COMMIT_BIND(Π,A, n) = 1] ≤ negl(n); (iii) perfeitamente vinculante se para quaisquer A e n Pr[COMMIT_BIND(Π,A, n) = 1] = 0. � Para de�nir a propriedade de sigilo usaremos um experimento com dois ato- res, um desa�ante e um adversário. Experimento 11.6 (COMMIT_HIDE(Π,A, n)). 1. Gen(1n) é usado para gerar a chave k. 2. Envie 1n para o adversário; 3. A envia duas mensagens m1 e m2 de mesmo tamanho. 4. O desa�ante D gera um bit aleatório b ∈R {0, 1}. 5. D calcula (c, d) = Commitk(mb) e envia c para A. 6. A devolve um bit b′ 7. O resultado do experimento é um se b = b′ e zero caso contrário. Ve rs ãoPr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 11.2. COMPROMETIMENTO 193 D T k ← Gen(1n) b ∈R { 0, 1 } (c, d)← Commitk(mb) b = b′ → 1 b 6= b′ → 0 1n m1,m2 c b′ � De�nição 11.7. Um protocolo de comprometimento Π tem (i) sigilo computacional se para qualquer adversário polinomial A existe uma função desprezível negl(·) tal que Pr[COMMIT_HIDE(Π,A, n)] ≤ 1 2 + negl(n). (ii) sigilo perfeito se para qualquer adversário (polinomial ou não) A e todo n, Pr[COMMIT_HIDE(Π,A, n)] = 1 2 . � Teorema 11.8. Não existe protocolo de comprometimento com vínculo perfeito e sigilo perfeito. Demonstração. Um protocolo perfeitamente vinculante precisa ser determinís- tico, de outra forma o adversário com tempo ilimitado poderia encontrar as duas mensagens com o mesmo comprometimento. Isto contraria a de�nição de sigilo perfeito. � Construção 11.9 (Protocolo de comprometimento com resumos). Seja H uma família de funções de hashing. Um protocolo de comprometimento pode ser construído como mostrado a seguir. • Gen(1n) escolhe aleatoreamente s e uma função de hashing Hs. • Commitk(m) = 〈Hs(r||m), (r,m)〉, onde r ∈R {0, 1}n. • Revealk(c, (r,m)): obter a mensagem é trivial; veri�car que c = Hs(r||m) também. � O Exercício 92 pede a demonstração das propriedades do protocolo de com- prometimento com resumos. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 194CAPÍTULO 11. INTRODUÇÃOA PROTOCOLOS. EXEMPLO: COMPROMETIMENTO Construção 11.10 (Protocolo de comprometimento usando logaritmo dis- creto). • Gen(1n) escolhe aleatoreamente um primo p com n bits, um gerador g para Z∗p. • Commitk(m) = (gm,m). • Revealk(c,m) veri�ca se c = gm. � Teorema 11.11. Presumindo a hipótese do logaritmo discreto, o protocolo des- crito na Construção 11.10 tem sigilo computacional e vínculo perfeito. Demonstração. Como Bob só tem a descrição do grupo e gm, determinar a mensagem é exatamente resolver o problema do logaritmo discreto e portanto o protocolo tem sigilo computacional. O logaritmo de m na base g é único no grupo Z∗n, portanto Alice nunca poderá trocarm por uma segunda mensagemm′ sem alterar o comprometimento � e portanto o protocolo tem vínculo perfeito. � Se modi�carmos o problema usado como base do protocolo do logaritmo discreto para o de Di�e-Hellman obtemos o protocolo de Pedersen. Construção 11.12 (Protocolo de comprometimento de Pedersen). • Gen(1n) escolhe aleatoreamente um primo p com n+1 bits tal que p = 2q+1 para algum primo q. Retorne (p, g, y) onde g é um gerador para Z∗p e y ∈R Z∗p. • Commitk(m): escolha r ∈R Z∗q e calcule c = grym (mod p) Retorne 〈c, (r,m)〉. • Revealk(c, (r,m)): se c = grym retorne m, senão retorne ⊥ (um valor indicando que o comprometimento não é válido). É necessário que m ∈ Z∗q . � Teorema 11.13. O protocolo de Pedersen tem sigilo perfeito e vinculação com- putacional. Demonstração. Como r é escolhido aleatoreamente em Z∗q , grym é uniforme- mente distribuído em G, independente de m. Concluímos que o protocolo tem sigilo perfeito. A propriedade de vinculação seria quebrada se for possível encontrar (r,m) e (r′,m′) tais que m 6= m′ e Revealk(c, (r,m)) = m Revealk(c, (r ′,m′)) = m′. Isso é o mesmo que grym = gr ′ ym ′ (mod p), Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 11.2. COMPROMETIMENTO 195 mas então gr−r ′ = ym ′−m (mod p), e y = g(r−r ′)−(m′−m)−1 (mod q) (mod p). Isso, por sua vez, signi�ca computar o logaritmo de y na base g. Como y é escolhido uniformemente ao acaso, teríamos que contradizer a hipótese do logaritmo discreto. Concluímos que o protocolo tem vinculação computacional. � Há algo importante a observar a respeito dos dois protocolos baseados em lo- garitmo discreto: um deles usa apenas gm como comprometimento, e é bastante claro que quebrar seu sigilo é equivalente a calcular o logaritmo discreto de m. Por outro lado, como este logaritmo é único, obtemos vinculação perfeita. Ao mudar de gm para grym abrimos mão da vinculação perfeita, porque há diversos valores de r e m para os quais c = grym. No entanto, a multiplicação por gr passou a nos dar sigilo perfeito. É possível também construir um protocolo de comprometimento a partir de um criptossistema assimétrico com segurança CPA. Construção 11.14 (Protocolo de comprometimento com criptossistema assi- métrico). Seja Π = (Gen, Enc, Dec) um criptossistema de chave pública com segurança CPA. • Gen(1n) de Π é usado para gerar sk, pk. • Commitk(m) = (Encpk(m), sk). • Revealk(c, (pk, sk)) decripta m com a chave privada sk, e retorna m se Encpk(m) = c, senão retorna ⊥. � O Exercício 96 pede a demonstração do seguinte Teorema. Teorema 11.15. Se Π é um criptossistema de chave pública com segurança CPA, então a construção 11.14 usando Π é um protocolo de comprometimento com sigilo computacional. Se em Π a decriptação é não-ambígua, então o pro- tocolo tem vinculação perfeita. 11.2.1 Comprometimento de bit Há protocolos para obter comprometimento com um único bit. Mostramos aqui apenas um deles, usando resíduos quadráticos. Construção 11.16 (Protocolo de comprometimento com resíduos quadráticos). 1. Gen(1n) escolha um inteiro N com tamanho n bits. A distribuição dos bits deve ser uniforme. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 196CAPÍTULO 11. INTRODUÇÃOA PROTOCOLOS. EXEMPLO: COMPROMETIMENTO 2. Commitk(b): Alice escolhe y ∈R Z∗N , que não é resíduo quadrático. Para comprometer-se com zero, Alice envia c, que é um quadrado x2. Para comprometer-se com um, envia c que é não quadrado: c = yx2. Retorne c e d = (x, y). 3. Revealk(c, (x, y)): se c = x2 retorne zero; se c = yx2 retorne um; senão retorne ⊥. � Teorema 11.17. O protocolo 11.16 é perfeitamente vinculante e, sendo verda- deira a hipótese do resíduo quadrático, é computacionalmente ocultante. Demonstração. Como os comprometimentos dos bits são quadrados para zero e não quadrados para um, é impossível conseguir um comprometimento que sirva tanto para zero como para um, e portanto o protocolo tem vínculo perfeito. O protocolo tem sigilo computacional porque se fosse possível distinguir entre comprometimentos de zeros e uns seria possível determinar e�cientemente se um número é resíduo quadrático módulo N . � 11.2.2 Veri�cação de igualdade de logaritmos Esta Seção descreve um protocolo simples que permite a uma parte P provar para uma outra, V , que dados dois geradores g1, g2 de um grupo Gq e dois elementos h1, h2 ∈ Gq, existe um a tal que h1 = ga1 e h2 = ga2 (ou seja, que o logg1 h1 = logg2 h2 (mod q)). Construção 11.18 (Protocolo para provar de igualdade de logaritmos). Sejam g1, g2 geradores de um grupo Gq, com q primo, e sejam h1, h2 ∈ Gq. O provador P conhece a tal que h1 = ga1 e h2 = g a 2 . • P escolhe w ∈R Gq e envia a1 = gw1 e a2 = gw2 para o veri�cador V ; • V envia um desa�o aleatório c ∈R Zq para P ; • P devolve r = w − ac (mod q); • V veri�ca que a1 = gr1hc1 e a2 = gr2hc2. � A veri�cação funciona porque gr1h c 1 = g w−ac 1 h c 1 = gw−ac1 (g a 1 ) c = gw−ac1 g ac 1 = gw1 = a1. O mesmo é válido para a2 e gr2h c 2. Note que o veri�cador V não tem informação que permita deduzir a � apenas é convencido de que o dois logaritmos são iguais. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 11.2. COMPROMETIMENTO 197 11.2.3 Cara-ou-coroa Uma aplicação imediata de protocolos de comprometimento é o jogo de cara- ou-coroa por telefone. Se Alice e Bob precisam jogar uma moeda para decidir aleatoreamente entre duas opções, garantindo que nenhum deles possa in�uen- ciar a decisão, podem fazê-lo da seguinte maneira: 1. Alice compromete-se com um bit bA ∈R {0, 1} e envia o comprometimento cA para Bob; 2. Bob também se compromete com um bit bB ∈R {0, 1} e envia o compro- metimento cB para Alice; 3. Uma vez que cada um tenha o comprometimento do outro, Alice e Bob enviam um ao outro os valoresque cada um escolheu (bA e bB); 4. Ambos computam o resultado bA ⊕ bB . É fácil perceber que Pr(cara) = Pr(coroa) = 1/2. Notas Exercícios Ex. 91 � Porque no modelo computacional apresentado neste Capítulo dis- semos que A e B devem ter geradores pseudoaleatórios diferentes? Ex. 92 � Demonstre as propriedades de ocultamento e vinculação para o protocolo de comprometimento usando resumos. Que propriedades da função de resumo são importantes? As propriedades do protocolo mudam de acordo com as propriedades do resumo? Ex. 93 � O protocolo de transferência inconsciente dado neste Capítulo usa o RSA. Generalize-o tanto quanto conseguir (tente descrevê-lo em termos de estruturas algébricas). Ex. 94 � Se quisermos usar um protocolo de comprometimento com sigilo perfeito, mas insistirmos em garantir que Gen seja executada por alguém não con�ável, como podemos proceder? Ex. 95 � A Demonstração do Teorema 11.13 diz que como �grym é unifor- memente distribuído em G, independente de m�, o protocolo tem sigilo perfeito. Elabore estas a�rmações com mais rigor (primeiro a a�rmação a respeito da distribuição de grym, inclusive sobre a independência de m, e �nalmente mostre que isso realmente confere sigilo perfeito ao protocolo. Ex. 96 � Demonstre o Teorema 11.15. Ex. 97 � Implemente todos os protocolos descritos neste Capítulo. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 198CAPÍTULO 11. INTRODUÇÃOA PROTOCOLOS. EXEMPLO: COMPROMETIMENTO Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini Capítulo 12 Compartilhamento de Segredos Queremos manter um segredo em sigilo � por exemplo, a chave para decriptar um documento ou para permitir acesso a um sistema � mas não queremos que este segredo seja conhecido apenas por uma pessoa. Seria interessante se o segredo fosse compartilhado entre várias pessoas, e que fosse revelado apenas quando um subconjunto autorizado dos participantes decidisse fazê-lo. O foco deste Capítulo são protocolos para realizar este objetivo. Estes protocolos são chamados de esquemas de compartilhamento de segredos. Quando há n participantes e o quórum (ou limiar) para revelação do se- gredo é de k participantes, dizemos que o protocolo é um esquema (k, t) de compartilhamento de segredos. Há também esquemas mais gerais onde não determinamos um quórum, mas especi�camos quais conjuntos de participantes podem revelar o segredo. Dentre os esquemas expostos neste Capítulo o de Shamir é particularmente importante porque dele derivam esquemas de compartilhamento veri�cável, e porque é usado como bloco básico na construção de protocolos (por exemplo, nos protocolos para computação distribuída segura, descritos no Capítulo 15). Primeiro de�niremos estruturas de acesso, que são a forma como especi�ca- mos os participantes autorizados. De�nição 12.1 (Estrutura de Acesso). Seja P um conjunto de participantes. Os subconjuntos de P podem ser divididos arbitrariamente em dois conjuntos, um deles chamado de conjunto dos quali�cantes e o outro de conjunto dos não quali�cantes. O conjunto dos quali�cantes é chamado de estrutura de acesso sobre P . � Exemplo 12.2. Suponha que para realizar operações bancárias de grande valor em uma organização, seja necessário a autorização de um dos seguintes grupos: • Presidente e Coordenador Financeiro; 199 Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 200 CAPÍTULO 12. COMPARTILHAMENTO DE SEGREDOS • Todos os quatro membros do Conselho • Coordenador Financeiro, Vice-Presidente e dois membros do Conselho; Assim, podemos ter um segredo que autoriza uma operação de grande valor, dividido em partilhas dadas a cada participante, de forma que apenas esses conjuntos possam revelá-lo. A estrutura de acesso é Γ = {p, f}, {c1, c2, c3, c4}{f, v, c1, c2}, {f, v, c1, c3}, {f, v, c2, c3},{f, v, c1, c4}, {f, v, c2, c4}, {f, v, c3, c4} J Se um conjunto quali�cante tem acesso ao segredo, um superconjunto dele também deve ter. Esta ideia é capturada pelo conceito de estrutura monótona. De�nição 12.3 (Estrutura Monótona). Seja A um conjunto. Uma estrutura monótona sobre A é uma coleção Γ de subconjuntos de A tal que • A ∈ Γ; • Se X ∈ Γ e X ⊂ X ′ ⊂ Γ, então X ′ ∈ Γ. � Todas as estruturas de acesso que usaremos são monótonas. De�nição 12.4 (Esquema de Compartilhamento de Segredos). Seja Γ uma es- trutura monótona de acesso sobre um conjunto P de participantes. Um esquema de compartilhamento de segredos Π sobre Γ é um par de algoritmos: • Share(s,Γ): dado um segredo s e a estrutura de acesso Γ, uma partilha Sa é determinada para cada participante a ∈ P ; • Combine(H): se H é um conjunto de partilhas obtido de Share(s,Γ), e as partilhas de H são de participantes que formam um conjunto quali�cante: H = {Sa | a ∈ O,O ∈ Γ } , então Combine deve retornar s. � 12.1 Esquemas com quórum Os primeiros esquemas de compartilhamento de segredos foram propostos in- dependentemente em 1979 por Adi Shamir [192] e George Blakley [29], e não usam estruturas de acesso. São de�nidos de forma que dentre n participantes, qualquer quórum (ou limiar) de k ≤ n possa obter o segredo (estes são chamados de esquemas (k, n) de compartilhamento). Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 12.1. ESQUEMAS COM QUÓRUM 201 12.1.1 Esquema de Shamir Duas observações muito simples formam a base do esquema de compartilha- mento de segredos de Shamir: • Interpolação: dados n+1 pontos (xi, yi) diferentes, há um único polinômio de grau n passando por todos os pontos. • Sigilo: dado um conjunto contendo menos que n + 1 pontos, pode-se de- terminar in�nitos polinômios passando por todos os pontos do conjunto. A ideia básica usada no esquema de Shamir é: • Gere um polinômio p(·) de grau t aleatoreamente, mas cujo termo cons- tante é igual ao segredo s. • Dê a cada participante um ponto (x, p(x)). • Quando t+ 1 participantes se reunirem com seus pontos, estará determi- nado o polinômio (e o termo constante). Com um participante a menos, eles nada sabem a respeito do polinômio. No entanto, esta ideia foi descrita para polinômios sobre corpos in�nitos. O esquema de compartilhamento de Shamir adapta este método para corpos �nitos. Para obter o polinômio de grau n a partir dos pontos, usamos interpolação usando a fórmula de Lagrange, que derivamos a seguir. Teorema 12.5. Sejam n+ 1 pontos (xi, yi), todos distintos. O (único) polinô- mio de grau n passando por todos os pontos é tal que seu valor em x pode ser calculado da seguinte forma: l(x) = n∑ j=0 yj lj(x) lj(x) = n∏ k=0;k 6=j x− xk xj − xk . Demonstração. Supomos que temos n+1 pontos distintos (x0, y0), . . . , (xn, yn). De�nimos os seguintes polinômios: lk(x) = (x− x0) · · · (x− xk−1)(x− xk+1) · · · (x− xn) (xk − x0) · · · (xk − xk−1)(xk − xk+1) · · · (xk − xn) . Estes polinômios são todos de grau n. Consideramos agora dois casos: • Quando calculamos lk(xk), o numerador e denominador são iguais e por- tanto lk(xk) = 1; Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 202 CAPÍTULO 12. COMPARTILHAMENTO DE SEGREDOS • Quando calculamos lk(xj), com j 6= k, o fator (xj − xj) estará no nume- rador, que portanto resulta em zero 1. De�nimos então o polinômio resultante da soma de todos os lk de grau n (lem- bramos que já temos o valor l(xk), que inicialmente chamamos de yk): Pn(x) = n∑ k=0 l(xk)lk(x). Como todos os lk(x) são de grau n e para os pontos x0, x1, . . . xn, teremos portanto Pn(xi) = l(xi)l0(xi) + · · ·+ l(xi)li(xi) + · · ·+ l(xi)ln(xi) e como somente li(xi) é diferente de zero (e igual a um), temos Pn(xi) = l(xi)(1) = l(xi). E o polinômio Pn coincidirá com os n+ 1 pontos xi. � No contexto do esquema de Shamir, estamos interessados no coe�ciente cons- tante do polinômio. Temos então l(0) = n∑ j=0 yjrj rj = lj(0) = n∏ k=0;k 6=j xk xk − xj . O vetor (r1, r2, . . . , rn) é chamadode vetor de recombinação. Construção 12.6 (Esquema de compartilhamento (k,n) de Shamir). Seja Fq um corpo, s um segredo, k o quórum e n o total de participantes. • Share(s): Para distribuir o segredo entre os n participantes: 1. Cada participante i é identi�cado com xi ∈ Fq. 2. Escolha uniformemente k − 1 coe�cientes a1, . . . , ak−1. e seja p o polinômio p(x) = s+ a1x+ a2x2 + . . .+ ak−1xk−1. 3. Cada participante i recebe por um canal seguro o ponto (xi, p(xi)) (portanto n pontos são distribuídos). • Combine(H) : Para revelar o segredo, k participantes mostram seus pontos (xi, p(xi)) e calculam o valor do polinômio em zero usando o polinômio interpolador de Lagrange. � 1Para valores diferentes dos xi dados inicialmente, lk(x) não é necessariamente um nem zero. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 12.2. SEGURANÇA 203 O esquema de Shamir é seguro, porque mesmo conhecendo k−1 chaves a pro- babilidade do segredo ser qualquer elemento do corpo F é uniforme; é mínimo, porque o tamanho de cada chave não é maior que o do segredo; é extensível, porque podemos criar mais pontos do polinômio e distribuir, aumentando n; e é um esquema com limiar. O esquema de Shamir, no entanto, não pode ser usado com qualquer es- trutura de acesso � funciona apenas com quórum. Apesar disso, serve como fundamento para a construção de outros esquemas mais �exíveis, como veremos mais adiante. 12.1.2 Esquema de Blakley Assim como duas observações sobre polinômios fundamentam o funcionamento do esquema de Shamir, os seguintes fatos a respeito de hiperplanos são usados na construção do esquema de compartilhamento de segredos de Blakley: em um espaço vetorial de n dimensões, n hiperplanos não paralelos se interceptam em um único ponto; mas com n− 1 hiperplanos, há in�nitos pontos de interseção. Construção 12.7 (Esquema de compartilhamento de segredos de Blakley). O espaço onde o segredo é codi�cado é um corpo �nito de n dimensões. • Share(s) : para distribuir o segredo entre n participantes, codi�que o segredo como um ponto em n dimensões. Dê a cada participante um hiperplano passando pelo ponto. • Combine(H) : n participantes, cada um com um hiperplano diferente, podem determinar a interseção de seus hiperplanos, que é o segredo. � O esquema de Blakley é extensível porque podemos criar novos hiperplanos passando pelo ponto onde está o segredo; e é um esquema com limiar. No entanto, não é estritamente seguro e não é mínimo. 12.2 Segurança Mencionamos dois aspectos importantes da segurança de esquemas de comparti- lhamento: um deles é o sigilo (um conjunto não autorizado de participantes não pode obter qualquer informação sobre o segredo) e o outro é a veri�cação (deve ser possível veri�car se algum dos participantes está agindo desonestamente). 12.2.1 Sigilo De�nição 12.8 (Sigilo esquema de compartilhamento de segredos). Seja Π um esquema de compartilhamento de segredos com estrutura de acesso Γ. Dizemos que Π tem sigilo perfeito se Pr(s) = Pr(s|H ′) para qualquer H ′ /∈ Γ. � Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 204 CAPÍTULO 12. COMPARTILHAMENTO DE SEGREDOS Teorema 12.9. O esquema de compartilhamento de segredos de Blakley não tem sigilo perfeito. Demonstração. Seja s um segredo representado como um ponto (s1, s2, . . . , sm) usando o esquema de Blakley, com limiar igual a t. De posse de nenhuma informação, sabe-se que o segredo está em Zmn . A probabilidade de um ponto selecionado uniformemente ser igual a s é 1/nm. Conhecendo k < t partilhas, restam apenas t − k partilhas que precisamos descobrir � se tentarmos selecioná-las uniformemente a probabilidade de encon- trarmos s é 1 nt−k < 1 nm . Mais interessantemente, com t− 1 partilhas a probabilidade é 1/n. � Ainda que n seja exponencial no número de bits usados, estritamente falando o esquema de Blakley não tem sigilo perfeito. O Exercício 98 pede a demonstração de que o esquema de Shamir, ao con- trário do de Blakley, tem sigilo perfeito. Teorema 12.10. O esquema de compartilhamento de segredos de Shamir tem sigilo perfeito. 12.3 Estruturas gerais de acesso Os esquemas de Shamir e de Blakley não permitem escolher quais participantes podem revelar o segredo � só é possível determinar o número de participantes necessário. Nesta seção descrevemos um esquema de compartilhamento que permite especi�car listas arbitrárias de participantes autorizados a revelar o segredo. Suponha que os participantes em um esquema de compartilhamento são • p, o Presidente; • v, o Vice-presidente; • c, o Presidente do Congresso; • d, o Ministro da Defesa. Suponha também que podem decidir declarar guerra2 e ter acesso ao código secreto para uso de armamento nuclear: • O Presidente da República e o Ministro da Defesa (p, d); • O Presidente da República e o Presidente do Congresso (p, c); • O Vice-Presidente, o Presidente do Congresso e o Ministro da Defesa (v, c, d). 2É uma hipótese �ctícia apenas. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 12.3. ESTRUTURAS GERAIS DE ACESSO 205 A estrutura de acesso para o código é Γ = { {p, d}, {p, c}, {v, c, d}, {p, d, c}, {p, d, v}, {p, v, c}, {p, v, c, d} } Note que tivemos que listar mais conjuntos do que havíamos especi�cado (por exemplo, {p, d, c, v}, {p, d, v} e {p, d, c} só foram incluídos porque {p, d} ∈ Γ). Um conjunto quali�cante minimal X em Γ é aquele que não é superconjunto de outro, também em Γ � e uma descrição minimal de Γ inclui apenas os conjuntos quali�cantes minimais: Γ = { {p, d}, {p, c}, {v, c, d} } Podemos reescrever a estrutura se de�nirmos p, v, d, c como variáveis binárias (um conjunto pode ser então descrito usando 1 para �presente� e 0 para �au- sente�). A estrutura de acesso passaria a ser, em forma normal disjuntiva com três cláusulas conjuntivas: Γ = (p ∧ d) ∨ (p ∧ c) ∨ (v ∧ c ∧ d). O esquema de Ito-Nishizeki-Saito usa a descrição da estrutura de acesso nesta forma, sendo tal Construção a demonstração do seguinte Teorema: Teorema 12.11. Para qualquer estrutura geral de acesso Γ, existe um esquema de compartilhamento de segredos que implementa Γ. Construção 12.12 (Esquema de Ito-Nishizeki-Saito). Seja Γ uma estrutura de acesso descrita na forma normal disjuntiva. Cada conjunto quali�cante minimal O está descrito como uma conjunção. Cada posição de variável é numerada na fórmula: por exemplo, (v1 ∧ v2) ∨ v3 tem posições 1, 2 e 3. Seja n o número de bits necessário para representar o segredo. • Share(s,Γ): Gere aleatoreamente valores si ∈R {0, 1}n tais que para cada cláusula (vi ∧ . . . vj), si ⊕ . . . ⊕ sj = s. Um participante recebe si se sua variável estiver na i-ésima posição, e portanto Share retorna um conjunto de valores si para cada participante. • Combine(H): qualquer um dos conjuntos quali�cantes pode revelar s ob- servando quais valores de suas partilhas precisam ser combinados com ou-exclusivo, levando em conta suas posições em Γ. � Exemplo 12.13 (Esquema de Ito-Nishizeki-Saito). A estrutura já mencionada tem três conjuntos quali�cantes (e três cláusulas conjuntivas). Para cada cláu- sula (vi, . . . , vk), queremos que o ou exclusivo dos si, . . . , sk seja igual a s. s = s1 ⊕ s2 = s3 ⊕ s4 = s5 ⊕ s6 ⊕ s7. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 206 CAPÍTULO 12. COMPARTILHAMENTO DE SEGREDOS As partilhas dos quatro participantes são determinadas pelas suas posições na fórmula. sp = (s1, s3) sd = (s2, s7) sc = (s4, s6) sv = s5. Suponha então que o segredo seja 0110. Escolhemos aleatoreamente s1 = 1100. Como s deve ser igual a s1⊕s2, então s2 = s⊕s1 = 1010. Escolhemos s3 = 1110 e então s4 deve ser 1000. Escolhemos s5 = 1111 e s6 = 0010. s7 deve então ser igual a s⊕ s5 ⊕ s6 = 1011. s1 = 1100 s2 = 1010 s3 = 1110 s4 = 1000 s5 = 1111 s6 = 0010 s7 = 1011 As partilhas são sp = (s1 = 1100, s3 = 1110) sd = (s2 = 1010, s7 = 1011) sc = (s4 = 1000, s6= 0010) sv = (s5 = 1111). Para revelar o segredo, p, c se reúnem e calculam s = s3 ⊕ s4 = 1110⊕ 1000 = 0110. Quando v, c, d se reúnem, também podem calcular s: s = s5 ⊕ s6 ⊕ s7 = 1111⊕ 0010⊕ 1011 = 0110. J Teorema 12.14. O esquema de Ito-Nishizeki-Saito tem sigilo perfeito. Demonstração. Suponha que um participante tenha um valor sk. Este valor foi escolhido aleatoreamente ou foi calculado a partir de s. Se foi escolhido aleatoreamente, não há como extrair dela qualquer informação a respeito de s. Mas sk pode ter sido calculado a partir de s (porque era a última variável de uma conjunção): sk = si ⊕ · · · ⊕ sj ⊕ s Seja então s′ = si ⊕ · · · ⊕ sj . Evidentemente s′ tem distribuição uniforme (porque é o ou exclusivo de outras variáveis escolhidas uniformemente) e não foi construída usando s. Ao fazer s⊕ s′ estamos essencialmente encriptando s com Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 12.4. COMPARTILHAMENTO VERIFICÁVEL 207 bits escolhidos uniformemente � exatamente como no one-time pad. Assim, não deve ser possível extrair informação a respeito de s a partir de sk, ou seja, Pr(s|sk) = Pr(s). O mesmo vale quando o participante tem vários valores si, ..., sk. � O esquema de Ito-Nishizeki-Saito, no entanto, é ine�ciente: cada participante pode receber vários valores, cada um do tamanho do segredo (no esquema de Shamir cada participante recebe um valor de tamanho igual ao do segredo). 12.4 Compartilhamento veri�cável Há um problema com os esquemas de Shamir e de Ito-Nishizeki-Saito: não é possível aos participantes veri�car se as partilhas apresentadas por outros são de fato as que receberam do distribuidor, e tampouco se todas as partilhas distribuídas estão corretas. Por exemplo, no esquema de Shamir qualquer participante � tanto o que distribui os segredos como algum dos k que pretendem reconstruí-lo � pode modi�car um par (xi, yi) de forma que o segredo original não seja recuperado, mas sim algum outro valor. Não há como saber quem agiu desonestamente, e nem como recuperar o valor original sem mais participantes. De�nição 12.15 (Esquema veri�cável de compartilhamento de segredos). Um esquema de compartilhamento de segredos veri�cável é semelhante a um es- quema de compartilhamento de segredos, havendo um algoritmo adicional, SecVrf, que pode ser executado por cada participante a �m de veri�car se sua partilha está correta � ou seja, se o distribuidor entregou-lhe uma partilha que de fato permite revelar o segredo, e que nenhum dos outros participantes modi�cará sua partilha. � Após um conjunto quali�cante se formar, cada um pode veri�car a corretude das partilhas dos outros no conjunto, já que as partilhas do conjunto quali�cante serão abertas. O esquema veri�cável de compartilhamento de segredos de Pedersen, mos- trado na próxima Construção, é uma extensão do esquema de Shamir usando o problema decisional Di�e-Hellman para a veri�cação. Após construir o polinômio a(x) que servirá para distribuir o segredo usando o esquema de Shamir, um outro polinômio b(x) é gerado para permitir a veri�ca- ção usando o esquema de comprometimento de Pedersen. O distribuidor entrega pontos dos dois polinômios aos participantes, mas também publica um compro- metimento, de forma que não seja possível a qualquer um (nem os portadores das partilhas e nem o distribuidor) mudar seus valores posteriormente. Construção 12.16 (Compartilhamento de segredos veri�cável (esquema de Pedersen)). Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 208 CAPÍTULO 12. COMPARTILHAMENTO DE SEGREDOS • Gen(1n): gere um grupo cíclico G de ordem n com gerador g, onde n é primo. • Share(s): escolha dois polinômios aleatórios, com S = a0: a(x) = a0 + a1x+ a2x 2 + · · ·+ at−1xt−1 b(x) = b0 + b1x+ b2x 2 + · · ·+ bt−1xt−1. Em seguida, cada participante recebe sua partilha, que é composta de um ponto de cada polinômio. O participante Pi recebe os pontos a(i) e b(i). Escolhe-se um elemento h ∈R G \ { 1 } Calcule uma lista C = (C0, C1, C2, . . . , Ct−1), tal que Ci = g aihbi . Esta lista contém um comprometimento para as partilhas de cada par- ticipante, usando o esquema de comprometimento de Pedersen (o valor comprometido é ai, e bi é o elemento aleatório3). Cada participante re- cebe a lista inteira. • SecVrf(C, a(i), b(i)): cada participante Pi veri�ca se t−1∏ j=0 C (ij) j = g a(i)hb(i). (O índice i é do participante Pi, e o índice j é iterado para todos os participantes) • Combine(H): a recuperação do segredo a partir de um conjunto H de pontos do polinômio a se dá da mesma forma como no esquema de Shamir. � Para veri�car que SecVrf de fato garante que a partilha está correta, basta substituir os valores de Cj no produtório: t−1∏ j=0 C (ij) j = ( ga0hb0 )(i0) ( ga1hb1 )(i1) ( ga2hb2 )(i2) · · · = ga0+a1i+a2i 2+...hb0+b1i+b2i 2+... = ga(i)hb(i). Teorema 12.17. O esquema de compartilhamento da Construção 12.16 protege o distribuidor com sigilo perfeito. Em outras palavras, seja t o quórum para revelação do segredo, e P um conjunto de participantes de posse de seus segredos e comprometimentos (a(i), b(i)). Denotamos por C a lista de comprometimentos e V = ∪P {(a(i), b(i))}. Então Pr [S = s|V,C] = Pr [S = s] . 3O esquema de comprometimento de Pedersen é detalhado na página 194. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 12.5. COMPARTILHAMENTO PUBLICAMENTE VERIFICÁVEL 209 Demonstração. (Rascunho) Seja P um conjunto de t − 1 participantes. Cada Pi tem um par (a(i), b(i)), e todos tem a lista de comprometimentos gaihbi . Os comprometimentos não oferecem informação, porque o esquema de com- prometimento usado é o de Pedersen. Os pares de pontos (a(i), b(i)) também não oferecem informação, porque o esquema de compartilhamento usado é o de Shamir. � Um fato importante sobre este esquema é que a veri�cação só pode ser realizada individualmente � cada participante pode veri�car sua partilha, mas precisa usar sua partilha secreta (a(i), b(i)), por isso não é possível que outras entidades também façam a veri�cação. 12.5 Compartilhamento publicamente veri�cável Os esquemas de compartilhamento veri�cável permitem aos participantes veri- �car suas partilhas, mas não permitem que um expectador possa veri�car que todos agiram honestamente. Os esquemas de compartilhamento publicamente veri�cáveis permitem que qualquer um veri�que as partilhas. De�nição 12.18 (Esquema de compartilhamento de segredos publicamente veri�cável). Um esquema de compartilhamento de segredos publicamente veri- �cável é semelhante a um esquema de compartilhamento de segredos, havendo um algoritmo adicional, SecVrf, que pode ser executado por qualquer entidade, mesmo que não seja uma das participantes (ou seja, mesmo que não tenha re- cebido uma partilha), a �m de veri�car se as partilhas estão corretas. � O esquema de compartilhamento de Schoenmakers, descrito nesta Seção, é publicamente veri�cável. Este esquema depende do protocolo para veri�cação de igualdade de logaritmos descrito na Seção 11.2.2. A Construção a seguir é o protocolo de compartilhamento publicamente veri�cável de Schoenmakers. Construção 12.19 (Compartilhamento de segredos publicamente veri�cável (esquema de Schoenmakers)). • Gen(1n): selecione um primo q com n bits e gere um grupo G de ordem q, com dois geradores g e h. Cada participante escolhe uma chave privada xi ∈R Zq e publica sua chave pública yi = hxi . • Share(s): crie um polinômio aleatório com coe�cientes em Zq: p(x) = t−1∑ j=0 ajx j , e determine que s = a0. É importante que s não seja escolhido e inserido no polinômio � deve ser determinado em Zq uniformemente. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 210 CAPÍTULO 12. COMPARTILHAMENTO DE SEGREDOS Publique para todo 0 ≤ j < t o comprometimento Cj = g aj e as partilhas p(i) encriptadas para todo o ≤ i < N : Yi = y p(i) i . Usando os valores Cjpublicados, qualquer um pode computar Xi = t−1∏ j=0 Ci j j . O distribuidor deve então publicar a assinatura baseada no protocolo DLEQ para provar que Xi = g p(i) Yi = y p(i) i . Ou seja, o distribuidor simula DLEQ calculando � wi ∈R Zq � a1i ← gwi � a2i ← ywii � c← H [∀i(Xi, Yi, a1i, a2i)] � ri = wi − p(i)c Note que o desa�o c não é aleatório, mas calculado usando as informações públicas calculadas até o momento. A transcrição publicada para cada i é [(a1i, a2i), c, ri] . • Combine: um conjunto quali�cante reconstrói o segredo da seguinte ma- neira: cada participante decripta sua partilha Si = h p(i) i usando sua chave privada yi = gxi calculando Si = h p(i) i = Y 1/xi i . Em seguida, dados todos os valores Si, o segredo S = hs é obtido usando o polinômio interpolador de Lagrange. t∏ i=1 Sλii = t∏ i=1 hp(i) = h ∑t i=1 p(i)λi = hp(0) = hs, onde λi é o coe�ciente de Lagrange: λi = ∏ i 6=j j j − i . Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 12.5. COMPARTILHAMENTO PUBLICAMENTE VERIFICÁVEL 211 • SecVrf: para veri�car que as partilhas estão corretas, é necessário com- putar Xi = t−1∏ j=0 Ci j i usando os valores Ci publicados. Pode-se então tomar A1i = g riXci A2i = y ri i Y c i e veri�car que c = H [∀i(Xi, Yi, A1i, A2i)] � A primeira observação que devemos fazer é que de fato o algoritmo SecVrf não depende de informação que não seja pública. O algoritmo SecVrf, como descrito na Construção, não tem sua corretude clara. Demonstramos então que se o algoritmo terminar com sucesso, o distri- buidor terá se comprometido com todos os p(i), de forma que todo conjunto quali�cante possa reconstruir o mesmo segredo gs. Como p(i) é único, demons- traremos apenas que cada Xi e cada Yi são gp(i) e y p(i) i , que é exatamente o que o distribuidor poderia modi�car. Teorema 12.20. Se Xi = gp(i) e Yi = y p(i) i , os hashes comparados pelo algo- ritmo SecVrf serão de fato idênticos. Demonstração. As cadeias usadas como entrada para os hashes são iguais nos Xi e Yi. Mostramos que se Xi = gp(i) e Yi = y p(i) i então A1i = a1i e A2i = a2i, e que então os hashes serão iguais. A1i = g riXci = g wi−p(i)cXci = gwi−p(i)c(gp(i))c = gwi−p(i)c+p(i)c = gwi = a1i � O Exercício 102 pede a demonstração do seguinte Teorema. Teorema 12.21. O esquema de Schoenmakers é homomór�co. Os Lemas a seguir serão usados na demonstração de segurança do esquema de Schoenmakers. O primeiro deles estabelece que presumida a di�culdade do problema Di�e-Hellman, quebrar a encriptação de um partilha no esquema de Schoenmakers é difícil. Lema 12.22. Sejam g, h, Xi, Yi, yi como na descrição do esquema de Scho- enmakers. Sabemos que h = ga, Xi = gb e yi = gc para determinados a, b, c. Um algoritmo e�ciente que quebre a encriptação das partilhas � ou seja, que calcule hpi = gab a partir de ga, gb, gc e gbc � pode ser usado para resolver e�cientemente o problema Di�e-Hellman. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 212 CAPÍTULO 12. COMPARTILHAMENTO DE SEGREDOS Demonstração. Seja A o algoritmo que, dados ga, gb, gc e gbc calcula e�ciente- mente gab. Sejam x = ga e y = gb. Para resolver o problema Di�e-Hellman queremos obter z = gab usando A. Escolhemos aleatoreamente a′, b′, c e usamos xa ′ , yb ′ , gc, yb ′c como entradas para A. Como xa ′ = (ga) a′ = gaa ′ yb ′ = ( gb )b′ = gbb ′ , obtemos, com probabilidade não desprezível de sucesso ε, o valor z′ = gaa ′bb′ como saída de A. Mas gab = (z′) 1 a′b′ e conseguimos calcular gab. � Lema 12.23. Se t−1 participantes do esquema de Schoenmakers puderem obter o segredo, pode-se resolver o problema Di�e-Hellman em tempo polinomial. Teorema 12.24. Usando o modelo do oráculo aleatório e presumida a di�cul- dade do problema Di�e-Hellman, • A reconstrução resulta no segredo para qualquer conjunto quali�cante de participantes; • Nenhum conjunto não quali�cante de participantes deve conseguir obter o segredo. Demonstração. O esquema de comprometimento de Chaum-Pedersen é consis- tente, e os Xi são obtidos dos Cj como ∏ j C ij j � por isso as partilhas são consistentes com o segredo. Dado o Lema 12.22 e o fato do esquema de Chaum- Pedersen ser de conhecimento zero quando o veri�cador é honesto, nenhum conjunto com menos de t participantes deve conseguir obter o segredo. � 12.5.1 Segredos não aleatórios A descrição que demos do esquema de Schoenmakers presume que o segredo é hs, sendo s escolhido aleatoreamente (durante a construção do polinômio aleatório). De fato, precisamos que s seja escolhido uniformemente para que o esquema seja seguro. Isso o torna aparentemente inútil, mas não é este o caso: podemos transformá-lo em outro esquema, com a mesma segurança, que funciona com segredos escolhidos em Zq. Suponha que o segredo que queiramos compartilhar seja σ • após executar Share, publique U = σ ⊕ H(hs). Depois de executar Combine a obtenção de σ a partir de hs e U é trivial (σ = U ⊕ hs). • O distribuidor, após executar Share, também publica U = σhs. Depois de executar Combine, saberemos que σ = U/hs e poderemos reconstruí-lo. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 12.6. ENCRIPTAÇÃO COM QUÓRUM 213 12.6 Encriptação com quórum É possível usar o criptossistema El Gamal compartilhando a chave privada entre diversos participantes, mas de tal forma que um quórum mínimo possa decifrar mensagens sem revelar a chave secreta. Cada participante Pi do conjunto P recebe uma partilha si da chave (o compartilhamento é feito usando o esquema de Shamir), e publica um compro- metimento hi = gsi . O segredo pode ser reconstruído por t+ 1 participantes. Temos então s = ∑ i siλP,i λP,i = ∏ l∈P\{ i } l l − i . A chave pública será (q, g, h), com h = gs. Para decifrar o texto encriptado (a, b) = (gkhkm) sem obter diretamente a chave privada, t+ 1 participantes usam o seguinte procedimento. Cada Pi publica zi = xsi , junto com uma prova de que logg hi = logx zi. O texto claro é m = b xs xs =x ∑ i siλP,i = ∏ i zλP,ii . Os participantes podem obter a chave privada, mas presume-se que queiram preservá-la e apenas decriptar mensagens. 12.7 Notas Shamir e Blakley inventaram independentemente seus esquemas pioneiros de compartilhamento de segredos, publicados na mesma época [29, 192]. A fórmula de Lagrange para o polinômio interpolador é normalmente apre- sentada na literatura de Métodos Numéricos (ou Cálculo Numérico), quando da discussão sobre interpolação. O livro de Neide Franco [78] é uma boa introdução ao assunto. A descrição dada aqui para o esquema de Ito-Nishizeki-Saito é semelhante à dada por Smart em seu livro [205], onde já se aplica a modi�cação sugerida por Benaloh e Leichter [21]. O artigo original de Mitsuru Ito, Akira Saito e Takao Nishizeki foi publicado na conferência GLOBECOM87 [121]. O primeiro esquema de compartilhamento veri�cável foi descrito em 1985 por Benny Chor, Sha� Goldwasser, Silvio Micali a Baruch Awerbuch [45]. Aquele esquema já era publicamente veri�cável. Outro esquema de compartilhamento Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 214 CAPÍTULO 12. COMPARTILHAMENTO DE SEGREDOS de segredos com veri�cação foi descrito por Rabin e Ben-Or [151]. O esquema de Pedersen foi descrito em um artigo em 1992 [176]. Markus Stadler publicou um esquema publicamente veri�cável em 1996 [208]. O esquema de Stadler funciona com estruturas arbitrárias de acesso, mas depende de uma conjectura não padrão, chamada de �problema do logaritmo duplo�: dado y = g(h x) conjectura-se ser difícil determinar x. Eiichiro Fujisaki e Tatsuaki Okamoto publicaram seu esquema em 1998 [79]. Schoenmakers publicou seu esquema de compartilhamento publicamente ve- ri�cável em 1999 [188], que é assintoticamente mais e�ciente o que o de Stadler e o de Fujisaki-Okamoto, embora na prática seja mais lento. A geração distribuída de chaves paracriptossistemas assimétricos foi pro- posta pela primeira vez por Pedersen em 1991 [175], modi�cada de várias for- mas. O trabalho de 1999 realizado por Rosario Gennaro, Stanislaw Jarecki, Hugo Krawczyk e tal Rabin [84] aperfeiçoa a idea, exibindo um método com demonstração de segurança. 12.8 Exercícios Ex. 98 � Demonstre o Teorema 12.10. Ex. 99 � Suponha que o esquema de compartilhamento de segredos de Sha- mir é usado para manter uma chave secreta (usada para encriptar um testa- mento) em sigilo. O número de participantes é n e o quórum mínimo é k. Quando k pessoas decidiram revelar a chave, constataram que o segredo revelado era inválido (a chave não decriptou o documento). Mostre como determinar o valor correto da chave secreta usando dois tipos de operação: interpolação de polinômios e cálculo do valor do polinômio em um ponto, minimizando o número de interpolações. Ex. 100 � Na demonstração do Teorema 12.14 dissemos que �o mesmo vale quando o participante tem vários valores si, ..., sk�. Complete a demonstração mostrando que esta a�rmação é verdadeira. Ex. 101 � Descreva o esquema de compartilhamento de segredos de Shamir (ou o de Blakley) cuidadosamente, de forma adequada para apresentação a estudantes de ensino médio. Ex. 102 � Demonstre o Teorema 12.21. Ex. 103 � Tente usar os esquemas de comprometimento do Capítulo 11 para transformar o esquema de Ito-Nishizeki-Saito (Construção 12.12) em esquema veri�cável. Para cada construção que obtiver: a) Determine o tipo de sigilo do esquema (perfeito, computacional, etc). b) Determine se esquema é publicamente veri�cável ou se é veri�cável apenas pelos participantes. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 12.8. EXERCÍCIOS 215 c) Determine em quanto o tamanho da partilha é aumentada. d) Argumente informalmente a respeito da e�ciência do novo esquema, comparando- a com a do esquema antigo e com as dos outros esquemas que produzir. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 216 CAPÍTULO 12. COMPARTILHAMENTO DE SEGREDOS Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini Capítulo 13 Provas de Conhecimento Zero 13.1 Provas Interativas Um sistema de provas interativas é um método que dois participantes podem usar a �m de que um deles possa provar algo ao outro. Normalmente o método envolve a troca de um certo número de mensagens entre os dois participantes � daí o nome �sistema interativo de provas�. Uma �prova� neste contexto é algo dinâmico, no espírito de desa�o-resposta. Um veri�cador emite um desa�o e o provador deve conseguir dar uma resposta satisfatória a �m de provar algo. Por exemplo, um usuário pode precisar provar a um sistema que tem uma senha ou algum outro segredo � mas sem mostrar o segredo. Nos exemplos deste Capítulo, daremos os nomes �Peggy� à entidade que pretende provar algo, e �Victor� àquela que deverá veri�car a prova. Em um sistema de prova interativa temos as duas restrições a seguir: • Victor executa em tempo polinomial. • Peggy pode executar sem limite de tempo, mas as mensagens que enviar a Victor devem ter tamanho polinomial. É necessário também de�nir claramente o que são os �fatos� que são �prova- dos� em um sistema de prova interativa. O provador deve convencer o veri�cador de que um elemento x pertence a alguma linguagem1. A De�nição de sistema de prova interativa é dada a seguir, usando o modelo de computação descrito no Capítulo 11. As probabilidades são de que o veri�- cador aceite a prova: V emitirá saída igual a um se aceita a prova, e zero em caso contrário. De�nição 13.1 (Sistema de prova interativa). Um par de atores (P, V ) é um sistema de prova interativa para uma linguagem L se V executa em tempo polinomial e valem as propriedades listadas a seguir. 1Linguagens são de�nidas no Apêndice C (De�nição C.33, página 356). 217 Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 218 CAPÍTULO 13. PROVAS DE CONHECIMENTO ZERO i) Completude: para todo x ∈ L, Pr[〈P, V 〉(x) = 1] ≥ 2 3 ii) Consistência: para todo y /∈ L, e para todo ator A Pr[〈A, V 〉(y) = 1] ≤ 1 3 . � Da mesma forma que na descrição da classe2 BPP, a escolha dos valores 2/3 e 1/3 é arbitrária. De�nição 13.2 (Classe IP). A classe IP é formada por todas as linguagens para as quais existe sistema de prova interativa. � O seguinte Teorema relaciona as classes IP, NP e PSPACE . Teorema 13.3. NP ⊆ IP = PSPACE. 13.2 Conhecimento zero A �nalidade de um sistema de prova interativa é possibilitar que um provador convença um veri�cador de algo, mas sem que o veri�cador ganhe qualquer infor- mação que possa ser usada posteriormente. Por exemplo, se Peggy se apresenta para Victor como policial disfarçada e envia a ele uma cópia de suas credenci- ais, Victor passa a ter um documento que pode usar para mostrar a outros que Peggy é policial. Se, ao invés disso, Peggy puder convencer Victor, sem dar-lhe algo que Victor não pudesse ter obtido sozinho, ela terá se protegido � e dizemos que neste caso Peggy é um provador de conhecimento zero (porque Victor não ganhou conhecimento algum após interagir com Peggy). Uma aplicação importante de protocolos de conhecimento zero é bastante simples: ao invés de um usuário enviar uma senha cada vez que usa um serviço em algum sistema, ele prova para o sistema que conhece a senha. Com isso evita-se que a senha seja armazenada, ainda que temporariamente, no sistema. Suponha que temos um sistema de prova interativa (P, V ). Durante a inte- ração com P , o veri�cador V obterá dados (ele terá no mínimo uma transcrição da interação, com todas as mensagens trocadas entre ambos). Diremos que P é de conhecimento zero se V somente obtém dados que ele mesmo poderia ter gerado, sem a participação do provador P . Mais detalhadamente, para que P seja de conhecimento zero, então para todo veri�cador V ′, e para toda entrada x, existe algum algoritmo polinomialM que simule a interação de V ′ com P , produzindo os mesmos resultados para as mesmas entradas, mas sem acesso a P . Admitimos que M(x) falhe com baixa probabilidade em produzir a mesma saída que 〈P, V ′〉(x) 2Veja a De�nição C.30, na Seção C.6 do Apêndice C, página 355. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 13.2. CONHECIMENTO ZERO 219 De�nição 13.4 (Conhecimento zero perfeito). Seja (P, V ) um sistema de prova interativa. Dizemos que (P, V ) é de conhecimento zero perfeito se para todo ator polinomial V ′ existe um algoritmo polinomial M tal que para toda entrada x, i) M falha com probabilidade no máximo 1/2, retornando um símbolo FA- LHA. ii) Seja m(x) a variável aleatória que descreve a distribuição deM(x) quando M(x) 6= FALHA. Entãom(x) tem a mesma distribuição que 〈P, V 〉(x). � De�nição 13.5 (Conhecimento zero computacional). Seja (P, V ) um sistema de prova interativa. Dizemos que (P, V ) é de conhecimento zero computacional se para todo ator polinomial V ′ existe um algoritmo polinomial M tal que para toda entrada x, as distribuiçõesM(x) e 〈P, V 〉(x) são computacionalmente indistinguíveis. � De�nição 13.6 (Conhecimento zero estatístico). Seja (P, V ) um sistema de prova interativa. Dizemos que (P, V ) é de conhecimento zero estatístico se para todo ator polinomial V ′ existe um algoritmo polinomial M tal que para toda entrada x, as distribuiçõesM(x) e 〈P, V 〉(x) são estatisticamente indistinguíveis. � 13.2.1 Isomor�smo de grafo Há um problema de decisão importante relacionado a isomor�smo de grafos3 De�nição 13.7 (ISOMORFISMO-DE-GRAFO). Dados G1 = (V1, E1) e G2 = (V2, E2) dois grafos com o mesmo número de vértices, determinar se G1 e G2 são isomorfos. � O problema ISOMORFISMO-DE-GRAFO está em NP (o Exercício 105 pede a demonstração). Proposição 13.8. ISOMORFISMO-DE-GRAFO está em NP. Não se sabe se ISOMORFISMO-DE-GRAFO está em P. Suponha que Peggy quer poder provar que detém um determinado segredo,mas não quer divulgá-lo a quem quer que seja. Construção 13.9 (Sistema de prova interativa para ISOMORFISMO-DE� GRAFO). Antes de iniciar a prova, as seguintes operações são realizadas na fase de inicialização: 1. Um grafo G1 é gerado aleatoriamente. 2. O segredo é codi�cado como uma permutação φ dos vértices de G1. 3. O grafo G2 = (φ(V1), E1) é calculado. 3De�nimos isomor�smo de grafos na Seção C.2. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 220 CAPÍTULO 13. PROVAS DE CONHECIMENTO ZERO 4. Publica-se G1, G2 (mas não φ). A permutação φ é o segredo que é entregue a Peggy. Quando Peggy quiser provar a Victor que conhece o segredo, ambos usam o seguinte protocolo: 1. Peggy escolhe aleatoriamente uma permutação π ∈R Sn (onde n = |V1|). 2. Peggy Calcula H = π(G2) e envia H para Victor. 3. Victor escolhe um índice k ∈R {1, 2}, e o envia a Peggy; ele está pedindo para que Peggy mostre a bijeção que transforma Gk em H. 4. Peggy envia uma das duas permutações: σ = { φ ◦ π se k = 1 π se k = 2 5. Victor aplica a permutação a Gk e veri�ca se o resultado é igual a H. Se for, sua saída é um; senão é zero. � O diagrama a seguir ilustra a situação em que Victor escolhe G1. Peggy tem a permutação φ e tem também π e H (gerados aleatoriamente). Victor não tem φ nem π; ele tem os três grafos e uma permutação φ◦π, que transformaG1 emH. P V G1OO φ �� G1 gg φ◦π '' G2 oo π // H G2 H Quando Victor escolhe G2, receberá apenas π, mas ainda não terá φ nem φ ◦ π. Após a execução do protocolo, Victor não tem nada que não pudesse com- putar sozinho: ele tem H e uma permutação σ que transforma Gb em H (ele poderia ter gerado σ aleatoriamente sem interagir com Peggy). Exemplo 13.10. Damos agora um exemplo, que será útil para a compreensão do aspecto de conhecimento zero do protocolo. Neste exemplo, o segredo e os grafos são pequenos, mas em exemplos práticos os grafos devem evidentemente ser grandes. Se o segredo for pequeno, pode-se usar alguma forma de padding. Suponha que o segredo seja 14523. Para codi�cá-lo, geramos aleatoriamente um grafo com cinco vértices: ab c d e Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 13.2. CONHECIMENTO ZERO 221 O segredo, 14523, é uma permutação: ad e b c Os dois grafos são publicados, e a permutação (1, 4, 5, 2, 3) é dada a Peggy. Embora tenhamos mostrados a representação visual dos grafos, na prática ape- nas as listas de arestas seriam publicadas. Agora Peggy precisa provar para Victor que conhece o segredo. Ela escolhe aleatoriamente uma permutação de cinco elementos: π = (3, 2, 4, 5, 1), e calcula π(G2): a 7→ e, b 7→ c, c 7→ a, d 7→ d, e 7→ b O grafo resultante, H, é: ed b c a Peggy envia o grafo H para Victor. Victor agora escolhe aleatoriamente um dos grafos, G1, e envia para Peggy o índice 1. Peggy precisa então provar que G1 é isomorfo a H. Ela envia então o iso- mor�smo φ ◦ π para Victor: (5, 4, 2, 3, 1) Victor veri�ca que de fato, aplicando este isomor�smo em G1 ele obtém H, e aceita a prova. A transcrição da interação entre Peggy e Victor é mostrada a seguir. P → V : H V → P : 1 P → V : φ ◦ π O protocolo é de conhecimento zero porque Victor não ganhou nada que não pudesse produzir sozinho: ele não pode provar para mais ninguém que G1 e G2 são isomorfos. Ele tem apenas a transcrição da interação com Peggy, mas ele poderia facilmente tê-la gerado sozinho: bastaria criar uma permutação dos vértices de G1 e anotar H, 1 e a permutação. J Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 222 CAPÍTULO 13. PROVAS DE CONHECIMENTO ZERO Antes de enunciar o teorema 13.11, observamos o que o que �zemos com o segredo (a permutação φ): combinamos cada elemento da permutação com outra, aleatória. Isso é, de certa forma, equivalente à operação de encriptação com o one-time-pad. Teorema 13.11. A Construção 13.9 é um sistema de prova interativa de co- nhecimento zero perfeito para a linguagem dos pares de grafos isomorfos. Demonstração. É fácil veri�car que Victor executa em tempo polinomial. Completude: Se os grafos G1 e G2 realmente são isomorfos, então H será isomorfo aos dois grafos, e a permutação enviada a Victor Victor transforma um deles em H. Neste caso Victor aceita a prova e emite um como saída. A probabilidade de Victor aceitar a prova quando os grafos são isomorfos é 1. Consistência: Se G1 e G2 não são isomorfos, então não existe H isomorfo a ambos. Quando Victor, após receber H, escolhe G2, Peggy pode enviar-lhe π e Victor aceita a prova. Mas quando Victor escolhe G1, não existe permutação que Peggy possa enviar, e Victor rejeita a prova (sua saída será igual a zero). A probabilidade de Victor aceitar a prova quando os grafos não são isomorfos é no máximo 1/2. Conhecimento zero: simulador S mostrado a seguir produz a transcrição de uma interação. S(G1, G2): b′ ∈R { 0, 1 } // tenta adivinhar a escolha de V ′ π ← permutação aleatória dos vértices de Gb H = π(Gb) b ∈R { 0, 1 } // escolha de V ′ se b 6= b′ reinicie escreva (H, b, π) � 13.3 Σ-protocolos Há uma classe especial de protocolos para prova de conhecimento zero onde o veri�cador e a interação é sempre da forma descrita a seguir. Normalmente, o provador P tem uma chave pública e um segredo, cujo conhecimento ele deve provar para o veri�cador V . 1. P envia uma mensagem a V , comprometendo-se com um valor c; 2. V envia uma sequência aleatória d de bits para P (esta sequência de bits é um desa�o); 3. P envia uma resposta s para V , que �nalmente decide se aceita ou não. A representação grá�ca deste tipo de protocolo é ilustrada na próxima �gura. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 13.4. PROTOCOLOS DE IDENTIFICAÇÃO 223 P V c d s De�nição 13.12 (Σ-protocolo). Seja Π protocolo de prova de conhecimento zero para uma linguagem L onde cada elemento é um par (a, b) (em outras palavras, L é uma relação entre dois conjuntos A e B). Π é um Σ-protocolo quando as mensagens trocadas entre os participantes são da forma descrita no texto (comprometimento, desa�o e resposta), e os seguintes requisitos são satisfeitos. i) Completude: se P e V seguem o protocolo e P é honesto (ou seja, P de fato conhece (x, y) ∈ L), V sempre aceita. ii) Consistência especial: sejam x ∈ A e duas transcrições do protocolo em que V aceita, (c, d, s) e (c, d′, s′), com d 6= d′ (ou seja, duas transcrições com mesma entrada compartilhada x e mesma mensagem inicial c, mas desa�os d, d′ diferentes). Então deve ser possível calcular e�cientemente y ∈ B tal que (x, y) ∈ L. iii) Conhecimento zero para veri�cador honesto: O protocolo é de conheci- mento zero para veri�cador honesto. Como a única coisa que o veri�cador faz é escolher o desa�o, um veri�cador honesto é aquele que escolhe d com distribuição uniforme. � A propriedade de consistência especial implica que um provador desonesto terá probabilidade de sucesso menor ou igual a 1/|D|, onde D é o conjunto de possíveis desa�os. A próxima seção traz alguns exemplos de protocolos de identi�cação que são Σ-protocolos. 13.4 Protocolos de Identi�cação Peggy e Victor pretendem se comunicar via rede, mas Victor quer ter certeza de que está realmente interagindo com Peggy, e não com alguém se passando por ela. Para esta situação usamos esquemas de identi�cação. 13.4.1 Esquema de Identi�cação de Feige-Fiat-Shamir Construção 13.13 (Esquema de identi�cação de Feige-Fiat-Shamir). Fase de inicialização: Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 224 CAPÍTULO 13. PROVAS DE CONHECIMENTO ZERO 1. Uma autoridade T escolhe dois primos grandes p e q, e publica seu produto N = pq. Os fatores p e q não são divulgados. 2. Peggy escolhe aleatoriamente um inteiro 1 ≤ s ≤ N − 1, calcula v = s2 (mod N) e publica v. Esta será a chave pública de Peggy. Para Peggy provar para Victor que possui s, ambos executam o protocolo a seguir.1. Peggy escolhe r ∈R {1, . . . , N − 1}, calcula x = r2 (mod N), e envia x para Victor. 2. Victor escolhe um bit b ∈R { 0, 1 } e envia b para Peggy. 3. Peggy calcula y = rsb (mod N) e envia y para Victor. Note que isto signi�ca que o valor enviado será r ou rs. 4. Victor aceita a identi�cação se x 6≡ 0 (mod N) e y2 ≡ xvb (mod N). � Teorema 13.14. O esquema de identi�cação de Feige-Fiat-Shamir é um sis- tema de prova interativa de conhecimento zero. Demonstração. Mostramos as propriedades de completude, consistência e co- nhecimento zero. Completude: Victor veri�ca se y2 = xvb (mod N). E realmente, y2 = (rsb)2 = r2s2b = x(s2)b = xvb. A probabilidade de uma prova correta ser aceita é 1. Consistência: suponha que um atacante tenta se passar por Peggy. Há duas possibilidades: • Victor escolhe o bit 0. Neste caso, o atacante tem sucesso porque ele mesmo escolheu r e pode enviar r(s0) = r de volta. A probabilidade de acerto é 1. • Victor escolhe o bit 1. Neste caso, o atacante não tem como calcular y = rs1 porque não tem o valor de s (e não consegue calcular raízes quadradas módulo N e�cientemente). O atacante somente pode fazer uma escolha aleatória, e a probabilidade de acerto é desprezível no tamanho de N . No primeiro caso o atacante tem sucesso com probabilidade um; no segundo, com probabilidade desprezível. Assim, a probabilidade de sucesso em uma ten- tativa é 1/2 + negl(N). Se o protocolo for repetido t vezes, a probabilidade de sucesso do adversário será desprezível. Conhecimento Zero: esta parte da demonstração é pedida no Exercício 107. � Corolário 13.15. O protocolo de identi�cação de Fiat-Feige-Shamir é um Σ- protocolo. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 13.4. PROTOCOLOS DE IDENTIFICAÇÃO 225 Demonstração. O protocolo é da forma necessária (comprometimento, desa�o, resposta). Completude e conhecimento zero já foram demonstrados. Resta observar que tendo duas transcrições com x = r2, mas com b = 0 e b′ = 1 é fácil determinar r. � 13.4.2 Protocolo de Schnorr Outro protocolo de identi�cação é o de Schnorr. O provador mostra que co- nhece o logaritmo discreto de um número y, sem passar ao veri�cador qualquer informação adicional a respeito do logaritmo. Construção 13.16 (Protocolo de identi�cação de Schnorr). O provador P quer provar a V que conhece um segredo z ∈ Zq. Fase de inicialização: • Dois primos são p e q tais que q|p− 1 são escolhidos aleatoriamente. • g, um gerador do grupo de unidades Z∗p, é escolhido. • De�ne-se t, um parâmetro de segurança. • v = gz (mod p), que é igual a gq−z (mod p). Esta é a chave pública de P . O protocolo é descrito a seguir. • P: k ∈R Zq. Envia a = gk para V. • V: envia r ∈R { 1, . . . , 2t } para P. • P: envia c = k + zr (mod q) para V. • V aceita se e somente se a ≡ gcvr (mod p). � Teorema 13.17. O protocolo de Schnorr é de um sistema de prova interativa de conhecimento zero perfeito para veri�cador honesto. Demonstração. Dividiremos a prova em três partes � completude, consistência e conhecimento zero. Completude: trivial. Temos a = gcvr = gk+zrur = gk+zr(g−z)r = gk+zrg−zr = gk, e portanto a probabilidade de V aceitar uma prova correta é 1. Consistência: suponha que P não tenha z e tente convencer V do contrário. P pode tentar a seguinte estratégia: Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 226 CAPÍTULO 13. PROVAS DE CONHECIMENTO ZERO 1) Fixe k′. 2) Tente adivinhar o valor de r (antes de enviar a mensagem para V ). 3) Envie a′ = gk ′ vr para V . 3) Receba r. 4) Se r é igual ao valor adivinhado, envie k′ para V . Senão, escolha aleato- riamente x em Zp. A probabilidade de P conseguir sucesso desta forma em uma rodada do protocolo é a de adivinhar corretamente t ou, errando nesta tentativa, conseguir escolher o valor correto em Zp: 1 2t + negl(|p|). Conhecimento zero: mostramos um simulador S que, a partir de uma entrada x e dos bits aleatórios usados por V , produz uma transcrição de 〈P, V 〉(x). S(v): k ∈R Zp r ∈R { 1, . . . , 2t } c← gcvr (mod p) escreva gk; r; c O simulador pode executar em tempo polinomial, e as distribuições dos elemen- tos na transcrição são as mesmas que aquelas em uma execução 〈P, V 〉(v). No entanto, o simulador escolhe o desa�o sempre com distribuição uniforme. Isto signi�ca que, em tempo polinomial, só poderá produzir transcrições de interações onde V é honesto (e escolhe seus bits uniformemente). � A demonstração não implica que o protocolo é de conhecimento zero para veri�cador desonesto porque 2t é exponencialmente grande, e para simular uma distribuição de desa�os diferente de uniforme o simulador apresentado poderia levar tempo exponencial. Corolário 13.18. O protocolo de Schnorr é um Σ-protocolo. 13.5 Transformando provas interativas em não interativas Um Σ-protocolo pode ser transformado em um esquema de assinaturas. A entidade que assinará mensagens inclui em sua chave pública uma função de hash h. Construção 13.19 (Esquema Fiat-Shamir de assinaturas). Presume-se que é pública uma função de hash h. A entidade assinadora detém um segredo que usa como o segredo de provador para um Σ-protocolo. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 13.5. TRANSFORMANDO PROVAS INTERATIVAS EMNÃO INTERATIVAS227 Para assinar uma mensagem m, construa (simulando) uma transcrição de interação do Σ-protocolo. O comprometimento c é gerado da forma usual. Já o desa�o é h(c||m). Finalmente, produz a transcrição da interação (c, h(c||m), r). � A assinatura só é possível para quem tem o segredo, e portanto não deve haver forma e�ciente de outra entidade produzir uma assinatura. Para conse- guir uma prova de conhecimento do segredo, qualquer assinatura de mensagem conhecida basta. No entanto, o esquema (ou transformação) de Fiat-Shamir para assinaturas só é seguro no modelo do oráculo aleatório. Notas Provas de conhecimento zero foram propostas por Sha� Goldwasser, Silvio Mi- cali e Charles Racko� em 1985 [92, 93]. É comum de�nir sistemas de prova interativa com máquinas de Turing, onde o que chamamos de �portas de comunicação� são �tas onde uma máquina escreve e outra lê. Como uma máquina de Turing não pode �ter um gerador pseudo- aleatório�, neste modelo os bits aleatórios são lidos de uma �ta (e impõe-se a exigência de que as �tas aleatórias dos atores sejam diferentes). A Figura a seguir mostra duas máquinas de Turing acopladas desta forma. A diferença entre a abordagem usada neste texto e naquela com máquinas de Turing não é signi�cativa para a compreensão dos conceitos, e não interfere no desenvolvimento das demonstrações. Provas de conhecimento zero são discutidas no tutorial de Giovanni Di Cres- cenzo [42] e extensivamente no livro de Oded Goldreich [87]. A demonstração do teorema 13.3 foi dada pela primeira vez por Adi Sha- mir [191]. Primeiro, IP ⊆ PSPACE trivialmente: basta que se apresente um Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 228 CAPÍTULO 13. PROVAS DE CONHECIMENTO ZERO simulador de prova interativa que funcione em espaço polinomial. A recíproca, PSPACE ⊆ IP, é conceitualmente simples, mas envolve diversos detalhes técni- cos. De maneira resumida, o problemaQSAT está em PSPACE , portanto basta mostrar que está também em IP. Uma demonstração de que IP = PSPACE também pode ser encontrada no livro de Michael Sipser [204]. Σ-protocolos foram formalizados por Ronald Cramer em sua tese de douto- rado [56]. Em sua tese, Cramer diz que escolheu o nome Σ porque �sig� lembra �zig-zag� e �ma� é abreviação de �Merlin-Arthur�, que é o tipo de protocolo onde os bits aleatórios usados pelo veri�cador são públicos (em um Σ-protocolo isto é o mesmo que exigir que o veri�cador seja honesto). Amos Fiat e Adi Shamir desenvolveram um método para construir esque- mas de assinatura a partir de esquemas de identi�cação [75] (e de um esquema de assinaturas deriva-se trivialmenteum protocolo não-interativo de prova de conhecimento zero). Este esquema não é seguro sem oráculos aleatórios, como mostrado por Sha� Goldwasser e Yael Kalai [94, 127]. Manuel Blum, Paul Feldman e Silvio Micali provaram que é possível transformar qualquer sistema de prova interativa em um sistema de prova não-interativa de conhecimento zero computacional, desde que se possa adicionar uma cadeia aleatória com- partilhada entre provador e veri�cador [30]. Já Oded Goldreich e Yair Oren mostram a impossibilidade de, sem a cadeia compartilhada e no modelo padrão (e portanto sem oráculos aleatórios), obter provas não interativas para qualquer prova interativa [91]. Exercícios Ex. 104 � Porque no modelo computacional apresentado neste Capítulo dis- semos que A e B devem ter geradores pseudoaleatórios diferentes? Ex. 105 � Demonstre o Teorema 13.8. Ex. 106 � Escolha problemas em NP e construa para eles sistemas de prova interativa. Ex. 107 � Complete a prova de que o esquema de Feige-Fiat-Shamir é de conhecimento zero (nossa demonstração do Teorema 13.14 omitiu esta parte). Ex. 108 � Prove o Corolário 13.18. Ex. 109 � Se você tem familiaridade com Lógica, discorra sobre as pro- priedades de completude e consistência de um sistema de prova interativa, comparando-as com aquelas de�nidas em Lógica. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini Capítulo 14 Protocolos Seguros com Dois Participantes (Este Capítulo ainda está incompleto) 14.1 Transferência Inconsciente Um protocolo de transferência inconsciente (ou �opaca�) permite que Alice envie uma mensagem a Bob, mas que Bob receba de fato a mensagem com probabili- dade 1/2. É possível realizar seguramente a computação de qualquer protocolo de múltiplos atores usando apenas um protocolo de transferência inconsciente como bloco básico. O protocolo a seguir implementa transferência inconsciente usando resíduos quadráticos. 1. Alice escolhe dois primos p e q grandes e calcula N = pq. 2. Alice encripta a mensagem m de alguma forma, módulo N e com uma chave k. O resultado é o texto cifrado c. A fatoração de N deve permitir decriptar a mensagem. 3. Alice envia N, c para Bob. 4. Bob escolhe x ∈R Z∗N e envia y = x2 (mod N) para Alice. 5. Alice calcula as quatro raízes quadradas de y (que são x,−x, y,−y). Ela pode fazê-lo e�cientemente porque tem p e q. Alice então escolhe uma das raízes aleatoreamente e envia para Bob. 6. Se Bob recebeu uma das raízes diferentes de ±x ele pode fatorar N e decifrar c em m. Se recebeu uma das outras duas raízes, não conseguirá decifrar c. 229 Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 230CAPÍTULO 14. PROTOCOLOS SEGUROS COMDOIS PARTICIPANTES Alice não sabe se Bob decifrou a mensagem ou não, porque x foi escolhido aleatoreamente por Bob, e Alice não sabe qual dos quatro valores é x. O protocolo obviamente funciona usando o RSA para encriptação, mas tam- bém funcionará com qualquer criptossistema assimétrico, desde que baseado na hipótese da fatoração de inteiros. Em outra forma de transferência inconsciente Alice envia duas mensagens e Bob recebe uma delas (com probabilidade 1/2 para cada uma), sem que Alice saiba qual mensagem foi enviada. As duas formas de transferência inconsciente são equivalentes. Notas A ideia de transferência inconsciente foi proposta em 1981 por Rabin [178], e por Even, Goldreich e Lempel [74] em 1982. A demonstração de que as duas variantes de transferência inconsciente são equivalentes foi dada por Claude Crépau em 1988 [58]. O livro de Carmit Hazay e Yehuda Lindell [103] e o segundo volume do livro de Goldreich [88] tratam detalhadamente de protocolos criptográ�cos com dois participantes. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini Capítulo 15 Computação Segura com Múltiplos Participantes Este Capítulo traz uma exposição básica de protocolos com muitos participantes onde existe a necessidade de sigilo e não há con�ança mútua entre as partes. Cada participante Pi conhece um valor xi, e o objetivo é calcular uma função f(x1, x2, . . . , xn) com a exigência de que após a execução do protocolo o conhecimento de cada participante a respeito dos valores de entrada dos outros seja o mesmo que ele tinha antes do início do protocolo. Quando construímos protocolos com múltiplos participantes, há diversos as- pectos que levamos em consideração. • Estratégia de corrupção: há dois modelos para a estratégia de corrupção usada pelo adversário. Um deles é o modelo estático, onde há um conjunto �xo de participantes controlados pelo adversário. O outro é chamado de modelo dinâmico, onde o adversário pode decidir durante a execução do protocolo quais participantes irá corromper; • Comportamento das partes corrompidas: dizemos que um adversário é �semi-honesto� se ele segue a especi�cação do protocolo, mas obtém infor- mação à qual não teria direito através da manipulação dos participantes corrompidos. Um adversário é �malicioso� se poderá desviar-se arbitrari- amente do protocolo; • Complexidade: pode-se presumir que o adversário execute em tempo po- linomial ou pode-se presumir que ele tem poder computacional ilimitado. • Comunicação: podemos usar o cenário criptográ�co, em que presumimos que toda a comunicação entre os participantes é pública, e que consequen- temente o sigilo deve ser garantido por mecanismos criptográ�cos, ou o 231 Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 232CAPÍTULO 15. COMPUTAÇÃO SEGURA COMMÚLTIPLOS PARTICIPANTES cenário de teoria da informação1, onde pode-se contar com canais seguros para a comunicação entre os participantes. É comum também diferenciar protocolos para duas partes de protocolos para muitos participantes. Estes aspectos dão origem a diferentes modelos de ambiente. Estes ambientes idealizados são usados na construção do protocolo e também na demonstração de sua segurança. 15.1 Sobre encriptação homomór�ca Boa parte deste texto usa criptossistemas parcialmente homomór�cos, porque até o momento não são conhecidos criptossistemas completamente homomór�cos que permitam a realização de longos cálculos de maneira e�ciente e, de maneira geral, satisfatória. É provável, no entanto, que esta situação mude em pouco tempo. 15.2 Um protocolo para participantes semi-honestos No protocolo descrito a seguir os participantes são semi-honestos e tem poder ilimitado. Os participantes computam o valor de uma função f(x0, x1, . . .) de�nida sobre um corpo �nito Fq, sem revelar as variáveis xi. Escolhemos realizar as operações em um corpo �nito porque não poderíamos representar números reais em computadores sem perda de precisão e, mais grave, sem alterar sua distri- buição. Para ilustrar o funcionamento do protocolo presumimos que há três parti- cipantes, P1, P2 e P3, e cada um deles conhece uma das variáveis x1, x2, x3. Também presumimos que a função a ser calculada é f(x1, x2, x3) = x1x2 + x3 (mod q). A Figura a seguir mostra a função como um circuito envolvendo somas e mul- tiplicações. A variável x4 é o valor intermediário, igual a x1x2. × + x1 x2 x3 f(x1, x2, x3) x4 O protocolo funciona usando compartilhamento de segredos. Cada participante Pi distribui partilhas de seu valor xi para os outros. Denotamos a partilha enviada de Pi para Pj por x j i . 1�Information-theoretic scenario�, em Inglês. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 15.2. UM PROTOCOLO PARA PARTICIPANTES SEMI-HONESTOS 233 Se pudermos usar as partilhas de entrada de uma porta do circuito para calcular partilhas do valor de saída, poderemos avaliar o circuito inteiro sem conhecer os valores intermediários. O seguinte Teorema nos dá uma forma de computar a soma de partilhas de Shamir. Teorema 15.1. Seja S o segredo no esquema de compartilhamento de segredos de Shamir, e si a partilha de Pi. Então, para o segredo S′ = x+ yS aspartilhas são s′i = x+ ysi. A seguir desenvolvemos em detalhes a adição e multiplicação de segredos compartilhados. Adição Inicialmente determinaremos como obter partilhas para um segredo, S+S′, dadas as partilhas de S e de S′. Do Teorema 15.1 imediatamente obtemos uma maneira de computar a soma de dois segredos, dadas as partilhas de ambos: basta tomar y = 0. Só precisamos então somar as partilhas, como mostramos a seguir. Suponha que cada Pi tenha suas partilhas f(i) e g(i), para dois segredos S e S′. Suponha também que os dois polinômios sejam f(x) = a+ a1x+ a2x 2 + · · ·+ akxk g(x) = b+ b1x+ b2x 2 + · · ·+ bkxk. Podemos somar os dois polinômios h(x) = f(x) + g(x) = (a+ b) + (a1 + b1)x1 + (a2 + b2)x 2 + · · ·+ (ak + bk)xk Assim, cada participante Pi calcula sua partilha da saída: h(i) = f(i) + g(i). onde h(i) é a partilha de Pi para S + S′. Multiplicação Temos dois segredos A e B compartilhados, e cada partici- pante Pi tem partilhas a(i) e b(i). Queremos computar as partilhas m(i) do segredo M = AB, sem que os participantes tenham acesso a A, B ou M (a não ser com o quórum necessário). Se tomarmos x = 0 no enunciado do Teo- rema 15.1, notamos que as partilhas que queremos calcular são m(i) = Ab(i). Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 234CAPÍTULO 15. COMPUTAÇÃO SEGURA COMMÚLTIPLOS PARTICIPANTES Cada participante calcula c(i) = a(i)b(i) O valor c(i) não é a partilha que queremos, mas podemos obtê-la a partir dele. Após computá-lo, Pi cria um novo polinômio aleatório e compartilha c(i) com os outros participantes, enviando a cada Pj o valor ci(j)2. Cada participante Pj então calcula m(j) = ∑ i ric i(j), onde ri é o vetor de recombinação3. Teorema 15.2. O cálculo das partilhas de multiplicação descrito no texto está correto, ou seja, ∑ i m(i)ri = AB. 15.3 Segurança Observamos como é a execução de um protocolo na prática: há participan- tes honestos, participantes desonestos e há também tudo o que é externo aos participantes e ao protocolo. Dentre estas entidades e fatores externos há a entrada enviada a cada participante e o adversário. Chamamos este conjunto de entidades externas de �ambiente�. Incluímos conceitualmente o adversário A (que é externo ao protocolo) no ambiente. O adversário pode corromper participantes. Quando Pi é corrompido, A tem acesso a todo o histórico de mensagens de Pi, além de poder controlar as ações de Pi. Denotamos um participante corrompido por P̆i De maneira simpli�cada, então, construímos dois modelos: • Um �mundo real�, com o conjunto de participantes Pi executando um protocolo Π em um ambiente Z; • Um �mundo ideal� onde trocamos os participantes executando Π por uma funcionalidade incorrompível F . Queremos poder mostrar que participantes honestos executando o proto- colo no mundo real obterão o mesmo resultado que esta funcionalidade perfeita em um �mundo ideal� � desde que haja participantes honestos em quantidade su�ciente. Os dois modelos de mundo que usamos são descritos a seguir. • No �mundo real�, há diversos participantes Pi, que esperamos que sigam o protocolo, e um ambiente Z, que inclui um adversário. 2Para facilitar a leitura, pode-se ler ci(j) como �c, de i para j�. 3Veja a descrição do polinômio interpolador na Seção 12.1.1, página 201. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 15.3. SEGURANÇA 235 Z A P1 P2 P̆3 • No �mundo ideal�, ao invés de participantes honestos seguindo um pro- tocolo, modelamos uma funcionalidade ideal F , que é incorrompível e realizará a computação necessária para que o protocolo funcione. Tam- bém incluímos um simulador S, que simula a atuação de participantes desonestos. Como ilustrado na próxima �gura, os participantes não inte- ragem entre si � eles repassam suas mensagens4 entre F e Z (poderíamos chamá-los de �participantes vazios5�) ou entre F e S. F Z S P1 P2 P̆3 Diremos que um protocolo implementa seguramente a funcionalidade ideal F quando o ambiente (exceto por A), ao executar, não puder distinguir entre uma execução no mundo real e outra no mundo ideal. Deve existir então um simulador S que substitua A de forma que o mundo simulado por F e S é indistinguível pelo ambiente do mundo real com Π e A. O protocolo é executado em rodadas. Em cada rodada i) o ambiente envia aos participantes honestos suas entradas; ii) o adversário envia entradas aos participantes desonestos; iii) os participantes devolvem seus resultados. Quando um participante Pi se corrompe, a funcionalidade F imediatamente deixa de ouvir as portas �honestas� de Pi, e envia todo o histórico de mensagens de Pi para S, de maneira que S possa a partir de então simular para Z o comportamento de Pi. Depois do término da execução, a saída de Z é um único bit, que representa sua tentativa de �adivinhar� se a execução se deu no mundo ideal ou no real. Dizemos que um protocolo Π é seguro se provarmos que, dado um parâmetro de segurança k, existe um simulador S (que é um algoritmo polinomial) tal que 4Há autores que de�nem o modelo sem os participantes, como se as mensagens fossem trocadas diretamente entre F e Z. 5Ou �dummy parties� em Inglês. Ve rs ão Pr el im in ar notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini 236CAPÍTULO 15. COMPUTAÇÃO SEGURA COMMÚLTIPLOS PARTICIPANTES para todo ambiente Z e toda entrada z, a probabilidade de Z distinguir o mundo ideal do real (como modelados) é desprezível em k. Projetamos a funcionalidade ideal F de forma a garantir, no mundo ideal, que se o protocolo não for seguido de maneira a gerar os resultados que espe- ramos, a execução é abortada. Assim, se o ambiente (e consequentemente o adversário) não puder distinguir os dois mundos, a garantia de execução correta e segura do protocolo se estende para o modelo de mundo real. Ao modelar o protocolo para demonstrar sua segurança, usaremos alguns artifícios que parecerão distantes da situação de execução real do protocolo. Comentamos agora sobre estes artifícios e sobre a nomenclatura usada, para que não haja confusão. • Dizemos que há um adversário, entidade abstrata, que �corrompe� parti- cipantes. Esta é apenas uma abstração que torna a demonstração mais conveniente, e nota-se facilmente que para o objetivo de demonstrar a se- gurança do protocolo não faz diferença se o participante age por conta própria ou seguindo instruções deste adversário abstrato. • Presumimos que há uma entidade incorruptível intermediando as mensa- gens, de acordo com a especi�cação do protocolo. A demonstração nos dará justamente a garantia de que o protocolo, quando executado sem um intermediador incorrompível, funciona de maneira equivalente à simulação usando esta entidade. Em outras palavras, o protocolo é projetado para oferecer as mesmas garantias que um intermediador incorrompível. Di- zemos que o protocolo �realiza o intermediador incorrompível de maneira segura�. Queremos que seja indiferente ao ambiente se executamos o pro- tocolo ou se usamos este intermediador. É por isso que usamos os termos �mundo real� e �mundo ideal�, embora ambos sejam claramente idealiza- dos. A diferença entre ambos está na presença deste intermediador. 15.4 Componibilidade Universal 15.5 Notas O problema de computação segura com múltiplos participantes foi proposto inicialmente por Andrew Yao em 1982 [221]. O survey organizado por Dario Catalano e outros [42] descreve os resultados na área até 2005. Os fundamentos são expostos de modo minucioso no segundo volume do livro de Goldreich [88]. O conceito de componibilidade universal foi introduzido por Ran Canetti [38]. Uma exposição a respeito de protocolos componíveis é dada por Yehuda Lindell no livro que teve origem em sua tese [148]. A primeira aplicação em larga escala de computação segura com múltiplos participantes foi reportada por um grupo de pesquisadores holandeses em 2009, que implementaram um sistema de leilão seguro [31]. [62] [222] Ve rs ão Pr el im in ar