Me gustaría otorgar acceso a una clave secreta compartida a un proceso de tipo demonio (es decir, sin interacción del usuario) para que pueda acceder a un archivo de datos encriptado compartido. Las aplicaciones de usuario que acceden a los mismos datos cifrados almacenan la clave secreta compartida en el llavero del sistema operativo del usuario (por ejemplo, el llavero OS X o el llavero de Gnome, etc.). El llavero del sistema operativo, a su vez, protege la clave secreta con la contraseña de inicio de sesión del usuario (u otra específica del usuario).
El cifrado aquí se utiliza para proteger los datos mientras transita las redes públicas entre el servidor y el cliente. Los datos en cuestión son datos en bruto de experimentos científicos. Principalmente no valioso (es decir, es poco probable que atraiga a un atacante para romper especulativamente el cifrado y navegar por los datos), pero algunos de ellos son potencialmente muy valiosos y los usuarios desean mantener sus detalles privados hasta que decidan compartirlos públicamente (es decir, protegerlos). de observadores casuales en la red). El valor de los datos es difícil de determinar sin un análisis científico, por lo que observar la actividad de los usuarios (incluidas las consultas) a medida que transitan el cable sin cifrar proporcionaría algunas pistas a los observadores sobre el valor de un dato.
El proceso daemon es un servidor de consultas para el sistema. Lee los datos compartidos, procesa una consulta y devuelve los identificadores de un conjunto de resultados al cliente, quien luego extrae los datos identificados del almacén compartido.
Permitimos la sincronización de los datos cifrados a las estaciones de trabajo / computadoras portátiles locales de los usuarios, por lo que el cifrado de los datos en el disco es a lo sumo una molestia para un atacante determinado. También permitimos a los usuarios ejecutar el servidor de consultas localmente (aún iniciado por init.d / launchd), por lo que quiero hacer todo lo posible para proteger la clave secreta almacenada con el daemon. El mayor riesgo es que un determinado usuario malintencionado pueda descubrir la clave secreta del demonio en su sistema. La exposición de esa clave nos obligaría a cambiar la clave, actualizar todos los usuarios y luego volver a cifrar la base de datos.
¿Cuál es la mejor manera de almacenar la clave secreta compartida para el proceso del daemon? Puedo poner la clave en el disco y cifrar el archivo en el disco, pero el proceso del daemon debe tener la clave para descifrar ese archivo. Esto parece equivalente a solo tener la clave secreta compartida para los datos cifrados originales. Mi ingenuo enfoque sería almacenar la clave en el binario de la aplicación, pero no puedo imaginar que sea la mejor opción. ¿Algún consejo?