Almacenamiento de datos confidenciales: mejores prácticas

8

Recientemente comencé a trabajar en un proyecto personal donde me estaba conectando a una base de datos usando Java. Esto me hizo pensar. Tengo que proporcionar la información de inicio de sesión para una cuenta de base de datos en el servidor DB para poder acceder a la base de datos. Pero si lo codifico, entonces sería posible que alguien descompile el programa y extraiga esa información de inicio de sesión. Si lo guardo en un archivo de configuración externo, entonces solo existe el mismo problema, sería aún más fácil para ellos obtenerlo. Podría encriptar los datos antes de almacenarlos en cualquier lugar, pero parece que tampoco es seguro y no soy un experto en encriptación de ninguna manera. ¿Cuáles son algunas de las mejores prácticas para almacenar datos confidenciales de configuración para un programa?

Kenneth
fuente

Respuestas:

10

Varias opciones aquí:

  • Ejecute el programa Java bajo un usuario de dominio que tenga acceso a la base de datos (o, alternativamente, almacene la información de la contraseña en un archivo al que solo pueda acceder el usuario que ejecuta su programa).

  • use un almacén de claves, con restricciones tanto para el usuario como para el software que usará la clave (como lo que proporciona Mac OS X)

  • use una solución de cifrado estándar, con una interfaz que requerirá la entrada de la contraseña de cifrado al inicio del programa (de modo que el administrador que inicia el programa solo conoce la contraseña)

  • requieren que se ingrese el uid / contraseña de la base de datos al inicio del programa

blueberryfields
fuente
3

La primera regla del almacenamiento de datos confidenciales es no. En este caso, probablemente debería hacer lo que hace casi cualquier sistema de autenticación: otorgar a cada usuario sus propias credenciales para que no tenga este problema. O problemas como "oh, snap, la cuenta de la base de datos se vio comprometida. Ahora tengo que descubrir cómo volver a emitir esta contraseña a cada usuario. Incluyendo las que no conozco".

Wyatt Barnett
fuente
2

No hay forma de evitar que cualquier persona que reciba su solicitud conozca el nombre de usuario y la contraseña. Si eso es inaceptable, tendrá que colocar algún software entre la aplicación y la base de datos, como un servicio web.

Kevin Cline
fuente
1

Por lo general, desea probar y cifrar ese tipo de información. Por ejemplo, la práctica general con el desarrollo web en .NET es cifrar la sección de web.config que contiene las cadenas de conexión. Lo otro que puede hacer es usar cuentas de dominio / windows / os en lugar de conexiones directas. Esto evita que codifique la contraseña en su aplicación o archivos de configuración. En su lugar, administra sus conexiones autorizando al usuario de la aplicación (o la cuenta con la que se ejecuta).

Ken Henderson
fuente
-2

Debe cifrar su aplicación para que no se pueda descompilar. No conozco las herramientas Java, pero existen con seguridad.

Por cierto, ¡siempre debe cifrar sus aplicaciones por seguridad! Entonces puede codificarlo si lo desea.

EDITAR: después del comentario, precisaré que PUEDES cifrar tu aplicación, solo necesitas tener una herramienta (tipo de descifrador 'sobre la marcha') en la máquina del usuario para ejecutar la aplicación cifrada. Esto es lo que usé con Foxpro y probablemente también exista para otros idiomas. Quizás, sin embargo, ese tipo de herramientas no se usa en tecnología más reciente, pero definitivamente hace que mis aplicaciones sean imposibles de descompilar mientras se ejecutan bien.

EDIT 2: Algunos productos que encontré para el cifrado .NET: http://www.hallogram.com/ezcryptonet/index.html

Mathieu
fuente
44
ofuscación! = cifrado. Lo que recomendó no es técnicamente factible ni existe para ningún software. Los programas que están encriptados para que no puedan descompilarse tampoco pueden ejecutarse. Los programas que se pueden ejecutar siempre se pueden descompilar
blueberryfields
2
¿Qué impide que el usuario recopile la salida del desencriptador o modifique el desencriptador?
Kevin Cline
Mi redacción aquí fue incorrecta, no descifra, sino que interpreta. Sobre la modificación del desencriptador, bueno, supongo que tal vez podría ser una posibilidad. Mi conocimiento del tema no está lo suficientemente extendido como para responder sobre eso.
Mathieu