Tengo Xamarin como mi cliente móvil, node.js como backend y MongoDB como base de datos. Estoy tratando de cifrar los datos del usuario y guardarlos en la base de datos. Si hago el cifrado del servidor, los piratas informáticos aún pueden ver los datos mientras se transmiten a través de las API. ¿Debo hacer el cifrado del cliente, pasar los datos a la API y almacenarlos en la base de datos o debo hacer el cifrado de doble capa (es decir) Cifrar los datos del usuario desde el lado del cliente, pasarlos a través de la API, nuevamente hacer un cifrado del lado del servidor y almacenarlos en la base de datos . Básicamente, quiero saber cómo funciona el cifrado del servidor del cliente en el mundo real.
La preocupación es que los datos del usuario son confidenciales y necesitan protección incluso si la base de datos es pirateada.
Hay varios puntos en los que podemos aplicar el cifrado, esto es un poco confuso, pero déjame explicarte esto parte por parte.
Su preocupación por la seguridad de los datos confidenciales, incluso si el servidor es pirateado, está justificada. Por lo tanto, cualquier información confidencial que tenga, deberá cifrarla. Sin embargo, hay varias formas de lograr el cifrado. Para evitar complicaciones, hablaré de dos tipos de cifrado para este nivel:
La contraseña del usuario es un dato que solo es interesante para el usuario en su forma original. Entonces, puede aplicar el cifrado unidireccional, es decir, dada la contraseña del usuario que sabe cómo codificarla, almacena la versión cifrada de la contraseña y, posteriormente, cada vez que el usuario inicia sesión, valida su contraseña comparándola. el resultado de cifrar lo que él/ella escribió frente a lo que está almacenado en la base de datos. Sin embargo, no debería poder descifrar la contraseña cifrada , porque las contraseñas necesitan una sola dirección de todos modos, que se ve así:
La otra forma de cifrar datos a este nivel es un cifrado bidireccional, es decir, un método de cifrado que realmente puede descifrar. Debe usar este enfoque para cualquier dato que pueda necesitar en forma sin procesar por algún motivo, como mostrárselo al usuario.
Si el propietario de su proyecto está preocupado por la seguridad del dispositivo/aplicación de su usuario (como la vulnerabilidad de los navegadores que usan extensiones no seguras o los usuarios que visitan sitios extraños con su navegador), entonces se pueden cifrar algunos datos enviados al usuario. Evite esto a menos que necesite específicamente realizar tal acto.
Si el canal de comunicación no es seguro, es posible que deba aplicar algún tipo de cifrado en el lado del cliente antes de enviar los valores al servidor.
HTTP significa Protocolo de transmisión de hipertexto. Su versión HTTPS ya está codificando los mensajes, significa HyperText Transmit Protocol Secure. Si ya está utilizando HTTPS como protocolo, entonces sus solicitudes del lado del cliente ya están encriptadas, por lo que un tercero que escuche las solicitudes que está enviando recibirá un galimatías de datos en los eventos de solicitud de envío y respuesta de recepción.
Si no se le solicitan más encriptaciones, debe usar HTTPS y la codificación unidireccional de contraseñas en su base de datos, porque este es el enfoque del mundo real en general. Si necesita realizar más medidas de seguridad porque tiene más información confidencial del usuario o alguna preocupación genuina sobre algún aspecto del proyecto, o simplemente un requisito, puede ampliar este enfoque con cualquier otra cosa que necesite. Pero HTTPS y la codificación unidireccional de la contraseña en el nivel de la base de datos son una necesidad absoluta.