Como um navegador da web salva senhas?

8

Como os navegadores da Web atuais (ou clientes de email móvel e qualquer software em geral) salvam as senhas dos usuários? Todas as respostas sobre o armazenamento de senhas dizem que devemos armazenar apenas hashes, não a senha em si. Mas estou com dificuldade para pesquisar na web tentando encontrar as melhores técnicas para armazenar senhas quando sabemos que precisaremos delas em texto sem formatação posteriormente - sem armazená-las em texto sem formatação, sem usar uma criptografia fraca (chave conhecida) e sem solicitar ao usuário uma senha mestra. Alguma ideia?

Marcus
fonte
Essa pergunta provavelmente se encaixa melhor no site do IT Security SE.
Bernard
Graças @Bernard, eu não estava ciente do site da Segurança de TI ...
marcus
Até hoje (Chrome 60), o Chrome armazena senhas em texto não criptografado desde ... bem, sempre. Há uma discussão acalorada sobre quão bem essas senhas em texto não criptografado precisam ser protegidas contra o acesso do usuário. Desfrute de muitos argumentos válidos dos dois lados aqui .
quer

Respostas:

4

localmente, ele é armazenado como texto sem formatação ou criptografado.

quando criptografada, a chave en / descriptografia pode ser corrigida por navegador (codificado no executável), por máquina (gerada na instalação e armazenada no diretório de instalação) ou por usuário (gerada pela primeira vez no gerenciador de senhas e armazenada no %appdata%)

ou eles podem ser combinados: a chave no nível do usuário é criptografada com a chave no nível da máquina, para que, quando o malware leve o arquivo onde as senhas estão armazenadas, ele seja armazenado, seja inútil sem as chaves no nível do usuário e no nível da máquina

Alguns navegadores também permitem que você use uma senha "mestra", que é combinada com a chave existente para fornecer mais segurança

Quando você usa um (bom) serviço de sincronização, as senhas nunca são armazenadas em texto sem formatação no servidor e nunca são descriptografadas no servidor.

catraca arrepiante
fonte
Obrigado. De todas as respostas, parece que não há nenhuma boa solução "forte", é texto simples ou algum ofuscamento (ou seja, uma criptografia cuja chave pode ser obtido na própria máquina)
marcus
12

As senhas são armazenadas em texto sem formatação, a menos que uma senha mestra seja usada.

Quando as pessoas dizem que você deve armazenar apenas hashes de senhas, elas estão falando sobre armazenamento no lado do servidor , não no lado do cliente.

Lado do servidor

Quando você tem seu próprio site, quando os usuários podem registrar / logon com suas senhas, você não precisa (e nunca deve) armazenar as senhas:

  • Você não precisa armazenar senhas simples , porque você só precisa verificar se a senha usada durante um logon corresponde à senha fornecida pelo usuário durante o registro. Você pode fazer isso com hashes, pois senhas diferentes teriam hashes¹ diferentes.

  • Você não deve armazenar senhas simples . E se o seu site for invadido? Além disso, muitas pessoas reutilizam as mesmas senhas repetidamente, de modo que você praticamente dá a qualquer hacker a capacidade de acessar a conta do Facebook, a conta de e-mail dos usuários, etc.

Lado do cliente

Navegadores são diferentes. Eles armazenam as senhas na máquina cliente e devem ter uma senha original, não um hash.

Isso significa que essas senhas são armazenadas em texto sem formatação na maioria dos casos.

  • Em termos de segurança, isso não importa muito. Essas senhas são armazenadas em um diretório que pertence à conta do usuário. Isso significa que cabe ao sistema operacional (e ao usuário) configurar corretamente as permissões para os arquivos dos usuários e restringir o acesso ao arquivo que contém as senhas para o próprio usuário.

  • Experiência do usuário sábia, esta é a coisa mais fácil de fazer. Outra possibilidade é criptografar essas senhas por uma senha mestra; nesse caso, o usuário precisará fornecer a senha mestra sempre que abrir o navegador . Tenho certeza de que a maioria dos usuários nunca iria gostar disso.

    Se a senha mestra estiver armazenada em algum lugar, o mesmo problema surge: se você armazenar a senha mestra em texto sem formatação, qual é o objetivo? Se você o criptografar, deverá ter uma senha mestre-mestre.

Sincronizar

Observe que a maioria dos navegadores permite que os usuários sincronizem seus dados em várias máquinas. A sincronização usa um servidor remoto para armazenar cookies, histórico, favoritos e senhas. Por exemplo, o Chrome usa os servidores do Google para armazenar esses dados.

Nesse caso, as senhas nunca são armazenadas em texto sem formatação nos servidores de sincronização ; caso contrário, isso seria um problema de segurança. No Chrome, você deve escolher a senha mestra para sincronização (ou usar a senha da sua conta do Google). Essa senha mestra será usada para criptografar as senhas (sempre) e outros dados, como o histórico ou os favoritos (opcional).


¹ Por uma questão de simplicidade, você pode imaginar que as senhas diferentes não podem ter os mesmos hashes. Em teoria, isso está errado, pois podem existir colisões. Na prática, se você usar um algoritmo de hash forte, como o SHA-256, poderá negligenciar o risco de colisão em um site, mesmo com milhões de usuários registrados. As coisas são diferentes se você usar um algoritmo de hash obsoleto e depreciado, como MD5.

Arseni Mourzenko
fonte
2
Você parece preocupado com a maneira como a senha mestra é armazenada, mas nós realmente não precisamos (ou queremos) armazená-la, precisamos? Pelo que entendi, precisamos apenas da senha mestra como uma (parte da) chave para descriptografar senhas salvas e criptografar novas senhas. No que diz respeito à descriptografia, se a senha mestra estiver incorreta, a senha específica descriptografada (espero) também estará errada. O problema real é para novas senhas, pois não queremos criptografá-las com a senha errada, mas não podemos verificar se a senha mestre descriptografa uma string padrão corretamente (portanto, precisamos armazenar a string codificada).
SylvainD
Acordado. Ter uma senha mestra coloca você de volta na mesma posição em que você está no servidor: verifique apenas. Você pode verificar a senha em relação a um hash e, em seguida, usar a entrada de usuários, se ela fizer check-out. Não há necessidade de armazená-lo permanentemente. Esse também é o mecanismo usado por alguns aplicativos para atualizar os hashs quando se tornam obsoletos. Aguarde o usuário efetuar login, verifique com o hash antigo e repita a entrada enquanto ela ainda estiver na memória em texto não criptografado e armazene o novo e mais seguro hash.
Matthew Scharley
@ Josay: estamos preocupados com a maneira como a senha mestra é armazenada, se não queremos solicitar ao usuário que a insira toda vez que ele abrir um navegador. Se o usuário precisar inseri-lo, torna-se tecnicamente muito simples, pois armazenamos apenas seu hash.
Arseni Mourzenko 26/03/12
@MaMaMa Ok, estou 100% com você então.
SylvainD
Vale a pena notar que a maioria dos navegadores agora usa o armazenamento de chaves do sistema operacional onde existe. Por exemplo, se eu armazenasse meu nome de usuário e senha do SO no meu PC (firefox no Win 10), ele seria armazenado no armazenamento de chaves. Isso é criptografado, mas desbloqueado ao efetuar o login. Alguém sentado no meu PC efetuou login como eu poderia acessá-los, mas se efetuasse login como outra pessoa, minhas senhas não seriam atingíveis.
Baldrickk,
0

Esses programas precisam da senha em texto não criptografado (eles precisam enviá-la quando solicitado). Portanto, é armazenado como texto simples. Muitos navegadores permitem criptografar todas as senhas armazenadas com uma senha mestre (solicitada apenas uma vez).

Matteo
fonte