O documento discute conceitos de criptografia como confidencialidade, integridade e autenticidade. Apresenta algoritmos de criptografia simétrica e assimétrica como AES e RSA, respectivamente. Também aborda hashes criptográficos como MD5 e SHA256, bem como suas aplicações na geração de assinaturas digitais e armazenamento seguro de senhas.
3. PHP Conference 2015 3
Criptografia
● Transformação da informação para que que
seja conhecida apenas pelas partes desejadas.
● Algoritmos
– Cifra de Bloco
– Modo de Operação
– Tamanho da Chave
● Criptografia forte – algoritmos resistentes à
ataques criptoanalíticos
4. PHP Conference 2015 4
Criptografia vs Segurança
● Apenas criptografia não é suficiente
● Criptografia não resolve todos os problemas
● Má utilização é pior do que nenhuma
criptografia
● Ataques
– Força bruta
– Ataque teórico
– Ataque de implementação
5. PHP Conference 2015 5
Hashes
● Criptografia de mão única
● Dados originais não podem ser recuperados
● Salt – essencial para sempre gerar um valor
distinto
● Usos
– Assinaturas digitais
– Armazenamento de senhas
– Verificação de integridade
7. PHP Conference 2015 7
Criptografia
● Chave Simétrica
– Mesma chave utilizada para criptografar e descriptografar
● Chave Assimétrica
– Uma chave para criptografar
– Uma chave para descriptografar
● Criptografia Autenticada
– Combinação de Criptografia + HMAC
– Garante confidencialidade e autenticidade
10. PHP Conference 2015 10
Principais Bibliotecas/Funções
● Mcrypt – abandonware – não utilizar
– Último release libmcrypt: 19/02/2007
● OpenSSL
– Ativamente mantida, utilizada em inúmeros projetos
● libsodium-php
– Extensão baseada na libsodium, moderna e ativamente
mantida
● crypt(), password_*()
– Funções do PHP para hash
11. PHP Conference 2015 11
Hash
● password_hash() (PHP >= 5.5)
– Utilizar para armazenamento e verificação de senhas
– Geração automática de salt e uso do algoritmo mais seguro
– password_needs_rehash() verifica se a senha precisa ser
hasheada novamente
– password_verify() verificação simples de senha para
autenticação
● Extensão HASH
– Habilitada por padrão
– Suporta HMAC e principais algoritmos
12. PHP Conference 2015 12
Hash – importância do salt
SEM SALT
Valor 1: phpconference
Hash SHA1:
068fb0a3d6cd126ca0132c798b6d90db50f504be
Valor 2: novasenha2015
Hash SHA1:
61e9e9a8942cf25619fa162600ffa139d44230f3
Valor 3: phpconference
Hash SHA1:
068fb0a3d6cd126ca0132c798b6d90db50f504be
COM SALT
Valor 1: phpconference
Salt: QE/m4ueJzHA=
Hash SHA1:
8ca52fcf30105c686ad4df512f58395bc32c8ff7
Valor 2: novasenha2015
Salt: EtE33ovfCsE=
Hash SHA1:
69eb34c2c41e376cd60015242ea8927eea2ac291
Valor 3: phpconference
Salt: NKRAYDmovvk=
Hash SHA1:
c92def2a9d6ac80d647d48110f9afee554ad3ddf
13. PHP Conference 2015 13
Problemas de má implementação...
Fonte: http://arstechnica.com/security/2015/09/once-seen-as-bulletproof-11-million-ashley-madison-passwords-already-cracked/
14. PHP Conference 2015 14
Criptografia de Dados
● Armazenamento de dados sensíveis
● Algoritmo Recomendado AES-256
– Utilizar OpenSSL ou libsodium
● Gerar chaves seguras
– Não utilizar rand() nem mt_rand()
– Utilizar openssl_random_pseudo_bytes()
● Armazenar chaves em local separado dos
dados
15. PHP Conference 2015 15
Criptografando com AES
● Modo de Operação
– Nunca utilizar ECB
– Utilizar CBC ou CTR
● Gerar chaves seguras
● Utilizar HMAC para gerar
código de autenticação
– Validar ao ler dados
Original
AES com ECB
17. PHP Conference 2015 17
IV?
● Initialization Vector
● String aleatória de tamanho fixo que
normalmente deve ser aleatória (depende do
algoritmo)
● IV não é secreto
● Garante valores criptografados distintos para
mesmo valor original, semelhante ao salt
19. PHP Conference 2015 19
Melhores Práticas
● Nunca crie seu próprio algoritmo criptográfico
● Utilize algoritmos e bibliotecas já testados e
conhecidos
● Não utilizar mcrypt
● Criptografia é apenas uma parte da
segurança