# Epoch Key

* *Epoch keys* are temporary personas which users use them to interact with others.
* Instead of giving attestations to an `identityCommitment`, a random-value-like `epochKey` is the **receiver** of an attestation.
* Epoch key is computed by

```typescript
hash(identityNullifier, epoch, nonce) % epochTreeDepth
```

where `nonce` and be any value between `0` and `numEpochKeyNoncePerEpoch - 1`, so that a user can have `numEpochKeyNoncePerEpoch` epoch keys per epoch.

* Only the user knows his `identityNullifier` so only he knows if he is receiving an attestation, others would see an attestation attesting to a random value.
* In the [epoch key proof](https://unirep.gitbook.io/unirep/protocol/circuits/epoch-key-proof) circuit user can prove that he knows the `epochKey` and can rightfully receive and process the attestations attested to this `epochKey`.

{% hint style="info" %}
See also

* [Epoch](https://unirep.gitbook.io/unirep/protocol/glossary/epoch)
* [Epoch Transition](https://unirep.gitbook.io/unirep/protocol/glossary/epoch-transition)
* [User State Transition](https://unirep.gitbook.io/unirep/protocol/glossary/user-state-transition)
* [Epoch Key Proof](https://unirep.gitbook.io/unirep/protocol/circuits/epoch-key-proof)
  {% endhint %}
