Você está na página 1de 17

Introdução a criptografia

Este artigo não descreve algoritmos de criptografia nem ensina a quebrá-los. Trata-se de uma introdução. Se você não sabe a diferença entre chave e senha, ou entre algoritmos simétricos e assimétricos, se não sabe o que é o ataque de força bruta e quantos bits precisa ter para ser seguro, então este artigo poderá lhe ser útil.

Por: Elgio Schlemer

artigo poderá lhe ser útil. Por: Elgio Schlemer Fonte: http://www.vivaolinux.com.br/artigo/Introducao-a-criptografia/

Sumário

Introdução

1

Conceito de chave

3

Ataque por força bruta

4

Ataque por criptoanálise

6

Simétricos ou assimétricos?

8

O que temos até agora?

8

Criptografia nos dias de hoje

11

Conclusões

13

Referências

14

Introdução

O desejo de enviar mensagens de forma segura sem que ninguém mais, a não ser o destinatário, consiga ler, é tão antigo quanto a invenção da escrita. Em guerras primitivas tem-se relato de generais que raspavam a cabeça de um escravo e sobre a cabeça escreviam mensagens secretas de guerra. Após o cabelo crescer, o emissário era enviado (esta técnica de esconder mensagens é chamada de esteganografia e sua versão moderna consiste em esconder mensagens em imagens ou músicas).

Basicamente existem duas formas primárias de obscurecer uma mensagem (criptografar), que pode ser pelo uso de substituição ou transposição. Na substituição troca-se alguma coisa por outra, de acordo com algum critério. Os passatempos encontrados em bancas de revistas exploram a substituição, onde o leitor é levado a descobrir que onde tem triângulo deve ser considerado a letra "A", por exemplo.

Já na transposição apenas troca-se as coisas de lugar. Usando transposição simples, pode-se escrever a palavra "teste" como "ettse", transpondo uma letra com a sua vizinha.

O método matemático de substituição para inviabilizar a leitura mais antigo que se tem registro é a cifra de César. Elaborada por Júlio César, esta cifra inaugurou as chamadas cifras de substituição monoalfabéticas.

Na infantil Cifra de César, cada letra do alfabeto é substituída pela sua terceira vizinha, ou seja, o "A" é transformado em "D", em um alfabeto circular, onde o "Z" vira "C" ( VWXYZABC ), conforme ilustrado na figura. Linux: Introdução a Criptografia

ilustrado na figura. Linux: Introdução a Criptografia Nota-se aí a existência de duas operações distintas: a)

Nota-se aí a existência de duas operações distintas:

a) cifrar: para cifrar uma mensagem, deve-se substituir cada letra pela terceira vizinha subsequente. Em C usando string isto poderia ser feito com:

strCIF[i] = strTXT[i] + 3;

No entanto, um programador experiente verá erro na fórmula acima: ela só funciona até o "W" que somado com 3 virará "Z". Para as letras "X", "Y" e "Z" a fórmula é falha! Aí entraria em ação a operação de módulo, muito utilizada em criptografia (fica como dever de casa).

b) decifrar: já para recuperar a mensagem outro método matemático precisa ser usado. Ao invés de trocar pela terceira subsequente, deve-se trocar pela terceira anterior ("D" deve virar "A"). Percebe- se nitidamente duas operações distintas para cifrar ou decifrar.

Uma variação interessante da cifra de césar é a Rot13, onde se troca pela décima terceira vizinha. Ela é interessante pois como o alfabeto tem exatos 26 letras, o processo de cifrar e decifrar é o mesmo! Para cifrar basta achar a vizinha 13 subsequente e para decifrar também (a vizinha de "A" é "M" e a vizinha de "M" é o "A").

Ninguém irá cifrar nada sério usando César. Serve apenas como fundamento didático para explicar alguns conceitos, como o de chave, por exemplo.

Conceito de chave

A Cifra de César não tem chave. Toda a "segurança" está na descoberta do método matemático. Se alguém descobrir que deve-se somar 3, acabou o algoritmo.

Outro problema da Cifra de César é que se eu compartilho o método com 10 pessoas, todas as 10 estarão aptas a ler todas as mensagens. Mas se eu quisesse, usando esta cifra, trocar uma mensagem cifrada com a pessoa A, mas de forma que a pessoa B não possa ler, mesmo sabendo o método?

Uma variação da Cifra de César consiste em trocar a letra pela vizinha k ao invés da 3. Se eu usar k como 3, terei que o "A" troca por "D". Se eu usar k=6, terei que o "A" troca por "G", e assim por diante. A ideia deste algoritmo é que todos conheçam o método (trocar por uma vizinha), mas ninguém sabe por qual vizinha é.

Neste caso eu poderia combinar com a pessoa A que sempre que enviasse uma mensagem para ela eu usaria k como 3. Já com a pessoa B eu combino k=6. Todos conhecem o método, mas a pessoa B não saberia como ler mensagens que enviei a pessoa A pois ela não sabe que com A eu usei k=3.

Eis o conceito de chave. O método é o mesmo, mas a chave (k) varia.

Considerando que a pessoa B queira muito ler a mensagem que eu enviei para a pessoa A, tudo que ela precisa é descobrir qual valor de k eu usei para o A, já que o método é o mesmo. A ideia é que não exista segredo algum no método de criptografia (muito embora alguns fabricantes insistem em basear sua segurança nisto).

E como pode ser feita esta descoberta? Uma das forma é através da força bruta.

Ataque por força bruta

Neste tipo de ataque testa-se todas as possibilidades de chave possíveis, até encontrar uma que sirva.

Voltando ao infantil método de César com a modificação e presença do k, se B quisesse muito saber

o que escrevi para A, ele poderia tentar usar os possíveis valores de k até que a mensagem faça

sentido. Neste caso k pode assumir uma variedade limitada de valores. Ele pode ser 0 (onde "A"

seria trocado pelo mesmo "A". Ridículo, mas matematicamente é uma chave viável), pode ser 1, 2,

3, 25, sendo que neste último o "A" seria trocado pelo "Z".

Veja que existem apenas 26 possíveis valores para k neste método. Um ataque por força bruta não exigiria mais que 26 tentativas.

Matematicamente se usa a estatística aqui, sendo que ninguém é tão sortudo para acertar na primeira tentativa e nem tão azarado para acertar na última! Na média se considera que o ataque terá sucesso em 13 tentativas.

Logo, neste caso, um ataque por força bruta terá um esforço médio de 13 tentativas. Se eu usar papel e caneta (como devia ser no tempo de César) e conseguir testar no ritmo de uma tentativa por minuto, levaria 13 minutos em média para quebrar o algoritmo. Este seria o esforço de um ataque de força bruta à Cifra de César, o que o torna, como disse, infantil.

Mas se eu mudasse a cifra monoalfabética um pouco. Se ao invés de ter que trocar uma letra por uma k vizinha eu usasse uma tabela de trocas:

Letra

A B C D E F G H I J K L M

troca

X J M A F W C N O K B E T

Será que um ataque de força bruta seria possível com este novo algoritmo?

Um ataque de força bruta sempre é possível, a questão é quanto tempo em média ele levaria. O tempo é de acordo com as possíveis combinações de chave. Neste caso de um algoritmo monoalfabético com uma tabela de troca, cada letra pode ser uma das outras 25, sem poder repetir, ou seja, se já decidi que "A" troca pelo "X", ninguém mais poderá ser trocado pelo "X". A matemática nos ensina que neste caso haverão 26! possibilidades (fatorial de 26) para a chave.

As aparências enganam, pois fatorial de 26 resulta em 403.291.461.126.605.635.584.000.000 possíveis valores para chave e isto é muito, mas muito mesmo.

Como calcular este fatorial no Linux? Usando bc, uma alternativa bem criativa é com o comando:

$

seq -s '*' 1 26|bc

O

comando

seq

irá

gerar

a

sequência:

1*2*3*4*5*6*7*8*9*10*11*12*13*14*15*16*17*18*19*20*21*22*23*24*25*26

que será avaliada pelo bc.

Se eu tivesse um computador capaz de realizar 1 bilhão de tentativas por segundo (1.000.000.000) e tiver 1 bilhão destes computadores para uso, o ataque de força bruta ainda levaria 201.645.730

segundos, ou aproximadamente 6 anos de processamento!

Verifique você mesmo no bash:

$ echo "403291461126605635584000000 / 2 / 1000000000 / 1000000000 / 60 / 60 / 24 / 365" | bc

Divido o número de tentativas por 2, pois na média se acerta na metade das tentativas, divido pela quantidade de quebras por segundo de um computador, que é um bilhão, divido pelo número de computadores que tenho. Depois divido por 60 para transformar segundos em minutos, por 60 novamente para transformar em horas, por 24 tem-se dias e dividindo por 365 tem em anos.

Logo, por força bruta, este algoritmo de substituição monoalfabética é infalível e inquebrável, apenas com o desconforto de ter que memorizar uma k que é uma tabela.

Costumo instigar meus alunos neste momento perguntando-lhes se está aí o algoritmo perfeito e inquebrável! Então?

Por força bruta, SIM, eis um algoritmo ideal. Só que existem outros meios de se quebrar um algoritmo de cifra que é através da criptoanálise.

Ataque por criptoanálise

O ataque por força bruta é possível em todos os casos. Ainda não existem algoritmos imunes a este ataque, ou seja, ele sempre poderá ser tentado. A questão é o tempo que levará. Deseja-se um algoritmo com tantas possibilidades de chave que o ataque levaria anos ou mesmo milhares de anos, de sorte que ninguém sequer irá tentar este ataque por ser inviável (em tempo: estudos sobre computação quântica sugerem a possibilidade da construção de algoritmos de criptografia imunes ao força bruta).

A cifra de substituição monoalfabética com uma tabela de trocas, citada no capítulo anterior, é um caso de um algoritmo para o qual demonstrou-se que o foça bruta é inviável. Mas existe a criptoanálise.

Simon (ver referências) define a criptografia como a eterna guerra entre criptógrafos e criptoanalistas. Um constrói para que o outro descubra como destruir! No caso mais específico da substituição monoalfabética ela é frágil e sucumbe ao ataque de "Análise de Frequência".

Costumo brincar de forca com meus alunos nesta hora:

Costumo brincar de forca com meus alunos nesta hora: Vamos lá. Qual letra você escolheria? Notoriamente

Vamos lá. Qual letra você escolheria?

Notoriamente todos começam tentando a letra "A" ou, no máximo, indo pelas vogais. Porque? Ora, pelo simples fato de que em um texto em português a letra "A" é a letra que mais se repete! É improvável que um texto não possua uma boa quantidade de letras "A"s. Isto é análise de frequência.

Se estou tentando quebrar uma cifra monoalfabética (onde uma letra trocou por outra), sabendo que o texto é em português a primeira coisa que faço é contar as letras. Se, e ao contar, descubro que a mais repetida é o "W" é provável que o "W" está substituindo a letra "A". Onde tem "W" coloco "A" e vou brincando até o texto fazer algum sentido para mim. No caso da forca, ao colocar a letra "A" ficaria assim:

caso da forca, ao colocar a letra "A" ficaria assim: Vamos ver quem posta o primeiro

Vamos ver quem posta o primeiro comentário dizendo qual é a palavra!

Todo o algoritmo de substituição monoalfabético é vulnerável ao ataque de análise de frequência. Se o texto for em inglês, sabe-se que a letra que mais se repete é o "E".

Mas entenda que substituição monoalfabética não quer dizer apenas letras assim como análise de frequência não se aplica somente a letras que mais se repetem! Posso cifrar o arquivo binário com uma tabela de 256 trocas, onde o byte 00000000 será trocado por 00110110, por exemplo, e assim por diante.

Ainda é considerado substituição monoalfabética. No caso, se era um executável, posso realizar análise de frequência nele, descobrir quais os bytes mais presentes em um EXE típico e usar o mesmo princípio! Fabricantes de processadores fazem isto para descobrir as instruções mais usadas

em programas a fim de otimizá-las.

Logo, foi para o brejo nosso algoritmo perfeito: ele perece pelo ataque de "Análise de Freqüência".

Alternativas interessantes ao longo da história foram usadas para melhorar a cifra monoalfabética como variar a troca para os mais frequêntes. Como exemplo, a letra "A", sendo a que mais se repete, pode ser trocada por "X", por "#" ou por "*". Isto, se bem usado, evita a análise de freqüência, mas impõe alguns problemas, como o fato do alfabeto de troca ter que possuir mais símbolos que o original. Enfim, a cifra de Viginère resolveu de forma criativa este problema e ficou inquebrável por séculos até que Babage a quebrou usando, pasmem, Análise de freqüência (Simon).

Ainda existem outras técnicas de criptoanálise como por exemplo as colas. Chama-se de cola quando um atacante tem uma vaga ideia de trechos da mensagem. Na segunda guerra mundial os alemães pisaram na bola neste sentido, pois toda a comunicação tinha a saudação nazista, logo ao menos um trecho da mensagem era previsível (Simon). Hoje os modernos algoritmos de cifras devem ser imunes as colas, ou seja, mesmo que eu lhe dê centenas de textos cifrados e as suas centenas de textos originais correspondentes, ainda assim você não deve ser capaz de descobrir qual chave eu usei (esta propriedade é muito interessante e parece utópica, mas não é).

Simétricos ou assimétricos?

O que temos até agora?

* método: o algoritmo matemático que faz a cifra e a decifragem. Não deve ser segredo.

* chave: único segredo. Uma informação que alimenta o algoritmo para cifrar ou decifrar. Quanto mais possibilidades, mais inviável é o força bruta.

Assim como uma porta de uma casa com sua fechadura que só pode ser aberta por quem tiver a chave. Considerando que a fechadura é a prova de criptoanálise, ou seja, a prova de "chaveiros", a única forma de abrir a porta sem a chave correta é se um chaveiro viesse com uma sacola com todas as possíveis chaves para aquela fechadura e ficasse tentando até uma servir. Se forem bilhões de chaves possíveis, torna inviável (isto seria um força bruta).

Mas veja que neste exemplo a mesma chave que fecha também abre. Existe apenas uma chave e ela serve para trancar a porta e também para destrancá-la! Neste caso tem-se o que se chama de algoritmo simétrico, onde existe apenas uma única chave e ela serve para cifrar e decifrar.

Um problema crônico existe com os algoritmos simétricos e ele atormentou os cientistas durante muito tempo: como pode ocorrer de forma segura a troca das chaves?

Se eu quero trocar uma mensagem com a pessoa B como conto ao B que usarei k=10 para cifrar a mensagem? Se tiver a oportunidade de me encontrar pessoalmente com ele, ok, converso de forma reservada e lhe conto a chave. Mas e se ele estiver distante, sem a possibilidade de um encontro pessoal? Telefono para ele? E se alguém estiver com uma escuta telefônica? Envio um email? Veja, não tem como realizar esta comunicação de forma segura.

Este problema atormentou muita gente. Na segunda guerra o livro dos códigos da Enigma, com chaves diárias de um mês inteiro, era entregue em mãos aos operadores de rádio. Este tinha ordens para, sob ataque, imediatamente destruir a máquina e o livro. Se os aliados tivessem acesso a este livro seriam capazes de quebrar as comunicações de um mês inteiro (o filme "U-571 - A Batalha do Atlântico" explora este fato, onde os aliados disfarçam um submarino como sendo alemão a fim de tentar capturar a Enigma).

Simon conta detalhes deste fato histórico e revela que uma das primeiras formas que os aliados acharam para ler as mensagens foi subornar um oficial alemão (depois eles quebraram com colas e depois com máquinas implementadas por Alan Turing chamadas de "bombas")!

Seria possível a troca de chaves de forma segura usando um meio de comunicação inseguro? Isto se consagrou como matematicamente impossível, exceto para os "loucos" Marin Hellman e Whitfield Diffie. Loucos pois aparentemente estavam pesquisando algo impossível, para o qual já se havia desistido: um algoritmo de troca de chaves seguro em um meio inseguro.

Este artigo ficaria muito longo se começasse a contar a história do famoso algoritmo Diffie- Hellman e o quanto ele revolucionou a ciência da criptografia. Cabe apenas ressaltar o raciocínio que embasou estes "loucos". Eles pensaram facilmente em um protocolo de troca de informações sigilosas via correio. É interessante para ilustrar.

Imagine que quero enviar documentos sigilosos pelo correio para "P" e que eu não confio no carteiro. Colocar os documentos em uma caixa com cadeado não serve, pois como enviaria a chave

do cadeado para o "P"? Pelo correio? Por teletransporte? Se não confio no meio, não adianta variar os métodos usando este meio de transporte no qual não confio. Estamos falando de criptografia onde se leva as teorias ao extremo.

Mas DH pensaram em um método (eu sou o "E" enviando documentos para "P"):

1. "E" compra um cadeado em uma ferragem;

2. "E" coloca os documentos em uma caixa e coloca o seu cadeado. Pressupõe-se que tanto a caixa como o cadeado são invioláveis e que a única forma de abrir a caixa é com a chave;

3. "E" envia a caixa pelo Correio. Veja que ninguém poderá abir, pois "E" não enviou a chave. O

carteiro curioso nada pode fazer;

4. "P" recebe a caixa. Bom, "P" também não a pode abrir pois ele não tem a chave (surpreso?).

Mas "P" ao invés de abrir, compra o seu cadeado e coloca ele também na caixa. A caixa agora tem DOIS cadeados: o de "E" e o de "P";

5. "P" devolve a caixa pelo correios ao "E";

6. Legal, agora nem mesmo "E" consegue abrir sua caixa. Mas ele apenas usa a sua chave para

tirar o seu cadeado, mantendo o cadeado de "P";

7. "E" devolve a caixa para "P" que agora pode abrí-la.

Observe que neste protocolo jamais houve uma troca de chaves. DH pensavam que deveria existir um princípio matemático que reproduzisse este efeito e depois de muita pesquisa o encontraram na aritmética modular usando números primos (mais tarde se soube que eles não foram pioneiros, pois pesquisas secretas neste sentido haviam sido realizadas muitos anos antes).

Prometi que não ia falar do algoritmo de Diffie-Hellman e não vou. Apenas devo dizer que ele, em sua forma original, é vulnerável e sua importância histórica é mais por ter abertos portas. O famoso e ainda extremamente usado algorítimo RSA é baseado na mesma aritmética modular do DH.

Um algoritmo assimétrico, portanto, é quando se usa uma chave para cifrar, porém, magicamente, esta chave não serve para abrir o que se cifrou. Não tem espaço aqui para explicar isto em termos matemáticos (se alguém quiser, me peça), mas o fato é que tais algoritmos existem.

Muitos chamam estes algoritmos de chave pública e privada, mas o nome técnico deles é algoritmos assimétricos. Esta confusão no nome é porque uma das chaves, normalmente a que serve para cifrar, é tornada pública e a outra é mantida sob sigilo conhecida como chave privada (eu tenho que tomar muito cuidado quando falo disto. Sempre "chave privada". Não foram poucas as vezes que me peguei falando "Se você der a sua privada para o fulano").

Para entender os assimétricos eu uso uma excelente analogia! Voltemos aos correios e ao uso das caixas. Tem uma maneira ainda mais eficiente de receber ou enviar documentos sigilosos.

Digamos que eu quero enviar um documento para "P". Bastaria isto:

1. "P" compra um cadeado e me envia ele ABERTO pelo correio. Não envia a chave;

2. "E" recebe o cadeado aberto de "P" e o usa para fechar a caixa. Uma vez fechada, "E" já não

tem mais condições de abrí-la;

3. "E" envia a caixa com o cadeado fechado de "P";

4. "P" a abre pois tem a chave.

Nesta analogia a chave pública seria o cadeado aberto: ele só serve para cifrar.

Estendendo a analogia, "P" poderia pedir a um fabricante de cadeados que confeccionasse milhares de cadeados com a mesma chave. O cadeado de "P" estaria em todas as agências de correios, por exemplo. Esta é a ideia.

Claro que para que isto funcione o cadeado deve ser forte e a chave deve possuir muitas combinações, senão um ataque de força bruta seria viável. Deve também ser imune a criptoanálise, ou seja, nenhum chaveiro do mundo seria capaz de construir uma nova chave apenas analisando o cadeado.

Voltando aos termos "informáticos" a ideia do cadeado foi implementada pelo algoritmo RSA baseado na fatoração de números primos. Constitui em duas chaves, uma chamada de Ke (K para "e"ncriptar) e Kd (k para "d"ecriptar). Uma complementa a outra. O que cifra-se usando Ke apenas com a Kd é possível recuperar (não vou descrever o funcionamento do RSA).

Um atacante conhece Ke pois a tornei pública. Contudo, mesmo tendo ela, ele está computacionalmente inviabilizado de calcular Kd. RSA garante isto através do uso de números primos gigantes, hoje com tamanhos de 512 bits.

Criptografia nos dias de hoje

Agora que os conceitos foram colocados, vamos aos fatos práticos.

Na informática tudo se resume a bits. Em um algoritmo de criptografia o que se mede é o tamanho da chave em bits. Se uma chave possui 3 bits, ela pode ser uma dentre os seguintes valores:

000

001

010

011

100

101

110

111

Isto nos dá apenas 8 possibilidades para k. Na matemática, o número de possíveis chaves é de 2 elevando ao número de bits (23 = 8).

Assim sendo, se um algoritmo simétrico tiver 128 bits de chave, como é o caso do AES, significa que ele tem 2128 possíveis chaves ou 340282366920938463463374607431768211456 (nem tente ler este número!).

Lembra do nosso computador que testa 1 bilhão de possibilidades e do fato de dispormos de 1 bilhão destes para usar? Com este hardware eu levaria 170141183460469231731 segundos, já considerando a metade das tentativas (2127: lembra? ninguém é tão azarado de acertar na última). Em uma calculadora, dividindo isto por 60 para ter minutos, por 60 novamente para ter horas, por 24 para ter dias e por 365 para anos, chega-se a estrondosa quantia de 5.395.141.535.403 anos!

É pura falta de conhecimento de causa quem afirma que algoritmos simétricos de 128 bits são quebráveis por força bruta. Só mesmo Dan Brown em seu livro "Fortaleza Digital" e seu computador quântico de bilhões de bits para quebrar tal algoritmo!

Se considerar o AES128, não estou dizendo que ele é inquebrável pois pode ter fraquezas exploráveis por criptoanálise. Se houver ou (a) não se descobriu ou (b) quem descobriu não nos contou! O que estou afirmando é ser inquebrável quanto a força bruta!

Literaturas afirmam que um algoritmos simétrico de 256 bits tem segurança eterna, pois nem todo o silício do universo daria para construir uma máquina que o quebrasse (parenteses agora: da maneira como se constrói computadores hoje em dia. Alguns cientistas vem falando da computação quântica e de como ela mudaria a maneira de fazer as coisas. Computação quântica é cercada de mistério e de exageros. O fato é que já existe uma máquina com sete bits quânticos disponível).

Agora o que muitos realmente confundem é quanto a força bruta dos algoritmos assimétricos! É muito, mas muito diferente!

Em um simétrico, se eu tenho 8 bits de chave, tenho 256 combinações possíveis.

Se pegar o caso do RSA que é um assimétrico e se tiver uma chave de 8 bits, significa que o valor do N é de 256 bits. Sem querer descrever o RSA aqui, posso dizer que N é o resultado da multiplicação de dois números primos de 4 bits. Quebrar a chave significa achar um destes números. E não é de 2 elevado na 4 tentativas, pois os valores 2, 4, 6, 8, 9, 10 não precisam ser

testados pois não são primos!

No universo de 4 bits só existem estes primos: 2, 3, 5, 7, 11,13. Só! Mata-se em seis tentativas no máximo!

Para algoritmos assimétricos, como no caso do RSA, o cálculo do esforço matemático não é simplesmente de 2NumeroDeBits. É muito, mas muito menos que isto.

Exatamente por isto é que os algoritmos assimétricos precisam de uma chave muito maior, hoje perto dos 1024 bits. No caso do RSA, dizer que ele é de 1024 bits, significa que o valor de N é de 1024 bits, logo quebrar significa encontrar um número primo de até 512 bits que sirva.

Aí tem gente que se acostumou a ver o RSA de 1024 bits e sai dizendo que um AES de 128 é fraco, pois só 128 bits? São coisas diferentes, meu caro!

Conclusões

Este artigo é apenas uma introdução para, quem sabe, ser continuado em artigos futuros. Muita coisa ficou de fora, como os tipos de cifras (de bloco, de fluxo), algoritmos de HASH e até mesmo a descrição dos algoritmos. Entender o funcionamento de um RSA por exemplo é muito gratificante, embora não interesse a maioria. Para nós o mais importante é saber como empregá-los e não os seus princípios matemáticos. Se os matemáticos dizem que que é inviável, que seja. A gente acredita, implementa e usa!

Deve-se dizer que os algoritmos assimétricos são extremamente onerosos, ou seja, consomem muita CPU. Seu uso deve ser evitado ou, pelo menos, minimizado pois o processador agradece. Como os simétricos são absolutamente seguros e rápidos, sendo seu único problema a troca de chave, é comum usar um assimétricos apenas para trocar a chave convergindo após para um simétrico. O protocolo SSL é exatamente assim (quem está por trás do SSH e o HTTPS, dentre outros).

De forma muito resumida, o que o SSL faz é mais ou menos o seguinte:

1. Cliente e servidor concordam em qual algoritmo simétrico irão utilizar. Exemplo: AES128;

2. Cliente solicita a chave pública do servidor (na prática chama-se certificado, mas como disse,

estou descrevendo de forma muito resumida);

3. Cliente escolhe aleatoriamente uma chave k de sessão;

4. Cliente cifra a chave que ele escolheu com a chave pública do servidor;

5. Cliente envia k cifrado para o servidor. Até ai se usou o algoritmo assimétrico;

6. Servidor recebe k cifrado, decifra com a sua chave privada;

7. Cliente e servidor agora conversam usando o AES128 usando a chave simétrica k.

Esta é a ideia, usar o oneroso algoritmo assimétrico apenas o necessário, nada além disto.

Outras aplicações muito populares usam vários tipos de cifras, cada uma dentro do seu contexto, de forma que os assimétricos não estão ai para substituir os simétricos, mas sim para complementá-lo. Um exemplo disto é quanto a assinatura digital que emprega algoritmo assimétrico e um de HASH, igualmente para poupar esforço (pense em assinar um documento de 1GB. Rodar um assimétrico sobre 1G é oneroso. Mas rodar ele sobre um HASH de 256 bits é bem mais prático).

Referências

Boa parte do que aprendi sobre criptografia eu encontrei no maravilhoso livro "O Livro dos Códigos" de Simon Singh que, espero, não esteja mais esgotado. Ele é EXCEPCIONAL. Dou fé!

Este livro é gostoso de ler e pode ser apreciado até por quem não é da área. Não é exatamente um

livro técnico. Simon conta o uso da criptografia ao longo da história, sua presença em guerras e o faz de uma maneira muito leve. A descrição matemática de alguns algoritmos ele traz em anexos.

Este livro é intrigante pois toda a sua narrativa é com a premissa de que criptografia é segredo. Todos os grandes códigos bem como as grandes quebras só foram reveladas ao público muitas décadas depois. Isto é inquietante pois deixa uma sensação de conspiração no ar, já que os maiores salários nesta área são pagas por agências governamentais a pessoas completamente anônimas. Quando a NSA ceifou o algoritmo Lucifer da IBM tirando 8 bits de sua chave para que virasse o

DES (originalmente ele era de 64 bits, foi reduzido para 56+8 bits de paridade) muitos disseram que

era pelo fato da agência ter meios de quebrar 56 bits, mas não 64 (NSA quer dizer National Security Agency. Muitos fazem uma brincadeira com o nome dizendo que NSA quer dizer "No Such Agency - agência inexistente).

O bem humorado autor (Simon) já coloca em sua introdução que ao final ele faz muitas

especulações sobre o que já existe e poderá existir. Ele diz que elas podem ser inverdades dado o sigilo da área, mas que felizmente as únicas pessoas que podem apontar os erros no livro não o podem fazer devido ao sigilo de seus empregos e ao seu anonimato! Enfim, garanto a qualquer um

uma excelente leitura.

Outros livros de criptografia se destinam a entrar fundo nos conceitos matemáticos e sua exploração. Em um destes livros eu encontrei uma façanha interessante para quebrar o RSA o que demonstra o quanto a criatividade é insuperável! Devido a sua matemática, algumas cifragens podem levar muito mais tempo e outras menos tempo, dependendo da natureza da mensagem a ser cifrada. Se um atacante tiver a possibilidade de medir o tempo que você leva para cifrar o que ele quer, ele pode gerar textos bem formados e com a análise dos tempos de resposta que você levou para cifrá-los, deduzir muitos bits da chave! Depois desta descoberta alguns algoritmos

deliberadamente inserem delays aleatórios para inviabilizar qualquer análise neste sentido. O livro

que

descreve isto é o "Criptografia e segurança de redes", de William Stallings e disponibilizado

pela

editora pearson em português. Este livro é excepcional se você realmente quer se aprofundar

muito nesta ciência (e prepare-se para uma enxurrada de funções matemáticas, familiarização com termos como transformada de Fourier ou logaritmos discretos - o livro é bem pesado).

Caso se interessem por um algoritmo de troca monoalfabética, tem uma implementação minha em

C disponível em gravatai.ulbra.tche.br/~elgio/disciplinas/?DISC=outras&MAT=VOL (este

algoritmo eu escrevi atendendo pedidos ao tópico Criptografia em C).

Na

mesma página também tem o código em PHP para implementar um RSA de 32 bits, mas como

eu

não expliquei aqui como o mesmo funciona, torna-se sem sentido.

Também escrevi e postei aqui no VOL um artigo sobre senhas em Linux, explicando como a mesma é gerada utilizando HASH. Ele pode ser obtido em Armazenamento de senhas no Linux.

Outro artigo de minha autoria descreve os algoritmos simétricos de bloco e de fluxo, que pode ser acessado em Criptografia chave simétrica de bloco e de fluxo.

Outros artigos interessantes aqui no VOL merecem serem citados:

* Matheus Santana Lima escreveu em seu artigo Os segredos da criptografia com o Gcipher como usar a ferramenta Gcipher, mas como todo bom artigo, enriqueceu muito o mesmo com

introduções e estórias da segunda guerra mundial, inclusive com fotos da Enigma. Ele não relata em seu artigo, mas suspeito que o Matheus leu o livro do Simon!

* Ítalo Pereira de Brito fez uma boa introdução aos algoritmos simétricos, assimétricos e de hash (que ele chamou no artigo de "uma via") em seu artigo Uma breve abordagem sobre Criptografia, de 2006.

* Rodrigo Gomes, em seu artigo Conceitos de criptografia com chave simétrica e assimétrica de

2004, define bem os termos de confiabilidade, integridade e não repúdio, todos desejáveis em um protocolo de criptografia. Ele também destaca a necessidade das chaves assimétricas.

* Por fim, um usuário anônimo que removeu o seu perfil, fez um interessante relato do que seria a computação quântica em Criptografia quântica, embora o artigo seja uma cópia literal de um capítulo da quarta edição do livro de Redes do Tanembaum. O livro do Simon também é muito bom na definição da computação quântica.