Linux não "decodifica" senhas. Ele usa um processo de
hashing e
salga Para armazenar senhas com segurança. Aqui está um colapso do algoritmo e conceitos relacionados:
1. A meta:armazenamento de senha segura O princípio fundamental é que a senha de texto simples real é * nunca * armazenado em nenhum lugar. Se o banco de dados que contém senhas fosse comprometido, os invasores teriam acesso instantaneamente a todas as contas de usuário. Hashing e salga impedem isso.
2. Hashing: *
Função unidirecional: O hashing é uma operação matemática que transforma a senha em uma sequência de caracteres de tamanho fixo chamado "hash". É uma função * unidirecional *, o que significa que é computacionalmente inviável (extremamente difícil e demorado) para reverter o processo e derivar a senha original do hash.
*
Resistência à colisão: Idealmente, senhas diferentes devem produzir hashes diferentes. Um bom algoritmo de hash minimiza a chance de uma "colisão", onde duas senhas diferentes geram o mesmo hash.
*
algoritmos comuns de hash no Linux: *
bcrypt: Frequentemente considerado a escolha mais forte e preferida. Ele inclui um sal embutido e foi projetado para ser computacionalmente caro, tornando-o resistente a ataques de força bruta.
*
Argon2: Um algoritmo moderno de hash de senha que também é projetado para ser computacionalmente caro e com memória, aumentando ainda mais a resistência a ataques. Está se tornando mais popular.
*
scrypt: Outra função de derivação-chave projetada para ser resistente a ataques de força bruta.
*
SHA-512: (Menos comum * agora * para hash de senha direta, mas frequentemente usada como parte de uma função de derivação de chaves maior). Historicamente, era usado. Às vezes é usado como parte das configurações do PAM.
*
md5, sha-1, sha-256: não use isso! Estes são considerados desatualizados e vulneráveis para o hash de senha direta. Eles são muito rápidos e facilmente rachados com hardware moderno e mesas de arco -íris pré -computadas. Eles podem ser encontrados em sistemas mais antigos, mas devem ser atualizados.
3. Salga: *
Adicionando aleatoriedade: Um "sal" é uma série aleatória de caracteres que é exclusivo para cada usuário. O sal é concatenado (adicionado) a senha * antes * é hash.
*
Prevenção de ataques de mesa de arco -íris: As mesas de arco -íris são tabelas de hashes pré -computadas para senhas comuns. Sem salgar, um invasor pode simplesmente procurar o hash em uma tabela de arco -íris para encontrar a senha correspondente. A salga torna as mesas de arco -íris inúteis porque cada senha possui um sal exclusivo, resultando em um hash exclusivo, mesmo para senhas comuns.
*
O sal é armazenado com o hash: Fundamentalmente, o próprio sal é armazenado ao lado da senha de hash no arquivo `/etc/shadow` (ou em algum banco de dados nos sistemas modernos). Isso não é * uma vulnerabilidade de segurança; O sal é * necessário * para verificar uma senha.
*
Por que armazenar o sal? Para verificar a senha de um usuário, o sistema precisa:
1. Recupere o sal armazenado para esse usuário.
2. Concatenar a senha inserida com o sal.
3. Hash o resultado usando o mesmo algoritmo * de hash de hash usado originalmente.
4. Compare o hash recém -gerado com o hash armazenado. Se eles corresponderem, a senha estará correta.
4. O arquivo `/etc/shadow` (abordagem tradicional) Tradicionalmente, as senhas de usuário e suas informações associadas são armazenadas no arquivo `/etc/shadow`. (Nota:visualizar ou modificar diretamente esse arquivo geralmente requer privilégios root).
*
Permissões: O arquivo `/etc/Shadow` normalmente é legível pelo usuário` root`, garantindo que os usuários regulares não possam ver as senhas de hash de outros usuários.
*
Estrutura: Cada linha no arquivo `/etc/Shadow` representa uma conta de usuário e possui o seguinte formato (simplificado):
`` `
Nome de usuário:hashed_password:last_change:min_days:max_days:warn_days:inactive_days:expire_date:sinalizadores
`` `
*
o campo `hashed_password`: É aqui que a senha salgada e hash é armazenada. O formato desse campo geralmente inclui um identificador para o algoritmo de hash usado, o sal e o hash real. Por exemplo:
* `$ 6 $ algum_random_salt $ averylonghashedPasswordSwordString` (isso usa SHA-512)
* `$ 2b $ 10 $ outro_random_salt $ parelonGerhashedPasswordString` (isso usa BCRYPT)
* `$ 6` indica SHA-512
* `$ 2b` indica bCrypt
*O número (por exemplo, `10 'em BCRYPT) indica o *fator de custo *ou *fator de trabalho *. Um fator de custo mais alto torna o processo de hash mais caro computacionalmente, aumentando o tempo necessário para quebrar a senha.
5. Sistemas modernos e Pam (módulos de autenticação flash) * bancos de dados
: Os sistemas modernos geralmente usam bancos de dados (por exemplo, LDAP, Active Directory) para armazenar informações da conta do usuário, incluindo senhas de hash.
*
Pam: O PAM é uma estrutura flexível que permite que os administradores do sistema configurem diferentes mecanismos de autenticação. É usado para lidar com o processo de autenticação, incluindo senhas de hash, verificando senhas e executando outras tarefas relacionadas à segurança. Os arquivos de configuração do PAM (por exemplo, em `/etc/pam.d/`) determinam quais módulos de autenticação são usados e como eles estão configurados.
Cenário de exemplo:verificação de senha do usuário 1.
Usuário insere senha: O usuário digita sua senha em um prompt de login ou aplicativo.
2.
sistema recupera sal: O sistema procura a conta do usuário e recupera o sal armazenado de `/etc/Shadow` (ou o banco de dados apropriado).
3.
Concatenação e hash: O sistema concatena a senha inserida com o sal recuperado. Em seguida, ele usa o algoritmo de hash indicado na entrada `/etc/Shadow` (por exemplo, SHA-512 ou BCRYPT) para hash a senha e o sal combinados.
4.
Comparação: O hash recém -gerado é comparado ao hash armazenado em `/etc/shadow`.
5.
Sucesso/falha de autenticação: Se os dois hashes corresponderem, a autenticação será bem -sucedida. Caso contrário, a autenticação falha.
Considerações importantes: *
Complexidade da senha: Incentive os usuários a escolher senhas fortes que são longas, complexas e difíceis de adivinhar.
*
Alterações regulares de senha: Periodicamente, exigindo que os usuários alterem suas senhas pode ajudar a mitigar o risco de senha de compromisso.
*
Autenticação multifatorial (MFA): O uso do MFA adiciona uma camada extra de segurança, exigindo que os usuários forneçam várias formas de identificação, como uma senha e um código do telefone.
*
Auditorias de segurança: A audição regularmente a configuração de segurança do seu sistema pode ajudar a identificar e abordar possíveis vulnerabilidades.
*
permanecendo atualizado: Mantenha seu sistema operacional e software atualizados com os mais recentes patches de segurança.
em resumo: Linux não "decodifica" senhas. Ele usa uma forte combinação de salga e hash para armazenar representações de senha com segurança. Os algoritmos `bcrypt` e` argon2` são geralmente preferidos por sua resistência a ataques de força bruta. Configurar adequadamente o PAM e manter o sistema seguro é crucial para proteger as contas de usuário.