owasp @ iscte-iul, criptografia em php
DESCRIPTION
Apresentação realizada no OWASP @ ISCTE-IUL, Workshop de Segurança Aplicacional, sobre Criptografia em PHP.TRANSCRIPT
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
[email protected]@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
[email protected]@gmail.com
http://www.carlosserrao.nethttp://blog.carlosserrao.nethttp://www.linkedin.com/in/carlosserrao
OWASP @ ISCTE-IULWorkshop de Segurança Aplicacional
Criptografia em PHP