Best Practices für die Kryptografie für die Passwortspeicherung in Node

8

Ich suche nach einer einfachen, sicheren Lösung, um das Passwort eines Benutzers mit Node zu speichern. Ich bin ein Kryptografie-Neuling, habe aber versucht, eine Lösung aus Online-Recherchen zusammenzustellen. Ich bin auf der Suche nach einer Bestätigung, dass das, was ich mir ausgedacht habe, eine solide Lösung für eine Web-App mit grundlegenden Sicherheitsanforderungen (keine Bank, Krankenhaus usw.) ist. Hier ist es:

%Vor%

... und hier sind die Entscheidungen, die ich getroffen habe, die mich zu diesem Punkt gebracht haben:

Welcher Hashalgorithmus wird verwendet?

Basierend auf diesem weit referenzierten Artikel sieht es so aus, als seien die führenden Kandidaten PBKDF2, bcrypt und scrypt. Ich habe PBKDF2 gewählt, weil es Unterstützung in Node eingebaut hat.

Welche Salzgröße ist zu verwenden?

Diese Stack-Overflow-Antwort schien die einfachste Antwort zu sein, die ich finden konnte. Ich weiß immer noch nicht genau, warum 64 Bytes die richtige Salzgröße sind. Wenn ich herum google, bekomme ich andere Stapelaustauschantworten wie dies , aber ich bin mir nicht sicher, dass es für den Node-Algorithmus gilt? Völlig verwirrt hier, eine Erklärung, die auf einen Anfänger zielt, der diese Knotenfunktion verwendet, würde fantastisch sein.

Welche Schlüssellänge ist zu verwenden?

Auch hier habe ich meine Wahl weitgehend auf dieselbe Antwort wie oben gestützt, aber ich bin genauso neblig auf die Grundlagen von "warum". Die Antwort besagt, dass es "eine Verschwendung ist, Schlüssel zu erzeugen, die kleiner sind als Ihre Eingabe, also verwenden Sie mindestens 64 Bytes". Hä? Auch hier wäre eine praktische Erklärung hilfreich.

Wie viele Iterationen werden verwendet?

Für diese Frage habe ich meine Wahl aus dieser Stapelaustauschantwort getroffen . Ich verstehe nicht viel davon, aber ich habe verstanden, dass der Algorithmus ungefähr 8ms dauern soll. Also, wie Sie sehen können, habe ich Timer auf die Funktion gesetzt, und ich habe meine Iterationen angepasst, um es in diesem Ballpark auf meinem Rechner zu bekommen.

Danke!

    
markdb314 22.10.2014, 23:45
quelle

2 Antworten

6

Das Berechtigungsnachweis des NPM-Pakets verarbeitet all diese

Sie können sehen, dass der Autor darüber in dem Buch JavaScript-Anwendungen programmieren schreibt

    
Alex Hill 23.10.2014 00:04
quelle
2

Ich würde wärmstens empfehlen, BCrypt zu verwenden. Es gibt viele Vorteile für den Algorithmus, und die meisten Implementierungen behandeln all diese Fragen für Sie.

Wie in diese Antwort beschrieben :

  

Bcrypt hat die beste Reputation, die für einen kryptographischen Algorithmus erreicht werden kann: es gibt es schon seit einiger Zeit, es wird ziemlich weit verbreitet, es hat "Aufmerksamkeit erregt" und ist bis heute ungebrochen.

Ich habe einen ausführlichen Artikel über die Implementierung von BCrypt in Node / Express und anderen Frameworks geschrieben: Ссылка

    
Matthew James Davis 28.01.2016 20:43
quelle