SlideShare uma empresa Scribd logo
1 de 56
Baixar para ler offline
Criptografia com PHP
@vcampitelli
CRIPTOGRAFIACRIPTOGRAFIA
COM PHPCOM PHP
1
Criptografia com PHP
@vcampitelli
QUEM SOU EU?QUEM SOU EU?
Vinícius Campitelli •
MT4 Tecnologia • @MediaPost • Curseduca •
senhasegura
vcampitelli.github.io
2
Criptografia com PHP
@vcampitelli
O QUE ÉO QUE É
CRIPTOGRAFIA?CRIPTOGRAFIA?
3 . 1
Criptografia com PHP
@vcampitelli
é a prática e o estudo de técnicas para
comunicação segura na presença de
terceiros
é a construção e análise de protocolos
que previnam terceiros de ler
mensagens privadas
3 . 2
Criptografia com PHP
@vcampitelli
Texto claro → Texto cifrado
3 . 3
Criptografia com PHP
@vcampitelli
TIPOS DETIPOS DE
CRIPTOGRAFIACRIPTOGRAFIA
4
Criptografia com PHP
@vcampitelli
SIMÉTRICASIMÉTRICA
5 . 1
Criptografia com PHP
@vcampitelli
Utiliza uma mesma chave para criptografar e
descriptografar os textos
Exemplos
AES
3DES
RC4
Blowfish
5 . 2
Criptografia com PHP
@vcampitelli
CIFRASCIFRAS
5 . 3
Criptografia com PHP
@vcampitelli
CIFRAS EM BLOCOCIFRAS EM BLOCO
Algoritmo determinístico que usa uma chave para
transformar um bloco em um texto cifrado
AES
Blocos de 128 bits
Chaves de 128, 192 ou 256 bits
5 . 4
Criptografia com PHP
@vcampitelli
MODOS DE OPERAÇÃOMODOS DE OPERAÇÃO
Mecanismo que irá dividir a mensagem em blocos
e aplicar a cifra a cada um
Exemplos
ECB
CBC
CTR
GCM (PHP 7.1)
5 . 5
Criptografia com PHP
@vcampitelli
Tux originalTux original Tux aplicando-se CBC / CTRTux aplicando-se CBC / CTR Tux aplicando-se ECBTux aplicando-se ECB
NÃO USE ECB!NÃO USE ECB!
5 . 6
Criptografia com PHP
@vcampitelli
CIFRAS DE FLUXO (STREAM)CIFRAS DE FLUXO (STREAM)
Algoritmo que opera em um bit/byte de cada vez
Chave "infinita" de dados pseudo-randômicos
Indicado quando não se sabe o tamanho do dado
Algoritmos
RC4, mais conhecido mas inseguro
: projeto para escolher novos
algoritmos
eSTREAM
5 . 7
Criptografia com PHP
@vcampitelli
ASSIMÉTRICAASSIMÉTRICA
6 . 1
Criptografia com PHP
@vcampitelli
Chave privada: utilizada para criptografar
(escrever)
Chave pública: utilizada para descriptografar (ler)
Algoritmos
RSA
Curvas Elípticas
6 . 2
Criptografia com PHP
@vcampitelli
Provê encriptação e autenticação
Utilizada para estabelecer conexões seguras em
ambientes inseguros
Principais utilizações
SSH
SSL/TLS (certificados digitais)
PGP
6 . 3
Criptografia com PHP
@vcampitelli
PROBLEMA: TROCA DE CHAVESPROBLEMA: TROCA DE CHAVES
Algoritmo Diffie–HellmanAlgoritmo Diffie–Hellman
6 . 4
Criptografia com PHP
@vcampitelli
Criptografia com PHP
@vcampitelli
Fonte:Fonte: WikipediaWikipedia
6 . 5
Criptografia com PHP
@vcampitelli
GERADORES DEGERADORES DE
ALEATORIEDADEALEATORIEDADE
7 . 1
Criptografia com PHP
@vcampitelli
PHP 7
random_int()
random_bytes()
PHP 5.3+
openssl_random_pseudo_bytes()
PHP 5.x
paragonie/random_compat
7 . 2
Criptografia com PHP
@vcampitelli
MÁS PRÁTICASMÁS PRÁTICAS
rand() e mt_rand() não são criptogra camente
seguros
7 . 3
Criptografia com PHP
@vcampitelli
VETORES DEVETORES DE
INICIALIZAÇÃOINICIALIZAÇÃO
8 . 1
Criptografia com PHP
@vcampitelli
Utilizados para "inicializar" os algoritmos
openssl_cipher_iv_length() para buscar o
tamanho do IV para cada algoritmo
openssl_get_cipher_methods() para
descobrir os algoritmos disponíveis
8 . 2
Criptografia com PHP
@vcampitelli
EXEMPLOEXEMPLO
random_bytesrandom_bytes((openssl_cipher_iv_lengthopenssl_cipher_iv_length(('aes-256-ctr''aes-256-ctr'))));;
// Q��A|Gh���C �M// Q��A|Gh���C �M
8 . 3
Criptografia com PHP
@vcampitelli
MÁS PRÁTICAS GERAISMÁS PRÁTICAS GERAIS
mcrypt: desatualizada desde 2008
Fazer seu próprio algoritmo
9 . 1
Criptografia com PHP
@vcampitelli
NA PRÁTICANA PRÁTICA
9 . 2
Criptografia com PHP
@vcampitelli
stringstring openssl_encryptopenssl_encrypt(( stringstring $data$data ,,
stringstring $method$method ,, stringstring $key$key [[,, intint
$options$options == 00 [[,, stringstring $iv$iv == """" [[,, stringstring
&&$tag$tag == NULLNULL [[,, stringstring $aad$aad == """" [[,, intint
$tag_length$tag_length == 1616 ]]]]]]]]]] ))
9 . 3
Criptografia com PHP
@vcampitelli
$key$key == openssl_random_pseudo_bytesopenssl_random_pseudo_bytes((3232));; // chave de 256 bits// chave de 256 bits
$iv$iv == openssl_random_pseudo_bytesopenssl_random_pseudo_bytes((
openssl_cipher_iv_lengthopenssl_cipher_iv_length(('aes-256-ctr''aes-256-ctr'))
));;
$data$data == 'Olá, PHP Conference 2017!''Olá, PHP Conference 2017!';;
$encrypted$encrypted == openssl_encryptopenssl_encrypt(($data$data,, 'aes-256-ctr''aes-256-ctr',, $key$key,, 00,, $iv$iv));;
// LKdTM372XbDEYP6UnAWbhChZ7wxbaOt+6qg=// LKdTM372XbDEYP6UnAWbhChZ7wxbaOt+6qg=
9 . 4
Criptografia com PHP
@vcampitelli
stringstring openssl_decryptopenssl_decrypt(( stringstring $data$data ,,
stringstring $method$method ,, stringstring $key$key [[,, intint
$options$options == 00 [[,, stringstring $iv$iv == """" [[,, stringstring
$tag$tag == """" [[,, stringstring $aad$aad == """" ]]]]]]]] ))
9 . 5
Criptografia com PHP
@vcampitelli
// $key e $iv devem ser os mesmos usados no openssl_encrypt()// $key e $iv devem ser os mesmos usados no openssl_encrypt()
// Uma forma de passar o IV é enviá-lo junto com o texto cifrado// Uma forma de passar o IV é enviá-lo junto com o texto cifrado
// Por exemplo: $data = $iv . $crypt;// Por exemplo: $data = $iv . $crypt;
$ivLength$ivLength == openssl_cipher_iv_lengthopenssl_cipher_iv_length(('aes-256-ctr''aes-256-ctr'));;
$iv$iv == substrsubstr(($data$data,, 00,, $ivLength$ivLength));;
$crypt$crypt == substrsubstr(($data$data,, $ivLength$ivLength));;
openssl_decryptopenssl_decrypt(($crypt$crypt,, 'aes-256-ctr''aes-256-ctr',, $key$key,, 00,, $iv$iv));;
9 . 6
Criptografia com PHP
@vcampitelli
HASHINGHASHING
10 . 1
Criptografia com PHP
@vcampitelli
é uma função que mapeia dados de
tamanho arbitrário para dados de
tamanho xo
10 . 2
Criptografia com PHP
@vcampitelli
TIMING ATTACKSTIMING ATTACKS
Side-channel attackSide-channel attack que analisa o tempo de execuçãoque analisa o tempo de execução
de algoritmos de criptografiade algoritmos de criptografia
10 . 3
Criptografia com PHP
@vcampitelli
stringstring hashhash(( stringstring $algo$algo ,, stringstring $data$data [[,,
boolbool $raw_output$raw_output == falsefalse ]]))
hashhash(('sha256''sha256',, 'phpconf@2017''phpconf@2017'));;
// f32b98cc1a6ed7e0614e5ee8fdf8142ea6b9b12a8c487aa6e269d220d93669// f32b98cc1a6ed7e0614e5ee8fdf8142ea6b9b12a8c487aa6e269d220d93669
10 . 4
Criptografia com PHP
@vcampitelli
boolbool hash_equalshash_equals(( stringstring $known_string$known_string ,,
stringstring $user_string$user_string ))
$userHash$userHash == hashhash(('sha256''sha256',, $postedData$postedData));;
ifif ((hash_equalshash_equals(($storedHash$storedHash,, $userHash$userHash)))) {{ ...... }}
10 . 5
Criptografia com PHP
@vcampitelli
stringstring password_hashpassword_hash(( stringstring $password$password ,,
intint $algo$algo [[,, arrayarray $options$options ]] ))
password_hashpassword_hash(('phpconf@2017''phpconf@2017',, PASSWORD_DEFAULTPASSWORD_DEFAULT,, [['cost''cost' ==>> 1212]]));;
// $2y$12$m.GZEOwitahX7JIq7ulvWeR54AMT/SEg1TVh74iijsjTXT0LZRQ2q// $2y$12$m.GZEOwitahX7JIq7ulvWeR54AMT/SEg1TVh74iijsjTXT0LZRQ2q
10 . 6
Criptografia com PHP
@vcampitelli
boolbool password_verifypassword_verify(( stringstring $password$password ,,
stringstring $hash$hash ))
ifif ((password_verifypassword_verify(($postedPassword$postedPassword,, $storedHash$storedHash)))) {{ ...... }}
10 . 7
Criptografia com PHP
@vcampitelli
ARGON2 NO PHP 7.2ARGON2 NO PHP 7.2
Vencedor do
(2015)
Versão Argon2i, otimizada para side-channel
attacks
Constante PASSWORD_ARGON2I
Opções
memory_cost: memória máxima (bytes)
time_cost: tempo máximo para o cálculo
threads: número de threads
Password Hashing Competition
10 . 8
Criptografia com PHP
@vcampitelli
MÁS PRÁTICASMÁS PRÁTICAS
md5() - colisões e velocidade
sha1() - colisão ( )
=== - timing attack
shattered.io
10 . 9
Criptografia com PHP
@vcampitelli
ASSINATURASASSINATURAS
11 . 1
Criptografia com PHP
@vcampitelli
esquema matemático para demonstrar
a autenticidade de uma mensagem
11 . 2
Criptografia com PHP
@vcampitelli
OPENSSLOPENSSL
Disponível a partir do PHP 5.3
Algoritmos disponíveis:
ou openssl_get_md_methods()
http://php.net/manual/en/openssl.signature-
algos.php
11 . 3
Criptografia com PHP
@vcampitelli
boolbool openssl_signopenssl_sign(( stringstring $data$data ,, stringstring
&&$signature$signature ,, mixedmixed $priv_key_id$priv_key_id [[,, mixedmixed
$signature_alg$signature_alg == OPENSSL_ALGO_SHA1OPENSSL_ALGO_SHA1 ]] ))
$privateKey$privateKey == openssl_pkey_get_privateopenssl_pkey_get_private(('file:///path/to/key.pem''file:///path/to/key.pem'))
openssl_signopenssl_sign(($data$data,, $signature$signature,, $privateKey$privateKey,, OPENSSL_ALGO_SHA256OPENSSL_ALGO_SHA256))
// $signature = j�C^�)�L}� K���^ �~C3���l��&�l.��.�(�// $signature = j�C^�)�L}� K���^ �~C3���l��&�l.��.�(�
// Para converter, usar base64_encode() ou bin2hex()// Para converter, usar base64_encode() ou bin2hex()
11 . 4
Criptografia com PHP
@vcampitelli
intint openssl_verifyopenssl_verify(( stringstring $data$data ,, stringstring
$signature$signature ,, mixedmixed $pub_key_id$pub_key_id [[,, mixedmixed
$signature_alg$signature_alg == OPENSSL_ALGO_SHA1OPENSSL_ALGO_SHA1 ]] ))
$pubKey$pubKey == openssl_pkey_get_publicopenssl_pkey_get_public(('file://path/to/cert.pem''file://path/to/cert.pem'));;
openssl_verifyopenssl_verify(($data$data,, $signature$signature,, $pubKey$pubKey,, 'sha256WithRSAEncrypti'sha256WithRSAEncrypti
// Retorna 1 ou 0 se a assinatura for válida ou não// Retorna 1 ou 0 se a assinatura for válida ou não
// Caso haja algum erro, retorna -1// Caso haja algum erro, retorna -1
11 . 5
Criptografia com PHP
@vcampitelli
HMACHMAC
Hash-based Message Authentication Code
Algoritmos disponíveis: hash_hmac_algos()
11 . 6
Criptografia com PHP
@vcampitelli
stringstring hash_hmachash_hmac(( stringstring $algo$algo ,, stringstring
$data$data ,, stringstring $key$key [[,, boolbool $raw_output$raw_output ==
falsefalse ]] ))
hash_hmachash_hmac(('sha256''sha256',, 'PHP Conference 2017''PHP Conference 2017',, '+0FcB5@#:vb;%''+0FcB5@#:vb;%'));;
// 8486e5da2bd373ac77af77f966088aedeec2481f73c32c82cead64715be5a4// 8486e5da2bd373ac77af77f966088aedeec2481f73c32c82cead64715be5a4
11 . 7
Criptografia com PHP
@vcampitelli
boolbool hash_equalshash_equals(( stringstring $known_string$known_string ,,
stringstring $user_string$user_string ))
hash_equalshash_equals(($hashFromDb$hashFromDb,, hashhash(('sha256''sha256',, $postedData$postedData))));;
11 . 8
Criptografia com PHP
@vcampitelli
MÁS PRÁTICASMÁS PRÁTICAS
md5() - colisões e velocidade
sha1() - colisão ( )
=== - timing attack
shattered.io
11 . 9
Criptografia com PHP
@vcampitelli
UTILIDADESUTILIDADES
12 . 1
Criptografia com PHP
@vcampitelli
CRYPTOOLCRYPTOOL
CrypToolCrypTool
Criptografia com PHP
@vcampitelli 12 . 2
Criptografia com PHP
@vcampitelli
LIBSODIUMLIBSODIUM
Biblioteca moderna para criptografia, assinaturas
e hashing
Incorporada no PHP 7.2 ( )manual
PHP 7.2: The First Programming Language to Add
Modern Cryptography to its Standard Library
12 . 3
Criptografia com PHP
@vcampitelli
GERANDO CHAVES SIMÉTRICAS SEGURASGERANDO CHAVES SIMÉTRICAS SEGURAS
pwgenpwgen --sy1sy1 3232
12 . 4
Criptografia com PHP
@vcampitelli
GERANDO PAR DE CHAVES RSAGERANDO PAR DE CHAVES RSA
openssl genrsaopenssl genrsa --outout privateprivate..keykey 20482048
# Generating RSA private key, 2048 bit long modulus# Generating RSA private key, 2048 bit long modulus
openssl rsaopenssl rsa --inin privateprivate..keykey --outformoutform PEMPEM --puboutpubout --outout publicpublic..pempem
# writing RSA key# writing RSA key
12 . 5
Criptografia com PHP
@vcampitelli
OBRIGADO!OBRIGADO!
GitHub:
Twitter:
Slides:
Vagas:
@vcampitelli
@vcampitelli
vcampitelli.github.io
vagas@mt4.com.br
13

Mais conteúdo relacionado

Semelhante a Criptografia com PHP

126015847 seguranca-de-redes-criptografia-2
126015847 seguranca-de-redes-criptografia-2126015847 seguranca-de-redes-criptografia-2
126015847 seguranca-de-redes-criptografia-2Marco Guimarães
 
126015847 seguranca-de-redes-criptografia-2 (1)
126015847 seguranca-de-redes-criptografia-2 (1)126015847 seguranca-de-redes-criptografia-2 (1)
126015847 seguranca-de-redes-criptografia-2 (1)Marco Guimarães
 
PHP like a super hero
PHP like a super heroPHP like a super hero
PHP like a super heroElton Minetto
 
Certificação Digital - Aula1 Exercícios
Certificação Digital - Aula1 ExercíciosCertificação Digital - Aula1 Exercícios
Certificação Digital - Aula1 ExercíciosLeandro Rezende
 
T aula4-introducao-criptografia
T aula4-introducao-criptografiaT aula4-introducao-criptografia
T aula4-introducao-criptografiaHélio Martins
 
Palestra criando aplicações seguras com php (2)
Palestra  criando aplicações seguras com php (2)Palestra  criando aplicações seguras com php (2)
Palestra criando aplicações seguras com php (2)Leandro Lugaresi
 
Proteja sua aplicação com o zend framework 2
Proteja sua aplicação com o zend framework 2Proteja sua aplicação com o zend framework 2
Proteja sua aplicação com o zend framework 2Cyrille Grandval
 
Slide curso metasploit
Slide curso metasploitSlide curso metasploit
Slide curso metasploitRoberto Soares
 
TDC2016SP - Programando PHP com mais segurança!
TDC2016SP - Programando PHP com mais segurança!TDC2016SP - Programando PHP com mais segurança!
TDC2016SP - Programando PHP com mais segurança!tdc-globalcode
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2PrinceGuru MS
 
Desenvolvendo aplicações web com python e web2py
Desenvolvendo aplicações web com python e web2pyDesenvolvendo aplicações web com python e web2py
Desenvolvendo aplicações web com python e web2pyGilson Filho
 

Semelhante a Criptografia com PHP (20)

Unidade 3 criptogradia
Unidade 3   criptogradiaUnidade 3   criptogradia
Unidade 3 criptogradia
 
126015847 seguranca-de-redes-criptografia-2
126015847 seguranca-de-redes-criptografia-2126015847 seguranca-de-redes-criptografia-2
126015847 seguranca-de-redes-criptografia-2
 
126015847 seguranca-de-redes-criptografia-2 (1)
126015847 seguranca-de-redes-criptografia-2 (1)126015847 seguranca-de-redes-criptografia-2 (1)
126015847 seguranca-de-redes-criptografia-2 (1)
 
Dicas de segurança para o PHP e seus amigos
Dicas de segurança para o PHP e seus amigosDicas de segurança para o PHP e seus amigos
Dicas de segurança para o PHP e seus amigos
 
Webcast Luiz Vieira criptografia on-the-fly com software livre
Webcast Luiz Vieira criptografia on-the-fly com software livreWebcast Luiz Vieira criptografia on-the-fly com software livre
Webcast Luiz Vieira criptografia on-the-fly com software livre
 
Pentest conisli07
Pentest conisli07Pentest conisli07
Pentest conisli07
 
PHP like a super hero
PHP like a super heroPHP like a super hero
PHP like a super hero
 
Certificação Digital - Aula1 Exercícios
Certificação Digital - Aula1 ExercíciosCertificação Digital - Aula1 Exercícios
Certificação Digital - Aula1 Exercícios
 
T aula4-introducao-criptografia
T aula4-introducao-criptografiaT aula4-introducao-criptografia
T aula4-introducao-criptografia
 
Segurança de Redes
Segurança de RedesSegurança de Redes
Segurança de Redes
 
Palestra criando aplicações seguras com php (2)
Palestra  criando aplicações seguras com php (2)Palestra  criando aplicações seguras com php (2)
Palestra criando aplicações seguras com php (2)
 
Proteja sua aplicação com o zend framework 2
Proteja sua aplicação com o zend framework 2Proteja sua aplicação com o zend framework 2
Proteja sua aplicação com o zend framework 2
 
Zephir
ZephirZephir
Zephir
 
Slide curso metasploit
Slide curso metasploitSlide curso metasploit
Slide curso metasploit
 
Segurança em PHP
Segurança em PHPSegurança em PHP
Segurança em PHP
 
Criptografia Aplicada
Criptografia AplicadaCriptografia Aplicada
Criptografia Aplicada
 
TDC2016SP - Programando PHP com mais segurança!
TDC2016SP - Programando PHP com mais segurança!TDC2016SP - Programando PHP com mais segurança!
TDC2016SP - Programando PHP com mais segurança!
 
libsodium no PHP 7
libsodium no PHP 7libsodium no PHP 7
libsodium no PHP 7
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2
 
Desenvolvendo aplicações web com python e web2py
Desenvolvendo aplicações web com python e web2pyDesenvolvendo aplicações web com python e web2py
Desenvolvendo aplicações web com python e web2py
 

Criptografia com PHP