Source: https://arxiv.org/pdf/1909.06535
apk): An elliptic curve public key used to receive payments.ask): A private key used to spend notes and generate nullifiers.ρ): A random scalar for generating unique nullifiers.v): Represents the value of the note.color): Specifies the type of asset.cm): A cryptographic commitment to the note’s details, generated using zero-knowledge-friendly schemes like Pedersen commitments:
$cm=Commit(apk,v,ρ)$When creating a note, the sender encrypts the note details using the ECIES so only the intended recipient can decrypt it.
The protocol uses an ephemeral key generated by the sender for secure encryption:
esk) from the elliptic curve field, which will be used for this specific transaction.epk) is derived as:
$epk = esk \cdot G$epk with the receiver in the transaction.The sender uses their ephemeral private key (esk) and the recipient’s public key (pk_enc) to compute a shared secret ss:
$kk = esk \cdot pk_{enc}$
$ss=KDF(kk)$
This shared secret ss will serve as the symmetric encryption key for the note details.
v, color, ρ, cm) are encrypted using ss as the encryption key, generating a ciphertext C:
$C = \text{Encrypt}_{ss}(\text{note\_details})$The transaction includes:
C.cm, allowing network verifiers to confirm note validity without decrypting its content.epk), enabling the recipient to calculate the shared secret for decryption.