Filter party-1 strings against party-2 white/black list keeping the lists private Suppose I have a server and a client. The client has a list of arbitrary strings and the server is supposed to filter this list using white and black lists kept on the server side. It would be nice not to share the list of the strings to the server and the white/black lists to the client. For example, a list of open applications at the client side is sensitive data, and the white/black lists are not supposed to be exposed from the server to the outer world as well. I'm wondering whether it's possible to check the client strings against the white/black lists keeping them private at all parties. The only way I can see now is:


Client: split the list of strings to a list of split-by-whitespaces strings list and hash each element.
Server: do the same for the white and black lists.
Server: compare the client and the server hashes.


This solution has a lot of downsides. Is it possible to re-implement it in other way somehow? Or, is the idea feasible at all? Thank you.
I see two problems;


The number of keywords is very small and a dictionary attack is possible from the server. 

for i in English_Dictionary
    if Hash(i) == target_hash
       return success

Also, one can use Rainbow tables, too. To overcome these, you will need to add salt to your plaintext to prevent any dictionary or rainbow attacks from the server side.

There are more advanced methods for protection, as;


The search on encrypted data which is started with the Song et. al's
idea. 
There is another method, which may be too slow, use FHE
techniques. You can totally blind the server.
If the client asking whether this string is black or white, you can also use Private Information Retrieval (PIR) techniques. There is an FHE PIR implementation. 

Also, the frequency of the hit may leak information 1,2. The frequency attack really depends on the application. The method listed above, not the salt, can overcome the frequency attack, too.