{"id":21802,"date":"2023-10-02T15:39:05","date_gmt":"2023-10-02T18:39:05","guid":{"rendered":"https:\/\/www.kaspersky.com.br\/blog\/?p=21802"},"modified":"2023-10-02T15:39:05","modified_gmt":"2023-10-02T18:39:05","slug":"how-to-store-passwords","status":"publish","type":"post","link":"https:\/\/www.kaspersky.com.br\/blog\/how-to-store-passwords\/21802\/","title":{"rendered":"Armazenamento de senhas: um dos pilares de seguran\u00e7a"},"content":{"rendered":"<p>Neste momento, \u00e0 medida que se aproxima o final do primeiro quarto do s\u00e9culo XXI, a maioria das pessoas certamente conscientes de que as senhas de usu\u00e1rios valem como ouro digital e que proteg\u00ea-las \u00e9 um aspecto fundamental para garantir a seguran\u00e7a e a privacidade dos dados. Apesar disso, nem todas as empresas gerenciam o armazenamento de senhas de maneira adequada.<\/p>\n<p>Neste post, destacamos como N\u00c3O armazenar as senhas de usu\u00e1rios e quais m\u00e9todos s\u00e3o usados \u200b\u200bpor servi\u00e7os que levam a seguran\u00e7a a s\u00e9rio.<\/p>\n<h2>O jeito errado: armazenar senhas em texto simples<\/h2>\n<p>O m\u00e9todo mais simples \u00e9 armazenar senhas em um banco de dados n\u00e3o criptografado. Quando um usu\u00e1rio tenta fazer login, a autentica\u00e7\u00e3o \u00e9 apenas uma quest\u00e3o de comparar o que ele insere com o que est\u00e1 no banco de dados.<\/p>\n<p>Mas sempre existe o risco de invasores roubarem esse banco de dados de uma forma ou de outra \u2014 por exemplo, explorando vulnerabilidades no software da base de dados. Ou uma tabela de senhas pode ser roubada por um funcion\u00e1rio mal-intencionado com altos privil\u00e9gios de acesso. Credenciais de colaboradores vazadas ou interceptadas tamb\u00e9m podem ser usadas para roubar senhas. Simplificando, existem muitos cen\u00e1rios em que as coisas podem dar errado. Lembre-se: os dados armazenados em formato aberto s\u00e3o exatamente isso \u2013 abertos.<\/p>\n<h2>Um jeito \u201cum pouquinho\u201d melhor: senhas criptografadas<\/h2>\n<p>E se voc\u00ea armazenar senhas de forma criptografada? N\u00e3o \u00e9 uma m\u00e1 ideia \u00e0 primeira vista, mas n\u00e3o funciona t\u00e3o bem na pr\u00e1tica. Afinal, se voc\u00ea armazenar senhas criptografadas no banco de dados, elas dever\u00e3o ser descriptografadas todos os momentos para compar\u00e1-las com a inserida pelo usu\u00e1rio na tentativa de login.<\/p>\n<p>Isso significa que a chave de criptografia estar\u00e1 em algum lugar por perto. Se for esse o caso, essa chave pode facilmente cair nas m\u00e3os dos hackers junto com o banco de dados de senhas. Ent\u00e3o, isso vai contra todo o prop\u00f3sito de seguran\u00e7a, j\u00e1 que os cibercriminosos ser\u00e3o capazes de descriptografar rapidamente esse banco de dados e obter credencias de acesso em texto simples. E da\u00ed voltamos para a estaca zero.<\/p>\n<p>Se toda brincadeira tem um fundo de verdade, os cript\u00f3grafos advertem que a codifica\u00e7\u00e3o n\u00e3o resolve o problema da privacidade dos dados \u2013 apenas a transforma em um desafio de armazenamento seguro de chaves. Voc\u00ea pode criar algum esquema que seja capaz de reduzir os riscos, mas em geral n\u00e3o ser\u00e1 poss\u00edvel proteger senhas de um jeito confi\u00e1vel, pelo menos n\u00e3o dessa maneira.<\/p>\n<h2>O jeito certo: armazenamento de senhas com hashes<\/h2>\n<p>O melhor m\u00e9todo, portanto, \u00e9 n\u00e3o armazenar senha nenhuma. Afinal, se voc\u00ea n\u00e3o tem algo, n\u00e3o pode ser roubado, certo?<\/p>\n<p>Mas como verificar se um usu\u00e1rio conectado digitou a senha correta? \u00c9 a\u00ed que entram em a\u00e7\u00e3o as <a href=\"https:\/\/pt.wikipedia.org\/wiki\/Fun%C3%A7%C3%A3o_hash\" target=\"_blank\" rel=\"noopener nofollow\">fun\u00e7\u00f5es hash<\/a>: algoritmos criptogr\u00e1ficos especiais que embaralham quaisquer dados em uma sequ\u00eancia de bits de comprimento fixo de maneira previs\u00edvel, mas irrevers\u00edvel.<\/p>\n<p><em>Previs\u00edvel <\/em>aqui significa que os mesmos dados s\u00e3o sempre convertidos na mesma hash. E <em>irrevers\u00edvel<\/em>\u00a0significa que \u00e9 completamente imposs\u00edvel recuperar os dados com hash. Isso \u00e9 o que qualquer servi\u00e7o online que se preocupa um pouco com os dados do usu\u00e1rio faz e que valoriza sua reputa\u00e7\u00e3o.<\/p>\n<p>Quando um usu\u00e1rio cria uma senha durante o registro, o que ser\u00e1 armazenado no banco de dados junto ao nome de usu\u00e1rio n\u00e3o ser\u00e1 a senha em si, mas a hash. Ent\u00e3o, durante o processo de login, essa hash \u00e9 comparada \u00e0 hash da senha inserida pelo usu\u00e1rio. Se corresponderem, significa que as senhas s\u00e3o iguais.<\/p>\n<p>Em caso de vazamento de banco de dados, n\u00e3o s\u00e3o as senhas que os invasores conseguem, mas as hashes, em que os dados originais n\u00e3o podem ser recuperados (irreversibilidade, lembra?). \u00c9 claro que esta \u00e9 uma grande melhoria em termos de seguran\u00e7a, mas ainda \u00e9 muito cedo para nos alegrarmos: se os cibercriminosos colocarem as m\u00e3os em hashes, poder\u00e3o tentar um ataque de for\u00e7a bruta.<\/p>\n<h2>O jeito ainda melhor: hashes aleat\u00f3rias<\/h2>\n<p>Ap\u00f3s obter seu banco de dados, os hackers podem tentar extrair as senhas por meio de for\u00e7a bruta. Isso significa pegar uma combina\u00e7\u00e3o de caracteres, calcular hash e procurar correspond\u00eancias em todas as entradas do banco de dados. Se nenhuma correspond\u00eancia for encontrada, eles tentar\u00e3o outra combina\u00e7\u00e3o e assim por diante. Se houver uma correspond\u00eancia, a senha usada para calcular o hash no banco de dados agora ser\u00e1 conhecida.<\/p>\n<p>Pior ainda, o processo de quebra de senhas com hash pode ser otimizado por meio das chamadas <a href=\"https:\/\/pt.wikipedia.org\/wiki\/Tabela_arco-%C3%ADris\" target=\"_blank\" rel=\"noopener nofollow\">tabelas arco-\u00edris<\/a>. Elas s\u00e3o enormes matrizes de dados com fun\u00e7\u00f5es hash pr\u00e9-calculadas para as senhas encontradas com maior frequ\u00eancia. Dessa forma, facilitando a busca por correspond\u00eancias no banco de dados roubado. E tudo \u00e9 feito automaticamente, \u00e9 claro, ent\u00e3o o processo de quebra da criptografia \u00e9 acelerado consideravelmente.<\/p>\n<p>No entanto, h\u00e1 boas not\u00edcias: \u00e9 imposs\u00edvel calcular antecipadamente as hashes de todas as combina\u00e7\u00f5es de caracteres poss\u00edveis \u2013 uma tabela arco-\u00edris completa para qualquer algoritmo de hash ocupar\u00e1 mais espa\u00e7o em disco do que existe no planeta. Mesmo para o algoritmo MD5, que n\u00e3o \u00e9 muito confi\u00e1vel, tal tabela hipot\u00e9tica conteria (respirando fundo) 340 282 366 920 938 463 463 374 607 431 768 211 456 registros. \u00c9 por isso que apenas as combina\u00e7\u00f5es mais comuns s\u00e3o inclu\u00eddas nas tabelas arco-\u00edris.<\/p>\n<p>Para combater o uso de tabelas arco-\u00edris, os especialistas em criptografia criaram uma solu\u00e7\u00e3o que utiliza outra propriedade importante das fun\u00e7\u00f5es hash: mesmo a menor altera\u00e7\u00e3o no texto fonte altera o resultado do hash de forma irreconhec\u00edvel.<\/p>\n<p>Antes de uma senha com hash ser calculada e gravada no banco de dados, um conjunto aleat\u00f3rio de caracteres (chamado salt ou sal) \u00e9 adicionado a ele. Dessa forma, hashes do banco de dados s\u00e3o modificados a tal ponto que <a href=\"https:\/\/www.kaspersky.com\/blog\/25-worst-passwords-2014\/7239\/\" target=\"_blank\" rel=\"noopener nofollow\">mesmo as senhas mais b\u00e1sicas, \u00f3bvias e usadas com frequ\u00eancia<\/a>, como \u201c12345678\u201d e \u201csenha\u201d, n\u00e3o podem ser submetidas \u00e0 for\u00e7a bruta com tabelas arco-\u00edris.<\/p>\n<p>A variante mais simples usa o mesmo salt para todas as senhas. Mas o mais resistente a hackers cria um salt separado para cada registro individual. A beleza desta abordagem \u00e9 que esses elementos podem ser armazenados no mesmo banco de dados sem nenhum risco adicional: conhecer o salt n\u00e3o torna a tarefa dos invasores muito mais f\u00e1cil. Para quebrar os hashes, eles ainda ter\u00e3o que aplicar for\u00e7a bruta \u2013 ou seja, passar por cada combina\u00e7\u00e3o.<\/p>\n<p>Quanto mais os servi\u00e7os on-line adotarem esse m\u00e9todo de <em>n\u00e3o armazenamento de senhas<\/em>, menor ser\u00e1 a probabilidade de ocorrer um roubo em massa de credenciais de usu\u00e1rios (e os problemas subsequentes associados \u00e0 invas\u00e3o de contas).<\/p>\n<input type=\"hidden\" class=\"category_for_banner\" value=\"mdr\"><input type=\"hidden\" class=\"placeholder_for_banner\" data-cat_id=\"mdr\" value=\"18379\">\n","protected":false},"excerpt":{"rendered":"<p>Como os servi\u00e7os online devem armazenar as senhas dos usu\u00e1rios e como mitigar os danos em caso de vazamento ou ataque.<\/p>\n","protected":false},"author":2726,"featured_media":21804,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1119,1655,1656],"tags":[1978,108,332,2596,40,102,663,77,484],"class_list":{"0":"post-21802","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-business","8":"category-enterprise","9":"category-smb","10":"tag-contas","11":"tag-criptografia","12":"tag-hacking","13":"tag-hash","14":"tag-seguranca","15":"tag-senhas","16":"tag-servicos-online","17":"tag-tecnologia","18":"tag-vazamento-de-dados"},"hreflang":[{"hreflang":"pt-br","url":"https:\/\/www.kaspersky.com.br\/blog\/how-to-store-passwords\/21802\/"},{"hreflang":"en-in","url":"https:\/\/www.kaspersky.co.in\/blog\/how-to-store-passwords\/26286\/"},{"hreflang":"en-ae","url":"https:\/\/me-en.kaspersky.com\/blog\/how-to-store-passwords\/21719\/"},{"hreflang":"en-us","url":"https:\/\/usa.kaspersky.com\/blog\/how-to-store-passwords\/28961\/"},{"hreflang":"en-gb","url":"https:\/\/www.kaspersky.co.uk\/blog\/how-to-store-passwords\/26568\/"},{"hreflang":"es-mx","url":"https:\/\/latam.kaspersky.com\/blog\/how-to-store-passwords\/26693\/"},{"hreflang":"es","url":"https:\/\/www.kaspersky.es\/blog\/how-to-store-passwords\/29183\/"},{"hreflang":"ru","url":"https:\/\/www.kaspersky.ru\/blog\/how-to-store-passwords\/36161\/"},{"hreflang":"x-default","url":"https:\/\/www.kaspersky.com\/blog\/how-to-store-passwords\/49101\/"},{"hreflang":"fr","url":"https:\/\/www.kaspersky.fr\/blog\/how-to-store-passwords\/21014\/"},{"hreflang":"de","url":"https:\/\/www.kaspersky.de\/blog\/how-to-store-passwords\/30524\/"},{"hreflang":"ru-kz","url":"https:\/\/blog.kaspersky.kz\/how-to-store-passwords\/26839\/"},{"hreflang":"en-au","url":"https:\/\/www.kaspersky.com.au\/blog\/how-to-store-passwords\/32570\/"},{"hreflang":"en-za","url":"https:\/\/www.kaspersky.co.za\/blog\/how-to-store-passwords\/32223\/"}],"acf":[],"banners":"","maintag":{"url":"https:\/\/www.kaspersky.com.br\/blog\/tag\/senhas\/","name":"senhas"},"_links":{"self":[{"href":"https:\/\/www.kaspersky.com.br\/blog\/wp-json\/wp\/v2\/posts\/21802","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.kaspersky.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.kaspersky.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.kaspersky.com.br\/blog\/wp-json\/wp\/v2\/users\/2726"}],"replies":[{"embeddable":true,"href":"https:\/\/www.kaspersky.com.br\/blog\/wp-json\/wp\/v2\/comments?post=21802"}],"version-history":[{"count":3,"href":"https:\/\/www.kaspersky.com.br\/blog\/wp-json\/wp\/v2\/posts\/21802\/revisions"}],"predecessor-version":[{"id":21807,"href":"https:\/\/www.kaspersky.com.br\/blog\/wp-json\/wp\/v2\/posts\/21802\/revisions\/21807"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.kaspersky.com.br\/blog\/wp-json\/wp\/v2\/media\/21804"}],"wp:attachment":[{"href":"https:\/\/www.kaspersky.com.br\/blog\/wp-json\/wp\/v2\/media?parent=21802"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.kaspersky.com.br\/blog\/wp-json\/wp\/v2\/categories?post=21802"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.kaspersky.com.br\/blog\/wp-json\/wp\/v2\/tags?post=21802"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}