criptografia - como utilizar

20
Criptografia Como utilizar Felipe Weckx [email protected] @weckx

Upload: felipe-weckx

Post on 13-Apr-2017

508 views

Category:

Software


0 download

TRANSCRIPT

Criptografia

Como utilizar

Felipe [email protected]

@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?