In addition to what the others have said, I'll give a name to some of
these techniques.

The process of assigning an opaque random identifier to an easily
reversed string is 'Tokenization'.  I don't work in payment processing
- but it's big there.  Don't want to have a ton of PCI requirements?
Pay a tokenization service - send the credit card to them, they give
you an identifier (say a guid like
1C4E0B18-ABE6-4657-8B1B-79474EC80A94) and you store that.  A horrible
way of doing this is choosing a 'secret' salt and making every token
MD5(salt || identifier).  A safe way is a database of GUID-Identifier
mappings. (But secure the database!) It's a pretty safe situation and
used all over the payment industry BUT like others have said, requires
some meta-authority between government organizations to do this, which
probably makes it a non-starter.

Similar, but different, is Format Preserving Encryption (FPE). FPE is
used in the situation where you have a database full of credit card
numbers of the form WWWW-XXXX-YYYY-ZZZZ (or SSNs) and you realize
"Holy crap, storing these in plaintext is a horrible idea!" - BUT you
have so much software that expects credit card numbers to be in a
specific form and you can't rewrite it all to handle
V1dXVy1YWFhYLVlZWVktWlpaWgo= or something like that.  FPE converts the
credit card to NDKG-NDSH-LKAU-QNCB so your application sees it in a
correct format, but it's 'encrypted' (it can ever have a correct Luhn
number.)  The encryption is strong, as long as you keep the key
secret. But this _also_ requires some sort of meta-authority
government organization and thus is even less likely to work, because
as soon as you say 'crypto' everyone gets huffy about control of the
keys. [0]

The idea of using a CRC, a colliding but unlikely to be colliding in
the situation you care about is interesting, and I have to imagine
there's a term for it and studies about it.

The unfortunate situation is data anonymization is wildly
difficult.[1] I realize that you're in the trenches and saying
"Actually, the problem we have is that the anonymization is too good".
The long term approach I have to problems like this is find a
professor researching it, and hook up with a grad student where you
get them to work on your problem. They come up with an idea, write a
paper, someone else breaks their paper and your work - but hey, so
long as the grad student did their homework, it's been broken in a new
and novel way. ;)

-tom


[0] Look up the Federal Bridge PKI for a great example
[1] http://strata.oreilly.com/2011/05/anonymize-data-limits.html

On 6 February 2014 15:49, Tom Lee <t...@sunlightfoundation.com> wrote:
> We've been kicking around an idea at Sunlight that aims to use cryptographic
> ideas to resolve some of the concerns around the publication of publicly
> identifiable information in government disclosures. I could use some smart
> people to tell me what's dumb about it.
>
> We often face challenges related to disambiguating entities: is the John
> Smith who gave political donation A the same John Smith that gave political
> donation B? One obvious solution to this problem is to push to expand the
> information that's collected and disclosed -- if we had John's driver's
> license number (DLN), for instance, it'd be easy to disambiguate these
> records. But that could introduce privacy concerns for John. One approach to
> this problem (which I don't think government has tried) is employing a
> one-way hash.
>
> Obviously the input key space for DLNs and most other personal ID numbers is
> so small that reversing this with a dictionary attack would be trivial. You
> can add a salt, but only on a per-entity basis (not a per-record basis) if
> you want to preserve the capacity to disambiguate. That in turns calls for a
> lookup table in which the input keys are stored, which kind of defeats the
> point of using a hash (you might as well just assign random output IDs for
> each input ID). I would worry about government's ability to keep this lookup
> table secure, and I worry about the brittleness of such a system.
>
> Alternately, you can use a single system-wide secret (or set of secrets) to
> transform inputs into reliable outputs. I think this is less brittle and
> maybe easier to preserve as a secret, but this system might be too easily
> reversible given the ability to observe its outputs and know the universe of
> possible inputs. I'm unsure of the cryptographic options that might be
> appropriate here.
>
> For all I know, the lack of implementations using this kind of one-way
> transformation isn't about government sluggishness but rather about its
> feasibility. I'd be very curious to hear folks ideas on this score, though.
> My general hunch is that something must be possible -- even a few bits'
> worth of disambiguating information would be hugely useful to us, and
> presumably you're not leaking important amounts of information by, say,
> sharing the last digit of a DLN. So there must be a spectrum of options. But
> as is probably apparent, I don't think I've got a handle on how to think
> about this problem rigorously.
>
> Tom
>
> --
> Liberationtech is public & archives are searchable on Google. Violations of
> list guidelines will get you moderated:
> https://mailman.stanford.edu/mailman/listinfo/liberationtech. Unsubscribe,
> change to digest, or change password by emailing moderator at
> compa...@stanford.edu.
-- 
Liberationtech is public & archives are searchable on Google. Violations of 
list guidelines will get you moderated: 
https://mailman.stanford.edu/mailman/listinfo/liberationtech. Unsubscribe, 
change to digest, or change password by emailing moderator at 
compa...@stanford.edu.

Reply via email to