• Nenhum resultado encontrado

Limitações: como já foi dito, a desvantagem dos algoritmos de chave

No documento Criptografia Classica e Moderna (páginas 117-124)

SISTEMAS DE CRIPTOGRAFIA 6.0 – Criptografia Simétrica e Assimétrica

3. Limitações: como já foi dito, a desvantagem dos algoritmos de chave

simétrica é a exigência de uma chave secreta compartilhada, com uma cópia para cada parte, emissor e receptor. Como as chaves podem ser descobertas, é absolutamente necessário que elas sejam mudadas freqüentemente, e mantidas seguras durante o seu uso. Essa exigência de escolher, distribuir e armazenar chaves sem erro e sem perda é conhecida como gerenciamento de chave.

Para garantir uma comunicação segura entre um grupo de n pessoas, é necessário criar um total de n(n-1)/2 chaves. Como os algoritmos assimétricos são mais lentos, eles são utilizados no início de uma sessão para distribuir chaves simétricas (a chave simétrica é gerada quase sempre em tempo real). A partir daí são usados os algoritmos de chave simétrica, de maior velocidade.201

6.1.2 – Técnica de Memória-Chave

Em 1969, R. O. Skatrud apresentou a técnica de memória-chave.

Este método usa duas memórias-chave e uma memória-endereço. A sincronização é feita através da memória-endereço, que é usada para selecionar palavras-chave a partir da memória-chave.

Um “seletor de endereço” para a memória-endereço é a primeira informação a ser transmitida em uma mensagem. Inicialmente, dois endereços, um para cada memória-chave são selecionados. Os dados a serem codificados/decodificados são primeiro operados através de um OR exclusivo (XOR) com o conteúdo da primeira memória-chave e então operadas também através de um OR exclusivo com o conteúdo da segunda memória-chave. Assim, cada caracter é transformado duas vezes. Depois que cada caracter é processado, o endereço da memória-chave é incrementado.202

200 Alguns exemplos de algoritmos simétricos: Twofish, Serpent, AES, Blowfish, CAST5, RC4, 3DES,

IDEA.

201 Os algoritmos de chave simétrica não podem ser usados para finalidades de autenticação. Para isso,

geralmente são usadas funções de hash (por exemplo MD5 – tudo será visto mais à frente).

202 A segurança deste sistema depende do tamanho das memórias-chave e da frequência na qual as

Uso das memórias-chave e endereço

6.1.3 – Método da Chave Infinita

Ao contrário do método anterior, que apresenta uma chave que se repete após um número fixo de caracteres, no método Carroll-McLelland (apresentado em 1970) a chave é “infinita”.

Este método reduz as exigências de armazenamento necessárias ao uso da “chave curta”. Ele usa os números aleatórios gerados por uma senha de seis dígitos como uma semente. A senha é estabelecida através do procedimento de identificação e autorização. Opera através de chaves aleatórias e OU exclusivos com os caracteres de uma mensagem do texto claro, como no código de Vernam. Os blocos de chaves aleatórias são gerados assim:

1. A senha de seis palavras é usada como a semente inicial S0.

2. A fila de sementes S1, S2, ... , SL é gerada pelo uso de um gerador congruente

multiplicativo misto convencional da forma: Si+ 1 = aSi + C mod (m)

onde a = ± 3 (mod 8), e é um valor próximo a a = 2b/2. (m = 2b , onde b é o comprimento em bits da palavra do computador.) Um valor de C< a , e relativamente primo a m, foi selecionado. L determina o comprimento da fila de sementes; foi usada uma variação de 16 ≤ L ≤ 79.

3. A fila de chaves de números aleatórios é gerada pelo uso do método congruente aditivo

Xi + 1 = Xi + Xi – L (mod m)

onde

é a fila de sementes S1, S2, … , SL.

O período de uso de uma fila de sementes (N) é computado somando-se 2K aos

bits de ordem inferior K de SL ; a variação é

2K ≤ N ≤ 2K + 1

Assim que as chaves aleatórias são geradas, o processo é repetido usando SL

como semente, ao invés de S0. Por esta razão, qualquer número de caracteres pode ser

codificado.

Os mesmos problemas de distribuição de chave existem no nível assimétrico, mas eles receberam uma solução mais satisfatória.

***

Os algoritmos simétricos (criptografias por chave simétrica) podem ser subdivididos em algoritmos de fluxo (cifras de fluxo, cifras em cadeia ou cifras contínuas) e algoritmos em bloco (ou cifras por blocos).

6.1.4 – Algoritmos por Cifras de Fluxo203

As cifras de fluxo (ou cifras em cadeia) operam em unidades menores, geralmente bits, o que as torna bem mais rápidas. Elas cifram os bits (ou bytes) da mensagem um a um.

Elas geram uma seqüência de bits que será usada como chave, conhecida como chave de fluxo (keystream), a partir de uma chave (ou senha) inicial. A encriptação ocorre pela combinação do texto plano com a keystream através de operações XOR,204

como mostrado na figura.

O esquema de codificação/transmissão e recepção/decodificação é o seguinte:

203 Cifras de Fluxo; ou Cifradores de Fluxo (do inglês Stream-cipher ou state cipher), são designações

alternativas.

204 Cada bit é combinado com um outro bit gerado em um fluxo pseudo-randômico, tipicamente em uma

Na cifra de fluxo não é necessário ter um bloco completo para cifrar. Cifra-se o que se tem, no momento que desejar. São semelhantes aos antigos algoritmos de substituição, os quais permitiam cifrar letra por letra, e que não precisavam ser agrupadas para completar um bloco.205

As cifras de fluxo podem ser comparadas a um tipo de cifra (comprovadamente) inquebrável, a OTP (one time pad), que usa uma chave de fluxo206 de dígitos randômicos. A OTP, como se sabe, combina os dígitos randômicos com os dígitos que formam a mensagem, de forma a criar um texto cifrado absolutamente seguro. Sabe-se, contudo, que a chave deve ter pelo menos o mesmo comprimento que a mensagem. E como isto torna o sistema mais pesado, a OTP não é muito usada, exceto em aplicações críticas.

A cifra de fluxo cria uma chave mais manejável, de um tamanho conveniente – por exemplo, 128 bits. Com base nesta chave, uma chave de fluxo pseudo-randômica é gerada, que é usada para cifrar o texto.

Por outro lado, a pseudo-randomicidade traz um inconveniente, que é o da chave de fluxo não ser tão segura quanto a OTP. Na verdade, algumas podem ser completamente inseguras.

As cifras de fluxo são muito usadas devido à sua velocidade e facilidade de implementação por hardware, principalmente em aplicações onde textos claros surgem em quantidade e de tamanho desconhecido, como, p. ex., nas conexões sem-fio.

Uma vantagem das cifras de fluxo na criptografia militar é que elas podem ser geradas em uma caixa (box) separada sujeita a estritas medidas de segurança, e em seguida entregues a outros dispositivos menos exigentes, os quais farão as necessárias operações XOR.207

A segurança das cifras de fluxo depende de que certas precauções sejam tomadas, como nunca usar duas vezes a mesma chave, ou nunca usar encriptações para indicar autenticidade.208 Além disso, a chave de fluxo deveria ter um período bastante grande. Deveria também ser impossível recuperar as chaves de cifras ou o estado interno, a partir de uma chave de fluxo.

205 De fato, todos os algoritmos históricos são considerados como cifras de fluxo. 206 Keystream.

207 Os softwares mais conhecidos de cifra por fluxo são: A5/1, A5/2, Chameleon, FISH, HC-128, Helix,

ISAAC, MUGI, Panama, Phelix, Pike, RC4, Rabbit, Salsa, SEAL, SOBER, SOBER-128, WAKE, 20/12. O mais usado é a RC4. Os hardwares implementados para cifra de fluxo mais conhecidos são: Grain, MICKEY-128, Trivium.

208 Muitas cifras de fluxo provêm privacidade, mas não autenticidade; isso significa que a mensagem

A chave de fluxo também deve ser imune a padrões sutis que permitam distinguí-la do puro ruído randômico, nem pode ter padrões detectáveis que permitam correlacionar vários fluxos de modo a descobrir a chave.

Curtos períodos de cifra de fluxo são preocupantes. Por exemplo, blocos de 64 bits como o DES podem ser usados para gerar um fluxo de chaves no modo OFB.209 Mas a se realimentação plena não é utilizada, o fluxo resultante tem um período de cerca de 232 blocos, em média, o que é muito curto para certas aplicações. Por exemplo, se a encriptação está sendo feita a uma taxa de 8 megabytes por segundo, um fluxo de período de 232 blocos se repetirá após meia hora.

6.1.4.1 – Tipos de Cifras de Fluxo210

A cifra de fluxo pode ser sincronizada ou auto-sincronizada.

I – A cifra de fluxo sincronizada gera sucessivos elementos da chave de fluxo com base em um estado interno, o qual muda (é atualizado) de forma independente do texto claro ou da mensagem cifrada. O fluxo de dígitos pseudo-randômicos gerados combina com o texto claro para realizar o ciframento, ou com o texto cifrado para realizar o deciframento. Na forma mais comum, em que se usam bits, a combinação é feita através da operação XOR; esta operação é chamada de adição binária de cifra de fluxo.

Na cifra de fluxo sincronizada, emissor e receptor devem seguir no mesmo passo. A adição ou remoção de dígitos da mensagem durante a transmissão faz com que a sincronização se perca. A restauração da sincronização pode ser feita introduzindo marcas em pontos regulares do texto cifrado, ou re-iniciando sistematicamente a transmissão.

Dígitos corrompidos, entretanto, não se propagam para outras partes da mensagem, o que é útil nos casos de altas taxas de erros de transmissão.

A principal vulnerabilidade da cifra de fluxo é que, para uma mesma mensagem, existe um único código associado. Isto permite que uma monitoração da rede que utilize softwares especialistas possa quebrar o sistema. Além disso, se um atacante conseguir mudar um dígito no texto cifrado, ele poderá detetar mudanças correspondentes nos bits do texto claro.

II – A cifra de fluxo auto-sincronizada211 atualiza o seu estado baseada em dígitos prévios do texto cifrado. Podem ser usados N dígitos prévios do texto cifrado para computar a cifra de fluxo. Ou seja, o receptor sincroniza automaticamente com o gerador de chave de fluxo após receber N dígitos de texto cifrado. Isto torna mais fácil recuperar o sistema, se dígitos são perdidos ou agregados à mensagem. Qualquer erro afeta apenas esta parte de N dígitos da mensagem.

Um exemplo de cifra de fluxo auto-sincronizada é chamada de modo de realimentação de cifra (cipher feedback mode – CFB).

A implementação em hardware é freqüentemente feita usando os Registros de deslocamento de realimentação linear (Linear feedback shift registers – LFSRs), os quais podem ser analisados matematicamente com facilidade.

209 Ver item 6.1.5.1 – IV.

210 Ver: http://en.wikipedia.org/wiki/Stream_cipher.

211 Ou cifras de fluxo assíncronas (assynchronous stream) ou cifra por auto-chave (ciphertext autokey –

Apenas o uso destes elementos, contudo, não garante uma boa segurança, por isto vários esquemas foram propostos para incrementar a segurança das LFSRs.

Uma das solução propostas é o uso das LFSRs em paralelo, no que é chamado de funções de combinação não-linear (non-linear combining functions).

As saídas são combinadas pelo uso da função booleana binária de n-entradas (n- input).

Como as LFSRs são inerentemente lineares, uma técnica para remover esta linearidade é conduzir suas saídas para uma função booleana não linear para formar um gerador de combinação (generator combination). Várias propriedades dessa função de combinação (combining function) são críticas para assegurar a segurança do esquema, como, por exemplo, evitar ataques de correlação (correlation attacks).

Para evitar a regularidade de passo, uma técnica consiste em introduzir clocks irregulares, controlados pela saída de uma segunda LFSR. Este gerador inclui o stop- and-go-generator, o alternating step generator e o shrinking generator.

O primeiro consiste de duas unidades LFSRs. Uma é acionada (clocked) se a saída da segunda é “1”, caso contrário, ela repete a saída anterior. Esta saída é então combinada com uma terceira LFSR, que funciona (clocked) em um passo regular.

No caso do shrinking generator, duas LFSRs são usadas, ambas com passo regular (both clocked regularly). Se a saída da primeira é “1”, a saída da segunda torna- se a saída do gerador. Se a saída da primeira é “0”, a saída da segunda é descartada, e nenhum bit sai do gerador.

Uma outra abordagem para aumentar a segurança de uma LFSR é passar o inteiro estado de uma simples LFSR por uma função de filtragem (filtering function) não-linear.

A operação de um gerador de cifra de fluxo em A5/1, uma cifra de fluxo em LFSR usada para encriptar conversações em celulares é mostrada abaixo.

6.1.4.2 – Comunicações Seguras de Dados

O problema maior nos sistemas de comunicações de dados é assegurar-se de sua segurança. Os fatores que devem ser levados em conta são os seguintes:

1. Qual o tipo de sistema utilizado: se ponto-a-ponto, se em rede, se em rede sem fio, etc.

2. O método de transformação de segurança, ou seja, os dispositivos de hardware, o software, etc.

3. O método de geração, transmissão e guarda segura de chaves. 4. As senhas e as exigências de autorização.

5. O tempo e o custo envolvidos.

Um método de segurança simples, mas funcional, é manter informações sigilosas somente em mídias de armazenamento portátil, como pen-drives, HDs externos, etc. As formas mais populares de segurança, contudo, dependem da criptografia.

I. Sistema ponto-a-ponto (computador-a-computador): usa um dispositivo criptográfico separado para cada linha de dados. As unidades de transmissão/recepção sincronizam pontos de início de geração de chave por meio de informações contidas no cabeçalho da mensagem transmitida. Este método é conveniente quando se usa um pequeno número de linhas de comunicações. Deste modo os programas de computador não são afetados, e o custo total é minimizado.

II. Sistema de rede: usa um único gerador de chaves para todos os usuários, e é usado para sistemas computador/usuário e/ou quando muitas linhas de dados estão sendo usadas. Nesse caso, o processo de geração de chaves deve ser estabelecido no

final de cada conexão de comunicações com um livro de códigos ou uma lista de variáveis de controle (senhas).

Cada mensagem deve alcançar sincronização com senhas ou números-chave que são colocados no cabeçalho da mensagem transmitida. A sincronização se refere ao processo de coordenação das atividades de cada final da linha de dados.

Quando se geram chaves aleatórias, por exemplo, as variáveis que governam o algoritmo de geração de números aleatórios devem ser introduzidas em ambos os sistemas. Usa-se em geral mais de um conjunto de variáveis, e esta informação é transportada de um lado para o outro por portadores ou pelo correio regular.

Posteriormente, tudo o que uma mensagem precisa fornecer é um número de identificação do conjunto particular de variáveis que estão sendo usadas e um ponto inicial para o processo de geração de números aleatórios.

Deste modo, a sincronização efetiva ocorre em duas diferentes ocasiões: uma vez quando o sistema é estabelecido, e uma vez para cada mensagem que é codificada/decodificada.

6.1.4.3 – Legitimidade da Mensagem

Dos dois aspectos mais importantes no que se refere à comunicação segura de dados, o primeiro se preocupa em garantir a legitimidade mútua das partes. Para conseguir este objetivo, alguns sistemas foram implementados ainda na década de 1970. Os métodos desenvolvidos por Feistel-Notz-Smith (cf. Katzan, Jr.) baseiam-se no fato de que cada usuário possua uma única chave de código, e o computador central tenha um catálogo completo de usuários e suas chaves de código.

Os métodos são os seguintes:

No documento Criptografia Classica e Moderna (páginas 117-124)