Slide 1

Slide 1 text

Hash Range Queries For simple, privacy-preserving data-sharing

Slide 2

Slide 2 text

https://blog.cloudflare.com/validating-leaked-passwords-with-k-anonymity/
 https://www.troyhunt.com/ive-just-launched-pwned-passwords-version-2/ Not my original idea

Slide 3

Slide 3 text

https://api.pwnedpasswords.com/pwnedpassword/password A request for a single password reveals who is interested in this password. Maybe not that interesting for a widely-used value …

Slide 4

Slide 4 text

https://api.pwnedpasswords.com/pwnedpassword/p1nkyp13 But how many people would use their favorite my little pony character with vowels replaced with numbers?

Slide 5

Slide 5 text

Do you trust the person operating the service? • Are they doing something else with the data? • Are they securing the data?

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

How can a client get a single record from a server without revealing the record identifier to the server?

Slide 8

Slide 8 text

The Easiest Way: Hashed Identifiers

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

But rainbow tables exist

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

The Hard Way: Private Set Intersection

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

The Middle Way: k-Anonymity

Slide 17

Slide 17 text

https://en.wikipedia.org/wiki/K-anonymity Every record is unique

Slide 18

Slide 18 text

https://en.wikipedia.org/wiki/K-anonymity k-Anonymity: 2 for any combination of Age + Gender + State found in any row of the table there are always at least 2 rows with those exact attributes Suppression Suppression Generalization

Slide 19

Slide 19 text

https://blog.cloudflare.com/validating-leaked-passwords-with-k-anonymity/ By using this property, we are able to seperate hashes into anonymized "buckets".

Slide 20

Slide 20 text

https://blog.cloudflare.com/validating-leaked-passwords-with-k-anonymity/ A client is able to anonymize the user-supplied hash …

Slide 21

Slide 21 text

https://blog.cloudflare.com/validating-leaked-passwords-with-k-anonymity/ … and then download all hashes in the same anonymized "bucket" as that hash … {

Slide 22

Slide 22 text

https://blog.cloudflare.com/validating-leaked-passwords-with-k-anonymity/ { 5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8 5baa61f4c0b12f0a6691121c7de9420c8ff12c1f 5baa61aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 5baa61bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb 5baa61cccccccccccccccccccccccccccccccccc 5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8 5baa61f4c0b12f0a6691121c7de9420c8ff12c1f 5baa61aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 5baa61bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb 5baa61cccccccccccccccccccccccccccccccccc … then do an offline check to see if the user- supplied hash is in that breached bucket.