Você está na página 1de 21

UNIVERSIDADE F EDERAL DE P ERNAMBUCO GRADUAO EM CINCIA DA COMPUTAO CENTRO DE INFORMTICA REDES DE COMPUTADORES 2

CRIPTOGRAFIA CONTINUAO

Equipe: Hedlena Maria de Almeida Bezerra Matheus Cabral de Arajo Gois Professor: Arthur de Castro Callado

1. ndice
1. 2. 3. 4. 5. NDICE _______________________________________________________________ 2 ORIGENS _____________________________________________________________ 4 USOS _________________________________________________________________ 4 LIMITAES _________________________________________________________ 4 ASPECTOS HISTRICOS ______________________________________________ 5

ESTEGANOGRAFIA __________________________________________________________ 5 THE CIPHER WHEEL ________________________________________________________ 5 ENIGMA ___________________________________________________________________ 6 CRAY XMP________________________________________________________________ 6 Q UANTO VALE UMA INFORMAO? _____________________________________________ 6 6. CIFRAS _______________________________________________________________ 7

M ONOALFABTICAS E POLIALFABTICAS ________________________________________ 7 STREAM CIPHER E B LOCK CIPHER _____________________________________________ 7 CSAR ____________________________________________________________________ 8 PLAYFAIR _________________________________________________________________ 8 VIGENRE _________________________________________________________________ 8 ROTORES __________________________________________________________________ 9 7. CRIPTOGRAFIA SIMTRICA _________________________________________ 10

REDES DE FEISTEL _________________________________________________________ 10 DES (D ATA ENCRYPTION STANDARD) _________________________________________ 10 RC4 _____________________________________________________________________ 11 IDEA (INTERNATIONAL DATA ENCRYPTION ALGORITHM) _________________________ 11 BLOWFISH ________________________________________________________________ 11 CAST-128 ________________________________________________________________ 12 8. FUNES DE HASH __________________________________________________ 12

MD5 (M ESSAGE D IGEST 5) __________________________________________________ 12 SHA-1 (S ECURE H ASH ALGORITHM) __________________________________________ 13 9. CRIPTOGRAFIA ASSIMTRICA _______________________________________ 13

DIFFIE E H ELLMAN (DH) ____________________________________________________ 13 RSA_____________________________________________________________________ 13

ELLIPTIC CURVE CRYPTOSYSTEMS (ECC) ______________________________________ 14 RECURSOS ADICIONAIS _____________________________________________________ 14 ADK: ADDITIONAL DECRYPTION K EY __________________________________________ 14 KEY SPLITTING: PARTICIONAMENTO DE CHAVES __________________________________ 14 10. TECNOLOGIAS JAVA PARA CRIPTOGRAFIA (JCA/JCE) _______________ 14

INTRODUO ______________________________________________________________ 14 ARQUITETURA JCA/JCE ____________________________________________________ 16 M ODELO DE PROGRAMAO JCA/JCE ________________________________________ 17 MD5 ____________________________________________________________________ 17 BLOWFISH ________________________________________________________________ 18 11. OUTRAS APIS PARA JAVA __________________________________________ 18

JAVA AUTHENTICATION AND AUTHORIZATION S ERVICE ___________________________ 18 JAVA S ECURE SOCKET EXTENSION ____________________________________________ 19 JAVA CERTIFICATION PATH__________________________________________________ 20 12. REFERNCIAS ______________________________________________________ 21

2. Origens
Criptografia uma cincia to antiga quanto a prpria escrita. Seu avano tecnolgico foi praticamente constante at meados do sculo XX, uma vez que com a inveno do computador, novos e complexos algoritmos puderam ser inventados/testados. Alm do computador, outros fatores que permitiram o crescimento elevado da tecnologia de criptografia no sculo XX foram as duas grandes guerras mundiais. Alm disso, o surgimento da NSA (National Security Agency) agncia responsve l pela segurana de informaes possibilitou um grande crescimento na rea de criptologia.

3. Usos
O uso de criptografia permite os seguintes conceitos. Sigilo: Integridade: Autenticidade do usurio: Autenticao de remetente: Autenticao do destinatrio: Autenticao de atualidade: Permite que apenas os usurios autorizados possam ter acesso a uma determinada informao. Permite provar que uma determinada mensagem no foi alterada (intencionalmente ou acidentalmente). Permite verificar se um usurio quem ele afirma ser. Permite verificar se uma mensagem foi realmente enviada por um determinado usurio. Permite verificar se uma mensagem foi realmente recebida por um determinado destinatrio. Permite verificar se uma mensagem no se trata de uma mensagem antiga que est sendo reenviada.

4. Limitaes
Apesar das inmeras aplicaes para criptografia, importante deixar claro que ela serve apenas como uma ferramenta para a segurana de sistemas. Mesmo com o uso de criptografia, um possvel atacante pode ainda: Apagar todos os seus dados; Comprometer seu programa de criptografia; Encontrar uma forma de decifrar as mensagens explorando alguma fraqueza do algoritmo utilizado; Acessar os dados de seus arquivos antes de voc cifr-los ou aps voc decifr-los.

5. Aspectos histricos
Nessa seco sero apresentados e discutidos alguns aspectos histricos referentes evoluo de criptografia. No final dessa seo, ser apresentada a importncia de uma informao e uma curiosidade ocorrida na segunda grande guerra. Esteganografia A esteganografia a arte de esconder informaes de forma que a presena da mesma no seja detectada. O termo esteganografia deriva do grego e significa escrita encoberta. Alm disso, importante tambm no confundir os conceitos de esteganografia e criptografia. Enquanto o propsito principal da criptografia esconder o contedo das mensagens, o propsito da esteganografia esconder a existncia das mesmas. No que diz respeito segurana de sistemas, importante deixar claro que a esteganografia um suplemento criptografia, portanto, uma nunca deve substituir a outra. Um exemplo de esteganografia pode ser visto a seguir. O trecho abaixo reflete uma mensagem transmitida por um espio alemo durante a primeira guerra mundial. Observa-se que, descartando-se a informao propriamente dita, o texto bem construdo (Sujeito-verbopredicado).
Apparently neutral's protest is thoroughly discounted and ignored. Isman hard hit. Blockade issue affects pretext for embargo on by-products, ejecting suets and vegetable oils.

Entretanto, observa-se que, ao se extrair a segunda letra de cada palavra da mensagem, uma mensagem escondida revelada: Pershing sails from NY June 1. Costuma-se dizer que a esteganografia formou a base da criptografia, da a importncia da mesma nessa seo. The Cipher Wheel Esse dispositivo foi primeiramente pensado como um modelo denominado Roda de cifragem Jefferson, denominado assim uma vez que Thomas Jefferson projetou um dispositivo similar em seus manuscritos.

Acredita-se que esse dispositivo um dos dispositivos de criptografia mais antigos, mas a ligao do mesmo com Thomas Jefferson no foi provada. Seu funcionamento similar aos rotores, que sero explicados mais adiante nesse documento.

Enigma A figura ao lado apresenta a mais famoso dispositivo rotor, conhecido como Enigma. O Enigma foi utilizado pela Alemanha durante a segunda guerra mundial. A idia do Enigma foi desenvolvido por Arthur Scherbius e Arvid Gerhard Damm, e patenteada nos Estados Unidos por Arthur Scherbius. O Enigma possuia trs rotores escolhidos a partir de um conjunto de 5 rotores, um dispositivo que permutava o texto plano e um rotor responsvel por fazer os rotores girarem uma vez que o rotor anterior deu uma volta completa. Apesar de complicado, o Enigma foi quebrado durante a segunda grande guerra. A primeira equipe a quebrar o Enigma foi uma equipe de criptgrafos poloneses. Os poloneses repassaram essas informaes aos britnicos, os quais continuaram a quebrar inmeras verses do Enigma produzido pelos alemes no decorrer da guerra. Cray XMP A figura abaixo apresenta o supercomputador Cray XMP, a mais nova arma da NSA. Esse computador capaz de testar milhes/bilhes de chaves por segundo na tentativa de quebrar alguma cifra especfica.

Alm desse uso, o supercomputador Cray tambm utilizado para o teste de novos algoritmos de criptografia para verificar sua robustez (ou no) possveis ataques, como ataques do dicionrio, por exemplo. Quanto vale uma informao? Essa seo apresenta uma discusso sobre o valor de uma informao. Como exemplo, iremos apresentar o caso Coventry.

Em meados de novembro de 1940, Winston Churchill tentava quebrar uma cifra alem. Quando conseguiu concluir essa faanha, descobriu que os alemes planejavam bombardear a cidade de Coventry. Ao invs de notificar e evacuar a cidade, Churchill decidiu por deixar a cidade ser bombardeada e milhares de pessoas serem mortas (ver figura abaixo).

Churchill tomou essa deciso pois caso ele evacuasse a cidade, os alemes iriam saber que ele tinha decifrado a mensagem e certamente trocariam de cifra/chave. Dessa forma, Churchill decidiu utilizar sua capacidade de quebrar/decifrar mensagens alems para outras ocasies, de importncia maior para o contexto global da guerra.

6. Cifras
Nessa seo sero apresentados os conceitos complementares relacionados s cifras e sero tambm discutidos alguns exemplos de cifras bastante utilizadas na histria. Monoalfabticas e Polialfabticas As cifras podem ser classificadas como monoalfabtica e polialfabtica. Cifras monoalfabticas so aquelas que cada smbolo do texto plano substitudo por um nico conjunto de smbolos no texto cifrado. Ns cifras polialfabticas, cada smbolo no texto plano pode ser substitudo por vrios conjuntos de smbolos no texto cifrado. Stream cipher e Block cipher Outra possvel classificao diz respeito ao modo de cifragem/decifragem de cada algoritmo, podendo ser classificadas em cifras contnuas (stream cipher) ou cifras em bloco (block cipher). Algoritmos que funcionam no modo contnuo cifram/decifram na menor unidade enderevel do protocolo (de um em um byte, de um em um bit). Algoritmos que funcionam no modo de blocos cifram/decifram em blocos discretos, normalmente de 64 bits. Esses algoritmos tendem a ser mais resistentes e mais fceis de

analisar. Alm disso, podem possuir diferentes modos de operao, um dos quais simula uma cifra contnua. Csar Na cifra de Csar, denominada assim pois foi inventada por Julius Csar, cada letra do texto plano substitudo por outra letra, 3 deslocamentos direita do alfabeto, como apresentado no diagrama abaixo. Texto plano: ABCDEFGHIJKLMNOPQRSTUVWXYZ +3 Texto cifrado: DEFGHIJKLMNOPQRSTUVWXYZABC Dessa forma, o texto plano casa, quando cifrado vira fcvc. Playfair Na cifra playfair, escolhida uma senha de tal forma que a mesma no possua nenhum caractere repetido (como no nosso exemplo a senha Pernambuco). Uma vez escolhida a senha, a mesma organizada de modo a formar matriz de cinco por cinco como mostrado no diagrama ao lado. As letras restantes que no esto presentes na senha completam a matriz (forando o i e o j a ficaram juntos, uma vez que o alfabeto possui 26 caracteres).

P M D K V

E B F L W

R U G Q X

N C H S Y

A O I/J T Z

O processo de cifragem feito de dois em dois caracteres do texto plano. Para esses dois caracteres, uma das regras abaixo aplicada: Caracteres planos que caiam na mesma linha da matriz reposto com o caractere da direita, de forma circular (na ser substitudo por ap); Caracteres planos que caiam na mesma coluna sero repostos pelo caractere abaixo, de forma circular (md ser substitudo por dk); Nos outros casos, cada caractere plano reposto pelo caractere que residir na mesma linha e coluna em que estiver o outro caractere plano (cl torna-se bs).

Dessa forma, um texto plano computador para a senha acima vira omdmoqpiua. Observase ento que a cifra playfair monoalfabtica pois dois caracteres do texto plano sempre produzem os mesmos (outros) dois caracteres no texto cifrado. O processo de decifragem o reverso do processo ao de cifragem. Vigenre A cifra Vigenre consiste em escrever todo o alfabeto 26 vezes, deslocando de uma unidade para a esquerda sempre na reescrita do alfabeto, como mostrado na figura abaixo. Uma vez obtido isso, cada caractere do texto plano cifrado pelo caractere correspondente da senha, como por exemplo, o caractere a do texto adeline cifrado com o caractere r da

senha rodrigo. Essa cifragem feita da seguinte forma: consulta-se o caractere a nas colunas e o caractere r nas linhas. O encontro dessa linha e dessa coluna produz o caractere cifrado, nesse caso o caractere r (tambm). Em seguida feito o mesmo para cada par de caracteres do texto plano e da senha, como por exemplo d e o, e e d, etc. Dessa forma, o texto plano adeline com a senha Rodrigo vira o texto cifrado rrhcqts.

A B C D E F G H I J K L M N O P Q R S

A A B C D E F G H I J K L M N O P Q R S

B B C D E F G H I J K L M N O P Q R S T

C C D E F G H I J K L M N O P Q R S T U

D D E F G H I J K L M N O P Q R S T U V

E E F G H I J K L M N O P Q R S T U V W

F F G H I J K L M N O P Q R S T U V W X

G G H I J K L M N O P Q R S T U V W X Y

H H I J K L M N O P Q R S T U V W X Y Z

I I J K L M N O P Q R S T U V W X Y Z A

J J K L M N O P Q R S T U V W X Y Z A B

K K L M N O P Q R S T U V W X Y Z A B C

L L M N O P Q R S T U V W X Y Z A B C D

M M N O P Q R S T U V W X Y Z A B C D E

N N O P Q R S T U V W X Y Z A B C D E F

O O P Q R S T U V W X Y Z A B C D E F G

P P Q R S T U V W X Y Z A B C D E F G H

Q Q R S T U V W X Y Z A B C D E F G H I

R R S T U V W X Y Z A B C D E F G H I J

S S T U V W X Y Z A B C D E F G H I J K

T T U V W X Y Z A B C D E F G H I J K L

U U V W X Y Z A B C D E F G H I J K L M

V V W X Y Z A B C D E F G H I J K L M N

W W X Y Z A B C D E F G H I J K L M N O

X X Y Z A B C D E F G H I J K L M N O P

Y Y Z A B C D E F G H I J K L M N O P Q

Z Z A B C D E F G H I J K L M N O P Q R

O processo de decifragem semelhante, mas dado um caractere da senha, busca-se qual caractere (coluna) produz o caractere do texto cifrado. Ou seja, dado r, qual a coluna onde est o caractere r (texto cifrado) na linha de r (rodrigo), encontrando assim a primeira coluna que a coluna do caractere a. Rotores Um rotor consiste de um teclado e uma srie de rotores (discos) que implementam separadamente uma verso da cifra de Vigenre. Cada rotor uma permutao arbitrria do alfabeto, possui 26 posies e executa uma simples substituio [4]. Como exemplo, pode-se ilustrar o exemplo abaixo, formado por trs discos de trs smbolos no alfabeto. Dessa forma, quando o usurio digita a, as conexes passam pelos discos seguindo as respectivas substituies como apresentados pelas setas e sai o caractere b. O disco 1 gira e o processo se repete. Quando o disco 1 gira no vamente e volta para a posio inicial, o disco 2 gira pela primeira vez.
A 1 B 2 C 3 A 2 B 3 C 1 A 3 B 1 C 2 A 1 B 2 C 3 2 3 1 3 1 2 1 2 3 2 3 1 1 3 2 1 3 2 1 3 2 3 2 1 2 3 1 2 3 1 2 3 1 3 1 2 1 2 3 1 2 3 1 2 3 1 2 3 3 A 1 B 2 C 3 A 1 B 2 C 3 A 1 B 2 C 3 A 1 B 2 C

Observe que para uma mesma entrada a, as sadas foram alteradas de b para c, caracterizando os rotores como uma cifra polialfabtica.

7. Criptografia Simtrica
Nessa seo sero apresentados conceitos complementares de criptografia como o conceito de redes de feistel. Alm disso, sero apresentados os principais algoritmos de criptografia simtrica, mostrando discutindo apenas as entradas/sadas, caractersticas e informaes relevantes. Os algoritmos propriamente ditos esto fora do escopo desse documento. Redes de Feistel Grande quantidade dos algoritmos de criptografia simtrica utiliza o conceito de redes de feistel, idia concebida em meados de 1970. Um bloco de tamanho n (onde n par) dividido em duas partes de tamanho n / 2 : L e R . definido o bloco de cifragem onde a sada da i -sima rodada determinada a partir da sada da rodada anterior: Li = Ri 1 Ri = Li1 f ( Ri1 , K i ) onde K i a subchave usada na i -sima rodada e f a funo arbitrria da rodada. Os principais objetivos da rede de Feistel so confuso e difuso: Confuso refere-se a tentativa de tornar o relacionamento entre a estatstica da chave e do texto cifrado o mais complicado possvel. Difuso refere-se a tentativa de fazer com que um bit do texto plano deva influenciar vrios bits do texto cifrado, tentando assim dissipar as caractersticas estatsticas do texto plano em uma faixa muito ampla do texto cifrado. DES (Data Encryption Standard) Cifra desenvolvida pela IBM nos anos 70. Foi projetada para possuir uma chave maior, mas a NSA interviu e pediu que a IBM lanasse o DES com chave de 56 bits (provavelmente para que a prpria NSA pudesse quebrar). Alm disso, utiliza o conceito de redes de Feistel na sua implementao, com 16 rodadas. As entradas e sadas eram em blocos de 64 bits. Como dito anteriormente, possua uma chave de 56 bits, possibilitando cerca de 720 quatrilhes de chaves possveis. Atualmente o DES quebrvel em um dia atravs do uso de hardwares especiais que testam cerca de 200 bilhes de chaves por segundo.

Como alternativa, surgiu o 3DES onde aplicado o DES trs vezes. Possui dois modos de operao. No primeiro modo, aplicado a cifragem do DES com a chave K1 , aplicado em seguida a cifragem com a chave K 2 e, em seguida, aplicado a cifragem com a chave K1 . No segundo modo de operao, aplicado a cifragem do DES com a chave K1 , aplicado em seguida a decifragem atravs da chave K 2 e, em seguida, aplicado a cifragem atravs da chave K1 . Para ambos os modos de operao, o tamanho efetivo da mensagem de 112 bits, permitindo assim um total de 5,2 x 1033 chaves possveis. RC4 Algoritmo desenvolvido pela RSA D Security, Inc. em 1987. Era segredo industrial da ata RSADSI at ser analisado por engenharia reversa e postado na rede em 1994. Foi otimizado para implementaes em software e implementvel em pouco mais de um minuto. Possui chave de 2048 bits e entrada e sada em blocos de 8 bits. Era implementado em um vasto nmero de aplicaes como as primeiras verses do Netscape Navigator, Lotus Notes, Microsoft Access 2.0, entre outros. Por outro lado, essas implementaes no eram confiveis pois, na maioria delas, sempre existia um backdoor. IDEA (International Data Encryption Algorithm) Desenvolvido por Xueija Lai e James Massey do Swiss Federal Institute of Technology em 1992. As entradas e sadas so em blocos de 64 bits. Possui chaves de tamanho fixo de 128 bits. considerado maduro, bastante resistente e j foi exaustivamente analisado. Entretanto, seu futuro incerto uma vez que existiu uma corrida pela padronizao desse algoritmo no lugar do DES, mas essa corrida foi de encontro com a patente do IDEA que s permite o uso irrestrito do algoritmo em aplicaes no-comerciais. Blowfish Algoritmo desenvolvido por Bruce Schneier e foi projetado para ser rpido, compacto, simples e seguro. Consegue cifrar um byte em cerca de 26 ciclos de clock e bastante compacto, ocupando apenas cerca de 5 Kb de memria. Alm disso, o algoritmo no patenteado, permitindo assim o seu uso em aplicaes comerciais. As entradas e sadas eram em blocos de 64 bits. Chaves de tamanho variado, entre 128 e 448 bits. Foi encontrada uma fraqueza no algoritmo, apesar dessa fraqueza ser intil na prtica. Entretanto, lanou dvidas sobre a segurana do algoritmo na poca.

CAST-128 Algoritmo desenvolvido no Canad por Carlisle Adams e Stafford Tavares. Alm disso, utiliza o conceito de redes de Feistel na sua implementao, com 8 rodadas. No possui restries de uso implementado no PGP (Pretty Good Privacy). As entradas e sadas so em blocos de 64 bits. Possui chaves de tamanho fixo de 128 bits. considerado um dos melhores algoritmos existentes uma vez que bastante maduro, resistente e exaustivamente analisado.

8. Funes de Hash
Uma funo hash unidirecional H (M ) , opera sobre uma mensagem, M , de tamanho arbitrrio retornando um valor fixo, h .
h = H (M )

Muitas funes podem receber uma entrada de tamanho arbitrrio e retornar um valor fixo de sada, contudo, funes de hash devem possuir caractersticas adicionais: Dado M , fcil computar h . Dado h , difcil achar um M tal que H ( M ) = h . Dado M e H (M ) , difcil encontrar outra mensagem, M , tal que H ( M ) = H ( M ) .

Funes de hash de 64 bits so muito pequenas pra sobreviver a um ataque de aniversrio, por exemplo. Idealmente, as funes de hash produzem uma sada entre 128 e 160 bits. Atualmente as funes de hash so bastante utilizadas para agregar mais um fator de segurana em sistemas. Sua utilizao na deteco de erros em mensagens ou arquivamento de senhas, vm sendo largamente utilizadas por sistemas de modo geral. MD5 (Message Digest 5) O MD5 surgiu como melhoria do MD4. Embora seja mais complexo que o MD4, seu projeto similar e tambm produz sadas de 128 bits. De maneira geral, aps um processamento inicial, o MD5 processa o texto de entrada em blocos de 512 bits dividindo-o em 16 sub-blocos de 32 bits. A sada do algoritmo um conjunto de 4 blocos de 32bits, os quais so concatenados para formar uma nica sada de 128 bits. Seu uso irrestrito, pois no possui patentes. Apesar de descobertas vulnerabilidades sobre o algoritmo, estas ainda so meramente tericas fazendo com que o MD5 seja ainda bastante utilizado.

SHA-1 (Secure Hash Algorithm) Este padro especifica um algoritmo de hash seguro, que necessrio para garantir a segurana de algoritmos de assinatura digital (Digital Signature Algorithm - DSA). Quando a mensagem de qualquer tamanho < 264 recebida como entrada, o SHA produz uma sada de 160 bits chamada de message digest. A message digest passada como entrada para o DSA, que computa a assinatura da mensagem. Assinar a message digest ao invs da mensagem origina l oferece mais eficincia no processo, pois a message digest, em geral, possui um tamanho menor que a mensagem original. O SHA dito seguro por ter sido projetado para ser computacionalmente invivel descobrir a mensagem correspondente a uma message digest dada, ou encontrar duas mensagens diferentes que gerem a mesma message digest. Qualquer alterao da mensagem em trnsito ir, com uma alta probabilidade, resultar em uma message digest diferente e a verificao da assinatura ir falhar.

9. Criptografia Assimtrica
O conceito de criptografia de chave pblica foi inventado por Whitfield Diffie e Martin Hellman, e independentemente por Ralph Merkle. Suas contribuies para a criptografia foi a noo de pares de chave uma chave de cifragem e outra de decifragem. em que invivel gerar uma chave a partir da outra. Diffie e Hellman apresentaram esse conceito em 1976 na National Computer Conference. Diffie e Hellman (DH) Primeiro algoritmo de chave pblica conhecido. Na realidade, esse algoritmo no cifra, decifra ou faz assinatura digital. Ele foi projetado inicialmente para possibilitar a troca de chaves seguras. Entretanto, atravs de um sistema complementar essas funcionalidades podem ser alcanadas. O DH baseia-se no problema matemtico de computar logaritmos discretos de nmeros inteiros grandes (segundo a teoria dos nmeros). O algoritmo maduro e j foi amplamente estudado, alm de no possuir nenhuma restrio de uso. Tipicamente, o tamanho da chave varia entre 512 a 4096 bits. RSA Inventado por Ron Rivest, Adi Shamir e Leonard Adleman, o RSA foi, de todos os algoritmos de chave pblica propostos em todos esses anos, o mais fcil de ser entendido e implementado. Embora a cripto-anlise nem aprove ou desaprove a segurana do RSA, ele sugere uma confiana ao nvel de algoritmo. A segurana do RSA baseia-se na dificuldade de fatorar nmeros grandes. As chaves pblicas e privadas so funes de dois nmeros primos grandes (100 a 200 dgitos ou mais). Descobri o texto plano a partir da chave pblica e o texto cifrado equivalente a fatorar o produto de dois nmeros primos. Especialistas duvidam que esta rea seja contrariada.

O tamanho tpico da chave de 512 a 4096 bits. Elliptic Curve Cryptosystems (ECC) Curvas elpticas vm sendo estudadas h vrios anos e existe uma grande quantidade de literatura ao respeito. Em 1985, Neal Koblitz e V.S. Miller, independentemente, propuseram sua utilizao em sistemas de criptologia de chave pblica. Eles no inventaram um novo algoritmo com curvas elpticas sobre campos finitos, mas eles implementaram algoritmos existentes, como Diffie-Hellman, usando curvas elpticas. A grande contribuio dos algoritmos de curvas elpticas que eles requerem chaves substancialmente menores para um mesmo nvel de segurana de outros algoritmos. Por ser ainda muito recente, ainda no foi amplamente estudado e as implementaes ainda so incipientes. Recursos Adicionais ADK: Additional Decryption Key Imagine o quanto seria desastroso para uma companhia se informaes vitais, confidenciais fossem seguramente cifradas e ento o nico empregado que conhece a chave de criptografia repentinamente tornasse inacessvel! A soluo no compartilhar a senha com outro empregado, ou gerente. Uma possvel soluo para esse problema possuir uma espcie de chave extra de segurana, que pode ser utilizada em algoritmos que possuem algum tipo de backdoor. Key Splitting: Particionamento de Chaves Esta tcnica, muito utilizada em ambientes coorporativos, consiste em dividir a chave em n chaves dos quais pelo menos k so necessrias para torn- la funcional. Esta tcnica viabiliza o conceito de maioria desde que so necessrias pelo menos k parties da chave decifrar o dado.

10. Tecnologias Java para Criptografia (JCA/JCE)


Nessa seo sero apresentados o JCA e JCE, APIs Java que do suporte a criptografia. Introduo Apesar de estarem fortemente ligadas, JCA e JCE possuem papis diferentes no que diz respeito criptografia em Java. Para deixar isso mais claro ao leitor, iremos entrar em detalhes sobre cada um desses papis. JCA (Java Cryptography Architecture) uma arquitetura ou framework de acesso e desenvolvimento de funcionalidades criptogrficas. No JDK 1.1, o JCA inclua API's para assinaturas digitais e message digests (hash). O JCA foi amplamente expandido e atualizado, por exemplo, no que diz respeito infra-estrutura de manipulao de certificados a fim de suportar certificados X.509 v3.

Segundo [7], o JCA foi desenvolvido a partir dos seguintes princpios: 1. Independnc ia de algoritmo obtida atravs da definio de uma arquitetura baseada em provedores: Cryptographic Service Provider (ou simplesmente provedores), conceito esse que ser explicado mais adiante. 2. Interoperabilidade de implementao Significa que vrias implementaes podem trabalhar conjuntamente sem nenhuma carga ou dificuldade para o desenvolvedor. 3. Independncia de algoritmo obtida atravs da definio de tipos de servios criptogrficos (engines), e definindo classes contendo as funcionalidades desses servios. Exemplos dessas classes so: MessageDigest e Signature, entre outros. 4. Extensibilidade de algoritmo Significa que novos algoritmos podem ser facilmente includos na arquitetura. O Conceito de CSP (Cryptographic Service Provider) ou simplesmente provedor muito importante para o entendimento do JCA, uma vez que o mesmo totalmente baseado nesses componentes. Provedor um pacote ou um conjunto de pacotes que implementam um ou mais servios de criptografia, como algoritmos de assinatura digital, algoritmos de hash, entre outros. Como exemplo, um programa pode necessitar de um certo tipo de objeto (como um MessageDigest, por exemplo) implementando um determinado servio (como o algoritmo de hash SHA-1) e obter a implementao de um de seus provedores instalados. Se desejado, o programa pode pedir a implementao de um provedor especfico. Atualmente, os servios suportados pelo JCA so: assinaturas digitais, message digest (hash), gerao de chaves, fbricas de chaves, criao e manuteno de keystores, manipulao de parmetros de algoritmos, gerao de parmetros de algoritmos, fbricas de certificados, alm de algoritmos de gerao de nmeros aleatrios. O JRE da Sun Microsystems [8] j possui um provedor padro, chamado "SUN". Tal provedor implementa uma srie de servios como: implementao do DSA para assinatura digital, implementaes do MD5 e SHA-1 para message digest, entre outros. JCE (Java Cryptography Extension) [9] uma expanso do JCA a fim de incluir APIs de cifragem, decifragem, trocas de chaves e MACs. Baseia-se na mesma arquitetura orientada a provedores do JCA. Alm disso, o JRE da Sun Microsystems j possui um provedor padro do JCE, chamado "SunJCE". As arquiteturas JCA e JCE podem ser vistas na figura abaixo e so amplamente detalhadas em [7] e [9].

Arquitetura JCA/JCE Nessa seo sero descritos os pacotes, classes e interfaces principais do JCA e JCE. As classes e interfaces principais do JCA se encontram nos pacotes java.security, java.security.spec e java.security.interfaces e so elas: Provider, Security, MessageDigest, KeyPairGenerator, SecureRandom e Signature. Para um estudo mais detalhado dessas e de outras classes e interfaces, o leitor deve consultar [7]. Abaixo uma pequena descrio de cada uma dessas classes. Provider: Classe responsvel por referenciar um pacote ou conjunto de pacotes que implementam um subconjunto dos aspectos criptogrficos. Deve ser adicionado como provedor atravs do mtodo addProvider(Provider provider) da classe Security. Classe que gerencia vrios provedores e propriedades de segurana do sistema. Essa classe possui apenas mtodos estticos e no pode ser instanciada. Classe responsvel por fornecer funcionalidade criptogrfica a hashes ou messages digest seguros, como MD5 e SHA1 [4]. O mtodo getInstance(String hash) retorna uma instancia dessa classe para o algoritmo passado como parmetro. Classe que gera pares de chaves pblicas e privadas. Utiliza o mtodo getInstance(String algoritmo) para criar uma instancia da classe. Classe responsvel por fornecer a funcionalidade de gerao de nmeros aleatrios com segurana, ou seja, cujo perodo seja bastante elevado. Utiliza o mtodo getInstance(String algoritmo) para criar uma instancia da classe. Classe responsvel por fornecer funcionalidade algoritmos de assinatura digital somo DAS ou RSA com MD5 [4]. Utiliza o mtodo

Security:

MessageDigest:

KeyPairGenerator:

SecureRandom:

Signature:

getInstance(String algoritmo, String provedor) para criar uma instancia da classe do algoritmo e provedor especificados. As classes e interfaces principais do JCE se encontram nos pacotes javax.crypto, javax.crypto.spec e javax.crypto.interfaces e so elas: Cipher, Mac, KeyGenerator, KeyAgreement e SealedObject. Para um estudo mais detalhado dessas e de outras classes e interfaces, o leitor pode consultar [9]. Abaixo uma pequena descrio de cada uma dessas classes. Cipher: Determina a funcionalidade de cifradores criptogrficos usados na cifragem e decifragem de dados. O mtodo esttico getInstance() usado para criar uma instncia dessa classe. Determina a funcionalidade de Message Authentication Code. Utiliza o mtodo esttico getInstance() para criar uma instncia dessa classe. Gera chaves secretas para algoritmos de criptografia simtricos. Os mtodos getInstance() e generateKey() so usados, respectivamente, para obter uma instncia da classe e gerar a chave secreta. Essa classe se diferencia da classe KeyPairGenerator uma vez que essa ltima para algoritmos assimtricos e KeyGenerator para algoritmos simtricos. Utiliza o mtodo doPhase() para a concordncia de chaves em fases, seguido do mtodo generateSecret() para o clculo da chave compartilhada uma vez que as fases foram completadas. Permite ao programador criar um objeto e proteger sua confidencialidade atravs de um algoritmo criptogrfico. Utiliza o mtodo getObject(Cipher cipher) para retornar o objeto original caso a senha (pertencente ao objeto cipher) seja vlida.

Mac:

KeyGenerator:

KeyAgreement:

SealedObject:

Modelo de Programao JCA/JCE Nessa seo sero apresentados 2 exemplos de programao utilizando a API JCA/JCE. O primeiro exemplo trata da gerao do hash de uma mensagem, utilizando o algoritmo MD5 [4]. O segundo exemplo trata da cifragem da mesma mensagem atravs do algoritmo Blowfish [4]. importante observar que o primeiro exemplo no adiciona qualquer provedor uma vez que a classe MessageDisgest j se encontra no pacote java.security do JRE da Sun Mycrosystems [8]. MD5
public class Hash { public static void main(String[] args) throws Exception { /* Mensagem */ String message="Aqui fica a mensagem";

/* Cria o message digest */ MessageDigest md5 = MessageDigest.getInstance("MD5"); /* calcula o hash da mensagem */ byte[] hash = md5.digest(message.getBytes()); }

} Blowfish
public class BlowfishKey { public static void main(String[] args) throws Exception { /* Mensagem */ String message="Aqui fica a mensagem"; /* Adiciona o provedor */ Provider sunJce = new com.sun.crypto.provider.SunJCE(); Security.addProvider(sunJce); /* Gera a chave */ KeyGenerator kgen = KeyGenerator.getInstance("Blowfish"); SecretKey skey = kgen.generateKey(); byte[] raw = skey.getEncoded(); /* Cria e inicializa o Cipher */ SecretKeySpec skeySpec = new SecretKeySpec(raw, "Blowfish"); Cipher cipher = Cipher.getInstance("Blowfish"); cipher.init(Cipher.ENCRYPT_MODE, skeySpec); /* cifra a mensagem */ byte[] encrypted = cipher.doFinal(message.getBytes()); }

11. Outras APIs para Java


Nessa seo sero apresentadas outras APIs Java para diversos aspectos de segurana de sistemas. Embora elas no tenham uma ligao forte com criptografia, preferimos colo car nesse documento como ilustrao do poder das APIs Java para segurana de sistemas. Java Authentication and Authorization Service Java 2 prov controle de acesso baseados no cdigo fonte, ou seja, de onde o cdigo se origina (URL) e em quem foi o responsvel pelo cdigo (certificados). Contudo, ele no permite o controle de acesso baseado em quem executa o cdigo. JAAS foi criada com a finalidade de fornecer esse controle arquitetura Java 2, como ilustrado na figura abaixo e amplamente detalhado em [10].

O sistema de autenticao de JAAS feito em forma de componentes encaixveis, implementando uma verso em Java do padro de estrutura PAM (Pluggable Authentication Module). Isso permite que aplicaes executem independentemente da tecnologia de autenticao sendo utilizada no sistema como um todo, como ilustrado na figura abaixo. Dessa forma, essa tecnologia pode ser modificada ou substituda sem necessidade de modificao na aplicao.

JAAS era um pacote opcional para o Java 2 SDK Standard Edition (J2SDK) nas verses 1.3.x. Porm, atualmente, o JAAS se encontra j integrado no J2SDK verso 1.4, aprimorando a plataforma Java 2 com ferramentas para autenticao e controle de acesso para usurios. Java Secure Socket Extension Dados trafegam atravs da rede e podem ser facilmente interceptados e acessados por uma pessoa que no o destinatrio. Quando nos dados esto presentes informaes confidencias, como senhas e nmero de carto de crdito, vrios passos devem ser seguidos com o objetivo de tornar os dados inutilizveis para pessoas no autorizadas. Alm disso, importante checar a integridade dos dados atravs da verificao de alteraes (intencionais ou no) durante o transporte. Os protocolos Secure Sockets Layer e Transport Layer Security foram

desenvolvidos para ajudar a proteger e verificar a integridade dos dados enquanto trafegam atravs da rede. Java Secure Socket Extension (JSSE) uma API que permite comunicao segura na internet. Basicamente, JSSE prov um framework e uma implementao para SSL e TLS, conhecidos por muitos como HTTPS (protocolo HTTP seguro). Alm disso, a API inclui: funcionalidades de cifragem de dados, autenticao do servidor, integridade da mensagem e autenticao do cliente (opcional). Atravs dessa API, desenvolvedores podem prover passagem segura de mensagens, entre clientes e servidores, rodando qualquer protocolo de aplicao (HTTP, Telnet, FTP) sobre TCP/IP. Java Certification Path Muitos dos mecanismos por trs das aplicaes modernas e de segurana de redes so baseadas num tipo de criptografia conhecida como Criptografia de Chave Pblica. As chaves pblica e privada provem mecanismos para que uma entidade possa estabelecer, e outras possam verificar, sua identidade online (um importante ingrediente para transaes confiveis). Infelizmente, a criptografia de chave-pblica efetivada somente se a chave privada de uma entidade A, por exemplo, secreta. Se outra entidade hostil B obtm uma cpia da chave privada pertencente a A, esta entidade pode se passar por A eletronicamente. No melhor caso, se uma entidade perder sua chave privada, ela perde a capacidade de provar sua identidade eletronicamente. Um certificado de chave pblica uma ligao ente a chave pblica e uma identidade, que digitalmente assinada pela chave privada de uma outra entidade, freqentemente chamada de Autoridade Certificadora (AC). Se um usurio no tem uma cpia confivel da chave pblica da AC que certificou uma chave pblica de uma entidade, ento uma outra verificao de certificado de chave pblica para este AC necessria. Esta lgica pode ser aplicada recursivamente, at que uma cadeia de certificados (certification path) seja descoberta de um AC confivel at a autoridade em questo (geralmente chamado de entidade- final). A AC mais confivel geralmente especificada por um certificado emitido por um AC que o usurio confia diretamente. Em geral, um certification path uma lista ordenada de certificados, geralmente comprimidos entre chave pblica da entidade final e zero ou mais certificados adicionais. A construo e validao de um certification path uma parte importante de muitos protocolos padres de segurana, tais como SSL/TLS, S/MIME, e IPSEC. A API Java Certification Path prov um conjunto de classes e interfaces para desenvolvedores que precisam integrar estas funcionalidades a suas aplicaes. Esta API beneficia dois tipos de desenvolvedores: aqueles que escrevem implementaes de provedores de servios para a construo de um certificatio n path especfico ou validao do algoritmo e aqueles que precisam acessar algoritmos padres para criao e validao de certification paths, independentemente da maneira como foram implementados.

12. Referncias
[1] [2] [3] [4] [5] Kahn, D. The Codebreakers: The Story of Secret Writing. Scribner, 1996. Tempest Security Technology. Disponvel em www.tempest.com.br . Consultado em setembro de 2002. National Security Agency. Disponvel em www.nsa.com . Consultado em setembro de 2002. Schneier, B. Applied Cryptography: Protocols, Algorithms, and Source Code in C. John Wiley & Sons, 1995. Gois, M.C.A; Bezerra, H.M.A; Barros, P.G.; Santos, A.M.L. Tecnologias Java para Segurana de Sistemas, Revista Eletrnica de Iniciao Cientfica SBC, a aparecer. Gois, M.C.A; Frery, A.C. Mascaramento de informaes: histrico, definies e aplicaes, Revista Eletrnica de Iniciao Cientfica SBC, a aparecer. Microsystems, S. Java Cryptography Architecture API Specification & Reference. Disponvel em http://java.sun.com/products/jdk/1.2/docs/guide/security/CryptoSpec.html . Consultado em setembro de 2002. Microsystems, S. Sun Microsystems Homepage. Disponvel em www.sun.com . Consultado em setembro de 2002. Microsystems, S. Java Cryptography Extension API Specification & Reference. Disponvel em http://java.sun.com/products/jce/doc/guide/API_users_guide.html . Consultado em setembro de 2002. Microsystems, S., Java Authentication and Authorization Service (JAAS) Reference Guide. Disponvel em http://java.sun.com/j2se/1.4/docs/guide/security/jaas/JAASRefGuide.html . Consultado em setembro de 2002.

[6] [7]

[8] [9]

[10]

Você também pode gostar