What about this? 1) Client uploads a bloom filter with all contacts on phone 2) Server responds with a bloom filter with all registered contacts that match the client's bloom filter 3) Client displays contacts that match server's bloom filter You can optionally trade contacts back and forth again with a larger bits/contact ratio to decrease false positives. I think it works out so that in exchange for 7 bits of infor…
The Difficulty Of Private Contact Discovery
11–20 of 76 posts
Re: The Difficulty Of Private Contact Discovery
#12In a similar discussion, I said something about hashing phone number pairs. The graph has a lot more edges than nodes. Still doesn't stop someone from attacking a single number though.
Re: The Difficulty Of Private Contact Discovery
#13What about this? 1) Client uploads a bloom filter with all contacts on phone 2) Server responds with a bloom filter with all registered contacts that match the client's bloom filter 3) Client displays contacts that match server's bloom filter You can optionally trade contacts back and forth again with a larger bits/contact ratio to decrease false positives. I think it works out so that in exchange for 7 bits of infor…
Re: The Difficulty Of Private Contact Discovery
#14What about this? 1) Client uploads a bloom filter with all contacts on phone 2) Server responds with a bloom filter with all registered contacts that match the client's bloom filter 3) Client displays contacts that match server's bloom filter You can optionally trade contacts back and forth again with a larger bits/contact ratio to decrease false positives. I think it works out so that in exchange for 7 bits of infor…
How would you do (2) without iterating over all registered contacts on the server?
I came up with this method for maintaining privacy while retrieving installed apps (to give app recommendations). Sounds like it might not translate across so well.
Re: The Difficulty Of Private Contact Discovery
#15Earlier quoted context omitted.
RTFA. He addresses that in the first few paragraphs. Because there are 10^10 possible phone numbers (approximately), it is very easy to build a rainbow table of all hashed phone numbers and back-track a hash to it's phone number.
Well, actually I did read the article and address that in my comment that I don't think that it is important to hide the address from the server but it is important to hide them from the brute force attacker. I believe that my suggestion stops a brute force attacker from pulling the whole database like you can today with many of these systems.
Re: The Difficulty Of Private Contact Discovery
#16So don't do it. I know I'm probably in the minority here but I've never given another app permission to use my facebook or twitter account to "Find Friends" and I personally find the whole practice offensive. Just have an option to invite people by their email address/number/whatever, but not in bulk.
You seem to dislike inviting a bulk of friends to a service. But the article doesn't talk about invites. The problem is securely discovering who's already invited. It's not offensive in my opinion.
Re: The Difficulty Of Private Contact Discovery
#17I install millions of copies of the app, all with a different contact list. I do this signed query process for every possible phone number. I now have the complete list of users.
Re: The Difficulty Of Private Contact Discovery
#18Interesting problem! > It’s also possible to compress “updates” to the bloom filter. The server just needs to calculate the XOR of the version the client has and the updated version, then run that through LZMA (the input will be mostly zeros), and transmit the compressed diff to the client. > Unfortunately, for a reasonably large user base, this strategy doesn’t work because the bloom filters themselves are too large…
If that's indeed the case then, assuming that users can never be removed, a daily update would just contain the indexes of the additional bits set by the newly registered users, which could never be 40MB.
It seems they also forgot to include lowering the p-value of the bloom filter as a trade-off, since it seems that a false positive means that a contact is sent to the server which shouldn't have been.
If you push that down to p=.95/.98/.99 or so you'd get a much smaller Bloom filter and many people might not object to a few % of 'collateral uploads' so to speak.
Minimizing the amount of information leaked through these various tradeoffs is an interesting problem though, since you'll have to leak something one way or the other.
Re: The Difficulty Of Private Contact Discovery
#19The only field that might be fairly consistent is email address and even that is no guarantee. Sure, it's possible to clean up a contact before hashing, but when you consider the fact that the typical phone contains >500 contacts it's not something that can be done in a reasonable amount of time on a modern smartphone. For the last two years I've been working on a product that involves cleaning/organizing contacts and making them searchable, when I started I had no idea what a massive undertaking it would be.
So, hash till your hearts content, but if you have 10 different people with the same contact in their address book I would be willing to bet that you will get 10 different hashes because humans are not good at data entry.
Re: The Difficulty Of Private Contact Discovery
#20This is great until you realize the average address book is a disgusting mess of spelling errors, wrong values in wrong fields, punctuation in places where punctuation isn't necessary (commas in phone number fields, digits in name fields, etc.) The only field that might be fairly consistent is email address and even that is no guarantee. Sure, it's possible to clean up a contact before hashing, but when you consider…