Tenemos una base de datos de códigos de clasificación (números de 6 dígitos) y números de cuenta (números de 8 dígitos) que utilizamos para conciliar las cuentas mensuales con la tabla de partidarios.
No hay nada en los datos recibidos del banco que identifique de forma única al partidario, aparte del código de clasificación y el número de cuenta. ... Lo sé, es molesto.
Si bien estos datos no son tan sensibles como los datos de la tarjeta (y no sujeto a PCI-DSS ), sigue siendo bastante delicado y me gustaría encontrar otra forma de hacer la conciliación para reducir la responsabilidad de tener todos estos datos.
La combinación del código de clasificación y el número de cuenta ofrece hasta 10 ^ 14 posibilidades.
¿Hay una manera (usando una función de PHP confiable y establecida) para hacer un hash de los datos y solo almacenar el hash, que me permita tomar un archivo mensual de -say- 1000 registros y hacerlos coincidir con los ¿hash datos? ¿O realmente no tiene sentido y en su lugar se enfoca en reforzar la seguridad en torno a esta db?
La ventaja de seguridad que estoy buscando es que la base de datos no tiene una lista de datos bancarios lista para usar. Los datos del extracto bancario mensual transaccional pueden considerarse de corta duración (se reciben encriptados, descifrados, procesados, eliminados).
He leído una comparación detallada útil de funciones de hashing pero obviamente aquí no estamos hablando de contraseña ¡Y, en efecto, necesitamos poder descifrarlos cada mes! Hmmm.
EDITAR: Conclusión
Gracias a las respuestas a continuación, esto es lo que planeo hacer:
Configuración
- Cree un mapa para los códigos de clasificación y los números de cuenta para usuarios aleatorios .
- Reemplazar datos reales con datos asignados.
- Cifre este mapa utilizando Mcrypt AES 256 de PHP con una clave proporcionada por el usuario nunca almacenada en el servidor
- Almacene el mapa cifrado en el servidor.
Ahora: puede tomar la base de datos, no puede obtener los datos, o cualquier forma de descifrarlos mediante la fuerza bruta, gracias al mapa aleatorio.
También puedes tomar el mapa y descubrir cómo funciona (sin depender de la oscuridad), pero aún así debes poder descifrar el cifrado para acceder al mapa. Esto se siente como un nivel adecuado de riesgo.
Reconciliación
- Descifre el contenido PGP del banco localmente.
- Sobre SSL, cargue las transacciones del mes y también proporcione la clave de descifrado.
- El servidor descifra el mapa, lo aplica a los datos cargados, almacena los datos asignados para su procesamiento posterior, elimina el archivo cargado sin procesar.
- El usuario elimina los datos bancarios descifrados localmente.
Esto significa que la clave y el mapa descifrado solo están siempre en la RAM. Las transacciones del mes se almacenan temporalmente en el disco, pero ese es un nivel aceptable de riesgo IMO (podría usar un método de eliminación seguro como bleachbit, etc.).
Actualizar la clave es tan simple como proporcionar claves existentes y nuevas, descifrar mapa, cifrar mapa, almacenar mapa.
Si existe la preocupación de que el mapa descifrado se haya visto comprometido, esto también podría reconstruirse, aunque es un esfuerzo mayor, ya que significa actualizar todos los datos almacenados.