Recientemente heredé un sistema de almacenamiento de claves integrado en la empresa. La empresa almacena los datos de la tarjeta de crédito en dos servidores de bases de datos que están encriptados AES. Las claves residen en un sistema separado que se encuentra en su propia DMZ. Cuando un servidor web necesita cifrar algunos datos, se llama al servidor de claves a través de https y solicita una clave. Devuelve una clave y un número de serie codificado. El servidor de aplicaciones almacena la información cifrada y el número de serie y luego descarta la clave. Cuando es necesario descifrar los datos, el número de serie se envía al servidor de claves que devuelve la clave que se utilizó para ese registro.
El sujeto que desarrolló esto no usó grupos de claves. Cada clave es un valor aleatorio único. La base de datos de claves se cifra mediante una clave generada por 2 contraseñas proporcionadas por 2 custodios. Por lo que estoy viendo, incluso si obtuviera las llaves, tendría que poder decodificar los números de serie para poder usarlas, y luego cada tecla solo sería válida para un registro. Incluso escribió una extensión php en c que tiene las funciones de codificación / decodificación.
Este parece ser un diseño bastante bueno. Cualquier persona tiene experiencia con este tipo de cosas que puedan opinar sobre este método y cualquier posible agujero o mejora.