Criptografia
Como utilizar
Felipe Weckx
felipe@weckx.net
@weckx
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 9
No PHP...
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 16
Exemplo – AES OpenSSL
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 18
Criptografia Autenticada
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
PHP Conference 2015 20
Perguntas?

Criptografia - como utilizar

  • 1.
  • 2.
    PHP Conference 20152 Segurança da Informação ● Confidencialidade ● Autenticidade ● Integridade ● Disponibilidade
  • 3.
    PHP Conference 20153 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 20154 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 20155 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
  • 6.
    PHP Conference 20156 Hashes - Algoritmos ● MD5, SHA1 – ultrapassados, não utilizar ● SHA256, SHA512 ● WHIRLPOOL ● HMAC – Hash-based Message Authentication Code – Assinatura de mensagens (dados) com hashes
  • 7.
    PHP Conference 20157 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
  • 8.
    PHP Conference 20158 Criptografia - Algoritmos ● Chave Simétrica – AES – 3DES (em desuso) – DES (não utilizar, inseguro) ● Chave Assimétrica – RSA – ElGamal
  • 9.
  • 10.
    PHP Conference 201510 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 201511 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 201512 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 201513 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 201514 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 201515 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
  • 16.
    PHP Conference 201516 Exemplo – AES OpenSSL
  • 17.
    PHP Conference 201517 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
  • 18.
    PHP Conference 201518 Criptografia Autenticada
  • 19.
    PHP Conference 201519 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
  • 20.
    PHP Conference 201520 Perguntas?