[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] [lsd0001] branch master updated: more resulution WIP
From: |
gnunet |
Subject: |
[GNUnet-SVN] [lsd0001] branch master updated: more resulution WIP |
Date: |
Sat, 05 Oct 2019 13:34:34 +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 7ec7250 more resulution WIP
7ec7250 is described below
commit 7ec725013d657e2cddfff031091f20983c813986
Author: Schanzenbach, Martin <address@hidden>
AuthorDate: Sat Oct 5 13:32:23 2019 +0200
more resulution WIP
---
draft-schanzen-gns.html | 105 ++++++++++++-----------
draft-schanzen-gns.txt | 222 ++++++++++++++++++++++++------------------------
draft-schanzen-gns.xml | 54 ++++++------
3 files changed, 196 insertions(+), 185 deletions(-)
diff --git a/draft-schanzen-gns.html b/draft-schanzen-gns.html
index ed0302e..07b1447 100644
--- a/draft-schanzen-gns.html
+++ b/draft-schanzen-gns.html
@@ -1098,7 +1098,7 @@ async function addMetadata(){try{const
e=document.styleSheets[0].cssRules;for(le
</ul>
</li>
<li class="toc ulEmpty" id="section-boilerplate.3-1.4">
- <p id="section-boilerplate.3-1.4.1"><a href="#section-4"
class="xref">4</a>. <a href="#name-publishing-records" class="xref">Publishing
records</a><a href="#section-boilerplate.3-1.4.1" class="pilcrow">¶</a></p>
+ <p id="section-boilerplate.3-1.4.1"><a href="#section-4"
class="xref">4</a>. <a href="#name-publishing-records" class="xref">Publishing
Records</a><a href="#section-boilerplate.3-1.4.1" class="pilcrow">¶</a></p>
<ul class="toc ulEmpty">
<li class="toc ulEmpty" id="section-boilerplate.3-1.4.2.1">
<p id="section-boilerplate.3-1.4.2.1.1"><a href="#section-4.1"
class="xref">4.1</a>. <a href="#name-key-derivations" class="xref">Key
derivations</a><a href="#section-boilerplate.3-1.4.2.1.1"
class="pilcrow">¶</a></p>
@@ -1115,13 +1115,16 @@ async function addMetadata(){try{const
e=document.styleSheets[0].cssRules;for(le
<p id="section-boilerplate.3-1.5.1"><a href="#section-5"
class="xref">5</a>. <a href="#name-internationalization-and-ch"
class="xref">Internationalization and Character Encoding</a><a
href="#section-boilerplate.3-1.5.1" class="pilcrow">¶</a></p>
</li>
<li class="toc ulEmpty" id="section-boilerplate.3-1.6">
- <p id="section-boilerplate.3-1.6.1"><a href="#section-6"
class="xref">6</a>. <a href="#name-record-resolution" class="xref">Record
Resolution</a><a href="#section-boilerplate.3-1.6.1" class="pilcrow">¶</a></p>
+ <p id="section-boilerplate.3-1.6.1"><a href="#section-6"
class="xref">6</a>. <a href="#name-name-resolution" class="xref">Name
Resolution</a><a href="#section-boilerplate.3-1.6.1" class="pilcrow">¶</a></p>
<ul class="toc ulEmpty">
<li class="toc ulEmpty" id="section-boilerplate.3-1.6.2.1">
<p id="section-boilerplate.3-1.6.2.1.1"><a href="#section-6.1"
class="xref">6.1</a>. <a href="#name-entry-zone" class="xref">Entry Zone</a><a
href="#section-boilerplate.3-1.6.2.1.1" class="pilcrow">¶</a></p>
</li>
<li class="toc ulEmpty" id="section-boilerplate.3-1.6.2.2">
- <p id="section-boilerplate.3-1.6.2.2.1"><a href="#section-6.2"
class="xref">6.2</a>. <a href="#name-recursive-resolution"
class="xref">Recursive Resolution</a><a href="#section-boilerplate.3-1.6.2.2.1"
class="pilcrow">¶</a></p>
+ <p id="section-boilerplate.3-1.6.2.2.1"><a href="#section-6.2"
class="xref">6.2</a>. <a href="#name-record-retrieval" class="xref">Record
Retrieval</a><a href="#section-boilerplate.3-1.6.2.2.1"
class="pilcrow">¶</a></p>
+</li>
+ <li class="toc ulEmpty" id="section-boilerplate.3-1.6.2.3">
+ <p id="section-boilerplate.3-1.6.2.3.1"><a href="#section-6.3"
class="xref">6.3</a>. <a href="#name-record-processing" class="xref">Record
Processing</a><a href="#section-boilerplate.3-1.6.2.3.1"
class="pilcrow">¶</a></p>
</li>
</ul>
</li>
@@ -1551,14 +1554,16 @@ async function addMetadata(){try{const
e=document.styleSheets[0].cssRules;for(le
<div id="publish">
<section id="section-4">
<h2 id="name-publishing-records">
-<a href="#section-4" class="section-number selfRef">4. </a><a
href="#name-publishing-records" class="section-name selfRef">Publishing
records</a>
+<a href="#section-4" class="section-number selfRef">4. </a><a
href="#name-publishing-records" class="section-name selfRef">Publishing
Records</a>
</h2>
<p id="section-4-1">
GNS resource records are published in a distributed hash table (DHT).
- Resource records are grouped by their respective labels, encrypted and
- published together in a single block in the DHT.
- A resource records block is published under a key "q" which is derived
- from the zone key "zk" and the respective label of the contained
records.<a href="#section-4-1" class="pilcrow">¶</a></p>
+ We assume that a DHT provides two functions: GET(key) and
PUT(key,value).
+ In GNS, resource records are grouped by their respective labels,
+ encrypted and published together in a single resource records block
+ (RRBLOCK) in the DHT under a key "q": PUT(q, RRBLOCK).
+ The key "q" which is derived from the zone key "zk" and the respective
+ label of the contained records.<a href="#section-4-1"
class="pilcrow">¶</a></p>
<div id="blinding">
<section id="section-4.1">
<h3 id="name-key-derivations">
@@ -1636,10 +1641,10 @@ async function addMetadata(){try{const
e=document.styleSheets[0].cssRules;for(le
block in the DHT.
The contained resource records are encrypted using a symmetric
encryption scheme.
- A GNS implementation must publish resource record blocks in accordance
- to the properties and recommendations of the underlying DHT. This may
- include a periodic refresh publication.
- A GNS resource records block has the following format:<a
href="#section-4.2-1" class="pilcrow">¶</a></p>
+ A GNS implementation must publish RRBLOCKs
+ in accordance to the properties and recommendations of the underlying
+ DHT. This may include a periodic refresh publication.
+ A GNS RRBLOCK has the following format:<a href="#section-4.2-1"
class="pilcrow">¶</a></p>
<div id="figure_record_block">
<figure id="figure-8">
<div class="artwork art-text alignLeft" id="section-4.2-2.1">
@@ -1705,7 +1710,7 @@ async function addMetadata(){try{const
e=document.styleSheets[0].cssRules;for(le
</dd>
<dt id="section-4.2-4.9">EXPIRATION</dt>
<dd id="section-4.2-4.10">
- Specifies when the resource records block expires and the encrypted
block
+ Specifies when the RRBLOCK expires and the encrypted block
SHOULD be removed from the DHT and caches as it is likely stale.
However, applications MAY continue to use non-expired individual
records until they expire. The value MUST be set to the
@@ -1730,7 +1735,7 @@ async function addMetadata(){try{const
e=document.styleSheets[0].cssRules;for(le
</h3>
<p id="section-4.3-1">
A symmetric encryption scheme is used to encrypt the resource records
- set RDATA into the BDATA field of a GNS record block.
+ set RDATA into the BDATA field of a GNS RRBLOCK.
The wire format of the RDATA looks as follows:<a
href="#section-4.3-1" class="pilcrow">¶</a></p>
<div id="figure_rdata">
<figure id="figure-9">
@@ -1789,28 +1794,19 @@ async function addMetadata(){try{const
e=document.styleSheets[0].cssRules;for(le
</dd>
</dl>
<p id="section-4.3-5">
- To obtain a given resource records block, the client must first
compute
- "zk_h" from "zk"
- and label (as defined in <a href="#blinding" class="xref">Section
4.1</a>)
- and then use "zk_h" to compute "q" which is the query for the DHT.
- Upon receiving a block from the DHT, the receiver first checks
- that the PUBLIC KEY field matches "zk_h". Then, the client MUST
verify
- the signature. These steps are mandatory to prevent record spoofing
and
- MUST be performed before decryption.<a href="#section-4.3-5"
class="pilcrow">¶</a></p>
-<p id="section-4.3-6">
The symmetric keys and initialization vectors are derived from the
record label and the zone key "zk". For decryption of the resource
records block payload, the key material "K" and initialization vector
- "IV" for the symmetric cipher are derived as follows:<a
href="#section-4.3-6" class="pilcrow">¶</a></p>
-<div class="artwork art-text alignLeft" id="section-4.3-7">
+ "IV" for the symmetric cipher are derived as follows:<a
href="#section-4.3-5" class="pilcrow">¶</a></p>
+<div class="artwork art-text alignLeft" id="section-4.3-6">
<pre>
PRK_k := HKDF-Extract ("gns-aes-ctx-key", zk)
PRK_iv := HKDF-Extract ("gns-aes-ctx-iv", zk)
K := HKDF-Expand (PRK_k, label, 512 / 8);
IV := HKDF-Expand (PRK_iv, label, 256 / 8)
- </pre><a href="#section-4.3-7" class="pilcrow">¶</a>
+ </pre><a href="#section-4.3-6" class="pilcrow">¶</a>
</div>
-<p id="section-4.3-8">
+<p id="section-4.3-7">
HKDF is a hash-based key derivation function as defined in
<span>[<a href="#RFC5869" class="xref">RFC5869</a>]</span>.
Specifically, HMAC-SHA512 is used for the
extraction phase and HMAC-SHA256 for the expansion phase.
@@ -1818,10 +1814,10 @@ async function addMetadata(){try{const
e=document.styleSheets[0].cssRules;for(le
keys and 32 octets (256 bit) for the initialization vectors.
We divide the resulting keying material "K" into a 256-bit AES
<span>[<a href="#RFC3826" class="xref">RFC3826</a>]</span> key
- and a 256-bit TWOFISH <span>[<a href="#TWOFISH"
class="xref">TWOFISH</a>]</span> key:<a href="#section-4.3-8"
class="pilcrow">¶</a></p>
+ and a 256-bit TWOFISH <span>[<a href="#TWOFISH"
class="xref">TWOFISH</a>]</span> key:<a href="#section-4.3-7"
class="pilcrow">¶</a></p>
<div id="figure_hkdf_keys">
<figure id="figure-10">
- <div class="artwork art-text alignLeft" id="section-4.3-9.1">
+ <div class="artwork art-text alignLeft" id="section-4.3-8.1">
<pre>
0 8 16 24 32 40 48 56
+-----+-----+-----+-----+-----+-----+-----+-----+
@@ -1839,12 +1835,12 @@ async function addMetadata(){try{const
e=document.styleSheets[0].cssRules;for(le
</div>
<figcaption><a href="#figure-10" class="selfRef">Figure
10</a></figcaption></figure>
</div>
-<p id="section-4.3-10">
+<p id="section-4.3-9">
Similarly, we divide "IV" into a 128-bit initialization vector
- and a 128-bit initialization vector:<a href="#section-4.3-10"
class="pilcrow">¶</a></p>
+ and a 128-bit initialization vector:<a href="#section-4.3-9"
class="pilcrow">¶</a></p>
<div id="figure_hkdf_ivs">
<figure id="figure-11">
- <div class="artwork art-text alignLeft" id="section-4.3-11.1">
+ <div class="artwork art-text alignLeft" id="section-4.3-10.1">
<pre>
0 8 16 24 32 40 48 56
+-----+-----+-----+-----+-----+-----+-----+-----+
@@ -1858,15 +1854,15 @@ async function addMetadata(){try{const
e=document.styleSheets[0].cssRules;for(le
</div>
<figcaption><a href="#figure-11" class="selfRef">Figure
11</a></figcaption></figure>
</div>
-<p id="section-4.3-12">
+<p id="section-4.3-11">
The keys and IVs are used for a CFB128-AES-256 and
CFB128-TWOFISH-256 chained symmetric cipher. Both ciphers are used in
- Cipher FeedBack (CFB) mode <span>[<a href="#RFC3826"
class="xref">RFC3826</a>]</span>.<a href="#section-4.3-12"
class="pilcrow">¶</a></p>
-<div class="artwork art-text alignLeft" id="section-4.3-13">
+ Cipher FeedBack (CFB) mode <span>[<a href="#RFC3826"
class="xref">RFC3826</a>]</span>.<a href="#section-4.3-11"
class="pilcrow">¶</a></p>
+<div class="artwork art-text alignLeft" id="section-4.3-12">
<pre>
RDATA := AES(AES KEY, AES IV, TWOFISH(TWOFISH KEY, TWOFISH IV, BDATA))
BDATA := TWOFISH(TWOFISH KEY, TWOFISH IV, AES(AES KEY, AES IV, RDATA))
- </pre><a href="#section-4.3-13" class="pilcrow">¶</a>
+ </pre><a href="#section-4.3-12" class="pilcrow">¶</a>
</div>
</section>
</section>
@@ -1885,8 +1881,8 @@ async function addMetadata(){try{const
e=document.styleSheets[0].cssRules;for(le
</div>
<div id="resolution">
<section id="section-6">
- <h2 id="name-record-resolution">
-<a href="#section-6" class="section-number selfRef">6. </a><a
href="#name-record-resolution" class="section-name selfRef">Record
Resolution</a>
+ <h2 id="name-name-resolution">
+<a href="#section-6" class="section-number selfRef">6. </a><a
href="#name-name-resolution" class="section-name selfRef">Name Resolution</a>
</h2>
<p id="section-6-1">
TODO<a href="#section-6-1" class="pilcrow">¶</a></p>
@@ -1956,10 +1952,10 @@ async function addMetadata(){try{const
e=document.styleSheets[0].cssRules;for(le
</div>
</section>
</div>
-<div id="recursion">
+<div id="record_retrieval">
<section id="section-6.2">
- <h3 id="name-recursive-resolution">
-<a href="#section-6.2" class="section-number selfRef">6.2. </a><a
href="#name-recursive-resolution" class="section-name selfRef">Recursive
Resolution</a>
+ <h3 id="name-record-retrieval">
+<a href="#section-6.2" class="section-number selfRef">6.2. </a><a
href="#name-record-retrieval" class="section-name selfRef">Record Retrieval</a>
</h3>
<p id="section-6.2-1">
In order to resolve a name in GNS, a type MAY be given.
@@ -1975,25 +1971,38 @@ async function addMetadata(){try{const
e=document.styleSheets[0].cssRules;for(le
</li>
<li id="section-6.2-3.2">Calculate q using the label and zk.<a
href="#section-6.2-3.2" class="pilcrow">¶</a>
</li>
- <li id="section-6.2-3.3">Perform a DHT query GET(q) to retrieve the
record set.<a href="#section-6.2-3.3" class="pilcrow">¶</a>
+ <li id="section-6.2-3.3">Perform a DHT query GET(q) to retrieve the
RRBLOCK.<a href="#section-6.2-3.3" class="pilcrow">¶</a>
</li>
- <li id="section-6.2-3.4">Decrypt and verify the record set.<a
href="#section-6.2-3.4" class="pilcrow">¶</a>
+ <li id="section-6.2-3.4">Verify the RRBLOCK and decrypt the BDATA
contained in it.<a href="#section-6.2-3.4" class="pilcrow">¶</a>
</li>
</ol>
<p id="section-6.2-4">
+ Upon receiving the RRBLOCK from the DHT, apart from verifying the
+ provided signature, the resolver MUST check that the authoritative
+ zone key was used to sign the record:
+ The derived zone key "h*zk" must match the public key provided in
+ the RRBLOCK.<a href="#section-6.2-4" class="pilcrow">¶</a></p>
+</section>
+</div>
+<div id="record_processing">
+<section id="section-6.3">
+ <h3 id="name-record-processing">
+<a href="#section-6.3" class="section-number selfRef">6.3. </a><a
href="#name-record-processing" class="section-name selfRef">Record
Processing</a>
+ </h3>
+<p id="section-6.3-1">
If the remainder of the name to resolve is not empty, the records
result MUST consist of a single PKEY record. The recursion is then
- continued with the PKEY record value as new authoritative zone.<a
href="#section-6.2-4" class="pilcrow">¶</a></p>
-<p id="section-6.2-5">
+ continued with the PKEY record value as new authoritative zone.<a
href="#section-6.3-1" class="pilcrow">¶</a></p>
+<p id="section-6.3-2">
If the remainder of the name to resolve is empty but we have
received
a record set containing only a single PKEY record, the recursion is
continued with the PKEY as authoritative zone and the empty apex
label "@" as remaining name. If the record type to be resolved is
- PKEY, the PKEY record set is returned and the resolution is
concluded.<a href="#section-6.2-5" class="pilcrow">¶</a></p>
-<p id="section-6.2-6">
+ PKEY, the PKEY record set is returned and the resolution is
concluded.<a href="#section-6.3-2" class="pilcrow">¶</a></p>
+<p id="section-6.3-3">
If the remainder of the name to resolve is empty and the records set
does not consist of a PKEY record, the record set is the result and
- the resolution is concluded.<a href="#section-6.2-6"
class="pilcrow">¶</a></p>
+ the resolution is concluded.<a href="#section-6.3-3"
class="pilcrow">¶</a></p>
</section>
</div>
</section>
diff --git a/draft-schanzen-gns.txt b/draft-schanzen-gns.txt
index 5a92bc1..469f41c 100644
--- a/draft-schanzen-gns.txt
+++ b/draft-schanzen-gns.txt
@@ -68,18 +68,19 @@ Table of Contents
3.3. LEHO . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.4. NICK . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.5. BOX . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
- 4. Publishing records . . . . . . . . . . . . . . . . . . . . . 8
+ 4. Publishing Records . . . . . . . . . . . . . . . . . . . . . 8
4.1. Key derivations . . . . . . . . . . . . . . . . . . . . . 8
4.2. Resource records block . . . . . . . . . . . . . . . . . 9
4.3. Block data encryption and decryption . . . . . . . . . . 11
5. Internationalization and Character Encoding . . . . . . . . . 13
- 6. Record Resolution . . . . . . . . . . . . . . . . . . . . . . 13
- 6.1. Entry Zone . . . . . . . . . . . . . . . . . . . . . . . 14
- 6.2. Recursive Resolution . . . . . . . . . . . . . . . . . . 15
+ 6. Name Resolution . . . . . . . . . . . . . . . . . . . . . . . 13
+ 6.1. Entry Zone . . . . . . . . . . . . . . . . . . . . . . . 13
+ 6.2. Record Retrieval . . . . . . . . . . . . . . . . . . . . 14
+ 6.3. Record Processing . . . . . . . . . . . . . . . . . . . . 15
7. Namespace Revocation . . . . . . . . . . . . . . . . . . . . 15
- 8. Security Considerations . . . . . . . . . . . . . . . . . . . 16
- 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 16
- 10. Test Vectors . . . . . . . . . . . . . . . . . . . . . . . . 16
+ 8. Security Considerations . . . . . . . . . . . . . . . . . . . 15
+ 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 15
+ 10. Test Vectors . . . . . . . . . . . . . . . . . . . . . . . . 15
11. Normative References . . . . . . . . . . . . . . . . . . . . 18
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 19
@@ -108,7 +109,6 @@ Table of Contents
-
Schanzenbach, et al. Expires 24 January 2020 [Page 2]
Internet-Draft The GNU Name System July 2019
@@ -423,13 +423,15 @@ Internet-Draft The GNU Name System
July 2019
RECORD DATA is a variable length field containing the "DATA" format
of TYPE as defined for the respective TYPE in DNS.
-4. Publishing records
+4. Publishing Records
GNS resource records are published in a distributed hash table (DHT).
- Resource records are grouped by their respective labels, encrypted
- and published together in a single block in the DHT. A resource
- records block is published under a key "q" which is derived from the
- zone key "zk" and the respective label of the contained records.
+ We assume that a DHT provides two functions: GET(key) and
+ PUT(key,value). In GNS, resource records are grouped by their
+ respective labels, encrypted and published together in a single
+ resource records block (RRBLOCK) in the DHT under a key "q": PUT(q,
+ RRBLOCK). The key "q" which is derived from the zone key "zk" and
+ the respective label of the contained records.
4.1. Key derivations
@@ -443,8 +445,6 @@ Internet-Draft The GNU Name System
July 2019
-
-
Schanzenbach, et al. Expires 24 January 2020 [Page 8]
Internet-Draft The GNU Name System July 2019
@@ -487,10 +487,10 @@ Internet-Draft The GNU Name System
July 2019
GNS records are grouped by their labels and published as a single
block in the DHT. The contained resource records are encrypted using
a symmetric encryption scheme. A GNS implementation must publish
- resource record blocks in accordance to the properties and
- recommendations of the underlying DHT. This may include a periodic
- refresh publication. A GNS resource records block has the following
- format:
+ RRBLOCKs in accordance to the properties and recommendations of the
+ underlying DHT. This may include a periodic refresh publication. A
+ GNS RRBLOCK has the following format:
+
@@ -562,12 +562,12 @@ Schanzenbach, et al. Expires 24 January 2020
[Page 10]
Internet-Draft The GNU Name System July 2019
- EXPIRATION Specifies when the resource records block expires and the
- encrypted block SHOULD be removed from the DHT and caches as it is
- likely stale. However, applications MAY continue to use non-
- expired individual records until they expire. The value MUST be
- set to the expiration time of the resource record contained within
- this block with the smallest expiration time. If a records block
+ EXPIRATION Specifies when the RRBLOCK expires and the encrypted
+ block SHOULD be removed from the DHT and caches as it is likely
+ stale. However, applications MAY continue to use non-expired
+ individual records until they expire. The value MUST be set to
+ the expiration time of the resource record contained within this
+ block with the smallest expiration time. If a records block
includes shadow records, then the maximum expiration time of all
shadow records with matching type and the expiration times of the
non-shadow records is considered. This is a 64-bit absolute date
@@ -579,8 +579,8 @@ Internet-Draft The GNU Name System
July 2019
4.3. Block data encryption and decryption
A symmetric encryption scheme is used to encrypt the resource records
- set RDATA into the BDATA field of a GNS record block. The wire
- format of the RDATA looks as follows:
+ set RDATA into the BDATA field of a GNS RRBLOCK. The wire format of
+ the RDATA looks as follows:
0 8 16 24 32 40 48 56
+-----+-----+-----+-----+-----+-----+-----+-----+
@@ -632,14 +632,6 @@ Internet-Draft The GNU Name System
July 2019
sets with (only) a PKEY record type are never padded. Note that a
record set with a PKEY record MUST NOT contain other records.
- To obtain a given resource records block, the client must first
- compute "zk_h" from "zk" and label (as defined in Section 4.1) and
- then use "zk_h" to compute "q" which is the query for the DHT. Upon
- receiving a block from the DHT, the receiver first checks that the
- PUBLIC KEY field matches "zk_h". Then, the client MUST verify the
- signature. These steps are mandatory to prevent record spoofing and
- MUST be performed before decryption.
-
The symmetric keys and initialization vectors are derived from the
record label and the zone key "zk". For decryption of the resource
records block payload, the key material "K" and initialization vector
@@ -658,22 +650,6 @@ Internet-Draft The GNU Name System
July 2019
"K" into a 256-bit AES [RFC3826] key and a 256-bit TWOFISH [TWOFISH]
key:
-
-
-
-
-
-
-
-
-
-
-
-Schanzenbach, et al. Expires 24 January 2020 [Page 12]
-
-Internet-Draft The GNU Name System July 2019
-
-
0 8 16 24 32 40 48 56
+-----+-----+-----+-----+-----+-----+-----+-----+
| AES KEY |
@@ -689,6 +665,15 @@ Internet-Draft The GNU Name System
July 2019
Figure 10
+
+
+
+
+Schanzenbach, et al. Expires 24 January 2020 [Page 12]
+
+Internet-Draft The GNU Name System July 2019
+
+
Similarly, we divide "IV" into a 128-bit initialization vector and a
128-bit initialization vector:
@@ -717,19 +702,10 @@ Internet-Draft The GNU Name System
July 2019
which are internationalized through the IDNA specifications
[RFC5890].
-6. Record Resolution
+6. Name Resolution
TODO
-
-
-
-
-Schanzenbach, et al. Expires 24 January 2020 [Page 13]
-
-Internet-Draft The GNU Name System July 2019
-
-
6.1. Entry Zone
There are three sources from which the entry zone can be determined
@@ -745,6 +721,15 @@ Internet-Draft The GNU Name System
July 2019
If the TLD is a Base32-encoded public zone key "zk", the entry zone
of the resolution process is implicitly given by the name.
+
+
+
+
+Schanzenbach, et al. Expires 24 January 2020 [Page 13]
+
+Internet-Draft The GNU Name System July 2019
+
+
Example name: www.example.<Base32(zk)>
=> Entry zone: zk
=> Name to resolve from entry zone: www.example
@@ -771,21 +756,6 @@ Internet-Draft The GNU Name System
July 2019
length of two results cannot be equal, as this would indicate a
misconfiguration.
-
-
-
-
-
-
-
-
-
-
-Schanzenbach, et al. Expires 24 January 2020 [Page 14]
-
-Internet-Draft The GNU Name System July 2019
-
-
Example name: www.example.gnu
Local prefix mappings:
gnu = zk0
@@ -795,7 +765,7 @@ Internet-Draft The GNU Name System
July 2019
=> Entry zone: zk1
=> Name to resolve from entry zone: www
-6.2. Recursive Resolution
+6.2. Record Retrieval
In order to resolve a name in GNS, a type MAY be given. However,
filtering of record results according to type is done after the
@@ -808,11 +778,26 @@ Internet-Draft The GNU Name System
July 2019
1. Extract the right-most label from the name to look up.
+
+
+
+Schanzenbach, et al. Expires 24 January 2020 [Page 14]
+
+Internet-Draft The GNU Name System July 2019
+
+
2. Calculate q using the label and zk.
- 3. Perform a DHT query GET(q) to retrieve the record set.
+ 3. Perform a DHT query GET(q) to retrieve the RRBLOCK.
+
+ 4. Verify the RRBLOCK and decrypt the BDATA contained in it.
- 4. Decrypt and verify the record set.
+ Upon receiving the RRBLOCK from the DHT, apart from verifying the
+ provided signature, the resolver MUST check that the authoritative
+ zone key was used to sign the record: The derived zone key "h*zk"
+ must match the public key provided in the RRBLOCK.
+
+6.3. Record Processing
If the remainder of the name to resolve is not empty, the records
result MUST consist of a single PKEY record. The recursion is then
@@ -833,15 +818,6 @@ Internet-Draft The GNU Name System
July 2019
TODO
-
-
-
-
-Schanzenbach, et al. Expires 24 January 2020 [Page 15]
-
-Internet-Draft The GNU Name System July 2019
-
-
8. Security Considerations
TODO
@@ -855,6 +831,17 @@ Internet-Draft The GNU Name System
July 2019
The following represents a test vector for a record of type MX with a
priority of 10 and the mail hostname mail.example.com.
+
+
+
+
+
+
+Schanzenbach, et al. Expires 24 January 2020 [Page 15]
+
+Internet-Draft The GNU Name System July 2019
+
+
label := "mail"
d :=
@@ -890,14 +877,6 @@ Internet-Draft The GNU Name System
July 2019
f4e29a3310767e3b
8b38bc1b276ce2ba
9bf1b49df1e120a3
-
-
-
-Schanzenbach, et al. Expires 24 January 2020 [Page 16]
-
-Internet-Draft The GNU Name System July 2019
-
-
20ecc9dffb68416f
11729ad878ad3bdf
d0b4db2626b620d7
@@ -911,6 +890,14 @@ Internet-Draft The GNU Name System
July 2019
AES_IV :=
a808b929bc9fad7a
+
+
+
+Schanzenbach, et al. Expires 24 January 2020 [Page 16]
+
+Internet-Draft The GNU Name System July 2019
+
+
686bbe3432bed77a
TWOFISH_KEY :=
@@ -946,14 +933,6 @@ Internet-Draft The GNU Name System
July 2019
10df4f39f5ba9f46____________
8cb514a56c0eaae0 zk_h
56745158a63ee4dd
-
-
-
-Schanzenbach, et al. Expires 24 January 2020 [Page 17]
-
-Internet-Draft The GNU Name System July 2019
-
-
76853cb9545e326e
76d7fa920f818291____________
000000540000000f SIZE (=84) | PURPOSE (=15)
@@ -968,6 +947,13 @@ Internet-Draft The GNU Name System
July 2019
001fd19a6406a721
713f0a0d
+
+
+Schanzenbach, et al. Expires 24 January 2020 [Page 17]
+
+Internet-Draft The GNU Name System July 2019
+
+
11. Normative References
[RFC1034] Mockapetris, P., "Domain names - concepts and facilities",
@@ -1003,13 +989,6 @@ Internet-Draft The GNU Name System
July 2019
DOI 10.17487/RFC5891, August 2010,
<https://www.rfc-editor.org/info/rfc5891>.
-
-
-Schanzenbach, et al. Expires 24 January 2020 [Page 18]
-
-Internet-Draft The GNU Name System July 2019
-
-
[RFC6895] Eastlake 3rd, D., "Domain Name System (DNS) IANA
Considerations", BCP 42, RFC 6895, DOI 10.17487/RFC6895,
April 2013, <https://www.rfc-editor.org/info/rfc6895>.
@@ -1023,6 +1002,14 @@ Internet-Draft The GNU Name System
July 2019
for Security", RFC 7748, DOI 10.17487/RFC7748, January
2016, <https://www.rfc-editor.org/info/rfc7748>.
+
+
+
+Schanzenbach, et al. Expires 24 January 2020 [Page 18]
+
+Internet-Draft The GNU Name System July 2019
+
+
[RFC8032] Josefsson, S. and I. Liusvaara, "Edwards-Curve Digital
Signature Algorithm (EdDSA)", RFC 8032,
DOI 10.17487/RFC8032, January 2017,
@@ -1061,4 +1048,17 @@ Authors' Addresses
+
+
+
+
+
+
+
+
+
+
+
+
+
Schanzenbach, et al. Expires 24 January 2020 [Page 19]
diff --git a/draft-schanzen-gns.xml b/draft-schanzen-gns.xml
index 8bcec1e..4e5c8b4 100644
--- a/draft-schanzen-gns.xml
+++ b/draft-schanzen-gns.xml
@@ -428,13 +428,15 @@
</section>
<section anchor="publish" numbered="true" toc="default">
- <name>Publishing records</name>
+ <name>Publishing Records</name>
<t>
GNS resource records are published in a distributed hash table (DHT).
- Resource records are grouped by their respective labels, encrypted and
- published together in a single block in the DHT.
- A resource records block is published under a key "q" which is derived
- from the zone key "zk" and the respective label of the contained
records.
+ We assume that a DHT provides two functions: GET(key) and
PUT(key,value).
+ In GNS, resource records are grouped by their respective labels,
+ encrypted and published together in a single resource records block
+ (RRBLOCK) in the DHT under a key "q": PUT(q, RRBLOCK).
+ The key "q" which is derived from the zone key "zk" and the respective
+ label of the contained records.
</t>
<section anchor="blinding" numbered="true" toc="default">
<name>Key derivations</name>
@@ -507,10 +509,10 @@
block in the DHT.
The contained resource records are encrypted using a symmetric
encryption scheme.
- A GNS implementation must publish resource record blocks in accordance
- to the properties and recommendations of the underlying DHT. This may
- include a periodic refresh publication.
- A GNS resource records block has the following format:
+ A GNS implementation must publish RRBLOCKs
+ in accordance to the properties and recommendations of the underlying
+ DHT. This may include a periodic refresh publication.
+ A GNS RRBLOCK has the following format:
</t>
<figure anchor="figure_record_block">
<artwork name="" type="" align="left" alt=""><![CDATA[
@@ -574,7 +576,7 @@
</dd>
<dt>EXPIRATION</dt>
<dd>
- Specifies when the resource records block expires and the encrypted
block
+ Specifies when the RRBLOCK expires and the encrypted block
SHOULD be removed from the DHT and caches as it is likely stale.
However, applications MAY continue to use non-expired individual
records until they expire. The value MUST be set to the
@@ -596,7 +598,7 @@
<name>Block data encryption and decryption</name>
<t>
A symmetric encryption scheme is used to encrypt the resource records
- set RDATA into the BDATA field of a GNS record block.
+ set RDATA into the BDATA field of a GNS RRBLOCK.
The wire format of the RDATA looks as follows:
</t>
<figure anchor="figure_rdata">
@@ -653,16 +655,6 @@
</dd>
</dl>
- <t>
- To obtain a given resource records block, the client must first
compute
- "zk_h" from "zk"
- and label (as defined in <xref target="blinding" />)
- and then use "zk_h" to compute "q" which is the query for the DHT.
- Upon receiving a block from the DHT, the receiver first checks
- that the PUBLIC KEY field matches "zk_h". Then, the client MUST
verify
- the signature. These steps are mandatory to prevent record spoofing
and
- MUST be performed before decryption.
- </t>
<t>
The symmetric keys and initialization vectors are derived from the
record label and the zone key "zk". For decryption of the resource
@@ -746,7 +738,7 @@
</t>
</section>
<section anchor="resolution" numbered="true" toc="default">
- <name>Record Resolution</name>
+ <name>Name Resolution</name>
<t>
TODO
</t>
@@ -809,8 +801,8 @@
=> Name to resolve from entry zone: www
]]></artwork>
</section>
- <section anchor="recursion" numbered="true" toc="default">
- <name>Recursive Resolution</name>
+ <section anchor="record_retrieval" numbered="true" toc="default">
+ <name>Record Retrieval</name>
<t>
In order to resolve a name in GNS, a type MAY be given.
However, filtering of record results according to type is done after
@@ -825,9 +817,19 @@
<ol>
<li>Extract the right-most label from the name to look up.</li>
<li>Calculate q using the label and zk.</li>
- <li>Perform a DHT query GET(q) to retrieve the record set.</li>
- <li>Decrypt and verify the record set.</li>
+ <li>Perform a DHT query GET(q) to retrieve the RRBLOCK.</li>
+ <li>Verify the RRBLOCK and decrypt the BDATA contained in it.</li>
</ol>
+ <t>
+ Upon receiving the RRBLOCK from the DHT, apart from verifying the
+ provided signature, the resolver MUST check that the authoritative
+ zone key was used to sign the record:
+ The derived zone key "h*zk" must match the public key provided in
+ the RRBLOCK.
+ </t>
+ </section>
+ <section anchor="record_processing" numbered="true" toc="default">
+ <name>Record Processing</name>
<t>
If the remainder of the name to resolve is not empty, the records
result MUST consist of a single PKEY record. The recursion is then
--
To stop receiving notification emails like this one, please contact
address@hidden.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] [lsd0001] branch master updated: more resulution WIP,
gnunet <=