(Revelación completa: ya soy un participante activo aquí y en StackOverflow, pero por razones que espero sean obvias, estoy eligiendo hacer esta pregunta en particular de forma anónima).
Actualmente trabajo en una pequeña tienda de software que produce software que se vende comercialmente para administrar pequeñas y medianas empresas 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 administración de la información del cliente. En particular, el almacenamiento (y la obtención) de la información de la tarjeta de crédito del cliente. Con eso, por supuesto, viene el cumplimiento de PCI.
Para resumir una larga historia, me quedan un par de preguntas sobre por qué ciertas cosas se hicieron de la manera en que se hicieron, y lamentablemente no tengo muchos recursos en este momento. Esta es una pequeña tienda muy (informo directamente al propietario, al igual que el otro empleado de tiempo completo), y el propietario no tiene una respuesta a estas preguntas, y el desarrollador anterior es ... err ... no disponible.
Problema 1: Recifrado periódico
A partir de ahora, el software solicita al usuario que realice un nuevo cifrado de toda la información confidencial en la base de datos (básicamente, números de tarjetas de crédito y contraseñas de usuarios) si se cumple alguna de estas condiciones:
-
Hay datos no cifrados de información confidencial en la base de datos (agregados 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 ocurrir durante el uso ordinario del software.
-
La clave actual ha estado en uso por más de un período de tiempo en particular. Creo que son 12 meses, pero no estoy seguro de eso. El punto aquí es que la clave "expira".
Esta es mi primera incursión en el desarrollo de soluciones comerciales que se relaciona con PCI, por lo que, lamentablemente, no tengo educación sobre las prácticas involucradas. ¿Hay algún aspecto del cumplimiento de PCI que obliga (o incluso simplemente recomienda) la actualización periódica de la clave?
Esto no es un gran problema para mí, además de que actualmente no tengo una buena explicación para dar a los usuarios finales si preguntan por qué se les pide que lo ejecuten.
Pregunta 1: ¿Es el concepto del estándar de caducidad de la clave y, de ser así, es simplemente el 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 , solo que está ofuscada. La tecla se rellena a la izquierda y a la derecha con algunos bytes de basura y algunos bits están trenzados, pero fundamentalmente no hay nada que impida que una persona emprendedora examine nuestro código (dotfuscated), determinando el patrón utilizado para convertir la clave almacenada en la clave real. luego usando esa tecla para correr locamente. Esto me parece una práctica horrible, pero quiero asegurarme de que esta no sea solo una de esas prácticas de "sonríe y sopórtala" que la gente de esta industria ha aceptado. He desarrollado un enfoque alternativo que evitaría un ataque de este tipo, pero solo estoy buscando un control de validez aquí.
Pregunta 2: ¿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, es normal o está loco?
Créeme, sé que el asesoramiento gratuito vale cada centavo que pagué, que nadie es abogado (o al menos no ofrece asesoramiento legal), Caveat Emptor, etc., etc., pero Estoy buscando cualquier entrada que todos puedan proporcionar. ¡Gracias de antemano!