The Cashu Protocol
Cashu is an ecash protocol built for Bitcoin. It is an open protocol which means that everyone can write their own software to interact with other Cashu apps. Applications that follow the specifications will be compatible with the rest of the ecosystem.
NUTs
Cashu NUTs (Notation, Usage, and Terminology) specify the Cashu protocol and can be found here.
BDHKE
The Blind Diffie-Hellmann Key Exchange (BDHKE) is the basic cryptographic scheme used in the Cashu protocol to sign and redeem ecash tokens. There are three actors in this model:
- Sending user:
Alice
- Receiving user:
Carol
- Mint:
Bob
Bob (mint)
k
private key of mint (one for each amount)K
public key of mintQ
promise (blinded signature)
Alice (user)
x
random string (secret message), corresponds to pointY
on curver
private key (blinding factor)T
blinded messageZ
proof (unblinded signature)
Blind Diffie-Hellmann key exchange (BDHKE)
- Mint
Bob
publishes public keyK = kG
Alice
picks secretx
and computesY = hash_to_curve(x)
Alice
sends toBob
:B_ = Y + rG
withr
being a random blindind factor (blinding)Bob
sends back toAlice
blinded key:C_ = kB_
(these two steps are the DH key exchange) (signing)Alice
can calculate the unblinded key asC_ - rK = kY + krG - krG = kY = C
(unblinding)- Alice can take the pair
(x, C)
as a token and can send it toCarol
. Carol
can send(x, C)
toBob
who then checks thatk*hash_to_curve(x) == C
(verification), and if so treats it as a valid spend of a token, addingx
to the list of spent secrets.