En realidad, tienes TRES problemas que has implicado en tu pregunta.
- El título habla de datos en reposo.
- En la pregunta, también habla sobre el control de acceso.
- Además, también tiene una pregunta sobre los datos en tránsito.
La pregunta puede tener una respuesta diferente si ya está utilizando un sistema DB y está introduciendo el cifrado en un sistema existente. Muchos de los sistemas DB ahora admiten dichas funciones de seguridad (ver más abajo).
Control de acceso y datos en tránsito
La mayoría de los sistemas de base de datos admiten el control de acceso desde el primer día (es casi un requisito mínimo). Sin embargo, cuando dice que tal o cual sistema necesita poder leerlo, es realmente una pregunta de control de acceso.
Del mismo modo, los datos en tránsito también son una cuestión de los protocolos utilizados, muchos de los cuales son compatibles con los sistemas de base de datos existentes. Por ejemplo, SQL Server admite SSL para las conexiones, al igual que MySQL . (Busque a otros, también podrían apoyarlo).
Cifrado en reposo
El tercero es el cifrado en reposo, que resuelve el problema de si una persona o sistema no autorizado obtuviera el archivo de base de datos real, qué es lo que ven. También viene un problema relacionado con la administración de claves, es decir, ¿por qué la persona que recibió su archivo DB no puede obtener las claves?
Durante el diseño, sería prudente suponer que un día las claves podrían ser comprometidas o robadas o, puramente desde el punto de vista de la agilidad criptográfica, tendrá que cambiar el algoritmo y las claves (por ejemplo, quien las haya usado). DES tuvo que mudarse eventualmente a AES). Aunque no puede ser 0 costo, tiene que haber un camino esp. Si su base de datos será distribuida, cambie el algoritmo o la clave.
Muchos DB ahora proporcionan cifrado en reposo junto con algunas soluciones de administración de claves. Por ejemplo, SQL Server ha admitido el cifrado desde 2008 . Además, el servidor SQL ha publicado una historia clave de la gestión del ciclo de vida también con aparentemente soporta claves simétricas y asimétricas (a través de certificados). Creo que SQL también admite el cifrado completo de la base de datos frente a los campos seleccionados a través de consultas (como en su caso para SSN).
Igualmente, MySQL también admite cifrado mediante funciones de consulta , que puede utilizar para su escenario SSN. También puede utilizar otros sistemas de bases de datos que ya puedan admitir el cifrado y usarlos.
Si utiliza un sistema que admite el cifrado incorporado, es probable que evite muchas de las dificultades asociadas a hacerlo por su cuenta, así como obtener un sistema compatible.
Base de datos de investigación
CryptDB es un sistema de base de datos desarrollado en el MIT que cifra los datos en reposo y también admite la ejecución de consultas sobre los datos cifrados. Si observa la página del sistema, enumera las organizaciones que realmente lo están utilizando.
Escribiendo su propia lógica de cifrado
Es probable que esto sea más lento y más desafiante para hacerlo bien, pero según su pregunta, parece que está considerando esto como un problema. Si estuviera en una situación similar, definitivamente lo evitaría e iría con uno de los sistemas de base de datos existentes.
Hay muchos problemas. Por ejemplo, cuando encripta los datos, la salida es algo aleatoria, por lo que al cifrar los mismos datos con la misma clave generalmente no se obtendrá el mismo texto cifrado. Puede ser un poco difícil y es posible que tenga que disminuir la entropía (por ejemplo, mediante el uso de los mismos IV o sales), lo que podría afectar la seguridad de su sistema. Y con algo tan simple como almacenar hashes (o incluso HMAC con una sola clave), si alguien obtiene los archivos de la base de datos, puede ejecutar la fuerza bruta para recuperar los datos en cuestión de semanas, si no de días. Esto es especialmente cierto en campos como el SSN, a menos que pasara tiempo y siempre requiera múltiples campos para una consulta (por ejemplo, SSN y DOB y las primeras tres letras del apellido, o tales combinaciones), y solo almacene esos como hash pero ninguno de ellos. estos por separado Esto aumentará la entropía y dificultará que alguien encuentre los valores reales donde obtendría su archivo DB.
Aparte de eso, uno tiene que resolver los problemas clave de la gestión del ciclo de vida.
EDITAR: En realidad es un problema común y, una vez que evalué los datos de encriptación, cuando escribí la respuesta inicial, no lo incluí aquí. Desde entonces, he actualizado mi respuesta para incluir eso, así como para aclarar los problemas de control de acceso, conexión segura y datos en reposo.