0:00:00.000,0:00:04.152 Agora que entendemos segurança texto escolhido simples, permite construir sistemas de criptografias 0:00:04.152,0:00:08.515 que são escolhidos de texto simples seguro. E o esquema de criptografia primeiro tal vai 0:00:08.515,0:00:12.510 ser chamado cifra encadeamento bock. Então aqui está como o encadeamento de bloco cifra funciona. 0:00:12.510,0:00:16.610 encadeamento de blocos de codificação é uma maneira de usar uma cifra de bloco a ter escolhido texto simples 0:00:16.610,0:00:20.868 segurança. Em particular, estamos indo olhar um modo chamado encadeamento bloco cifra 0:00:20.868,0:00:25.021 com uma IV aleatória. CBC representa chaning bloco cifrado. Assim, suponha que temos um bloco 0:00:25.021,0:00:28.963 cifra, assim EB é uma cifra de bloco. Então, agora vamos definir CBC para ser o seguinte 0:00:28.963,0:00:33.248 esquema de criptografia. Assim, o algoritmo de criptografia quando é solicitado para criptografar uma 0:00:33.248,0:00:37.991 mensagem M, a primeira coisa que vai fazer é que vai escolher um IV aleatório que é 0:00:37.991,0:00:41.958 exatamente um bloco da cifra de bloco. Então IV é um bloco de cifra. 0:00:41.958,0:00:46.035 Assim, no caso de AES a IV seria de 16 bytes. E então nós estamos 0:00:46.035,0:00:50.649 vai correr através do algoritmo aqui, o IV, basicamente, que nós escolhemos vai ser XOR 0:00:50.649,0:00:54.726 para o bloco primeiro texto simples. E então o resultado vai ser 0:00:54.726,0:00:58.857 criptografada usando a cifra de bloco e de saída do primeiro bloco do texto cifrado. 0:00:58.857,0:01:03.041 E agora vem a parte encadeamento onde nós realmente usar o primeiro bloco de 0:01:03.041,0:01:07.436 texto a cifra Para tipo de máscara o segundo bloco do texto simples. Então, nós XOR 0:01:07.436,0:01:11.588 os dois juntos ea criptografia de que se torna o segundo bloco de texto cifrado. 0:01:11.588,0:01:15.535 E assim por diante, e assim por diante, e assim por diante. Portanto, este é o encadeamento cifra bloco que você pode 0:01:17.559,0:01:19.584 ver que cada bloco de cifra é acorrentado e XOR para o próximo texto simples 0:01:19.584,0:01:24.118 bloco. E o texto cifrado final é vai ser, essencialmente, a IV do IV inicial 0:01:24.118,0:01:30.024 que nós escolhemos, juntamente com todos os blocos de texto cifrado. Devo dizer que está IV 0:01:30.024,0:01:35.795 para vetor de inicialização. E nós vamos estar vendo esse termo usado um pouco, 0:01:35.795,0:01:39.717 cada vez que precisamos escolher algo aleatoriamente no início da criptografia 0:01:39.717,0:01:43.543 esquema tipicamente vamos chamar isso de um IV para vetor de inicialização. Então você percebe 0:01:43.543,0:01:47.322 que o texto cifra é um pouco maior do que o texto simples, porque tínhamos 0:01:47.322,0:01:51.149 para incluir este IV nos textos cifrados que, basicamente, capta a aleatoriedade 0:01:51.149,0:01:55.450 que foi usado durante a criptografia. Assim, a primeira pergunta é como nós decifrar o 0:01:55.450,0:02:00.226 resultados de criptografia CBC e então deixe-me lembrá-lo mais uma vez que se nós, quando 0:02:00.226,0:02:04.470 criptografar o bloco primeira mensagem que XOR com o encrypt IV do 0:02:04.470,0:02:09.187 resultado e que se torna o primeiro bloco de texto cifrado. Então deixe-me perguntar-lhe como é que 0:02:09.187,0:02:13.667 você descriptografar isso? Portanto, dado o bloco de texto primeiro cifra como você recuperar 0:02:13.667,0:02:17.915 do bloco de texto original primeiro planície? Assim descodificação é na verdade muito semelhante à 0:02:17.915,0:02:21.660 criptografia, aqui escrevi o circuito de decodificação, você pode ver, basicamente, 0:02:21.660,0:02:25.961 é quase a mesma coisa, exceto o XOR é no fundo, em vez de na parte superior e 0:02:25.961,0:02:29.605 novamente você percebe que, essencialmente, que cortou o IV como parte do 0:02:29.605,0:02:33.754 processo de descriptografia e só emitir a mensagem original de volta, o IV é descartado 0:02:33.754,0:02:38.438 pela tomada de descriptografia ok então o seguinte teorema vai mostrar que em 0:02:38.438,0:02:43.762 fato de criptografia modo CBC com um IV aleatório é, de fato semanticamente seguro sob um 0:02:43.762,0:02:48.956 escolhido texto simples, e por isso vamos levar isso mais precisamente, basicamente, se 0:02:48.956,0:02:54.083 início com um PRP, em outras palavras seu e cifra do bloco, que é definido por um 0:02:54.083,0:02:59.079 X espaço, então nós vamos acabar com uma criptografia de uma ECBC que leva 0:02:59.079,0:03:03.944 mensagens de comprimento L e mensagens cifradas saídas de comprimento L, mais um. E, em seguida 0:03:03.944,0:03:09.324 supor que temos um adversário que faz Q escolhidos querries texto plano. Então, podemos 0:03:09.324,0:03:15.024 estado o fato de segurança a seguir, que, para cada adversário de tal forma que está atacando 0:03:15.024,0:03:20.184 ECBC de existir um adversário que está atacando o PRP a cifra de bloco com 0:03:20.184,0:03:24.926 a seguinte relação entre o algoritmo de dois, por outras palavras, a vantagem 0:03:24.926,0:03:29.851 do algoritmo A contra esquema de encriptação é menor do que a vantagem de B algoritmo 0:03:29.851,0:03:35.080 contra o PRP original mais algum termo de ruído. Então deixe-me interpretar este teorema para 0:03:35.080,0:03:40.005 você como de costume, então o que isto significa é que, essencialmente, uma vez que E é um PRP segura este 0:03:40.005,0:03:45.051 quantidade aqui é insignificante, e nosso objetivo é dizer que uma vantagem do adversário é 0:03:45.051,0:03:49.794 também desprezível, no entanto aqui estamos impedidos de dizer que porque temos 0:03:49.794,0:03:54.630 este termo de erro extra. Isso é muitas vezes chamado de um termo de erro e argumentar que CBC 0:03:54.630,0:03:59.676 é seguro, temos de ter certeza de que o termo de erro também é insignificante. Porque se 0:03:59.676,0:04:04.474 ambos os termos à direita são desprezíveis, não há sinal é insignificante e 0:04:04.474,0:04:09.458 , portanto, a vantagem de um contra ECBC também seria negligenciável. Portanto, este diz 0:04:09.458,0:04:14.565 que, na verdade para ECBC para ser seguro era ser o fato de que Q L quadrado quadrado é 0:04:14.565,0:04:19.564 muito, muito, muito menor que o valor de X, então deixe-me lembrá-lo que Q e L são, por assim 0:04:19.564,0:04:24.566 L é simplesmente o comprimento das mensagens que estamos criptografia. Ok, então L pode ser 0:04:24.566,0:04:29.902 como dizer que um 1000, o que significa que estamos a criptografia de mensagens que são no máximo 1000 0:04:29.902,0:04:35.303 blocos AES. Q é o número de textos de codificação que o adversário consegue ver sob a 0:04:35.303,0:04:40.770 ataque CPA, mas na vida real que Q é, é basicamente o número de vezes que temos 0:04:40.770,0:04:46.041 usou o K-chave para criptografar mensagens, em outras palavras, se usar uma chave AES particular 0:04:46.041,0:04:51.052 criptografar 100 mensagens, Q seria de 100. É porque o adversário, então, ver 0:04:51.052,0:04:56.224 maioria das 100 mensagens criptografadas nos termos do presente K chave Ok, então vamos ver o que isto significa no real 0:04:56.224,0:05:00.866 mundo. Então aqui eu reescrevi o equilíbrio seta no teorema. E só para lembrar 0:05:00.866,0:05:05.093 que você use as mensagens cifradas com a K e L com os comprimentos das mensagens e 0:05:05.093,0:05:09.370 suponha que queremos vantagem do adversário para ser inferior a um sobre dois para o 30 0:05:09.370,0:05:13.346 dois. Isto significa que o termo seta melhor que seja inferior a um sobre dois à 0:05:13.346,0:05:17.853 32. Ok, vamos olhar para AES e ver o que isso significa. Para AES, AES, naturalmente, utiliza 0:05:17.853,0:05:22.300 bloco de 128 bits para X vai ser dois para o 128, o 0:05:22.300,0:05:26.363 tamanho de X vai ser 2 a 128, e se 0:05:26.363,0:05:30.865 ligue-a a expressão que você vê que, basicamente, o produto é Q vezes teve L 0:05:30.865,0:05:35.477 melhor ser inferior a duas vezes quarenta e oito. Isto significa que, depois de se usar um especial 0:05:35.477,0:05:40.014 chave para criptografar 2 para o bloco 48 AES temos de mudar a chave. Ok então 0:05:40.014,0:05:46.966 essencialmente CBC deixa de ser seguro depois que a chave é usada para criptografar 2 à 48 diferentes AS blocos. 0:05:46.966,0:05:49.572 Então, seu tipo de bom que o teorema de segurança diz 0:05:49.572,0:05:54.499 você exatamente quanto tempo a chave pode ser usada e, em seguida, a freqüência como a chave precisa 0:05:54.499,0:05:59.575 de ser substituído. Agora é interessante se você aplicar a mesma analogia para o que 3DES 0:05:59.575,0:06:04.909 realmente tem um bloco muito mais curto, talvez apenas 64 bits, você vê a chave tem de ser 0:06:04.909,0:06:10.485 mudado mais freqüentemente talvez depois a cada 65 mil blocos DES você precisa de uma nova chave. Assim 0:06:10.485,0:06:15.275 esta é uma das razões que AES tem um tamanho maior do bloco de modo que nos modos de facto 0:06:15.275,0:06:20.240 como CBC seria mais seguro e pode-se usar as chaves por um longo período antes de ter 0:06:20.240,0:06:24.796 para substituí-lo. O que isto significa é ter que substituir dois a 60, em blocos, 0:06:24.796,0:06:29.586 cada bloco do curso é de 8 bytes, por isso depois de criptografar cerca de metade de um megabyte de 0:06:29.586,0:06:33.868 cada bloco do curso é de 8 bytes, por isso depois de criptografar cerca de metade de um megabyte de 0:06:33.868,0:06:37.645 aviso com AES você pode criptografar um monte de dados antes de ter que mudar o 0:06:37.645,0:06:42.604 chave. Então eu quero avisá-lo sobre um erro muito comum que as pessoas fizeram quando 0:06:42.604,0:06:47.627 usando CBC com um IV aleatório. Isso é que minuto o que o atacante pode prever 0:06:47.627,0:06:52.712 a IV que você está indo usar para criptografar uma mensagem especial decifrar 0:06:52.712,0:06:57.797 ECBC isso não é mais seguro CPA. Então, quando usando CBC com um IV aleatório, como nós temos 0:06:57.797,0:07:02.246 apenas mostrado É crucial que a IV não é previsível. Mas vamos ver um ataque. Assim 0:07:02.246,0:07:06.282 suponho que assim acontece que, dada uma codificação em particular em uma mensagem que 0:07:06.282,0:07:10.695 atacante pode realmente prever que IV, que será utilizado para a próxima mensagem. Bem 0:07:10.695,0:07:14.839 permite mostrar que de fato o sistema resultante não é CPA seguro. Então a primeira coisa que a 0:07:14.839,0:07:19.197 adversário vai fazer é, ele vai pedir para a criptografia de um bloco de um 0:07:19.197,0:07:23.449 mensagem. Em particular que um bloco vai ser zero. Então, o que o adversário 0:07:23.449,0:07:27.592 recebe de volta é a criptografia de um bloco, ou seja, que é a criptografia de 0:07:27.592,0:07:31.748 mensagem ou seja zero, o XOR IV. Ok e, claro, o adversário também recebe o 0:07:31.748,0:07:35.877 IV. Ok então agora o adversário por hipótese pode prever o que vai IV 0:07:35.877,0:07:40.196 ser utilizado para a codificação seguinte. Ok, então vamos dizer que IV é chamado, bem IV. Assim 0:07:40.196,0:07:44.460 seguinte, o adversário vai lançar seu desafio de segurança Symantec e da 0:07:44.460,0:07:49.167 mensagem M0 vai ser o predito IV XOR IV1 o qual foi utilizado na criptografia 0:07:49.167,0:07:53.707 de C1. E a, a mensagem do M1 é apenas vai ser alguma outra mensagem, ela não 0:07:53.707,0:07:58.248 importa realmente o que é. Então, agora vamos ver o que acontece quando o adversário recebe 0:07:58.248,0:08:02.346 o resultado do desafio de segurança Symantic. Bem, ele está indo para obter o 0:08:02.346,0:08:06.470 criptografia de M0 ou M1. Assim, quando o adversário recebe a criptografia de M0, 0:08:06.470,0:08:10.800 me dizer o que é que o texto real claro que é criptografada no texto cifrado C? 0:08:11.260,0:08:17.368 Bem então a resposta é que o que é realmente criptografado é a mensagem que é 0:08:17.368,0:08:22.826 IV XOR XOR IV1 o IV que é usada para criptografar a mensagem que passa a ser 0:08:22.826,0:08:28.301 IV e isso, claro, é IV1. Assim, quando o adversário recebe a criptografia de M0, 0:08:28.301,0:08:33.167 ele está realmente recebendo a criptografia cifra de bloco de IV1. E baixa e eis 0:08:33.167,0:08:38.440 você vai perceber que ele já tem o valor de sua consulta de texto escolhido simples. 0:08:38.440,0:08:42.800 E então quando ele está recebendo a criptografia da mensagem M1, ele só recebeu 0:08:42.800,0:08:47.825 uma criptografia CBC normais do M1 mensagem. Então você percebe que agora ele tem um simples 0:08:47.825,0:08:53.057 forma de quebrar o esquema, ou seja, o que ele vai fazer é que ele vai perguntar: 'É o segundo 0:08:53.057,0:08:58.354 bloco do texto cifrado C igual ao valor que recebi em minha consulta CPA? Se 0:08:58.354,0:09:03.843 então eu vou dizer que eu recebi a criptografia de M0, caso contrário eu vou dizer que eu recebi 0:09:03.843,0:09:09.209 criptografia de M1. Então, realmente o seu teste é C1 onde ele se refere ao segundo bloco 0:09:09.209,0:09:14.441 de C e C1 refere-se ao segundo bloco de C1 se os dois são iguais, ele diz zero, 0:09:14.441,0:09:20.095 caso contrário, ele diz um deles. Assim, a vantagem desta adversário vai ser 1 e como um 0:09:20.095,0:09:25.650 resultado, ele rompe completamente a segurança da CPU deste criptografia CBC. Então a lição aqui 0:09:25.650,0:09:30.334 é, se o IV é previsível, então, na verdade, não há segurança CPA e 0:09:30.334,0:09:35.621 , infelizmente, este é realmente um erro muito comum na prática. Em particular 0:09:35.621,0:09:41.339 mesmo protocolo SSL e em TLS1.1 verifica-se que para número recorde IV I é de fato 0:09:41.339,0:09:46.363 do bloco de texto última cifra recorde de I-1. Isso significa que exactamente dada 0:09:46.363,0:09:51.579 a criptografia de disco I-1, o adversário sabe exatamente o que está acontecendo IV 0:09:51.579,0:09:56.031 para ser usado como I. número recorde Muito recentemente apenas no verão passado esta era 0:09:56.031,0:10:00.737 realmente convertido em um ataque devastador em SSL. Vamos descrever 0:10:00.737,0:10:06.016 que um ataque falamos de SSL em mais detalhes, mas agora eu queria ter certeza de 0:10:06.016,0:10:12.371 você entende quando você usa criptografia CBC é absolutamente crucial que o IV ser aleatória. 0:10:12.371,0:10:16.372 Ok. Então agora eu vou te mostrar a versão nonce base de criptografia CBC 0:10:16.372,0:10:21.443 Assim, neste modo, o IV é substituído pelo nonce aleatório, mas não único 0:10:26.509,0:10:26.514 , por exemplo, o número 1,2,3,4,5. No entanto, se vai ser um contador de você 0:10:26.514,0:10:32.046 precisa fazer mais um passo. Antes de realmente CBC criptografia e em especial que você tem 0:10:32.046,0:10:37.380 para realmente criptografar as notas para se obter o IV que irá ser efectivamente utilizado para 0:10:37.380,0:10:42.919 criptografia. As anotações para CBC é semelhante a um IV aleatória, a diferença é que o 0:10:42.919,0:10:48.047 notas é primeiro codificado, e os resultados é que o IV é utilizado na CBC 0:10:48.047,0:10:52.728 criptografia Agora a beleza deste modo é que a Nance não tem necessariamente de 0:10:52.728,0:10:56.975 ser incluídos no texto codificado. Ele só precisa estar lá, se as suas incógnitas são 0:10:56.975,0:11:01.116 decrypter, mas que se o decrypter acontece que já conhecem o valor do 0:11:01.116,0:11:05.310 contra por outros meios, em seguida, na verdade, o texto cifrado é somente tão grande quanto o 0:11:05.310,0:11:09.291 texto simples. Não há valor extra transmitida no texto cifrado. E, novamente, 0:11:09.291,0:11:13.591 eu avisar que quando você está usando criptografia espaço não, é absolutamente crucial que 0:11:13.591,0:11:17.679 a chave comum Nance de reposição só é usado para uma mensagem de forma para cada mensagem, 0:11:17.679,0:11:22.028 ou Nance o que mudou ou a tecla mudou. Ok, então aqui enfatizar a 0:11:22.028,0:11:26.499 fato de que você precisa fazer esse passo extra antes de criptografia usando o real 0:11:26.499,0:11:31.088 Nance. Isso é erro muito comum que realmente esquecido na prática e 0:11:31.088,0:11:35.795 exemplo, TLS, isso não foi feito e como resultado houve um ataque significativo 0:11:35.795,0:11:40.282 contra criptografia CBC em TLS. Lembre-se da razão que isso é tão importante para 0:11:40.282,0:11:44.950 sabem é que na verdade muitas APIs de criptografia são criados para quase deliberadamente enganar o 0:11:44.950,0:11:49.451 usuário usando CBC incorretamente. Então, vamos olhar para ver como CBC implementado dentro de 0:11:49.451,0:11:53.840 SSL aberta. Então aqui estão os argumentos da função. Basicamente este é o simples 0:11:53.840,0:11:58.119 texto, este é o lugar onde o texto cifrado vai ficar gravado. Este é o 0:11:58.119,0:12:02.760 comprimento do texto simples. Esta é uma, uma tecla Sim Finalmente, há um argumento de que aqui 0:12:02.760,0:12:06.438 diz se você está crypting ou descriptografar. E o mais importante 0:12:06.438,0:12:10.884 parâmetro que eu queria salientar aqui é o IV real e, infelizmente, o 0:12:10.884,0:12:15.330 usuário é solicitado a fornecer este IV ea função usa o IV diretamente no CBC 0:12:15.330,0:12:19.831 mecanismo de criptografia. Não encriptar a IV, antes de utilizá-lo e, como resultado, se 0:12:19.831,0:12:24.332 você chamar essa função usando um IV não aleatório, o sistema de criptografia resultando 0:12:24.332,0:12:28.816 não será CPA seguro. Ok, isso é muito importante saber que ao chamar 0:12:28.816,0:12:33.960 funções como este. Criptografia SSL Cbc ou aberto ou fornecer um IV verdadeiramente aleatório 0:12:33.960,0:12:38.836 ou se você deseja que o IV para ser um contador do que você tem para criptografar um contador usando AAS 0:12:38.836,0:12:43.668 antes de realmente chamar um encrypt CBC e você tem que que você mesmo. Então, novamente, é 0:12:43.668,0:12:48.340 muito importante que o programador sabe que precisa ser feito caso contrário, a CBC 0:12:48.340,0:12:52.456 criptografia é inseguro. Um detalhe técnico última sobre CBC é o que fazer quando 0:12:52.456,0:12:57.183 a mensagem não é um múltiplo do comprimento do bloco do bloco de codificação? Isso é o que fazemos 0:12:57.183,0:13:01.689 se o bloco de mensagem último é mais curto do que o comprimento do bloco de AES, por exemplo? Assim 0:13:01.689,0:13:06.281 o bloco de mensagem é passada menos de dezasseis bytes. E a resposta é se somarmos 0:13:06.281,0:13:11.586 uma almofada para o último bloco de modo que se torna tão longo como dezasseis bytes, contanto que o AES 0:13:11.586,0:13:16.633 tamanho do bloco. E esta almofada, é claro, se vai ser removido durante a criptografia. Assim 0:13:16.633,0:13:21.873 aqui é um caminho típico, este é o caminho que é usado no TLS. Basicamente almofada um com 0:13:21.873,0:13:26.919 N bytes, em seguida, essencialmente o que você faz é escrever o número N, N vezes. Assim, para 0:13:26.919,0:13:32.036 exemplo, se você pad com cinco bytes, você almofada com a seqüência 555555. Então, cinco bytes 0:13:32.036,0:13:37.175 onde cada byte é o valor cinco. E a principal coisa sobre este tapete é basicamente quando 0:13:37.175,0:13:42.012 decrypter a receber a mensagem, o que ele faz é ele olha para o último byte de 0:13:42.012,0:13:46.970 o último bloco. Então suponho que o valor é cinco, então, ele simplesmente elimina os últimos cinco 0:13:46.970,0:13:51.818 bytes da mensagem. Agora a pergunta é o que vamos fazer se, de facto, a mensagem é um 0:13:51.818,0:13:56.262 múltiplo de dezesseis bytes então de fato não pad é necessário? Se não o fizermos pad em tudo, 0:13:56.262,0:14:00.476 bem que é um problema porque o decrypter vai olhar para o próprio 0:14:00.476,0:14:05.267 último byte do último bloco que não faz parte da mensagem real e que ele vai 0:14:05.267,0:14:10.000 para remover este número de bytes a partir do texto simples. De modo que, na verdade seria um problema. 0:14:10.000,0:14:15.363 Então a solução é, se de fato não há almofada que é necessário, no entanto, ainda 0:14:15.363,0:14:20.662 tem que adicionar um bloco de manequim. E uma vez que adicionar o bloco manequim este seria um bloco 0:14:20.662,0:14:25.830 que é basicamente contém dezesseis bytes cada um contendo o número 16. 0:14:25.830,0:14:30.042 Ok, então vamos adicionar blocos manequim essencialmente dezesseis. O decrypter, que quando ele é 0:14:30.042,0:14:34.473 descriptografar, ele olha para o último byte do último bloco, ele vê que o valor é 0:14:34.473,0:14:38.823 16, pois ele remove todo o bloco. E o que resta é a real 0:14:38.823,0:14:42.975 texto simples. Então é um pouco lamentável que na verdade se você estiver criptografando curto 0:14:42.975,0:14:47.019 mensagens com CBC e as mensagens que ser, digamos, 32 bytes, assim que são uma 0:14:47.019,0:14:51.387 múltiplo de dezesseis bytes, então você tem que adicionar mais um bloco e fazer todos estes 0:14:51.387,0:14:55.108 mensagens cifradas de 48 bytes apenas para acomodar o preenchimento CBC. Eu deveria 0:14:55.108,0:14:59.584 menção há uma variante do chamado CBC CBC com texto cifrado roubar que realmente 0:14:59.584,0:15:03.790 evita este problema, mas eu não vou descrever isso aqui. Se você está interessado 0:15:03.790,0:15:07.907 você pode olhar que até online. Ok, então isso é o fim da nossa discussão do CBC 0:15:07.907,0:15:12.198 e no segmento seguinte, verá como utilizar os modos de contador para criptografar múltipla 0:15:12.198,0:15:13.720 mensagens utilizando uma única tecla.