criptografia - como utilizar
TRANSCRIPT
PHP Conference 2015 2
Segurança da Informação
● Confidencialidade● Autenticidade● Integridade● Disponibilidade
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
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
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
PHP Conference 2015 6
Hashes - Algoritmos
● MD5, SHA1 – ultrapassados, não utilizar● SHA256, SHA512● WHIRLPOOL● HMAC
– Hash-based Message Authentication Code
– Assinatura de mensagens (dados) com hashes
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
PHP Conference 2015 8
Criptografia - Algoritmos
● Chave Simétrica– AES
– 3DES (em desuso)
– DES (não utilizar, inseguro)
● Chave Assimétrica– RSA
– ElGamal
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
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
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
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/
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
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
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
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