OWASP @ ISCTE-IUL, Criptografia em PHP

3,086 views
2,969 views

Published on

Apresentação realizada no OWASP @ ISCTE-IUL, Workshop de Segurança Aplicacional, sobre Criptografia em PHP.

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,086
On SlideShare
0
From Embeds
0
Number of Embeds
272
Actions
Shares
0
Downloads
105
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

OWASP @ ISCTE-IUL, Criptografia em PHP

  1. 1. OWASP @ ISCTE-IUL Workshop de Segurança Aplicacional Criptografia em PHP ISCTE-­‐IUL/DCTI Carlos  Serrão Instituto  Superior  de  Ciências  do  Trabalho  e  da  Empresa carlos.serrao@iscte.pt Instituto  Universitário  de  Lisboa carlos.j.serrao@gmail.com Departamento  de  Ciências  e  Tecnologias  de  Informação http://www.carlosserrao.net http://blog.carlosserrao.net http://www.linkedin.com/in/carlosserrao
  2. 2. agenda 2  criptografia em aplicações web  criptografia 101  criptografia em PHP  funções hash  criptografia simétrica  criptografia assimétrica  certificados digitais OWASP @ ISCTE-IUL Abril 2010
  3. 3. 3 criptografia em aplicações web
  4. 4. criptografia em aplicações web 4  criptografia?  $notEncrypted  =  base64_encode($data);  $notEncrypted  =  urlencode($data);  $notEncrypted  =  crc32(); OWASP @ ISCTE-IUL Abril 2010
  5. 5. criptografia em aplicações web 5  criptografia!  $encrypted  =  mcrypt_generic($mcryptResource,   $data);  $hash  =  hash($algorithm,  $data);  $hmac  =  hash_hmac($algorithm,  $data,  $key); OWASP @ ISCTE-IUL Abril 2010
  6. 6. criptografia em aplicações web 6  porquê?  necessidade de garantir confidencialidade  necessidade de garantir integridade  necessidade de verificar a identidade  necessidade de garantir não-repúdio OWASP @ ISCTE-IUL Abril 2010
  7. 7. criptografia em aplicações web 7  OWASP Top 10  evitar o A9 - Armazenamento Criptográfico Inseguro  cifrarficheiros, cifrar BD, cifrar elementos XML  usar a criptografia de forma apropriada  não invente!!! usar apenas mecanismos criptográficos conhecidos e testados OWASP @ ISCTE-IUL Abril 2010
  8. 8. criptografia em aplicações web 8  cifrar dados em trânsito  SSL/TLS, HTTPS  cifrar dados no armazenamento  armazenar apenas aquilo que necessita  recorrer a cifra simétrica e assimétrica  cifrar passwords - trânsito  básica:cifra HTTPS de dados do login (POST)  média: usar desafio-resposta  elevada: não usar passwords OWASP @ ISCTE-IUL Abril 2010
  9. 9. criptografia em aplicações web 9  cifrar dados em trânsito  SSL/TLS, HTTPS  cifrar dados no armazenamento  armazenar apenas aquilo que necessita  recorrer a cifra simétrica e assimétrica  cifrar passwords - trânsito  básica:cifra HTTPS de dados do login (POST)  média: usar desafio-resposta  elevada: não usar passwords OWASP @ ISCTE-IUL Abril 2010
  10. 10. 10 criptografia 101
  11. 11. criptografia 101 11  ao longo da história têm sido concebidos diversos métodos para ocultar informação  antiga Grécia  antigo Império Romano  atribui-sea Júlio César a criação de um método de cifra (designado por Cifra de César) para esconder informação dos inimigos OWASP @ ISCTE-IUL Abril 2010
  12. 12. criptografia 101 12 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z OWASP @ ISCTE-IUL Abril 2010 confidencialidade
  13. 13. criptografia 101 12 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z chave = 2 OWASP @ ISCTE-IUL Abril 2010 confidencialidade
  14. 14. criptografia 101 12 A B C D E F G H I J K L M C D E F G H I J K L M N O N O P Q R S T U V W X Y Z P Q R S T U V W X Y Z A B chave = 2 OWASP @ ISCTE-IUL Abril 2010 confidencialidade
  15. 15. criptografia 101 12 A B C D E F G H I J K L M C D E F G H I J K L M N O N O P Q R S T U V W X Y Z P Q R S T U V W X Y Z A B chave = 2 CARLOS SERRAO OWASP @ ISCTE-IUL Abril 2010 confidencialidade
  16. 16. criptografia 101 12 A B C D E F G H I J K L M C D E F G H I J K L M N O N O P Q R S T U V W X Y Z P Q R S T U V W X Y Z A B chave = 2 CARLOS SERRAO = ECTNQU UGTTCQ OWASP @ ISCTE-IUL Abril 2010 confidencialidade
  17. 17. criptografia 101 13 OWASP @ ISCTE-IUL Abril 2010
  18. 18. criptografia 101 13 OWASP @ ISCTE-IUL Abril 2010
  19. 19. criptografia 101 14  a criptografia estuda do ponto de vista matemático os métodos de protecção da informação  a cripto-análise estuda as técnicas que permitem quebrar um algoritmo criptográfico  ao conjunto da criptografia e da cripto-análise, designa- se por criptologia OWASP @ ISCTE-IUL Abril 2010
  20. 20. criptografia 101 15  para garantir a confidencialidade (informação em segredo) usa-se a cifra  dado M = mensagem que queremos proteger, texto em claro  para cifrar usa-se um algoritmo de cifra ƒ  obtém-se o texto cifrado C  C = ƒ(M)  para decifrar a informação usa-se a transformação inversa M = ƒ-1(C) OWASP @ ISCTE-IUL Abril 2010
  21. 21. criptografia 101 16  chave  parâmetro que permite manipular as transformações aplicadas pela função criptográfica  chave de cifra k, chave de decifra x C = e(k, M)  M = d(x, C) = d(x, e(k, M)) OWASP @ ISCTE-IUL Abril 2010
  22. 22. criptografia 101 17  princípio de Kerckhoffs  Auguste Kerckhoffs, "La cryptographie militaire", Journal des sciences militaires, vol. IX, pp. 5–83, Jan. 1883, pp. 161– 191, Feb. 1883  permissa fundamental da criptografia moderna, que estabelece que os algoritmos devem ser conhecidos publicamente e que a sua segurança depende da chave OWASP @ ISCTE-IUL Abril 2010
  23. 23. criptografia 101 18  um algoritmo criptográfico pode ser considerado como seguro se a um adversário for impossível obter um texto em claro M, conhecendo apenas  algoritmo de cifra  o texto cifrado C  ou seja, é impossível decifrar a mensagem sem conhecer a chave OWASP @ ISCTE-IUL Abril 2010
  24. 24. criptografia 101 19  confidencialidade  integridade  autenticação  (não-repúdio) OWASP @ ISCTE-IUL Abril 2010
  25. 25. criptografia 101 20  criptografia  chave simétrica  chave assimétrica  funções resumo/síntese  assinaturas digitais  certificados digitais (X.509) OWASP @ ISCTE-IUL Abril 2010
  26. 26. criptografia 101 21  criptografia chave simétrica *+,-%&.%$/%0,&1.23& .2&1456(/7,89(3& !"#$%& '()& OWASP @ ISCTE-IUL Abril 2010
  27. 27. criptografia 101 22  criptografia chave assimétrica *+,-%&.5#-,0,& *+,-%&.5#-,0,& *+,-%&./)"#$,& *+,-%&./)"#$,& 0,&!"#$%& 0(&'()& 0,&!"#$%& 0(&'()& .,5&0%&*+,-%:& .,5&0%&*+,-%:& *+,-%&./)"#$,&0(&'()&1234(56,78(9& *+,-%&./)"#$,&0,&!"#$%&1234(56,78(9& !"#$%& '()& OWASP @ ISCTE-IUL Abril 2010
  28. 28. criptografia 101 23  funções de resumo/síntese  one-way functions M ƒ(x) h dimensão fixa h = ƒ(M) mas não existe ƒ-1(h) = M OWASP @ ISCTE-IUL Abril 2010
  29. 29. criptografia 101 24  funções de resumo/síntese M M trans mis s ão M H c omparaç ão H OWASP @ ISCTE-IUL Abril 2010
  30. 30. criptografia 101 25  assinaturas digitais Chv. Privada Bob Chv. Pública Bob Transmissão Alg. Mensagem Enc. Mensagem Mensagem Dec. Mensagem Resumo’ Resumo Resumo Resumo Alg. Chv. Privada Alice Chv. Pública Alice Resumo Comparação Resumo Enc. Resumo Dec. Resumo Chv. Privada Alice Chv. Privada Bob Alice Chv. Pública Alice Bob Chv. Pública Bob OWASP @ ISCTE-IUL Abril 2010
  31. 31. criptografia 101 26  certificados digitais (X.509)  documento digital, emitido por CA, para garantir confiança na chave pública de uma entidade (e na correspondente chave privada)  baseada em assinaturas digitais OWASP @ ISCTE-IUL Abril 2010
  32. 32. criptografia 101 27  certificados digitais (X.509)  CA«A»=CA{V, SN, AI, CA, [UCA], A, [UA], Ap, TA, [Ext]}  V: o número de versão do certificado (1, 2 ou 3);  SN: o número de série do certificado;  AI: identifica o algoritmo de assinatura usado para assinar o certificado;  CA: o nome distinto da CA emissora;  UCA: o identificador único da CA (opcional);  A: o nome distinto do sujeito identificado pelo certificado;  UA: o identificador único do sujeito (opcional);  Ap: a chave pública do sujeito A;  TA: o período de validade do certificado descrito por uma data de início e de fim durante a qual o certificado é válido;  Ext: define um conjunto de extensões que permitem a inclusão de informação adicional no certificado sem alterar o seu formato (opcional). OWASP @ ISCTE-IUL Abril 2010
  33. 33. criptografia 101 28  certificados digitais (X.509) OWASP @ ISCTE-IUL Abril 2010
  34. 34. criptografia 101 29  ok, agora que já sabemos tudo sobre criptografia, como podemos usar isto em PHP? OWASP @ ISCTE-IUL Abril 2010
  35. 35. 30 criptografia em PHP
  36. 36. criptografia em PHP 31  existem muitas alternativas  PEAR (Crypt_Blowfish, Crypt_CBC, Crypt_DiffieHellman, Crypt_GPG, Crypt_HMAC, Crypt_RC4, Crypt_RSA)  extensões criptográficas PHP  Básicas  Crack  Hash  Mcrypt  Mhash  OpenSSL  phpseclib (PHP Secure Communications Library)  ... OWASP @ ISCTE-IUL Abril 2010
  37. 37. criptografia em PHP 32  vamos optar por usar as extensões criptográficas do PHP  integradas na própria linguagem (ou dependem de extensões que necessitar ser activadas)  bibliotecas implementadas em PHP (PEAR e phpseclib) têm problemas de performance OWASP @ ISCTE-IUL Abril 2010
  38. 38. criptografia em PHP 33  extensões criptográficas PHP  Básicas  Crack  Hash  Mcrypt  Mhash  OpenSSL OWASP @ ISCTE-IUL Abril 2010
  39. 39. criptografia em PHP 34  extensões criptográficas PHP <?php        phpinfo(); ?> OWASP @ ISCTE-IUL Abril 2010
  40. 40. criptografia em PHP 35  Básicas  crypt  md5, md5_file  sha1, sha1_file OWASP @ ISCTE-IUL Abril 2010
  41. 41. criptografia em PHP 36  crypt  algoritmo Unix DES (one-way)  string crypt(string $str [, string $salt]) OWASP @ ISCTE-IUL Abril 2010
  42. 42. criptografia em PHP 37  md5  calcula o hash md5 de uma string (one-way, 128 bits)  string md5 ( string $str [, bool $raw_output = false ] ) OWASP @ ISCTE-IUL Abril 2010
  43. 43. criptografia em PHP 38  md5_file  calcula o hash md5 de um ficheiro (one-way, 128 bits)  string md5_file ( string $filename [, bool $raw_output = false ] ) OWASP @ ISCTE-IUL Abril 2010
  44. 44. criptografia em PHP 39  sha1  calcula o hash sha1 de uma string (one-way, 160 bits)  string sha1 ( string $str [, bool $raw_output = false ] ) OWASP @ ISCTE-IUL Abril 2010
  45. 45. criptografia em PHP 40  sha1_file  calcula o hash sha1 de um ficheiro (one-way, 160 bits)  string sha1_file ( string $filename [, bool $raw_output = false ] ) OWASP @ ISCTE-IUL Abril 2010
  46. 46. criptografia em PHP 41  Crack/CrackLib  funções em PHP que permitem testar a robustez de passwords  resource crack_opendict ( string $dictionary )  bool crack_check ( [resource $dictionary , ]string $password )  string crack_getlastmessage ( void )  bool crack_closedict ([ resource $dictionary ] ) OWASP @ ISCTE-IUL Abril 2010
  47. 47. criptografia em PHP 42  Hash  engine de Message Digest  suporta múltiplos algoritmos de digest  principais funções:  array hash_algos ( void )  string hash ( string $algo , string $data [, bool $raw_output = false ] )  string hash_file ( string $algo , string $filename [, bool $raw_output = false ] )  string hash_hmac ( string $algo , string $data , string $key [, bool $raw_output = false ] )  string hash_hmac_file ( string $algo , string $filename , string $key [, bool $raw_output = false ] ) OWASP @ ISCTE-IUL Abril 2010
  48. 48. criptografia em PHP 43  Hash  array hash_algos ( void ) OWASP @ ISCTE-IUL Abril 2010
  49. 49. criptografia em PHP 44  Hash  string hash ( string $algo , string $data [, bool $raw_output = false ] )  string hash_file ( string $algo , string $filename [, bool $raw_output = false ] ) OWASP @ ISCTE-IUL Abril 2010
  50. 50. criptografia em PHP 45  Hash  string hash_hmac ( string $algo , string $data , string $key [, bool $raw_output = false ] )  string hash_hmac_file ( string $algo , string $filename , string $key [, bool $raw_output = false ] ) OWASP @ ISCTE-IUL Abril 2010
  51. 51. criptografia em PHP 46  Mhash  interface para biblioteca Mhash no PHP (http:// mhash.sourceforge.net/)  instalada e actividada na configuração do PHP  suporte para múltiplos algoritmos de hash  lista de hash suportados  MHASH_ADLER32, MHASH_CRC32, MHASH_CRC32B, MHASH_GOST, MHASH_HAVAL128, MHASH_HAVAL160, MHASH_HAVAL192, MHASH_HAVAL256, MHASH_MD4, MHASH_MD5, MHASH_RIPEMD160, MHASH_SHA1, MHASH_SHA256, MHASH_TIGER, MHASH_TIGER128, MHASH_TIGER160 OWASP @ ISCTE-IUL Abril 2010
  52. 52. criptografia em PHP 47  Mhash  string mhash ( int $hash , string $data [, string $key ] ) OWASP @ ISCTE-IUL Abril 2010
  53. 53. criptografia em PHP 48  Mcrypt  interface para a biblioteca mcrypt que suporta um conjunto de algoritmos de cifra de chave secreta  cifra de bloco  modos:  Cipher-block Chaining (CFC)  Electronic Codebook (ECB)  Cipher Feedback (CFB)  Output Feedback (OFB)  alguns algoritmos:  DES, TripleDES, Blowfish, 3-WAY, SAFER-SK64, SAFER-SK128, TWOFISH, TEA, RC2, GOST, Rijndael (AES), RC6, IDEA OWASP @ ISCTE-IUL Abril 2010
  54. 54. criptografia em PHP 49  Mcrypt  mcrypt_*  string mcrypt_cbc ( string $cipher , string $key , string $data , int $mode [, string $iv ] )  string mcrypt_cfb ( string $cipher , string $key , string $data , int $mode [, string $iv ] )  string mcrypt_ecb ( string $cipher , string $key , string $data , int $mode [, string $iv ] )  string mcrypt_ofb ( string $cipher , string $key , string $data , int $mode [, string $iv ] ) OWASP @ ISCTE-IUL Abril 2010
  55. 55. criptografia em PHP 50  Mcrypt  mcrypt_*  cipher  nome do algoritmo de cifra a usar  key  cadeia de caracteres com a dimensão apropriada para o algoritmo a usar (p.e. AES128, chaves de 128 bits = 128/8 = 16 caracteres)  data  dados a serem cifrados ou decifrados  mode  operação a ser realizada: cifra ou decifra  iv  vector de inicialização OWASP @ ISCTE-IUL Abril 2010
  56. 56. criptografia em PHP 51  Mcrypt  cifrar e decifrar informação com AES OWASP @ ISCTE-IUL Abril 2010
  57. 57. criptografia em PHP 52  Mcrypt  cifrar e decifrar informação com 3DES OWASP @ ISCTE-IUL Abril 2010
  58. 58. criptografia em PHP 53  OpenSSL é um módulo que usa as funções do OpenSSL (www.openssl.org) para:  cifrare decifrar informação  gerar e verificar certificados digitais  assinar e verificar digitalmente assinaturas OWASP @ ISCTE-IUL Abril 2010
  59. 59. criptografia em PHP 54  OpenSSL  operações (mais relevantes):  criação de um par de chaves  criação de um certificado digital  cifrar e decifrar informação com criptografia de chave pública  assinar e verificar dados com criptografia de chave pública OWASP @ ISCTE-IUL Abril 2010
  60. 60. criptografia em PHP 55  OpenSSL  criação de um par de chaves variável password OWASP @ ISCTE-IUL Abril 2010
  61. 61. criptografia em PHP 56  OpenSSL  criação de um par de chaves OWASP @ ISCTE-IUL Abril 2010
  62. 62. criptografia em PHP 57  OpenSSL  criação de um par de chaves (escrever ficheiro) OWASP @ ISCTE-IUL Abril 2010
  63. 63. criptografia em PHP 58  OpenSSL  criação de um par de chaves (ler de um ficheiro) OWASP @ ISCTE-IUL Abril 2010
  64. 64. criptografia em PHP 59  OpenSSL  criação de certificados digitais OWASP @ ISCTE-IUL Abril 2010
  65. 65. criptografia em PHP 60  OpenSSL  criação de certificados digitais OWASP @ ISCTE-IUL Abril 2010
  66. 66. criptografia em PHP 61  OpenSSL  criação de certificados digitais OWASP @ ISCTE-IUL Abril 2010
  67. 67. criptografia em PHP 62  OpenSSL  criação de certificados digitais OWASP @ ISCTE-IUL Abril 2010
  68. 68. criptografia em PHP 63  OpenSSL  criação de certificados digitais OWASP @ ISCTE-IUL Abril 2010
  69. 69. criptografia em PHP 64  OpenSSL  criação de certificados digitais OWASP @ ISCTE-IUL Abril 2010
  70. 70. criptografia em PHP 64  OpenSSL  criação de certificados digitais OWASP @ ISCTE-IUL Abril 2010
  71. 71. criptografia em PHP 64  OpenSSL  criação de certificados digitais OWASP @ ISCTE-IUL Abril 2010
  72. 72. criptografia em PHP 64  OpenSSL  criação de certificados digitais OWASP @ ISCTE-IUL Abril 2010
  73. 73. criptografia em PHP 65  OpenSSL  criação de certificados digitais (leitura de ficheiro) OWASP @ ISCTE-IUL Abril 2010
  74. 74. criptografia em PHP 66  OpenSSL  cifrar informação com criptografia de chave pública OWASP @ ISCTE-IUL Abril 2010
  75. 75. criptografia em PHP 66  OpenSSL  cifrar informação com criptografia de chave pública OWASP @ ISCTE-IUL Abril 2010
  76. 76. criptografia em PHP 67  OpenSSL  decifrar informação com criptografia de chave pública OWASP @ ISCTE-IUL Abril 2010
  77. 77. criptografia em PHP 68  OpenSSL  assinatura digital com criptografia de chave pública OWASP @ ISCTE-IUL Abril 2010
  78. 78. criptografia em PHP 68  OpenSSL  assinatura digital com criptografia de chave pública OWASP @ ISCTE-IUL Abril 2010
  79. 79. criptografia em PHP 69  OpenSSL  verificar assinatura digital com criptografia de chave pública OWASP @ ISCTE-IUL Abril 2010
  80. 80. 70 recomendações
  81. 81. recomendações 71 OWASP @ ISCTE-IUL Abril 2010
  82. 82. recomendações 71  não invente!!! não pense que vai inventar um mecanismo criptográfico mais seguro do que outro já existente! OWASP @ ISCTE-IUL Abril 2010
  83. 83. recomendações 71  não invente!!! não pense que vai inventar um mecanismo criptográfico mais seguro do que outro já existente!  use bibliotecas criptográficas que tenham provas dadas no mercado - em particular (e se possível) open-source OWASP @ ISCTE-IUL Abril 2010
  84. 84. recomendações 71  não invente!!! não pense que vai inventar um mecanismo criptográfico mais seguro do que outro já existente!  use bibliotecas criptográficas que tenham provas dadas no mercado - em particular (e se possível) open-source  use as bibliotecas criptográficas *correctamente* - o facto de ter uma ferramenta poderosa, não significa que a saiba usar correctamente OWASP @ ISCTE-IUL Abril 2010
  85. 85. recomendações 71  não invente!!! não pense que vai inventar um mecanismo criptográfico mais seguro do que outro já existente!  use bibliotecas criptográficas que tenham provas dadas no mercado - em particular (e se possível) open-source  use as bibliotecas criptográficas *correctamente* - o facto de ter uma ferramenta poderosa, não significa que a saiba usar correctamente  gerir e proteger as chaves - IMPORTANTE!!! Não serve de nada cifrar informação se a chave ficar comprometida!!!! OWASP @ ISCTE-IUL Abril 2010
  86. 86. gestão do ciclo de vida das chaves 72 OWASP @ ISCTE-IUL Abril 2010
  87. 87. 73 referências
  88. 88. referências 74  manual online do php, www.php.net/manual  Carlos Serrão, Joaquim Marques, “Programação com PHP 5.3”, FCA, 2009  Carlos Serrão, “Secure Your Data with Cryptography”, php| architect, Volume 6, Issue 2, pages 8-15, 2007  André Zúquete, “Segurança em Redes Informáticas”, FCA, 2008  Bruce Schneier, “Applied Cryptography”, John Wiley & Sons, 1996  Ross Anderson, “Security Engineering”, Wiley, 2008 (http:// www.cl.cam.ac.uk/~rja14/book.html) OWASP @ ISCTE-IUL Abril 2010
  89. 89. OWASP @ ISCTE-IUL Workshop de Segurança Aplicacional Criptografia em PHP ISCTE-­‐IUL/DCTI Carlos  Serrão Instituto  Superior  de  Ciências  do  Trabalho  e  da  Empresa carlos.serrao@iscte.pt Instituto  Universitário  de  Lisboa carlos.j.serrao@gmail.com Departamento  de  Ciências  e  Tecnologias  de  Informação http://www.carlosserrao.net http://blog.carlosserrao.net http://www.linkedin.com/in/carlosserrao

×