O documento discute criptografia em PHP, começando com uma introdução à criptografia em aplicações web e criptografia básica. É apresentada uma visão geral de como criptografar dados em trânsito e armazenamento, bem como criptografar senhas. O documento então explora vários tópicos de criptografia em PHP, incluindo funções hash, criptografia simétrica e assimétrica, e certificados digitais.
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. 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
4. criptografia em aplicações web
4
criptografia?
$notEncrypted
=
base64_encode($data);
$notEncrypted
=
urlencode($data);
$notEncrypted
=
crc32();
OWASP @ ISCTE-IUL Abril 2010
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. 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. 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. 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. 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
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. 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. 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. 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. 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. 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
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. 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. 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. 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. 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
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. 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. 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. 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. 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
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
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. criptografia em PHP
51
Mcrypt
cifrar e decifrar informação com AES
OWASP @ ISCTE-IUL Abril 2010
57. criptografia em PHP
52
Mcrypt
cifrar e decifrar informação com 3DES
OWASP @ ISCTE-IUL Abril 2010
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. 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. criptografia em PHP
55
OpenSSL
criação de um par de chaves
variável password
OWASP @ ISCTE-IUL Abril 2010
61. criptografia em PHP
56
OpenSSL
criação de um par de chaves
OWASP @ ISCTE-IUL Abril 2010
62. criptografia em PHP
57
OpenSSL
criação de um par de chaves (escrever ficheiro)
OWASP @ ISCTE-IUL Abril 2010
63. criptografia em PHP
58
OpenSSL
criação de um par de chaves (ler de um ficheiro)
OWASP @ ISCTE-IUL Abril 2010
64. criptografia em PHP
59
OpenSSL
criação de certificados digitais
OWASP @ ISCTE-IUL Abril 2010
65. criptografia em PHP
60
OpenSSL
criação de certificados digitais
OWASP @ ISCTE-IUL Abril 2010
66. criptografia em PHP
61
OpenSSL
criação de certificados digitais
OWASP @ ISCTE-IUL Abril 2010
67. criptografia em PHP
62
OpenSSL
criação de certificados digitais
OWASP @ ISCTE-IUL Abril 2010
68. criptografia em PHP
63
OpenSSL
criação de certificados digitais
OWASP @ ISCTE-IUL Abril 2010
69. criptografia em PHP
64
OpenSSL
criação de certificados digitais
OWASP @ ISCTE-IUL Abril 2010
70. criptografia em PHP
64
OpenSSL
criação de certificados digitais
OWASP @ ISCTE-IUL Abril 2010
71. criptografia em PHP
64
OpenSSL
criação de certificados digitais
OWASP @ ISCTE-IUL Abril 2010
72. criptografia em PHP
64
OpenSSL
criação de certificados digitais
OWASP @ ISCTE-IUL Abril 2010
73. criptografia em PHP
65
OpenSSL
criação de certificados digitais (leitura de ficheiro)
OWASP @ ISCTE-IUL Abril 2010
74. criptografia em PHP
66
OpenSSL
cifrar informação com criptografia de chave pública
OWASP @ ISCTE-IUL Abril 2010
75. criptografia em PHP
66
OpenSSL
cifrar informação com criptografia de chave pública
OWASP @ ISCTE-IUL Abril 2010
76. criptografia em PHP
67
OpenSSL
decifrar informação com criptografia de chave pública
OWASP @ ISCTE-IUL Abril 2010
77. criptografia em PHP
68
OpenSSL
assinatura digital com criptografia de chave pública
OWASP @ ISCTE-IUL Abril 2010
78. criptografia em PHP
68
OpenSSL
assinatura digital com criptografia de chave pública
OWASP @ ISCTE-IUL Abril 2010
79. criptografia em PHP
69
OpenSSL
verificar assinatura digital com criptografia de chave pública
OWASP @ ISCTE-IUL Abril 2010
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. 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. 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. 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. gestão do ciclo de vida das chaves
72
OWASP @ ISCTE-IUL Abril 2010
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. 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