Addresses in Penumbra are diversified payment addresses as in Zcash Sapling but with an additional key for FMD support. For each spend key, there are many possible diversified payment addresses, all of which share viewing keys. Each address consists of three components:

  • a diversifier , an 11 byte random number
  • a transmission key , a point on the decaf377 curve
  • a compact flag key , a point on the decaf377 curve

The diversifier is an 11 byte random number. From we compute a diversified basepoint :

The function is Group Hash which produces a point on the decaf377 curve that we use as a generator. Every diversifier will produce a valid generator.

Next we derive the transmission key by multiplying the diversified basepoint by the incoming viewing key :

The compact flag key is derived from a (diversified) compact detection key using a non-diversified decaf377 basepoint :