Ofuscación de datos transfronterizos y cómo lidiar con eso?

7

Actualmente me enfrento a una situación en la que tendré que ofuscar datos por motivos legales (estas son reglas nacionales y no son específicas para mí)

Todavía tendré que trabajar con equipos fuera de esta área que aún necesitarán acceder a las aplicaciones / bases de datos para realizar pruebas / implementaciones, etc., sin embargo, los datos deben estar completamente ocultos.

¿Cuáles son tus experiencias con este escenario?

por ejemplo Quién posee qué etapa del proceso, qué acceso tienen las distintas partes, qué tan fuerte es el cifrado, cómo se producen las actualizaciones

    
pregunta adolf garlic 22.11.2010 - 14:50

3 respuestas

4

Un gran cliente financiero con el que hacemos negocios tiene un proceso automatizado estandarizado para ofuscar datos. Nosotros no, así que tengo algunos scripts donde hago esto a mano. El punto es dejar datos razonablemente realistas (longitudes de nombres, códigos postales) mientras que los datos de identificación personal están irremediablemente codificados. Su sistema es mucho más complicado que esto, pero básicamente cuando los datos de producción se copian en los entornos de desarrollo y control de calidad, se codifican automáticamente. De esta manera no hay potencial para "olvidar" hacer algo de la mezcla.

Contraseñas:
Configúrelas todas a algo que usen las cuentas de prueba: como Password1 o 1234567 .

Números de identificación fiscal, números de seguro social, números de seguridad social:
Toma los primeros 3 dígitos y genera números aleatorios para el resto. En los EE. UU., Los primeros 3 dígitos se asignan generalmente según el lugar donde vivió cuando se emitió el SSN, por lo que no todas las combinaciones de los primeros 3 dígitos son válidas. Para los EIN, tome los primeros 2 dígitos, ya que no todas las combinaciones de los primeros 2 dígitos son válidas. Ajusta qué dígitos se quedan solos si tu país usa reglas diferentes.

Nombres:
Hash y base64 los nombres y apellidos por separado. Tome la primera letra del nombre no copiado, agregue el hash después y trunca el resultado a la longitud del nombre original

Ejemplo: Nombre="John Doe" (Estoy usando SHA384)

Entonces John Doe se convierte en Jnbn Dnh . Es útil mantener los nombres con la misma longitud, ya que puede ayudar a señalar los problemas de usabilidad.

Si tiene reglas como "los nombres no pueden tener dígitos", debe eliminar los valores de base 64 que no son válidos, y también escribir en minúsculas las letras subsiguientes (hechas en el código de muestra a continuación).

Direcciones: Los nombres de las calles y los nombres de las ciudades se marcan como los de arriba. Los números se mantienen igual. Estado y zip permanece igual.

Entonces, 1313 Mockingbird Lane se convierte en 1313 Mvtqiwtuqrd Lzzx

Números de teléfono:
Deje el código de área igual, genere dígitos aleatorios para los dígitos restantes.

Números de tarjetas de crédito:
Usted no debe almacenar estos en absoluto.

Aquí hay una muestra & Código de C # en bruto para el hashing y el truncamiento (simple para mostrar el concepto)

    using System.Security.Cryptography;  
    using System.Text.RegularExpressions;   

    public string ScrambleInput(string sInput)
    {
        string sReturn = sInput.Substring(0,1);
        string sTemp = string.Empty;
        System.Security.Cryptography.SHA384Managed Hasher = new SHA384Managed();
        System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
        byte[] buff = new byte[sInput.Length];
        buff = enc.GetBytes(sInput);
        Hasher.ComputeHash(buff);
        sTemp = Convert.ToBase64String(Hasher.Hash, 0, Hasher.Hash.Length, System.Base64FormattingOptions.None);
        sTemp = sTemp.ToLower().Replace("+", "").Replace("/", "");
        sReturn += Regex.Replace(sTemp, @"\d", "");
        sReturn = sReturn.Substring(0, sInput.Length );
        return sReturn;
    }
    
respondido por el Tangurena 23.11.2010 - 18:47
2

Primero que nada, como dices, esto no es cifrado o, posiblemente, ofuscación. No es necesario que haya una forma posible de recuperar los datos: la restricción legal no está en exportar los datos de forma segura, sino en exportarlos en absoluto .

También vale la pena señalar que eso incluirá a alguien fuera del país que acceda a una base de datos dentro del país (la exportación de un solo registro todavía está exportando datos), por lo que no pueden tener acceso a sus sistemas a través de ningún medio.

El problema con anonimizar los datos es que es muy difícil de hacer. Tiene que borrar todos los datos de identificación personal (no solo mezclarlos), incluidos nombres, direcciones, correos electrónicos, fechas de nacimiento, números de seguro social. Cualquier cosa que pueda usarse incluso si solo es parte de un compuesto debe eliminarse. También debe verificar los campos de comentarios, campos de notas, campos de auditoría y cualquier otra cosa para estos mismos valores.

Cuando estés limpiando los datos, no intercambies cosas. Reemplace cada uno de una lista aleatoria de valores posibles. Si los intercambias, los datos aún están allí y existen riesgos de que se intercambien y se vuelvan a intercambiar o de alguna otra forma se puedan leer. Recuerde, la restricción está en exportar los datos, no dificultando su lectura.

Más allá de esto, debe comprender lo que podrían implicar los datos. Supongamos que se trata de una base de datos de alquiler de películas y que los que están fuera del país saben por correo de soporte que alguien ha alquilado uno en particular varias veces. Esa es una búsqueda directa que probablemente le dará una lista muy corta. Haga una referencia cruzada con otras pocas cosas (es un chico, así que probablemente no lo alquilaría y así sucesivamente) y sin que su nombre esté en ninguna parte, tiene toda su historia.

Lea esto: enlace para un mejor ejemplo.

Usted implica que las razones por las que las personas fuera del país necesitan la base de datos son por razones técnicas, por lo que los datos reales no son importantes para ellos, solo que tienen algo con lo que pueden acumularse, verifique que funcione, etc.

Si ese es el caso, entonces para mi dinero la mejor manera es no molestar. Envíeles una base de datos de prueba sin datos reales. ¿Necesita más datos de los que tiene su base de datos de prueba? Escribe scripts para generarlo.

Los scripts deben mantenerse junto con el resto de la base de datos y la aplicación, actualizarse con cada nueva versión, etc.

Si tiene una base de datos de esqueleto (es decir, con estructura pero sin datos), puede dar acceso a los demás tipos de comandos a los scripts para crear las bases de datos que deseen (que es lo que recomendaría). Si va con un proceso de barrido de los datos en vivo, probablemente necesite mantener los scripts para hacerlo de la misma manera, pero debe ejecutar el proceso usted mismo. Yo personalmente crearía una base de datos de prueba con cada versión.

    
respondido por el Jon Hopkins 23.11.2010 - 18:33
0

No sé si existen las mejores prácticas para este tipo de cosas. Pero si me dieran esta tarea, creo que identificaría qué correlaciones producen la mayoría de los datos y luego trataré de aleatorizar esas correlaciones.

El problema con un dato no es el dato en sí. Son las correlaciones que se pueden hacer. Cualquier esquema de ofuscación haría lo mejor para concentrarse en aleatorizar esas correlaciones tan a fondo que no podrían extraerse de nuevo. Una correlación que es independiente de otras piezas de datos es la rareza general de una pieza de datos, y esa correlación también debe estar oculta.

Por ejemplo, identifique un límite de rareza para los nombres y apellidos, luego reemplace todos los nombres y apellidos a continuación de ese límite de rareza con otros que son tan raros, pero seleccionados de una lista aleatoria de nombres de bebés o algo así. También podría copiar algunos nombres de un lugar a otro para cambiar las frecuencias en las que ocurren. Por ejemplo, cambie todas las "John" a "Avercrombie" y todas las "Hilda" a "Mary".

Luego comenzaría a intercambiar aleatoriamente los primeros nombres con otros nombres en las tablas. Yo haría lo mismo (pero independientemente) para los apellidos. También empezaría a mezclar relaciones importantes. Por ejemplo, con una base de datos de estilo de Netflix, la lista de películas que la gente alquila. Movería aleatoriamente películas de la lista de una persona a otra hasta que todas las listas estuvieran revueltas desesperadamente. Por supuesto, si lo que quiere es poder refinar un algoritmo de predicción con datos "anónimos", eso haría que los datos sean inútiles, por lo que tendrá que juzgar con qué datos hizo esto.

    
respondido por el Omnifarious 23.11.2010 - 17:54