[Script Info] Title: [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:00.00,0:00:04.01,Default,,0000,0000,0000,,Neste segmento, eu quero dar alguns exemplos de fluxo cifras que são usados na prática. Dialogue: 0,0:00:04.01,0:00:07.07,Default,,0000,0000,0000,,Vou começar com dois exemplos antigos que na verdade não são Dialogue: 0,0:00:07.07,0:00:11.02,Default,,0000,0000,0000,,suposto ser usado em sistemas novos. Mas, no entanto, eles ainda são bastante Dialogue: 0,0:00:11.02,0:00:14.16,Default,,0000,0000,0000,,amplamente utilizada, e assim que eu apenas quero mencionar os nomes para que você esteja familiarizado com Dialogue: 0,0:00:14.16,0:00:19.09,Default,,0000,0000,0000,,esses conceitos. A cifra de fluxo primeiro eu quero falar é chamado RC4, projetado Dialogue: 0,0:00:19.09,0:00:23.43,Default,,0000,0000,0000,,em 1987. E eu só vou te dar a descrição de alto nível e, em seguida Dialogue: 0,0:00:23.43,0:00:27.82,Default,,0000,0000,0000,,nós vamos falar sobre alguns pontos fracos do RC4 e deixar por isso mesmo. Assim RC4 leva um Dialogue: 0,0:00:27.82,0:00:32.70,Default,,0000,0000,0000,,sementes de tamanho variável, aqui eu só dei como um exemplo onde levaria 128 Dialogue: 0,0:00:32.70,0:00:36.98,Default,,0000,0000,0000,,bits como o tamanho das sementes, que passaria então a ser utilizados como chave para a cifra de fluxo. Dialogue: 0,0:00:36.98,0:00:41.74,Default,,0000,0000,0000,,A primeira coisa que faz, é que se expande a chave de 128-bit segredo em 2.048 bits, que Dialogue: 0,0:00:41.74,0:00:46.38,Default,,0000,0000,0000,,vão ser usados como o estado interno para o gerador. E então, quando ele é feito Dialogue: 0,0:00:46.38,0:00:51.20,Default,,0000,0000,0000,,esta expansão, que basicamente executa um laço muito simples, onde cada iteração do Dialogue: 0,0:00:51.20,0:00:55.90,Default,,0000,0000,0000,,laço Isso gera um byte de saída. Então, basicamente, você pode executar o gerador de Dialogue: 0,0:00:55.90,0:01:00.65,Default,,0000,0000,0000,,, enquanto você quer, e gerar um byte de cada vez. Agora RC4 é, na verdade, como eu disse, Dialogue: 0,0:01:00.65,0:01:05.20,Default,,0000,0000,0000,,bastante popular. É usado no protocolo HTTPS é bastante comum, na verdade. Dialogue: 0,0:01:05.20,0:01:11.89,Default,,0000,0000,0000,,Estes dias, por exemplo, o Google usa RC4 em suas HTTPS. Também é usado no WEP como nós Dialogue: 0,0:01:11.89,0:01:15.69,Default,,0000,0000,0000,,discutido no último segmento, mas é claro que no WEP, ele é usado incorretamente e Dialogue: 0,0:01:15.69,0:01:18.86,Default,,0000,0000,0000,,é completamente inseguro da forma como ele é usado dentro do WEP. Assim, ao longo dos anos, Dialogue: 0,0:01:18.86,0:01:23.89,Default,,0000,0000,0000,,algumas deficiências foram encontradas no RC4, e como resultado, é recomendado que os novos projetos Dialogue: 0,0:01:23.89,0:01:28.79,Default,,0000,0000,0000,,na verdade não usar RC4, mas sim usar um mais moderno gerador pseudo-aleatório como veremos Dialogue: 0,0:01:28.79,0:01:34.06,Default,,0000,0000,0000,,discutir para a extremidade do segmento. Então deixe-me mencionar apenas dois dos pontos fracos. Dialogue: 0,0:01:34.06,0:01:39.56,Default,,0000,0000,0000,,Então a primeira é que é tipo de bizarra, basicamente, se você olhar para o segundo byte Dialogue: 0,0:01:39.56,0:01:44.63,Default,,0000,0000,0000,,da produção de RC4. Acontece que o segundo byte é um pouco tendencioso. Se RC4 foi Dialogue: 0,0:01:44.63,0:01:49.78,Default,,0000,0000,0000,,completamente aleatória, a probabilidade de que o segundo byte acontece ser igual a zero Dialogue: 0,0:01:49.78,0:01:54.74,Default,,0000,0000,0000,,seria exatamente um sobre 256. Existem 256 bytes possíveis, a probabilidade que Dialogue: 0,0:01:54.74,0:01:59.65,Default,,0000,0000,0000,,zero, deveria ser um sobre 256. Acontece que para RC4 a probabilidade é Dialogue: 0,0:01:59.65,0:02:04.49,Default,,0000,0000,0000,,realmente dois por 256, o que significa que se você usar a saída RC4 para criptografar uma Dialogue: 0,0:02:04.49,0:02:09.57,Default,,0000,0000,0000,,mensagem do segundo byte é provável que não seja encriptada de todo. Em outras palavras, ele vai Dialogue: 0,0:02:09.57,0:02:14.58,Default,,0000,0000,0000,,ser XOR-ed com zero com o dobro da probabilidade de que é suposto. Dialogue: 0,0:02:14.58,0:02:19.44,Default,,0000,0000,0000,,Assim, dois sobre 256, em vez de um sobre 256. E pelo jeito que eu deveria dizer que há Dialogue: 0,0:02:19.44,0:02:22.85,Default,,0000,0000,0000,,nada de especial sobre o segundo byte. Acontece que a primeira e os bytes terceiros Dialogue: 0,0:02:22.85,0:02:27.82,Default,,0000,0000,0000,,também são tendenciosos. E de fato ele é agora recomendado que se você vai usar RC4, Dialogue: 0,0:02:27.82,0:02:32.80,Default,,0000,0000,0000,,que você deve fazer é ignorar, basicamente, os primeiros 256 bytes da saída e apenas Dialogue: 0,0:02:32.80,0:02:37.25,Default,,0000,0000,0000,,começar a utilizar a saída do gerador a partir de byte 257. O primeiro casal Dialogue: 0,0:02:37.25,0:02:41.24,Default,,0000,0000,0000,,de bytes acabou por ser tendencioso, então você simplesmente ignorá-los. O segundo ataque que Dialogue: 0,0:02:41.24,0:02:48.48,Default,,0000,0000,0000,,foi descoberto é que de fato se você olhar para uma saída muito longo de RC4 que acontece Dialogue: 0,0:02:48.48,0:02:53.86,Default,,0000,0000,0000,,que você é mais provável conseguir o 00 de seqüência. Em outras palavras, você é mais Dialogue: 0,0:02:53.86,0:02:58.97,Default,,0000,0000,0000,,probabilidade de obter dezesseis bits, dois bytes de zero, zero, do que deveria. Novamente, se RC4 Dialogue: 0,0:02:58.97,0:03:03.95,Default,,0000,0000,0000,,foi completamente aleatória a probabilidade de ver zero, zero seria exatamente 1/256 Dialogue: 0,0:03:03.95,0:03:08.56,Default,,0000,0000,0000,,quadrado. Acontece RC4 é um pouco tendencioso eo viés é 1/256 cubos. Ele Dialogue: 0,0:03:08.56,0:03:13.72,Default,,0000,0000,0000,,Acontece que este viés realmente começa depois de vários gigabytes de dados são produzidos por Dialogue: 0,0:03:13.72,0:03:18.63,Default,,0000,0000,0000,,RC4. Mas, no entanto, este é algo que pode ser utilizado para prever o gerador Dialogue: 0,0:03:18.63,0:03:23.12,Default,,0000,0000,0000,,e, definitivamente, ele pode ser usado para distinguir a saída do gerador Dialogue: 0,0:03:23.12,0:03:28.10,Default,,0000,0000,0000,,partir de uma seqüência verdadeiramente aleatória. Basicamente o fato de que zero, zero aparece com mais freqüência Dialogue: 0,0:03:28.10,0:03:32.41,Default,,0000,0000,0000,,do que deveria é o Distinguisher. E então, no último segmento que falamos Dialogue: 0,0:03:32.41,0:03:36.31,Default,,0000,0000,0000,,relacionado-chave ataques que foram usados para atacar WEP, que basicamente dizem que Dialogue: 0,0:03:36.31,0:03:41.08,Default,,0000,0000,0000,,se teclas de um utilizações que estão intimamente relacionadas entre si, então é realmente possível Dialogue: 0,0:03:41.08,0:03:45.73,Default,,0000,0000,0000,,para recuperar a chave raiz. Assim, estes são os pontos fracos que são conhecidos de RC4 e, como um Dialogue: 0,0:03:45.73,0:03:50.22,Default,,0000,0000,0000,,resultado, é recomendado que os novos sistemas não realmente usar RC4 e utilizar um Dialogue: 0,0:03:50.22,0:03:54.42,Default,,0000,0000,0000,,gerador pseudo-aleatório moderna. Ok, segundo exemplo que quero dar-lhe é um Dialogue: 0,0:03:54.42,0:03:59.13,Default,,0000,0000,0000,,cifra de fluxo gravemente quebrado que é usada para criptografar filmes em DVD. Quando você compra um DVD Dialogue: 0,0:03:59.13,0:04:03.50,Default,,0000,0000,0000,,na loja, o próprio filme é criptografada usando uma cifra de fluxo chamado de Dialogue: 0,0:04:03.50,0:04:07.93,Default,,0000,0000,0000,,Content Scrambling System, CSS. CSS acaba por ser uma cifra de fluxo gravemente quebrado Dialogue: 0,0:04:07.93,0:04:12.52,Default,,0000,0000,0000,,e podemos muito facilmente quebrá-lo, e eu quero mostrar-lhe como o algoritmo de ataque Dialogue: 0,0:04:12.52,0:04:16.89,Default,,0000,0000,0000,,obras. Estamos fazendo isso para que você possa ver um exemplo de um algoritmo de ataque, mas em Dialogue: 0,0:04:16.89,0:04:21.44,Default,,0000,0000,0000,,verdade, existem muitos sistemas por aí que, basicamente, usar este ataque para descriptografar Dialogue: 0,0:04:21.44,0:04:25.75,Default,,0000,0000,0000,,DVDs criptografados. Assim, a cifra de fluxo CSS é baseada em algo que o hardware Dialogue: 0,0:04:25.75,0:04:30.29,Default,,0000,0000,0000,,projetistas gosta. Ele foi projetado para ser uma cifra de fluxo de hardware que é suposto Dialogue: 0,0:04:30.29,0:04:34.49,Default,,0000,0000,0000,,ser fácil de implementar em hardware, e baseia-se um mecanismo chamado linear Dialogue: 0,0:04:34.49,0:04:38.75,Default,,0000,0000,0000,,mudança comentários registar. Assim, um registrador de deslocamento linear feedback é basicamente um registo Dialogue: 0,0:04:38.75,0:04:43.80,Default,,0000,0000,0000,,que consiste em células em que cada célula contém um bit. Então, basicamente, Dialogue: 0,0:04:43.80,0:04:49.05,Default,,0000,0000,0000,,que acontece é que existem estas torneiras em certas células, não todas as células, certos Dialogue: 0,0:04:49.05,0:04:54.13,Default,,0000,0000,0000,,posições são chamados torneiras. E então essas torneiras alimentar em um XOR e, em seguida, em Dialogue: 0,0:04:54.13,0:04:59.05,Default,,0000,0000,0000,,cada ciclo de clock, o registrador de deslocamento desloca para a esquerda. O último pedaço cair Dialogue: 0,0:04:59.05,0:05:04.34,Default,,0000,0000,0000,,e, em seguida, o primeiro bit torna-se o resultado deste XOR. Assim você pode ver que Dialogue: 0,0:05:04.34,0:05:08.70,Default,,0000,0000,0000,,este é um mecanismo muito simples de implementar, e em hardware tem muito poucos Dialogue: 0,0:05:08.70,0:05:13.62,Default,,0000,0000,0000,,transistores. Apenas o deslocamento para a direita, o último bit cai e apenas o primeiro bit Dialogue: 0,0:05:13.62,0:05:18.54,Default,,0000,0000,0000,,torna-se o XOR dos bits anteriores. Assim, a semente para este LFSR Dialogue: 0,0:05:18.54,0:05:23.46,Default,,0000,0000,0000,,, basicamente, é o estado inicial do LFSR. Dialogue: 0,0:05:23.65,0:05:28.54,Default,,0000,0000,0000,,E é a base de uma série de codificações de fluxo. Então, aqui estão alguns exemplos. Assim, como Dialogue: 0,0:05:28.54,0:05:33.36,Default,,0000,0000,0000,,eu disse, a criptografia utiliza duas LFSRs DVD. Eu vou te mostrar como isso funciona em apenas um Dialogue: 0,0:05:33.36,0:05:38.06,Default,,0000,0000,0000,,segundo. Criptografia GSM, estes são chamados algoritmos A51 e A52. E isso Dialogue: 0,0:05:38.06,0:05:43.46,Default,,0000,0000,0000,,utiliza três LFSRs. Criptografia Bluetooth é um algoritmo chamado, E zero. Estes são todos Dialogue: 0,0:05:43.46,0:05:48.53,Default,,0000,0000,0000,,cifras de fluxo, e que utiliza quatro LFSRs. Acontece que todos eles são gravemente quebrado Dialogue: 0,0:05:48.53,0:05:53.24,Default,,0000,0000,0000,,e na verdade realmente não deve ser confiável para criptografar o tráfego, mas todos eles são Dialogue: 0,0:05:53.24,0:05:56.70,Default,,0000,0000,0000,,implementado em hardware, por isso é um pouco difícil agora para mudar o que o hardware Dialogue: 0,0:05:56.70,0:06:01.05,Default,,0000,0000,0000,,faz. Mas o mais simples deles, CSS, na verdade, tem um ataque bonito nele, então vamos Dialogue: 0,0:06:01.05,0:06:05.46,Default,,0000,0000,0000,,me mostrar-lhe como o ataque funciona. Então, vamos descrever como o CSS realmente funciona. Assim, Dialogue: 0,0:06:05.46,0:06:11.07,Default,,0000,0000,0000,,chave para o CSS é de cinco bytes, ou seja, 40 bits, cinco vezes oito é de 40 bits. O Dialogue: 0,0:06:11.07,0:06:15.59,Default,,0000,0000,0000,,razão eles tinham que se limitar a apenas 40 bits é que a criptografia do DVD foi Dialogue: 0,0:06:15.59,0:06:19.94,Default,,0000,0000,0000,,concebidos numa altura em que os regulamentos de exportação dos Estados Unidos só é permitido para a exportação de Dialogue: 0,0:06:19.94,0:06:25.09,Default,,0000,0000,0000,,algoritmos crpyto onde estava a chave apenas 40 bits. Assim, os designers de CSS foram Dialogue: 0,0:06:25.09,0:06:30.21,Default,,0000,0000,0000,,já limitados a chaves muito, muito curtos. Apenas 40 teclas bit. Assim, seu projeto trabalha Dialogue: 0,0:06:30.21,0:06:35.40,Default,,0000,0000,0000,,como se segue. Basicamente, o CSS usa duas LFSR do. Um é um LFSR de 17-bit. Em outras palavras, Dialogue: 0,0:06:35.40,0:06:40.81,Default,,0000,0000,0000,,registo a contém 17 bits. Eo outro é um LFSR 25-bit, Dialogue: 0,0:06:40.81,0:06:46.65,Default,,0000,0000,0000,,é um pouco mais, 25 bits LFSR. E a forma como estas são semeadas LFSRs Dialogue: 0,0:06:46.65,0:06:51.87,Default,,0000,0000,0000,,é como se segue. Portanto, a chave para a criptografia, basicamente, tem a seguinte aparência. Dialogue: 0,0:06:51.87,0:06:57.67,Default,,0000,0000,0000,,Você começa com um, e você concatenar a ele os dois primeiros bytes de Dialogue: 0,0:06:57.67,0:07:02.95,Default,,0000,0000,0000,,chave. E esse é o estado inicial do LFSR. Dialogue: 0,0:07:02.95,0:07:08.26,Default,,0000,0000,0000,,E então o segundo LFSR basicamente é intitialized da mesma maneira. Dialogue: 0,0:07:08.26,0:07:14.01,Default,,0000,0000,0000,,Uma concatenado os últimos três bytes da chave. E isso é Dialogue: 0,0:07:14.01,0:07:19.89,Default,,0000,0000,0000,,carregado para o estado inicial do LFSR. Você pode ver que os dois primeiros bytes são Dialogue: 0,0:07:19.89,0:07:25.41,Default,,0000,0000,0000,,16 bits, mais um líder, que tem dezessete pedaços geral, enquanto o segundo Dialogue: 0,0:07:25.41,0:07:31.22,Default,,0000,0000,0000,,LFSR é de 24 bits, mais um que é de 25 bits. E você percebe usamos todos os cinco pedaços de Dialogue: 0,0:07:31.22,0:07:36.88,Default,,0000,0000,0000,,chave. Então essas são basicamente LFSRs correr para oito ciclos, de modo que elas geram Dialogue: 0,0:07:36.88,0:07:42.33,Default,,0000,0000,0000,,oito bits de saída. E então eles passam por este componente que faz basicamente Dialogue: 0,0:07:42.33,0:07:48.20,Default,,0000,0000,0000,,adição módulo 256. É assim que esta é uma caixa disso, módulo 256. Há mais uma Dialogue: 0,0:07:48.20,0:07:54.32,Default,,0000,0000,0000,,coisa técnica que acontece. Na verdade vamos realmente, também adicionada é o transporte do Dialogue: 0,0:07:54.32,0:07:59.72,Default,,0000,0000,0000,,bloco anterior. Mas isso não é tão importante. Isso é um detalhe que não é tão Dialogue: 0,0:07:59.72,0:08:04.76,Default,,0000,0000,0000,,relevante. OK, então todos os blocos, você percebe que estamos fazendo além modulo 256 e Dialogue: 0,0:08:04.76,0:08:09.98,Default,,0000,0000,0000,,estamos ignorando o transporte, mas o transporte é basicamente adicionado como um zero ou um um ao Dialogue: 0,0:08:09.98,0:08:15.15,Default,,0000,0000,0000,,além do bloco seguinte. Ok? E então, basicamente, esta saída um byte por round. Dialogue: 0,0:08:15.15,0:08:20.41,Default,,0000,0000,0000,,Ok, e então este byte é usado, então é claro, XOR-ed com o adequado Dialogue: 0,0:08:20.41,0:08:25.17,Default,,0000,0000,0000,,byte do filme que está sendo criptografado. Ok, então é um fluxo muito simples Dialogue: 0,0:08:25.17,0:08:29.99,Default,,0000,0000,0000,,cifra, é preciso hardware muito pouco para implementar. Ele irá correr rápido, mesmo em muito Dialogue: 0,0:08:29.99,0:08:35.83,Default,,0000,0000,0000,,hardware barato e vai criptografar filmes. Então, acontece que este é fácil de quebrar Dialogue: 0,0:08:35.83,0:08:41.22,Default,,0000,0000,0000,,no tempo cerca de dois a 17. Agora deixe-me mostrar-lhe como. Dialogue: 0,0:08:41.22,0:08:45.73,Default,,0000,0000,0000,,Então, suponha que você interceptar os filmes, então aqui nós temos um Dialogue: 0,0:08:45.73,0:08:50.65,Default,,0000,0000,0000,,filme criptografado que você deseja descriptografar. Então, digamos que tudo isso é criptografado para Dialogue: 0,0:08:50.65,0:08:55.28,Default,,0000,0000,0000,,você não tem idéia do que está dentro de aqui. No entanto, acontece que só porque Dialogue: 0,0:08:55.28,0:08:59.97,Default,,0000,0000,0000,,criptografia DVD está usando arquivos MPEG, acontece se você souber de um prefixo da Dialogue: 0,0:08:59.97,0:09:04.25,Default,,0000,0000,0000,,texto simples, vamos apenas dizer que talvez esta é de vinte bytes. Bem, sabemos que se você Dialogue: 0,0:09:04.25,0:09:08.59,Default,,0000,0000,0000,,XOR essas duas coisas juntas, então, em outras palavras, você faz o XOR aqui, Dialogue: 0,0:09:08.59,0:09:13.52,Default,,0000,0000,0000,,que você vai conseguir é o segmento inicial do PRG. Assim, você terá a Dialogue: 0,0:09:13.52,0:09:18.47,Default,,0000,0000,0000,,primeiros vinte bytes de a saída do CSS, a saída do presente PRG. Ok, então agora Dialogue: 0,0:09:18.47,0:09:23.99,Default,,0000,0000,0000,,aqui é o que nós vamos fazer. Assim, temos os primeiros vinte bytes de saída. Agora Dialogue: 0,0:09:23.99,0:09:31.40,Default,,0000,0000,0000,,nós fazemos o seguinte. Nós experimentar todos dois para os valores possíveis de 17 a primeira Dialogue: 0,0:09:31.40,0:09:37.09,Default,,0000,0000,0000,,LFSR. Ok? Assim, duas aos dezassete valores possíveis. Assim, para cada valor, portanto, para Dialogue: 0,0:09:37.09,0:09:42.62,Default,,0000,0000,0000,,cada um destes dois aos dezassete valores iniciais do LFSR, vamos executar o Dialogue: 0,0:09:42.62,0:09:47.95,Default,,0000,0000,0000,,LFSR por vinte bytes, ok? Então, vamos gerar de vinte bytes de saídas a partir deste Dialogue: 0,0:09:47.95,0:09:53.28,Default,,0000,0000,0000,,LFSR primeiro, assumindo-para cada um dos dois para os dezassete configurações possíveis. Dialogue: 0,0:09:53.28,0:09:58.62,Default,,0000,0000,0000,,Agora, lembre-se que temos o resultado completo do sistema de CSS. Então o que podemos fazer é nos Dialogue: 0,0:09:58.62,0:10:03.81,Default,,0000,0000,0000,,pode tomar esta saída que temos. E subtrair os vinte mordidas que nós Dialogue: 0,0:10:03.81,0:10:08.93,Default,,0000,0000,0000,,obtido a partir do LFSR primeiro, e se de fato o nosso palpite para o estado inicial do primeiro Dialogue: 0,0:10:08.93,0:10:14.04,Default,,0000,0000,0000,,LFSR está correta, o que devemos começar é a saída 20-primeiro byte do Dialogue: 0,0:10:14.04,0:10:19.22,Default,,0000,0000,0000,,LFSR segundo. Certo? Porque isso é, por definição, o que a saída do CSS Dialogue: 0,0:10:19.22,0:10:24.50,Default,,0000,0000,0000,,sistema é. Agora, descobre-se que olhar para uma seqüência de 20 bytes, é muito fácil Dialogue: 0,0:10:24.50,0:10:29.76,Default,,0000,0000,0000,,dizer se essa seqüência de 20-byte veio de um LFSR 25-bit ou não. Se Dialogue: 0,0:10:29.76,0:10:33.56,Default,,0000,0000,0000,,não, então sabemos que o nosso palpite para o LFSR 17-bit foi Dialogue: 0,0:10:33.56,0:10:37.42,Default,,0000,0000,0000,,incorreto e, em seguida, passamos para o próximo palpite para o LFSR 17-bit e Dialogue: 0,0:10:37.42,0:10:41.90,Default,,0000,0000,0000,,suposição o seguinte e assim por diante e assim por diante. Até que finalmente chegamos ao direito inicial Dialogue: 0,0:10:41.90,0:10:46.94,Default,,0000,0000,0000,,estado para o LFSR 17-bit, e depois vamos realmente começar, vamos ver que Dialogue: 0,0:10:46.94,0:10:51.97,Default,,0000,0000,0000,,os 20 bytes que obtemos como a saída candidato para o LFSR 25-bit é Dialogue: 0,0:10:51.97,0:10:56.94,Default,,0000,0000,0000,,, de facto, uma saída possível para um LFSR 25-bit. E então, não só teremos Dialogue: 0,0:10:56.94,0:11:02.16,Default,,0000,0000,0000,,aprendeu o estado inicial correto para o LFSR 17-bit, nós também teremos Dialogue: 0,0:11:02.16,0:11:07.52,Default,,0000,0000,0000,,aprendeu o estado inicial correto do LFSR 25-bit. E então podemos prever o Dialogue: 0,0:11:07.52,0:11:12.80,Default,,0000,0000,0000,,saídas restantes do CSS, e é claro, usar isso, podemos, então, decifrar o resto Dialogue: 0,0:11:12.80,0:11:17.56,Default,,0000,0000,0000,,o filme. Na verdade, podemos recuperar o texto restante. Okay. Isto é Dialogue: 0,0:11:17.56,0:11:22.34,Default,,0000,0000,0000,,coisas que falamos antes. Então, eu disse isso um pouco rápido, mas espero que, Dialogue: 0,0:11:22.34,0:11:27.33,Default,,0000,0000,0000,,ficou claro. Nós também vamos estar fazendo um exercício de dever de casa neste tipo de fluxo Dialogue: 0,0:11:27.33,0:11:31.44,Default,,0000,0000,0000,,cifras e você vai espécie de chegar ao ponto de como esses algoritmos de ataque Dialogue: 0,0:11:31.44,0:11:36.02,Default,,0000,0000,0000,,trabalho. E devo mencionar que existem muitos sistemas open-source, agora que realmente Dialogue: 0,0:11:36.02,0:11:41.45,Default,,0000,0000,0000,,usar esse método para descriptografar CSS dados criptografados. Ok, então agora que já vimos dois Dialogue: 0,0:11:41.45,0:11:45.89,Default,,0000,0000,0000,,fracos exemplos, vamos passar para exemplos melhores, e em particular o melhor Dialogue: 0,0:11:45.89,0:11:49.37,Default,,0000,0000,0000,,pseudo-aleatórios geradores vêm do que é chamado de Projeto eSTREAM. Esta é uma Dialogue: 0,0:11:49.37,0:11:55.56,Default,,0000,0000,0000,,projeto que concluiu em 2008, e que se qualifiquem, basicamente, cinco fluxo diferente Dialogue: 0,0:11:55.56,0:12:00.21,Default,,0000,0000,0000,,cifras, mas aqui quero apresentar apenas um. Então, primeiro de todos os parâmetros para Dialogue: 0,0:12:00.21,0:12:04.03,Default,,0000,0000,0000,,essas cifras de fluxo é um pouco diferente do que estamos acostumados. Então, essas Dialogue: 0,0:12:04.03,0:12:08.34,Default,,0000,0000,0000,,fluxo cifras normalmente eles têm uma semente. Mas, além disso eles também têm, o que é Dialogue: 0,0:12:08.34,0:12:12.82,Default,,0000,0000,0000,,chamado nonce e vamos ver o que é um nonce é usada em apenas um minuto. Assim Dialogue: 0,0:12:12.82,0:12:17.49,Default,,0000,0000,0000,,tomam duas entradas de uma semente e um nonce. Vamos ver o que o nonce é usada no Dialogue: 0,0:12:17.49,0:12:21.27,Default,,0000,0000,0000,,apenas um segundo. E claro que o de produzir uma saída muito grande, então n é aqui Dialogue: 0,0:12:21.27,0:12:26.60,Default,,0000,0000,0000,,muito, muito, muito maior do que s. Agora, quando eu digo nonce, o que quero dizer é um valor que é Dialogue: 0,0:12:26.60,0:12:31.22,Default,,0000,0000,0000,,nunca indo para repetir enquanto a chave é fixo. E eu vou explicar isso em mais Dialogue: 0,0:12:31.22,0:12:35.40,Default,,0000,0000,0000,,detalhe em apenas um segundo. Mas, por agora, basta pensar nisso como um valor único que nunca Dialogue: 0,0:12:35.40,0:12:40.53,Default,,0000,0000,0000,,repete, desde que a chave é a mesma. E então é claro que quando você tem este PRG, Dialogue: 0,0:12:40.53,0:12:45.36,Default,,0000,0000,0000,,você criptografar, você obtém uma cifra de fluxo tal como antes, só que agora como você vê, o Dialogue: 0,0:12:45.36,0:12:49.96,Default,,0000,0000,0000,,PRG toma como entrada tanto a chave eo nonce. E a propriedade do nonce é Dialogue: 0,0:12:49.96,0:12:56.35,Default,,0000,0000,0000,,que o par, k vírgula r, de modo a vírgula chave nonce, é nunca, nunca se repete. É Dialogue: 0,0:12:56.35,0:13:03.10,Default,,0000,0000,0000,,nunca usou mais de uma vez. Assim a linha inferior é que você pode reutilizar a chave, reutilizar Dialogue: 0,0:13:03.10,0:13:09.71,Default,,0000,0000,0000,,a chave, porque o uso único faz com que o par único, porque K e R são apenas Dialogue: 0,0:13:09.71,0:13:16.14,Default,,0000,0000,0000,,usado uma vez. Eu vou dizer que é único. Ok então este nonce é uma espécie de truque bonito que Dialogue: 0,0:13:16.14,0:13:21.54,Default,,0000,0000,0000,,nos salva a dificuldade de se mudar para uma nova chave de cada vez. Ok, então o particular Dialogue: 0,0:13:21.54,0:13:26.00,Default,,0000,0000,0000,,exemplo do eSTREAM que eu quero lhe mostrar é chamado Salsa 20. É uma Dialogue: 0,0:13:26.00,0:13:30.29,Default,,0000,0000,0000,,cifra de fluxo que é projetado para implementações de software e hardware Dialogue: 0,0:13:30.29,0:13:33.38,Default,,0000,0000,0000,,implementações. É uma espécie de interessante. Você percebe que algumas cifras de fluxo são Dialogue: 0,0:13:33.38,0:13:38.76,Default,,0000,0000,0000,,projetado para software, como RC4. Tudo que ele faz é projetado para fazer Dialogue: 0,0:13:38.76,0:13:42.69,Default,,0000,0000,0000,,implementação de software de correr rápido, enquanto o fluxo cifras outros são projetados para Dialogue: 0,0:13:42.69,0:13:48.14,Default,,0000,0000,0000,,hardware, como CSS, utilizando um LFSR que está particularmente desenhado para fazer hardware Dialogue: 0,0:13:48.14,0:13:50.96,Default,,0000,0000,0000,,implementações muito baratos. É também, a única coisa boa disso é que é Dialogue: 0,0:13:50.96,0:13:55.01,Default,,0000,0000,0000,,projetado de modo que seja fácil de implementar em hardware e seu software Dialogue: 0,0:13:55.01,0:13:59.75,Default,,0000,0000,0000,,implementação também é muito rápido. Então deixe-me explicar como Salsa obras. Bem, Salsa Dialogue: 0,0:13:59.75,0:14:05.13,Default,,0000,0000,0000,,leva ou 128 ou 256-bit chaves. Eu só vou explicar a versão de 128 bits do Salsa. Dialogue: 0,0:14:05.13,0:14:11.24,Default,,0000,0000,0000,,Então esta é a semente. E então ele também leva um nonce, tal como antes, que Dialogue: 0,0:14:11.24,0:14:15.42,Default,,0000,0000,0000,,passa a ser de 64 bits. E então ele vai gerar uma grande saída. Agora, como faz Dialogue: 0,0:14:15.42,0:14:21.06,Default,,0000,0000,0000,,realmente funciona? Bem, a própria função é definida como se segue. Basicamente, dado Dialogue: 0,0:14:21.06,0:14:26.38,Default,,0000,0000,0000,,chave eo nonce, ele irá gerar um tempo muito longo, bem, pseudorandom uma longa Dialogue: 0,0:14:26.38,0:14:31.22,Default,,0000,0000,0000,,sequência, enquanto for necessário. E vai fazê-lo usando essa função que eu vou denotar por Dialogue: 0,0:14:31.22,0:14:35.65,Default,,0000,0000,0000,,H. Este H função recebe três entradas. Basicamente a chave. Bem, a semente k, Dialogue: 0,0:14:35.65,0:14:40.50,Default,,0000,0000,0000,,o r nonce, e, em seguida, um contador que incrementa a partir do passo a passo. Assim vai Dialogue: 0,0:14:40.50,0:14:45.26,Default,,0000,0000,0000,,de zero a um, dois, três, quatro, contanto que inaudível] [ser. Ok? Então, basicamente, Dialogue: 0,0:14:45.26,0:14:49.96,Default,,0000,0000,0000,,avaliando este H nesta kr, mas usando este contador incrementar, podemos obter uma Dialogue: 0,0:14:49.96,0:14:54.88,Default,,0000,0000,0000,,seqüência que é tão longo como nós queremos. Então, tudo o que tenho a fazer é descrever como esta função Dialogue: 0,0:14:54.88,0:14:59.46,Default,,0000,0000,0000,,H funciona. Agora, deixe-me fazer isso aqui para você. O modo como funciona é o seguinte. Bem, nós Dialogue: 0,0:14:59.46,0:15:04.69,Default,,0000,0000,0000,,começar pela expansão dos estados em algo muito grande que é de 64 bytes Dialogue: 0,0:15:04.69,0:15:10.16,Default,,0000,0000,0000,,longo, e fazemos isso da seguinte forma. Basicamente, manter uma constante no início, de modo Dialogue: 0,0:15:10.16,0:15:15.55,Default,,0000,0000,0000,,há tao zero, estes são quatro bytes, é uma de quatro bytes constante, de modo a especificação para Dialogue: 0,0:15:15.55,0:15:20.61,Default,,0000,0000,0000,,Salsa, basicamente dá-lhe o valor tao zero. Então nós colocamos k em que é Dialogue: 0,0:15:20.61,0:15:25.47,Default,,0000,0000,0000,,bytes dezesseis. Então nós colocamos uma outra constante. Novamente, isto é quatro bytes. E Dialogue: 0,0:15:25.47,0:15:30.80,Default,,0000,0000,0000,,como eu disse, a especificação basicamente especifica o que esta constante é fixo. Então nós colocamos Dialogue: 0,0:15:30.80,0:15:37.44,Default,,0000,0000,0000,,nonce o que é de oito bytes. Então vamos colocar o índice. Este é o zero do contador, Dialogue: 0,0:15:37.44,0:15:43.06,Default,,0000,0000,0000,,um, dois, três, quatro, que é mais oito bytes. Então nós colocamos uma outra constante Dialogue: 0,0:15:43.06,0:15:49.06,Default,,0000,0000,0000,,tau dois, que é mais quatro bytes. Então nós colocamos novamente a tecla, este é outro Dialogue: 0,0:15:49.06,0:15:54.71,Default,,0000,0000,0000,,bytes dezesseis. E então, finalmente, colocar a terceira constante, tau três, que é Dialogue: 0,0:15:54.71,0:15:59.95,Default,,0000,0000,0000,,mais quatro bytes. Ok então, como eu disse, se você somar estes acima, você vê que você tem 64 Dialogue: 0,0:15:59.95,0:16:05.25,Default,,0000,0000,0000,,bytes. Então, basicamente, nós expandimos a chave eo nonce eo contador em 64 Dialogue: 0,0:16:05.25,0:16:10.89,Default,,0000,0000,0000,,bytes. Basicamente a chave é repetido duas vezes, eu acho. E então o que fazemos é aplicar uma Dialogue: 0,0:16:10.89,0:16:16.32,Default,,0000,0000,0000,,função, eu vou chamar isso de h pouco funcional. Ok, então nós aplicamos essa função, h pouco. Dialogue: 0,0:16:16.32,0:16:21.66,Default,,0000,0000,0000,,E esta é uma função que é 12:59 assim que mapeia 64 bytes para 64 bytes. É uma Dialogue: 0,0:16:21.66,0:16:26.00,Default,,0000,0000,0000,,função completamente invertida, ok? Portanto, esta função é h, o que eu digo, é uma Dialogue: 0,0:16:26.00,0:16:30.26,Default,,0000,0000,0000,,função invertable. Assim, dada a entrada que você pode obter o resultado e dada a Dialogue: 0,0:16:30.26,0:16:34.91,Default,,0000,0000,0000,,saída você pode voltar para a entrada. E ele é projetado especificamente por isso é um fácil Dialogue: 0,0:16:34.91,0:16:39.55,Default,,0000,0000,0000,,de implementar em hardware e b-on um x86, é extremamente fácil de implementar, porque Dialogue: 0,0:16:39.55,0:16:44.20,Default,,0000,0000,0000,,x86 tem este conjunto de instruções SSE2 que suporta todas as operações que você precisa fazer Dialogue: 0,0:16:44.20,0:16:48.62,Default,,0000,0000,0000,,para esta função. É muito, muito rápido. Como resultado, salsa tem um fluxo muito rápido Dialogue: 0,0:16:48.62,0:16:52.76,Default,,0000,0000,0000,,cifra. E então ele faz isso, basicamente, uma e outra vez. Por isso, aplica-se este Dialogue: 0,0:16:52.76,0:16:57.74,Default,,0000,0000,0000,,função h de novo e fica outros 64 bytes. E assim por diante e assim por diante, basicamente Dialogue: 0,0:16:57.74,0:17:05.32,Default,,0000,0000,0000,,ele faz isso dez vezes. Ok então a coisa toda aqui, dizer repete dez vezes, de forma Dialogue: 0,0:17:05.32,0:17:17.96,Default,,0000,0000,0000,,basicamente aplicar h dez vezes. E, em seguida, por si só, isto não é na verdade muito aleatória. Dialogue: 0,0:17:17.96,0:17:22.14,Default,,0000,0000,0000,,Não vai parecer aleatória, pois como dissemos, H é completamente invertable. Portanto, dado Dialogue: 0,0:17:22.14,0:17:25.52,Default,,0000,0000,0000,,este resultado final, é muito fácil basta inverter h e depois voltar para o original Dialogue: 0,0:17:25.52,0:17:31.83,Default,,0000,0000,0000,,insumos e faça o teste que a de entrada tem a estrutura correta. Então você faz mais um Dialogue: 0,0:17:31.83,0:17:36.98,Default,,0000,0000,0000,,coisa, que é basicamente XOR as entradas e as saídas finais. Na verdade, Dialogue: 0,0:17:36.98,0:17:42.40,Default,,0000,0000,0000,,pena. Não é um XOR. É realmente uma adição. Então você faz uma palavra além de Dialogue: 0,0:17:42.40,0:17:47.76,Default,,0000,0000,0000,,palavra. Então, se existem 64 bytes, você faz uma adição palavra por palavra e quatro bytes de cada Dialogue: 0,0:17:47.76,0:17:52.98,Default,,0000,0000,0000,,tempo e, finalmente, chegar a saída 64-byte, e é isso. Esse é o todo Dialogue: 0,0:17:52.98,0:17:57.18,Default,,0000,0000,0000,,gerador pseudo-aleatório. Então, isso, isso é toda a função, h pouco. E como eu Dialogue: 0,0:17:57.18,0:18:01.76,Default,,0000,0000,0000,,explicou, esta construção inteira aqui é a grande função H. E então você avaliar Dialogue: 0,0:18:01.76,0:18:06.01,Default,,0000,0000,0000,,H grande, incrementando o I contador de zero, um, dois, três em diante. E isso Dialogue: 0,0:18:06.01,0:18:10.41,Default,,0000,0000,0000,,lhe dará uma seqüência pseudo-aleatório que é o tempo que você precisa que ele seja. E Dialogue: 0,0:18:10.41,0:18:15.32,Default,,0000,0000,0000,,basicamente, não há ataques signifigant sobre isso. Isto tem a segurança que é Dialogue: 0,0:18:15.32,0:18:20.37,Default,,0000,0000,0000,,muito perto de duas para o 128. Vamos ver o que isso significa mais precisamente mais tarde. Dialogue: 0,0:18:20.37,0:18:25.42,Default,,0000,0000,0000,,É uma cifra de fluxo muito rápido, tanto em hardware e em software. E, na medida do Dialogue: 0,0:18:25.42,0:18:30.43,Default,,0000,0000,0000,,podemos dizer, parece ser imprevisível como necessário para uma cifra de fluxo. Então, eu Dialogue: 0,0:18:30.43,0:18:34.80,Default,,0000,0000,0000,,deve dizer que o projeto eSTREAM realmente tem cinco cifras de fluxo como Dialogue: 0,0:18:34.80,0:18:39.40,Default,,0000,0000,0000,,presente. Eu só escolhi Salsa porque eu acho que é o mais elegante. Mas posso dar-lhe Dialogue: 0,0:18:39.40,0:18:44.05,Default,,0000,0000,0000,,alguns números desempenho aqui. Assim você pode ver, estes são os números de desempenho em um Dialogue: 0,0:18:44.05,0:18:48.77,Default,,0000,0000,0000,,gigahertz 2.2, você sabe, tipo de máquina x86. E você pode ver que na verdade é o RC4 Dialogue: 0,0:18:48.77,0:18:53.02,Default,,0000,0000,0000,,mais lento. Porque, essencialmente, bem, realmente não tirar proveito da Dialogue: 0,0:18:53.02,0:18:57.48,Default,,0000,0000,0000,,hardware. Ele só faz operações de byte. E por isso há uma grande quantidade de ciclos de desperdício que Dialogue: 0,0:18:57.48,0:19:01.18,Default,,0000,0000,0000,,não estão sendo utilizados. Mas os candidatos E-Stream, tanto Salsa e outros Dialogue: 0,0:19:01.18,0:19:05.20,Default,,0000,0000,0000,,candidato chamado Sosemanuk. Devo dizer que estes são finalistas eSTREAM. Estes são Dialogue: 0,0:19:05.20,0:19:09.59,Default,,0000,0000,0000,,realmente fluxo cifras que são aprovados pelo projeto eSTREAM. Você pode ver que Dialogue: 0,0:19:09.59,0:19:13.71,Default,,0000,0000,0000,,de terem atingido uma taxa significativa. Esta é a 643 megabytes por segundo nesta Dialogue: 0,0:19:13.71,0:19:18.15,Default,,0000,0000,0000,,arquitetura, mais do que suficiente para um filme e estas são realmente muito impressionante Dialogue: 0,0:19:18.15,0:19:22.43,Default,,0000,0000,0000,,taxas. E agora que você já viu exemplos de duas cifras de fluxo antigos que não devem ser Dialogue: 0,0:19:22.43,0:19:26.66,Default,,0000,0000,0000,,utilizado, incluindo ataques a essas cifras de fluxo. Você viu o que as cifras de fluxo modernos Dialogue: 0,0:19:26.66,0:19:30.48,Default,,0000,0000,0000,,parecido com este nonce. E você vê os números de desempenho para estes Dialogue: 0,0:19:30.48,0:19:34.55,Default,,0000,0000,0000,,fluxo cifras modernas por isso, se acontecer de você precisar de uma cifra de fluxo, você poderia usar um dos Dialogue: 0,0:19:34.55,0:19:37.99,Default,,0000,0000,0000,,os finalistas eSTREAM. Em particular, você poderia usar algo como Salsa.