Una de las más grandes responsabilidades al solicitar información de visitantes es cuidar sus datos y para esto, hoy conoceremos el cifrado AES en Node JS. Si bien, existen diferentes métodos de cifrado, encriptación o resguardo de contraseñas o cuentas, AES nos permite tener una autenticación o algoritmo de cifrado de calidad, totalmente gratis.
Hoy me enfocaré en mostrarte cómo implementar este algoritmo de encriptación por medio de un paquete de Node JS a nuestra aplicación web. Vamos a comenzar.
Contenido
Lo que vas a necesitar
Antes de comenzar con el proceso, te dejo aquí algunas herramientas que vas a necesitar:
- Primera parte: Cómo subir app React a Heroku con Github y Mongodb Atlas.
- Repositorio Github: haz click aquí para verlo.
- Si no deseas usar el repo o la primera, simplemente crea un formulario de registro o inicio de sesión para Node JS. También debes contar con la creación del esquema, modelo y documento para la base de datos mongodb.
Algoritmo AES
Cómo crear modal react: paso a paso
Crear modales en React es fundamental para mantener a los usuarios en el sitio web y facilitar conve…
Inspeccionar desde móvil IOS o Android: chrome y safari
Hacer pruebas en nuestro proyecto o desarrollo web es clave para llevarlo acabo correctamente y para…
Cómo implementar Sepolia: Red de prueba de Ethereum
Antes de implementar un contrato en una red de mainnet como Ethereum debemos primero saber cómo impl…
En sus siglas Advanced Encryption Standard, hoy estándar de cifrado por Estados Unidos. Este algoritmo también llamado Rijndael es creado por 2 belgas llamados: Joan Daemen y Vincent Rijmen. En sí, es conocido por medio de una convocatoria o concurso para desarrollar un nuevo método de cifrado que reemplazara a su predecesor DES, el cual debía tener los siguientes requerimientos:
- Público o disponible para todo el mundo.
- Ser un algoritmo de cifrado simétrico.
- Con claves de cifrado de 128, 192 y 256 bits.
Desde el 2006 es uno de los algoritmos más usados para la criptografía simétrica.
Paquete mongoose-encryption: implementación en Node JS
Ahora, para poder implementarlo en Node js usaremos el paquete Mongoose-encryption. Este paquete nos permitirá encriptar y desencriptar campos específicos de nuestro esquema de base de datos Mongodb. En teoría, cuando una persona ingrese su contraseña, esta será encriptada para ser guardad en la base de datos.
Hay varios métodos de lograrlo, pero usaremos uno de los mencionados en el paquete: Cadena secreta en lugar de dos claves, o «Secret String Instead of Two Keys». Básicamente lo que haremos será crear una llave con la cual se hará la encriptación de un campo.
Instalación
Como primer paso lo que haremos será instalar tal cual nos indica npm:
npm i mongoose-encryption
A continuación solicitaremos el paquete, asignándole la constante «encrypt» así:
const encrypt = require("mongoose-encryption");
De esta manera ya podemos proceder a modificar server.js o bien el archivo que contenga la configuración del servidor en tu web.
Modificación Schema
Si ya cuentas con un schema correctamente configurado, puedes pasar al siguiente paso, sin embargo, puedes revisar este método. Lo que haremos será cambiar el schema como objeto sencillo y usaremos el método del paquete mongoose de node js para poder crear a partir de este, un schema. Lo hacemos así:
const Schema = mongoose.Schema;
const usuarioSchema = new Schema ({
nombre: String,
email: String,
contraseña: String
});
De esta manera podemos proceder a encriptar sin problema.
Schema Plugin: cadena secreta en lugar de dos claves
Ahora nos centraremos en la encriptación, con la siguiente línea la cual se encuentra también en la información del paquete:
const Secretos = "miclavesecreta";
usuarioSchema.plugin(encrypt, {secret: Secretos, encryptedFields: ["contraseña"] });
De esta manera, usamos plugin para usuarioSchema, donde se encriptará el campo «contraseña», usando el secreto creado anteriormente.
Dotenv: Variables de entorno
Ahora nos centraremos en la protección de esta llave de encriptación. Primero usaremos el paquete Dotenv y luego modificaremos el archivo gitignore.
Crearemos un archivo .env el cual contendrá variables sensibles de nuestra aplicación, como la llave de encriptación o claves API. Ahora, para su instalación, usaremos:
npm i dotenv
A continuación, procederemos a crear un archivo el cual contendrá el secreto que usaremos. Simplemente crea un archivo llamado .env en la carpeta contenedora de tu programa y dentro, escribe el secreto para el cual se usará la encriptación, por ejemplo:
SECRETO=MICLAvesecreta
Por último procedemos a cambiar este Secreto dentro de nuestro código en el servidor, de la siguiente manera:
usuarioSchema.plugin(encrypt, {secret: process.env.SECRETOS, encryptedFields: ["contraseña"] });
Proccess env nos permite implementar el valor de SECRETOS de una manera segura y pasarlo como «secret» para la encriptación del campo «contraseña» del esquema «usuarioSchema».
Gitignore
Por último, vamos a solicitar que se ignore este archivo al momento de subirlo a GitHub, de esta manera protegemos nuestra clave secreta y demás archivos. Aquí te dejo el link del repo usado en el video el cual contiene una plantilla de gitignore, con los archivos que son más frecuentemente ignorados.
Si no deseas usar el repo, simplemente:
- Crea un archivo .gitignore dentro de la carpeta contenedora de tu aplicación web.
- Añade .env
De esta manera este archivo será ignorado.
Video de ayuda
Hice este video para guiarte en el proceso completo junto con unos consejos sobre la selección de contraseñas en general. Si te gusta, no olvides dar like y suscribirte para nuevos videos.
Producto sugerido
Si al igual que yo, pasas demasiado tiempo en un pc, puede que este producto te ayude, como yo a cuidar mis manos y a su vez, optimizar mis horas de digitalización. Te recomiendo totalmente este teclado mecánico Keychron k6. Si quieres ver la reseña completa puedes hacerlo aquí.
Keychron K6 65% compacto teclado mecánico inalámbrico para Mac, retroiluminación blanca, Bluetooth, multitarea, tipo C con cable teclado para Windows con interruptor marrón Gateron
- El Keychron K6 es un teclado mecánico inalámbrico Bluetooth compacto de 65 % con retroiluminación blanca hecha para Mac y Windows. El K6 está diseñado para maximizar tu espacio de trabajo y mejorar la productividad.
- Con un diseño único de Mac, compatibilidad con Windows y teclas de flecha dedicadas, el K6 ofrece una cómoda accesibilidad a todas las teclas multimedia y funciones esenciales a través de la combinación de pulsaciones de teclas, pero lo suficientemente compacto para que puedas llegar a tu ratón más fácilmente. Teclas adicionales para sistemas operativos Windows y Mac están incluidas.
- Se conecta con hasta 3 dispositivos a través del fiable chipset Broadcom Bluetooth 5.1 y cambia entre ellos fácilmente para necesidades multitarea. El K6 es mejor para adaptarse al hogar, la oficina y el uso de juegos ligeros mientras se conecta con tu smartphone, portátil y iPad. También tiene modo con cable con conexión USB tipo C.
Conclusión
Este es uno de los muchos métodos para proteger la información de nuestros clientes en la base de datos y la verdad es que nunca será suficiente protección. Sin embargo el algoritmo AES lo logra eficientemente tanto en seguridad como en implementación para Node Js.