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.