Neste segmento, eu quero dar alguns exemplos de fluxo cifras que são usados na prática.
Vou começar com dois exemplos antigos que na verdade não são
suposto ser usado em sistemas novos. Mas, no entanto, eles ainda são bastante
amplamente utilizada, e assim que eu apenas quero mencionar os nomes para que você esteja familiarizado com
esses conceitos. A cifra de fluxo primeiro eu quero falar é chamado RC4, projetado
em 1987. E eu só vou te dar a descrição de alto nível e, em seguida
nós vamos falar sobre alguns pontos fracos do RC4 e deixar por isso mesmo. Assim RC4 leva um
sementes de tamanho variável, aqui eu só dei como um exemplo onde levaria 128
bits como o tamanho das sementes, que passaria então a ser utilizados como chave para a cifra de fluxo.
A primeira coisa que faz, é que se expande a chave de 128-bit segredo em 2.048 bits, que
vão ser usados como o estado interno para o gerador. E então, quando ele é feito
esta expansão, que basicamente executa um laço muito simples, onde cada iteração do
laço Isso gera um byte de saída. Então, basicamente, você pode executar o gerador de
, enquanto você quer, e gerar um byte de cada vez. Agora RC4 é, na verdade, como eu disse,
bastante popular. É usado no protocolo HTTPS é bastante comum, na verdade.
Estes dias, por exemplo, o Google usa RC4 em suas HTTPS. Também é usado no WEP como nós
discutido no último segmento, mas é claro que no WEP, ele é usado incorretamente e
é completamente inseguro da forma como ele é usado dentro do WEP. Assim, ao longo dos anos,
algumas deficiências foram encontradas no RC4, e como resultado, é recomendado que os novos projetos
na verdade não usar RC4, mas sim usar um mais moderno gerador pseudo-aleatório como veremos
discutir para a extremidade do segmento. Então deixe-me mencionar apenas dois dos pontos fracos.
Então a primeira é que é tipo de bizarra, basicamente, se você olhar para o segundo byte
da produção de RC4. Acontece que o segundo byte é um pouco tendencioso. Se RC4 foi
completamente aleatória, a probabilidade de que o segundo byte acontece ser igual a zero
seria exatamente um sobre 256. Existem 256 bytes possíveis, a probabilidade que
zero, deveria ser um sobre 256. Acontece que para RC4 a probabilidade é
realmente dois por 256, o que significa que se você usar a saída RC4 para criptografar uma
mensagem do segundo byte é provável que não seja encriptada de todo. Em outras palavras, ele vai
ser XOR-ed com zero com o dobro da probabilidade de que é suposto.
Assim, dois sobre 256, em vez de um sobre 256. E pelo jeito que eu deveria dizer que há
nada de especial sobre o segundo byte. Acontece que a primeira e os bytes terceiros
também são tendenciosos. E de fato ele é agora recomendado que se você vai usar RC4,
que você deve fazer é ignorar, basicamente, os primeiros 256 bytes da saída e apenas
começar a utilizar a saída do gerador a partir de byte 257. O primeiro casal
de bytes acabou por ser tendencioso, então você simplesmente ignorá-los. O segundo ataque que
foi descoberto é que de fato se você olhar para uma saída muito longo de RC4 que acontece
que você é mais provável conseguir o 00 de seqüência. Em outras palavras, você é mais
probabilidade de obter dezesseis bits, dois bytes de zero, zero, do que deveria. Novamente, se RC4
foi completamente aleatória a probabilidade de ver zero, zero seria exatamente 1/256
quadrado. Acontece RC4 é um pouco tendencioso eo viés é 1/256 cubos. Ele
Acontece que este viés realmente começa depois de vários gigabytes de dados são produzidos por
RC4. Mas, no entanto, este é algo que pode ser utilizado para prever o gerador
e, definitivamente, ele pode ser usado para distinguir a saída do gerador
partir de uma seqüência verdadeiramente aleatória. Basicamente o fato de que zero, zero aparece com mais freqüência
do que deveria é o Distinguisher. E então, no último segmento que falamos
relacionado-chave ataques que foram usados para atacar WEP, que basicamente dizem que
se teclas de um utilizações que estão intimamente relacionadas entre si, então é realmente possível
para recuperar a chave raiz. Assim, estes são os pontos fracos que são conhecidos de RC4 e, como um
resultado, é recomendado que os novos sistemas não realmente usar RC4 e utilizar um
gerador pseudo-aleatório moderna. Ok, segundo exemplo que quero dar-lhe é um
cifra de fluxo gravemente quebrado que é usada para criptografar filmes em DVD. Quando você compra um DVD
na loja, o próprio filme é criptografada usando uma cifra de fluxo chamado de
Content Scrambling System, CSS. CSS acaba por ser uma cifra de fluxo gravemente quebrado
e podemos muito facilmente quebrá-lo, e eu quero mostrar-lhe como o algoritmo de ataque
obras. Estamos fazendo isso para que você possa ver um exemplo de um algoritmo de ataque, mas em
verdade, existem muitos sistemas por aí que, basicamente, usar este ataque para descriptografar
DVDs criptografados. Assim, a cifra de fluxo CSS é baseada em algo que o hardware
projetistas gosta. Ele foi projetado para ser uma cifra de fluxo de hardware que é suposto
ser fácil de implementar em hardware, e baseia-se um mecanismo chamado linear
mudança comentários registar. Assim, um registrador de deslocamento linear feedback é basicamente um registo
que consiste em células em que cada célula contém um bit. Então, basicamente,
que acontece é que existem estas torneiras em certas células, não todas as células, certos
posições são chamados torneiras. E então essas torneiras alimentar em um XOR e, em seguida, em
cada ciclo de clock, o registrador de deslocamento desloca para a esquerda. O último pedaço cair
e, em seguida, o primeiro bit torna-se o resultado deste XOR. Assim você pode ver que
este é um mecanismo muito simples de implementar, e em hardware tem muito poucos
transistores. Apenas o deslocamento para a direita, o último bit cai e apenas o primeiro bit
torna-se o XOR dos bits anteriores. Assim, a semente para este LFSR
, basicamente, é o estado inicial do LFSR.
E é a base de uma série de codificações de fluxo. Então, aqui estão alguns exemplos. Assim, como
eu disse, a criptografia utiliza duas LFSRs DVD. Eu vou te mostrar como isso funciona em apenas um
segundo. Criptografia GSM, estes são chamados algoritmos A51 e A52. E isso
utiliza três LFSRs. Criptografia Bluetooth é um algoritmo chamado, E zero. Estes são todos
cifras de fluxo, e que utiliza quatro LFSRs. Acontece que todos eles são gravemente quebrado
e na verdade realmente não deve ser confiável para criptografar o tráfego, mas todos eles são
implementado em hardware, por isso é um pouco difícil agora para mudar o que o hardware
faz. Mas o mais simples deles, CSS, na verdade, tem um ataque bonito nele, então vamos
me mostrar-lhe como o ataque funciona. Então, vamos descrever como o CSS realmente funciona. Assim,
chave para o CSS é de cinco bytes, ou seja, 40 bits, cinco vezes oito é de 40 bits. O
razão eles tinham que se limitar a apenas 40 bits é que a criptografia do DVD foi
concebidos numa altura em que os regulamentos de exportação dos Estados Unidos só é permitido para a exportação de
algoritmos crpyto onde estava a chave apenas 40 bits. Assim, os designers de CSS foram
já limitados a chaves muito, muito curtos. Apenas 40 teclas bit. Assim, seu projeto trabalha
como se segue. Basicamente, o CSS usa duas LFSR do. Um é um LFSR de 17-bit. Em outras palavras,
registo a contém 17 bits. Eo outro é um LFSR 25-bit,
é um pouco mais, 25 bits LFSR. E a forma como estas são semeadas LFSRs
é como se segue. Portanto, a chave para a criptografia, basicamente, tem a seguinte aparência.
Você começa com um, e você concatenar a ele os dois primeiros bytes de
chave. E esse é o estado inicial do LFSR.
E então o segundo LFSR basicamente é intitialized da mesma maneira.
Uma concatenado os últimos três bytes da chave. E isso é
carregado para o estado inicial do LFSR. Você pode ver que os dois primeiros bytes são
16 bits, mais um líder, que tem dezessete pedaços geral, enquanto o segundo
LFSR é de 24 bits, mais um que é de 25 bits. E você percebe usamos todos os cinco pedaços de
chave. Então essas são basicamente LFSRs correr para oito ciclos, de modo que elas geram
oito bits de saída. E então eles passam por este componente que faz basicamente
adição módulo 256. É assim que esta é uma caixa disso, módulo 256. Há mais uma
coisa técnica que acontece. Na verdade vamos realmente, também adicionada é o transporte do
bloco anterior. Mas isso não é tão importante. Isso é um detalhe que não é tão
relevante. OK, então todos os blocos, você percebe que estamos fazendo além modulo 256 e
estamos ignorando o transporte, mas o transporte é basicamente adicionado como um zero ou um um ao
além do bloco seguinte. Ok? E então, basicamente, esta saída um byte por round.
Ok, e então este byte é usado, então é claro, XOR-ed com o adequado
byte do filme que está sendo criptografado. Ok, então é um fluxo muito simples
cifra, é preciso hardware muito pouco para implementar. Ele irá correr rápido, mesmo em muito
hardware barato e vai criptografar filmes. Então, acontece que este é fácil de quebrar
no tempo cerca de dois a 17. Agora deixe-me mostrar-lhe como.
Então, suponha que você interceptar os filmes, então aqui nós temos um
filme criptografado que você deseja descriptografar. Então, digamos que tudo isso é criptografado para
você não tem idéia do que está dentro de aqui. No entanto, acontece que só porque
criptografia DVD está usando arquivos MPEG, acontece se você souber de um prefixo da
texto simples, vamos apenas dizer que talvez esta é de vinte bytes. Bem, sabemos que se você
XOR essas duas coisas juntas, então, em outras palavras, você faz o XOR aqui,
que você vai conseguir é o segmento inicial do PRG. Assim, você terá a
primeiros vinte bytes de a saída do CSS, a saída do presente PRG. Ok, então agora
aqui é o que nós vamos fazer. Assim, temos os primeiros vinte bytes de saída. Agora
nós fazemos o seguinte. Nós experimentar todos dois para os valores possíveis de 17 a primeira
LFSR. Ok? Assim, duas aos dezassete valores possíveis. Assim, para cada valor, portanto, para
cada um destes dois aos dezassete valores iniciais do LFSR, vamos executar o
LFSR por vinte bytes, ok? Então, vamos gerar de vinte bytes de saídas a partir deste
LFSR primeiro, assumindo-para cada um dos dois para os dezassete configurações possíveis.
Agora, lembre-se que temos o resultado completo do sistema de CSS. Então o que podemos fazer é nos
pode tomar esta saída que temos. E subtrair os vinte mordidas que nós
obtido a partir do LFSR primeiro, e se de fato o nosso palpite para o estado inicial do primeiro
LFSR está correta, o que devemos começar é a saída 20-primeiro byte do
LFSR segundo. Certo? Porque isso é, por definição, o que a saída do CSS
sistema é. Agora, descobre-se que olhar para uma seqüência de 20 bytes, é muito fácil
dizer se essa seqüência de 20-byte veio de um LFSR 25-bit ou não. Se
não, então sabemos que o nosso palpite para o LFSR 17-bit foi
incorreto e, em seguida, passamos para o próximo palpite para o LFSR 17-bit e
suposição o seguinte e assim por diante e assim por diante. Até que finalmente chegamos ao direito inicial
estado para o LFSR 17-bit, e depois vamos realmente começar, vamos ver que
os 20 bytes que obtemos como a saída candidato para o LFSR 25-bit é
, de facto, uma saída possível para um LFSR 25-bit. E então, não só teremos
aprendeu o estado inicial correto para o LFSR 17-bit, nós também teremos
aprendeu o estado inicial correto do LFSR 25-bit. E então podemos prever o
saídas restantes do CSS, e é claro, usar isso, podemos, então, decifrar o resto
o filme. Na verdade, podemos recuperar o texto restante. Okay. Isto é
coisas que falamos antes. Então, eu disse isso um pouco rápido, mas espero que,
ficou claro. Nós também vamos estar fazendo um exercício de dever de casa neste tipo de fluxo
cifras e você vai espécie de chegar ao ponto de como esses algoritmos de ataque
trabalho. E devo mencionar que existem muitos sistemas open-source, agora que realmente
usar esse método para descriptografar CSS dados criptografados. Ok, então agora que já vimos dois
fracos exemplos, vamos passar para exemplos melhores, e em particular o melhor
pseudo-aleatórios geradores vêm do que é chamado de Projeto eSTREAM. Esta é uma
projeto que concluiu em 2008, e que se qualifiquem, basicamente, cinco fluxo diferente
cifras, mas aqui quero apresentar apenas um. Então, primeiro de todos os parâmetros para
essas cifras de fluxo é um pouco diferente do que estamos acostumados. Então, essas
fluxo cifras normalmente eles têm uma semente. Mas, além disso eles também têm, o que é
chamado nonce e vamos ver o que é um nonce é usada em apenas um minuto. Assim
tomam duas entradas de uma semente e um nonce. Vamos ver o que o nonce é usada no
apenas um segundo. E claro que o de produzir uma saída muito grande, então n é aqui
muito, muito, muito maior do que s. Agora, quando eu digo nonce, o que quero dizer é um valor que é
nunca indo para repetir enquanto a chave é fixo. E eu vou explicar isso em mais
detalhe em apenas um segundo. Mas, por agora, basta pensar nisso como um valor único que nunca
repete, desde que a chave é a mesma. E então é claro que quando você tem este PRG,
você criptografar, você obtém uma cifra de fluxo tal como antes, só que agora como você vê, o
PRG toma como entrada tanto a chave eo nonce. E a propriedade do nonce é
que o par, k vírgula r, de modo a vírgula chave nonce, é nunca, nunca se repete. É
nunca usou mais de uma vez. Assim a linha inferior é que você pode reutilizar a chave, reutilizar
a chave, porque o uso único faz com que o par único, porque K e R são apenas
usado uma vez. Eu vou dizer que é único. Ok então este nonce é uma espécie de truque bonito que
nos salva a dificuldade de se mudar para uma nova chave de cada vez. Ok, então o particular
exemplo do eSTREAM que eu quero lhe mostrar é chamado Salsa 20. É uma
cifra de fluxo que é projetado para implementações de software e hardware
implementações. É uma espécie de interessante. Você percebe que algumas cifras de fluxo são
projetado para software, como RC4. Tudo que ele faz é projetado para fazer
implementação de software de correr rápido, enquanto o fluxo cifras outros são projetados para
hardware, como CSS, utilizando um LFSR que está particularmente desenhado para fazer hardware
implementações muito baratos. É também, a única coisa boa disso é que é
projetado de modo que seja fácil de implementar em hardware e seu software
implementação também é muito rápido. Então deixe-me explicar como Salsa obras. Bem, Salsa
leva ou 128 ou 256-bit chaves. Eu só vou explicar a versão de 128 bits do Salsa.
Então esta é a semente. E então ele também leva um nonce, tal como antes, que
passa a ser de 64 bits. E então ele vai gerar uma grande saída. Agora, como faz
realmente funciona? Bem, a própria função é definida como se segue. Basicamente, dado
chave eo nonce, ele irá gerar um tempo muito longo, bem, pseudorandom uma longa
sequência, enquanto for necessário. E vai fazê-lo usando essa função que eu vou denotar por
H. Este H função recebe três entradas. Basicamente a chave. Bem, a semente k,
o r nonce, e, em seguida, um contador que incrementa a partir do passo a passo. Assim vai
de zero a um, dois, três, quatro, contanto que inaudível] [ser. Ok? Então, basicamente,
avaliando este H nesta kr, mas usando este contador incrementar, podemos obter uma
seqüência que é tão longo como nós queremos. Então, tudo o que tenho a fazer é descrever como esta função
H funciona. Agora, deixe-me fazer isso aqui para você. O modo como funciona é o seguinte. Bem, nós
começar pela expansão dos estados em algo muito grande que é de 64 bytes
longo, e fazemos isso da seguinte forma. Basicamente, manter uma constante no início, de modo
há tao zero, estes são quatro bytes, é uma de quatro bytes constante, de modo a especificação para
Salsa, basicamente dá-lhe o valor tao zero. Então nós colocamos k em que é
bytes dezesseis. Então nós colocamos uma outra constante. Novamente, isto é quatro bytes. E
como eu disse, a especificação basicamente especifica o que esta constante é fixo. Então nós colocamos
nonce o que é de oito bytes. Então vamos colocar o índice. Este é o zero do contador,
um, dois, três, quatro, que é mais oito bytes. Então nós colocamos uma outra constante
tau dois, que é mais quatro bytes. Então nós colocamos novamente a tecla, este é outro
bytes dezesseis. E então, finalmente, colocar a terceira constante, tau três, que é
mais quatro bytes. Ok então, como eu disse, se você somar estes acima, você vê que você tem 64
bytes. Então, basicamente, nós expandimos a chave eo nonce eo contador em 64
bytes. Basicamente a chave é repetido duas vezes, eu acho. E então o que fazemos é aplicar uma
função, eu vou chamar isso de h pouco funcional. Ok, então nós aplicamos essa função, h pouco.
E esta é uma função que é 12:59 assim que mapeia 64 bytes para 64 bytes. É uma
função completamente invertida, ok? Portanto, esta função é h, o que eu digo, é uma
função invertable. Assim, dada a entrada que você pode obter o resultado e dada a
saída você pode voltar para a entrada. E ele é projetado especificamente por isso é um fácil
de implementar em hardware e b-on um x86, é extremamente fácil de implementar, porque
x86 tem este conjunto de instruções SSE2 que suporta todas as operações que você precisa fazer
para esta função. É muito, muito rápido. Como resultado, salsa tem um fluxo muito rápido
cifra. E então ele faz isso, basicamente, uma e outra vez. Por isso, aplica-se este
função h de novo e fica outros 64 bytes. E assim por diante e assim por diante, basicamente
ele faz isso dez vezes. Ok então a coisa toda aqui, dizer repete dez vezes, de forma
basicamente aplicar h dez vezes. E, em seguida, por si só, isto não é na verdade muito aleatória.
Não vai parecer aleatória, pois como dissemos, H é completamente invertable. Portanto, dado
este resultado final, é muito fácil basta inverter h e depois voltar para o original
insumos e faça o teste que a de entrada tem a estrutura correta. Então você faz mais um
coisa, que é basicamente XOR as entradas e as saídas finais. Na verdade,
pena. Não é um XOR. É realmente uma adição. Então você faz uma palavra além de
palavra. Então, se existem 64 bytes, você faz uma adição palavra por palavra e quatro bytes de cada
tempo e, finalmente, chegar a saída 64-byte, e é isso. Esse é o todo
gerador pseudo-aleatório. Então, isso, isso é toda a função, h pouco. E como eu
explicou, esta construção inteira aqui é a grande função H. E então você avaliar
H grande, incrementando o I contador de zero, um, dois, três em diante. E isso
lhe dará uma seqüência pseudo-aleatório que é o tempo que você precisa que ele seja. E
basicamente, não há ataques signifigant sobre isso. Isto tem a segurança que é
muito perto de duas para o 128. Vamos ver o que isso significa mais precisamente mais tarde.
É uma cifra de fluxo muito rápido, tanto em hardware e em software. E, na medida do
podemos dizer, parece ser imprevisível como necessário para uma cifra de fluxo. Então, eu
deve dizer que o projeto eSTREAM realmente tem cinco cifras de fluxo como
presente. Eu só escolhi Salsa porque eu acho que é o mais elegante. Mas posso dar-lhe
alguns números desempenho aqui. Assim você pode ver, estes são os números de desempenho em um
gigahertz 2.2, você sabe, tipo de máquina x86. E você pode ver que na verdade é o RC4
mais lento. Porque, essencialmente, bem, realmente não tirar proveito da
hardware. Ele só faz operações de byte. E por isso há uma grande quantidade de ciclos de desperdício que
não estão sendo utilizados. Mas os candidatos E-Stream, tanto Salsa e outros
candidato chamado Sosemanuk. Devo dizer que estes são finalistas eSTREAM. Estes são
realmente fluxo cifras que são aprovados pelo projeto eSTREAM. Você pode ver que
de terem atingido uma taxa significativa. Esta é a 643 megabytes por segundo nesta
arquitetura, mais do que suficiente para um filme e estas são realmente muito impressionante
taxas. E agora que você já viu exemplos de duas cifras de fluxo antigos que não devem ser
utilizado, incluindo ataques a essas cifras de fluxo. Você viu o que as cifras de fluxo modernos
parecido com este nonce. E você vê os números de desempenho para estes
fluxo cifras modernas por isso, se acontecer de você precisar de uma cifra de fluxo, você poderia usar um dos
os finalistas eSTREAM. Em particular, você poderia usar algo como Salsa.