11 Stimmen

Passwortsalze: Voranstellen vs. Anhängen

Ich habe mir gerade die Implementierung des Passwort-Hashings in Django angesehen und festgestellt dass es das Salz vorangestellt wird so dass der Hash wie folgt erstellt wird sha1(salt + password) zum Beispiel.

Meiner Meinung nach sind Salze für zwei Zwecke gut

  1. Verhinderung von Regenbogentabellen-Lookups

    Nun gut, das Voranstellen/Anhängen des Salzes macht bei Regenbogentabellen nicht wirklich einen Unterschied.

  2. Härtung gegen Brute-Force-/Wörterbuch-Angriffe

    Darum geht es in meiner Frage. Wenn jemand ein einzelnes Kennwort aus einer gestohlenen Kennwortdatenbank angreifen will, muss er eine Vielzahl von Kennwörtern ausprobieren (z. B. Wörterbuchwörter oder [A-Za-z0-9]-Permutationen).

    Nehmen wir an, mein Passwort ist "abcdef", das Salt ist "salt" und der Angreifer probiert alle [a-z]{6} Passwörter aus.

    Mit einem Vorsalz muss man berechnen hash("salt") den Zustand des Hash-Algorithmus speichern und dann von diesem Punkt aus für jede Permutation fortfahren. Das heißt, um alle Permutationen zu durchlaufen, sind 26^6 Kopier-Hash-Algorithmus-Status-Struktur-Operationen und 26^6 hash(permutation of [a-z]{6}) Operationen. Da das Kopieren des Zustands des Hash-Algorithmus verdammt schnell ist, trägt das Salz hier kaum zur Komplexität bei, egal wie lang es ist.

    Aber mit einem angehängten Salz muss der Angreifer berechnen hash(permutation of [a-z]{6} + salt) für jede Permutation, was zu 26^10 Hash-Operationen führt. Also offensichtlich, anhängend Salze je nach Länge des Salzes eine zusätzliche Komplexität.

Ich glaube nicht, dass dies historische Gründe hat, denn Django ist ziemlich neu. Was ist also der Sinn von vorangestellt Salze?

10voto

CodesInChaos Punkte 103089

Tun Sie beides nicht, verwenden Sie einen Standard Funktion der Schlüsselableitung wie PBKDF2 . Drehen Sie niemals Ihre eigene Kryptowährung. Es ist viel zu leicht, etwas falsch zu machen. PBKDF2 verwendet viele Iterationen, um sich gegen Bruteforce zu schützen, was eine viel größere Verbesserung ist als die einfache Reihenfolge.

Und Ihr Trick, den internen Zustand der Hash-Funktion nach der Verarbeitung des Salzes vorauszuberechnen, ist wahrscheinlich nicht so einfach zu bewerkstelligen, es sei denn, die Länge des Salzes entspricht der Blocklänge des zugrunde liegenden Block-Zyphers.

1voto

blaze Punkte 4216

Wenn Salt vorangestellt ist, kann der Angreifer eine Hash-Status-Datenbank für Salts erstellen (vorausgesetzt, Salt ist lang genug, um einen Hashing-Schritt zu machen) und dann einen Wörterbuchangriff durchführen.

Wenn jedoch ein Salt angehängt wird, kann ein Angreifer eine solche Datenbank als Passwort-Wörterbuch verwenden und zusätzlich nur den Hash des Salt berechnen. Da Salt in der Regel kürzer ist als das Passwort (z. B. 4 Zeichen Salt und 8 Zeichen Passwort), ist dies ein schnellerer Angriff.

0voto

cababunga Punkte 3043

Sie haben natürlich Recht, aber wenn Sie die Zeit für die Hash-Berechnung erhöhen wollen, verwenden Sie einfach einen längeren Hash. SHA256 statt SHA1, zum Beispiel.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X