ZKBlind roadmap: https://github.com/ZkBlind/zkBlind
- Implement the protocol that ensures 1 email address can only register 1 account
- Generate and verify the zkp of your own this email
- GitHub base repo link https://github.com/zkemail/zk-email-verify
- In our use case, we should have the user public key written in the email
- Write the circuit that will generate the zk proof that (a.) the email has been signed by the correct email provider, (b.) secret of the public that is written in the email is used to sign this zkp (verify email sender and request sender is the same person)
- Use JS to verify this zkp
- Zk JWT which can acquire a JWT token with the metamask wallet
- We have a database records the user info which looks like userId -> public key
- Server needs to verify that user does have the secret key before letting user to do any actions
- Asking metamask wallet to sign every messages is a headache, and it would be nice to have a JWT issued and user only needs to sign in with metamask once.
- Front and backend of the zkInsider for demo. https://www.teamblind.com/
For our project to work there are several constraints
- emaill is signed with DKIM with legit sig (is done by zkemail, we just need to know how it works, you can try it their circom apart and test it out) - it is a big circuits and probably can be broke down into many smaller circuits
- email body has public key and a ECDSA sig (public key is the message that we are trying to sign. I was trying to do this with Spartan-ecdsa yesteday and can probably finish it soon)
- email body has only public key and a ECDSA sig, nothing else. (I can imagine it needs some regex circuits for this)
- user supplied a secret key which matches the public key in the email body