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:
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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
+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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==
-->