[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[lsd0001] branch master updated: towards zone crypto agility
From: |
gnunet |
Subject: |
[lsd0001] branch master updated: towards zone crypto agility |
Date: |
Fri, 04 Sep 2020 22:30:44 +0200 |
This is an automated email from the git hooks/post-receive script.
martin-schanzenbach pushed a commit to branch master
in repository lsd0001.
The following commit(s) were added to refs/heads/master by this push:
new d135c69 towards zone crypto agility
d135c69 is described below
commit d135c69bba240bf94da369af945f31ea9c4bf419
Author: Martin Schanzenbach <mschanzenbach@posteo.de>
AuthorDate: Fri Sep 4 22:24:16 2020 +0200
towards zone crypto agility
---
draft-schanzen-gns.xml | 276 ++++++++++++++++++++++++++++++-----------------
ietf/secdispatch/gns.tex | 2 +-
2 files changed, 180 insertions(+), 98 deletions(-)
diff --git a/draft-schanzen-gns.xml b/draft-schanzen-gns.xml
index a0edad4..ce0a183 100644
--- a/draft-schanzen-gns.xml
+++ b/draft-schanzen-gns.xml
@@ -133,43 +133,170 @@
<section anchor="zones" numbered="true" toc="default">
<name>Zones</name>
<t>
- A zone in GNS is defined by a public/private ECDSA key pair (d,zk),
- where d is the private key and zk the corresponding public key.
- GNS employs the curve parameters of the twisted edwards representation
- of Curve25519 <xref target="RFC7748" /> (a.k.a. edwards25519)
- with the ECDSA scheme (<xref target="RFC6979" />).
- In the following, we use the following naming convention for our
- cryptographic primitives:
+ A GNS zone is established by creating a zone key pair.
+ GNS is extensible with respect to the cryptographic scheme used.
+ The two zone key schemes specified within this document are
+ called PKEY and EDKEY, respectively.
</t>
- <dl>
- <dt>d</dt>
- <dd>
- is a 256-bit ECDSA private key.
- In GNS, records are signed using a key derived from "d" as described
in
- <xref target="publish" />.
- </dd>
- <dt>p</dt>
- <dd>
- is the prime of edwards25519 as defined in <xref target="RFC7748" />,
i.e.
- 2^255 - 19.
- </dd>
- <dt>B</dt>
- <dd>
- is the group generator (X(P),Y(P)) of edwards25519 as defined in
- <xref target="RFC7748" />.
- </dd>
- <dt>L</dt>
- <dd>
- is the prime-order subgroup of edwards25519 in <xref target="RFC7748"
/>.
- </dd>
- <dt>zk</dt>
- <dd>
- is the ECDSA public key corresponding to d. It is defined in
- <xref target="RFC6979" /> as the curve point d*B where B is the group
- generator of the elliptic curve. The public key is used to uniquely
- identify a GNS zone and is referred to as the "zone key".
- </dd>
- </dl>
+ <section anchor="zone_privacy" numbered="true" toc="default">
+ <name>Privacy</name>
+ <t>
+ In GNS, the contents of a zone are cryptographically signed before
+ publishing. Instead of the zone private key "d", the signature MUST
+ be created using a blinded public/private key pair d' and zk'.
+ This blinding is realized using a Hierarchical Deterministic Key
+ Derivation (HDKD) scheme.
+ Such a scheme allows the zone owner to derivate a private d' and a
+ resolver to derive the corresponding public key zk' in a deterministic
+ manner from the original public and private zone keys as well as a
+ label.
+ </t>
+ <t>
+ We define that for any type of zone key material the function
+ "HDKD-Private" must be defined as:
+ </t>
+ <artwork name="" type="" align="left" alt=""><![CDATA[
+HDKD-Private(d, label) -> d'
+ ]]></artwork>
+ <t>
+ where:
+ </t>
+ <dl>
+ <dt>d</dt>
+ <dd>
+ Is the private zone key input.
+ </dd>
+ <dt>label</dt>
+ <dd>
+ Is the resource record label.
+ </dd>
+ <dt>d'</dt>
+ <dd>
+ Is the derived (blinded) private zone key.
+ </dd>
+ </dl>
+ <t>
+ Correspondingly, the function "HDKD-Public" must be defined as:
+ </t>
+ <artwork name="" type="" align="left" alt=""><![CDATA[
+HDKD-Public(zk, label) -> zk'
+ ]]></artwork>
+ <t>
+ where:
+ </t>
+ <dl>
+ <dt>zk</dt>
+ <dd>
+ Is the public zone key input.
+ </dd>
+ <dt>label</dt>
+ <dd>
+ Is the resource record label.
+ </dd>
+ <dt>d'</dt>
+ <dd>
+ Is the derived (blinded) public zone key.
+ </dd>
+ </dl>
+ </section>
+ <section anchor="zone_types" numbered="true" toc="default">
+ <name>Zone Types</name>
+ <section anchor="zone_type_pkey" numbered="true" toc="default">
+ <name>PKEY Zone</name>
+ <t>
+ A PKEY zone in GNS is defined by a public/private ECDSA key pair
(d,zk),
+ where d is the private key and zk the corresponding public key.
+ GNS employs the curve parameters of the twisted edwards
representation
+ of Curve25519 <xref target="RFC7748" /> (a.k.a. edwards25519)
+ with the ECDSA scheme (<xref target="RFC6979" />).
+ In the following, we use the following naming convention for our
+ cryptographic primitives:
+ </t>
+ <dl>
+ <dt>d</dt>
+ <dd>
+ is a 256-bit ECDSA private key.
+ </dd>
+ <dt>p</dt>
+ <dd>
+ is the prime of edwards25519 as defined in <xref target="RFC7748"
/>, i.e.
+ 2^255 - 19.
+ </dd>
+ <dt>B</dt>
+ <dd>
+ is the group generator (X(P),Y(P)) of edwards25519 as defined in
+ <xref target="RFC7748" />.
+ </dd>
+ <dt>L</dt>
+ <dd>
+ is the prime-order subgroup of edwards25519 in <xref
target="RFC7748" />.
+ </dd>
+ <dt>zk</dt>
+ <dd>
+ is the ECDSA public key corresponding to d. It is defined in
+ <xref target="RFC6979" /> as the curve point d*B where B is the
group
+ generator of the elliptic curve. The public key is used to
uniquely
+ identify a GNS zone and is referred to as the "zone key".
+ </dd>
+ </dl>
+ <t>
+ Given a label, the output of the HDKD-Private function is
+ calculated as follows for PKEY zones:
+ </t>
+ <artwork name="" type="" align="left" alt=""><![CDATA[
+zk := d * B
+PRK_h := HKDF-Extract ("key-derivation", zk)
+h := HKDF-Expand (PRK_h, label | "gns", 512 / 8)
+d' := h * d mod L
+ ]]></artwork>
+ <t>
+ Equally, given a label, the output of the HDKD-Public function is
+ calculated as follows for PKEY zones:
+ </t>
+ <artwork name="" type="" align="left" alt=""><![CDATA[
+PRK_h := HKDF-Extract ("key-derivation", zk)
+h := HKDF-Expand (PRK_h, label | "gns", 512 / 8)
+zk' := h mod L * zk
+ ]]></artwork>
+ <t>
+ We use a hash-based key derivation function (HKDF) as defined in
+ <xref target="RFC5869" />. We use HMAC-SHA512 for the extraction
+ phase and HMAC-SHA256 for the expansion phase.
+ </t>
+ <dl>
+ <dt>PRK_h</dt>
+ <dd>
+ is key material retrieved using an HKDF using the string
+ "key-derivation" as salt and the public zone key "zk" as initial
+ keying material.
+ </dd>
+ <dt>h</dt>
+ <dd>
+ is the 512-bit HKDF expansion result. The expansion info input is
a
+ concatenation of the label and string "gns".
+ </dd>
+ <dt>d</dt>
+ <dd>
+ is the 256-bit private zone key as defined in <xref
target="zone_type_pkey" />.
+ </dd>
+ <dt>label</dt>
+ <dd>is a UTF-8 string under which the resource records are
published.
+ </dd>
+ <dt>L</dt>
+ <dd>
+ is the prime-order subgroup as defined in <xref
target="zone_type_pkey" />.
+ </dd>
+ </dl>
+ <t>
+ We point out that the multiplication of "zk" with "h" is a point
multiplication,
+ while the multiplication of "d" with "h" is a scalar multiplication.
+ </t>
+ </section>
+ <section anchor="zone_type_edkey" numbered="true" toc="default">
+ <name>EDKEY Zone</name>
+ <t>TODO: Do the same as the above with a Schnorr variant</t>
+ </section>
+ </section>
</section>
<section anchor="rrecords" numbered="true" toc="default">
<name>Resource Records</name>
@@ -537,7 +664,6 @@
</dl>
</section>
</section>
-
<section anchor="publish" numbered="true" toc="default">
<name>Publishing Records</name>
<t>
@@ -550,67 +676,28 @@
label of the contained records.
</t>
<section anchor="blinding" numbered="true" toc="default">
- <name>Key Derivations</name>
+ <name>DHT Key Derivations</name>
<t>
Given a label, the DHT key "q" is derived as follows:
</t>
<artwork name="" type="" align="left" alt=""><![CDATA[
-PRK_h := HKDF-Extract ("key-derivation", zk)
-h := HKDF-Expand (PRK_h, label | "gns", 512 / 8)
-d_h := h * d mod L
-zk_h := h mod L * zk
-q := SHA512 (zk_h)
+q := SHA512 (HDKD-Public(zk, label))
]]></artwork>
- <t>
- We use a hash-based key derivation function (HKDF) as defined in
- <xref target="RFC5869" />. We use HMAC-SHA512 for the extraction
- phase and HMAC-SHA256 for the expansion phase.
- </t>
<dl>
- <dt>PRK_h</dt>
- <dd>
- is key material retrieved using an HKDF using the string
- "key-derivation" as salt and the public zone key "zk" as initial
- keying material.
- </dd>
- <dt>h</dt>
- <dd>
- is the 512-bit HKDF expansion result. The expansion info input is a
- concatenation of the label and string "gns".
- </dd>
- <dt>d</dt>
- <dd>
- is the 256-bit private zone key as defined in <xref target="zones"
/>.
- </dd>
<dt>label</dt>
<dd>is a UTF-8 string under which the resource records are published.
</dd>
- <dt>d_h</dt>
- <dd>
- is a 256-bit private key derived from the "d" using the
- keying material "h".
- </dd>
- <dt>zk_h</dt>
- <dd>
- is a 256-bit public key derived from the zone key "zk" using the
- keying material "h".
- </dd>
- <dt>L</dt>
+ <dt>zk</dt>
<dd>
- is the prime-order subgroup as defined in <xref target="zones" />.
+ is the public zone key.
</dd>
<dt>q</dt>
<dd>
Is the 512-bit DHT key under which the resource records block is
published.
- It is the SHA512 hash over the public key "zk_h" corresponding to
the
- derived private key "d_h".
+ It is the SHA512 hash over the derived public zone key.
</dd>
</dl>
- <t>
- We point out that the multiplication of "zk" with "h" is a point
multiplication,
- while the multiplication of "d" with "h" is a scalar multiplication.
- </t>
</section>
<section anchor="wire" numbered="true" toc="default">
<name>Resource Records Block</name>
@@ -630,18 +717,16 @@ q := SHA512 (zk_h)
<artwork name="" type="" align="left" alt=""><![CDATA[
0 8 16 24 32 40 48 56
+-----+-----+-----+-----+-----+-----+-----+-----+
+| ZONE TYPE |
++-----+-----+-----+-----+-----+-----+-----+-----+
| SIGNATURE |
-| |
-| |
-| |
-| |
-| |
-| |
+/ /
+/ /
| |
+-----+-----+-----+-----+-----+-----+-----+-----+
| PUBLIC KEY |
-| |
-| |
+/ /
+/ /
| |
+-----+-----+-----+-----+-----+-----+-----+-----+
| SIZE | PURPOSE |
@@ -658,17 +743,14 @@ q := SHA512 (zk_h)
<dl>
<dt>SIGNATURE</dt>
<dd>
- A 512-bit ECDSA deterministic signature compliant with
- <xref target="RFC6979" />. The signature is computed over the data
- following the PUBLIC KEY field.
- The signature is created using the derived private key "d_h" (see
- <xref target="publish" />).
+ The signature is computed over the data following
+ the PUBLIC KEY field.
+ The signature is created using the derived private key "d'" (see
+ <xref target="zone_types" />).
</dd>
<dt>PUBLIC KEY</dt>
<dd>
- is the 256-bit public key "zk_h" to be used to verify SIGNATURE. The
- wire format of this value is defined in <xref target="RFC8032" />,
- Section 5.1.5.
+ is the public key "zk'" to be used to verify SIGNATURE.
</dd>
<dt>SIZE</dt>
<dd>
diff --git a/ietf/secdispatch/gns.tex b/ietf/secdispatch/gns.tex
index 00c9151..2f9269c 100644
--- a/ietf/secdispatch/gns.tex
+++ b/ietf/secdispatch/gns.tex
@@ -10,7 +10,7 @@
\usepackage{multirow}
\title{The GNU Name System\\\small{secdispatch -- IETF
108}\\\small{\url{https://datatracker.ietf.org/doc/draft-schanzen-gns/}}}
\date{30/7/2020}
-\author{Martin Schanzenbach}
+\author{Martin Schanzenbach\\Christian Grothoff\\Bernd Fix}
\institute{\hfill\large{GNUnet} \includegraphics[trim={0cm 1.5cm 0cm
0cm},clip,width=4em]{gnunet}}
\begin{document}
\metroset{block=fill,sectionpage=progressbar,numbering=counter}
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [lsd0001] branch master updated: towards zone crypto agility,
gnunet <=