Académique Documents
Professionnel Documents
Culture Documents
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:
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:
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.1
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
Conforme [Tanenbaum, 2003a], uma variante do DES que usa duas chaves,
K1
K2 ,
K1 , K2 , K1 ,
O esquema EDE/DED foi usado para garantir compatibilidade com o DES ori-
K1 = K2 .
2.2.3
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.
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).
de uma mensagem de tamanho varivel. Essa funo tem quatro caractersticas: 1. tendo 2. tendo 3. tendo
fcil calcular
M D (M ) M
no se pode achar
M |M D(M ) = M D(M );
3
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.1
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
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 [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.
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 .
--armor,
como em:
2 http://www.ietf.org/rfc/rfc4880.txt
.asc:
$ 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.
$ gpg --gen-key
1. 2. 3. 4.
para gerar chaves RSA padro na verso utilizada. para usar chaves de 2048 bits padro. para as chaves no expirarem padro.
para conrmar.
5. Entropia. Digite algo no teclado e mova o mouse para gerar entropia para
Real name:
Passphrase:
Para exportar as chaves pblicas de Alice e Bob em formato texto, pode-se usar o parmetro
gpg:
--armor,
--output
seguida do
--import:
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:
--local-user
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
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.
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:
rfc4880.txt.asc,
--verify:
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
Good,
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.
rfc4880.txt
alice.
gpgbf.py
no mesmo
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.
32,15
docs/INSTALL
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
da senha. omitidos.
/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
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
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:
alice-seckey-hash.asc,
$ 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
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
run/john.pot
cache
de senhas
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.
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).
12
Fundamentos da Criptologia:
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