research/zksnarks/semaphore/README.md

35 lines
1.4 KiB
Markdown
Raw Normal View History

2019-10-30 03:45:06 +00:00
# Semaphore experiments
Based on https://github.com/kobigurk/semaphore but only focusing on the core circom circuits, not contracts or on chain orchestration.
See https://github.com/iden3/snarkjs for a quick start.
2019-10-30 09:53:50 +00:00
According to https://github.com/kobigurk/semaphore#zksnark-statement:
2019-10-30 03:45:06 +00:00
2019-10-30 09:53:50 +00:00
```
The statement assures that given public inputs:
signal_hash
external_nullifier
root
nullifiers_hash
and private inputs:
identity_pk
identity_nullifier
identity_trapdoor
identity_path_elements
identity_path_index
auth_sig_r
auth_sig_s
the following conditions hold:
The commitment of the identity structure (identity_pk, identity_nullifier, identity_trapdoor) exists in the identity tree with the root root, using the path (identity_path_elements, identity_path_index). This ensures that the user was added to the system at some point in the past.
nullifiers_hash is uniquely derived from external_nullifier, identity_nullifier and identity_path_index. This ensures a user cannot broadcast a signal with the same external_nullifier more than once.
The message (external_nullifier, signal_hash) is signed by the secret key corresponding to identity_pk, having the signature (auth_sig_r, auth_sig_s). This ensures that a state of the contract having a specific external_nullifier, ensuring no double-signaling.
```
So we need to setup these identity_* and auth_* inputs.