Save 37% off PRO during our Black Friday Sale! »

Melhores práticas de criptografia

Melhores práticas de criptografia

Em nossos sistemas, frequentemente utilizamos criptografia e suas técnicas para guardar informações sensíveis (como senhas), salvar cookies na máquina dos usuários, gerar access tokens para nossas APIs e outras situações... Mas será que realmente sabemos a diferença de criptografia simétrica para assimétrica? Ou como usar corretamente funções de hashing sem se preocupar com ataques side channel? Isso pode ser a diferença entre ter o seu sistema atacado ou não.

375596b28a94ecfaec5d63ff64c7f948?s=128

Vinícius Campitelli

November 25, 2021
Tweet

Transcript

  1. Melhores práticas de criptografia @vcampitelli

  2. Sobre mim Vinícius Campitelli Membro do Desenvolvedor na Entusiasta em

    cibersegurança Desenvolvedor há mais de 10 anos PHPSP OTTera
  3. Sobre mim Slides & GitHub Twitter LinkedIn vcampitelli vcampitelli Vinícius

    Campitelli
  4. Criptografia é...

  5. Criptografia é... a prática e o estudo de técnicas para

    comunicação segura na presença de terceiros
  6. Criptografia é... 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
  7. Criptografia é... 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 Wikipedia
  8. Criptografia é...

  9. Criptografia é... Texto plano

  10. Criptografia é... Texto plano →

  11. Criptografia é... Texto plano → Texto cifrado

  12. Criptografia é... Texto plano → Encriptação 42a14c854faed

  13. Criptografia é... Texto plano ← Decriptação 42a14c854faed

  14. Criptografia Objetivos principais

  15. Criptografia Objetivos principais Confidencialidade Integridade Autenticidade

  16. Criptografia Objetivos principais Confidencialidade Integridade Autenticidade Não-repúdio

  17. Criptografia Objetivos principais Confidencialidade só o destinatário autorizado deve ser

    capaz de extrair o conteúdo da mensagem da sua forma cifrada Integridade Autenticidade Não-repúdio
  18. Criptografia Objetivos principais Confidencialidade só o destinatário autorizado deve ser

    capaz de extrair o conteúdo da mensagem da sua forma cifrada Integridade o destinatário deverá ser capaz de verificar se a mensagem foi alterada durante a transmissão Autenticidade Não-repúdio
  19. Criptografia Objetivos principais Confidencialidade só o destinatário autorizado deve ser

    capaz de extrair o conteúdo da mensagem da sua forma cifrada Integridade o destinatário deverá ser capaz de verificar se a mensagem foi alterada durante a transmissão Autenticidade o destinatário deverá ser capaz de verificar que se o remetente é realmente quem diz ser Não-repúdio
  20. Criptografia Objetivos principais Confidencialidade só o destinatário autorizado deve ser

    capaz de extrair o conteúdo da mensagem da sua forma cifrada Integridade o destinatário deverá ser capaz de verificar se a mensagem foi alterada durante a transmissão Autenticidade o destinatário deverá ser capaz de verificar que se o remetente é realmente quem diz ser Não-repúdio não deverá ser possível ao remetente negar a autoria de sua mensagem
  21. Criptografia Objetivos principais Confidencialidade só o destinatário autorizado deve ser

    capaz de extrair o conteúdo da mensagem da sua forma cifrada Integridade o destinatário deverá ser capaz de verificar se a mensagem foi alterada durante a transmissão Autenticidade o destinatário deverá ser capaz de verificar que se o remetente é realmente quem diz ser Não-repúdio não deverá ser possível ao remetente negar a autoria de sua mensagem Wikipedia
  22. Criptografia Simétrica

  23. Criptografia Simétrica Usa a mesma chave para os dois processos

  24. Criptografia Simétrica Usa a mesma chave para os dois processos

    Portanto, essa chave deve permanecer secreta
  25. Criptografia Simétrica

  26. Criptografia Simétrica Cifras de Bloco Operam com tamanho fixos de

    blocos de informação
  27. Criptografia Simétrica Cifras de Bloco Operam com tamanho fixos de

    blocos de informação Cifras de Fluxo Trabalham com qualquer stream de bits
  28. Criptografia Simétrica › Cifras de Bloco Algoritmos mais comuns

  29. Criptografia Simétrica › Cifras de Bloco Algoritmos mais comuns Blowfish

    deve-se usar os algoritmos relacionados Twofish and Threefish, por serem mais seguros
  30. Criptografia Simétrica › Cifras de Bloco Algoritmos mais comuns Blowfish

    deve-se usar os algoritmos relacionados Twofish and Threefish, por serem mais seguros DES Data Encryption Standard que não deve ser usado mais (e nem o seu successor Triple DES)
  31. Criptografia Simétrica › Cifras de Bloco Algoritmos mais comuns Blowfish

    deve-se usar os algoritmos relacionados Twofish and Threefish, por serem mais seguros DES Data Encryption Standard que não deve ser usado mais (e nem o seu successor Triple DES) AES Advanced Encryption Standard também conhecido pelo seu nome original Rijndael, foi aprovado pelo NSA para encriptar informações confidenciais e é o mais recomendado
  32. Criptografia Simétrica › Cifras de Bloco Modos de Operação Processo

    que será responsável por executar a cifra em cada um dos blocos
  33. Criptografia Simétrica › Cifras de Bloco Modos de Operação O

    Vetor de Inicialização (IV) é um valor aleatório responsável por oferecer o estado inicial ao algoritmo e não pode ser reutilizado ou previsível
  34. Criptografia Simétrica › Cifras de Bloco Modos de Operação Principais

    algoritmos Electronic codebook (ECB) Cipher block chaining (CBC) Cipher feedback (CFB) Counter (CTR) Galois/counter mode (GCM) Counter with cipher block chaining MAC (CCM)
  35. Criptografia Simétrica › Cifras de Bloco Por que não: Electronic

    codebook (ECB)
  36. Criptografia Simétrica › Cifras de Bloco Por que não: Electronic

    codebook (ECB)
  37. Criptografia Simétrica › Cifras de Bloco Por que não: Electronic

    codebook (ECB) pngpix.com
  38. Criptografia Simétrica › Cifras de Bloco Por que não: CBC,

    CFB e CTR Não oferecem integridade e autenticidade
  39. Criptografia Simétrica › Cifras de Bloco Por que não: CBC,

    CFB e CTR Não oferecem integridade e autenticidade Ou seja, não é possível saber se alguém alterou ou forjou a mensagem
  40. Criptografia Simétrica › Cifras de Bloco Por que não: CBC,

    CFB e CTR Não oferecem integridade e autenticidade Ou seja, não é possível saber se alguém alterou ou forjou a mensagem Iremos saber mais ao falar de hashing
  41. Criptografia Simétrica › Cifras de Bloco Modos de Operação Algoritmos

    Galois/counter (GCM) Counter with cipher block chaining MAC (CCM) Electronic codebook (ECB) Cipher block chaining (CBC) Cipher feedback (CFB) Counter (CTR)
  42. Criptografia Simétrica › Cifras de Bloco Modos de Operação Algoritmos

    Galois/counter (GCM) Counter with cipher block chaining MAC (CCM) Electronic codebook (ECB) Cipher block chaining (CBC) Cipher feedback (CFB) Counter (CTR)
  43. Criptografia Simétrica › Cifras de Bloco Modos de Operação Algoritmos

    Galois/counter (GCM) Counter with cipher block chaining MAC (CCM) Electronic codebook (ECB) Cipher block chaining (CBC) Cipher feedback (CFB) Counter (CTR)
  44. Criptografia Simétrica › Cifras de Bloco Exemplo: GCM PHP $iv

    = random_bytes( openssl_cipher_iv_length('aes-256-gcm') ); $ciphertext = openssl_encrypt( $data, // plaintext 'aes-256-gcm', // cipher $key, // key OPENSSL_RAW_DATA, // flags $iv, // iv (nonce) $tag, // tag $aad, // AAD 16 // tag length ); $message = base64_encode($iv . $tag . $ciphertext); 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
  45. Criptografia Simétrica › Cifras de Bloco Exemplo: GCM const {

    readFileSync } = require('fs'); const { createCipheriv, randomBytes } = require('crypto'); const key = readFileSync('app.key').toString().trim(); const nonce = randomBytes(12); const cipher = createCipheriv('aes-256-gcm', key, nonce, { authTagLength: 16 }); const ciphertext = cipher.update(plaintext, 'utf8'); cipher.final(); const tag = cipher.getAuthTag(); const message = Buffer .concat([nonce, tag, ciphertext]) .toString('hex'); 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 scripts/symmetric/node-gcm-encrypt.js
  46. Criptografia Simétrica Cifras de Fluxo Indicadas quando não se sabe

    o tamanho do dado
  47. Criptografia Simétrica Cifras de Fluxo Indicadas quando não se sabe

    o tamanho do dado A5/1 usada no padrão GSM para comunicação móvel
  48. Criptografia Simétrica Cifras de Fluxo Indicadas quando não se sabe

    o tamanho do dado A5/1 usada no padrão GSM para comunicação móvel RC4 usada no protocolo WEP para redes wireless
  49. Criptografia Simétrica Cifras de Fluxo Indicadas quando não se sabe

    o tamanho do dado A5/1 usada no padrão GSM para comunicação móvel RC4 usada no protocolo WEP para redes wireless ChaCha a mais recomendada para uso hoje em dia
  50. Criptografia Simétrica Onde armazenar a chave? Melhor opção é usar

    solução de hardware, mas pode ser caro e não estar disponível na infraestrutura Exemplos: HSM (Hardware Security Module) e TPM (Trusted Platform Module)
  51. Criptografia Simétrica Onde armazenar a chave? Serviços do seu provedor

    de Cloud Exemplos: AWS Key Management Service e Google Cloud Key Management
  52. Criptografia Simétrica Onde armazenar a chave? Para Kubernetes ou Swarm,

    checar as features de Secrets PS: o Kubernetes não criptografa os dados por padrão, então siga o artigo Encrypting Secret Data at Rest
  53. Criptografia Simétrica Onde armazenar a chave? também é uma alternativa

    e acompanha o versionamento do seu código git-secret
  54. Criptografia Simétrica Onde armazenar a chave? Dependendo da criticidade da

    aplicação, você pode dividir a chave e colocar cada parte em uma localização diferente
  55. Criptografia Assimétrica

  56. Criptografia Assimétrica Utiliza duas chaves, sendo cada uma responsável por

    um dos processos
  57. Criptografia Assimétrica Utiliza duas chaves, sendo cada uma responsável por

    um dos processos Chave Pública
  58. Criptografia Assimétrica Utiliza duas chaves, sendo cada uma responsável por

    um dos processos Chave Pública Chave Privada
  59. Criptografia Assimétrica Utiliza duas chaves, sendo cada uma responsável por

    um dos processos Chave Pública Pode ser distribuída para outros Chave Privada
  60. Criptografia Assimétrica Utiliza duas chaves, sendo cada uma responsável por

    um dos processos Chave Pública Pode ser distribuída para outros Chave Privada Deve permanecer com o portador
  61. Criptografia Assimétrica Utiliza duas chaves, sendo cada uma responsável por

    um dos processos Chave Pública Pode ser distribuída para outros Chave Privada Deve permanecer com o portador Também conhecida como Criptografia de chave pública
  62. Criptografia Assimétrica Se você quer que terceiros se comuniquem com

    você... Chave Pública Chave Privada
  63. Criptografia Assimétrica Se você quer que terceiros se comuniquem com

    você... Chave Pública Chave Privada Usada por eles para escrevem para você
  64. Criptografia Assimétrica Se você quer que terceiros se comuniquem com

    você... Chave Pública Chave Privada Usada por eles para escrevem para você Usada por você para ler o texto recebido
  65. Criptografia Assimétrica Se você quer que terceiros se comuniquem com

    você... Chave Pública Chave Privada Usada por eles para escrevem para você ↓ Encriptação Usada por você para ler o texto recebido ↓ Decriptação
  66. Criptografia Assimétrica Se você quiser se comunicar com outros... Chave

    Pública Chave Privada
  67. Criptografia Assimétrica Se você quiser se comunicar com outros... Chave

    Pública Chave Privada Usada por você para escrever textos
  68. Criptografia Assimétrica Se você quiser se comunicar com outros... Chave

    Pública Chave Privada Usada por eles para verificar se o texto realmente veio de você Usada por você para escrever textos
  69. Criptografia Assimétrica Se você quiser se comunicar com outros... Chave

    Pública Chave Privada Usada por eles para verificar se o texto realmente veio de você ↓ Decriptação Usada por você para escrever textos ↓ Encriptação
  70. Criptografia Assimétrica Mas como pode uma chave ser usada para

    ler e outra para escrever?
  71. Criptografia Assimétrica Mas como pode uma chave ser usada para

    ler e outra para escrever? O RSA, algoritmo bastante conhecido, depende de números semi-primos (que são aqueles com exatamente dois números primos como fatores) muito grandes A segurança desse algoritmo consiste na dificuldade computacional em fatorar esses números
  72. Criptografia Assimétrica Mas como pode uma chave ser usada para

    ler e outra para escrever? Outros algoritmos (como ED25519) são baseados em curvas elípticas: pontos gerados por equações cúbicas como y² = x³ + ax + b Nesses casos, o cálculo do logaritmo discreto ainda é muito custoso computacionalmente
  73. Criptografia Assimétrica Mas como pode uma chave ser usada para

    ler e outra para escrever? Em ambos os casos, a segurança se baseia no fato das operações reversas serem muito custosas com o poder computacional existente
  74. Criptografia Assimétrica Mas como pode uma chave ser usada para

    ler e outra para escrever? Em ambos os casos, a segurança se baseia no fato das operações reversas serem muito custosas com o poder computacional existente Já existem estudos de criptografia pós-quântica para resistirem a ataques de computadores quânticos
  75. Criptografia Assimétrica Abordagem híbrida Na prática, por causa de limitações

    do tamanho do texto a ser cifrado em alguns algoritmos (como no RSA, que com chaves de 2048 bits só permite cifrar blocos de até 214 bytes) e por serem mais lentos na maioria dos casos, o que geralmente acontece é:
  76. Criptografia Assimétrica Abordagem híbrida 1. É gerada uma chave secreta

    (aleatória e única para a sessão);
  77. Criptografia Assimétrica Abordagem híbrida 1. É gerada uma chave secreta

    (aleatória e única para a sessão); 2. Usa-se Criptografia Simétrica para criptografar o texto plano;
  78. Criptografia Assimétrica Abordagem híbrida 1. É gerada uma chave secreta

    (aleatória e única para a sessão); 2. Usa-se Criptografia Simétrica para criptografar o texto plano; 3. Usa-se Criptografia Assimétrica para criptografar a chave gerada.
  79. Criptografia Assimétrica Exemplo - RSA const crypto = require('crypto'); const

    publicKey = crypto.createPublicKey( fs.readFileSync('/path/to/public.key').toString() ); const encryptedData = crypto.publicEncrypt( { key: publicKey, padding: crypto.constants.RSA_PKCS1_OAEP_PADDING, oaepHash: 'sha512', }, Buffer.from(message) ); console.log(encryptedData.toString('hex')); 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 scripts/asymmetric/node-rsa-encrypt.js
  80. Criptografia Assimétrica Exemplo - RSA const crypto = require('crypto'); const

    privateKey = crypto.createPrivateKey( fs.readFileSync('/path/to/private.key').toString() ); const decryptedData = crypto.privateDecrypt( { key: privateKey, padding: crypto.constants.RSA_PKCS1_OAEP_PADDING, oaepHash: 'sha512', }, Buffer.from(message, 'hex') ); console.log(decryptedData.toString); 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 scripts/asymmetric/node-rsa-decrypt.js
  81. Hashing

  82. Hashing é uma função que mapeia dados de tamanho arbitrário

    para dados de tamanho fixo
  83. Hashing é uma função que mapeia dados de tamanho arbitrário

    para dados de tamanho fixo Wikipedia
  84. Hashing Os algoritmos mais comuns são: CRC MD5 SHA-1 SHA-256

    SHA-512
  85. Hashing Para fins de segurança, devemos optar por: SHA-256 SHA-512

    CRC MD5 SHA-1
  86. Hashing Para fins de segurança, devemos optar por: SHA-256 SHA-512

    CRC MD5 SHA-1
  87. Hashing Para fins de segurança, devemos optar por: SHA-256 SHA-512

    CRC MD5 SHA-1
  88. Hashing Para fins de segurança, devemos optar por: SHA-256 SHA-512

    CRC MD5 SHA-1
  89. Hashing Para fins de segurança, devemos optar por: SHA-256 SHA-512

    CRC MD5 SHA-1 RIPEMD-160
  90. Hashing Para fins de segurança, devemos optar por: SHA-256 SHA-512

    CRC MD5 SHA-1 RIPEMD-160 Whirlpool
  91. Hashing Para fins de segurança, devemos optar por: SHA-256 SHA-512

    CRC MD5 SHA-1 RIPEMD-160 Whirlpool BLAKE3
  92. Hashing Integridade + Autenticidade Apenas criptografar sem fazer o hash

    não é o suficiente, pois algum agente malicioso pode alterar a mensagem
  93. Hashing Integridade + Autenticidade Demonstração simples de bit flipping 0:00

    / 0:37
  94. O que um sistema que rode o código a seguir

    pode dar de informação a um atacante?
  95. function login(username, password) { const user = this.findByUsername(username); if (!user)

    { return false; } if (!this.verifyPassword(password, user.password)) { return false; } return true; } 1 2 3 4 5 6 7 8 9 10 11 12
  96. Enumeração de usuários

  97. Enumeração de usuários É possível saber que usuários existem em

    sua aplicação através de Timing attacks
  98. Timing Attacks

  99. Timing Attacks ataque no qual um atacante tenta comprometer um

    sistema criptográfico analisando o tempo gasto para executar determinados algoritmos
  100. Timing Attacks ataque no qual um atacante tenta comprometer um

    sistema criptográfico analisando o tempo gasto para executar determinados algoritmos Wikipedia
  101. Timing Attacks Será que não estamos exagerando? É realmente possível

    ver essa diferença?
  102. Timing Attacks 0:00 / 0:58

  103. Timing Attacks Código resistente a timing attacks function login(username, password)

    { const user = this.findByUsername(username); // this.generateFakePassword = () => 'abcdefg123456' let storedPassword = this.generateFakePassword(); if (user !== null) { storedPassword = user.password; } return (this.verifyPassword(password, storedPassword)) && (user !== null); } 1 2 3 4 5 6 7 8 9 10 11 12
  104. Timing Attacks Hashing

  105. Timing Attacks Hashing Exercício: criar um algoritmo para comparar duas

    strings
  106. Timing Attacks Hashing Exercício: criar um algoritmo para comparar duas

    strings 1. A primeira coisa é comparar o tamanho delas
  107. Timing Attacks Hashing Exercício: criar um algoritmo para comparar duas

    strings 1. A primeira coisa é comparar o tamanho delas 2. Se os tamanhos forem diferentes, retorna false
  108. Timing Attacks Hashing Exercício: criar um algoritmo para comparar duas

    strings 1. A primeira coisa é comparar o tamanho delas 2. Se os tamanhos forem diferentes, retorna false 3. Se forem iguais, você irá comparar letra por letra
  109. Timing Attacks Hashing Exercício: criar um algoritmo para comparar duas

    strings 1. A primeira coisa é comparar o tamanho delas 2. Se os tamanhos forem diferentes, retorna false 3. Se forem iguais, você irá comparar letra por letra 4. Assim que houver uma letra diferente, retorna false
  110. Timing Attacks Hashing Exercício: criar um algoritmo para comparar duas

    strings 1. A primeira coisa é comparar o tamanho delas 2. Se os tamanhos forem diferentes, retorna false 3. Se forem iguais, você irá comparar letra por letra 4. Assim que houver uma letra diferente, retorna false 5. Se chegou até o final da comparação, retorna true
  111. Timing Attacks Hashing Exercício: criar um algoritmo para comparar duas

    strings Cada uma das comparações do item 4. irá levar um certo tempo, que chamaremos de 1u (que provavelmente serão alguns milésimos de segundo)
  112. Então, para comparar as strings abcdef e abcdef ... Comparação

    Tempo decorrido
  113. Então, para comparar as strings abcdef e abcdef ... Comparação

    Tempo decorrido Tamanhos são iguais -
  114. Então, para comparar as strings abcdef e abcdef ... Comparação

    Tempo decorrido Tamanhos são iguais - a é igual a a 1u
  115. Então, para comparar as strings abcdef e abcdef ... Comparação

    Tempo decorrido Tamanhos são iguais - a é igual a a 1u b é igual a b 2u
  116. Então, para comparar as strings abcdef e abcdef ... Comparação

    Tempo decorrido Tamanhos são iguais - a é igual a a 1u b é igual a b 2u c é igual a c 3u
  117. Então, para comparar as strings abcdef e abcdef ... Comparação

    Tempo decorrido Tamanhos são iguais - a é igual a a 1u b é igual a b 2u c é igual a c 3u d é igual a d 4u
  118. Então, para comparar as strings abcdef e abcdef ... Comparação

    Tempo decorrido Tamanhos são iguais - a é igual a a 1u b é igual a b 2u c é igual a c 3u d é igual a d 4u e é igual a e 5u
  119. Então, para comparar as strings abcdef e abcdef ... Comparação

    Tempo decorrido Tamanhos são iguais - a é igual a a 1u b é igual a b 2u c é igual a c 3u d é igual a d 4u e é igual a e 5u
  120. Então, para comparar as strings abcdef e abcdef ... Comparação

    Tempo decorrido Tamanhos são iguais - a é igual a a 1u b é igual a b 2u c é igual a c 3u d é igual a d 4u e é igual a e 5u f é igual a f 6u
  121. Agora, para comparar as strings abcdef e abcdxf ... Comparação

    Tempo decorrido
  122. Agora, para comparar as strings abcdef e abcdxf ... Comparação

    Tempo decorrido Tamanhos são iguais -
  123. Agora, para comparar as strings abcdef e abcdxf ... Comparação

    Tempo decorrido Tamanhos são iguais - a é igual a a 1u
  124. Agora, para comparar as strings abcdef e abcdxf ... Comparação

    Tempo decorrido Tamanhos são iguais - a é igual a a 1u b é igual a b 2u
  125. Agora, para comparar as strings abcdef e abcdxf ... Comparação

    Tempo decorrido Tamanhos são iguais - a é igual a a 1u b é igual a b 2u c é igual a c 3u
  126. Agora, para comparar as strings abcdef e abcdxf ... Comparação

    Tempo decorrido Tamanhos são iguais - a é igual a a 1u b é igual a b 2u c é igual a c 3u d é igual a d 4u
  127. Agora, para comparar as strings abcdef e abcdxf ... Comparação

    Tempo decorrido Tamanhos são iguais - a é igual a a 1u b é igual a b 2u c é igual a c 3u d é igual a d 4u e é igual a x 5u
  128. Timing Attacks Hashing Use comparações de tempo constante entre hashes

    // Ao invés de if ($hash1 === $hash2) { if (hash_equals($hash1, $hash2)) { // ... } PHP
  129. Timing Attacks Hashing Use comparações de tempo constante entre hashes

    const { timingSafeEqual } = require('crypto'); const buffer1 = Buffer.from('hash1'); const buffer2 = Buffer.from('hash2'); // Ao invés de if (buffer1.equals(buffer2)) { let check = false; try { check = timingSafeEqual(buffer1, buffer2); } catch (err) { // false } Node.js
  130. Armazenamento de Senhas Você deve usar algoritmos de hashing ao

    invés de encriptação
  131. Armazenamento de Senhas Você deve usar algoritmos de hashing ao

    invés de encriptação Em ordem de recomendação:
  132. Armazenamento de Senhas Você deve usar algoritmos de hashing ao

    invés de encriptação Em ordem de recomendação: 1. Argon2ID
  133. Armazenamento de Senhas Você deve usar algoritmos de hashing ao

    invés de encriptação Em ordem de recomendação: 1. Argon2ID 2. bcrypt
  134. Armazenamento de Senhas Você deve usar algoritmos de hashing ao

    invés de encriptação Em ordem de recomendação: 1. Argon2ID 2. bcrypt 3. PBKDF2
  135. Armazenamento de Senhas Exemplo // Para salvar public function setPassword(string

    $password): string { return \password_hash($password, PASSWORD_ARGON2ID); } // Para verificar public function checkPassword(User $user, string $password): bool { return \password_verify($password, $user->getPassword()); } 1 2 3 4 5 6 7 8 9 PHP
  136. Armazenamento de Senhas Exemplo const argon2 = require('argon2'); try {

    // Para salvar const hash = await argon2.hash( password, { type: argon2.argon2id } ); // Para verificar if (await argon2.verify(hash, password)) { // ... } } catch (err) { // algum erro } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Node.js (pacote argon2)
  137. Armazenamento de Senhas Bibliotecas e leitura Password Storage Cheat Sheet

    Secure Salted Password Hashing defuse/password-hashing
  138. Referências Bibliotecas Multi-platforma e recomendada: Node.js: Node.js: Python: Go: libsodium

    módulo crypto pacote argon2 pacote argon2 pacote argon2
  139. Referências Ferramentas Metasploit w3af Burp Suite Nessus OpenVAS Kali Linux

  140. Referências Leitura Wikipedia: Criptoanálise Wikipedia: Diffie–Hellman key exchange OWASP Cheat

    Sheet Series FIPS 140-3 (Security Requirements for Cryptographic Modules) Paragon Initiative
  141. Referências Modelos e Procedimentos DevSecOps BSIMM SSDLC

  142. Referências Vulnerabilidades snyk CVE - Mitre

  143. Obrigado! Slides & GitHub Twitter LinkedIn vcampitelli vcampitelli Vinícius Campitelli

  144. Workshops de TI Gostou? Então conheça meus treinamentos corporativos sobre

    Desenvolvimento, Segurança da Informação, DevOps, Arquitetura de Sistemas e diversos outros assuntos cd git/ bit.ly/vcampitelli-workshops