Soy un desarrollador de software, considerando escribir un sistema personalizado para el almacenamiento de números de tarjetas de crédito. Nuestra intención es ser totalmente compatible con la industria de tarjetas de pago (PCI). Estoy trabajando con un propietario de una pequeña empresa que alquila cosas y quisiera mantener un número de tarjeta de crédito en el archivo para garantizar la devolución del artículo alquilado. Si un cliente no devuelve un artículo a tiempo, se les cobra por su contrato de alquiler firmado. La información de la tarjeta de crédito se purga en la devolución de la mercancía.
Somos conscientes de que algunos procesadores de tarjetas de crédito, además del procesamiento normal de tarjetas de crédito que utilizamos para los pagos de alquiler, también ofrecen un servicio para ALMACENAMIENTO de tarjetas de crédito. Almacenan los números de la tarjeta de crédito y le proporcionan un token que representa esa tarjeta en el almacenamiento. (por ejemplo, Paypal, Stripe) El propietario de este negocio ya tiene un compromiso con un procesador de tarjetas de crédito que NO ofrece ese servicio. Cambiar el procesador de la tarjeta de crédito a Paypal o Stripe no parece ser una opción. También investigamos los servicios de almacenamiento de tarjetas de crédito (utilizando tokens) y tampoco funcionará. $ 1300 / mes para almacenar 500 tarjetas es un poco demasiado caro para esta pequeña empresa.
He visto algunas publicaciones clave aquí:
- Administración de claves de cifrado PCI
- Administración de clave de cifrado de la aplicación web
- Almacenar información confidencial de forma segura
Puedo ver que los tres principales proveedores de almacenamiento en la nube (servicios web de Amazon, Microsoft Azure y Google Cloud) son compatibles con PCI DSS como infraestructura.
Estoy considerando seriamente el uso de uno de esos servicios como repositorio para la información de la tarjeta de crédito. Obviamente queremos ser totalmente compatibles con PCI DSS. Sé cómo escribir aplicaciones y servidores. Sé cómo agregar un sistema de inicio de sesión robusto. Sé cómo usar bibliotecas de cifrado publicadas , para el cifrado del lado del servidor. Sé cómo crear un MongoDB en un servidor separado alojado en uno de esos servicios en la nube. Sé cómo comunicarme con el servidor a través de https. Lo que no tengo claro es todo el almacenamiento de claves.
Desde el primer elemento vinculado anterior:
La clave de cifrado (EK) que utiliza para cifrar los datos, debe ser la misma cifrado por una clave de cifrado clave (KEK). El cifrado EK debe ser almacenado en un lugar protegido: puede ser un archivo, una clave de registro, lo que sea, lo importante es restringir el acceso a él, a la solo para el servidor de aplicaciones.
Estoy un poco confundido por esa descripción. Pensé que todo ha ido a un Técnica de codificación de clave pública / clave privada. ¿Asumo que en la referencia anterior, la clave de cifrado mencionada anteriormente es en realidad la clave privada? ¿O estoy mezclando incorrectamente algoritmos aquí?
Supuse que estamos usando un algoritmo de clave pública / clave privada. Supongo que incluiré la clave pública en el código de mi servidor. Mi intención es almacenar la clave privada totalmente fuera de línea en una ubicación diferente (y sí, cumpliendo con los requisitos de PCI-DSS 3.5.3). Mi tendencia es requerir una copia / pegado personalizado de la clave privada para una decodificación / recuperación de tarjeta de crédito. Este es un proceso bastante infrecuente, y probablemente solo lo realice el propietario de la empresa.
Pero tal vez solo estoy haciendo esto mal. ¿Qué es el algoritmo "aprobado" de PCI-DSS para la codificación de tarjetas de crédito individuales? Por lo que puedo ver, los requisitos específicos se indican como:
La intención de la criptografía fuerte (como se define en las PCI DSS y PA-DSS Glosario de términos, abreviaturas y acrónimos) es que el cifrado se basa en un algoritmo probado y aceptado por la industria (no un algoritmo propietario o "de cosecha propia") con claves criptográficas sólidas ...
Aquí están mis preguntas.
-
¿Qué algoritmos para la codificación de estilo de clave pública / privada se recomiendan actualmente para cumplir con el estándar PCI-DSS aquí?
-
Si no es una codificación de clave pública / privada, ¿se recomienda alguna otra técnica de encriptación?
-
¿Estoy haciendo esto correctamente?
-
¿Algún otro comentario, o lecciones aprendidas aquí?
Muchas gracias.