Skip to content

Masking

Keep the joins.Change the people.

DOGM masking replaces names, emails and ID numbers with stand-ins, and the same input always gets the same stand-in in every table, so joins keep working. The demo masks names and emails in your browser, and hosted runs apply a spec's mask block with your project's key. For data you already hold, dogm mask applies every mode below on your own machine, from a CLI you build from source until its first release.

One stand-in, in every tableA customers table and an orders table both contain Maria Santos. The masking module replaces her with the same stand-in, Liza Ramos, in both tables, while the customer ID that joins them stays the same.customersC-1042Liza RamosC-1043Ben AbadC-1044Tess UyordersO-501C-1042Liza RamosO-502C-1042Liza RamosO-503C-1044Tess Uy

Consistent masking

Same person in,same stand-in out.

Bea Castillo appears in two tables. After masking she's Tala Mercado in both, and her customer ID still joins her tickets to her account. Every value here is fictional.

Before

customers (before masking)
customer_idfull_nameemail
CUS-000731Bea Castillobea.castillo@example.com
CUS-000058Jun Villanuevajun.villanueva@example.com
replies (before masking)
reply_idticket_idauthor_name
RPL-0002210TCK-000415Bea Castillo
RPL-0000184TCK-000415Jun Villanueva

After

customers (after masking)
customer_idfull_nameemail
CUS-000731Tala Mercadotala.mercado@example.com
CUS-000058Paolo Dizonpaolo.dizon@example.com
replies (after masking)
reply_idticket_idauthor_name
RPL-0002210TCK-000415Tala Mercado
RPL-0000184TCK-000415Paolo Dizon
  1. 01Names share one domain, so a name masks the same way wherever it appears.
  2. 02The email is rebuilt from the masked name in the same row.
  3. 03Keys are kept here; if you mask a key, every column that references it must use the same mode, or the spec is rejected.

Modes

Pick a modeper column.

Every masked column names its mode. A column with no safe mode gets redact; a column you leave alone gets keep, so the report shows someone looked at it.

Masking modes
ModeWhat it doesUse for
consistentPicks a replacement from the domain's fictional pool, using a keyed hash of the value.Names, cities, anything with a pool
consistent + fromRebuilds the value from another masked column in the same row.An email next to the name it belongs to
fpe_ff1FF1 format-preserving encryption (NIST SP 800-38G). Keeps length and character classes; masked keys still join.TIN, SSS, account numbers, numeric keys
hashKeyed hash, truncated to hex, with an optional prefix.Opaque IDs that do not need to look real
shift_dateMoves dates by a keyed offset per entity, so every date for one person shifts together and intervals survive.Birthdates, event dates
redactReplaces the value with null or a constant.Free text, notes, anything without a safe mode
keepNo change, recorded explicitly.Columns that are not sensitive

Version 1 can't reliably find personal data inside free text, so a text column marked as personal data must use redact.

Local first

Your key.Your machine.

To mask data you already hold, you run dogm mask where the data lives. The key is a file on your machine, and raw rows never reach DOGM.

terminal
$ dogm mask mask.yaml --in ./prod-export --out ./masked --key-file key.bin
  • Reads what you export

    CSV or JSONL files, read in bounded batches, so a large table never sits in memory at once.

  • One key, one mapping

    The key is 32 random bytes you supply. A new key version gives a new mapping, and runs record which version they used.

  • Free on every plan

    The CLI and local masking have no limits and need no account.

CLI, from source dogm mask is in the CLI, which you build from source until its first release. DOGM doesn't mask real data on its servers.

Read the masking guide

What masking is

Pseudonymization,not anonymization.

Masked data is safer to share inside a team, but it isn't anonymous and it isn't safe to publish.

What it does not guarantee

  • Anyone with the key can rebuild the mapping for a list of candidate values.
  • Rare values and how often values appear can still identify people.
  • Columns left unmasked can combine to identify someone.

Under the Data Privacy Act of 2012

Masked personal data is still personal data. Treat a masked export with the same care as the source it came from.

Early-access beta

Try the demo now.Or start free.

The in-browser demo generates, masks and checks a connected sample, and nothing leaves your browser. Sign up and your workspace gets Pro limits at no cost while the beta lasts.