Hello HN,
I am looking to find a ZKP scheme for humans. Instead of remembering passwords, the user can remember a unique function that has a certain property. Services then probe the user to prove that they know such a function, without revealing the function to the service.
The problem is, I'm not good at cryptography. I need to find a set of functions that one such function is
- is easy to evaluate in my head
- is possible for me to remember
- can be pre-calculated
- reasonably fast to use in ZKP
One example of a function is to imaging a 3D cellular shape with holes. The challenge type is a list of "discrete movement through the space", and the response is a list of "crossing the boundary of the 3D shape".
I hope you hackers have a better idea of what types to use for `C`, `R`, and how to choose `generate_f`.
details in pseudo-code:
```idris2
-- this is public
-- the secret `f` generator
-- should discourage rainbow table
generate_f : (random_seed: Seed) -> P -> F
-- this is private
-- the user remembers a function `f` with certain property in set `P`
-- this function should be easy to remember and calculate for humans
F : Type
F = (challenge: C) -> (response: R)
f : F
-- this is public
-- prove that the function is generated with `property` from its response
-- this should be straight-forward to implement using ZKP
verify : (property: P) -> (challenge: C) -> (response: R) -> bool
```