lsd0009

LSD0009: The GNU Taler Protocol
Log | Files | Refs | README

commit 33d92c34112ba39b607eec6f91bf09fe9bffbc44
parent 0d490e46b9c35d850e7aef76bbbbcfd10cc99976
Author: Mikolai Gütschow <mikolai.guetschow@tu-dresden.de>
Date:   Tue,  7 Apr 2026 17:46:39 +0200

protocol: add melt-link

Diffstat:
Mdraft-guetschow-taler-protocol.md | 106+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----
Mdraft-guetschow-taler-protocol.xml | 446+++++++++++++++++++++++++++++++++++++++++++++++--------------------------------
2 files changed, 366 insertions(+), 186 deletions(-)

diff --git a/draft-guetschow-taler-protocol.md b/draft-guetschow-taler-protocol.md @@ -847,12 +847,13 @@ msg = Sign-Msg(WALLET_COIN_MELT, ( commitment | coin.h_denom | uint256(0x0) | value | denom.fee_refresh )) check EdDSA-Verify(coin.pub, msg, sig) -(ɣ, _, _) = lookup refresh-record(commitment) +(ɣ, _, _, done, _) = lookup refresh-record(commitment) if refresh-record not found: ɣ = 0..kappa at random for i in 0..n: blind_sigᵢ = RSA-FDH-Sign(planchetᵧᵢ, denomᵧᵢ.priv) - persist refresh-record = (commitment, ɣ, ⟨blind_sigᵢ⟩, h_planchetsᵧ) + link_info = (refresh_seed, ⟨transferₖᵢ.pub⟩, ⟨h_denomᵢ⟩, coin_sig) + persist refresh-record = (commitment, ɣ, ⟨blind_sigᵢ⟩, h_planchetsᵧ, false, link_info) msg = Sign-Msg(EXCHANGE_CONFIRM_MELT, ( commitment | uint32(ɣ) )) sig = EdDSA-Sign(exchange.priv, msg) @@ -888,7 +889,8 @@ for k in 0..kappa and k != ɣ: ~~~ (E2) commitment validation (exchange) -(ɣ, ⟨blind_sigᵢ⟩, h_planchetsᵧ) = lookup refresh-record(commitment) +(ɣ, ⟨blind_sigᵢ⟩, h_planchetsᵧ, done, _) = lookup refresh-record(commitment) +check not done // todo: sure? for k in 0..kappa and k != ɣ: ⟨transferₖᵢ.priv⟩ = HKDF("refresh-transfer-private-keys", batch_seedₖ, "", n*32) for i in 0..n: @@ -905,7 +907,7 @@ value = coin.denom.fee_refresh + sum( ⟨denomᵢ.value⟩ ) + sum( ⟨denomᵢ. commitment' = SHA-512( refresh_seed | uint256(0x0) | coin.pub | value | SHA-512( ⟨h_planchetsₖ⟩ ) ) check commitment == commitment' -persist mark-revealed +persist refresh-record = (_, _, _, true, _) ~~~ {::comment} @@ -925,7 +927,101 @@ for i in 0..n: persist ⟨coinᵧᵢ⟩ ~~~ -// todo: also add linking protocol? +### Link {#link} + +// todo: add introductory text + +~~~ + wallet exchange +knows coin knows refresh-record for coin + | | ++----------------------+ | +| (W1) history request | | ++----------------------+ | + | | + |------ /coins/{coin.pub}/history ------>| + | (sig) | + | | + | +----------------------------+ + | | (E1) refresh secret lookup | + | +----------------------------+ + | | + |<------------- (melt_info) -------------| + | | ++-----------------------+ | +| (W2) coin acquisition | | ++-----------------------+ | + | | +~~~ + +where (for RSA, without age-restriction) + + +{::comment} + +⟨ᵧₖᵢ⟩ +{:/} + +~~~ +(W1) history request (wallet) + +msg = Sign-Msg(COIN_HISTORY_REQUEST, uint64(0x0)) +sig = EdDSA-Sign(coin.priv, msg) +~~~ + +{::comment} + +⟨ᵧₖᵢ⟩ +{:/} + +~~~ +(E1) refresh secret lookup (exchange) + +(ɣ, ⟨blind_sigᵢ⟩, _, done, link_info) = lookup refresh-record(coin.pub) +if done: + melt_info = (ɣ, link_info, ⟨blind_sigᵢ⟩) +else: + melt_info = (ɣ, link_info) +~~~ + +{::comment} + +⟨ᵧₖᵢ⟩ +{:/} + +~~~ +(W2) coin acquisition (wallet) + +(ɣ, link_info, ⟨blind_sigᵢ⟩?) = melt_info +(refresh_seed, ⟨transferₖᵢ.pub⟩, ⟨h_denomᵢ⟩, coin_sig) = link_info + +for i in 0..n: + denomᵢ = Denom-Lookup(h_denomᵢ) +for k in 0..kappa: + for i in 0..n: + sharedₖᵢ = ECDH-EdDSA(coin.priv, transferₖᵢ.pub) + planchet_seedₖᵢ = HKDF(uint32(i), sharedₖᵢ, "taler-coin-derivation", 64) + blind_secretₖᵢ = HKDF("bks", planchet_seedₖᵢ, "", 32) + coinₖᵢ.priv = HKDF("coin", planchet_seedₖᵢ, "", 32) + coinₖᵢ.pub = EdDSA-GetPub(coinₖᵢ.priv) + planchetₖᵢ = RSA-FDH-Blind(SHA-512(coinₖᵢ.pub), blind_secretₖᵢ, denomᵢ.pub) + h_planchetₖᵢ = SHA-512( SHA-512( denomᵢ.pub ) | uint32(0x1) | planchetₖᵢ ) + h_planchetsₖ = SHA-512( ⟨h_planchetₖᵢ⟩ ) +value = coin.denom.fee_refresh + sum( ⟨denomᵢ.value⟩ ) + sum( ⟨denomᵢ.fee_withdraw⟩ ) +commitment = SHA-512( refresh_seed | uint256(0x0) | coin.pub | value + | SHA-512( ⟨h_planchetsₖ⟩ ) ) +msg = Sign-Msg(WALLET_COIN_MELT, + ( commitment | coin.h_denom | uint256(0x0) + | value | denom.fee_refresh )) +check EdDSA-Verify(coin.pub, msg, sig) + +if ⟨blind_sigᵢ⟩ returned: + for i in 0..n: + coinᵧᵢ.sig = RSA-FDH-Unblind(blind_sigᵧᵢ, blind_secretᵧᵢ, denomᵢ.pub) + check RSA-FDH-Verify(SHA-512(coinᵧᵢ.pub), coinᵧᵢ.sig, denomᵢ.pub) + coinᵧᵢ.h_denom = h_denomᵢ + persist ⟨coinᵧᵢ⟩ +~~~ ## Refund {#refund} diff --git a/draft-guetschow-taler-protocol.xml b/draft-guetschow-taler-protocol.xml @@ -784,12 +784,13 @@ msg = Sign-Msg(WALLET_COIN_MELT, ( commitment | coin.h_denom | uint256(0x0) | value | denom.fee_refresh )) check EdDSA-Verify(coin.pub, msg, sig) -(ɣ, _, _) = lookup refresh-record(commitment) +(ɣ, _, _, done, _) = lookup refresh-record(commitment) if refresh-record not found: ɣ = 0..kappa at random for i in 0..n: blind_sigᵢ = RSA-FDH-Sign(planchetᵧᵢ, denomᵧᵢ.priv) - persist refresh-record = (commitment, ɣ, ⟨blind_sigᵢ⟩, h_planchetsᵧ) + link_info = (refresh_seed, ⟨transferₖᵢ.pub⟩, ⟨h_denomᵢ⟩, coin_sig) + persist refresh-record = (commitment, ɣ, ⟨blind_sigᵢ⟩, h_planchetsᵧ, false, link_info) msg = Sign-Msg(EXCHANGE_CONFIRM_MELT, ( commitment | uint32(ɣ) )) sig = EdDSA-Sign(exchange.priv, msg) @@ -808,7 +809,8 @@ for k in 0..kappa and k != ɣ: <artwork><![CDATA[ (E2) commitment validation (exchange) -(ɣ, ⟨blind_sigᵢ⟩, h_planchetsᵧ) = lookup refresh-record(commitment) +(ɣ, ⟨blind_sigᵢ⟩, h_planchetsᵧ, done, _) = lookup refresh-record(commitment) +check not done // todo: sure? for k in 0..kappa and k != ɣ: ⟨transferₖᵢ.priv⟩ = HKDF("refresh-transfer-private-keys", batch_seedₖ, "", n*32) for i in 0..n: @@ -825,7 +827,7 @@ value = coin.denom.fee_refresh + sum( ⟨denomᵢ.value⟩ ) + sum( ⟨denomᵢ. commitment' = SHA-512( refresh_seed | uint256(0x0) | coin.pub | value | SHA-512( ⟨h_planchetsₖ⟩ ) ) check commitment == commitment' -persist mark-revealed +persist refresh-record = (_, _, _, true, _) ]]></artwork> <artwork><![CDATA[ (W3) coin unblinding (wallet) @@ -836,7 +838,81 @@ for i in 0..n: coinᵧᵢ.h_denom = h_denomᵢ persist ⟨coinᵧᵢ⟩ ]]></artwork> - <t>// todo: also add linking protocol?</t> + <section anchor="link"> + <name>Link</name> + <t>// todo: add introductory text</t> + <artwork><![CDATA[ + wallet exchange +knows coin knows refresh-record for coin + | | ++----------------------+ | +| (W1) history request | | ++----------------------+ | + | | + |------ /coins/{coin.pub}/history ------>| + | (sig) | + | | + | +----------------------------+ + | | (E1) refresh secret lookup | + | +----------------------------+ + | | + |<------------- (melt_info) -------------| + | | ++-----------------------+ | +| (W2) coin acquisition | | ++-----------------------+ | + | | +]]></artwork> + <t>where (for RSA, without age-restriction)</t> + <artwork><![CDATA[ +(W1) history request (wallet) + +msg = Sign-Msg(COIN_HISTORY_REQUEST, uint64(0x0)) +sig = EdDSA-Sign(coin.priv, msg) +]]></artwork> + <artwork><![CDATA[ +(E1) refresh secret lookup (exchange) + +(ɣ, ⟨blind_sigᵢ⟩, _, done, link_info) = lookup refresh-record(coin.pub) +if done: + melt_info = (ɣ, link_info, ⟨blind_sigᵢ⟩) +else: + melt_info = (ɣ, link_info) +]]></artwork> + <artwork><![CDATA[ +(W2) coin acquisition (wallet) + +(ɣ, link_info, ⟨blind_sigᵢ⟩?) = melt_info +(refresh_seed, ⟨transferₖᵢ.pub⟩, ⟨h_denomᵢ⟩, coin_sig) = link_info + +for i in 0..n: + denomᵢ = Denom-Lookup(h_denomᵢ) +for k in 0..kappa: + for i in 0..n: + sharedₖᵢ = ECDH-EdDSA(coin.priv, transferₖᵢ.pub) + planchet_seedₖᵢ = HKDF(uint32(i), sharedₖᵢ, "taler-coin-derivation", 64) + blind_secretₖᵢ = HKDF("bks", planchet_seedₖᵢ, "", 32) + coinₖᵢ.priv = HKDF("coin", planchet_seedₖᵢ, "", 32) + coinₖᵢ.pub = EdDSA-GetPub(coinₖᵢ.priv) + planchetₖᵢ = RSA-FDH-Blind(SHA-512(coinₖᵢ.pub), blind_secretₖᵢ, denomᵢ.pub) + h_planchetₖᵢ = SHA-512( SHA-512( denomᵢ.pub ) | uint32(0x1) | planchetₖᵢ ) + h_planchetsₖ = SHA-512( ⟨h_planchetₖᵢ⟩ ) +value = coin.denom.fee_refresh + sum( ⟨denomᵢ.value⟩ ) + sum( ⟨denomᵢ.fee_withdraw⟩ ) +commitment = SHA-512( refresh_seed | uint256(0x0) | coin.pub | value + | SHA-512( ⟨h_planchetsₖ⟩ ) ) +msg = Sign-Msg(WALLET_COIN_MELT, + ( commitment | coin.h_denom | uint256(0x0) + | value | denom.fee_refresh )) +check EdDSA-Verify(coin.pub, msg, sig) + +if ⟨blind_sigᵢ⟩ returned: + for i in 0..n: + coinᵧᵢ.sig = RSA-FDH-Unblind(blind_sigᵧᵢ, blind_secretᵧᵢ, denomᵢ.pub) + check RSA-FDH-Verify(SHA-512(coinᵧᵢ.pub), coinᵧᵢ.sig, denomᵢ.pub) + coinᵧᵢ.h_denom = h_denomᵢ + persist ⟨coinᵧᵢ⟩ +]]></artwork> + </section> </section> <section anchor="refund"> <name>Refund</name> @@ -942,7 +1018,7 @@ for i in 0..n: <refcontent>National Institute of Standards and Technology (U.S.)</refcontent> </reference> </references> - <?line 954?> + <?line 1050?> <section anchor="change-log"> <name>Change log</name> @@ -955,181 +1031,189 @@ Education and Research (BMBF) within the project Concrete Contracts.</t> </section> </back> <!-- ##markdown-source: -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 +pz00LCD8vofKuAtyfsID8VoCyPf1+lNvmhc0zrkurmC2qeo6cvNioRxgQSSR +qP5k3tsujqLp1rjUokdyCamRmA3uQcsg3Tp047M9P06ntFAzW/TKC0eqAlEv +44PFZBMfizbPyQpvqTiL24k6e/svX5wcnNalj7INxpXqp5ZyXuqtKbKMqqcn +tf59uQ6mG2pIrXDmzZLqFVsZBZhvWKFOKoMgDV71EPfeGQJXngOdQNOlUEOp +zJWfuiRkjWryKnZEc6OgLlGWsTAo5301w526HMVYhs3TBJQktZReZzMRqtBm +rQFqE1lB1IznQvJ9+SomzpLpuBcF6nBPkzxmGRo8ojvmWk7QF9GNgr908U00 +OLGBWP610YHCBDI6TaqKeq7aYVlnMHv2OyyQKU8i3ZPagmnuudThykx0O+t7 +8qq5IlPDJLcorrfbrFiMk433RKPZRGCuaXu589vDffj74tnNLPG82NNYbr0m +Btcwr6pALKfPLu+pMqCxiu16nhacNMKXP4GFtSzVRkRAbpBEOgzyfNzQjYeJ +UT5kDEo1WjoCcB4Kxy+OTetXTmnGzNYfdbFz2ae0+1B9JS2v/JThUA8qypEL +2hbLyLKxDGzyKHrp571sWTAABVlc1r58Y/mYquWNygeYSijd/PssH1BS2uxh +vd5RMzHxmbcHTWQzuerNZdlCnCvKQXcz22q4+Xy45uY1RTk6bnVblbjbrkMw +2wjuTetw94W45XUIzLM0Ff//1CH2KoyH6d5RzShEZIbzvjT4WMjJZnK2K9GB +zEDtsmWufUl52b5BDkOPzC0kxVxaT61hZNX5zdXy63mr6Xjq1wym/HDB/pNS +kL90E4rsWe1AYaUjYrquIpMhqq2YA0L/tJWhAs886JufHNx1FrQ0+dFSXch+ +8rvz0h816RsnOBVhorG3QaU3dZO0FDPe4v4IyWkBIk7rqC0sxS0SRRjHgFEQ +Spwg8Ixiz0qgby8L8CCpcfyBKnK0PpzTHGsJ5/aMXutNmKDXjw+OD4siURII +zWyTynJPUjV3i8WqskRU8f79SglOxUaoIv/UTqiCeFTteCuExDOGCl3VXpWr +Mg33Dct+n4Ij2p9UMWRhKeKO+VGhncVwZTaJO+YDcL8jfImRuFohiftiTnmp +5Aes/LU+tx2sLd3ez4wtBITumIuXC60y8E3GLN9YodGcluXxWRPnMLMgN2/V +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 +ZXA36YkAAA== -->