Scenario:
- We have a central server $S$.
- We have a number of peripheral servers $P_i$
- We have some individuals $U_j$
- A given individual may be "known" to one or more peripheral servers. Each peripheral server generates unique IDs for the individuals it knows and stores a map $f_i: U_j \to \textrm{ID}$ and the corresponding inverse $f_i^{-1}$
- A peripheral server may share its IDs but may never share the identities of the individuals it knows.
- The peripheral servers can communicate securely with $S$.
- The peripheral servers regularly transmit to $S$ a map from IDs to some data.
Problem:
$S$ wants to determine whether $P_1$'s ID $a$ corresponds to the same individual $u$ as $P_2$'s ID $b$ without ever knowing the value of $u$. If so, it will merge the data from the different peripheral servers. (Details of the merge method are out of scope). Is this possible?
In essence this is "mental snap", or perhaps zero-knowledge set intersection.
Rejected approach:
- The domain of individuals is too small to simply send hashes to $S$ and compare the hashes: this would allow identifying the individuals by brute force.