Pregunta:
¿Cuál es una buena estrategia de cifrado de datos para un recurso compartido (texto)?
dwkd
2016-12-16 02:06:22 UTC
view on stackexchange narkive permalink

Tengo un caso de uso en el que necesito cifrar un fragmento de información PII en una base de datos, que luego pueden descifrar y acceder a múltiples roles de usuario en una aplicación (por ejemplo, el usuario al que pertenece, servicio al cliente, ingeniería, etc. ..).

¿Cuál es una estrategia estándar de la industria para este tipo de cosas?

ACTUALIZACIÓN: LEA ANTES DE PUBLICAR : además de publicando comentarios sobre mi idea a continuación (que realmente aprecio), por favor también proponga una estrategia. Creo que sería muy útil para cualquiera que intente cifrar cualquier recurso compartido hoy en día.

Esto es lo que tengo en mente en este momento y que, con suerte, describirá mejor a lo que me refiero:

Divulgación completa : la información a continuación también está destinada a obtener una opinión o una revisión por pares sobre mi estrategia actual que se me ocurrió

Como parte de una estrategia de defensa en capas, mi criterio es tener al menos 3 factores para la estrategia de cifrado / descifrado de esa manera, si 2 piezas están comprometidas, los datos aún no se pueden descifrar.

Los 3 factores: el software que accede a la información, una base de datos con datos cifrados (DB1), una base de datos con las claves de cifrado (DB2).

La estrategia de cifrado:

  1. Los datos se ingresan en el software
  2. Una, digamos, se genera una clave de 128 bits
  3. Los datos se cifran con esa clave
  4. Los datos cifrados se almacenan en la base de datos (presentados como DB1 en los 3 factores anteriores)
  5. La clave 128b g ets cifrados con una clave maestra codificada en el software
  6. La clave 128b cifrada se almacena en la otra base de datos (presentada como DB2 en los 3 factores anteriores)

La estrategia de descifrado es la inversa.

El punto es que el software tiene la clave maestra (factor 1), DB1 tiene los datos cifrados (factor 2) y DB2 tiene las claves cifradas (yay para la repetición de palabras ... también Factor 3) que solo se puede descifrar con la clave maestra.

En mi cabeza, si alguno de estos se expone, es información inútil que no revela la PII cifrada.

Por cierto, esto asume algoritmos de cifrado sólidos como AES (... lo más probable es que AES solo dado que DES, 3DES y Blowfish están en desuso).

Actualización me doy cuenta de que no me expuse claramente en el punto en el que estos 3 factores cambiarán. Los 3 estarán en diferentes entornos de alojamiento en 3 servidores diferentes. Estamos hablando de una estrategia a gran escala (que también podría funcionar a pequeña escala) donde las bases de datos son entidades de hardware inherentemente separadas. En mi mente, esa era la suposición para empezar.

Actualización 2 Muchos de los comentarios aquí con razón sugieren que el software es el talón de aquile aquí . Este también es mi gran canandrum. No puedo pensar en ninguna estrategia de software en la que, si el software está comprometido, los datos no corren riesgo, dado que el software siempre tiene una conexión abierta a la base de datos y contiene toda la lógica empresarial para ver / manejar esos datos. Incluso al implementar mydiamo en el software, eso significa que los datos se verán comprometidos si alguien toma el control del software.

Suena muy similar a la tecnología Always Encrypted de SQL Server 2016.Es posible que desee verificarlo, si no es por una solución, entonces por un diseño: https://msdn.microsoft.com/en-us/library/mt163865.aspx
Seis respuestas:
DepressedDaniel
2016-12-16 06:39:14 UTC
view on stackexchange narkive permalink

Alguien que ingrese a su servidor se llevará el software y las bases de datos. Teniendo todos sus factores, podrán ejecutar la estrategia de descifrado a la inversa para recuperar toda la PII.

En la autenticación multifactor, los factores adicionales no cuentan si serían robados en el al mismo tiempo que un factor existente. Por ejemplo, un token de hardware es un factor diferente de una contraseña, porque un registrador de claves (la forma típica de robar la contraseña), al ser software, no podría robar el token de hardware al mismo tiempo.

Tal vez no lo hice claro, cada factor está alojado en un env / server diferente ... no todos en el mismo servidor.Estamos hablando de un diseño de infraestructura a gran escala aquí.
Bueno, si hablamos de infraestructura a gran escala, estoy seguro de que funcionará.
Ok, espero que no sea sarcasmo y realmente agradezco la entrada y señalar eso.¿Alguna sugerencia sobre un enfoque diferente?Muchas gracias
Tu respuesta me intriga cada vez que la leo ... y ahora la leo 10 veces ... Me hubiera gustado que me hubieras proporcionado una forma de diseñar el lado del software que evitaría lo que estás diciendo.No puedo pensar en ninguna estrategia de software en la que, si el software se ve comprometido, los datos no corren riesgo, dado que el software siempre tiene una conexión abierta a la base de datos ... este es mi gran canal.Incluso al implementar mydiamo en el software, eso significa que se verá comprometido si alguien toma el control del software.Literalmente no veo ninguna diferencia
Serge Ballesta
2016-12-20 23:20:43 UTC
view on stackexchange narkive permalink

Si he entendido correctamente su pregunta, está intentando proteger los datos contra un atacante que podría tomar un control parcial de su centro de datos. No olvide que una vez que una parte de un centro de datos se ve comprometida, se asume que la zona completa accesible administrativamente desde allí está comprometida. Eso significa que no es suficiente segregar la información en 3 servidores diferentes, sino que 3 servidores deben estar en 3 zonas diferentes con un cortafuegos estricto entre ellos para garantizar que solo se pueda intercambiar la información requerida. O al menos, la base de datos segura y la base de datos normal no deberían estar en la misma zona.

En particular, la aplicación solo debería poder obtener la clave de cifrado / descifrado a través de un servicio web y presentando la credenciales que demuestren que lo hace en nombre de un usuario autorizado. Eso significa que tendrá que configurar un sólido sistema de autenticación y autorización y examinar a fondo todas las implicaciones de seguridad. Y también debe configurar auditorías de código para controlar que la aplicación no mantenga esa clave más tiempo del requerido

Lo que quiero decir es que es necesario usar un sistema de cifrado fuerte, pero es solo la parte visible de lo que se debe hacer para aumentar la seguridad. La parte esencial no será solo técnica sino que implicará la organización y una definición precisa de qué privilegios se otorgan a quién y qué servidor puede comunicarse con qué otro. También debe considerar cómo se realizan las copias de seguridad porque son una parte esencial en un sistema seguro porque deben ser sólidas pero no demasiado accesibles. En mi humilde opinión, también debe analizar el valor de los datos y los riesgos a los que están expuestos. Porque configurar un sistema seguro no vendrá sin costo.

TL / DR: no hay fallas evidentes en lo que describe, pero lo que falta es la definición de la segregación entre las diferentes partes, porque el diablo se esconderá en tales detalles.

Esta situación que estoy describiendo es muy común en el campo médico donde, por ejemplo, desea encriptar el registro médico de alguien pero al mismo tiempo necesita dar acceso a ese registro a otras personas, como médicos consultores, enfermeras, etc.
Rory Alsop
2016-12-20 21:47:53 UTC
view on stackexchange narkive permalink

Sé que ha mencionado que tiene las dos bases de datos segregadas, sin embargo, obviamente se comunican de alguna manera, por lo que las consideraría a ambas en riesgo si su red se ve comprometida, lo que significa que podrían considerarse como un solo factor.

Tener un token físico separado sigue siendo una buena idea, obviamente, pero mi mensaje es que usar 2 bases de datos puede no ser mucho mejor que usar 1.

Gracias por la respuesta.También estoy buscando ejemplos sobre estrategias reales, ya que no he podido encontrar ningún 'estándar de la industria' en este
Sunil Agrawal
2016-12-20 23:44:46 UTC
view on stackexchange narkive permalink

Quizás una forma de mejorar la seguridad no es codificar la 'clave maestra' en el software, sino recuperarla en tiempo de ejecución desde otro servidor. Al menos de esa manera, el atacante no puede simplemente irse con el software y las bases de datos, sino que tiene que crear un volcado de memoria para obtener la clave maestra o incluso atacar el servidor de claves.

NA AE
2016-12-21 07:52:58 UTC
view on stackexchange narkive permalink

Si lo que está haciendo es un proyecto a gran escala como mencionó, mi recomendación es optar por soluciones comerciales que aborden precisamente eso.

Ya conoce el consejo habitual: no haga el suyo cuando se trata de criptografía / cifrado. Hay muchas formas en las que su estrategia puede salir mal. Es mejor comprobar una solución probada y hay algunas que creo que se ajustan exactamente a sus requisitos.

En pocas palabras, desea una solución que tenga cifrado a nivel de columna, que proporcione diferentes claves de cifrado / descifrado para cada columna y le da la capacidad de definir políticas de control de acceso por columna.

La solución también debería ayudarlo a almacenar y administrar sus claves en un servidor separado (preferiblemente HSM) y garantizar una transmisión segura de las claves entre los servidores.

Como divulgación, he trabajado como consultor de cifrado de bases de datos durante bastante tiempo, pero nuevamente esto me pone en una posición para darle un "He-estado-allí-hecho -eso "consejo.

He consultado a muchos clientes que tienen requisitos de seguridad y rendimiento muy estrictos. No estoy seguro de qué DBMS está utilizando, pero si está utilizando una base de datos de código abierto, puede encontrar mydiamo para tener todo lo que está buscando. Si utiliza DBMS comercial, esta empresa o esta tienen soluciones bastante probadas.

Acabo de echar un vistazo a los sitios vinculados.Estoy bastante seguro de que todos utilizan una solución * técnica * excelente (y fácil de usar).Pero no hay que abordar la cuestión organizativa si bien es fundamental en seguridad porque va mucho más allá de una solución llave en mano ...
... Si todo lo que se necesita es el cumplimiento de una norma, o una protección en caso de problema (utilicé una solución seria), continúe.Si realmente necesita proteger los datos, debe abordar la pregunta ** organizativa **, ya sea que utilice una solución comercial o no.
mydiamo se ve muy bien y sin duda se adapta a mis necesidades.Dejando la parte organizativa para un tema diferente, esperaba, en el espíritu de stackoverflow, tener una respuesta con una estrategia real a la que cualquiera pueda hacer referencia en el futuro.
Peteris
2016-12-21 08:11:25 UTC
view on stackexchange narkive permalink

HSM

Una práctica bastante común en tales contextos es hacer que la "clave maestra" de su escenario resida en un módulo de seguridad de hardware, para que nunca lo abandone y pueda descifrar los datos específicos claves cuando sea necesario.

Como se describe actualmente, su software parece ser un punto único de falla: un exploit en su aplicación tendría acceso a la clave maestra y también probablemente acceso de lectura a ambas bases de datos. Si realmente desea una 'defensa en capas', entonces deberá asegurarse de que el sistema que tiene acceso a todos los datos no pueda descifrarlos y que el sistema que puede descifrar los datos no pueda acceder a todos los datos.

¿Se encuentran comúnmente los HSM y se pueden solicitar en el mundo de la nube?solo me pregunto en caso de que uno no tenga acceso al centro de datos
@dwkd No creo que un HSM sea factible en el mundo de la nube, ya que toda su razón de existencia depende en gran medida de tener control exclusivo sobre una pieza segura de hardware.Esa seguridad se logra en parte mediante un diseño que hace que ciertas operaciones sensibles sean imposibles de realizar de forma remota, se han realizado en el sitio insertando físicamente ciertos componentes clave (mantenidos fuera del sitio por personas separadas, etc., etc.), con algún sistema en la nube queimplementa exactamente la misma API no le proporcionaría una reducción de riesgo comparable;puede realizar parte de esas funciones, pero es diferente.


Esta pregunta y respuesta fue traducida automáticamente del idioma inglés.El contenido original está disponible en stackexchange, a quien agradecemos la licencia cc by-sa 3.0 bajo la que se distribuye.
Loading...