¿Dónde almaceno con seguridad la clave simétrica específica de la aplicación?

8

Estoy escribiendo una aplicación App1 . Esta aplicación utiliza la base de datos SQLite y planeo cifrarla utilizando AES256 . Para el cifrado simétrico necesito una clave, que necesito almacenar en algún lugar.

De una preguntas similares tengo algunas opciones, pero ninguna es aplicable en mi caso:

  1. Vincule la clave de cifrado al inicio de sesión de su administrador

    No confío en el usuario actualmente registrado. De hecho, quiero ocultar esto a cualquier persona, pero App1 .

  2. Vincule la clave de cifrado a su hardware.

    App1 se implementa en miles de máquinas, es posible que algunas no necesiten hardware.

  3. Escriba la clave de cifrado cuando inicie, guárdelo en la memoria.

    El usuario no debe tener acceso a la clave App1 .

  4. Almacena la clave en un servidor diferente.

    Se permite que la máquina esté fuera de línea, mientras que App1 se está ejecutando.

  5. Almacene la clave en otro lugar en el mismo servidor.

    Entonces se puede encontrar.

  6. Almacena la clave en la base de datos.

    Necesito asegurar la base de datos, que es un poco recursiva en mi caso.

La posible solución es almacenar la clave usando DPAPI de Windows , pero

  1. DPAPI se centra en proporcionar protección de datos > para usuarios & lt ;.

    Mientras que necesito proteger una aplicación. También necesito que App1 trabaje de diferentes usuarios en la misma máquina

  2. Puedo agregar entropía secundaria para restringir el acceso del usuario registrado a los datos.

    Sin embargo, necesito almacenar estos datos secretos en la máquina. ¿Cómo puedo proteger eso? ... Parece ser recursión nuevamente.

Pregunta: ¿dónde almaceno de forma segura la clave simétrica específica de la aplicación?

    
pregunta oleksii 14.03.2013 - 16:12
fuente

5 respuestas

5

Este es el problema mágico de DRM y la respuesta corta es que no hay una buena respuesta y si se te ocurre una, serás muy rico. Para que la aplicación pueda acceder a la clave, debe poder acceder a ella desde un estado sin cifrar y, sea lo que sea, un usuario lo suficientemente avanzado también puede hacerlo.

Puede usar un TPM (módulo de plataforma confiable) o HSM (módulo de seguridad de hardware) para almacenar la clave siempre que el usuario no tenga acceso administrativo en el sistema, pero si es un administrador, es probable que sea un administrador. capaz de obtener el TPM o HSM para renunciar a la clave. También sería difícil asegurarse de que solo el programa pueda lograr que el TPM o el HSM realicen operaciones, ya que la aplicación no tiene forma de autenticarse en el almacén de claves que el usuario no puede falsificar, pero al menos se mantendrá. La clave es segura.

Respuesta tan breve, no tiene suerte si los usuarios tienen admin en la casilla en la que se ejecutará la aplicación. Si solo puede darles cuentas limitadas, hay algunas opciones, pero aún así no son particularmente sólidas a menos que bloquee el sistema un poco.

    
respondido por el AJ Henderson 14.03.2013 - 16:32
fuente
1

HSM sería una buena manera de ir. Desafortunadamente, no conozco ninguna implementación de software libre. Ocasionalmente he considerado hacer mi propio HSM "suficientemente bueno / mucho mejor que nada". No estaría certificado por FIPS ni encapsulado en epoxi con sellos de seguridad, pero sería mejor que tener una llave solo en una caja.

Lo bueno de HSM es que puede auditar el acceso a la clave independientemente del host que solicite / use la clave. Si la clave se recuperó durante un tiempo en el que no hubo reinicio de la máquina o el proceso que necesita que se inicie, tendrá motivos para realizar una investigación y tal vez cambiar la clave.

Dado que su solución más probable será almacenar la clave en un lugar secreto en el servidor, recomiendo usar SELinux para evitar que la clave sea leída por todos los contextos de seguridad / usuarios que no sean los aprobados.

También recomiendo usar auditd para colocar reglas de auditoría especiales en el archivo que contiene la clave para que pueda realizar un seguimiento de cada vez que se lea el archivo. Se recomienda encarecidamente enviar los registros de auditoría fuera del host a un host de recopilación de registros. Esto le da algo de la capacidad de auditoría de tener un HSM.

    
respondido por el Tracy Reed 15.03.2013 - 01:17
fuente
0

¿Qué pasa con lo siguiente?

1) creando un par de claves públicas / privadas.

2) cifre su clave simétrica con la clave pública y guárdela en el código.

3) presente su clave privada en el inicio para que el programa la lea (copie / pegue en la línea de comandos).

La desventaja de esto es que el proceso es manual, y el "propietario" tiene que ser el encargado de iniciar el programa.

La ventaja es que le brinda seguridad, ya que la clave privada se guarda en la memoria local y, si se codifica correctamente, se puede eliminar una vez que se usa para descifrar (en java, use un byte [] y luego elimínelo fuera).

    
respondido por el will 13.02.2016 - 20:30
fuente
0

El almacén de claves de Windows Cryptographic Service Provider solo puede almacenar claves asimétricas. Por qué Microsoft lo diseñó de esta manera es una muy buena pregunta. Siendo así, su única solución es utilizar un HSM. Almacenarías tus claves de aplicación en un almacén de datos que creas y las cifrarás con una clave maestra, que se almacena en el HSM.

La mayoría de los HSM modernos admiten la sintaxis PKCS # 11 para llamadas a API. Los HSM están disponibles como tarjetas PCI y cajas independientes. También debes tener en cuenta tus resultados generales. crypto necesita antes de seleccionar la opción PCI o independiente.

También separaría las funciones de administración de HSM de los administradores del servidor y de la base de datos. Usted logra la separación de tareas, que es el principio básico de InfoSec cuando comienza a tratar con el cifrado de aplicaciones y los datos confidenciales.

Tenga en cuenta que el cifrado es una técnica, cualquiera puede cifrar llamando a las API de proveedor de servicios de cifrado. La criptografía es el proceso completo de generación de claves de manera segura, cifrado y descifrado de datos de manera segura, almacenamiento de claves de forma segura, prevención de accesos no autorizados y claves de rotación. La aplicación de cifrado al azar le da una falsa sensación de seguridad.

    
respondido por el PMRN 770 04.07.2018 - 16:59
fuente
0

Depende.

El requisito 2 elimina cualquier solución basada en hardware, incluido HSM.

No has descrito con precisión de qué tipo de usuarios quieres protegerlo. Usted escribió Quiero ocultar esto a cualquier persona . Si por alguien quiere decir también administradores del sistema, entonces no hay solución . Si te refieres a los usuarios con menos privilegios, no admins , entonces puede haber una solución. Puede crear un recurso (archivo, entrada de registro, ...) y almacenar su clave allí. Dé acceso a este recurso solo a la cuenta bajo la cual se ejecuta su aplicación. Entonces, tales usuarios (excepto los administradores) no podrán acceder a su clave. Pero los administradores aún podrán cambiar los permisos y obtener acceso a su clave.

    
respondido por el mentallurg 05.07.2018 - 00:01
fuente

Lea otras preguntas en las etiquetas