Saltar al contenido
latentSource

Informe técnico · 4 min de lectura

Masker: el límite de datos y el contrato de entrega

Dónde ocurre el enmascaramiento, qué sigue visible y por qué bloquear mensajes no garantiza una sola entrega.

Alcance del resultado grabado

Masker transfiere filas bancarias sintéticas mediante un productor y un consumidor. La ejecución guardada usa un productor Pi y un consumidor emulado. Ese detalle delimita lo que realmente se probó.

fintechP contiene el origen, fintechT el destino y bus.mq.messages transporta peticiones y respuestas. Los clientes deben cargarse antes de direcciones y cuentas; después vienen tarjetas y transacciones. Enmascarar correctamente y conservar la integridad relacional son criterios de aceptación separados.

Arquitectura y punto de control

Petición del consumidor → buzón → consulta en fintechP
    → maskRow(entity, row) → resultado para el modelo → buzón
    → inserción en fintechT → marca de avance

query_masked transforma las filas antes de devolverlas al modelo productor. El proceso de base de datos ve los originales: memoria, credenciales, extensiones y registros siguen dentro de la revisión. Enmascarar solo la respuesta final dejaría expuesto el resultado original de la herramienta.

El hook del productor permite mailbox_wait, mailbox_send y query_masked. Bloquea otras herramientas del entorno, incluidas shell y archivos. No constituye un aislamiento del sistema operativo. El manifiesto identifica los archivos inspeccionados y sus hashes.

Información que permanece

CampoInformación conservada o reemplazo
ApellidoPrimera letra
SSNÚltimos cuatro dígitos
CorreoPrimer carácter y dominio
NacimientoAño; mes y día cambian a 1 de enero
TarjetaPrimeros y últimos cuatro dígitos
CVVAsteriscos

Las reglas conservan utilidad y también información. Una fecha reducida al año no permite calcular la edad exacta cerca del cumpleaños. Una tarjeta enmascarada puede incumplir restricciones numéricas o Luhn del destino. Las transacciones pasan sin cambios y los atributos retenidos permiten posibles cruces con otros datos.

La implementación copia la fila antes de reemplazar campos. Una columna nueva pasa sin cambios si la política no la contempla. Cada cambio de esquema requiere revisión; una lista explícita de columnas de salida daría un comportamiento más conservador. Es enmascaramiento selectivo, no una prueba de anonimato.

Entrega, reintentos y marcas de avance

El buzón usa FOR UPDATE SKIP LOCKED. Cada trabajador puede saltar una fila bloqueada por otro. Eso coordina la toma de mensajes, pero no vuelve atómicos la inserción en destino y el acuse en otra base.

Una caída después de insertar y antes de confirmar puede repetir el lote. Confirmar primero puede perder datos si falla la inserción. Hay que revisar identificadores de lote, restricciones únicas, idempotencia y reinicio antes de afirmar entrega exactamente una vez. El máximo de 200 filas limita una respuesta, no el acceso acumulado.

La carga incremental usa el identificador local más alto. Detecta nuevas inserciones, pero omite cambios a IDs anteriores y eliminaciones. La visibilidad fuera de orden también necesita revisión. No es captura general de cambios.

Verificación independiente

La comprobación guardada encontró cero coincidencias con patrones de SSN y números de 16 dígitos sin formato. Solo cubre esas expresiones en esos mensajes; no detecta todos los formatos ni determina si los atributos retenidos son sensibles.

Empieza por la función pura y datos sintéticos: nulos, identificadores cortos, correos malformados, columnas extra y cada entidad. Compara originales con salidas además de usar expresiones regulares. Luego valida conteos y llaves foráneas. Interrumpe la entrega después de insertar y antes del acuse para revisar repetición. Estos son pasos propuestos, no nuevas pruebas aprobadas.

El artículo técnico explica el control guardado y enlaza la implementación. Conserva manifiesto y archivos: la revisión identifica HEAD al recolectar, mientras los hashes identifican los bytes inspeccionados.