Cifra do fluxo
Na criptografia, uma cifra de fluxo é uma cifra de chave simétrica onde bits de texto simples são combinados com um fluxo de bits de cifra pseudo-aleatória (keystream) usando uma operação exclusiva - ou (xor). Em uma cifra de fluxo, os dígitos Plaintext são criptografados um de cada vez, e a transformação de dígitos sucessivos varia durante o estado de criptografia. Um nome alternativo é uma cifra de estado, pois a criptografia de cada dígito depende do estado atual. Na prática, os dígitos são tipicamente bits simples ou bytes.
As cifras de fluxo representam uma abordagem diferente para a criptografia simétrica das cifras de bloco. As cifras de bloco operam em grandes blocos de comprimento fixo. As cifras de fluxo tipicamente executam a uma velocidade maior do que as cifras de bloco e têm requisitos de hardware menores. Entretanto, as cifras de fluxo podem ser suscetíveis a sérios problemas de segurança se usadas incorretamente; por exemplo, em particular, o mesmo estado inicial nunca deve ser usado duas vezes.
Uma cifra de fluxo faz uso de uma chave criptográfica muito menor e mais conveniente, por exemplo, chaves de 128 bits. Com base nesta chave, ela gera um fluxo de chaves pseudo-aleatória que pode ser combinado com os dígitos do texto em quadrado de forma semelhante ao algoritmo de criptografia de um único bloco de dados. Entretanto, como o fluxo de chaves é pseudo-aleatória e não verdadeiramente aleatória, a segurança associada ao bloco de tempo único não pode ser aplicada e é bem possível que uma cifra de fluxo seja completamente insegura.
A operação do gerador de keystream em A5/1, uma cifra de fluxo baseada em LFSR usada para criptografar conversas de telefones celulares.
Tipos de cifras de córregos
Uma cifra de fluxo gera elementos sucessivos do fluxo de chaves com base em um estado interno. Este estado é atualizado de duas maneiras:
- Se o estado muda independentemente das mensagens de texto simples ou criptografadas, a cifra é classificada como uma cifra de fluxo síncrono.
- Se o estado for atualizado com base em mudanças anteriores dos dígitos do texto cifrado, a cifra é classificada como uma cifra de fluxo auto-sincronizante.
Difusores de fluxo síncrono
Em uma cifra de fluxo síncrono, um fluxo de dígitos pseudo-aleatórios é gerado independentemente das mensagens de texto e texto criptografados, e depois combinado com o texto criptografado (para criptografar) ou com o texto criptografado (para decifrar). Na forma mais comum, são usados dígitos binários (bits), e o fluxo de chaves é combinado com o texto em quadrado usando o exclusivo ou operação (XOR). Isto é chamado de cifra de fluxo aditivo binário.
Em uma cifra de fluxo síncrono, o remetente e o receptor devem estar em sincronia para que a decodificação seja bem sucedida. Se forem adicionados ou removidos dígitos da mensagem durante a transmissão, a sincronização é perdida. Para restaurar a sincronização, vários offsets podem ser tentados sistematicamente para obter a decriptação correta. Outra abordagem é marcar o texto criptografado com marcadores em pontos regulares da saída.
Se, entretanto, um dígito for corrompido na transmissão, em vez de adicionado ou perdido, apenas um dígito no texto da placa é afetado e o erro não se propaga para outras partes da mensagem. Esta propriedade é útil quando a taxa de erro de transmissão é alta; entretanto, torna menos provável que o erro seja detectado sem outros mecanismos. Além disso, devido a esta propriedade, as cifras de fluxo síncrono são muito suscetíveis a ataquesativos - se um atacante pode alterar um dígito no texto criptografado, ele pode ser capaz de fazer mudanças previsíveis no bit correspondente do texto plaintexto; por exemplo, ao inverter um bit no texto criptografado, o mesmo bit é invertido (Toggled) no texto plaintexto.
Cifras de fluxo auto-sincronizantes
A auto-sincronização de cifras de fluxo é outra técnica que utiliza parte dos dígitos N de texto cifrado anteriores para calcular o fluxo de chaves. Tais esquemas são conhecidos também como cifras de fluxo assíncrono ou chave de criptografia automática (CTAK). A idéia de auto-sincronização foi patenteada em 1946, e tem a vantagem de que o receptor sincronizará automaticamente com o gerador de fluxo de chaves após receber os dígitos N de texto criptográfico, facilitando a recuperação se os dígitos forem descartados ou adicionados ao fluxo de mensagens. Os erros de um dígito são limitados em seu efeito, afetando apenas até os dígitos de texto N. É um pouco mais difícil realizar ataques ativos em cifras de fluxo auto-sincronizadoras do que em contrapartidas síncronas.
Um exemplo de uma cifra de fluxo auto-sincronizante é uma cifra de bloco em modo de alimentação por cifra (CFB).
Cifras de fluxo de retorno linear baseadas em registro de fluxo
As cifras de fluxo binário são freqüentemente construídas usando registros de deslocamento de retroalimentação linear (LFSRs) porque podem ser facilmente implementadas em hardware e podem ser rapidamente analisadas matematicamente. Entretanto, o uso de LFSRs apenas é insuficiente para proporcionar uma boa segurança. Vários esquemas foram projetados para aumentar a segurança dos LFSRs.
Funções combinadas não lineares
Como os LFSRs são intrinsecamente lineares, uma técnica para remover a linearidade é alimentar as saídas de um grupo de LFSRs paralelos em uma função booleana não linear para formar um gerador de combinação. Várias propriedades de tal função de combinação são importantes para garantir a segurança do esquema resultante, por exemplo, a fim de evitar ataques de correlação.
Geradores controlados por relógios
Normalmente, os LFSRs são escalonados regularmente. Uma técnica para introduzir a não-linearidade é ter o LFSR cronometrado de forma irregular, controlado pela saída de um segundo LFSR. Tais geradores incluem o gerador de parada e parada, o gerador de passo alternado e o gerador de encolhimento.
O gerador stop-and-go (Beth e Piper, 1984) é composto por dois LFSRs. Um LFSR é cronometrado se a saída de um segundo for um "1", caso contrário, ele repete sua saída anterior. Esta saída é então (em algumas versões) combinada com a saída de um terceiro LFSR cronometrado a uma taxa regular.
O gerador de encolhimento utiliza uma técnica diferente. Dois LFSRs são usados, ambos com relógio regularmente da seguinte maneira:
- Se a saída do primeiro LFSR for "1", a saída do segundo LFSR torna-se a saída do gerador.
- Se a saída do primeiro LFSR "0", a saída do segundo é descartada, e nenhum bit é emitido pelo gerador.
Esta técnica sofre com os ataques temporais ao segundo gerador, uma vez que a velocidade de saída é variável de uma forma que depende do estado do segundo gerador. Isto pode ser melhorado através do amortecimento da saída.
Gerador de filtros
Outra abordagem para melhorar a segurança de um LFSR é passar todo o estado de um único LFSR para uma função de filtragem não-linear.
Outros projetos
Ao invés de um dispositivo de acionamento linear, pode-se usar uma função de atualização não linear. Por exemplo, Klimov e Shamir propuseram funções triangulares (T-Funções) com um único ciclo em n palavras de bit.
Segurança
Para ser seguro, o período do fluxo de chaves (o número de dígitos de saída antes que o fluxo se repita) precisa ser suficientemente grande. Se a seqüência se repetir, então os textos criptográficos sobrepostos podem ser alinhados uns contra os outros "em profundidade", e há técnicas que permitem a extração dos textos criptográficos em forma de texto plano gerados através destes métodos.
Utilização
As cifras de fluxo são freqüentemente usadas em aplicações em que o texto em placas vem em quantidades de comprimento desconhecido como em conexões sem fio seguras. Se uma cifra de bloco fosse usada neste tipo de aplicação, o projetista precisaria escolher entre eficiência de transmissão ou complexidade de implementação, já que as cifras de bloco não podem trabalhar diretamente em blocos menores que seu tamanho de bloco. Por exemplo, se uma cifra de bloco de 128 bits recebeu rajadas separadas de 32 bits de texto em placas, três quartos dos dados transmitidos precisam ser preenchidos. As cifras de bloco devem ser usadas no modo de roubo de texto criptografado ou de terminação de bloco residual para evitar o preenchimento, enquanto as cifras de fluxo eliminam este problema operando na menor unidade transmitida (geralmente bytes).
Outra vantagem das cifras de fluxo na criptografia militar é que o fluxo cifrado pode ser gerado por um dispositivo de criptografia que está sujeito a medidas rigorosas de segurança e depois alimentado por outros dispositivos, por exemplo, um aparelho de rádio, que executará a operação xou como parte de sua função. O outro dispositivo pode ser projetado para ser usado em ambientes menos seguros.
RC4 é a cifra de fluxo mais utilizada em software; outras incluem: A5/1, A5/2, Camaleão, FISH, Helix, ISAAC, MUGI, Panamá, Phelix, Pike, SEAL, SOBER, SOBER-128 e WAKE.
O RC4 é um dos projetos de cifras de fluxo mais utilizados.
Comparação das cifras do fluxo
StreamCipher | CriaçãoData | Velocidade | (bits) | Ataque | |||
Efetivo | Vetor de inicialização | InternalState | Melhor Conhecido | ComputationalComplexity | |||
A5/1 | 1989 | Voz (Wphone) | 54 | 114 | 64 | Ativo KPA OU | ~2 segundos OR239.91 |
A5/2 | 1989 | Voz (Wphone) | 54 | 114 | 64? | Ativo | 4,6 milissegundos |
FISH | 1993 | Bastante rápido (Wsoft) | Enorme | ? | ? | Ataque de texto-plaintextos conhecidos | 211 |
Grão | Pré-2004 | Rápido | 80 | 64 | 160 | Derivação de chaves | 243 |
HC-256 | Pré-2004 | 4 (WP4) | 256 | 256 | 65536 | ? | ? |
ISAAC | 1996 | 2,375 (W64-bit) -4 | 8-8288usualmente | N/A | 8288 | (2006) Primeira rodada de Weak-Internal-State-Derivation | 4.67×101240 (2001) |
MUGI | 1998-2002 | ? | 128 | 128 | 1216 | N/A (2002) | ~282 |
PANAMA | 1998 | 2 | 256 | 128? | 1216? | Colisões de Hash (2001) | 282 |
Phelix | Pré-2004 | até 8 (Lx86) | 256 + um Nonce de 128 bits | 128? | ? | Diferencial (2006) | 237 |
Pike | 1994 | 0,9 x FISH (Wsoft) | Enorme | ? | ? | N/A (2004) | N/A (2004) |
Py | Pré-2004 | 2.6 | 8-2048? | 64 | 8320 | Teoria Criptanalítica (2006) | 275 |
Coelho | 2003-Fev | 3.7(WP3)-9.7(WARM7) | 128 | 64 | 512 | N/A (2006) | N/A (2006) |
1987 | Impressionante | 8-2048usualmente | 8 | 2064 | Shamir Initial-Bytes Key-Derivation OU KPA | 213 OU 233 | |
Salsa20 | Pré-2004 | 4,24 (WG4) -11 | 128 + um Nonce de 64 bits | 512 | 512 + 384 (chave+IV+index) | Diferencial (2005) | N/A (2005) |
Gritar | 2002 | 4 - 5 (Wsoft) | 128 + um Nonce de 128 bits | 32? | Função redonda de 64 bits | ? | ? |
SELO | 1997 | Muito rápido (W32-bit) | ? | 32? | ? | ? | ? |
SNOW | Pré-2003 | Muito Bom (W32-bit) | 128 OU 256 | 32 | ? | ? | ? |
SOBER-128 | 2003 | ? | até 128 | ? | ? | Forja de mensagem | 2−6 |
SOSEMANUK | Pré-2004 | Muito Bom (W32-bit) | 128 | 128 | ? | ? | ? |
Trivium | Pré-2004 | 4 (Lx86) - 8 (WLG) | 80 | 80 | 288 | Ataque com força bruta (2006) | 2135 |
Turing | 2000-2003 | 5,5 (Lx86) | ? | 160 | ? | ? | ? |
VEST | 2005 | 42 (WASIC) -64 (WFPGA) | Variávelmente | Variávelmente | 256 - 800 | N/A (2006) | N/A (2006) |
WAKE | 1993 | Rápido | ? | ? | 8192 | CPA & CCA | Vulnerável |
StreamCipher | CriaçãoData | Velocidade | (bits) | Ataque | |||
Efetivo | Vetor de inicialização | InternalState | Melhor Conhecido | ComputationalComplexity |
Páginas relacionadas
- eSTREAM
Perguntas e Respostas
P: O que é uma cifra de fluxo?
R: Uma cifra é uma cifra de chave simétrica em que bits de texto simples são combinados com um bit de cifra pseudo-aleatória (keystream) usando uma operação exclusiva - ou (xor).
P: Como isso se diferencia das cifras de bloco?
R: As cifras de fluxo tipicamente executam a uma velocidade maior do que as cifras de bloco e têm requisitos de hardware menores. As cifras de bloco operam em grandes blocos de comprimento fixo, enquanto as cifras de fluxo encriptam dígitos um de cada vez e a transformação de dígitos sucessivos varia durante o estado de encriptação.
P: Que tipo de chaves é usado?
R: As cifras de fluxo fazem uso de chaves criptográficas muito menores e mais convenientes, por exemplo, chaves de 128 bits.
P: Como é que isso gera o fluxo de chaves?
R: O fluxo de chaves é gerado com base na chave criptográfica usada, de maneira semelhante ao algoritmo de criptografia de um único bloco de chaves. Entretanto, como o fluxo de chaves é pseudo-aleatória e não verdadeiramente aleatória, a segurança associada com o bloco de tempo único não pode ser aplicada.
P: Por que o senhor nunca deve usar duas vezes o mesmo estado inicial?
R: Usar duas vezes o mesmo estado inicial pode levar a sérios problemas de segurança, pois facilita aos atacantes descriptografar os dados sem saber ou ter acesso à sua chave criptográfica.
P: Há algum risco associado ao uso de cifras de fluxo?
R: Sim, se usado incorretamente ou sem tomar as devidas precauções, há risco associado ao uso de cifras de fluxo, pois elas podem ser completamente inseguras se não forem tratadas adequadamente.