¿Cómo cifrar o almacenar datos para que solo un grupo de procesos pueda compartirlos en Windows?

1

Estoy escribiendo una aplicación T1 que utiliza la base de datos SQLite para almacenar algunos datos confidenciales y estoy intentando cifrarla de forma segura. El problema al que me enfrento es que no quiero que mi clave simétrica se almacene en la memoria, ya que en ese caso, cualquier otro proceso puede tomar una instantánea de la memoria y acceder a mis claves. He mirado muchas posibles preguntas similares:

CryptProtectMemory / CryptProtectdata

Pero el problema con esto es que tiene dos opciones diferentes -

CRYPTPROTECTMEMORY_SAME_PROCESS or CRYPTPROTECTMEMORY_CROSS_PROCESS

El problema con CRYPTPROTECTMEMORY_SAME_PROCESS es que restringe el acceso a un proceso en particular (y mi aplicación tiene un proceso de IU separado que también podría acceder a la base de datos) y el problema con CRYPTPROTECTMEMORY_CROSS_PROCESS es que permite que todos los procesos del usuario registrado para acceder a estos datos, que tipo de derrota el propósito

Entonces, lo que quiero es una API donde pueda especificar solo un grupo de procesos que pueden acceder a mis datos / clave

Miré opciones similares pero nada es aplicable en mi caso:

  1. Usar DPAPI : esto vincula la clave de cifrado al inicio de sesión de su administrador, pero el problema es que No confío en el usuario actualmente registrado. De hecho, quiero ocultar esto a cualquier persona que no sea T1 y mi proceso de UI. Entiendo que puedo agregar entropía secundaria para restringir el acceso del usuario registrado a la información. Sin embargo, necesito almacenar estos datos secretos en la máquina. ¿Cómo puedo proteger eso? ... Parece ser un problema recursivo.
  2. Hardware externo o almacenamiento de la clave en un servidor remoto: como la aplicación se implementará en muchos puntos finales comerciales (que pueden no tener el hardware específico) y también debe funcionar en modo fuera de línea (es posible que no se pueda acceder al servidor) .
  3. Almacene la clave en la base de datos. Necesito proteger la base de datos, lo cual es un poco recursivo en mi caso nuevamente.
pregunta seaborg 15.06.2015 - 22:35
fuente

1 respuesta

1

Si su modelo de amenaza significa que su código debe ejecutarse en una computadora en la que no puede confiar, no hay manera de proteger sus datos: simplemente no es posible.

No importa lo que haga, la clave de descifrado DEBE estar presente en la memoria del sistema que realiza el descifrado para poder acceder a los datos. Esto significa que la única forma posible de proteger la clave es mover ese procesamiento en un hardware confiable. Tenga en cuenta que esto no protege realmente los datos: tan pronto como llega al sistema que no es de confianza, puede verse comprometido. Solo protege la clave de cifrado.

Tendrás que cambiar tu modelo de amenaza aceptando la posible pérdida y simplemente haciendo que sea más difícil acceder a esos datos.

    
respondido por el Stephane 16.06.2015 - 08:58
fuente

Lea otras preguntas en las etiquetas