Adler Medrado  Tales of the Crypto   PHP Conference Brasil 2012    Imagem: Cryptomuseum.comMonday, December 3, 12
Quem sou eu?        •      Desenvolvedor, Consultor,               Instrutor;        •      Trabalha na Sigma Dataserv;   ...
Objetivos                   • Mostrar como algumas ferramentas que                         auxiliam no uso de criptografia ...
Segurança                   • Atualmente há consenso que é necessário                         obter segurança nas transaçõ...
O que é criptografia?                   • Uma ciência                   • Nome tem origem no grego - kryptós               ...
Entusiastas da                          Criptografia                          • Sun Tzu                          • Hitler  ...
Segunda Guerra                                  http://www.navajocodetalkers.org/Monday, December 3, 12
Chega de históriaMonday, December 3, 12
Para que serve?                   • Garantir Integridade do Dado                   • Prover segurança em transações       ...
Para que não serve                   • XSS                   • SQL Injection                   • Session Hijacking        ...
Criptografia != SegurançaMonday, December 3, 12
Não tente criar seu                         próprio algoritimoMonday, December 3, 12
Por mais que você seja bom, seu algoritimo tem grandes chances de ser inferior aos já existentes e que são abertosMonday, ...
A não ser que você seja um matemático acima da média.Monday, December 3, 12
Se você fizer algo superior ao que já existe, por favor,                    torne-o um padrão aberto.Monday, December 3, 12
Se a Microsoft, Oracle ou Apple te oferecessem umalgoritimo fechado para você criptografar os dados          da sua empres...
E se o governo te oferecesse, você aceitaria?Monday, December 3, 12
Dê a preferência, sempre, aos algoritimos abertosMonday, December 3, 12
Criptografando                             mensagens                   • Código                    • Quando é necessário u...
Cifras                   •     Exemplo 1 - Texto substituído por número e somado a valor                         chave    ...
Cifras                   • Exemplo II - Cifra de Cesar      Normal: a ligeira raposa marrom saltou sobre o cachorro cansad...
Como você salva                           passwords ?                   • Plain Text?                   • Hashing?Monday, ...
Hashing      • Mais comuns       • MD5 - Message Digest Algorithm - RFC 1321       • SHA1 - Secure Hash Algorithm - NIST-F...
Colisão de Hashes        •       Por terem tamanho fixo:              •      deduz-se que os hashes gerados são limitados  ...
Brute Force                         $password = vidaloka;                         md5($password);Monday, December 3, 12
Salt                         $password = vidaloka;                         $salt = phpconf;                         md5($s...
Outras Opções                   • hash                    • Pode ser desabilitado na compilação                    • Risco...
hash                             hash(adler32, vidaloka);                                                   Algoritimo com...
crypt                 $password = vidaloka;                 $salt = phpconf;                 // Para usar Blowfish        ...
Criptografia Simétrica                         • O mésmo código/chave usado para                           criptografar é u...
Criptografia                                Assimétrica                   • Utiliza um par de chaves: pública e privada    ...
Algoritimos populares                   • AES - Simétrica                   • RSA - Assimétrica  Existem diversas bibliote...
OpenSSL                   •     Open-Source                   •     Toolkit que implementa suporte aos                    ...
Exemplos com                            OpenSSL                   • Criptografia Simétrica   $texto = <<<TEXTO_SECRETO   Jo...
Exemplos com                                 OpenSSL                         Gerando chaves pública e privada com SSL     ...
Exemplos com                           OpenSSLMonday, December 3, 12
Exemplos com                           OpenSSL         Usando as chaves para criptografar e descriptografar    $chave_publ...
PGP/OpenPGP/GnuPG                   •     Pretty Good Privacy                   •     Desenvolvido em 1991 por Phil Zimmer...
Exemplo com PGP            $gpg = new gnupg();            $gpg ->            addencryptkey("8660281B6051D071D94B5B230549F9...
MCrypt                   • Biblioteca open-source                   • Suporta diversos algorítimos                   • Cri...
Exemplo MCrypt         $texto = <<<TEXTO_SECRETO         Joguei uma pedra na água;         Ela era pesada e foi ao fundo; ...
Perguntas?Monday, December 3, 12
Obrigado, até a próxima.                         http://adlermedrado.com.br                          http://getoncode.com....
Próximos SlideShares
Carregando em…5
×

Tales of the Crypto

837 visualizações

Publicada em

Criptografia com PHP

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
837
No SlideShare
0
A partir de incorporações
0
Número de incorporações
122
Ações
Compartilhamentos
0
Downloads
14
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Tales of the Crypto

  1. 1. Adler Medrado Tales of the Crypto PHP Conference Brasil 2012 Imagem: Cryptomuseum.comMonday, December 3, 12
  2. 2. Quem sou eu? • Desenvolvedor, Consultor, Instrutor; • Trabalha na Sigma Dataserv; • Co-Fundador do PHPDF; • Fui apresentado ao PHP em 1999; • Tenho meu próprio podcast (getOnCode); • ZCE • PHP 5; • Zend Framework;Monday, December 3, 12
  3. 3. Objetivos • Mostrar como algumas ferramentas que auxiliam no uso de criptografia com PHP • Criptografia é um assunto complexo para podermos abordar a fundo aqui • Quer estudar? https://www.coursera.org/ course/cryptoMonday, December 3, 12
  4. 4. Segurança • Atualmente há consenso que é necessário obter segurança nas transações realizadas pela internet • A segurança é composta de diversos fatores e a criptografia é uma delasMonday, December 3, 12
  5. 5. O que é criptografia? • Uma ciência • Nome tem origem no grego - kryptós (escondido) e gráphein (escrita)Monday, December 3, 12
  6. 6. Entusiastas da Criptografia • Sun Tzu • Hitler • Carl Von ClausewitzMonday, December 3, 12
  7. 7. Segunda Guerra http://www.navajocodetalkers.org/Monday, December 3, 12
  8. 8. Chega de históriaMonday, December 3, 12
  9. 9. Para que serve? • Garantir Integridade do Dado • Prover segurança em transações confidenciais • Privacidade • Garantia de AutenticidadeMonday, December 3, 12
  10. 10. Para que não serve • XSS • SQL Injection • Session Hijacking • Engenharia Social • "As pessoas são o elo mais fraco" -Kevin MitnickMonday, December 3, 12
  11. 11. Criptografia != SegurançaMonday, December 3, 12
  12. 12. Não tente criar seu próprio algoritimoMonday, December 3, 12
  13. 13. Por mais que você seja bom, seu algoritimo tem grandes chances de ser inferior aos já existentes e que são abertosMonday, December 3, 12
  14. 14. A não ser que você seja um matemático acima da média.Monday, December 3, 12
  15. 15. Se você fizer algo superior ao que já existe, por favor, torne-o um padrão aberto.Monday, December 3, 12
  16. 16. Se a Microsoft, Oracle ou Apple te oferecessem umalgoritimo fechado para você criptografar os dados da sua empresa, você confiaria?Monday, December 3, 12
  17. 17. E se o governo te oferecesse, você aceitaria?Monday, December 3, 12
  18. 18. Dê a preferência, sempre, aos algoritimos abertosMonday, December 3, 12
  19. 19. Criptografando mensagens • Código • Quando é necessário um código para decifrar a mensagem • Cifra • Esconde conteúdo original dentro de outroMonday, December 3, 12
  20. 20. Cifras • Exemplo 1 - Texto substituído por número e somado a valor chave EU VOU PRA CASA 5 20 21 14 20 15 17 1 3 1 18 1 15 30 31 24 30 25 27 11 13 11 28 11 codigo = 10Monday, December 3, 12
  21. 21. Cifras • Exemplo II - Cifra de Cesar Normal: a ligeira raposa marrom saltou sobre o cachorro cansado Cifrado: D OLJHLUD UDSRVD PDUURP VDOWRX VREUH R FDFKRUUR FDQVDGR http://pt.wikipedia.org/wiki/Cifra_de_C%C3%A9sarMonday, December 3, 12
  22. 22. Como você salva passwords ? • Plain Text? • Hashing?Monday, December 3, 12
  23. 23. Hashing • Mais comuns • MD5 - Message Digest Algorithm - RFC 1321 • SHA1 - Secure Hash Algorithm - NIST-FIPS 180-1 Hashing normalmente possuem tamanho fixo, geralmente 128 ou 256 bits, independente do tamanho de entrada. Além de MD5 e SHA-1, existem diversos algoritimos de hashing.Monday, December 3, 12
  24. 24. Colisão de Hashes • Por terem tamanho fixo: • deduz-se que os hashes gerados são limitados • se há limite, dois valores diferentes podem ter o mesmo hash • se isso acontecer, é uma colisão de hashesMonday, December 3, 12
  25. 25. Brute Force $password = vidaloka; md5($password);Monday, December 3, 12
  26. 26. Salt $password = vidaloka; $salt = phpconf; md5($salt.$password);Monday, December 3, 12
  27. 27. Outras Opções • hash • Pode ser desabilitado na compilação • Risco ao mudar de ambiente • crypt • Está no coreMonday, December 3, 12
  28. 28. hash hash(adler32, vidaloka); Algoritimo com o nome mais bonito do mundo Para saber quais algoritimos estão disponíveis var_dump(hash_algos());Monday, December 3, 12
  29. 29. crypt $password = vidaloka; $salt = phpconf; // Para usar Blowfish $salt = $2a$07$.$salt.$; echo Plaintext password: .$password."n"; echo Salt: .$salt."n"; echo Blowfish hash: . crypt($password, $salt)."n"; crypt + blowfish FTWMonday, December 3, 12
  30. 30. Criptografia Simétrica • O mésmo código/chave usado para criptografar é usado para descriptografar • Por usar a mesma chave, o algoritimo criptográfico usado é mais simples • Por possuir um algoritimo mais simples, é mais rápida que a assimétricaMonday, December 3, 12
  31. 31. Criptografia Assimétrica • Utiliza um par de chaves: pública e privada • As chaves são diferentes, entretanto, matemáticamente relacionadas • Mais seguro • Mais lentoMonday, December 3, 12
  32. 32. Algoritimos populares • AES - Simétrica • RSA - Assimétrica Existem diversas bibliotecas que abstraem o trabalho sujo • OpenSSL • PGP/OpenPGP/GnuPG • MCryptMonday, December 3, 12
  33. 33. OpenSSL • Open-Source • Toolkit que implementa suporte aos protocolos SSL e TLS • Oferece uma biblioteca criptografica de uso geral • Suporte a diversos padrões e algorítimos • Provê mecanismos para gerar certificados SSLMonday, December 3, 12
  34. 34. Exemplos com OpenSSL • Criptografia Simétrica $texto = <<<TEXTO_SECRETO Joguei uma pedra na água; Ela era pesada e foi ao fundo; Os peixinhos responderam: Viva Dom Pedro II. TEXTO_SECRETO; $iv = "1234567812345678"; $senha = 1234; $metodo = aes-256-cbc; file_put_contents (arquivo.ssl.txt,openssl_encrypt ($texto, $metodo, $senha, true, $iv)); openssl_decrypt(file_get_contents(arquivo.ssl.txt), $metodo, $senha, true, $iv);Monday, December 3, 12
  35. 35. Exemplos com OpenSSL Gerando chaves pública e privada com SSL $chave_privada = openssl_pkey_new(array( private_key_bits => 1024, private_key_type => OPENSSL_KEYTYPE_RSA, )); openssl_pkey_export_to_file($chave_privada, private, 12345); $detalhes_da_chave = openssl_pkey_get_details($chave_privada); file_put_contents(public, $detalhes_da_chave[key]);Monday, December 3, 12
  36. 36. Exemplos com OpenSSLMonday, December 3, 12
  37. 37. Exemplos com OpenSSL Usando as chaves para criptografar e descriptografar $chave_publica = openssl_pkey_get_public(file:///keys/public); openssl_public_encrypt($texto, $dados_criptografados, $chave_publica); $chave_privada = openssl_pkey_get_private(file:///keys/private, 12345); openssl_private_decrypt($dados_criptografados, $dados_originais, $chave_privada);Monday, December 3, 12
  38. 38. PGP/OpenPGP/GnuPG • Pretty Good Privacy • Desenvolvido em 1991 por Phil Zimmermann • Código Aberto - Origem do OpenPGP • Simples instalação do toolkit • Configuração com PHP não é trivial • Cadeias de confiança do PGP são interessantes • KeyServersMonday, December 3, 12
  39. 39. Exemplo com PGP $gpg = new gnupg(); $gpg -> addencryptkey("8660281B6051D071D94B5B230549F9DC851566DC"); $enc = $gpg -> encrypt("Texto Secreto"); $res = gnupg_init(); gnupg_adddecryptkey($res,"8660281B6051D071D94B5B230549F9DC8 51566DC",senha); $original = gnupg_decrypt($res,$enc);Monday, December 3, 12
  40. 40. MCrypt • Biblioteca open-source • Suporta diversos algorítimos • Criptografia SimétricaMonday, December 3, 12
  41. 41. Exemplo MCrypt $texto = <<<TEXTO_SECRETO Joguei uma pedra na água; Ela era pesada e foi ao fundo; Os peixinhos responderam: Viva Dom Pedro II. TEXTO_SECRETO; $chave = "segredo"; // Vetor de Identificação $tamanho_iv = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC); $iv = mcrypt_create_iv($tamanho_iv, MCRYPT_RAND); $texto_criptografado = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $chave, $texto, MCRYPT_MODE_CBC, $iv); $texto_descriptografado = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $chave, $texto_criptografado, MCRYPT_MODE_CBC, $iv);Monday, December 3, 12
  42. 42. Perguntas?Monday, December 3, 12
  43. 43. Obrigado, até a próxima. http://adlermedrado.com.br http://getoncode.com.br @adlermedradoMonday, December 3, 12

×