• Nenhum resultado encontrado

CRIPTOGRAFIA COMPUTACIONAL 5.0 – Criptografia Computacional e Matrizes

No documento Criptografia Classica e Moderna (páginas 101-115)

De acordo com Katzan, Jr:179

O termo “criptografia computacional” foi criado por Krishnamurty, que faz uma distinção entre a criptografia clássica, que ele denomina “criptografia de comunicação”, e as técnicas criptográficas aplicadas aos sistemas de informação, que ele denomina “criptografia computacional”.180 Krishnamurty caracteriza os sistemas baseados em computador e define brevemente as seguintes técnicas: esquemas aritméticos, multplicação/divisão, outros representativos (dígito com sinal, sistemas de resíduos, etc.), conversões de base, esquemas lógicos, e esquemas matriciais.

Os métodos matriciais são particularmente significativos, pois uma considerável quantidade de trabalho é envolvida, o que dirige o próprio trabalho à computação automática. Se a mensagem (M) e a chave (K) são armazenadas como matrizes, e * é um operador de transformação adequado, então a codificação toma a forma:

C = M * K

onde C é o texto cifrado. Se K-1 é um operador de transformação inverso, então a decodificação toma a forma:

M = C * K-1

Se a operação for a multiplicação de matrizes, a codificação será realizada do modo mostrado a seguir.

Inicialmente, faz-se uma correspondência numérica com as letras do alfabeto: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

Supondo que o texto a ser cifrado seja montanha, forma-se uma matriz 3x3, com a respectiva correspondência numérica:

179 KATZAN, Jr., 1977, p. 112.

180 Nos sistemas antigos os algoritmos criptografavam letras e palavras (por substituição, transposição ou

Agora, seja C uma matriz qualquer 3x3 inversível:181

Multiplica-se agora a matriz da mensagem por C, obtendo M . C:

O criptograma final é: -2 55 39 19 01 20 05 25 22. A decodificação da mensagem cifrada é conseguida através da multiplicação pela inversa:

(M.C) . C-1 = M ,

e através da transcrição posterior pela correspondência numérica.

5.1 – Matrizes com Alfabetos Arbitrários

Em 1929 o matemático Lester S. Hill introduziu o processo de codificação por matrizes utilizando um alfabeto arbitrário. Por exemplo:

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 04 08 25 02 09 20 16 05 17 03 00 22 13 24 06 21 15 23 19 12 07 11 18 01 14 10

Supondo que a mensagem clara seja stop bid, ela ficará assim, após ser inscrita em matrizes:

A seguir, X1 e X2 são inseridos em equações matriciais predefinidas (não podem

ser escolhidas aleatoriamente):

As equações matriciais computadas módulo 26 dão como resultado:

Sendo o criptograma final: CGKTASZS.

Os métodos matriciais de criptografia são considerados praticamente invioláveis.

5.2 – A Lógica Matemática

O final do século XIX apresentou enormes avanços na Lógica Matemática. Entre os anos de 1840 e 1910 os estudos de Georg Boole, Augustus de Morgan, Gotlob Frege e Giuseppe Peano lançaram os fundamentos dessa disciplina, os quais vieram a sofrer novos acréscimos posteriormente a 1910, com Bertrand Russel, Alfred North Whitehead, David Hilbert, Alfred Tarski e outros notáveis lógicos e matemáticos. E, de uma maneira inevitável, os conceitos trazidos por ela vieram influenciar profundamente a criptografia.

5.2.1 – Conceitos e Definições da Lógica Matemática182

A lógica matemática que veio a ser utilizada na criptografia possui sentenças indicadas por letras maiúsculas (A, B, C, etc); tais sentenças sofrem os efeitos de operadores lógicos (que as modificam), e que são usados nas chamadas operações lógicas.

Os operadores lógicos são:

AND, OR, NOT, NAND, NOR, XOR, XNOR, e as operações lógicas são representadas na tabela a seguir:183

182 Para maiores detalhes, veja-se: http://www.pucsp.br/~logica/.

183 A operação de negação, identificada pelo símbolo ~ colocada antes de cada sentença, também pode ser

indicada com uma barra sobre a mesma (ou sobre um conjunto de sentenças).Por exemplo: ou

Para a realização de cada operação lógica utilizam-se as chamadas tabelas- verdade, as quais indicam os resultados das aplicações dos operadores lógicos às sentenças.

As tabelas-verdade relativas a cada operação são as seguintes (em cada tabela, o resultado pode ser verdadeiro (V), indicado pelo dígito 1, ou falso (F), indicado pelo dígito 0).

5.2.2 – Portas Lógicas

Cada operação lógica pode ser simbolizada graficamente através das chamadas portas lógicas, sendo que atualmente existem dois símbolos para cada uma (a Norma ANSI e a Norma IEC).

Circuitos lógicos capazes de realizar operações lógicas são seqüências de portas lógicas interligadas entre si, de forma a implementar uma equação lógica.

As equações lógicas são resolvidas através das operações da Álgebra Binária de adição, subtração, multiplicação e divisão. As portas lógicas obedecem às tabelas respectivas, sendo que a saída C (à direita) deriva diretamente das entradas A e B (à esquerda). Por exemplo, se uma porta E (AND) é utilizada, uma saída C=1 resulta unicamente se A=1 e B=1.

As operações binárias não oferecem dificuldade. Por exemplo, em uma operação de adição binária:

1 1 0 1 0 1 1 1 1 0 0 1 1 1 0 1 + 1 0 1 1 0 1 1 0 0 as operações são do tipo:

0 + 0 = 0

0 + 1 = 1 + 0 = 1 1 + 1 = 0 (e vai “um”)

Uma operação matemática comum é a operação de módulo-m (mod m), que usa a aritmética modular, ou aritmética de relógio. Esta aritmética produz uma soma modular S1 + S2 mod (m). Por exemplo, em uma soma modular módulo-10 (com os algarismos de 0 a 9).

A soma é comutativa, ou seja, os algarismos podem ser intercambiados entre si, sem mudar o resultado. Por exemplo:

9 + 2 = 2 + 9 = 1; 8 + 5 = 5 + 8 = 3; etc184.

A operação é dita fechada (possui a propriedade do fechamento), porque produz todos os algarismos.

Veja-se um exemplo (com S1 = 4), para perceber como todos os algarismos são contemplados (há o fechamento): S1 S2 T 4 + 0 = 4 4 + 1 = 5 4 + 2 = 6 4 + 3 = 7 4 + 4 = 8 4 + 5 = 9 4 + 6 = 0 4 + 7 = 1 4 + 8 = 2 4 + 9 = 3

As operações com portas lógicas permitem que se realizem as funções de permutação ou distribuição (classicamente conhecida como transposição) e o de substituição. Ou então realizar as funções de difusão e confusão.185

184 A adição obedece à propriedade da comutatividade. Ou seja, a + b = b + a.

185 Diz-se que a substituição acrescenta confusão à informação, e a transposição acrescenta difusão. A

difusão visa eliminar a redundância existente na mensagem original, distribuindo-a pela mensagem cifrada (ou seja, visa esconder as propriedades estatísticas da mensagem). Já o propósito da confusão é tomar a relação entre a mensagem e a chave tão complexa quanto possível.

5.2.2.1 – Operações Lógicas

Operações lógicas são operações com variáveis binárias (de base 2), cujos valores podem ser 1 (verdade) ou 0 (falso).186

Sejam a e b números binários. Serão usadas as operações lógicas mostradas a seguir:

NOT a – O valor inverso do bit. Se o valor é 0, ele se transformará em 1, e se o valor

for 1, ele se tornará 0. ( a) .

a OR b – O resultado será 0 se os dois operandos são 0, e 1 nos outros casos. (a b) a AND b – O resultado será 1 se os dois operandos são 1, e 0 nos outros casos. (a b) a XOR b – O resultado será 0 se os dois operandos forem iguais, e 1 se eles forem

diferentes. (a b) a b a a b a b a b 0 0 1 0 0 0 0 1 1 1 0 1 1 0 0 1 0 1 1 1 0 1 1 0

A propriedade mais importante da operação XOR é: a b a = b a,b.

Esta propriedade mostra que a operação XOR é reversível, o que é importante para a criptografia. Este é o motivo porque ela é muito usada em algoritmos criptográficos.

Quando se faz operações lógicas com variáveis inteiras, se está na verdade, fazendo as operações bit a bit. Isto significa que cada bit da variável a passa pela operação com o bit correspondente da variável b.

Por exemplo, sejam dois registradores de 8 bits, a = 1001.1100 e b = 0101.1010: a (não A) = 0110.0011

a b (a ou b) = 1101.1110 a b (a e b) = 0001.1000 a b (a XOR b) = 1100.0110

Outra operação lógica de grande importância na criptografia é a rotação (também chamada shift register – registrador de deslocamento. Esta operação desloca os bits de uma variável para a direita ou para a esquerda.

Há dois tipos de rotação: a circular e a não-circular.

A rotação circular considera a variável como sendo conectada nas extremidades, de maneira que um bit saído de um lado da variável retorna ao outro lado.

Na rotação não-circular um bit saindo da variável é eliminado, e zeros são colocados nas posições vagas. Os exemplos a seguir são de uma rotação circular e de uma rotação não-circular, com dois deslocamentos em cada uma.

Representa-se a rotação para a direita não-circular pelo símbolo

»

. A rotação não-circular para a esquerda é

«

. A rotação circular para a direita será , e para a esquerda será .

À esquerda do símbolo coloca-se o registrador a ser modificado. À direita do símbolo coloca-se o número de bits a serem deslocados.

Alguns exemplos ilustrarão este conceito. Para a = 0100.1101, tem-se que:

a

«

3 = 0110.1000 a

»

2 = 0001.0011 a 1 = 1001.1010 a 5 = 0110.1010

Basicamente, o shift register é um tipo de circuito lógico seqüencial em que uma cascata ou cadeia de bits fica armazenada. Em operação, esta cadeia específica vai se deslocando: à medida que um bit entra na cadeia, o da extremidade oposta sai da cadeia, voltando ou não para o início desta (se não volta, zeros são introduzidos).187

5.2.3 – O Código ASCII

O advento dos computadores e a necessidade da comunicação realizada entre eles difundiu o conhecimento dos códigos necessários a esta comunicação. Esta comunicação entre computadores é realizada utilizando códigos públicos nos quais o aspecto do segredo está completamente ausente.

Os computadores, para se comunicarem entre si (ou para aceitarem os comandos do operador) utilizam um código chamado ASCII – American Standard Code of Information Interchange (Código Americano Padrão para Intercâmbio de Informações).188

O Código ASCII, que surgiu com os primeiros computadores,189 usa uma tabela de caracteres ou alfabeto binário (composto pelos dígitos 0 e 1; a menor unidade de informação, o bit, tem este significado: binary digit). Um conjunto de sete bits (quatro mais três) forma cada caracter ASCII. Por exemplo, o caracter a é formado pelos dígitos 01100001, e o caracter A é formado pelos dígitos 01000001 (note-se a diferenciação entre letras minúsculas e maiúsculas).190

Por usar apenas sete bits, a tabela ASCII tem somente 128 (ou 27) caracteres.

Desses 128 caracteres, 33 são caracteres de controle não imprimíveis, usados para

187 Este é um exemplo de rotação não circular. 188 Veja-se nos Apêndices.

189 Foi desenvolvido no início da década de 1960, no século passado.

190 O código ASCII para cada número, letra ou função de controle é constituído de um grupo de 4 bits e

controle e processamento do texto (alguns deles já não são utilizados), e 94 são caracteres imprimíveis (ou seja, são caracteres de texto – na tela ou na impressora). Com exceção do caracter de espaço, o resto é composto por caracteres imprimíveis.

Além da representação binária, cada caracter pode ser representado também na forma decimal e na forma hexadecimal.191 Por exemplo, o caracter “%” tem a seguinte representação (binária, hexadecimal, decimal):

0010 0101 37 25 %

A ordem de leitura dos bits na representação binária é da direita para a esquerda; o primeiro dígito zero à esquerda (na realidade, o último), é não significativo. Assim, apenas sete bits entram na composição do caracter.

A transformação binária para decimal encontra o valor representado, como mostrado a seguir (1010010):

1.20 + 0.21 + 1.22 + 0.23 + 0.24 + 1.25 + 0.26 = 1 + 0 + 4 + 0 + 0 + 32 + 0 = 37 A operação inversa, que é a conversão de um número decimal no seu equivalente binário, é uma operação chamada codificação.

Assim, um número decimal pode ser expresso como um código binário ou número binário. O sistema numérico binário é conhecido como código binário puro. Este nome o diferencia de outros tipos de códigos binários.

Em algumas tabelas ASCII, o código binário é invertido. Para determinar o código ASCII de um número, letra ou controle, localiza-se na tabela o dado desejado, que são os códigos de 3 e 4 bits associados com a coluna e com a linha, respectivamente. Por exemplo, a letra L é 1001100 (100 1100).

À medida que o uso dos computadores foi se disseminando, a necessidade dos diversos idiomas mundiais (acentos, caracteres especiais, etc.) mostrou que esta quantidade de caracteres era insuficiente, e com isso novos códigos tiveram que ser desenvolvidos. O código ASCII foi aumentado, incorporando novos caracteres (este código é chamado ASCII completo ou ASCII estendido, e possui 256 caracteres).

Tabela de códigos ASCII

O código ASCII para cada número, letra ou função de controle é constituído de um grupo de 4 bits e outro de 3 bits. A tabela abaixo mostra a arrumação destes dois grupos e a seqüência numérica. O grupo de quatro bits está a direita, e o bit “1” é o bit menos significativo (LSB). Observe-se como estes grupos são arranjados em linhas e colunas na tabela ASCII.

A formação de uma rede mundial de computadores (a WEB, ou Internet) com sites em idiomas de todo o mundo (com seus caracteres específicos) obrigou a que se criasse uma tabela única que pudesse suprir todas as necessidades. Foi então criada a tabela chamada Unicode (UTF-8), que suporta cerca de um milhão de caracteres.192

5.2.4 – O Código BCD

Este é um código especial, chamado Decimal Codificado em Binário (Binary Coded Decimal – BCD). Ele combina algumas das características dos sistemas numéricos binário e decimais.

O código BCD é um sistema de representação dos dígitos decimais desde 0 até 9 com um código binário de 4 bits. Ele usa o sistema de pesos posicionais 8421 do código binário puro. O código 8421 BCD e os equivalentes decimais são mostrados na tabela abaixo. Assim como com o binário puro, pode-se converter os números BCD em seus equivalentes decimais simplesmente somando os pesos das posições de bits onde aparece “1”.

192 O Unicode fornece um único número para cada caractere, não importando a plataforma, o programa ou

o idioma. Com o sistema Unicode, um site pode ser visualizado em qualquer lugar do mundo, sem nenhum problema.

Código BCD

Observe-se que existem apenas dez códigos válidos. Os números binários de quatro bits representando os números decimais de 10 até 15 são inválidos no sistema BCD.

Para representar um número decimal em notação BCD, substitui-se cada dígito decimal pelo código de quatro bits apropriados. Por exemplo, o inteiro decimal 834 em BCD é 1000 0011 0100 (invertendo: 0001 1100 0010):

(0.20 + 0.21 + 0.22 + 1.23) = 8 (1.20 + 1.21 + 0.22 + 0.23) = 3 (0.20 + 0.21 + 1.22 + 0.23) = 4

Pelo processo inverso se converte um número BCD em seu equivalente decimal. Por exemplo: 0110 0010 1000,1001 0101 0100 = 628,954.

Este método de representação também se aplica as frações decimais. Por exemplo, a fração decimal 0,764 é 0,0111 0110 0100 em BCD. De novo, cada dígito decimal é representado pelo seu código equivalente 8421, com um espaço entre cada grupo.

Cada dígito decimal é representado pelo seu código BCD 8421 equivalente. Um espaço é deixado entre cada grupo de quatro bits, para evitar confusão do formato BCD com o código binário puro.

O código BCD é menos eficiente do que o código binário puro, porque são usados mais bits para representar um número decimal em BCD que em notação binária pura. Por exemplo, o número decimal 83 é escrito como 1000 0011. Em código binário puro, usam-se apenas 7 bits para representar o número 83. Em BCD, usam-se 8 bits.

Operações aritméticas com números BCD também consomem mais tempo e são mais complexas do que com números binários puros. Com quatro bits de informação binária, pode-se representar um total de 24 = 16 estados diferentes, ou os números decimais equivalentes (de 0 até 15). No sistema BCD, seis destes estados (10 a 15) são desperdiçados.

Enquanto que a conversão de decimal para BCD é simples e direta, a conversão de binário para BCD não é direta, porque uma conversão intermediária deve ser realizada antes. Por exemplo, o número 1011,01 convertido no seu equivalente BCD.

Primeiro o número binário é convertido para decimal:

1011,012 = (1x23)+(0x22)+(1x21)+(1x20)+(0x2-1)+(1x2-2) =8+0+2+1+0+0,25 = 11,2510

Em seguida, o resultado decimal é convertido para BCD. 11,2510 = 0001

0001,0010 01012

Para converter de BCD para binário, as operações anteriores são invertidas. Por exemplo, o número BCD 1001 0110.0110 0010 0101 é convertido no seu equivalente binário:

1 - o número BCD é convertido para decimal. 1001 0110.0110 0010 0101 = 96,625

2 - o resultado decimal é convertido para binário

Como o número decimal intermediário contém uma parte inteira e uma parte decimal, cada parte é convertida como já visto.

A soma binária (inteiro mais fração) 1100000,101 é equivalente ao número BCD 1001 0110,0110 0010 0101.

5.2.5 – Paridade

No código ASCII de 7 bits, um oitavo bit pode ser usado como bit de paridade para determinar se o caracter foi transmitido corretamente. O valor deste bit é determinado pelo tipo de paridade desejado.

Paridade par significa que a soma de todos os bits “um”, incluindo o bit de paridade, é um número par. Por exemplo, se G é o caracter transmitido o código ASCII é 1000111. Desde que quatro bits “um” estão no código, o bit de paridade é 0. O código de 8 bits seria escrito 01000111.

Paridade ímpar significa que a soma de todos os bits “um” é um número ímpar. Se o código ASCII para G fosse transmitido com paridade ímpar, a representação binária seria 11000111.

5.2.6 – Bits e Bytes

O bit é a menor unidade de informação, geralmente representado pelos algarismos 0 ou 1, na linguagem binária de base 2. Um conjunto de oito bits forma uma palavra, chamada byte. Um conjunto de oito bits é também chamado octeto.

A moderna criptografia prefere utilizar a linguagem binária; uma tabela de substituição binária é construída, pela qual cada letra é transformada em um número de cinco dígitos binários. Em seguida, aplicam-se operações lógicas sobre os grupos de bits por meio de um algoritmo de transformação (translação).

A Cifra de Bacon, vista anteriormente, pode ser considerada como um exemplo de codificação binária (apenas duas letras são usadas para a formação dos grupos), e pode ser substituída pelos algarismos 0 e 1.193 Como os grupos são formados por cinco caracteres, considera-se a cifra como sendo de 5 bits.

A tabela a seguir mostra a relação binária na Cifra de Bacon. Letra Grupo Binário Letra Grupo Binário

A aaaaa 00000 N abbaa 01100 B aaaab 00001 O abbab 01101 C aaaba 00010 P abbba 01110 D aaabb 00011 Q abbbb 01111 E aabaa 00100 R baaaa 10000 F aabab 00101 S baaab 10001 G aabba 00110 T baaba 10010 H aabbb 00111 U/V baabb 10011 I/J abaaa 01000 W babaa 10100 K abaab 01001 X babab 10101 L ababa 01010 Y babba 10110 M ababb 01011 Z babbb 10111

Como os caracteres ASCII podem ser substituídos pelos seus equivalentes binários, é fácil deduzir que operações binárias podem ser implementadas para conseguir a difusão e a confusão. O exemplo a seguir mostra como uma seqüência de bits pode ser transformada, por transposição e por substituição.

A transposição pode resultar de uma regra qualquer que foi adotada; quanto ao grupo de caracteres substituídos, ele resulta de uma soma lógica com um valor determinado (00110101).

5.2.7 – Compressão de Dados Binários194

A compressão de dados é o ato de reduzir o espaço ocupado por eles em um determinado dispositivo. Essa operação pode ser feita por meio de variados algoritmos de compressão, reduzindo a quantidade de bytes para representar um dado, seja ele uma imagem, um texto ou um arquivo qualquer.

Comprimir dados também permite retirar a redundância, representada por informações iterativas que precisam ser eliminadas. Isso se consegue por meio de uma regra chamada de código ou protocolo, que quando seguida, elimina os bits redundantes de informações, de modo a diminuir seu tamanho nos arquivos. Por exemplo, a sequência AAAAAA que ocupa 6 bytes, poderia ser representada pela sequência 6A, que ocupa 2 bytes, economizando 67% de espaço.

Comprimir os dados ajuda também a economizar espaço em dispositivos de armazenamento (como discos rígidos) ou mesmo a ganhar desempenho operacional.

5.2.7.1 – Classificação dos Métodos de Compressão

Há várias formas de se classificar os métodos de compressão de dados, mas a mais conhecida classifica pela ocorrência ou não de perda de dados durante o processo.

5.2.7.1.1 – Métodos de Compressão por Perdas de Dados

1. Compressão sem perdas (Lossless): Esta forma diz que um método de compressão é sem perdas se os dados obtidos após a descompressão são idênticos aos dados que se tinha antes da compressão. Este método é utilizado sempre que não possam ocorrer perdas de dados que acarretem o não funcionamento de um software ou dispositivo de hardware.

2. Compressão com perdas: (Lossy): quando a situação permite que perdas de dados poucos significativos possam ocorrer. É o caso, por exemplo, dos arquivos analógicos como fotos, áudios e filmes, em que perdas pequenas não chegam a ser percebidas pelo olho ou ouvido humano. Nesses casos, os dados podem ser comprimidos de forma a omitir tais detalhes.195 Assim, os dados obtidos após a descompressão não são idênticos aos originais, pois "perderam" as informações irrelevantes.

194 Este tema é dado aqui resumidamente mais a título de ilustração, por interessar mais à engenharia

elétrica e de telecomunicações.

195 Sons de frequências muito altas ou muito baixas, detalhes sutis como diferenças de cores entre duas

imagens do mesmo tipo, movimentos rápidos que não podem ser acompanhados, são detalhes que podem ser omitidos sem que se perceba a sua ausência.

CAPÍTULO VI

SISTEMAS DE CRIPTOGRAFIA

No documento Criptografia Classica e Moderna (páginas 101-115)