I am not clear from your post if `GetHintHash` is a data retrieval operation or a pure computation function. If you are asking, "Can I design a data storage system which includes hint hashes that can be retrieved from storage via a function named `GetHintHash(hash)` which will allow me to retrieve records that are related?" then yes, obviously, you have just described such a system. If you are asking, "Can I write a function that will tell me if two hashes were derived from similar cleartext, given no other data other than the two hashes?" The answer is **NO**, unless your hash function sucks. You are asking for the converse of the bolded bullet below: > The ideal cryptographic hash function has four main properties: > > - it is quick to compute the hash value for any given message > > - it is infeasible to generate a message from its hash value except by trying all possible messages > > - **a small change to a message should change the hash value so extensively that the new hash value appears uncorrelated with the old hash value** > > - it is infeasible to find two different messages with the same hash value (source: [Wikipedia](https://en.wikipedia.org/wiki/Cryptographic_hash_function))