2009-10-17 10 views
46

¿Alguien ha obtenido experiencia práctica o una referencia para un esquema que implementa un esquema de gestión de claves que cumpliría con el estándar de seguridad PCI DSS?Cómo hacer correctamente la gestión de claves privadas

Existen obviamente bastantes 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 declaración 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.

Specificly Me interesan los requisitos de las secciones 3.5 y 3.6 de la norma PCI DSS.

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

3.6.a Verifique la existencia de procedimientos de administració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 Verifique que los procedimientos de administración de claves estén implementados para requerir cambios periódicos de claves al menos una vez al año.

que he tenido un vistazo a la NIST Cryptographic publications como el documento de requisitos de PCI DSS sugiere, pero aparte de notas recientes de un Cryptographic Key Management Workshop no parece ser mucho que hay en el camino de esquemas ejecutables reales o normas.

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

  1. Almacenar contraseñas + sales como una forma hashes para la autenticación,
  2. Elija un algoritmo fuerte symmteric para el cifrado de datos,
  3. evitar la necesidad para almacenar datos privados en primer lugar.
  4. evitar la necesidad de gestión de claves con otros mecanismos: seguridad física, seguridad de bases de datos, dragones y magos etc.

todas las 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 SO .Net Design pattern for storing and retrieving sensitive per user data diferente, pero todo se reduce a la administración de claves, de ahí esta pregunta más refinada.

+0

¿Curioso saber qué terminaste haciendo? He estado buscando esto pero no puedo encontrar una clave válida o código de muestra para NIST SP 800-22. Mi aplicación web está en php e incluso una implementación comercial me ayudaría. – 3zzy

+0

No terminé necesitando almacenar datos del titular de la tarjeta, pero aún necesitaba un nivel de encriptación de la aplicación. Para Windows he utilizado un certificado y una clave RSA almacenados en el almacén de certificados de Windows como la clave maestra para una clave de aplicación cifrada almacenada en un archivo de configuración. Para algunas bases de datos Linux MySQL he usado un LUKS donde el sistema de archivos solo se puede montar después de que la frase de contraseña se ingrese manualmente. – sipwiz

Respuesta

33

Estoy familiarizado con el dolor que está pasando. 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 el NIST Recommendations for Key Management que publicó Martin, y me sentí increíblemente frustrado por la falta de ejemplos concretos.

ANSI X9.17 - Financial Institution Key Management 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 un cuento ficticio, con un buen número de referencias técnicas relevantes. Chapter 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 recuadro 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!

+0

Afortunadamente no tengo que implementar el estándar PCI DSS, solo fue un ejemplo en mi pregunta para obtener respuestas con esquemas robustos de administración de claves. El truco parece ser cómo obtener la clave clave de cifrado en la aplicación. No quiero tener un servidor por separado, así que estoy pensando en obtener la aplicación para generar un aviso o poder enviar ssh a la aplicación para configurarlo. – sipwiz

+0

Suena bien. El recuadro por separado es solo un requisito si desea conservar el KEK, y tiene la intención de protegerlo de una situación en la que alguien toma una copia de toda la aplicación + datos (como literalmente alejarse de la caja) – PaulG

+6

The Electronic Money Mill no aparecen disponibles en el enlace original por más tiempo. FWIW, encontré una copia en PDF de la Wayback Machine: http://web.archive.org/web/20070712172633/http://www.msen.com/fievel/mmill/book.e1.pdf –

6

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

+0

Buen enlace, gracias, ese es el estándar de referencia que estaba buscando. Ahora, ¿dónde podría encontrar un ejemplo de cómo se implementan las piezas clave? – sipwiz

+0

@sipwiz: No tengo ni idea. Supongo que alguien te vendería estas partes clave por mucho dinero; Puede preguntarle a NIST si tienen una lista de compañías que lo harían. –

+0

He estado buscando en esto pero no puedo encontrar una clave válida o código de muestra para NIST SP 800-22. Mi aplicación web está en php e incluso una implementación comercial me ayudaría. – 3zzy

Cuestiones relacionadas