it-swarm-es.com

Gestión de claves de cifrado PCI

(Divulgación completa: ya soy un participante activo aquí y en StackOverflow, pero por razones que espero sean obvias, elijo hacer esta pregunta en particular de forma anónima).

Actualmente trabajo para una pequeña tienda de software que produce software que se vende comercialmente para administrar negocios pequeños y medianos en un par de industrias bastante especializadas. Debido a que estas industrias están orientadas al cliente, una gran parte del software está relacionada con el almacenamiento y la gestión de la información del cliente. En particular, el almacenamiento (y seguridad) de la información de la tarjeta de crédito del cliente. Con eso, por supuesto, viene el cumplimiento de PCI.

Para resumir una historia larga, me quedan algunas preguntas sobre por qué ciertas cosas se hicieron de la manera en que se hicieron, y desafortunadamente no tengo muchos recursos en este momento. Esta es una muy pequeña tienda (informo directamente al propietario, al igual que el único otro empleado a tiempo completo), y el propietario no tiene una respuesta a estas preguntas, y el desarrollador anterior está ... err ... no disponible.

Problema 1: Reencriptación periódica

A partir de ahora, el software solicita al usuario que realice un reencriptado total de toda la información confidencial de la base de datos (básicamente números de tarjetas de crédito y contraseñas de usuario) si alguna de estas condiciones es cierta:

  1. Hay piezas de información confidencial NO encriptadas en la base de datos (agregadas a través de una declaración de base de datos manual en lugar de a través del objeto comercial, por ejemplo). Esto no debería suceder durante el uso ordinario del software.

  2. La clave actual ha estado en uso durante más de un período particular de tiempo. Creo que son 12 meses, pero no estoy seguro de eso. El punto aquí es que la clave "caduca".

Esta es mi primera incursión en el desarrollo de soluciones comerciales que trata con PCI, por lo que desafortunadamente no tengo educación sobre las prácticas involucradas. ¿Hay algún aspecto del cumplimiento de PCI que exige (o incluso recomienda) la actualización periódica de claves?

Este no es un gran problema para mí, aparte de que actualmente no tengo una buena explicación para dar a los usuarios finales si preguntan por qué se les solicita que lo ejecuten.

Pregunta 1: ¿Es el concepto de vencimiento de clave estándar y, de ser así, es simplemente estándar de la industria o un elemento de PCI?

Problema 2: Almacenamiento de claves

Aquí está mi problema real ... la clave de cifrado se almacena en la base de datos , simplemente ofuscada. La clave está acolchada a la izquierda y a la derecha con unos pocos bytes basura y algunos bits están girados, pero fundamentalmente no hay nada que impida a una persona emprendedora examinar nuestro código (con punto de fusión), determinando el patrón utilizado para convertir la clave almacenada en la clave real, luego usando esa tecla para ejecutar amok. Esto me parece una práctica horrible, pero quiero asegurarme de que no sea solo una de esas prácticas de "sonreír y soportar" a las que se han adherido las personas de esta industria. He desarrollado un enfoque alternativo que evitaría dicho ataque, pero solo estoy buscando un control de cordura aquí.

Pregunta 2: ¿Es este método de almacenamiento de claves, es decir, almacenar la clave en la base de datos utilizando un método de ofuscación que existe en el código del cliente, normal o loco?

Créeme, sé que el asesoramiento gratuito vale cada centavo que he pagado, nadie aquí es abogado (o al menos no ofrece asesoramiento legal), advertencia, etc., etc., pero estoy buscando para cualquier entrada que todos puedan proporcionar. ¡Gracias de antemano!

22
Unicorn Bob

Problema 1: Usted menciona el cifrado de contraseña. En primer lugar, ¿por qué se utilizan contraseñas en lugar de hashes de contraseñas salados? En cuanto a la rotación/caducidad de claves, he visto (y codificado) políticas como esa. Cuanto más tiempo se use una clave (y más veces se use), mayor será el riesgo de que se comprenda/descubra. Algunos sistemas, por ejemplo, Windows DPAPI expiran automáticamente las claves, los certificados SSL tienen fechas de vencimiento después de las cuales muchos sistemas no los usarán para cifrar nuevos datos, etc.

Problema 2: Sí, eso es malo. Increíblemente malo.

El cumplimiento de PCI especificaciones de auditoría para el PAN estado "Criptografía sólida, como Triple-DES de 128 bits o AES de 256 bits, con procesos y procedimientos de administración de claves asociados "

Se podría argumentar que la rotación es parte del proceso de gestión de claves, y almacenar la clave de forma segura lejos de los datos definitivamente es parte de un proceso de gestión de claves.

La sección 3.6.4 de las especificaciones de auditoría va más allá y establece

Cambios periódicos de clave

  • Según lo considere necesario y recomendado por la aplicación asociada (por ejemplo, reintroducción);
  • preferiblemente automáticamente al menos anualmente
9
blowdart

Si aún no lo ha hecho, le recomendaría mirar a través de documentos de PA-DSS y PCI-DSS , ya que tienen mucha información. con respecto a los requisitos. Si su software está certificado para PA-DSS, supongo que tendrá un QSA que debería tener información más específica sobre las expectativas para aprobar esos requisitos.

En términos de gestión de la encriptación de datos, si puede recomendaría usar características incorporadas de cualquier motor de base de datos que esté usando para obtener criptografía a nivel de aplicación. derecho puede ser muy complicado. Hay un buen documento sobre las opciones aquí .

7
Rory McCune

Problema # 1: Reencriptación periódica
(También conocido como re-keying). Sí, eso es normal, aunque no es obligatorio.
Específicamente, las claves que caducan son necesarias y requeridas por PCI. Al menos una vez al año, con la opción de hacerlo antes.
Cómo lidiar con eso es otro asunto ... Por ejemplo, una vez que la clave para 2010 caduca, ¿qué haces con todos los datos que se cifraron con esa clave?
Una solución es almacenar un historial de todas las claves y una "versión clave" para cada dato de manera que cuando lo descifre, sepa qué clave usar. (Por supuesto, encripta usando solo la nueva clave). Otra solución es la reescritura mencionada anteriormente: solo tiene una sola en cada punto (excepto durante la reescritura ...) y al expirar, descifre con la clave anterior y vuelva a encriptar con la nueva uno.

Problema # 2: almacenamiento de claves
Simplemente, es malo y hace que el cifrado (no del todo, pero casi) no tenga sentido.
Las técnicas adecuadas de gestión de claves en general, y PCI en particular, definen una política y procedimientos estrictos de gestión de claves. Algunos de ellos son técnicos: p. la Clave de cifrado (EK) debe cifrarse utilizando un cifrado seguro, p. DPAPI; parte de esto es de procedimiento: por ejemplo, el acceso a la clave de cifrado de clave (KEK) debe documentarse; parte es manual: p. conocimiento dividido/control dual del KEK.

Como dijo @Rory, hable con su PA QSA, y si no tiene uno, obtenga uno.

7
AviD

Estoy más interesado en la segunda pregunta. En algún momento tuve problemas para comprender las razones para almacenar la clave de cifrado tan cerca de los datos cifrados, a pesar de que los almacena cifrados con una clave de cifrado clave.

La única razón por la que puedo pensar es usar la infraestructura/capacidades de cifrado de la base de datos para realizar un cifrado/descifrado transparente. Sin embargo, esto es altamente específico del proveedor de la base de datos (como se indica en un documento vinculado por una publicación anterior también).

Aconsejaría mantener las claves en un almacenamiento diferente, protegido por contraseñas o con un dispositivo HSM.

4
Dan Corneanu

Problema 1: Me sorprende que solo haya pasado 12 meses. Nuestros servidores requieren nuevas claves/contraseñas cada 3 meses. Nada relacionado con la tarjeta de crédito, pero aún así. Supongo que es una práctica sensata, aunque no puedo decir con certeza si cumple con PCI, pero si no lo es, debería serlo.

Problema 2: Me parece muy cuerdo. Nunca almacenaría una clave, ni siquiera ofuscada, justo al lado de los datos. Eso es solo un desafío abierto: "Por favor, intenta hackearme".

1
Joris Meys