There are three parties involved in a repeated data transfer process: Client C, Broker B and Provider P. There might be multiple clients C.
Broker B manages P's customer database. Each customer has a unique National ID numbers.
Client C can send requests to retrieve information of a customer ID from P's customer database (which B manages).
The requirement is: B must not know customer IDs, even though B manage's P database and information requests from C.
In other words:
P can share data with Broker B without revealing customer IDs (e.g., encrypt the customer ID with a public key).
C can query P's data that B manages, by sending the encrypted customer ID to B.
B can match C's encrypted ID with P's encrypted key to locate a consumer record.
B cannot brute-force attack the encryption to learn about true customer IDs.
We plan to assign P a public key. P uses this key to encrypt customer IDs of the data that B manages. C uses this key to encrypt customer IDs that are need to be queries.
The number of unique customer IDs is ~ 10 billion numbers. Therefore, it's quite fast to brute-force attack this list of 10 billion numbers.
My question is: Is there a deterministic public-key solution that satisfies (1), (2), (3), and (4).