OWASP @ ISCTE-IUL, Criptografia em PHP

Preview:

DESCRIPTION

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

Citation preview

ISCTE-­‐IUL/DCTI

Instituto  Superior  de  Ciências  do  Trabalho  e  da  EmpresaInstituto  Universitário  de  Lisboa

Departamento  de  Ciências  e  Tecnologias  de  Informação

Carlos  Serrão

carlos.serrao@iscte.ptcarlos.j.serrao@gmail.com

http://www.carlosserrao.nethttp://blog.carlosserrao.nethttp://www.linkedin.com/in/carlosserrao

OWASP @ ISCTE-IULWorkshop de Segurança Aplicacional

Criptografia em PHP

Abril 2010OWASP @ ISCTE-IUL

agenda2

criptografia em aplicações web criptografia 101 criptografia em PHP

funções hash criptografia simétrica criptografia assimétrica certificados digitais

criptografia em aplicações web3

Abril 2010OWASP @ ISCTE-IUL

criptografia em aplicações web

criptografia?

$notEncrypted  =  base64_encode($data);

$notEncrypted  =  urlencode($data);

$notEncrypted  =  crc32();

4

Abril 2010OWASP @ ISCTE-IUL

criptografia em aplicações web

criptografia!

$encrypted  =  mcrypt_generic($mcryptResource,  $data);

$hash  =  hash($algorithm,  $data);

$hmac  =  hash_hmac($algorithm,  $data,  $key);

5

Abril 2010OWASP @ ISCTE-IUL

criptografia em aplicações web

porquê? necessidade de garantir confidencialidade necessidade de garantir integridade necessidade de verificar a identidade necessidade de garantir não-repúdio

6

Abril 2010OWASP @ ISCTE-IUL

criptografia em aplicações web

OWASP Top 10 evitar o A9 - Armazenamento Criptográfico Inseguro

cifrar ficheiros, cifrar BD, cifrar elementos XML usar a criptografia de forma apropriada

não invente!!! usar apenas mecanismos criptográficos conhecidos e testados

7

Abril 2010OWASP @ ISCTE-IUL

criptografia em aplicações web

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

8

Abril 2010OWASP @ ISCTE-IUL

criptografia em aplicações web

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

9

criptografia 10110

Abril 2010OWASP @ ISCTE-IUL

criptografia 101

ao longo da história têm sido concebidos diversos métodos para ocultar informação antiga Grécia antigo Império Romano

atribui-se a 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

11

Abril 2010OWASP @ ISCTE-IUL confidencialidade

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

12

criptografia 101

Abril 2010OWASP @ ISCTE-IUL confidencialidade

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

12

criptografia 101

Abril 2010OWASP @ ISCTE-IUL confidencialidade

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

C D E F G H I J K L M N O

P Q R S T U V W X Y Z A B

chave = 2

12

criptografia 101

Abril 2010OWASP @ ISCTE-IUL confidencialidade

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

C D E F G H I J K L M N O

P Q R S T U V W X Y Z A B

CARLOS SERRAO

chave = 2

12

criptografia 101

Abril 2010OWASP @ ISCTE-IUL confidencialidade

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

C D E F G H I J K L M N O

P Q R S T U V W X Y Z A B

CARLOS SERRAO = ECTNQU UGTTCQ

chave = 2

12

criptografia 101

Abril 2010OWASP @ ISCTE-IUL

criptografia 10113

Abril 2010OWASP @ ISCTE-IUL

criptografia 10113

Abril 2010OWASP @ ISCTE-IUL

criptografia 101

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

14

Abril 2010OWASP @ ISCTE-IUL

criptografia 101

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)

15

Abril 2010OWASP @ ISCTE-IUL

criptografia 101

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))

16

Abril 2010OWASP @ ISCTE-IUL

criptografia 101

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

17

Abril 2010OWASP @ ISCTE-IUL

criptografia 101

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

18

Abril 2010OWASP @ ISCTE-IUL

criptografia 101

confidencialidade integridade autenticação (não-repúdio)

19

Abril 2010OWASP @ ISCTE-IUL

criptografia 101

criptografia chave simétrica chave assimétrica funções resumo/síntese assinaturas digitais certificados digitais (X.509)

20

Abril 2010OWASP @ ISCTE-IUL

criptografia 101

criptografia chave simétrica21

!"#$%& '()&

*+,-%&.%$/%0,&1.23&

.2&1456(/7,89(3&

Abril 2010OWASP @ ISCTE-IUL

criptografia 101

criptografia chave assimétrica22

!"#$%& '()&

*+,-%&./)"#$,&0(&'()&1234(56,78(9&

.,5&0%&*+,-%:& .,5&0%&*+,-%:&

*+,-%&./)"#$,&0,&!"#$%&

*+,-%&.5#-,0,&0,&!"#$%&

*+,-%&./)"#$,&0(&'()&

*+,-%&.5#-,0,&0(&'()&

*+,-%&./)"#$,&0,&!"#$%&1234(56,78(9&

Abril 2010OWASP @ ISCTE-IUL

criptografia 101

funções de resumo/síntese one-way functions

23

ƒ(x)M hdimensão fixa

h = ƒ(M)mas não existe ƒ-1(h) = M

Abril 2010OWASP @ ISCTE-IUL

criptografia 101

funções de resumo/síntese24

M

H

M M H

comparação

transmissão

Abril 2010OWASP @ ISCTE-IUL

criptografia 101

assinaturas digitais25

Mensagem

Alg. Resumo

Resumo

Mensagem Enc.

Alice Bob

Enc. Resumo

Resumo

Mensagem

Resumo

Dec. Mensagem Alg. Resumo Resumo’

Dec. Resumo

Transmissão

Comparação

Chv. Privada Alice

Chv. Pública Alice

Chv. Privada Bob

Chv. Pública Bob

Chv. Pública Bob

Chv. Privada Alice

Chv. Privada Bob

Chv. Pública Alice

Abril 2010OWASP @ ISCTE-IUL

criptografia 101

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

26

Abril 2010OWASP @ ISCTE-IUL

criptografia 101

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).

27

Abril 2010OWASP @ ISCTE-IUL

criptografia 101

certificados digitais (X.509)28

Abril 2010OWASP @ ISCTE-IUL

criptografia 101

ok, agora que já sabemos tudo sobre criptografia, como podemos usar isto em PHP?

29

criptografia em PHP30

Abril 2010OWASP @ ISCTE-IUL

criptografia em PHP

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) ...

31

Abril 2010OWASP @ ISCTE-IUL

criptografia em PHP

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

32

Abril 2010OWASP @ ISCTE-IUL

criptografia em PHP

extensões criptográficas PHP Básicas Crack Hash Mcrypt Mhash OpenSSL

33

Abril 2010OWASP @ ISCTE-IUL

criptografia em PHP

extensões criptográficas PHP34

<?php        phpinfo();?>

Abril 2010OWASP @ ISCTE-IUL

criptografia em PHP

Básicas crypt md5, md5_file sha1, sha1_file

35

Abril 2010OWASP @ ISCTE-IUL

criptografia em PHP

crypt algoritmo Unix DES (one-way) string crypt(string $str [, string $salt])

36

Abril 2010OWASP @ ISCTE-IUL

criptografia em PHP

md5 calcula o hash md5 de uma string (one-way, 128 bits) string md5 ( string $str [, bool $raw_output = false ] )

37

Abril 2010OWASP @ ISCTE-IUL

criptografia em PHP

md5_file calcula o hash md5 de um ficheiro (one-way, 128 bits) string md5_file ( string $filename [, bool $raw_output =

false ] )

38

Abril 2010OWASP @ ISCTE-IUL

criptografia em PHP

sha1 calcula o hash sha1 de uma string (one-way, 160 bits) string sha1 ( string $str [, bool $raw_output = false ] )

39

Abril 2010OWASP @ ISCTE-IUL

criptografia em PHP

sha1_file calcula o hash sha1 de um ficheiro (one-way, 160 bits) string sha1_file ( string $filename [, bool $raw_output =

false ] )

40

Abril 2010OWASP @ ISCTE-IUL

criptografia em PHP

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 ] )

41

Abril 2010OWASP @ ISCTE-IUL

criptografia em PHP

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 ] )

42

Abril 2010OWASP @ ISCTE-IUL

criptografia em PHP

Hash array hash_algos ( void )

43

Abril 2010OWASP @ ISCTE-IUL

criptografia em PHP

Hash string hash ( string $algo , string $data [, bool $raw_output =

false ] ) string hash_file ( string $algo , string $filename [, bool

$raw_output = false ] )

44

Abril 2010OWASP @ ISCTE-IUL

criptografia em PHP

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 ] )

45

Abril 2010OWASP @ ISCTE-IUL

criptografia em PHP

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

46

Abril 2010OWASP @ ISCTE-IUL

criptografia em PHP

Mhash string mhash ( int $hash , string $data [, string $key ] )

47

Abril 2010OWASP @ ISCTE-IUL

criptografia em PHP

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

48

Abril 2010OWASP @ ISCTE-IUL

criptografia em PHP

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 ] )

49

Abril 2010OWASP @ ISCTE-IUL

criptografia em PHP

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

50

Abril 2010OWASP @ ISCTE-IUL

criptografia em PHP

Mcrypt cifrar e decifrar informação com AES

51

Abril 2010OWASP @ ISCTE-IUL

criptografia em PHP

Mcrypt cifrar e decifrar informação com 3DES

52

Abril 2010OWASP @ ISCTE-IUL

criptografia em PHP

OpenSSL é um módulo que usa as funções do OpenSSL

(www.openssl.org) para: cifrar e decifrar informação gerar e verificar certificados digitais assinar e verificar digitalmente assinaturas

53

Abril 2010OWASP @ ISCTE-IUL

criptografia em PHP

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

54

Abril 2010OWASP @ ISCTE-IUL

criptografia em PHP

OpenSSL criação de um par de chaves

55

variável password

Abril 2010OWASP @ ISCTE-IUL

criptografia em PHP

OpenSSL criação de um par de chaves

56

Abril 2010OWASP @ ISCTE-IUL

criptografia em PHP

OpenSSL criação de um par de chaves (escrever ficheiro)

57

Abril 2010OWASP @ ISCTE-IUL

criptografia em PHP

OpenSSL criação de um par de chaves (ler de um ficheiro)

58

Abril 2010OWASP @ ISCTE-IUL

criptografia em PHP

OpenSSL criação de certificados digitais

59

Abril 2010OWASP @ ISCTE-IUL

criptografia em PHP

OpenSSL criação de certificados digitais

60

Abril 2010OWASP @ ISCTE-IUL

criptografia em PHP

OpenSSL criação de certificados digitais

61

Abril 2010OWASP @ ISCTE-IUL

criptografia em PHP

OpenSSL criação de certificados digitais

62

Abril 2010OWASP @ ISCTE-IUL

criptografia em PHP

OpenSSL criação de certificados digitais

63

Abril 2010OWASP @ ISCTE-IUL

criptografia em PHP

OpenSSL criação de certificados digitais

64

Abril 2010OWASP @ ISCTE-IUL

criptografia em PHP

OpenSSL criação de certificados digitais

64

Abril 2010OWASP @ ISCTE-IUL

criptografia em PHP

OpenSSL criação de certificados digitais

64

Abril 2010OWASP @ ISCTE-IUL

criptografia em PHP

OpenSSL criação de certificados digitais

64

Abril 2010OWASP @ ISCTE-IUL

criptografia em PHP

OpenSSL criação de certificados digitais (leitura de ficheiro)

65

Abril 2010OWASP @ ISCTE-IUL

criptografia em PHP

OpenSSL cifrar informação com criptografia de chave pública

66

Abril 2010OWASP @ ISCTE-IUL

criptografia em PHP

OpenSSL cifrar informação com criptografia de chave pública

66

Abril 2010OWASP @ ISCTE-IUL

criptografia em PHP

OpenSSL decifrar informação com criptografia de chave pública

67

Abril 2010OWASP @ ISCTE-IUL

criptografia em PHP

OpenSSL assinatura digital com criptografia de chave pública

68

Abril 2010OWASP @ ISCTE-IUL

criptografia em PHP

OpenSSL assinatura digital com criptografia de chave pública

68

Abril 2010OWASP @ ISCTE-IUL

criptografia em PHP

OpenSSL verificar assinatura digital com criptografia de chave pública

69

recomendações70

Abril 2010OWASP @ ISCTE-IUL

recomendações71

Abril 2010OWASP @ ISCTE-IUL

recomendações

não invente!!! não pense que vai inventar um mecanismo criptográfico mais seguro do que outro já existente!

71

Abril 2010OWASP @ ISCTE-IUL

recomendações

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

71

Abril 2010OWASP @ ISCTE-IUL

recomendações

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

71

Abril 2010OWASP @ ISCTE-IUL

recomendações

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!!!!

71

Abril 2010OWASP @ ISCTE-IUL

gestão do ciclo de vida das chaves72

referências73

Abril 2010OWASP @ ISCTE-IUL

referências

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)

74

ISCTE-­‐IUL/DCTI

Instituto  Superior  de  Ciências  do  Trabalho  e  da  EmpresaInstituto  Universitário  de  Lisboa

Departamento  de  Ciências  e  Tecnologias  de  Informação

Carlos  Serrão

carlos.serrao@iscte.ptcarlos.j.serrao@gmail.com

http://www.carlosserrao.nethttp://blog.carlosserrao.nethttp://www.linkedin.com/in/carlosserrao

OWASP @ ISCTE-IULWorkshop de Segurança Aplicacional

Criptografia em PHP

Recommended