commit 619f168b3efaae4643cc251dd8d6af23407507a8
parent f9ad03dcf8b27b42dd27d7fa9a9c1674089b9c98
Author: Mikolai Gütschow <mikolai.guetschow@tu-dresden.de>
Date: Mon, 8 Jul 2024 12:50:37 +0200
crypto primitives: details for RSA-FDH
Diffstat:
2 files changed, 247 insertions(+), 54 deletions(-)
diff --git a/draft-guetschow-taler-protocol.md b/draft-guetschow-taler-protocol.md
@@ -181,7 +181,7 @@ Output:
OKM output keying material (smaller than N)
~~~
-The final output `OKM` is determined iteratively based on a counter initialized at zero,
+The final output `OKM` is determined deterministically based on a counter initialized at zero,
where `c` denotes the two least significant octets of the counter in network-byte order
~~~
@@ -198,7 +198,9 @@ do until OKM < N:
## Blind Signatures
-### RSA-FDH
+### RSA-FDH {#rsa-fdh}
+
+#### Supporting Functions
~~~
RSA-FDH(msg, pubkey) -> fdh
@@ -222,6 +224,94 @@ fdh = HKDF-Mod(pubkey.N, salt, msg, info)
The resulting `fdh` can be used to test against a malicious RSA pubkey
by verifying that the greatest common denominator (gcd) of `fdh` and `pubkey.N` is 1.
+~~~
+RSA-FDH-Derive(bks, pubkey) -> out
+
+Inputs:
+ bks blinding key secret of length L = 8 octets
+ pubkey RSA public key consisting of modulus N and public exponent e
+
+Output:
+ out full-domain hash of bks over pubkey.N
+~~~
+
+`out` is calculated based on HKDF-Mod from {{hkdf-mod}} as follows:
+
+~~~
+info = 0x426c696e64696e67204b4446 ("Blinding KDF" encoded as UTF-8)
+salt = 0x426c696e64696e67204b444620657874726163746f7220484d4143206b6579 ("Blinding KDF extractor HMAC key" encoded as UTF-8)
+fdh = HKDF-Mod(pubkey.N, salt, bks, info)
+~~~
+
+#### Blinding
+
+~~~
+RSA-FDH-Blind(msg, bks, pubkey) -> out
+
+Inputs:
+ msg message
+ bks blinding key secret of length L = 8 octets
+ pubkey RSA public key consisting of modulus N and public exponent e
+
+Output:
+ out message blinded for pubkey
+~~~
+
+`out` is calculated based on RSA-FDH from {{rsa-fdh}} as follows:
+
+~~~
+data = RSA-FDH(msg, pubkey)
+r = RSA-FDH-Derive(bks, pubkey)
+r_e = r ** pubkey.e (mod N)
+out = r_e * data (mod N)
+~~~
+
+#### Signing
+
+#### Unblinding
+
+~~~
+RSA-FDH-Unblind(sig, bks, pubkey) -> out
+
+Inputs:
+ sig blind signature
+ bks blinding key secret of length L = 8 octets
+ pubkey RSA public key consisting of modulus N and public exponent e
+
+Output:
+ out unblinded signature
+~~~
+
+`out` is calculated as follows:
+
+~~~
+r = RSA-FDH-Derive(bks, pubkey)
+r_inv = inverse of r (mod N)
+out = sig * r_inv (mod N)
+~~~
+
+#### Verifying
+
+~~~
+RSA-FDH-Verify(msg, sig, pubkey) -> out
+
+Inputs:
+ msg message
+ sig signature of pubkey over msg
+ pubkey RSA public key consisting of modulus N and public exponent e
+
+Output:
+ out true, if sig is a valid signature
+~~~
+
+`out` is calculated based on RSA-FDH from {{rsa-fdh}} as follows:
+
+~~~
+data = RSA-FDH(msg, pubkey)
+exp = sig ** pubkey.e (mod N)
+out = (data == exp)
+~~~
+
### Clause-Schnorr
# The Taler Crypto Protocol
diff --git a/draft-guetschow-taler-protocol.xml b/draft-guetschow-taler-protocol.xml
@@ -200,7 +200,7 @@ Output:
OKM output keying material (smaller than N)
]]></artwork></figure>
-<t>The final output <spanx style="verb">OKM</spanx> is determined iteratively based on a counter initialized at zero,
+<t>The final output <spanx style="verb">OKM</spanx> is determined deterministically based on a counter initialized at zero,
where <spanx style="verb">c</spanx> denotes the two least significant octets of the counter in network-byte order</t>
<figure><artwork><![CDATA[
@@ -223,6 +223,8 @@ do until OKM < N:
<section anchor="rsa-fdh"><name>RSA-FDH</name>
+<section anchor="supporting-functions"><name>Supporting Functions</name>
+
<figure><artwork><![CDATA[
RSA-FDH(msg, pubkey) -> fdh
@@ -245,6 +247,99 @@ fdh = HKDF-Mod(pubkey.N, salt, msg, info)
<t>The resulting <spanx style="verb">fdh</spanx> can be used to test against a malicious RSA pubkey
by verifying that the greatest common denominator (gcd) of <spanx style="verb">fdh</spanx> and <spanx style="verb">pubkey.N</spanx> is 1.</t>
+<figure><artwork><![CDATA[
+RSA-FDH-Derive(bks, pubkey) -> out
+
+Inputs:
+ bks blinding key secret of length L = 8 octets
+ pubkey RSA public key consisting of modulus N and public exponent e
+
+Output:
+ out full-domain hash of bks over pubkey.N
+]]></artwork></figure>
+
+<t><spanx style="verb">out</spanx> is calculated based on HKDF-Mod from <xref target="hkdf-mod"/> as follows:</t>
+
+<figure><artwork><![CDATA[
+info = 0x426c696e64696e67204b4446 ("Blinding KDF" encoded as UTF-8)
+salt = 0x426c696e64696e67204b444620657874726163746f7220484d4143206b6579 ("Blinding KDF extractor HMAC key" encoded as UTF-8)
+fdh = HKDF-Mod(pubkey.N, salt, bks, info)
+]]></artwork></figure>
+
+</section>
+<section anchor="blinding"><name>Blinding</name>
+
+<figure><artwork><![CDATA[
+RSA-FDH-Blind(msg, bks, pubkey) -> out
+
+Inputs:
+ msg message
+ bks blinding key secret of length L = 8 octets
+ pubkey RSA public key consisting of modulus N and public exponent e
+
+Output:
+ out message blinded for pubkey
+]]></artwork></figure>
+
+<t><spanx style="verb">out</spanx> is calculated based on RSA-FDH from <xref target="rsa-fdh"/> as follows:</t>
+
+<figure><artwork><![CDATA[
+data = RSA-FDH(msg, pubkey)
+r = RSA-FDH-Derive(bks, pubkey)
+r_e = r ** pubkey.e (mod N)
+out = r_e * data (mod N)
+]]></artwork></figure>
+
+</section>
+<section anchor="signing"><name>Signing</name>
+
+</section>
+<section anchor="unblinding"><name>Unblinding</name>
+
+<figure><artwork><![CDATA[
+RSA-FDH-Unblind(sig, bks, pubkey) -> out
+
+Inputs:
+ sig blind signature
+ bks blinding key secret of length L = 8 octets
+ pubkey RSA public key consisting of modulus N and public exponent e
+
+Output:
+ out unblinded signature
+]]></artwork></figure>
+
+<t><spanx style="verb">out</spanx> is calculated as follows:</t>
+
+<figure><artwork><![CDATA[
+r = RSA-FDH-Derive(bks, pubkey)
+r_inv = inverse of r (mod N)
+out = sig * r_inv (mod N)
+]]></artwork></figure>
+
+</section>
+<section anchor="verifying"><name>Verifying</name>
+
+<figure><artwork><![CDATA[
+RSA-FDH-Verify(msg, sig, pubkey) -> out
+
+Inputs:
+ msg message
+ sig signature of pubkey over msg
+ pubkey RSA public key consisting of modulus N and public exponent e
+
+Output:
+ out true, if sig is a valid signature
+]]></artwork></figure>
+
+<t><spanx style="verb">out</spanx> is calculated based on RSA-FDH from <xref target="rsa-fdh"/> as follows:</t>
+
+<figure><artwork><![CDATA[
+data = RSA-FDH(msg, pubkey)
+exp = sig ** pubkey.e (mod N)
+out = (data == exp)
+]]></artwork></figure>
+
+</section>
</section>
<section anchor="clause-schnorr"><name>Clause-Schnorr</name>
@@ -352,7 +447,7 @@ by verifying that the greatest common denominator (gcd) of <spanx style="verb">f
-<?line 239?>
+<?line 329?>
<section anchor="change-log"><name>Change log</name>
@@ -370,56 +465,64 @@ Education and Research (BMBF) within the project Concrete Contracts.</t>
</back>
<!-- ##markdown-source:
-H4sIAAAAAAAAA81YW3PbuhF+56/Y47xIrShLsiQ7OnGnjh3HnsRKJnYmDzlu
-DZEQhZoiOCRoWUmdX9a3/rF+C4C6JadzOu20zWQsEtgbdr+9gGEYBg8jOggC
-o0wqR7R3M5P0evyRbkQqC3pfaKMjne4FsY4yMQdFXIipCZNKmjKa6UVomDDM
-PWEQCSMTXSxHpLKpDgKVFyMyRVWaXqfzvNMLFrq4Twpd5UwRy1ziT2aC0hRS
-zLfX7uUS1PEoIArJ6rFPUbHMjU4Kkc+WdkFGopzZp1ws5+Asg+AZPciskiM8
-EBUy1yOaGZOXo/39RJl2klWZNG1dJPtpGXdgWhvL+5Y6xRFKs6YHwQ/o94NA
-VGamC5gXQjmR88+VutepUPT6739zHrJ7YBzRzcczOitkicPRx0w9yKJUZkl6
-SjcymmU61cnSUovJpJAPzFDT22X2kYRhFzKdz3RqvmChTd2O3YwgarRFHukY
-9pyFnW5n+NyvVJnh2LyWxVxkTpmcC5WOaO7sbq8i+0dThbET145lEGQaPAZW
-czw+nJ/2up2+fxwcDZ/7x2HvwK5evDk7h/J3l+1uB/87h/vPD4/Cg3DY74Xd
-PqjCwz8f9EF4fXG9oht2ekf748vrm/b55fvrdveoE/YBIQBppToIwjCEg3B0
-EZkg+OUz3bz8RL/cuo25iuNUcvgvcVIdV5FROtsieykXopBkZsLgjyoJ0K4Y
-NYTn0qg0JcZoqDJGdQIPlCSymOZiCQdmRqiMZFHoomwHH0tJELPUVUF6kVGh
-yvufWPtYG+E0h3Qn6K80uSM4UgNZUCpZEGdKZokYAYIWysxowsyna4CrCDmo
-5ooPz6je3bwA8um8yuwxLcEzePQk7A2G9PVZORN4eAqCb9++BX65MS+TJoV/
-oBknTXCZ5ZUZWSBgg3+QgliiOc4tEsm2pTJLYNtbekG9Pw27pCMjOcfeVWbF
-zNKsEM8WqwRJxNxT9SjjWgbb+xbwP6aDXi2HjQvuWMAdh4Ddo61k5q4PI0rK
-UZCupTsp9dvdFg34z5D/cICG7R5zfPYovG2v3THo9pw78LDhDrz9u+7o9gb/
-GX8M+7/ZH3ya7/3RY3/02B8HtT/6/8Qf1qsNVGYLxLhebq78FNq9/1Nv7aDn
-Zu0j77hIF8jcXGcxPKitE6eqgMwVJ0v/sW9jOVUZtCLRv371oHkaOUcYOc+h
-f9MfgbX+mHjrc2d00L11RqEGbJYZjXi5dI/VdIraT9NCz2tJ+x7kG7o/ozTe
-8gNbqTLUAJE6Tz2ItJIIJ9eDK++yEzQjFDEVOR2nKP6+HlxcnZwiqrO5qKPJ
-KyE7s4EW24Lhj8ZGFa5AXHIW4OJy4eMSbRUda8PUFx1Xt7wTt+O0BRBosgAp
-ZVRIY1/X6BDMKhCdmpMp2aw1pGJhhC2UxUQZUSw96zaOYAb5Xx/THYtcbmHb
-plYk0qhKLfx3XO/726138htYeyYL9eCcu1Nwudexg+/j6ZPDIquDpF9howZz
-NKkqnTY3ayluM3gtjUAYV43hs++vt4F1tFlojx/uWFuRAKB0YcHy6tF2R1sF
-Xj3m/FMamfMhyyrh1PLHZDtuR8Ed/4ae647tKunOggToBDjvWrSYqVRSTcgi
-d+kA4DtqRNM2ksZi7anZ9nADU6MUqWnR5Zurlp0MW/TWQu7dmysPk9KFkOls
-CC0MgXi7YBFPDUGZzkIPoQJGIIHsVvNny7z+p6YgNYQO/qBiGUOp6+/gQzkQ
-PEupLGEHo/B+kYVGN2c+GLhRx4BSpsLwgSiKNHA7U71lIA8FDFV2s8jztE7B
-MpeRmiJfVgOMznasbEQI+QQzhDUh9GB1tjUt7VtP6bdgr8f2jmkcTl8Rd1S8
-OKbeYPA71L1jOuoOO83tlHnnD/xrchtQ+daLbn5XbZn7u0Sa6jTVi9JXzPcf
-3kDzJsLWWGi66nHhCmhdfxubXbEZsI6VAEZeAyI3ULQrwja2zVbhza5TNbzS
-McZAwdmnXXW1GbxV9m0yP7Vc6V7VOsCuKjKbqGyVLe6MqrlIOYXxniGWCYY1
-hFUllFXzCdbHG4nA2hvjFu3kw4+TYVxHcS3sZxqjAG4Nk2tsjNl4bJdbqfS/
-zqXfkEz/hWz611C/FdLxBvCBEezXwwbk2E4SSzDOHXyM7fMPMl3SpAaZcHcv
-LvOukasvnCvGWtoKFjPUc7qLti8JXOtdWyxVkvHh0Rl2ppe1WMIF1V5cJkvM
-Hbg347psza5JjqmDazzhRaXWAS9o7Lzx6PNrt0jj3hK1KJIqbTDoyv2jZnPl
-vmMLxPIHFtpl2Pe4vnRC/e+PqVsnIu5HWfgyxWWfrsEokFX1tPIqRrXqPrdU
-P6b4cH0Snp9duMP5Fx7EWpRXEwTSptI0nm2nUj2g+hHTrjl6Yon8DKzZuQQQ
-LBVugg7Tc9wi06pEbjEkPZl8xGjJHVhu4wpqrZZplaYhMoovi7ZJsyBYoHHp
-92rbYz+NgGd3Glnhpq4YblZ0ZSmERU9P3xdaGzEE+XHQGxz0u724P+z38dvp
-Dwf9w87hweCw16XGnnPZCZ3f5OWnn/ZIZvylwFbujzfn4VEzsGXi2NeVRm1u
-E3DYXpK8VG+vH2XAbjheGb+SUFc9Gyxb9dZ5hfBWqfW5c4jPZTsj8QDP9wGR
-CJ6PkE3IThUpjbD42EF+MFkS3KumNpX94C0JN3j7QQdhnc95+kaGIVOFwbDU
-SKK4ybFxOjnAd7WxNiZdf2k6TQUsCa/5M01R8CWdbXaDm7uRr76VWeR+Qk+K
-C7EQ/Mq3tKrgTz2njKzY3wNK/1nizH6WeEaXJ+OT7yiQKDzp87eNiYju7ecB
-lCQM/KlO+O0kus/0IpVx4r58fR25PiHj472pSEu597Sl54YbGtcJWthxMM91
-4cfBXBRI3qX1mvtCROeSbUnpCmULhZRn9uBVXPmazP76IEspimhGjZdXL89d
-N/Z3FjSMv+B+ymfiJiP5wQ4A6A//AK8YASV6FAAA
+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
-->