Live data from Hacker News

The Difficulty Of Private Contact Discovery

whispersystems.org

41–50 of 76 posts

Re: The Difficulty Of Private Contact Discovery

#41
Is is possible to leverage some sort of peer-assisted discovery? Where you ask some sub-set of your trusted contacts already on the system, to call the server on your behalf. So that the server is less likely to know whose contacts are being sent to it.

Of course, this can only be part of the full solution.

Disclaimer: just throwing a wild idea out there. don't know anything about the field.

Re: The Difficulty Of Private Contact Discovery

#42

Is this a real problem? Is it reasonable to trust for me to trust you to you run some arbitrary binary on my phone that does some magical black box computation on my contact list and then phone home to your service, but not trust to that you will just not be a dick with the raw data? Stated more simply, if I am paranoid about my privacy, then why am I running your apps and letting you read my contact list at all?

They provide the source. Examine it and build it yourself.

Re: The Difficulty Of Private Contact Discovery

#43
The problem is that it's easy to upload 1000 randomly generated phone numbers and get back results. But I think you can distinguish random or sequentially generated numbers from a real user's actual contact list, by looking at the distribution of friends among the contacts. A real contact list should have a high density of friendships between contacts. The system should only return results if the uploader provides a subgraph that's more highly connected than a random one would be.

You'd need to look at real data and tune the parameters to make this effective.

Re: The Difficulty Of Private Contact Discovery

#44

Is this a real problem? Is it reasonable to trust for me to trust you to you run some arbitrary binary on my phone that does some magical black box computation on my contact list and then phone home to your service, but not trust to that you will just not be a dick with the raw data? Stated more simply, if I am paranoid about my privacy, then why am I running your apps and letting you read my contact list at all?

To the end user probably not but if the encryption is performed on the client and the client code is open sourced and you don't auto-update your application then you'll know exactly what is happening to your data when you let it access your contacts.

Re: The Difficulty Of Private Contact Discovery

#45

> Building a social network is not easy. Social networks have value proportional to their size, so participants aren’t motivated to join new social networks which aren’t already large. It’s a paradox where if people haven’t already joined, people aren’t motivated to join. Value is relative. For stakeholders, value is indeed given by the network’s size. For users (participants), it’s very debatable whether size equals…

Not really. I will only want to join a social network if a lot of my friends are already on it. The fewer of my friends on it, the lower the value I get out of using the service (cetris paribus of course).

Re: The Difficulty Of Private Contact Discovery

#46

Is is possible to leverage some sort of peer-assisted discovery? Where you ask some sub-set of your trusted contacts already on the system, to call the server on your behalf. So that the server is less likely to know whose contacts are being sent to it. Of course, this can only be part of the full solution. Disclaimer: just throwing a wild idea out there. don't know anything about the field.

If you used TOR for the queries, then it would hide the possibility that I have drug dealers/prostitutes/bookies in my contact list. I am not sure how you would then be able to rate limit it in this case.

Re: The Difficulty Of Private Contact Discovery

#47

Is this a real problem? Is it reasonable to trust for me to trust you to you run some arbitrary binary on my phone that does some magical black box computation on my contact list and then phone home to your service, but not trust to that you will just not be a dick with the raw data? Stated more simply, if I am paranoid about my privacy, then why am I running your apps and letting you read my contact list at all?

To the end user probably not but if the encryption is performed on the client and the client code is open sourced and you don't auto-update your application then you'll know exactly what is happening to your data when you let it access your contacts.

Not realistic. If it's open-sourced I can go examine the code for sure, but it's not a good use of my time (and I can actually read code, but even if someone had the time but can't read code?). I also have no way of knowing if anyone else has looked at the code at all, and if they have, whether they're skilled enough to determine that the code is kosher. Again, if I struggle with that, how on earth is a non-technical-minded person even going to begin?

The second question I haven't seen asked here yet, is why we need everything to be social to start with? My social needs are covered by Facebook and Twitter, and I don't install their apps on my phone either.

Given those two things, if an app (any app!) requires access to my contacts I don't install it. Period.

Re: The Difficulty Of Private Contact Discovery

#49

Is this a real problem? Is it reasonable to trust for me to trust you to you run some arbitrary binary on my phone that does some magical black box computation on my contact list and then phone home to your service, but not trust to that you will just not be a dick with the raw data? Stated more simply, if I am paranoid about my privacy, then why am I running your apps and letting you read my contact list at all?

To the end user probably not but if the encryption is performed on the client and the client code is open sourced and you don't auto-update your application then you'll know exactly what is happening to your data when you let it access your contacts.

[deleted]

Re: The Difficulty Of Private Contact Discovery

#50
post #11

Earlier quoted context omitted.

The problem with this is that (1) + (2) means the server now knows the user's address book. They're trying to avoid that with encrypted bloom filters and blind signature queries.

First, it looks like this scheme is broken due to cpu constraints. However... It had looked more like the encrypted bloom filter was intended to prevent the client from obtaining the list of registered users. With (1) + (2), the server only has a few bits of information about each of the phone's contacts. It would be analogous to just having the area codes.

What about a slightly modified idea:

(0) The server informs the client about the parameters of the bloom filter where it currently keeps all the contacts.

(1) The client builds the bloom filter with the same parameters based on its address book. After building the bloom filter, the client XORs it with a fuzzing pattern [a].

(2) The server performs a logical AND of the received bloom filter and (its own bloom filter XOR another fuzzing pattern [b]), and sends back the result.

(3) The client XORs the result with the fuzzing pattern [a], and uses this bloom filter to perform the local queries.

(4) The client stores the differences in results between the subsequent results, and each time the same result is returned, it doubles the query interval [c].

(5) The client sends its own ID with each query, so as the network grows and the server inevitably needs to recreate the bloom filter with different parameters, it can do so gradually ahead of time from scratch just based on the IDs of the queriers.

[a] I haven't done any napkin calculations of how random it should be, nor how many bits would need to be set to 1. The idea is to add a certain amount of false negatives here so the server were not able to recover the contact list just by bruteforce lookups. To avoid the leakage of information by correlating the subsequent requests, this pattern should probably be a PRF(client_contacts), rather than a purely random function - thus, if the contact list did not change, it should not change either, and if the contact list did change, it should change in a way to mask the change in the contact list somewhat.

[b] This may not be needed. The idea is to try to protect against the client sending an all-1 list and getting the entire bloom filter. But given that both [a] and [b] may both introduce false negatives and false positives, maybe there should be another approach to restrict what is sent to the client.

[c] Especially given the [a] and [b], chances are quite high that this might be a no-op.

It is obvious this method will introduce the false negatives, and if [b] is used, can add false positives as well.

Post reply on HN