Conceptos erróneos sobre KEK y DEK
El KEK no está destinado a ser almacenado, solo el eDEK (DEK encriptado) es. KEK se ingresa una vez y se usa para descifrar el eDEK. El DEK se guarda en la memoria por cualquier proceso que lo requiera, ya que es fundamentalmente necesario que una clave esté presente en la memoria para poder utilizarla para el descifrado. El KEK debe mantenerse en la memoria solo el tiempo suficiente para descifrar el eDEK, luego debe sobrescribirse (para evitar que permanezca en la memoria liberada). Como la administración de claves en la memoria puede ser difícil, con muchas maneras de arruinar las cosas, recomiendo encarecidamente utilizar el software existente diseñado para este fin. Si no sabe cómo y por qué debería bloquear memoria que contendrá material clave , o cómo garantizar que las llamadas memset
no sean optimizado al borrar material clave de la memoria, no debe implementar sistemas de cifrado usted mismo. Utilice una solución existente, o al menos una biblioteca criptográfica de alto nivel y fácil de usar.
Memoria compartida
Con respecto a su declaración sobre la memoria compartida, eso depende de lo que quiere decir con memoria compartida. memoria compartida POSIX (shmem) es un método para almacenar objetos en la memoria que cualquier proceso con Los permisos adecuados pueden acceder. Es similar a su idea de almacenar datos en tmpfs, excepto que la memoria compartida POSIX utiliza una API especial para acceder a los objetos. En ese caso, almacenar algo sensible para un usuario determinado en la memoria compartida puede no ser una gran idea.
La otra definición de memoria compartida es la memoria presente en el espacio de direcciones de más de un proceso. Un proceso debe elegir compartir una determinada región de memoria con otro proceso, pasando MAP_SHARED
para mmap
al solicitar memoria desde el kernel. Por lo general, esto se realiza mediante un proceso principal que luego se divide en dos procesos que comparten una región específica de la memoria. En este caso, la memoria solo es compartida por procesos que lo permiten explícitamente.
Modelado de amenazas
Es necesario definir su modelo de amenaza. ¿De quién estás protegiendo estos datos? ¿Dónde están posicionados en relación a los datos? ¿Qué nivel de acceso tienen? En general, un sistema operativo ya proporcionará controles de acceso a nivel de software, lo que hará que el cifrado sea una herramienta incorrecta para evitar que un proceso malintencionado acceda a los datos que se utilizan en otros lugares. El almacenamiento encriptado está diseñado para brindar seguridad data-at-rest , protegiendo los datos en el disco duro conduzca, en caso de ser robado o de lo contrario caer en las manos equivocadas. Para este modelo de amenaza en el que se pretende utilizar el cifrado, no es necesario que proporcione la clave para más procesos de los que se necesitan para leer la base de datos. Específicamente, debe permitir que el software de la base de datos realice el cifrado y el descifrado, permitiendo que cualquier persona con permiso para conectarse al servidor de la base de datos pueda leer el contenido, sujeto a los permisos de nivel de software.