Linux "dekodieren" Kennwörter nicht. Es verwendet einen Prozess von
Hashing und
salzen Passwörter sicher speichern. Hier ist eine Aufschlüsselung des Algorithmus und verwandten Konzepte:
1. Das Ziel:Sicherung Passwortspeicher
Das Grundprinzip ist, dass das tatsächliche Klartextkennwort * Niemand * überall gespeichert wird. Wenn die Datenbank mit Kennwörtern jemals beeinträchtigt worden wäre, hätten Angreifer sofort Zugriff auf alle Benutzerkonten. Hashing und Salzen verhindern dies.
2. Hashing:
* Einweg-Funktion: Hashing ist eine mathematische Operation, die das Kennwort in eine Zeichenfolge mit fester Größe verwandelt, die als "Hash" bezeichnet werden. Es ist eine * Einweg * -Funktion, was bedeutet, dass es rechnerisch unmöglich ist (äußerst schwierig und zeitaufwändig), um den Prozess umzukehren und das ursprüngliche Kennwort aus dem Hash abzuleiten.
* Kollisionswiderstand: Im Idealfall sollten verschiedene Passwörter unterschiedliche Hashes erzeugen. Ein guter Hashing -Algorithmus minimiert die Wahrscheinlichkeit einer "Kollision", bei der zwei verschiedene Passwörter denselben Hash erzeugen.
* gemeinsame Hashing -Algorithmen unter Linux:
* bcrypt: Oft als die stärkste und bevorzugte Wahl angesehen. Es umfasst ein integriertes Salz und ist rechnerisch teuer, wodurch es gegen Brute-Force-Angriffe resistent ist.
* argon2: Ein modernes Passworthashing-Algorithmus, der auch rechnerisch teur und speicherhärt ist, wodurch der Widerstand gegen Angriffe weiter zunimmt. Es wird immer beliebter.
* Scrypt: Eine weitere wichtige Ableitungsfunktion, die gegen Brute-Force-Angriffe resistent ist.
* sha-512: (Weniger verbreitet * jetzt * für direktes Kennworthashing, aber häufig als Teil einer größeren Schlüsselableitungsfunktion verwendet). Historisch gesehen wurde verwendet. Wird immer noch manchmal als Teil der PAM -Konfigurationen verwendet.
* Md5, SHA-1, SHA-256: Verwenden Sie diese nicht! Diese gelten als veraltet und für direktes Passworthashing anfällig. Sie sind zu schnell und leicht mit moderner Hardware und vorberechtigtem Regenbogentischen geknackt. Sie könnten in älteren Systemen gefunden werden, sollten aber verbessert werden.
3. Salzen:
* Zufälligkeit hinzufügen: Ein "Salz" ist eine zufällige Zeichenfolge von Zeichen, die für jeden Benutzer eindeutig ist. Das Salz wird dem Passwort * vor * verkettet (hinzugefügt). Es ist gehasht.
* Regenbogentischangriffe verhindern: Regenbogentabellen sind vorberechtigte Hashes -Tabellen für gängige Passwörter. Ohne Salzen könnte ein Angreifer den Hash in einer Regenbogentabelle einfach nachschlagen, um das entsprechende Passwort zu finden. Salzen macht Regenbogentische nutzlos, da jedes Passwort ein eindeutiges Salz hat, was selbst für gemeinsame Passwörter zu einem eindeutigen Hash führt.
* Das Salz wird mit dem Hash aufbewahrt: Entscheidend ist, dass das Salz selbst neben dem Hashed -Passwort in der Datei `/etc/Shadow` (oder in einer Datenbank in modernen Systemen) gespeichert ist. Dies ist * nicht * eine Sicherheitsanfälligkeit; Das Salz ist * erforderlich *, um ein Passwort zu überprüfen.
* Warum das Salz speichern? Um das Passwort eines Benutzers zu überprüfen, muss das System:
1. Rufen Sie das gespeicherte Salz für diesen Benutzer ab.
2. Verketten Sie das eingegebene Passwort mit dem Salz.
3. Hash das Ergebnis mit dem ursprünglich verwendeten * gleichen * Hashing -Algorithmus.
4. Vergleichen Sie den neu erzeugten Hash mit dem gespeicherten Hash. Wenn sie übereinstimmen, ist das Passwort korrekt.
4. Die Datei `/etc/Shadow` (traditioneller Ansatz)
Traditionell werden Benutzerkennwörter und ihre zugehörigen Informationen in der Datei `/etc/Shadow` gespeichert. (Hinweis:Das direkte Anzeigen oder Ändern dieser Datei erfordert normalerweise Stammberechtigungen).
* Berechtigungen: Die Datei "/etc/Shadow" ist in der Regel nur vom "Root" -Benutzer lesbar, um sicherzustellen, dass reguläre Benutzer die Hash -Passwörter anderer Benutzer nicht sehen können.
* Struktur: Jede Zeile in der Datei `/etc/Shadow` repräsentiert ein Benutzerkonto und verfügt über das folgende Format (vereinfacht):
`` `
Benutzername:Hashed_password:last_change:min_days:max_days:warn_days:inactive_days:expire_date:Flags
`` `
* Das Feld `Hashed_Password`: Hier wird das gesalzene und Hashed -Passwort gespeichert. Das Format dieses Feldes enthält normalerweise eine Kennung für den verwendeten Hashing -Algorithmus, das Salz und den tatsächlichen Hash. Zum Beispiel:
* `$ 6 $ son_random_Salt $ AverylonghashedPasswordstring` (Dadurch wird SHA-512 verwendet)
* `$ 2b $ 10 $ $ Another_Random_Salt $ EvenlongerHashedPasswordstring` (Dadurch verwendet Bcrypt)
* `$ 6` zeigt SHA-512 an
* `$ 2b` zeigt Bcrypt an
*Die Zahl (z. B. `10` in Bcrypt) gibt den *Kostenfaktor *oder *Arbeitsfaktor *an *. Ein höherer Kostenfaktor macht den Hashing -Prozess rechnerisch teurer und erhöht die Zeit, die das Passwort knackt.
5. Moderne Systeme und PAM (Pluggable -Authentifizierungsmodule)
* Datenbanken: Moderne Systeme verwenden häufig Datenbanken (z. B. LDAP, Active Directory), um Benutzerkontoinformationen, einschließlich Hashed -Passwörter, zu speichern.
* Pam: PAM ist ein flexibles Framework, mit dem Systemadministratoren verschiedene Authentifizierungsmechanismen konfigurieren können. Es wird verwendet, um den Authentifizierungsprozess zu verarbeiten, einschließlich Hashing-Passwörter, Überprüfung von Kennwörtern und der Ausführung anderer Sicherheitsaufgaben. PAM -Konfigurationsdateien (z. B. in `/etc/pam.d/`) bestimmen, welche Authentifizierungsmodule verwendet werden und wie sie konfiguriert werden.
Beispielszenario:Benutzerkennwortüberprüfung
1. Benutzer gibt Kennwort ein: Der Benutzer trifft sein Passwort in eine Anmeldeingabe oder Anwendung ein.
2. System ruft Salz ab: Das System schaut im Konto des Benutzers nach und ruft das gespeicherte Salz von `/etc/Shadow` (oder der entsprechenden Datenbank) ab.
3. Verkettung und Hashing: Das System verkettet das eingegebene Passwort mit dem abgerufenen Salz. Anschließend verwendet es den Hashing-Algorithmus, der im `/etc/Shadow`-Eintrag (z. B. SHA-512 oder Bcrypt) angegeben ist, um das kombinierte Passwort und das kombinierte Salz zu haben.
4. Vergleich: Der neu erzeugte Hash wird mit dem gespeicherten Hash in "/etc/Shadow" verglichen.
5. Authentifizierungserfolg/Misserfolg: Wenn die beiden Hashes übereinstimmen, ist die Authentifizierung erfolgreich. Andernfalls schlägt die Authentifizierung fehl.
Wichtige Überlegungen:
* Passwortkomplexität: Ermutigen Sie die Benutzer, starke Passwörter zu wählen, die lang, komplex und schwer zu erraten sind.
* reguläre Passwortänderungen: Wenn Benutzer regelmäßig ihre Kennwörter ändern müssen, können Sie das Risiko eines Kennworts beeinträchtigen.
* Multi-Faktor-Authentifizierung (MFA): Die Verwendung von MFA fügt eine zusätzliche Sicherheitsebene hinzu, indem Benutzer mehrere Identifikationsformen bereitstellen müssen, z. B. ein Passwort und einen Code von ihrem Telefon.
* Sicherheitsaudits: Die regelmäßige Prüfung der Sicherheitskonfiguration Ihres Systems kann dazu beitragen, potenzielle Sicherheitslücken zu identifizieren und zu beheben.
* aktualisiert bleiben: Halten Sie Ihr Betriebssystem und Ihre Software mit den neuesten Sicherheitspatches auf dem neuesten Stand.
Zusammenfassend: Linux "dekodieren" Kennwörter nicht. Es verwendet eine starke Kombination aus Salzen und Hashing, um die sicheren Speicherpassungsabstellungen sicher zu speichern. Die Algorithmen "Bcrypt" und "Argon2" werden im Allgemeinen für ihren Widerstand gegen Brute-Force-Angriffe bevorzugt. PAM ordnungsgemäß zu konfigurieren und Ihr System sicher zu halten, ist entscheidend, um Benutzerkonten zu schützen.