Neste segmento, nós vamos construir sistemas de criptografia autenticados. Uma vez que nós já tem garantido de criptografia CPA, e temos MACs seguras, a pergunta natural é se podemos combinar os dois de alguma forma, a fim de obter criptografia autenticado. E se, que é exatamente o que vamos fazer neste segmento. Criptografia autenticado foi introduzido no ano de 2000, em dois artigos independentes que apontam para a final deste módulo. Mas antes disso, muitos crytpolibraries desde uma API que separadamente suporte a criptografia CPA seguro, amd MAC-ing. Então, houve uma função para implementar criptografia segura CPA. Por exemplo, a CVC com um aleatória IV. E outra função para a implementação de um MAC. E então todos os desenvolvedores que queria implementar a criptografia, teve que, ele próprio, chamar separadamente o seguro CPA esquema de criptografia eo sistema MAC. Em particular, todos os desenvolvedores tiveram que inventar maneira própria de combinar criptografia e MAC-ing para fornecer algum tipo de criptografia autenticado. Mas desde que os objetivos da criptografia combinando e MAC-ing não foi bem compreendida desde criptografia autenticado ainda não foi definida. Ele realmente não estava claro quais combinações de criptografia e MAC-ing estão corretas e que não são. E assim, cada projeto, como eu disse tinha de inventar sua própria combinação. E, de fato, nem todas as combinações eram corretas. E eu posso te dizer que o mais erro comum em projetos de software foram basicamente incorretamente combinando o criptografia e mecanismos de integridade. Portanto, esperamos que, até o final deste módulo, você saberá como combiná-los corretamente, e você não estará fazendo estes erros si mesmo. Então, vamos olhar para algumas combinações de criptografia segura e CPA MAC, que foram introduzidas por diferentes projetos. Então, aqui estão três exemplos. Assim, , antes de tudo, em todos os três exemplos, há uma chave separada para a criptografia, e uma chave separada para MACing. Estas duas chaves são independentes um do outro, e ambos são gerados em tempo de configuração da sessão. E nós vamos ver como gerar estes duas teclas mais tarde no curso. Assim, o primeiro exemplo é o protocolo SSL. Assim, o maneira SSL combina criptografia e MAC, na esperança de alcançar a criptografia autenticado é o seguinte. Basicamente, você toma o texto simples, m, e então você calcular um MAC no texto simples, m. Então você usar sua chave MAC, KI para calcular tag para esta mensagem m. E então você pode captionate a marca para a mensagem e então você criptografar o captionation da mensagem ea marca eo que sai é o texto cifrado final. Então essa é a opção número um. A segunda opção é o que faz seg IP. Assim aqui, você leva a mensagem. A primeira coisa que você faz é criptografar a mensagem. E então, você calcular um tag no texto cifrado resultante. Então você percebe o tag si mesmo é calculado sobre o texto cifrado resultante. Uma terceira opção é o que o protocolo SSH faz. Então, aqui, o SSH leva a mensagem e criptografa-lo usando um CPA esquema de criptografia segura. E então, para ele, concatenadas uma marca da mensagem. O diferença entre IPsec e SSH, é que em IPsec, a marca é calculado sobre o texto cifrado, que, em SSH, o tag no computadorizada sobre a mensagem. E assim estes são três maneiras completamente diferentes de combinar a criptografia e MAC. Eo pergunta é, qual destes é segura. Então, eu vou deixar você pensar sobre isso por um segundo, e então quando nós vamos continuar a fazer a análise em conjunto. Okay. Então, vamos início com o método SSH. Assim, o método SSH você notar que a marca é calculado na mensagem e então concatenado em claro para o texto cifrado. Agora, esta é realmente um grande problema porque MAC em si não são projetados para fornecer confidencialidade. Macs são projetados somente para integridade. E, de fato, não há nada de errado com um MAC que, como parte da marca gera alguns pedaços da planície texto. Saídas de alguns pedaços da mensagem M. Isso seria uma marca perfeitamente bem. E ainda se fizemos isso, que seria completamente quebrar a segurança CPA aqui, porque alguns pedaços de mensagem são divulgados no texto cifrado. E assim, a abordagem SSH, mesmo que o especificidades da SSH estão bem e do protocolo em si não é comprometida pela esta combinação específica, geralmente é aconselhável não usar essa abordagem. Simplesmente porque a saída do algoritmo de assinatura MAC pode vazar bits da mensagem. Assim agora vamos olhar para SSL e IPsec. Como se vê, o método recomendado, na verdade é o método de IPsec. Porque acontece que não importa o CPA sistema seguro e MAC chave que você use a combinação é sempre vai fornecer criptografia autenticado. Agora deixe-me muito, muito brevemente explicar o porquê. Basicamente o que acontece é que, uma vez que criptografar mensagem bem o conteúdo da mensagem agora está escondido no interior do texto cifrado e agora quando calculamos uma marca do texto cifrado, basicamente, estamos travando, esta tag bloqueios texto a cifra e garante que ninguém pode produzir um texto cifrado diferente que olhar válido. E como resultado desta abordagem garante que quaisquer modificações na texto cifrado será detectado pelo decrypter simplesmente porque o MAC não é vai verificar. Como se vê, para a abordagem SSL, há na verdade são uma espécie de exemplos patológicos, onde combinam CPA sistema de criptografia seguro com um seguro MAC. E o resultado é vulnerável a um ataque escolhido cifra texto, de modo que ele faz na verdade não fornece criptografia autenticado. E, basicamente, a razão que poderia acontecer, é que há algum tipo de interação ruim entre a criptografia esquema eo algoritmo MAC. De tal modo que, de fato, haverá uma cifra escolhida ataque texto. Então, se você está projetando um novo projeto a recomendação agora é sempre usar criptografar então MAC porque isso é seguro, não importa qual CPA seguro algoritmo de criptografia e MAC seguro você está combinando. Agora, só para definir o terminologia, o método SSL é às vezes chamado MAC-then-encrypt. Eo método IPsec é chamado encrypt-then-MAC. O método SSH mesmo que seu não deveria usá-lo, é chamado de criptografar e-MAC. Ok, então eu vou muitas vezes referem-se a encrypt-then-MAC e MAC-then-criptografar para diferenciar SSL e IPsec. Ok, então apenas para repetir o que acabei de dizer. O método de IPsec encrypt-e-mac sempre nos fornecer uma criptografia autenticado. Se você começar do CPA cifra segura e um MAC seguro Você sempre terá criptografia autenticado. Como eu disse, MAC-depois-criptografar em fato, há casos patológicos, onde o resultado é vulnerável a fatos CCA e , portanto, não fornece criptografia autenticado. No entanto, a história é um pouco pouco mais interessante do que isso, na medida em que, ao que parece, se você está realmente usando modo aleatório contador ou CBC randomizado, em seguida, ao que parece, para aqueles que especial CPA esquemas de criptografia seguras, MAC-then-criptografar realmente dá autenticado criptografia e por isso é seguro. De fato, há mesmo uma mais interessante torcer aqui em que se você estiver usando o modo de contador ao acaso. Então, é suficiente que o seu algoritmo de MAC apenas ser um tempo seguro. Ele não tem que ser um totalmente MAC seguro. Ele só tem que ser seguro quando uma tecla é usada para criptografar uma mensagem única, ok? E quando falamos sobre a integridade da mensagem, vimos que há realmente 6:56.08 MACs muito mais rápido que são um tempo seguro de MACs que são totalmente seguras. Como resultado, se você estiver usando o modo aleatório contra-MAC, em seguida, criptografar-pudesse realmente resultado em um mecanismo de criptografia mais eficiente. No entanto, eu vou repetir isso de novo. A recomendação é usar encrypt-then-MAC e estamos indo para ver um número de ataques a sistemas que não usam encrypt-then-MAC. E assim o fazem apenas que as coisas são seguras sem você ter que pensar muito sobre isso. Novamente, eu sou vai recomendar que você use sempre encrypt-then-MAC. Agora, uma vez que o conceito de criptografia autenticada tornou-se mais popular, um número de padronizada abordagens para a combinação de criptografia e MAC apareceu. E eram mesmo padronizado pelo Instituto Nacional de Padrões. Então eu só vou mencionar três destas normas. Dois deles foram padronizados pelo NIST. E estes são chamado Galois modo de contador e contador de modo CBC. E então deixe-me explicar o que fazem. modo Galois contador basicamente usa criptografia de modo contador, para um contador randomizado modo com um MAC Carter-Wegman, portanto, um fato muito Carter-Wagmon MAC. E a forma como o Carter-Wegman MAC trabalha em GCM é que é basicamente uma função hash da mensagem que está sendo MACed. E então o resultado é criptografada usando um PRF. Agora esse hash função em MGC é já bastante rápido até o ponto onde a maior parte do executando hora do GCM é dominada pelo modo de contador de criptografia e está ainda fez mais, em que a Intel introduz um PCLMULQDQ instrução especial especificamente projetado para a finalidade de fazer a função hash na GCM correr tão rápido quanto possível. Agora modo contador CCM é um outro padrão NIST ele usa um MAC CBC. E então criptografia modo de contador. Portanto, este mecanismo, você sabe, este usa MAC, então encrypt, como SSL faz. Portanto, este não é realmente a maneira recomendada de se fazer coisas, mas porque a criptografia modo contador é usado. Esta é realmente uma mecanismo de criptografia perfeitamente bem. Uma coisa que eu gostaria de ressaltar sobre CCM, é que tudo é baseado em AES. Você percebe, ele está usando AES para a CBC MAC, e ele está usando a criptografia AES de modo contador. E, como resultado, o CCM pode ser implementada com o código de relativamente pouco. Porque tudo que você precisa é um motor AES e nada mais. E por isso, CCM, na verdade foi adoptada pelo Wi-Fi aliança e, na verdade, provavelmente você está usando CCM em uma base diária, se você estiver usando criptografado Wi-Fi 802.11i então você está usando basicamente o tráfego do CCM encrypt entre o laptop eo ponto de acesso. Há um outro modo chamado EAX que usa criptografia de modo contador, e depois CMAC. Então, novamente você notar encrypt-de-mac e isso é um outro modo bem usar. Nós vamos fazer uma comparação de todos estes modos em apenas um minuto. Agora eu queria mencionar que, antes de tudo, todos estes são nonce-based. Em outras palavras, eles não usam qualquer aleatoriedade, mas eles tomam como entrada um nonce e nonce deve ser único por chave. Em outras palavras, como você lembre-se, a par nonce chave comum não deve nunca, nunca repetir. Mas o nonce si não precisa ser aleatória, por isso é perfeitamente possível usar um contador, para exemplo, como um uso único. E o outro ponto importante é que, na verdade, todos estes modos são o que se chama de criptografia autenticado com associados dados. Esta é uma extensão de criptografia autenticado, mas que vem -se muitas vezes em protocolos de rede. Portanto, a ideia entre AEAD é que, na verdade, a mensagem que é fornecido para o modo de criptografia não se destina a ser totalmente encriptado. Apenas uma parte da mensagem se destina a ser criptografada, mas todo o mensagem se destina a ser autenticado. Um bom exemplo disto é um pacote de rede. Pense como um pacote IP, onde há um cabeçalho. E depois há uma carga e normalmente o cabeçalho não vai ser criptografados. Por exemplo, o cabeçalho pode conter o destino do pacote, mas, em seguida, o cabeçalho é melhor que não seja criptografados de outra forma os roteadores ao longo do caminho não saberia por onde rotear o pacote. E assim, tipicamente o cabeçalho é enviado em claro, que a carga, é claro, é sempre criptografados, mas o que você gostaria de fazer é ter o cabeçalho ser autenticado. não criptografado, mas autenticado. Portanto, este é exatamente o que estes modos AEAD, fazer. Eles irá autenticar o cabeçalho e, em seguida, criptografar a carga. Mas o cabeçalho e carga a estão unidos na autenticação para a autenticação não pode realmente ser separados. Então isso não é difícil de fazer. O que acontece nestes três modos GCM, CCM, EAX e, basicamente, o MAC é aplicado para a totalidade dos dados. Mas criptografia é aplicada somente a parte dos dados que precisam ser criptografados. Então, eu queria mostrar o que uma API para criptografia autenticado com dados associados esquemas de criptografia semelhante. Então aqui está o que parece no OpenSSL Por exemplo, isto é, uma API para GCM. Então o que você faz é chamar a função de inicialização para inicializar o modo de criptografia, e você percebe que você dê a ele uma chave o nonce. O uso único de novo, não tem de ser aleatória, mas tem que ser único. E após a inicialização, você poderia chamar essa função encrypt, onde você vê que você dê a ele a dados associado que vai ser autenticadas, mas não criptografado. Você dá os dados, e vai ser autenticada e encriptado. E dá-lhe de volta o texto cifrado completo, que é uma criptografia da dados, mas é claro que não inclui o AAD, porque o DAA vai ser enviado em claro. Portanto, agora que entendemos esse modo de criptografar-then-MAC, que pode ir volta para a definição de MAC segurança e posso explicar-lhe algo que poderia ter sido um pouco obscura, quando olhamos para essa definição. Então, se você se lembra, um dos requisitos que se seguiram a nossa definição de MACs seguras significava que dada uma mensagem par MAC em uma mensagem M, o atacante não pode produzir outra tag na a mesma mensagem M. Em outras palavras, mesmo que o invasor já tem uma marca para M a mensagem, ele não deve ser capaz de produzir uma marca de novo para a mesma mensagem de M. E não é muito claro, por que isso importa? Quem se importa se o adversário já tem uma etiqueta na mensagem M? Quem se importa se ele pode produzir outra marca? Bem, acontece que o MAC não tem essa propriedade. Em outras palavras, dada uma mensagem par MAC, você pode produzir um outro MAC na mesma mensagem, então, que o MAC seria resultado em um modo de criptografar-then-MAC inseguro. E por isso, se queremos que o nosso MAC criptografado para ter auto-ajuste integridade, é crucial que a nossa Segurança MAC implicaria uma forte noção de segurança, o que, evidentemente, não faz porque definido-lo correctamente. Então vamos ver o que iria dar errado, se, de fato, era fácil de produzir este tipo de falsificação. Então o que vou fazer é que eu vou mostrar-lhe um ataque de texto cifrado escolhido no sistema encrypt-then-MAC resultante. E já que o sistema tem um texto cifrado escolhido ataque sobre ela, significa necessariamente que ele não fornece uma autenticado criptografia. Então vamos ver. Então começo do adversário gonnna enviando dois mensagens, M0 e M1. E ele vai receber, como de costume, a criptografia de um deles, a criptografia de M0 ou a criptografia de M1. E já que estamos usando encrypt-then-MAC, o adversário recebe um texto cifrado, vamos chamar um C0 e MAC no texto cifrado C0. Bem, agora temos dito que, dada a MAC uma mensagem o adversário pode produzir um outro MAC na mesma mensagem. Então, o que ele vai fazer é que ele vai produzir um outro MAC na mensagem C0. Agora, ele tem um texto cifrado de novo (C0, T '), que é um texto cifrado perfeitamente válido. T 'é um MAC válido de C0. Portanto, o adversário agora pode enviar uma consulta de texto da cifra escolhida em C 'e esta é uma consulta de texto válido cifra escolhida porque é diferente de C. É um texto cifrado de novo. O desafiante pobre agora é obrigado a decifrar este texto cifrado C 'para que ele vai mandar de volta a descriptografia de C'. É uma texto cifrado válido, portanto, a decodificação de C é o principal Mb mensagem, mas agora o atacante acabou de aprender o valor de B, porque ele pode testar se Mb é igual a M0 ou MB é igual a M1. Como resultado, ele pode apenas output B e ele fica vantagem um. Na alimentação do sistema. E assim, novamente, se a nossa segurança MAC não implicava essa propriedade aqui. Em seguida, haverá um ataque de texto escolhido cifra para criptografar-then-MAC. E portanto, não seria seguro. Assim, o fato de que nós definir a segurança MAC corretamente significa que criptografam-then-MAC realmente fornecer criptografia autenticado. E durante todos os MACs que discutimos realmente satisfazer essa noção forte de unforgeability. Assim, curiosamente, este não é o fim da história. Então, como dissemos antes do conceito de criptografia autenticado foi introduzido todos estavam apenas combinando MACs e criptografia de várias maneiras, na esperança de alcançar alguns, alguns criptografia autenticado. Após a noção de criptografia autenticado tornou-se formalizado e rigorosa, as pessoas começaram a coçar a cabeça e disse: ei, espere um minuto. Talvez possamos alcançar a criptografia autenticada de forma mais eficiente do que pela combinação de um MAC e um esquema de criptografia. Na verdade, se você pensar em como esta combinação de MAC e criptografia funciona, vamos dizer que combinar o modo de contador com CMAC, em seguida, para cada bloco de texto simples, você primeiro de tudo tem que usar cifra de bloco para o seu modo de contador, e então você tem que usar a sua cifra de bloco novamente, para o CBC-MAC. Isto significa que se você combinar CPA criptografia segura com um MAC, para cada bloco de texto simples, você tem que avaliar o seu bloco cifrado duas vezes, uma vez para o MAC e uma vez para o esquema de criptografia. Então, a pergunta natural era, podemos construir um sistema de criptografia autenticado diretamente de um PRP, tal que teríamos que apenas avaliar o PRP, uma vez por bloco. E acontece , a resposta é sim, e há estes bela construção denominada OCB, que praticamente faz tudo que você quer, e é muito mais rápido do que construções que são separadamente construído a partir de uma criptografia e MAC. Então eu escrevi para baixo, tipo de um esquema da OCB. Eu não quero explicar em detalhes. Vou explicá-lo meio a uma de alto nível. Então aqui nós temos, de entrada de texto simples, aqui no topo. E você aviso de que, em primeiro lugar, OCB é paralelizável, completamente paralelizável. Assim, cada bloco pode ser criptografado separadamente de cada outro bloco. A outra coisa a aviso é que, como eu prometi, você só avaliar a sua cifra do bloco uma vez por simples bloco de texto. E então você avaliá-lo mais uma vez no fim de construir o seu tag autenticação e, em seguida, a sobrecarga de OCB além de apenas um bloco cifra é mínima. Tudo que você tem a fazer é avaliar uma determinada função P muito simples que o nonce vai para o P você notar, a chave vai para este P e, em seguida, há uma contra bloco que vai para este P. Então você só avaliar essa função P, duas vezes para cada bloco e você XOR o resultado antes e depois de criptografia usando o cifra de bloco e é isso. Isso é tudo que você tem que fazer e então você começa um muito rápido esquema de criptografia e de autenticação eficiente construído a partir de uma cifra de bloco. Então OCB realmente tem um teorema de segurança agradável associado com ele e eu vou apontar para um trabalho sobre OCB quando chegarmos ao final deste módulo onde eu vou listar algumas mais papéis de leitura que você pode dar uma olhada. Então você deve estar se perguntando se é tão OCB muito melhor do que tudo o que tenho visto até agora todas essas três padrões CCM, GCM e EAX porque não é OCB sendo usado ou porque não é OCB o padrão? E a resposta é um pouco triste. A resposta primária em que CBC não está sendo utilizado é porque na verdade de várias patentes. E eu vou deixar por isso mesmo. Portanto, para concluir esta seção I queria mostrar-lhe alguns números de desempenho. Então, aqui à direita listei números de desempenho para os modos que você não deve usar. Então isto é para modo casualizado contador, e isto é para CBC casualizado. E você pode ver também o desempenho de CBC MAC é basicamente o mesmo que o desempenho de criptografia CBC. Ok. E aqui são os modos de criptografia autenticados, por isso estes são os que você deveria usar, estes que você não deveria estar usando em sua próprio, direito. Estes dois, você nunca deve usar esses dois, porque eles só fornecer CPA segurança, eles realmente não oferecer segurança contra ativa ataques. Você só deve usar criptografia autenticado para criptografia. E por isso este é os seus números de desempenho para os três padrões. E deixe-me lembrá você que GCM basicamente usa um hash muito rápido. E então ele usa o modo de contador para criptografia real. E você pode ver que a sobrecarga de GCM sobre o modo de contador é relativamente pequeno. CCM e EAX tanto usar uma criptografia Sipher bloco base e um cifra de bloco para a base da MAC. E como resultado a sua duas vezes mais lento que o contador modos. Você vê que é realmente mais rápido OCB destes, principalmente porque só usar a cifra de bloco uma vez por bloco de mensagem. Assim, com base no desempenho desses números, você poderia pensar que GCM é exatamente o modo correto de usar sempre. Mas acontece se você está no hardware espaço restrito, GCM não é o ideal. Principalmente porque a sua aplicação requer um código maior que os outros dois modos. No entanto, como eu disse, a Intel especificamente acrescentou instruções para acelerar modo GCM para cima. E, como resultado, a implementação de GCM na arquitetura Intel leva muito pouco código. Mas em outras plataformas de hardware, visto em cartões inteligentes ou outros ambientes restritos, os sites de código para a implementação GCM seria consideravelmente maior do que para os outros dois modos. Mas se o tamanho do código não é uma restrição, então GCM é o modo correto de usar. Então, para resumir esse segmento que eu quero dizer mais uma tempo que, quando você quiser criptografar mensagens que você tem que usar uma autenticação modo de criptografia e a maneira recomendada para fazer isso é usar um dos padrões, principalmente um destes três modos para fornecer criptografia de autenticação. Não implementar o esquema de criptografia si mesmo. Em outras palavras, não implementar criptografar e-MAC-se. Basta usar um desses três padrões. Muitas bibliotecas criptografar agora fornecer API padrão para estes três modos e estes são os do que você deve estar usando e nada mais. No próximo segmento nós vamos ver o que mais pode dar errado quando você tentar implementar uma criptografia sonicado por si mesmo.