commit 186e6c9ba1ec9a83472cdce6acd41c2f0215f1ae
parent 647fde5bc6f043150fa424cf20e977644a308358
Author: Mikolai Gütschow <mikolai.guetschow@tu-dresden.de>
Date: Mon, 8 Jul 2024 11:03:43 +0200
crypto primitives: refine HKDF-Mod
Diffstat:
2 files changed, 59 insertions(+), 67 deletions(-)
diff --git a/draft-guetschow-taler-protocol.md b/draft-guetschow-taler-protocol.md
@@ -170,7 +170,7 @@ Based on the HKDF defined in {{hkdf}}, this function returns an OKM that is smal
HKDF-Mod(N, salt, IKM, info) -> OKM
Inputs:
- N big number; Nbits denotes the length of N in bits
+ N big number; Nbit denotes the length of N in bits
salt optional salt value (a non-secret random value);
if not provided, it is set to a string of 64 zeros.
IKM input keying material
@@ -181,18 +181,14 @@ Output:
OKM output keying material (smaller than N)
~~~
-The output OKM is calculated as follows:
+The final output `OKM` is determined iteratively based on a counter initialized at zero,
+where `c` denotes the two least significant octets of the counter in network-byte order
~~~
-Nlen = ceil(Nbits / 8)
-while true:
- counter = 0
- c = 2 least significant octets of counter in network-byte order
- x = HKDF(salt, IKM, info | c, NLen)
- reset all but lower Nbits bits in x
- if x < N:
- OKM = x
- break
+counter = 0
+do until OKM < N:
+ x = HKDF(salt, IKM, info | c, ceil(Nbits/8))
+ OKM = Nbits least significant bits of x
counter += 1
~~~
diff --git a/draft-guetschow-taler-protocol.xml b/draft-guetschow-taler-protocol.xml
@@ -189,7 +189,7 @@ OKM = HKDF-Expand(PRK, info, L) with Hash = SHA-256 (HashLen = 32)
HKDF-Mod(N, salt, IKM, info) -> OKM
Inputs:
- N big number; Nbits denotes the length of N in bits
+ N big number; Nbit denotes the length of N in bits
salt optional salt value (a non-secret random value);
if not provided, it is set to a string of 64 zeros.
IKM input keying material
@@ -200,18 +200,14 @@ Output:
OKM output keying material (smaller than N)
]]></artwork></figure>
-<t>The output OKM is calculated as follows:</t>
+<t>The final output <spanx style="verb">OKM</spanx> is determined iteratively 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[
-Nlen = ceil(Nbits / 8)
-while true:
- counter = 0
- c = 2 least significant octets of counter in network-byte order
- x = HKDF(salt, IKM, info | c, NLen)
- reset all but lower Nbits bits in x
- if x < N:
- OKM = x
- break
+counter = 0
+do until OKM < N:
+ x = HKDF(salt, IKM, info | c, ceil(Nbits/8))
+ OKM = Nbits least significant bits of x
counter += 1
]]></artwork></figure>
@@ -334,7 +330,7 @@ while true:
-<?line 221?>
+<?line 217?>
<section anchor="change-log"><name>Change log</name>
@@ -352,50 +348,50 @@ Education and Research (BMBF) within the project Concrete Contracts.</t>
</back>
<!-- ##markdown-source:
-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
-AA==
+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
+ibNf8oOrzEjcfwCjuSQQExIAAA==
-->