Você está na página 1de 13

Criptograa numa Caixa de Fsforos

Jos Lopes de Oliveira Jr.

jlojunior@gmail.com
29 de julho de 2013

Resumo

To importante quanto conhecer os conceitos da criptograa, saber como coloc-los em prtica e suas fragilidades. Este texto objetiva apresentar essas questes com exemplos usuais, de forma a dar uma viso mais cotidiana sobre o assunto. Espera-se que o leitor torne-se apto a identicar quais sistemas criptogrcos pode usar e quais prticas deve adotar para melhorar ou manter o nvel de segurana esperado para suas informaes. gital, GnuPG.
Palavras-chave:

criptograa, segurana da informao, certicao di-

Introduo

A criptograa denida por [Ucha, 2005] como a arte e cincia de manter mensagens seguras. De acordo com o mesmo autor, sistemas criptogrcos so necessrios para evitar uma srie de problemas de espionagem nas comunicaes eletrnicas. Este texto explorar a teoria e a prtica acerca da criptograa, englobando testes de segurana sobre arquivos criptografados. Na seo 2 sero apresentados os tipos de algoritmos criptogrcos existentes, bem como sistemas complementares a eles. Na seo 3 ser mostrado como utilizar os conceitos apresentados, usando o GnuPG. J na seo 4 sero mostradas algumas formas de ataque sobre a criptograa e na ltima seo, sero apresentadas as concluses obtidas neste trabalho, seguidas de ideias para trabalhos futuros e as referncias utilizadas.

Teoria

Nesta seo sero descritas as premissas acerca da criptograa, abrangendo os principais algoritmos e sistemas complementares ou derivados deles.

2.1 Criptograa
das equaes:

De acordo com [Tanenbaum, 2003b], os mtodos criptogrcos seguem o padro

C = E (M, Ke ) M = D(C, Kd )
1

(1) (2)

Em (1) tem-se que a mensagem criptografada (C ) obtida pelo processo de cifragem (E ) da mensagem (M ), usando a chave de cifragem (Ke ). J em (2) tem-se que a mensagem ser novamente obtida aplicando-se o processo de decifragem (D ) mensagem cifrada, usando-se a chave de decifragem (Kd ). [Ucha, 2005] dene que existem duas classes de algoritmos: os de chave privada ou simtricos e os de chave pblica ou assimtricos e, como encontrado em [Tanenbaum, 2003a], o Princpio de Kerckho, arma que uma premissa importante que os algoritmos devem ser pblicos e as chaves secretas.

2.2 Algoritmos de Chave Privada (Simtricos)


Estes algoritmos usam uma mesma chave para criptografar e decriptografar e por isso a chave deve ser mantida em segredo [Ucha, 2005]. Algoritmos simtricos costumam usar chaves de poucos bits para fazer a criptograa, mas para melhorar a segurana, pode-se usar chaves de 1024 bits [Tanenbaum, 2003b]. Ainda segundo a mesma fonte, so algoritmos ecientes pois a computao necessria para criptografar/decriptografar uma mensagem controlvel e sua maior desvantagem que o emissor e o receptor devem possuir a chave secreta compartilhada e a mesma precisa ser transmitida de alguma forma, com segurana.

2.2.1

Data Encryption Standard (DES)


Gera um

Criado pela IBM e adotado pelo Governo dos Estados Unidos da Amrica (EUA), este algoritmo no mais seguro em sua forma original. em 16 iteraes [Tanenbaum, 2003a]. texto cifrado de 64 bits e utiliza chaves de 56 bits. A chave aplicada ao texto

2.2.2
e

3DES (Triple DES)

Conforme [Tanenbaum, 2003a], uma variante do DES que usa duas chaves,

K1

K2 ,

de 56 bits. Realiza um processo conhecido por Encryption-Decryption-

Encryption (EDE) para criptografar e Decryption-Encryption-Decryption (DED)


para decriptografar, aplicando ginal, denindo

K1 , K2 , K1 ,

respectivamente em cada estgio.

O esquema EDE/DED foi usado para garantir compatibilidade com o DES ori-

K1 = K2 .

2.2.3

Advanced Encryption Standard (AES)

O AES surgiu da necessidade de substituir o DES. O Governo dos EUA promoveu um concurso pblico para selecionar o algoritmo a m de dar transparncia ao processo e o escolhido foi o Rijndael [Tanenbaum, 2003a]. [Tanenbaum, 2003a] arma que o AES permite tamanhos de chaves e blocos de 128 a 256 bits, com intervalos de 32 bits, sendo os comprimentos da chave e do bloco independentes. Contudo, especica que o bloco deve ter 128 bits e as chaves, 128, 192 ou 256 bits, sendo que costuma-se usar 128 ou 256 bits apenas. Segundo [Tanenbaum, 2003a], tanto o DES quanto o AES utilizam cifras de substituio monoalfabticas. Assim, ao processar o mesmo bloco de texto com a mesma chave, o mesmo resultado ser obtido. Para contornar este problema, conforme a mesma fonte, os modos electronic code block (ECB), de encadeamento de blocos de cifras, de cifra de uxo e de contador foram criados. Cada

um com vantagens e desvantagens que os tornam aptos para determinadas situaes. Outros algorimos de chave simtica so Blowsh, IDEA, RC4, RC5, Serpent e Twosh.

2.3 Algoritmos de Chave Pblica (Assimtricos)


[Tanenbaum, 2003a] arma que o maior problema da criptograa de chave simtrica manter segredo sobre a chave secreta, pois ela precisa ser distribuda, mas deve ser condencial. Assim, Whiteld Die e Martin Hellman propuseram, em 1976, um mtodo radicalmente novo, onde:

M = D(E (M ))

(3)

Algoritmos com esse formato foram denidos como assimtricos ou de chave pblica, pois utilizam uma chave para criptografar e outra para decriptografar [Ucha, 2005]. Normalmente a chave de criptograa chamada de chave pblica e a de decriptograa, de chave privada, mas h casos, como na assinatura digital seo 2.5, em que necessrio inverter essa ordem chave privada para criptografar e chave pblica para decriptografar. Como [Tanenbaum, 2003a] explica, o conhecimento de uma chave a partir da outra extremamente difcil. Esses algoritmos so mais lentos que os simtricos pois utilizam operaes fceis, como multiplicao, para criptografar normalmente alimentada por uma senha como semente para o algoritmo e operaes difceis para decriptografar [Tanenbaum, 2003a]. Algoritmos de chave pblica so amplamente utilizados para distribuir a chave de sesso, que passa a ser usada por algoritmos simtricos, como o DES ou o AES, mais rpidos [Tanenbaum, 2003a]. Tal mtodo pode ser observado no funcionamento do Transport Layer Security (TLS), por exemplo. Conforme [Tanenbaum, 2003a], o RSA o algoritmo assimtrico mais famoso e muito forte. Ele utiliza chaves de pelo menos 1024 bits, o que o torna bem mais lento que os algoritmos de chave simtrica e sua segurana baseada no fato de ser extremamente difcil fatorar nmeros primos extensos geralmente 1024 bits. Segundo [Ucha, 2005], a dinmica dessa classe de algoritmos que a pessoa divulga sua chave pblica e sempre que algum precisa, criptografa uma mensagem com essa chave e envia para a pessoa, que utiliza sua chave privada para decriptografar. Outros exemplos de algoritmos assimtricos so ElGamal e Digital Signature Standard (DSS).

2.4 Sumrios de Mensagens Message Digests


, como denido por [Tanenbaum, 2003a], uma funo de hash unidirecional  comumente representada por

M D que gera uma sada de tamanho xo a partir M D(M ); M;


e

de uma mensagem de tamanho varivel. Essa funo tem quatro caractersticas: 1. tendo 2. tendo 3. tendo

fcil calcular

M D (M ) M

impossvel, efetivamente, encontrar

no se pode achar

M |M D(M ) = M D(M );
3

4. uma mudana, mesmo de 1 bit, produz

M D(M )

diferente.

Ainda segundo [Tanenbaum, 2003a], para a terceira caracterstica, a funo deve ter 128 bits ou mais. Para atender quarta caracterstica, a funo deve embaralhar os bits, como os algoritmos de chave simtrica. Dois algoritmos notrios so Message Digest 5 (MD5) e Secure Hash Algorithm (SHA) [Tanenbaum, 2003b].

2.5 Assinaturas Digitais


[Tanenbaum, 2003a] explica que assinatura digital o mtodo usado para vericar a integridade e evitar o no-repdio de documentos pblicos, impossibilitando fraudes no documento original. Ainda de acordo com [Tanenbaum, 2003a], o algoritmo para gerao de uma assinatura digital comea com clculo do hash do documento com um algoritmo especco, como MD5 ou SHA-1. Depois criptografa-se esse hash com a chave privada do emissor e envia-se o resultado junto com o documento. O receptor, ao receber os dados, calcula o hash do documento e aplica a chave pblica do emissor sobre o resultado enviado, obtendo o hash gerado pelo emissor. Se os dois hashes forem iguais, tudo est correto. Este um mtodo vivel pois a criptograa de chave pblica lenta aplicada apenas a uma pequena quantidade de bits o hash [Tanenbaum, 2003b].

2.5.1

Assinaturas de Chave Simtrica


Assim, as pessoas geram suas chaves e se cadastram junto a

Segundo [Tanenbaum, 2003a], necessitam da presena de uma autoridade central e convel. essa autoridade. Sempre que for necessrio enviar uma mensagem assinada para algum, a pessoa criptografa sua mensagem com a chave gerada e a envia para a autoridade, junto com dados com o timbre e hora. A autoridade decriptografa a mensagem para ter certeza que do remetente e ento a reenvia como texto simples ao destinatrio, junto com a sua assinatura, para dar veracidade ao documento. A desvantagem desse mtodo que todos devem conar plenamente na autoridade certicadora, que tambm poder ler todas as mensagens que for encaminhar [Tanenbaum, 2003a].

2.5.2

Assinaturas de Chave Pblica

De acordo com [Tanenbaum, 2003b], baseia-se na propriedade de comutao do algoritmo, ou seja, obter a mensagem a partir da criptograa da decriptograa e vice-versa:

M = E (D(M )) M = D(E (M ))
Assim, se Alice

(4) (5)

1 quiser enviar uma mensagem assinada para Bob, ela dever

criptografar a mensagem com sua chave privada e criptografar o resultado com

1 [de

Oliveira, 2005] explica que a literatura adotou os nomes Alice e Bob para tornar mais

didticos os exemplos que usam algo como criptografado por A e decriptografado por B.

a chave pblica de Bob Eb (Da (M )). Quando Bob receber a mensagem, usar sua chave privada para decriptografar, aplicando a chave pblica de Alice para decriptografar o resultado Db (Ea (M )). Isso ir gerar a mensagem oriunda de Alice.

2.6 Gerenciamento de Chaves Pblicas


Conforme [Tanenbaum, 2003a], uma forma de se disponibilizar chaves pblicas em um repositrio. Neste contexto surge o Certication Authority (CA) como agente que certica chaves pblicas garante que o seu dono quem diz ser e que a chave no foi alterada por uma terceira parte. O X.509 um padro para certicados que dene, dentre outras coisas, vrios campos que um certicado enviado a uma CA deve conter [Tanenbaum, 2003a]. Como no interessante ter uma nica CA no mundo e nem ter vrias CAs, foi criada a Public Key Infrastructure (PKI): um modo de estruturar componentes e denir padres para os vrios documentos e protocolos. Neste caso, a CA de nvel superior raz certica CAs de segundo nvel Regional Authorities (RAs), que certicam CAs reais que emitem por sua vez, os certicados X.509 [Tanenbaum, 2003a]. [Tanenbaum, 2003a] ainda pondera que a autoridade que concede um certicado pode revog-lo. H vrias possibilidades de implementao disso, que passam por uma Certication Revogation List (CRL). Esta lista pode ser atualizada periodicamente com a situao de cada certicado, somente com os certicados vlidos etc., dependendo da forma com que for implementada.

3
gpg,

Prtica
que ser utilizado neste artigo, de acordo com [Team, 2013b], a parte

O GNU Privacy Guard (GnuPG) , segundo [Team, 2013a], uma implementao completa e livre do padro OpenPGP, como denido na RFC 4880. O comando OpenPGP do GnuPG: uma ferramenta para prover criptograa digital e servios de assinatura usando o padro OpenPGP e que prov funcionalidades completas para o gerenciamento de chaves criptogrcas. Os conceitos da seo 2 sero aplicados com o GnuPG nesta seo. No objetivo deste texto ser, portanto, um manual denitivo para o programa. Caso o leitor queira saber mais opes e exemplos de utilizao do GnuPG, recomendase a leitura de [de Oliveira, 2004] e do seu prprio manual, em [Team, 2013b]. A verso do programa utilizada nos testes foi a 1.4.11, juntamente com o arquivo da RFC 4880 .

3.1 Criptograa de Chaves Simtricas


O primeiro teste realizado foi criptografar o arquivo, usando o AES com 256 bits, para gerar um arquivo binrio criptografado rfc4880.txt.gpg:

$ gpg --symmetric --cipher-algo aes256 rfc4880.txt


O arquivo binrio no , teoricamente, legvel por humanos. Para gerar um arquivo compreensvel, pode-se usar a opo

--armor,

como em:

2 http://www.ietf.org/rfc/rfc4880.txt

$ gpg --armor --symmetric --cipher-algo aes256 rfc4880.txt


ou

.asc:

O comando de decriptograa o mesmo para ambas as sadas geradas .gpg

$ gpg rfc4880.txt.asc
O interessante de se gerar um arquivo texto fazer testes com ele. Podese, por exemplo, inserir ou remover trechos no mesmo e tentar decriptografar. Pode-se ainda trocar algumas partes do texto, salvar e observar a falha na decriptograa. Ento pode-se voltar para a verso original e constatar que a decriptograa ocorre com sucesso o GnuPG no leva em considerao o

timestamp do arquivo.

3.2 Criptograa de Chaves Assimtricas


A primeira etapa de testes foi de gerao das chaves para Alice e Bob. Alice: Para

$ gpg --gen-key
1. 2. 3. 4.

enter enter enter

para gerar chaves RSA padro na verso utilizada. para usar chaves de 2048 bits padro. para as chaves no expirarem padro.

para conrmar.

Alice Email address: alice@example.com Comment: enter. Passphrase: alice


Real name:
as chaves.

5. Entropia. Digite algo no teclado e mova o mouse para gerar entropia para

Para Bob os passos foram iguais, apenas os dados do passo 4 diferiram:

Real name:

Robert bob@example.com enter. bob --export


do

Email address: Comment:

Passphrase:

Para exportar as chaves pblicas de Alice e Bob em formato texto, pode-se usar o parmetro

gpg:

$ gpg --armor --export alice $ gpg --armor --export bob


Sem a opo

--armor,

ser exportado um arquivo binrio do GnuPG. Para

direcionar a sada para um arquivo, utiliza-se a opo nome do arquivo:

--output

seguida do

$ gpg --output alice-pubkey.gpg --export alice


Para exportar a chave privada, troca-se

--export por --export-secret-key.

$ gpg --output alice-seckey.asc --armor --export-secret-key alice


importante usar esta opo com cautela e lembrar-se da grande responsabilidade que se deve ter sobre o sigilo da chave privada. Para importar uma chave pblica, basta usar a opo

--import:

$ gpg --import bob-pubkey.asc


Pode-se imaginar um cenrio onde Alice deseja enviar o arquivo criptograf-lo com a chave pblica de Bob:

rfc4880.txt

de forma segura para Bob, usando criptograa assimtrica. Para isso ela dever

$ gpg --encrypt --recipient bob rfc4880.txt rfc4880.txt.gpg. Para gerar --armor como argumento para o GnuPG. Neste caso, ser gerado um arquivo com a extenso .asc. Este arquivo
Isso vai gerar o arquivo binrio criptografado um arquivo texto, pode-se incluir a opo poderia ser enviado para Bob por email, por exemplo. Ao receber o arquivo, Bob deve aplicar sua chave privada no mesmo para decriptograf-lo:

$ gpg --output rfc4880.txt --decrypt rfc4880.txt.gpg


Ele digitaria a senha que usou para gerar suas chaves bob e o arquivo rfc4880.txt seria criado com o texto original. Interessante notar que, caso o parmetro --output e seu argumento sejam omitidos, o GnuPG direcionar o texto decriptografado para a sada padro  a tela, na maioria dos casos. Outra sada possvel seria omitir esses dados e redirecionar a sada para um arquivo. Esse esquema muito til quando autenticao e sigilo so necessrios, pois Alice teria certeza de que o texto seria lido apenas por Bob. mensagem com a chave pblica dela e enviando. Ele, por sua vez, poderia saber se foi Alice mesmo quem enviou, apenas criptografando uma

3.3 Assinaturas Digitais


Bob precisaria saber que o script a ser publicado no site foi realmente enviado por Alice, mas o seu contedo no segredo para ningum. Neste caso entra o conceito de assinatura digital. Como Alice no requer sigilo sobre o arquivo para Bob, ela assinaria o arquivo com:

$ gpg --local-user alice --sign rfc4880.txt


Seria ento pedida a senha que Alice usou na criao da sua chave, para assinar o documento. O parmetro

--local-user

pode ser omitido caso haja

apenas um usurio cadastrado no GnuPG arquivo casar com o argumento passado alice, no caso.

/.gnupg/pubring.gpg.
Se houver ambiguidade

Caso ele seja usado, como neste exemplo, buscar pela primeira ocorrncia que neste nome, pode-se usar o identicador da chave, e.g.,

e81676ca

lembrando

que o GnuPG binrio

rfc4880.txt.gpg. Para gerar um arquivo separado, substitui-se a opo --sign por --clearsign, que resultaria no arquivo rfc4880.txt.asc.

no

case-sensitive.

O comando mostrado geraria o arquivo

Se um arquivo texto for gerado, basta list-lo para conferir que o texto est legvel. Contudo, ao nal do mesmo, tero sido adicionadas algumas linhas com a verso do GnuPG usada para assinar e a assinatura propriamente dita. Para gerar a assinatura em um arquivo separado, pode-se substituir a opo ou

--sign --detach-sign. Usado dessa forma, o GnuPG criar um arquivo binrio com a extenso sig. Caso seja interessante gerar um arquivo texto, pode-se usar a opo --armor na chamada do GnuPG, como no prximo --clearsign
por

trecho de cdigo:

$ gpg --armor --local-user alice --detach-sign rfc4880.txt


Isso vai gerar o arquivo assinatura do arquivo. Ao receber o arquivo de Alice, Bob poder veric-lo com o comando:

rfc4880.txt.asc,

que se for listado mostrar a

$ gpg --verify rfc4880.txt.gpg


Obviamente isto j leva em considerao que Bob tenha importado a chave pblica de Alice para o seu sistema. Caso Alice tenha gerado a assinatura em um arquivo separado, basta Bob passar o arquivo com a assinatura e o arquivo com o texto como argumentos para

--verify:

$ gpg --verify rfc4880.txt.asc rfc4880.txt


Uma sada do tipo:

gpg: Signature made Mon 22 Jul 2013 20:55:29 AM BRT using RSA key ID BE7A9C8C gpg: Good signature from "Alice <alice@example.com>"
Indica que o arquivo realmente confere com aquele enviado por Alice. Para fazer um teste de integridade, pode-se abrir o arquivo for feita, a palavra

rfc4880.txt, fazer qualBAD,


in-

quer alterao como a adio de uma letra e salvar. Quando a vericao

Good,

na segunda linha da sada, ser trocada por

dicando que a assinatura no confere com o arquivo. Isso signica que se Alice zer qualquer alterao no arquivo aps gerar a assinatura, ela ter de refazer a mesma, sob pena de poder ter seu arquivo rejeitado por Bob.

Ataques

De acordo com [Team, 2013b], a parte mais frgil do sistema criptogrco inteiro a senha do usurio. Desta forma, bem mais simples do que atacar fragilidades dos algoritmos criptogrcos modernos como o AES, tentar descobrir a senha usada na criptograa. Nesta seo sero apresentados dois exemplos neste sentido, um para a criptograa simtrica e outro para assimtrica.

4.1 Criptograa Simtrica


Objetivando testar a segurana de arquivos criptografados com algoritmos simtricos, foi criado o programa listado na gura 1. O mesmo realiza um ataque de fora bruta simples contra um arquivo passado por parmetro, testando combinaes de senhas de at 6 caracteres, com letras minsculas e nmeros no inclui caracteres acentuados ou cedilha. Para realizar o primeiro teste, o arquivo

rfc4880.txt

foi criptografado usando a senha

alice.

$ gpg --symmetric --cipher-algo aes256 rfc4880.txt


Tendo o arquivo criptografado e o script arquivo diretrio, pode-se iniciar o ataque com :

gpgbf.py

no mesmo

$ time python gpgbf.py rfc4880.txt.gpg > /dev/null


Core Nos testes realizados , em um MacBook 4.1 MB404*/A processador Intel R TM 5 2 Duo e 2 GB de memria rodando Ubuntu 12.04 , levou-se mais de

30 minutos para quebrar a senha os testes foram interrompidos aps este tempo. Para o segundo teste, o arquivo foi criptografado novamente usando-se a senha

bob.

Neste caso, com uma senha mais fraca ainda, levou-se

32,15

segundos para descobrir a chave.

4.2 Criptograa Assimtrica


Uma caracterstica das chaves privadas que elas precisam de uma senha  denida durante a sua criao para serem utilizadas. Para isso no basta que seu utilizador possua o arquivo da chave: ele precisa saber a senha utilizada nela. Imaginando um cenrio onde se possua a chave privada, mas no se conhea a senha, pode-se lanar mo do John the Ripper de fora bruta ou de dicionrio sobre a chave privada. John , segundo [the Ripper Team, 2013], um rpido quebrador de senhas para diversos sistemas operacionais, cujo objetivo primrio de detectar senhas fracas no Unix. Por se tratar de um software livre, qualquer pessoa com conhecimento suciente pode alterar o seu cdigo-fonte e liber-lo, criando um fork do projeto. Um desses forks possui um componente que torna possvel realizar ataques sobre chaves privadas e pode ser baixado em seu repositrio ocial . Aps o download, basta descompactar o arquivo, acessar o diretrio criado e consultar o arquivo

6 (John) para realizar ataques

docs/INSTALL

para instrues sobre a instalao.

de Alice criada na seo 3.2, que utiliza uma senha fraca alice para testar o funcionamento do programa.

Uma vez que o John esteja pronto para uso, pode-se usar a chave privada

3A

sada foi redirecionada para

da senha. omitidos.

Em um ambiente normal, o comando

/dev/null, pois o foco do teste foi o tempo para descoberta time e esse redirecionamento podem ser
testes e o resultado foi a mdia deles. instaladas at o momento de execuo dos testes.

4 Para cada exemplo foram feitos trs 5 Sistema com todas as atualizaes

Durante este perodo, havia outros processos rodando, que devem ter afetado o desempenho dos programas.

6 http://www.openwall.com/john 7 https://github.com/magnumripper/JohnTheRipper

Figura 1: Programa para atacar arquivos criptografados com o GnuPG.

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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59

# !/ usr / bin / python # gpgbf . py import import import import subprocess as su itertools as it string as st sys

class BruteForce ( object ): """ Attacks a GnuPG symmetrically - encrypted file . Author : Jose ' Lopes de Oliveira Jr . < jlojunior@gmail . com > License : GPLv3 + """ def __init__ ( self , f ): """ Builds up the object . Keyword arguments : f -- a GnuPG symmetrically - encrypted file """ try :

with open (f) as aux : self . f = f except IOError : print ( ' ERROR : Cannot access file {0} ' . format (f )) exit (1)

self . command = ' echo {0} | gpg -- batch -- passphrase - fd 0\ -- output =/ tmp /{1}\ {1} 2 > / dev / null ' def gen_passwds ( self , charset , ml ): """ Creates an iteration according to parameters . Keyword arguments : charset -- the charset used to build iteration ml ( maxlength ) -- results will have from 1 to ml chars Returns a list with the generated iterations . Author : Rafael Alencar < rafael - labs . com > """ return ( '' . join ( candidate ) for candidate in it . chain . from_iterable ( it . product ( charset , repeat =i ) for i in range (1 , ml + 1))) def attack ( self ): """ Do the attack itself . """ for passwd in self . gen_passwds ( st . ascii_lowercase + ' 0123456789 ' , 6): try : print ( ' Trying : {0} ' . format ( passwd )) su . check_output ( self . command . format ( passwd ,

10

Figura 2: Continuao da gura 1.

60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79

self .f), shell = True ) # When the file cannot be decrypted -- bad # password --, an exception is raised : # subprocess . CalledProcessError . except : pass else : print ( ' YIPPEE KI - YAY ! This is the password ! ' ) su . call ([ 'rm ' , '-rf ' , '/ tmp /{0} ' . format ( self .f )]) return 0 print ( ' Unable to determine password . :( ' ) return 1 ## # MAIN # if __name__ == ' __main__ ' : exit ( BruteForce ( sys . argv [1]). attack ())

Primeiramente deve-se exportar a chave privada de Alice, de acordo com a seo 3.2. Feito isso, necessrio usar o componente a chave em um hash aceitvel pelo John:

gpg2john para transformar

$ run/gpg2john alice-seckey.asc > alice-seckey-hash.asc


Obtido o hash arquivo

alice-seckey-hash.asc,

basta aplicar o John

sobre ele e aguardar o retorno do programa:

$ run/john alice-seckey-hash.asc
Nos dois exemplos foram necessrios nhas. interessante notar que o John permite ataques baseados em dicionrios. Para isso deve-se criar um arquivo texto em branco e.g., para indicar o arquivo de dicionrio: colocar uma tentativa de senha por linha. Usa-se ento o parmetro

0,35 segundos

8 para quebrar as se-

alice- dict.lst e --wordlist

$ run/john --wordlist=alice-dict.lst alice-seckey-hash.asc


No caso de ataques de dicionrio, caso a senha esteja no arquivo, o tempo para descoberta instantneo principalmente porque as senhas usadas nos exemplos so candidatas para vrios dicionrios

9 Na Internet h vrios arquivos

com dicionrios prontos para uso. A OpenWall mantenedora do John, por exemplo, comercializa alguns deles, mas muitos podem ser encontrados de graa na Internet.

8 Entre

cada execuo, o arquivo

run/john.pot

foi apagado, pois ele um

cache

de senhas

descobertas, para agilizar futuras operaes sobre o mesmo arquivo

9 O John vem com um arquivo run/password.lst que um dicionrio bsico de senhas.

A ttulo de curiosidade, ele possui as senhas dos dois exemplos cadastradas.

11

Concluso

A criptograa prov uma camada de segurana extra s comunicaes eletrnicas. No caso da interceptao de uma mensagem criptografada por uma terceira parte, no trivial a obteno do contedo decriptografado sem o conhecimento das chaves criptogrcas. Ainda assim, como no dito popular, uma corrente

to forte quanto seu elo mais fraco , de nada adianta utilizar mtodos criptogrcos de ltima gerao, se no houver cuidado com o gerenciamento das chaves. Atravs dos exemplos apresentados na seo 4, pode-se perceber que o tamanho da senha , assim como a diversidade de caracteres e.g., letras maisculas, minsculas, nmeros e caracteres especiais que compem a mesma, fator decisivo para segurana em ataques de fora bruta. Contudo, uma senha longa e com diferentes tipos de caracteres, poder ser facilmente descoberta por um ataque de dicionrio, caso seja uma palavra ou expresso de uso comum. importante, portanto, que haja uma poltica bem denida para as senhas usadas nos sistemas de criptograa. Os usurios devem estar cientes sobre a utilizao de senhas fortes que utilizem conjuntos de caracteres diferentes e que no sejam suscetveis a ataques de dicionrio e sobre a importncia de mant-las em sigilo. Alm disso, os administradores de sistema devem atentarse para a correta congurao da infraestrutura, de forma que dados cruciais para a seguraa como senhas e chaves privadas trafeguem de forma segura pela rede e tenham seu acesso restrito dentro de uma organizao. Desta forma, pode-se perceber que a educao das pessoas, no tangente segurana da informao e correta congurao do ambiente, , somado utilizao de tcnicas criptogrcas, fator primordial para manuteno da segurana a nveis aceitveis.

Propostas para Trabalhos Futuros

Apesar do programa apresentado como exemplo na gura 1 ser apenas ilustrativo, pode-se melhor-lo, fazendo com que seja capaz de, por exemplo, processar um conjunto maior de caracteres, que priorize palavras de uso comum e aceite sugestes do usurio, como o parmetro

--wordlist

do John.

Alm disso,

pode-se reescrev-lo usando threads, como forma de melhor seu desempenho. Seria interessante ainda, fazer um estudo mais aprofundado sobre as classes de algoritmos simtricos e assimtricos, sobre os algoritmos apresentados ou mesmo apresentar outras solues e seus usos. Igualmente relevante seria a escolha de outra soluo similar ao GnuPG, para mostrar como ela trata o processo de criptograa e o gerenciamento das chaves. Ainda sobre o GnuPG, poder-se-ia apresentar ou desenvolver uma interface grca para o mesmo, como forma de mostrar as facilidades que ela traria para o processo de criptograa e o gerenciamento de chaves criptogrcas.

Referncias
[de Oliveira, 2004] de Oliveira, B. G. (2004).

Usando o GNU Privacy Guard

(GnuPG). GRIS  UFRJ, 1a. edition.

12

[de Oliveira, 2005] de Oliveira, B. G. (2005).

Fundamentos da Criptologia:

Parte I  Introduo e Histrias. GRIS  UFRJ, 1a. edition.


[Tanenbaum, 2003a] Tanenbaum, A. S. (2003a). Redes de Computadores. Elsevier, 4a. edition. [Tanenbaum, 2003b] Tanenbaum, A. S. (2003b). Sistemas Operacionais Moder-

nos. Pearson, 2a. edition.


[Team, 2013a] Team, G. P. G. (2013a). Gnu privacy guard home page.

www.gnupg.org. Acesso em 2 de julho de 2013. [Team, 2013b] Team, G. P. G. (2013b). Gnu privacy guard manual page. [the Ripper Team, 2013] the Ripper Team, J. (2013). John the ripper readme les. [Ucha, 2005] Ucha, J. Q. (2005). Segurana Computacional. UFLA/FAEPE, 2a. edition.

13