WikiDer > Verschlüsseln
In dem Kryptographie ist verschlüsseln (die mit einem Kleinbuchstaben geschrieben wird) a algorithmisch Funktion zum Generieren kryptografischer Schlüssel aus Benutzerkennwörtern. Diese Verschlüsselungsfunktion wurde von Colin Percival entwickelt, der sie ursprünglich für . entwickelt hat Tarsnap, ein Online-Backup-Dienst.
Hintergrund
Der Algorithmus ist speziell darauf ausgelegt, groß angelegte Angriffe auf Daten mit spezieller Hardware und viel Rechenleistung sehr teuer zu machen, da ein solcher Angriff viel Speicher benötigt. Im Jahr 2012 wurde der scrypt-Algorithmus von der . veröffentlicht IETF wie ein Internet-Entwurf, und war auf dem Weg nach a Anfrage für Kommentare über Informationstechnologie.[1] Es wird als Proof-of-Work-Methode für Bergbau von Litecoin und Novacoin.[2][3]
Operation
Ein passwortbasiertes KDF (Schlüsselableitungsfunktion) ist bewusst so konzipiert, dass Angriffe zur Ableitung eines kryptografischen Schlüssels aus einem Passwort eine hohe Komplexitätsgrad in Bezug auf Speicher und/oder Rechenleistung. Berechtigte Benutzer müssen die Funktion nur einmal pro Vorgang verwenden (z. B. bei der Authentifizierung oder Anmeldung) und dann ist diese Zeit vernachlässigbar. Wenn jedoch jemand das Passwort mit 'erraten' möchte rohe Gewalt dann muss die Operation durch die Funktion milliardenfach verwendet werden, was die Attack-Zeit stark erhöht. Im Idealfall wird verhindert, dass das ursprüngliche Passwort veraltet ist.
Vor scrypt gab es bereits passwortbasierte KDFs wie das beliebte PBKDF2 von RSA-Sicherheit), die relativ wenig Ressourcen oder Speicher verbrauchen und kostengünstig in Hardware zu implementieren waren (wie in a ASIC oder sogar a FPGA). Auf diese Weise konnte ein Angreifer mit ausreichenden Ressourcen einen groß angelegten parallelen Angriff starten, indem er Hunderte oder Tausende von Implementierungen des Algorithmus in die Hardware schüttete und jeden Algorithmus nach einer anderen Teilmenge des Schlüsselcodes suchen ließ. Dies reduziert die Zeit, die benötigt wird, um einen erfolgreichen Brute-Force-Angriff zu starten, auf einen für den Hacker sehr akzeptablen Zeitrahmen.
Die scrypt-Funktion soll solche groß angelegten Angriffe verhindern, indem sie den Ressourcendruck des Algorithmus bewusst sehr hoch macht. Daher ist der Verschlüsselungsalgorithmus so konzipiert, dass er im Vergleich zu anderen passwortbasierten KDFs viel Speicher benötigt. Dies verteuert jedoch den Umfang und die Kosten der Hardwarebereitstellung und begrenzt daher die Anzahl möglicher paralleler Angriffe, die ein Angreifer verwenden kann (auch indem die Hardware, die ein Angreifer verwenden muss, erheblich teurer wird) um auf die verschlüsselten Daten zuzugreifen.
Überblick
Die hohe Belastung des Speichers durch scrypt rührt von einem großen Vektor von pseudozufälligen Bitfolgen her, die als Teil des Algorithmus generiert werden. Sobald der Vektor erzeugt ist, wird auf die Elemente darin in einer pseudozufälligen Reihenfolge zugegriffen und kombiniert, um den abgeleiteten Schlüssel zu erzeugen. Eine einfache Implementierung würde immer den gesamten Vektor in der RAM-Speicher, damit bei Bedarf auf die Daten zugegriffen werden kann.
Da die Elemente des Vektors durch einen Algorithmus generiert werden, könnte jedes einzelne Element bei Bedarf sofort generiert werden, wodurch die Notwendigkeit reduziert wird, jeweils nur 1 Element im Speicher zu haben, wodurch der Speicherbedarf reduziert wird. Aber auch die Generierung von nur 1 Element wurde bewusst in Bezug auf Rechenleistung und Speicherverbrauch erschwert und die einzelnen Elemente werden im gesamten Prozess auch jeweils mehrfach angefahren. Dies verlangsamt den Prozess bewusst und erheblich. Es gibt also einen Zusammenhang zwischen Geschwindigkeit und verwendetem Speicherverbrauch.
Eine solche Verbindung ist bei Computeralgorithmen häufiger anzutreffen: Man kann die Geschwindigkeit auf Kosten von mehr Speicherverbrauch erhöhen oder den Speicherverbrauch auf Kosten anderer Operationen verringern, was etwas länger dauert. Das Konzept von scrypt macht absichtlich eine dieser beiden Möglichkeiten für einen Angreifer teuer, entweder weil es viel Speicher verbraucht oder weil es lange dauert. Ein Angreifer kann beispielsweise ein Programm verwenden, das nur wenige Ressourcen benötigt, aber sehr langsam läuft, oder der Angreifer wählt einen teuren und schnelleren Sneller Hardware-, dann benötigt der Algorithmus plötzlich viel mehr Speicher und parallele Angriffe werden plötzlich viel teurer.
Siehe auch
Externe Links
- (und) Die scrypt-Seite auf der Tarsnap-Website
(und) Das ursprüngliche Verschlüsselungsdokument- (und) C#-Implementierung
- (und) Java-Implementierung
- (und) PHP-Implementierung
- (und) Ruby-Implementierung
Quellen, Anmerkungen und/oder Verweise
|