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.