T�pico: Criptografia - Introdu��o
6 Criptografia - Introdu��o
Criptografia - Introdu��o Parte 1
Criptografia �, de maneira simples, �escrever em c�digos�. N�o vou dedicar linhas � uma abordagem hist�rica da criptografia. O que interessa � que a ci�ncia da criptografia, a criptologia, � muito antiga. No come�o, era bem simples. Coisa que com papel e caneta voc� faz. Hoje em dia, � muito mais complexa, c�digos que se voc� colocar todos os computadores do mundo pra tentar quebrar vai precisar de mais tempo que a idade estimada do universo pra ter sucesso.
Ih, j� comecei a complicar. C�digos, quebrar? Ok, vou tentar ir com mais calma.
Em geral, a criptografia � o processo de transformar um texto compreens�vel (que chamaremos de mensagem) em um texto codificado (que chamaremos de c�digo), usando uma f�rmula matem�tica (que chamaremos de cifra). �Mas espera a�, f�rmula matem�tica?�. Sim! Toda informa��o num computador, seja o que for, est� armazenada na forma de n�meros. Uma figura, um texto, etc. Tudo isso s�o n�meros. Aplica-se uma f�rmula sobre um n�mero, ele vira outro n�mero. De maneira simplificada, isso � a cifragem, ou seja: Voc� pega uma mensagem (n�mero), aplica uma cifra (f�rmula) e obt�m um c�digo (outro n�mero).
Agora, voc� lembra que l� na escola voc� aprendeu uma coisa chamada fun��o inversa? Aquela, que se aplicada sobre a resposta obtida na fun��o, retorna o n�mero original? Por exemplo, a fun��o inversa de:
Simples, n�o? Quando fazemos isso, podemos dizer que estamos decifrando o c�digo. Ou seja, pegamos um c�digo (o n�mero obtido na cifragem), aplicamos uma cifra inversa (fun��o inversa) e obtemos nossa mensagem de volta. Voc� pode estar pensando: �Ok, mas este exemplo foi ridiculo�. Sim, pra n�s, hoje em dia, chamar isso de criptografia pode parecer rid�culo. Mas o Grande J�lio C�sar fez uso de uma cifra muito parecida, a famosa Cifra de C�sar, que envolvia associar cada letra a um n�mero e simplesmente fazer algo muito parecido com o que acabamos de fazer: somar 13 para cifrar, e tirar 13 para decifrar.
Na verdade est� envolvida a� uma opera��o modular, ou seja, imagine os n�meros como indo de 1 a 26 (26 letras do alfabeto) apenas, se chegar a 27 voc� na verdade volta a 1, e vice-versa, se chegar a 0, volta pro 26. Pra facilitar, coloque os n�meros em um c�rculo. Note que a obten��o do m�dulo, matematicamente falando, nada mais � que obter o resto da divis�o (28 mod(26) = 2, pois 27 dividido por 26, d� 1 e sobra 2). Pode parecer dif�cil, mas voc� certamente j� viu isso antes, mas talvez s� n�o percebeu: 15 horas no seu rel�gio digital, � indicado como 3 horas no seu rel�gio de ponteiro que representa as 24 horas do dia em m�dulo 12.
Claro que hoje em dia as coisas n�o s�o mais t�o simples. As cifras evoluiram muito em complexidade, usando alguns artif�cios da matem�tica que n�o vou comentar aqui por n�o atender o objetivo dos meus posts.
Uma �ltima coisa importante: o n�mero 13 da cifra de C�sar, pode ser considerado como um exemplo simples de uma coisa importante de qualquer cifra moderna. O n�mero poderia ser qualquer um, de 1 a 25, certo? Ou seja, e voc� usar 12 para cifrar a mesma mensagem, o c�digo obtido ser� diferente. Este valor que podemos escolher, e que afeta o resultado obtido, � o que chamamos de chave. No caso de C�sar, se n�o soubermos a chave, precisamos tentar s� as 25 poss�veis, o que voc� pode fazer com l�pis e papel em poucos minutos. E com um computador, nem se fala. Esse neg�cio de tentar todas as chaves poss�veis � um dos jeitos mais conhecidos de quebrar um c�digo, e recebe o nome de ataque por for�a bruta (faz sentido, n�?). Uma boa cifra moderna precisa mais do que a idade estimada do universo pra ser quebrada assim.
No pr�ximo cap�tulo vou dar uma introdu��o b�sica sobre o que � Criptografia Assim�trica.
Criptografia - Introdu��o Parte 2
No �ltimo post desta s�rie comentei alguns aspectos b�sicos sobre criptografia. Falei de maneira mais simples poss�vel o que � criptografia e como ela � realizada. Terminei falando sobre a quest�o da chave, e a sua import�ncia.
N�o sei se voc� parou pra pensar, mas a chave � um problema. Se voc� quer cifrar uma mensagem, passar ela para outra pessoa, e quer que ela possa decifrar a mensagem, voc� precisa passar a chave pra essa pessoa. E se voc� est� cifrando o texto, quer dizer que voc� quer que s� aquela pessoa possa ler a mensagem, mais ningu�m. A quest�o �bvia �: como vou enviar a chave de maneira segura? Mandar ela junto com a mensagem n�o d�, qualquer pessoa que tiver acesso no meio do caminho vai poder ler a mensagem, pois tem a chave e a mensagem. Talvez ent�o telefonar e falar a chave? Oras, se o telefone � seguro, por que n�o fala a mensagem pelo telefone de uma vez?
A mesma coisa vale pra todo outro meio que voc� puder imaginar. Como � poss�vel resolver este dilema?
A criptografia sim�trica, que � essa a� onde voc� combina uma �nica chave que � conhecida pelas duas pessoas, � sim muito utilizada. Mas antes de come�ar a falar como se faz, afinal, pra combinar essas chaves de maneira segura, vou falar sobre outro tipo de criptografia. A criptografia assim�trica!!!
N�o seria bom se, quando eu quero cifrar um texto pra voc�, voc� pudesse me falar sua chave publicamente, por exemplo colocar ela no seu site? A criptografia assim�trica permite isso. A ideia b�sica � a seguinte: atrav�s de uma s�rie de artif�cios matem�ticos (envolvendo por exemplo n�meros primos), � poss�vel fazer criptografia com duas chaves. Uma, voc� guarda pra voc�, e chama de chave privada. A outra, voc� fala pra todo mundo, e chama de chave p�blica. Existem m�todos de gerar essas chaves, de forma que v�o acontecer tr�s coisas muito interessantes:
* Se voc� cifrar algo usando a chave privada, s� a chave p�blica pode decifrar o c�digo gerado. Ou seja, se voc� usar sua chave privada para cifrar uma mensagem, todo mundo vai poder decifr�-la! Isso pode parecer in�til pra voc� neste momento, mas em outro artigo, vou mostrar a utilidade disso.
* Se voc� cifrar algo usando a chave p�blica, s� a chave privada pode decifrar o c�digo gerado. Agora sim! Se voc� percebeu, todos tem acesso � sua chave p�blica, n�o apenas voc�! Ou seja, todos podem cifrar mensagens que s� voc� pode abrir!
* E, como n�o poderia deixar de ser, � imposs�vel descobrir qual � a chave privada tendo apenas acesso � chave p�blica. Como n�o pretendo entrar em detalhes, apenas aceite que, usando bons m�todos de gera��o de chaves, isso � verdade.
Ou seja, basta cada pessoa gerar um par de chaves, contar a sua chave p�blica pra todo mundo, e nossos problemas acabaram! � claro, existem v�rias coisas que devem ser observadas, e gerar estas chaves n�o � algo t�o simples assim (� simples suficiente pra qualquer computador caseiro fazer em poucos segundos). Mas � poss�vel e � assim que funcionam muitos dos sistemas de criptografia modernos. A figura abaixo ilustra o processo de cifragem e decifragem com criptografia assim�trica:
Agora voc� pode estar perguntando: por que, ent�o, ainda se usa criptografia sim�trica? A resposta � simples: ela � muito mais r�pida. Se voc� precisa cifrar milh�es de dados, n�o vai querer usar a criptografia assim�trica. Mas que tal usar a criptografia assim�trica pra combinar uma chave, e depois usar de novo criptografia sim�trica ? Se a criptografia assim�trica � �cara�, use ela s� pro que interessa, ou seja, cifrar com a chave p�blica da pessoa com quem voc� quer se comunicar uma quantidade pequena de informa��es: uma chave sim�trica. Depois que ambos conhecem a chave sim�trica, pronto, use ela para trocar dados sigilosos. � baseado nessa ideia que funciona inclusive o sistema de �sites seguros�, aqueles com https e �cadeado�, por exemplo os sites de bancos virtuais.
No pr�ximo post, agora que temos um pouco de no��o dos dois principais modos de criptografia, farei uma abordagem um pouco mais pr�tica, mostrando exemplos reais de onde voc� utiliza criptografia no seu dia-a-dia.
Criptografia - Introdu��o Parte 3
Dentro da criptografia, existem algumas fun��es al�m da cifragem e decifragem, sobre as quais j� comentei nos outros posts. Uma delas, muito importante, � a chamada fun��o hash, ou, em bom portugu�s, resumo.
Uma fun��o hash � uma fun��o que pega uma mensagem de qualquer tamanho, e converte ela num n�mero aparentemente aleat�rio, de tamanho fixo. A mesma mensagem sempre resultar� no mesmo hash, n�o importa onde e quando voc� utilizar a fun��o (desde que, � claro, seja a mesma fun��o hash. Existem v�rias fun��es hash, algumas das mais utilizadas hoje s�o a MD5, a SHA-1 e a SHA-256).
� claro que, se o n�mero � de tamanho fixo, se a mensagem for maior que o n�mero, necessariamente dados v�o ser �jogados fora� na hora de calcular o hash. Ou seja, n�o tem como voc� obter a mensagem original a partir de um hash. Por isso, muita gente usa o hash pra armazenar senhas de websites no banco de dados, por exemplo. �Como, se n�o d� pra obter a senha de volta?�. Elementar, caro Holmes: O que se faz � armazenar o hash da senha. Quando voc� informa sua senha no login, o site gera o hash de novo, e compara os hashes, n�o as senhas. Se forem iguais, a senha deve ser igual. Mas se algum cracker invadir o servidor e roubar o banco de dados, ele vai ver apenas hashes, e n�o senhas. Isso tem um pequeno problema, mas vou deixar pra comentar isso mais no final.
Uma aplica��o muito mais interessante (na minha opini�o) do hash � a assinatura digital. Quando voc� assina um documento, na vida real, com caneta e sua m�o, voc� garante a autenticidade daquele documento, certo? Ou seja, se a assinatura � sua, voc� est� ciente do conte�do do documento. Mas falta uma coisa: integridade. Quem garante que nada foi adicionado ao documento depois que voc� assinou ele? Se voc� assina um cheque em branco, qualquer coisa que for preenchida nele depois ser� paga, n�o importa se � o que voc� queria que fosse pago ou muito mais. Para contratos, o que se faz � autenticar e registrar o documento, em cart�rio, e emitir v�rias vias do mesmo documento. Se algu�m aduleterar o documento, o cart�rio pode provar qual � o original.
Na assinatura digital, tanto a autenticidade quanto a integridade s�o garantidas. Vamos ver como funciona:
Voc� tem uma mensagem, que quer assinar, no seu computador. Voc� primeiro gera um hash (resumo) dessa mensagem. Depois cifra esse hash com sua chave privada (lembra da criptografia assim�trica?. A� voc� anexa este hash cifrado na sua mensagem, e manda ela ao destinat�rio.
O que vai acontecer? Como vimos na parte 2, quando algu�m cifra algo usando a chave privada, significa que todo mundo pode decifrar essa mensagem. N�o tinha mostrado nenhuma utilidade pra isso ainda, mas agora voc� vai entender: O destinat�rio, recebendo a mensagem e o hash cifrado, pode decifrar o hash com a sua chave p�blica. Assim, ele sabe que foi voc� que assinou, e passa a ter certeza da autenticidade, pois voc� � a �nica pessoa no mundo que conhece a chave privada, ent�o s� voc� poderia ter cifrado aquele hash. Ele vai obter um hash, e ele mesmo vai gerar um novo hash a partir da mensagem que recebeu. Ele compara o hash que voc� mandou cifrado, com o hash que ele acabou de gerar, e v� se s�o iguais. Desta forma, agora al�m da autenticidade, ele pode ter certeza da integridade da mensagem. Simples n�o? A� vai uma figura ilustrando essa id�ia (a chave vermelha � a chave privada do remetente, a verde � a p�blica):
Colis�o de Hash
Uma das quest�es importantes dos hashes � a chamada colis�o de hashes. Se voc� parar pra pensar, o fato do hash ter tamanho fixo, mas o n�mero de mensagens ser infinito, significa que necessariamente existem diferentes mensagens que tem o mesmo hash. Ou seja, levando para fins pr�ticos, � poss�vel que duas senhas diferentes tenham o mesmo hash, e por isso, para acessar a conta do Fulano voc� possa usar a senha do Sicrano. Ou pior. Voc� pode assinar um documento digital que � apenas um email para um amigo. Mas o hash deste email � justamente o mesmo hash de um texto de contrato que passa todo seu dinheiro para uma determinada pessoa. E na pr�tica, isso significa que se eu colocar a assinatura digital do email anexa ao contrato, todo mundo vai achar que a assinatura foi mesmo feita sobre o contrato. Eu, heim! Esta t�cnica, de tentar obter mensagens diferentes que tem o mesmo hash, � o que � chamado de colis�o de hash. A figura abaixo demonstra este ataque:
Mas calma, n�o entre em p�nico. Pensando nisso, mensagens de hash s�o virtualmente aleat�rias. Um bom hash � feito de tal forma que seu comprtamento � imprevis�vel, ou seja, voc� n�o deve conseguir montar uma mensagem querendo chegar num determinado hash. E mais do que isso, um bom hash � aquele que, modificando 1 bit na mensagem (lembre-se que o computador, tudo s�o n�meros, e n�meros representados na forma de bits 0 e 1), metade dos bits do hash mudam. Ou seja, � praticamente imposs�vel, com boas fun��es hash, obter uma colis�o que tenha alguma utilidade pr�tica.
O ataque � ainda eficiente para descobrir senhas, j� que nesse caso n�o interessa descobrir a senha de verdade, e sim apenas uma senha que gere o mesmo hash. N�o importa se a senha que voc� vai achar � a senha de verdade, ou seja, a data de nascimento do usu�rio, ou se for $CNSDLKU@$*() mas tenha o mesmo hash e portanto permite o acesso ao site do mesmo jeito. � por isso que cada vez mais as fun��es de hash simples est�o sendo substitu�das por fun��es de hash com um neg�cio chamado salt, que faz com que o hash seja diferente com salts diferentes e isso dificulte bastante o processo de colis�o.
Mas para o caso de assinaturas digitais, se uma colis�o for encontrada, � muito prov�vel que somente uma das mensagens tenha sentido. As demais provavelmente n�o passar�o de um amontoado de caracteres aleat�rios, sem sentido algum. E mesmo esse amontoado de caracteres � dif�cil de encontrar. Por isso, neste caso, n�o h� motivo para preocupa��o, desde que voc� esteja utilizando sempre boas e modernas fun��es hash.
Claro, voc� deve considerar que toda fun��o hash um dia ser� considerada fraca. Por exemplo o MD5, que por muito tempo utilizado, hoje j� tem exemplos de colis�es �teis. Ou seja, uma assinatura tem prazo de validade, e � preciso um jeito de manter a validade dessa assinatura por muito tempo - de prefer�ncia, pra sempre. A boa not�cia � que existe sim um jeito de fazer isso, e se chama carimbo de tempo, que � uma t�cnica que permite ter certeza sobre quando uma assinatura foi feita - mesmo que no futuro a fun��o de hash tenha sido quebrada, voc� saber� que quando a assinatura foi feita ela ainda era segura, e por isso pode confiar na assinatura. Mas a� j� estaremos indo longe demais para este artigo.
20 Re: Criptografia - Introdu��o
Acho que preciso tirar um tempo pra revisar esse texto hehehe, aproveitar a cabe�a "aliviada" nas f�rias...
Escrever no fim de curso e em meio � TCC sai cada coisa... :P....
PS 1: Sim, ele pediu autoriza��o pra usar o material. � creative commons, como tudo que publico no meu blog. PS 2: Link de refer�ncia: http://cristiantm.wordpress.com/?s=C...ia+para+leigos
Responder com cita��o 14/05/2009
Local Brasilia, DF
0 Re: Criptografia - Introdu��o
PS 1: Sim, ele pediu autoriza��o pra usar o material. � creative commons, como tudo que publico no meu blog. PS 2: Link de refer�ncia: Criptografia para leigos � Search Results � free(&me)