Cómo hacer correctamente la gestión de claves privadas

¿Alguien ha obtenido experiencia práctica o una referencia para un esquema que implementa un esquema de administración de claves que cumpliría con el estándar de seguridad PCI DSS ?

Obviamente, hay algunas implementaciones dado el número de empresas que cumplen con PCI DSS, pero tratar de encontrar detalles de ellas es difícil. Cuando se trata de almacenar datos privados, la discusión normalmente se detiene en qué algoritmo de encriptación usar. Después de eso, normalmente hay una statement sobre el almacenamiento apropiado de la clave privada, pero no hay discusión sobre formas prácticas de hacerlo o cosas como cambiar periódicamente la clave o proporcionar la clave para las aplicaciones, etc.

Específicamente, me interesan los requisitos de las secciones 3.5 y 3.6 del estándar PCI DSS.

3.5.2 Guarde las claves criptográficas de forma segura en la menor cantidad posible de ubicaciones y formularios.

3.6.a Verificar la existencia de procedimientos de gestión de claves para las claves utilizadas para el cifrado de los datos del titular de la tarjeta. Nota: Numerosos estándares de la industria para la gestión de claves están disponibles en varios recursos, incluido NIST, que se puede encontrar en http://csrc.nist.gov .

3.6.4 Verificar que los procedimientos de administración de claves se implementen para requerir cambios de clave periódicos al menos una vez al año.

He echado un vistazo a las publicaciones criptográficas de NIST como lo sugiere el documento de requisitos de PCI DSS, pero aparte de las notas recientes de un Taller de gestión de claves criptográficas , no parece haber mucho en el camino de esquemas o estándares implementables reales.

En cuanto a lo que estoy tratando de hacer, no es así:

  1. Almacenar contraseñas + sales como hash de una forma para autenticación,
  2. Elija un algoritmo simbólico fuerte para el cifrado de datos,
  3. Evite la necesidad de almacenar datos privados en primer lugar.
  4. Evite la necesidad de administrar claves con otros mecanismos: seguridad física, seguridad de la base de datos, dragones y asistentes, etc.

Todos los cuales son preocupaciones válidas, pero en este caso no son la respuesta. Las tuercas y los pernos de mis requisitos están en una pregunta de SO diferente. Patrón de diseño de red para almacenar y recuperar datos confidenciales por usuario, pero todo se reduce a la administración de claves, de ahí esta pregunta más refinada.

Estoy familiarizado con el dolor que estás atravesando. Nos costó actualizar un antiguo sistema de EFT para cumplir con PCI. La gestión clave fue ciertamente (desde el punto de vista de mi software) la parte más desafiante.

Creo que también tropecé con las Recomendaciones de NIST para Gestión Clave que Martin publicó, y me sentí increíblemente frustrado por la falta de ejemplos concretos.

ANSI X9.17 – Administración de claves de instituciones financieras es probablemente la más relevante para sus necesidades, con PCI-DSS. Suerte, leyéndolo, el documento es una colección masiva de TLA que sé que ciertamente tuve problemas para leer. (X9.17 se actualiza anualmente, y la última versión es ahora: NIST SP 800-57 Pt. 1 Rev. 4 )

Cuando la frustración se convirtió en desesperación, tropecé con The Electronic Money Mill, que es una historia ficticia, con un buen número de referencias técnicas relevantes. El Capítulo 17 discute X9.17 y puede ayudar con la comprensión.

De todo este material de referencia diseñé un sistema de gestión de claves con el que nuestro auditor estaba satisfecho. Los documentos de diseño son bastante extensos, pero en resumen, la idea es que tenga su clave de cifrado de datos protegida por una clave de cifrado de clave, y la clave de cifrado de clave esté almacenada en un recuadro físicamente separado, protegido por una clave maestra.

Mi implementación consistía en tener una aplicación de Servidor de claves ejecutándose en un cuadro de Windows. Esta aplicación requirió la entrada de dos ‘claves maestras de servidor de claves’ separadas antes de que pudiera ser utilizada. Estas claves solo serían conocidas por los administradores del servidor de claves. Estas claves se combinan para generar la clave maestra, que se almacena solo en la memoria protegida mientras la aplicación se está ejecutando. La aplicación puede generar automáticamente Claves de cifrado de clave criptográficamente fuertes, que se almacenan en forma cifrada con la clave maestra.

Las aplicaciones que necesitan cifrado solicitarán una Clave de cifrado de clave del Servidor de claves. La aplicación utiliza el KEK para cifrar / descifrar la Clave de cifrado de datos, que se puede almacenar de forma segura con los datos de la aplicación.

Buena suerte. ¡Espero que también lo encuentres como un desafío interesante!

¿Has visto NIST SP 800-57 , Recomendación para la administración de claves?