$30 off During Our Annual Pro Sale. View Details »

Criando APIs seguras

Vinícius Campitelli
November 25, 2021
7

Criando APIs seguras

Com a disseminação do uso de microserviços, vários aspectos de segurança em nossas APIs precisam ser repensados, pois um simples problema pode ser escalado a níveis preocupantes. Veremos sobre:

- Conceitos de autenticação e autorização;
- Melhores práticas no uso de access tokens;
- Aplicação de throttling e rate limiting;
- Camuflagem de IDs sequencias;
- Criptografando e assinando a requisição para evitar tampering.

Vinícius Campitelli

November 25, 2021
Tweet

Transcript

  1. CRIANDO APIS SEGURAS 1

  2. QUEM SOU EU? VINÍCIUS CAMPITELLI Desenvolvedor na Membro do GitHub

    e Twitter: Slides: OTTera PHPSP @vcampitelli viniciuscampitelli.com 2
  3. AGENDA 3

  4. AGENDA Autenticação e autorização 3

  5. AGENDA Autenticação e autorização Melhores práticas com access tokens 3

  6. AGENDA Autenticação e autorização Melhores práticas com access tokens Throttling

    e Rate Limiting 3
  7. AGENDA Autenticação e autorização Melhores práticas com access tokens Throttling

    e Rate Limiting Camuflagem de IDs sequenciais 3
  8. AGENDA Autenticação e autorização Melhores práticas com access tokens Throttling

    e Rate Limiting Camuflagem de IDs sequenciais Criptografando e assinando requisições e respostas 3
  9. AUTENTICAÇÃO E AUTORIZAÇÃO 4 . 1

  10. AUTENTICAÇÃO É o ato de estabelecer ou confirmar algo (ou

    alguém) como autêntico (...) Fonte: Wikipedia 4 . 2
  11. AUTENTICAÇÃO É o ato de estabelecer ou confirmar algo (ou

    alguém) como autêntico (...) Fonte: Wikipedia 4 . 2
  12. AUTENTICAÇÃO Para autenticar algo ou alguém, precisamos de uma credencial

    que o identifique. Ela precisa ser emitida por algo (ou alguém) que o autorizador confie. 4 . 3
  13. “O QUE VOCÊ SABE” Autenticação baseada no conhecimento 4 .

    4
  14. “O QUE VOCÊ SABE” Autenticação baseada no conhecimento Exemplos: Usuário

    e senha Certificado digital Client ID e Client Secret 4 . 4
  15. “O QUE VOCÊ TEM” Autenticação baseada na propriedade

  16. 4 . 5

  17. “O QUE VOCÊ TEM” Autenticação baseada na propriedade Exemplos:

  18. 4 . 5

  19. “O QUE VOCÊ TEM” Autenticação baseada na propriedade Exemplos: Token

    ou cartão físico
  20. 4 . 5

  21. “O QUE VOCÊ TEM” Autenticação baseada na propriedade Exemplos: Token

    ou cartão físico Código via aplicativo
  22. 4 . 5

  23. “O QUE VOCÊ É” Autenticação baseada na característica 4 .

    6
  24. “O QUE VOCÊ É” Autenticação baseada na característica Exemplos: Impressão

    digital Identificação de íris Reconhecimento facial Reconhecimento de voz 4 . 6
  25. AUTORIZAÇÃO É garantir que apenas usuários autorizados consumam os recursos

    protegidos de um sistema computacional Fonte: Wikipedia 4 . 7
  26. AUTORIZAÇÃO É garantir que apenas usuários autorizados consumam os recursos

    protegidos de um sistema computacional Fonte: Wikipedia 4 . 7
  27. AUTORIZAÇÃO Após saber quem é o cliente no processo de

    Autenticação, preciso agora entender o que ele pode fazer. Quais recursos ele pode consumir? Por quanto tempo? 4 . 8
  28. COMO EFETUAR AUTENTICAÇÃO E AUTORIZAÇÃO? 4 . 9

  29. COMO EFETUAR AUTENTICAÇÃO E AUTORIZAÇÃO? Para autenticação, podemos utilizar o

    ou implementar nosso próprio sistema (por exemplo, através do banco de dados). OpenID 4 . 9
  30. COMO EFETUAR AUTENTICAÇÃO E AUTORIZAÇÃO? Para autenticação, podemos utilizar o

    ou implementar nosso próprio sistema (por exemplo, através do banco de dados). OpenID é o protocolo mais conhecido de autorização. Ele, por si só, não contempla processos de autenticação. OAuth 2.0 4 . 9
  31. FAMOSA TELA DE AUTORIZAÇÃO VIA OAUTH 2 Utilizando o Grant

    de Authorization Code (saiba como escolher o Grant Type certo ) nesse link Referência: Shotgun Debugging 4 . 10
  32. REFERÊNCIAS Para PHP Para Node.JS OpenID Auth0 OAuth 2.0 The

    PHP League: OAuth 2.0 Server Meu slides sobre OAuth2 oauthjs/node-oauth2-server t1msh/node-oauth20-provider Mais bibliotecas no oauth.net 4 . 11
  33. MELHORES PRÁTICAS COM ACCESS TOKENS 5 . 1

  34. O QUE É UM ACCESS TOKEN? 5 . 2

  35. O QUE É UM ACCESS TOKEN? É um objeto que

    descreve o contexto de segurança de um processo (...) Fonte: MSDN 5 . 2
  36. E NO MUNDO DE APIS? O processo de autenticação e

    autorização pode ser caro computacionalmente (consultas a banco de dados, servidores de autenticação externos, criptografia de senha etc) 5 . 3
  37. E NO MUNDO DE APIS? Ao invés de sempre termos

    essa carga a cada requisição a nossos servidores, podemos ter um único endpoint de autenticação / autorização que irá realizar essa etapa uma vez e gerar um access token com as informações necessárias para autenticar e autorizar mais rapidamente o cliente nas requisições seguintes 5 . 4
  38. E NO MUNDO DE APIS? Esse token deve possuir um

    tempo de vida limitado, tanto para diminuir efeitos colaterais caso haja um vazamento quanto porque sua informação pode ficar desatualizada 5 . 5
  39. E NO MUNDO DE APIS? Esse segundo processo pode ser

    automatizado através de refresh tokens 5 . 6
  40. E NO MUNDO DE APIS? Esse segundo processo pode ser

    automatizado através de refresh tokens Eles são utilizados para regerar um access token automaticamente, sem necessitar da intervenção manual do usuário 5 . 6
  41. 5 . 7

  42. COMO DEIXAR OS TOKENS SEGUROS? 5 . 8

  43. COMO DEIXAR OS TOKENS SEGUROS? Utilizando algoritmos de criptografia seguros

    e com assinatura; 5 . 8
  44. COMO DEIXAR OS TOKENS SEGUROS? Utilizando algoritmos de criptografia seguros

    e com assinatura; AES-256-GCM, ChaCha20+Poly1305, Ed25519 entre outros 5 . 8
  45. COMO DEIXAR OS TOKENS SEGUROS? Utilizando algoritmos de criptografia seguros

    e com assinatura; AES-256-GCM, ChaCha20+Poly1305, Ed25519 entre outros Tendo cuidado com implementações de bibliotecas com falhas de segurança; 5 . 8
  46. COMO DEIXAR OS TOKENS SEGUROS? Utilizando algoritmos de criptografia seguros

    e com assinatura; AES-256-GCM, ChaCha20+Poly1305, Ed25519 entre outros Tendo cuidado com implementações de bibliotecas com falhas de segurança; Exemplo: JWT com alg=none 5 . 8
  47. COMO DEIXAR OS TOKENS SEGUROS? Não faça commit de chaves

    e outros segredos, nem deixe-os hardcoded na aplicação 5 . 9
  48. COMO DEIXAR OS TOKENS SEGUROS? Não faça commit de chaves

    e outros segredos, nem deixe-os hardcoded na aplicação Não guarde informações muito sensíveis (como senhas e outras credenciais) 5 . 9
  49. COMO DEIXAR OS TOKENS SEGUROS? Não faça commit de chaves

    e outros segredos, nem deixe-os hardcoded na aplicação Não guarde informações muito sensíveis (como senhas e outras credenciais) Se precisar armazenar do lado do cliente, utilize cookies seguros (flags httpOnly e secure) ao invés do LocalStorage 5 . 9
  50. COMO DEIXAR OS TOKENS SEGUROS? Apenas trafegue tokens no cabeçalho

    ou corpo da requisição, nunca na URL 5 . 10
  51. COMO DEIXAR OS TOKENS SEGUROS? Apenas trafegue tokens no cabeçalho

    ou corpo da requisição, nunca na URL Não exiba informações do token em seus logs 5 . 10
  52. EXEMPLO DE IMPLEMENTAÇÃO use Lcobucci\JWT\Builder; $time = time(); $token =

    (new Builder()) ->issuedBy('http://example.com') // Configures the issuer (iss claim) ->permittedFor('http://example.org') // Configures the audience (aud claim) ->identifiedBy('4f1g23a12aa', true) // Configures the id (jti claim), replicating as a ->issuedAt($time) // Configures the time that the token was issue (iat claim) ->canOnlyBeUsedAfter($time + 60) // Configures the time that the token can be used (nb ->expiresAt($time + 3600) // Configures the expiration time of the token (exp claim) ->withClaim('uid', 1) // Configures a new claim, called "uid" ->getToken(); // Retrieves the generated token lcobucci/jwt 5 . 11
  53. BIBLIOTECAS JWT Implementação mais conhecida de tokens PHP: Node.JS: Python:

    Site oficial: lcobucci/jwt auth0/node-jsonwebtoken jpadilla/pyjwt 5 . 12
  54. BIBLIOTECAS PASETO Implementação com design "mais seguro" por padrão PHP:

    Node.JS: Python: Site oficial: paragonie/paseto panva/paseto rlittlefield/pypaset paseto.io 5 . 13
  55. REFERÊNCIAS , biblioteca moderna de criptografia , componente do framework

    PHP Symfony Artigo: Meu slides sobre a libsodium Symfony Guard No Way, JOSE! Javascript Object Signing and Encryption is a Bad Standard That Everyone Should Avoid 5 . 14
  56. THROTTLING E RATE LIMITING 6 . 1

  57. O QUE É THROTTLING? 6 . 2

  58. O QUE É THROTTLING? É a desaceleração intencional do processamento

    de uma requisição para prevenir sobrecarga do servidor 6 . 2
  59. O QUE É THROTTLING? Imagine um endpoint que consuma grande

    recursos computacionais (como, por exemplo, o processo de autenticação e autorização descritos anteriormente) 6 . 3
  60. O QUE É THROTTLING? Se um agente malicioso identificar esse

    recurso, ele pode se tornar muito visado para ataques, causando sobrecarga no nosso servidor e podendo gerar paralisação e até queda total do serviço 6 . 4
  61. O QUE É THROTTLING? Nesses casos, podemos configurar que o

    servidor irá aceitar somente x requisições em algum(ns) endpoint(s) por um certo período de tempo 6 . 5
  62. O QUE É THROTTLING? Após esse valor x, as requisições

    entrarão em uma fila para serem processadas alguns instantes depois, assim que as primeiras tiverem sido liberadas 6 . 6
  63. 6 . 7

  64. MAS ENTÃO O QUE É RATE LIMITING? 6 . 8

  65. MAS ENTÃO O QUE É RATE LIMITING? Ao contrário do

    Throttling, em a requisição será processada com um atraso, Rate Limiting é fazer o servidor se recusar a responder após um certo número de requisições 6 . 8
  66. MAS ENTÃO O QUE É RATE LIMITING? Nesses casos, devemos

    emitir um status HTTP 503 Service Unavailable ou 429 Too Many Requests 6 . 9
  67. COMO ESSAS DUAS PRÁTICAS SE RELACIONAM ENTRE SI? Geralmente, primeiro

    aplicamos uma política de Throttling para desacelerar o processamento nas x primeiras requisições, e após um outro número y, iremos simplesmente parar de responder 6 . 10
  68. ONDE E COMO CONFIGURAR ESSAS POLÍTICAS? Você deve configurá-las em

    seu servidor Web (por exemplo, Apache, IIS ou nginx) ou no seu serviço de DNS (por exemplo, o Cloudflare) 6 . 11
  69. ONDE E COMO CONFIGURAR ESSAS POLÍTICAS? Tomando como exemplo o

    nginx, utilizaremos o módulo ngx_http_limit_req_module (que implementa o mais conhecido algoritmo desse tipo de prática, o ) Leaky Bucket 6 . 12
  70. ONDE E COMO CONFIGURAR ESSAS POLÍTICAS? limit_req_zone $binary_remote_addr zone=login_zone:10m rate=10r/s;

    server { location /login { limit_req zone=login_zone burst=5; # outras configurações padrões do meu bloco location... } } 6 . 13
  71. ONDE E COMO CONFIGURAR ESSAS POLÍTICAS? O código anterior irá

    proteger nosso endpoint /login, permitindo apenas 10 requisições por segundo por IP (ou seja, 1 a cada 100ms) 6 . 14
  72. ONDE E COMO CONFIGURAR ESSAS POLÍTICAS? Mas também permitimos um

    burst, permitindo que 5 requisições extras sejam colocadas na fila de processamento antes de serem enviadas para o upstream 6 . 15
  73. ONDE E COMO CONFIGURAR ESSAS POLÍTICAS? Nesse caso, se recebermos

    de um mesmo IP 10 requisições em um período de 100ms, o que ocorrerá? 6 . 16
  74. ONDE E COMO CONFIGURAR ESSAS POLÍTICAS? Nesse caso, se recebermos

    de um mesmo IP 10 requisições em um período de 100ms, o que ocorrerá? A 1ª requisição será processada instantaneamente 6 . 16
  75. ONDE E COMO CONFIGURAR ESSAS POLÍTICAS? Nesse caso, se recebermos

    de um mesmo IP 10 requisições em um período de 100ms, o que ocorrerá? A 1ª requisição será processada instantaneamente As 2ª, 3ª, 4ª, 5ª e 6ª requisições serão colocadas em uma fila e serão processadas sequencialmente após o término da anterior 6 . 16
  76. ONDE E COMO CONFIGURAR ESSAS POLÍTICAS? Nesse caso, se recebermos

    de um mesmo IP 10 requisições em um período de 100ms, o que ocorrerá? A 1ª requisição será processada instantaneamente As 2ª, 3ª, 4ª, 5ª e 6ª requisições serão colocadas em uma fila e serão processadas sequencialmente após o término da anterior As 7ª, 8ª, 9ª e 10ª requisições serão negadas 6 . 16
  77. REFERÊNCIAS Como implementar no CloudFlare Como implementar no nginx 6

    . 17
  78. CAMUFLAGEM DE IDS SEQUENCIAIS 7 . 1

  79. O QUE É UM ID SEQUENCIAL E POR QUE ESCONDÊ-LO?

    Ao criarmos endpoints no formato /user/1, /user/2, /user/3 etc, estamos fornecendo uma informação muito valiosa sobre a quantidade de registros que possuímos daquela entidade 7 . 2
  80. O QUE É UM ID SEQUENCIAL E POR QUE ESCONDÊ-LO?

    Isso pode ser utilizado tanto por alguém mal intencionado quanto por algum competidor. 7 . 3
  81. O QUE É UM ID SEQUENCIAL E POR QUE ESCONDÊ-LO?

    Isso pode ser utilizado tanto por alguém mal intencionado quanto por algum competidor. Cuidado com espionagem industrial! 7 . 3
  82. COMO RESOLVER? 7 . 4

  83. COMO RESOLVER? VERSÃO STANDARD 7 . 4

  84. COMO RESOLVER? VERSÃO STANDARD Crie um segundo campo na tabela

    com um valor único para aquele registro 7 . 4
  85. COMO RESOLVER? VERSÃO STANDARD Crie um segundo campo na tabela

    com um valor único para aquele registro Esse valor pode ser um , um hash do ID incremental ou um valor aleatório... GUID 7 . 4
  86. COMO RESOLVER? VERSÃO STANDARD Crie um segundo campo na tabela

    com um valor único para aquele registro Esse valor pode ser um , um hash do ID incremental ou um valor aleatório... GUID Então, transforme o recurso /user/<IdIncremental> em /user/<Identificador> 7 . 4
  87. VERSÃO STANDARD COMO RESOLVER? PHP Funções para gerar valores aleatórios:

    para PHP 7 Para PHP 5, use o polyfill Funções para gerar hash: random_bytes() paragonie/random_compat hash_hmac() Artigo no blog da Paragon 7 . 5
  88. VERSÃO STANDARD COMO NÃO RESOLVER? PHP Funções que não devem

    ser utilizadas: Para gerar valores aleatórios: rand() mt_rand() uniqid() Para gerar hash: sha1() md5() 7 . 6
  89. VERSÃO STANDARD COMO RESOLVER? NODE.JS Módulo Crypto const { createHash

    } = require('crypto'); const hash = createHash('sha256'); user.lookupHash = hash.update(user.id).digest('hex'); 7 . 7
  90. VERSÃO STANDARD COMO RESOLVER? PYTHON Módulo (built-in na versão 3)

    crypt from hashlib import sha256 sha256(user.id).hexdigest() 7 . 8
  91. COMO RESOLVER? 7 . 9

  92. COMO RESOLVER? VERSÃO HARDCORE 7 . 9

  93. COMO RESOLVER? VERSÃO HARDCORE Utilizando a biblioteca , que deriva

    uma chave para cada coluna a partir de uma chave-mestra REFERÊNCIA paragonie/ciphersweet Artigo no blog da Paragon 7 . 9
  94. CRIPTOGRAFANDO E ASSINANDO REQUISIÇÕES E RESPOSTAS 8 . 1

  95. PRECAUÇÃO EXTRA Para usuários avançados e sistemas críticos, podemos adicionar

    uma camada extra de proteção: criptografar os dados da requisição e da resposta 8 . 2
  96. PRECAUÇÃO EXTRA Mas, espera aí! Eu já uso HTTPS. Meu

    dados já estão sendo criptografados usando TLS. 8 . 3
  97. PRECAUÇÃO EXTRA Após o estabelecimento do protocolo, realmente os dados

    transitados estão criptografados, mas ainda podemos sofrer um ataque de Man in the Middle 8 . 4
  98. 8 . 5

  99. MAN IN THE MIDDLE Existem diversos hops entre o cliente

    e o servidor. Quem garante que todos os gateways do caminho são seguros? 8 . 6
  100. MAN IN THE MIDDLE Existem diversos hops entre o cliente

    e o servidor. Quem garante que todos os gateways do caminho são seguros? Se você não for o administrador da sua rede local, alguém pode instalar uma Autoridade Certificadora em sua máquina e emitir certificados próprios 8 . 6
  101. MAN IN THE MIDDLE Nem todos os sites utilizam HSTS

    8 . 7
  102. MAN IN THE MIDDLE Nem todos os sites utilizam HSTS

    Ou seja, pode haver uma conexão HTTP antes do redirecionamento para HTTPS pelo servidor 8 . 7
  103. MAN IN THE MIDDLE Nem todos os sites utilizam HSTS

    Ou seja, pode haver uma conexão HTTP antes do redirecionamento para HTTPS pelo servidor Teoria da conspiração: grandes empresas possuem backdoors para bisbilhotar seu tráfego 8 . 7
  104. 8 . 8

  105. PRECAUÇÃO EXTRA Antes de seguir nessa etapa, faça um e

    certifique-se que realmente valhe a pena Threat Modeling 8 . 9
  106. PRECAUÇÃO EXTRA Antes de seguir nessa etapa, faça um e

    certifique-se que realmente valhe a pena Threat Modeling Compensa instalar um sistema de segurança de última geração em um depósito que não possui algo de extremo valor dentro? 8 . 9
  107. PRECAUÇÃO EXTRA SIM! Meu sistema é crítico e preciso disso.

    8 . 10
  108. PRECAUÇÃO EXTRA SIM! Meu sistema é crítico e preciso disso.

    Ou eu não confio em grandes corporações. 8 . 10
  109. PRECAUÇÃO EXTRA Você pode exigir que toda requisição tenha seu

    corpo criptografado pelo cliente, utilizando um segredo em que só vocês dois sabem 8 . 11
  110. PRECAUÇÃO EXTRA Por exemplo, você pode utilizar uma terceira informação

    fora o Client ID e o Client Secret e usá-la como chave assimétrica, ou fornecer um certificado digital para seu cliente 8 . 12
  111. PRECAUÇÃO EXTRA Do lado do servidor, você utiliza essa informação

    sigilosa para descriptografar o corpo da requisição - se falhar, você emite um erro e para o processamento 8 . 13
  112. PRECAUÇÃO EXTRA Entretanto, esse processo de descriptografia pode ser muito

    custoso operacionalmente, podendo ser um outro ponto de ataque DoS (lembre-se do que falamos na seção de Throttling e Rate Limiting). Você pode, então, utilizar um processo de assinatura digital além da criptografia. 8 . 14
  113. FLUXO DE CRIPTOGRAFIA E ASSINATURA O cliente... Autentica na sua

    API fornecendo as credenciais 8 . 15
  114. FLUXO DE CRIPTOGRAFIA E ASSINATURA O cliente... Autentica na sua

    API fornecendo as credenciais Para cada requisição, assina e criptografa os dados (combinação do corpo da requisição + URL); 8 . 15
  115. FLUXO DE CRIPTOGRAFIA E ASSINATURA O cliente... Autentica na sua

    API fornecendo as credenciais Para cada requisição, assina e criptografa os dados (combinação do corpo da requisição + URL); Utiliza um algoritmo de hash para assinar os dados 8 . 15
  116. FLUXO DE CRIPTOGRAFIA E ASSINATURA O cliente... Autentica na sua

    API fornecendo as credenciais Para cada requisição, assina e criptografa os dados (combinação do corpo da requisição + URL); Utiliza um algoritmo de hash para assinar os dados Criptografa os dados mais a assinatura 8 . 15
  117. FLUXO DE CRIPTOGRAFIA E ASSINATURA O cliente... Autentica na sua

    API fornecendo as credenciais Para cada requisição, assina e criptografa os dados (combinação do corpo da requisição + URL); Utiliza um algoritmo de hash para assinar os dados Criptografa os dados mais a assinatura Envia a requisição somente com os dados criptografados 8 . 15
  118. FLUXO DE CRIPTOGRAFIA E ASSINATURA O cliente... Autentica na sua

    API fornecendo as credenciais Para cada requisição, assina e criptografa os dados (combinação do corpo da requisição + URL); Utiliza um algoritmo de hash para assinar os dados Criptografa os dados mais a assinatura Envia a requisição somente com os dados criptografados Para cada resposta seguinte, ele deve: 8 . 15
  119. FLUXO DE CRIPTOGRAFIA E ASSINATURA O cliente... Autentica na sua

    API fornecendo as credenciais Para cada requisição, assina e criptografa os dados (combinação do corpo da requisição + URL); Utiliza um algoritmo de hash para assinar os dados Criptografa os dados mais a assinatura Envia a requisição somente com os dados criptografados Para cada resposta seguinte, ele deve: Verificar a assinatura 8 . 15
  120. FLUXO DE CRIPTOGRAFIA E ASSINATURA O cliente... Autentica na sua

    API fornecendo as credenciais Para cada requisição, assina e criptografa os dados (combinação do corpo da requisição + URL); Utiliza um algoritmo de hash para assinar os dados Criptografa os dados mais a assinatura Envia a requisição somente com os dados criptografados Para cada resposta seguinte, ele deve: Verificar a assinatura Descriptografar o corpo 8 . 15
  121. FLUXO DE CRIPTOGRAFIA E ASSINATURA A cada requisição recebida, o

    servidor deve... 8 . 16
  122. FLUXO DE CRIPTOGRAFIA E ASSINATURA A cada requisição recebida, o

    servidor deve... Verificar a assinatura 8 . 16
  123. FLUXO DE CRIPTOGRAFIA E ASSINATURA A cada requisição recebida, o

    servidor deve... Verificar a assinatura Descriptografar o corpo 8 . 16
  124. FLUXO DE CRIPTOGRAFIA E ASSINATURA A cada requisição recebida, o

    servidor deve... Verificar a assinatura Descriptografar o corpo Ao responder à requisição, deve assinar e criptografar os dados (combinação do corpo da requisição + URL); 8 . 16
  125. FLUXO DE CRIPTOGRAFIA E ASSINATURA A cada requisição recebida, o

    servidor deve... Verificar a assinatura Descriptografar o corpo Ao responder à requisição, deve assinar e criptografar os dados (combinação do corpo da requisição + URL); Utiliza um algoritmo de hash para assinar os dados 8 . 16
  126. FLUXO DE CRIPTOGRAFIA E ASSINATURA A cada requisição recebida, o

    servidor deve... Verificar a assinatura Descriptografar o corpo Ao responder à requisição, deve assinar e criptografar os dados (combinação do corpo da requisição + URL); Utiliza um algoritmo de hash para assinar os dados Criptografa os dados mais a assinatura 8 . 16
  127. FLUXO DE CRIPTOGRAFIA E ASSINATURA A cada requisição recebida, o

    servidor deve... Verificar a assinatura Descriptografar o corpo Ao responder à requisição, deve assinar e criptografar os dados (combinação do corpo da requisição + URL); Utiliza um algoritmo de hash para assinar os dados Criptografa os dados mais a assinatura Envia a requisição somente com os dados criptografados 8 . 16
  128. REFERÊNCIAS e Artigos usando a libsodium: openssl_encrypt() openssl_decrypt() Basic Secret-key

    Cryptography Basic Public-key Cryptography 8 . 17
  129. CONCLUINDO... 9

  130. CONCLUINDO... Segurança não é trivial 9

  131. CONCLUINDO... Segurança não é trivial não é fácil 9

  132. CONCLUINDO... Segurança não é trivial não é fácil não é

    para leigos 9
  133. CONCLUINDO... Segurança não é trivial não é fácil não é

    para leigos Nenhum sistema operante é invencível 9
  134. CONCLUINDO... Segurança não é trivial não é fácil não é

    para leigos Nenhum sistema operante é invencível, mas você deve dificultar o trabalho de atacantes 9
  135. CONCLUINDO... Segurança não é trivial não é fácil não é

    para leigos Nenhum sistema operante é invencível, mas você deve dificultar o trabalho de atacantes Saiba equilibrar e avaliar a relação de custo-benefício entre segurança e usabilidade 9
  136. OBRIGADO! SLIDES CONTATO GitHub e Twitter viniciuscampitelli.com @vcampitelli 10