Download pdf - Tales of the Crypto

Transcript
Page 1: Tales of the Crypto

Imagem: Cryptomuseum.com

Tales of the Crypto Adler Medrado

PHP Conference Brasil 2012Monday, December 3, 12

Page 2: Tales of the Crypto

Quem sou eu?• Desenvolvedor, Consultor,

Instrutor;

• Trabalha na Sigma Dataserv;

• Co-Fundador do PHPDF;

• Fui apresentado ao PHP em 1999;

• Tenho meu próprio podcast (getOnCode);

• ZCE

• PHP 5;

• Zend Framework;Monday, December 3, 12

Page 3: Tales of the Crypto

Objetivos

• Mostrar como algumas ferramentas que auxiliam no uso de criptografia com PHP

• Criptografia é um assunto complexo para podermos abordar a fundo aqui

• Quer estudar? https://www.coursera.org/course/crypto

Monday, December 3, 12

Page 4: Tales of the Crypto

Segurança

• Atualmente há consenso que é necessário obter segurança nas transações realizadas pela internet

• A segurança é composta de diversos fatores e a criptografia é uma delas

Monday, December 3, 12

Page 5: Tales of the Crypto

O que é criptografia?

• Uma ciência

• Nome tem origem no grego - kryptós (escondido) e gráphein (escrita)

Monday, December 3, 12

Page 6: Tales of the Crypto

Entusiastas da Criptografia• Sun Tzu

• Hitler

• Carl Von Clausewitz

Monday, December 3, 12

Page 7: Tales of the Crypto

Segunda Guerra

http://www.navajocodetalkers.org/

Monday, December 3, 12

Page 8: Tales of the Crypto

Chega de história

Monday, December 3, 12

Page 9: Tales of the Crypto

Para que serve?

• Garantir Integridade do Dado

• Prover segurança em transações confidenciais

• Privacidade

• Garantia de Autenticidade

Monday, December 3, 12

Page 10: Tales of the Crypto

Para que não serve

• XSS

• SQL Injection

• Session Hijacking

• Engenharia Social

• "As pessoas são o elo mais fraco" -Kevin Mitnick

Monday, December 3, 12

Page 11: Tales of the Crypto

Criptografia != Segurança

Monday, December 3, 12

Page 12: Tales of the Crypto

Não tente criar seu próprio algoritimo

Monday, December 3, 12

Page 13: Tales of the Crypto

Por mais que você seja bom, seu algoritimo tem grandes chances de ser inferior aos já existentes e que são abertos

Monday, December 3, 12

Page 14: Tales of the Crypto

A não ser que você seja um matemático acima da média.

Monday, December 3, 12

Page 15: Tales of the Crypto

Se você fizer algo superior ao que já existe, por favor, torne-o um padrão aberto.

Monday, December 3, 12

Page 16: Tales of the Crypto

Se a Microsoft, Oracle ou Apple te oferecessem um algoritimo fechado para você criptografar os dados

da sua empresa, você confiaria?

Monday, December 3, 12

Page 17: Tales of the Crypto

E se o governo te oferecesse, você aceitaria?

Monday, December 3, 12

Page 18: Tales of the Crypto

Dê a preferência, sempre, aos algoritimos abertos

Monday, December 3, 12

Page 19: Tales of the Crypto

Criptografando mensagens

• Código

• Quando é necessário um código para decifrar a mensagem

• Cifra

• Esconde conteúdo original dentro de outro

Monday, December 3, 12

Page 20: Tales of the Crypto

Cifras• Exemplo 1 - Texto substituído por número e somado a valor

chave

EU VOU PRA CASA

5 20 21 14 20 15 17 1 3 1 18 1

15 30 31 24 30 25 27 11 13 11 28 11

codigo = 10

Monday, December 3, 12

Page 21: Tales of the Crypto

Cifras

• Exemplo II - Cifra de Cesar

http://pt.wikipedia.org/wiki/Cifra_de_C%C3%A9sar

Normal: a ligeira raposa marrom saltou sobre o cachorro cansadoCifrado: D OLJHLUD UDSRVD PDUURP VDOWRX VREUH R FDFKRUUR FDQVDGR

Monday, December 3, 12

Page 22: Tales of the Crypto

Como você salva passwords ?

• Plain Text?

• Hashing?

Monday, December 3, 12

Page 23: Tales of the Crypto

Hashing

• Mais comuns

• MD5 - Message Digest Algorithm - RFC 1321

• SHA1 - Secure Hash Algorithm - NIST-FIPS 180-1

Hashing normalmente possuem tamanho fixo, geralmente 128 ou 256 bits, independente do tamanho de entrada.

Além de MD5 e SHA-1, existem diversos algoritimos de hashing.

Monday, December 3, 12

Page 24: Tales of the Crypto

Colisão de Hashes

• Por terem tamanho fixo:

• deduz-se que os hashes gerados são limitados

• se há limite, dois valores diferentes podem ter o mesmo hash

• se isso acontecer, é uma colisão de hashes

Monday, December 3, 12

Page 25: Tales of the Crypto

Brute Force$password = 'vidaloka';md5($password);

Monday, December 3, 12

Page 26: Tales of the Crypto

Salt$password = 'vidaloka';$salt = 'phpconf';md5($salt.$password);

Monday, December 3, 12

Page 27: Tales of the Crypto

Outras Opções

• hash

• Pode ser desabilitado na compilação

• Risco ao mudar de ambiente

• crypt

• Está no core

Monday, December 3, 12

Page 28: Tales of the Crypto

hashhash('adler32', 'vidaloka');

Para saber quais algoritimos estão disponíveis

var_dump(hash_algos());

Algoritimo com o nome mais bonito do mundo

Monday, December 3, 12

Page 29: Tales of the Crypto

crypt$password = 'vidaloka';$salt = 'phpconf';

// Para usar Blowfish$salt = '$2a$07$'.$salt.'$'; echo 'Plaintext password: '.$password."\n";echo 'Salt: '.$salt."\n";

echo 'Blowfish hash: ' . crypt($password, $salt)."\n";

crypt + blowfish FTW

Monday, December 3, 12

Page 30: Tales of the Crypto

Criptografia Simétrica

• O mésmo código/chave usado para criptografar é usado para descriptografar

• Por usar a mesma chave, o algoritimo criptográfico usado é mais simples

• Por possuir um algoritimo mais simples, é mais rápida que a assimétrica

Monday, December 3, 12

Page 31: Tales of the Crypto

Criptografia Assimétrica

• Utiliza um par de chaves: pública e privada

• As chaves são diferentes, entretanto, matemáticamente relacionadas

• Mais seguro

• Mais lento

Monday, December 3, 12

Page 32: Tales of the Crypto

Algoritimos populares

• AES - Simétrica

• RSA - Assimétrica

Existem diversas bibliotecas que abstraem o trabalho sujo

• OpenSSL

• PGP/OpenPGP/GnuPG

• MCrypt

Monday, December 3, 12

Page 33: Tales of the Crypto

OpenSSL

• Open-Source

• Toolkit que implementa suporte aos protocolos SSL e TLS

• Oferece uma biblioteca criptografica de uso geral

• Suporte a diversos padrões e algorítimos

• Provê mecanismos para gerar certificados SSL

Monday, December 3, 12

Page 34: Tales of the Crypto

Exemplos com OpenSSL

• Criptografia Simétrica$texto = <<<TEXTO_SECRETOJoguei uma pedra na água;Ela era pesada e foi ao fundo;Os peixinhos responderam: Viva Dom Pedro II.TEXTO_SECRETO;

$iv = "1234567812345678";$senha = '1234';$metodo = 'aes-256-cbc';

file_put_contents ('arquivo.ssl.txt',openssl_encrypt ($texto, $metodo, $senha, true, $iv));

openssl_decrypt(file_get_contents('arquivo.ssl.txt'), $metodo, $senha, true, $iv);

Monday, December 3, 12

Page 35: Tales of the Crypto

Exemplos com OpenSSL

Gerando chaves pública e privada com SSL

$chave_privada = openssl_pkey_new(array( 'private_key_bits' => 1024, 'private_key_type' => OPENSSL_KEYTYPE_RSA,));openssl_pkey_export_to_file($chave_privada, 'private', '12345'); $detalhes_da_chave = openssl_pkey_get_details($chave_privada);file_put_contents('public', $detalhes_da_chave['key']);

Monday, December 3, 12

Page 36: Tales of the Crypto

Exemplos com OpenSSL

Monday, December 3, 12

Page 37: Tales of the Crypto

Exemplos com OpenSSL

$chave_publica = openssl_pkey_get_public('file:///keys/public');openssl_public_encrypt($texto, $dados_criptografados, $chave_publica);

$chave_privada = openssl_pkey_get_private('file:///keys/private', '12345');openssl_private_decrypt($dados_criptografados, $dados_originais, $chave_privada);

Usando as chaves para criptografar e descriptografar

Monday, December 3, 12

Page 38: Tales of the Crypto

PGP/OpenPGP/GnuPG

• Pretty Good Privacy

• Desenvolvido em 1991 por Phil Zimmermann

• Código Aberto - Origem do OpenPGP

• Simples instalação do toolkit

• Configuração com PHP não é trivial

• Cadeias de confiança do PGP são interessantes

• KeyServers

Monday, December 3, 12

Page 39: Tales of the Crypto

Exemplo com PGP

$gpg = new gnupg();$gpg -> addencryptkey("8660281B6051D071D94B5B230549F9DC851566DC");$enc = $gpg -> encrypt("Texto Secreto");

$res = gnupg_init();gnupg_adddecryptkey($res,"8660281B6051D071D94B5B230549F9DC851566DC",'senha');$original = gnupg_decrypt($res,$enc);

Monday, December 3, 12

Page 40: Tales of the Crypto

MCrypt

• Biblioteca open-source

• Suporta diversos algorítimos

• Criptografia Simétrica

Monday, December 3, 12

Page 41: Tales of the Crypto

Exemplo MCrypt$texto = <<<TEXTO_SECRETOJoguei uma pedra na água;Ela era pesada e foi ao fundo;Os peixinhos responderam: Viva Dom Pedro II.TEXTO_SECRETO;

$chave = "segredo";

// Vetor de Identificação$tamanho_iv = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC);$iv = mcrypt_create_iv($tamanho_iv, MCRYPT_RAND);

$texto_criptografado = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $chave, $texto, MCRYPT_MODE_CBC, $iv);

$texto_descriptografado = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $chave, $texto_criptografado, MCRYPT_MODE_CBC, $iv);

Monday, December 3, 12

Page 42: Tales of the Crypto

Perguntas?

Monday, December 3, 12

Page 43: Tales of the Crypto

Obrigado, até a próxima.http://adlermedrado.com.br

http://getoncode.com.br

@adlermedrado

Monday, December 3, 12