usando servidor nodejs node lado desde cómo crear cero javascript mongodb node.js cryptography aes

javascript - servidor - Almacenamiento de contraseñas con Node.js y MongoDB



node js pdf 2017 (2)

Estoy buscando algunos ejemplos de cómo almacenar de forma segura contraseñas y otros datos confidenciales utilizando node.js y mongodb.

Quiero que todo use una sal única que almacenaré junto con el hash en el documento mongo.

Para la autenticación, ¿debo sal y encriptar la entrada y hacerla coincidir con un hash almacenado?

¿Debo alguna vez necesitar descifrar esta información y, de ser así, cómo debería hacerlo?

¿Cómo se almacenan de forma segura las claves privadas, o incluso los métodos de salazón en el servidor?

Escuché que AES y Blowfish son buenas opciones, ¿qué debo usar?

¡Cualquier ejemplo de cómo diseñar esto sería maravillosamente útil!

¡Gracias!



Use esto: https://github.com/ncb000gt/node.bcrypt.js/

bcrypt es uno de los pocos algoritmos enfocados en este caso de uso. Nunca debería poder descifrar sus contraseñas, solo verificar que una contraseña de texto claro introducida por el usuario coincida con el hash almacenado / encriptado.

bcrypt es muy fácil de usar. Aquí hay un fragmento de mi esquema de Mongoose User (en CoffeeScript). Asegúrese de utilizar las funciones asíncronas ya que bycrypt es lento (a propósito).

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

Además, lea este artículo, que debe convencerlo de que bcrypt es una buena opción y lo ayudará a evitar convertirse en "realmente eficaz".