342
LUIZ GONZAGA DE ALVARENGA 2010

Criptografia Clássica e Moderna - Luiz Gonzaga de Alvarenga

Embed Size (px)

DESCRIPTION

 

Citation preview

LUIZ GONZAGA DE ALVARENGA

2010

Título da obra:

Criptografia Clássica e Moderna

Copyright © 2010 Luiz Gonzaga de Alvarenga.

Todos os direitos reservados. Proibida a reprodução sob qualquer forma.

A reprodução e/ou uso comercial não-autorizado desta obra, no todo

ou em parte, constituem infração da lei de direitos autorais. (Lei 9610/98)

Capa e lay-out: do autor

PLANO DA OBRA

PARTE I

CAPÍTULO I – CRIPTOGRAFIA CLÁSSICA, 7 CAPÍTULO II – HISTÓRIA CONCISA DA CRIPTOLOGIA, 47 CAPÍTULO III – FUNDAMENTOS DA CRIPTOANÁLISE CLÁSSICA, 65 CAPÍTULO IV – CRIPTOANÁLISES CLÁSSICAS, 87

PARTE II CAPÍTULO V – CRIPTOGRAFIA COMPUTACIONAL, 101 CAPÍTULO VI – SISTEMAS DE CRIPTOGRAFIA, 115 CAPÍTULO VII – CRIPTOGRAFIA E SEGURANÇA – I, 181 CAPÍTULO VIII – CRIPTOGRAFIA E SEGURANÇA – II, 195 CAPÍTULO IX – CRIPTOGRAFIA E SEGURANÇA – III, 203 CAPÍTULO X – CRIPTOGRAFIA MATEMÁTICA, 211 CAPÍTULO XI – FUNDAMENTOS DA CRIPTOANÁLISE MODERNA, 229 CAPÍTULO XII – SEGURANÇA EM REDES DE DADOS, 275 CAPÍTULO XIII – CRIPTOGRAFIA QUÂNTICA, 297

ANEXOS, 303

FUNÇÕES RANDOM E RANDOMIZE, 305 ALGORITMOS E SISTEMAS CRIPTOGRÁFICOS, 307 TABELA DE CÓDIGOS ASCII, 311

APÊNDICES, 317

GRADES DE TRANSPOSIÇÃO REGULARES E IRREGULARES, 319 GERADOR DE NÚMEROS PSEUDO-RANDÔMICOS, 325 CODIFICAÇÃO POR TRANSFORMAÇÃO EM CAMADAS – MCTC, 329

REFERÊNCIAS BIBLIOGRÁFICAS, 339

LIVROS IMPRESSOS, 339 LISTA CONCISA DE TEXTOS EM FORMATO PDF, 341 SITES DE INTERESSE, 341

PA R TE I

CAPÍTULO I

CRIPTOGRAFIA CLÁSSICA

1.0 – Mensagem Oculta ou Mensagem Secreta? Desde a antiguidade que se procura um meio seguro e eficaz de enviar ou

receber mensagens secretas, de modo que o seu conteúdo não possa ser conhecido por estranhos, caso a mensagem seja descoberta e/ou interceptada.

Uma forma de fazer isso era simplesmente ocultando a mensagem, disfarçando

de algum modo o seu portador/recipiente. Por exemplo, o historiador Heródoto narra um incidente de ocultação no qual a mensagem foi escrita no couro cabeludo de um escravo, cujos cabelos tinham sido previamente raspados. Quando os cabelos voltaram a crescer, o escravo foi enviado a outra cidade, passando despercebido pelos guardas, que nada encontraram em suas vestes que o incriminassem. Chegando ao seu destino, bastou raspar novamente os cabelos e exibir a mensagem.

Neste caso, em que uma mensagem não codificada é escondida, diz-se que a

comunicação secreta se dá por steganografia.1 Se a mensagem não é oculta, mas simplesmente disfarçada, o processo é denominado encriptação da mensagem. Como a mensagem normalmente é uma mensagem escrita, a arte de ocultar ou disfarçar uma mensagem é também chamado de escrita secreta.

Se a mensagem não era ocultada, mas simplesmente disfarçada, este disfarce costumava ser realizado de duas maneiras diferentes: pela substituição das letras por outras, do mesmo alfabeto, ou pela sua transposição (deslocamento de posição).

1.1 – Cifras, Códigos, Encriptação, Codificação A cifra é um (ou mais de um) algoritmo que cifra e/ou decifra um texto. A

operação do algoritmo costuma ter como parâmetro uma chave criptográfica. Tal parâmetro costuma ser secreto (conhecido somente pelos comunicantes). A cifra pode ser conhecida, mas não a chave; assim como se entende o mecanismo de uma fechadura comum, mas não se pode abrir a porta sem uma chave real.

De um modo geral, um código é o mesmo que uma cifra. Especificamente, no jargão da criptografia, os dois conceitos são distintos. Um código funciona manipulando o significado, normalmente pela substituição simples de palavras ou frases. Uma cifra, ao contrário, trabalha na representação da mensagem (letras, grupos de letras ou, atualmente, bits). Por exemplo, um código seria substituir a frase atacar a cidade por Salão de Festas. Uma cifra seria substituir essa frase por jdiefjkfuewlrfszmdke.

Os códigos não envolvem chave criptográfica, somente tabelas de substituição ou mecanismos semelhantes. Os códigos podem ser, então, encarados como cifras cuja a chave é o próprio conhecimento do mecanismo de funcionamento da cifra.

O termo encriptação evita as ambigüidades que possam surgir do uso das

palavras codificação (encriptação por código) e cifragem ou ciframento (encriptação por

1 Palavra originada das palavras gregas steganos, que significa “coberto”, e graphein, que significa “escrever”. Os processos de ocultar uma mensagem (a esteganografia) ou de disfarçá-la criaram a arte da escrita secreta (a escrita secreta é também conhecida como cifrário ou código secreto).

cifras).2 O texto não codificado é chamado de texto original, texto corrido ou texto claro (plaintext, em inglês). O texto codificado é chamado de texto cifrado, mensagem cifrada ou criptograma. O processo de converter o texto original em texto cifrado é chamado composição de cifra, e o inverso, como já dito, é chamado de decifração.

Atualmente, o processo de ocultar ou disfarçar uma mensagem é conhecido como criptografia. A arte do deciframento é chamada criptoanálise (ou criptanálise),3 e o conjunto criptografia/criptoanálise é chamado Criptologia.

1.2 – Encriptação por Sustituição de Letras 1.2.1 – Encriptação Monoalfabética Este sistema de encriptação é também chamado de Ciframento. Nele é usado

apenas um alfabeto, e nele, as mesmas letras claras serão substituídas pelas mesmas letras cifradas, no sistema por substituição de letras.

1.2.2 – A Cifra de César Várias formas de comunicação secreta foram extensamente usadas, como, por

exemplo, a utilizada pelo imperador romano Júlio César4 para se comunicar com os seus generais. César usava um sistema simples de substituição de letras, em que cada letra do alfabeto (que podia ser usado tanto o alfabeto romano quanto o grego) era trocada por uma outra letra do mesmo alfabeto, deslocada. O exemplo a seguir ilustra sua utilização, usando o alfabeto português.

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 D E F G H I J K L M N O P Q R S T U V W X Y Z A B C Neste exemplo, cada letra da mensagem original é trocada pela letra deslocada

de três posições para a direita. Outros deslocamentos também podem ser usados. O Cifrário de César é extremamente vulnerável, porque basta fazer 25

deslocamentos para se encontrar a chave. O método de encriptação por cifras (vide nota 2) possui um algoritmo e uma

chave. O algoritmo é o processo de codificação por substituição, e a chave define o alfabeto a ser utilizado tanto na encriptação quanto na desencriptação.

1.2.3 – O Atbash Entre os hebreus, costumava-se usar o processo chamado atbash. Neste caso, as

22 letras do alfabeto eram escritas onze a onze, e cada letra seria substituída pela correspondente superior ou inferior.5

2 Doravante, serão utilizadas, indistintamente, as expressões encriptação, codificação ou ciframento, para indicar o processo de encriptação, e desencriptação, decodificação, decifração ou deciframento, para indicar o processo de desencriptação (geralmente chama-se ciframento à substituição por letras, e codificação, à substituição por símbolos). 3 Análise do texto codificado em busca de padrões que identifiquem mensagens camufladas por códigos, e permita realizar o processo de sua decifração. 4 E por isso conhecida como Cifra de César. Este sistema, que utiliza a substituição simples de letras, é também conhecido como sistema por deslocamento de letras. 5 A escrita hebraica é realizada da direita para a esquerda.

O processo de cifragem/decifragem ficava mais fácil, se o alfabeto fosse colocado por extenso:

A cifragem se faz de cima para baixo, e a decifragem, de baixo para cima. Mas a atbash é extremamente vulnerável, devido à propriedade de simetria que apresenta:

O conjunto de livros judeus conhecido como Torah (Pentateuco; Gênesis;

Êxodo; Levítico; Números), escritos em hebraico, é o cerne de um misterioso código descoberto no século XVIII pelo Rabino Elijah Solomon. É atribuída a ele a seguinte afirmação: “Tudo o que existiu, existe e existirá até o fim dos tempos está incluído na Torah, os cinco primeiros Livros da Bíblia”. Esta fantástica afirmação, entretanto, já tinha sido enunciada por outros notáveis Rabinos do passado, tais como Moisés ben Maimon, Moisés ben Nachman e Rabenu Bachya (circa séc. XII-XIII).

No século XX, o Rabino Michael Ber Weissmandl fez uma pesquisa em busca de supostos códigos contidos na Torah. Mas foi preciso que surgissem os computadores, e uma nova geração de pesquisadores (entre os mais conhecidos, Doron Witztum e Eliyahu Rips, especialistas em matemática estatística) para que se tornasse possível uma pesquisa em profundidade da Torah. O resultado estarreceu os pesquisadores.

Através de uma pesquisa do texto6 em que se buscavam palavras formadas por letras eqüidistantes (p. ex., formar palavras com cada 50ª. letra do texto – mas qualquer outro intervalo pode ser utilizado), encontravam-se referências a personagens e lugares históricos do passado, mas igualmente, do presente. Havia, inequivocamente, um código oculto no texto da Torah!7

1.2.4 – O Código Maçônico

O Cifrário maçônico, ou escrita maçônica8: é um tipo de escrita oculta

antigamente usada para comunicação entre maçons. Usa o sistema de susbstituição de cifras, em que cada letra é substituída por outra.

6 Denominada SAE – Seqüências alfabéticas eqüidistantes, ou codificação por salto de letras. 7 Ver: SATINOVER, 1998. 8 É pejorativamente conhecida como “escrita do chiqueiro”.

A escrita é bem simples: basta substituir cada letra do texto claro pela porção da

grade que lhe corresponde. Por exemplo: A =

H =

T = W = etc. A palavra maçom fica assim, após ser cifrada conforme o código:

A rigor, a cifra maçônica não é uma codificação, mesmo porque ela é

extremamente fácil de ser decifrada. 1.2.5 – Encriptação por Substituição de Símbolos Neste processo, ao invés de se substituir as letras por outra letras, a substituição

é feita utilizando símbolos. Este sistema é chamado de Codificação. Seja, por exemplo, usando a tabela de códigos, enviar a seguinte mensagem:

Príncipe viaja para o castelo esta noite. Deve ser assassinado.

Tabela (parcial) de Códigos:

09 Viajar 04 Castelo 01 Príncipe 02 Assassinato 12 Esta noite

A mensagem secreta codificada é:

01 09 04 12 02 A fraqueza deste código está no fato de que cifras iguais indicam conteúdo

idêntico (por exemplo, castelo é sempre indicado pelo número 04).

1.2.5.1 – Nomencladores Se o processo de codificação envolvesse letras e símbolos, ou apenas símbolos,

era chamado de nomenclador.9 Neste, os símbolos substituiriam não apenas letras, mas também nomes de figuras importantes, cuja identidade não poderia ser conhecida.

A figura mostrada a seguir ilustra o nomenclador utilizado pelo embaixador da Rainha Elisabeth I da Inglaterra na França, Sir Francis Walsingham.

Nomenclador de Walsingham

1.2.6 – O Cifrário por Rotação Nos códigos mais antigos, a codificação por substituição era feita usando um

único alfabeto. Por esta razão, era denominada codificação monoalfabética.10 Durante séculos, a encriptação monoalfabética foi considerada segura, nos dois

processos, transposição e substituição. Para dar maior segurança, muitas vezes os dois processos eram utilizados conjuntamente.11 Além disso, podiam ser usados dois ou mais processos sucessivos de encriptação.12

O processo utilizado por Júlio César foi aperfeiçoado no século XV pelo

arquiteto italiano Leon Alberti. Ele inventou o Cifrário por Rotação, o qual utiliza um Disco de Cifras, que chegou mesmo a ser usado na Guerra Civil Americana.13

9 A decifração do nomenclador utilizado nas comunicações secretas da rainha Maria, da Escócia, envolvida em um complô contra a rainha Elisabeth I, da Inglaterra, levou a que a primeira fosse levada ao cadafalso e sofresse a morte por decapitação. 10 Neste caso, o alfabeto permanece fixo durante toda a cifragem. Ou seja, a substituição de cada letra não muda; cada letra será sempre substituída pela mesma letra cifrada. 11 Às vezes eram combinados processos de transposição-substituição-transposição. 12 Este processo é chamado superciframento, ou supercifragem. 13 Leon Battista Alberti (1402-1472), escreveu o tratado Modus Scribendi in Ziferas. Atribui-se a Alberti a invenção do cifrário polialfabético.

Disco de Cifras

Este consiste de dois discos com diâmetros diferentes, montados

concentricamente e em que estão gravados os alfabetos, de forma que ao movê-los em torno do eixo comum, os mesmas se relacionam entre si. Deste modo, o disco de cifras permite de uma forma prática e fácil mudar as cifras.

Cada letra pode ser representada de 26 maneiras diferentes, dependendo da sua posição em relação ao alfabeto central. Para usa-lo, é necessário primeiro que a chave ou cifra seja designada. Por exemplo, a letra A no alfabeto convencional pode ser relacionada como L no alfabeto codificado. Por exemplo, a codificação abaixo é feita “rotando” cinco caracteres para a frente:14

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 W X Y Z A B C D E F G H I J K L M N O P Q R S T U V O Cifrário por Rotação, monoalfabético, introduziu uma dificuldade a mais pelo

fato de que agora podiam ser realizadas 25 (26-1) trocas (ou permutações) circulares para cada letra.

O Disco de Cifras não era invulnerável, apesar da quantidade imensa de chaves

possíveis (na realidade, muitas das permutações podiam ser descartadas, por inúteis).15 1.2.7 – Encriptação por Sustituição Polialfabética de Letras O sistema monoalfabético serviu por séculos para codificar com segurança as

mensagens que possuíam valor estratégico ou militar de qualquer tipo, e que não podiam se tornar conhecidas.

Aos poucos, entretanto, novas técnicas de deciframento16 foram sendo inventadas, e o sistema monoalfabético foi ficando cada vez mais vulnerável.

Um dos aperfeiçoamentos foi o uso da encriptação polialfabética (este processo

é também chamado Ciframento) em que vários alfabetos embaralhados são utilizados, para dificultar o deciframento da mensagem pela análise de frequência de letras.17

14 Como cada letra do alfabeto de cima pode ser combinada com 26 letras do alfabeto inferior, isto sugere a possibilidade de se poderem criar 25! (15511210043330985984000000) combinações diferentes. 15 Muitas delas, se utilizadas, irão deixar várias letras iguais. 16 Uma das técnicas mais sofisticadas foi descoberta pelos árabes abássidas, e consistia em analisar estatisticamente a frequência com que as letras apareciam em um texto cifrado, comparando-as com as letras mais comuns do alfabeto utilizado (ver Capítulo II). Atualmente, esta técnica é conhecida pelo nome de Princípio de Máxima Verossimilhança.

No exemplo abaixo é usado a convenção atualmente aceita: alfabeto original em minúsculas; alfabeto cifrado em maiúsculas.

Alfabeto original: 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 Alfabeto cifrado 1: S Y K J M F P Z R B Q U E I C V T X O W L D A H G N Alfabeto cifrado 2: D C N E U G Y J M K O Q F V P S R I T L W Z X H B A

Na encriptação ou codificação, usa-se alternadamente um ou outro alfabeto cifrado, de modo a dificultar o deciframento.

1.2.7.1 – A Cifra de Substituição Homofônica

Um processo que foi desenvolvido, chamado Cifra de Substituição Homofônica,

usa um sistema mais simples de substituição polialfabética. Nele, são introduzidos símbolos diferentes para as letras mais frequentes. Por exemplo:

A A B C D E E F G H I I J K L M N O O P Q R S T U V W X Y Z V G ♦ X C ♠ P F W A K B N E ♣ M L S Z T Q ♥ I D Y O J U H R Para cifrar, usa-se, na primeira ocorrência da letra A, ela é substituída pela letra

V; na segunda ocorrência, pela letra G, e alternando. Em outra variante usam-se números com dois algarismos para substituir as letras

mais freqüentes de todo o alfabeto, ao invés de restringir-se às vogais. As letras menos freqüentes devem ser substituídas por apenas um número.

1.2.7.2 – Cifrário Homofônico de Crema

Este cifrário foi criado por Simeone de Crema em 1401. Nele, utilizava-se uma substituição múltipla das vogais do texto original (a cada vez, a vogal era substituída por símbolos diferentes entre si).

Cifrário de Simeone de Crema

1.2.7.3 – Cifrário Homofônico de Michele Steno

Michele Steno foi Doge de Veneza de 1400 a 1413. Ele usava uma cifra homofônica na qual havia muitos símbolos que podiam ser escolhidos para cada caracter. A cifra usava também nulas18 e caracteres especiais para certas palavras de uso frequente.

17 Outro processo usa letras aleatórias chamadas nulas, que não fazem parte da mensagem, para dificultar a análise de freqüência. 18 Nula ou cifra nula é uma forma de cifragem em que o texto claro é misturado com uma quantidade de letras sem significado. Atualmente, é considerada uma forma simples de esteganografia.

Cifrário de Michele Steno

1.2.7.4 – Cifrário Homofônico do Duque de Montmorency

Em 1552 o Duque de Montmorency usava um cifrário homofônico em sua

correspondência com a Inglaterra. Nele, caracteres especiais substituíam nomes ou cargos de pessoas. Para aumentar a segurança da cifra, Montmorency também fazia uso de nulas.

Cifrário do Duque de Montmorency

1.2.7.5 – Cifrário Homofônico de Philibert Babou

Em 1558, Philibert Babou, criptoanalista oficial do rei François I da França, utilizava um cifrário homofônico no qual as letras, ou conjuntos de duas letras (dígrafos), de três letras (trígrafos) e quatro letras (quadrígrafos) mais comuns do idioma francês eram substituídos por símbolos.

A cifra homofônica de Babou

1.2.7.6 – Cifrário Homofônico do Rei Henrique IV Em 1595, Henrique IV, rei da Inglaterra, utilizava uma cifra homofônica para

tratar de assuntos sigilosos. Além das vogais, as consoantes tinham mais de um caracter para substituí-los.

A cifra de Henrique IV

1.2.7.7 – Cifrário Homofônico do Rei Luis XIII

Em 1628, o rei Luis XIII da França usava uma cifra homofônica para tratar da correspondência diplomática entre a França e Constantinopla. Para assuntos particulares, ele utilizava uma outra cifra homofônica.

Cifra particular do Rei Luis XIII

Cifra para a correspondência Paris-Constantinopla

O sistema homofônico, apesar de constituir um progresso na cifragem, não é um

sistema indecifrável.

1.2.7.8 – O Cifrário de Trithemius O abade beneditino Johannes Trithemius19 (1462-1516) propôs que o alfabeto

simples de César fosse ampliado em uma matriz com 26 linhas, com um deslocamento por linha (a matriz proposta por ele normalmente é atribuída ao francês Blaise de Vigenère, cuja cifra será vista em seguida).

Quadro de Trithemius

Neste sistema, a codificação de cada letra é realizada usando fileiras escolhidas

do alfabeto deslocado, descendo ao longo do Quadro. Ao chegar à letra Z, o processo é reiniciado. Para codificar uma letra, escolhe-se uma linha e usa-se a primeira linha como guia. Para codificar um texto claro qualquer, a codificação teria início buscando a primeira letra do texto claro na primeira linha, e descendo até encontrar a linha escolhida e a a letra codificada, e assim sucessivamente. Por exemplo, usando a 10ª linha, a letra de texto claro “A” seria codificada como "J".

O quadro de Trithemius é um bom exemplo de cifra polialfabética. 1.2.7.9 – A Cifra de Vigenère Em 1562 o francês Blaise de Vigenère aperfeiçoou o sistema polialfabético de

Trithemius. Seu sistema é chamado Cifra de Vigenère.20 Nele, a codificação é feita usando-se uma chave constituída por uma palavra ou frase de fácil memorização.21

Quando o texto original é maior que a chave, esta é repetida tantas vezes quantas forem necessárias.

O exemplo a seguir mostra a codificação de um texto (assaltem o forte)

realizada com a palavra-chave (SEGREDO), e usando o Quadro de Trithemius.

19 Ele escreveu o tratado Polygraphiae Libri Sex. 20 Vigenère tornou-se famoso pela publicação de sua obra (1586), Traicté des Chiffres (Tratado das Cifras). 21 A chave pode ser: uma palavra (palavra-chave ou key-word); uma frase ou sentença (key-phrase).

Palavra-chave: S E G R E D O S E G R E D O Texto original: a s s a l t e m o f o r t e Texto cifrado: S W Y R P W S E S L F V W S Este é um exemplo de substituição polialfabética periódica. No caso da

substituição polialfabética aperiódica, a chave não se repete regularmente. Pode-se, por exemplo, eliminar as duas últimas letras da palavra-chave, palavra

sim palavra não: Palavra-chave: S E G R E D O S E G R E S E Texto original: a s s a l t e m o f o r t e Texto cifrado: S W Y R P L I S F J R F L W

Pode-se também usar uma sentença qualquer de um texto (escolhida previamente de comum acordo) para servir de chave (por exemplo, a montanha tem mi(l metros)): Chave: A M O N T A N H A T E M M I

Texto original: a s s a l t e m o f o r t e Texto cifrado: A E G N E T R T O Y S D F M

Pode-se também fazer recomeçar a chave, assim que uma letra do texto claro é

encontrada. Esta técnica, conhecida como Sistema Interruptor do Texto Corrido, é mostrada a seguir (no exemplo, a chave – montanha - recomeça quando encontra a letra A). O texto original é: destruir canhão.

Chave: M O N T A N H A M M O N M O Texto original: d e s t r u i r c a n h a o Texto cifrado: P S F M R I P R O M B U A C 1.2.7.10 – O Cifrário Gronsfeld Uma variante mais fraca do que o Cifrário de Vigenère, mas mais forte do que o

de Trithemius, é o chamado Cifrário de Gronsfeld.

Cifrário de Gronsfeld

Neste cifrário, as palavras-chaves devem usar apenas as dez primeiras letras do

alfabeto. Entretanto, ele é baseado em um número-chave, e não em uma palavra-chave.

Por exemplo, seja cifrar a mensagem parcial:

Pois do céu é revelada a ira de Deus contra toda impiedade22, ou seja:

A ira de Deus

O número-chave é 1027 (que, coincidentemente, significa BACH).

A i r a d e D e u s B ACH BA CH BA B I T H EE FL VS (BITHEEFLVS) Além do número reduzido de chaves que proporciona, este cifrário ainda impede

que certas letras sejam originadas de outras: por exemplo, o S não pode surgir das letras de A até I, ou das letras T até Z.23

Todas estas características tornam extremamente fraco este cifrário.24 1.2.7.11 – Os Cifrários de Beaufort O Cifrário de Vigenère pode ser usado de duas maneiras, com duas regras de

codificação/decodificação. Em uma, a letra da mensagem encontra a letra da chave abaixo, e a letra

codificada é encontrada na primeira coluna à esquerda. Pela outra regra, corre-se para baixo a partir da letra da chave (na primeira linha) até encontrar a letra da mensagem, e a letra codificada é encontrada na primeira coluna à esquerda.

Estas características são exploradas nos chamados Cifrários de Beaufort.25 Por exemplo (cf. SGARRO), a mensagem This is the same old stuff, codificada

pela palavra-chave WIND. T HI S I S T H E SAME OLD S TUF F WIND WI NDW I NDW I ND WINDW DBFL OQ UWS QNRS UCA E PTYR XZVP MK G E I KNJ I GYA WLHCJ Na tabela de Vigenère mostrada a seguir, está indicada a primeira codificação

(que leva à letra D – pela primeira regra – e à letra X – pela segunda regra).

22 A sentença completa é: “Pois do céu é revelada a ira de Deus contra toda a impiedade e injustiça dos homens que detêm a verdade em injustiça” (ou, em outra tradução: “A ira de Deus Se revela do céu contra toda impiedade e perversão dos homens que detém a verdade em injustiça.” (Romanos 1:18). 23 Olhando embaixo, a letra S somente surge após o intervalo A até I, visto em 0, em cima. Olhando as colunas de letras encimadas por T até Z, não surge nenhuma letra S nelas. 24 Este cifrário foi quebrado pelo criptoanalista francês Étienne Bazeries, que, incidentalmente, quebrou o nomenclador usado por Napoleão Bonaparte, entre outros. 25 O primeiro método é conhecido como Cifrário Verdadeiro de Beaufort (usa o sistema criptograma = chave – mensagem. O segundo método, conhecido como Cifrário Variante, ou The Same Old Stuff, usa o sistema criptograma = mensagem – chave). Este cifrário já tinha sido descrito por Giovanni Sestri em 1710.

1.2.7.12 – O Cifrário de Porta Outra variante do Cifrário de Vigenère é denominada Cifrário de Porta. Neste

cifrário, cada metade se mantém fixa, enquanto que a outra metade é girada uma letra por vez.

Por exemplo, se a palavra-chave é vingança, e a mensagem é castelo, a primeira letra fica assim codificada: a primeira letra, C, é codificada inicialmente com a letra P; procurando o alfabeto com o cabeçalho P, a letra C é finalmente codificada com a letra V.

Apesar de aparentemente complexo, este cifrário possui várias ciladas. Por exemplo, se a letra de chave é U ou V, a letra clara A é cifrada como Q, e a letra clara Q é cifrada como A. Outra característica desagradável deste cifrário é que várias palavras-

chave são intercambiáveis: CASA ou DATA, por exemplo (isto surge em razão dos cabeçalhos duplos). E assim como no Cifrário de Gronsfeld, várias linhas são perdidas (13 neste cifrário, contra 16 no anterior). Dessa maneira, ao invés de 26 substituições, são disponíveis apenas 13.

1.2.7.13 – A Cifragem por Substituição de Grupos de Letras Um dos próximos aperfeiçoamentos a serem feitos surgiu quando foram

propostos códigos de substituição não de letras isoladas da mensagem clara, mas de grupos de letras.

Este sistema, curiosamente, surgiu de um sistema de sinalização descrito pelo historiador grego Políbio, que viveu no século II a.C.

O sistema era formado por um bloco quadrado de letras; sendo 26 o número de letras normal da maioria dos alfabetos, uma das letras deveria ser desprezada. Para os exemplos que serão descritos, será desprezada a letra Q, que costuma ser útil para os criptoanalistas, por não vir sozinha e ser sempre acompanhada da letra U. A letra Q pode ser substituída, sem problemas, pela letra K.

Políbio descreveu o que foi chamado de Xadrez de Políbio, o qual é mostrado a

seguir.

Deste modo, A é representada por “1 1”, B por “1 2”, até chegar a Z, que é

representada por “5 5”. Uma mensagem seria então codificada por dois números. Por exemplo, a palavra Grécia:

G R E C I A 2 2 4 2 1 5 1 3 2 4 1 1 Na verdade, este sistema pretendia ser apenas um método de comunicação à

distância, o que se fazia através do uso de tochas acesas.

______________________________________________________________________ Um método moderno de comunicação (pelo telégrafo) foi idealizado pelo

inventor norte-americano, Samuel Morse. Para conseguir uma comunicação rápida, ele usou símbolos constituídos por traços e pontos para as letras. Ao visitar uma tipografia, Morse percebeu que os tipos (letras) que enchiam as caixas, e que eram usadas para compor um texto, eram tanto menos quanto menos fosse usada aquela letra. Ou seja, ele fez uma análise de freqüências intuitiva, para o idioma inglês. Desse modo, ele abreviou os símbolos correspondentes às letras mais usadas (a letra e, a mais usada, é formada

por um único ponto), deixando os símbolos mais complexos para as letras menos usadas.

______________________________________________________________________ 1.2.7.14 – A Cifra Playfair O Xadrez de Políbio serviu de base para criar algumas Cifras, tais como a Cifra

Playfair e a Cifra Delastelle (que se verá adiante). Charles Wheatstone foi um cientista inglês conhecido por muitas invenções e

por ter sido um dos pioneiros do telégrafo elétrico. Ele criou um tipo de codificação que se tornou popularmente conhecido como Código Playfair, o nome do seu vizinho, Lord Playfair, que não a inventou, mas a popularizou.26

A Cifra Playfair introduziu o processo de codificação por blocos. A cifragem

(que usa uma palavra-chave) se dá substituindo cada par de letras no texto original por outro par de letras. O bloco de letras é um quadrado 5x5, com 25 letras do alfabeto (i e j são consideradas uma única letra). A palavra-chave, que pode ter qualquer tamanho (não pode ter letras repetidas) é escrita, e em seguida preenche-se o quadrado com o restante das letras não constantes da palavra-chave.

Usando, por exemplo, a palavra-chave felizardo constrói-se o seguinte

quadrado:27

26 Lyon Playfair, Barão de St. Andrews. A Cifra Playfair foi muito usada, inclusive durante a Primeira Guerra Mundial. 27 A palavra não deve ter caracteres repetidos, e o resto do alfabeto segue a seqüência, pulando as letras da palavra.

F E L I/J Z A R D O B C G H K M N P Q S T U V W X Y

A mensagem a ser cifrada é quebrada em pares de letras (dígrafos); duas letras

iguais, juntas, devem ser intercaladas pela letra x. Uma letra final isolada é acrescida da letra x.

Por exemplo, seja codificar o seguinte texto:

Encontre-me na rua atrás da Assembléia Por quebra e por inserção, torna-se:

en co nt re me na ru ax at ra sd ax as xs em bl ei ax

A cifragem será feita assim:

• Se as letras estão dentro da mesma fileira, são substituídas pelas letras à direita de cada uma (ei torna-se LZ).

• Se as letras estão dentro da mesma coluna, são substituídas pelas letras abaixo de cada uma (na torna-se UC).

• Se uma das letras está no fim da fileira, é substituída pela letra no começo. • Se uma das letras está no fundo da coluna, é substituída pela letra do topo. • Letras em fileiras e colunas diferentes são substituídas pelas respectivas letras

das interseções. en co nt re me na ru ax at ra sd ax as se mb le ia

FP AK NP GR GZ UC AV UO NB DR QO UO NO PJ TM IL OF28 A Cifra Playfair também não se mostrou invencível. A análise de freqüência de letras simples, que permitia decifrar os códigos

monoalfabéticos tinha sido aperfeiçoada; ao invés de buscar apenas letras simples, a análise passou a incluir a distribuição de dígrafos e trígrafos no idioma.29

Aliada à busca de outras peculiaridades do idioma, esta análise múltipla permitia encontrar a maioria dos segredos dos códigos. No caso da Cifra Playfair, bastava procurar os dígrafos mais comuns do idioma inglês: th, he, an, in, er, re, es.

28 Note-se que no caso do dígrafo NT, T (última letra) é substituída pela primeira (N), que por pertencer ao dígrafo e estar na mesma fileira, é substituida pela letra à direita (P). 29 Ou, como é também chamada, análise por freqüências duplas e triplas.

1.2.7.15 – A Cifra Delastelle Um contemporâneo de Playfair foi Felix-Marie Delastelle (1840-1902). Ele

criou um cifrário em blocos 5x5, uma espécie de xadrez de 25 casas. Por exemplo, usando a chave ABAT-JOUR (cf. Sgarro):

1 2 3 4 5

1 A B T J O 2 U R C D E 3 F G H I K 4 L M N P S 5 V W X Y Z O ciframento é feito em três etapas. Seja cifrar a mensagem: Atacar cidade.30 Na primeira, a a mensagem é cortada em blocos de cinco letras cada um;

embaixo de cada letra, escreve-se o número da coluna e, mais abaixo, o número da linha indicativa da posição da letra no bloco 5x5.

A T A C A 1 3 1 3 1 1 1 1 2 1 R C I D A 2 3 4 4 1 2 2 3 2 1 D E X X X 4 5 3 3 3 2 2 3 3 3

Na segunda etapa, trancrevem-se as cifras horizontais duas a duas,

sequencialmente: 13 13 11 11 21 23 44 12 23 21 45 33 32 23 23 Em seguida, recodificam-se as letras, seguindo a ordem numérica (em blocos de

cinco letras):

FFAAB GPUGB YHCGG Este é o criptograma final. O cifrário de Delastelle é conhecido como Cifrário Bifendido. Ele criou também

o Cifrário Trifendido, formado em um cubo 3x3x3. Apesar de complexos, tais cifrários apresentam padrões detectáveis, os quais são

utilizados pelos criptoanalistas para decifrá-los.

30 São inseridas nulas, para completar o bloco 5x5.

1.2.7.16 – Encriptação por Sistemas de Cifras O sistema de cifras, que é também um sistema por substituição, utiliza o mesmo

método utilizado pelos antigos nomencladores. Ou seja, a substituição não é de letras, mas sim, de palavras.

Neste sistema, o criptógrafo compila uma espécie de dicionário, o qual contém uma relação de palavras claras traduzidas em um tipo de código numérico em seqüência. Por este motivo, este sistema é conhecido pelo nome de Cifrário por Dicionário, ou Repertório, ou simplesmente Código.

Um exemplo de palavras dicionarizadas neste cifrário são dadas a seguir: BOMBA 21299

BOMBARDEIO 21300 BONAPARTE 21301 ..... CANHÕES 21305 ..... CAVALARIA 21310

Quando a ordenação por palavras é alfabética e a numérica é seqüencial, diz-se

que o código é por lista simples (como no exemplo dado). Este tipo de codificação, entretanto, é pouco seguro, exatamente pela seqüencialidade, que dá pistas preciosas para o criptoanalista. Por exemplo, se uma palavra é decodificada, a seguinte (em ordem alfabética quase que se torna evidente.

Se a ordenação é feita alfabeticamente, mas a numeração não é seqüencial, diz que o código é por lista dupla. Utilizando o exemplo anterior, a lista poderia sair assim:

BOMBA 43501 BOMBARDEIO 71123 BONAPARTE 30301 CANHÕES 81505 CAVALARIA 91314

Neste caso, uma segunda lista deve ser compilada, em ordem numérica

acompanhada das palavras (desordenadas), para facilitar a decodificação. Além de ser uma codificação fraca, a codificação por sistema de cifras é muito

incômoda, por exigir extensos dicionários de palavras. Freqüentemente, para aumentar a segurança, costumava-se realizar a

sobrecifração ou supercifragem, em que o criptograma era cifrado uma segunda vez. Mesmo este expediente, no entanto, não dava completa segurança à mensagem cifrada.31

31 Um dos mais famosos casos de deciframento de mensagens deste tipo ocorreu em 1917, durante a Primeira Guerra Mundial. Um telegrama alemão expedido pelo Ministro do Exterior, Arthur Zimmermann, foi quebrado pela contra-espionagem inglesa, e seu conteúdo foi repassado para os EUA, o que determinou a entrada deste país na guerra.

1.3 – Encriptação por Transposição Além do método de codificação por substituição mono ou polialfabética, existe

um outro método no qual faz-se simplesmente o deslocamento das letras, trocando-as de posição. É o chamado método de transposição. Nele, cada letra da mensagem original é tirada de sua ordem normal; ou seja, a mensagem é misturada, de forma a destruir as junções dígrafas e trígrafas que normalmente compõem as palavras.

O ciframento por transposição cria o que se denomina anagrama. Na

transposição, as letras não são substituídas, e sim permutadas entre si. Por exemplo, a mensagem atacar o quartel (atacaroquartel).

Uma das transposições possíveis transforma assim a mensagem:

RAQTORCEALUAAT 1.3.1 – A Cítala Espartana O processo de codificação por transposição torna-se mais invulnerável, à medida

que mais letras do texto são utilizadas.32 No século V a.C., em Esparta, utilizava-se um instrumento para esta finalidade, a

cítala ou citale.33 Era um cilindro ou bastão de madeira chanfrada, no qual era enrolada uma tira de couro ou pergaminho, ao longo da qual se escrevia a mensagem. Desenrolada a tira, a mensagem somente poderia se lida se fosse enrolada em outro bastão de mesmo diâmetro.

Cítala espartana

1.3.2 – Sistemas de Transposição Monofásicos O sistema chamado Monofásico é aquele que usa somente uma transposição. Os

vários tipos de sistemas monofásicos serão vistos a seguir. 1.3.2.1 – Sistema de Código de Cancela Estes códigos foram usados durante a Guerra Civil norte-americana para

codificar mensagens transportadas por mensageiros. São bastante simples de serem implementados, e possuem duas versões.

32 Entretanto, como se verá, ele pode sofrer ataques capazes de realizar o deciframento. 33 Usado principalmente pelos governantes (éforos).

Na primeira versão, a metade do texto corrido é escrita em uma linha, e a outra metade, na linha debaixo. Seja por exemplo a mensagem cancelar o ataque.

C A N C E L A R

O A T A Q U E

O texto cifrado resulta da seleção das colunas da esquerda para a direita, e do registro do texto cifrado em grupos de cinco caracteres, como mostrado a seguir:

COAAN ACAEQ LUAER Na segunda versão o texto claro é escrito em colunas da esquerda para a direita,

como mostrado: C N E A O T Q E A C L R A A U O texto é desenvolvido em seguida, pela seleção de duas filas e do registro dos

caracteres em grupos de cinco: CNEAO TQEAC LRAAU Esta é uma forma bastante fraca de criptografia, e que, quando usada, deve ser

complementada por outras técnicas de sobrecifração. 1.3.2.2 – Sistemas de Código de Roteiro Neste sistema, inscrevem-se os caracteres da mensagem em uma matriz,

começando em um ponto inicial prefixado e seguindo um roteiro prescrito, a seguir gerando o texto cifrado através de outro roteiro prefixado.

Seja, por exemplo, a mensagem o porto foi minado deve ser evitado. A mensagem é escrita em um bloco 6x5, como abaixo:34

Em seguida, as colunas são lidas de cinco em cinco caracteres, de cima para

baixo, para formar o texto cifrado: OFAEI PODST OIOEA RMDRD TIEEO ONVVX

Se fosse realizada uma codificação por transposição diagonal, resultaria:

OFPAO OEDIR ISOMT TEDIO AREND EVOVX

34 Algumas vezes a matriz não é preenchida, como no exemplo. Neste caso, são inseridas nulas até completarem a matriz.

Ou, seguindo uma espiral no sentido horário, voltada para dentro e começando pela coluna seis, resultaria: ONVVX ODATI EAFOP ORTIE ERESD OIMDO A mensagem pode ser escrita de várias formas, em um bloco 6x5. A seguir, são mostradas duas versões possíveis de escrita (de cima para baixo, e em escrita bustofrédica, ou seja, em vai-vém). O F A E I P O D S T O I O E A R M D R D T I E E O O N V V X

O P O R T O N I M I O F A D O D E V V E R E S E

I T A D O X

Se a mensagem é mais longa do que o número de células da matriz, os caracteres restantes podem ser inscritos em matrizes adicionais, que contenham toda a mensagem.

Assim como os métodos anteriores, este sistema é igualmente bastante fraco.

1.3.2.3 – Sistema de Coluna-Senha Este é um dos métodos de transposição mais utilizados. Neste método, a

mensagem clara é inscrita em filas, em uma matriz na qual o número de colunas é determinado por uma palavra-chave. Veja-se o exemplo (chave numérica: 24631857).

O criptograma surge quando são selecionadas as colunas na ordem numérica

determinada, em grupos de cinco letras. TASDO IDVRN EAPME IFORX OIVTO DEXXX35 1.3.3 – Sistemas de Transposição Polifásicos Estes são os sistemas de transposição nos quais se empregam múltiplas

transposições.

35 A inserção de caracteres nulos, tanto na matriz quanto no criptograma. nem sempre aumenta a segurança do sistema, podendo até mesmo prejudicá-lo.

1.3.3.1 – Cifrários por Transposição de Colunas Neste cifrário, que usa grades NxN, é usada uma das possíveis permutações de

de ordem 1 a N. Por exemplo, em um bloco 6x6, de ordem 123456 (em que cada algarismo indica a ordem da coluna), suponha-se que resulte uma permutação assim indicada: 326415.36

Inicialmente, a mensagem clara (exército em manobras atacar ao amanhecer)

é escrita em um bloco 6x6:

1 2 3 4 5 6 e x e r c i t o e m m a n o b r a s a t a c a r a o a m a n h e c e r x

Permutando as colunas, resulta:

3 2 6 4 1 5 e x i r e c e o a m t m b o s r n a a t r c a a a o n m a a c e x e h r

O criptograma resulta da leitura das colunas (de cima para baixo), na ordem

permutada:

E E B A A C X O O T O E I A S R N X R M R C M E E T N A A H C M A A A R 1.3.3.2 – O Cifrário Nihilista Este é uma variante do cifrário anterior, em que as linhas são igualmente

permutadas .

3 2 6 4 1 5 e x i r e c e o a m t m b o s r n a a t r c a a a o n m a a c e x e h r

36 Pode ser usada uma palavra-chave, na qual as letras possuam exatamente esta ordem alfabética (326415). Por exemplo, a palavra-chave DIRECTOR, cuja primeira letra é C=1, a segunda letra é D=2 (pela ordem alfabética), etc., tem a seguinte ordem numérica permutada: 24631857.

A permutação das linhas pode obedecer ao mesmo critério anterior, ou pode ser utilizada uma outra chave numérica. Supondo a permancência do critério, resultará:

3 2 6 4 1 5 1 e x i r e c 2 e o a m t m 3 b o s r n a 4 a t r c a a 5 a o n m a a

6 c e x e h r 3 2 6 4 1 5 3 b o s r n a 2 e o a m t m 6 c e x e h r 4 a t r c a a 1 e x i r e c 5 a o n m a a

O criptograma resultante é:

B E C A E A O O E T X O S A X R I N R M E C R M N T H A E A A M R A C A

Apesar da complexidade da anagramação, este cifrário contém todos os elementos que permitem a sua decifração por análise de freqüência.

1.3.3.3 – Transposição de Dupla Coluna O método de transposição por coluna dupla utiliza diferentes chaves numéricas

(que podem ser memorizadas através de palavras-chaves). Eis um exemplo (chaves numéricas: 24631857 e 364512):

2 4 6 3 1 8 5 7 3 6 4 5 1 2 P O R T O F O I O D R P P M M I N A D O D E V T T A E O V E S E R E V I O I E A O D T A D O P O R T V R R N S D

I E I T P O

A matriz da esquerda é preenchida seguindo a seqüência numérica da matriz à direita.37 Em seguida, o criptograma é formado fazendo a leitura seqüencial numérica da matriz esquerda:

PEOSP MODDO OVOVI RTERI PAANT DTIRE

37 Note-se que a inserção de nulas foi feita reescrevendo o início da mensagem, nas duas matrizes.

1.3.3.3.1 – A Cifra ÜBCHI Durante a Primeira Guerra Mundial, e esporadicamente durante a Segunda, os

alemãe usaram um sistema de cifragem por transposição dupla de colunas com chave38 chamado Cifra Übchi.39

Este método usa uma grade de N colunas (12 no exemplo). Uma palavra-chave é usada na primeira fileira, com as letras em ordem alfabética.

Seja codificar a seguinte mensagem: atacar aviões na base naval em Sincity. A palavra-chave fica na fileira superior; mas, para o entendimento da cifra, não

será necessário o seu uso. A segunda fileira contém (desordenadamente) os números de um a doze.40

O texto da mensagem clara é inserido abaixo da fileira numérica, linha por linha, da esquerda para a direita.

10 2 8 6 3 1 12 5 11 9 4 7 A T A C A R A V I O E S N A B A S E N A V A L E M S I N C I T Y

A seguir, as colunas de 1 a 12 são transcritas em sequência linear por fileiras, de

cima para baixo: coluna 1 (REI) seguido de coluna 2 (TAS) até a coluna 12 (ANT).

10 2 8 6 3 1 12 5 11 9 4 7 R E I T A S A S C E L V A Y C A N S E A B I O A A N M I V A N T

Podem ser introduzidas nulas em quantidade qualquer (por exemplo: DTEPOQW).

10 2 8 6 3 1 12 5 11 9 4 7 R E I T A S A S C E L V A Y C A N S E A B I O A A N M I V A N T D T E P O Q W

Faz-se uma última transposição, nos mesmos moldes da primeira, ou seja, transcrevendo as colunas em seqüência linear, de cima para baixo.

38 Este é um exemplo de sistema de supercifragem. 39 Este sistema já havia sido descrito por John Falconer em 1685, em sua obra Cryptomenysices Patefacta. 40 Os números, na verdade, correspondem à ordem das letras da palavra-chave.

10 2 8 6 3 1 12 5 11 9 4 7 S S A E Y N Q A N V L O E S A T T A I V A P I C M W E I T R A A O C B D A E N

O criptograma final é:

SSAEY NQANV LOESA TTAIV APICM WEITR AAOCB DAENR Uma última nula foi acrescentada (R) ao criptograma, para distribuir os grupos por cinco letras. O destinatário decifra a mensagem realizando a ordem inversa de ciframento. As letras são colocadas em uma grade de 12 colunas, com a palavra-chave e a numeração das colunas (que são conhecidos por ele).

Insere-se em seguida o criptograma por colunas, na ordem numérica. Retiram-se as nulas, e repete-se a operação de transferência das linhas para as colunas numeradas.41

Este método por transposição dupla de colunas foi quebrado pelos franceses ainda durante a Primeira Guerra Mundial, o que não impediu que ele voltasse a ser usado pela Wermacht em 1941 e 1942 (com as conseqüências óbvias).

1.3.4 – Sistemas Mistos de Transposição Se os caracteres da mensagem clara forem transpostos como caracteres simples,

diz-se que realizou-se a transposição monográfica. Entretanto, a mensagem clara pode ser inscrita na matriz de transposição em grupos de dois caracteres (dígrafos), em grupos de três caracteres (trígrafos), ou em grupos de n caracteres. Esta forma de transposição é chamada de transposição poligráfica.

1.3.5 – Transposição em Grade Giratória

Neste tipo de cifragem é utilizada uma grade NxN42 (6x6, no exemplo), na qual existem quadrados recortados (os quadrados em cor branca). Para cifrar, escreve-se um texto qualquer,43 escolhido de forma a que várias letras distribuídas possam surgir através de uma grade convenientemente recortada. Para decifrar, uma grade semelhante é aplicada sobre o mesmo texto, sendo lidas apenas as letras que aparecem nos quadrados claros. São realizadas três rotações sucessivas (normalmente, para a direita). As letras que surgem nos quadrados claros após as rotações, juntas, formarão a mensagem decodificada.44

41 Para fazer uma encriptação UBCHI, veja-se: http://rumkin.com/tools/cipher/ubchi.php. 42 Podem ser, por exemplo, 4x4, 5x5, 6x6, etc. 43 O qual pode, em si mesmo, ser um texto claro ou um texto já cifrado por outra forma (neste caso, o criptograma foi sobrecifrado), devendo sofrer algum outro tipo de decodificação. 44 Os Cifrários por Grade Giratória foram estudados por Eduard von Fleissner von Wostrowitz (1825-1888). Ele criou o sistema denominado Patronen-Geheimschrift. Cifrários por grade indefinida foram introduzidos pelo italiano Luigi Sacco, durante a Primeira Guerra Mundial.

Observe-se que serão obtidas nove letras, em cada leitura, correspondentes aos quadrados claros da grade. Obviamente, outros padrões podem ser realizados, conforme o número de quadrados claros.

Um exemplo do uso deste método é dado na obra de Jules Verne, Matias Sandorf. Uma mensagem cifrada é interceptada, com o seguinte conteúdo:

ihnalz zaemen ruiopn arnuro trvree mtqssl odxhnp estlev eeuart aeeeil ennios noupvg spesdr erssur ouitse eedgnc toeedt artuee Após várias peripécias o herói da história percebe que o criptograma pode ser

lido por uma grade giratória 6x6 (as mesmas anteriores, usadas como exemplo). Sobre a mensagem interceptada, foram lidas as seguintes letras (sobre a primeira coluna):

A leitura por grade forma um outro criptograma (a mensagem fora sobre-

cifrada), que após ser decifrado, revela a mensagem final. Em uma variante deste método, uma mensagem clara é enviada, sobre a qual o

destinatário aplica a grade de leitura. A leitura através dos quadrados pode produzir uma mensagem que estava oculta (esteganografia) e que pode corresponder a um texto claro

(inteligível), ou corresponder a um texto ainda cifrado, que exige uma chave para ser lido.

A encriptação por grade giratória, apesar de parecer segura, pode ser quebrada através do método de análise de freqüências de letras (freqüências simples, duplas e triplas).

1.4 – Encriptação por Esteganografia45 (Clássica) Quanto à esteganografia, foi também usada extensamente, tanto no Ocidente

quanto no Oriente. Uma forma bastante astuciosa de esteganografia foi utilizada pelo abade

beneditino Johannes Trithemius. Seu sistema era conhecido como as Ave Marias. Ele era composto por 14 alfabetos, nos quais, a cada letra, corresponde uma palavra ou grupo de palavras. O texto cifrado final, quando lido normalmente, apresenta ser um texto coerente, como se fosse uma oração ou glorificação religiosa, em latim.

O quadro mostrado a seguir apresenta um dos alfabetos de Ave Maria:

no céu N no paraíso B para todo o sempre O hoje C um mundo sem fim P na sua divindade D numa infinidade Q em Deus E perpetuamente R na sua felicidade F por toda a eternidade S no seu reino G durável T na sua majestade H incessantemente U-V-W na sua beatitude I-J irrevogavelmente X na sua magnificência K eternamente Y ao trono L na sua glória M na sua luz

Se se fosse codificar a palavra Pedro, por exemplo, resultaria: Na sua divindade perpetuamente numa infinidade na sua felicidade hoje.46 Algumas palavras "nulas" podem ser adicionadas, para disfarçar ou para dar

sentido ao texto. Por se constituir em um conjunto normal de palavras, o deciframento da mensagem cifrada exigiria o cotejo entre uma grande quantidade de mensagens interceptadas, até encontrar as relações apropriadas.

Por outro lado, era um sistema que exigia um tempo considerável para a codificação, sendo inviável para mensagens longas, porque o texto encriptado se tornava muito grande.

O inconveniente do sistema é o tempo necessário para a transposição do texto, e o grande aumento do texto esteganografado resultante. Por outro lado, como a mensagem cifrada se apresentava como um conjunto normal de palavras, os eventuais decifradores, devido às numerosas equivalências, teriam que acumular uma massa enorme de material antes de encontrar as semelhanças necessárias para obter a chave.

45 Para uma introdução leve ao assunto.ver: http://www.gta.ufrj.br/grad/07_2/thiago_castello/index.html. 46 Obviamente, seria uma ingenuidade separar cada parte por vírgulas, ou colocar cada parte em parágrafos.

1.4.1 - A Grelha de Cardano A chamada Grelha de Cardano, ou Grelha de Richelieu (como é também

conhecida), é um sistema de codificação por esteganografia. Consiste em uma folha de material rígido (conhecida como Cardano Grille) na qual existem aberturas retangulares colocadas em intervalos irregulares, da altura de uma linha de texto e de comprimento variável.

Seu uso é bastante simples: coloca-se a matriz sobre uma folha de papel e escreve-se a mensagem nas aberturas. Depois retira-se a grelha, sendo que o espaço entre as letras é preenchido com letras quaisquer. Para decodificar, coloca-se uma grelha idêntica sobre o texto recebido, para fazer aparecer a mensagem recebida.

Apesar de apresentar uma similitude com o processo de cifragem por grade, este método é um pouco mais seguro e mais eficiente de esconder mensagens do aquele. Mas, no todo, possui uma segurança muito baixa.

Uma variante desse processo consiste em escolher letras ao longo de um texto

(um livro raro ou conhecido, por exemplo, escolhido de comum acordo47), de forma que formem uma mensagem. Em seguida, as letras (cuja ordem no texto segue uma seqüência numérica) são indicadas, no texto cifrado, por um número (com vários algarismos, em quantidade variável, mas não em ordem numerada – por exemplo: 116; 3; 19; 607; 61; etc) que identifica a posição de cada uma no texto, página por página.

No parágrafo anterior, por exemplo, os números: 20; 3; 6; 12; 5; 9; 19 (não são contados os espaços) indicam a palavra Cardano.48 Por este método, o texto-chave não necessita ser muito extenso.

De modo diverso, podem ser escolhidas as letras iniciais das palavras, que são então numeradas (nesse caso, o texto-chave deve ser bem extenso; uma obra literária qualquer pode ser utilizada). Cada letra inicial entra na composição da mensagem.

A mesma palavra anterior, Cardano, seria assim formada, de acordo com esse processo: 9; 13; 20; 3; 28; 41; 21.49

Este método é bastante eficiente para cifrar mensagens. Para mostrar como ele

pode ser seguro, basta citar o caso da Cifra Beale. Este é um texto cifrado famoso, conhecido desde o final do século XIX nos Estados Unidos (a cifragem foi feita usando as letras iniciais das palavras do texto-chave).

Existem três páginas de cifras50, cada uma contendo uma série de números de até três algarismos. Supostamente, as cifras mencionam um tesouro enterrado, com a sua localização.

Após décadas de esforços, apenas a segunda cifra foi decodificada.51 A primeira e a terceira, que presumidamente descrevem a localização do tesouro, permanecem indecifráveis.

Uma variante deste método de cifra (denominado esteganograma) é o uso do

primeiro caracter de cada capítulo de um livro qualquer, para ocultar uma mensagem. 47 Este processo é conhecido como Cifra de Livro, e utiliza um livro qualquer como chave. 48 Observe-se que letras iguais não devem ser indicadas em posições sempre iguais no texto, e sim, escolhidas em outras posições. A letra a, que surge em Cardano duas vezes, foi escolhida segundo a sua 3ª. e 5ª. posição, no texto-chave. 49 O único problema desse método é que, se o livro-chave for descoberto, todas as mensagens passadas, atuais e futuras serão decodificadas. 50 As cifras podem ser vistas nas páginas 105 a 107, em Singh. 51 O texto-chave que foi utilizado para a segunda cifra foi a Declaração da Independência.

Por exemplo, a obra de Aldus Manutius (1499), Tentativa de Amor em Sonho, contém um famoso esteganograma: Monge Francisco Colonna Ama Polia Apaixonadamente, sentença esta que resulta da justaposição da primeira letra do texto de cada um dos 38 capítulos da obra (que forma uma sentença com 38 letras no idioma original).

1.4.2 – A Cifra de Bacon

O sistema de código criado por Sir Francis Bacon, também conhecido como

Sistema de Encobrimento, foi divulgado no capítulo 1, livro 6, de sua obra De Augmentis Scientiarum52. Ele consiste em um arranjo de cinco elementos a partir de duas categorias, designadas a e b, em um alfabeto de 24 letras (onde I=J; e U=V).

A aaaaa N abbaa B aaaab O abbab C aaaba P abbba D aaabb Q abbbb E aabaa R baaaa F aabab S baaab G aabba T baaba H aabbb U/V baabb I/J abaaa W babaa K abaab X babab L ababa Y babba M ababb Z babbb

Bacon realizou o encobrimento de dois elementos de duas categorias usando

dois conjuntos de letras semelhantes porém distintas. Para cada uma das letras do alfabeto é atribuído um grupo de 5 caracteres compostos pelas letras a e b. Na encriptação, são usados os primeiros caracteres de cada letra. Por exemplo, na mensagem atacar pela manhã:

52 Tem o título em inglês de The Advancement of Learning.

A T A C A R P E L A M A N H A a b a a a b a a a a a a a a a

I R A

O criptograma resultante é a palavra IRA. Apesar de sua sofisticação, este código mostrou-se bastante vulnerável, sendo facilmente decifrado.

1.4.3 – A Tinta Invisível Uma forma muito comum de esteganografia utiliza tinta invisível para ocultar o

texto. Esta tinta é uma substância especial usada para escrever, a qual se torna invisível após secar. Ela deve se tornar visível por algum meio, como a aplicação de calor, produto químico ou um tipo especial de iluminação (luz ultravioleta ou luz negra).

O escritor norte-americano Edgar Alan Poe, em seu extraordinário conto O

Escaravelho Dourado, usou o tema da tinta invisível para construir a sua trama. Em sua história, a tinta invisível foi usada pelo pirata Capitão Kid para escrever uma carta onde ele revelava o local onde seu o seu tesouro, acumulado ao longo de anos por saques e roubos em navios, estava enterrado.

A carta foi parar nas mãos de um morador de uma ilha, e a mensagem invisível, por um acaso, acaba se lhe tornando visível, quando ele aproxima o papel do calor de uma lareira. No final, após várias peripécias, ele consegue ler e decifrar o texto, e obviamente, recuperar o tesouro.53

O uso da tinta invisível é um processo pouco seguro,54 e por esta razão, é muito

pouco utilizado atualmente. Outros processos de esteganografia foram desenvolvidos, os quais serão estudados oportunamente.

1.5 – Encriptação Mista ou Híbrida

A encriptação mista ou híbrida é a que usa processos simultâneos de substituição (de acordo com um diagrama de Políbio) e transposição, como técnicas que dificultem a decifração do criptograma.

1.5.1 – A Cifra ADFGX O advento do telégrafo obrigou a que se criasse um código que pudesse proteger

os textos de telegramas. Com este objetivo, a Alemanha criou uma nova cifra com base na combinação do tabuleiro de Polybius e de palavras-chave.

Esta cifra era conhecida como Cifra ADFGX, porque essas eram as únicas letras usadas como cifra. Essas letras foram escolhidas porque seus equivalentes no código Morse eram difíceis de confundir, o que reduzia a chance de erros.

53 Na trama elaborada por Edgar Alan Poe, ele utiliza sucessivamente os processos de esteganografia e de cifragem por substituição monoalfabética. E de uma maneira magistral, Poe introduz o leitor à questão da decifração pela análise de freqüência de letras, em um sistema monoalfabético. 54 Para ser completamente segura, a tinta deveria ser insolúvel em água, ser não-volátil, invisível à luz ultra-violeta, não ser ativada pelo calor, não reagir com a maioria dos reagentes químicos, não decompor ou depositar cristais, não mudar de cor na presença de ácidos ou bases

O primeiro passo foi criar uma matriz semelhante ao tabuleiro de Polybius:

A D F G X A A B C D E D F G H I/J K F L M N O P G Q R S T U X V W X Y Z

As letras de texto claro seriam representadas por pares de letras, por

fileira/coluna. No exemplo, a letra cifrada "B" torna-se "AD", e a letra "O" torna-se "FG" (nem todas as matrizes ADFGX tinham o alfabeto organizado em ordem alfabética).

Usando a matriz, e sendo a mensagem clara attack harbour,55 para codificá-la seria feito o seguinte.

Primeiro, encontravam-se os pares de letras correspondentes a cada letra do texto claro. Neste caso, encontra-se:

AA GG GG AA AF DX DF AA GD AD FG GX GD

O próximo passo seria determinar uma palavra-chave, a qual poderia ter

qualquer comprimento, mas não poderia ter letras repetidas. Para este exemplo, foi usada a palavra CANDOUR56. Cria-se a seguir uma grade

com a palavra-chave soletrada no topo. A mensagem cifrada é então escrita na grade, separando os pares em letras individuais e passando de uma linha para a outra.

C A N D O U R A A G G G G A A A F D X D F A A G D A D F G G X G D

A grade é então reorganizada de forma que as letras da palavra-chave fiquem em

ordem alfabética, e alterando as colunas correspondentes às letras de forma apropriada.

A C D N O R U A A G G G A G A A D F X F D A A D G A F D G G G X D

O criptograma era realizado lendo as letras pelas colunas sucessivas:

55 Atacar o porto. 56 Franqueza.

AAAG AAAG GDDG GFGX GXAD AFF GDD

1.5.2 – A Cifra ADFGVX A Cifra ADFGVX foi desenvolvida pelo coronel Fritz Nebel, do exército

alemão57, no final da Primeira Guerra Mundial, a partir da cifra ADFGX, considerada menos segura.

Para cifrar a ADFGVX,58 toma-se uma grade 6x6, onde são colocadas, em cima e lateralmente essas letras, e dentro da grade, aleatoriamente, 26 letras e 10 dígitos.

A mensagem a ser cifrada é: attack at 10 pm. Inicialmente, pega-se cada letra da mensagem, que é substituída pelas duas letras

que determinam sua posição. Assim, a letra a, por exemplo, é substituída por DV; a letra t é substituída por DD; a letra c é substituída por FG; e assim sucessivamente. Obtem-se a série:

a t t a c k a t 1 0 p m DV DD DD DV FG FD DV DD AV XG AD GX

Na segunda fase da codificação (a transposição), utiliza-se uma palavra-chave (MARK), que é escrita em uma nova grade:

M A R K D V D D D D D V F G F D D V D D A V X G A D G X

57 Este código foi usado pelos alemães durante as últimas ofensivas da guerra. 58 O exemplo foi retirado de SINGH.

A K M R V D D D D V D D G D F F V D D D V G A X D X A G

O primeiro criptograma é transcrito em ordem, dentro da grade. Esta, em

seguida, é reposicionada em ordem alfabética (AKMR), e o texto cifrado final é lido de cima para baixo, resultando o criptograma seguinte: V D G V V D D V D D G X D D F D A A D D F D X G

O destinatário precisa conhecer a posição das letras na primeira grade, e a

palavra-chave. Como o texto cifrado é formado por apenas seis letras (que formam os rótulos

das fileiras e colunas), o criptograma resultante acaba sendo formado por uma combinação duas a duas, dessas mesmas seis letras.59

Esta cifra, que os alemães consideravam indecifrável, foi quebrada parcialmente

pelo criptoanalista francês Georges Painvain, em 1918. Isto não significa, entretanto, que seja uma cifra fraca. A criptoanálise feita por Painvain teve por base a análise de freqüências e o uso altamente estilizado das mensagens interceptadas, que seguiam rígidos protocolos militares (ela ajudou a conter a última investida alemãe contra a França). A solução geral para a sua decodificação só foi encontrada em 1933.60

1.5.3 – Sistemas de Código de Fracionamento Seja, por exemplo, a matriz de substituição biliteral dada a seguir:

A codificação inicial é feita colocando as díadas numéricas sob a mensagem clara. Por exemplo, a codificação da mensagem atacar a cidade.

59 A escolha dessas letras foi determinada pelos pontos e traços que as formam, no Código Morse, que minimizam erros de transmissão. (Cf. Singh). 60 Ver: General Solution of the ADFGVX Cipher System, por J. Rives Childs. Um software para a decodificação do ADFGVX pode ser encontrado em: http://www.richkni.co.uk/php/crypta/adfgvx.php. Veja-se no Capítulo III a sua criptoanálise.

A T A C A R A C I D A D E 2 4 2 3 2 2 2 3 1 3 2 3 2 5 5 5 1 5 4 5 1 5 2 5 2 3 Em seguida, os dígitos são combinados em grupos de dois e convertidos

novamente em caracteres, através da matriz de substituição, obtendo-se o criptograma: 2 4 2 3 2 2 2 3 1 3 2 3 2 5 5 5 1 5 4 5 1 5 2 5 2 3 R E H E B E A Z J T I A E Uma variante dessa técnica utiliza a divisão do texto claro em grupos de cinco

caracteres, sendo que o código de fracionamento é aplicado a estes grupos. Por exemplo, seja cifrar a mensagem atacar pela retaguarda.

A T A C A R P E L A R E T A G U A R D A 2 4 2 3 2 2 1 2 1 2 2 2 4 2 3 1 2 2 3 2 5 5 5 1 5 4 1 3 4 5 4 3 5 5 4 5 5 4 1 5

A codificação é feita por blocos, como mostrado a seguir. 2 4 2 3 2 5 5 5 1 5 2 1 2 1 2 4 1 3 4 5 1 2 2 3 2 5 5 4 1 5 R E A Z I S S R B T U E A Y J Ainda uma outra variante combina a substituição monoalfabética biliteral com a transposição por colunas. Usa-se a matriz de substituição biliteral.

Tomando-se a mesma mensagem clara anterior, tem-se:

A T A C A R P E L A R E T A G U A R D A BE DE BE CA BE BD AA BC AD BE BD BC DE BE CD AB BE BD CB BE Em seguida, o texto cifrado é inscrito em uma matriz de transposição de colunas (364512):

É transcrito novamente pela seleção de colunas em uma ordem numérica a partir

dos números mistos, gerando o seguinte texto cifrado: BB AB CB ED DC DD BC AB DA CD BB BB BB EE CD EE EE AA EE BB Agrupados dois a dois, os caracteres são convertidos em um texto codificado de

um só caracter com a matriz de substituição, resultando o seguinte criptograma: H U D Y O | Q E U M G | H H H Z G | Z Z P Z H 1.5.4 – O Sistema Chase Este sistema foi introduzido pelo professor Pliny Earle Chase em 1859. É a

primeira descrição que foi publicada, de um sistema de fracionamento. Ele usa uma matriz de substituição biliteral com índices numéricos. Além dos 26

caracteres do alfabeto, são usados os símbolos “.” , “,” , “–“ , “+”. O exemplo abaixo usa a palavra-semente LEXICOGRAPH, à qual se seguem as

letras restantes do alfabeto.

O texto claro é escrito em díadas verticais numéricas colocadas sob ele, conforme as posições na tabela. Por exemplo, com a mensagem computer, ficaria:

C O M P U T E R 1 2 2 1 3 3 1 1 5 6 8 0 3 2 2 8

Em seguida, o número inferior é multiplicado por 9:

1 2 2 1 3 3 1 1 5 1 1 2 2 9 0 5 2 Acrescenta-se o algarismo 1 ao início da fileira superior, sobre o 5 da fileira de baixo: 61

61 O primeiro algarismo (1) serve para formar o primeiro caracter, que é a letra C, no caso.

1 1 1 2 1 3 3 1 1 5 1 1 2 2 9 0 5 2 C L L Y E - + C E

As díadas são transformadas em seguida de volta para a forma de caracteres,

usando a matriz de substituição, formando o texto cifrado final: CLLYE–+CE. Como caracteres idênticos resultam de díadas idênticas, pode-se concluir que este código não é inviolável.

1.5.5 – Chaves e Palavras-Chave As chaves de substituição podem tomar duas formas:

O alfabeto padrão (standard), no qual as letras são substituidas por deslocamento. O código tem então um alfabeto corrido e um alfabeto cifrado.

Alfabeto corrido: 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 Alfabeto cifrado: D E F G H I J K L M N O P Q R S T U V W X Y Z A B C

O alfabeto misto, que usa uma palavra-chave ou uma frase-chave. Há dois

métodos de alfabeto misto: O primeiro usa uma palavra-chave inicial, a qual é juntada ao alfabeto normal

sem os caracteres desta palavra. Por exemplo, usando a palavra-chave ÁRVORE. Retiram-se os caracteres repetidos e forma-se o alfabeto:

A R V O E B C D F G H I J K L M N O P Q S T U W X Y Z

O segundo método usa a matriz de caracteres para misturar o alfabeto.

Seleciona-se a palavra-chave, eliminando as letras repetidas (ÁRVORE SECA = ARVORESECA = ARVOESC). As letras da palavra-chave são colocadas na primeira fila de uma matriz (ou bloco), sendo as filas subseqüentes preenchidas conforme a ordem seguinte das letras do alfabeto.

A R V O E S C B D F G H I J K L M N P Q T U W X Y Z O alfabeto resultante é formado lendo as colunas de cima para baixo: A B K U R D L W V F M X O G N Y E H P Z S I Q C J T

Nos métodos de codificação por transposição, usa-se uma palavra-chave na matriz, e abaixo dela, um algarismo que define a ordem alfabética com que cada letra surge na palavra. Por exemplo, a palavra-chave DIRECTOR, tem a seguinte ordem numérica: 24631867.

D I R E C T O R 2 4 6 3 1 8 6 7

Na decodificação a palavra-chave é introduzida na matriz, e a transposição inversa segue a ordem definida pelos números.

1.5.5.1 – O Sistema de Autochave Neste sistema polialfabético, a mensagem do texto claro ou seu texto cifrado equivalente serve como chave, a partir de um caracter inicial ou um grupo de caracteres. No exemplo dado a seguir, a letra O é usada para iniciar a codificação por Vigenère, e usa o próprio texto cifrado como o restante da chave (cf. Katzan, Jr.). Chave: O Q Q D F J U U F U C P T V J W P G G I Texto claro: C A N C E L A L P I N E C O N T R A C T Texto cifrado: Q Q D F J U U F U C P T V J W P G G I B Neste caso, cada letra do texto cifrado (a partir da letra O) é levada para cima à direita, servindo para cifrar a letra seguinte. 1.5.5.2 – Sistema de Autochave Corrido

Em outra variante, a codificação por Vigenère pode começar por uma palavra-chave, e o texto corrido serve como restante da chave.

Chave: H O R S E C A N C E L A L P I N E C O N

Texto claro: C A N C E L A L P I N E C O N T R A C T Texto cifrado: J O E U I N A Y R M Y E N D V G V C Q G O destinatário da mensagem usa a palavra-chave (HORSE) para recuperar o início da mensagem clara, a qual vai sendo usada em seguida (letra por letra) para decodificar o restante da mensagem (por exemplo, a primeira letra recuperada, “C”, é colocada à frente da palavra-chave, e sucessivamente, “ANCEL...”).

1.5.5.3 – O Sistema de Chave Aleatória

O advento da Grande Guerra (Primeira Guerra Mundial) trouxe a necessidade

urgente de encontrar ou aperfeiçoar códigos que pudessem permanecer invioláveis, quando atacados pelos criptoanalistas. Uma das respostas a este desafio foi proporcionada pelo major Joseph Mauborgne, do exército americano, que introduziu o conceito de chave aleatória, a ser usada em conjunto com a Cifra de Vigenère. Por este método, seriam produzidas chaves em quantidade suficiente para as comunicações secretas, que seriam usadas uma única vez.62

62 E por isto chamadas One time pad (OTP), ou Cifra de Chave Única. A chave, neste caso, deve ser tão grande quanto o texto, e jamais deve ser repetida.

A necessidade de usar uma única vez cada chave devia-se à rapidez e a facilidade cada vez maior com que se decodificavam os textos secretos, usando a análise de freqüência. Desse modo, se a chave fosse usada uma única vez, e tivesse o seu comprimento igual ao do texto aberto, seria impossível descobrir padrões ocultos. A criptanálise, neste caso, exigiria testar milhares ou milhões de possibilidades, uma alternativa que nem sempre estava ao alcance do criptoanalista.63

1.5.6 – O Sistema Perfeito de Criptografia Na busca por um sistema perfeito de criptografia vários sistemas foram

propostos. Os sistemas monoalfabéticos foram substituídos pelos poligráficos (polialfabéticos); foram sugeridos os sistemas homófonos; o sistema de introdução de nulas; etc. Com o sistema Vigenère, ao se constatar que as chaves curtas eram fáceis de decifrar, foram sugeridos outros métodos, como o sistema de autochave, chave aleatória, sobrecifração pelo uso de cifrários compostos, entre outros.

Este último método é constituído por dois cifrários, S1 e S2, ligados em série. A sua chave é composta pelas duas chaves parciais de cada cifrário. Entretanto, o que geralmente ocorre é que, se são ambos cifrários por rotação, as chaves que codificam, por exemplo, a letra A em D, e a letra D em K, na verdade o que está acontecendo é que há um único crifrário por rotação, que transforma A em K. Isto equivale a dizer que, a composição de dois cifrários de Vigenère com palavras-chave de extensão M e N é equivalente a um único cifrário de Vigenère cuja palavra-chave tem uma extensão igual ao mínimo múltiplo comum dos números M e N.

De todo modo, a segurança deste sistema multichaves não é perfeita. 1.5.6.1 – O Código Vernam

Este código foi inventado em 1917 por Gilbert S. Vernam, um engenheiro da AT&T (American Telephone and Telegraph Company). Ele era implementado por um dispositivo eletromecânico, o qual permitia eliminar o fator humano na codificação/decodificação.

O Código Vernam utiliza os conceitos de Lógica Matemática. Ele foi primeiramente aplicado ao código Baudot (um código semelhante ao código Morse) de cinco bits, usando o operador OU-exclusivo (XOR), conforme a tabela mostrada a seguir:

Se o texto cifrado fosse, por exemplo, 10110, e a chave fosse 01010, a codificação seria:64

63 O teste de um código forte através do uso sucessivo de milhares ou milhões de chaves, é denominado ataque pela força bruta. 64 Note-se que esta não é uma adição binária; os resultados dependem unicamente da tabela.

1 0 1 1 0 Texto corrido 0 1 0 1 0 Chave

1 1 1 0 0 Texto cifrado

O sistema de Vernam era uma cifra que combinava uma mensagem com uma chave lida de um laço de fita adesiva de papel. Inicialmente, era usado um rolo extenso, perfurado com dígitos binários aleatórios. Em sua formulação original, o sistema de Vernam não era inquebrável, porque a chave poderia ser reutilizada.

Ao se perceber que as chaves periódicas eram vulneráveis à decodificação, passou-se a usar dois rolos, um com 1000 caracteres, e o outro com 999 caracteres. Como as permutas entre as chaves permitem 999.000 combinações, isto se mostrou satisfatório para resolver o problema da chave periódica. O Código Vernam é considerado teoricamente inviolável, se o período da chave for igual ou maior do que o comprimento da mensagem.

CAPÍTULO II

HISTÓRIA CONCISA DA CRIPTOLOGIA

2.0 – Antiguidade A antiguidade grega, egípcia e romana pode ser caracterizada como a era da criptografia ingênua, marcada por métodos extremamente simples, mas que eram suficientes para as necessidades da época.

Entre 600 e 500 a.C., os hebreus utilizavam a cifra de substituição simples (de fácil reversão e fazendo uso de cifragem dupla para obter o texto original), monoalfabética e monogrâmica (em que os caracteres são trocados um a um por outros), e com ela escreveram o Livro de Jeremias.

O chamado Codificador de Júlio César ou Cifra de César apresentava uma das técnicas mais clássicas de criptografia, qual seja a substituição simples, em que as letras da mensagem são substituídas por outras, avançando três posições à frente no alfabeto.

2.1 – Idade Média Os antigos e ingênuos métodos de encriptação da antiguidade foram

aperfeiçoados gradativamente ao longo da Idade Média e Renascença, principalmente no império islâmico.

No império muçulmano, sob o califado abássida, entre os anos de 700 a 1200, que foi um período extraordinário de paz e prosperidade, houve um enorme desenvolvimento cultural, durante o qual vários eruditos se sobressaíram, em vários campos do conhecimento.65

A necessidade de governar um extenso território obrigou a civilização árabe-islâmica a fazer avançar várias disciplinas,66 entre elas a criptografia e a criptoanálise. Com essa última, houve uma grande evolução nos processos de desencriptação de textos disfarçados, principalmente através da análise de freqüência de letras.67

Os principais artífices árabes do desenvolvimento da criptografia foram os seguintes:

al-Khalil, ou Abu Abd al-Rahman al-Khalil ibn Ahmad ibn Amr ibn Tammam al Farahidi al-Zadi al Yahmadi (718-786) escreveu o livro Kitab al Mu'amma (O livro das mensagens criptográficas68), em grego, para o imperador bizantino. Uma forma de criptoanálise até hoje usada foi criada por ele, quando decifrou um criptograma bizantino. Ele supôs, corretamente, que o texto iniciava por Em nome de Deus Misericordioso, que era um modo comum de começar qualquer texto na época.69 al-Kindi (801-873), ou Abu Yusuf Yaqub ibn Is-haq ibn as Sabbah ibn 'omran ibn Ismail Al-Kindi, escreveu Risalah fi Istikhraj al Mu'amma (Escritos sobre a decifração de mensagens criptográficas). Este livro foi preservado, sendo considerado o

65 Para melhores informações veja-se SINGH, 2001. 66 A denominação Cifra e também zero utilizada em muitas línguas vem da palavra árabe sifr, que significa nulo. 67 Aos poucos se percebeu que um idioma qualquer possui uma estrutura léxico-gramatical que lhe é inerente, e a qual dificulta extraordinariamente a criação de um código secreto seguro. 68 Este livro, infelizmente, foi perdido. 69 Este método criptanalítico, conhecido como método da palavra provável, tornou-se padrão, e vem sendo usado em decifração de mensagens desde a Segunda Guerra Mundial.

mais antigo livro sobre criptologia. Este livro apresenta as primeiras análises de frequência.

Em 855 Abu Bakr Ahmad ben Ali ben Wahshiyya an-Nabati publicou vários alfabetos de cifras, mas que eram usados para mágicas. Ibn Dunainir ou Ibrahim ibn Mohammad ibn Dunainir (1187-1229) é autor do livro (redescoberto em 1987), Maqasid al-Fusul al-Mutarjamah an Hall at-Tarjamah (Explicações claras para a solução de mensagens secretas). Nesse livro uma inovação importante foi introduzida, o uso das cifras algébricas, ou seja, a substituição de letras por números que podem ser transformados aritmeticamente. Ibn Adlan ou Afif ad-Din ibn Adlan ibn Hammad ibn Ali al-Mousili an-Nahwi al-Mutarjim, é autor de um livro (também redescoberto em 1987), Al-Mu'allaf lil-Malik al-Ashraf (Escrito para o Rei al-Ashraf), o qual contém explicações detalhadas acerca do tema criptoanálise.

Por volta do ano 1000, no Emirado Ghaznavida, fundado por Sebük-Tigin no Afeganistão, registraram-se mensagens trocadas usando a criptografia.

Por volta do ano 1100 começaram a surgir alguns tímidos usos para a criptografia em geral. Em 1119 foi fundada a Ordem do Templo, uma Ordem de monges combatentes. Esta Ordem tinha por finalidade proteger os peregrinos na Terra Santa, e proporcionar meios de transmissão segura de fundos advindos do comércio. Para isso, a organização cifrava suas letras de crédito, utilizando um método próprio (a Ordem foi abolida em 1312).

Em 1226 um tipo de criptografia política começou a ser usado nos arquivos oficiais de Veneza. Nele, pontos e cruzes substituíam as vogais em algumas palavras esparsas.

Cerca de 1250, o frade franciscano inglês Roger Bacon (1214-1294), que possuía vastos conhecimentos sobre linguística, física e ciências naturais, descreveu sete métodos diferentes de cifras.

Por volta de 1300, Abd al-Rahman Ibn Khaldun escreveu o Muqaddimah, um importante relato da história que incluía as diferentes das formas das letras como um código usado entre escritórios militares e de controle de impostos. Ele fez também referências à criptanálise.

Ibn Ad-Duraihim (1312–1361), ou Taj ad-Din Ali ibn Muhammad ibn Abdul'aziz ibn ad-Duraihim, foi autor do livro redescoberto em 1987, Miftah al-Kunuz fi Idah al-Marmuz (Chaves para a elucidação de mensagens secretas) que contém uma classificação das cifras, análises de frequência em várias línguas, uma tabela de Trithemius(Vigenère) e grades de transposição.

Em 1378, depois do Cisma de Avignon, o antipapa Clemente VII decidiu unificar o sistema de cifras da Itália Setentrional, designando Gabriele Lavinde para coordenar a tarefa. Lavinde compilou uma coleção de cifras num manual. Com seu alfabeto de substituição combinada (código/cifra), Lavinde uniu a cifra de substituição a um código com listas de palavras, sílabas e nomes equivalentes. Este sistema foi utilizado por diplomatas e civis europeus e americanos por mais de 450 anos.

Em 1404, Leone Battista Alberti, arquiteto, filósofo, poeta e criptologista italiano, inventou o princípio de cifras usando o polialfabeto, conhecido como Cifra de Alberti. Ele inventou também uma das primeiras máquinas de codificação assistida, usando o seu disco de cifras. Ele é considerado como um dos precursores da criptografia ocidental.

Em 1412, Qalqashandi, Shihab al-Din abu Abbas Ahmad ben Ali ben Ahmad Abd Allah al-Qalqashandi (1355-1418) escreveu a Subh al-a `sha, uma enciclopédia de 14 volumes em árabe, a qual incluía uma seção de Criptologia. Qalqashandi credita a

Taj ad-Din `Ali ibn ad-Duraihim ben Muhammad ath-Tha`alibi al-Mausili (1312-1361) a autoria dos escritos sobre criptologia (que se perderam). A obra inclui substituição e transposição, bem como uma cifra com múltiplas substituições para cada letra do texto original. Inclui também uma explicação da criptoanálise, com o uso de tabelas de frequência de letras e conjuntos de letras que podem ocorrer juntas numa palavra.

2.2 – O Renascimento A partir do século XVI, com o início do Renascimento, a contínua animosidade

entre os países europeus70 e as contínuas alianças e rompimento de alianças levara a que os governantes procurassem meios de ler a correspondência diplomática dos inimigos, atuais ou futuros. Com este objetivo, criaram-se vários gabinetes, chamados Câmaras Negras, cujo objetivo era tanto decifrar os códigos secretos, quanto criar códigos invioláveis. Por exemplo, o código secreto criado para o Rei Luís XIV pelos seus criptoanalistas, Antoine e Bonaventure Rossigno, chamado A Grande Cifra, era tão forte que somente veio a ser decifrado no século XIX por Étienne Bazeries, criptógrafo do exército francês.

Em 1518, Johannes Trithemius, monge beneditino que viveu na Alemanha, publicou o primeiro livro sobre criptografia intitulado Poligraphia, em que abordava o emprego de cifras por substituição.

Poligraphia

Em 1556, o médico e matemático italiano Girolamo Cardano inventou um

dispositivo para uso de cifras, conhecido como a grade de Cardano. Basicamente, o dispositivo consistia de um gabarito provido com vários furos, que eram numerados aleatoriamente e correspondiam ao número de letras na mensagem secreta. Para enviar a mensagem, a grade é posicionada sobre o papel, e as suas letras são impressas através de cada furo, obedecendo a ordem em que foram numeradas no gabarito. Para a decodificação, basta se colocar sobre o papel uma grade semelhante e ler as letras reveladas através dos furos.

Em 1565 o matemático napolitano Giovanni Battista Porta, ou Giambattista della Porta, publicou o livro De Furtivis Literarum Notis, no qual menciona um sistema de cifras usando o princípio de substituição, em que uma letra qualquer contida na mensagem original podia ser grafada de onze maneiras diferentes. Um dos maiores aperfeiçoamentos na criptologia veio com Blaise de Vigenère, em 1586. Ele escreveu diversos livros, entre os quais (em 1585) o Traicte de Chiffres, no

70 Principalmente após a sua consolidação ou unificação política. A maioria dos países europeus já estava unificado, a partir do século XVIII. A partir daí, as guerras, antes de motivação religiosa, passaram a ter motivação política. Ou motivação comercial, a partir do século XIX.

qual descreve o emprego da cifra por autochave e a cifra por substituição. O processo consiste na seqüência de várias cifras (como as de César) com diferentes valores de deslocamento alfanumérico.

A partir desse período, Renascença, a criptologia começou a ser seriamente

estudada no Ocidente e, assim, diversas técnicas foram utilizadas e os antigos códigos monoalfabéticos foram, aos poucos, sendo substituídos por polialfabéticos.71

2.3 – A Criptologia no Século XIX Neste século a criptologia clássica teve um grande progresso, tanto do lado dos criptógrafos, que se empenhavam em criar códigos indecifráveis, quanto do lado dos criptoanalistas, que buscavam quebrar estes códigos. Merecem destaque: o holandês Kerckoff; o francês Etienne Bazieres;72 o alemão Kasiski.73 Em 1838, o norte-americano Samuel F.B. Morse inventou o telégrafo, e concomitantemente o código Morse, que na realidade era um processo pelo qual as letras do alfabeto são substituídas por pontos e traços. Entretanto, logo surgiu a necessidade tanto civil quanto militar de ocultar pela criptografia o texto a ser transmitido via telégrafo. 2.3.1 – Os Escritórios de Informação

Durante a Guerra da Secessão nos EUA o presidente Lincoln ordenou ao agente Allan Pinkerton, dono de uma agência de investigações, que criasse um serviço oficial completo de espionagem e contra-espionagem.74

Após essa guerra, os Estados Unidos mantiveram um escritório de informações, que, entretanto, padecia da miopia dos Secretários da Guerra, que indicavam pessoas despreparadas para o comando desses escritórios. Como afirma o coronel Allison Hind, “Em 1898, contudo, a nação não estava preparada para ter um serviço secreto. Não o estava, sem dúvida, o Exército, que parecia necessitar mais dele”.

71 Esta cifra, realmente, tornou-se um método de codificação que é usado até a atualidade, em várias versões. 72 Nascido em 1846. Criptologista militar, foi um pioneiro no desenvolvimento de máquinas de codificação assistida, através do dispositivo conhecido com Cilindro de Bazieres, que uma versão melhorada do dispositivo inventado um século antes pelo americano Thomaz Jefferson. Em 1901 ele publicou a obra Lês Chiffres Secrets Dévoilés (As Cifras Secretas Reveladas). 73 Friedrich Wilhelm Kasiski. Foi oficial de infantaria prussiana. Em 1863 publicou o livro Die Geheimschriften und die Dechiffrierkuns (Escritas Secretas e a Arte da Decifração), que foi o primeiro tratado publicado sobre a decodificação de mensagens usando o princípio de cifras por substituição polialfabética e o sistema de autochave inventado por Vigenère. Kasiski é considerado o precursor da moderna análise criptográfica. 74 Às vezes, um simples tipo de código podia enganar os olhos vigilantes da contra-espionagem. Durante a Guerra da Secessão nos EUA, uma viúva, a Sra. Rose Greenhow, ou Rebel Rose, como se tornaria conhecida no mundo da espionagem. Freqüentadora dos meios diplomáticos no Norte, e sendo ela uma simpatizante do Sul, a Sra. Greenhow passava continuamente mensagens e informações essenciais para os separatistas. Ainda que vigiada de perto pelos agentes de Pinkerton, em determinada época ela fez uso de um simples código de cores, em tapeçaria. Colocando alternadamente os tapetes coloridos em sua janela, ela conseguia passar informações confidenciais, sem ser descoberta.

2.4 – A Criptologia no Século XX 2.4.1 – As Máquinas de Codificação Assistida A Guerra de 1914-1918 trouxe várias inovações no que se referia às

comunicações entre as tropas. A invenção do telégrafo aumentou em muito a quantidade de informação trocada, o que demandava rapidez tanto na codificação quanto na decodificação das mensagens.

Uma das formas encontradas para resolver este problema foi o emprego de processos automáticos, denominadas máquinas de codificação assistida.

Um dos primeiros e mais simples conceitos de máquina de codificação assistida foi desenvolvido no século XV por Leone Battista Alberti, através do seu Disco de Cifras. O Secretário de Estado norte-americano Thomas Jefferson também desenvolveu um disco de cifras. Este consistia de 25 discos de madeira que giravam em torno de um eixo comum. A diferença para o disco de Alberti era que, em cada disco de madeira, as 26 letras do alfabeto eram gravadas de forma aleatória.

Disco de Cifras de Thomas Jefferson (1795)

Este disco não chegou a ser usado, e logo foi esquecido. Apenas um século mais

tarde el foi reinventado pelo criptologista francês Etienne Bazeries. Conhecido como Cilindro de Bazeries, era composto de um conjunto com cerca de 20 ou mais discos numerados, nos quais estavam gravados diferentes alfabetos codificados em suas bordas. Como eram montados em um eixo comum, os discos podiam ser reordenados nas mais variadas seqüências numéricas. Assim, cada nova seqüência definia a cifra-chave do conjunto de discos.

Na verdade, a única vantagem destes simples dispositivos de codificação era a velocidade.

Em 1918 o polonês Arthur Scherbius desenvolveu uma máquina de codificação

assistida chamada Enigma, a qual viria a ser utilizada pelo exército e marinha de guerra alemã na década de 1920 e ao longo da Segunda Guerra Mundial.

Com o início da Primeira Guerra Mundial, elas foram produzidas nos mais

diversos países e, a partir de 1935, atingiram um sofisticado grau de eficiência. Seu conceito básico era a codificação feita por substituição polialfabética, empregando extensas cifras-chaves e alguns milhares de séries de letras nulas.

Variavam em tamanho, peso e eficiência, sendo que alguns modelos podiam imprimir as mensagens (sendo por este motivo, os modelos mais volumosos e pesados). As mais simples tinham semelhança com uma máquina de escrever portátil.

Durante a Segunda Guerra Mundial surgiram vários modelos de máquinas de

codificação assistida, que usavam teletipos ligados a uma caixa de codificação automática. Uma das mais famosas foi a máquina utilizada pelos japoneses, conhecida como Purple Machine (Máquina Púrpura).75

2.4.2 – A Criptologia Norte-Americana Em 1931 o criptologista americano Herbert Osborne Yardley publicou o livro

American Black Chamber, o qual foi a base para o desenvolvimento do serviço de criptanalise americano e responsável também pela decodificação do código diplomático japonês, o qual era utilizado para as negociações na Conferência Naval em Washington, em 1921. No final de década de 1940, o matemático e engenheiro eletricista norte-americano Claude Elwood Shannon tornou-se conhecido pelos seus trabalhos sobre Criptografia, circuitos digitais e Teoria Matemática da Comunicação.

A estruturação da inteligência americana no trabalho de cifragem e decifragem

começou quase no final da 1ª guerra mundial. Antes havia muito pouca ou nenhuma nota ou registro sobre esta área nos EUA.

Em 1917, o Exército americano criou o Departamento de Cifras do Exército, que teve como missão inicial quebrar o código das mensagens interceptadas aos alemães. Em 1922 o Departamento de Guerra norte-americano fixou-se em Washington. Seu trabalho específico era o de estudar novos métodos de análise e decifração de mensagens. Foi por esta época, também, que se abordou pela primeira vez o problema das cifras produzidas por máquinas. Estas introduziram um novo conceito em cifragem, tornando muito mais complexo o trabalho dos decifradores. A partir de 1920 houve um significativo avanço com a aplicação de técnicas e métodos estatísticos na criptoanálise.

Durante muitos anos, o Departamento de Inteligência da Marinha de Guerra

Americana foi o único órgão a interceptar o tráfego de comunicações japonês.76 Desde 1918, o Serviço de Inteligência da Marinha acompanhava as mudanças e o desenvolvimento dos sistemas japoneses, em especial o código utilizado pela Marinha japonesa. Em 1931, a Marinha, através do Gabinete OP-20-G (o Departamento da Diretoria Naval de Comunicações) se dedicou inteiramente a decifrar os dois principais códigos japoneses: o Código Diplomático e as Comunicações Navais. Para isso, os americanos criaram um cinturão de estações de escuta e interceptação de sinais de rádio na Ásia, com bases em Xangai, Guam, Olangapo, Cavite, Manila e no Hawai.

Em 1927, um esforço conjunto entre o Departamento de Estado e o Exército

americano levou à criação da chamada Câmara Negra, que tinha a incubência de decodificar as mensagens entre Tóquio e a embaixada japonesa. Entretanto, no inicio de 1929, Henry Lewis Stimson, então novo Secretário de Estado do Presidente Hoover,

75 Esta máquina era adaptada de um modelo de máquina usado pelos alemães, a máquina Enigma. 76 A Marinha americana tinha o seu próprio serviço de escuta e decifração na área do Pacífico.

determinou que se cortassem os fundos do departamento (o MEU-8, ou Escritório de Criptanálise do Departamento de Estado), que nesta época estava sob o seu controle.77

O Exército transferiu as atividades realizadas pelo Departamento de Estado para uma nova unidade no Departamento de Guerra, que recebeu o nome de Signal Intelligence Service, ou SIS. Uma das principais tarefas desse novo departamento foi a formação de uma nova geração de peritos em cifras e códigos, porque o pessoal anterior tinha sido dispersado. O novo grupo aproveitou os trabalhos da extinta Câmara Negra, com análises dos códigos utilizados pelos japoneses, e trabalhou para descobrir novos métodos para quebrar os novos códigos.

Os Japoneses eram hábeis em quebrar os códigos e tinham um talento especial para cria-los. Em 1921, o Escritório da Inteligência Naval obteve uma cópia da Operação de Código Secreta da Marinha Imperial Japonesa – 1918. Entretanto, a decifração do chamado Red Book ficou atrasado, e só foi completado em 1926.

No final de 1930 a Marinha americana descobriu que no mesmo Consulado Japonês em que já haviam "subtraído" o Red Book, era possível obter as chaves do sistema de cifragem de uso diplomático, exceto para as máquinas que utilizavam os sistemas "A" e "B". Os japoneses, que suspeitavam que os seus códigos tinham sido quebrados, introduziram um novo dispositivo eletromecânico, o Angooki Taipu A (que tinha sido chamado de Red Book pelos americanos). Esta máquina de cifragem utilizava rotores móveis que controlavam os sinais elétricos transmitidos pelo teclado ou recebidos pelo rádio.78

A introdução do Blue Book, como era conhecido o Código de Operações Navais japonês, em fevereiro de 1931, substituindo o Red Book, juntamente com o aumento no tráfego de comunicações diplomáticas criou uma imensa carga de trabalho para os criptoanalistas da Marinha. Isto forçou a Marinha a procurar dividir o trabalho com o Exército, bem como fornecer as mensagens interceptadas até que o Exército desenvolvesse sua própria capacidade em obter as mensagens.

Em 1933 foi feita uma tentativa de coordenar os trabalhos entre a Marinha e o

Exército. A Marinha, que não desejava delegar todas as comunicações diplomáticas, propôs ao exército que cuidasse das comunicações de rádio no âmbito do Exército e todos os códigos diplomáticos, exceto os das quatro maiores potências navais (Inglaterra, França, Itália e Japão). Este acordo, segundo estimava a Marinha, poderia reduzir em dois anos o tempo necessário para quebrar o novo código Blue Book japonês.

Houve dificuldades imprevistas para que acontecesse um acordo de cooperação, que quase entrou em colapso quando o Departamento de Estado rejeitou a proposta do exército de interceptar as comunicações diplomáticas. Com a aproximação da solução do Blue Book, muito trabalho ainda restava para definir as áreas de interesse de cada

77 Em várias ocasiões da História a miopia dos responsáveis pela segurança de seus países foi contra o inestimável conselho de Sun-Tzu (general chinês, autor de um tratado de estratégia militar escrito por volta do século IV a.C): “Nada deve ser mais estimado do que a informação, mais bem pago do que a informação, e nada deve ser mais confidencial do que o trabalho de coleta de informações”. A prova mais contundente da atitude absurda de Stimson foi a ingênua declaração que ele fez posteriormente em sua autobiografia para se justificar: "cavalheiros não lêem a correspondência alheia". 78 Entre 1924 e 1940 os criptoanalistas americanos adotaram um sistema de designação por cores para os sistemas criptográficos japoneses de alto nível. A máquina de cifrar do corpo diplomático japonês foi designado por Red(vermelho) para a máquina tipo "A" e em 1939 Purple (púrpura) para o novo modelo "B" que o substituiu em muitas das embaixadas. A partir de 1939, uma máquina suplementar de cifrar passou a ser utilizado pela marinha japonesa até 1945 e foi designada pelo codinome Coral pelos americanos. O principal código utilizado pela Marinha japonesa recebeu o codinome Red até 1938, e Black até 1940, quando a designação foi alterada para JN-25 (Japanese Navy 25).

corporação. Em 1933 uma comissão conjunta, com a presença do General Douglas MacArthur, recomendou ao Secretário de Guerra o estabelecimento de dezenove comitês conjuntos para acelerar a integração dos sistemas de inteligência do Exército e da Marinha. Infelizmente, apesar do recomeço dos trabalhos de criptoanálise e da existência dos comitês, a Marinha não chegou a um consenso junto ao Exército.

No final de outubro de 1938, a marinha japonesa trocou o seu código de cifras.

O antigo código, chamado Blue Book (Livro Azul), que vinha sendo usado desde 1931, foi trocado por um novo código que recebeu o nome de Black Code (Código Negro). O Código Negro expandido foi o objetivo principal do posto de criptoanálise no Hawai, até meados de dezembro de 1941.

Códigos adicionais introduzidos em 1939 aumentaram a complexidade do Código Negro. Ele nunca foi quebrado, mas foi utilizado de maneira limitada. Um tipo de cifra em particular, de cinco dígitos, utilizado pela Marinha japonesa, recebeu a designação de JN-25 pelos criptógrafos da Marinha americana.

O Código JN-25 utilizava três livros, um Livro de Códigos, um Livro de Números Aleatórios (chamado de Livro Aditivo) e um Livro de Instruções.

O Livro de Códigos continha cerca de 30.000 números de cinco dígitos, os quais representavam caracteres Katakana, números, nome de lugares e mais uma porção de outras coisas. A chave deste sistema era o resultado da adição dos dígitos de um grupo, que deveria sempre resultar em um número divisível por 3.

O Livro dos Números Aleatórios continha 30 páginas, cada uma com 100 números colocados em uma matriz de 10x10. Estes números, usados como aditivos, eram somados em módulo a um grupo de números, dígito por dígito (sem “transporte”), cifrando assim os números originais.

O Livro de Instruções continha as regras para usar as cifras não seqüenciais. O número de cada página e o número da linha de cada página onde a seleção de números aditivos começava servia como chave, a qual era incluída no inicio e no fim de cada mensagem.

O código resultante foi um dos mais utilizados e distribuídos de todo o sistema de criptografia do Japão.

Em meados de 1940 os serviços de inteligência americana conseguiram a posse

do Código Púrpura.79 Após um extenso trabalho de deciframento, esse código pôde ser lido parcialmente. O código japonês foi quebrado pela equipe de Inteligência do Corpo de Sinaleiros do Exército Americano dirigido por Frank Rowlett. O novo sistema de cifras japonês passou a ser utilizado a partir de 1939, mas os criptoanalistas americanos e ingleses já tinham quebrado uma boa parte do código, antes do ataque à base naval americana de Pearl Harbor, no Hawai. Além disso, conseguiu-se também construir máquinas similares à utilizadas pelos japoneses na transmissão das mensagens Púrpura.

As máquinas Púrpura construídas foram distribuídas, uma para Londres, uma para o Serviço de Inteligência do Departamento da Marinha e outras duas foram destinadas ao Serviço de Inteligência de Comunicações do Departamento de Guerra. Uma última máquina foi enviada em abril de 1941 para as ilhas Filipinas, para ser utilizada pelo comandante da Frota Asiática e pelo General MacArthur. Após isso,

79 Púrpura foi o nome usado pelos militares americanos para identificar o sistema criptográfico utilizado pelo Serviço Diplomático japonês antes e durante a Segunda Guerra Mundial. Este não era o nome do código em si, mas da máquina eletromecânica de cifras. A Máquina Púrpura foi a evolução e a sucessora de dois equipamentos anteriormente utilizados, a Máquina Vermelha e a Máquina M, que foram utilizadas em algumas embaixadas e consulados do Japão.

foram organizados em Washington os serviços para a intercepção e deciframento das mensagens japonesas,80 sendo que os informes obtidos receberam o nome-chave de Magia (Magic),81 termo pelo qual era conhecido dentro do governo americano.

Como nenhuma máquina Púrpura foi instalada na base de Pearl Harbor, sede do comando da frota do Pacífico, o chefe dessa frota,. Almirante Kimmel, ficou dependente de Washington, no que se referia à recepção dos informes japoneses interceptados.

As mensagens Magia decifradas pela Marinha e pelo Exército eram classificadas no mais alto grau, e somente poucas pessoas tinham acesso a elas. Entre estas estavam o Presidente Roosevelt, o Secretário de Estado Cordell Hull, o Secretário de Guerra Stimson, o Secretário da Marinha Knox, o general Marshall, chefe do Estado-Maior do Exército, o Almirante Stark, chefe de operações navais, e outras sete autoridades navais e militares de alta graduação.82

A máquina Púrpura

Usando uma máquina de cartões da IBM e novas técnicas analíticas, em dezembro de 1940 os criptoanalistas conseguiram montar o Livro de números aditivo, dois sistemas de chaves e o um grupo de códigos para os números de 000 até 999. Entretanto, a falta de pessoal disponível dificultava a leitura completa do JN-25. O motivo é que se decidiu que a prioridade era o código diplomático.

Em 1º. de dezembro de 1940 o Japão cancelou o Código A, que vinha sendo usado desde 1º. de junho de 1939. Esta ação frustrou a expectativa de solucionar totalmente o código até 1º. de janeiro de 1941. Um novo código foi denominado JN-25 B (Baker) e tinha propriedades diferentes na geração de chaves, além de possuir um novo e maior livro de códigos aditivo. Pelos próximos dois meses, até 31 de janeiro de

80 O tráfego de mensagens japonesas subiu 1.200% entre 1930 e 1935, continuando a crescer em número de sistemas e volume. No final de 1942, a Marinha de Guerra Japonesa empregava 14 diferentes tipos de sistema de cifragem, o que gerava mais de 40.000 mensagens por ano, sem contar as mensagens obtidas do sistema de "Uso Geral", que em novembro de 1941 alcançava cerca de 7.000 mensagens por mês. 81 Estas intercepções tornaram-se um parte do Ultra, que era o nome do projeto completo de inteligência utilizado contra as comunicações codificadas inimigas. 82 Como uma teoria histórica não provada, foi aventado que o governo norte-americano sabia que a base seria atacada. Nenhuma providência foi tomada, contudo, porque somente assim os EUA entrariam na guerra, fato desejado pelos ingleses mas que sofria absoluta rejeição pelo povo norte-americano. A indignação provocada pelo ataque japonês fez com que a opinião pública tomasse um rumo contrário, favorável à guerra.

1941, muitas das mensagens interceptadas ainda empregavam o código aditivo da versão A (Able), o que permitia acompanhar parcialmente o tráfego de rádio. Centenas de mensagens interceptadas, baseadas no JN-25, não foram analisados devido à falta de pessoal suficiente. Assim, a maioria delas permaneceu desconhecida.83

A Cifra JN-25 só foi praticamente quebrada em janeiro de 1942, e a leitura das

mensagens secretas impediu o avanço japonês através do Pacífico.84 O grupo responsável por este feito de criptoanálise foi a unidade de inteligência baseada no 14º Distrito Naval em Pearl Harbor, coordenada por John Rochefort.

Quebrar o código JN-25 exigiu duas coisas: quebrar o esquema de cifras e, em seguida, descobrir as chaves externas. Como os japoneses não trocavam os livros de código senão em período de meses, isto permitiu que um esquema de cifras fosse utilizado freqüentemente. Com o tempo, os criptoanalistas americanos montaram uma tabela de cifras; se uma fonte era identificada, era usada como índice para a engenharia reversa da tabela de cifras, permitindo a decifração do resto da mensagem. Assim que os criptoanalistas desvendaram o esquema de cifras que escondia o código de valores, eles começaram a construir um dicionário de valores de código a partir do contexto e das deduções. Por exemplo, sinais interceptados, combinados com a localização da emissão de rádio permitiam ligar um navio específico ou o local, a quem o estava enviando.

O conteúdo das comunicações militares era também de grande ajuda para a dedução. Mensagens podiam começar com o nome do navio de onde era transmitida e, algumas vezes, o nome do comandante do navio. A mensagem, algumas vezes, incluía a data e a hora e muitas vezes as coordenadas do navio, o que podia ser comprovado através do aparelho localizador de emissão de rádio.

Uma das mais espetaculares ações militares feita durante a guerra, só tornada

possível graças a interceptação e a quebra das mensagens cifradas japonesas, foi a cilada aérea construída contra o Almirante japonês Isoroku Yamamoto, que resultou em sua morte. O almirante Yamamoto foi o responsável pela organização do ataque-surpresa a Pearl Harbor em 7 de dezembro de 1941, forçando os EUA a entrar na Segunda Guerra Mundial. Devido à derrota na batalha de Midway em junho de 1942 (derrota devida à leitura das mensagens japonesas), ele foi obrigado a reagrupar as suas forças. Em abril de 1943 ele decidiu fazer uma rápida visita de inspeção nas bases situadas nas Ilhas Salomão. Como era bastante meticuloso, enviou os detalhes do seu itinerário em uma mensagem que foi interceptada e decodificada pelo Serviço de Inteligência americano.

83 Após a guerra, descobriu-se a importância dessas mensagens. Elas continham detalhes a respeito da Primeira Frota Aérea da Marinha japonesa, a força que atacou Pearl Harbor. 84 A partir de abril de 1942, cerca de um terço das mensagens já podia ser quebrada e lida.

Ilustração do ataque a Yamamoto

Após muita discussão dentro do Alto Comando Militar americano, o Almirante

Chester Nimitz autorizou uma emboscada aérea (conhecida como Operação Vingança). Às 07:44h do dia 18 de abril de 1943, o avião que conduzia o almirante Yamamoto foi abatido perto de Bougainville por uma esquadrilha de caças P-38, os quais haviam decolado da base do Campo Handerson, a cerca de 640 km de distância.

O grupo de Rochefort quebrou também os códigos (Código Maru) utilizados

pela marinha mercante japonesa, cujos navios passaram a ser um alvo fácil para os submarinos e bombardeiros americanos.

Os criptógrafos americanos decifraram e traduziram catorze partes da mensagem diplomática japonesa que declarava guerra contra os Estados Unidos, antes mesmo que a embaixada americana em Washington recebesse a comunicação oficial. Entretanto, os japoneses eram muito cuidadosos e não mencionavam operações militares nas mensagens trocadas no âmbito da embaixada.

Ainda assim, a capacidade de ler o Código Púrpura deu aos aliados uma grande vantagem na guerra. O Código Púrpura e as mensagens japonesas foram objeto de investigação pelo Congresso Americano logo após a Segunda Guerra Mundial, na tentativa de apontar o responsável pelo desastre militar na base aeronaval de Pearl Harbor. Foi durante estas audiências que japoneses descobriram que os seus códigos diplomáticos tinham sido quebrados.

No calor das batalhas, a necessidade de rápidas comunicações cifradas por rádio

esbarravam na habilidade japonesa em quebrar as cifras americanas. Mas houve um código que jamais foi quebrado pelos japoneses. Na batalha de Saipan, os americanos usaram a comunicação verbal entre navajos de um modo codificado. Soldados navajos eram treinados para se comunicarem em seu próprio idioma, e eles o faziam sem serem interpretados pelos japoneses. Os mensageiros de código navajo criaram cerca de 450 palavras que representavam termos militares, e a complexidade do código, além de deixar os japoneses perplexos, jamais foi quebrada.

2.4.3 – Criptologia Norte-Americana do Pós-Guerra Os americanos continuaram a aprimorar a segurança de seus próprios códigos

durante e após a guerra. Uma máquina de cifras denominada Sigaba85 (também designada pelo código ECM Mark II , Conversor M-134; ou CSP-888/889, pela Marinha) foi desenvolvida ainda durante a guerra para operação pelo Exército e Marinha americana.

Assim com a máquina Enigma, ela consistia de um sistema eletromecânico de rotores para a codificação das mensagens. Tinha, no entanto, várias vantagens sobre a máquina usada pela Alemanha: enquanto que esta usava somente três rotores, a Sigaba usava 15. Além disso, enquanto que os rotores da primeira moviam-se como um velocímetro, a Sigaba usava um invento do tenente Joseph N. Wenger chamado stepping maze. Este dispositivo tornava aleatório o movimento dos rotores; após cada letra, podiam mover-se entre um e quatro rotores.

A Máquina de Cifras SIGABA

Mantida sob estritas normas de vigilância, foram fabricadas dez mil unidades,

que só podiam ser usadas por forças americanas (mas não pelos Aliados). Os alemães a chamavam de Big Machine.

Foi mantida em operação até 1959, quando foi retirada de serviço, por ser muito lenta; neste período, jamais teve o seu código quebrado.86 Com exceção de algumas poucas unidades, todas as máquinas foram sistematicamente destruídas. As seis que restaram permanecem nas mãos da Agência de Segurança Nacional (National Security Agency – NSA).

A chamada Linha Vermelha entre Moscou e Washington, estabelecida em 1963

após a crise dos mísseis de Cuba, usava teleimpressoras protegidas por um sistema one-time de fita. Cada fita usada para codificar as mensagens87 foi preparada por cada país, EUA e URSS, fechadas à chave e entregues via diplomática ao outro país. 85 Para uma explicação do funcionamente da máquina de cifras Sigaba e a sua criptoanálise , ver: http://www.sjsu.edu/mscs/research/projects/chan_wing-on.pdf. 86 Atualmente, o seu uso seria considerado extremamente inseguro, porque as suas cifras poderiam ser facilmente quebradas em pouco tempo por um moderno super-computador (mas não por um computador doméstico). 87 Os sistemas on-time de fita era conhecidos como Sigtote e 5-Uco, posteriormente substituídos pela cifra eletrônica KW-26.

Começando durante a Segunda Guerra Mundial, em 1946, e ativo ao longo das décadas seguintes da Guerra Fria, as comunicações soviéticas usando OTP podiam ser lidas por causa do chamado Projeto Venona, um projeto super-secreto conduzido por americanos e ingleses.88 Isto permitiu que os espiões ingleses e americanos a soldo da União Soviética fossem quase todos desmascarados. Alguns dos chamados espiões-atômicos conseguiram fugir antes que fossem pegos; quanto ao casal Rosenberg, levados à cadeira elétrica, e que protestaram sua inocência até o fim, só tiveram a sua culpa comprovada quando o Venona se tornou público em 1995.89

2.4.4 – A Criptologia Alemã Nazista

A quebra de códigos pelos alemães ao longo da Segunda Guerra Mundial só foi

não foi melhor sucedida devido ao fato de que existiam múltiplos (cerca de doze) departamentos que trabalhavam sem coordenação ou cooperação entre si, o que multiplicava os esforços, muitas vezes sem resultado. Não havia um órgão central, do tipo da britânica Bletchley Park.

Uma das principais e mais competentes organizações alemãs de criptoanálise era a B-Diens (Beobachtungsdienst)90, um departamento naval. Criada em 1930, entre 1935 e 1939 já havia quebrado as cifras usadas pela Marinha Britânica de modo tal que conhecia a posição de todos os navios ingleses, quando do início da guerra.91

A unidade B-Diens quebrou a British Naval Cypher No. 3, o que ajudou a Alemanha na Batalha do Atlântico, até que o Almirantado inglês introduzisse a Naval Cypher No. 5 em 10 de junho de 1943.92 Quebrou também várias cifras da marinha mercante inglesa, e em 1942 podia acompanhar toda a comunicação dos Aliados com os seus comboios.

Antes que os Estados Unidos entrassem na guerra, a B-Diens podia ler todos os seus códigos. Com a recusa americana em equipar os navios ingleses com a sua ECM Mk.1, o Almirantado inglês usou a Naval Cypher No. 3, que logo foi quebrada pelo B-Diens. Entre dezembro de 1942 e maio de 1943, 80% das mensagens interceptadas por rádio foram lidas pelos alemães. Entretanto, o tempo levada na desencriptação tornava quase inútil a utilidade destas mensagens; apenas cerca de 10% eram lidas em tempo hábil necessário para uma ação efetiva. Os códigos soviético e dinamarquês foram também quebrados.

Uma outra unidade alemã, a Reichspost, conseguiu desembaralhar as transmissões de rádio entre os EUA e a Grã-Bretanha,93 através de uma estação de

88 Era tão secreto que nem os presidentes Roosevelt e Truman o conheciam. 89 O julgamento contra eles não pode usar as provas conseguidas pela Inteligência, para não revelar o fato de que os EUA conheciam as cifras secretas soviéticas (e tinham os seus próprios espiões em solo russo). Quando se tornou público, o Venona serviu para recuperar a imagem do senador norte-americano Joseph McCarthy, que iniciou (nos anos 1950) uma investigação no Congresso a respeito da infiltração comunista-soviética na sociedade americana. Atacado pela imprensa e por liberais, que arruinaram a sua reputação, os documentos Venona viriam a lhe dar razão. 90 Serviço de Vigilância. Ver: http://www.freerepublic.com/focus/fr/935929/posts. Ver também: http://en.wikipedia.org/wiki/Venona_project. 91 Havia também a xB-Dienst (Serviço de Criptoanálise), que era habilidosa em quebrar as comunicações efetuadas por rádio, pelos Aliados. 92 Tradicionalmente, os ingleses eram lentos em trocar os seus códigos. Talvez por isto tenham sido quebrados todos os códigos de baixo nível usados pela Marinha e pela Força Aérea, tais como Cofox, Medox, Foxo, Loxo, Syko. A máquina de cifrar americana Hagelin (usada em campo) e o código francês Anglp também eram lidos regularmente pelos alemães. 93 As transmissões usavam um scrambler de voz Sigsaly, que era um sistema one-time pad. Ele adicionava ruído ao sinal, o qual era removido na recepção.

monitoramente construída em Noordwijk, na Holanda ocupada. Mesmo conversações telefônicas sigilosas entre o Presidente Roosevelt e o Primeiro-Ministro inglês Winston Churchill eram interceptadas e compreendidas.

A partir de 1943, com o uso de códigos mais fortes, as mensagens dos Aliados não puderam mais ser quebradas pelos alemães.

2.4.4.1 – A Máquina Enigma A Segunda Guerra Mundial trouxe um dos maiores desafios aos criptoanalistas

em geral. As ofensivas alemãs, de um modo geral, tinham suas mensagens secretas protegidas pela famosa máquina de encriptação conhecida como Enigma.

Em 1918 o alemão Arthur Scherbius inventou uma máquina de criptografia conhecida como Máquina Enigma. A partir de 1925 o exército alemão, que procurava um sistema de cifras seguro, concluiu que esta máquina servia aos seus propósitos, e em 1928 começou a usar uma versão dela, a Enigma G,94 que tinha como garantidor de segurança a troca periódica mensal de suas chaves.

Essa máquina era elétrico-mecânica e incialmente possuía três rotores, evoluindo depois para um modelo de oito rotores. Sua aparência era a de uma máquina de escrever, mas quando o usuário pressionava uma tecla, o rotor da esquerda avançava uma posição, provocando a rotação dos demais rotores à direita, sendo que esse movimento gerava diferentes combinações.

Versões da máquina Enigma

A Máquina Enigma ou Máquina de Cifra ou Máquina de Codificação Assistida

utilizada ao longo da guerra era um modelo eletro-mecânico que usava um sistema polialfabético de 26 caracteres, no qual uma série de rotores encadeados (cada um contendo 26 letras) introduzia uma imensa quantidade de possibilidades a cada codificação, tornando quase impossível o processo de desencriptação.

Os caracteres iam sendo codificados à medida que as letras do texto claro eram digitadas no teclado; cada rotor tinha 26 contatos elétricos que giravam em 1/26 avos a cada passo, a cada digitação, modificando a configuração interna. 94 Até 1945 chegaram a ser vendidas 30.000 unidades para as forças armadas alemãs. Uma versão ligeiramente diferente foi fornecida para os japoneses, que a usaram para construir a sua Máquina Púrpura.

A cada salto, cada rotor ia fazendo com que os rotores seguintes se movimentassem. Havia máquinas com quatro cinco ou até seis rotores, o que dava, respectivamente, 264 (456.976), 265 (11.881.376) ou 266 (8.031.810.176) possibilidades de codificação, antes que a configuração inicial fosse repetida. Era baseada em um sistema de chaves, ou Livro de Códigos, cujas cópias deviam ser distribuídas em imensa quantidade para os diversos comandos nas várias regiões de conflito. Para dificultar qualquer processo de tentativa de desencriptação os rotores podiam ser intercambiados entre si, o que, junto com a mudança constante das chaves, dificultava sobremaneira a tarefa dos criptoanalistas. Posteriormente surgiram outras máquinas semelhantes à Enigma, mas aperfeiçoadas de forma a dificultar o mais possível a desencriptação.

A máquina Enigma, apesar de sua aparência inexpugnável, teve suas cifras quebradas pelo notável matemático inglês Alan Turing.95

2.4.5 – A Criptologia Inglesa Durante a Primeira Guerra Mundial o escritório de criptoanálise na Inglaterra era

conhecido como Sala 40, por se encontrar na sala 40 de Whitehall, Londres, onde se situava o Ministério da Guerra. Nela agrupavam-se os maiores especialistas em decifração, comandados pelo Almirante William Reginald Hall. A Sala 40 foi responsável pela quebra, entre outros, do código utilizado pela marinha alemã ao longo da Primeira Guerra Mundial. Foi nesse período que teve início um intensivo processo de escuta de mensagens transmitidas pelo rádio (de invenção muito recente).96

Na década de 1920 o governo britânico procurava por uma Cifra que substituísse

o seu sistema de códigos, considerado lento e inseguro. Em 1926, foi formado um Comitê inter-governamental para esta finalidade. A sugestão do Brigadeiro O. G. W. Lywood de adaptar a máquina Enigma97 adicionando uma unidade impressora foi ignorada na época, sendo levada em conta apenas em 1934.

Em agosto de 1934 surgiu o primeiro protótipo de uma máquina codificadora, a Typex Mark I 98 Por volta de 1937 já havia cerca de 30 máquinas em operação.

A Typex era baseada na máquina comercial Enigma que incorporava um número

de características a mais, para aumentar a segurança. Por exemplo, tinha cinco rotores (contra três ou quatro na Enigma), sendo que os dois primeiros ficavam estacionários, embora pudessem ser acionados à mão. Os rotores continham múltiplos entalhes que poderiam eventualmente acionar os rotores vizinhos.

95 Singh apresenta em sua obra uma descrição bastante adequada de como foi realizado o processo de quebra da Cifra Enigma. 96 Calcula-se que durante a Primeira Guerra Mundial foram transmitidas cerca de dois milhões de palavras por mês, valor este que se tornou diário, ao longo da Segunda Guerra Mundial. 97 Que tinha um modelo cormercial à venda. 98 Alternativamente: Typex; Type X; TypeX.

Typex Mark II

Em 1938 foi aprovada uma máquina de cifras mais aperfeiçoada, a Typex Mark

II (da qual foram construídas 350 unidades), que incorporava duas impressoras, uma para o texto plano e outra para o texto cifrado. A máquina foi adotada pela marinha e pelo exército inglês, bem como por departamentos do governo. Devido às dimensões e ao peso do modelo MK II, foi desenvolvida a Typex Mark III, menor, embora mais lenta na velocidade de letras por minuto (60, contra 300 letras por minuto da MK II).

Typex Mark III

Em 1941 foi desenvolvido um modelo de máquina cifradora, a Combined Cipher

Machine – CCM, que começou a ser usada pela Marinha Real em novembro de 1943. A CCM foi implementada a partir de modificações feitas na Typex e ECM Mark II Americana; elas eram, portanto, inter-operáveis.99

A Typex, em todas as suas versões, tinha várias vantagens sobre a máquina Enigma: • exigia apenas um operador, contra dois da Enigma; • usavam teleimpressoras (opcional, no caso da Typex II);100 • o processo de codificação/decodificação era mais simples e mais rápido nas Typex;

99 Embora os britânicos tivessem passado os dados da máquinas Typex para os americanos, estes jamais permitiram que aqueles conhecessem profundamente a máquina ECM, considerada mais avançada. 100 As máquinas teleimpressoras alemãs equivalentes a eram a Lorenz SZ 40 e a Siemens e Halske T52 usando Cifras Fish.

• as mensagens eram menos sujeitas a erros, nas Typex.

Posteriormente os ingleses desenvolveram a Typex Mark VI, a Typex Mark VIII (esta era uma Mark II com um perfurador Morse), a Typex 22 e a Typex 23. Esta última era uma Typex 22, modificada de forma a poder trabalhar com a Combined Cypher Machine – CCM.

Typex 23

Um modelo de Typex sem rotores foi capturada pelos alemães durante a Batalha da França, e mais de uma unidade criptoanalítica alemã tentou quebrar a sua cifra. Como a unidade tinha sete rotores, foi declarado que a máquina era mais segura do que a Enigma, e portanto, inquebrável. Com isso, cessaram as tentativas neste sentido.

A Mark 23 e a Mark 22 foram modificadas para serem usadas junto com a CCM.

As máquinas Typex continuaram a ser usadas até os anos 1970. Na Nova Zelândia, a Mark II e a Mark III foram substituidas pela Mark 22 e

Mark 23 em Janeiro de 1950; o seu uso foi descontinuado em 1973. As operações especias britânicas usaram as one-time pads para codificar o

tráfego entre seus escritórios. As máquinas one-time incluíam as Rockex e Noreen.

CAPÍTULO III

FUNDAMENTOS DA CRIPTOANÁLISE CLÁSSICA

3.0 – Criptografia Tática e Criptografia Estratégica De acordo com Sgarro, o objetivo da criptografia tática é o de manter indecifradas as mensagens por um curto período, apenas o suficiente para que ocorram fatos as curto prazo. Neste caso, mesmo que sejam decifradas, e desde que não o sejam rapidamente, as mensagens terão valor apenas tático e imediato, sem valor para o presente e o futuro. A criptografia tática tem, então, valor apenas imediato. Já a criptografia estratégica deve garantir o segredo das mensagens cifradas por um período extenso, o maior possível. Se as chaves desse tipo de criptografia são quebradas pelo inimigo, isto trará conseqüências e prejuízos irreparáveis. Dessa maneira, a criptografia estratégica tem maior atenção tanto do criptógrafo quanto do criptoanalista. Atualmente, a criptografia estratégica não abrange apenas os campos político e militar, pois invadiu outras áreas, comerciais, industriais, de pesquisa, etc., mas cuja importância estratégica exige que sejam usados métodos seguros de criptografia. O famoso criptólogo holandês do século XIX, Auguste Kerckhoffs von Nieuwenhof (1835-1903), emitiu um importante princípio até hoje seguido:

A segurança de um sistema estratégico é confiada inteiramente, ou pelo menos essencialmente, ao segredo da chave.101

Ou seja, se o inimigo descobre o método de cifragem, isto não garante que a chave possa ser descoberta.102 Para Kerckhoffs, a segurança do sistema repousa no sistema de chaves, e ele diz que os amadores tendem a crer que um número muito grande de chaves aumenta esta segurança.103 De todo modo, os sistemas criptográficos devem repousar, com toda certeza, na segurança da chave, que, no caso de chave fixa, é a menos segura.104 Quanto ao criptoanalista, a sua tarefa é exatamente esta: quebrar a chave e decifrar a mensagem.105 Para isto, ele dispõe dos métodos oferecidos pela ciência.

3.1 – A Lingüística e a Teoria da Informação A linguagem escrita, em qualquer idioma moderno, repousa em um conjunto de

caracteres que constituem o alfabeto desta língua.

101 Kerckhoffs é autor da obra sobre criptografia militar, La Criptographie Militaire. 102 Quando o inimigo consegue se apoderar de uma máquina de cifragem, esta tática facilita em muito a descoberta das chaves utilizadas. 103 Ele afirmava que apenas os especialistas podem opinar acerca da segurança de um sistema de criptografia. Entretanto, mesmo os profissionais podem ser vítimas de ilusão: o século XIX mostrou uma intensa rivalidade entre criptólogos – o próprio Kerckhoffs, os franceses Étienne Bazeries e Gaëtan de Viaris – que quebravam mutuamente os códigos “inquebráveis” dos rivais. 104 Os cifrários de chave fixa são denominados cifrários degenerados. 105 Se o criptoanalista dispõe tanto da mensagem quanto do criptograma, e quer compreender qual foi o cifrário e qual a chave utilizados, esta situação é chamada de ataque com texto claro. Na verdade, este é o método que os lingüistas utilizam para a decifração das línguas mortas.

A linguagem escrita pode ser dividida (de um modo simplificado) em sistema incompleto e sistema completo.

Sistema incompleto: é caracterizado pela linguagem chamada pictórica, pictográfica ou hieroglífica. Nele, as idéias são simbolizadas por cenas ou figuras estilizadas, e não tem nenhuma relação com a linguagem oral. Os caracteres representam, em sua maior, parte, os sons distintos.

Sistema completo: classifica as linguagens em três tipos: ideográfica; silábica; alfabético/fonética ou alfabético/fonológica.

• Ideográfica: em que se usam ideogramas que representam coisas ou idéias completas. É escrita com centenas ou milhares de caracteres (cerca de cinco mil, no idioma chinês básico);

• Silábica: sistema de escrita no qual cada símbolo é a combinação de sons de consoantes e vogais que representam uma sílaba (silabismo). Escritas silábicas costumam ter entre 50 a 100 caracteres silábicos.

• Alfabético/fonética: em que se busca uma aproximação entre um signo e um som (característica dos idiomas modernos);

• Alfabético/fonológica: em que há uma estrita correspondência entre o signo e o som. Está mais próxima da linguagem oral, em qualquer idioma. Escritas puramente alfabéticas costumam ter entre 20 e 40 caracteres (o idioma

russo tem 36; o idioma arábico tem 28). De acordo com Berlitz106, existem cerca de 400 sistemas de escrita no mundo,

antigos e modernos, e os alfabetos, incluindo as variações de letras, baseiam-se, em média, em 28 sinais em caracteres latinos, cirílicos, hebraicos, gregos, romanos, etc (não consideradas as escritas cursivas, como o árabe, por exemplo).

No alfabeto japonês, a escrita é formada em parte com caracteres ou ideogramas chineses (a escrita kanji), em parte com uma escrita silábica simplificada chamada escrita hiragana (usada em terminações verbais e quando os caracteres chineses não são empregados) e um escrita angulosa, o alfabeto silábico katakana, usado para escrever palavras e nomes estrangeiros.

No alfabeto coreano, os ideogramas chineses foram substituídos por um alfabeto silábico simplificado, constituído de 14 consoantes e dez vogais.

O idioma chinês é escrito atualmente com cerca de seis mil caracteres ou ideogramas;107 embora haja várias línguas faladas (entre elas o mandarim e o cantonês), elas são mutuamente compreensíveis através da linguagem escrita. Nessa, cada sílaba pode ter quatro tons, sendo que algumas delas podem ter 50 significados diferentes. Além disso, uma mesma pronúncia pode corresponder a caracteres ideográficos (escritos) diferentes, que conduzem a idéias diferentes.

3.1.1 – Significante e Significado Um texto literário em qualquer idioma constitui um conjunto de signos e

relações entre signos, que lhe dão um significado. O texto, redigido conforme um conjunto de regras de gramática e de sintaxe, possui uma estrutura significante, ou seja, o texto deve fazer sentido, para o leitor.108 Assim, além das características

106 BERLITZ, 1988, p. 112. 107 Na época das grandes dinastias, os caracteres da língua chinesa somavam cerca de 50 mil ideogramas. 108 Mesmo textos tão densos e inextricáveis como as obras de James Joyce (Ulisses e Finnegans Wake), ou mesmo a desconhecida Hypnerotomachia Poliphili , devem possuir um significado intrínseco que

“construtivas”, o texto (pelo menos o texto literário) deve possuir, necessariamente um significado.

A criptoanálise tem por objetivo decifrar um texto cifrado cuja mensagem original, ou mensagem clara, repousa em um idioma falado, que, por sua vez, tem uma correspondência com signos escritos que possuem significado.

Isto significa que, uma vez decifrado o código, a mensagem pode ser lida, sem qualquer problema de interpretação, pelo destinatário (ou seja, a mensagem faz sentido, porque possui um significado, para o seu destinatário legítimo).

Por outro lado, o texto ou mensagem cifrada, não deve fazer sentido para quem não pode decodificá-lo. Mas aquele que a intercepta, naturalmente, tem todo interesse em realizar a sua leitura, para o que apelará para todos os recursos disponíveis.

Este recursos, atualmente, são oferecidos pela Teoria da Informação, pela

Linguistica, pela Informática, pela Lógica, etc. De acordo com Kondratov,

... a teoria da informação permite encontrar a quantidade de informação contida em mensagens compostas de sinais de códigos tão equiprováveis quanto de probabilidades diferentes. Toda língua constitui exatamente um ‘código de probabilidades’.109

Em qualquer idioma, existem consoantes e vogais110 formativas das palavras, e

as estruturas rígidas do idioma obrigam a que tais signos se sucedam conforme uma ordem necessária, que resulta da formação histórica do idioma. Assim, a maioria das palavras possui sufixos em abundância, de duas (dígrafos ou digramas), três (trígrafos ou trigramas) ou mesmo quatro letras (quadrígrafo ou quadrigrama).

É esta característica que permite a formação de tabelas de freqüências de letras e n-gramas dos idiomas mais conhecidos (e até dos menos falados).111

3.1.2 – Tabelas de Frequências A seguir, serão mostradas as tabelas estatísticas das letras mais freqüentes,

digramas, trigramas, letra individual mais freqüente e percentual de vogais de alguns dos idiomas mais falados no mundo:112

possa ser decodificado em uma leitura, ainda que essa leitura seja “difícil”. É evidente que a “leitura” depende do nível de educação do leitor, e de sua capacidade de semanálise (cf. Julia Kristeva). 109 KONDRATOV, 1972, p. 39. 110 Nos idiomas em que as vogais não costumam ser escritas, não significa que elas não existam. No hebraico moderno, por exemplo, costuma-se acrescentar sinais diacríticos chamados sinais massoréticos (ou Nekudot – niqqud, no singular) para indicar a sua pronúncia. 111 Uma das fontes mais conhecidas e utilizadas para pesquisas, do idioma inglês (e cuja metodologia serviu de base para pesquisa de outros idiomas), é o chamado Corpus Brown, elaborado pela Universidade Brown, dos EUA. Ver: http://en.wikipedia.org/wiki/Brown_Corpus [Corpus: uma vasta coleção de obras literárias em vários gêneros e estilos, cujo conteúdo (as palavras utilizadas) sejam representativas do idioma inglês]. 112 A Estatística Lingüística foi uma das novas ciências que veio em socorro dos criptoanalistas, os quais se servem generosamente das tabelas de distribuição estatística. Nas tabelas, os digramas e trigramas não estão em ordem de frequência.

Inglês: E T A O I N S R H L D C U M F P G W Y B V K X J Q Z

Digramas: AN AS AT BE BY CH DO EA ED EE EN ES ER GH GU HE IF IN IS IT ME MY NT OF OO ON OR OW PH QU RE SH SO ST TO TH TT UP WE WH

Trigramas: AND FOR ENT EST FOR HAS HIS ION NDE THE THA TIO Letra mais frequente: E (12%) Percentual das vogais: 40% Índice de frequência das letras:113

O gráfico a seguir mostra a distribuição de freqüências de letras do idioma

inglês. As letras mais freqüentes são a letra e, t, a, o, n, i e as letras menos freqüentes, as letras z, j, q, x.

113 Os números entre parênteses representam um Corpus menos extenso que o anterior.

Francês:

E N A S R I U T O L D C M P V F B G X H Q Y Z J K W Digramas: ES EN OU DE NT TE ON SE AI IT LE ET ME ER EM GN LL EU QU GU Trigramas: AIT AIS ANS ANT AUX ENT EAU ION LES ONT OUR OUS QUE TIO Quadrigrama: EAUX

Letra mais frequente: E (16%) Percentual das vogais: 45% Índice de frequência das letras:

Texto em Francês:

La Française des Jeux a créé sa propre équipe cycliste en 1997. L'entreprise

souhaitait augmenter sa légitimité dans le milieu sportif en complétant l'action de sa fondation d'entreprise et en devenant gestionnaire d'un projet sportif de tout premier plan. La Française des Jeux fait aujourd'hui figure de sponsor engagé, très impliqué dans la gestion de l'équipe et dans la lutte anti-dopage.

Espanhol:

E A O S R I N L D C T U P M Y Q G V H F B J Z K W X Digramas: AD AL AR AS CH CO DE EN EL ES ER LA LL ON OR OS RA RE ST RR TA UE Trigramas: ADO AQU ARA CIO DEL EDE EST IST NTE NEI OSA PER QUE SDE Letra mais frequente: E (13%) Percentual das vogais: 47%

Alemão:

E N R I S T U D A H G L O C M B Z F W K V P J Q X Y Digramas: ÄU BE CH DE DI EI EL EN ER EU GE IE NE ST TE UM Trigramas: CHE CHT DIE DEN DER EIN GEN ICH SCH TEN UND UNG

Letra mais frequente: E (18%) Percentual das vogais: 40%

Texto em Alemão:

Der Telekommunikationssatellit Astra K1 ist am Dienstag nach seinem Start mit

einer russischen Rakete außer Kontrolle geraten. Er habe seine geplante Umlaufbahn nicht erreicht und werde sie nie erreichen, sagte ein Sprecher der russischen Raumfahrtbehörde. Der Satellit werde nun nutzlos im All kreisen, bis er wieder auf die Erde zurückfalle.

Italiano:

E I A O R L N T S C D P U M G V H Z B F Q J K W X Y Digramas: AL AN CH DE DI EL EN ER ES GH GN GL NT ON RA RE SC SI TI Trigramas: ARI ATO CHE DEL ECO EDI ERE EST IDE QUE ZIO Letras mais frequentes: E A (11% cada uma) Percentual das vogais: 48%

Texto em Italiano:

Abbiamo cercato di venire incontro in modo unitario ed equo, alle richieste per

una piena unione che ci sono state sottoposte da parte di fedeli già anglicani provenienti da varie parti del mondo negli anni recenti», ha detto Levada. «Con tale proposta la Chiesa intende rispondere alle legittime aspirazioni di questi gruppi anglicani per una comunione piena e visibile con il Vescovo di Roma, il successore di san Pietro». «L’annuncio di questa costituzione apostolica pone fine ad un periodo di incertezza per questi gruppi che hanno nutrito speranze di nuove vie per abbracciare l’unità con la Chiesa cattolica.

Português:114

A E O S R I N D T M U C P L G Q V B H F X Z J Digramas: BL BM BN BR BS BT CH CN CR CT FR FT GL GM GN GR GU LH MB MP NÇ NH ND NT NS NV OB OU PL PR PT QU RR RT SC SG SÇ SP SS ST TR XC XP XT Digramas nasais: AM AN EM EN IM IN OM ON UM UN ÃO ÔE Trigramas: ABS AÇO ADA ADO AVA BST ÇÃO CIA DST EMA EDO EXT FAZ GUI ICA ICO IÇO ADE EDO IDO ITE IVA ODO OSO ÕES NSC NST NSP NGU OCA UDO ULA ULO UNA Quadrigramas: ANÇA ANDO ANTE ARIO CULO DADE EIRA EIRO ENTE ENTO IÇÃO INHA Letra mais freqüente: A (11%) Percentual das vogais: 40% Indice de frequência das letras: 115

114 Não estão incluídas as freqüências das letras K, W e Y, de introdução (oficial) muito recente no idioma. Análises de freqüências de letras de textos (pequenos) em português podem ser feitas com o Processador Lingüístico de Corpus encontrável em : http://linguistica.insite.com.br/corpus.php. Igualmente, em: http://www.richkni.co.uk/php/crypta/freq.php.

De acordo com Cherry,

As estatísticas de línguas tem sido da maior improtância há séculos, especialmente para o propósito de auxiliar a decifração de códigos secretos e criptogramas, para satisfazer necessidades militares e diplomáticas. A primeira tabela de freqüências de letras a ser publicada foi provavelmente a de Sicco Simonetta, de Milão, no ano de 1380; outra, usada por Porta em 1658, incluía digramas também (pares de letras, tais como ed, st, tr).116

O conhecimento das tabelas de freqüências permite identificar facilmente qual

idioma foi utilizado em um determinado criptograma.117 Por exemplo, no texto cifrado:

ASURULTREAEEUETNQHTNMARNCTTRLYNUEEEIQETOEAENOMTEC a análise de frequência permite deduzir, pela distribuição estatística das letras, que se trata do idioma francês. (Cf. Moles).

3.1.3 – A Redundância e Outras Características dos Idiomas Os idiomas (modernos) são formados por letras (vogais ou consoantes),

estruturadas em forma de palavras, as quais também formam outras estruturas, as sentenças (ou, como são também chamadas, enunciados ou sintagmas118).

Em razão das regras sintáticas, as consoantes e as vogais formam relações (ou “coerções”119) que determinam um tipo de comportamento sintático, que permite prever, 115 Os índices numéricos aqui apresentados podem ter alguma variação, quando comparados com outros índices; isto depende do Corpus utilizado, entre outras coisas. 116 CHERRY, 1971, p. 71. 117 Isso se ele (o criptograma) foi formado utilizando o sistema de transposição de letras. 118 Sintagma é uma seqüência de elementos lingüísticos unidos por uma relaçào que decorre do caráter linear da língua, em virtude do qual um termo adquire valor opondo-se ao termo que o precede ou que o segue, ou a ambos. A noção de sintagma aplica-se não só às palavras, mas aos grupos de palavras, às unidades complexas de qualquer dimensão e qualquer espécie ou seqüência de palavras que constituam uma unidade: palavras compostas, derivadas, membros de frases ou frases inteiras. (Cf. Saussure). 119 Cf. Colin Cherry.

em certa medida, letras ou palavras em sucessão a um grupo dado de signos (grupos sintáticos tais como dígrafos, trígrafos, etc.). As “coerções” também determinam, dentro de um texto, a extensão das palavras, a proporção das vogais, a proporção das consoantes, a quantidade de palavras e espaços em sentenças ou parágrafos, etc.

Esta propriedade do idioma é conhecida pelo nome de redundância. Conforme diz Pignatari,

Por sua própria natureza, a comunicação é uma espécie de processo variável e estatístico condicionado pela interdependência dos sinais, ou seja, pelas normas e regras que os relacionam e que decidem sobre o seu grau de informação. As regras sintáticas introduzem redundância na mensagem, a fim de que a sua recepção correta fique melhor amparada. São essas leis ou normas que dão estrutura ao sistema, de modo a permitir previsões de comportamento ou de ocorrência de sinais. Por exemplo: por que não se base à porta menos de duas vezes? Justamente para neutralizar o ruído ambiente, evitar a ambigüidade e garantir a efetiva transmissão da mensagem. A redundância pode ser entendida simplesmente como repetição; é causada por um excesso de regras que confere à comunicação um certo coeficiente de segurança, ou seja, comunica a mesma informação mais do que uma única vez e, eventualmente, de modos diferentes. De outro lado, quanto maior a redundância, maior a previsibilidade, isto é, sinal redundante é sinal previsível.120

De acordo com Colin Cherry,

A redundância pode ser considerada em dois níveis, o sintático e o semântico. A redundância sintática implica adições a um texto; algo mais é dito ou escrito do que o estritamente necessário para comunicar uma mensagem.121

A redundância sintática geralmente é a responsável pela quebra de códigos. Por

exemplo, a quebra do código gerado pela máquina Enigma, na Segunda Guerra Mundial, deveu-se, em parte, ao uso abusivo de chaves óbvias (chamadas cílios); às redundâncias no texto (tais como as iniciais do operador no início da mensagem); ao uso de cumprimentos desnecessários; etc. (Cf. Singh).122

3.1.4 – A Reconstituição de Palavras e Textos A redundância permite reconstituir uma palavra degenerada (à qual faltam

algumas letras), pela análise de sua forma. Eis alguns exemplos:

120 PIGNATARI, 1969, p. 55. 121 CHERRY, 1971, p. 188. A redundância semântica ocorre quando o conteúdo das palavras constituintes nucleares se repete no significado das palavras constituintes secundárias, trazendo como conseqüência frases tautológicas (ex: isto está errado, porque não pode estar certo). 122 De um modo geral, o fenômeno sintático da redundância permite quebrar a maioria dos códigos e cifras.

A palavra T CN CA permite razoavelmente supor que as letras faltantes sejam É e I: TÉCNICA.

A palavra POL T CA, da mesma forma, permite reconstituir a palavra: POLÍTICA.123 ______________________________________________________________________

Mas não é apenas o aspecto da redundância que permite recuperar palavras

(aparentemente) sem sentido. Mesmo em textos longos e embaralhados, a mente consegue fazer maravilhas. Vejam-se os exemplos a seguir.

De aorcdo com uma peqsiusa de uma uinrvesriddae ignlsea, não ipomtra em

qaul odrem as lteras de uma plravaa etãso, a úncia csioa iprotmatne é que a piremria e útmlia teras etejasm no lgaur crteo. O rseto pdoe ser uma bçguana ttaol, que vcoê

anida pdoe ler sem pobrlmea. Itso é poqrue nós não lmeos cdaa ltera isladoa, mas a plravaa cmoo um tdoo.

35T3 P3QU3N0 T3XTO 53RV3 4P3N45

P4R4 M05TR4R COMO NO554 C4B3Ç4 CONS3GU3 F4Z3R CO1545

1MPR3551ON4ANT35! R3P4R3 N155O! NO COM3ÇO 35T4V4 M310 COMPL1C4DO,

M45 N3ST4 L1NH4 SU4 M3NT3 V41 D3C1FR4NDO O CÓD1GO QU453 4UTOM4T1C4M3NT3, S3M PR3C1S4R

P3N54R MU1TO, C3RTO?124 ______________________________________________________________________

Sob outro aspecto, a redundância também ajuda a reconstituir palavras cuja

formação sofre o efeito de severas regras gramaticais. Por exemplo (em português), o grupo QU é invariavelmente seguido pela letra E

(QUE); as letras N e H costumam se juntar, em um dígrafo nasal (NH); as letras P e B são sempre antecedidas por M; e antes de T e D não vai M e sim, N (NT e ND).

De acordo com Moles,125

... a informação, a originalidade máxima, é transportada por mensagens, das quais todos os n símbolos têm probabilidades iguais pi = p. É a distribuição igual das probabilidades que fornece com efeito o máximo de escolha. Se numa caixa tipográfica, a letra W apresenta uma probabilidade de ocorrência pw muito fraca e, portanto, nos informa de muitas coisas por sua presença, é unicamente porque, em detrimento seu, há letras bem mais freqüentes; a letra e, por exemplo, ao contráfio, nos fornecerá muito poucas informações sobre uma particularidade qualquer da mensagem. Os criptógrafos sabem

123 A falta das vogais não é tão prejudicial para a recomposição das palavras quanto a falta das consoantes (por exemplo, a sequencia O I I A não lembra, necessariamente, a palavra POLÍTICA). 124 Textos retirados da Intenet. 125 O trecho a ser citado é extremamente importante para a criptografia, e por isto será transcrito in extenso.

muito bem que, se a presença de w numa mensagem cifrada (sem transposição das letras ou após redução dessa transposição), indica com relativa segurança em francês a presença de uma palavra estrangeira, restringe-se notavelmente, por conseguinte, o campo das pesquisas: isso não é verdade senão para um símbolo e tal vantagem é destruída pela presença de grande número de letras e, s, a, etc, das quais é preciso encontrar um número bem maior numa situação determinada, antes de aprender algo de positivo sobre a mensagem (...). Assim, sendo todas as coisas iguais, a mensagem mais original é e redigida num sistema tal que todos os símbolos são equiprováveis e onde:

p aí sendo então precisamente igual a I/n, constante aproximada,

H = – log2 I/n A medida fundamental da teoria da informação nos apresenta pois um ideal do rendimento de informação com um número limitado de símbolos: aquele em que há distribuição igual das ocorrências dos símbolos (eqüiprobabilidade), que dá o máximo de escolha possível na confecção da seqüência de elementos constituindo a mensagem.126 Shannon, (...) chamou entropia máxima a esse máximo de informação obtido com símbolos equiprováveis, fornecendo o melhor rendimento do grupo de símbolos utilizados e, desse fato, fazendo “render” os símbolos ao “máximo”. (...). Na prática, pelo menos na quase totalidade das mensagens escritas, (...), os símbolos utilizados não são equiprováveis, os pi são muito diferentes; assim, a letra w é quarenta vezes menos provável em francês que a letra e ou o intervalo127, etc. Seja H1 a informação resultante de tal mensagem. Pode-se compará-la à informação Hm que seria transmitida, se todos os símbolos fossem equiprováveis Hm = log2 I/n e se chamará, segundo Shannon, informação relativa a relação H1/Hm que é evidentemente da extensão da mensagem, desaparecendo dessa relação o número de elementos N. Essa grandeza é uma medida da originalidade relativa da mensagem de H1/Hm, variando entre 0 e 1.

A grandeza complementar H = I – H1/Hm

que chamaremos redundância, apresenta interesse muito grande; é, com efeito, uma medida do “desperdício” relativo de símbolos, efetuado na transmissão de uma mensagem. Nula quando H1 = Hm,

126 E que tornaria qualquer mensagem cifrada praticamente impossível de ser decifrada (Nota de LGA). 127 Espaço entre palavras.

isto é, quando os símbolos foram “bem” escolhidos (equiprováveis), a redundância tende para 100% (R = 1) quando é fraco o rendimento, a eficácia do modo de transmissão, caracterizado pelo vocabulário distribuído segundo as freqüências dos vocabulários, portanto da linguagem utilizada.128

Ainda de acordo com Moles,

Uma notável conseqüência da redundância que ilustra bem esse caráter de globalidade de nossos conhecimentos intuitivos sobre a linguagem é a possibilidade de fazer palavras cruzadas, isto é, ligar cada letra a sistemas de probabilidades poligramáticas diferentes. Se a redundância fosse nula, toda reunião de letras seria uma mensagem possível e significativa: seria o caso no limite de certos códigos secretos telegráficos comerciais. Se a redundância for muito elevada, a estrutura da linguagem impõe constrições internas muito rigorosas. Para se tornarem possíveis as palavras cruzadas a duas dimensões, a redundância deve ser, quanto muito de [de 45% a] 50%, enquanto se abaixaria a 33% nas que são a três dimensões.129

3.1.5 – A Análise Estoscástica

Claude Shannon, autor de expressivos estudos sobre comunicação (aberta ou

sigilosa), criou um método capaz de determinar a redundância de textos (de uma determinada classe), em média, pela observação de quanto deles é predizível ou presumível pelo leitor. Segundo Shannon, os leitores, em geral, conhecem as regras de pronúncia, ordem de palavras, gramática, expressões idiomáticas, chavões, gírias, os quais se explicam pelo conhecimento intuitivo da estatística de cadeias de letras e palavras, digramas, trigramas, ou de probabilidades de transição de letras ou palavras (“se não de suas freqüências reais, pelo menos de suas ordenações em séries” – cf. Cherry).

Shannon analisou também a formação estocástica de seqüências de letras, individuais ou agrupadas. Segundo ele afirma, quando os símbolos sucessivos não são selecionados autonomamente, e as suas probabilidades dependam dos símbolos precedentes (ou seja, a seleção depende apenas da letra precedente, e não das anteriores àquela, a estrutura estatística pode ser descrita por um conjunto de transição de probabilidades pi (f), a probabilidade de que a letra i seja seguida pela letra f.130

No caso de trigramas, em que a seleção de uma determinada letra irá depender das duas precedentes, haveria um grupo de transição de probabilidades pij (k), e assim sucessivamente, no caso de n-gramas p(i, i2 ..., in) ou de transição de probabilidades pi1, pi2 ... , in-1, in para especificar a estrutura estatística.

Através do processo estocástica, e seguindo uma série de regras, são formadas, sucessivamente, “palavras” com grau crescente de similitude com o idioma.

128 MOLES, 1969, pp. 66-68. 129 MOLES, idem, p. 74. 130 Teorema: “Se todas as várias possibilidades de transição pi ( j) são iguais, então os signos, ou letras, individuais, se tornam estatisticamente independentes e igualmente prováveis. Num caso assim, não existem absolutamente conjecturas preferenciais quanto a quais letras serão emitidas pela fonte; a redundância é dada pela existência de probabilidades desiguais de transição. (Cf. Cherry).

As séries de aproximações para o idioma inglês encontradas por Shannon são as seguintes:131

1. Ordem-zero de aproximação (símbolos independentes e com probabilidades

equivalentes). XFOML RXKHRJFFJUJ ZLPWCFWKCYJ FFJEYVKCQSGHYD

QPAAMKBZAACIBZLHJQD 2. Ordem-primeira de aproximação (símbolos independentes, porém com

fequencias referentes ao idioma inglês). OCRO HLI RGWR NMIELWIS EU LL NBNESEBYA TH EEI

ALHENHTTPA OOBTTVA NAH BRL 3. Ordem segunda de aproximação (estrutura digrama de acordo com o idioma

inglês). ON IE ANTSOUTINYS ARE T INCTORE ST BE S DEAMY ACHIN D

ILONASIVE TUCOOWE AT TEASONARE FUSO TIZIN ANDY TOBE SEACE CTISBE

4. Ordem-terceira de aproximação (estrutura trigrama de acordo com o idioma

inglês). IN NO ISTO LAT WHEN CRATIC FROURE BIRS GROCID PONDENOME

OF DEMONSTRURES OF THE REPTAGIN IS REGOACTIONA OF CRE 5. Ordem-primeira de aproximação de palavra (as palavras são selecionadas

dentro de suas freqüências apropriadas). REPRESENTING AND SPEEDILY IS AN GOOD APT OR COME CAN

DIFFERENT NATURAL HERE HE THE A IN CAME THE TO OF TO EXPERT GRAY COME TO FURNISHES THE LINE MESSAGE HAD BE THESE132

6. Ordem-segunda de aproximação de palavra. As transições de probabilidade

das palavras são corretas, mas não nenhuma outra estrutura. THE HEAD AND IN FRONTAL ATTACK ON AN ENGLISH WRITER

THAT CHARACTER OF THIS POINT IS THEREFORE ANOTHER METHOD FOR THE LETTERS THAT THE TIME OF WHO EVER TOLD THE PROBLEM FOR AN UNEXPECTED133

131 SHANNON & WEAVER, 1975, pp. 47-48. 132 È possível perceber que, ainda que surjam palavras reconhecíveis, o texto não faz sentido (não possui uma estrutura semântica). (Nota de LGA). 133 De acordo com Shannon, “a semelhança com o texto ordinário do idioma inglês aumenta gradativamente com cada um dos passos empreendidos na série”. SHANNON & WEAVER, idem, p. 48.

Ainda de acordo com Shannon, a redundância do inglês é de 50%. Isto significa que, ao se escrever nesta língua, metade da escrita é determinada pela estrutura da linguagem, e a outra metade, pela livre escolha do escritor.

Os processos estocásticos utilizados por Shannon são conhecidos como processos Markoff discretos. Ainda segundo ele,

Em um sistema existe um número finito de possíveis “estágios”; S1, S2..., Sn . Em adição a isto, há um grupo de transição de probabilidades, Pi (j) a probabilidade de que o sistema se encontra no estágio Si, este seguirá para o próximo estágio Sj. A fim de transformarmos o processo Markoff em uma fonte de informação, faz-se necessário somente presumir que uma letra é produzida em cada transição de um estágio para o próximo. Os estágios corresponderão “a “influência residual” das letras precedentes. (...). Dentre os possíveis processos Markoff para fonte distinta, há um grupo cujas propriedades inerentes são de grande importância na teoria da comunicação. Esta categoria especial consiste dos processos “ergódicos”, (...). Num processo ergódico todas as seqüência produzidas pelo processo têm as mesmas propriedades estatísticas, Por conseguinte, as freqüências das letras, as freqüências de digramas, etc., obtidas de determinadas seqüências, irão, de acordo com o aumento do comprimento das seqüências, avizinhar-se dos limites definidos, independentemente de uma seqüência específica. Realmente isto não é verdadeiro em relação a todas as seqüências; todavia, o grupo de seqüências ao qual não se aplica tem probabilidades iguais a zero. Portanto, a grosso modo, a propriedade ergódica de uma seqüência significa homogeneidade estatística.134

De acordo com Cherry,

Nos textos em inglês, ou nos de outras línguas humanas, as várias probabilidades de transição que governam o aparecimento das letras sucessivas são muito desiguais. À guisa de ilustração, suponhamos um teletipo que dê a seguinte seqüência: ..................................... com a chegada de ‘t|’ em que a barra representa o instante “agora”. A letra seguinte é governada por um conjunto inteiro de probabilidades condicionais e depende, no limite, de tudo quanto a precedeu. Todavia, a influência de letras e palavras várias linhas, parágrafos ou páginas atrás será muito ligeira. São as poucas letras que precedem imediatamente o “agora” que têm o maior controle, com certas exceções devidas a rígidas regras gramaticais. Mas, no que respeita à medição numérica da redundância, dispomos apenas daquelas probabilidades condicionais que têm que ser coligidas pelo trabalho paciente de criptógrafos e

134 SHANNON & WEAVER, ibidem, pp. 49-50.

estudiosos da linguagem. A tarefa de estabelecer freqüências de monogramas, digramas e trigramas é formidável, quanto mais ir além disso. O fato de que nós mesmos possamos adivinhar letras sucessivas de um texto, com bastante precisão, implica que possuímos imensos depósitos mentais de ordenações em série de letras e palavras;135 entretanto, não conhecemos as várias transições como freqüências numéricas relativas.136

3.1.6 – Informação, Informação Máxima e Redundância

Moles, analisando um texto em francês, mostra que:

Seja um texto francês de uma extensão qualquer. Procuremos a taxa de informação da língua francesa, isto é, a informação R por unidade de extensão (N = 1 signo por unidade de extensão da mensagem). Segundo a fórmula:

De acordo com o uso criptográfico, negligenciemos os intervalos entre as palavras. Conhecemos bem, pelos trabalhos dos criptógrafos, as estatísticas das probabilidades (aqui aproximadas) das letras em francês: E SAN I R T UO L DCM P Q B FGHV 17 8 8 8 8 7 7 6 6 6 4 3 3 3 1,5 1 1 1 1 1 pi 6 pII 8 pII 4 pIV 6 pV

X J K W Y Z 0,6 0,2 0,1 0,1 0,1 0,2 Condensando em grupos de letras mais ou menos equiprováveis: 1 pI = 17% 6 pII = 6 x 8 = 47%137 3 pIII = 3 x 6 = 17% 4 pIV = 4x3 = 12% 6 pV = 6x1 = 6% 6 pVI = 6x0,2 = 1% A taxa de informação na língua francesa escrita considerada como uma seqüência de letras é:

135 A quebra de um código, como resultado do trabalho paciente de decodificação por um criptoanalista, é função, quase sempre, deste talento natural e intuitivo. 136 CHERRY, idem, pp. 279-280. 137 Os valores são arrredondados.

= 3,33 x 1,16 = 3,86 bits/unidade de extensão. A informação relativa é o coeficiente de qualidade na expressão literal do pensamento: a taxa de informação máxima para as letras que teria sido atingida se todas as letras fossem equiprováveis p = 1/26 = 4% é: Rm = 3,33 log10 26 = 4,8 bits Donde a redundância relativa às letras do francês: 4,8 – 3,86 = 10% 138 4,8

Moles determinou também a redundância bruta do idioma francês, encontrando

o valor de 55%.139 Em sua experiência, ele suprimiu gradativamente, ao acaso, porcentagens crescentes de letras de um texto, e pedia em seguida, aos leitores participantes, que tentassem recompor o sentido do texto.

No idioma hebraico, ele encontrou uma redundância bruta de apenas 10,4%. Isso permitiria, em relação à questão das palavras cruzadas vista anteriormente, que no hebraico clássico pudessem ser feitas palavras cruzadas a três dimensões.

Para compreender a questão da redundância, Moles apresenta um eixo que varia

entre 0 (redundância nula) e 100 (redundância total), e mostra as suas conseqüências sobre a linguagem:

Para Moles,

(...) o pensamento organiza, estrutura e codifica a linguagem, ligando os símbolos uns aos outros num processo de Markoff a probabilidade de cada letra j não sendo mais independente (pi) e sim dependente f (pi) da letra i que a precede: pij = pi f (pi )

138 Moles menciona em outra parte o valor de 19%. 139 Moles menciona em outra parte o valor de 45%.

3.1.7 – Escolha, Incerteza e Entropia Sendo cada fonte de informação distinta um processo de Markoff, Shannon

tentou estabelecer a proporção com que a informação é produzida. Supondo um grupo de eventos cujas probabilidades de ocorrência são p1, p2, ... , pn , que são conhecidas, a “escolha” é a quantidade envolvida na seleção de determinado evento. Desenvolvendo seu raciocínio, Shannon admitiu que, se fosse possível medir H(p1, p2, ... , pn), seria razoável supor algumas propriedades (não serão apresentadas aqui).

Para ele, a única equação (único H) que satisfaz as suas suposições é

representada pela equação:

Esta equação permite medir a quantidade de informação relativa a

acontecimentos de probabilidade desigual, calcular a informação contida em qualquer tipo de comunicação, como permite também medições da escolha e da incerteza (H é também a incerteza da mensagem, e por conseguinte, a medida da informação).140

O valor de H é uma expressão da entropia, tal como é definida na

termodinâmica.141 De acordo com Shannon,

A média da entropia de uma fonte em relação ao valor máximo que esta poderia ter ainda enquanto que restrita aos mesmos símbolos será intitulada entropia relativa. Isto, (...) é a compressão máxima possível quando codificamos dentro do mesmo alfabeto. Um menos a entropia relativa é a redundância.142

Dadas n informações X = x1, x2, ..., xn ocorrendo respectivamente com probabilidades p(x1), p(x2), ... , p(xn) , a entropia é definida pela fórmula:

Como log2[1/p(Xj)] representa o número de bits para codificar Xj, tem-se que E(X) é o número médio de bits para codificar todas as informações em X.

140 A informação anula a incerteza. Por outro lado, a ausência de redundância com o máximo de entropia aumenta consideravelmente a incerteza. Este é o fundamento do teorema de Shannon relativo aos sistemas criptográricos: se um texto desordenado não puder oferecer nenhuma informação acerca de seu conteúdo claro (ou de sua estrutura), ele não pode ser recuperado sem a chave que o desordenou. Ou seja, quanto mais desordenados estiverem os dados cifrados, mais complicado será para descobrir uma correlação entre eles e os dados puros. 141 O conceito de entropia surgiu na teoria das comunicações devido à similaridade das equações encontradas tanto na termodinâmica quanto na teoria dos sistemas. A entropia é a medida da quantidade de desordem em um sistema. Aplicado à teoria das comunicações, a entropia permite medir as relações entre informação e ruído em um canal de comunicações. A redundância em um sistema de comunicações visa exatamente diminuir a entropia do sistema (ou do canal de comunicação). 142 Ou seja: R = 1 – Er.

Imaginando X com dois elementos, a probabilidade do primeiro elemento igual a p e a do segundo elemento igual a q, onde p = 1 – q.

E(X)= – p (plog p + qlog q)

3.1.8 – Incerteza Relativa e Redundância Considerando uma única página de texto do inglês escrito, e considerando os

valores da tabela abaixo, Elwyn Edwards apresentou os seguintes cálculos para a incerteza relativa e a redundância do idioma:

Incerteza relativa = – ∑ pi log pi = 4,129 = 87,9 % log n 4,700 Redundância = (1 – 0,879)x100 = 12,1% 3.1.9 – A Lei de Zipf

Um dos maiores estudiosos das línguas foi o lingüista e filólogo norte-americano

Georges Kingsley Zipf (1902-1950), que foi professor em Harvard. Zipf realizou um extenso estudo de aspectos estatísticos da fala e da escrita. Ele

investigou as leis concernentes à extensão das palavras, os diferentes significados e outros fatores, tais como freqüências de letras, palavras, sílabas e de partes da oração (verbos, substantivos, adjetivos, etc.), e de aspectos relativos ao comportamento verbal das pessoas.

Ele percebeu que, enquanto que somente umas poucas palavras são usadas com mais frequência, a maioria é usada raramente. Ele mostrou que a frequência de uso (Pn) de palavras (p. ex., do inglês) e n*, sua ordem de série (rank), estão estreitamente correlacionadas através da expressão (lei de Zipf)

Essencialmente, a lei de Zipf diz que, dado um Corpus de elocuções de uma linguagem natural, a frequência de qualquer palavra é inversamente proporcional à sua ordem na tabela de frequência. Assim, a palavra mais freqüente ocorrerá aproximadamente duas vezes mais do que a segunda palavra mais freqüente; esta ocorrerá duas vezes mais freqüentemente do que a quarta palavra mais freqüente, e assim sucessivamente. Por exemplo, em inglês, de acordo com o Corpus Brown, a palavra the (a que ocorre mais freqüentemente) surge em 7% do total de palavras listadas (69.971 vezes em 1.000.000 de palavras); a palavra of (segunda no ranking) surge em 3,5% do total (36.411 ocorrências); e a palavra and (terceira mais freqüente) surge em cerca de 3,4 % do total (28.852 ocorrências).

Quando plotada logaritmicamente, a curva de Zipf apresenta a seguinte configuração:

Neste caso, a palavra the aparece plotada em:

x = log(1), y = log(69971).

A lei de Zipf prevê que em uma população de N elementos, a frequência de elementos da ordem k, f(k;s,N) é:

N é o número de palavras do idioma inglês, sendo que o expoente s é igual a 1, e f(k; s, N) será a fração de vezes na qual a kth palavra mais comum ocorre.143

3.2 – A Complexidade dos Idiomas Os idiomas, de um modo geral, apresentam uma complexidade oculta que surge,

por exemplo, quando de pretende traduzir um texto de um idioma para outro. De um modo geral, o vocabulário de um idioma reflete os principais interesses

da cultura onde ele surge e se desenvolve. Por exemplo, os idiomas de determinadas etnias indígenas possuem termos adequados que caracterizam com precisão conhecimentos zoológicos e botânicos, com conhecimentos práticos que ultrapassam grandemente o conhecimento do ocidental de nível superior. (Cf. Levi-Strauss). Outro exemplo: no idioma árabe (tradicional), existem mais de seis mil diferentes termos para designar o camelo, suas partes e os equipamentos relacionados.

Estas características idiomáticas, além, é claro, da existência de gírias (ou argot), de falares especializados (o jargão de engenheiros, médicos, advogados, cientistas, etc)144, podem dificultar sobremaneira a decifração de um texto, devido à sua imprevisibilidade.145

Conforme relata Kluckhohn,

O provérbio italiano “traduttore, traditore” (o tradutor é um traidor) é inteiramente certo. Pedi a um japonês, que tinha razoáveis conhecimentos do inglês, que me traduzisse de sua língua a frase da nova constituição japonesa que representa a nossa “vida, liberdade e busca da felicidade”. Ele traduziu: “licença para desfrutar prazer sensual”.146

Para Kluckhohn, há três espécies de tradução: a variedade literal, em que se traduz palavra por palavra, que conduz a deformações óbvias; o tipo oficial, em que se respeitam certas convenções, para a tradução de equivalente idiomáticos; a tradução psicológica, em que a tradução procura exprimir e produzir nos ouvintes os mesmos efeitos que produzem nos ouvintes do texto original.

De acordo com a lingüística, os idiomas, historicamente, passam do complexo para o simples, e sofrem três tipos de variações: mudanças na pronúncia das palavras147; mudanças na gramática; mudanças no léxico.

As mudanças gramaticais e lexicais podem ser muito profundas, tornando quase irreconhecível um texto (escrito) de um idioma arcaico.

Por exemplo, este trecho de inglês antigo é absolutamente irreconhecível:

****** hornas byrnað?’ [H]næ[f] hleoþrode ða heaþogeong cyning:

‘Ne ðis ne dagað eastan ne her draca ne fleogeð

143 Ver: http://en.wikipedia.org/wiki/Zipf%27s_law. 144 Segundo Foucault, estes “falares especializados” formam “ilhas de poder”. (Cf. Foucault). 145 Neste caso, o criptoanalista deve ter o auxílio de especialistas. 146 KLUCKHOHN, 1963, p. 154, In: O Dom das Línguas. 147 Geralmente, pela perda das inflexões.

ne her ðisse healle hornas ne byrnað Ac her forþ berað, fugelas singað,148

Ou ainda, este trecho de português arcaico:

Oy mays quer’ eu já leixa’ lo trobar e quero-me desenparar d’Amor

e quer’ ir algüa terra buscar, hu nunca possa seer sabedor

ela de mi, nen eu de mha senhor, poys que lh’ é d’eu viver aqui pesar.149

Como é possível perceber, uma análise de freqüências realizada sobre tais textos

daria uma distribuição de letras, digramas e trigramas bastante diferente da apresentada por esses idiomas, em seu aspecto atual.150

Considerando esta característica histórica, talvez pudesse ser criado um tipo de código de difícil deciframento, baseado nas estruturas arcaicas de um idioma.151 Quanto mais esta estrutura fosse desconhecida, mais difícil (supostamente) se tornaria sua decodificação (de texto cifrado para texto claro).152

A verdade é que um tipo de codificação deste tipo surgiu durante a Segunda Guerra Mundial, a qual procurava aproveitar as características de um idioma “indecifrável”, para comunicações rápidas (verbais) por rádio. O idioma escolhido foi o navajo, pouco ou nada conhecido fora dos EUA.153

Por outro lado, um idioma como o gaélico, que pode apresentar palavras

extremamente complexas tais como:

CONAS A THUIGFEADH DUINE AN GHAEILGE MARA BHFOGHLAIMEODH SE I

não serviria, realmente, para criar um código indecifrável, em virtude da sua difusão e da grande quantidade de especialistas no idioma.

148 “---- Cumeeiras se queimam?’ Hnæf lá falou, jovem na luta, e Rei. ‘Isso não é a manhã, nem nenhum dragão cá voa, nem as cumeeiras se queimam, neste salão. Algo à frente sai. Cantam pássaros, …’ ”. Trecho de poema de O Fragmento de Finnsburh, circa séc. VII-IX. Tradução de Erick Ramalho. Ver: http://www.brathair.com/revista/numeros/06.02.2006/finnsburh.pdf. 149 “A partir de hoje não quero mais trovar/e do amor me faço desertor./Noutra terra me irei refugiar/onde de mim não saiba o meu amor/e do seu nome não ouça eu o rumor/pois viver eu aqui lhe dá pesar.” Trecho de Cantiga de Amor de Mestria, das Trovas de D. Diniz. Atualização de Natália Correia. Edição exclusiva da Tertúlia do Livro, Galeria Panorama, Portugal. S/d. 150 Esta condição também demonstra que o Corpus no qual se baseia a análise de frequência é função do momento histórico do idioma. Um Corpus baseado em obras literárias do século XIX, por exemplo, traria palavras que atualmente estão em desuso. 151 O especialista Jacques Bergier fez a sugestão de se misturarem dois idiomas modernos em um mesmo texto claro, o qual seria encriptado em seguida. 152 O problema, neste caso, é que na atualidade não é difícil encontrar eruditos especialistas capazes de entender e “traduzir” a maioria dos idiomas arcaicos. Na verdade, quando o idioma é bastante arcaico e desconhecido, a tarefa de “decodificá-lo” é realmente um trabalho de criptoanálise. Em sua obra, Singh relata como se fizeram os extraordinários trabalhos de deciframento dos hieróglifos egípcios e da escrita Linear B. 153 Curiosamente, este foi um idioma que jamais foi estudado pelos antropólogos alemães, que, antes da guerra (Segunda) realizaram um extenso estudo acerca das línguas e costumes da maioria das tribos norte-americanas. A tribo navajo não foi estudada, exatamente devido à extrema dificuldade de seu idioma nativo. Kluckhohn, em seu livro, faz vários comentários acerca das peculiaridades do idioma navajo.

O idioma chinês oferece um tipo diferente de dificuldade no que se refere à sua interpretação. Em Campos (org.), encontramos:

Os caracteres ideográficos monossilábicos e não-flexionáveis proporcionam um instrumento congenial à reflexão relacional, que tem sido uma característica distintiva do pensamento e da cultura chinesa. Em virtude da estrutura da língua, a atenção se volta para as relações entre as palavras, mais do que para as próprias palavras individualmente. Embora isto se aplique, em maior ou menor grau, a todas as línguas, é particularmente relevante no caso do chinês. Em inglês, um substantivo é um substantivo e conota uma espécie de “substância” real ou imaginária. Mas em chinês, quase todas as palavras, com exceção das partículas “vazias”, podem ser substantivas, dependendo de sua posição e de sua função na sentença. A dependência da ordem das palavras e o emprego de palavras auxiliares para esclarecer os significados salientam inevitavelmente a importância das relações e do arranjo estrutural (pattern) das palavras.154

154 Yu-Kuang Chu, Interação entre Linguagem e Pensamento em Chinês, In: CAMPOS, 1977, pp. 242-243.

CAPÍTULO IV

CRIPTOANÁLISES CLÁSSICAS

4.1 – A Decifração de Textos Cifrados Clássicos Textos cifrados são escritos a partir de um texto claro em um determinado

idioma. Este idioma, naturalmente, está submetido às regras de construção lexicais e gramaticais, que por si só proporcionam uma série de possibilidades para o criptoanalista.

A existência de um alfabeto, que é a base para o idioma155, determina também o modo como as palavras são construídas. É quase impossível escrever um texto sem usar (ou abusar) de artigos e preposições, cuja posição entre as palavras os torna fáceis de identificar. Verbos, normalmente, são seguidos de artigos (matar o rei); (roubar o código). Substantivos quase sempre são seguidos de preposição e de adjetivos (casa de pedra).

Em sua construção, as palavras podem começar por uma consoante e terminar

por uma vogal (código; submarino); iniciar e terminar com consoantes (minar; manganês); iniciar e terminar com vogais (obtuso; almirante); começar por uma vogal e terminar com uma consoante (equipar; obter).

O idioma determina o número médio de palavras em uma sentença; o número médio de palavras em uma linha; o número médio de palavras em um parágrafo.156 Determina, igualmente, a concisão de uma mensagem. Conforme Kluckhohn,

Creio que pela primeira vez compreendi bem a natureza da língua quando meu preceptor de Oxford pediu-me que traduzisse para o grego algumas páginas de um retórico britânico do século XVIII, que continham a seguinte frase: “ela atirou contra ele a máxima virulência da sua invectiva”. Lutei com a frase e afinal cometi o pecado imperdoável de olhar cada palavra no dicionário inglês-grego. Meu preceptor olhou de relance a monstruosidade resultante e me encarou com um misto de desgosto, pena e espanto. “Meu rapaz – disse ele, – não sabe que a única maneira possível de traduzir isso é deinos aedeitai, ela censurou muito fortemente?”157

Em um determinado contexto, várias palavras podem tornar-se muito comuns:

minar; porto; submarino; minas; vigiar; etc.158

155 “Toda língua é também um modo especial de encarar o mundo e interpretar a existência. Oculto na estrutura de cada diferente idioma, acha-se todo um conjunto de suposições inconscientes a respeito do mundo e da vida nele”. Também: “Cada povo tem as suas classes próprias características, nas quais os indivíduos distribuem a sua experiência. Essas classes são estabelecidas principalmente pelas línguas, por meio dos tipos de objetos, processos ou qualidades que recebem especial ênfase no vocabulário e igualmente, embora de maneira mais sutil, por meio dos tipos de diferenciação ou atividade que se distinguem nas formas gramaticais.” (Cf. Kluckhohn). 156 O alemão possui muito menos palavras em um parágrafo do que o italiano, por exemplo, considerando o mesmo texto. 157 KLUCKHOHN, idem, p. 155. 158 Um pesquisador francês, o dr. Samain, descobriu que bastam oito palavras-chaves para definir o conteúdo de um artigo especializado. Assim, se o contexto é conhecido (sabe-se qual é o tema do texto cifrado), basta procurar por algumas palavras-chaves. Ao contrário, buscar algumas palavras-chaves pode

Além disso, alguns tipos de comportamentos dos operadores criam padrões que enfraquecem os criptogramas. É o caso, por exemplo, de cumprimentos desnecessários; da escolha de chaves óbvias159; do duplo ciframento de chaves; do uso de assinaturas (em forma de iniciais do operador); e, o mais fatal, do uso repetido de uma mesma chave.

4.2 – Decifrando Cifras Monoalfabéticas

O exemplo a seguir deve-se a Pujol:160 Vejamos, agora, a seguinte cifra: b x y k h x w t o v d p k a d t u o w u t d t o d x p p u h x p w x i g t o i g n p g o h t o x c p x q t o b g w x o x e g v v x i x d d p x g d y m b x b g s g i x b n d x x v d s g i u k n b x x t b v o x b g p x v g k b x g k l g i t o s p x v Aqui, as freqüências são: a = 0 h = 3 o = 15 v = 9 b = 9 i = 6 p = 10 w = 4 c = 3 j = 0 q = 2 x = 23 d = 13 k = 5 r = 0 y = 1 e = 0 l = 1 s = 5 z = 0 f = 0 m = 1 t = 12 g = 18 n = 1 u = 10

É evidente, portanto, que x=0. As freqüências indicam que “g” poderia ser “n”; todavia, o fato do agente secreto só encontrar uma vez o grupo “xg” que seria “en” e nunca “gx”, que seria “ne”, sílabas muito comuns, faz com que ele atribua à letra seguinte na ordem de frequencia, isto é, ao “o” o significado de “n”. Nesse caso, as sílabas “uo” e “to” seriam, parece, “on” e “in”. O agente secreto encontraria, por conseguinte, a sua primeira linha: t o v d p k s d t u o i n ................. i o n no qual o “d”, muito freqüente (13 vezes), poderia perfeitamente ser um “t”. Encontraria, então, o seguinte: t o v d p k s d t u o i n ... t ........ t i o n

definir o conteúdo desconhecido do texto cifrado. Esta técnica é utilizada no sistema mundial de vigilância – ECHELON – que grava automaticamente qualquer mensagem, em qualquer meio, quando palavras-chaves são detectadas. 159 De acordo com Singh, as chaves óbvias eram conhecidas como cílios, entre os criptoanalistas. 160 PUJOL, 1967, p.61.

O agente secreto sabe que o “v” é freqüente (9 vezes),o mesmo sucedendo com o “p” (10 vezes), verificando também que o “s” é muito raro (5 vezes). As hipóteses v=s e s=c são prováveis, portanto: t o v d p k s d t u o i n s t r .. c t i o n O agente descobre, assim, a palavra Instruction. O resto, em conseqüência, deixa de oferecer qualquer dificuldade.

4.3 – Decifrando Cifras Polialfabéticas

A Cifra de Vigenère, por muito tempo considerada inquebrável, foi violada por uma criptanálise realizada pelo inglês Charles Babbage, no século XIX. Babbage realizou uma pesquisa exaustiva nesta cifra, procurando por padrões ocultos.161 Sua análise permitiu descobrir que a fraqueza da Cifra de Vigenère estava no tamanho da chave, que, se fosse pequena, introduzia padrões de repetição facilmente detectáveis, que permitiam a decifração do texto cifrado.

A solução, que seria a utilização de chaves mais extensas, criava outras complicações, como a dificuldade de memorização, ou tornar mais difícil e demorado tanto o processo de codificação quanto o de decodificação. A descoberta de Babbage não se tornou conhecida, porque ele não chegou a publicá-la. Assim, atualmente o processo de criptanálise da Cifra de Vigenère é conhecido pelo nome de Teste de Kasiski ou Método de Kasiski.162 O teste de Kasiski permite deduzir o comprimento da palavra-chave usada no ciframento por substituição polialfabética. Ou seja, o criptoanalista procura descobrir o comprimento da chave utilizada.

Quando supõe ter feito esta descoberta (do comprimento da chave (n), ele forma um bloco n x n, que pode então ser tratado como uma cifra de substituição monoalfabética. Geralmente, o comprimento é deduzido quando se conta a distância entre dois grupos idênticos de letras.163

Em outra aplicação do teste de Kasiski, costuma-se substituir uma palavra comum ou possível, ao longo do texto cifrado, buscando correspondências ocultas.

Em um texto em inglês, é extremamente provável que surjam palavras tais como the, of ou and. Se a cifragem se faz unicamente por substituição, o criptoanalista pode ir tentando colocá-las ao longo do texto cifrado, até encontrar as correspondências entre letras claras e cifradas.

161 A busca desses padrões ocultos viriam se tornar parte da técnica até hoje utilizada na criptanálise, que é a busca de seqüências de letras que aparecem repetidas ao longo do texto. Para realizar uma análise de freqüências em vários idiomas, ver: http://rumkin.com/tools/cipher/cryptogram-solver.php. 162 Friedrich Wilhelm Kasiski (1805-1881), oficial do exército prussiano. Ele publicou sua descoberta no livro Geheimschriften und die Dechiffrir-Kunst (Secret Writing and the Art of Deciphering), em 1863. 163 Veja-se: http://en.wikipedia.org/wiki/Kasiski_examination (a propósito, as consultas à WIkipédia devem se limitar, se possível, aos textos originais em inglês. O motivo é a proliferação insensata da tradução automática, sem que se faça pelo menos uma revisão final, para dar legibilidade ao texto “traduzido”).

O exemplo mostrado a seguir mostra como funciona a técnica de Kasiski (cf. Sgarro). A palavra-chave é PIRACY (Pirataria), e o criptograma está mostrado logo abaixo.164

A TRITHEMIUS SQUARE AND A VIGENERE SQUARE ARE ONE AND TH E SAME THING P IRACYPIRAC YP I RAC YP I R ACYPIRAC YP I RAC YPI RAC YPIR ACY P IRA CYPI R

P BHVFTUZUU QFCRRG YCL R VKETVVRG QFCRRG YGM FNG YCL KHG QPUV TJGCO

No criptograma, nota-se que existe uma repetição do grupo QCFRRG, bem

como do grupo YCL. O primeiro se repete em um intervalo de 18 letras, enquanto que o segundo se repete em um intervalo de 24 letras.

Em razão desses intervalos, e tendo em conta a repetição após 18 letras, pode se presumir (como hipótese) que a chave é um divisor de 18. Quanto à repetição após 24 letras, pode ser igualmente presumido que a chave é um divisor de 24. Como seis é um divisor comum para 18 e 24, isto sugere que a extensão da palavra-chave seja de seis letras (sempre como hipótese).

Nesse momento, o criptograma é dividido em blocos de seis letras cada um, com o que se formam “criptogramas parciais” nos quais o primeiro é constituído pela primeira letra de cada bloco, o segundo pela segunda letra de cada bloco, e assim por diante, como mostrado a seguir (contam-se as letras do criptograma de seis em seis).

Primeira letra: P T F C T F G C P C Segunda letra: B U C L V C M L U O Terceira letra: I Z R R V R F K V Quarta letra: I U R V R R N H T Quinta letra: V U G K G G G G J Sexta letra: F G Y E Q Y Y Q G

Desse modo, cada criptograma parcial contém todos os cifrários

monoalfabéticos, o que os torna vulneráveis à análise de freqüências usada nestes casos.165

A análise de Kasiski, entretanto, só funciona se o criptograma for mais longo do

que a palavra-chave (que constitui, no caso, um período de seis letras).166 4.3.1 – O Índice de Coincidência

O Índice de Coincidência (IC) é um método desenvolvido em 1920167 pelo

criptólogo norte-americano William Friendman, para atacar cifras de substituição polialfabética com palavras-chaves periódicas.

O IC é utilizado para se determinar a monoalfabeticidade de um texto. Se este valor estiver ao redor de 0,762, a probabilidade de o texto claro ter sido submetido a

164 Evidentemente, o analista não conhece nem a palavra-chave nem a mensagem clara. 165 Esta análise mostraria que a grande incidência da letra G resulta do fato de que ela substitui a letra e, na mensagem. 166 A análise pelo método de Kasiski fica mais difícil, se a mensagem clara sofrer inicialmente um processo de transposição (ou seja, se ela for embaralhada) [veja-se o item 11.3.1.1.1 para maiores detalhes sobre este método]. 167 O método foi exposto no artigo The Index of Coincidence and Its Application in Cryptography, publicado em 1920.

uma substituição monoalfabética é muito grande. Se o índice for significativamente menor, provavelmente o texto claro foi submetido a uma substituição polialfabética.

Cada idioma possui um IC próprio, porque a frequência da ocorrência das letras é peculiar a cada um deles. Isto, é claro, altera o valor do índice.

Em um texto cifrado, a quantidade de letras geralmente não contém informação

suficiente para encontrar a variação das frequências relativas de cada letra, em relação a uma distribuição uniforme. Esta deve ser obtida, então, pelo IC. Encontrado o IC, é possível encontrar o período da palavra-chave.

Encontrado o período e conhecendo-se o algoritmo de cifragem e o idioma do texto claro, pode-se então usar o método de Kasiski para realizar a decifragem. A matemática do IC é a seguinte.

Supondo-se que x = x1 x2 x3 ... xn seja um texto de n caracteres do alfabeto, define-se o índice de coincidência de x ( Ic (x) ) como a probabilidade de dois caracteres aleatórios de x serem iguais (corresponderem à mesma letra). Ou seja:

O valor de m corresponde ao total de letras do alfabeto ( ) em questão; fi corresponde à frequência do caracter de codificação i na mensagem.

Inicialmente, faz-se uma tabela com a frequência das letras do texto cifrado e contam-se as letras n deste texto.

A fórmula dada a seguir permite calcular a probabilidade da ocorrência de cada uma das letras do alfabeto num texto cifrado, de A até Z (f1 corresponde a A e n ao número total de letras do texto analisado). Repete-se o cálculo com f2 para B, até f26 para Z.

Por exemplo, suponha-se que a letra A tenha ocorrido 13 vezes ao longo do texto cifrado, o qual possui 97 letras. Calcula-se 13(13-1) = 13.12 = 156; em seguida, calcula-se 97(97-1) = 97.96 = 9312. Basta agora dividir um pelo outro: 156/9312 = 0,01675. Repete-se o cálculo para cada letra que ocorre no texto cifrado, e somam-se os resultados parciais para encontrar o valor de IC. Valores (aproximados) de IC para alguns idiomas modernos são os seguintes:

Francês 0,0778 Italiano 0,738 Espanhol 0,0775

Português (BR) 0,0791 Português (PT) 0,7272 Inglês 0,0661

4.3.2 – Índice de Coincidência Mútua Se já se sabe antecipadamente o comprimento correto da chave, K = k1,k2, ... ,

km, usa-se o índice de coincidência mútuo (ICM) do idioma, como forma de obter as diferentes sub-chaves.

com n’ o comprimento o sub-texto j; pi os valores de referência para o idioma; os

índices i + gj calculados módulo

Caso gj = kj tem-se que Igj ≈ Ic (Pt). Resta agora calcular cada uma das sub-chaves K = k1, ....... , kj , (sendo I o comprimento da chave). Não se pode fazer o estudo de frequência das letras diretamente, como se fez para a cifra de deslocamentos simples, visto que não se tem textos, e sim sub-textos. Suponha-se que se tenha dois textos x = x1x2 ... xm e y = y1y2 ...yn. O índice de coincidência mútuo de x e y, designado por Icm(x,y) é definido como a probabilidade de um caracter aleatório de x ser igual a um caracter aleatório de y.

com as freqüências do caracter de codificação i em x e y, respectivamente. Usando-se as freqüências do idioma como referência, as diferentes sub-chaves podem ser obtidas.

4.4 – Decifrando Anagramas Uma mensagem, quando sofre a encriptação por transposição, pode se tornar

extremamente resistente à desencriptação. Veja-se o exemplo da mensagem a seguir.

MATEM O REI OIEMRMTEA168

A dificuldade em desencriptar a mensagem é proporcional ao seu tamanho. No

exemplo dado, nove letras podem ser posicionadas de 362.880 maneiras diferentes.169 Uma mensagem maior extenderia este valor a uma quantidade exorbitante.

168 Os espaços entre palavras foram eliminados. 169 O resultado surge da aplicação da fatorial do número dado: 9!

A quantidade enorme de chaves possíveis, no entanto, não garante a invulnerabilidade do processo de transposição. Este, por manter as mesmas letras, é passível de deciframento pela análise de freqüências simples, duplas e triplas e pelas regras do léxico e da gramática. Por exemplo, se o idioma português foi utilizado para o ciframento, o dígrafo QU é bastante comum, e este dígrafo normalmente costuma ligar-se às letras A (em QUAL), E (em QUE), I (em QUILÔMETRO) e O (em QUOCIENTE).

Além disso, uma grande parte das palavras em português termina em uma vogal, o que facilita recolocar um texto em ordem.

4.5 – Decifrando Sistema Homofônicos Um texto cifrado a partir, por exemplo, do idioma inglês, deveria conhecer a sua

distribuição estatística de letras para substituir as letras mais freqüentes. Neste caso, poderia ser utilizada a tabela abaixo, em que as letras mais

freqüentes são substituídas (alternadamente) por um conjunto maior de números, e as menos frequentes, por apenas um número.

O problema, nesse caso, é que a análise de freqüência permite também descobrir

a incidências das letras menos freqüentes, e isto permite a decifração do texto cifrado. Além do mais, a periodicidade na substituição (por alternância dos caracteres com símbolos múltiplos) acaba por comprometer o sigilo da mensagem, pois as torna muito previsíveis.170 4.6 – Criptoanálise do Sistema Chase

No exemplo dado anteriormente sobre este tipo de codificação, resultou o texto cifrado CLLYE–+CE.

Se o analista tiver acesso a outros textos cifrados interceptados, ele logo percebe que o total de caracteres usados é 30, com a inclusão de quatro símbolos. Isto permite deduzir (como hipótese) que há uma tabela de conversão 3x10.

170 O ideal seria a substituição ao acaso. Mas, como ainda se verá, conseguir o “acaso” não é uma tarefa fácil.

Se o método de codificação for conhecido (ele foi publicado), sabe-se que a

palavra clara tem um caracter a menos, e que a primeira letra, com certeza, está na primeira fileira (C = 1X).171

Pode-se presumir que os símbolos estarão no final da tabela. Por esta hipótese, os símbolos “– +” estarão na terceira fileira (“–” = 3Y, “+” = 3Z; Y e Z podem ser 7, 8, 9 ou 0). A ordem pode ser “– +” ou “+ –”.

1 p p . r 3 3 1 r

x q q . s y z x s C L L Y E + – C E

1 p p . r 3 3 1 r x q q . s y z x s C L L Y E – + C E

Tendo tido acesso a outros textos cifrados, o analista passa agora a compará-los

entre si. Suponha-se, por exemplo, que tenha sido interceptada a mensagem IIFFMANXSOMH.172

Novamente, a letra I está na primeira fileira. 1 1 . . . . . . . . . . t t . . . . . . . . . . I I F F M A N X S O M H Se o analista conseguir interceptar mensagens suficientes, ele logo deduz quais

as letras que estão na primeira fileira, mas não a sua ordem. Estas letras (em número de dez, na primeira fileira) são como um anagrama para a palavra-semente (neste caso, a ordenação correta é LEXICOGRAP). Assim que as letras são ordenadas, deduz-se facilmente qual é a palavra (LEXICOGRAPH).

A decodificação restante não oferecerá dificuldade.173 4.7 – A Criptoanálise do Código ADFGX O modo que será apresentado irá utilizar o método de ataque pela força bruta. Neste caso, inicia-se fazendo a contagem do número de palavras na mensagem

cifrada. O número de palavras cifradas irá fornecer a quantidade de letras da palavra-chave. No exemplo que foi dado, há sete palavras cifradas:

AAAG AAAG GDDG GFGX GXAD AFF GDD

171 Devido à introdução do algarismo 1 na fileira superior. 172 Codificação da palavra Information. 173 Naturalmente, a decodificação será dificultada, se forem usadas tabelas diferentes (com palavras-semente diferentes) para cada mensagem.

Portanto, a palavra-chave desconhecida deve ter sete letras (CANDOUR tem sete letras). Isto informa que há sete colunas na grade, a qual se preenche conforme a ordem das palavras cifradas, de cima para baixo.

1 2 3 4 5 6 7 A A G G G A G A A D F X F D A A D G A F D G G G X D

Obviamente, as colunas 6 e 7 (únicas sem o quarto caracter) não estão

necessariamente nesta ordem, e portanto, podem ser intercambiadas (se necessário) apenas entre si. Como há 120 permutações possíveis das colunas 1 a 5, e duas possibilidades para as colunas 6 e 7, o ataque por força bruta deve realizar 240 permutações, para encontrar a ordem correta das letras.

Como a grade original supostamente tem o alfabeto em ordem correta, o ataque bruto174 pode ser feito em um tempo não muito longo.

Naturalmente, se após algum tempo algum dígrafo for descoberto (como em tt, de attack, isto facilita a decifração do texto.

4.8 – A Criptoanálise do Código ADFGVX

Tome-se o exemplo dado anteriormente,

cujo criptograma final é: V D G V V D D V D D G X D D F D A A D D F D X G Se o criptoanalista não conhece o método de codificação, ele observa o criptograma. A primeira coisa que percebe é que há somente seis letras envolvidas: A, D, F, G, V, X. Em seguida ele conta as letras (24, no total), de onde deduz que uma grade 4x6 ou uma 6x4 possam ter sido usadas, e que a palavra-chave deve possuir quatro ou seis letras.

174 Este ataque consiste em testar todas as 240 possibilidades de distribuição de letras dentro da grade, até encontrar o texto claro. Note-se que não há necessidade de conhecer a palavra-chave.

Para uma transposição colunar usando uma palavra-chave de seis letras, o criptograma pode ser colocado com 96 possibilidades (6!) de distribuição dentro da grade.

Para criptogramas usando o método do “papel e lápis”, a necessidade de rapidez (aliada à lei do menor esforço) conduz à hipótese de que a palavra-chave deve possuir apenas quatro letras. O analista conta em seguida a quantidade de dígrafos do criptograma, e as suas transposições: VD – 02 DV – 03 GV – 01 VG – 00 DV – 01 VD – 02 DD – 03 DD – 03 GX – 01 XG – 01 FD – 02 DF – 00 AA – 01 AA – 01 XG – 01 GX – 01 A hipótese inicial é a de que as letras mais frequentes sejam representadas pelos dígrafos DD e DV (supondo correta a transposição). Em seguida. o criptograma é colocado dentro de uma grade 6x4 tanto na leitura horizontal quanto na leitura vertical, o que resulta em:

Supondo que foi usada a palavra-chave de quatro letras, o criptograma pode ser colocado com 24 possibilidades (4!) de distribuição dentro da grade.175 Seguindo as grades acima, podem ser feitas leituras horizontais ou verticais, o que resulta em VDGV ou VVDDAV (e demais leituras) e VDDD ou VDGVVD (e demais leituras). O criptograma apresenta uma frequência maior para os conjuntos DD e DV, e as duas grades acima apresentam três vezes o dígrafo DD. Ele deve representar, então, uma das três letras mais freqüentes em inglês, as letras e t a.176 O criptoanalista deve então

175 Supondo que o analista conheça o processo de cifração, como a maioria das palavras de quatro letras em inglês (originalmente, a criptoanálise seria feita sobre o idioma alemão, com as correspondentes adaptações na análise) possui no máximo duas vogais, possivelmente na segunda e na quarta posição (a palavra CASE, por exemplo), isto reduz as possibilidades de análise. Como a palavra-chave é recolocada em ordem alfabética, isso indica que, possivelmente, a segunda ou quarta coluna se transforma em primeira. Supondo igualmente que a palavra-chave inicie por uma consoante, a segunda ou terceira devem ser vogal. É o mais comum, em palavras de quatro letras em inglês. 176 Uma falha fatal deste código é que letras iguais são codificadas usando dígrafos iguais.

testar essas letras sucessivamente. Uma delas é representada por DD (ou DV), e vice-versa. Por surgirem três vezes cada uma na contagem, e sendo a mensagem muito curta, elas devem surgir como letra e dígrafo (e ee t tt a aa).

Ao testar as possibilidades, o criptoanalista encontra as possíveis seqüências: atta; taat; ette; teet; aeea; eaae.

Dígrafos comuns em inglês são ee e tt, mas não aa. Além disso, a palavra mais próxima do contexto é atta (de attack). Substituindo no criptograma, fica:

V D G V V D D V D D G X D D F D A A D D F D X G D V D D D D D D a t t t No criptograma, VD deve ser a transposta de DV. Refazendo, fica: V D G V V D D V D D G X D D F D A A D D F D X G D V D V D V D D D D D D a a a t t t e reagrupando: G V G X F D A A F D X G D V D D D D D V D V D D a t t a a t (Se a palavra é attack, a construção deve ser attack at. Isto completa o total de

letras – três – para a e para t). Restam os dígrafos GV, GX, FD, AA, XG (como FD surge duas vezes, e DF

apenas uma vez, ele talvez não tenha grande frequência). Continuando: A introdução de algarismos na grade não melhora significativamente a

criptografia. O que interessa é a quantidade de algarismos usados na mensagem, que talvez não ultrapassem 20% da maioria do total de letras (16,6% na mensagem attack at 10 pm). Quando os algarismos indicam horários, há dois sistemas possíveis, o de 12 e o de 24 horas. O uso do sistema de 12 horas, o mais comum, obriga a introduzir na mensagem as letras am (ante-meridien) ou pm (post-meridien). Supondo um ataque noturno, será usado pm.

Nas duas grades anteriores, em qualquer leitura surgem as letras FDXG e

DXAG, nas últimas fileiras, que sugerem uma indicação relativa a horários. Isto sugere também que a combinação certa surge da transposição correta das letras FDXG ou das letras DXAG. Entretanto, a leitura DV DD DD DV (a t t a) mostra a seqüência correta,

e como a segunda grade parece ser a correta, recolocando as letras, fica assim (supondo o uso do sistema de 12 horas):

A D G X p m

No criptograma: G V G X F D A A F D X G G V G X F D A F A D G X D V D D D V D V D D a t a a t p m Até aqui já estão identificadas quatro letras, a t p m, (que correspondem a 66,6%

da mensagem do exemplo). Posicionadas na grade à esquerda (em leitura horizontal) fica assim:

Reposicionando as letras das fileiras 3 e 5 na grade da direita segundo a ordem 3142, fica assim: F G F D A V X G

e novamente:

F G F D A V X G A D G X D V D D D V D V D D a t a c k a t p m

Restam, então, os dígrafos AV e XG, que indicam a hora do ataque a ser realizado.

Se o sistema de 12 horas foi utilizado, o algarismo inicial indicador da hora pode ser 0 ou 1, no sistema de 12 horas, e de 0 a 9, na segunda posição. Entretanto, se o primeiro algarismo é 1, o segundo só poderá ser 0, 1 ou 2.

Assim, AV pode ser 0, 1 ou 2, e XG pode ser de 0 a 9. Se AV = 1, XG pode ser 0, 1 ou 2 (dez, onze ou doze horas pm). Supondo um ataque diurno às 12 horas, provavelmente a mensagem diria at

noon (em inglês, é como se costuma indicar meio-dia).177 Como se presumiu que o

177 Se fosse o caso, as letras o e n são respectivamente a quarta e a sexta letras mais freqüentes em inglês, o que, juntamente com o dígrafo oo, muito comum em inglês, facilitaria sobremaneira a sua decifração.

horário de ataque será noturno, o horário pode ser dez, onze ou doze horas (meia-noite). Neste último caso, talvez a mensagem contivesse a expressão: midnight. Em todo caso, somente o contexto da batalha deverá permitir deduzir a hora correta.

Se várias mensagens puderem ser quebradas, o criptoanalista reconstitui com

facilidade a grade ADFGVX original.178

* * * Em resumo, a criptoanálise clássica se faz utilizando os seguintes métodos: • Análise de frequência; • Índice de Coincidência; • Teste de Kasiski.

178 Como comentário final, note-se que o criptoanalista não precisa descobrir qual é a palavra-chave, porque o deciframento pode se realizar sem ela.

PA R TE II

CAPÍTULO V

CRIPTOGRAFIA COMPUTACIONAL

5.0 – Criptografia Computacional e Matrizes 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 esteganografia). Os modernos sistemas computacionais cirptografam blocos de bits ou bytes.

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):

181 C é denominada matriz chave para o código.

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

então: .

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: 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 t ransformará em 1, e se o valor for 1, ele se tornará 0. ( ) . a OR b – O resultado será 0 se os dois operandos são 0, e 1 nos outros casos. ( ) a AND b – O resultado será 1 se os dois operandos são 1, e 0 nos outros casos. ( ) a XOR b – O resultado será 0 se os dois operandos forem iguais, e 1 se eles forem diferentes. ( )

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.

186 Ou então: V (verdadeiro) ou F (falso).

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 outro de 3 bits. Apesar de cada caracter apresentar oito dígitos, apenas sete são significativos.

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).

191 A forma hexadecimal usa a base 16, sendo que as bases binária e decimal são, respectivamente, 2 e 10.

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).

193 O que lembra o código BCD utilizado em computadores.

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 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 6.0 – Criptografia Simétrica e Assimétrica A criptografia moderna pode ser agrupada em famílias: as mais comuns incluem

os sistemas simétricos (DES e AES, p. ex.) e os sistemas assimétricos (RSA, p. ex.). Outras famílias incluem o algoritmo utilizado (o ECC – Elliptic Curve Criptography, p. ex.).

Assim também com relação ao uso das chaves, a criptografia moderna pode ser classificada em dois sistemas:

• O sistema de Criptografia simétrica. • O sistema de Criptografia assimétrica.196

Na criptografia assimétrica, existem duas chaves, a chave pública e a chave

privada. A chave de ciframento é publicada ou tornada acessível aos usuários, sem que haja quebra na segurança. Dessa forma, cada usuário tem uma chave de ciframento, de conhecimento público, e outra de deciframento, secreta.

Se um usuário A deseja mandar uma mensagem para um usuário B, ele utiliza a chave de ciframento pública PB e envia a mensagem para B, este de posse de sua chave de deciframento secreta SB decodifica a mensagem.

A criptografia simétrica ou criptografia de chave simétrica é utilizada para

prover a segurança das informações. Nesta técnica, uma mesma chave é compartilhada entre o emissor e o receptor, sendo utilizada para cifrar e decifrar a mensagem.197 Muda apenas a forma como são utilizadas as chaves. Quanto à mensagem, não contém qualquer parte da chave e não sofre alteração em seu teamanho.198

Os algoritmos de ciframento e de deciframento são os mesmos. Assim, pode-se garantir a confidencialidade da mensagem, porque somente o emissor e o receptor têm conhecimento da chave secreta.

Ambos os sistemas usam algoritmos e chaves próprias. As chaves de ambos os

tipos devem permanecer secretas; quanto aos algoritmos, podem ser tornados públicos (e geralmente o são). Um algoritmo é tanto mais poderoso e eficiente quanto melhor for a utilização que faz da chave e quanto mais resistente for à criptoanálise. Como não existe um método matemático capaz de determinar a segurança de um algoritmo, o melhor modo de testar esta segurança é exatamente expondo-o às técnicas criptoanalíticas.

Há soluções que utilizam as técnicas simultaneamente; neste caso, a criptografia assimétrica é usada para o estabelecimento da comunicação segura inicial e para a troca 196 Existem também algoritmos que utilizam uma combinação dos dois tipos de criptografia; são chamados de algoritmos híbridos. 197 A chave de cifragem pode ser idêntica à chave de decifragem, ou pode existir uma transformação simples entre elas. Geralmente costuma-se usar uma única chave, compartilhada por emissor e receptor (ou destinatário) da mensagem. 198 A criptografia simétrica define uma única chave e utiliza um algoritmo que usa esta chave para cifrar e decifrar a mensagem.

de uma chave simétrica, a qual será utilizada para a comunicação restante. A vantagem desta solução reside na diminuição da carga computacional, uma vez que a criptografia assimétrica exige maior esforço computacional em comparação com a criptografia de chave simétrica.

6.1 – Criptografia por Chave Simétrica ou Chave Secreta A criptografia simétrica usa os chamados algoritmos de chave simétrica (ou

Sistemas de Chave Simétrica; Criptografia de Chave Única; ou Criptografia de Chave Secreta), que são uma classe de algoritmos que usam chaves criptográficas relacionadas para a operações de cifragem ou decifragem.199

Se há um emissor e vários receptores, ou se há toda uma rede de vários emissores e receptores interligados entre si, isto traz um problema. Cada um dos componentes da rede deve estar de posse de uma chave que lhe permita receber e transmitir mensagens codificadas entre si ou para a central emissora. Para que esta se comunique com os vários receptores, cada um deve possuir uma chave individual, e este é o problema: o problema da distribuição segura das chaves.

Toda a segurança do sistema fica prejudicada, se uma destas chaves cair na posse de um agente inimigo. Antes que se veja como foi resolvido este problema, a criptografia por chave simétrica será vista em maiores detalhes.

Sistema de criptografia simétrica

No sistema mostrado, tem-se que:

• E é o algoritmo de encriptação. • D é o algoritmo de desencriptação. • K é a chave secreta. • m é o texto puro. • c é o texto criptografado.

199 Outros termos para criptografia de chave simétrica são: criptografia de chave secreta; criptografia de chave única; criptografia de chave compartilhada; criptografia de uma chave; criptografia de chave privada.

Atualmente, o intenso uso de computadores exige que cada um possua uma uma chave secreta que possa ser utilizado para criptografar um pacote de informações, antes que esse seja enviado pela rede a um outro computador.

A chave simétrica exige que se saiba quais computadores irão se comunicar, de modo que seja possível instalar a chave em cada um deles.200

6.1.1 – Características dos Algoritmos de Chave Simétrica 1. Velocidade: Os algoritmos de chave simétrica em geral possuem um menor

custo computacional do que os algoritmos de chave assimétrica. Na prática, isto quer dizer que um bom algoritmo de chave assimétrica pode ser centenas ou milhares de vezes mais lento do que um algoritmo de chave simétrica de qualidade.

2. Segurança: Este sistema é tanto ou mais seguro quanto mais segura for a própria chave e a forma como ela é guardada ou passada para o destinatário legítimo.

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 memórias-chave e a memória-endereço são alteradas.

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 X1, X2, … , XL

é 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 operação XOR

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 cifrada pode ser modificada, quando em trânsito.

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.3.1. 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 – CTAK). A idéia da auto-sincronização foi patenteada em 1946.

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: I. Método do “aperto de mão” (Shake-hands)

• O usuário estabelece sua identidade (U) no texto claro e a transmmite junto com a mensagem arbitrária (M) codificada com a sua chave.

• O computador usa a chave de U para decifrar a mensagem arbitrária. O computador anexa a sua própria mensagem arbitrária (N) a M, codifica-a usando a chave de U e transmite-a de volta a U.

• Assim que U recebe a mensagem, uma análise da mensagem M (conforme enviada e conforme recebida) verifica a identidade do computador para U.

• Na transmissão seguinte do usuário para o computador, a mensagem N é anexada à mensagem do usuário de modo que o computador pode verificar a identidade do usuário.

II. Método da senha pré-estabelecida

Uma senha pré-estabelecida é inserida no bloco de dados que está sendo

transmitido em forma codificada. No mais o processo é semelhante ao anterior, e a identidade do usuário deve ser estabelecida de modo que a mesma chave cifrada possa ser usada pelo computador. O computador usa a chave cifrada do usuário (que está em seu catálogo) para decifrar a mensagem e comparar senhas. A senha, que é usualmente trocada de um modo previsto, está contida em um catálogo de senhas.

III. Método da cifragem degrau Este método é utilizado para assegurar a continuidade contextual de blocos

sucessivos de dados. Somente uma parte do bloco de dados é codificada de cada vez, e o sistema sobe efetivamente os degraus da mensagem. Pode se acomodar uma mensagem de qualquer tamanho, e os blocos de cifragem intermediários podem ser transmitidos individualmente ou isoladamente, dependendo das exigências de segurança do sistema.

Cifragem degrau

6.1.4.4 – Integridade da Mensagem

O segundo aspecto mais importante da segurança de dados refere-se à verificação da integridade da mensagem. Neste caso, deve assegurar-se de que os dados não foram corrompidos durante a transmissão ou a criptografia.

Existem duas maneiras de fazer isso. I. Através do Checksum (valor de verificação): este é um dos métodos mais

antigos usados para se assegurar de que os dados estão corretos. Ele fornece também uma forma de autenticação, já que um checksum inválido sugere que os dados foram comprometidos de alguma forma.

Um checksum pode ser determinado de duas maneiras. O checksum de um pacote possui um byte. Um byte é composto de 8 bits, e cada

bit pode estar em dois estados (0e 1), levando a um total de 256 (28) combinações possíveis. Como a primeira combinação é igual a zero, o valor máximo de um byte é de 255. Neste caso, ocorre o seguinte:

• Se a soma dos outros bytes no pacote a ser verificado é menor ou igual a

255, então o checksum contém aquele valor exato. • Se a soma dos outros bytes for maior que 255, então o checksum é o restante do

valor total após ter sido dividido por 256.

Exemplo de cálculo de checksum:

Byte 1

Byte 2

Byte 3

Byte 4

Byte 5

Byte 6

Byte 7

Byte 8

Total Checksum

212 232 54 135 244 15 179 80 1151 127

1151 / 256 = 4,496 (arredonda-se para 4) 4 x 256 = 1024 1151 – 1024 = 127

II. Através do Cyclic Redundancy Check (CRC): estes possuem uma concepção

semelhante ao checksum, mas utilizam a divisão polinomial para determinar o valor do CRC, que geralmente é de 16 ou 32 bits. A vantagem do CRC é que ele é muito preciso. Se um único bit estiver incorreto, o valor do CRC estará correto.

Tanto o checksum quanto o CRC são bons para prevenir eventuais erros na transmissão, mas fornecem pouca proteção a um ataque intencional aos seus dados.

6.1.4.5 – Os Algoritmos RC2212 e RC4

Os algoritmos RC2 e RC4 são funções para ciframento com chave de tamanho variável (variable-key-size cipher functions). Foram projetados por Ron Rivest, como alternativas ao DES, para rápida encriptação de grande volume de dados, sendo tão ou mais rápidos do que este.213

Podem ser mais seguros do que o DES devido à sua habilidade em usar chaves de comprimento longo (o que significa que podem ser menos seguros, se chaves curtas forem utilizadas). Ambos, RC2 e RC4 são muito compactos em termos de tamanho de código.

O RC4 (Ron’s Cipher 4) foi criado por Ronald Rivest em 1987. No início foi mantido em sigilo, porque era propriedade da RSA Security. Tornou-se público em 1994.

Ele é uma cifra de fluxo simétrica com chave de tamanho variável (variable-key-size symmetric stream cipher); ou seja, o RC4 é apenas uma forma de gerar bytes aleatórios a partir de uma chave de tamanho variável. Estes bytes são então usados para encriptar uma mensagem através da operação lógica XOR. O destinatário executa o RC4 como o remetente, obtendo os mesmos bytes aleatórios, podendo assim decifrar a mensagem.

O RC4 é cerca de dez vezes mais rápido do que o DES em software. Sua principal vantagem é que ele é um algoritmo de fluxo, sendo um dos mais largamente usados.

6.1.4.5.1 – Expansão da Chave (KSA) no RC4

O RC4 recebe uma chave ch de nch bits, onde 1 nch 2048. Tem-se que gerar um vetor S de 256 bytes, a partir da chave: S = (s0, s1, s2, ... , s255)

212 O algoritmo RC2 será visto à frente, por ser cifra de blocos. 213 O RC2 é aproximadamente duas vezes mais rápido do que o DES, pelo menos em software.

Para tanto, utiliza-se o seguinte algoritmo:

1. Para i de 0 a 255, faz-se a.si := i 2. Seja o vetor de 256 bytes (2048 bits)

K = (k0, k1, ... , k255)

3. Copia-se a chave ch para K bit a bit , repetindo-a quantas vezes forem necessárias para preencher K completamente. Por exemplo, se nch=100 copia-se a chave 20 vezes para K, e coloca-se os 48 primeiros bits de ch no fim de K para preenchê-lo.

4. j:=0 5. Seja t um byte. 6. Para i de 0 a 255 faz-se:

a. j:=(j+si+ki) mod(256)

b. t:=si c. si :=sj d. sj :=t

Note-se que, na realidade, S é uma permuta dos números de 0 a 255, determinada pela chave. O algoritmo do RC4 (PRGA): Para gerar os bytes aleatórios tem-se o seguinte algoritmo: 1. i:=0 2. j:=0 3. Seja t um byte 4. Enquanto foram necessários bytes b aleatórios, faz-se: a. i:=(i+1) mod(256) b. j:=(j+si) mod(256) c. t:=si d. si :=sj e. sj:=t f . t :=(si + sj) mod(256) g. b:=st h. o byte aleatório será o b Note-se que o vetor S muda à medida que se vão gerando bytes aleatórios. Isto contribui para a força do algoritmo.

6.1.5 – Algoritmos por Cifras em Blocos214 Chama-se transformação de produto à aplicação sucessiva de códigos de

substituição e transposição em que grandes blocos de dados podem ser transformados como uma unidade, aumentando deste modo o número possível de padrões de substituição e reordenação.

As cifras por blocos processam blocos de informação de comprimento fixo de uma só vez, concatenando-os no final do processo.215 Neste caso, normalmente são usados blocos de 64 ou 128 bits.216

No caso da cifra da figura anterior, o tamanho do bloco é de 64 bits. Como o arquivo não é múltiplo de 64 bits, um enchimento (padding) é inserido no bloco 5. Cabeçalhos inseridos no arquivo cifrado devem informar qual foi o algoritmo usado, qual o tamanho de bloco e qual o tamanho real do arquivo, para que o padding possa ser descartado quando da desencriptação.

Não é possível cifrar menos do que o tamanho de um bloco. Os algoritmos que operam com blocos efetuam operações de substituição e transposição simultaneamente.

O seu processamento é consideravelmente mais lento do que o processo de cifras

de fluxo.217 Por esta razão, a operação com blocos normalmente é um compromisso entre a eficiência da transmissão e a complexidade da implementação.

As cifras em blocos são melhores para criptografar dados estáticos, quando já se sabe antecipadamente o tamanho e se pode dividir em blocos de M bits.

214 Cifra em Blocos; Blocos de Cifras; ou Cifrador de Blocos: do inglês Block-cipher, são usados como termos equivalentes. 215 A mensagem é partida em blocos do comprimento requerido. Cada bloco deve ser cifrado de cada vez, e o conjunto de operações matemáticas envolvendo a chave é repetido a cada bloco. 216 Normalmente são utilizados blocos de 64 bits; o algoritmo AES , aprovado pelo NIST em dezembro de 2001 usa blocos de 128, 192 ou 256 bits e chaves de 128, 192 ou 256 bits. Os algoritmos de chave simétrica raramente são usados sozinhos. 217 Por exemplo, com 64 bits, seria como operar 264 substituições de um alfabeto. O DES, por exemplo, é cerca de dez vezes mais lento do que o RC4.

6.1.5.1 – Operação das Cifras de Blocos218 Um problema que pode surgir com cifras em bloco é a existência de blocos

repetitivos que acabam por criar um padrão. Para evitar o reconhecimento de padrões repetitivos (e para garantir a confidencialidade) usam-se alguns modos de operação de blocos de cifra, que se verão a seguir.219

I – Modo Livro de Códigos (Electronic Code Book - ECB) Este é o modo de operação mais simples. Por este método, cada bloco da

mensagem original é dividida em blocos de tamanho adequado e cifrado isoladamente, para produzir os blocos da mensagem cifrada. No final, os blocos são concatenados na mesma ordem. Um bloco típico tem 64 bits, o que produz um livro de códigos de 264 entradas. Além disso, para cada chave possível existe um livro de códigos diferentes.

Cifração modo ECB

Decifração modo ECB

A vantagem deste método é a simplicidade e a independência entre os blocos.

Há algumas desvantagens, como, por exemplo:

• Blocos de texto claro iguais produzem também blocos cifrados iguais, ou seja, o método não esconde o padrão dos dados. Assim, um criptoanalista pode começar a compilar um livro de códigos, ainda que não conheça a chave.

• Este modo de operação não acrescenta nada à confidencialidade proporcionada pela cifra.

218 Ver: http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation. 219 A maioria apenas confere confidencialidade; alguns proporcionam confidencialidade e autenticação. Alguns modos combinados, tais como CCM, EAX, GCM, IAPM e OCB garantem tanto a confidencialidade quanto a integridade da informação.

• Há um outro problema, que a repetição de bloco (blocos idênticos da mensagem original vão produzir blocos cifrados idênticos), de onde um atacante ativo pode alterar parte de uma mensagem criptografada sem saber a chave e nem mesmo o conteúdo que foi modificado.220

II – Modo Encadeamento de Blocos (Cipher Block Chaining - CBC)

No modo de operação Cipher-Block Chaining - CBC (corrente de blocos), é feita

uma operação entre cada novo bloco de texto claro com o bloco cifrado obtido na etapa anterior.221 Por esta forma, cada um dos blocos cifrados depende de todos os blocos de texto claro anteriores.

A operação mais utilizada é o XOR com o bloco anterior; assim, os blocos iguais serão normalmente cifrados de forma diferente, desde que no mínimo um dos blocos anteriores seja diferente da mensagem. Entretanto, duas mensagens iguais serão mapeadas para os mesmos blocos e duas mensagens com início igual serão cifradas da mesma forma, até que ocorra a diferença. Para evitar esse problema, utiliza-se um vetor de inicialização distinto para cada mensagem. Também é utilizado um vetor de inicialização para iniciar o processo, já que não existe texto cifrado para o bloco inicial.

Cifração modo CBC

Decifração modo CBC

O CBC é um dos modos de operação mais utilizados. Sua maior desvantagem é

ser sequencial. Como não pode ser usado em paralelo (pois sempre depende do

220 Pode-se, por exemplo, interceptar uma transação bancária de transferência de saldo. A seguir, faz-se uma transferência de saldo de uma conta para a conta do atacante e intercepta-se a mensagem. Assim, pode-se identificar os blocos correspondentes ao destinatário e dessa forma substituir em todas as mensagens o destinatário pelo atacante. O modo ECB também pode fazer com que protocolos sem proteção de integridade se tornem ainda mais vulneráveis a ataques, como ataques de replay. 221 O CBC realimenta a cifragem do último bloco com o resultado das cifragens dos blocos anteriores (do bloco de texto plano com o texto cifrado antecedente).

resultado anterior), seu uso dificulta o processamento de blocos em paralelo, o que melhoraria o desempenho do método.

O PCBC - Propagating cipher-block chaining (modo de operação corrente de

blocos em propagação)222 foi projetado para propagar ou esparramar melhor que o CBC pequenas alterações no texto cifrado. As rotinas de cifragem e decifração são as seguintes:

O vetor de inicialização é .

III – Modo Realimentação de Cifra (Cipher Feedback Block – CFB) Quando há necessidade de enviar mensagens de tamanho menor que um bloco,

usa-se o método CFB, o qual trabalha com grupos (por exemplo, de 8 bits - um caracter). Neste modo, cada bloco de texto cifrado antecedente é codificado, e o resultado é combinado com o bloco de texto plano através do operador XOR para produzir o bloco cifrado atual.223 Também se utiliza um vetor de inicialização para iniciar o processo. Uma cifra de bloco operando no modo CFB não pode ser usada como um gerador de números randômicos.

Com o Cipher Feedback um bloco de fluxo de chave é calculado cifrando-se o bloco de texto cifrado anterior.

Cifração modo CFB

222 É usado quase que exclusivamente nos algoritmos Kerberos e WASTE. 223 Neste caso, a realimentação é feita sobre o grupo, utilizando-se também as operação XOR.

Decifração modo CFB

IV – Modo Realimentação do Bloco de Saída (Output Feedback Block – OFB)

O modo Output Feedback (OFB) transforma uma cifra de bloco num gerador de

números pseudo-aleatórios. O texto cifrado realimenta a cifra de bloco e este processo é repetido para produzir um fluxo de bits pseudo-randômicos.

O fluxo de bits é totalmente determinado pelo algoritmo, pela chave, por um vetor de inicialização e pelo número de bits que realimentam a cifra em cada etapa. Ele pode então servir para fazer uma operação XOR com o texto claro, a fim de produzir o texto cifrado, transformando efetivamente a cifra de bloco numa cifra de fluxo.

Este modo é muito similar ao anterior, exceto pelo fato de que a quantidade de XOR com cada bloco de texto plano é gerada independentemente do bloco de texto plano ou do bloco de texto cifrado.

O modo OFB gera o próximo bloco de fluxo de chave cifrando o bloco de fluxo

de chave anterior:

Cifração modo OFB

Decifração modo OFB

V – Modo de Operação Contador (Counter – CTR). Assim como o OFB, o

CTR transforma a cifra de bloco numa cifra de fluxo. Ele cria o próximo bloco de fluxo de chave cifrando os valores sucessivos de um contador. Este contador pode ser qualquer função simples que produza uma sequência que só será repetida depois de um longo intervalo de tempo. Apesar dessa exigência, os contadores simples são os mais utilizados.

O modo CRT possui características muito semelhantes às do OFB, porém permite um acesso randômico na decifração, e é comprovadamente seguro se a cifra de bloco também for segura.

Cifração modo CTR

Decifração modo CTR

6.1.5.2 – Proteção de Integridade e Propagação de Erro Os modos de operação das cifras de bloco mostrados não proporcionam qualquer proteção de integridade. Isto significa que um atacante, ainda que conheça a chave, pode modificar o fluxo de dados de acordo com as suas necessidades. Atualmente é sabido

que, sempre que houver uma cifragem de dados, é também essencial que se adicione uma proteção de integridade para garantir a segurança.

Em operações seguras, o VI (vetor de inicialização) e o texto cifrado gerado através destes modos de operação deveriam ser autenticados com um MAC224 (ver item 11.3.1.4.1) que deve ser checado antes de se efetuar uma decifração.

Antigamente era comum a discussão da propagação de erros dos modos de

operação. Observou-se, por exemplo, que um erro em um dos blocos cifrados transmitidos resultaria num erro em apenas um dos blocos de texto claro recuperado se fosse usado o modo ECB, enquanto que no modo CBC o erro afetaria dois blocos.

Propagação de erro no modo CBC

6.1.5.3. – O Vetor de Inicialização – VI

Com exceção do modo de operação ECB, todos os outros requerem um vetor de inicialização. Este vetor é uma espécie de bloco pequeno (dummy block) cuja função é inicializar o processo para o primeiro bloco. Além disso, ele adiciona um elemento randômico ao processo.

O VI não precisa ser secreto, mas é importante que o mesmo VI não seja re-utilizado com a mesma chave. Nos modos CBC e CFB, a re-utilização de VIs deixa vazar algumas informações. Nos modos OFB e CTR, VIs repetidos destroem totalmente a segurança. Já no modo CFB, o VI precisa ser gerado randomicamente e ser mantido em segredo, até que o primeiro bloco de texto claro esteja pronto para ser cifrado.

* * *

A grande maioria dos algoritmos criptográficos atuais são cifras de bloco. As cifras de fluxo, que convertem o texto claro em texto cifrado bit a bit, são atualmente pouco pesquisadas e pouco utilizadas. A razão disso é que elas dependem de geradores randômicos de chaves que, apesar da aparente simplicidade, são difíceis de implementar através de software ou de hardware.225 224 MAC: Message authentication code. 225 A partir da década de 1960 extensas pesquisas sobre segurança criptográfica por computador determinaram o surgimento de uma série de técnicas que usam uma combinação de lógica de hardware e de rotinas programadas (software).

6.1.5.4 – Sistema de Código em Blocos de Feistel-Notz-Smith

Neste sistema, as substituições são realizadas sob o controle de uma chave de código, e as transposições são feitas seguindo uma seqüência fixa. A substituição, a transposição e uma adição módulo-2 são fatores do código de produto. Este é aplicado ao texto claro várias vezes, produzindo um bloco do texto cifrado do mesmo tamanho do texto claro original.

Modo de operação (cf. Katzan, Jr.):

1. A chave do código contém uma seqüência de número fixo de bits; esta é a chave que pode ser obtida a partir do arquivo ou tabela de chaves.

2. O registrador de deslocamento contém as filas superior e inferior; a mensagem do texto claro é armazenada no registrador de deslocamento. A fila inferior do registro de deslocamento pode ser lida (para os registros C1 e C2 sem alterar o conteúdo do registrador de deslocamento).

3. Os registros C operam sob o controle de bits na chave do código. Eles são movidos tanto diretamente para baixo ou para cima como um bloco.

4. Os bits passam então por uma transformação não linear226 de modo que cada quatro bits de entrada podem ser convertidos em quatro bits de saída.

5. Uma outra transposição é realizada – agora, quaisquer bits da mensagem podem ser transpostos.

6. Por fim, os segundos 64 bits da chave do código são somados do módulo-2 para a mensagem, e o resultado é adicionado à metade superior do registrador de deslocamento (shift-register). A metade superior e a metade inferior do registrador de deslocamento são trocadas entre si e a chave do código é girada de uma posição.

7. O processo completo é repetido tanto em número fixo como variável de vezes (chamados rounds – ou rodadas).227

Estes conceitos foram implementados em um sistema experimental de

comunicações de dados pela IBM, sendo que o sistema em blocos era projetado em uma unidade de hardware chamada Lúcifer, anexada ao dispositivo terminal do computador.

Uma versão de software da unidade de código permanece no computador, como

um programa de código. Assim que a autorização adequada é verificada através do uso do arquivo de senhas, uma chave de código é selecionada a partir de um arquivo de chaves de código para uso pelo programa de código.

226 Atualmente, define-se as substituições como transformações não lineares, realizadas em S-Box, para garantir a confusão. Quanto às transposições, elas são realizadas por permutações nas P-Box, para garantir difusão. 227 Este método (atribuído a Horst Feistel), muito usado atualmente nas cifras simétricas, é baseado em rounds repetidos. Os bits a serem codificados são divididos em duas partes, P1 e P2. P1 fica inalterado, e P2 é adicionado a uma função misturada de sentido único f (variado por uma chave) de P1. Os dois resultados então são trocados (isto é chamado de um round). A chave p1 e a chave p2 são vetores do bit; “,” é um operador da concatenação e f é uma função (p1, p2 → p2’, p1) tanto que p2’ = p2 + f(p1,key). Desde que a saída do round tenha acesso ao valor P1, e sendo a adição uma operação reversível, então esta operação pode ser desfeita, para toda função f de um único sentido (one-way). Para decifrar rounds múltiplos, cada um é desfeito na ordem inversa (ou seja, para a decodificação, as chaves são aplicadas em ordem inversa). Após vários rounds (entre 8 e 64) de processamento, e se a chave for suficientemente longa, ataques pela força bruta podem se tornar inviáveis.

O sistema de códigos em blocos desenvolvido por Feistel-Notz-Smith está

representado a seguir.

Sistema de código em blocos de Feistel-Notz-Smith

6.1.5.4.1 – Estrutura Genérica da Cifra de Feistel O diagrama a seguir mostra a estrutura genérica de uma Cifra de Feistel, um

esquema que é usado na grande maioria das cifras de bloco modernas.228

228 A implementação de cifras em blocos pode ser feita utiliazando: rede Feistel (Feistel network); Key schedule; Product cipher; S-Box; P-Box; SPN (rede S-P).

A entrada é quebrada em dois blocos de mesmo tamanho, geralmente chamados de esquerdo (L - Left) e direito (R - Right), que são repetidamente operados em ciclos através do algoritmo. Em cada ciclo, uma função hash (f) é aplicada no bloco direito e na chave, e o resultado do hash é usado para fazer um XOR com o bloco esquerdo. Depois disto, os blocos são trocados. O resultado do XOR torna-se o novo bloco direito e o bloco direito inalterado torna-se o bloco esquerdo. O processo é então repetido algumas vezes.

Cifra de Feistel - Genérica

A função hash é somente um misturador de bits.229 A operação correta do

algoritmo se baseia na propriedade determinística da função hash, ou seja, se processar exatamente as mesmas entradas, o resultado será sempre o mesmo.

Na decifração, o texto cifrado é dividido em blocos esquerdo e direito. A chave e o bloco bloco direito são submetidos à função hash para se obter o mesmo resultado hash usado no último ciclo da cifragem, sendo que o bloco direito permanece inalterado no último ciclo da cifragem. Em seguida, é feito um XOR entre o hash e o bloco esquerdo para reverter o último ciclo da cifragem e o processo é repetido até que todos os ciclos tenham sido revertidos.

229 O hash é um valor obtido pelo processamento da senha, valor que varia de 128 a 512 bits. A função que gera o hash não tem inversa, o que quer dizer que, mesmo possuindo o valor do hash, é impossível obter a senha original. Ver: http://www.cys.com.br/web/index.php?option=com_content&task=view&id=77&Itemid=83.

A segurança de uma cifra de Feistel depende essencialmente do tamanho da chave e da irreversibilidade da função hash. O ideal é que o resultado da função hash seja parecido com bits randômicos, a partir dos quais não se consiga obter qualquer informação a respeito da(s) entrada(s).

6.1.5.5 – O Algoritmo RC2 O RC2 é uma cifra de bloco simétrico de chave de tamanho variável (variable-

key-size symmetric block cipher) e pode substituir o DES em versões para exportação (dos EUA para fora). Ele pode ser usado da mesma maneira que o DES, incluindo a encriptação tripla. Para exportação, o RC2 e o RC4 têem suas chaves limitadas a 40 bits; 56 bits, no caso de subsidiárias ou escritórios de além-mar, de companhias norte-americanas.

Uma cadeia (string) de 40 bits adicional, chamada salt, pode ser usada para frustrar os ataques que tentem compilar tabelas de possíveis encriptações. O salt é apensado à chave de encriptação, e esta chave mais comprida é usada para encriptar a mensagem. O salt é então enviado, sem encriptação, junto com a mensagem.

Os algoritmos RC2 e RC4 são propriedade da RSA Data Security, Inc. Eles tem sido largamente usados por desenvolvedores que desejam exportar o seus produtos (o DES quase nunca é aprovado para exportação).

6.1.5.6 – A Cifra de Blocos DES Até meados da década de 1970 não existia uma cifra oficial aceita pelo governo

norte-americano como cifra padrão de segurança. Por esta razão, o National Bureau of Standards solicitou através de um concurso que alguma instituição apresentasse uma solução.

O Bureau tinha este papel, o de estabelecer padrões e de auxiliar o governo e a indústria no acesso à tecnologia, e se encarregava de avaliar os métodos de proteção para preparar linhas de ação. Para o concurso, ele solicitou técnicas e algoritmos para: a) a encriptação de dados por computador; b) para implementar a função criptográfica de gerar, avaliar e proteger chaves criptográficas; c) manter arquivos codificados com chaves que expiram; fazer atualizações parciais em arquivos encriptados, etc.

No dia 6 de Agosto de 1974 a IBM apresentou um algoritmo candidato que ela havia desenvolvido internamente, denominado Lúcifer.230 Em 1977 o NBS publicou uma variante mais fraca deste algoritmo231, o DES (Data Encryption Standard). Ele logo foi adotado como padrão nos EUA, para proteger informações comerciais. Na

230 Horst Feistel, o autor do algoritmo Lúcifer, era um imigrante alemão que chegara aos Estados Unidos em 1934. Com a entrada dos EUA na guerra (Segunda Guerra Mundial), teve que cumprir prisão domiciliar até 1944. Começou a pesquisar sobre criptologia quando foi para o Cambridge Research Center da Força Aérea Americana, Imediatamente começou a ter problemas com a National Security Agency – NSA, que acabou fazendo com que o projeto de pesquisa de Feistel fosse cancelado. Em 1960 ele foi para a Mitre Corporation, mas a NSA forçou-o a abandonar seu trabalho pela segunda vez. Feistel foi em seguida para o Thomas J. Watson Laboratory da IBM, onde prosseguiu com suas pesquisas. Foi neste laboratório que no início de 1970 ele desenvolveu o sistema Lúcifer, sistema que foi apresentado à NBS. Após avaliar o algoritmo com a ajuda da National Security Agency, o NBS adotou o algoritmo Lúcifer com algumas modificações, sob a denominação de Data Encryption Standard – DES, em 15 de Julho de 1977. 231 Enquanto o Lúcifer usava chaves de 128 bits, o DES usava chaves de somente 56 bits.

verdade, ele foi o primeiro algoritmo de criptografia232 colocado à disposição do mercado.

O DES cifra blocos de 64 bits (8 caracteres) usando uma chave de 56 bits, mais

8 bits de paridade (o que soma 64 bits). O algoritmo inicia realizando uma transposição inicial sobre os 64 bits da mensagem, em seguida 16 passos de cifragem, e conclui realizando uma transposição final, que é a inversa da transposição inicial. Para os 16 passos de cifragem usam-se 16 sub-chaves, todas derivadas da chave original através de deslocamentos e transposições.233 Em resumo:

• Uma substituição fixa, chamada de permutação inicial, de 64 bits em 64 bits; • Uma transformação, que depende de uma chave de 48 bits e que preserva a

metade direita; • Uma troca das duas metades de 32 bits cada uma; • Repetem-se os passos 2 e 3 durante 16 vezes; • Inversão da permutação inicial.

As permutações do DES são de três tipos: na primeira, os bits são simplesmente

reordenados (straight permutation); na segunda, alguns bits são duplicados e então reordenados (expanded permutation), aumentando assim o número de bits na saída; na terceira, alguns bits são descartados para depois reordenar os restantes (permuted choice), diminuindo os bits de saída.

232 O DES é um algoritmo de cifragem de blocos de chave única. Portanto, é um sistema simétrico. 233 Para uma implementação Flip-Chip MCM-D do algoritmo DES, ver CS Digital Library, em: http://www.computer.org/portal/web/csdl/doi/10.1109/MCMC.1997.569339.

6.1.5.6.1 – As S-P Networks (SPN) Os processos de substituição e transposição no DES usam o sistema de caixas

(Box) construídas (hardware) para estas finalidades. Essas caixas são conhecidas como S-Box e P-Box.234

As substituições são conhecidas como S-boxes e são especificadas em oito tabelas, onde entram blocos de seis e saem blocos de quatro bits. O primeiro e o último 234 As operações lógicas do tipo XOR, ADD e SHIFT são formas alternativas de se obter as propriedades de difusão e confusão, sem a necessidade de usar P-boxes (caixas de permutação para gerar difusão) ou S-boxes (caixas de substituição para gerar confusão).

bit são tomados como se fossem um número de dois bits, formando assim as linhas das tabelas das caixas S. Os bits dois a cinco agrupados formam um vetor de 0 a 15.

A combinação de ambas é conhecida como S-P networks.

Cada passo de cifragem do DES, tem dois objetivos básicos: a difusão e a confusão. A difusão visa eliminar a redundância existente na mensagem original, distribuindo-a pela mensagem cifrada. O propósito da confusão é tomar a relação entre a mensagem e a chave tão complexa quanto possível.

Apenas a permutação ou a substituição não iriam garantir a segurança da cifra. Por isto, a combinação dos procedimentos cria a cifra-produto ou round. E é a iteração dos rouns que garante a segurança final. Esta é a essência das S-P networks.

A utilização de uma S-P network em uma cifra não é um processo prático, por

exigir a construção de uma rede inversa para a decifração, o que leva à duplicação de dispositivos e programas. Assim, o round é projetado de forma a que ele mesmo seja a

sua inversa (o round se torna a sua própria inversa através de algumas “trocas” nos sub-blocos).

Isto é conseguido através do Circuito de Feistel, em que cada bloco é partido em dois sub-blocos. Em um é aplicada a transformação, enquanto que o outro é preservado. Em seguida os sub-blocos são trocados, para que o round seguinte afete o sub-bloco que ficara inalterado.

L(i) = R(i-1) R(i) = L(i-1) (K(i),R(i-1)) Eis um exemplo da utilização de circuitos de Feistel na Cifra Lúcifer, que

antecedeu o DES.

Da chave da cifra extraem-se 16 sub-chaves, uma para cada round. O padrão S-P é seguido na construção do round. Como se pode ver, no último round não ocorre a troca dos blocos.

A segurança do DES não se baseia no conhecimento do algoritmo, mas apenas no conhecimento da chave secreta. Teoricamente, o DES pode ser quebrado pelo método da força bruta, tentando-se todas as combinações possíveis de chave. Como a chave tem 56 bits, tem-se um total de 256 chaves possíveis (72.057.594.037.927.936).

Atualmente, existem diversos algoritmos de cifragem de blocos de chave única:235 • Triple-DES: O DES é aplicado 3 vezes, com seqüências de cifragem e

decifragem, combinando a utilização de 2 chaves. • WLucifer: precursor do DES. • Madryga: trabalha com 8 bits, usando ou-exclusivo e deslocamento de bits. • NewDES: trabalha com blocos de 64 bits e chave de 120 bits. • FEAL-N: baseado no DES, pode-se especificar o número de passos da cifragem.

É fraco, se utilizar menos que 8 passos. • LOKI: usa bloco e chave de 64 bits. • Khufu e Khafre: trabalham de forma semelhante ao DES. Usam tabelas de

substituição de 256 posições de 32 bits - contra as de 6 posições de 4 bits do DES. Usam chaves de 512 bits e um número de passos flexíveis, múltiplo de 8.

• IDEA: usa blocos de 64 bits, com chave de 128 bits. • MMB: usa blocos e chave de 128 bits. • Skipjack: usa chave de 80 bits e 32 passos de processamento.

6.1.5.7 – A Cifra de Blocos AES

Assim como se fez com o DES, em 1997 o governo americano (através do (National Institute of Standards and Technology – NIST) iniciou um processo de seleção para escolher um novo algoritmo de chave simétrica, que substituiria o DES.236 De acordo com as especificações, os algoritmos deveriam ser de chave simétrica e suportar blocos de 128 bits, bem como chaves de 128, 192 e 256 bits.

Em agosto de 1998 apresentaram-se quinze candidatos: Cast-256, Crypton, Deal, DFC, E2, Frog, HPC, LOKI97, Magenta, MARS, RC6, Rijndael, Safer+, Serpent e Twofish. Em 1999 foram selecionados cinco finalistas: MARS, RC6, Rijndael, Serpent e Twofish.

Três anos e meio após o início do concurso, o NIST escolheu o algoritmo Rijndael237 (de: Vincent Rijmen e Joan Daemen), dois belgas criadores do algoritmo. De acordo com o NIST, ele combina as características de segurança, desempenho, flexibilidade e facilidade de implementação. Além disso, apresenta alta resistência a ataques como power attack238 e timing attack,239 bem como exige pouca memória.

235 Ver item 11.3.1.5.2. 236 O DES já não oferecia a segurança desejada, pois havia sido quebrado com a ajuda de um dispositivo de hardwarre, o DES Cracker, construído pela Electronic Frontier Fundation. 237 O Rijndael era um refinamento do Square, um projeto anterior de Daemen e Rijmen (que desenvolveram também o Anúbis e o Grand Cru). O Square, por sua vez, evoluiu do Shark. Ao contrário do DES, o Rijndael é uma rede de permutação-substituição, e não uma rede de Feistel. 238 Tipo de ataque que busca descobrir as características de um dispositivo analisando o seu consumo de energia. Sobre o power attack, ver: http://euler.ecs.umass.edu/research/regb-dft07.pdf. Ver também: http://eref.uqu.edu.sa/files/Others/Elliptic%20Curves/Design%20of%20secure%20cryptography%20against%20the%20threat%20of%20power-attacks%20in%20DSP-embedded%20processors.pdf. 239 O timing attack é um tipo de ataque (a side channel attack) no qual o atacante tenta comprometer o sistema analisando o tempo que ele leva para executar algoritmos criptográficos. Ver:

O AES (Advanced Encryption Standard – AES, ou Padrão de Criptografia Avançada), também conhecido por Rijndael,240 é uma cifra de bloco adotada como padrão de criptografia pelo governo dos Estados Unidos. Ele foi anunciado pelo NIST em 26 de Novembro de 2001, e tornou-se um padrão efetivo em 26 de Maio de 2002.241

O AES tem um tamanho de bloco fixo em 128 bits e uma chave com tamanho de 128, 192 ou 256 bits. A chave é expandida usando-se o agendamento de chaves do Rijndael. A maioria dos cálculos do AES é feita em um campo finito próprio. Ele opera sobre um arranjo bidimensional de bytes com 4x4 posições, denominado de estado (as versões do Rijndael com um tamanho de bloco maior têm colunas adicionais no estado). Opera em 10, 12 ou 14 rodadas (rounds), dependendo do tamanho da chave242 (10 rounds para chaves de 128 bits, 12 rounds para chaves de 192 bits e 14 rounds para chaves de 256 bits).

6.1.5.8 – A Cifra de Blocos IDEA O algoritmo IDEA (International Data Encryption Algorithm) foi desenvolvido

em 1990 na Suiça, por James L. Massey e Xueija Lai. É um algoritmo simétrico que utiliza uma chave de 128 bits. Originalmente, foi chamado de PES (Proposed Encryption Standard).

Um ano após o seu lançamento, em 1991, os pesquisadores Biham e Shamir demonstraram que o algoritmo era susceptível à criptoanálise diferencial; assim, os autores fizeram modificações substanciais e chamaram o novo algoritmo de IPES (Improved Proposed Encryption Standard). Em 1992 o IPES foi rebatizado, transformando-se no IDEA, sendo considerado um dos melhores algoritmos de bloco.

O algoritmo é usado para cifrar/decifrar e, como é comum nas cifras de bloco, usa a confusão e a difusão para produzir o texto cifrado.

O IDEA possui três grupos algébricos cujas operações são misturadas. Estas operações, que podem ser facilmente implementadas via hardware e/ou software, são:

XOR Adição módulo 216 (adição ignorando qualquer overflow) Multiplicação módulo 216+1 (multiplicação ignorando qualquer overflow)

Todas estas operações são feitas com blocos de 16 bits, o que faz com que este

algoritmo seja também eficiente em processadores de 16 bits.

http://en.wikipedia.org/wiki/Timing_attack. [Side channel attack: é qualquer tipo de ataque pelo qual se busca ganhar informação pela implementação física de um criptosistema, mais do que pela força bruta]. 240 Não são exatamente iguais: o Rijndael suporta uma maior gama de tamanhos do bloco e da chave. O AES tem um tamanho de bloco fixo em 128 bits e uma chave com tamanho de 128, 192 ou 256 bits; já o Rijndael pode ser especificado com chaves e tamanhos de bloco de qualquer múltiplo de 32 bits, com um mínimo de 128 bits e um máximo de 256 bits. 241 Para uma descrição do algoritmo AES, ver: http://en.wikipedia.org/wiki/Advanced_Encryption_Standard. Ver também: http://www.cic.unb.br/docentes/pedro/segdados_files/CriptSeg5-6.pdf. 242 Afirma-se que o ataque de chave relacionada pode quebrar um AES de 256 bits com uma complexidade de 2995, a qual, apesar de ser mais rápida do que o ataque pela força bruta, ainda assim é impraticável. O AES 192-bits também pode ser quebrado de maneira similar, mas com uma complexidade de 2176. Já o AES 128-bits não é afetado por este ataque. Ver: https://cryptolux.org/mediawiki/uploads/1/1a/Aes-192-256.pdf.

6.1.5.8.1 – Descrição do Algoritmo IDEA243 Na cifração, o texto claro é dividido em blocos de 64 bits, sendo que cada um

deles é dividido em quatro sub-blocos de 16 bits: X1, X2, X3 e X4. Estes quatro sub-blocos são a entrada da primeira volta ou rodada do algoritmo (no total, são oito rodadas). Em cada rodada, os quatro sub-blocos são submetidos à operação lógica XOR, somados (adição de inteiros módulo 216) e multiplicados (multiplicação de inteiros módulo 216 +1) entre si e com seis sub-blocos de 16 bits oriundos da chave (K1, K2, K3, K4, K5 e K6). São usadas 52 (8x6+4) subchaves. Entre cada rodada, o segundo e o terceiro sub-bloco são trocados.

Em cada rodada, a sequência de eventos é a seguinte:

1. Multiplicação de B1 pelo primeiro sub-bloco da chave K1. 2. Adição de B2 com o segundo sub-bloco da chave K2. 3. Adição de B3 com o terceiro sub-bloco da chave K3. 4. Multiplicação de B4 pelo quarto sub-bloco da chave K4. 5. XOR entre os resultados obtidos nas etapas (1) e (3). 6. XOR entre s resultados obtidos nas etapas (2) e (4). 7. Multiplicação do resultado da etapa (5) pelo quinto sub-bloco da chave K5 8. Adição dos resultados das etapas (6) e (7). 9. Multiplicação do resultado da etapa (8) pelo sexto sub-bloco da chave K6. 10. Adição dos resultados das etapas (7) e (9). 11. XOR entre os resultados obtidos nas etapas (1) e (9). 12. XOR entre os resultados obtidos nas etapas (3) e (9). 13. XOR entre os resultados obtidos nas etapas (2) e (10). 14. XOR entre os resultados obtidos nas etapas (4) e (10).

A saída da rodada são os quatro sub-blocos resultantes das etapas (11), (13), (12) e (14). Exceto na última rodada, os sub-blocos (13) e (12) trocam de lugar e esta nova sequência de sub-blocos será a entrada para a próxima rodada.

Após a oitava rodada, a saída final é transformada com:

1. Multiplicação de B1 pelo primeiro sub-bloco da chave K1. 2. Adição de B2 com o segundo sub-bloco da chave K2. 3. Adição de B3 com o terceiro sub-bloco da chave K3. 4. Multiplicação de B4 pelo quarto sub-bloco da chave K4.

No final, os quatro sub-blocos obtidos (G1, G2, G3 e G4) são concatenados para produzir o texto cifrado.

A obtenção de sub-blocos da chave é simples. O algoritmo usa 52 destes sub-blocos – seis em cada uma das oito rodadas, mais quatro na última transformação.

Inicialmente, a chave de 128 bits é dividida em oito sub-blocos de 16 bits. Estes são os primeiros sub-blocos da chave: seis serão usados na primeira rodada e os outros dois serão K1 e K2 da segunda rodada. Em seguida, os bits da chave são deslocados 25 posições para a esquerda e a nova chave é dividida novamente em oito sub-blocos, dos

243 Uma boa descrição deste algoritmo pode ser encontrada em: http://www.ufpe.br/telematica/curso/downloads/idea.pdf.

quais quatro serão usados na segunda rodada e quatro na terceira. O processo continua enquanto sub-blocos da chave forem necessários para completar o algoritmo.

O processo de decifração é o mesmo da cifração, com exceção dos sub-blocos da chave que precisam ser revertidos. Na decifração, os sub-blocos da chave são o inverso aditivo ou o inverso multiplicativo dos sub-blocos da chave usados na cifragem (no caso do IDEA, o inverso multiplicativo de 0 é 0).

A tabela abaixo mostra os sub-blocos da chave na cifragem e os sub-blocos da chave correspondentes na decifração: RODADA SUB-BLOCOS NA CIFRAGEM ------ --------------------------------- 1 K1(1) K2(1) K3(1) K4(1) K5(1) K6(1) 2 K1(2) K2(2) K3(2) K4(2) K5(2) K6(2) 3 K1(3) K2(3) K3(3) K4(3) K5(3) K6(3) 4 K1(4) K2(4) K3(4) K4(4) K5(4) K6(4) 5 K1(5) K2(5) K3(5) K4(5) K5(5) K6(5) 6 K1(6) K2(6) K3(6) K4(6) K5(6) K6(6) 7 K1(7) K2(7) K3(7) K4(7) K5(7) K6(7) 8 K1(8) K2(8) K3(8) K4(8) K5(8) K6(8) saída K1(9) K2(9) K3(9) K4(9)

RODADA SUB-BLOCOS NA DECIFRAÇÃO ------ -------------------------------------------- 1 K1(9)-1 -K2(9) -K3(9) K4(9)-1 K5(8) K6(8) 2 K1(8)-1 -K2(8) -K3(8) K4(8)-1 K5(7) K6(7) 3 K1(7)-1 -K2(7) -K3(7) K4(7)-1 K5(6) K6(6) 4 K1(6)-1 -K2(6) -K3(6) K4(6)-1 K5(5) K6(5) 5 K1(5)-1 -K2(5) -K3(5) K4(5)-1 K5(4) K6(4) 6 K1(4)-1 -K2(4) -K3(4) K4(4)-1 K5(3) K6(3) 7 K1(3)-1 -K2(3) -K3(3) K4(3)-1 K5(2) K6(2) 8 K1(2)-1 -K2(2) -K3(2) K4(2)-1 K5(1) K6(1) saída K1(1)-1 -K2(1) -K3(1) K4(1)-1

A velocidade de cifração e decifração do IDEA é praticamente a mesma do

DES. Entretanto, devido aos cálculos suplementares nos sub-blocos da chave, a decifração é um pouco mais lenta do que a cifração.

Esquema do IDEA

6.1.5.9 – O Algoritmo TEA O algoritmo TEA é uma cifra de bloco bastante segura, fácil de ser implementada em várias linguagens de programação, e é de processamento muito rápido, pois consome pouco recurso das máquinas. Foi criado por David Wheeler e Roger Needham no laboratório de computação da Universidade de Cambridge, Inglaterra, em novembro de 1994. Em sua primeira versão, é um algoritmo do tipo Feistel que faz uso de operações de vários grupos algébricos - XOR, ADD e SHIFT.

O TEA cifra blocos de 64 bits de dados usando uma chave de 128 bits. Ele

adquire uma difusão completa (quando a diferença de um bit no texto claro causa aproximadamente 32 bits de diferença no texto cifrado) após seis ciclos.

Os autores publicaram uma rotina, escrita em C, para uma cifragem com uma chave k[0] - k[3] e com os dados em v[0] e v[1].

void code(long* v, long* k) unsigned long y=v[0],z=v[1], sum=0, /* set up */ delta=0x9e3779b9, n=32 ; /* a key schedule constant */ while (n-->0) /* basic cycle start */

sum += delta ; y += (z<<4)+k[0] ^ z+sum ^ (z>>5)+k[1] ; z += (y<<4)+k[2] ^ y+sum ^ (y>>5)+k[3] ; /* end cycle */ v[0]=y ; v[1]=z ;

O algoritmo usa múltiplos de uma constante mágica, delta (δ), derivada da proporção de ouro, para garantir que a cifragem seja diferente em cada ciclo. O valor de delta para o TEA é definido como:

Constante delta:

Um ciclo do TEA = duas etapas Feistel

Segundo os autores, este algoritmo pode substituir o DES com vantagens. Além

disso, apesar de ter 32 ciclos (64 etapas Feistel) e apesar da velocidade de processamento não ser o principal objetivo, o TEA é três vezes mais rápido que o melhor software de implementação de DES com 16 etapas. Todos os modos de uso do DES também são aplicáveis ao TEA. O número de ciclos pode variar ou até fazer parte da chave.

Devido a falhas de segurança (demonstrou-se que o TEA é susceptível aos ataques de Chaves Equivalentes e de Chaves Relacionadas), ele foi aperfeiçoado, dando origem a outras versões: XTEA, BlockTEA e XXTEA.

6.1.5.10 – O Algoritmo XTEA Em 1997, Wheeler e Needham, autores do TEA, publicaram duas variações mais

resistentes à criptoanálise: o XTEA e o BlockTEA. O XTEA (extended TEA) apresenta a seguinte estrutura:

Um ciclo do XTEA = 2 etapas Feistel

O XTEA usa as mesmas operações básicas do TEA (XOR, adição módulo 232 e shifts), mas a ordenação é bem diferente. Para prevenir ataques baseados em chaves, as 4 sub-chaves são misturadas de uma forma menos regular e com uma frequência menor. Sua implementação continuou sendo fácil.

6.1.5.11 – O Algoritmo BlockTEA O BlockTEA opera em blocos de tamanho variável mas múltiplo de 32 bits. O

algoritmo aplica sequencialmente a função de arredondamento do XTEA em cada word dos blocos e o combina com o bloco subsequente. Isto é repetido em várias etapas, dependendo do tamanho do bloco (no mínimo 6 vezes). Um das vantagens deste procedimento é que a necessidade de modos de operação (como CBC, OFB, CFB, etc) é eliminada e que a cifra pode ser aplicada diretamente na mensagem.

A função de arredondamento f do BlockTEA é essencialmente a mesma do XTEA, ou seja:

Função de arredondamento do BlockTEA

6.1.5.12 – O Algoritmo XXTEA244 Em 1998 Wheeler e Needham sugeriram uma nova melhoria, aperfeiçoando a

função de arredondamento. A nova versão foi publicada com o nome de XXTEA.

XXTEA

O XXTEA opera com blocos de tamanho variável que são um múltiplo arbitrário

de 32 bits em tamanho (mínimo de 64 bits). O número de ciclos completos depende do tamanho do bloco, sendo de pelo menos seis (pode chegar a 32, para blocos de tamanho pequeno). Ele é melhor do que o TEA para mensagens longas.

244 Ver: http://en.wikipedia.org/wiki/XXTEA.

Um round do XXTEA

Sua formulação incrementada (não a original) é a seguinte:

#include <stdint.h> #define DELTA 0x9e3779b9 #define MX ((z>>5^y<<2) + (y>>3^z<<4)) ^ ((sum^y) + (k[(p&3)^e] ^ z)); void btea(uint32_t *v, int n, uint32_t const k[4]) uint32_t y, z, sum; unsigned p, rounds, e; if (n > 1) /* Coding Part */ rounds = 6 + 52/n; sum = 0; z = v[n-1]; do sum += DELTA; e = (sum >> 2) & 3; for (p=0; p<n-1; p++) y = v[p+1], z = v[p] += MX; y = v[0]; z = v[n-1] += MX; while (--rounds); else if (n < -1) /* Decoding Part */ n = -n; rounds = 6 + 52/n; sum = rounds*DELTA; y = v[0]; do e = (sum >> 2) & 3; for (p=n-1; p>0; p--) z = v[p-1], y = v[p] -= MX; z = v[n-1]; y = v[0] -= MX; while ((sum -= DELTA) != 0);

6.1.5.13 – O Algoritmo RC5245 O RC5 tem blocos de tamanho variável, chave variável (de 0 a 2040 bits), e

rodadas (rounds) variáveis (de 0 a 255). Como padrão, costuma-se usar os seguintes parâmetros: blocos de 64 bits, chave de 128 bits e 12 rodadas.246

Sua operação utiliza um número de adições modulares e XOR. Utiliza a estrutura geral da rede Feistel. Pode ser implementado em poucas linhas de cifrar/decifrar.

Uma rodada (duas meia-rodadas) do RC5

6.1.5.14 – O Algoritmo RC6 O RC6 é uma cifra de blocos de chave simétrica derivada do RC5. Foi projetada

por Ron Rivest, Matt Robshaw, Ray Sidney e Yiqun Lisa Yin para atender aos requisitos da competição do AES. Ele usa uma rede Feistel, tem blocos com 128 bits e suporta chaves de 128, 192 e 256 bits, e mais uma grande variedade de tamanhos de words, chaves e número de rodadas. Estruturalmente, é similar ao RC5, usando rotações dependentes de dados (data-dependent rotations), adição modular e operações XOR. Ele usa uma operação de multiplicação extra para fazer a rotação dependente em cada bit de uma word, e não apenas dos bits menos significativos.

245 O RC5 é designado como RC5-w/r/b, onde: w = tamanho da palavra em bits; r = número de rodadas; b = número de bytes de 8 bits na chave. Não deve ser confundido com o RC-5. Este é um protocolo que foi desenvolvido no final dos anos 1980 como um protocolo de comunicações em infra-vermelho para controles remotos. 246 Para maior proteção, sugere-se entre 18 a 20 rodadas. Isto porque, com 12 rodadas (com blocos de 64 bits), o RC5 é susceptível a ataques diferenciais que usem 244 textos claros escolhidos.

Algoritmo de Encriptação/Desencriptação do RC6: // Encryption/Decryption with RC6-w/r/b

//

// Input: Plaintext stored in four w-bit input registers A, B, C & D

// r is the number of rounds

// w-bit round keys S[0, ... , 2r + 3]

//

// Output: Ciphertext stored in A, B, C, D

//

// '''Encryption Procedure:'''

B = B + S[0]

D = D + S[1]

for i = 1 to r do

t = (B*(2B + 1)) <<< lg w

u = (D*(2D + 1)) <<< lg w

A = ((A ^ t) <<< u) + S[2i]

C = ((C ^ u) <<< t) + S[2i + 1]

(A, B, C, D) = (B, C, D, A)

A = A + S[2r + 2]

C = C + S[2r + 3]

// '''Decryption Procedure:'''

C = C - S[2r + 3]

A = A - S[2r + 2]

for i = r downto 1 do

(A, B, C, D) = (D, A, B, C)

u = (D*(2D + 1)) <<< lg w

t = (B*(2B + 1)) <<< lg w

C = ((C - S[2i + 1]) >>> t) ^ u

A = ((A - S[2i]) >>> u) ^ t

D = D - S[1]

B = B - S[0]

A função Feistel do algoritmo RC6

Cifra Two-Fish

Twofish é um algoritmo baseado no Blowfish do mesmo autor, publicado em

1998 e inscrito no AES Contest, ficando como um dos cinco finalistas. É um cifrador de blocos.

6.2 – Criptografia por Chave Assimétrica ou Chave Pública Na década de 1970 foi publicado o artigo New Directions in Cryptography, por

por Whitfield Diffie e Martin Hellman. O algoritmo publicado no artigo ficou conhecido como algoritmo Diffie-Hellman para troca de chaves, e levou ao surgimento imediato de pesquisas neste campo, as quais culminaram com a criação em 1977 do algoritmo RSA, por Ronald Rivest, Adi Shamir e Leonard Adleman.247

6.2.1 – Algoritmo Diffie-Hellman Para Troca de Chaves Como já se viu, os algoritmos se dividem em dois tipos: os algoritmos que

possuem a mesma chave para cifrar e decifrar (são os simétricos); e aqueles que possuem chaves distintas (os assimétricos). Quando possuem a mesma chave, faz-se

247 Aproximadamente na mesma época (1978) foi proposto um outro algoritmo de chave pública, o Merkle-Hellman – MH. Ele foi criado por Ralph Merkle e Martin Hellman. Não chegou a ser utilizado, porque foi rapidamente quebrado. Ele se baseia no chamado problema da mochila: sendo dados uma sequência de números e um número, determinar se existe um subconjunto da sequência cuja soma dê esse número. Apesar de ser um problema de classe NP-completo, se a sequência de números é crescente – ou seja, se cada elemento da sequência é maior que a soma de todos os anteriores, o problema se torna trivial, sendo possível resolvê-lo em tempo polinomial.

necessário um esquema pelo qual o remetente possa combinar com o destinatário qual será a chave de decifrar.

O problema é que, se existir um canal seguro para se transmitir a chave, tem que ser utilizado o mesmo canal (inseguro) para cumprir esse objetivo. Para isso foram criados vários algoritmos que pudessem tornar segura esta transmissão.

O melhor e mais utilizado desses algoritmos é o Diffie-Hellman. Ele foi usado para criar vários produtos comerciais ainda hoje disponíveis no mercado. O objetivo desse algoritmo é habilitar dois usuários a trocar uma chave com segurança, a qual será usada para cifrar e/ou decifrar.

O sucesso desse algoritmo é baseado na dificuldade de se calcular logaritmos discretos. O logaritmo discreto pode ser definido assim: primeiro, define-se a raiz primária de um número primo p como um número cujas potências podem gerar todos os inteiros entre 1 e p-1. Ou seja, se a é uma raiz primária de um número primo p, então os números

a mod p,a**2 mod p, ... , a**(p-1) mod p

são distintos e consiste nos inteiros de 1 a p-1 em alguma permutação. Para qualquer b e uma raiz primária a do número primo p, pode-se encontrar um

i tal que

b = a**i mod p onde 0 i (p-1)

O expoente i é referenciado como o logaritmo discreto, ou índice, de b para a base a, mod p.

A partir daqui pode-se definir o algoritmo de Diffie-Hellman para a troca de

chaves. Elementos públicos: q Número primo α α < q e α uma raiz primitiva de q Geração da base do usuário A: Selecionar um XA secreto | XA < q Calcular YA YA = αXA mod q Geração da base do usuário B: Selecionar um XB secreto | XB < q Calcular o YB YB = αXB mod q Geração da chave secreta de A: K = ( YB )

XA mod q Geração da chave secreta de B: K = ( YA )

XB mod q

O número primo e a sua respectiva raiz primitiva são de conhecimento público, ou seja, pode trafegar livremente pelo canal inseguro. As bases, Ya e Yb podem também circular livremente pelo canal inseguro. As chaves encontradas pelos dois usuários serão idênticas por causa das seguintes propriedades:

Desse modo, os dois lados da comunicação conseguem intercambiar as suas respectivas chaves.248

6.2.2 – Algoritmos de Chave Pública A criptografia de chave pública utiliza a combinação de uma chave privada e

uma chave pública. A chave privada só é conhecida pelo computador, enquanto que a chave pública é dada por um computador a qualquer outro computador que queira comunicar-se de forma segura com ele.

Para decodificar uma mensagem criptografada, um computador deve usar a chave pública, fornecida pelo computador de origem, e sua própria chave privada.

Uma implementação popular da criptografia de chave-pública é o Secure Sockets

Layer (SSL). O SSL é um protocolo de segurança utilizado por navegadores de Internet e Servidores WEB para transmitir informações sigilosas. O SSL tornou-se parte de um protocolo geral de segurança conhecido como Transport Layer Security – TLS.

Os navegadores da Internet indicam se está sendo usado um protocolo de segurança, como o TLS, por exemplo. Neste caso, o http na linha do endereço estará substituído por https; além disso, deve aparecer um pequeno cadeado na barra de status na parte inferior da janela do navegador.

A criptografia de chave pública envolve muito processamento, por essa razão a

maioria dos sistemas utiliza uma combinação da chave pública e simétrica. Quando dois computadores iniciam uma sessão segura, um computador cria uma chave simétrica249 e

248 Diffie-Hellman em duas linhas de Perl: http://www.cypherspace.org/rsa/perl-dh.html. 249 A chave costuma ser um número extremamente grande, da ordem de centenas de dígitos decimais. Mas, como os computadores mais comuns (de 32 bits) só conseguem armazenar números até 232 – 1,

a envia ao outro computador usando a criptografia de chave pública. Os dois computadores podem então se comunicar utilizando a criptografia de chave simétrica. Uma vez que a sessão é terminada, cada computador descarta a chave utilizada naquela sessão. Qualquer outra sessão posterior requer que uma nova chave simétrica seja criada e que todo o processo seja repetido.

6.2.2.1 – Características das Chaves Públicas As chaves usadas na criptografia de chave pública possuem estrutura

matemática.250 Por isso, sistemas de chave pública requerem chaves maiores do que os tamanhos de chave usados nos sistemas simétricos, para um nível equivalente de segurança. O tamanho da chave sugerido para sistemas baseados em fatoração e algoritmos discretos inteiros, que visam ter segurança equivalente a da cifra simétrica de 128 bits, é de 3072 bits.

A criptografia de curva elíptica (CCE) pode permitir chaves de tamanhos menores para uma segurança equivalente, entretanto, a dificuldade em criar suas chaves não os recomenda, principalmente devido à sua fraqueza contra ataques por força bruta.

A regra é usar uma chave de CCE com o dobro da segurança da chave simétrica, para o nível desejado. A verdade é que a segurança desses sistemas não foi provada matematicamente. Esta é uma razão para se valorizar a escolha de chaves longas.251

6.2.2.1.1 – Chaves e Senhas

Uma chave (key) não é a mesma coisa que uma senha (passphrase ou password). A chave é a combinação aleatória de caracteres utilizada para cifrar uma mensagem, e que geralmente tem um comprimento enorme (por exemplo, 128 bits). A senha, que pode ser uma palavra ou uma frase, é a chave de acesso do usuário à mensagem, sendo geralmente curta (não mais que 15 a 20 caracteres, na maioria das vezes).

Normalmente, o usuário não conhece a chave, mas deve necessariamente conhecer a senha, sem o quê não terá acesso à mensagem.

A senha (password) pode ser uma palavra (com ou sem sentido), ou ainda uma frase completa (passphrase), que é mais segura devido ao seu tamanho (longitude).252

A palavra-chave pode ser: • alfabética (constituída apenas por letras); • numérica (constituída apenas por números); • alfa-numérica (constituída por uma combinação de letras e números); • alfa-numérico-simbólica (constituída por uma série de letras, números e

símbolos).253

A chave alfabética pode ser:

devem ser utilizados algoritmos capazes de representar e operar com números inteiros gigantes (chamados inteiros de precisão múltipla). Ver: http://www.bibl.ita.br/xiencita/Artigos/Fund05.pdf. 250 Por exemplo, as chaves públicas usadas no sistema RSA são (basicamente) o produto de dois números primos. 251 Ver: http://en.wikipedia.org/wiki/Key_size. 252 Um exemplo de pass-phrase poderia ser: aandorinhavoaaoamanhecer (a andorinha voa ao amanhecer). 253 Por exemplo: j394u@344dklf)3&*¨¨%).

• com significado (um nome próprio, p. ex.: Vancouver); • sem significado (uma combinação de caracteres sem sentido).

A segurança da senha é determinada por: • Tamanho (comprimento ou longitude): quanto maior o número de bits de informação, maior é o número de combinações necessárias para quebrá-la. Por exemplo, uma chave com dois caracteres numéricos exige cem (102) tentativas para ser descoberta por tentativas; uma chave com cinco algarismos exige 100.000 (105) tentativas. • Aleatoriedade: se a chave é alfabética com sentido, um ataque de dicionário deve ser suficiente para quebrá-la. Para evitar isso, a chave deve ser gerada usando letras, números e caracteres simbólicos, de modo a ter o máximo de entropia possível. • Período de uso: uma chave se torna cada vez mais insegura à medida que permanece em uso.

Ou seja, para garantir a segurança de uma senha, ela precisa ser gerada

aleatoriamente, conter entropia suficiente e ser trocada periodicamente.254 6.2.2.1.2 – A Escolha da Chave de Encriptação

O problema de como gerar chaves verdadeiramente aleatórias é difícil, e tem

recebido soluções diferentes dos vários sistemas criptográficos. Alguns sistemas operacionais incluem ferramentas para coletar entropia a partir

da medição do tempo de certas operações imprevisíveis, tais como os movimentos da cabeça do disco rígido (hard-disk). Dados comuns (usados em jogos) podem ser utilizados para produzir aleatoriedade em pequenas quantidades.255

Há softwares que convertem a senha (passphrase) em uma chave através de um processo chamado hashing ou inicialização de chave (key initialization). Quando uma senha é usada como chave de codificação, os sistemas de criptografia bem projetados usam primeiro um algoritmo de derivação da chave, que adiciona um salt e o reduz ou o expande para o tamanho de chave desejado, por exemplo, pela redução de uma frase longa a um valor de 128 bits, apropriado para o uso em um bloco cifrado.

Sistemas de uma chave são bem mais rápidos, e sistemas de duas chaves são

bem mais seguros. Uma possível solução é combinar as duas, fornecendo assim um misto de velocidade e segurança. Assim, usa-se a encriptação de uma chave para encriptar a mensagem, e a chave secreta é transmitida usando a chave pública do destinatário.256 Nos sistemas simétricos (sistema de uma chave), o emissor e o receptor devem possuir a mesma chave, que é usada tanto para encriptar quanto para desencriptar a mensagem.

254 A chave também deve permanecer oculta: não deve ser escrita, e sim, memorizada; e jamais deve ser passada a pessoas que não sejam confiáveis. 255 Ver: http://www.cplusplus.com/forum/general/14408/, para geração de chaves aleatórias. 256 É importante não confundir chave privada com chave secreta. A primeira é mantida em segredo, enquanto que a segunda é enviada para as pessoas que efetuarão a comunicação. Muitas vezes, basta procurar no lixo que se encontram papéis com anotações de senhas.

Nos sistemas assimétricos (sistemas de duas chaves), cada um tem um par de chaves: uma chave pública e uma chave privada (que deve ser mantida secreta). As mensagens encriptadas com uma chave são desencriptadas com a outra chave. As chaves deste sistema costumam ser maiores do que a do sistema anterior.

Em qualquer sistema, as chaves são vulneráveis ao ataque de força bruta, no

qual o atacante simplesmente testa chave por chave, até encontrar a correta. O tempo que pode levar para encontrá-la depende tanto do tamanho da chave quanto do poder de processamento utilizado.

6.2.2.1.3 – Função Unidirecional ou Via de Mão Única

Diz-se que uma função é unidirecional se for viável computá-la diretamente e se for inviável computar a sua inversa.

Por exemplo, dois números primos da ordem de 10100. Multiplicá-los é uma questão de segundos; entretanto, com os conhecimentos atuais, é impossível encontrar os seus dois fatores primos em um tempo razoável.

O mesmo acontece com o chamado problema do logaritmo discreto (discrete log problem). Em sua formulação mais comum, é o problema de encontrar o expoente x na fórmula y = g^x mod p; ou dito de outra forma, a qual potência deve g ser elevado para que se obtenha y, módulo o número primo p. Assim como o problema da fatoração, acredita-se que esta seja uma função unidirecional. Por esta razão foi usada em vários sistemas de chave pública, tais como o sistema ElGamal e DSS.

Tanto a fatoração quanto o log discreto gastam aproximadamente o mesmo

tempo de processamento, com os melhores algoritmos. Portanto, gasta-se o mesmo tempo para resolver tanto o problema do log discreto módulo um primo de 512 bits, quanto fatorar um módulo RSA de 512 bits. Para alguns autores, haveria uma leve dificuldade a mais no primeiro caso.

6.2.2.1.4 – A Função Hash e a Message Digest Uma função hash257 é uma computação que pega uma entrada de tamanho

variável e retorna uma string de comprimento fixo, a qual é chamada de valor hash (hash value).258 Não é uma cifragem, e sim um digesto (compilação).259 As cifragens transformam os dados do texto claro em criptograma, e vice-versa. Ou seja, é uma operação de duas vias.260 Além do mais, em geral, o tamanho do criptograma é igual ao comprimento do texto claro.

257 Um hash é uma coleção de pares de key-value. É similar a um array (que é um vetor ou matriz que relaciona valores para chaves), exceto que pelo fato de que a indexação é feita via chaves arbitrárias de qualquer tipo de objeto, e não um índice de inteiros (integer index). Hashes têm um valor default (por omissão) que é retornado quando acessando chaves que não existem no hash .Por default, o valor é nil (nulo ou zero). Algumas vezes os hashes são chamados de checksum, o que provoca confusão com os verdadeiros checksums, os quais têm aplicações e cálculos totalmente diferentes. Um hash pode ser comparado com um selo de embalagem, o qual mostra, sem nenhuma dúvida, se esta foi aberta ou violada. 258 Hash = misturar; string = série, seqüência. 259 Digest: condensação, compilação. 260 Como a função é de mão única, ou seja, difícil de inverter, ela é chamado de message-digest function (função mensagem-compilada) e o resultado é chamado de a message digest (uma mensagem compilada).

O hash, por sua vez, transforma os dados do texto (claro ou cifrado) num pequeno digesto, de tamanho fixo, numa operação de mão única. Uma operação de mão única não tem volta, ou seja, não é possível obter o texto claro a partir de um resultado hash.

Os hashes produzem selos de segurança de comprimento fixo, não importa o comprimento do fluxo de dados ou do arquivo que representem. Qualquer alteração no arquivo, por mínima que seja, altera substancialmente o resultado hash. Isto ocorre porque, mesmo que apenas um dos bits do arquivo seja alterado, muitos bits do resultado serão afetados. Este comportamento é conhecido como efeito avalanche.

Como o digesto representa concisamente a mensagem mais longa, ou documento do qual foi computado, pode-se dizer que o digesto é como uma impressão digital do documento maior.261 Além do mais, as funções hash são muito rápidas.

O digesto em si pode ser tornado público sem comprometer o conteúdo do documento do qual proveio. A função hash utilizada para autenticação deve possuir certas propriedades para garantir a segurança criptográfica. Especificamente, deveria ser impossível encontrar uma mensagem em que hashes levassem a um valor dado, como também deveria ser impossível encontrar duas mensagens distintas cujo hash levasse ao mesmo valor. Pelo uso de métodos que produzam hashes de 128 bits, o número de hashes possíveis atinge um valor astronômico: 2128 = 3,4 x 1038, mais especificamente, 340.282.366.920.938.463.463.374.607.431.768.211.456 hashes de 128 bits.

Apesar disso, devido ao fato de que o número de conjuntos de dados é praticamente infinito, a possibilidade de que dois conjuntos de dados diferentes produzam o mesmo hash não pode ser ignorada. Esta coincidência de resultados é conhecida como colisão. A colisão ocorre quando duas senhas possuem o mesmo hash.262

A ocorrência de colisões pode ser diminuída de duas maneiras: aumentando o número de bits do resultado hash; criando algoritmos que produzam hashes menos vulneráveis.

6.2.2.1.5 – Resistência a Colisões

A resistência a colisões mede a dificuldade de encontrar duas entradas que

produzam o mesmo resultado hash. O valor hash pode ser qualquer um, o objetivo é encontrar duas entradas diferentes que forneçam um resultado idêntico. Isso porque, se for possível obter o mesmo resultado hash para duas entradas diferentes, as assinaturas digitais deixam de ser confiáveis, e não podem garantir a autenticidade do documento.

261 Exemplos de funções hash são o MD4, MD5 e SHS. 262 Outro problema é o chamado loop. Este ocorre quando dois hashes podem ser mapeados para a mesma senha.

6.2.2.1.6 – Resistência de Pré-Imagem A resistência de pré-imagem mede a dificuldade de criar um conjunto de dados

que resulte em um determinado valor hash, sem conhecer o texto que o originou. Caso a resistência de pre-imagem seja pequena, será mais fácil criar um texto qualquer cujo hash seja igual a um conhecido.

No caso de senhas, se se conhece o valor hash de uma delas, e daí se tornar possível criar uma senha que resulte em um hash idêntico, a segurança do sistema que faz autenticação exclusivamente com hashes de senhas estará comprometida.

6.2.2.1.7 – Resistência de Segunda Pré-Imagem

A resistência de segunda pré-imagem mede a dificuldade de criar um conjunto

de dados que resulte em um determinado valor hash, conhecendo o texto que o originou. Assim como a anterior se a resistência de segunda pré-imagem for baixa, a criação de um conjunto de dados que resulte em um hash conhecido fica facilitada.

6.2.2.2 – O Padrão PEM

O padrão PEM é o chamado padrão Internet Privacy-Enhanced Mail, que foi

proposto mas ainda não adotado pelo Internet Activities Board afim de prover correio eletrônico seguro na Internet. Ele inclui encriptação, autenticação e gerência de chaves (key management), permite criptosistemas com chave pública e secreta e suporta múltiplos dispositivos criptográficos de encriptação, assinatura digital e função hash. 6.2.2.3 – O Padrão RIPEM

O RIPEM é um programa desenvolvido por Mark Riordan que permite e-mail seguro na Internet; ele provê tanto encriptação quanto assinatura digital, usando rotinas RSA e DES. Não é plenamente compatível com o Padrão PEM.

6.2.2.4 – Os Algoritmos MD2, MD4 e MD5

MD2, MD4 e MD5 (MD significa Message Digest) são funções hash projetadas por Ron Rivest especificamente para uso criptográfico. Eles produzem digestos de 128-bit, e são imunes a ataques que não sejam pela procura exaustiva (força bruta).

MD2 é o mais lento dos três; MD4 é o mais rápido. O MD5 tem sido chamado de “MD4 com cinto de segurança”, porque o seu projeto provê maior segurança contra ataques, ainda que a um custo de ser cerca de 33% mais lento do que o MD4. O MD5 é o mais usado.

O MD4 e o MD5 estão disponíveis para uso público irrestrito. Quanto ao MD2, está disponível para uso com o PEM.

O MD4, ou função hash de via única MD4 foi projetada por Ron Rivest e

publicada em outubro de 1990. O algoritmo usa como entrada uma mensagem de comprimento arbitrário e produz um digesto (uma condensação) de mensagem de 128 bits. Ele foi criado para ser utilizado em assinaturas digitais, em que um texto longo precisa ser comprimido de forma segura antes de ser cifrado com uma chave privada por um cripto-sistema de chave pública. Foi projetado para ser bastante rápido em máquinas

de 32 bits. Além disso, não necessita de grandes tabelas de substituição e pode ser facilmente programado de forma compacta.

6.2.2.4.1 – Descrição do Algoritmo MD4263

A entrada do MD4 é uma mensagem que pode ter qualquer comprimento, ou seja, qualquer mensagem com um número arbitrário de bits. O número de bits, representado por b, é um número inteiro positivo que varia de zero até infinito. Para obter o digesto da mensagem, seus bits, representados por m0, m1, ..., mb-1, em que b = número de bits da mensagem, são submetidos a diversas operações.

Este processo é dividido em cinco etapas ou passos: Passo 1. Adição de bits: a mensagem é aumentada com a adição de bits até

atingir um comprimento congruente com 448 no módulo 512, ou seja, adiciona-se tantos bits quantos forem necessários para que o comprimento da mensagem seja 448 ou qualquer múltiplo de 512 menos 64 bits (512 – 64 = 448, 1024 – 64 = 960, etc). Esta adição pressupõe a inclusão de no mínimo um bit e, no máximo, de 512 bits.

O primeiro bit que deve ser adicionado logo no final da mensagem original é um bit "1". Todos os outros, necessários para se atingir o comprimento desejado, são bits "0".

Passo 2: Incluir comprimento: o valor b, que representa o comprimento em bits da mensagem original, deve ser adicionado à mensagem preparada no passo 1 na forma de 64 bits. É pouco provável que o valor de b seja maior do que 264 (?), mas, se assim for, apenas os 64 bits menos significativos de b serão usados. Estes 64 bits são adicionados como dois words264 de 32 bits. O word menos significativo é inserido primeiro, seguido do word mais significativo.

Aqui, o comprimento da mensagem resultante é 512 ou um dos seus múltiplos. Também é um múltiplo exato de 16 words pois, se um word possui 32 bits, 16 words possuem 16 x 32 = 512 bits. Estes words podem ser representados por M[0, 1, ..., N-1], onde N é um múltiplo de 16.

Passo 3: Inicialização do buffer MD: um buffer de quatro words é usado para

calcular o digesto da mensagem. Os registradores de 32 bits A, B, C e D são inicializados com os seguintes valores hexadecimais:

word A: 01 23 45 67 word B: 89 ab cd ef word C: fe dc ba 98 word D: 76 54 32 10

Nestes valores, os bytes mais significativos são colocados após os menos significativos, ou seja

Hexadecimal Binário Decimal ----------- --------------------------------------- ------------- A: 67 45 23 01 0110 0111 0100 0101 0010 0011 0000 0001 1.732.584.193 B: ef cd ab 89 1110 1111 1100 1101 1010 1011 1000 1001 4.023.233.417 C: 98 ba dc fe 1001 1000 1011 1010 1101 1100 1111 1110 2.562.383.102 D: 10 32 54 76 0001 0000 0011 0010 0101 0100 0111 0110 271.733.878

263 Ver: http://www.faqs.org/rfcs/rfc1320.html. 264 Palavra.

Passo 4: Processamento da mensagem em blocos de 16 words.265

6.2.2.4.2 – Descrição do Algoritmo MD5

O MD5 foi desenvolvido por Ron Rivest em 1991. É basicamente o MD4 com um cinto de segurança, no qual os cálculos são um pouco mais lentos, mas, em compensação, o algoritmo é muito mais seguro.266

Da mesma forma que outras funções hash, o MD5 é usado em assinaturas digitais em que um texto longo precisa ser "comprimido" de forma segura antes de ser cifrado com uma chave privada por um criptossistema de chave pública. Foi projetado para máquinas de 32 bits, podendo ser facilmente programado de forma compacta.

A entrada do MD5 é um fluxo de dados (mensagem) que pode ter um número

arbitrário de bits, representado por b, um número inteiro positivo que varia de zero até o infinito. Para obter o digesto da mensagem, seus bits, representados por m0, m1, ..., mb-

1, onde b = número de bits da mensagem, são submetidos a diversas operações. Assim como no MD4, este processo é dividido em cinco etapas ou passos. Devido a problemas de segurança,267 o MD5 foi aperfeiçoado, usando-se várias

técnicas: • Adicionando-se uma quarta rodada. • Usando uma constante aditiva única em cada etapa das rodadas. • Fazendo a função G menos simétrica, mudando-a de (XY or XZ or YZ) para

(XZ or Y not(Z)) • Promovendo um "efeito avalanche" mais rápido, com cada etapa adicionando

seu resultado à etapa anterior. • Mudando a ordem da entrada dos words nas rodadas 2 e 3 para tornar seus

padrões menos parecidos. • Otimizando as rotações de cada rodada para obter um "efeito avalanche" mais

rápido.

6.2.2.5 – O Algoritmo SHS (SHA-1) O algoritmo Secure Hash Standard – SHS é uma função hash proposta pelo

NIST e adotada como padrão pelo governo norte-americano. Foi projetada para ser usada junto com o Digital Signature Standard – DSS, e é parte de um projeto governamental chamado Projeto Capstone (Capstone Project).268

O SHS produz um hash-value de 160 bits a partir de uma entrada de tamanho variável. É estruturalmente similar ao MD4 e MD5. Apesar de ser cerca de 25% mais lento do que o MD5, pode ser mais seguro, porque produz digestos que são cerca de 25% maiores do que os produzidos pelas funções MD.

265 O processo completo pode ser visto em: http://www.numaboa.com/criptografia/hashes (para MD4 e MD5). 266 Ver: http://pajhome.org.uk/crypt/md5/. 267 Em 2005, Xiaoyun Wang, Xuejia Lai, Dengguo Feng, Hui Chen e Xiuyuan Yu apresentaram um método de criptoanálise das funções hash MD4, MD5, HAVAL-128 e RIPEMD, o qual reduzia drasticamente o tempo para encontrar colisões nas mesmas. 268 Assim como Project Clipper, o Capstone parece ter sido descontinuado.

O SHA-1269 foi aprovado em 1995 pelo governo dos EUA para ser usado por todos os departamentos e agências federais na autenticação de documentos digitais. É um padrão usado para calcular a representação condensada de uma mensagem ou arquivo de dados. Partindo de uma mensagem menor do que 264 bits, o SHA-1 produz uma saída de 160 bits (o digesto da mensagem), que pode ser a entrada para o DSA270 (Digital Signature Algorithm - Algoritmo de Assinatura Digital)271, que gera ou faz a verificação da assinatura da mensagem.272 Antes do cálculo do digesto, o tamanho em bits da mensagem deve ser ajustado, as funções para os cálculos preparadas e algumas constantes, definidas.

O SHA-1 é considerado seguro porque é quase impossível encontrar uma

mensagem que corresponda a um determinado digesto, ou encontrar duas mensagens diferentes que produzam o mesmo digesto. Qualquer alteração feita numa mensagem em trânsito, dará quase que certamente como resultado um digesto diferente, e a assinatura não poderá ser confirmada.

Ele pode ser aplicado, juntamente com o DSA, em e-mails, transferências eletrônicas de fundos, distribuição de software, armazenamento de dados ou outras aplicações que requeiram garantia de integridade e autenticação da origem dos dados.

6.2.2.5.1 – SHA-1 em Javascript – 1273

/*

* A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as

defined

* in FIPS PUB 180-1

* Version 2.1a Copyright Paul Johnston 2000 - 2002.

* Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet

* Distributed under the BSD License

* See http://pajhome.org.uk/crypt/md5 for details.

*/ /*

* Configurable variables. You may need to tweak these to be

compatible with

* the server-side, but the defaults work in most cases.

*/ var hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase

*/ var b64pad = ""; /* base-64 pad character. "=" for strict RFC compliance */ var chrsz = 8; /* bits per input character. 8 - ASCII; 16 - Unicode */

269 O SHA-1 é uma revisão técnica do SHA, na qual foi adicionada uma operação de deslocamento circular (shift) para a esquerda, para aumentar a segurança. Ele baseia-se nos mesmos princípios usados no algoritmo MD4. Além do SHA-1 e do MD5 existe o Whirlpool, adotado como padrão internacional pela norma ISO 10118-3 (o Whirlpool foi criado pelo brasileiro Paulo Barreto, professor da USP). Para download do código do Whirlpool em Java: http://www.koders.com/java/fidD7A13FF01887615B939ECFCDEAA9C4A606C83117.aspx. 270 Ver: http://en.wikipedia.org/wiki/Digital_Signature_Algorithm. Ver também: http://www.braghetto.eti.br/files/Trabalho%20Oficial%20Final%20RSA.pdf. 271 Ver item 11.3.2.6.2. 272 A eficiência do processo é maior quando se cria uma assinatura para o digesto, ao invés de criar uma para a mensagem; isso porque o digesto da mensagem é menor do que a mensagem. Tanto o verificador quanto o criador devem usar o mesmo algoritmo hash para gerar e verificar uma assinatura digital. 273 Autor: Paul Johnston.

/*

* These are the functions you'll usually want to call

* They take string arguments and return either hex or base-64 encoded

strings

*/ function hex_sha1(s)return binb2hex(core_sha1(str2binb(s),s.length * chrsz)); function b64_sha1(s)return binb2b64(core_sha1(str2binb(s),s.length * chrsz)); function str_sha1(s)return binb2str(core_sha1(str2binb(s),s.length * chrsz)); function hex_hmac_sha1(key, data) return binb2hex(core_hmac_sha1(key, data)); function b64_hmac_sha1(key, data) return binb2b64(core_hmac_sha1(key, data)); function str_hmac_sha1(key, data) return binb2str(core_hmac_sha1(key, data)); /*

* Perform a simple self-test to see if the VM is working

*/ function sha1_vm_test() return hex_sha1("abc") == "a9993e364706816aba3e25717850c26c9cd0d89d"; /*

* Calculate the SHA-1 of an array of big-endian words, and a bit

length

*/ function core_sha1(x, len) /* append padding */ x[len >> 5] |= 0x80 << (24 - len % 32); x[((len + 64 >> 9) << 4) + 15] = len; var w = Array(80); var a = 1732584193; var b = -271733879; var c = -1732584194; var d = 271733878; var e = -1009589776; for(var i = 0; i < x.length; i += 16) var olda = a; var oldb = b; var oldc = c; var oldd = d; var olde = e; for(var j = 0; j < 80; j++) if(j < 16) w[j] = x[i + j]; else w[j] = rol(w[j-3] ^ w[j-8] ^ w[j-14] ^ w[j-16], 1); var t = safe_add(safe_add(rol(a, 5), sha1_ft(j, b, c, d)), safe_add(safe_add(e, w[j]), sha1_kt(j))); e = d; d = c;

c = rol(b, 30); b = a; a = t; a = safe_add(a, olda); b = safe_add(b, oldb); c = safe_add(c, oldc); d = safe_add(d, oldd); e = safe_add(e, olde); return Array(a, b, c, d, e); /*

* Perform the appropriate triplet combination function for the

current

* iteration

*/ function sha1_ft(t, b, c, d) if(t < 20) return (b & c) | ((~b) & d); if(t < 40) return b ^ c ^ d; if(t < 60) return (b & c) | (b & d) | (c & d); return b ^ c ^ d; /*

* Determine the appropriate additive constant for the current

iteration

*/ function sha1_kt(t) return (t < 20) ? 1518500249 : (t < 40) ? 1859775393 : (t < 60) ? -1894007588 : -899497514; /*

* Calculate the HMAC-SHA1 of a key and some data

*/ function core_hmac_sha1(key, data) var bkey = str2binb(key); if(bkey.length > 16) bkey = core_sha1(bkey, key.length * chrsz); var ipad = Array(16), opad = Array(16); for(var i = 0; i < 16; i++) ipad[i] = bkey[i] ^ 0x36363636; opad[i] = bkey[i] ^ 0x5C5C5C5C; var hash = core_sha1(ipad.concat(str2binb(data)), 512 + data.length * chrsz); return core_sha1(opad.concat(hash), 512 + 160); /*

* Add integers, wrapping at 2^32. This uses 16-bit operations

internally

* to work around bugs in some JS interpreters.

*/ function safe_add(x, y) var lsw = (x & 0xFFFF) + (y & 0xFFFF); var msw = (x >> 16) + (y >> 16) + (lsw >> 16); return (msw << 16) | (lsw & 0xFFFF); /*

* Bitwise rotate a 32-bit number to the left.

*/ function rol(num, cnt) return (num << cnt) | (num >>> (32 - cnt)); /*

* Convert an 8-bit or 16-bit string to an array of big-endian words

* In 8-bit function, characters >255 have their hi-byte silently

ignored.

*/ function str2binb(str) var bin = Array(); var mask = (1 << chrsz) - 1; for(var i = 0; i < str.length * chrsz; i += chrsz) bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (32 - chrsz - i%32); return bin; /*

* Convert an array of big-endian words to a string

*/ function binb2str(bin) var str = ""; var mask = (1 << chrsz) - 1; for(var i = 0; i < bin.length * 32; i += chrsz) str += String.fromCharCode((bin[i>>5] >>> (32 - chrsz - i%32)) & mask); return str; /*

* Convert an array of big-endian words to a hex string.

*/ function binb2hex(binarray) var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef"; var str = ""; for(var i = 0; i < binarray.length * 4; i++) str += hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8+4)) & 0xF) + hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8 )) & 0xF); return str; /*

* Convert an array of big-endian words to a base-64 string

*/ function binb2b64(binarray) var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; var str = ""; for(var i = 0; i < binarray.length * 4; i += 3) var triplet = (((binarray[i >> 2] >> 8 * (3 - i %4)) & 0xFF) << 16) | (((binarray[i+1 >> 2] >> 8 * (3 - (i+1)%4)) & 0xFF) << 8 ) | ((binarray[i+2 >> 2] >> 8 * (3 - (i+2)%4)) & 0xFF); for(var j = 0; j < 4; j++) if(i * 8 + j * 6 > binarray.length * 32) str += b64pad; else str += tab.charAt((triplet >> 6*(3-j)) & 0x3F); return str;

6.2.2.5.2 – SHA-1 em Javascript – 2274 /**

*

* Secure Hash Algorithm (SHA1)

* http://www.webtoolkit.info/

*

**/ function SHA1 (msg) function rotate_left(n,s) var t4 = ( n<<s ) | (n>>>(32-s)); return t4; ; function lsb_hex(val) var str=""; var i; var vh; var vl; for( i=0; i<=6; i+=2 ) vh = (val>>>(i*4+4))&0x0f; vl = (val>>>(i*4))&0x0f; str += vh.toString(16) + vl.toString(16); return str; ; function cvt_hex(val) var str=""; var i; var v;

274 Ver: http://www.webtoolkit.info/javascript-sha1.html.

for( i=7; i>=0; i-- ) v = (val>>>(i*4))&0x0f; str += v.toString(16); return str; ; function Utf8Encode(string) string = string.replace(/\r\n/g,"\n"); var utftext = ""; for (var n = 0; n < string.length; n++) var c = string.charCodeAt(n); if (c < 128) utftext += String.fromCharCode(c); else if((c > 127) && (c < 2048)) utftext += String.fromCharCode((c >> 6) | 192); utftext += String.fromCharCode((c & 63) | 128); else utftext += String.fromCharCode((c >> 12) | 224); utftext += String.fromCharCode(((c >> 6) & 63) | 128); utftext += String.fromCharCode((c & 63) | 128); return utftext; ; var blockstart; var i, j; var W = new Array(80); var H0 = 0x67452301; var H1 = 0xEFCDAB89; var H2 = 0x98BADCFE; var H3 = 0x10325476; var H4 = 0xC3D2E1F0; var A, B, C, D, E; var temp; msg = Utf8Encode(msg); var msg_len = msg.length; var word_array = new Array(); for( i=0; i<msg_len-3; i+=4 ) j = msg.charCodeAt(i)<<24 | msg.charCodeAt(i+1)<<16 | msg.charCodeAt(i+2)<<8 | msg.charCodeAt(i+3); word_array.push( j );

switch( msg_len % 4 ) case 0: i = 0x080000000; break; case 1: i = msg.charCodeAt(msg_len-1)<<24 | 0x0800000; break; case 2: i = msg.charCodeAt(msg_len-2)<<24 | msg.charCodeAt(msg_len-1)<<16 | 0x08000; break; case 3: i = msg.charCodeAt(msg_len-3)<<24 | msg.charCodeAt(msg_len-2)<<16 | msg.charCodeAt(msg_len-1)<<8 | 0x80; break; word_array.push( i ); while( (word_array.length % 16) != 14 ) word_array.push( 0 ); word_array.push( msg_len>>>29 ); word_array.push( (msg_len<<3)&0x0ffffffff ); for ( blockstart=0; blockstart<word_array.length; blockstart+=16 ) for( i=0; i<16; i++ ) W[i] = word_array[blockstart+i]; for( i=16; i<=79; i++ ) W[i] = rotate_left(W[i-3] ^ W[i-8] ^ W[i-14] ^ W[i-16], 1); A = H0; B = H1; C = H2; D = H3; E = H4; for( i= 0; i<=19; i++ ) temp = (rotate_left(A,5) + ((B&C) | (~B&D)) + E + W[i] + 0x5A827999) & 0x0ffffffff; E = D; D = C; C = rotate_left(B,30); B = A; A = temp; for( i=20; i<=39; i++ ) temp = (rotate_left(A,5) + (B ^ C ^ D) + E + W[i] + 0x6ED9EBA1) & 0x0ffffffff; E = D; D = C; C = rotate_left(B,30); B = A; A = temp; for( i=40; i<=59; i++ )

temp = (rotate_left(A,5) + ((B&C) | (B&D) | (C&D)) + E + W[i] + 0x8F1BBCDC) & 0x0ffffffff; E = D; D = C; C = rotate_left(B,30); B = A; A = temp; for( i=60; i<=79; i++ ) temp = (rotate_left(A,5) + (B ^ C ^ D) + E + W[i] + 0xCA62C1D6) & 0x0ffffffff; E = D; D = C; C = rotate_left(B,30); B = A; A = temp; H0 = (H0 + A) & 0x0ffffffff; H1 = (H1 + B) & 0x0ffffffff; H2 = (H2 + C) & 0x0ffffffff; H3 = (H3 + D) & 0x0ffffffff; H4 = (H4 + E) & 0x0ffffffff; var temp = cvt_hex(H0) + cvt_hex(H1) + cvt_hex(H2) + cvt_hex(H3) + cvt_hex(H4); return temp.toLowerCase();

6.2.2.6 – O Sistema Kerberos275

Este é um sistema de autenticação de rede por chave-secreta desenvolvido pelo

MIT, que usa o DES para encriptação e autenticação. Ele não produz assinaturas digitais, mas provê autenticação em tempo real em ambientes distribuídos (distributed environment). Neste sistema há um Servidor Kerberos na rede o qual: centraliza a gerência de chaves; contém as chaves secretas de todos os usuários; gera chaves solicitadas; autentica a identidade de usuários. Se o Servidor for invadido, toda a segurança do sistema ficará comprometida.

6.2.2.7 – Padrões PKCS276 O PKCS (Public-Key Cryptography Standards) é um conjunto de padrões para a

implementação de criptografia de chave pública. É compatível com o PEM e com os padrões CCITT X.509. Alguns algoritmos específicos suportam RSA, DES e o algoritmo Diffie-Hellman de troca de chave.277

275 Ver: http://web.mit.edu/Kerberos/. Para download do Free Kerberos Security JavaScript: http://scripts.top4download.com/free-kerberos-security/javascript/. 276 Ver: http://en.wikipedia.org/wiki/PKCS. 277 RSAREF: O RSA Laboratories fornece sem custo uma coleção de rotinas de criptografia em código C para RSA, MD2, MD5 e DES, as quais são plenamente compatíveis com PEM e com os padrões PKCS (não podem ser exportadas para fora dos EUA). Ver: http://www.rsa.com/rsalabs/node.asp?id=2124.

6.2.2.8 – Algoritmos de Espalhamento A chave, na criptografia de chave pública, é baseada em um hash value. Esse

valor é calculado a partir de um número de entrada baixo, utilizando um algoritmo de espalhamento. Basicamente, esse valor é um sumário (digesto) dos valores de origem. O importante, sobre esses hash value, é que se torne quase impossível derivar o número original de entrada sem conhecer os dados utilizados para criá-lo. Eis um exemplo:

Número de entrada Algoritmo de espalhamento Hash value

10.667 # input x 143 1.525.381

Observa-se que é difícil determinar quais os fatores cujo produto é o valor 1.525.381 (ele veio da multiplicação de 10.667 por 143). Mas se se soubesse que o fator multiplicador era 143, então seria fácil calcular o valor 10.667.

As chaves públicas geralmente utilizam algoritmos complexos e hash value muito grandes para criptografia, incluindo números de 40 bits ou até mesmo de 128 bits. Um número de 128 bits possui cerca de 2128 combinações, ou (3402823669209384634633746074300000000000000000000000000000000000000) diferentes combinações possíveis.

6.2.3 – O Algoritmo RSA Este é um algoritmo de encriptação de dados,278 de chave assimétrica, talvez um

dos mais seguros algoritmos de encriptação atuais. Ele originou-se dos estudos dos matemáticos do Ronald Rivest, Adi Shamir e Leonard Adleman (fundadores da empresa RSA Data Security, Inc.). Tem por fundamento a Teoria dos Números. Foi o primeiro algoritmo a possibilitar encriptação e assinatura digital, e uma das grandes inovações em criptografia de chave pública. O RSA não gera chaves criptografadas, apenas utiliza chaves já criadas por meio de tecnologia de chaves públicas.

Definições básicas:

• Chave: é uma informação restrita que controla toda a operação dos algoritmos de criptografia. No processo de codificação, uma chave opera a transformação do texto claro em um texto criptografado.

• Chave Privada: é uma informação pessoal que permanece de posse da pessoa e não é publicável (ou seja, deve ser mantida em sigilo).

• Chave Pública: é uma informação associada a uma pessoa, e que é distribuída a todos (ou seja, a chave pública pode ser conhecida por todos).

Qualquer mensagem cifrada usando a chave pública só poderá ser decifrada

usando-se a respectiva chave privada. O princípio do algoritmo é construir chaves públicas e privadas utilizando

números primos. A questão da escolha dos números primos é fundamental para o algoritmo. Por essa razão, são escolhidos números primos gigantescos (de cem dígitos

278 Ele é composto de um sistema de criação de chaves, um algoritmo de encriptação e um algoritmo de desencriptação.

cada um, no mínimo) para garantir que a chave seja inquebrável (sua segurança baseia-se exatamente na atual intratabilidade da fatoração dos produtos de dois números primos gigantes279).

Em traços gerais, são gerados dois pares de números – as chaves – de tal forma que uma mensagem encriptada com o primeiro par possa ser apenas desencriptada com o segundo par; entetanto, o segundo número não pode ser derivado do primeiro. Esta propriedade assegura que o primeiro número possa ser divulgado a alguém que pretenda enviar uma mensagem encriptada ao detentor do segundo número, já que apenas essa pessoa pode desencriptar.280

6.2.3.1 – Geração das Chaves RSA

Um usuário B, para determinar seu par (PB,SB), procede da seguinte maneira:

escolhe ao acaso dois primos grandes p e q e computa o seu produto (n=p*q), e o número f(n)=(p-1)*(q-1); B escolhe ao acaso um número c relativamente primo com f(n) (ou seja, c e f(n) não possuem fatores em comum), e determina d tal que c*d (módulo f(n)). Finalmente, o usuário B publica sua chave pública PB(c,n) e mantém secretos p, q, f(n) e d. A chave secreta SB(d,n) deve ser mantida em sigilo completo.

As chaves são geradas da seguinte maneira:

1. Escolher de forma aleatória dois números primos grandes e 2. Computar

3. Computar a função totiente281 em : .

4. Escolher um inteiro tal que 1 < < , de forma que e sejam primos entre si.

5. Computar de forma que , ou seja, seja o inverso

multiplicativo de em .

• No passo 1 os números podem ser testados probabilisticamente para primalidade.

• No passo 5 é usado o algoritmo de Euclides estendido, e o conceito de inverso multiplicativo da aritmética modular.

A chave pública é o par de números e . A chave privada é o par de números e .

279 Este algoritmo mostra-se computacionalmente inquebrável com números de tais dimensões, e a sua força é geralmente quantificada com o número de bits utilizados para descrever tais números. Para um número de 100 dígitos são necessários cerca de 350 bits, e as implementações atuais superam os 512 e mesmo os 1024 bits. 280 RSA ern Perl: http://www.webreference.com/perl/tutorial/16/2.html. Ver também: http://everything2.com/title/RSA+in+3+lines+of+perl. 281 A função totiente, ou função phi (fi) – representada por φ(x) – é definida para um número natural x como sendo igual à quantidade de números menores que x co-primos com respeito a ele.

Matematicamente: . Por exemplo, φ(8) = 4, uma vez que 1, 3, 5 e 7 são co-primos de 8 [números co-primos são os que não têm nenhum fator comum maior do que 1]. Veja-se o artigo Função Totiente de Euler na Wikipédia, em: http://pt.wikipedia.org/wiki/Fun%C3%A7%C3%A3o_totiente_de_Euler.

• Encriptação:

Para transformar uma mensagem em uma mensagem encriptada usando a chave pública do destinatário e , basta fazer uma potenciação modular (há um algoritmo para realizar esta potência rapidamente).

A mensagem então pode então ser transmitida em canal inseguro para o receptor.

• Desencriptação:

Para recuperar a mensagem da mensagem encriptada usando a respectiva chave privada do receptor e , basta fazer outra potenciação modular:

Exemplo:

Para entender melhor, serão escolhidos números primos pequenos, para permitir um acompanhamento de todo o processo de cifragem e decifragem.

• P = 17 • Q = 11

A seguir são calculados dois novos números N e Z de acordo com os números P e Q escolhidos:

• N = P * Q = 17 * 11 = 187 • Z = (P - 1) * (Q - 1) = 16 * 10 = 160

Agora define-se um número D que tenha a propriedade de ser primo em relação à Z. No caso, escolheu-se o número 7, ou seja:

• D = 7

De posse desses números, tem início o processo de criação das chaves públicas e privadas. É necessário encontrar um número E que satisfaça a seguinte propriedade:

• (E * D) mod Z = 1

Se forem feitos os testes com 1, 2, 3... encontra-se:

• E = 1 => (1 * 7) mod 160 = 7 • E = 2 => (2 * 7) mod 160 = 14 • E = 3 => (3 * 7) mod 160 = 21 • ... • E = 23 => (23 * 7) mod 160 = 1 • ...

• E = 183 => (183 * 7) mod 160 = 1 282 • ... • E = 343 => (343 * 7) mod 160 = 1 • ... • E = 503 => (503 * 7) mod 160 = 1 • ...

Então, a propriedade indicada é satisfeita pelos números 23, 183, 343 e 503. Para simplificar os cálculos, será tomado como referência:

E = 23.

Com esse processo definem-se as chaves de encriptação e desencriptação.

Para encriptar, usar E e N (23 e 187). Esse par de números é utilizado como chave pública.

Para desencriptar, usar D e N (7 e 187). Esse par de números é utilizado como

chave privada.

As equações são:

Texto criptografado = (Texto original ^ E) mod N Texto original = (Texto criptografado ^ D) mod N

Exemplo prático:

Seja encaminhar uma mensagem curta, a letra D, por exemplo, aqui representada pelo número 4, tendo por base as chaves estabelecidas.

Para encriptar:

Texto original = 4 Texto criptografado = (4 ^ 23) mod 39 Texto criptografado = 70.368.744.177.664 mod 39 Texto criptografado = 64

Para desencriptar:

Texto recebido = 64 Texto original = (64 ^ 7) mod 39 Texto original = 4.398.046.511.104 mod 39 Texto original = 4

282 Note-se que: 183 = 1x160 + 23; 343 = 2x160 + 23; 503 = 3x160 + 23.

6.2.3.2 – Assinatura Digital com RSA

Para implementar um sistema de assinaturas digitais com RSA, o usuário que possua uma chave privada d pode assinar uma dada mensagem (em blocos) m com a seguinte expressão:

Como já se viu, é difícil descobrir s sem o conhecimento de d. Portanto, uma assinatura digital definida conforme esta equação é difícil de forjar; além disso, o emissor de m não pode negar tê-la emitido, pois ninguém mais poderia ter criado a assinatura. O receptor recupera a mensagem utilizando a chave pública e do emissor:

Como tal, o receptor consegue validar a assinatura do emissor calculando se mod n. Como se pode verificar, o algoritmo RSA satisfaz os três requisitos básicos de uma assinatura digital.

A assinatura varia dependente da mensagem em si, assim, operando sobre mensagens longas, o tamanho da assinatura se torna proporcional a ela. Para evitar isso, faz-se operar o algoritmo sobre um resumo (digesto) da mensagem que identifique essa mensagem como única (geralmente, o digesto de uma mensagem varia alterando um único byte). Em consequência, uma assinatura varia de mensagem para mensagem, para um mesmo emissor.283

6.2.3.3 – Funcionamento do RSA Uma analogia bastante conhecida no meio acadêmico é a transmissão de

mensagens entre Alice e Bob. Alice e Bob são personagens fictícios que precisam trocar mensagens seguras

entre si, sem que estas sejam interceptadas. O algoritmo RSA permite essa troca segura de mensagens, pela utilização de chaves públicas e privadas:

• Alice cria seu par de chaves (uma pública e outra privada) e envia sua chave

pública para todos, inclusive Bob; • Bob escreve sua mensagem para Alice. Após escrevê-la, Bob faz a cifragem do

texto final com a chave pública de Alice, gerando um texto criptografado; • Alice recebe o texto criptografado de Bob e a decifra utilizando a sua chave

privada. O procedimento é realizado com sucesso porque somente a chave privada de

Alice é capaz de decifrar um texto criptografado com a sua chave pública. É importante destacar que se for aplicada a chave pública de Alice sobre o texto

critografado, não se consegue a mensagem original de Bob. Dessa forma, mesmo que a mensagem seja interceptada, é impossível decifrá-la sem a chave privada de Alice. Quando Alice quer mandar uma mensagem para Bob, ela busca a chave pública dele em um diretório, usa-a para encriptar a mensagem e a envia. Bob usa a sua chave privada para desencriptar a mensagem e lê-la.

283 Exemplo de função geradora do digesto é o Secure Hash – SHA-1.

Este sistema também permite a autenticação digital de mensagens, ou seja é possível prover certeza ao receptor sobre a identidade do transmissor e sobre a integridade da mensagem. Quando uma mensagem é encriptada com uma chave privada, ao invés da chave pública; o resultado é uma assinatura digital, ou seja, uma mensagem que só uma pessoa poderia produzir, mas que todos possam verificar.

Na implementação de códigos por hardware, a maior desvantagem do RSA é a

sua capacidade de canal limitada, ou seja, o número de bits de mensagem que ele pode transmitir por segundo. Enquanto um chip DES pode processar informação na ordem de milhões de bits por segundo, um chip RSA consegue fazê-lo somente na ordem de mil bits por segundo.

6.2.3.4 – Noções Avançadas de RSA284

d = e-1 mod Φ : a segunda chave de um par, inversa da primeira no anel ZΦ(n) é calculada pelo algoritmo de Euclides extendido:

O algoritmo funciona devido ao Teorema de Fermat:

284 Ver: http://www.cic.unb.br/docentes/pedro/segdados_files/CriptSeg5-6.pdf.

6.2.3.4.1 – Segurança do Algoritmo

Os parâmetros p, q e Φ(n) permitem calcular dA a partir de eA. Portanto, devem ser protegidos juntamente com dA.

Por força bruta, pode-se tentar fatorar n para se obter Φ(n) e saber em que anel

inverter eA. Pode-se também tentar adivinhar Φ(n), mas o custo deste ataque é tão alto quanto o de tentar fatorar n. O custo aumenta se se tentar adivinhar eA

-1. 6.3 – Funções Unidirecionais Podemos dizer que uma função é unidirecional se for computacionalmente

viável computá-la diretamente e inviável computar a sua inversa. Uma função unidirecional é com segredo, se existe uma informação que torna a computação da sua inversa possível.

A função produto de dois primos é unidirecional sem segredo. A função unidirecional sem segredo é útil, por exemplo, na proteção de senhas. Quando o usuário inicia a sessão, fornece a senha, que é cifrada e comparada com a senha cifrada armazenada. Desse modo, exige-se apenas a integridade do arquivo de senhas, não mais exigindo controle de acesso ao arquivo.

Ao selecionar uma função unidirecional como função de ciframento, o projetista

deve supor que: • o algoritmo de ciframento é de domínio público; • o espião tem acesso ao texto cifrado.

Diz-se então que a criptoanálise é de texto cifrado conhecido.

6.3.1 – Protocolo para a Distribuição de Chaves Secretas285

Se se adota o método de chaves secretas, é recomendável não utilizar por muito

tempo a mesma senha. O ideal seria que uma nova fosse estabelecida a cada sessão. Para isso, é apresentada aqui uma solução baseada no conceito de funções unidirecionais.

A função a ser usada é a exponencial módulo de um número, isto é, dados os inteiros a, x e n, seja f(x)=a^x mod n (n>0, x>=0). Assim, f(x) é o resto da divisão de a^x por n. O procedimento a seguir mostra como calcular esta função :

Procedimento expomod (a,x,n,r:inteiro); r possui o resultado da função declare y,c: inteiro inicio

r:= l; y:=x; c:=a mod n;

enquanto y>O faça início se ímpar(y) então

285 Ver: http://www.buscalegis.ufsc.br/revistas/index.php/buscalegis/article/viewFile/2847/2418. Ver também: ftp://ftp.funet.fi:/pub/crypt/cryptography/symmetric.

r=r*c mod n; y=y div 2; c=c^2 mod n; fim; fim; Suponha-se que os usuários A e B desejam manter uma conversa sigilosa através de chave secreta. Ambos escolhem um número primo grande p' da ordem de 10100 e concordam em utilizar uma base a.

Preferivelmente deve ser uma raiz primitiva de p, de modo que f(x)=a^x mod p é uma bijeção sobre o conjunto 1..p-1 dos naturais x tais que 1 <= x <= p-1.

Para iniciar o estabelecimento da chave, A gera ao acaso um expoente x no intervalo 1..p-1 e B gera outro, y. Usando expomod, A calcula f(x) e B f(y). Então A envia pela rede f(x) e B envia f(y). De posse de y e f(x), B calcula, usando expomod:

k = [f(x)]^y mod p = (a^x mod p)^y mod p = a^(xy) mod p = K.

Da mesma forma, A usa expomod e de posse de x e f(y) calcula:

k = [f(y)]^x mod p = (a^y mod p)^x mod p = a^(xy) mod p = K.

Supondo que um invasor obtenha os valores de a e p e também os valores de f(f(x)) e de f(f(y)). Para determinar K, ele precisaria determinar a função logaritmo módulo p, que é matematicamente intratável.286 Mesmo A não é capaz de determinar o valor de y, e B, o valor de x.

A função expomod, que é unidirecional sem segredo, permite a A e B trocarem uma chave secreta utilizando a própria rede.

286 Significa que exige amplos recursos de software e hardware, bem como uma gigantesca quantidade de tempo de processamento, que se contam em milhares de anos.

CAPÍTULO VII

CRIPTOGRAFIA E SEGURANÇA – I

7.0 – Revendo os Conceitos287 Criptografia (kryptós, "escondido"; gráphein, "escrita") é o estudo dos princípios

e técnicas pelas quais a informação pode ser transformada da sua forma original para uma outra ilegível, de forma que possa ser conhecida apenas por seu destinatário autorizado (detentor da chave secreta), pois só ele poderá ler a mensagem.

É um ramo da Matemática, e parte da Criptologia.

7.1 – A Encriptação

A encriptação é o processo de tornar uma mensagem ou texto inteligível (o texto claro) em uma mensagem ou texto ininteligível (o texto cifrado ou criptograma).

O sistema de cifragem consiste em: • um conjunto de regras que descreve o processo de criptografia (chamado sistema geral), o qual deve ser conhecida entre as partes legítimas da comunicação; • uma chave (fixa ou variável), igualmente conhecida pelas partes.

Os processos básicos de encriptação são: • Os métodos de transposição. • Os métodos de substituição. • Os métodos mistos. • Os métodos algébricos. • Os métodos lógico-computacionais.

Qualquer que seja o método utilizado, ele deve prover regras para a encriptação

e a desencriptação, e deve dificultar ou impossibilitar a sua quebra pelo criptoanalista.

A transposição realiza uma re-disposição ou embaralhamento das letras do texto claro, sem trocá-las por outras letras. Ou seja, os caracteres conservam a sua identidade, mas perdem a sua posição.

A substituição é o processo pelo qual as letras do texto claro são trocadas por outras, através de um sistema elaborado de troca. Assim, os caracteres conservam a sua posição, mas perdem a sua identidade.

O método misto envolve os dois processos, de transposição e de substituição. Neste caso, os caracteres perdem a sua identidade e a sua posição.

O método algébrico faz a substituição dos caracteres por algarismos (geralmente em base decimal), realizando em seguida uma série de operações matemáticas para a codificação. Estas operações devem ser reversíveis, para que possa ocorrer a desencriptação.

Os métodos lógico-computacionais realizam operações lógico-matemática no texto claro, para encriptá-lo.

287 Este capítulo é um resumo geral dos conceitos explanados.

7.2 – A Desencriptação A desencriptação implica o processo inverso ao anterior: implica em deixar

inteligível uma mensagem ou criptograma recebido. A interceptação é o processo pelo qual um agente não autorizado intercepta a

mensagem cifrada e procura decifrá-la. Deciframento é o processo pelo qual o agente recupera em parte ou na íntegra a

mensagem cifrada interceptada. O processo de deciframento é chamado de ataque ao texto cifrado. O ataque

pode ser:

• pela força bruta, que consiste em testar todos os tipos de chaves possíveis;288 • pelo processo de quebra de cifra. Quebrar uma cifra significa simplesmente

encontrar uma fraqueza no criptograma (que se expressa por padrões ocultos existentes na mensagem cifrada), a qual possa ser explorada com uma complexidade menor do que pelo ataque pela força bruta.

Quando um código é facilmente decifrável, é chamado cifra fraca ou código

fraco. É chamado de cifra forte ou código forte, no caso contrário. Atualmente, considera-se que todas as cifras clássicas são completamente

inseguras. 7.3 – Chaves e Algoritmos Cifrar é o ato de transformar dados em algo ilegível. Seu propósito é o de

garantir a privacidade, mantendo a informação escondida de qualquer pessoa não autorizada, mesmo que esta consiga ver os dados criptografados.

Decifrar é o processo inverso, ou seja, transformar os dados criptografados na sua forma original, inteligível.

Para cifrar ou decifrar uma mensagem são necessárias informações confidenciais chamadas chaves.

Uma chave é uma peça de informação que controla a operação de um algoritmo

de criptografia. Na codificação, uma senha especifica a transformação do texto puro em texto cifrado, e vice-versa, na decodificação.

Chaves são também usadas em outros algoritmos criptográficos, tais como esquemas de assinatura digital289 e funções hash, algumas vezes para autenticação.

Em algoritmos bem projetados, cifrar o mesmo texto com uma chave diferente deve produzir um texto cifrado completamente diferente. Igualmente, decifrar o texto cifrado com a chave errada deve produzir um texto aleatório ininteligível. Se a chave de

288 O ataque pela força bruta é conhecido atualmente como ataque por procura exaustiva no espaço das chaves (a dimensão do espaço das chaves é dado pelo número de pares encriptação/desencriptação disponível no sistema de cifragem). 289 A assinatura digital é usada para verificar a confiabilidade da mensagem, ou seja, a sua procedência; ela tem a mesma função que uma assinatura pessoal. Assim, para cada mensagem existe uma função de certificação, mantida em sigilo pelo emissor. Este emite uma função de verificação (pública), que certifica se o par (Mensagem,Assinatura) é real ou falso. O receptor, ao receber este par, como possui a função de verificação, pode verificar a veracidade da mensagem (ver item 8.3).

desencriptação se perder, a mensagem cifrada não pode ser recuperada pelo mesmo algoritmo de criptografia.

Dependendo do método de criptografia empregado, a mesma chave pode ser

utilizada para criptografar ou para descriptografar mensagens. De todo modo, o texto criptografado, se for interceptado, não deve poder ser decifrado; ele deve poder ser lido apenas por quem tem a chave para restaurar as informações à sua forma original.

A chave, ou chave digital, é uma seqüência dos números 0 e 1 combinados de várias maneiras. Chaves maiores têm maiores possibilidades de combinações e por isso são mais difíceis de serem decifradas. Uma chave de 8 bits, por exemplo, tem 28 = 256 combinações (permutações) possíveis, e uma chave de 56 bits tem 256 = 72057594037927936 (cerca de 72 quatrilhões) de combinações possíveis.

O padrão atual para chaves na Internet é de 128 bits290, que tem 4,7 sextilhões de vezes mais combinações do que as chaves de 56 bits.

Em geral, aumentando o tamanho da chave, aumenta a segurança na criptografia.

Acredita-se que chaves acima de 80 bits já dificultam bastante as tentativas de quebrá-las pelo método da força bruta, uma vez que o número de possibilidades torna-se muito grande, exigindo uma potente ferramenta computacional.

Porém, devido aos progressos computacionais, principalmente no que diz respeito a capacidade dos processadores, o tempo para se gerar todas estas possibilidades está diminuindo, e isso vem tornando as ferramentas de proteção baseadas unicamente no comprimento da chave, cada vez menos seguras.

7.4 – Sistemas Criptográficos

Os criptossistemas podem ser simétricos ou assimétricos. Num criptossistema

simétrico a encriptação e a desencriptação são feitas com uma única chave, ou seja, tanto o remetente quanto o destinatário usam a mesma chave. Num sistema assimétrico, ao contrário, duas chaves são empregadas.

Em criptossistemas de uma chave ocorre o problema de distribuição de chaves.

A chave tem de ser enviada para todos os usuarios autorizados antes que mensagens possam ser trocadas. Isso resulta em atraso de tempo e possibilita que a chave possa ser roubada.

Os criptossistemas assimétricos, ou de duas chaves, contormam esse problema através do uso de chaves públicas. Nesse sistema, cada pessoa tem um par de chaves: a chave pública e a chave privada. A chave pública é divulgada, enquanto que a chave

290 A qual permite 2128 combinações de chaves diferentes.

privada e deixada em segredo. Para mandar uma mensagem privada, o transmissor encripta a mensagem usando a chave públicado destinatário pretendido.

A chave de ciframento é publicada ou tornada acessível aos usuários, sem que haja quebra na segurança. Dessa forma cada usuário tem uma chave de ciframento, de conhecimento público, e outra de deciframento, secreta. Se um usuário A deseja mandar uma mensagem para um usuário B, ele utiliza a chave de ciframento pública PB e envia a mensagem para B, este de posse de sua chave de deciframento secreta SB decodifica a mensagem.

7.5 – Cifragem de Blocos

Um algoritmo que realiza cifragem sobre blocos pode operar de diversas maneiras distintas. As mais conhecidas são:

• Cifras de Substituição: é a troca de cada caracter ou grupo de caracteres por outro, de acordo com uma tabela de substituição. Pode-se quebrar este método analisando-se a freqüência de cada caracter no texto cifrado e comparando-se estas freqüências com aquelas que normalmente aparecem em um determinado idioma.

o Substituição Monoalfabética: cada letra do texto original é trocada por outra de acordo com uma tabela e com sua posição no texto.

o Substituição por Deslocamento: a chave indica quantas posições deve-se avançar no alfabeto para substituir cada letra.

o Substituição Monofônica: nesse caso, cada caracter pode ser mapeado para um ou vários caracteres na mensagem cifrada. Isso evita a linearidade da substituição.

o Substituição Polialfabética: é a combinação de várias substituições monoalfabéticas, usadas em rotação de acordo com um critério ou chave. A substituição por polígramos utiliza um grupo de caracteres, ao invés de um caracter individual.

o Cifras de Transposição: troca-se a posição dos caracteres na mensagem. Por exemplo, pode-se reescrever o texto percorrendo-o por colunas. Ou então definir o tamanho para um vetor de trocas e também uma ordem em que as trocas serão feitas.

Muitos cifradores de blocos podem ser enquadrados como redes Feistel, ou mais

geralmente, como redes de substituição-permutação. Estas redes usam freqüentemente operações aritméticas, operações lógicas (especialmente XOR) e várias permutações.

Um algoritmo que realiza cifragem sobre blocos pode operar de diversas

maneiras distintas: • Modo do Livro de Códigos (Electronic Code Book – ECB); • Modo de Encadeamento de Blocos (Cipher Block Chaining – CBC); • Modo da Realimentação de Cifra (Cipher Feedback – CFB); • Modo de Encadeamento de Blocos (Block Chaining); • Modo de Encadeamento Propagado (Propagating Cipher Block Chaining –

PCBC).

Máquinas de Cifragem: um código trabalha com grupos de caracteres de tamanho variável, ao contrário da cifra. Cada palavra é substituída por outra. Quebrar um código equivale a quebrar uma gigantesca substituição monoalfabética onde as

unidades são as palavras, e não os caracteres. Para isso, deve-se usar a gramática do idioma e analisar a estrutura das sentenças.

7.6 – Critérios de Segurança De acordo com D. Van Tassel (cf. Katzan, Jr.), quatro critérios devem ser

aplicados ao projeto de métodos criptográficos: 1) Não deveria ser necessário conservar o método em segredo, apenas as chaves. 2) A extensão do sigilo obtido deveria ser diretamente relacionada à extensão de

tempo computacional necessário para uso do sistema. 3) O método deveria destruir os parâmetros estatísticos ou a estrutura natural da

língua. 4) Um erro não deveria destruir a informação sucessiva.

7.6.1 – Como Aumentar a Segurança As antigas técnicas do uso de nulas ou sistemas homofônicos podem ser usadas juntamente com as modernas técnicas matriciais, o que aumenta sobremaneira a dificuldade de desencriptação. De acordo com Katzan, Jr.,

Varias outras técnicas desencorajam a análise. Seqüências fixas de dígitos aleatórios, convenientemente codificados, formam uma técnica particularmente útil quando acrescentadas ao início ou final de uma mensagem. As mensagens podem ser divididas em segmentos e transmitidas em instantes diversos.291 De modo semelhante, um determinado registro de dados pode ser armazenado como uma parte de dois diferentes arquivos. O objetivo das técnicas criptográficas é limitado somente pela imaginação do analista de segurança.292

7.7 – Criptografia Por Ocultação de Mensagem

Esta forma de criptografia é chamada esteganografia. Ela consiste em ocultar

uma informação de tal forma que sua existência não seja percebida (ou seja, é o estudo das técnicas de ocultação de mensagens dentro de outras). Não é considerada parte da Criptologia.293

A esteganálise é o equivalente a criptoanálise, com relação à esteganografia. Esteganografia digital é a arte de ocultar informações no interior de arquivos

como imagens, áudio ou até mesmo vídeos. Estes arquivos digitais contêm áreas não utilizadas, as quais podem ser aproveitadas para a inserção de dados.

291 Uma técnica extremamente complexa de transmissão cifrada por rádio, que utilizava a técnica do salto de freqüências, foi utilizada pelos EUA durante a Segunda Guerra Mudial. A habilidade do serviço de informações do exército alemão (Abwher), no entanto, foi capaz de interceptar e seguir tais transmissões, quando as frequencias mudavam aleatoriamente. 292 KATZAN, Jr. 1977, p.113. 293 Ver: http://www.stegoarchive.com. Para baixar um programa free-ware (JP Hide and Seek – JPHS), ver: http://linux01.gwdg.de/~alatham/stego.html. Este programa permite embutir dentro de um arquivo .jpg qualquer outro tipo de arquivo, como documentos Word ou planilhas Excel. O S-Tools (Steganography Tools) permite trabalhar com arquivos WAV e imagens GIF. Para download: http://www.spychecker.com/program/stools.html.

7.7.1 – Técnicas de Esteganografia

Algumas formas modernas de esteganografia são variações sobre métodos antigos ou então novas criações, como, por exemplo:

• Uso de microponto. • Uso de marca d’água e imagens (ou símbolos). • Uso de bit menos significativo. • Semagramas

7.7.1.1 – O Microponto O microponto foi uma técnica de esteganografia muito usada pelos espiões

alemães no interior dos EUA, durante a Segunda Guerra Mundial. Era uma fotografia reduzida ao tamanho de um ponto final, o qual era colado no texto de uma carta qualquer. A foto podia conter imagens, planos, desenhos ou textos relativos a equipamentos ou áreas militares, os quais serviriam ao esforço de guerra da Alemanha.

Este é um sistema complexo porque exige máquinas fotográficas especiais capazes de reduzir uma imagem e projetá-la em um celulóide de tamanho micrométrico, e lentes para operar a colagem no papel. O espião, que também deveria usar equipamentos especiais (para ampliar e ler o microponto), ficava muito exposto, se não conseguisse explicar a posse deste equipamento.

Como a mensagem fica escondida, a esteganografia por microponto não levanta suspeita sobre o remetente e o destinatário. Mas se é descoberta, pode ser lida por qualquer um, a não ser que também tenha sido criptografada. Neste caso, o dado a ser escondido é primeiro encriptado e depois oculto de alguma maneira (como um ponto final inserido no fim de um parágrafo) dentro de um bloco maior de dados não encriptados, geralmente um texto literário ou uma carta pessoal.

Uso do microponto

7.7.1.2 – A Marca D’Água294 A rigor, a inserção de marca d’agua é um processo complementar à criptografia. Este sistema não visa evitar o uso indevido de dados, mas sim fazer com que este uso

294 Ver: http://www.catalao.ufg.br/mat/revista/ART-008.pdf. Ver também: http://en.wikipedia.org/wiki/Digital_watermarking. E ainda: http://watermarker.com/how-to-ptotect-digital-images.aspx.

indevido possa ser detectado. Com ele, a informação adicionada a um dado permanecerá sempre presente, de modo que nunca se perca a informação que lhe foi adicionada.295

Um sistema de marca d´agua digital pode ser visível ou invisível. A marca d´água visível pode ser um logotipo ou um texto qualquer inserido em algum ponto do documento, ou então uma imagem de fundo, semitransparente.296

Imagem com logotipo

Imagem com marca pessoal

295 Para download de um arquivo free-ware, ver: http://picmarkr.com/. Entretanto, o próprio Word oferece esta possibilidade: Formatar/Plano de Fundo/Marca d’água impressa/Selecionar figura. 296 É o caso deste próprio texto, que possui uma marca d’água visível.

Imagem com indicação de autoria

7.7.1.3 – Uso do Bit Menos Significativo Arquivos de imagem ou de som possuem áreas de dados que não são usadas ou

são pouco significativas. A esteganografia se aproveita desse fato, trocando essas áreas por informação.

Uma imagem qualquer é formada por um conjunto de pixels, em três canais de cores (vermelho, verde e azul) de 8 bits cada um. Alterando-se o bit menos significativo, não ocorrem mudanças perceptíveis na imagem. Desse modo, é possível codificar em uma imagem uma seqüência de dígitos binários que contenham um texto, apenas usando o bit menos significativo de cada componente (canal) da cor dos pixels. Um dos métodos usados para realizar esta codificação é chamado Codificação de Huffman.

Para ocultar uma informação (um texto ou mesmo outra imagem) em uma imagem .jpeg, esta deve ser igual ou maior do que o tamanho do arquivo a ser ocultado.

7.7.1.4 – Esteganografia Subliminar Um outro tipo de esteganografia (em imagens estáticas) pode ser chamado

esteganografia por imagem subliminar. É uma imagem disfarçada no interior de outra imagem,297 geralmente associada a temas eróticos ou que permitam fazer associações de idéias que passem imperceptíveis a quem as vê.298

A imagem subliminar é muito utilizada em propaganda, como se pode ver na imagem a seguir:

297 O prof. Joseph Rosen, da Universidade Ben Gurion, em Israel, desenvolveu um tipo de esteganografia chamado concealogram (ou ocultograma), cujo algoritmo permite misturar um código de barras bidimensional em uma imagem impressa em tons de cinza. O código poderá ser lido posteriormente por um scaner ótico comum. 298 Associações de idéias passadas subliminarmente são poderosos impulsos psíquicos capazes de influenciar ou modificar atitudes. Por exemplo, as imagens eróticas passam um tipo de prazer sexual inconsciente associado subliminarmente ao prazer de beber um determinado refrigerante.

7.7.1.4.1 – Codificação de Huffman Esta é uma forma de compressão de dados em que cada caracter do texto é representado com códigos binários de comprimento variável. O tamanho do código varia conforme a sua freqüência no texto, atribuindo-se códigos menores aos caracteres mais freqüentes, e maiores aos menos freqüentes.

De início o programa lê o texto e calcula a freqüência com que cada caracter aparece. Assume-se que cada um é uma árvore de um nodo apenas. Os dois com menor freqüência são pesquisados e combinados para formar uma árvore. A freqüência dos dois é somada e atribuída à raiz. Repete-se esta etapa até que haja uma única árvore.

Ao final, tem-se uma árvore com os caracteres do texto na folhas. Para ter o código de cada um basta convencionar para um nodo qualquer “0”, se for um filho à esquerda, e “1”, se for à direita. O código do dígito será o caminho percorrido da raiz até a folha.

Aspecto de uma árvore de Huffman

Codificação Huffman

Um exemplo de codificação Huffman (parcial):299

Para a decodificação, é necessário incluir a árvore. Assim, grava-se a lista de caracteres da árvore em percorrimento pré-ordem, no início da seqüência de bits do arquivo de imagem:

@@a@bdc

Como @ indica um nodo com dois filhos e os outros caracteres representam folhas, é possível reconstruir a árvore a partir dessa string de caracteres. Na parte inicial do arquivo de imagem é gravada a string da árvore em binário, seguida de um caracter especial que indica o fim da árvore e o início da seqüência codificada. Antes da codificação do texto é acrescentado um outro caracter especial que indica o fim da frase.

Outro exemplo de Codificação Huffman (parcial):300

299 Ver: http://www.inf.ufrgs.br/~lkunz/cpd/. Para download de arquivos, ver: http://www.inf.ufrgs.br/~lkunz/cpd/Hidden.zip. Ver também (para outros arquivos): http://www.inf.ufrgs.br/~lkunz/cpd/. Os arquivos de imagem usados devem ser bitmaps de 24 bits. 300 A codificação completa pode ser vista em: http://www.inf.ufrgs.br/~mczembrzuski/cpd.html.

Analisando a figura: • O primeiro bit do codigo ASCII de 'A' é zero. Logo a primeira componente

(vermelha do primeiro pixel) será alterada para zero. • O segundo bit do codigo ASCII de 'A' é um. Logo a segunda componente (verde

do primeiro pixel) será alterada para um. • O terceiro bit do codigo ASCII de 'A' é zero. Como a terceira componente (azul

do primeiro pixel) já está em zero, nada será feito nessa componente. • ... (repete o processo com os bits restantes). • A codificação de outro caractere começaria na primeira componente do terceiro

pixel. • Note-se que dos 8 bits codificados, somente 5 (marcados em laranja) deles

alteraram a imagem. Em uma situação ideal, nenhum bit seria modificado. A situação oposta, pior caso, seria quando todos os bits fossem modificados. 7.7.1.5 – Técnica “Joio e Trigo”

O nome desta técnica vem dos métodos de separação de grãos utilizados na

agricultura, em que se separam sementes indesejadas que vêem misturadas com as sementes de um cereal (após este ser colhido). Ela foi concebida por Ron Rivest para conseguir confidenciabilidade sem o uso da criptografia no envio de dados por um canal inseguro. Embora tenha semelhanças com ambas as técnicas (esteganografia e criptografia), ela não pode ser classificada em nenhuma. Seu funcionamento é o seguinte:

O remetente (Alice) envia diversas mensagens para o destinatário (Bob). Cada uma das mensagens é autenticada com um MAC cujo segredo da chave Alice divide com Bob, embora não possua nenhum tipo de criptografia sobre a mensagem. Apenas uma das mensagens é verdadeira, as outras são falsas (são o “joio”).

Um invasor será incapaz de “separar o joio do trigo”, ou seja, descobrir qual mensagem é falsa e qual é verdadeira. Bob usa o MAC para encontrar a mensagem verdadeira e descartar as mensagens “joio”.

Em redes comutadas de pacotes (tipo Internet), cada mensagem é enviada em pacotes separados. Pacotes enviados para vários destinatários, aproveitam apenas àqueles que recebem o “trigo”; os que recebem o “joio” irão simplesmente descartar a mensagem.

7.7.1.6 – Inserção de Atrasos em Pacotes

Uma técnica de esteganografia envolve injetar imperceptíveis atrasos em pacotes

enviados na rede, a partir do teclado. Atraso na digitação, em algumas aplicações de tempo real, pode significar um atraso nos pacotes, o que pode ser usado para codificar os dados. Como não há processamento ou atividade extra na rede, essa técnica de esteganografia é “invisível” para o usuário.

Essa forma de esteganografia é um é um programa de computador (Keylogger – registrador do teclado) do tipo spyware, cuja finalidade é monitorar tudo o que o digitador digita no teclado

7.7.1.7 – Esteganografia BPCS

É um tipo de esteganografia digital (Bit-Plane Complexity Segmentation

Steganography)301 utilizado com imagens no formato BMP. Ele consegue armazenar uma grande quantidade de dados confidenciais em uma única imagem, substituindo os bits da zona de conflito por bits dos dados confidenciais.

Essa técnica passa desapercebida devido a uma característica do sistema óptico-visual humano, que não consegue ver nenhuma informação em uma zona de conflito de uma imagem BMP.

301 Para maiores detalhes sobre a técnica, ver: http://www.eece.maine.edu/~eason/steg/SPIE98.pdf.

7.7.1.8 – Semagramas Do grego: sema, sinal, grama, escrito ou desenhado. O semagrama é um tipo

especial de esteganografia que faz uso de objetos pouco usuais para transmitir informações.

Um exemplo clássico ocorreu durante a Segunda Guerra Mundial: um carregamento de relógios foi considerado suspeito, porque a posição dos ponteiros dos relógios poderia representar algum tipo de informação secreta.

7.7.1.9 – Vulnerabilidades da Esteganografia A esteganografia não garante uma verdadeira invisibilidade (ou seja, que os

arquivos codificados não possam ser detectados). A simples comparação do tamanho de arquivos pode indicar que houve algum tipo de alteração; isto ocorre porque a esteganografia aumenta o tamanho do arquivo original.

Além disso, existem vários programas de detecção de imagens esteganogradas, como, por exemplo, StegDetect e Stegbreak. 302

O StegDetect é capaz de detectar diferentes tipos de ocultação esteganográfica em imagens .jpeg (jsteg, jphide, invisible secrets, outguess 01.3b, F5, appendX e camouflage). Usando análise linear discriminante, consegue também detectar sistemas novos de esteganografia.

Quanto ao Stegbreak, ele é usado para realizar ataque de dicionário contra os programas JSteg-Shell, JPHide e o OutGuess 0.13b.

302 Para download free-ware do Stegdetect: http://linux.softpedia.com/progDownload/StegDetect-Download-15405.html.

CAPÍTULO VIII

CRIPTOGRAFIA E SEGURANÇA – II 8.0 – A Atualidade da Criptografia Atualmente, as aplicações da criptografia fazem dela uma ferramenta

indispensável para todo tipo de atividade, que vão do e-comércio às mais secretas informações militares.

A Internet, com o seu amplo e complexo espectro de troca de informações de todo tipo, seria absolutamente inviável se o seu gigantesco fluxo de comunicações não pudesse ser codificado, permitindo tanto a privacidade quanto a segurança nas transações pessoais, comerciais, bancárias (como transferências e pagamentos), além de trocas de arquivos médicos, corporativos e governamentais.

Entre as informações que circulam pela Internet e que devem permanecer absolutamente confidenciais, tem-se:

• Informações sobre cartões de crédito. • CPF. • Correspondência privada. • Informações pessoais. • Informações sigilosas sobre empresas. • Informações bancárias sigilosas.

A criptografia fornece as técnicas para codificar e decodificar dados, tais que os

mesmos possam ser armazenados, transmitidos e recuperados sem serem alterados ou expostos, nem sejam susceptíveis a ataques, estejam eles em um equipamento de armazenamento de dados ou mesmo sendo transmitidos pela rede de comunicação.

Atualmente, considera-se que a criptografia tem como objetivos principais:303

• Confidencialidade da mensagem: somente o destinatário autorizado deve poder decifrar e entender o conteúdo da mensagem cifrada. Igualmente, a mensagem cifrada deve poder resistir às tentativas de deciframento não autorizado.304

• Integridade da mensagem: o destinatário deve ser capaz de determinar se a mensagem foi alterada durante ou após a transmissão.

• Autenticação do remetente: o destinatário deve ser capaz de identificar a procedência da mensagem e verificar a autenticidade do remetente (se foi ele quem fez a transmissão). Tudo isto é garantido pela assinatura digital.

• Não-repúdio ou irretratabilidade do emissor: o emissor da mensagem não pode negar a autoria da mensagem.

• Disponibilidade: garante que uma mensagem estará disponível no instante desejado.

• Controle de acesso: apenas pessoas autorizadas devem poder ter acesso a qualquer das etapas de codificação/decodificação.

303 Tais objetivos coincidem em geral com as características da assinatura digital. 304 Denomina-se ataque passivo às interceptações de mensagens cifradas, pelo inimigo (inimigo é todo agente que tenha interesse pela conteúdo da mensagem cifrada, seja este conteúdo de caráter militar, diplomático, econômico, estratégico, etc.; sob este aspecto, até agentes de países amigos podem ser inimigos).

Tais objetivos não serão necessariamente atingidos por igual, e nem todos os sistemas ou algoritmos criptográficos costumam englobar todos os objetivos listados.

Normalmente, existem algoritmos específicos para cada um. Em alguns casos, mesmo com sistemas criptográficos bem implementados e usados adequadamente, alguns objetivos não são práticos ou desejáveis. Por exemplo, o remetente pode querer permanecer anônimo, ou então o sistema pode destinar-se a um ambiente de recursos computacionais limitados.

8.1 – A Navegação Segura pela WEB

A Internet deve prover ao usuário uma navegação segura por sites seguros, que não ofereçam risco de uma “contaminação” de qualquer tipo. Um site seguro é constituído por programas de computador que são executados em um Servidor seguro para atender solicitações feitas pelos usuários finais, através de seus próprios programas (clientes seguros).

O Servidor seguro utiliza um protocolo especial de comunicação (o Secure Socket Layer – SSl), que utiliza criptografia de chave assimétrica, tornando a comunicação entre as partes virtualmente inviolável. Assim, se houver uma interceptação não autorizada das informações trocadas entre o usuário e o Servidor, elas não terão utilidade, já que seria necessário o conhecimento prévio das chaves privadas de criptografia.

Para que o sigilo e a inviolabilidade da comunicação realmente existam, é necessário um Certificado de Identidade Digital válido. Assim, a privacidade nas comunicações exige o conceito (e a implementação) da autenticação. Nos meios eletrônicos de comunicação, a assinatura digital garante a autenticidade e a procedência de um documento.

8.1.1 – Formas de Pagamento Virtual As compras realizadas pela Internet exigem uma forma adequada de efetuar o

pagamento. Para isso, foram criados vários sistemas de pagamento. 1. Cartões de Crédito: esta foi uma das primeiras formas de pagamento a serem

utilizadas. É um sistema já usada em transações comericiais comuns, sendo usado por milhões de pessoas, permitindo fazer compras em qualquer parte do mundo. Existem vários tipos de cartões, mas todos funcionam da mesma forma: as informações do cartão indicam o crédito do comprador; se aceitas (após serem verificadas), o dinheiro é transferido da conta do comprador para a do vendedor. Na Internet, o problema é saber, por exemplo, se o comprador é o dono do cartão. Alguns sistemas usam sistemas de criptografia e autorização on-line. Outros preferem a confirmação por telefone ou por e-mail.

2. Dinheiro Virtual: este é um sistema muito usado na Europa. Os mais conhecidos são: NetCash; ecash; Netbill; Netchex; Netcheque; Netmarket; Magic Money.

8.2 – Garantias da Chave Pública A criptografia de chave pública é atualmente usada em diversas transações de

todo tipo, pela Internet. Sendo assim, ela deve garantir, além de um ambiente seguro, também:

• Sigilo: somente os usuários autorizados devem ter acesso à informação.

• Integridade da informação: garantia oferecida ao usuário de que a informação original não foi alterada, intencionalmente ou acidentalmente.

• Autenticação do usuário: é o processo que permite ao sistema verificar se a pessoa com quem ele está se comunicando é de fato a pessoa que alega ser.

• Autenticação de remetente: é o processo que permite a um usuário certificar-se (por meios legais) de que a mensagem recebida foi de fato enviada pelo remetente.

• Autenticação do destinatário: consiste em se ter uma prova de que a mensagem enviada foi recebida como tal pelo destinatário.

• Autenticação de atualidade: consiste em provar que a mensagem é atual, e que não se trata de mensagem antiga re-enviada. Há diversas maneiras de autenticar uma pessoa ou uma informação em um

computador: 1. Senha – a utilização de um nome de usuário e de uma senha representa a

maneira mais comum de autenticação. Digita-se o nome e a senha quando solicitado pelo computador. Ele os compara a um arquivo seguro para confirmação; caso o nome ou a senha não sejam compatíveis, não se obtém o acesso.

2. Cartões de acesso – esses sistemas podem variar de um simples cartão com uma tira magnética, similar a um cartão de crédito, até os sofisticados smart cards (cartões inteligentes) que possuem um chip de computador embutido.

3. Assinaturas digitais – nos sistemas com chave pública, qualquer pessoa pode cifrar uma mensagem, mas apenas o destinatário pode decifrá-la. Invertendo-se o uso das chaves, pode-se ter uma chave que só pode ser cifrada por uma pessoa, mas que pode ser decifrada por qualquer um. Isto é uma espécie de personalização do documento, semelhante a uma assinatura. Uma assinatura digital é basicamente uma maneira de se assegurar que um documento eletrônico (e-mail, planilha eletrônica, arquivo de texto) seja autêntico. Ou seja, a assinatura digital garante a procedência do documento.

Para se conseguir uma assinatura digital válida são necessárias duas etapas. A primeira consiste em criar um hash do documento. Este hash identifica unicamente e inequivocamente o documento do qual ele se originou. A seguir, o assinante submete o hash a um método criptográfico usando sua chave privada. Como o hash criptografado só pode ser recuperado usando a chave pública do assinante, isto comprova a identidade da pessoa que assinou - é a chamada assinatura digital - e como o hash recuperado identifica o documento, a assinatura está associada unicamente a este documento.

O Digital Signature Standard – DSS305 é baseado em um tipo de método de criptografia de chave pública que utiliza o Digital Signature Algorithm – DSA. Ele consiste de uma chave privada, conhecida apenas pelo emissor do documento (o signatário), e uma chave pública que tem quatro partes. Se qualquer coisa estiver alterada no documento depois que a assinatura digital for anexada a ele, o valor, ao qual a assinatura digital faz a comparação, é alterado, resultando assim em uma assinatura inválida.

Propriedades da Assinatura Digital: • a assinatura é autêntica: quando um usuário usa a chave pública de A para

decifrar uma mensagem, ele confirma que foi A e somente A quem enviou a mensagem;

• a assinatura não pode ser forjada: somente A conhece sua chave secreta;

305 O DSS é o formato para assinaturas digitais que foi endossado pelo governo americano.

• o documento assinado não pode ser alterado: se houver qualquer alteração no texto criptografado este não poderá ser restaurado com o uso da chave pública de A;

• a assinatura não é reutilizável: a assinatura é uma função do documento e não pode ser transferida para outro documento;

• a assinatura não pode ser repudiada: o usuário B não precisa de nenhuma ajuda de A para reconhecer sua assinatura e A não pode negar ter assinado o documento. 4. Autenticação de Atualidade – Além da procedência, pode ser informado

também o momento da criação do documento. Isto é feito pela função timestamp digital. O timestamp é uma sequencia de caracteres que denotam a data e/ou a hora em que certo evento ocorreu. Ou seja, ele armazena o valor combinado de Date e Time.

5. Certificado digital: Para implementar a criptografia de chave pública em larga escala, um Servidor web seguro requer os chamados certificados digitais. Um certificado digital é basicamente um pedaço de informação que diz que o Servidor WEB é considerado confiável por uma fonte independente conhecida como Autoridade Certificadora. Essa autoridade age como um intermediário em quem ambos, emissor e destinatário, confiam. Ela confirma que cada um é de fato quem diz ser, e fornece então as chaves públicas de um computador ao outro.

É como uma versão digital de uma Cédula de Identidade, pois associa a identidade de um titular a um par de chaves eletrônicas (uma pública e outra privada), as quais, usadas em conjunto, fomecem a comprovação da identidade, e servem como prova legal de identidade.

O Certificado Digital pode ser usado em uma grande variedade de aplicações, como comércio eletrônico (e-comércio), groupware (Intranet e Internet) e transferência eletrônica de fundos.

O comércio virtual é garantido por este certificado. Um cliente que faça uma compra usando um Servidor Seguro, pode solicitar o Certificado de Identidade Digital deste Servidor para verificar a identidade do vendedor e o conteúdo do Certificado apresentado. De forma inversa, o Servidor Seguro pode solicitar ao comprador o seu Certificado de Identidade Digital, para identificá-lo com segurança e precisão.

O certificado contém três elementos: • Informação de atributo: esta é a informação sobre o objeto que é certificado.

No caso de uma pessoa, isto pode incluir seu nome, nacionalidade e correio eletrônico (e-mail), a organização e o departamento da organização onde trabalha.

• Chave de informação pública: esta é a chave publicada da entidade certificada. O certificado atua para associar a chave pública à informação de atributo descrita. A chave pública pode ser qualquer chave assimétrica, mas usualmente é uma chave RSA.

• Assinatura da Autoridade em Certificação – CA: a CA assina os dois primeiros elementos e, então, adiciona credibilidade ao certificado.Quem recebe o certificado verifica a assinatura, e se acreditar na Autoridade em Certificação, acreditará na informação de atributo e chave pública associadas.

6 – Selo Cronológico Digital: este serviço gera selos cronológicos que associam a data e a hora a um documento digital em uma forma de criptografia forte. O selo cronológico digital pode ser usado futuramente para provar que um documento eletrônico existia na data alegada por seu selo cronológico. Funcionamento: o emissor calcula o resumo da mensagem usando uma função de hash seguro e o envia (não o documento) para o DTS. Este envia de volta um seio

cronológico digital que consiste no resumo da mensagem, a data e a hora que foi recebida pelo DTS e a assinatura do DTS. Como o resumo da mensagem não revela qualquer informação a respeito do conteúdo do documento, o DTS não tem condições de saber o conteúdo do documento que recebeu o selo cronológico digital.

Se for necessário, o emissor pode apresentar o documento e o selo cronológico, juntos, para provar a data em que este foi escrito. Aquele que vai comprovar a autenticidade do documento calcula o resumo da mensagem, verifica se as mensagens calculada e apresentada são iguais, e observa em seguida a assinatura do DTS no selo cronológico.

Para ser confiável, o selo cronológico não pode ser falsificável. Os requisitos para um DTS são os seguintes: o DTS deve ser proprietário de uma chave longa (1.024 bits), se se desejar que os selos cronológicos sejam seguros por várias décadas. A chave privativa do DTS deve ser armazenada em um local de máxima segurança. A data e a hora vêm de um relógio que não possa ser alterado (NIST). Deve ser impossível criar selos cronológicos sem usar um mecanismo que só aceite este relógio. O uso do DTS é importante e essencial para manter a validade de documentos por anos.

7 – Biometria: a biometria utiliza informações biológicas para verificar a identidade. Os métodos biométricos de autenticação mais comuns incluem:

• leitura de impressão digital; • leitura de retina; • leitura facial; • identificação de voz.

8.3 – Formas de Proteção Individual O PGP (Pretty Good Privacy) é um sistema de proteção criptográfica criado por

Phil Zimmermann no início da década de 1990. Indo contra a filosofia governamental dos EUA de não criar cifras fortes para o púlico ou para estrangeiros, Zimmermann criou o PGP, que projetou-se rapidamente como um sistema seguro e acessível (software livre) em todo o mundo.306

O PGP é um criptosistema híbrido que combina algoritmos de chaves públicas (assimétricas) com algoritmos convencionais (simétricos), com a vantagem de utilizar a velocidade da criptografia convencional e a segurança da criptografia por chaves públicas. O PGP comprime o texto original antes de criptografá-lo, o que aumenta a sua segurança.

As chaves públicas são mantidas em arquivos que contém a identificação do usuário (o nome da pessoa), a hora (timestamp) da geração do par de chaves e as chaves propriamente ditas. São usados dois arquivos (key rings) diferentes, um para chaves públicas e outro para as secretas, que podem conter uma ou mais chaves cada um.

As chaves públicas são internamente referenciadas por uma Key ID, que é uma abreviação dessa chave (os 64 bits menos significativos). Enquanto muitas chaves podem ter a mesma identificação do usuário (User ID), nenhuma chave pode ter a mesma Key ID. O PGP faz uso de message digest para realizar as assinaturas.

Os documentos são autenticados por um prefixo que contém o Key ID da chave secreta que foi usada para assiná-lo, o message digest do documento devidamente criptografado pela chave secreta do remetente e a hora (timestamp) de quando foi

306 Em 1993 Zimmermann foi investigado por um Grande Júri, acusado de exportação de “armas”, ou seja, ferramentas de software que poderiam ser usadas pelos inimigos dos EUA para esconder as suas intenções hostis expressas em mensagens. O processo foi arquivado em 1996.

realizada a assinatura. O Key ID é utilizado pelo destinatário para relacioná-lo com a chave publica do remetente, a fim de checar a assinatura. O software procura automaticamente a chave pública e a identificação do usuário remetente no arquivo de chaves públicas.

Arquivos cifrados são prefixados pelo Key ID da chave pública usada para cifrá-la. O receptor usa essa informação para relacionar a correspondente chave secreta que decifra a mensagem. Da mesma forma, o software do destinatário localiza automaticamente a chave secreta no arquivo de chaves secretas.

Esses dois tipos de arquivos são o principal método de armazenamento e gerenciamento das chaves públicas e privadas.

8.4 – Sistemas de Segurança

Um criptossistema deve ser seguro mesmo quando os algoritmos de ciframento e deciframento sejam conhecidos. Por esta razão são usadas chaves de encriptação.

A pessoa não autorizada que tem acesso a alguns dos elementos de um criptossistema é denominada atacante ou invasor. Um atacante passivo somente obtém cópias dos elementos, enquanto que um atacante ativo pode alterar alguns desses elementos.

Um sistema é dito seguro se ele é teoricamente inquebrável, ou seja, não interessa qual a quantidade de texto normal ou decifrado a disposição, nunca se tem informação suficiente para deduzir as chaves utilizadas ou decifrar um texto cifrado.

Só se conhece um método nesta categoria: a Cifra de Vernam ou One-time pad (cifra de uso único). Em essência, dois elementos que desejam se comunicar possuem cópias idênticas de uma seqüência randômica de valores, que são usados como chave. O método exige, entretanto, que cada chave seja usada uma única vez e que o comprimento da seqüência (chave) seja maior, ou no mínimo igual ao comprimento da mensagem a ser cifrada.

8.4.1 – Vulnerabilidades dos Sistemas de Segurança Nenhum sistema de segurança é impenetrável. Assim, o usuário deve se

perguntar se a informação que ele esconde é mais valiosa para um invasor do que o custo de burlar o sistema de proteção. Se este não for o caso, o usuário não deveria se preocupar em usar caros e sofisticados sistemas de proteção.

De todo modo, o usuário deve tomar certas precauções simples, para garantir uma segurança mínima. As principais vulnerabilidades dos sistemas de segurança são:

l – Comprometimento da passphrase e da chave secreta: Talvez uma das formas mais simples de se comprometer um sistema é escrevendo em algum lugar sua passphrase. Quem a encontrar pode invadir o sistema e se apoderar de arquivos confidenciais. O usuário não deve, igualmente, usar passwords que possam ser descobertas: nomes de esposa ou filhos; datas de aniversário; frases famosas, etc. Palavras dicionarizadas podem ser descobertas exatamente pelo teste de todas as palavras do dicionário. Assim, é melhor justapor letras (minúsculas e maiúsculas, se o sistema aceitar) e algarismos: rt65IDFdp9834, por exemplo. Uma passphrase fácil de lembrar e difícil de descobrir poderia ser construída mesclando palavras. Por exemplo: borbodiscoveryleta (borbo – leta + Discovery).

2 – Arquivos não apagados completamente do disco: este problema é causado pelo fato de que os comandos de deletação (apagamento) ou formatação apagam apenas os endereços dos arquivos nos diretórios, mas não os arquivos em si (o sistema

operacional marca que os blocos foram apagados do disco, permitindo que esse espaço seja reutilizado posteriormente).307 Se o invasor tiver acesso aos blocos marcados antes que sejam re-gravados, ele pode recuperar o texto original (ou parte dele), usando programas especializados. Mas, assim como existem estes programas, existem outros capazes de realizar o apagamento total da informação.308

3 – Trabalho de “engenharia social”309: este comprometimento ocorre quando o responsável pelo arquivo de senhas a fornece a alguém que, de um modo simpático, telefona para informar que “perdeu a senha”, e precisa dela com urgência (ou dá qualquer outro motivo). Este é um método mais comum do que se pensa, para se conseguir senhas ilicitamente.

4 – Falsificação da chave pública: este pode ser o ponto mais vulnerável de um criptossistema de chave pública, principalmente porque a maioria não percebe a falsificação imediatamente. Assim, quando se vai usar a chave pública de de alguém, deve se estar certo de que ela não foi falsificada. Só pode confiar em uma chave pública se ela foi obtida diretamente da pessoa, ou se ela foi recebida em uma mensagem assinada por alguém em quem se confia.

5 – Gerência das chaves: deve-se manter um controle físico dos arquivos de chave pública e secreta, de preferência no próprio computador pessoal do que nos terminais ligados em rede com acesso remoto. Deve-se ter sempre uma cópia de ambos os arquivos.

6 – Vírus e Cavalo de Tróia: este é um tipo de ataque comum, que usa um vírus especial para infectar o sistema operacional. O vírus é projetado para capturar a passphrase ou chave secreta e gravá-la em algum arquivo no disco, que é enviada via rede (em sistemas sem Firewall) para o cirador do vírus. Defender-se desse tipo de ataque nada mais é do que evitar contaminação por vírus em geral: não abrir e-mails (ou anexos de e-mails) suspeitos; não executar programas sem serem analisados por algum anti-vírus; não acessar sites desconhecidos; etc.

7 – Falha de segurança física: um descuido do usuário pode permitir que um invasor se apodere de arquivos ou textos impressos, jogados fora descuidadamente. O roubo ou o vasculhamento de lixo, são formas de conseguir estas informações.

8 – Falha na segurança pessoal: o seqüestro, o suborno, a chantagem, a infiltração entre os funcionários, ou mesmo uma conversa informal com alguém em um lugar como um bar, p. ex., podem levar ao comprometimento de todo um sistema de dados.

307 Exceto, é claro, se um uso intenso do HD faça com que as trilhas que ainda contenham informação acabem por ser sobre-escritas. 308 Para recuperação de dados, ver: http://www.cbltech.com.br/. Para apagamento de dados, ver: http://www.cbltech.com.br/destruicao-dados.html. 309 Esta é uma forma de abordagem direta pela qual o atacante, que se faz passar como uma pessoa confiável, convence a vítima a passar-lhe, de boa fé, informações tais como senhas, números de cartão de crédito e outros dados pessoais ou empresariais que vulnerabilizem um sistema ou rede de computadores. Quando a abordagem se dá por via indireta (por e-mail, SMS, etc.), a técnica é chamada phishing, que é um tipo de ataque que vem se tornando extremamente comum na Internet. Ver: http://www.rsa.com/products/consumer/whitepapers/9904_FRAECON_WP_0508_BR.pdf. Ver também: http://pt.wikipedia.org/wiki/Phishing.

CAPÍTULO IX

CRIPTOGRAFIA E SEGURANÇA – III

9.0 – A Criptografia Matemática Em 1949 um pesquisador dos Laboratórios Bell, Claude Shannon, em parceria

com Warren Weaver, publicou um artigo que praticamente deu início à criptografia matemática moderna. O artigo se chamava Communication Theory of Secrecy Systems. Na verdade, este artigo, junto com outros que ele publicou na área de Teoria da Informação, lançou uma base teórica sólida tanto para a criptologia quanto para a Teoria da Informação.

Dois teoremas de Shannon se tornaram extremamente importantes, na

criptografia: 310 I) “Se adotarmos um cifrário por chave não reutilizável, a seqüência das

letras (ou das cifras) que compõem o criptograma é uma seqüência totalmente casual”.

II) “Se utilizarmos um cifrário por chave não reutilizável, o criptograma por si só, na ausência da chave, não dá nenhuma informação sobre o conteúdo da mensagem clara”.

Em conjunto com o sistema de cifras de Vernan, ou Código Vernan,

estabeleceu-se com todo o rigor matemático a impossibilidade real de que um código que utiliza uma chave não-reutilizável possa ser quebrado, seja por qual método for.311

9.1 – A Matemática da Aleatoriedade No sistema de chave aleatória a chave deve ser exatamente isso: absolutamente

aleatória.312 Apenas dessa maneira pode-se evitar que surjam padrões ou estruturas que irão servir de base para o deciframento. E se a chave for usada apenas uma vez, textos cifrados diferentes não podem ser comparados entre si.

Existem, entretanto, três problemas relacionados com o uso da chave aleatória. 1.. A dificuldade da aleatoriedade. Os matemáticos sabem o quanto é difícil

produzir tabelas de números randômicos; a maioria dos geradores tende a repetir padrões numéricos após um determinado período, que, se muito pequeno, compromete a aleatoriedade.313

Para entender melhor este problema, realize-se o seguinte experimento.

310 Entre 1950 e aproximadamente início da década de 1970, a maioria das pesquisas em criptografia passaram a ser realizadas em órgãos governamentais (como a NSA), ou por empresas privadas a serviço do governo. Com isso, neste período, a pesquisa sobre este tema tornou-se classificada (secreta). 311 A única dificuldade para a implementação deste tipo de cifra é a dificuldade matemática de gerar grandes quantidades de números aleatórios, cujo período possa ser tão grande quanto se queira. 312 Por isto o sistema é chamado de sistema de chave aleatória. 313 Normalmente, são usadas tabelas de números pseudo-aleatórios, cujo período – ou valor máximo a partir do qual os números gerados se repetem – é o mais elevado possível.

Toma-se uma moeda comum, perfeita, a qual é jogada cem vezes seguidas. Cada jogada é anotada como 0 ou 1 (em que cara é representada pelo dígito 0, e coroa, pelo dígito 1), resultando as seguintes combinações:

0111010111 1010100011 0001000010 0100111100 0110011000 0110110011 1110010111 0110100010 0011010011 0000111001 Por contagem, nota-se que o dígito 0 saiu 51 vezes, e o dígito 1, 49 vezes. Este é

um exemplo de seqüência binária casual, devido ao fato de que o resultado de cada lançamento é absolutamente imprevisível. Há, então, um equilíbrio quase perfeito na distribuição dos resultados dos lançamentos.

Como, entretanto, saber com certeza matemática que esta distribuição é perfeitamente aleatória? Ou, em outras palavras: como reconhecer uma seqüência casual?

Bastaria, por exemplo, verificar se a distribuição entre “zeros” e “uns” tende a se equilibrar? Ou é necessário algo mais?

Para descobrir a resposta, será necessário realizar uma análise das chamadas

respostas viciadas, as quais resultam da alteração proposital de uma moeda (ou de um dado, p. ex.), provocando resultados que se desviam do equilíbrio (normalmente, visando uma fraude).

Para conseguir lançamentos desequilibrados, serão utilizados dois discos de cartolina desenhados e cortados como mostrado a seguir.

Como se pode ver, ao rodarem, os discos tendem a uma certa “viscosidade” ou

“atratividade’ nos números de saída, devido à diferença entre as áreas que darão estes números.314

Para começar, lança-se uma moeda comum. Se sair cara (0), roda-se o disco à esquerda; o da direita, se sair coroa (1). A partir daí, o número que sair determina qual será o disco a ser rodado: se sair 0, roda-se o disco esquerdo; se sair 1, roda-se o disco direito. Após cem rodadas, suponha-se que saiu a seguinte seqüência de números:

1000000000 0001101110 1111110000 0111110000 1001101111 1111010100 0011100111 0111000101 1110000001 1101110000 Se for adotado o critério de contar apenas os “uns” e “zeros” individuais,

percebe-se que a distribuição foi bem eqüitativa: 50 vezes o algarismo 0; 50 vezes o algarismo 1. E, no entanto, esta é uma distribuição “viciada”. Onde está o erro, então?

314 Depois de um 0, é mais fácil sair outro 0; depois do 1, é mais fácil sair outro 1.

Os matemáticos sugerem contar não apenas a seqüência de bits individuais, mas os possíveis pares de bits contíguos,315 que são quatro: 00, 01, 10, 11.316

Dessa vez, a contagem mostra uma certa “estranheza” nos resultados, como se pode ver:

00 = 33 vezes

01 = 16 vezes 10 = 17 vezes 11 = 33 vezes Se a experiência for repetida trocando os papéis das duas rodas, e supondo o

seguinte resultado, 1101100101 0101100110 1011010101 0110010010 0110010110 1010001010 1011010001 1000100110 1110110111 1010011010

os resultados serão: Saídas individuais: 0 = 48 vezes 1 = 52 vezes Pares: 00 = 14 vezes 01 = 33 vezes 10 = 34 vezes 11 = 18 vezes Dessa vez não há “atratividade”; o 0 prefere ser seguido por um 1, e o 1 prefere ser seguido por um 0. Ou seja, a saída se torna “saltitante”: de 0 para o 1, e do 1 para o 0. E se as saídas individuais se distribuíram, o mesmo não aconteceu com os resultados pares. Dessa maneira, é evidente que as seqüências não casuais (ou de causalidade reduzida, devido às regras do jogo) são “desmascaradas” pela aplicação do teste estatístico de controle da causalidade, qual seja a verificação dos grupos pares.

Nas seqüências surgidas pelo lançamento da moeda, as distribuições são as seguintes:

Saídas individuais: 0 = 51 vezes

1 = 49 vezes Pares: 00 = 26 vezes 01 = 25 vezes 10 = 24 vezes 11 = 24 vezes

315 Os blocos devem ser interligados para a contagem; na seqüência 000, dois grupos 00 são contados, e assim sucessivamente. 316 Na verdadeira seqüência casual, os números dos pares tendem a se estabilizar em torno de um valor comum (25 ± 1).

2. A dificuldade de distribuição das chaves. Se estas forem interceptadas pelo inimigo, todo o sistema fica comprometido. Atualmente, este problema recebeu um tipo de solução, que foi a distinção entre chave simétrica e chave assimétrica.

A chave simétrica é a chave que tem que ser distribuída sem que o inimigo possa ter acesso a ela. A chave assimétrica é uma combinação de uma chave privada e uma chave pública. Esta última é conhecida por todos, mas só pode ser usada para cifrar o texto. O texto cifrado, por sua vez, só poderá ser decifrado por quem possua a outra parte da chave, a parte privada e individual.

3. Re-utilização das chaves. Emissor e receptor devem usar as mesmas chaves e destruí-las em seguida, sem a menor hipótese de que a chave possa ser re-utilizada.317 Este sistema é chamado de Cifrário por Chave não Reutilizável. È também conhecido como One-time pad (OTP), ou Cifra de Chave Única (a chave única pode ser igual ou maior que a mensagem).

9.2 – A One-Time Pad (OTP)318 A one-time pad é derivada da cifra de Vernam.319 O primeiro sistema one-time

pad, patenteado por Gilbert Vernan em 1917, era baseado na tecnologia da máquina do teletipo elétrico, em que cada caracter da mensagem era combinado eletricamente com um caracter em uma chave da fita.

O uso do one-time veio um pouco mais tarde, quando o capitão do exército dos Estados Unidos, Joseph Mauborgne, percebeu que a seqüência de caracteres na fita da chave poderia ser completamente aleatória, o que tornaria bem mais difícil a criptanálise. A parte pad320 do nome vem das primeiras implementações, em que as chaves eram distribuídas em um bloco de papel. Assim, a folha superior poderia ser removida e destruída depois de usada. A chave consistia em um fluxo aleatório de números, sendo que cada um indicava o número dos lugares no alfabeto (ou número de fluxos, se a mensagem do texto plano estiver no formulário numérico) que a letra ou o número correspondente na mensagem do texto plano devem ser deslocados.

Em seguida veio o sistema chamado paper pad, usado no meio diplomático. Para minimizar o tempo e o custo criou-se um código numérico para palavras e frases, com base em um livro de código (codebook). A segurança era aumentada combinando os números (por adição modular), e ainda mudando periodicamente os números.

Na década de 1920 os criptógrafos alemães Werner Kunze, Rudolf Schauffler e Erich Langlotz perceberam que nunca se poderia quebrar um número aditivo aleatoriamente escolhido usado em cada grupo do código.

Cada página do livro de código tinha um número de série e oito linhas. Cada linha tinha seis grupos de cinco dígitos. Uma página era usada para codificar uma mensagem, sendo destruída em seguida. O número de série da página era emitido junto com a mensagem codificada. O receptor invertia o procedimento e destruia a sua cópia da página. Este sistema foi colocado em operação por volta de 1923.

O inglês Leo Marks inventou um sistema que usava one-time pad nas letras para codificar diretamente o texto claro. Este sistema foi usado pelos ingleses durante a Segunda Guerra Mundial, pelas forças de Operações Especiais.

317 Mensagens diversas que usam chaves iguais prejudicam a segurança do sistema. Isto porque, invariavelmente, acabam sendo decifradas. 318 Ver: http://pt.wikipedia.org/wiki/One-time_pad. 319 O sistema One-Time Pad pode ser visto como um sistema Vigenère, com um período do mesmo tamanho da mensagem. 320 Significa: bloco de anotações.

Atualmente, concebe-se a one-time pad (OTP) como uma cifra de chave única,

em um algoritmo em que o texto claro é combinado com uma chave aleatória ou uma pad que seja tão grande quanto ele, e usado somente uma vez. Uma adição modular (por exemplo, XOR) é usada para combinar o texto claro com a pad.

Se a chave for verdadeiramente aleatória, nunca reutilizada e mantida em segredo, a one-time pad pode ser considerada inquebrável.

Provou-se que qualquer cifra que se queira inquebrável deve usar chaves com as mesmas exigências que as chaves OTP. Esta prova foi feita por Claude Shannon, que a fez usando a Teoria da Informação.

9.2.1 – O Uso da OTP Suponha-se que Alice deseja emitir a mensagem HELLO a Bob. Dois blocos de

papel (pads) que contenham seqüências aleatórias idênticas às das letras são produzidas previamente, sendo que ambos possuem uma cópia. Alice escolhe uma página não-utilizada para fazer a codificação (na ordem seqüencial das páginas).

O material nesta página é a chave para a mensagem. Cada letra da pad será combinada de um modo determinado com a uma letra da mensagem, atribuindo a cada letra um valor numérico: por exemplo, A = 0, B = 1, até Z = 25. Os valores numéricos de letras correspondentes da mensagem e da chave são adicionados, modulo 26.

Se o material chave começar com XMCKL e a mensagem HELLO, então o código é feito do seguinte modo:

23 (X) 12 (M) 2 (C) 10 (K) 11 (L) chave + 7 (H) 4 (E) 11 (L) 11 (L) 14 (O) mensagem = 30 16 13 21 25 chave + mensagem = 4 (E) 16 (Q) 13 (N) 21 (V) 25 (Z) chave + mensagem (mod 26)

Se o número for maior de 25, o resto da divisão por 26 é usado; caso contrário, é mantida a soma. A mensagem cifrada a ser emitida a Bob é EQNVZ.

Bob usa a mesma página e o mesmo processo, mas ao inverso. Aqui, a chave é subtraída da mensagem cifrada, usando outra vez a aritmética modular:

4 (E) 16 (Q) 13 (N) 21 (V) 25 (Z) mensagem cifrada - 23 (X) 12 (M) 2 (C) 10 (K) 11 (L) chave = -19 4 11 11 14 mensagem cifrada - chave = 7 (H) 4 (E) 11 (L) 11 (L) 14 (O) mensagem cifrada - chave(mod 26)

Do mesmo modo que antes, se um número é negativo, adiciona-se 26 para torná-lo não-negativo.

Alice e Bob destroem o cartão-chave, logo após o seu uso. 9.2.2. – Segurança e Aplicabilidade da OTP Se usadas corretamente, as one-time pads são seguras, mesmo contra capacidade

computacional infinita. O problema é que é possível “decifrar” qualquer mensagem com o mesmo número dos caracteres fora da mensagem cifrada usando uma chave diferente,

e não há nenhuma informação na mensagem cifrada que permita que Eva escolha entre as várias leituras possíveis da mensagem cifrada.

Os números aleatórios da alta qualidade podem ser difíceis de gerar. As funções

da geração do número aleatório na maioria das bibliotecas da língua de programação não são apropriadas para o uso criptográfico. Mesmo aqueles geradores que são apropriados para o uso criptográfico normal, incluindo /dev/random e muitos geradores do número aleatório , fazem algum uso das funções criptográficas cuja a segurança não é provada.

Suponha-se que Eva intercepte a mensagem cifrada EQNVZ. Se ela possui

poder infinito de computação, descobrirá que a chave XMCKL produz o texto plano HELLO, mas também que a chave TQURI produz LATER:

4 (E) 16 (Q) 13 (N) 21 (V) 25 (Z) mensagem cifrada - 19 (T) 16 (Q) 20 (U) 17 (R) 8 (I) possível chave = −15 0 −7 4 17 mensagem cifrada = 11 (L) 0 (A) 19 (T) 4 (E) 17 (R) chave + mensagem (mod 26)

As OTPs são muito pouco usadas atualmente. Ao invés, usam-se cifras que garantem, se não uma segurança completa, pelo menos uma segurança baseada no tempo de computação necessário para quebrá-las. A necessidade de transportar as chaves de um ponto para outro cria uma vulnerabilidade difícil de proteger. O uso da chave pública tornou bem mais fácil esse problema de distribuição de chaves.

De todo modo, a OTP pode ser utilizada junto com um criptosistema padrão, em um esquema de sobre-ciframento.

9.2.3 – Condições para a One-Time-Pad

Supõe-se para este algoritmo que: 1. Exista um limite superior fixo L para o comprimento de um texto legível qualquer a ser criptografado. 2. O número total de chaves é maior ou igual a L. 3. Todas as chaves são igualmente prováveis. 4. Para criptografar um texto legível x = x1, x2, ... xn, cada símbolo kj da chave K=k1,k2,...,kn321 é escolhido aleatoriamente, independente dos outros símbolos de K. 5. O número de escolhas de cada kj é igual ao número de escolhas de cada xj.

Nestas condições, o one-time-pad é apenas uma operação que soma cada xj a kj

módulo A, sendo A o número total de símbolos. O one-time-pad é difícil de ser implementado, pois não se sabe como construir

matematicamente um algoritmo gerador de chaves realmente aleatórias. Os algoritmos conhecidos geram números que são apenas pseudo-aleatórios.

321 No caso extremo, cada bit da chave.

9.3 – A Segurança Perfeita

O que o projetista de um algoritmo criptográfico deseja é que este algoritmo crie um texto ilegível a partir de um texto claro no qual um invasor não seja capaz de obter nenhuma informação sobre ele, de qualquer tipo. Este objetivo chama-se segurança perfeita.

Segundo Shannon, a one-time pad tem uma propriedade que ele denominou o segredo perfeito: isto é, a mensagem cifrada não dá absolutamente nenhuma informação adicional sobre o texto claro.

Apesar da prova de Shannon de sua segurança, a one-time pad tem sérios inconvenientes na prática:

• Requer chaves perfeitamente aleatórias. • Geração e troca seguras do material da one-time pad, pelo menos tão grande

quanto a mensagem. • Sigilo absoluto, para que o segredo nunca passe para o adversário.

Também com relação às OTPs, duas distinções têm que ser feitas. A primeira é a segurança teórica do sistema one-time pad, tal como foi provada

por Shannon (é a chamada Segurança de Shannon). A segunda é a segurança oferecida por cifras avançadas (DES, AES, p. ex.).

Resultam de métodos que podem oferecer segurança empírica, mas que não possuem (ou oferecem) a Segurança de Shannon.

Se o sistema de criptografia não pode reivindicar a segurança teórica do sistema one-time pad, por ser gerado por um programa determinístico, então ele não é aleatório, e é chamado de Cifra de Fluxo (stream cipher). Estes sistemas usam geralmente uma chave curta (senha), a qual é usada para gerar uma outra chave longa pseudo-aleatória e que será combinada com a mensagem através de uma operação do tipo XOR (ou outra). As cifras de fluxo podem ser seguras na prática, mas não são seguras no mesmo sentido que a one-time pad.

O uso de um gerador de números pseudo-aleatório (cryptographically secure pseudo-random number generator – CSPNRG), aparentemente, pode tornar a cifra de fluxo mais segura. Na verdade, a similaridade entre os dois métodos (OTP e CSPNRG) pode levar à impressão equivocada de que uma cifra de fluxo possa ser segura, quando não é, principalmente quando baseados nesses geradores. Alguns deles produzem seqüências numéricas que são aprovadas em vários testes estatísticos, mas que são, entretanto, quebráveis por técnicas criptanalíticas.

Os geradores padrões de números aleatórios do computador não são apropriados

para finalidades criptográficas, especificamente a OTP. Em 16 bits, há um máximo de 32768 valores diferentes, antes que comecem a se repetir;322 isto é absolutamente inseguro.323

322 Bastaria testar toda a seqüência para encontrar o número gerado. 323 O algoritmo Mersenne twister (desenvolvido em 1997), ainda que suficientemente “aleatório” para a maioria das pesquisas ou simulações, além de ser rápido, não deve ser usado para gerar material para a OTP. Ele é determinístico – seu período é de 219937-1 (mais do que 106001), e não foi projetado para prover segurança criptográfica [ver: http://www-personal.umich.edu/~wagnerr/MersenneTwister.html]. Um outro algoritmo baseado no Mersenne Twister é o SFMT (SIMD-oriented Fast Mersenne Twister). Ver: http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/.

9.3.1. – Segurança de Shannon e Aleatoriedade Para usar a OTP, os dados devem ser ser exibidos perfeitamente aleatoriamente.

A maioria dos geradores exibe alguma imperfeição ou polarização. A qualidade da aleatoriedade é medida pela entropia; um bit perfeitamente aleatório tem entropia 1.

O matemático John Von Neumann propôs usar um algoritmo para combinar múltiplos bits imperfeitamente aleatórios, cada um com entropia menor que 1, para criar um único bit com a entropia igual a 1. Este processo é chamado destilação da entropia ou extração da entropia. Ele propôs o seguinte método, chamado Von Neumann whitening:

Bits de entrada Saída

00 Nula 01 1 10 0 11 Nula

Este método pode produzir bits uniformemente aleatórios de saída, se os bits da

entrada forem estatisticamente independentes e se todos forem eles extraídos da mesma distribuição. Apesar de tudo, essa não é uma suposição realista, porque a maioria das fontes físicas de aleatoriedade pode ter alguma correlação na saída, bem como a distribuição pode mudar com a temperatura, p. ex. Para se conseguir a Segurança de Shannon é preciso ter uma fonte de dados aleatórios, totalmente imprevisíveis.324

324 Uma base teórica para a existência física da imprevisibilidade é a mecânica quântica, isto porque as suas afirmações de imprevisibilidade estão sujeitas à experiência. Uma outra base é a da teoria de sistemas dinâmicos instáveis e a teoria do caos.

CAPÍTULO X

CRIPTOGRAFIA MATEMÁTICA

10.0 – A Matematização da Criptografia A criptografia moderna foi completamente redefinida em termos puramente

matemáticos, em todos os seus aspectos clássicos. Esta matemática utiliza conceitos da teoria dos conjuntos, teoria dos números, teoria das funções, teoria dos grupos, teoria das matrizes, sistemas matemáticos, lógica matemática, análise combinatória, álgebra linear, teoria dos grafos, teoria da complexidade, etc.

Este capítulo irá proceder a uma recapitulação resumida dos conceitos

matemáticos básicos e gerais mais utilizados na criptografia. 10.1 – Os Números Naturais e sua Representação325 A representação matemática de um número obedece basicamente a dois

princípios: base numérica, em que o número é formado por uma série de algarismos naturais em que o maior é igual à (base – 1);326 princípio posicional, quando o valor da base é multiplicado por si mesmo, em cada posição do algarismo.327

Os exemplos abaixo elucidarão os dois casos, bem como a tranformação de uma base (2) em outra (10):

Na base 10: 81673310 = 8.105 + 1.104 + 6.103 + 7.102 + 3.101 + 3.100 Na base 2: 011012 = 0.24 + 1.23 + 1.22 + 0.21 + 1.20 = 1310 10.1.1 – Operações Fundamentais com os Números Naturais Há duas operações matemáticas (aritméticas) fundamentais:328

• A adição, que tem o símbolo “ + ” e que admite uma operação inversa chamada subtração (com o símbolo “ –”).

• A multiplicação, que tem o símbolo “ x ” e que admite uma operação inversa chamada divisão (com o símbolo “ ÷ ”). Cada operação matemática tem uma série de propriedades: Para a adição:

325 Os números podem ser: naturais (ou inteiros), relativos, racionais, reais, complexos. 326 Os números podem ser representados em qualquer unidade que se desejar. 327 Note-se que os números representados em uma base podem ser representados em qualquer outra base que se desejar. 328 Estas operações se extendem a todos os conjuntos de números, até chegar aos números reais.

• Comutatividade: A + B = B + A • Associatividade: A + (B + C) = (A + B) + C = A + B + C • Elemento neutro = A + 0 = 0 + A • Elemento inverso = A + (-A) = 0

Para a multiplicação:

• Comutatividade: A x B = B x A • Associatividade: A x (B + C) = (A x B) + (A x C) • Elemento neutro (ou elemento identidade): A x 1 = 1 x A = A • Elemento inverso: A x (1/A) = 1

A operação entre os elementos de um conjunto numérico (os inteiros, p. ex) deve

dar como resultado um número que também pertence a este conjunto; esta propriedade é chamada fechamento (por exemplo: 2 + 3 = 5: a soma de dois inteiros dá como resultado um outro inteiro).

10.1.2 – Módulo, Valor Absoluto, Redução Modular

O módulo ou valor absoluto de um número Inteiro é definido como sendo o maior valor (máximo) entre um número e seu elemento oposto. É expresso por:

|-x| = x ^ [x] = x

Ou seja, o módulo ou valor absoluto de um número é sempre positivo. Uma operação de extrema importância na criptografia é a operação de redução

modular. Define-se como:

x mod m = x - ([x/m]m) ,

em que x, m e x mod m são inteiros, e m>0. Note-se que sempre 0 (x mod m) (m-1). Pode-se dizer também que, no caso

de x>0,

x mod m

é o resto da divisão inteira de x por m.329 A operação de redução modular também é chamado de módulo, apesar de esta

denominação ser mais apropriadamente aplicada ao número m usado na redução. 10.1.3 – Precisão Numérica e Vírgula Flutuante

O cálculo e a representação numérica em algoritmos deve obedecer a alguns parâmetros básicos, tais como precisão simples ou precisão dupla, e se a vírgula (ou o

329 Ou seja, a redução modular consiste em encontrar o resto da divisão do número pelo módulo pretendido.

ponto, nos EUA)330 se mantém fixa ou flutuante, conforme varia o número de casas em cada fator.331

Em geral, um programa ou algoritmo contém um especificador de precisão para

que o usuário indique o número de casas decimais desejadas. Se o especificador for omitido, a precisão padrão ou default fornecida pelo programa será usada.

10.2 – Teoria dos Conjuntos Na matemática, denomina-se connjunto a toda coleção de objetos, pessoas,

animais ou coisas de todo tipo, que são chamados de elementos do conjunto. Assim, qualquer elemento que esteja na coleção (ou no conjunto), por ser elemento deste conjunto, diz-se que pertence a ele.

Assim, qualquer objeto ou elemento pode ou não pertencer a algum conjunto. E cada conjunto pode conter uma porção de elementos, pode conter um único elemento (é chamado conjunto unitário) e não conter nenhum elemento (é chamado conjunto vazio).332

Os conjuntos podem ser representados de duas maneiras: 1) nomeando, um a um, os seus elementos; 2) indicando uma propriedade comum aos seus elementos. Símbolos matemáticos:

= pertence = não-pertence

10.2.1 – Sub-Conjuntos Quando um conjunto está dentro de outro, diz-se que ele está contido no outro

conjunto (ou que este o contém). O conjunto interior é chamado sub-conjunto.333

= contém = não-contém

C = está contido em = não está contido em

Exemplos: a conjunto das vogais) – (representação pela propriedade comum)

a a, e, i, o, u ) – (representação pela nomeação de cada elemento)

330 Deve-se lembrar que a representação numérica no Brasil difere daquela feita nos EUA. Enquanto que nesta se faz a representação #,###,###.## para um milhão, a representação no Brasil é: #.###.###,##. Além disso, o bilhão brasileiro é chamado mil milhões em Portugal. 331 Ver: http://www-asc.di.fct.unl.pt/~jcc/asc1/Teoricas/a12/. 332 Basta que o elemento não possa pertencer ao conjunto, ainda que este possa ser nomeado: por exemplo: conjunto de cavalos de cinco patas. O conjunto vazio é representado pelo símbolo: “Ø”. 333 Não se pode dizer que um conjunto é elemento de outro conjunto; o que se diz é que ele está contido no outro conjunto. O fato de um conjunto estar ou não contido em outro conjunto cria as chamadas relações de inclusão.

conjunto das vogais) a, o conjunto das vogais) conjunto dos animais vertebrados Quando se pode nomear todos os elementos do conjunto, diz-se que ele é um

conjunto finito. Por exemplo, o conjunto de satélites da Terra (é um conjunto unitário –a Lua). Se todos os elementos são conhecidos, o conjunto é chamado conjunto fechado; se nem todos os elementos podem ser nomeados, o conjunto é chamado conjunto aberto. Então, conjunto aberto finito é aquele no qual apenas os seus elementos conhecidos podem ser nomeados. Por exemplo: a flora – conjunto de todas as plantas, silvestres ou não .

Se dois conjuntos A e B possuem elementos iguais, diz-se que A C B, ou B C A, e isto significa que os dois conjuntos são iguais: A = B. Assim, a comparação entre dois conjuntos se faz pela comparação de seus elementos, o que define suas relações de inclusão.334 Jamais se pode dizer que um conjunto é maior ou menor do que outro conjunto. Quando dois conjuntos não possuem os mesmos elementos, eles são desiguais entre si: A ≠ B.

Quando os elementos não podem ser todos nomeados, o conjunto é chamado

conjunto infinito (por exemplo, o conjunto dos números naturais). Em questões práticas, uma totalidade pode ser denominada conjunto-universo (U) (mas que não contém infinitos elementos). Geralmente, um conjunto-universo é aquele que contém vários sub-conjuntos em uma mesma situação.335

Os conjuntos podem sofrer operações matemáticas do mesmo modo que o

conjunto dos números naturais: adição (ou soma) e multiplicação, juntamente com as operações inversas: subtração e divisão (e as mesmas propriedades da operações com os números naturais).

As operações correspondentes são: Adição: a união (ou reunião) de dois conjuntos A e B (que se denota A B) é o

conjunto formado pelos elementos que pertencem a A ou a B. Há dois casos: conjunção e disjunção.

A conjunção traduz o fato de que os elementos são comuns aos dois conjuntos. A disjunção traduz o fato de que os elementos pertencem a um dos conjuntos,

ao outro, ou a ambos.336

334 Um conjunto B está contido em um conjunto A (ou é seu sub-conjunto) quanto todo elemento que pertence a B pertence também a A. 335 Conjunto-universo: conjunto total de elementos da mesma espécie, em uma mesma situação. 336 Quando os conjuntos estão separados, diz-se que eles são disjuntos.

Multiplicação: é o conjunto formado pelos elementos que pertencem ao

conjunto A e ao conjunto B (que se denota A ∩ B).

Quando os conjuntos não possuem elementos comuns, a intersecção é o conjunto

vazio. Os conjuntos admitem ainda as operações: Complemento: A + B’ = CU , em que B’ é o complemento de A em relação ao

conjunto Universo C. Neste caso, CU – B’ = A, e CU – A = B’. Partição: é a soma de todos os sub-conjuntos de um conjunto-universo: A + B +

C + D + E = FU, sendo que a intersecção entre cada um deles é vazia. 10.3 – Sistemas Matemáticos. Estruturas Algébricas Sistemas matemáticos podem ser definidos como um conjunto munido de uma

operação. Os sistemas matemáticos possuem uma estrutura caracterizada pelas propriedades da operação definida no conjunto dado.

Estruturas algébricas são estruturas que surgem conforme se definam os conjuntos e as respectivas operações. Assim, existem as seguintes estruturas algébricas:

• de semigrupo: quando a operação possui a propriedade Associativa (A); • de monóide: quando a operação possui as propriedades Associativa e Elemento

Neutro (AN); • de grupo, quando a operação possui as propriedades Associativa, Elemento

Neutro e Elemento Inverso (ANI). Se além dessas propriedades a operação é Comutativa, a estrutura algébrica é

denominada Grupo Comutativo (ANIC). Estas propriedades valem tanto em relação à Adição quanto à Multiplicação. A própria operação matemática pode ser generalizada para um tipo qualquer de

operação, apropriada ao conjunto. Assim, o Sistema Matemático passa a ser:337 Conjunto: I = e1, e2, e3, e4, ... , en Operação:

337 Um conjunto de elementos gerais munidos de uma operação geral.

Se, relacionando a multiplicação com a adição, existe a propriedade Distributiva, surge o que se chama de Corpo dos números reais (R).338

Se, em um conjunto estão definidas duas operações, adição e multiplicação, com

as propriedades ANIC para a primeira e ANC para a segunda, e ainda existir a propriedade distributiva (D) da multiplicação em relação à adição, diz-se que o conjunto tem uma estrutura de Anel Comutativo com elemento-unidade.

10.4 – Teoria das Funções Uma função (ou aplicação ou transformação) é uma relação especial ou

associação existente entre dois conjuntos, mediante uma certa correspondência entre os seus elementos. Para que esta relação seja uma função, é necessário que, a cada elemento de um conjunto A, esteja associado um único elemento de um conjunto B. Neste caso, o conjunto A é denominado Domínio da função f, e o conjunto B é denominado Conjunto Imagem de f ou Contradomínio da função f.

Pode ocorrer que a relação exista entre A e C (contido em B). Exemplo:

Conforme a relação entre os elementos, a função pode ser:

• Função injetora ou injetiva ou univoca: uma função é injetora se os elementos distintos do domínio tiverem imagens distintas. Por exemplo, dada a função f : A→B, tal que f(x) = 2x.

• Função sobrejetora: uma função é sobrejetora se, e somente se, o seu conjunto

imagem é especificamente igual ao contradomínio, ou seja, Im = B. Por exemplo, a função f : Z→Z definida por y = x + 2 é sobrejetora, porque Im = Z.

338 As propriedades matemáticas sempre são consideradas em relação aos números reais, porque eles englobam todos os outros tipos de números, a partir dos números naturais.

• Função bi-jetora: uma função é bijetora se ela é injetora e sobrejetora simultaneamente. Por exemplo, a função f : A→B, tal que f(x) = 5x + 4.

A função é injetora, porque x1 ≠ x2 implica em f(x1) ≠ f(x2). É sobrejetora, porque para cada elemento em B existe pelos menos um em A, tal que f(x) = y.

• Função inversa: uma função é inversa se ela for bijetora. Assim, se f : A→B é

considerada bijetora, então ela admite a função inversa f : B→A (por exemplo, a função y = 3x – 5 possui inversa y = (x+5)/3).339 Se a função possui uma relação de A→B e de B→A, então pode-se dizer que ela é uma função inversa.

• Função de via-única ou função 1-way: é a função na qual, dado um valor x, é

fácil calcular f(x)=y, mas que, dado o valor y, torna-se bem difícil encontrar x tal que f(x)=y.

10.5 – Teoria das Combinações – Permutação Uma permutação é uma bijeção de um conjunto em si mesmo. Dito de outra

maneira, uma permutação é o deslocamento sucessivo de elementos de um conjunto (de acordo com alguma regra), que passam a ocupar outras posições.340 Exemplos:

1, 2, 3, 4, 5, 6 => 6, 5, 3, 2, 1 [regra: inversão simples dos elementos]

339 A inversa da função y = f(x) é a função x = f(y). 340 Note-se que, sendo a permutação uma bijeção, sempre se terá uma permutação inversa, o que não é bom para a criptografia.

a, b, c, d, e, f, g, h, i => d, i, b, c, a, e, h, g, f [regra: deslocamento aleatório] 10.6 – Computabilidade, Recursividade, Decidibilidade341 Computabilidade: é uma propriedade fundamental das máquinas ditas

computáveis. Em princípio, um problema matemático é computável se puder ser resolvido por um “dispositivo que o compute”. Atualmente, estes dispositivos são os micro-processadores e os computadores.

Os computadores são máquinas capazes de receber como entrada de dados uma série de sentenças (que constituem o programa) escrito em uma linguagem artificial computável (que é a linguagem suportada pelo computador) e executar tarefas definidas, baseadas na interpretação de cada sentença.

O ato de interpretar uma sentença corresponde à execução do programa. Durante sua execução, o programa recebe entradas de dados informadas pelo usuário e produz saídas de dados que são enviadas de volta para o usuário.

A entrada de dados é formada por sentenças estruturadas em um linguagem, e é formada por um conjunto de símbolos, conforme um alfabeto e regras de formação bem definidas. Desse modo, a entrada de dados do programa pertence à linguagem artificial definida pelo programador, ou seja, a linguagem usada pelo usuário do programa.

A capacidade computacional plena (computabilidade) surge no momento em

que a linguagem L0 – na qual o programa (a linguagem do programador) é construído – permite a construção de sentenças suficientemente poderosas (programas P0 escritos em L0), cuja execução aceita entrada de dados na linguagem L1, em que L1 é tão poderosa quanto L0.

Neste caso, é possível, de forma recursiva e indutiva que o usuário do programa P0 escreva uma sentença em L1, que interpretada por P0 em execução, receba sentenças numa linguagem L2, a qual possui a mesma capacidade computacional das linguagens L0 ou L1.

Recursividade ou recursão: é um termo usado para descrever o processo de

repetição de um objeto, de forma similar a qualquer operação anterior. A recursividade, na programação de computadores, envolve a definição de uma função que pode invocar a si própria.

A grande vantagem da recursão está na possibilidade de usar um programa de computador finito para definir, analisar ou produzir um estoque potencialmente infinito de sentenças, projetos (designs) ou outros dados.342

Decidibilidade e Linguagens Decidíveis: uma linguagem decidível é uma

linguagem em que existe uma Máquina de Turing Universal que, quando recebe uma cadeia de dados de entrada, pode decidir entre aceitá-la ou rejeitá-la.

A Máquina de Turing Universal – MTU é assim chamada devido à sua capacidade de simular qualquer outra máquina a partir da descrição da máquina de entrada. Ela ilustra bem os problemas de indecibilidade.

341 Ver: http://www.ncc.up.pt/~nam/publica/compdec.pdf. Ver também: http://www.cic.unb.br/~jhcf/MyBooks/ic/3.ProgramacaoBasica/AspectosTeoricos/MaquinasLinguagens/Computabilidade/computabilidade.html. 342 Ver: http://pt.wikipedia.org/wiki/Recursividade_%28ci%C3%AAncia_da_computa%C3%A7%C3%A3o%29.

10.6.1 – O Problema da Parada343

O problema da parada pode ser definido como:

Dado a descrição formal de um programa como a entrada inicial, determinar se

o programa, quando executado nesta entrada, sempre pára.

O problema da parada foi um dos primeiro problemas a serem provados como indecidíveis. Em maio de 1936, Alan Turing, no artigo On Computable Numbers With an Application to the Entscheidungsproblem, provou que não pode existir um procedimento geral para resolver este problema, para todas as entradas possíveis da MT.344

10.6.2 – Problema Polinomial e a Classe P345 Um problema computacional é polinomial se existe um algoritmo polinomial

(caracterizado por um polinômio) para o problema. Problemas desse tipo são considerados tratáveis (matematicamente), do ponto de vista computacional.

Definido limitadamente, a classe P de problemas é o conjunto de todos os problemas polinomiais.346

10.6.2.1 – Algoritmos Não-Polinomiais e Algoritmos Polinomiais Diz-se que um algoritmo resolve um dado problema se, ao receber qualquer

instância desse problema, devolve uma solução ou diz que ela não tem solução. Um problema é não-polinomial se nenhum algoritmo polinomial (conhecido)

resolve o problema. Problemas desse tipo são considerados computacionalmente intratáveis.

Um algoritmo que resolve um dado problema é polinomial, se o consumo de

tempo no pior caso é limitado por uma função polinomial dos tamanhos das instâncias do problema. Assim, é polinomial qualquer algoritmo que consuma no máximo:

100N4 + 300N2 + 5000 [unidades de tempo] ,

sendo N o tamanho da instância.

Também é polinomial qualquer algoritmo que consuma no máximo 200N9 log N [unidades de tempo].

343 A execução de um programa é interrompida em várias situações: quando o cálculo chega ao fim e uma instrução STOP é executada; quando ocorre algum erro na execução do programa (ONERRORGOTO); quanto a computação de algum dado é terminada, e o programa reconhece isto (PARE). Esta “parada” deve ser decidida pelo programa, e não pelo programador. 344 Ele conseguiu a prova ao reduzir o problema da parada ao Entscheidungsproblem, que havia sido provado como indecidível pelo lógico Alonzo Church no mês anterior. 345 Ver: http://pt.wikipedia.org/wiki/NP_%28complexidade%29. 346 Definição limitada porque, a rigor, a classe P contém apenas os problemas polinomiais de decisão.

Os algoritmos polinomiais são considerados relativamente rápidos. Quanto aos algoritmos não-polinomiais — como, por exemplo, os que consomem tempo proporcional a 2N — são considerados extremamente lentos.

10.6.3 – Tempo Polinomial Na chamada teoria da complexidade computacional, NP (Tempo polinomial não

determinístico – Non-Deterministic Polynomial time) representa o conjunto de problemas que são decidíveis em tempo polinomial por uma MT não-determinística.

É o conjunto de problemas que podem ser verificados em tempo polinomial por uma Máquina de Turing determinística.

10.6.3.1 – A Classe NP de Problemas. P = NP?347 Apesar de todo o avanço da matemática, é de conhecimento comum que o status

de vários problemas é desconhecido: não se sabe se o problema é polinomial ou não (se pode ou não ser resolvido usando um polinômio qualquer). Por essa razão, os matemáticos procuram investigar a complexidade relativa dos problemas.

Trata-se de verificar se um dado problema Y é computacionalmente mais fácil ou mais difícil que um outro problema X, cuja solução pode ser conhecida. Uma consideração é também levantada, neste caso: o da razoabilidade do problema. Ou seja: quais problemas devem ser considerados "razoáveis"? De um modo geral, diz-se que um problema é "razoável" se é fácil reconhecer uma solução, quando esta é encontrada.

Mais precisamente, um problema computacional X é "razoável" se toda instância I de X satisfaz a seguinte condição: é possível verificar, em tempo polinomial, se uma suposta solução da instância I é, de fato, uma solução de I.

O conjunto de todos os problemas "razoáveis" é (essencialmente) igual à classe NP de problemas.348

Neste ponto, entra o problema PxNP. De forma hierárquica, é evidente que a

classe NP inclui a classe P (ou seja, todo problema polinomial é "razoável"). Admite-se até que P seja apenas uma pequena parte de NP. Entretanto, ninguém conseguiu ainda encontrar um problema NP que não esteja em P, isto é, um problema "razoável" para o qual não existe um algoritmo polinomial. Esta situação sugere que talvez P seja igual a NP (mas isto é apenas uma conjectura não provada).349

347 Ver: http://www.ime.usp.br/~pf/analise_de_algoritmos/aulas/NPcompleto.html. 348 O conjunto dos problemas "razoáveis" não deve ser confundido com a classe NP. 349 A pergunta "P = NP?" por ser reformulada assim: "É verdade que todo problema cujas soluções podem ser conferidas por um algoritmo polinomial pode também ser resolvido por um algoritmo polinomial?". Esta pergunta faz parte do

10.7 – Aplicações Matemáticas na Criptografia A função de cifragem ek (ou regra de encriptação) precisa ser uma função

injetora. Ou seja, a regra ek, quando aplicada, pode dar apenas um resultado.350 A importância do uso destas funções na criptografia fica clara no seguinte exemplo:

y = ek(x1) = ek(x2) ,

em que x1 é diferente de x2.

Neste caso, quando se decifrar y, são encontrados dois resultados diferentes, que

não podem ser usados (isto ocorre porque a função de cifragem usada não é unívoca).

10.7.1 – Sistema de Substituições Monoalfabéticas A característica dos sistemas de substituições monoalfabéticas é que cada letra

da mensagem é substituída por outra, de modo tal que esta relação de substituição seja fixa.

No caso da Cifra de César, a chave K é um número inteiro entre 0 e 25. Cada letra l da mensagem é encriptada usando-se a seguinte equação: e = (l + K) mod 26 Para desencriptar, usa-se: l = (e + K) mod 26 Neste caso, logicamente, a chave K tem que ser a mesma nas duas operações: encriptação e desencriptação.

A limitação deste sistema é que ele só tem 25 chaves possíveis, e não seria muito demorado testar todas as possíveis chaves.

10.7.1.1 – Substituição Semi-Aleatória Nessa substituição, para cada bloco possível x, é definido um conjunto de blocos

distintos A(x), e é substituído cada bloco x qualquer por um elemento aleatoriamente escolhido, do conjunto A(x).

Essa substituição exige uma função injetora B → S(C),351 na qual um elemento está associado a um subconjunto de C, e, para quaisquer dois elementos de B, as duas imagens (subconjuntos de C) são disjuntas. Exemplo:

Suponha-se que o alfabeto da mensagem seja constituído apenas de vogais. Os

conjuntos são definidos da seguinte maneira:

a → ei, io, eo, au e → ie, ou , ao, iu

350 Como já se viu, funções que dão apenas um resultado são chamadas de injetivas, injetoras, unívocas ou 1-1. 351 S(C) é o conjunto dos subconjuntos de C.

i → uo, eu, ao, oo o → uu, ae, aa, ia u → ai, ee, oe, ii

Assim, a mensagem pode ter várias possíveis cifras: OIE → AEAOIU ou UUUOOA Os conjuntos devem ser disjuntos, para que não ocorram casos em que dois

blocos diferentes tenham o mesmo ciframento. Com a substituição aleatória, o tamanho da cifra tende a aumentar, o que torna

mais difícil a desencriptação pela análise de frequência de cifras. 10.7.2 – Sistema de Permuta Neste tipo de sistema a chave K é um vetor de permuta P de tamanho m ( m

2). O vetor P deverá ter todos os números entre 1 e m, sem repetir nenhum. Estas características garantem que P terá uma permuta inversa.

A mensagem a ser criptografada deve ser dividida em blocos de m letras.

Suponha-se o bloco de texto puro conhecido como tp: tp = ( a1, a2, a3, ...,am)

A saída desse algoritmo para este bloco será um outro bloco de mesmo tamanho, cuja permutação dependerá da chave K. Exemplo: M = VAMOSATACARAMANHASEMFALTA P = (3,5,4,1,2) M’ = MSOVAAACATMNARASMEHALATFA 10.7.3 – Vigenère e os Sistemas Polialfabéticos

Sistemas polialfabéticos são aqueles em que se tem a combinação ordenada de diversos sistemas monoalfabéticos.

O sistema Vigenère é um sistema polialfabético que adota como chave um conjunto de p letras:

ch = (l1, l2, l3, ...., lp) A mensagem deve ser dividida em blocos de p letras, sendo p o período do

sistema polialfabético. Seja um bloco de texto puro tp: tp = (a1, a2, a3, ... , ap)

A saída desse algoritmo será um outro bloco, também com p letras. Este será a substituição de tp usando ch:

tc = ((a1+l1)mod 26, (a2 + l2) mod 26 (a3 + l3) mod 26, K, (ap + lp) mod 26)

Ou seja, na cifra de Vigenère, se as letras A–Z forem mapeadas nos números inteiros (de 0 a 25) e a adição módulo 26 for aplicada, a encriptação pode ser escrita:

e a desencriptação,

Este conceito pode ser generalizado. Dado um período p, uma chave para uma substituição polialfabética é

constituída de p chaves para substituições monoalfabéticas. Divide-se sempre a mensagem em blocos de p letras, e em cada letra de um bloco aplica-se uma das substituições monoalfabéticas da chave. 352

10.7.4 – Sistemas Modernos de Criptografia Um criptossistema é um sistema constituído por cinco sub-sistemas (A, C, K, E,

D): A: é o conjunto finito de mensagens claras. C: é o conjunto finito de mensagens cifradas. K: é o conjunto das chaves possíveis (também conhecido como espaço das

chaves), em que k é uma das chaves do conjunto E: há uma regra de cifragem chamada ek, onde e vem de encriptação, e k vem

da chave usada. Portanto, k C K. Para cada chave pertencente ao conjunto de chaves, haverá uma encriptação diferente que pertence ao conjunto ek C E.

D: para cada regra de ciframento há uma regra de deciframento d, e k será a chave usada. O conjunto de regras de decifração dk pertence ao conjunto D, ou seja, dk C D.

Para cada chave pertencente ao conjunto de chaves existe uma regra de ciframento que pertence ao conjunto de regras de ciframento, que tem uma regra de deciframento correspondente que pertence ao conjunto de regras de deciframento.

Assim, ek e dk são funções. A função de ciframento pode ser usada num texto claro

x: ek(x). O resultado é que o texto claro é transformado em texto cifrado, ou seja, ek: A → C. Com a função de deciframento ocorre o contrário, o que pode ser dito como

352 Sob este ponto de vista, o Sistema Vigenère é constituído de p substituições monoalfabéticas consecutivas do tipo Cifra de Cesar.

dk: C → A. A função de cifragem ek(x) transforma o texto claro x em um texto cifrado,

portanto, pode-se chamar ek(x) de texto cifrado. Se se aplicar a função de decifração correspondente a este texto cifrado, obtem-se o texto claro. Ou seja:

dk(ek(x)) = x , para qualquer texto claro x A 10.7.4.1 – Técnicas Criptográficas Modernas

• Primitivas: São simples funções matemáticas f : 0, 1* → 0, 1* que transformam strings de bits em outros strings de bits.

• Esquemas: são computações criptográficas que lidam com o conhecimento e a aleatoriedade. Distinguem-se dos protocolos (ver abaixo) pelo fato de usarem o conhecimento de um único agente.

• Protocolos: são computações complexas que envolvem interações entre dois ou mais agentes. Cada agente dispõe de uma seqüência de computações (uma estratégia) que usa, com o conhecimento próprio, em função de entradas (inputs) recebidas de outros agentes.

• Difusão e confusão: diz-se que uma substituição acrescenta confusão à informação, e uma transposição acrescenta difusão. O objetivo da confusão é tornar mais complexa a relação entre a chave e o texto cifrado, de modo a dificultar a que um criptoanalista possa deduzir qualquer propriedade da chave a partir do conhecimento do texto cifrado. O objetivo da difusão é embaralhar ou espalhar os bits do texto legível de modo a eliminar qualquer redundância no texto cifrado. 10.7.4.1.1 – Noção de Protocolo Para que ocorra uma comunicação entre emissor e receptor usando um

determinado criptossistema, é necessário estabelecer certas regras de comunicação: é o chamado protocolo. Ambos escolhem, por algum modo seguro, uma das chaves do

conjunto de chaves (k K). Suponha-se que o emissor queira nviar uma mensagem através de um canal

inseguro. Esta mensagem é constituída por caracteres do tipo: x = x1 x2 ... xn

Como n indica o número de caracteres da mensagem, é claro que n > 0 (se for zero, não existe mensagem). Mais precisamente, n 1.

A mensagem pertence ao conjunto de textos claros, ou seja, x A. Cada caracter da mensagem clara pertence ao conjunto de caracteres desta mensagem; como esta mensagem pertence ao conjunto de mensagens claras A, os caracteres também fazem parte deste conjunto.

Se se chama cada caracter de xi, tem-se que: n i 1

(o valor de i precisa ser igual ou maior do que 1 e menor ou igual ao número de

caracteres n da mensagem). Daí:

xi A , e: n 1 ; 1 < i < n Cada xi é cifrado usando a regra de ciframento ek especificada pela chave

escolhida. O emissor faz os seguintes cálculos: yi = ek(xi) , 1 < i < n

para obter a mensagem cifrada:

y = y1 y2 ... yn

O receptor aplica a regra de deciframento dk em y1 y2 ... yn e obtém a mensagem clara x1 x2 ... xn.

10.8 – Estrutura Matemática de Sistemas Secretos De acordo com Shannon, dois sistemas secretos T e R podem ser combinados

entre si para formarem um sistema secreto S. Se T e R possuírem o mesmo domínio (espaço de mensagem), pode-se formar:

S = pT + qR , em que: p + q = 1.

Esta operação consiste em fazer uma escolha preliminar com as probabilidades p

e q, determinando qual dos T e R serão usados. Esta escolha faz parte da chave de S. Após esta determinação, serão usados T ou R.

A chave total de S precisa especificar qual (entre T e R) será usado, e qual chave será usada.

Se T consiste das transformações T1 , ..., Tm com probabilidades p1 , ..., pm, e R

consiste de R1 , ..., Rk com probabilidades q1, ..., qk, então S = pT + qR consiste nas transformações T1 , ..., Tm , R1 , ..., Rk com probabilidades pp1 , pp2 , ..., ppm , qq1 , qq2 , ..., qqk.

Generalizando, pode-se formar a soma de inúmeros sistemas: S = p1T + p2R + ... + pmU .

em que:

∑ pi = 1

Qualquer sistema T pode ser escrito como a soma de operações:

T = p1T1 + p2T2 + ... + pmTm ,

sendo Ti uma operação de ciframento definida de T, correspondendo à escolha da chave i, cuja probabilidade é pi.

Uma outra forma de combinar dois sistemas secretos é tomando o produto (mostrado abaixo). Suponha-se que T e R sejam dois sistemas, e que o domínio (espaço da linguagem) de R possa ser identificado com a série (espaço de criptograma) de T. Neste caso, pode-se aplicar primeiro T à linguagem, e depois R ao resultado deste processo de ciframento.

Produto de dois sistemas S = RT

Isto dá uma operação resultante S, que se escreve como um produto:

S = RT

A chave para S é composta pelas duas chaves de T e R, e se assume que tenham sido escolhidas independentemente e de acordo com as probabilidades originais. Portanto, se m chaves de T, com probabilidades p1 p2 ... pm são escolhidas, e n chaves de R têm as probabilidades p'

1 p'2 ... p'

n , então S tem no máximo mn chaves com probabilidades pi p

'j.

Sistema Secreto (Shannon)

O cifrador tem uma função operacional. Se M é a mensagem, K a chave e E a mensagem cifrada, tem-se:

E = f(M,K) ,

ou seja, E é função de M e K.

Mas isto pode ser visto como uma família de operações ou transformações (de um parâmetro), e ser escrito assim:

E = TiM ,

em que a transformação Ti aplicada à mensagem M produz o criptograma E. O índice i corresponde à chave usada.

Genericamente, assume-se que há um número finito de chaves possíveis, e que cada uma possua uma probabilidade pi associada. Portanto, a fonte da chave é representada por um processo estatístico, ou seja, um dispositivo que escolhe uma das transformações do conjunto de transformações T1, T2, ..., Tm com as respectivas probabilidades p1, p2, ..., pm.

De forma análoga, assume-se genericamente um número finito de mensagens possíveis M1, M2, ..., Mn associadas às probabilidades q1, q2, ..., qn.

No receptor deve-se poder recuperar M, conhecendo E e K. Portanto, as transformações Ti da família devem possuir inversos únicos Ti-1, de modo que TiTi-1 = I, a transformação de identidade. Portanto:

M = Ti

-1E Em todos os casos este inverso precisa existir e ser único para cada E, o qual

pode ser obtido de uma M com chave i.

Dois sistemas secretos serão iguais se forem constituídos pelo mesmo conjunto de transformações Ti, com o mesmo espaço de mensagens e criptogramas (extensão e domínio) e a mesma probabilidade para as chaves.

Um sistema secreto não significa uma transformação, mas sim um conjunto de muitas transformações. Após a escolha da chave, apenas uma destas transformações é usada (devido a isto, pode-se ser induzido a definir um sistema secreto como uma simples transformação num idioma). Mas o inimigo não sabe qual foi a chave escolhida, e as chaves possíveis são tão importantes para ele quanto a efetivamente usada. Na verdade, é apenas a existência destas outras possibilidades que confere algum segredo ao sistema.

10.8.1 – Avaliação de Sistemas Secretos353

Vários sistemas podem ser aplicados para estimar o valor de um sistema secreto

qualquer. Os mais importantes são:

353 Cf. Shannon.

1. Quantidade de segredo: Existem alguns sistemas que são perfeitos, e o inimigo nada aproveita do que intercepta. Outros sistemas, apesar de lhe fornecerem alguma informação, não possuem uma "solução" única para os criptogramas interceptados. Entre os sistemas de solução única, existe uma grande variação no volume de trabalho necessário para obter a solução, e no volume de material que precisa ser interceptado para transformar a solução em única.

2. Tamanho da chave: a chave precisa ser transmitida através de meios não interceptáveis. Como algumas vezes precisa ser memorizada, às vezes é desejável possuir a menor chave possível.

3. Complexidade das operações: a cifragem e a decigem deveriam ser operações bem simples. Se forem feitas manualmente, a complexidade ocasiona perda de tempo, erros, etc. Se forem efetuadas mecanicamente, a complexidade exige máquinas grandes e caras.354

4. Propagação de erros: em certas cifras, o erro de uma letra na cifragem ou na transmissão ocasiona grande número de erros no texto decifrado. Os erros são disseminados pela operação de decifração, causando a perda de informação e a necessidade da repetição do criptograma. Isso, naturalmente, deve ser minimizado.

5. Expansão da mensagem: Em alguns sistemas o tamanho da mensagem é aumentado pelo processo de cifragem. Este efeito indesejado pode ser visto quando se tenta diluir as características estatísticas da mensagem pela adição de nulas, ou onde múltiplas substituições são utilizadas.

354 Na atualidade, são fabricados chips especialmente projetados para realizar as cifras desejadas. Ou seja, mais do que softwares, são usados hardwares, para o propósito de cifrar.

CAPÍTULO XI

FUNDAMENTOS DA CRIPTOANÁLISE MODERNA 11.0 – Introdução

Ao longo da Segunda Guerra Mundial a criptografia atingiu praticamente o estado da arte, com o advento de novos métodos algorítmicos usando matemática complexa. A criptoanálise, por seu lado, evoluiu da mesma forma, usando métodos sofisticados de busca de chaves355 ou de padrões ocultos nos métodos criptográficos. Com o uso de modernos computadores, pode-se dizer que a criptoanálise também atingiu o estado da arte. O trabalho de criptoanálise, sempre que for considerado necessário (por motivos militares, diplomáticos, políticos, estratégicos, puramente acadêmico, etc), deve merecer algumas considerações prévias:

• Que conhecimento e habilidades são necessários ao(s) atacante(s)? • Quanta informação secreta é deduzida? • Quanta computação e quanta complexidade computacional são requeridas? • A quebra será do criptosistema total, ou de uma versão mais fraca? • O princípio de Kerckhoff foi obedecido? • Informações ou equipamentos adicionais (inimigos) podem ser ou serão

conseguidos?356 • Quais métodos de ataque serão utilizados? Métodos tradicionais de ataque

(Kasiski, análise de frequência, p. ex) podem ser utilizados?

O segundo item anterior introduz novas considerações a respeito dos recursos computacionais requeridos. Estes recursos normalmente incluem:

• Tempo – é o número de passos ou etapas computacionais (computation steps) que devem ser completados.

• Memória – é a capacidade total de memória (storage) requerida para poder realizar o ataque.

• Dados – é a quantidade total de textos claros e cifrados necessários para realizar uma quebra.357

11.1 – A Necessidade da Criptoanálise A criptoanálise, sem nenhuma dúvida, tem influenciado na tomada de decisões

estratégicas em vários campos da atividade humana. Mas é na guerra em geral que ela exerce a sua maior influência. Seja para se prevenir contra eventuais inimigos, seja para

355 Uma chave, por mais forte que seja, pode ser eventualmente quebrada através de uma análise cuidadosa do(s) texto(s) codificados, ou por meio de um ataque pela força bruta, a qual pode envolver milhares de computadores. Atualmente, redes de computadores na Internet podem realizar este feito, que entretanto se torna inviável se o objetivo for quebrar sucessivas chaves (de um mesmo emissor), ou chaves diferentes (de emissores diferentes). 356 Dois métodos tradicionais ainda costumam ser usados, principalmente em tempos de conflito: 1) a captura da chave por qualquer forma: espionagem, roubo, extorsão, traição, etc; 2) a captura de uma máquina cifradora (ou de um chip de encriptação), ou a sua re-construção pela engenharia reversa, ou a construção de uma caixa-preta capaz de fazer a mesma coisa. 357 Se não for possível obter quantidade suficentes destes textos, o ataque pode se mostrar insatisfatório.

garantir a continuidade da paz, o trabalho dos criptoanlistas tem se mostrado inestimável, ainda que muitas vezes não tenham reconhecido o seu valor.

Na Primeira Guerra Mundial a quebra da cifra alemã permitiu conhecer a estratégia militar que pretendiam exercer contra os Estados Unidos. Quando se deu a público o telegrama emitido pelo Ministro das Relações Exteriores da Alemanha, Arthur Zimmermann, para o governo mexicano, o seu conteúdo explosivo foi suficiente para quebrar a neutralidade americana.358

O telegrama de Zimmermann decodificado

Durante a Segunda Guerra Mundial, a leitura das cifras alemãs e japonesas

impediu que a guerra se prolongasse, ao dar vantagem estratégica para os Aliados.359 Na atualidade, a ação dos hackers (que não deixa de ser um trabalho de

criptoanálise) tem demonstrado a fragilidade de sistemas, protocolos e algoritmos considerados “seguros”. Tornou-se rotineiro surgir na imprensa (especializada ou não) notícias acerca de vírus potencialmente perigosos, falhas e vulnerabilidades em dispositivos e arquivos de proteção ou de uso na informática, tais como plugins, Web browsers, navegadores e outros aplicativos diversos. Nestes casos, a criptoanálise tem demonstrado ser de valia na elaboração de dispositivos, arquivos e equipamentos mais seguros.

11.2 – Compreendendo a Criptoanálise Moderna A criptoanálise moderna difere em gênero e grau da criptoanálise clássica. Isto

se deve aos algoritmos utilizados em cada tipo de critptografia, antiga e moderna. Enquanto que aquela baseava as suas codificações em cifras de fluxo, os modernos algoritmos baseiam predominantemente em cifras de blocos.360 Além disso, enquanto que a cifragem antiga se faz sobre os caracteres do idioma, a cifragem moderna se faz

358 Ver Singh, p. 125 e ss. 359 É claro, as cifras aliadas também eram lidas pelo Eixo. Contudo, estes (por vários motivos), não souberam – ou não puderam – fazer uso válido dessas leituras. 360 As pesquisas acadêmicas que se desenvolveram envolvendo cifras de blocos tomaram um rumo diferente daquele realizado sobre cifras de fluxo. Apesar da criptoanálise de cifras de fluxo ser pelo menos tão importante quanto a criptoanálise de cifras de bloco, e mais importante no meio militar, a realidade é que a maioria esmagadora dos algoritmos produzidos envolvem cifras de blocos. Assim, há uma maior tendência em se estudar quebras de cifras de blocos do que quebras de cifras de fluxo.

sobre os bits que os representam (e os blocos, então, são blocos de bits). Estes fatos mudam toda a abordagem com relação à decifração de códigos.

Qualquer tipo ou forma de ataque criptoanalítico (às modernas cifras) deve levar

em consideração uma série de fatores. Por existirem poucos (ou talvez nenhum) sistema realmente inatacável, qualquer sistema deve ser avaliado conforme o seu grau de força (ou fraqueza) criptográfica. Esta avaliação deve ser acompanhada de uma estimativa de custos-operacionais/tempo+complexidade-computacional/importância-real-do-conteúdo-criptografado, sem o quê esforços grandiosos poderiam resultar em resultados de pouca monta, para dizer o mínimo.

Há que se distinguir também entre ataques teóricos (realizados no meio acadêmico, contra algoritmos conhecidos geralmente para verificar a sua força ou fraqueza) e os ataques práticos, do mundo-real (com carências diversas: desconhecimento do algoritmo, poucos textos cifrados à disposição, textos claros, dispositivos e algoritmos inacessíveis, etc).

Quebrar uma cifra não significa necessariamente encontrar uma forma pela qual um invasor possa recuperar o texto claro a partir do texto cifrado. Às vezes significa apenas encontrar uma fraqueza que possa ser explorada com uma complexidade menor do que a força bruta. Se a força bruta requer 2128 encriptações; um ataque que precisar de 2110 encriptações já será considerado uma quebra. Uma criptoanálise de sucesso pode significar a demonstração de uma quebra numa variedade de cifra com rodadas reduzidas (por exemplo – DES com 8 rodadas versus DES completo de 16 rodadas), ou uma variedade simplificada da cifra.

Este é um tipo de consideração totalmente dependente da força ou fraqueza do criptosistema, bem como da força e dos recursos do atacante. Como a maioria dos criptosistemas é constituída por algoritmos publicados, os pesquisadores acadêmicos tendem a atacar as suas versões fracas, tais como blocos de cifras ou funções hash com algumas rodadas removidas. A consequência mais provável deste método é que não se pode provar que um criptosistema é fraco, se apenas uma versão fraca (ou com menos rounds) foi quebrada.

Entretanto, a maioria das quebras começa como criptoanálise de variedades com rodadas reduzidas e, eventualmente podem ser estendidas para a cifra completa. Assim, quebras parciais podem indicar que o criptosistema total pode ser quebrado, como o provam os sucessos obtidos nos ataques ao DES, MD5 e SHA-1.

Em alguns casos, o resultado da criptoanálise pode ser absolutamente inútil. O

criptógrafo dinamarquês Lars Ramkilde Knudsen361 classificou os vários tipos de ataque a blocos de cifras e os seus eventuais resultados, de acordo com o montante e a qualidade da informação:

• Quebra total – o atacante deduz a chave secreta. • Dedução global – o atacante, sem conhecer a chave, descobre um algoritmo que

é funcionalmente equivalente para encriptar ou desencriptar. • Dedução inesperada (instance deduction) – o atacante descobre textos claros

(ou cifrados) adicionais não conhecidos previalmente. • Dedução de informação – o atacante ganha alguma informação-Shannon acerca

de textos claros ou cifrados, não conhecidos previamente.

361 Ver: http://www2.mat.dtu.dk/people/Lars.R.Knudsen/.

• Algoritmo distintivo (distinguishing algorithm) – o atacante pode distinguir entre a cifra e uma permutação randômica.

11.3 – Métodos Gerais de Ataque Criptoanalíticos362 Em uma primeira classificação, os ataques podem ser divididos em:

• Ataque ativo: é aquele no qual há acesso direto aos dispositivos e equipamentos sob análise. Pode ser:

o Ataque invasivo. o Ataque semi-invasivo. o Ataque não-invasivos.

• Ataque passivo: é aquele realizado por simples monitoração dos dispositivos e equipamentos, e quando se interceptam as mensagens cifradas.

11.3.1 – Tipos de Ataque

1. Ataque às cifras de fluxo • Ataque aos textos cifrados clássicos

o Método de Kasinski o Algoritmo de Churn

2. Ataque aos blocos de cifras 2.1. Ataques gerais aos algoritmos simétricos

o Criptanálise linear (Linear cryptanalysis)363 Piling-up lemma364

o Ataque por força bruta (Brute force attack) o Ataque às OTPs (OTP attack) o Ataque de chave relacionada (Related-key attack) o Ataque boomerangue (Boomerang attack) o Ataque Davie (Davies' attack) o Criptanálise integral (Integral cryptanalysis)

square attack integral attack

o Ataque Meet-in-the-middle (Meet-in-the-middle attack) o Criptanálise Mod-n (Mod-n cryptanalysis) o Criptanálise rotacional (rotational attack) o Ataque “sanduíche” (Sandwich attack) o Ataque Slide (Slide attack) o Ataque XSL (XSL attack) o Criptanálise diferencial (Differential cryptanalysis)

Criptanálise diferencial do algoritmo de Feistel o Criptanálise diferencial impossível (Impossible differential

cryptanalysis) o Criptanálise diferencial truncada (Truncated differential

cryptanalysis) o Criptanálise diferencial parcial (Partial differential cryptanalysis)

362 A maioria será aqui apenas mencionada, sem maiores explanações. Informações complementares podem ser procuradas na literatura especializada. 363 Ver: http://homes.esat.kuleuven.be/~abiryuko/Enc/e32.pdf. 364 Sobre Piling-lemma, ver: http://en.wikipedia.org/wiki/Piling-up_lemma. Ver também: http://www.springerlink.com/index/1khn5f7muylv10ug.pdf.

o Ataque algebraico (Algebraic attack) o Ataque Oráculo (Padding oracles attack)365

2.1.1. Ataque às funções hash o Busca de colisões o Birthday attack o Rainbow table

2.1.2. Ataque às redes de computadores o Espionagem Tempest o Análise de tráfego o Exposição em sistemas multi-usuário o Ataque por interceptação (Man-in-the-middle attack)

Bit-flipping attack o Engenharia social o Replay attack

Ataques externos • Black-bag cryptanalysis • Rubber-hose cryptanalysis

2.2. Ataque aos algoritmos assimétricos o Ataque às cifras de fluxo o Desafios ao RSA

Wiener attack EPF attack Ataques a protocolos que usam RSA

• Criptograma escolhido contra assinatura • Módulo Comum • Expoente pequeno para encriptação • Ordem de operação de cifra e assinatura

2.2.1. Ataque Side-channel (Side-Channel attack – SCA) o Power analysis

The Bellcore Attack Simple power analysis – SPA Differential power analysis – DPA High-order differential power analysis – HO-DPA Inferential power analysis – IPA Correlation power analysis Inferential power analysis

o Análise Simples Eletromagnética (Simple Eletromagnetic Analysis – SEMA)

o Análise Diferencial Eletromagnética (Differential Eletromagnetic Analysis – DEMA)

o Bleichenbacher attack (ao RSA) o Timing attack

Cache-timing attack 2.2.2. Ataque aos textos cifrados modernos

o Ataque do texto cifrado único (cyphertext-only attack) o Ataque do texto conhecido (known plaintext attack)

365 Em criptografia, um oráculo é uma espécie de caixa preta que responde a perguntas. Padding Oracles – PO, são uma espécie de caixa preta que servem para desencriptar uma mensagem de entrada e dizer se o padding era correto ou não. Ver: http://www.limited-entropy.com/.

o Ataque adaptativo do texto claro escolhido (adaptative chosen plaintext attack)

o Ataque adaptativo do texto cifrado escolhido (adaptive chosen ciphertext attack)

o Ataque do texto cifrado escolhido (chosen-cyphertext attack) o Ataque da chave escolhida (chosen-key attack o Ataque por chave relacionada (related-key attack)

Known-key distinguising attack

11.3.1.1 – Ataque às Cifras de Fluxo366 Como já se viu, a cifra de fluxo utiliza chaves privadas (simétricas). A cifra de

fluxo é uma cifra em que os bits dos textos claros são combinados com uma chave pseudo-randômica de fluxo de bits (chave de fluxo, ou keystream), normalmente utilizando uma operação XOR. A encriptação dos dígitos (bytes) do texto claro é feita um por vez, e a transformação dos dígitos sucessivos varia ao longo do processo, sendo que a encriptação de cada um depende do estado interno corrente (current state).

As cifras de fluxo são mais rápidas do que as cifras de blocos, e possuem uma maior complexidade em hardware. São, entretanto, mais susceptíveis a problemas de segurança, se usadas incorretamente. Por exemplo, se o mesmo estado interno de partida é usado duas vezes:

Sejam duas mensagens, A e B do mesmo tamanho, e ambas encriptadas usando-

se a mesma chave K. A cifra de fluxo produz uma série de bits (string of bits) C(K) do mesmo comprimento que a das mensagens. A mensagem encriptada fica assim:

E(A) = A xor C e E(B) = B xor C ,

em que XOR é executada bit a bit. Suponha-se que as mensagens E(A) e E(B) são interceptadas. O interceptador pode facilmente computar:

E(A) xor E(B)

No entanto, a operação XOR é comutativa, e tem a propriedade: X xor X = 0 (auto-inversa) , portanto: E(A) xor E(B) = (A xor C) xor (B xor C) = A xor B xor C xor C = A xor B

Se uma das mensagens é maior do que a outra, basta truncar a maior para o tamanho da menor, e o ataque revelará a porção excedente. Ou seja, se duas mensagens encriptadas com a mesma chave são interceptadas, é possível recuperar A xor B, e portanto a chave cifradora.

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

10.3.1.2 – Métodos de Ataque aos Textos Cifrados Clássicos Estes são ataques baseados na estrutura lógico-léxico-gramatical do texto claro,

buscando-se padrões que acabam surgindo devido à relativa rigidez dessa estrutura. As formas mais usuais de ataques ao texto cifrado pelo método de fluxo são: o Teste de Kasiski (ou Método de Kasiski) e o Algoritmo de Churn.

10.3.1.2.1 – O Teste de Kasiski O Teste de Kasiski (ou ataque com base em strings) permite a um criptoanalista deduzir o comprimento da palavra-chave em uma cifra de substituição polialfabética.367 Assim que descobre o comprimento da chave, a cifra é distribuída em n colunas, onde n é o comprimento da chave. A partir daí cada coluna pode ser tratada como uma cifra de substituição monoalfabética, e atacada com análise de frequência. 1. Método da Procura de Strings: este método envolve procurar por strings de caracteres (no mínimo três) que se repitam ao longo da cifra. A distância entre as ocorrências consecutivas dos strings são provavelmente múltiplos do comprimento da palavra-chave. Encontrando repetidos strings, o MDC (Máximo Divisor Comum) de todas as distâncias leva ao valor mais provável desse comprimento.

A razão disto reside no fato de que, se repetidos strings ocorrem no texto claro e a distância entre eles é múltipla do comprimento da palavra-chave, as letras desta se alinharão com as strings.

Por exemplo, considere-se o seguinte texto claro:

cripto é curto para criptografia

Nesse texto claro, notam-se duas sequências (a string “cripto”), separadas por 20 caracteres (os espaços são contados).

Primeiro, alinha-se o texto claro com a palavra-chave de seis caracteres "abcdef" (6 não divide 20), e depois com a palavra-chave de cinco caracteres, "abcde" (5 divide 20).

abcdef abcde fabc defabcdefab cdefabc criptoé curto para criptografia

abcde a bcdea bcde abcde abcdea bcdeabc cripto é curto para cripto grafia

Note-se que a primeira ocorrência de "cripto" se alinha com a sequência

"abcdef", e a segunda com "cdefab". Assim, surgirão dois textos cifrados diferentes. Já no segundo caso, a string “cripto” se alinha (nas duas vezes em que ocorre

com a string “abcde”. Assim, os dois exemplos encriptam para a mesma cifra, e tornam possível o exame de Kasiski.

A dificuldade em usar este teste reside na dificuldade de encontrar repetidos strings, principalmente se for um trabalho manual. Entretanto, o uso de computadores facilita sobremaneira esta tarefa. Ainda assim, é necessária uma supervisão humana para

367 O teste de Kasiski baseia-se na presunção de que a cifra é um resultado direto da aplicação de uma chave. Em alguns casos, transposições prévias e sobre-ciframento dificultam sobremaneira a aplicação deste teste.

prevenir e eliminar coincidências, encontrar o comprimento correto e analisar a cifra monoalfabética resultante.

Um exame prático requer os seguintes passos: • O criptanalista procura por grupos repetidos de letras e conta o número delas entre o começo de cada grupo repetido. Por exemplo, se o texto cifrado for FGXTHJAQWNFGXQ, a distância entre os caracteres FGX é 10. Repete-se a análise para todos os grupos repetidos que aparecem no texto. • Em seguida, fatoram-se cada um destes números (as distâncias encontradas). Se qualquer número se repete na maioria destas fatorações, ele corresponde provavelmente ao tamanho da palavra-chave.368 As letras-chave são repetidas em múltiplos do comprimento da chave, daí, as distâncias entradas no 1o. passo são comumente múltiplos do comprimento da chave. • Uma vez que o comprimento da palavra-chave seja conhecido, verifica-se o seguinte: se a palavra-chave tem N letras, então cada Na. (enésima) letra deve ter sido cifrado usando a mesma letra do texto-chave. Agrupando cada enésima letra, tem-se N “mensagens”, cada uma encriptada por substituição monoafabética, e a partir daí a análise de frequência pode ser usada. • Decifrando uma mensagem, é fácil encontrar a palavra-chave. • Uma vez que se conheça a palavra-chave, e desde que ela não seja mudada, qualquer mensagem futura pode ser lida facilmente.

2. Método da Superposição: este foi o método usado por Kasiski para quebrar a Cifra de Vigenère. Após encontrar o comprimento da chave, ele tomava múltiplas cópias da mensagem, as quais superpunha uma sobre as outras, deslocadas do comprimento da chave. Kasiski observou que cada coluna era construída com letras encriptadas com um alfabeto simples.

Os métodos modernos de ataque são essencialmente idênticos ao descrito, apenas usando a mais a contagem de coincidência (coincidence counting). Ao invés de procurar por grupos repetidos, atualmente se faz apenas colocar duas cópias da mensagem uma sobre a outra, e proceder como se segue:

• O analista desliza a mensagem do fundo uma letra para a esquerda, depois duas letras, etc., de cada vez investigando a mensagem toda e contando o número de vezes que a mesma letra aparece na mensagem de cima e na mensagem do fundo.

• O número de “coincidências” sobe expressivamente quando a mensagem do fundo é deslizada de um múltiplo do comprimento da chave, devido a que as letras adjacentes estão na mesma linguagem, usando o mesmo alfabeto.

• Encontrando o comprimento da chave, o analista procede como já descrito, usando a análise de frequência. 3. Ataque por Substituição: aqui, supõe-se que o atacante conhece o exato

conteúdo de uma parte ou do todo, das mensagens. Como parte do man in-the-middle-attack, ele pode alterar o conteúdo da mensagem sem conhecer a chave K.

Por exemplo, se o atacante conhece a porção em ASCII “R$1000,00”, ele pode

mudá-la para “R$9500,00” (string do mesmo tamanho). Isto é feito fazendo a operação XOR sobre a porção do texto cifrado com a string “R$1000,00” xor “R$9500,00”.

Para ver como isto funciona, considere-se que o texto cifrado enviado é exatamente C(K) xor “R$1000,00”. O que se está criando é:

368 Ainda que grupos repetidos possam aparecer por coincidência, eles ocorrem mais comumente quando as mesmas letras são encriptadas usando as mesmas letras-chave.

C(K) xor "R$1000,00" xor "R$1000,00" xor "R$9500,00" = C(K) xor "R$9500,00" , que é o que o texto cifrado seria se "R$9500,00" fosse o montante correto. Este tipo de ataque pode ser prevenido pela inclusão de um código de autenticação de mensagem para aumentar a probabilidade de que a falsificação seja detectada.

10.3.1.2.2 – O Algoritmo Churn para Cifras Clássicas O Algoritmo Churn,369 considerado um dos mais eficazes para resolver cifras clássicas, pertence à família dos algoritmos estocásticos, que incluem técnicas como hillclimbing,370 simulated annealing371 e genetic algorithms.372

11.3.2 – Ataque às Cifras em Blocos373 A operação de ciframento de blocos trabalha com grupos de bits do mesmo

comprimento (chamados blocos), com uma transformação invariável. O ciframento pode operar, por exemplo, com um bloco de 128 bits de entrada (de texto claro) e com uma saída correspondente de 128 bits de texto cifrado. A transformação é controlada usando uma segunda entrada – a chave secreta.

O processo de desencriptação é similar: nesta operação, toma-se o bloco (do exemplo) de 128 bits de texto cifrado junto com a chave secreta, entregando na saída um bloco de 128 bits de texto claro (desencriptado).

Para encriptar mensagens maiores do que o bloco de 128 bits (do exemplo), um modo de operação é usado.374

11.3.2.1 – Generalidades

Um cifrador em blocos usa dois pares de algoritmos, uma para encriptação, E, e outro para a desencriptação, E-1. Ambos aceitam duas entradas: um bloco de entrada de extensão de n bits, e uma chave de extensão de k bits, que entregam um bloco de saída de n-bits. Para qualquer chave escolhida, a desencriptação é a função inversa da encriptação, de modo que:

,

para qualquer bloco M e chave K, M designa o texto claro, e C o texto cifrado.

Para cada chave K, EK é uma permutação (um mapeamento bijetor) sobre o conjunto dos blocos de entrada. Cada chave seleciona uma permutação de um conjunto

369 Para informações completas, ver: http://web.mac.com/mikejcowan/Ciphers/Churn_Algorithm.html. 370 Ou algoritmo Hill-Climbing. Ele é classificado como Algoritmo de Melhorias Iterativas. Ver: http://en.wikipedia.org/wiki/Hill_climbing. 371 Simulated annealing: arrefecimento simulado. Ver: http://pt.wikipedia.org/wiki/Simulated_annealing. Ver também: http://www.sbmac.org.br/tema/seletas/docs/v9_3/Hae_Gom.pdf. 372 Genetic algorithm: algoritmo genético. Ver: http://en.wikipedia.org/wiki/Genetic_algorithm. 373 Ver: http://en.wikipedia.org/wiki/Block_cipher. 374 Em alguns modos de operação, a cifra de blocos age efetivamente como uma cifra de fluxo.

de 2n! possibilidades. Tamanhos típicos de chaves incluem 40, 56, 64, 80, 128, 192 e 256 bits.375

O tamanho do bloco, n, é tipicamente de 64 ou 128 bits (algumas cifras podem ter tamanhos variáveis de blocos). Com blocos de comprimento fixo (de 64 ou 128 bits), como as mensagens podem ter qualquer comprimento, e como criptografar o mesmo texto claro com a mesma chave sempre produz a mesma saída, vários modos de operação foram inventados, que permitem que o ciframento em blocos forneça confidencialidade para mensagens de tamanho arbitrário.

Os modos mais antigos (por exemplo, ECB, CBC, OFB e CFB) provêm somente confidencialidade, mas não asseguram a integridade da mensagem. Assim, outros modos foram desenvolvidos para assegurar tanto a confidencialidade quanto integridade (ou autenticação e privacidade) da mensagem: são os modos IAPM; CCM; EAX; GCM, OCB, e outros como (por exemplo) o XCBC/XECB,376 que provêm encriptação e autenticação.

Cada modo tem diferentes características com relação à propagação de erros, facilidade de acesso randômico e vulnerabilidade a certos tipos de ataque.

Um desses vários modos de operação é geralmente usado junto com um esquema de padding para permitir que textos claros de comprimentos arbitrários sejam encriptados.

11.3.2.1.1 – Ciframento por Blocos Iterativos (Iterated block ciphers) Muitos blocos de cifras são construídos pela aplicação repetida de uma função

simples. Esta abordagem é conhecida como ciframento por blocos iterativos (iterated block cipher). Cada iteração é denominada rodada (round), e a função de repetição (repeated function) é conhecida como round function; sendo típicos quaisquer valores de rodadas entre 4 e 32.

Usualmente, a round function R toma diferentes round keys Ki como segunda entrada, as quais são derivadas da chave original:

,

em que M0 é o texto claro e Mr o texto cifrado, sendo r o número de rodadas.

Frequentemente é usado o chamado key-whitening377 em aditamento.

375 Normalmente, toma-se o valor de 80 bits como o comprimento mínimo da chave, para prevenir contra ataques de força bruta. 376 Ver: http://www.springerlink.com/content/ghn46c42g1kljduc/. 377 Em criptografia, key whitening é uma técnica usada para aumentar a segurança de um cifrador de blocos iterativos. Ele consiste de etapas que combinam os dados com porções da chave (mais comumente, usando uma simples operação XOR, mas simples operações aritméticas como soma e subtração são também usadas) antes da primeira rodada e depois da última, na encriptação (no começo e no fim, os dados são modificados com material da chave). Ver: http://en.wikipedia.org/wiki/Key_whitening.

11.3.2.1.2 – Cifras em Blocos e outra Primitivas Cifradores de blocos podem ser usados para construir outras primitivas

criptográficas.378 Para que estas outras primitivas sejam criptograficamente seguras, cuidados tem que ser tomados para construí-las da maneira correta. • Cifradores de fluxo (stream ciphers) podem ser construidos usando cifradores

em blocos. Os modos OFB e CTR são modos de blocos que tornam uma cifra em blocos em uma cifra de fluxo.

• Funções hash podem ser construidas usando cifras em blocos. • Assim como os cifras em blocos podem ser usadas para construir funções hash,

estas últimas podem ser usadas para construir cifradores de blocos: por exemplo, SHACAL, BEAR e LION.

• Geradores de números pseudo-randômicos (CSPRNGs) criptograficamente seguros podem ser construidos usando cifradores de blocos.

• Secure pseudorandom permutations of arbitrarily-sized finite sets can be constructed with block ciphers.

• Códigos de Autenticação de Mensagem (MACs) são frequentemente construidos com cifradores de blocos. Por exemplo: CBC-MAC, OMAC e PMAC.

• Encriptação Autenticada é também construida a partir de cifradores de blocos. Isto significa que devem encriptar e autenticar ao mesmo tempo. Ou seja, ambos provêm confidencialidade e autenticação. Exemplos: CCM, EAX, GCM e OCB.

11.3.2.1.3 – Cifradores de Blocos Tweakable (Tweakable block ciphers) Uma versão generalizada dos cifradores de blocos, denominada “tweakable”

block ciphers foi descrita por M. Liskov, R. Rivest e D. Wagner. Ele aceita uma segunda entrada chamada the tweak379 junto ao texto claro usual ou o texto cifrado. Junto com a chave, ele seleciona a permutação computada pelo cifrador. Admite-se que novos modos de operação se tornam possíveis, a partir daí.

11.3.2.2 – Criptoanálise Diferencial

Os pesquisadores Eli Biham e Adi Shamir apresentaram esta técnica em 1990. Entretanto, ela já era conhecida desde a introdução da cifra DES em 1974, tendo sido mantida como material classificado (secreto) por todos este período.

Este método baseia-se em ataque por mensagens escolhidas, tomadas aos pares (procura por pares de textos em claro e pares de textos cifrados), sendo analisada a diferença380 entre os respectivos criptogramas. Especificamente, o ataque examina os

378 Primitivas criptográficas ou primitivos criptográficos são uma combinação de algoritmos e práticas para criar um esquema de criptografia. São primitivas criptográficas: encriptação com chave partilhada; encriptação com chave pública; funções de hashing; assinaturas digitais. A RSA (p. ex.) é uma primitiva criptográfica. 379 Tweak: beliscão. 380 Entende-se por diferença a operação XOR entre dois n-gramas. O significado desta palavra aplica-se, em especial, ao estudo de cifradores de bloco como o DES e similares. O termo diferença surge porque a criptoanálise é realizada sobre pares de criptogramas cifrados com a mesma chave, cujos textos em claro correspondentes possuem um certo valor particular de diferença. O efeito desta diferença é analisado através das n iterações do algoritmo, resultando em parâmetros que permitem inferir possíveis valores da chave. Estes parâmetros são expressos analiticamente através de probabilidades, as quais são usadas como indicadores para tomada de decisão de qual chave foi utilizada.

pares cifrados: pares de textos cifrados cujo textos claros possuem certas particularidades. Os dois textos claros podem ser escolhidos randomicamente, até que se satisfaçam as condições (o criptoanalista não necessita saber seus valores).

Certas diferenças presentes nos pares de textos claros têm alta probabilidade de se repetirem nos pares de textos cifrados. A isto se chama característica. Por exemplo, se a diferença entre dois pares de textos claros em hexadecimal é 0080 8200 6000 0000, então, depois de três interações, provavelmente a diferença continua a mesma (ignorando a permutação inicial do DES). A criptoanálise diferencial usa estas características para aumentar as possibilidades de encontrar a chave .

O método fornece como resultado um conjunto de probabilidades associadas a um conjunto de chaves. A decisão pela chave correta é feita escolhendo-se aquela cuja probabilidade é a de maior valor. Caso haja duas ou mais chaves com probabilidade igual, será necessário analisar mais pares de criptogramas.

O resultado da criptoanálise de um algoritmo iterativo é a determinação da sub-chave do último passo do algoritmo. No caso do DES são 48 bits, o que significa que os 8 bits restantes podem ser determinados por exaustão dos valores restantes.

Este tipo de ataque funciona bem contra o DES ou qualquer outro tipo de algoritmo que utilize uma estrutura de caixas S semelhante a do DES. Porém, como é um ataque estatístico, pode falhar em alguns casos.

Um parâmetro básico da criptoanálise linear é chamado característica. Significa

que associados a qualquer par de cifras, estão: • o valor XOR dos textos em claro correspondentes às cifras; • o XOR entre as cifras; • o XOR entre os valores das entradas de cada passo do algoritmo (em duas

execuções do mesmo); • o XOR dos valores das saídas (em duas execuções distintas do algoritmo) de

cada passo do algoritmo .

Os valores de XOR formam uma característica de n-iterações. A característica possui associada a ela uma probabilidade, que é a probabilidade de um par selecionado ao acaso, cujo resultado da operação XOR é conhecido, ter especificados na característica os valores XOR resultantes dos passos intermediários do algoritmo e das cifras. O símbolo associado a característica é o Ω.

A característica é, então, um parâmetro que descreve como certas diferenças

entre pares de mensagens em claro podem provocar a ocorrência de certas diferenças nos pares resultantes do processo de cifração, com certa probabilidade p.

Em alguns casos, características associadas a passos intermediários distintos de um algoritmo, podem ser associadas num único parâmetro com uma única probabilidade, que será igual (supondo passos intermediários independentes) ao produto das probabilidades intermediárias. Características com essa propriedade são denominadas características iterativas.

Par correto é um par de texto claro que satisfaz a característica; par errado é o par que não satisfaz a característica. Um par correto fornece indicadores para a determinação da chave correta para o iteração analisada; um par errado apenas indica uma chave aleatória.

No caso do DES, a determinação dos 48 bits da subchave do último passo do algoritmo acarreta um problema de tempo computacional gigantesco. Para superar esta dificuldade, ao invés de utilizar a característica associada aos 16 passos do DES, utiliza-

se a característica referente a apenas 13 iterações, completando o ataque com alguns recursos matemáticos. Assim que são obtidos os "candidatos" à chave correta, eles são testados de imediato, sem a necessidade de acumular valores de contadores.381

A tabela a seguir mostra os melhores resultados de ataques contra o DES com

números de iterações variáveis (a primeira e a segunda coluna são óbvias; a terceira mostra o número de mensagens conhecidas necessárias para realizar um ataque. A quarta coluna mostra o número de mensagens realmente examinadas. A última coluna representa a complexidade da análise após as mensagens serem descobertas).

Resultados de ataque ao DES

O melhor ataque contra o DES de 16 iterações requer 247 mensagens escolhidas

(texto claro). É possível converter esse tipo de ataque em outro baseado em mensagem conhecida, porém o mesmo irá requerer 255 mensagens conhecidas. O número de operações necessárias é 237. 382

O ataque baseado em criptoanálise diferencial age contra algoritmos que

possuam S-Box constantes (como o DES). A análise depende fortemente da estrutura da S-Box. O ataque possui a mesma complexidade, seja qual for o modo de operação que o algoritmo (DES) esteja: ECB, CBC, CFB ou OFB.

Considera-se que este tipo de ataque, sob circunstâncias normais, não seja

prático, porque ele requer que o atacante tenha acesso ao dispositivo DES para encriptar textos claros.383

381 A determinação da chave correta resulta da análise continuada de pares de texto em claro e as correspondentes características. Com a repetição dos testes a chave correta aparecerá mais freqüentemente que as outras, possibilitando a sua determinação. 382 Se o DES utilizar 17 ou 18 iterações, o ataque terá a mesma magnitude que a de um ataque de força bruta. Com 19 iterações ou mais, o ataque por criptoanálise diferencial se torna inviável, porque a ordem de grandeza do número de operações necessárias para descobrir a chave é maior que o número de mensagens possíveis (264). Em todo caso, o Triple-DES é considerado suficientemente seguro contra qualquer tipo de ataque. 383 Outro tipo de ataque, conhecido como criptoanálise linear, não tem esta limitação, porque não requer textos claros escolhidos.

11.3.2.3 – Criptoanálise Diferencial da Rede de Feistel

Nas redes de Feistel onde f(k,m) aplica uma substituição em k m, as propriedades estatísticas de f podem ser exploradas em ataques de texto claro conhecido, pela análise de diferenças na entrada e saída de de f.

1. Calcula-se a probabilidade de ocorrências de padrões na saída f(k,m) f(k,m’) para dada diferença fixa entre valores de entrada m e m’. Constrói-se uma tabela para f dessas probabilidades, que independem de k. (tabela de características de f).

2. De posse de uma cifra com chave k desconhecida, encripta-se vários pares de mensagens m, m’ e mede-se a frequencia de diferenças nos pares de saída na rodada i. Compara-se com as freqüências medidas com as características de f, para inferir prováveis bits de Ki m e Ki m’.

3. Combinam-se as probabilidades para valores de bits em subchaves Ki das várias rodadas, para se estimar os bits mais prováveis da chave k.

11.3.2.4 – Criptoanálise Linear Esta técnica de criptoanálise foi apresentada em 1993 por Mitsuru Matsui e

formalizada por Eli Biham em 1994. Ela é, basicamente, um ataque de mensagem conhecida, e o seu propósito é obter uma expressão linear aproximada de um dado algoritmo criptográfico.

A criptoanálise linear estuda as relações estatísticas entre os bits de uma mensagem, os bits das cifras correspondentes e da chave utilizada na criptografia. Estas relações são usadas para predizer valores dos bits da chave quando muitas mensagens e os respectivos criptogramas são conhecidos.

Para isso, elaborou-se um modelo estatístico linear relacionando entradas e saídas das S-Box do DES,384 que em seguida é estendido para todo o algoritmo, obtendo uma expressão linear não dependente de valores intermediários. Como todas as operações no DES são lineares, exceto as efetuadas com as S-Box, para se obter uma aproximação linear do algoritmo, basta obter uma tal aproximação para as S-Box.

As relações necessárias para se obter aproximação linear para que um ataque com criptoanálise linear seja possível são as seguintes:

384 Por ocasião da primeira publicação, seus autores focaram o estudo na criptoanalise do DES.

1. escolhe-se um subconjunto dos bits da entrada da S-Box analisada, dentre 26 valores possíveis e calcula-se a paridade (operação XOR) dos mesmos;

2. escolhe-se um subconjunto dos bits da saída da S-Box analisada, dentre 24 valores possíveis e calcula-se a paridade paridade (operação XOR) dos mesmos;

3. a análise acima é repetida até que todos os subconjuntos de entrada e saída sejam verificados;

4. os valores acima são tabelados de tal forma que as linhas da tabela contenham os subconjuntos possíveis de entrada, enquanto as colunas contêm os subconjuntos possíveis de saída;

5. as entradas desta tabela representaram o número de vezes que, para um dado subconjunto de bits de entrada, a paridade do mesmo é igual à paridade do subconjunto de bits de saída correspondente;

6. o ataque por criptoanálise linear será tão mais eficaz quanto o valor da entrada se afastar do valor 32 (metade do número de entradas de uma S-Box).385

O sucesso do ataque conclui-se mais provável quanto mais afastado for do valor zero, ou seja, quanto maior o valor absoluto de uma entrada da tabela, tanto mais provável o sucesso. Como a cada entrada na tabela está associada uma probabilidade, pode-se concluir que, se de uma análise for verificado que um dado conjunto analisado tem probabilidade 1/2, o ataque não funcionará.

O elemento do qual se deseja obter o valor mostra a relação da análise feita nas S-Box com a chave utilizada. Esta relação é obtida através do princípio da criptoanálise linear.

O propósito da criptoanálise linear é descobrir a seguinte expressão linear "efetiva" para um dado algoritmo:

P [i1, i2,..., ia] ⊕ C[j1, j2,..., jb] = K[k1, k2, ..., kc], (1) , onde i1, i2,..., ia, j1, j2,..., jb, k1, k2, ..., kc denotam posição fixas de bits, e a equação (1) mantém-se válida com probabilidade p diferente de 1/2 para uma mensagem em claro P escolhida ao acaso e correspondente à cifra C. A magnitude de | p – 1/2 | representa o quão correta pode ser a expressão (1).

Isso significa que, se forem calculados o XOR de um conjunto de bits de uma mensagem, o XOR de um conjunto de bits do criptograma, e em seguida o XOR do resultado, será obtido um bit que é o resultado do XOR de um conjunto de bits da chave.

Para se inferir os bits da chave são utilizadas mensagens conhecidas e os respectivos criptogramas em uma amostragem suficientemente grande. Quanto mais dados são analisados, mais confiáveis serão as suposições relativas à chave.

O ataque básico é usar a melhor aproximação linear para o DES com 16 iterações. Serão necessários 247 blocos de texto conhecidos para inferir-se o valor de um bit. Um segundo bit também é obtido intercambiando cifra e texto em claro, e executando o algoritmo em ordem inversa (ou seja, decifrando).

Este não é um resultado útil, porém há refinamentos. Um deles é utilizar 14 dos 16 passos do DES, iniciando no passo 2 e indo até o passo 15. Considerando os passos 2 e 15 e utilizando algoritmos e expressões matemáticas, é possível inferir 14 bits da chave; os restantes 42 bits são determinados por exaustão das possibilidades.

385 Matsui e Biham adotam a convenção de subtrair 32 unidades de cada entrada da tabela, o que faz com que a uma entrada de valor zero corresponda a entrada 32.

Para a determinação dos 14 bits da chave é necessária a aplicação de uma série de lemas e expressões matemáticas que relacionam bits da chave procurada, bits da cifra, bits do texto em claro e finalmente, bits do resultado da última função de iteração.

São utilizados dois algoritmos para inferir os valores corretos dos bits utilizados nas expressões. A seguir, é mostrada a expressão na qual é baseada a inferência dos valores dos 14 bits da chave do DES de 16 iterações:

PH[7,18,24] ⊕ PL[12,16] ⊕ CH[15] ⊕ CL[7,18,24,29] ⊕ F16(CL,K16)[15] =

K1[19,23] ⊕ K3[22] ⊕ K4[44] ⊕ K5[22] ⊕ K7[22] ⊕ K8[44] ⊕ K9[22] ⊕ K11[22] ⊕

K12[44] ⊕ K13[22] ⊕ K15[22]. (2) , em que:

• os índices H e L significam High e Left, respectivamente; • os elementos P, C, Fn, K significam texto em claro; cifra; resultado da função de

iteração do passo n; chave; • os números dentro das chaves significam a posiçào dos bits no referido bloco.

De acordo com Biham, ainda que o uso desta técnica seja similar ao feito na criptoanálise diferencial, ela difere nas regras de concatenação de n características.

A criptoanálise linear é fortemente dependente da estrutura das S-Box. No caso

do DES, o algoritmo do mesmo não é otimizado contra este tipo de ataque. Este tipo de ataque (conforme Matsui) visa especificamente o DES, no entanto, a técnica pode ser usada contra cifradores de blocos similares.

11.3.2.5 – Ataque às Redes de Computadores 1. Espionagem Tempest: esta é uma forma sofisticada de espionagem, acessível

apenas a quem tenha muitos recursos e possa usá-los. O invasor, neste caso, utiliza equipamentos de monitoração instalados em viaturas estacionadas próxima ao local em que fica o computador visado. Neste caso, os sinais eletromagnéticos emitidos pelo teclado são captados, e assim todo o texto digitado, inclusive passwords, senhas, etc.386

2. Análise de tráfego: ainda que não seja possível ler o conteúdo das mensagens criptografadas, muita informação útil pode ser deduzida apenas se observando o fluxo das mensagens: de onde elas chegam, para onde vão, o tamanho delas, e até mesmo a hora em que foram enviadas. Este problema pode ser evitado usando protocolos de comunicação especialmente desenvolvidos para reduzir à exposição dessas análises, e ainda alguma providência criptográfica.

3. Exposição em sistemas multi-usuário: nesses sistemas, os riscos de que se descubram passwords, chaves secretas ou mensagens são bem grandes.

4. Ataque por Interceptação: conhecido como Man-in-the-middle attack (MITM); ou bucket-brigade attack; ou ainda: Janus attack. Este ataque intercepta a comunicação entre dois sistemas. Por exemplo, em uma transação http o objetivo é a conexão TCP entre usuário e Servidor. Usando várias técnicas, o atacante parte a conexão TCP original em outras duas conexões, na qual ele fique como um intermediário.

386 Este tipo de ataque pode ser evitado blindando-se computadores e cabos de rede, de modo que esses sinais não sejam emitidos. Em redes Wi-Fi, o uso de senhas é fortemente recomendado.

Ataque man-in-the-middle

Uma vez que a conexão TCP é interceptada, o atacante age como um Servidor

proxy,387 e fica assim apto a ler, inserir ou modificar os dados na comunicação interceptada.

Este ataque é muito efetivo, devido à natureza do protocolo http e a transferência de dados em que todos os ASCII se baseiam. Por isso, é possível ver e intervir dentro do protocolo e dentro dos dados.

O MITM não é apenas uma técnica de ataque, porque pode ser utilizado durante o desenvolvimento de uma aplicação WEB, inclusive para verificar a sua vulnerabilidade. Existem vários dispositivos MITM: PacketCreator; Ettercap; Dsniff; Cain e Abel. Eles são particularmente eficientes em redes LAN.388

5. Bit-flipping attack: é um ataque contra um cifrador (cryptographic cipher) no qual o atacante pode mudar o texto cifrado de modo a resultar em uma mudança previsível no texto claro, ainda que ele nada possa saber desse texto, em si mesmo.

Este tipo de ataque não visa o cifrador em si, como o faria a criptanálise, mas visa uma particular mensagem ou série de mensagens. No extremo, poderia se tornar um ataque do tipo Negação de Serviço (Denial of service attack) contra todas as mensagens de um canal em particular que esteja usando este cifrador.

Ele é particularmente perigoso quando o atacante conhece o formato da mensagem, porque ele pode alterá-la para uma mensagem similar, na qual alguma informação importante é alterada.

Cifras de fluxo do tipo RC4 podem ser vulneráveis a este tipo de ataque, assim como alguns modos de operação das cifras em bloco.

Para evitar este tipo de ataque podem ser usados quaisquer mecanismos de autenticação ou assinatura digital capazes de detectar alterações nos bits em trânsito.

387 O serviço de proxy consiste em manter, em uma área de acesso rápido, informações já acessadas por outro usuário, evitando assim a retransmissão destes dados. Ele pode atuar como um servidor que armazena dados em forma de cache em redes de computadores. Se o cliente requisitar um documento na Internet, o proxy procura por ele em seu cache. Se encontrado, o documento é retornado imediatamente. Caso contrário, o proxy busca o documento no servidor remoto, entrega-o ao cliente e salva uma cópia no seu cache. Isso permite uma diminuição na latência, já que é o servidor proxy, e não o servidor original, que é acessado. Isso proporciona também uma redução do uso de banda. O proxy costuma ser instalado em máquinas potentes e grande capacidade de memória. 388 Os dispositivos proxy permitem interação com o protocolo http, mas não podem interceptar a conexão TCP entre o cliente e o servidor. Para esta interceptação, é necessário configurar o browser ou usar outros dispositivos de ataque (OWASP WebScarab; Paros Proxy; Burp Proxy; ProxyFuzz; Odysseus Proxy) [LAN – Local Area Network: Área Local.].

11.3.2.6 – Hash e Digestos 11.3.2.6.1 – Código de Autenticação de Mensagem (MAC) MACs são hashes dependentes de chave no cálculo, que podem ser gerados por

uma cifra de bloco realimentada.389 Usam-se MACs quando é necessária a verificação da integridade, sem sigilo da mensagem.

É possível fraudar esquemas com funções de hash que geram MACs por concatenação de chave à mensagem por alguém que, ainda que não conheça a chave, conhece h. Nos MACs gerados por cifras a chave pode ser usada para desencriptar o hash de trás para frente, buscando construir uma colisão com a mensagem original.

O ataque às redes390 se faz quando o atacante busca estas colisões. Para evitar

esta possibilidade, o digesto deve ser longo o bastante para prevenir buscas exaustivas que as encontrem.

11.3.2.6.2 – Vulnerabilidade da Assinatura Digital Um sistema de assinatura digital pode ser quebrado, seja atacando o problema

matemático no qual se baseia o método de assinatura, seja atacando a função hash usada para criar os digestos.

Com o uso do hash, surgem duas vulnerabilidades: a colisão e o loop. A colisão ocorre quando duas senhas possuem o mesmo hash. O loop surge quando dois hashes podem ser mapeados para a mesma senha.

De todo modo, o ataque à função hash é muito difícil, porque requer grandes quantidades de memória e um tipo de engenharia social capaz de convencer a vítima a emitir um tipo especial de mensagem

Na escolha do sistema de autenticação, é uma boa idéia escolher tanto o método de assinatura quanto uma função hash que requeira o mesmo esforço para serem quebrados; isto porque o ataque costuma ser dirigido à parte mais fraca do sistema.

São necessárias 264 operações (nas funções hash MD) para que o atacante possa encontrar duas mensagens cujo hash leve ao mesmo digesto. Este é o mesmo esforço necessário para se quebrar a RSA de 512 bits.

Se um digesto produz strings de 100 bits, uma busca exaustiva irá tomar 2100 tentativas em media, para encontrar um determinado valor, e cerca de 250 tentativas em média para encontrar duas entradas (inputs) que produzem o mesmo digesto. Se há uma grande necessidade de segurança, um longo digesto pode ser produzido combinando módulos maiores com uma função hash adequada. Por exemplo, a SHS, com digestos de 160 bits, ou então uma versão modificada do MD4 que produz digestos de 256 bits.

11.3.2.7 – Métodos de Ataque às Chaves Os ataques às chaves são na verdade ataques ao texto cifrado, com o objetivo de

recuperar a chave de cifragem. Há vários tipos de ataque; todos eles supõem que o

389 Código de Autenticação de Mensagem (Message Authentication Code – MAC). Dada uma função hash h qualquer, ela pode ser tornada dependente de chave. Entre os esquemas que concatenam a mensagem m à chave k, os mais seguros contra fraude são h(k1,h(k2,m)) ou h(k,_,m,k) ou concatenação de bytes da chave a cada bloco de m. 390 Alguns ataques às redes visam especificamente atingir vulnerabilidades dos sistemas operacionais do Servidor (este ataque normalmente é feito com um programa chamado exploit). Ver o item 12.3.1.1.

criptoanalista possua conhecimento dos métodos de cifragem e decifragem utilizados, mas não conheça as chaves.

1. Ataque do texto cifrado (cyphertext-only): o criptoanalista tem à sua disposição uma grande quantidade de mensagens cifradas, mas desconhece as originais e as chaves utilizadas. Ele deve então recuperar as mensagens normais, ou seja, deduzir as chaves utilizadas.391

2. Ataque do texto conhecido (known plaintext attack): o criptoanalista tem à sua disposição uma grande quantidade de mensagens cifradas e também as mensagens originais equivalentes. Ele deve deduzir as chaves usadas (ou um método para recuperar mensagens cifradas com a mesma chave).

3. Ataque adaptativo do texto claro escolhido (adaptative chosen plaintext

attack): se no método anterior o criptoanalista poderia ser capaz de fornecer uma grande quantidade de mensagens de uma só vez, agora, ele pode fornecer um pequeno conjunto, analisar os resultados, fornecer outro conjunto, e assim por diante. Sua tarefa é deduzir as chaves utilizadas. Alguns métodos de cifragem, como o RSA, são muito vulneráveis a este ataque.

4. Ataque adaptativo do texto cifrado escolhido (adaptive chosen ciphertext

attack): é um método similar ao anterior; só que neste caso, o atacante processa pequenos conjuntos de textos cifrados.

5. Ataque do texto cifrado escolhido (chosen-cyphertext attack): o criptoanalista não só tem uma grande quantidade de mensagens e seus equivalentes cifrados, mas pode produzir uma mensagem cifrada específica para ser decifrada e obter o resultado produzido. É utilizado quando se tem uma caixa-preta que faz decifragem automática. Sua tarefa é deduzir as chaves utilizadas.

6. Ataque da chave escolhida (chosen-key attack): o criptoanalista pode testar o sistema com diversas chaves diferentes, ou pode convencer diversos usuários legítimos do sistema a utilizarem determinadas chaves. Neste último caso, a finalidade imediata seria decifrar as mensagens cifradas com essas chaves.392

7. Ataque por chave relacionada (related-key attack): é igual ao método 3, exceto pelo fato de que o atacante pode obter textos cifrados com duas chaves diferentes, e observar a operação da cifra submetida às diferentes chaves, cujos valores iniciais são desconhecidos.393

Ataque pela força bruta: ao longo dos anos, vem se constatando que nenhum

sistema é realmente seguro, quando se dispõe de recursos e determinação de realizar a quebra do sistema. Ataques de força bruta tem quebrado vários tipos de cifras, como a DES (simples), a criptografia de 40 bits, o sistema de proteção de DVDs (DVD Content Scrambling System) e alguns códigos de proteção de TV por satélite.

391 Este é o contexto mais comum. Devido à imensa capacidade de processamento dos modernos super-computadores, a avaliação e/ou comparação de uma grande quantidade de textos cifrados acaba por descobrir padrões ocultos, padrões estes que surgem devido ao método de ciframento, ou à chave utilizada. 392 Se a cifragem dispõe de um número muito grande de chaves, este processo só pode ser realizado em super-computadores, mesmo assim tomando muito tempo de processamento. 393 Elas são desconhecidas, mas o atacante conhece algumas relações matemáticas entre elas, por exemplo, que os últimos 80 bits das chaves são sempre os mesmos – ainda que não saiba quais são os bits. Este tipo de ataque só é plausível devido ao fato de que nem todos os protocolos criptográficos implementados são avaliados por criptólogos.

Como já se sabe, a segurança de um sistema baseia-se na segurança da chave. Isto foi explicitado por Auguste Kerckhoffs em 1880, e por Claude Shannon em 1940. É conhecido como Principio de Kerckhoffs ou como Máxima de Shannon.

Também já se sabe que, para dificultar o uso da força bruta, uma chave deveria ser tão grande quanto a mensagem. Como Shannon demonstrou, o segredo perfeito poderia ser conseguido se o comprimento da chave fosse tão grande quanto a mensagem; mas ele também mostrou a dificuldade prática do algoritmo chamado One-time Pad, em razão da dificuldade de conseguir chaves realmente aleatórias.

Assim, ao invé de procurar o segredo perfeito, a moderna criptografia busca a segurança computacional (computational security), criando condições que tornem impraticáveis os ataques às chaves.

Dependendo do algoritmo utilizado, o tamanho das chaves varia para o mesmo nível de segurança, em razão dos diferentes níveis de complexidade criptográfica. Por exemplo, a segurança oferecida por uma chave assimétrica RSA de 1024 bits é aproximadamente a mesma que a oferecida por uma chave simétrica de 80 bits.

11.3.2.8 – Ataque às Chaves Simétricas O mais famoso algoritmo de chave simétrica na criptografia clássica é o OTP. O

principio é simples. Uma operação XOR entre a chave e o texto que se deseja encriptar, sendo que a chave deve ser do mesmo tamanho que o texto, e aleatória.

11.3.2.8.1 – A Criptoanálise das OTPs

Como já se viu, a dificuldade em conseguir gerar chaves aleatórias impediu que

a one-time pad fosse adotada como uma ferramenta definitiva na segurança da informação.

Em alguns casos, usar “one-time” é absolutamente necessário. Se a one-time pad for usada apenas duas vezes, operações matemáticas simples podem reduzi-la a uma cifra da função-chave. Se os textos claros estiverem em uma língua natural, ainda que secretos, cada um tem uma chance muito elevada de ser recuperado pela criptanálise heurística, talvez com algumas ambigüidades.

Os casos em que as OTP foram quebradas, mostrados a seguir, mostram a sua

vulnerabilidade quando as regras de segurança não são seguidas: • Em 1944-1945 a agência da segurança do exército americano podia ler um

sistema OTP usado pelo escritório estrangeiro alemão para seu tráfego de baixo-nível (chamado GEE). Isto ocorreu porque as pads não eram completamente aleatórias: a máquina usada para gerá-las produzia saídas previsíveis.

• Em 1945 os EUA descobriram que as mensagens Camberra-Moscou eram cifradas primeiro, usando um codebook, e em seguida uma one-time pad. Como esta era a mesma usada por Moscou para mensagens entre Washington e Moscou, e como algumas mensagens incluíam documentos britânicos conhecidos pelo governo, isto permitiu que algumas das mensagens cifradas fossem quebradas.

• Durante a Segunda Guerra Mundial as Agências de Inteligência dos Estados Unidos e da Inglaterra podiam quebrar algumas mensagens usando one-time pad soviéticas no tráfego para Moscou, em conseqüência dos erros feitos na geração e na distribuição do material da chave.

11.3.2.8.2 – Algoritmos Simétricos e suas Vulnerabilidades A seguir, é dada uma relação parcial de vários algoritmos de chave simétrica que

se mostraram vulneráveis a ataques pela força bruta, DPA e outros: Madryga: este algoritmo de cifra de blocos, proposto em 1984, mas que não

chegou a ser usado em escala, mostrou-se susceptível a ataques somente-cifras (ciphertext-only attack) em 1998.

FEAL-4: proposto para substituir o DES, mas que não foi adotado, mostrou-se completamente vulnerável quando foi atacado em massa por representantes da comunidade acadêmica. A5/1, A5/2, CMEA, DECT: são sistemas usados em sistemas telefônicos móveis (celulares) e redes sem-fio, que podem ser quebrados em horas, minutos ou em tempo-real, usando equipamento de computação disponível no comércio.

WEP (Wired Equivalent Privacy): em 2001, o protocolo WEP, usado em sistemas de redes sem-fio, mostrou-se vulnerável devido a uma fraqueza do RC4 e a algumas falhas de projeto. Assim, ele podia sofrer ataques do tipo chaves-relacionadas (related-key attacks).

NewDES: algoritmo iterativo com 17 rodadas, usa blocos de 64 bits e chaves de 120 bits, cujos bytes são as sub-chaves K0 ... K14 usadas intercaladamente. É vulnerável a ataques de chaves relacionadas, com 233 chaves e mensagens escolhidas em 233 passos.

Khufu: usa cifras de blocos de 64 bits. Iterativo com chave de 512 bits, número de rodadas configurável e S-Boxes 8x32 dinâmicas, geradas a partir da chave. Ainda que resistente à criptanálise linear e diferencial, é vulnerável a ataques de força bruta.

Khafre: é uma rede de Feistel iterativa com número de rodadas configurável. Usa blocos de 64 bits e chaves de tamanho variável, entre 64 e 128 bits.

MMB: algoritmo baseado no IDEA, com blocos e chaves de 128 bits, e multiplicação módulo 232-1. É vulnerável à criptanálise linear e ao ataque de chave escolhida de Biham.

GOST: padrão desenvolvido pela ex-URSS para cifra de blocos de 64 bits. É uma rede de Feistel iterativa com 32 rodadas, com chave de 256 bits.

Blowfish: algoritmo de domínio público. Usa cifra de bloco de 64 bits e chave de tamanho variável (até 448 bits). É uma rede Feistel iterativa de 16 rodadas com operação XOR. Não é recomendado para encriptação de textos longos; quando se encripta mais do que 232 blocos, há um “vazamento” de informação sobre a chave. É considerado seguro, com 16 rodadas.

RC5: algoritmo desenvolvido por Ron Rivest, com rodadas, chaves e blocos configuráveis. A rede de voluntários Distributed.Net quebrou uma chave RC5 de 64 bits em alguns anos de trabalho, usando centenas de computadores domésticos.

Skipjack: é um novo algoritmo, anunciado pelo governo dos EUA. Ele opera com blocos de 64 bits e chaves de 80 bits. Outros detalhes deste projeto foram classificados (tornados secretos), impossibilitando uma análise pelos especialistas não governamentais.394

FEAL (Fast Encryption ALgorithm – ou Fast Data Encipherment Algorithm): foi apresentado por Akihiro Shimizu e Shoji Miyaguchi como alternativa ao DES. Foi projetado para ser mais rápido, em software. Desde que surgiu sofreu ataques com 394 Rivest, como já se viu, propôs as cifras RC2 e RC4, que podem ser tornadas tão seguras quanto se queira, pelo fato de usarem chaves de tamanhos variáveis.

sucesso, e mesmo novas versões posteriores que foram propostas não conseguiram aumentar o seu grau de segurança.395

DES: alguns especialistas, principalmente dentro do governo (norte-americano)

afirmavam que a cifra DES era “segura”. Outros, fora do governo, acusavam a NSA de ter, propositalmente, enfraquecido o DES, para evitar que não pudessem quebras as versões civis e comerciais.396 A segurança do algoritmo foi questionada por muitos especialistas, e sempre houve muita especulação sobre o comprimento da chave, o número de iterações e a estrutura das caixas S (S-boxes).397 Alguns chegaram a suspeitar que a NSA (National Security Agency) tivesse colocado um alçapão (trap door) no algoritmo, para que a agência tivesse um meio fácil de decifrar as mensagens.

O assunto foi investigado em 1978 pelo Comitê de Inteligência do Senado dos EUA, e o que vazou informava, entre outras coisas; que a IBM fora convencida de que uma chave mais curta era adequada; que a NSA havia dado uma assistência indireta no desenvolvimento das estruturas das caixas S; e que havia certificado que a versão final do algoritmo DES não apresentava fraqueza estatística ou matemática.

No final de 1976 a NSA revelou vários critérios aplicados às caixas S:398 • Nenhuma caixa S é uma função afim linear da sua entrada (input). Ou seja,

não existe um sistema de equações lineares que possa expressar os quatro bits de saída em termos dos seis bits de entrada.

• A alteração de um bit na entrada de uma caixa S resulta na alteração de pelo menos dois bits na saída. Isto é, as caixas S foram projetadas para maximizar o volume de difusão.

• As caixas S foram escolhidas para minimizar a diferença entre o número de “1” e “0” quando qualquer um dos bit de entrada for mantido constante. Isto é, se se mantiver um determinado bit constante e alterar os outros cinco bits, a saída não deveria ter um número desproporcionalmente grande de “1” ou “0”.

O DES foi rapidamente adotado por várias instituições privadas. A instituição

bancária, a maior usuária de encriptação depois do governo, adotou o DES como padrão.399 395 Os projetistas introduziram um cifrador de rodada variável (a variable-round cipher), FEAL-N (Miyaguchi, 1990), em que N era escolhido pelo usuário, junto com o FEAL-NX com uma chave maior, de 128 bits. A criptoanálise diferencial de Biham e Shamir mostrou (1991) que tanto a FEAL-N quanto a FEAL-NX podiam ser quebradas mais rapidamente do que pela procura exaustiva para N ≤ 31. Ataques posteriores, precursores do criptanálise linear, puderam quebrar versões sob a assunção de textos claros conhecidos (known plaintexts): FEAL-4 com cinco, FEAL-6 com 100 e FEAL-8 com 215 known plaintexts. Ver: http://en.wikipedia.org/wiki/FEAL. 396 A política do governo do EUA fazia restrições à exportação de cifras “fortes”. Por muitos anos, a chave de softwares de exportação foi limitada a 40 bits. Como o tempo mostrou sua fragilidade, foi liberado o DES com chaves de 56 bits, mas mantendo-se as restrições de exportação para chaves maiores que 64 bits sem autorização do U.S. Bureau of Industry and Security. Em 1999 foi autorizada a exportação para alguns países. Ainda em 1998 foi assinada pelo presidente Clinton a chamada Digital Millenium Copyright Act – DMCA, que criminaliza a produção, disseminação e uso de técnicas criptográficas que afetem de qualquer modo os direitos de propriedade digital (digital rights management – DRM). 397 Quando foi pressionada a explicar a estrutura das caixas S, a NSA alegou que estes elementos do algoritmo eram "classificados" e que por essa razão não seriam tornados públicos. 398 O que não se sabia na época é que os critérios usados pela NSA foram utilizados para tornar o algoritmo resistente a uma criptoanálise diferencial, método que só seria publicado depois de mais de 10 anos da adoção do DES. 399 Os padrões da indústria bancária são estabelecidos pelo American National Standards Institute (ANSI). A norma ANSI X3.92, adotada em 1980, especificava o uso do algoritmo DES.

Quando foi adotado, acreditava-se que o tamanho de 56 bits para a chave era suficiente para garantir a segurança. Entretanto, havia especulações de que a NSA havia deliberadamente reduzido o tamanho da chave de um valor original de 112 bits usados na cifra Lucifer da IBM, ou mesmo de 64 bits, a partir de uma versão anterior do DES. O objetivo era limitar a força da encriptação para usuários fora dos EUA. O governo dos EUA mantinha uma política de que os algoritmos oferecidos à atividade privada e pessoal não poderiam ser algoritmos fortes. 400

Em 1979 Diffie e Hellman declararam que um computador paralelo

especialmente construído para quebrar o DES poderia recuperar a chave em um dia, a um custo em torno de US$20 milhões. Em 1984 Diffie revisou a estimativa: a chave poderia ser obtida em dois dias, a um custo de US$50 milhões. Ambos declararam posteriormente que isto estaria fora do alcance de todos, exceto organizações como a NSA; mas afirmaram que por volta de 1990 o DES seria totalmente inseguro.401

Gradativamente, o passar dos anos mostrou o sucesso em vários ataques contra variações do DES com número reduzido de rodadas. O DES com três ou quatro rodadas foi quebrado com facilidade em 1982. Em 1985 o DES com seis rodadas também caiu. A explicação para isso veio quando, em 1990, Biham e Shamir tornaram público um novo método de criptoanálise, chamado criptoanálise diferencial. Esta é a melhor técnica para quebra do DES, usando em média 243 blocos de texto claro escolhidos.

De acordo com este novo método, o DES com menos de 16 rodadas podia ser quebrado com um ataque de texto claro conhecido, com mais eficiência do que com um ataque de força bruta.

400 Assim, durante os cerca de 20 anos de reinado do DES, forçou a indústria a limitar sua criptografia ao DES (e até a formas mais fracas), ao mesmo tempo que ocultava a sua fragilidade. 401 Na década de 1990, dois hackers americanos dominavam as manchetes dos jornais: Kevin David Mitnick e Kevin Poulsen. Este último, quando era perseguido pelo FBI, para proteger seus documentos encriptou-os com o DES, alguns deles três até cinco vezes seguidas. Desse modo ele acreditava que se o FBI se apoderasse dos papéis, não conseguiria lê-los. Em 1991, utilizando um supercomputador Cray do Departamento de Energia (um dos mais poderosos computadores da época), a NSA conseguiu quebrar a chave em alguns meses, realizando um ataque de força bruta.

No entanto, a segurança do sistema DES pode ser aumentada com algumas providências: mudar freqüentemente as chaves pode prevenir contra ataques que requerem uma análise sustentada de dados (sustained data analysis); o uso de meios seguros de troca de chaves, através de algoritmos como o RSA ou outros do mesmo tipo. Outra técnica para aumentar a segurança é fazer a encriptação através de vários modos oficialmente definidos, alguns mais seguros do que outros. Por exemplo:

• O modo ECB (electronic codebook) encripta cada bloco de 64 bits do texto claro, um após o outro, com a mesma chave de 56 bits.

• O modo CBC (cipher block chaining), em que cada bloco de 64 bits sofre uma operação XOR como bloco cifrado anterior, antes de ser encriptado com a chave DES. Portanto, a encriptação de cada bloco depende do bloco prévio, e o mesmo bloco de 64 bits de texto claro pode levar a diferentes cifras, dependendo do contexto da mensagem total. Este modo ajuda a proteger contra alguns tipos de ataques, mas não contra a força bruta ou a criptoanálise diferencial.

• O modo CFB (cipher feedback), que permite usar o DES com blocos menores do que 64 bits.

Na prática, o modo CBC é o mais largamente usado, e é especificado em vários

padrões. Segurança adicional pode ser obtida com tripla encriptação com o CBC, mas como o DES simples no modo CBC é normalmente considerado bastante seguro, esta opção não é utilizada.

* * *

Por volta dos anos 1990 tornou-se cada vez mais evidente que o DES com chave de 56 bits poderia ser quebrado em um ambiente acadêmico ou institucional. Para provar em definitivo a falta de segurança do DES, a Electronic Frontier Foundation – EFF construiu o primeiro hardware para quebrar mensagens codificadas por ele. No dia 17 de Julho de 1998 o EFF DES Cracker, construído com menos de 250.000 dólares, venceu o concurso lançado pelo RSA Laboratory, o DES Challenge II, e a equipe recebeu o prêmio de US$ 10.000. A máquina precisou de menos de três dias para completar o desafio, ultrapassando a marca de 39 dias anteriormente conseguida através de um processamento maciço realizado por dezenas de milhares de computadores em rede.

Posteriomente, em 19 de Janeiro de 1999, a Distributed Net, uma coalisão mundial de colaboradores, trabalhando com um EFF DES Cracker e uma rede distribuída de cerca de 100.000 PCs na Internet, quebrou novamente o recorde. Para tentar vencer o concurso DES Challenge III do RSA Laboratory, o sistema testava 245 bilhões de chaves por segundo. A chave correta foi encontrada depois de apenas 22 horas e 15 minutos, e a solução é mostrada abaixo.

Deep Crack

Identifier: DES-Challenge-III

Cipher: DES

Start: January 18, 1999 9:00 AM PST

Prize: $10,000

IV: da 4b be f1 6b 6e 98 3d

Plaintext: See you in Rome (second AES Conference, March 22-23, 1999)

Ciphertext:

bd 0d de 91 99 60 b8 8a 47 9c b1 5c 23 7b 81 18 99 05

45 bc de 82 01 ab 53 4d 6f 1c b4 30 63 3c ee cd 96 2e

07 c6 e6 95 99 9c 96 46 5a 95 70 02 02 70 98 bd 41 c2

88 a9 f0 2f 8b e5 48 20 d2 a8 a0 6b bf 93 de 89 f6 e2

52 fd 8a 25 eb d0 7d 96 83 ee a4 2d c8 8d 1b 71

A Electronic Frontier Foundation – EFF, mostrou nos capítulos 5, 6 e 7 do livro Cracking DES - Secrets of Encryption Research, Wiretap Politics & Chip Design - How

federal agencies subvert privacy, todos os aspectos do projeto de quebra da cifra DES.402

Como resultado deste ataque, a cifra DES com chave de 56 bits é atualmente considerada insuficiente para prover segurança criptográfica. O algoritmo da NSA, Skipjack, usado no programa Fortezza, usa chaves de 80 bits. O DES de 56 bits tem sido substituido em muitas aplicações pelo TRIPLE-DES, que tem chaves de 168 bits.403

Algumas considerações matemáticas tem levantado a questão da segurança real

da tripla encriptação. É o caso de saber se a encriptação DES é fechada sob composição, ou seja, se duas encriptações sucessivas com chaves diferentes é uma operação equivalente a uma encriptação simples com uma única chave.

Isso é o mesmo que perguntar se o DES é um grupo matemático. Se é um grupo, sua segurança real é fraca. Se não é um grupo (e recentemente foi provado que não é), então significa que a tripla encriptação realmente aumenta a segurança.

* * *

Chaves Fracas no DES: por causa da modificação inicial que a chave sofre, transformando-se em duas subchaves que são usadas em partes diferentes do algoritmo, o DES corre o risco de trabalhar com as chamadas chaves fracas.

Inicialmente o valor da chave é dividido em duas metades, as quais vão sofrer deslocamentos separadamente. Se todos os bits de cada metade forem “0” ou “1”, então a chave usada para qualquer ciclo do algoritmo será a mesma usada para qualquer outro ciclo do algoritmo. Isto pode ocorrer se a chave for inteiramente formada por “1” ou inteiramente por “0”, ou metade por “1” e metade por “0”. Além disto, duas das chaves fracas possuem outras propriedades que as tornam ainda menos seguras.

As chaves fracas são mostradas na notação hexadecimal (cada oitavo bit é um bit de paridade, e a permutação inicial embaralha discretamente a ordem da chave).

--------------------------------------------------- VALOR DA CHAVE FRACA CHAVE OBTIDA --------------------------------------------------- 0101 0101 0101 0101 0000000 0000000 FEFE FEFE FEFE FEFE FFFFFFF FFFFFFF 1F1F 1F1F 1F1F 1F1F 0000000 FFFFFFF E0E0 E0E0 E0E0 E0E0 FFFFFFF 0000000

Além das chaves fracas existem pares de chaves [A, B] que encriptam o texto

claro em textos cifrados idênticos (A cifra um texto em claro e tanto A quanto B são capazes de decifrar o criptograma cifrado por A). Ou seja: uma das chaves do par pode decifrar um texto encriptado pela outra chave do par. Isto se deve ao modo como o DES gera as sub-chaves: ao invés de gerar 16 sub-chaves diferentes, estas chaves geram apenas duas sub-chaves diferentes, e cada uma delas é usada oito vezes no algoritmo. Estas chaves são conhecidas como chaves semi-fracas:

402 Disponível em: https://www.cosic.esat.kuleuven.be/des/. Ver também: http://www.cosic.esat.kuleuven.be.des/descracker. Título alternativo: Cracking DES, Secrets of Encryption Research, Wiretap Politics & Chip Design: EEF, O'Reilly & Associates, Sebastopol, 1998. 403 Esta é uma encriptação tripla, que codifica cada bloco de mensagem usando três chaves DES em sucessão. Isso é o equivalente a dobrar o tamanho da chave para 112 bits. A maior segurança contra o ataque de força bruta é compensada negativamente pelo aumento do tempo tomado para a encriptação.

-------------------- CHAVES SEMI- FRACAS -------------------- 01FE 01FE 01FE 01FE 1FE0 1FE0 1FE0 1FE0 01E0 01E0 01E0 01E0 1FFE 1FFE 1FFE 1FFE 011F 011F 011F 011F E0FE E0FE E0FE E0FE FE01 FE01 FE01 FE01 E01F E01F E01F E01F E001 E001 E001 E001 FE1F FE1F FE1F FE1F 1F01 1F01 1F01 1F01 FEE0 FEE0 FEE0 FEE0

Existem chaves que produzem apenas quatro sub-chaves diferentes, cada uma delas usada quatro vezes no algoritmo. São conhecidas como chaves possivelmente fracas:

CHAVES POSSIVELMENTE FRACAS ----------------------------------------------------- 1F1F0101 0E0E0101 E00101E0 F10101F1 011F1F01 010E0E01 FE1F01E0 FE0E01F1 1F01011F 0E01010E FE011FE0 FE010EF1 01011F1F 01010E0E E01F1FE0 F10E0EF1 FE0101FE FE0101FE E0E00101 F1F10101 E01F01FE F10E01FE FEFE0101 FEFE0101 E0011FFE F1010EFE FEE01F01 FEF10E01 FE1F1FFE FE0E0EFE E0FE011F F1FE0E01 FEE0011F FEF1010E 1FFE01E0 0EFE01F1 E0FE011F F1FE010E 01FE1FE0 01FE0EF1 E0E01F1F F1F10E0E 1FE001FE 0EF101FE FEFE1F1F FEFE0E0E 01E01FFE 01F10EFE FE1FE001 FE0EF101 0101E0E0 0101F1F1 E01FFE01 F10EFE01 1F1FE0E0 0E0EF1F1 FE01E01F FE01F10E 1F01FEE0 0E01FEF1 E001FE1F F101FE0E 011FFEE0 010EFEF1 1F01E0FE 0E01F1FE 01E0E001 01F1F101 011FE0FE 010EF1FE 1FFEE001 0EFEF001 0101FEFE 0101FEFE 1FE0FE01 0EF1FE01 1F1FFEFE 0E0EFEFE 01FEFE01 01FEFE01 1FE0E01F 0EF1F10E FEFEE0E0 FEFEF1F1 01FEE01F 01FEF10E E0FEFEE0 F1FEFEF1 01E0FE1F 01F1FE0E FEE0E0FE FEF1F1FE 1FFEFE1F 0EFEFE0E E0E0FEFE F1F1FEFE

AES (Advanced Encryption Standard): este algoritmo, apresentado em 2001, usa uma chave com comprimento mínimo de 128 bits (podendo chegar a 256 bits), um tamanho considerado suficiente para algoritmos simétricos.404

404 O governo dos EUA exige de 192 a 256 bits, para informações altamente secretas.

A Agência de Segurança Nacional (NSA) anunciou que o algoritmo Rijndael podia ser usado para proteger informações não-classificadas; em junho de 2003, foi anunciado que o AES seria utilizado para proteger informação classificada, de acordo com os seguintes critérios: as chaves de 128 bits são suficientes para a proteção até o nível SECRET (Secreto); o nível TOP SECRET (Ultra-Secreto) requer chaves de 192 ou 256 bits.

Há vários ataques conhecidos contra certas implementações do AES:405 • Em 2002, um ataque “teórico” denominado XSL Attack foi anunciado por

Nicolas Courtois e Josef Pieprzyk, com o propósito de mostrar uma fraqueza no algoritmo AES; posteriormente, outros estudos mostraram que este ataque era imprativável.

• Em abril de 2005, D. J. Bernstein anunciou um ataque a velocidade-de-cache (cache-timing attack) para quebrar um Servidor (Custom Server) usando encriptação OpenSSL's AES (o Servidor reportava o número de ciclos de máquina tomados pela operação de encriptação), sendo que o ataque requeria acima de 200 milhões de textos claros escolhidos. Em outubro do mesmo ano, Dag Arne Osvik, Adi Shamir e Eran Tromer apresentaram o seu estudo de ataque contra o AES, com vários ataques do mesmo tipo. Um ataque conseguiu obter em apenas 65 milisegundos a chave completa do AES, com apenas 800 operações de encriptação.406

• Até maio de 2009, os únicos ataques de sucesso contra o AES foram ataques do tipo side-channel attack, em certas implementaçoes. Em dezembro de 2009 um ataque contra o AES usando a Análise por Falha Diferencial permitiu recuperar a chave utilizada. Ainda em 2009 foram relatados ataques de chave-relacionada contra versões de 192 e 256 bits do AES. Um ataque chamado known-key distinguising attack foi anunciado em novembro desse ano contra versões de 8 rounds do AES de 128 bits.

• Este algoritmo é considerado vulnerável a ataques do tipo DPA. IDEA: é uma cifra proposta por Lai e Massey. O comprimento da chave do

IDEA é de 128 bits. Dessa forma, um ataque de força bruta precisaria realizar 2128 (ou 1036) operações para recuperar a chave. Ele é imune à criptoanálise diferencial e também ao ataque de chave relacionada.

Afirma-se que existe uma classe de chaves fracas, diferentes das chaves fracas do DES, onde a função de cifragem é auto-inversa. No caso do IDEA são consideradas fracas porque, se forem utilizadas, um atacante pode identificá-las com facilidade através de um ataque de texto claro escolhido. Por exemplo, a chave

0000 0000 0F00 0000 0000 000F FFFF F000

é uma chave fraca, sendo que os F podem ser substituídos por qualquer dígito hexadecimal. Isto não é realmente um problema, porque a chance de gerar uma chave deste tipo é extremamente pequena, da ordem de 2-96.

O IDEA trabalha com unidades de 16 bits. Ele possui uma chave de usuário de 16 bytes (128 bits) que é expandida numa subchave de 104 bytes (832 bits). Os dados são processados em blocos de 8 bytes (64 bits). 405 Por volta de 2006, os melhores ataques usavam sete rounds para chaves de 128 bits, oito rounds para chaves de 192 bits e nove rounds para chaves de 256 bits. 406 Este tipo de ataque, entretanto, requer que o atacante tenha acesso ao mesmo sistema ou plataforma que roda o AES.

Código-fonte em C (IDEA): a função Idea precisa receber a subchave, não a

chave do usuário. O exemplo de código a seguir exige que a multiplicação seja feita em módulo 65537 (como definido nas especificações do IDEA). Uma entrada zero é considerada como sendo 65536.

void Idea(u_int16 *in, u_int16 *out, u_int16 *key)

u_int16 x0, x1, x2, x3, t0, t1, round;

x0 = *in++;

x1 = *in++;

x2 = *in++;

x3 = *in;

for (round = 0; round < 8; round++)

x0 *= *key++;

x1 += *key++;

x2 += *key++;

x3 *= *key++;

t0 = x1;

t1 = x2;

x2 ^= x0;

x1 ^= x3;

x2 *= *key++;

x1 += x2;

x1 *= *key++;

x2 += x1;

x0 ^= x1;

x3 ^= x2;

x1 ^= t1;

x2 ^= t0;

*out++ = x0 * *key++;

*out++ = x2 + *key++; /* NB: Ordem */

*out++ = x1 + *key++;

*out = x3 * *key;

A função a seguir pode ser usada para realizar a multiplicação módulo 65537 usada no IDEA.

u_int16 mul(u_int16 x, u_int16 y) u_int32 p=x*y; if (p == 0) x = 65537-x-y; else x = p >> 16; y = p; x = y-x; if (y < x) x += 65537; return x;

A função a seguir é usada para expandir a chave do usuário e obter a subchave de cifragem. Os primeiros 16 bytes são a chave do usuário, o restante da subchave é calculado fazendo a rotação dos 16 bytes anteriores, deslocando-os 25 bits para a esquerda. O processo é repetido até que a subchave seja completada.

void Expandkey(u_int16 *ukey, u_int16 *key) int i; for (i=0; i<8; i++) key[i]=ukey[i]; for (i=8; i<52; i++) if ((i & 7) < 6) key[i]=(key[i-7] & 127) << 9 | key[i-6] >> 7; else if ((i & 7) == 6) key[i]=(key[i-7] & 127) << 9 | key[i-14] >> 7; else key[i]=(key[i-15] & 127) << 9 | key[i-14] >> 7;

A função para inverter a subchave de cifragem e para obter a subchave de decifragem é necessária para decifrações que usam modos ECB e CBC. Inclui também as funções dos inversos multiplicativo e aditivo.

Regras:

• x + addinv(x) == 0 • x * mulinv(x) == 1 (modulo 65537)

void Invertkey(u_int16 *in, u_int16 *out) u_int16 t1, t2, t3, t4, round; u_int16 *p = out + 52; /* We work backwards */ t1 = mulinv(*in++); t2 = addinv(*in++); t3 = addinv(*in++); t4 = mulinv(*in++); *--p = t4; *--p = t3; *--p = t2; *--p = t1; for (round = 1; round < 8; round++) t1 = *in++; t2 = *in++; *--p = t2; *--p = t1; t1 = mulinv(*in++); t2 = addinv(*in++); t3 = addinv(*in++); t4 = mulinv(*in++); *--p = t4; *--p = t2; /* NB: Order */

*--p = t3; *--p = t1; t1 = *in++; t2 = *in++; *--p = t2; *--p = t1; t1 = mulinv(*in++); t2 = addinv(*in++); t3 = addinv(*in++); t4 = mulinv(*in++); *--p = t4; *--p = t3; *--p = t2; *--p = t1; u_int16 addinv(u_int16 x) return 0-x;

Esta função calcula o inverso multiplicativo com o algoritmo do MDC de Euclides (zero e um são inversos deles mesmos).

u_int16 mulinv(u_int16 x) u_int16 t0, t1, q, y; if (x < 2) return x; t0 = 0; t1 = 65537 / x; y = 65537 % x; while (y != 1) q = x / y; x = x % y; t0 = t0 + (t1 * q); if (x == 1) return t0; q = y / x; y = y % x; t1 = t1 + (t0 * q); return 65537-x;

11.3.2.9 – Criptoanálise de Algoritmos de Chaves Assimétricas

Como já se viu, a criptografia assimétrica, ou criptografia de chave pública, é

aquela que usa duas chaves, uma privada e uma pública. Sua segurança reside na dificuldade de resolver certos problemas matemáticos, e os ataques visam exatamente procurar desenvolver métodos para resovê-los. Se um algoritmo aperfeiçoado pode fazer isto, o algoritmo é enfraquecido. Os exemplos mais destacados são:

• A segurança da RSA depende, em parte, da dificuldade de fatoração de inteiros. Em 1980, podia-se fatorar um número de 50 dígitos a um custo de 1012

operações elementares de computação. Por volta de 1984, o estado da arte em

fatoração de algoritmos tinha avançado ao ponto de se poder fatorar um número de 75 dígitos com o mesmo número de operações computacionais. Avanços na tecnologia de computação significavam também que estas operações podiam ser realizadas muito mais rápidamente.

• O esquema de troca de chaves Diffie-Hellman, cuja segurança depende da dificuldade em calcular logaritmos discretos, tem agora que usar grupos maiores, ou diferentes tipos de grupos. Isto porque o pesquisador Don Coppersmith encontrou (1983) um modo rápido de calcular logaritmos discretos (em certos grupos). RSA: A eficácia dos sistemas de chave pública repousa, como se viu, na

intratabilidade (computacional e teórica) de certos problemas matemáticos,407 entre os quais a fatoração de números inteiros (produto de dois números primos).

Ambos os problemas consomem demasiado tempo de computação, ainda que sejam mais rápidos do que ataque de força bruta. Portanto, chaves de algoritmos assimétricos devem ser maiores (para uma resistência equivalente a ataques) do que chaves de algoritmos simétricos.

Em 2003, a RSA Security anunciou as seguintes equivalências em força: • uma chave RSA de 1024 bits era equivalente a uma chave simétrica de 80 bits; • uma chave RSA de 2048 bits era equivalente a uma chave simétrica de 112 bits; • uma chave RSA de 3072 bits era equivalente a uma chave simétrica de 128

bits.408 A RSA afirmou também (em 2003) que uma chave de 1024 bits somente seria

quebrada entre os anos de 2006 e 2010;409 que uma chave de 2048 bits seria resistente até o ano 2030; que uma chave de 3072 bits iria além desta data, em sua capacidade de oferecer segurança.

Desde que surgiu, percebeu-se que a segurança principal do algoritmo RSA residia na dificuldade em fatorar números gigantescos que fossem produtos de números primos.

Como diz Singh,

O único problema para a segurança da criptografia de chave pública RSA é que, em alguma época no futuro, alguém possa encontrar um modo rápido de fatorar N. É concebível que daqui a uma década, ou mesmo amanhã, alguém possa descobrir um método para a fatoração rápida e aí a RSA se tornará inútil.410

Assim também o afirma o autor Sgarro:

Naturalmente, se alguém conseguisse descobrir um algoritmo rápido para decompor números compostos, a RSA ruiria.411

407 Ver: http://www.springerlink.com/content/40qmlu915j4qx4v3/. 408 A NIST sugeriu que uma chave RSA de 15360 bits seria equivalente a uma chave simétrica de 256 bits. 409 Até a presente data (julho de 2010), a chave de 1024 bits continua resistindo. Ver item RSA, à frente. 410 SINGH, obra citada, p. 303. 411 SGARRO, obra citada, p. 133.

Os proprietários do algoritmo RSA, secundados pelo interesse do governo norte-americano e pela NSA,412 têm o maior interesse em descobrir se esta fragilidade está em vias de ser exposta. Já em 1977 o escritor e divulgador científico Martin Gardner publicava em sua coluna na revista Scientific American um desafio, que era realizar a decifração de um texto cifrado do qual era fornecida a chave pública. Tratava-se, então, de fatorar esta chave numérica, que consistia de um número com 129 dígitos.413 O desafio persistiu até abril de 1994,414 quando o número foi completamente fatorado por uma equipe de seiscentos voluntários. O número era: N=114381625757888867669235779976146612010218296721242362562561842935706935245733897830597123563958705058989075147599290026879543541 E os fatores encontrados foram: p=32769132993266709549961988190834461413177642967992942539798288533 q=3490529510847650949147849619903898133417764638493387843990820577 A partir de 1997 a organização RSA Laboratories começou a oferecer prêmios (através do RSA Factoring Challenge) que chegavam a cem mil dólares, a quem fatorasse os números apresentados. Os números variavam de um tamanho de 576 bits (174 dígitos decimais) até 2048 bits (617 dígitos decimais). Gradativamente, à medida que novos algoritmos de fatoração eram desenvolvidos, e com o advento de máquinas cada vez mais potentes415, os números começaram a cair. Assim, em 2007 a RSA encerrou os desafios após ter todos os números quebrados (e ter pago os prêmios). Mesmo com o fim dos prêmios persistiram outros desafios. Em 2005 foi fatorado o de 640 bits, e o de 768 bits, com 232 dígitos decimais, teve os seus fatores encontrados em 12 de dezembro de 2009, feito este realizado por uma equipe de pesquisas provenientes de seis instituições, lideradas por T. Kleinjung.416

Abaixo, o número-produto RSA-768 e os seus fatores.

412 A National Security Agency – NSA, ou Agência de Segurança Nacional, criada em 4 de novembro de 1952, é a agência de segurança americana responsável pela SIGINT, isto é, inteligência obtida a partir de sinais, incluindo interceptação e criptoanálise. É também o principal órgão norte-americano dedicado a proteger informações sujeitas a SIGINT, sendo dessa forma o maior núcleo de conhecimento em criptologia mundial. O NSA é parte do Departamento de Defesa americano. 413 Ver: http://en.wikipedia.org/wiki/Integer_factorization_records. 414 Ou seja, levou cercas de dezessete anos para ser resolvido. 415 Os esforços neste sentido eram orientados para o processamento distribuído por várias centenas de computadores, organizados para isso pela Distributed.net. Ver: http://www.distributed.net/ (aparentemente descontinuado; a última atualização foi em 24 de fevereiro de 2009). Ver também: http://distributedcomputing.info/index.html (atualizado). 416 De acordo com a equipe, o esforço teria tomado o equivalente a 1500/2000 anos de processamento em um Core 2,2 GHz AMD Opteron, com os resultados ocupando cerca de 5 Terabytes de memória. Ver: http://eprint.iacr.org/2010/006.pdf. Ver também: http://arstechnica.com/security/news/2010/01/768-bit-rsa-cracked-1024-bit-safe-for-now.ars. E ainda: http://blog.boyet.com/blog/posterous/768-bit-rsa-modulus-factorized/.

RSA-768 (232 dígitos decimais):

1230186684530117755130494958384962720772853569595334792197322452151726400507263657518745202199786469389956474942774063845925192557326303453731548268507917026122142913461670429214311602221240479274737794080665351419597459856902143413

RSA-768 =

33478071698956898786044169848212690817704794983713768568912431388982883793878002287614711652531743087737814467999489 × 36746043666799590428244633799627952632279158164343087642676032283815739666511279233373417143396810270092798736308917

Outros desafios da RSA são:417 RSA-190 (190 dígitos decimais):

1907556405060696491061450432646028861081179759533184460647975622318915025587184175754054976155121593293492260464152630093238509246603207417124726121580858185985938946945490481721756401423481 RSA-210 (210 dígitos decimais):

245246644900278211976517663573088018467026787678332759743414451715061600830038587216952208399332071549103626827191679864079776723243005600592035631246561218465817904100131859299619933817012149335034875870551067 RSA-704 (212 dígitos decimais): 74037563479561712828046796097429573142593188889231289084936232638972765034028266276891996419625117843995894330502127585370118968098286733173273108930900552505116877063299072396380786710086096962537934650563796359 RSA-896 (270 dígitos decimais):

41202343698665954385553136533257594817981169984432 79828454556264338764455652484261980988704231618418 79261420247188869492560931776375033421130982397485

417 Para uma lista completa dos números RSA, fatorados ou não, ver: http://en.wikipedia.org/wiki/RSA_numbers.

15094490910691026986103186270411488086697056490290 36536588674337317208131041051908642547932826013912 57624033946373269391

Soma dos dígitos decimais: 1222

RSA-1024 (309 dígitos decimais):

13506641086599522334960321627880596993888147560566 70275244851438515265106048595338339402871505719094 41798207282164471551373680419703964191743046496589 27425623934102086438320211037295872576235850964311 05640735015081875106765946292055636855294752135008 52879416377328533906109750544334999811150056977236 890927563

Soma dos dígitos decimais: 1369

RSA-1536 (463 dígitos decimais):

18476997032117414743068356202001644030185493386634 10171471785774910651696711161249859337684305435744 58561606154457179405222971773252466096064694607124 96237204420222697567566873784275623895087646784409 33285157496578843415088475528298186726451339863364 93190808467199043187438128336350279547028265329780 29349161558118810498449083195450098483937752272570 52578591944993870073695755688436933812779613089230 39256969525326162082367649031603655137144791393234 7169566988069

Soma dos dígitos decimais: 2153

RSA-2048 (617 dígitos decimais): 25195908475657893494027183240048398571429282126204 03202777713783604366202070759555626401852588078440 69182906412495150821892985591491761845028084891200 72844992687392807287776735971418347270261896375014 97182469116507761337985909570009733045974880842840 17974291006424586918171951187461215151726546322822 16869987549182422433637259085141865462043576798423 38718477444792073993423658482382428119816381501067 48104516603773060562016196762561338441436038339044 14952634432190114657544454178424020924616515723350 77870774981712577246796292638635637328991215483143 81678998850404453640235273819513786365643912120103 97122822120720357

Soma dos dígitos decimais: 2738

RSA – o status da fatoração: atualmente considera-se que a fatoração de números418 com cerca de 100 dígitos não apresenta mais problemas. O mesmo não ocorre com números de mais de 100 dígitos.419 Entretanto, considera-se que com o avanço em hardware e na teoria dos números, logo o estado da arte alcançará números desta magnitude.420 Ainda assim, alguns crêem que o desafio do RSA-2048 permanecerá por décadas. Em software, é possível que o melhor algoritmo para a fatoração de números gigantes seja o General Number Field Sieve – GNFS.421 Ele consiste em um crivo de fase (sieving phase) que busca um conjunto fixo de números primos para candidatos que tenham um relacionamento algebraico particular (particular algebraic relationship) módulo o número a ser fatorado.422 Isto é seguido por uma matriz de solução de fase (matrix solving phase) que cria uma enorme matriz a partir dos valores candidatos, e então os resolve para determinar os fatores. Este crivo de fase pode ser feito de modo distribuído, usando um grande número de processadores em operação simultânea. A matriz de solução de fase requer quantidades maciças de armazenamento, e é processada em super-computadores de grande performance. Outros algoritmos de fatoração são os seguintes: Crivo Quadrático (Quadratic Sieve), Curva Elíptica (Elliptic Curve) e Crivo de Campo Numérico (Number Field Sieve)423, com os respectivos tempos de fatoração:

Além desses há também os algoritmos de computação quântica: o Shor's Algorithm424 e o Grover’s Algorithm.425

Em hardware, o dispositivo hipotético TWIRL (The Weizmann Institute Relation Locator) foi projetado por Adi Shamir e Eran Tromer para dar rapidez ao GNFS. Para seus criadores, ele seria capaz de fatorar um número RSA-1024 em cerca

418 Os algoritmos ECM desenvolvidos em UBasic por Yugi Kida, Hiromi Suyama, Leonard Adleman e outros podem resolver alguns produtos de grande porte. Ver: http://en.wikipedia.org/wiki/UBASIC. O UBASIC pode trabalhar com números de até 2600 dígitos (não significa que possa fatorar números desta dimensão). Para download: http://archives.math.utk.edu/software/msdos/number.theory/ubasic/.html. 419 Isto, é claro, com o uso de métodos matemáticos sofisticados e com processamento distribuído. Por outro lado, a fatoração de números com mais de 200 dígitos tem demandado extraordinários esforços de equipes dotadas de equipamentos rápidos e com grande capacidade de memória, além de algoritmos avançados; não está, portanto, ao alcance de qualquer um. 420 A combinação algoritmos-eficientes/processadores-potentes poderá eventualmente permitir, no futuro, que computadores domésticos fatorem números de até 750 bits em alguns meses de processamento contínuo. Com processamento distribuído, os números podem chegar a até 950 bits. 421 Ver: http://en.wikipedia.org/wiki/General_number_field_sieve. Para uma explicação rápida, ver: http://www.sbmac.org.br/eventos/cnmac/xxxi_cnmac/PDF//316.pdf. Para um crivo diferente, o Crivo Quadrático Paralelo (Parallel Quadratic Sieve), ver: http://www.nada.kth.se/~joel/qs.pdf. 422 O GNFS usa o chamado método de Dixon de fatoração. Nele, são buscados inteiros x e y tais que

x ± y (mod n) e x2 y2 (mod n), sendo n o número que se deseja fatorar.

423 Matematicamente, o termo field costuma ser traduzido por Corpo. 424 Ver: http://www.liber.ufpe.br/teses/arquivo/20041021160133.pdf. 425 Ver: http://alumni.imsa.edu/~matth/quant/473/473proj/node9.html.

de um ano de processamento. O TWIRL representaria o estado da arte em circuitos físicos usados para a fatoração de inteiros.426 Em termos de segurança criptográfica, principalmente para aplicações civis e comerciais de pequena monta, a fatoração destes números gigantes não implica em uma ameaça. Nem significa que os usuários devam procurar números ainda maiores, temendo que aqueles que usam possam ser quebrados. O problema é que o esforço desenvolvido por instituições realizando processamento distribuído não pode ser acompanhado pela imensa maioria dos hackers ou outros cripto-piratas.

O mesmo não se pode dizer, é claro, em relação às aplicações militares, diplomáticas ou interbancárias. Para essas o NIST tem recomendado chaves com no mínimo 1024 bits427, podendo ir até chaves de 4096 bits.428

De todo modo, o RSA é vulnerável a ataques do tipo texto claro escolhido (chosen plaintext) e timing attack.

Ataques a protocolos que usam RSA: Ataque por Criptogama escolhido contra assinatura: este ataque é possível

contra protocolos que assinam a mensagem por extenso (e não um hash da mesma).

Ataque em módulo comum: este ataque é possível se a distribuição de chaves para a cifra que usa o RSA atribui chaves com o mesmo módulo a usuários distintos.

Ataque com expoentes pequenos de encriptação: A encriptação/verificação de assinatura no RSA é tão mais rápida quanto menor for a chave pública. Este tipo de ataque é possível com a encriptação de Ө (Ө + 1) / 2 mensagens linearmente dependenes, caso existam.

Ataque com assinatura de criptograma: As operações de assinatura e encriptação devem ser executadas nessa ordem, para evitar fraudes que decorrem deste tipo de ataque, que nem mesmo o uso da função hash para assinatura consegue evitar. Para evitar ataque em rede, deve-se adotar a seguinte prevenção:

O módulo comum não deve ser usado em serviços de rede. As mensagens devem ser preenchidas com bits randômicos enquanto menores

do que n; O expoente público deve ser grande, e a assinatura deve anteceder a cifra.

ECC (Elliptic Curve Criptosystem):429 O avanço na técnica de fatoração rápida

comprometeu a segurança dos sistema assimétricos que usam aritmética modular, que demandam sempre chaves cada vez maiores. Assim, foram implementados algoritmos que usam operações algébricas de uma estrutura distinta dos corpos finitos, que independem da fatoração de inteiros.

Matemática da ECC: o conjunto de pontos de um espaço vetorial com coordenadas (x,y) e que satisfaçam uma equação da forma y2 = x2 + ax + b é chamada curva elíptica, caso os coeficientes satisfaçam 4a2 + 27b2 ≠ 0. Se aplicada a um espaço onde as coordenadas são elementos de um corpo finito, a definição de curva elíptica

426 Ver: http://www.hyperelliptic.org/tanja/SHARCS/talks/shark_paper.pdf. Ver também: http://en.wikipedia.org/wiki/TWIRL. 427 Ou segurança de 308 dígitos, no módulo RSA. 428 O mercado já oferece proteção deste nível; ver: http://www.securstar.com/products_phonecrypt.php. 429 Há também o chamado HECC: Hiperelliptic Curve Criptosystem.

seleciona pontos que, incluindo-se um “ponto no infinito”, formam um grupo algébrico sob a operação de composição inspirada na geometria das secantes dos espaços métricos Esta operação substitui a operação de exponenciação em algoritmos assimétricos (Koblitz & Miller, 1985).

Grupo de curvas elípticas E(Zp):430

em que a operação algébrica do grupo, denotada por “+”, é assim definida: 1) P + O = O + P = P [comutatividade e elemento neutro da adição]

2) Dado P = (x,y), denota-se – P = (x,-y), em que P + (-P) = 0 [elemento inverso na adição]

3) Dados P = (x1,y1), Q = (x2,y2), então P + Q = (x3,y3) é dado por: x3 = λ2 – x1 – x2 ; y3 = λ (x1 – x3) – y1 , em que: λ = (y2 – y1) /(x2 – x1) se P ≠ Q , ou: λ = (3x1

2 + a) / (y1 + y2) se P = Q 4) nP = P + P + P + ... + P (n vezes) Comparações entre aritméticas de Zp e E(Zp):

430 O grupo de pontos de curva elíptica fornece um código de cifragem semelhante aos códigos de recuperação de erros. Por essa razão, uma porcentagem do espaço de textos não pode ser cifrada, sendo ela inversamente proporcional à expansão na encriptação. Em algumas aplicações criptográficas, esta característica impede o seu uso em substituição à aritmética modular.

Chaves públicas com nível de segurança equivalente:

DIFFIE-HELLMAN: as chaves do algoritmo de campo finito Diffie-Hellman (The Finite Field Diffie-Hellman algorithm) possuem a mesma força que as chaves RSA de tamanho equivalente. Sua quebra deve basear-se na resolução de problemas de algoritmos discretos, um tipo de problema tão intratável quanto a fatoração de primos necessária para quebrar as chaves RSA. Portanto, uma chave de 3072 bits Diffie-Hellman tem a mesma força que uma chave RSA de 3072 bits.

De todo modo, algoritmos assimétricos baseados em curvas elípticas (elliptic curve cryptography – ECC) aparentam ser mais seguros com chaves mais curtas do que as necessárias para outros algoritmos assimétricos.431 A NSA especifica (FIPS-186-2 e SHA-256) que a criptografia ECC usando curva elíptica módulo primo de 256 bits (256-bit prime modulus elliptic curve) é apropriada para proteger informações classificadas até o nível SECRET. O uso de curva elíptica módulo primo de 384 bits é necessário para proteger informações classificadas no nível TOP SECRET. Este algoritmo é vulnerável a ataques do tipo timing. EL-GAMAL: este algoritmo é baseado no problema de logaritmos discretos usando as propriedades de corpos cíclicos finitos. É composto de um gerador de chaves, um algoritmo de encriptação e um algoritmo de desencriptação. É vulnerável a ataques de texto cifrado escolhido (chosen ciphertext).

431 O NIST afirma que chaves ECC possuem o dobro da força do que as chaves de tamanho equivalentes de algoritmos simétricos. Desse modo, uma chave ECC de 224 bits tem a mesma força que uma chave simétrica de 112 bits.

Cada encriptação ou assinatura requer um valor randômico para k. Duas mensagens encriptadas ou assinadas com o mesmo valor de k permitem a recuperação da chave privada x.

11.3.2.10 – Ataque ao Equipamento ou Dispositivo

Antes considerado apenas um dispositivo abstrato (ou caixa preta) do qual só interessavam os dados de entrada e saída, os chips e máquinas de encriptação atualmente merecem a atenção direta dos criptoanalistas.

Os ataques a estes dispositivos podem ser: • Ataques ativos. • Ataques passivos. • Ataques lógicos. • Ataques físicos.

• Ataques ativos: podem ser não-invasivos; semi-invasivos; invasivos.

Exigem, por este motivo, acesso direto ao dispositivo em si mesmo, ou mesmo a sua remoção.

o Ataque não-invasivo: envolve mudança nas condições normais do ambiente (p. ex., na temperatura) para causar mau-funcionamento.

o Ataque semi-invasivo: envolve (p. ex.) a introdução de pulsos curtos na fonte de energia. O ataque semi-invasivo pode ser dividido em duas partes separadas de análise:432

• Análise de Falha Simples (simple fault analysis). • Análise de Falha Diferencial (differential fault analysis).

o Ataque invasivo: é um caso extremo, que pode levar à abertura do dispositivo. Neste caso, equipamentos altamente especializados de laboratórios são usados para fazer conexões diretas ao barramento (para a micro-fiação interna do chip, ou internal bus line).

• Ataques passivos: são totalmente não invasivos. São do tipo captação e análise das condições físico-ambientais que rodeiam o dispositivo, traduzidas em informações tais como consumo de energia, radiação eletromagnética, informações temporais, mensagens de erro, etc. Os ataques passivos podem ser de dois tipos:

o Ataque ao Canal Lateral (Side-Channel Attack). o Ataques lógicos (Logical Attacks).

• Ataques Lógicos: fazem uso das funções lógicas externas do dispositivo criptográfico, e procuram por um software específico ou por bugs (erros) de protocolo os quais possam ser explorados. Não é necessário o acesso direto ao dispositivo.

• Ataques Físicos: são executados com equipamentos especializados de laboratórios. São ataques do tipo invasivo, em que se fazem conexões diretas ao circuito interno do dispositivo.

432 Estas análises também são chamadas: Simple Side Channel Analysis e Differential Side Channel Analysis.

11.3.2.10.1 – O Ataque Side-Channel O Side-Channel Attack433 é baseado na Side Channel Information, que é

qualquer informação que possa ser recuperada de um dispositivo ou equipamento de encriptação. Não envolve o texto claro nem o texto cifrado resultante da encriptação.

É, então, qualquer ataque baseado em informações relativas a equipamentos físicos de um criptosistema, informações estas que se ganham devido à fraqueza da implementação do equipamento,434 e que podem terminar por mostrar como se implementou um determinado algoritmo (o que, evidentemente, acarreta em sua quebra).

A informação, capturada externamente, pode provir da potência dissipada, de tempo de processamento, etc., sendo processada estatisticamente. Admite-se que todos os algoritmos criptográficos são vulneráveis a este tipo de ataque, principalmente se nenhuma medida de proteção for tomada.

Pode se dividir em:

• Análise de Falha Simples (Simple Side Channel Analysis). • Análise de Falha Diferencial (Differential Side Channel Analysis).

Análise de Falha Simples – evolução histórica: um tipo de análise chamado Análise de Tempo (Timing Analysis) surgiu em 1995, com Paulo Kocher. Segundo ele afirmou, as chaves do RSA, DSS e outros criptosistemas podiam ser encontradas apenas medindo o tempo de execução de cada operação do sistema. Em 1998, um ataque mais eficiente chamado Análise de Potência (Power Analysis) foi apresentado. Neste caso, analisa-se o consumo de energia do dispositivo durante o processamento da operação criptográfica. A análise procura por múltiplos valores intermediaries específicos.

Entre 2000 e 2001 começou a ser feito um outro tipo de análise, qual seja o da emanação eletromagnética do dispositivo. Isto foi feito por Jean-Jacques Quisquater e David Samyde, Karine Gandolfi, e outros. A vantagem desta análise é que ela podia ser realizada à distância.

Funcionamento: a Análise de Falha Simples explora uma relação direta entre um resultado defeituoso e a chave secreta na implementação. Também a manipulação de atributos de segurança armazenados ou processados pode dar indicações neste sentido.435 Igualmente, distúrbios no fluxo do programa podem conduzir a eventos imprevistos que violam a segurança. A análise faz uso de características que estarão visíveis nos traços medidos.436 Ela procura pelo processo de listagem da chave secreta; esta precisa ter uma relação com a operação visível através destes traços.

433 Ver: http://www.discretix.com/PDF/Introduction%20to%20Side%20Channel%20Attacks.pdf. 434 Fraquezas quase sempre imprevistas, porque os dispositivos de encriptação produzem informação de todo tipo: tempo de execução; radiações de vários tipos; flutuações de energia devido ao processamento; etc. Tais informações podem ser medidas e recuperadas utilizando instrumentos baratos e fáceis de implementar. Por outro lado, a implementação de contramedidas não é fácil e nem barata. 435 Fluxos adicionais de informação podem ser causados se o dispositivo cirptográfico retorna criptogramas errados ou uma linha de execução modificada é introduzida. Criptoanálise matemática é aplicada para explorar criptogramas errados. 436 Normalmente, curvas em telas de osciloscópios ou outros aparelhos de medida de sinais.

Contramedidas: no caso da Análise de Tempo (Timing Analysis), as contramedidas são fáceis de se implementer. Basta assegurar-se de que o tempo de execução seja independente dos dados. No caso da Análise de Potência é mais difícil assegurar uma contramedida, que varia conforme se aborde o hardware ou o software. O primeiro caso inclui: lógicas especiais para minimizar o vazamento de dados; geração de ruído; processos randômicos de interrupção para prover uma de-sincronização interna. Contramedidas em software visam evitar a ocorrência de resultados intermediário previsíveis. Neste caso, usa-se uma randomização interna para mascarar os dados.

Análise de Falha Diferencial – evolução histórica: em 1996 Dan Boneh, Richard A. DeMillo e Richard J. Lipton reportaram que certas implementações do RSA e de outros algoritmos eram vulneráveis, desde que uma certa falha transiente ocorresse durante o processamento (The Bellcore Attack). Mas na época, isto foi considerado apenas como uma avaliação teórica, sem relevância prática. Ainda neste ano, Eli Biham e Adi Shamir anunciaram sua abordagem da Análise de Falha Diferencial contra sistemas como o DES. Assumia-se que o atacante podia invocar computações DES que usavam o mesmo texto claro (desconhecido). As falhas ocorriam nos últimos três rounds. Os criptogramas errados revelados davam um sistema de equações para os bits desconhecidos da chave na entrada de uma S-Box no último round, que finalmente levava ao correto valor da chave.

Em 1999 Oliver Kömmerling e Markus Kuhn reportaram que, para a geração de falhas, glitch437 attacks na fonte externa ou nas linhas de alimentação eram muitos úteis.

Em 2002 surgiu uma nova classe de ataque por indução de falha. Por exemplo, o (semi-invasivo) ataque por indução de falha óptica, apresentado por Sergei P. Skorobogatov e Ross J. Anderson. Uma outra abordagem (também semi-invasiva), usando correntes parasitas (eddy currents)438 foi apresentada por Jean-Jacques Quisquater e David Samyde.

Funcionamento: O princípio da Análise de Falha Diferencial é induzir falhas sob condições inesperadas, capazes de revelar o estado interno do dispositivo. Se um processador for submetido a altas temperaturas, excesso de voltagem ou corrente, overclock, fortes campos elétricos ou magnéticos ou até mesmo radiação ionizante, tudo isto pode influenciar a sua operação, o que resultará em dados incorretos.439 Esta condição permitirá a um criptoanalista deduzir qual instrução está sendo rodada, ou qual é o estado interno do processador.440 441

Este tipo de análise não procura por sinais que possam ser representados em traços visíveis contínuos. O ataque visa uma parte específica dos traços medidos, e procura uma função de seleção que seja um resultado intermediário no começo ou no fim do algoritmo criptográfico, sobre o qual devem ser usados métodos estatísticos. O resultado dessa função depende do conhecimento dos dados de entrada/saída e de um pequeno número de hipóteses sobre o valor da chave. O resultado da função de seleção leva a uma partição de todos os dados medidos para cada hipótese usada. Para a 437 Glitch: falha rápida (falha curta, falha transiente) que ocorre em um sistema qualquer. 438 Eddy current: corrente parasita. É uma corrente induzida em condutores, oposta ao fluxo de corrente que a gerou. 439 A análise precisa que um certo número de falhas computacionais ocorram com o uso da mesma chave criptográfica. O ataque também depende em grande escala do tipo de modelo de falha utilizado. 440 No caso do DES e do Triplo-DES, são necessários cerca de 200 single-flipped bits para recuperar uma chave secreta. 441 Ver: http://en.wikipedia.org/wiki/Automatic_test_pattern_generation.

hipótese correta, diferentes propriedades estatísticas dos dois conjuntos particionados são esperadas, naqueles pontos no tempo os quais dependem do resultado da função de seleção.

Contramedidas: para impedir este tipo de ataque, uma das medidas é fazer com

que o próprio dispositivo cheque o resultado, para ver se o valor está correto.442 Da forma mais simples, isto pode ser feito computando a mesma operação uma segunda vez, ou detectando modificações em variáveis.443 Uma outra forma é verificar se uma operação inversa conduz à mensagem clara.

11.3.2.10.2– Análise de Potência (Power Analysis) Este é um tipo de ataque que visa os aspectos relacionados com a alimentação de

energia do dispositivo, seu consumo de potência, variação de voltagem e outras características. É um tipo de ataque não-invasivo. Ele permite descobrir chaves secretas apenas pelo exame do consumo de potência do dispostivo.444

Divide-se em Análise de Potência Simples (Simple Power Analysis – SPA) e Análise de Potência Diferencial (Differential Power Analysis – DPA).445

A SPA é uma forma mais simplificada de ataque, e que não exige que sejam

feitas análises estatísticas. Envolve somente exames visuais de gráficos de corrente da alimentação do dispositivo. Como ocorrem variações quando o dispositivo executa diferentes operações (p. ex., se está multiplicando ou não), um simples osciloscópio digital pode mostrar claramente as variações, lidas em forma de bits: 0 (o pulso mais estreito) ou 1 (o pulso mais largo).

Quanto à DPA, é um ataque mais complexo, que exige análises estatísticas

complementares para fazer correlações entre os dados de consumo e um modelo de consumo. A DPA permite atacar uma porção da chave por vez.

442 Uma implementação RSA chamada CRT-RSA Algorithm tem se mostrado segura contra o Belcore Attack. Ver: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.83.8099&rep=rep1&type=pdf. 443 O RSA-CRT faz uso de certas variáveis de controle, as quais são checadas regularmente. 444 Os cientistas de computadores Andrea Pellegrini, Valeria Bertacco e Todd Austin, da Universidade de Michigan, afirmaram (no documento escrito por eles, Fault-based attack of RSA authentication) que tinham encontrado uma forma de explorar uma fraqueza na tecnologia de proteção RSA. Segundo afirmam, a autenticação RSA é susceptível a mudanças de voltagem na fonte do detentor da chave privada. Assim, poderiam quebrar até uma chave de 1024 bits. Ver: http://q-ontech.blogspot.com/2010/03/rsa-1024-bit-private-key-encryption.html. 445 Ver: http://en.wikipedia.org/wiki/Power_analysis.

Ataque DPA para encontrar chaves secretas:446 este ataque visa descobrir a chave utilizada em um algoritmo (o AES, no exemplo).

Diagrama em blocos do AES

Em modelo teórico:

• Passo 1: Modelos de predição (C/C++) o Contar os bit flips447 para os oito bits mais significativos durante a

primeira rodada (round) de encriptação. • Passo 2: Computar dados simulados (C/C++)

o Contar os bit flips para todos os 128 bits durante a rodada de encriptação. • Passo 3: Computar a correlação entre a predição e os dados simulados

o Usar o Matlab448 para computar o Coeficiente de Correlação de Pearson:449

Em modelo prático:

• Passo 1: Modelos de predição (C/C++) o Contar os bit flips para os oito bits mais significativos durante a primeira

rodada (round) de encriptação. • Passo 2: Obter os dados de consumo de potência (Hspice450)

446 Ver: http://www.eecs.berkeley.edu/~bbrady/documents/eecs244-presentation.pdf. 447 Bit flipping: manipulação de bits. A operação XOR é usualmente usada para a operação flip bits. 448 O MATLAB (MATrix LABoratory) é um software interativo de alta performance, voltado para o cálculo numérico. 449 Em estatística descritiva, o Coeficiente de Correlação de Pearson (ou coeficiente de correlação produto-momento ou ρ de Pearson) mede o grau da correlação (e o sentido da correlação – se positivo ou negativo) entre duas variáveis de escala métrica. Este coeficiente, normalmente representado por ρ, assume valores entre -1 e 1. Para ρ = 1, significa uma correlação positiva perfeita entre as duas variáveis. Para ρ = − 1, isto significa uma correlação negativa perfeita entre as duas variáveis: se uma aumenta, a outra diminui. Para ρ = 0, significa que as duas variáveis não dependem linearmente uma da outra. Ver: http://pt.wikipedia.org/wiki/Coeficiente_de_correla%C3%A7%C3%A3o_de_Pearson. 450 O Hspice é um dispositivo comercial simulador de circuitos. Ver: http://www.synopsys.com/Tools/Verification/AMSVerification/CircuitSimulation/HSPICE/Pages/default.aspx.

o Registrar o consumo de potência durante a primeira rodada de encriptação.

• Passo 3: Computar a correlação entre a predição e os traços de potência o Usar o Matlab451 para computar o Coeficiente de Correlação de

Pearson:452

As medidas que podem ser adotadas para evitar estes tipos de ataque envolvem

evitar (por qualquer meio) correlações entre consumo e dados de entrada.453 Ataques DPA a dispositivos criptográficos: este ataque é realizado contra

dispositivos do tipo smart-card, por exemplo.

Diagrama em blocos para DPA

11.4 – Critérios de Segurança Governamentais (EUA/Canadá)

O governo dos EUA tem um programa de validação de algoritmos chamado The

Cryptographic Module Validation Program – CMVP, que é operado em conjunto pela Computer Security Division e o Communications Security Establishment – CSE, do governo do Canadá.

O Federal Information Processing Standards – FIPS é um conjunto de normas públicas desenvolvidas pelo governo dos EUA para uso por qualquer agência de

451 O MATLAB (MATrix LABoratory) é um software interativo de alta performance, voltado para o cálculo numérico. 452 Em estatística descritiva, o Coeficiente de Correlação de Pearson (ou coeficiente de correlação produto-momento ou ρ de Pearson) mede o grau da correlação (e o sentido da correlação – se positivo ou negativo) entre duas variáveis de escala métrica. Este coeficiente, normalmente representado por ρ, assume valores entre -1 e 1. Para ρ = 1, significa uma correlação positiva perfeita entre as duas variáveis. Para ρ = − 1, isto significa uma correlação negativa perfeita entre as duas variáveis: se uma aumenta, a outra diminui. Para ρ = 0, significa que as duas variáveis não dependem linearmente uma da outra. Ver: http://pt.wikipedia.org/wiki/Coeficiente_de_correla%C3%A7%C3%A3o_de_Pearson. 453 Ver: http://www.criptography.com/technology/dpa/.

governo não militar e por empresas contratadas pelo governo. Algumas das normas FIPS são versões modificadas de outra normas, tais como ANSI, IEEE, ISO, etc.

11.4.1 – Vetores de Teste (Test vectors) Os vetores de teste são um conjunto de cifras conhecidas para uma dada

entrada.454 e chave. A Divisão de Segurança de Computadores (Computer Security Division) da NIST mantem (e distribui) padrões criptográficos e conjuntos de teste de validação de algoritmos, no chamado Programa de Validação de Algoritmos Criptográficos (Cryptographic Algorithm Validation Program – CAVP).455

454 Ver: https://www.cosic.esat.kuleuven.be/nessie/testvectors/. 455 Ver: http://csrc.nist.gov/groups/STM/cavp/standards.html.

CAPÍTULO XII

SEGURANÇA EM REDES DE DADOS456

12.0 – As Redes Windows

Ao invés de armazenar a senha da sua conta de usuário em texto sem formatação, o Windows gera e armazena estas senhas usando duas representações de senha diferentes (os hashes). Ao definir ou alterar a senha de uma conta de usuário para uma senha com menos de 15 caracteres, o Windows gera um hash do LM hash (LAN Manager) e um NT hash (hash do Windows NT) da senha. Estes hashes são armazenados no banco de dados SAM (Gerenciador de Contas de Segurança) local ou no Active Directory.

O LM hash é relativamente fraco, quando comparado ao NT hash. Por essa razão, é mais vulnerável a ataques. Mas é possível impedir que o Windows armazene um LM hash da senha, de modo que armazene apenas o NT hash mais forte.

Servidores com Windows 2000 e com Windows Server 2003 podem autenticar usuários que se conectam de computadores executando todas as versões anteriores do Windows (as versões anteriores ao Windows 2000 não usam o Kerberos para autenticação). O Windows 2000 e o Windows Server 2003 são compatíveis com a autenticação LM (LAN Manager), a autenticação NTLM (Windows NT) e a autenticação NTLMv2 (NTLM versão 2). O NTLM, o NTLMv2 e o Kerberos usam o NT hash, ou hash Unicode. O protocolo de autenticação LM usa o LM hash. O armazenamento do LM hash deve ser evitado, se não for necessário para compatibilidade com versões anteriores.

Se a rede tem clientes usando Windows 95, Windows 98 ou Macintosh, e for

impedido o armazenamento dos LM hashes para o domínio, podem ocorrer os seguintes problemas:

• Usuários sem um LM hash não serão capazes de se conectar a um computador

com Windows 95/98 agindo como servidor, a menos que os Directory Services Client para Windows 95/98 estejam instalados no servidor.

• Usuários em computadores com Windows 95/98 não serão capazes de se autenticar em servidores usando suas contas de domínio, a menos que tenham o Directory Services Client instalado em seus computadores.

• Usuários em computadores com Windows 95/98 não serão capazes de se autenticar usando uma conta local em um Servidor, se este tiver os hashes LM desabilitados, a menos que tenham o Directory Services Client instalado em seus computadores.

456 A proteção de dados confidenciais em redes militares está a cargo dos sistemas de proteção COMSEC – Electronic Communications Security, usados para proteger voz, vídeo ou dados informáticos, em aplicações analógicas ou digitais. Ver: http://en.wikipedia.org/wiki/Communications_security. Ver também: http://www.google.com.br/url?sa=t&source=web&cd=5&ved=0CD8QFjAE&url=http%3A%2F%2Fwww.e-comsec.com%2F&ei=1Z8_TIiZOcimuAfV5vy-Cg&usg=AFQjCNHq-kvhGfpJBrIFjV6ucJEh4YNaTQ&sig2=5Rh5b3YTn64uz0H7QDTRcA.

• Usuários em computadores com Windows 95/98 podem não ser capazes de alterar suas senhas de domínio, ou poderão perceber problemas de bloqueio de conta quando tentarem alterar suas senhas por estes clientes mais antigos.

• Usuários de clientes Macintosh Outlook 2001 podem não ser capazes de acessar suas caixas de correio em servidores com o Microsoft Exchange.

Para impedir que o Windows armazene um LM hash da senha, podem ser usados os seguintes métodos:

1. Implementar a diretiva NoLMHash usando a diretiva de grupo: Para desabilitar o armazenamento dos LM hashes da senha de um usuário no banco de dados SAM do computador local usando a Diretiva de grupo local (Windows XP ou Windows Server 2003) ou em um ambiente do Windows Server 2003 Active Directory, usando a diretiva de grupo no Active Directory (Windows Server 2003), executar as seguintes etapas:

• Na diretiva de grupo, expandir Configuração do computador, Configurações do Windows, Configurações de segurança, Diretivas locais e clicar em Opções de segurança.

• Na lista de diretivas disponíveis, clicar duas vezes em Segurança de rede: não armazenar o valor de hash do LAN Manager na próxima alteração de senha.

• Clicar em Ativada e em OK. 2. Usar uma senha que tenha pelo menos 15 caracteres: o modo mais

simples de impedir que o Windows armazene um LM hash da senha é usar uma senha que tenha pelo menos 15 caracteres. Nesse caso, o Windows armazena um valor de LM hash que não pode ser usado para autenticar o usuário.

12.1 – A Segurança em Redes Wireless

457

As tecnologias de rede sem fios proporcionam comodidade e mobilidade, mas a sua operação introduz riscos de segurança.

A segurança de uma rede sem fios é muito importante, especialmente para a hospedagem de aplicativos e de informações valiosas (por exemplo, redes transmitindo números de cartão de crédito para verificação, ou então armazenando informações sensíveis, precisam ter sua segurança reforçada).

Quando se ativa o Access Point (AP) com os parâmetros originais, qualquer pessoa que tenha uma placa de rede sem fios compatível pode acessar a rede, se não forem implementados mecanismos de autenticação e de autorização. Além disso, se não forem encriptados, os dados enviados em texto simples podem ser interceptados por alguém que estiver a uma distância suficiente de um ponto de acesso. Em notebooks, por exemplo, qualquer equipamento com adaptador Wi-Fi na mesma área de cobertura pode se conectar a ele e visualizar os dados transmitidos. Isso permite que invasores violem o sistema e roubem dados sigilosos.458

A simples configuração do roteador wireless pode impedir ou dificultar que a conexão seja usada indevidamente por terceiros. Praticamente, todos os atuais roteadores possuem opções de segurança disponíveis para deixar a rede mais segura.

457 Sem fios. 458 Esta tática é chamada wardriving. Ela consiste em utilizar um detector de Wi-fi ou mesmo um computador portátil com um adaptador Wi-fi e sair pelas ruas com analisadores de protocolo e sniffers para descobrir WLANs.

12.2 – Formas de Proteção nas Redes Wireless Para melhorar a segurança das redes sem fios, alguns mecanismos de segurança

foram desenvolvidos. São eles:

• Firewall. • Verificação e autenticação de identidade 802.11. • Encriptação WEP (Privacidade equivalente a rede) 802.11.459 • Acesso Protegido Wi-Fi (WPA). • Autenticação 802.1X. • Suporte IAS para a autenticação 802.1X.

12.2.1 – Firewall O firewall é um programa de proteção individual contra acessos indevidos à

rede. Ele é executado em cada usuário e cada Servidor. Fornece proteção contra ataques como, por exemplo, cavalos de Tróia, pesquisa de portas e vírus. É um software de controle, que recusa todo o tráfego a receber exceto se este tiver sido enviado em resposta a um pedido do computador, ou se houve permissão pelo usuário.460

12.2.2 – Verificação e Autenticação de Identidade 802.11 Para a encriptação, o 802.11 define o algoritmo WEP. A WEP fornece dados,

confidencialmente, através da encriptação dos dados enviados entre clientes sem fios e pontos de acesso sem fios. Para encriptar os dados enviados através de redes sem fios, a WEP utiliza a cifra de fluxo RC4 com uma chave de encriptação de 40 bits ou, no caso de algumas implementações, uma chave de encriptação de 104 bits.

Existem dois tipos de autenticação no IEEE 802.11: • Sistema de Autenticação Aberto (Open system authentication): É o serviço

de autenticação padrão. • Sistema de Autenticação Compartilhado (Shared key authentication):

Envolve uma chave secreta compartilhada para autenticação. No open system authentication a estação pode se associar com qualquer ponto de

acesso e captar todos os dados que são enviados sem encriptação. Isso é usado quando a facilidade de conexão é o principal objetivo, e o administrador não está preocupado com a segurança.

A shared key authentication provê um nível mais alto de autenticação. A chave secreta reside em cada estação.

O protocolo 802.11 não especifica como se distribui as chaves entre as estações.

Para a verificação e autenticação de identidade, a IEEE 802.11 define os sub-tipos de autenticação de sistema aberto e por chave partilhada:

459 As formas de proteção mais comuns encontradas nos roteadores são: WEP, WPA e WPA2. 460 Atualmente, a maioria dos programas armazena dados relativos à sua execução, e deseja acessar a rede para mandá-los aos programadores (não significa que são programas maliciosos; este acesso visa informar uma série de parâmetros: estatísticas gerais; operações mal aucedidas; etc). Cabe ao usuário decidir (se existe o firewall) se poderão acessar a rede ou não. O firewall impede também acessos oriundos da rede.

• A autenticação de sistema aberto não fornece, na realidade, a autenticação; apenas efetua a verificação de identidade através da troca de mensagens entre usuário (sem fios) e o receptor (ponto de acesso sem fios).

• A autenticação por chave partilhada fornece a autenticação verificando se o usuário tem conhecimento de um segredo partilhado. De acordo com a norma 802.11, assume-se que o segredo partilhado é enviado para o ponto de acesso sem fios através de um canal seguro.

Para melhorar a segurança e a conectividade, não se deve utilizar a autenticação

por chave partilhada; esta é menos segura do que a autenticação de sistema aberto, porque requer a troca de uma chave secreta partilhada por todos os pontos de acesso e usuário sem fios, sendo assim mais vulnerável a tentativas maliciosas de decodificação de texto. Além disso, se se utilizar a autenticação por chave partilhada para uma rede com vários pontos de acesso sem fios, pode-se perder a ligação a ela quando se passar de um ponto a outro de acesso sem fios. Isto ocorre porque a chave de rede deixará de corresponder à chave partilhada utilizada por todos os pontos de acesso sem fios.

12.2.3 – Encriptação WEP

Redes sem fio (wireless) como a IEEE 802.11b possuem um conjunto adicional

de elementos de segurança chamado WEP (Wired Equivalent Privacy). que não está disponível em sistemas de cabos. O WEP oferece segurança média em redes.461

12.2.3.1 – O Protocolo WEP em Redes Wireless Este é um protocolo de camada dois (camada de enlace) que fornece segurança

aos dados na transmissão de informações entre o usuário e o ponto de acesso (ele provê segurança apenas na parte wireless da rede).

Posição do protocolo WEP no sistema de comunicações

12.2.3.2 – Autenticação no Protocolo WEP

O protocolo WEP utiliza uma técnica de autenticação criptografada que se baseia no conceito de chave compartilhada. Isso quer dizer que para que o usuário seja autenticado e possa acessar a rede, ele tem conhecer a chave que o PA (ou AP – Access Point) utiliza para criptografar as mensagens. 461 Este é um protocolo que oferece certas vulnerabilidades. Mesmo assim, ainda é muito usado.

Autenticação no protocolo WEP

O WEP foi construído originalmente para atender as seguintes necessidades: • Confiabilidade. • Auto-sincronização: para entradas e saídas de áreas de sinal. • Eficiência computacional: é construído para funcionar tanto em hardware

quanto em software. • Exportabilidade: pode ser usado em vários padrões. • Opcionalidade: não é de uso obrigatório, apenas para manter

compatibilidades entre padrões.

O WEP utiliza a mesma chave para encriptar e desencriptar os pacotes. Além disso, a mesma chave que é utilizada para encriptar e desencriptar é também utilizada para autenticar uma estação. Ter a mesma chave para encriptar e autenticar é considerado um risco de segurança.

Se o WEP é ativado, o adaptador de rede codifica o pacote de dados (cabeçalho e corpo) de cada frame462 802.11 antes da transmissão, usando uma chave fixa que deve estar configurada no Access Point, e faz a decodificação no momento da recepção do frame. WEP somente codifica dados entre estações 802.11. Uma vez que os dados tenham sido recebidos, o WEP não é mais aplicado.

WEP

Dois processos são aplicados sobre o texto puro. Um é o processo de

encriptação; o outro é um processo que visa proteger contra alterações não autorizadas do texto durante a transmissão.

462 Quadro.

A chave secreta tem 40 bits e é concatenada com um Vetor de Inicialização (IV) de 24 bits, formando a chave composta,463 a qual é inserida no algoritmo de PRNG (Pseudo-random Number Generator). O PRNG é o componente mais crítico do processo WEP, já que é o verdadeiro responsável pela encriptação. Ele é baseado no algoritmo RC4. Sua saída é uma seqüência pseudo-aleatória de bits, baseada na chave composta. Esta saída é utilizada para encriptar o texto puro através de uma operação binária XOR.

O resultado da encriptação é do mesmo tamanho do texto puro. A este resultado é concatenado, no início do pacote, o Vetor de Inicialização, e no final do pacote, 4 bytes (32 bits), que são o resultado de um processo de ICV (integrity check value). O algoritmo de ICV é o CRC32. Esse conjunto, texto encriptado, IV e ICV são enviados pelo canal inseguro. O CRC32 é utilizado para proteger os dados contra uma modificação não autorizada.

A estação-destino, que já sabe o valor da chave secreta, usa o IV que vem no inicio do pacote para criar a mesma string gerada pelo PRNG e desencriptar o texto cifrado. Então ela roda o CRC32 sobre esse texto desencriptado e recebe um novo valor de ICV; compara então esse novo valor de ICV com o valor que veio no final do pacote transmitido. Se os valores forem diferentes o pacote é descartado, pois a sua integridade foi quebrada. A chave WEP é utilizada para alimentar um encriptador que irá gerar uma keystream (chave de fluxo) do tamanho da mensagem a ser transmitida. A encriptação da mensagem é realizada através de uma operação XOR da keystream com a mensagem a ser transmitida. Este método não provê autenticação mútua. Isso significa que o usuário (estação final) não autentica o PA; com isso, ele não tem garantia de que está se comunicando com o PA desejado. Essa técnica de autenticação unilateral não é segura, porque é muito vulnerável a inúmeros ataques, incluindo o conhecido man-in-the-middle.

12.2.3.3 – Vulnerabilidades da WEP com Cifra de Dados A codificação WEP é o método como os dados que trafegam na WLAN464 que

utiliza o protocolo WEP são encriptados. O algoritmo utilizado é o RC4. Como o stream cipher possui uma vulnerabilidade, que é a que para uma mesma mensagem existe um único código associado, isso implica em que uma monitoração da rede bem realizada, utilizando softwares especialistas, pode quebrar o sistema. Alternativas para melhorar o stream-cipher: 1. Vetor de Inicialização: a técnica do vetor de inicialização utiliza um vetor adicional de 24 bits que é concatenado com a chave WEP, formando uma nova chave alimentadora do algoritmo de encriptação, que pode ter 64 ou 128 bits, dependendo do tamanho da chave WEP utilizada (40 ou 104 bits).

463 O vetor de inicialização estende a vida da chave secreta e provê a auto-sincronização do algoritmo. A chave secreta continua constante, mas o IV se altera periodicamente, podendo variar a cada envio de pacote. 464 WLAN ou Wireless LAN ou WLAN (Wireless Local Area Network) é uma rede local que usa ondas de rádio para fazer uma conexão Internet ou dentro de uma rede (intra-rede).

Funcionamento do stream cipher utilizando o Vetor de Inicialização.

O vetor de inicialização é mandado no cabeçalho da mensagem, sem

codificação, para que a estação que recebe o quadro possa colocar o vetor na sua chave WEP, conseguindo assim decodificar a mensagem enviada.

A principal vulnerabilidade desse método é o fato do vetor ser mandado sem encriptação no quadro da mensagem, e assim pode ser capturado por um invasor. Por isso, a quantidade de bits efetivos utilizada é 40 ou 104 bits.

2. Modos de Realimentação (Feedback Modes): essa técnica é feita através da divisão da mensagem em tamanhos menores, geralmente iguais. A primeira chave para a codificação é a chave WEP. As próximas chaves a serem utilizadas na codificação são as mensagens codificadas, geradas e transmitidas anteriormente. Isso dificulta o ataque de análise de pacotes, visto que a chave WEP não está fixa.

Esquema de funcionamento do streamcipher com realimentação.

12.2.3.4 – Vulnerabilidades do Protocolo WEP

1. Uso de chaves WEP estáticas: o uso prolongado de uma mesma chave facilita uma invasão. Este problema se deve ao fato de o WEP não ter uma ferramenta de gerência de chaves. Assim, se uma delas for roubada, o sistema fica comprometido para todos os usuários que compartilham essa chave. Além disso, como todas as estações compartilham a mesma chave, uma grande quantidade de informações ficaria disponível ao invasor.

2. Autenticação unilateral: somente a estação remota se autentica no PA. Essa autenticação é conhecida como unilateral, pois somente um dos lados da comunicação se autentica. Pode existir um PA não autorizado na rede, e este, se passando por um PA autorizado, pode recebe informações da rede.

3. Não existe autenticação de usuário: a autenticação no WEP ocorre ao nível da estação, ou seja, as estações que possuem a chave correta conseguem se autenticar. Mas, mesmo que a estação seja autenticada, o usuário não é; com isso, qualquer usuário

que tenha acesso a uma estação que possua a chave correta consegue se autenticar na rede, seja ele um usuário autorizado ou um invasor.

4. Vetor de inicialização mandado sem criptografia: o vetor de inicialização no WEP possui 24 bits mandados sem criptografia para o AP; eles são utilizados para inicializar a geração da chave utilizada para criptografia. Além de serem muito poucos, mandá-los sem criptografia é perigoso, porque os pacotes transmitidos na rede podem ser interceptados, e assim esses bits são facilmente obtidos.

5. O vetor de inicialização é parte da chave usada pelo RC4: o fato do vetor de inicialização ser parte da chave usada pelo RC4 na criptografia das mensagens faz com que, se um invasor consegue capturar e analisar pacotes transmitidos, e assim pegar o vetor, ele pode descobrir a chave utilizada.

6. Integridade dos dados de baixa qualidade: o fato do CRC (Cyclic Redundancy Check) ser criptografado apenas pela chave compartilhada faz com que, se esta for quebrada, os ataques ativos possam ser mais destruidores, porque o invasor pode alterar o conteúdo das mensagens recalculando o valor do CRC e alternando-o no pacote, que será aceito pelo PA. Além disso, a integridade dos dados de baixa qualidade é vulnerável a ataques hackers.

Apesar das falhas e das vulnerabilidades, WEP é melhor que nada; pelo menos, proporciona um nível mínimo de segurança.

12.2.3.5 – Privacidade O WEP utiliza a mesma técnica de criptografia empregada na autenticação do

usuário (RC4) para a privacidade dos dados. Para manter a confiabilidade destes dados, o protocolo utiliza uma chave simétrica por pacote, ou seja, o usuário gera uma chave aleatória e informa ao PA. A partir desta chave e da própria chave WEP compartilhada eles vão gerar uma nova chave, que será usada no algoritmo RC4 para criptografar/descriptografar as mensagens. A partir do vetor de inicialização, os dois lados irão gerar uma chave por pacote que deve ser simétrica; porém, em nenhum momento ela é transmitida.

12.2.3.6 – Tamanho das Chaves O WEP suporta chaves de criptografia de 40 ou 104 bits, além dos 24 bits

utilizados no IV, totalizando chaves de 64 ou 128 bits.

Privacidade WEP utilizando o algoritmo RC4.

12.2.3.7 – Integridade

Deve-se garantir a integridade das informações transmitidas entre o usuário e o AP. Nos ataques ativos, o invasor pode alterar o conteúdo das informações (por exemplo, no caso do man-in-the-middle); cabe então ao protocolo verificar a integridade da mensagem, e caso esta seja suspeita, deve ser descartada. O protocolo utiliza o CRC (Cyclic Redundancy Check) para garantir a integridade dos dados.

O CRC-32, ou seqüência de checagem de quadro, é calculado a cada pacote antes deste ser transmitido. Esse pacote já com o CRC é criptografado a partir do RC4 e enviado ao AP. No AP, o pacote será descriptografado, havendo um novo cálculo de CRC, que deve ser igual ao transmitido no pacote. Caso os valores não sejam idênticos, o pacote será descartado.

12.2.4 – Acesso Protegido Wi-FI

O Acesso Protegido Wi-Fi (Wi-Fi Protected Access – WPA) é uma tecnologia de segurança de rede sem fios desenvolvida pela Wi-Fi Alliance. Ele reforça as fraquezas criptográficas do WEP e introduz um método de gerar e distribuir automaticamente chaves de encriptação.

A solução também introduz uma verificação de integridade dos dados para impedir que um invasor possa modificar pacotes com informações prestes a serem transmitidas. Para melhorar a autenticação do usuário ao nível da empresa, essa funcionalidade efetua a autenticação de todos os usuários na rede, impedindo simultaneamente que eles possam aderir a redes não controladas.

O WPA é uma resposta prática às vulnerabilidades de WEP com base em tecnologias disponíveis; oferece compatibilidade com 802.11i e com soluções 802.11 já existentes.

12.2.5 – Autenticação 802.1X A 802.1X é uma norma IEEE para o acesso autenticado a redes Ethernet com

fios e redes 802.11 sem fios. Essa norma fornece suporte para a identificação do usuário, autenticação, gestão de chave dinâmica e gestão de contas centralizadas. Além disso, melhora a segurança, permitindo que um computador e uma rede autentiquem um ao outro, gerando uma chave por usuário/por sessão para encriptar dados através de ligações sem fios, e permite alterar as chaves de forma dinâmica.

12.2.6 – Métodos de Autenticação EAP A autenticação 802.1X utiliza o Protocolo de Autenticação Extensível (Extensible Authentication Protocol – EAP) para a troca de mensagens durante o processo de autenticação. Com ele, é utilizado um método de autenticação arbitrário, como senhas, cartões SmartCard ou certificados, para autenticar a ligação sem fios. O suporte fornecido por 802.1X para tipos de EAP permite-lhe utilizar qualquer um dos seguintes métodos de autenticação:

• EAP-Transport Level Security (EAP-TLS): utiliza certificados para a autenticação de Servidor e cartões SmartCard ou certificados para a autenticação de usuário e computador cliente.

• O EAP protegido com EAP-protocolo de autenticação Challenge Handshake da Microsoft v.2 (PEAP com EAP-MS-CHAPv2), que utiliza certificados

para a autenticação de Servidor e credenciais (nome de usuário e senha) para a autenticação de usuário.

• O PEAP com EAP-TLS, que utiliza certificados para a autenticação de Servidor e cartões SmartCard ou certificados para a autenticação de usuário e computador cliente.

As chaves de sessão geradas durante o processo de autenticação PEAP fornecem

as chaves de encriptação WEP que encriptam os dados enviados entre usuário sem fios e pontos de acesso sem fios. Além disso, o PEAP suporta re-ligação rápida. Isso permite a usuários em trânsito uma ligação à rede sem fios contínua, mesmo quando atravessam pontos de acesso sem fios diferentes na mesma rede (desde que cada ponto de acesso sem fios esteja configurado como um usuário do mesmo Servidor IAS). Se se implementar tanto o PEAP como o EAP não protegido pelo PEAP, não se deve utilizar o mesmo tipo de autenticação EAP com e sem PEAP.465 Implementar métodos de autenticação do mesmo tipo, um com e o outro sem a proteção PEAP, cria uma vulnerabilidade de segurança.

12.2.7 – Suporte IAS Para Autenticação 802.1X

Para melhorar a segurança e a implementação de redes sem fios pode-se utilizar 802.1X com IAS, que é a implementação da Microsoft de um Servidor de Serviço de Usuário de Ligação Telefónica por Autenticação Remota (Remote Authentication Dial-in User Service – RADIUS,) e Servidor proxy. Quando o RADIUS é implementado, os pontos de acesso sem fios configurados como usuários utilizam este protocolo para enviar pedidos de ligação e mensagens de gestão de contas para um Servidor RADIUS central. O Servidor RADIUS, com base em dados de contas de usuário, concede autorização e processa o pedido de ligação.

12.3 – Outras Tecnologias de Redes Outras tecnologias de redes são: PAN; WLAN; HiperLAN; HomeRF; Bluetooth;

WPA; WPA2. 12.3.1 – Personal Area Network (PAN)

As redes pessoais são redes de dispositivos (computadores, PDAs, celulares, wearables466, etc), em sua maioria equipamento móvel e sem fio, com um pequeno alcance, de até 45 metros no máximo.

As PANs podem ser formadas por dispositivos que utilizam uma infraestrutura, móvel ou não, ou dispositivos ad-hoc, ou seja, que não necessitam de infraestrutura.

12.3.2 – IEEE802.11b (WLAN)

Este é um padrão projetado pelo IEEE (Institute of Electrical and Eletronics Engineers). E é um dos mais recentes padrões de redes sem fio. Ele tem as seguintes características:

• Teoricamente, pode alcançar até 11 Mbps de velocidade. 465 Por exemplo, se se implementar o PEAP com a EAP-TLS (PEAP-EAP-TLS), não se deve implementar também a EAP-TLS sem PEAP. 466 Dispositivos computadorizados usados no corpo.

• Tem conexão peer-to-peer ou baseada num ponto fixo de acesso. • Opera na freqüência de 2,4GHz. • Funciona com os dois métodos de espalhamento na freqüência: O FHSS

(Frequency Hopping Spread Spectrum) e DSSS (Direct Sequence Spread Spectrum).

• Funciona com infravermelho (mas não utiliza nenhum dos dois métodos anteriores).

• Utiliza o protocolo de acesso CSMA-CA (Carrier Sense Multiple Access with Collision Avoidance).

• Usa WEP para autenticação e privacidade.

12.3.3 – HiperLAN

O HiperLAN (High Performance Radio LAN) é um protocolo de quatro tipos (WLAN, ATM WLL, WATM), criado pelo ETSI (European Telecommunications Standarts Institute) .

O HiperLAN possui as seguintes características: • Opera em faixas altas de velocidade (faixa de freqüência de 5 GHz). • Implementa os requisitos de QoS. • Autenticação e Criptografia através do WEP.

12.3.4 – HomeRF Esse é um padrão desenvolvido pelo HomeRF Working Group. É um protocolo

voltado para redes domésticas, que opera em redes ad-hocs, ou pode operar como ponto de acesso central em pequenas redes profissionais. Caso exista tráfego de voz, deve-se montar a rede HomeRF sobre uma estrutura que permita um roteamento ligeiro.

Características principais: • Opera na faixa de freqüência de 2,4 GHz. • Utiliza método de espalhamento de f reqüência FHSS. • Opera em distâncias até 45 metros. • Autenticação e Criptografia através do WEP. 12.3.5 – Bluetooth Este protocolo foi criado pela Bluetooth Working Group. É de baixo custo,

sendo utilizado no mercado de redes sem fio, principalmente em redes pessoais. Características principais:

• Velocidade até 1Mbps. • Opera no espectro de freqüência de 2,4GHz. • Utiliza o método FHSS. • Autenticação e Criptografia através do WEP. 12.3.6 – Wi-Fi Protected Access (WPA)467 O WPA é um protocolo de comunicação via rádio. É um protocolo WEP

melhorado. Conhecido também como WEP2, ou TKIP (Temporal Key Integrity Protocol), essa primeira versão do WPA (Wi-Fi Protected Access) surgiu de um esforço no sentido de combater vulnerabilidades do WEP. É baseado no padrão IEEE 802.11.

Pode-se utilizar WPA numa rede híbrida que tenha WEP instalado. Assim,

migrar para WPA requer somente atualização de software. O WPA foi projetado para ser compatível com o próximo padrão IEEE 802.11i.

12.3.6.1 – A Segurança WPA O WPA aumenta o nível de proteção dos dados, porque ajuda na prevenção de

invasões de vírus, de acessos não autorizados, ou então impede a destruição de informações pessoais. Melhora também a criptografia dos dados, ao utilizar um protocolo de chave temporária (TKIP) que possibilita a criação de chaves por pacotes, além de possuir função detectora de erros (chamada Michael), um vetor de inicialização de 48 bits (ao invés de 24, como no WEP) e um mecanismo de distribuição de chaves.

Uma outra vantagem é a melhoria no processo de autenticação de usuários. Essa autenticação utiliza o 802.11x e o EAP (Extensible Authentication Protocol), que através de um Servidor de autenticação central faz a autenticação de cada usuário, antes desse usuário ter acesso à rede.

Cada usuário tem uma senha exclusiva, a qual deve ser digitada no momento da ativação do WPA. No decorrer da sessão, a chave de criptografia será trocada periodicamente, de forma automática. Assim, torna-se bastante mais difícil que um usuário não-autorizado consiga se conectar à WLAN.

A chave de criptografia dinâmica é uma das principais diferenças do WPA em relação ao WEP, que utiliza a mesma chave repetidamente. Esta característica do WPA também é conveniente, porque, ao contrário do WEP, não exige a digitação manual das chaves de criptografia.

12.3.6.2 – WPA2 / IEEE 802.11i (Wi-Fi Protected Access-2) O WPA2 (Wi-Fi Protected Access 2) é uma certificação de produto fornecida

pela Wi-Fi Alliance, que certifica o equipamento sem fio quanto à compatibilidade com o padrão IEEE 802.11i.

O padrão IEEE 802.11i substitui o WEP no padrão IEEE 802.11 original com um modo específico do AES, conhecido como protocolo CBC-MAC (Counter Mode Cipher Block Chaining-Message Authentication Code) ou CCMP. O CCMP oferece confidencialidade (criptografia) e integridade dos dados.

467 Ver: http://www.malima.com.br/. Também: http://pt.wikipedia.org. Igualmente: http://technet.microsoft.com/.

Implementações do WPA2:

Ponto fraco do WEP

Abordagem do WPA2

O IV (vetor de inicialização) é muito pequeno

No CCMP do AES, o IV foi substituído por um campo de Número do pacote; também duplicou em tamanho, para 48 bits.

Integridade dos dados fraca

O cálculo da soma de verificação criptografada pelo WEP foi substituído pelo algoritmo CBC-MAC do AES, que foi criado para fornecer uma integridade dos dados forte. O algoritmo CBC-MAC calcula um valor de 128 bits, e o WPA2 usa os 64 bits de ordem superior como um MIC (código de integridade da mensagem). O WPA2 criptografa o MIC com a criptografia do modo de contador do AES.

Usa a chave mestra em vez de uma chave derivada

Como o WPA e o protocolo TKIP (Temporal Key Integrity Protocol), o CCPM do AES usa um conjunto de chaves temporais derivadas de uma chave mestra e de outros valores. A chave mestra é derivada do processo de autenticação do 802.1X do EAP-TLS (Extensible Authentication Protocol-Transport Layer Security) ou do PEAP (Protected EAP).

Sem re-chaveamento

O CCMP do AES faz o re-chaveamento automatico para derivar novos conjuntos de chaves temporais.

Sem proteção contra re-execução

O CCMP do AES usa um campo de Número do pacote como contador para fornecer proteção contra re-execução.

12.3.6.3 – Chaves Temporais do WPA2 Ao contrário do WEP, que usa uma única chave para a criptografia de dados em

unicast468, e normalmente uma chave separada para a criptografia de dados em multicast 469e de difusão, o WPA2 usa um conjunto de quatro chaves diferentes para cada par de AP-sem-fio/cliente-sem-fio (conhecidas como chaves temporais emparelhadas) e um conjunto de duas chaves diferentes para o tráfego multicast e de difusão.

O conjunto de chaves emparelhadas usadas para dados em unicast e EAP por mensagens de chave EAPOL da LAN consiste no seguinte:

• Chave de criptografia de dados – Uma chave de 128 bits usada para criptografar quadros em unicast.

• Chave de integridade de dados – Uma chave de 128 bits usada para calcular o MIC em quadros em unicast.

• Chave de criptografia EAPOL – Uma chave de 128 bits usada para criptografar mensagens da chave EAPOL.

• Chave de integridade EAPOL – Uma chave de 128 bits usada para calcular o MIC das mensagens da chave EAPOL.

O WPA2 deriva as chaves temporais emparelhadas usando um processo de

handshake de quatro vias, que é o mesmo do WPA.

468 Unicast: é o endereçamento de um pacote para um único destino, ou seja, a entrega é simples, ponto-a-ponto. 469 Multicast: é a entrega de informação para múltiplos destinatários simultaneamente, usando a estratégia em que as mensagens só passam por um link uma única vez, e somente são duplicadas quando o link para os destinatários se divide em duas direções.

12.3.6.4 – Processo de Criptografia no WPA2

O CCMP do AES usa o CBC-MAC para calcular o MIC e o modo de contador do AES para criptografar a carga do 802.11 e o MIC. Para calcular o valor de um MIC, o CBC-MAC do AES usa o seguinte processo:

• Criptografa um bloco inicial de 128 bits com o AES e a chave de integridade

de dados. Isso produz um resultado de 128 bits (Resultado1). • Executa uma operação OR (XOR) exclusiva entre Resultado1 e os 128 bits

de dados seguintes pelos quais o MIC está sendo calculado. Isso produz um resultado de 128 bits (XResultado1).

• Criptografa o XResultado1 com o AES e a chave de integridade de dados. Isso produz o Resultado2.

• Executa um XOR entre Resultado2 e os 128 bits de dados seguintes. Isso produz o XResultado2.

• As etapas 3-4 se repetem para os blocos de 128 bits adicionais dos dados. Os 64 bits de ordem superior do resultado final são o MIC do WPA2.

Processo de cálculo do MIC.

Para calcular o MIC de um quadro IEEE 802.11, o WPA2 constrói o seguinte:

• O bloco inicial é um bloco de 128 bits. • O cabeçalho MAC é o cabeçalho MAC 802.11 com os valores dos campos que

podem ser alterados em trânsito, definidos como 0. • O cabeçalho CCMP tem 8 bytes e contém o campo Número do pacote de 48 bits

e campos adicionais. • Os bytes de preenchimento (definidos como 0) são adicionados para garantir que

a parte do bloco de dados inteiro até os dados de texto sem formatação seja um número integral de blocos de 128 bits.

• Os dados são a parte de texto sem formatação (não criptografados) da carga do 802.11.

• Os bytes de preenchimento (definidos como 0) são adicionados para garantir que a parte do bloco de dados do MIC que inclui os dados de texto sem formatação seja um número integral de blocos de 128 bits.

Ao contrário da integridade de dados do WEP e do WPA, o WPA2 fornece integridade de dados para o cabeçalho do 802.11 (exceto os campos alteráveis) e a carga do 802.11. O bloco inicial para o cálculo do MIC consiste no seguinte:

• O campo Sinalizador (8 bits) é definido como 01011001 e contém vários sinalizadores, como um sinalizador que indica que o MIC usado no quadro 802.11 tem 64 bits de comprimento.

• O campo Prioridade (8 bits) é reservado para finalidades futuras e é definido como 0.

• O Endereço de origem (48 bits) é do cabeçalho MAC 802.11. • O Número do pacote (48 bits) é do cabeçalho CCMP. • O comprimento dos dados de texto sem formatação em bytes (16 bits).

O algoritmo de criptografia do modo de contador do AES usa o seguinte

processo: • Criptografa um contador inicial de 128 bits com o AES e a chave de criptografia

de dados. Isso produz um resultado de 128 bits (Resultado1). • Executa uma operação OR (XOR) exclusiva entre Resultado1 e o primeiro bloco

de 128 bits dos dados que estão sendo criptografados. Isso produz o primeiro bloco criptografado de 128 bits.

• Incrementa o contador e o criptografa com o AES e a chave de criptografia de dados. Isso produz o Resultado2.

• Executa um XOR entre Resultado2 e os 128 bits de dados seguintes. Isso produz o segundo bloco criptografado de 128 bits.

• O modo de contador do AES repete as etapas 3-4 para os blocos de 128 bits adicionais de dados, até o bloco final. Para o bloco final, o modo de contador do AES executa o XOR do contador criptografado com os bits restantes, produzindo dados criptografados do mesmo comprimento que o último bloco de dados.

Processo do modo de contador do AES

O valor inicial do contador do modo de contador do AES consiste no seguinte:

• O campo Sinalizador (8 bits) é definido como 01011001, que é o mesmo valor de Sinalizador usado para o cálculo do MIC.

• O campo Prioridade (8 bits) é reservado para finalidades futuras e é definido como 0.

• O Endereço de origem (48 bits) é do cabeçalho MAC 802.11. • O Número do pacote (48 bits) é do cabeçalho CCMP. • O campo Contador (16 bits) é definido como 1 e será incrementado apenas se

uma carga do 802.11 for fragmentada em cargas menores. Observe que este campo Contador não é o mesmo que o valor do contador de 128 bits usado no algoritmo de criptografia do modo de contador do AES.

Para criptografar um quadro de dados em unicast, o WPA2 usa o seguinte processo: • Insere o bloco inicial, o cabeçalho MAC 802.11, o cabeçalho CCMP, o

comprimento dos dados e campos de preenchimento no algoritmo CBC-MAC com a chave de integridade de dados para produzir o MIC.

• Insere o valor do contador inicial e da combinação dos dados com o MIC calculado no algoritmo de criptografia do modo de contador do AES com a chave de criptografia de dados para produzir os dados criptografados e o MIC.

• Adiciona o cabeçalho CCMP contendo o Número do pacote à parte criptografada da carga do 802.11 e encapsula o resultado com o cabeçalho e as informações finais do 802.11.

A figura a seguir mostra o processo de criptografia do WPA2 para um quadro de

dados em unicast.

Para descriptografar um quadro de dados em unicast e verificar a integridade dos dados, o WPA2 usa o seguinte processo:

• Determina o valor do contador inicial a partir dos valores nos cabeçalhos do 802.11 e do CCMP.

• Insere o valor do contador inicial e a parte criptografada da carga do 802.11 no algoritmo de descriptografia do modo de contador do AES com a chave de criptografia de dados para produzir os dados descriptografados e o MIC. Para a descriptografia, o modo de contador do AES executa o XOR do valor do contador criptografado com o bloco de dados criptografados, produzindo o bloco de dados descriptografados.

• Insere o bloco inicial, o cabeçalho MAC 802.11, o cabeçalho CCMP, o comprimento dos dados e campos de preenchimento no algoritmo CBC-MAC do AES com a chave de integridade de dados para calcular o MIC.

• Compara o valor calculado do MIC com o valor do MIC não criptografado. Se os valores do MIC não corresponderem, o WPA2 descartará os dados silenciosamente. Se os valores do MIC corresponderem, o WPA2 passará os dados para as camadas de rede superiores para processamento.

A figura a seguir mostra o processo de descriptografia do WPA2 para um quadro de dados em unicast.

12.3.7 – Redes Tolerantes a Atrasos e Desconexões (Delay Tolerant Networks – DTN)

Os mecanismos tradicionais de segurança não funcionam nestes tipos de rede, porque necessitam de comunicação da origem ao destino, o que nem sempre é possível na DTN. Um novo mecanismo de segurança baseado em trocas de chaves assimétricas foi proposto, sendo que a troca de chaves ocorre em cada contato realizado pelos nós da rede.470

12.4 – A Segurança das Senhas Compartilhadas

Em geral, quando uma rede é implantada, esta implantação costuma seguir sistemas que usam scripts ou imagens de instalação. Além disso, provavelmente todas as estações de trabalho e servidores possuem o mesmo nome de conta de administrador, com senha de oito caracteres, a qual dificilmente é mudada após a implantação do sistema.

Em alguns casos, o administrador pode querer seguir as práticas recomendadas ou os requisitos de conformidade estabelecidos,471 quando se vê frente a alguns casos possíveis de quebra de segurança. De todo modo, a questão de lidar com a alteração regular de senhas para contas compatilhadas e com privilégios, (conta interna ou conta raiz,472 conta firecall,473 ou conta de processo474) é um problema que afeta cada vez mais os administradores.

Para lidar com este problema, alguns fatores devem ser levados em conta, tais como o tempo de uso da senha ou o seu comprimento. A segurança de uma senha diminui na proporção de seu tempo de uso, o que leva à conclusão de que as senhas devem ser mudadas regularmente. E quando criadas ou mudadas, deve se levar em consideração que, quanto mais longa, mais segura é a senha. Devem ser evitadas senhas óbvias, tais como iniciais do nome próprio, datas de nascimento ou de aniversário, nomes de pessoas conhecidas, etc. 470 FERNANDES, Rafael. M. S. In: http://www.ravel.ufrj.br/arquivosPublicacoes/dissertacao_rmsf.pdf. 471 Por PCI DSS (Payment Card Industry Data Security Standard) ou pela SOX (Sarbanes-Oxley). 472 Conta interna de administrador ou conta raiz é a que vem em toda versão do Windows, Linux e UNIX, tendo sempre o mesmo SID (Identificador de Segurança) ou UID (Identificador de Usuário). 473 Conta firecall é uma conta criada para facilitar o acesso de emergência em um sistema seguro. É usada por usuários sem privilégios para obter acesso a sistemas importantes, quando surgem problemas. 474 Conta de processo é a conta usada para executar serviços, tarefas, aplicativos COM+ e itens incorporados, como scripts e outros arquivos binários que exigem Logon.

No caso de senhas compartilhadas, a segurança é tanto menor quanto mais pessoas a conheçam. Se alguém sai do grupo de acesso, a senha deve ser mudada imediatamente, e todos que a detenham devem negar esta informação às pessoas de fora. 12.4.1 – O Comprimento das Senhas

A Microsoft implementa dois tipos de hash para as senhas: hashes LM e hashes MD4. Por padrão, é usado o hash LM, e os valores são armazenados para todas as senhas de até 14 caracteres. Essas senhas são divididas em dois valores de sete caracteres: o primeiro valor para os sete primeiros caracteres, e o segundo para os outros sete. Desse modo, é importante saber o tamanho da senha que está sendo utilizada: senhas com menos de sete caracteres; senhas com oito a 14 caracteres; senhas com 15 ou mais caracteres de comprimento.475

Se a senha tiver apenas sete caracteres, ela deverá estar contida em um único hash LM. Com oito, o oitavo caracter faz com que ela seja dividida em dois valores de hash LM. O problema é que os hashes LM são muito fáceis de contornar. Seu único objetivo é ajudar a manter a compatibilidade com versões anteriores. Com senhas longas de pelo menos 15 caracteres ou maiores,476 por definição, elas não geram um hash LM. Além disso, elas podem anular a eficiência das Rainbow Tables. 12.4.1.1 – RainbowCrack e Rainbow Tables

Em 1980 Martin Hellman descreveu uma técnica chamada conflito criptanalitico tempo-memória (cryptanalytic time-memory trade-off), a qual reduzia o tempo de criptoanálise pelo uso de dados pré-calculados armazenados na memória. A técnica foi aperfeiçoada por Rivest com a introdução de pontos distintos que reduziam drasticamente o tempo de busca na memória.

Após algum tempo, surgiu uma implementação feita pelo suíço Philippe Oeschjlin, do Laboratório de Segurança e Criptografia de Lausanne, a técnica rápida de conflito criptanalitico tempo-memória (faster time-memory trade-off technique). A idéia era otimizar os processos existentes de modo que, com uma tabela de 1,4 Gb, fosse possível quebrar 99,6% das senhas alfanuméricas do Windows em poucos segundos.

Resumidamente, a técnica de Oeschlin resolve o problema do excesso de hashes guardados, criando uma tabela com intervalos. Por exemplo, definido um intervalo com 1.000 iterações, armazena-se apenas a primeira senha e o hash da milésima. A seguir, armazena-se a 1.001a senha e o hash da 2.000ª, e assim por diante. Para localizar a senha desejada basta, ao chegar ao hash mais próximo existente e calcular no máximo os 1.000 hashes intermediários.

Por meio desta redução, uma tabela com 7 trilhões de hashes (7,5 Gb) resolve todos os cinco octilhões (5x1018) de senhas com até 14 caracteres, produzidas pelas letras maiúsculas, minúsculas, números e os 33 símbolos presentes nos teclados.

Como os hashes estão sempre entre 128 e 256 bits, sendo o mais comum o de

112 bits, então, aproveitando o aumento da capacidade de processamento e

475 O modo de impedir que o Windows armazene um LM hash da senha é usar uma que tenha pelo menos 15 caracteres. Nesse caso, o Windows armazena um valor de LM hash que não pode ser usado para autenticar o usuário. 476 Uma boa diretiva consiste em impor o uso de letras em Caixa Alta e Baixa, assim como caracteres numéricos e caracteres especiais.

armazenamento, seria possível pré-calcular todos os hashes possíveis, e armazenar os resultados em arquivos chamados rainbow tables. Estes arquivos possuem um espaço de caracteres, com todas as variações alfa-numéricas possíveis.

Este método tem dois problemas: A colisão e o loop.477 Isso faz com que o

algoritmo de busca se perca, se não houver rotinas que possam prever essa ocorrência. Entretanto, estas rotinas reduzem bastante a performance. Como não é possível obter uma senha a partir de um hash, é necessário criar uma função qualquer que faça um mapeamento entre os dois, e é exatamente esta função que sofre com os casos de colisão e loop. O método Rainbow define uma função distinta para cada intervalo, criando milhões de funções que, por serem diferentes entre si, dificilmente vão mapear valores que colidam ou entrem em loop.

Vários softwares foram desenvolvidos a partir destas idéias (“quebrar” funções

hash), sendo que Oeschlin desenvolveu os seguintes: RainbowCrack;478 OPHCRACK.479

O Ophcrack é um “quebrador” (cracker) de senhas Windows. Ele quebra tanto

hashes LM quanto NTLM.480

Esquema de funcionamento do Ophcrack

Há várias maneiras de criar Rainbow Tables para lidar com algoritmos

diferentes. Mas elas são apenas uma lista pré-calculada de todos os hashes LM que possuem de 0 a 14 caracteres. Os hashes LM podem ser extraídos em poucos segundos, usando ferramentas gratuitas encontradas na Internet.481 Com o uso das Rainbow Tables, os hashes são pesquisados para determinar a senha.

477 A colisão ocorre quando duas senhas possuem o mesmo hash. O loop surge quando dois hashes podem ser mapeados para a mesma senha. 478 Ver: http://www.antsight.com/zsl/rainbowcrack/. 479 Ver: http://ophcrack.sourceforge.net/. 480 NTLM = (Windows) NT LAN Manager = protocolo de autenticação da Microsoft. 481 Por exemplo, pwdump. Este é o nome de vários programas sob plataforma Windows, capazes de fornecer os hashes de senhas LM e NTLM das contas de usuários de um SAM (Security Account Manager). O pwdump permite capturar hashes de computadores remotos rodando Windows. A maioria

Outros softwares disponíveis para uso com as Rainbow Tables são:

• Cain & Abel: é um dispositivo recuperador de senhas para operação com sistemas da Microsoft. Ele permite recuperar várias espécies de senhas usando métodos variados, tais como: pesquisa de rede (sniffing the network), método do dicionário (cracking encrypted passwords using Dictionary), uso da força-bruta (Brute-Force) e ataque por criptoanálise, gravação de conversações VOIP (recording VoIP conversations), decodificação de senhas (decoding scrambled passwords), recuperando senhas (revealing password boxes, uncovering cached passwords) e analisando protocolos de roteamento (analyzing routing protocols).

• L0phtcrack ou LC5; • LCP.

Atualmente, este é um dos métodos mais usados usados para invadir computadores.482 O problema é que a presunção de que as senhas possam ser consideradas “seguras” talvez seja exagerada.

Por exemplo, suponha-se que alguém crie uma senha do tipo abaixo, e a considere “segura”:

QwEr895#*4rfdPf Submetendo-se esta senha ao site da Ophcrack483, em menos de dois segundos é

calculado o hash:484

2348d22b5f2a93560416b13b2d2e3bc1:12473970d090f7cba6a88713fd5ce094 Para aumentar a segurança e evitar ataques com as Rainbow Tables, é recomendável utilizar pass-phrases com letras acentuadas (se possível) e espaço. Por exemplo, as pass-phrases:

“nãotente meque” (“não tente me quebrar”) “pão e circo”

Por causa da acentuação, elas são imunes aos ataques com as Rainbow Tables.485

Por outro lado, se o caracter acentuado não for usado, em “naotente meque” é encontrado o hash:486

ffcb4cedaa3e005e50a2879dd30e125c:3d767275af8cbafe07e94ba1c1c2eb15 ,

dos programas anti-vírus pode detectar estes programas (esta ameaça é conhecida como Hacktool Pwdupm). 482 Ele usa hashes LM como meio de exploração para quebrar as senhas. 483 Ver: http://www.objectif-securite.ch/en/products.php?password=space#Demo. O programa Winrtgen permite criar Rainbow Tables; com ele se pode criar tabelas com as hashes desejadas. 484 Ou vice-versa: submetendo o hash, o programa calcula a senha. 485 Entretanto, senhas simples como (p. ex.) “pão e circo” também são imunes. 486 Em alguns sistemas de autenticação bancária costumam ser usados teclados virtuais, em que os caracteres não são acentuados. Se esta for a única barreira de segurança, ela fica, obviamente, comprometida.

e em “pao e circo”, é encontrado o hash:

a14dfebf0f3cdb93245ce67d61573845:792e95f572ec48af6a06e7298fd6d3c5

CAPÍTULO XIII

CRIPTOGRAFIA QUÂNTICA

13.0 – Primórdios da Criptografia Quântica No final dos anos 1960 e início dos anos 1970, Stephen Wiesner publicou um artigo Conjugate Coding,487 no qual introduziu a primitiva chamada multiplexação (multiplexing), que foi o ponto de partida da criptografia quântica. Embora a sua primitiva fosse equivalente ao que foi mais tarde chamado 1-2 oblivious transfer, Wiener não percebeu a sua aplicação em criptografia.488 Em seu artigo, Wiesner explicou como a teoria quântica poderia ser usada para gerar e distribuir uma chave489 segura utilizando o Princípio de Incerteza de Heisenberg.490 13.1 – Oblivious Transfer Protocol – OT

Em criptografia, o chamado Oblivious Transfer Protocol – OTP (ou OT)491 é um protocolo de troca de mensagens no qual alguém envia alguma informação para o receptor, mas permanece sem saber (oblivious) o que é recebido. A primeira forma de OT foi apresentada por Michael O. Rabin em 1981 (ela é baseada no RSA). Neste processo, o transmissor envia a mensagem para o receptor com probabilidade ½, e permanece sem saber se o receptor recebeu a mensagem. Uma outra forma de transferência denominada 1-2 OT ou 1 out of 2 oblivious transfer foi desenvolvida em seguida por Shimon Even, Oded Goldreich e Abraham Lempel, com a finalidade de construir protocolos para computação multiparticipante segura (secure multiparty computation). Vários trabalhos teóricos tem mostrado que este protocolo tem importância fundamental para a criptografia, devido às aplicações que podem ser construídas com base nele. Ele é um complemento para a secure multiparty computation: dada uma implementação de um OT, é possível avaliar com segurança qualquer função computável de tempo polinomial (polynomial time computable function) sem qualquer primitiva adicional. 13.1.1 – Protocolo OT de Rabin

Ele é generalizado para “1 out of n oblivious transfer", em que o usuário obtém um elemento da base de dados sem que o servidor venha a saber qual elemento foi examinado. A noção última da OT é um reforço da recuperação de informação privada

487 Ver: http://arxiv.org/PS_cache/quant-ph/pdf/0610/0610193v1.pdf. 488 Além disso, o seu artigo levou cerca de dez anos para ser publicado. 489 Distribuição de Chave Quântica (Quantum Key Distribution - QKD). A criptografia quântica baseia-se em leis matemáticas (substituição, transposição, combinação e algoritmos) e em leis da física quântica. 490 Também conhecido pelo nome de Princípio de Indeterminação, foi descoberto pelo físico Werner Heisenberg. Diz que não se pode medir simultaneamente o momento (produto da massa pela velocidade) e a posição de uma partícula sub-atômica. 491 Ver: http://www.springerlink.com/content/y0n2763q65221213/. Ver também: http://en.wikipedia.org/wiki/Oblivious_transfer. Ou então: http://portal.acm.org/citation.cfm?id=1008920. [Oblivious: esquecido; desatento; olvidado].

(private information retrieval), em que ninguém se preocupa com a privacidade da base de dados.492 No OTP de Rabin, o emissor gera um módulo público RSA N=pq, em que p e q são enormes números primos, e um expoente e é relativamente primo a (p-1)(q-1). O emissor encripta a mensagem m como me mod N. O emissor envia N, e e me mod N para o receptor. O receptor pega um x randômico módulo N (random x modulo N) e envia x2 mod N para o emissor.493

O emissor encontra uma raiz quadrada y de x2 mod N e envia y para o receptor. Se o y que o emissor encontra não é x e nem -x modulo N, o receptor estará

habilitado a fatorar N e portanto decifrar me para recuperar m. Contudo, se y é x ou -x mod N, o receptor não terá nenhuma informação sobre m além da sua encriptação. Desde que cada resíduo quadrático (quadratic residue) módulo N tem quatro raízes quadradas, a probabilidade de que o receptor conheça m é de ½.

13.1.2 – 1-2 Oblivious Transfer

Neste protocolo, o emissor tem duas mensagens: m0 and m1, e o receptor tem um

bit b, e deseja receber mb, sem que o emissor conheça b; quanto ao emissor, ele quer se assegurar de que o receptor receba apenas uma das mensagens.

O emissor gera chaves RSA, incluindo o módulo N, o expoente público e e o

expoente privado d. Ele pega duas mensagens randômicas x0 e x1 e envia N, e, x0 e x1 para o receptor.

O receptor pega uma mensagem randômica k, encripta-a, soma xb a essa encriptação de k módulo N e envia o resultado para o emissor.

O emissor computa k0 para ser a desencriptação de v-x0 e similarmente, k1 para ser a desencriptação de v-x1, e envia m0+k0 e m1+k1 para o receptor.

O receptor conhece kb e o subtrai da parte correspondente da mensagem do

emissor para obter mb.

13.1.3 – 1-n Oblivious Transfer e k-N Oblivious Transfer Estes protocolos podem ser definidos como a generalização do 1-2 oblivious transfer protocol.

Especificamente, o emissor tem n mensagens, o receptor tem um índice i, e ele deseja receber a i-ésima mensagem entre as mensagens do emissor, sem que este conheça i. Quanto ao emissor, ele deseja se assegurar de que o receptor receba apenas uma das n mensagens.

Isto pode ser considerado como o efeito de adicionar um requerimento de privacidade de uma base de dados adicional, a algum protocolo de recuperação de informação privada (private information retrieval).

Esta noção foi generalizada para a noção de k-N oblivious transfer, em que o receptor obtém um conjunto de k mensagens de uma coleção de n mensagens. O

492 De acordo com Claude Crépeau, a OT de Rabin é equivalente à 1-2 oblivious transfer. 493 O MDC((x,N) = 1, com enorme probabilidade, o que assegura que há quatro raízes quadradas de x2 mod N.

conjunto de k mensagens pode ser recebido simultaneamente, ou podem ser requisitados consecutivamente, cada requisição baseada na mensagem prévia recebida. 13.2 – Chave Quanticamente Criptografada

O modo de enviar uma chave quanticamente criptografada entre emissor e receptor exige que um aparelho gere um raio laser, o qual irá transmitir fótons isolados polarizados. Estes fótons podem ser polarizados de duas maneiras. Na primeira, os os fótons são posicionados verticalmente ou horizontalmente (é o modo retilíneo). Na segunda, os fótons são orientados 45º à esquerda ou à direita da vertical (é o modo diagonal). Em ambos os casos, as posições opostas dos fótons representam os bits 0 ou 1.

A chave criptografada surge quando Alice (o emissor) envia bits494 aleatórios 0 e 1 para Bob (o receptor), que decide (aleatoriamente) o modo como irá medir os bits. Devido ao Princípio de Incerteza, Bob só pode medir os bits em um dos modos (retilíneo ou diagonal), mas não em ambos os modos. Apenas os bits que forem medidos por Bob que estiverem no mesmo modo que foi enviado por Alice estarão na direção correta, e apresentarão o valor apropriado. Após a transmissão feita por Alice, Bob se comunica com ela em canal aberto para informar qual dos dois modos usou para medir cada fóton (não revela o valor de cada bit). Alice, em seguida, informa a Bob quais dos modos foram medidos corretamente. Estes modos constituem a chave criptográfica que será utilizada entre Alice e Bob, para cifrar ou decifrar mensagens.

Se a transmissão for interceptada (por Eva), devido ao Princípio de Incerteza Eva não conseguirá medir os dois modos, e se reenviar os bits como ela os mediu de volta a Bob, inevitavelmente introduzirá erros.495 Alice e Bob podem detectar a intrusão pela comparação dos bits selecionados, para ver se contém erros.

13.2.1 – Modo Esquemático de Transmissão de Chaves496 Devido ao fato de os fótons serem polarizados, para sua transmissão Alice usa filtros polarizadores retilíneos ou diagonais, ao mesmo tempo em que registra as diferentes orientações usadas.497

Para cada fóton que recebe, Bob escolhe aleatoriamente qual canal de filtro irá usar para a detecção, e anota tanto a polarização quanto o valor do bit.

494 Ou, como são atualmente conhecidos, qubits (bits quânticos). 495 As características da física quântica que permitem estas constatações não serão apresentadas neste texto. 496 Método criado em 1989 pelos cientistas da IBM Charles Bennet, John A. Smolin e Gilles Brassard. 497 Ver: Os Segredos Mais bem Guardados. In: revista Scientific American Brasil, fev. 2005, p. 41.

Eva é impedida (por motivos quânticos) de usar ambos os filtros, e se escolher o filtro errado (para cada fóton), ela pode criar erros ou modificar a polarização. Informada por Bob sobre a seqüência de filtros que este utilizou para medir os fótons recebidos, Alice revela a ele quais filtros foram escolhidos corretamente. A seqüência de bits irá constituir a chave secreta (no exemplo acima: 00111).

13.3 – Aplicação da Criptografia Quântica A aplicação deste tipo de criptografia está ainda limitado a redes de pequeno alcance geográfico. Isto porque o sinal não pode ser opticamente amplificado ao longo do caminho (se o fosse, isto seria uma interferência que adulteraria os qubits).

Há também o problema da taxa de erros na transmissão dos fótons. Os melhores resultados são conseguidos em cabos de fibra óptica de altíssima pureza (e conseqüentemente elevadíssimo custo), alcançando atualmente cerca de 150 km de distância.498 13.4 – Criptanálise Quântica Computadores quânticos, ainda em fase de pesquisa, deverão ser capazes de realizar a critpoanálise quântica. Isto seria poss Isto seria possível através da chamada computação quântica topológica.499

498 Atualmente, esta tecnologia está sendo comercializada por várias empresas, tais como: id Quantique (Suíça); NEC (Japão); MagiQ Technologies (EUA); QinetiQ (Inglaterra). 499 Ver: Nós Quânticos na Computação. In: revista Scientific American Brasil, maio 2006, p. 49.

Como exemplo, algoritmos tais como o Algoritmo Shor poderiam fatorar enormes números em tempo polinomial, e com isso quebrar chaves públicas. Isto tornaria o sistema RSA altamente inseguro, com qualquer tamanho de chave. Sistemas como o SSL (que protegem o e-commerce) e a Internet, e o SSH (que protege sistema sensíveis de computação) estão ameaçados, porque correm o risco de se tornarem vulneráveis assim que os computadores quânticos puderem processar o Algoritmo Shor.

Usando o Algoritmo Grover, ataques pela força bruta poderiam ser tornados bastante mais rápidos, em computadores quânticos. Assim, algoritmos simétricos (como o DES ou o Twofish) ou as funções hash (como a SHA, p. ex), teoricamente mais resistentes contra ataques por computação quântica,500 mostram-se entretanto vulneráveis ao Algoritmo Grover. Em 1996 Bennett, Bernstein, Brassard e Vazirani provaram que uma busca de chave por força bruta em um computador quântico não podia ser mais rápida (em uma taxa 2n/2) comparada à computação nos casos clássicos (com uma taxa 2n).

Em outras palavras: contra a computação quântica, uma chave de n bits pode prover ao menos n/2 bits de segurança. Assim, requer-se uma chave simétrica de 160 bits (contra uma de 80 bits que resiste a ataques comuns), se o ataque vier de um computador quântico.

500 A duplicação do tamanho da chave pode aumentar a segurança.

A N E X O S

FUNÇÕES RANDOM E RANDOMIZE501

Função Rnd: essa função retorna um número maior do que zero e menor do que 1, o qual pode ser convertido para um número inteiro compreendido em uma faixa de valores especificada.

Por exemplo, suponha-se um sorteio para escolher números entre 1 e 100. Em Visual Basic – VBA, declara-se a função a seguir:

Public Function Sortear(x As Integer)

Sortear = Int((x * Rnd))+1

End Function

A função X1 é calculada da seguinte forma:

em que:

X1 = número aleatório gerado X0 = número denominado semente ou gerador a = 1140671485 c = 12820163 z = 2^24

Como para o mesmo número gerador (X0) tem-se sempre o mesmo resultado em

X1, não se pode dizer que os números sejam realmente aleatórios; por esse motivo, são chamados pseudo-aleatórios. Para evitar esta repetição, faz-se com que o número X1 gerado torne-se a semente do próximo cálculo.

Função Randomize: para tornar mais aleatória a geração dos números, usa-se

uma função que seja capaz de obter um número gerador de forma totalmente aleatória: é a função Randomize. Parâmetro: pode-se definir um número gerador especificando esse número como parâmetro, informando esse número entre parênteses, ou simplesmente não fornecer um parâmetro. Neste caso, o número utilizado como gerador será obtido pelo relógio interno do computador, tornando-se totalmente aleatório. Por exemplo:

Public Function Sortear(x As Integer)

Randomize

Sortear = Int((x * Rnd))+1

End Function

501 Ver: http://knol.google.com/k/l%C3%B3gica-em-programa%C3%A7%C3%A3o-select-case-e-a-fun%C3%A7%C3%A3o-rnd.

ALGORITMOS E SISTEMAS CRIPTOGRÁFICOS

Funções de Hash criptográfico, ou message digest: • MD5 • SHA-1 • RIPEMD-160 • Tiger

Sistemas Free/Open Source: • PGP • GPG • SSH • IPSec / Free S/WAN

Outros algoritmos: • 3-Way • ABC • Akelarre • Anubis • ARIA • BaseKing • BassOmatic • BATON • BEAR e LION • Camellia • CAST-256 • CIKS-1 • CIPHERUNICORN-A • CIPHERUNICORN-E • CLEFIA • CMEA • Cobra • COCONUT98 • Crab • Cryptomeria/C2 • CRYPTON · CS-Cipher • DEAL • DES-X • DFC • E2 • FEAL • FEA-M • FROG • G-DES • GOST • Grand Cru

• Hasty Pudding Cipher • Hierocrypt • ICE • IDEA NXT • Intel Cascade Cipher • Iraqi • KASUMI • KeeLoq • KHAZAD • Khufu e Khafre • KN-Cipher • Ladder-DES • Libelle • LOKI97 • LOKI89/91 • Lucifer • M6 • M8 • MacGuffin • Madryga • MAGENTA • MARS • Mercy • MESH • MISTY1 • MMB • MULTI2 • MultiSwap • New Data Seal • NewDES • Nimbus • NOEKEON • NUSH • Q • RC6 • REDOC • Red Pike • S-1 • SAFER • SAVILLE • SC2000 • SHACAL • SHARK • SMS4 • Spectr-H64 • Square • SXAL/MBAL

• Threefish • Treyfer • UES • Xenon • xmx • XXTEA • Zodiac

Algoritmos assimétricos ou de chave pública: • Curvas elípticas • Diffie-Hellman • DSA de curvas elípticas • El Gamal • RSA

Algoritmos simétricos: • Máquina Enigma • DES • Triple-DES • RC4 • RC5 • Blowfish • IDEA • AES • RC6

Algoritmos comuns: • AES • Blowfish • DES • Triple DES • Serpent • Twofish

Algoritmos menos comuns: • CAST-128 • IDEA • RC2 • RC5 • SEED • Skipjack • TEA • XTEA

TABELA DE CÓDIGOS ASCII

Tabela agrupada:502

502 Quando se escreve um documento HTML (ou qualquer outra linguagem baseada em SGML) é necessário especificar o Charset utilizado. Este é o conjunto de caracteres utilizados para escrever o documento. Um jogo de caracteres implica em: 1) ter um repertório com caracteres do idioma; 2) ter uma posição de referência para cada um dos caracteres no repertório. Cada caracter é identificado e localizado por este código de posição (indicado na tabela ASCII). Como a Web é acessada por pessoas do mundo inteiro, deveria existir um sistema ou tabela capaz de suprir as necessidades relativas a cada idioma. Entretanto, ao invés de criar uma tabela de caracteres para cada região, mostrou-se mais prático criar uma tabela padrão com o maior número possível de caracteres. Assim, foi criada a tabela Unicode UTF-8. O que o Unicode faz é fornecer um único número para cada caractere, não importa a plataforma, nem o programa, nem o idioma (ele suporta cerca de um milhão de caracteres).

Caracteres imprimíveis:

Binário Decimal Hexa Glifo 0010 0000 32 20 0010 0001 33 21 ! 0010 0010 34 22 " 0010 0011 35 23 # 0010 0100 36 24 $ 0010 0101 37 25 % 0010 0110 38 26 & 0010 0111 39 27 ' 0010 1000 40 28 ( 0010 1001 41 29 ) 0010 1010 42 2A * 0010 1011 43 2B + 0010 1100 44 2C , 0010 1101 45 2D - 0010 1110 46 2E . 0010 1111 47 2F / 0011 0000 48 30 0 0011 0001 49 31 1 0011 0010 50 32 2 0011 0011 51 33 3 0011 010052 34 4 0011 0101 53 35 5 0011 0110 54 36 6 0011 0111 55 37 7 0011 1000 56 38 8 0011 1001 57 39 9 0011 1010 58 3A : 0011 1011 59 3B ; 0011 1100 60 3C < 0011 1101 61 3D = 0011 1110 62 3E > 0011 1111 63 3F ?

Binário Decimal Hexa Glifo 0100 0000 64 40 @ 0100 0001 65 41 A 0100 0010 66 42 B 0100 0011 67 43 C 0100 0100 68 44 D 0100 0101 69 45 E 0100 0110 70 46 F 0100 0111 71 47 G 0100 1000 72 48 H 0100 1001 73 49 I 0100 1010 74 4A J 0100 1011 75 4B K 0100 1100 76 4C L 0100 1101 77 4D M 0100 1110 78 4E N 0100 1111 79 4F O 0101 0000 80 50 P 0101 0001 81 51 Q 0101 0010 82 52 R 0101 0011 83 53 S 0101 0100 84 54 T 0101 0101 85 55 U 0101 0110 86 56 V 0101 0111 87 57 W 0101 1000 88 58 X 0101 1001 89 59 Y 0101 1010 90 5A Z 0101 1011 91 5B [ 0101 1100 92 5C \ 0101 1101 93 5D ] 0101 1110 94 5E ^ 0101 1111 95 5F _

Binário Decimal Hexa Glifo 0110 0000 96 60 ` 0110 0001 97 61 a 0110 0010 98 62 b 0110 0011 99 63 c 0110 0100 100 64 d 0110 0101 101 65 e 0110 0110 102 66 f 0110 0111 103 67 g 0110 1000 104 68 h 0110 1001 105 69 i 0110 1010 106 6A j 0110 1011 107 6B k 0110 1100 108 6C l 0110 1101 109 6D m 0110 1110 110 6E n 0110 1111 111 6F o 0111 0000 112 70 p 0111 0001 113 71 q 0111 0010 114 72 r 0111 0011 115 73 s 0111 0100 116 74 t 0111 0101 117 75 u 0111 0110 118 76 v 0111 0111 119 77 w 0111 1000 120 78 x 0111 1001 121 79 y 0111 1010 122 7A z 0111 1011 123 7B 0111 1100 124 7C | 0111 1101 125 7D 0111 1110 126 7E ~

Caracteres de controle:

Binário Decimal Hexa Abreviatura Descrição 0000 0000 00 00 NUL Null - Nulo 0000 0001 01 01 SOH Start of Header - Início do cabeçalho 0000 0010 02 02 STX Start of Text - Início do texto 0000 0011 03 03 ETX End of Text - Fim do texto 0000 0100 04 04 EOT End of Tape - Fim de fita 0000 0101 05 05 ENQ Enquire - Interroga identidade do terminal 0000 0110 06 06 ACK Acknowledge - Reconhecimento 0000 0111 07 07 BEL Bell - Campainha 0000 1000 08 08 BS Back-space - Espaço atrás 0000 1001 09 09 HT Horizontal Tabulation - Tabulação horizontal 0000 1010 10 0A LF Line-Feed - Alimenta linha 0000 1011 11 0B VT Vertical Tabulation - Tabulação vertical 0000 1100 12 0C FF Form-Feed - Alimenta formulário 0000 1101 13 0D CR Carriage-Return - (enter)

0000 1110 14 0E SO Shift-Out - Saída do shift (passa a usar caracteres de baixo da tecla - minúsculas, etc.)

0000 1111 15 0F SI Shift-In - Entrada no shift (passa a usar caracteres de cima da tecla: maiúsculas, caracteres especiais, etc.)

0001 0000 16 10 DLE Data-Link Escape 0001 0001 17 11 DC1 Device-Control 1 0001 0010 18 12 DC2 Device-Control 2 0001 0011 19 13 DC3 Device-Control 3 0001 0100 20 14 DC4 Device-Control 4 0001 0101 21 15 NAK Neg-Acknowledge - Não-reconhecimento 0001 0110 22 16 SYN Synchronous Idle 0001 0111 23 17 ETB End-of-Transmission Block 0001 1000 24 18 CAN Cancel 0001 1001 25 19 EM End-Of-Medium 0001 1010 26 1A SUB Substitute 0001 1011 27 1B ESC Escape 0001 1100 28 1C FS File Separator 0001 1101 29 1D GS Group Separator 0001 1110 30 1E RS Record Separator 0001 1111 31 1F US Unit Separator 0111 1111 127 7F DEL Delete

Lista de caracteres extendida:

Binário Decimal Hexa Glifo Número HTML Nome HTML 1000 0000 128 80 € &#128; &euro; 1000 0001 129 81 1000 0010 130 82 ‚ &#130; &sbquo; 1000 0011 131 83 ƒ &#131; &fnof; 1000 0100 132 84 „ &#132; &bdquo; 1000 0101 133 85 … &#133; &hellip; 1000 0110 134 86 † &#134; &dagger; 1000 0111 135 87 ‡ &#135; &Dagger; 1000 1000 136 88 ˆ &#136; &circ; 1000 1001 137 89 ‰ &#137; &permil; 1000 1010 138 8A Š &#138; &Scaron; 1000 1011 139 8B ‹ &#139; &lsaquo; 1000 1100 140 8C Œ &#140; &OElig; 1000 1101 141 8D 1000 1110 142 8E Ž &#142; 1000 1111 143 8F 1001 0000 144 90 1001 0001 145 91 ‘ &#145; &lsquo; 1001 0010 146 92 ’ &#146; &rsquo; 1001 0011 147 93 “ &#147; &ldquo; 1001 0100 148 94 ” &#148; &rdquo; 1001 0101 149 95 • &#149; &bull; 1001 0110 150 96 – &#150; &ndash; 1001 0111 151 97 — &#151; &mdash; 1001 1000 152 98 ˜ &#152; &tilde; 1001 1001 153 99 ™ &#153; &trade; 1001 1010 154 9A š &#154; &scaron; 1001 1011 155 9B › &#155; &rsaquo; 1001 1100 156 9C œ &#156; &oelig; 1001 1101 157 9D 1001 1110 158 9E ž &#158; 1001 1111 159 9F Ÿ &#159; &yuml; 1010 0000 160 A0 &#160; &nbsp; 1010 0001 161 A1 ¡ &#161; &iexcl; 1010 0010 162 A2 ¢ &#162; &cent; 1010 0011 163 A3 £ &#163; &pound; 1010 0100 164 A4 ¤ &#164; &curren; 1010 0101 165 A5 ¥ &#165; &yen; 1010 0110 166 A6 ¦ &#166; &brvbar; 1010 0111 167 A7 § &#167; &sect; 1010 1000 168 A8 ¨ &#168; &uml; 1010 1001 169 A9 © &#169; &copy; 1010 1010 170 AA ª &#170; &ordf; 1010 1011 171 AB « &#171; &laquo; 1010 1100 172 AC ¬ &#172; &not; 1010 1101 173 AD &#173; &shy; 1010 1110 174 AE ® &#174; &reg;

1010 1111 175 AF ¯ &#175; &macr; 1011 0000 176 B0 ° &#176; &deg; 1011 0001 177 B1 ± &#177; &plusmn; 1011 0010 178 B2 ² &#178; &sup2; 1011 0011 179 B3 ³ &#179; &sup3; 1011 0100 180 B4 ´ &#180; &acute; 1011 0101 181 B5 µ &#181; &micro; 1011 0110 182 B6 ¶ &#182; &para; 1011 0111 183 B7 · &#183; &middot; 1011 1000 184 B8 ¸ &#184; &cedil; 1011 1001 185 B9 ¹ &#185; &sup1; 1011 1010 186 BA º &#186; &ordm; 1011 1011 187 BB » &#187; &raquo; 1011 1100 188 BC ¼ &#188; &frac14; 1011 1101 189 BD ½ &#189; &frac12; 1011 1110 190 BE ¾ &#190; &frac34; 1011 1111 191 BF ¿ &#191; &iquest; 1100 0000 192 C0 À &#192; &Agrave; 1100 0001 193 C1 Á &#193; &Aacute; 1100 0010 194 C2 Â &#194; &Acirc; 1100 0011 195 C3 Ã &#195; &Atilde; 1100 0100 196 C4 Ä &#196; &Auml; 1100 0101 197 C5 Å &#197; &Aring; 1100 0110 198 C6 Æ &#198; &AElig; 1100 0111 199 C7 Ç &#199; &Ccedil; 1100 1000 200 C8 È &#200; &Egrave; 1100 1001 201 C9 É &#201; &Eacute; 1100 1010 202 CA Ê &#202; &Ecirc; 1100 1011 203 CB Ë &#203; &Euml; 1100 1100 204 CC Ì &#204; &Igrave; 1100 1101 205 CD Í &#205; &Iacute; 1100 1110 206 CE Î &#206; &Icirc; 1100 1111 207 CF Ï &#207; &Iuml; 1101 0000 208 D0 Ð &#208; &ETH; 1101 0001 209 D1 Ñ &#209; &Ntilde; 1101 0010 210 D2 Ò &#210; &Ograve; 1101 0011 211 D3 Ó &#211; &Oacute; 1101 0100 212 D4 Ô &#212; &Ocirc; 1101 0101 213 D5 Õ &#213; &Otilde; 1101 0110 214 D6 Ö &#214; &Ouml; 1101 0111 215 D7 × &#215; &times; 1101 1000 216 D8 Ø &#216; &Oslash; 1101 1001 217 D9 Ù &#217; &Ugrave; 1101 1010 218 DA Ú &#218; &Uacute; 1101 1011 219 DB Û &#219; &Ucirc; 1101 1100 220 DC Ü &#220; &Uuml; 1101 1101 221 DD Ý &#221; &Yacute; 1101 1110 222 DE Þ &#222; &THORN; 1101 1111 223 DF ß &#223; &szlig; 1110 0000 224 E0 à &#224; &agrave;

1110 0001 225 E1 á &#225; &aacute; 1110 0010 226 E2 â &#226; &acirc; 1110 0011 227 E3 ã &#227; &atilde; 1110 0100 228 E4 ä &#228; &auml; 1110 0101 229 E5 å &#229; &aring; 1110 0110 230 E6 æ &#230; &aelig; 1110 0111 231 E7 ç &#231; &ccedil; 1110 1000 232 E8 è &#232; &egrave; 1110 1001 233 E9 é &#233; &eacute; 1110 1010 234 EA ê &#234; &ecirc; 1110 1011 235 EB ë &#235; &euml; 1110 1100 236 EC ì &#236; &igrave; 1110 1101 237 ED í &#237; &iacute; 1110 1110 238 EE î &#238; &icirc; 1110 1111 239 EF ï &#239; &iuml; 1111 0000 240 F0 ð &#240; &eth; 1111 0001 241 F1 ñ &#241; &ntilde; 1111 0010 242 F2 ò &#242; &ograve; 1111 0011 243 F3 ó &#243; &oacute; 1111 0100 244 F4 ô &#244; &ocirc; 1111 0101 245 F5 õ &#245; &otilde; 1111 0110 246 F6 ö &#246; &ouml; 1111 0111 247 F7 ÷ &#247; &divide; 1111 1000 248 F8 ø &#248; &oslash; 1111 1001 249 F9 ù &#249; &ugrave; 1111 1010 250 FA ú &#250; &uacute; 1111 1011 251 FB û &#251; &ucirc; 1111 1100 252 FC ü &#252; &uuml; 1111 1101 253 FD ý &#253; &yacute; 1111 1110 254 FE þ &#254; &thorn; 1111 1111 255 FF ÿ &#255; &yuml;

A PÊ N D ICE S

GRADES DE TRANSPOSIÇÃO REGULARES E IRREGULARES

Uma forma satisfatória de se conseguir transposições de letras é utilizando

grades NxN. Para isto, podem ser utilizadas (por exemplo) grades 4x4, 5x5, 6x6, 7x5, etc.

A seguir, será dado um exemplo para uma grade 5x5. Suponha-se que se queira realizar uma transposição sobre o texto: A capacidade de ler o Código Púrpura dava aos aliados uma grande

vantagem na guerra. O texto é escrito normalmente sobre grades 5x5.

A letra e final é uma nula, acrescentada na grade; evita-se o uso da letra x, quase

sempre identificada como tal. A última linha não necessita ser preenchida. Em seguida, transcreve-se o texto diagonal: acceia rddpi oeaag cldoo epdur dpoau asvrm daaaa olags iruan ndmte enavr

agarg eauee Novamente, a última letra (acrescentada ao texto) é uma nula (e). A recomposição é feita, naturalmente, re-escrevendo o texto cifrado dentro da

grade 5x5, e fazendo a leitura horizontal. A última letra e, por ficar sozinha em uma fileira, será desconsiderada. Igualmente a última letra e em errae, por não fazer sentido.

Se a grade for 4x4, 6x6 ou outra, o processo será o mesmo. Como se pode notar, esta transposição 6x6 terá a seguinte distribuição:

1 7 2 13 8 3 19 14 9 4 25 20 15 10 5 31 26 21 16 11 6 32 27 22 17 12 33 28 23 18 34 29 24 35 30 26

Para evitar este padrão facilmente identificável503, pode-se usar, por exemplo, uma grade irregular, tal como a mostrada abaixo.

Esta grade de 44 posições possui a seguinte distribuição numérica 1 6 2 11 7 3 18 12 8 4 25 19 13 9 5 33 26 20 14 10 40 34 27 21 15 41 35 28 22 16 42 36 29 23 17 43 37 30 24 44 38 31 39 32

Uma opção pode ser a numeração das células começando em cima da direita para a esquerda, na segunda fileira da esquerda para a direita, e assim sucessivamente. O objetivo é eliminar ordens crescentes ou decrescentes de grande período.

503 Por exemplo, de 1 até 4 existem um, dois e tr|ês algarismos interpolados, e assim sucessivamente.

Esta grade possui a seguinte distribuição numérica:

5 6 4 17 7 3 18 16 8 2 32 19 15 9 1 33 31 20 14 10 44 34 30 21 13 43 35 29 22 12 42 36 28 23 11 41 37 27 24 40 38 26 39 25 Obviamente, a difusão aumentará ainda mais se estes números forem re-inseridos em uma grade (na mesma disposição) e feita nova leitura diagonal:

Cuja nova disposição numérica é a seguinte:504 7 3 17 31 18 4 20 33 16 6 36 14 1 8 5 28 42 10 9 2 25 23 12 44 15 39 11 22 34 19 26 41 29 30 32 38 37 35 21 40 27 43 24 13

Ou então, pode ser utilizada uma grade ainda mais irregular, como a mostrada a seguir.

504 Um texto com 44 caracteres teria exatamente esta ordem de re-distribuição.

1 6 2 11 7 3 18 12 8 4 25 19 13 9 5 33 26 20 14 10 40 34 27 21 15 41 35 28 22 16 42 36 29 23 17 43 37 30 24 44 38 31 39 32

L=17 M=18 N=19 O=20 P=21 Q=22 R=23 S=24 T=25 U=0 V=1 W=2 X=3 Y=4 Z=5 A=6 B=7 C=8 D=9 E=10 F=11 G=12 H=13 I=14 J=15 K=16

1 6 2 11 7 3 17 12 8 4 24 18 13 9 5 32 25 19 14 10 39 33 26 20 15 44 40 34 27 21 16 50 45 41 35 28 22 55 51 46 42 36 29 23 62 56 52 47 43 37 30 69 63 57 53 48 38 31 77 70 64 58 54 49 77 70 64 58 54 49 84 78 71 65 59 85 79 72 66 60 86 80 73 67 61 87 81 74

68 88 82 75 83 76

O objetivo, em qualquer caso, é o de conseguir a máxima irregularidade ou máxima difusão das letras, impedindo que as palavras que as letras compõem possam ser identificadas.

GERADOR DE NÚMEROS PSEUDO-RANDÔMICOS

Para começar a geração, tomam-se os seguintes números: Data atual (DDMMAAAA) - DA505 Data de nascimento do operador (DDMMAAAA) - DN506 Hora do evento ou hora interna do computador (HHMMSS): HH507 Um número qualquer de dois dígitos: N (1 < N < 100) O valor P = DDMMAAAADDMMAAAA = DADN será multiplicado por

HH*N do computador (o programa pede a data de nascimento, forma o número P e o multiplica automaticamente por HH e por N).

Por exemplo: DN? 21041976 N? 47 Supondo que a data atual (DA) seja 14032011, será feita a seguinte operação

PxHHxN: 1403201121041976 x 081557 (hora interna, supostamente) x 47 Cujo resultado é: 5378721069954560521704 Invertendo fica: M = 4071250654599601278735 As duas metades de M são multiplicadas entre si508, resultando: 40712506545 x 99601278735 = 4055017712389056820575 Descartando os três primeiros algarismos e tomando os dez algarismos

seguintes, fica: N1 = 5017712389 Para formar os números N2 a Nn, usa-se a tabela de números abaixo:

505 Dados providos pelo computador. 506 Dados providos pelo operador. 507 Dados providos pelo computador. 508 Se o número total (NT) de algarismos for ímpar, a multiplicação se faz assim: F1xF2 (fator 1 vezes fator 2, sendo que o fator 1 possui a metade dos algarismos mais um).

Através da função RND(n),509 o computador escolhe dez sequências de pares

ordenados N(m,n).510 Cada par ordenado define um algarismo (por exemplo, o par ordenado (4,7) define o algarismo 2.

Suponha-se que surge a seguinte sequência: 3811902445 Esta seqüência é somada a N1 mod(10), resultando N2:

5017712389

3811902445 + 8828614724

N2 = 8828614724

O número N3 é formado da mesma maneira, mas a operação módulo-10 é realizada com N2. Por exemplo, suponha-se que surgiu a seqüência: 3295154701 Realizando a operação com N2, surge N3: 8828614724 3295154701 + 1013768425

N3 = 1013768425 O número N4 é formado da mesma maneira, mas a operação módulo-10 é realizada com N3. Por exemplo, suponha-se que surgiu a seqüência: 1152612473 509 Geração de números randômicos: http://www.random.org/integers/. 510 Os valores de m e n serão escolhidos aleatoriamente, pela função RND.

Realizando a operação com N3, surge N4: 1013768425 1152612473 + 2165370898 N4 = 2165370898

Cada número sucessivo, N5 a Nn, será formado da mesma maneira.

Os números N1 a Nn podem ser juntados, formando um único número aleatório Nt de n algarismos:

Nt = 5017712389882861472410137684252165370898 ...

MÉTODO511 DE CODIFICAÇÃO POR TRANSFORMAÇÃO EM CAMADAS – MCTC512

Este método utiliza N livros,513 cada livro contém 26 páginas. Cada página

contém 26 alfabetos. Cada alfabeto tem a primeira letra na seqüência alfabética, de A até Z, mas com as letras seguintes completamente desordenadas (p. ex., um alfabeto poderia ser AOERTVIU ... J , sendo A a 1ª letra e J a última letra neste alfabeto em particular; outro alfabeto poderia ser BKWPZA ... S, em que B é a 1ª letra e S é a última; e assim por diante, sendo que o último alfabeto poderia ser, p. ex., ZIDHVE ... U, sendo Z a 1ª letra e U a última letra deste alfabeto). A sequência de A até Z estará desordenada, mas ordenada numericamente. As páginas seguintes seriam formadas da mesma maneira, até a 26ª página.

O Código de Vigenère é usado para codificação/decodificação.

Código de Vigenère

A figura a seguir mostra a página 9, escolhida (aleatoriamente) para realizar uma

codificação.

511 Este não é um sistema final de criptografia; é um método baseado nos moldes clássicos, com algumas inovações. 512 Processo de cifra de fluxo com chave simétrica e codificação Vigenère. 513 O emissor gera um total de N livros, um para cada receptor. O emissor usa o livro do receptor para cifrar a mensagem; o receptor usa o mesmo livro para decifrá-la. Cada receptor possui um livro com 26 páginas, cada página possui 26 alfabetos distribuídos aleatoriamente, cada alfabeto é distribuído aleatoriamente nas células de cada grade.

Página 9 do Livro de Alfabetos

Foi escolhida (aleatoriamente) a página 9, e nela, foram escolhidos os conjuntos

I e T (também aleatoriamente), sendo que suas ordens numéricas são 21 e 8.514

A mensagem clara é a seguinte: O relatório comprovou a culpa de todos os envolvidos na conspiração. I - O texto claro é inicialmente inserido em grades irregulares (duas, neste caso)

de 44 células cada uma.515 As cinco primeira letras são nulas. O total de letras (para formar grupos de cinco letras, à frente)516 deve ser

múltiplo de 5, portanto, se necessário, serão introduzidas nulas no final da grade, para completar.

514 São mostradas apenas as letras desordenadas dos conjuntos I e T. 515 Usada apenas como exemplo. A grade pode ter qualquer formato e quantidades diferentes de células. 516 Poderiam ser usados grupos com outros números de letras.

Três caracteres – vis – são inseridos na grade. Eles são nulas que completam os grupos de cinco letras cada (65 letras no total, sendo que oito são nulas: wopit-vis).517

O texto é transcrito lendo-se as células diagonais e depois é reunido em grupos

de cinco letras:

wootr pmoei aprlt tcria eouoo ndlvc vopoo osaul odsev nisad opcov iosir nsaca

A partir daqui é usado o alfabeto I.

Cada grupo de cinco letras é codificado da seguinte forma. No primeiro grupo, tomam-se as duas primeiras letras, WO. W e O encontram a letra K

A letra K está no nível da letra O,518 que é a 15ª letra na ordem alfabética normal. A 15ª letra no alfabeto I é a letra R.

Alfabeto normal e alfabeto I

Portanto, WO fica transformado em KR. Esta última letra, R, junta-se à terceira letra do grupo, O: RO. R e O encontram-

se em F. Esta é a 6ª letra no alfabeto normal, e a 6ª letra no alfabeto I é a letra V. Portanto, RO forma a dupla FV.

517 As nulas são necessárias, nesta etapa, e não devem ser omitidas. 518 A indicação de nível é necessária, ou não seria possível recuperar a letra original. Mas a indicação O é codificada, sendo trocada pela letra R.

A letra V junta-se à quarta letra do grupo, T: VT. Elas se encontram em O, que leva à letra R. Portanto, VT forma a dupla OR.

A letra R junta-se à quinta letra do grupo, R. Elas se encontram em I, que leva à letra D. Portanto, RR forma a dupla ID.

WO – KR RO – FV VT – OR RR – ID As letras em negrito e itálico à esquerda são o grupo original; as da direita, em

negrito, mas não em itálico, formam o grupo transformado, ou seja: wootr = kfoid. O fato das letras I e D estarem na mesma posição numérica não deve preocupar, porque isto será corrigido.

O grupo pmoei segue a mesma seqüência: PM – BZ ZO – NR RE – VL LI – TD Portanto, pmoei = bnvtd.

Grupo aprlt: AP – PI IR – ZT TL – EG GT – ZY Portanto, aprlt = pzezy.

Grupo tcria: TC – VN NR – ET TI – BD DA – DI Portanto, tcria = vebdi.

Grupo eouoo:

EO – SR RU – LK KO – YR RO – FR Portanto, eouoo = slyfr.

Os grupos restantes são codificados da mesma forma (não será feito, aqui).519 A segunda codificação resulta então em:

KFOID BNVTD PZEZY VEBDI SLYFR .... A partir daqui é utilizado o alfabeto T.

Agora a codificação segue um outro modo.520 As duas codificações anteriores são emparelhadas, sendo a primeira codificada pela segunda,521 usando o alfabeto T.

As letras WK são buscadas na tabela, encontrando a letra G. Esta letra está no

nível da letra K, que é a 11ª do alfabeto normal, e corresponde à letra L no alfabeto T. Portanto, no grupo wootr, tem-se:

WK – GL OF – TD OO – CK TI – BP RD – UM Ou seja: wootr = gltdckbpum PB – QC MN – ZR OV – JU ET – XV ID – LM AP – PT PZ – OB RE – VJ LZ – KB TY – RO TV – OU CE – GJ RB – SC ID – LM AI – IT

519 A codificação que foi aqui realizada pode ser chamada de codificação por condensação. 520 O modo pode ser chamado de codificação por expansão. 521 A segunda é a key-phrase da primeira.

ES – WS OL – ZQ UY – SO OF – TD OR – FF

Portanto, cada grupo de cinco caracteres forma um grupo de dez caracteres cada

um.

GLTDCKBPUM QCZRJUXVLM PTOBVJKBRO OUGJSCLMIT WSZQSOTDFF .... Através desta codificação o texto da mensagem foi duplicado,522 e passa a conter três tipos de caracteres: caracteres nulos; caracteres indicativos de posição; caracteres indicativos de conteúdo. Estes últimos correspondem às letras da mensagem clara, e somam menos de 50% do total.

Neste momento o texto é re-inserido em grades 4x10 ou 6x10,523 à escolha do programa(dor), em número suficiente para conter o texto. Neste caso, serão usadas grades 4x10. As células vazias não são completadas por nulas.

A leitura diagonal forma o criptograma-base:

gcluktzmbdxrqppvjcvtlurjomgokbljobmsuictwssfozftqd ... Em seguida, faz-se uma codificação usando uma frase-chave524 da qual foram

retiradas as letras repetidas (LEONARDODAVINCI = LEONARDVIC).525

522 Passa a ter 130 caracteres. Este efeito de expansão é condenado por Shannon (em seu texto de 1946), que o considera um efeito indesejado, por aumentar o tempo necessário à encriptação/desencriptação. Entretanto, com a moderna criptografia por computadores, essa consideração se torna irrelevante. 523 Ou em grades 6x12, ou 7x15, 9x17, NxN. O que está exemplificado aqui é somente uma sugestão. Pode-se também passar o texto saído de uma grade NxN por outra grade NxN diferente. 524 Neste momento poderia ser feita uma nova codificação por condensação (e utilizando um terceiro alfabeto) antes de passar à codificação por palavra-chave. Tal passo, entrentanto, ficará aqui apenas sugerido. 525 O fato de a palavra-chave possuir um curto período não deve preocupar, devido à aleatoriedade do criptograma-base.

Somente os primeiros trinta caracteres foram codificados, resultando o criptograma:

rgzhkkchjfivecpmmxdvwyfwodjjsd ... Este último criptograma é re-codificado com a mesma palavra-chave, deslocada de um caracter, mas usando agora uma outra versão do Código de Vigenère:

O criptograma final pode ser transmitido em grupos de cinco caracteres, ou dez caracteres, ou N caracteres:

USEWY LULFO LHJRD NEBZE ZKKLC EBNOM

II - Cabeçalhos devem ser inseridos nas transmissões. Há dois casos possíveis.

1º Caso – transmissão do computador central para o usuário. Neste caso, o cabeçalho deve conter:526

• O livro utilizado pelo usuário (não se considerou, neste exemplo). • A página do livro do usuário que foi utilizada (de um total de 26). • As letras iniciais ou os números de ordem dos dois alfabetos utilizados (de um

total de 26). 526 O computador verifica em seu catálogo qual é o livro utilizado por aquele usuário específico.

• A grade utilizada (de 4 ou de 6 células).527 • Onde pode ser encontrada a palavra-chave.528

Todos os dados acima devem permanecer secretos. Uma forma de fazê-lo seria a seguinte. O usuário possui duas tabelas K específicas para ele, uma para recepção (KR) e outra para transmissão (KT).529 O computador possui ambas em seu catálogo, e usa a tabela KR para realizar a sua transmissão.

Tabela KR

Suponha-se que foi mandado o cabeçalho E WTUGTPXO.

Nele, a letra E, 10ª letra em K, mostra que se deve buscar a 10ª letra do alfabeto

normal – J – em K. A letra J é encontrada na 24ª posição; assim, J tem valor 24, iniciando a série seguinte: J=24 K=25 L=26 M=1 N=2 O=3 P=4 Q=5 R=6 S=7 T=8 U=9 V=10 W=11 X=12 Y=13

Z=14 A=15 B=16 C=17 D=18 E=19 F=20 G=21 H=22 I=23 Por esta série, a letra U indica que foi usada a página 9 do livro. As letras G e T indicam que foram usados os alfabetos 21 e 8. A letra P indica que foi usada a grade de quatro células. As letras X e O indicam que foi usada a 12ª palavra-chave do 3º catálogo de palavras-chave.530 O usuário usa estas informações para realizar a decifração da mensagem recebida. 2º Caso – Transmissão no sentido usuário-computador.

O usuário usa a tabela KT para a sua transmissão para o computador.

Tabela KT

O usuário transmite (p. ex.) o seguinte cabeçalho GQW U RZSPIFCMW

EWTUGTPXO. Este cabeçalho consiste em:

• três caracteres iniciais que o identificam (GQW); • um caracter escolhido aleatoriamente (U) codificado pelas tabelas KR e KT, o

qual cria uma seqüência iniciada em Q = 2;531 • a seqüência de caracteres (RZSPIFCMW)532 que complementa a identificação

do usuário.533

527 O formato da grade de 44 células não precisa mudar. 528 Esta palavra-chave pode constar de um catálogo que já esteja de posse do destinatário da mensagem. 529 A ordem das letras aqui não pode coincidir com as tabelas K de qualquer pagina do livro. 530 O que implica que devem existir 26x26=676 palavras-chaves diferentes. 531 A letra U, 17ª letra em KR mostra que se deve buscar a 17ª letra do alfabeto normal – Q – em KR. A letra Q tem valor 2 em KT.

• a seqüência de caracteres (EWTUGTPXO) que permite a decifração do texto (igual ao anterior, supondo que sejam usados os mesmos elementos).

Q=2 R=3 S=4 T=5 U=6 V=7 W=8 X=9 Y=0 Z=1 A=2 B=3 C=4 D=5 E=6 F=7 G=8 H=9 I =0 J=1 K=2 L=3 M=4 N=5 O=6 P=7

Ao receber este cabeçalho, o computador reconhece o usuário, busca em seu

catálogo quais são as tabelas usadas por este usuário, termina de identificá-lo e recebe a transmissão.

Comentários acerca do método MCTC:

• Este método de codificação, em razão das múltiplas possibilidades de escolha ao longo do processo,534 traz possilidades praticamente nulas de que um mesmo texto claro leve ao mesmo criptograma final.

• A principal segurança do método reside na codificação condensada e na codificação por expansão, intercaladas por sucessivas transposições.

• O uso da palavra-chave final com um tamanho menor do que a mensagem não diminui a segurança do sistema, porque a codificação é feita sobre um criptograma anterior, já afetado por substituições, transposições e a introdução de nulas e de caracteres de transição ou transformação.535

• É um sistema implementável por software, sem grandes complicações. • O sistema está sujeito apenas às exigências normais de segurança requeridas

pelos sistemas de chaves simétricas.

532 Codificadas em U. 533 A seqüência de caracteres RZSPIFCMW é traduzida na seqüência numérica 314707448. Ou seja, a identificação completa deste usuário é: GQW314707448. Note-se que há várias formas de escrever este número, pois os mesmos algarismos podem ser escritos usando outros caracteres. Por exemplo: BISFYVCSG. Note-se que se for escolhido outro caracter codificador, que não U, toda a seqüência numérica irá mudar. 534 Observe-se que a ordem de escolha dos alfabetos não é comutativa; escolher os alfabetos TI não é o mesmo que escolher IT. 535 De acordo com Shannon, a palavra-chave deveria ser absolutamente aleatória e ter o mesmo comprimento da mensagem. Mas se esta última já se apresenta aleatória por si mesma, por comutatividade (M*PCal = Cal => Mal*PC = Cal, onde: M = mensagem; Mal = mensagem aleatória; PC = palavra-chave; PCal = palavra-chave aleatória; Cal = criptograma aleatório), a segurança está garantida, mesmo usando uma palavra-chave não aleatória.

R E F E R Ê N CIA S B IB L IO G R Á F ICA S

LIVROS IMPRESSOS536 ADAMS, James. The Next World War: Computers Are the Weapons and the Front Line Is Everywhere. BAUER, Friedrich Ludwig. Decrypted secrets: methods and maxims of cryptology. BELL, E. T. Historia de las Matematicas. Ciudad del Mexico: Fondo de Cultura Económica, 1985. BERLITZ, Charles. As Línguas do Mundo. Rio de Janeiro: Nova Fronteira, 1988. 3ª. ed. BOLDRINI, José Luiz et al. Álgebra Linear. São Paulo: Harper & Row do Brasil, 1980. 3ª. Ed. BUDLANSKY, Stephan. Battle of Wits. CAMPOS, Haroldo de. (Org.). Ideograma. Lógica. Poesia. Linguagem. São Paulo: Cultrix/EDUSP, 1977. CHERRY, Colin. A Comunicação Humana. São Paulo: CULTRIX/EDUSP, 1971. DAVIES, D.W. e PRICE. W.L.. Security for Computer Networks, 2ª. Ed. Nova Iorque: John Wiley & Sons, 1989. DEVLIN, Keith. Os Problemas do Milênio – sete grandes enigmas matemáticos do nosso tempo. Rio de Janeiro: Record, 2004. EDWARDS, Elwyn. Introdução à Teoria da Informação. São Paulo. CULTRIX/EDUSP, 1971. FRANKSEN, O. I. Mr. Babbage's Secret: the Tale of a Cipher-And APL. Prentice Hall, 1985. FRIEDMAN, William F. Elements of Cryptanalysis. Agean Park. FRIEDMAN, William F. Military Cryptanalysis. Agean Park. FRIEDMAN, William F. The Riverbank Publications. Agean Park. GAINES, Helen Fouché. Cryptanalysis. New York: Dover Publications, 1956. GOEBEL, Greg. U.S Codebreakers In WW II. GOLDREICH, O. Modern Criptography, Probabilistic Proofs and Pseudo-Randomnes. HIND, Cel. Allison. História da Espionagem. Rio de Janeiro: Bloch Editores, 1967. HOOK, David. Beginning Cryptography with Java. Indianapolis: Wrox, 2005. ZHOU, Jianying; YUNG, Moti; BAO Feng (eds): Applied Cryptography and Network Security. Lecture Notes in Computer Science. Singapore, 2006. KASISKI, F. W. Die Geheimschriften und die Dechiffrir-Kunst. Berlin: E. S. Mittler und Sohn, 1863. KATZ, Chain Samuel, DORIA, Francisco e LIMA, Luiz Costa. Dicionário Crítico de Comunicação. Rio de Janeiro: Paz e Terra/MEC, 1971. KATZAN Jr., Harry. Segurança de Dados em Computação. Rio de Janeiro: Livros Técnicos e Científicos Editora, 1977.

536 Consultados ou indicados.

KLUCKHOHN, Clyde. Antropologia – Um Espelho para o Homem. Belo Horizonte: Livraria Itatiaia, 1963. KNUDSEN, Jonathan. Java Cryptography. Beijing: O´Reilly, 1998. KONDRATOV, A. Sons e Sinais. Brasília: Coordenada Editora de Brasília, 1972. KONHEIM, Alan G. Computer Security and Cryptography. Canadá: John Wiley & Sons, Inc., 2007. KONHEIM, Alan G. Cryptography: A Primer. New York: John Wiley & Sons, 1981. LITTMAN, Jonathan. Watchman – A vida excêntrica e os crimes do serial hacker Kevin Poulsen. Rio de Janeiro: Record, 1998. MENEZES, A. et al. Handbook of Applied Criptography. CRC Press, 1996. MLODINOW, Leonard. O Andar do Bêbado. Como o acaso determina nossas vidas. Rio de Janeiro: Jorge Zahar Ed., 2009. MOLES, Abraham. Teoria da Informação e Percepção Estética. Rio de Janeiro: Biblioteca Tempo Universitário, 1969. MOLLIN, Richard A. An Introduction to Cryptography, 2 ed. EUA: Chapman & Hall/CRC, 2007. NIVEN, Ivan e ZUCKERMAN, Herbert S. Introduccion a la Teoria de los Numeros. Ciudad del Mexico: Editorial Limusa-Willey, 1969. PENROSE, Roger. A Mente Nova do Rei. Computadores, Mentes e as Leis da Física. Rio de Janeiro: Campus, 1993. PIGNATARI, Décio. Informação, Linguagem, Comunicação. São Paulo: Editora Perspectiva, 1969. PORCH, Douglas. The French Secret Services: A History of French Intelligence. PUJOL, Alain. Dicionário do Espião Moderno. Rio de Janeiro: Livraria José Olympio Editora, 1967. REZENDE, Pedro Antonio Dourado de. Criptografia e Segurança na Informática. Brasilia: CopyMarket.com, 2000. RIBEIRO, Marcello P. e BARRADAS, Ovídio. Sistemas Analógicos-Digitais. Rio de Janeiro: Livros Técnicos e Científicos Editora/EMBRATEL, 1980. SALSBURG, David. Uma Senhora Toma Chá... como a estatística revolucionou a ciência no século XX. Rio de Janeiro: Jorge Zahar Ed., 2009. SANTOS, José Plínio de O. Introdução a Teoria dos Números. Rio de Janeiro: IMPA, 1998. SATINOVER, Jeffrey. A Verdade por trás do Código da Bíblia. São Paulo: Pensamento, 1998. SAUTOY, Marcus du. A Música dos Números Primos. A história de um problema não resolvido na matemática. Rio de Janeiro: Jorge Zahar Ed., 2007. SCHNEIER, Bruce. Applied Cryptography. John Wiley & Sons, 1996. SGARRO, Andréa. Códigos Secretos. São Paulo: Companhia Melhoramentos, 1994. SHANNON, Claude E. e WEAVER, Warren. Teoria Matemática da Comunicação. São Paulo: DIFEL, 1967, 11ª. Ed. SILVA, Pedro Tavares; CARVALHO, Hugo; TORRES, Catarina Botelho. Segurança dos Sistemas de Informação - Gestão Estratégica da Segurança Empresarial. Portugal: Centro Atlântico, 2003. SINGH, Simon. O Livro dos Códigos. A ciência do sigilo – do antigo Egito à criptografia quântica. Rio de Janeiro: Record, 2001. SOLOMON, David. Coding for Data and Computer Communications. Northridge, California: Springer, 2005. STALLINGS, William. Criptografia e segurança de redes: Princípios e práticas, 4ª. Ed. São Paulo: Prentice Hall, 2008.

STINSON, Douglas. Criptography, Theory and Practice. CRC: 2006. TKOTZ, Viktoria. Criptografia - Segredos Embalados para Viagem. Novatec Editora. TOUSSAINT, Bernard. Introdução à Semiologia. Lisboa: Publicações Europa-América, 1978. YOUNG, Adam L.; YUNG, Moti. Malicious Cryptography: Exposing Cryptovirology. Indianapolis: Addison-Wesley, 2004.

LISTA CONCISA DE TEXTOS EM FORMATO PDF

1. Algorithms for factoring integers. Johannes Buchmann e Volker Muller. 2. An Overview of the History of Cryptology, (s/a). 3. Aprendendo Criptografia. Terry Ritter. 4. Criptoanálise com Processamento Paralelo. Charles Henrique G. Santos. 5. Criptografia: Daniela Pistelli. 6. Criptografia Básica: Dimitri Vashnov. 7. Eletrônica Digital. Sidney J. Montebeller. 8. Enciclopédia de Informática (Appunti di informatica libera). Daniele

Giacomini. 9. Estudo de Criptografia com Chave Pública baseada em Curvas Elípticas.

Aliane Veloso Mendes. 10. Prime Number Hide-and-Seek: How the RSA Cipher Works, (s/a). 11. Teoria dos Números. Rudolf R. Maier. 12. The Codebreakers: History of Secret Communication. David Khan. 13. The P versus NP Problem. Stephen Cook. 14. Uma Introdução ao Algoritmo de Fatoração de Inteiros Number Field Sieve –

NFS. Elen Viviani P. da Silva e Jaime Edmundo A. Rodriguez. 15. Voynich Manuscript.

SITES DE INTERESSE

• http://ciencia.hsw.uol.com.br/cracker3.htm • http://en.wikipedia.org/wiki/Books_on_cryptography – (livros de criptografia) • http://en.wikipedia.org/wiki/Cryptanalysis • http://en.wikipedia.org/wiki/Cryptographic • http://eprint.iacr.org/2010/006.pdf • http://pt.wikipedia.org/wiki/Criptografia • http://rumkin.com/tools/cipher/ – (relação de sistemas de códigos) • http://technet.microsoft.com/pt-br/magazine/2008.09.passwords.aspx • http://www.apprendre-en-ligne.net/crypto/menu/index.html – (Ars

Cryptographica) • http://www.cacr.math.uwaterloo.ca/hac • http://www.clavis.com.br/curso/fundamentos_de_criptografia/index.php –

(curso de criptografia) • http://www.counterpane.com • http://www.crypto.rub.de/en_sclounge.html • http://www.distributed.net/ • http://www.fc.up.pt/fcup/pe/bolonha/plano.php?tc=MI&ano=2010&cod=ersi

• http://www.math.utoledo.edu/~codentha/Cryptanalysis/lanaki/ – (Lanaki Classical Criptography Course)

• http://www.numaboa.com/ – (site com excelente conteúdo em criptografia) http://www.rsa.com/rsalabs/node.asp?id=2002 – (site de cifras de fluxo)