Ich suche nach Beispielen, wie Passwörter und andere vertrauliche Daten mit node.js und mongodb sicher gespeichert werden können.
Ich möchte, dass alles ein einzigartiges Salz verwendet, das ich neben dem Hash im Mongo-Dokument aufbewahre.
Muss ich zur Authentifizierung nur die Eingabe salzen und verschlüsseln und sie einem gespeicherten Hash zuordnen?
Sollte ich diese Daten jemals entschlüsseln müssen und wenn ja, wie soll ich das tun?
Wie werden die privaten Schlüssel oder sogar die Salting-Methoden sicher auf dem Server gespeichert?
Ich habe gehört, dass AES und Blowfish beide gute Optionen sind. Was soll ich verwenden?
Alle Beispiele, wie man dies gestaltet, wären wunderbar hilfreich!
Vielen Dank!
javascript
mongodb
node.js
cryptography
aes
schick
quelle
quelle
Antworten:
Verwenden Sie dies: https://github.com/ncb000gt/node.bcrypt.js/
bcrypt ist einer der wenigen Algorithmen, die sich auf diesen Anwendungsfall konzentrieren. Sie sollten niemals in der Lage sein, Ihre Passwörter zu entschlüsseln. Überprüfen Sie nur, ob ein vom Benutzer eingegebenes Klartext-Passwort mit dem gespeicherten / verschlüsselten Hash übereinstimmt.
bcrypt ist sehr einfach zu bedienen. Hier ist ein Ausschnitt aus meinem Mongoose-Benutzerschema (in CoffeeScript). Stellen Sie sicher, dass Sie die asynchronen Funktionen verwenden, da die Verschlüsselung (absichtlich) langsam ist.
class User extends SharedUser defaults: _.extend {domainId: null}, SharedUser::defaults #Irrelevant bits trimmed... password: (cleartext, confirm, callback) -> errorInfo = new errors.InvalidData() if cleartext != confirm errorInfo.message = 'please type the same password twice' errorInfo.errors.confirmPassword = 'must match the password' return callback errorInfo message = min4 cleartext if message errorInfo.message = message errorInfo.errors.password = message return callback errorInfo self = this bcrypt.gen_salt 10, (error, salt)-> if error errorInfo = new errors.InternalError error.message return callback errorInfo bcrypt.encrypt cleartext, salt, (error, hash)-> if error errorInfo = new errors.InternalError error.message return callback errorInfo self.attributes.bcryptedPassword = hash return callback() verifyPassword: (cleartext, callback) -> bcrypt.compare cleartext, @attributes.bcryptedPassword, (error, result)-> if error return callback(new errors.InternalError(error.message)) callback null, result
Lesen Sie auch diesen Artikel, der Sie davon überzeugen sollte, dass bcrypt eine gute Wahl ist und Ihnen hilft, nicht "gut und wirklich effektiv" zu werden.
quelle
Dies ist das beste Beispiel, das mir bisher begegnet ist. Es verwendet node.bcrypt.js http://devsmash.com/blog/password-authentication-with-mongoose-and-bcrypt
quelle