gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[lsd0001] branch master updated: fix refs, security considerations, and


From: gnunet
Subject: [lsd0001] branch master updated: fix refs, security considerations, and revocation validation
Date: Sun, 19 Apr 2020 13:30:33 +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 98ce51c  fix refs, security considerations, and revocation validation
98ce51c is described below

commit 98ce51c39efce2bf98a87a2dfe4b7263a4187c6c
Author: Schanzenbach, Martin <address@hidden>
AuthorDate: Sun Apr 19 13:25:48 2020 +0200

    fix refs, security considerations, and revocation validation
---
 draft-schanzen-gns.html | 299 ++++++++++++++++++++++++++---------------------
 draft-schanzen-gns.txt  | 304 ++++++++++++++++++++++++++++--------------------
 draft-schanzen-gns.xml  |  62 +++++++---
 3 files changed, 390 insertions(+), 275 deletions(-)

diff --git a/draft-schanzen-gns.html b/draft-schanzen-gns.html
index a906e77..1cef7e3 100644
--- a/draft-schanzen-gns.html
+++ b/draft-schanzen-gns.html
@@ -1224,12 +1224,22 @@ table {
 </li>
 <li class="toc ulEmpty" id="section-toc.1-1.7">
             <p id="section-toc.1-1.7.1"><a href="#section-7" 
class="xref">7</a>.  <a href="#name-zone-revocation" class="xref">Zone 
Revocation</a><a href="#section-toc.1-1.7.1" class="pilcrow">¶</a></p>
+<ul class="toc ulEmpty">
+<li class="toc ulEmpty" id="section-toc.1-1.7.2.1">
+                <p id="section-toc.1-1.7.2.1.1"><a href="#section-7.1" 
class="xref">7.1</a>.  <a href="#name-verification" 
class="xref">Verification</a><a href="#section-toc.1-1.7.2.1.1" 
class="pilcrow">¶</a></p>
+</li>
+</ul>
 </li>
 <li class="toc ulEmpty" id="section-toc.1-1.8">
             <p id="section-toc.1-1.8.1"><a href="#section-8" 
class="xref">8</a>.  <a href="#name-determining-the-root-zone-a" 
class="xref">Determining the Root Zone and Zone Governance</a><a 
href="#section-toc.1-1.8.1" class="pilcrow">¶</a></p>
 </li>
 <li class="toc ulEmpty" id="section-toc.1-1.9">
             <p id="section-toc.1-1.9.1"><a href="#section-9" 
class="xref">9</a>.  <a href="#name-security-considerations" 
class="xref">Security Considerations</a><a href="#section-toc.1-1.9.1" 
class="pilcrow">¶</a></p>
+<ul class="toc ulEmpty">
+<li class="toc ulEmpty" id="section-toc.1-1.9.2.1">
+                <p id="section-toc.1-1.9.2.1.1"><a href="#section-9.1" 
class="xref">9.1</a>.  <a href="#name-revocations" 
class="xref">Revocations</a><a href="#section-toc.1-1.9.2.1.1" 
class="pilcrow">¶</a></p>
+</li>
+</ul>
 </li>
 <li class="toc ulEmpty" id="section-toc.1-1.10">
             <p id="section-toc.1-1.10.1"><a href="#section-10" 
class="xref">10</a>. <a href="#name-iana-considerations" class="xref">IANA 
Considerations</a><a href="#section-toc.1-1.10.1" class="pilcrow">¶</a></p>
@@ -2388,19 +2398,23 @@ table {
          The revocation message including the proof-of-work MAY be calculated
          ahead of time to support timely revocation.<a href="#section-7-2" 
class="pilcrow">¶</a></p>
 <p id="section-7-3">
-         For all occurences below, "scrypt" is the scrypt Password-based Key
-         Derivation Function as defined in <span>[<a href="#RFC7914" 
class="xref">RFC7914</a>]</span> with the
-         following parameters set:<a href="#section-7-3" 
class="pilcrow">¶</a></p>
+         For all occurences below, "Argon2d" is the Password-based Key
+         Derivation Function as defined in <span>[<a href="#Argon2" 
class="xref">Argon2</a>]</span> with the
+         following fixed parameters:<a href="#section-7-3" 
class="pilcrow">¶</a></p>
 <div class="artwork art-text alignLeft" id="section-7-4">
 <pre>
          S := "gnunet-revocation-proof-of-work" /* Salt */
-         N := 2
-         r := 8 /* Block size */
-         p := 2 /* Parallelization parameter */
+         t := 3 /* Iterations */
+         m := 1024 /* Memory size, 1 MiB */
+         T := 64 /* Tag (=output) length in bytes */
+         p := 1 /* Parallelization parameter */
+         v := 0x13 /* Version */
+         y := 0 /* Type (Argon2d) */
+         X, K is unused
          </pre><a href="#section-7-4" class="pilcrow">¶</a>
 </div>
 <p id="section-7-5">
-         The following the the basic data "REV" on which the proof-of work is
+         The following is the message string "P" on which the proof-of work is
          calculated:<a href="#section-7-5" class="pilcrow">¶</a></p>
 <div id="figure_revocation">
 <figure id="figure-15">
@@ -2408,7 +2422,9 @@ table {
 <pre>
            0     8     16    24    32    40    48    56
            +-----+-----+-----+-----+-----+-----+-----+-----+
-           |                     NONCE                     |
+           |                      POW                      |
+           +-----------------------------------------------+
+           |                   TIMESTAMP                   |
            +-----------------------------------------------+
            |                  PUBLIC KEY                   |
            |                                               |
@@ -2419,83 +2435,61 @@ table {
 </div>
 <figcaption><a href="#figure-15" class="selfRef">Figure 
15</a></figcaption></figure>
 </div>
-<p id="section-7-7">
-         A single pass in the proof-of-work algorithm is defined as follows:<a 
href="#section-7-7" class="pilcrow">¶</a></p>
-<ol start="1" type="1" class="normal" id="section-7-8">
-        <li id="section-7-8.1">Derive initial key material K from the REV 
data.<a href="#section-7-8.1" class="pilcrow">¶</a>
-</li>
-<li id="section-7-8.2">Derive IV material from the key material K.<a 
href="#section-7-8.2" class="pilcrow">¶</a>
-</li>
-<li id="section-7-8.3">Encrypt the REV data using K and IV.<a 
href="#section-7-8.3" class="pilcrow">¶</a>
-</li>
-<li id="section-7-8.4">Derive the proof of work from the encrypted REV and 
check against
-           the proof condition.<a href="#section-7-8.4" class="pilcrow">¶</a>
-</li>
-</ol>
+<p id="section-7-7">where:<a href="#section-7-7" class="pilcrow">¶</a></p>
+<dl class="dlParallel" id="section-7-8">
+        <dt id="section-7-8.1">POW</dt>
+<dd id="section-7-8.2">
+           A 64-bit solution to the proof of work.<a href="#section-7-8.2" 
class="pilcrow">¶</a>
+</dd>
+<dt id="section-7-8.3">TIMESTAMP</dt>
+<dd id="section-7-8.4">
+           denotes the absolute 64-bit expiration date of the record.
+           In microseconds since midnight (0 hour), January 1, 1970 in network
+           byte order.<a href="#section-7-8.4" class="pilcrow">¶</a>
+</dd>
+<dt id="section-7-8.5">PUBLIC KEY</dt>
+<dd id="section-7-8.6">
+           A 512-bit ECDSA deterministic signature compliant with
+           <span>[<a href="#RFC6979" class="xref">RFC6979</a>]</span> over the 
public zone zk of the zone
+           which is revoked and corresponds to the key used in the 
proof-of-work.
+           The signature is created using the private zone key "d" (see
+           <a href="#zones" class="xref">Section 2</a>).<a 
href="#section-7-8.6" class="pilcrow">¶</a>
+</dd>
+</dl>
 <p id="section-7-9">
-         The first step in the PoW is a call to scrypt with the REV data as
-         password parameter to derive the initial key material K:<a 
href="#section-7-9" class="pilcrow">¶</a></p>
-<figure id="figure-16">
-        <div class="artwork art-text alignLeft" id="section-7-10.1">
-<pre>
-         K := scrypt (P := REV, dkLen := 32)
-         </pre>
-</div>
-<figcaption><a href="#figure-16" class="selfRef">Figure 
16</a></figcaption></figure>
+         Traditionally, proof-of-work schemes require to find a "POW" such that
+         at least D leading zeroes are found in the hash result.
+         D is then referred to as the "difficulty" of the proof-of-work.
+         In order to reduce the variance in time it takes to calculate the
+         proof-of-work, we require that a number "Z" different PoWs must be
+         found that on average have "D" leading zeroes.<a href="#section-7-9" 
class="pilcrow">¶</a></p>
+<p id="section-7-10">
+         The resulting proofs may then published and disseminated. The concrete
+         dissemination and publication methods are out of scope of this
+         document. Given an average difficulty of "D", the proofs have an
+         expiration time of 365 days. With each additional bit difficulty, the
+         lifetime of the proof is prolonged for another 365 days.
+         Consequently, by calculating a more difficult PoW, the lifetime of the
+         proof can be increased on demand by the zone owner.<a 
href="#section-7-10" class="pilcrow">¶</a></p>
 <p id="section-7-11">
-         where dkLen denotes the intended output length in octets.
-         The second step is to derive a 128 bit initialization vector using 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.<a 
href="#section-7-11" class="pilcrow">¶</a></p>
-<figure id="figure-17">
-        <div class="artwork art-text alignLeft" id="section-7-12.1">
-<pre>
-           PRK := HKDF-Extract ("gnunet-proof-of-work-iv", K)
-           IV := HKDF-Expand (PRK,
-                              "gnunet-revocation-proof-of-work",
-                              128 / 8);
-
-         </pre>
-</div>
-<figcaption><a href="#figure-17" class="selfRef">Figure 
17</a></figcaption></figure>
-<p id="section-7-13">
-         We use the resulting keying material "K" as a 256-bit TWOFISH
-         <span>[<a href="#TWOFISH" class="xref">TWOFISH</a>]</span> key and 
use IV as the corresponding
-         initialization vector:<a href="#section-7-13" 
class="pilcrow">¶</a></p>
-<figure id="figure-18">
-        <div class="artwork art-text alignLeft" id="section-7-14.1">
-<pre>
-           EREV := TWOFISH(K, IV, REV)
-         </pre>
-</div>
-<figcaption><a href="#figure-18" class="selfRef">Figure 
18</a></figcaption></figure>
-<p id="section-7-15">
-         The above EREV data object is again derived using the scrypt 
algorithm.
-         The proof of work is complete, if the following inequality holds for a
-         given NONCE:<a href="#section-7-15" class="pilcrow">¶</a></p>
-<figure id="figure-19">
-        <div class="artwork art-text alignLeft" id="section-7-16.1">
-<pre>
-         scrypt(P := EREV, dkLen := 64) &lt; 2^(39)-1
-         
-         </pre>
-</div>
-<figcaption><a href="#figure-19" class="selfRef">Figure 
19</a></figcaption></figure>
-<p id="section-7-17">
-         where dkLen again denotes the intended output length in octets.
-         The final revocation data object consists of a signature over the
-         public of the zone which is revoked, the zone key itself and the just
-         calculated proof-of-work.
-         The resulting block is then published and disseminated. The concrete
-         dissemination and publication methods are out of scope of this 
document.<a href="#section-7-17" class="pilcrow">¶</a></p>
+         Given that proof has been found, a revocation data object is defined
+         as follows:<a href="#section-7-11" class="pilcrow">¶</a></p>
 <div id="figure_revocationdata">
-<figure id="figure-20">
-        <div class="artwork art-text alignLeft" id="section-7-18.1">
+<figure id="figure-16">
+        <div class="artwork art-text alignLeft" id="section-7-12.1">
 <pre>
            0     8     16    24    32    40    48    56
            +-----+-----+-----+-----+-----+-----+-----+-----+
+           |                   TIMESTAMP                   |
+           +-----+-----+-----+-----+-----+-----+-----+-----+
+           |                      TTL                      |
+           +-----+-----+-----+-----+-----+-----+-----+-----+
+           |                     POW_0                     |
+           +-----+-----+-----+-----+-----+-----+-----+-----+
+           |                       ...                     |
+           +-----+-----+-----+-----+-----+-----+-----+-----+
+           |                     POW_Z-1                   |
+           +-----------------------------------------------+
            |                   SIGNATURE                   |
            |                                               |
            |                                               |
@@ -2505,73 +2499,86 @@ table {
            |                                               |
            |                                               |
            +-----+-----+-----+-----+-----+-----+-----+-----+
+           |         SIZE (0x24)   |       PURPOSE (0x03)  |
+           +-----+-----+-----+-----+-----+-----+-----+-----+
            |                  PUBLIC KEY                   |
            |                                               |
            |                                               |
            |                                               |
            +-----+-----+-----+-----+-----+-----+-----+-----+
-           |                    NONCE                      |
-           +-----------------------------------------------+
            </pre>
 </div>
-<figcaption><a href="#figure-20" class="selfRef">Figure 
20</a></figcaption></figure>
+<figcaption><a href="#figure-16" class="selfRef">Figure 
16</a></figcaption></figure>
 </div>
-<p id="section-7-19">where:<a href="#section-7-19" class="pilcrow">¶</a></p>
-<dl class="dlParallel" id="section-7-20">
-        <dt id="section-7-20.1">SIGNATURE</dt>
-<dd id="section-7-20.2">
+<p id="section-7-13">where:<a href="#section-7-13" class="pilcrow">¶</a></p>
+<dl class="dlParallel" id="section-7-14">
+        <dt id="section-7-14.1">TIMESTAMP</dt>
+<dd id="section-7-14.2">
+           denotes the absolute 64-bit expiration date of the revocation.
+           In microseconds since midnight (0 hour), January 1, 1970 in network
+           byte order.<a href="#section-7-14.2" class="pilcrow">¶</a>
+</dd>
+<dt id="section-7-14.3">TTL</dt>
+<dd id="section-7-14.4">
+           denotes the relative 64-bit time to live of of the record in
+           microseconds also in network byte order.<a href="#section-7-14.4" 
class="pilcrow">¶</a>
+</dd>
+<dt id="section-7-14.5">POW_i</dt>
+<dd id="section-7-14.6">
+           The POWs calculated as part of the proof-of-work. Each POW_i MUST
+           be unique in the set of POW values.<a href="#section-7-14.6" 
class="pilcrow">¶</a>
+</dd>
+<dt id="section-7-14.7">SIGNATURE</dt>
+<dd id="section-7-14.8">
            A 512-bit ECDSA deterministic signature compliant with
            <span>[<a href="#RFC6979" class="xref">RFC6979</a>]</span> over the 
public zone zk of the zone
            which is revoked and corresponds to the key used in the 
proof-of-work.
            The signature is created using the private zone key "d" (see
-           <a href="#zones" class="xref">Section 2</a>).<a 
href="#section-7-20.2" class="pilcrow">¶</a>
+           <a href="#zones" class="xref">Section 2</a>).<a 
href="#section-7-14.8" class="pilcrow">¶</a>
+</dd>
+<dt id="section-7-14.9">SIZE</dt>
+<dd id="section-7-14.10">
+           A 32-bit value containing the length of the signed data in bytes
+           (36 bytes) in network byte order.<a href="#section-7-14.10" 
class="pilcrow">¶</a>
+</dd>
+<dt id="section-7-14.11">PURPOSE</dt>
+<dd id="section-7-14.12">
+           A 32-bit signature purpose flag. This field MUST be 3 (in network
+           byte order).<a href="#section-7-14.12" class="pilcrow">¶</a>
 </dd>
-<dt id="section-7-20.3">PUBLIC KEY</dt>
-<dd id="section-7-20.4">
+<dt id="section-7-14.13">PUBLIC KEY</dt>
+<dd id="section-7-14.14">
            is the 256-bit public key "zk" of the zone which is being revoked 
and
            the key to be used to verify SIGNATURE. The
            wire format of this value is defined in <span>[<a href="#RFC8032" 
class="xref">RFC8032</a>]</span>,
-           Section 5.1.5.<a href="#section-7-20.4" class="pilcrow">¶</a>
-</dd>
-<dt id="section-7-20.5">NONCE</dt>
-<dd id="section-7-20.6">
-           The nonce calculated as part of the proof-of-work.<a 
href="#section-7-20.6" class="pilcrow">¶</a>
+           Section 5.1.5.<a href="#section-7-14.14" class="pilcrow">¶</a>
 </dd>
 </dl>
-<p id="section-7-21">
-         The signature over the public key covers a 32 bit pseuso header
-         conceptually prefixed to the public key. The pseudo header includes
-         the key length and signature purpose:<a href="#section-7-21" 
class="pilcrow">¶</a></p>
-<div id="figure_pkeywithpseudo">
-<figure id="figure-21">
-        <div class="artwork art-text alignLeft" id="section-7-22.1">
-<pre>
-           0     8     16    24    32    40    48    56
-           +-----+-----+-----+-----+-----+-----+-----+-----+
-           |         SIZE (0x24)   |       PURPOSE (0x03)  |
-           +-----+-----+-----+-----+-----+-----+-----+-----+
-           |                  PUBLIC KEY                   |
-           |                                               |
-           |                                               |
-           |                                               |
-           +-----+-----+-----+-----+-----+-----+-----+-----+
-           </pre>
-</div>
-<figcaption><a href="#figure-21" class="selfRef">Figure 
21</a></figcaption></figure>
+<div id="revocation_verification">
+<section id="section-7.1">
+        <h3 id="name-verification">
+<a href="#section-7.1" class="section-number selfRef">7.1. </a><a 
href="#name-verification" class="section-name selfRef">Verification</a>
+        </h3>
+<p id="section-7.1-1">
+           In order to verify a revocation the following steps must be taken,
+           in order:<a href="#section-7.1-1" class="pilcrow">¶</a></p>
+<ol start="1" type="1" class="normal" id="section-7.1-2">
+          <li id="section-7.1-2.1">The current time MUST be between TIMESTAMP 
and
+             TIMESTAMP+TTL.<a href="#section-7.1-2.1" class="pilcrow">¶</a>
+</li>
+<li id="section-7.1-2.2">The signature MUST match the public key.<a 
href="#section-7.1-2.2" class="pilcrow">¶</a>
+</li>
+<li id="section-7.1-2.3">The set of POW values MUST NOT contain duplicates.<a 
href="#section-7.1-2.3" class="pilcrow">¶</a>
+</li>
+<li id="section-7.1-2.4">The average number of leading zeroes resulting from 
the provided
+             POW values D' MUST be greater than or equal to D.<a 
href="#section-7.1-2.4" class="pilcrow">¶</a>
+</li>
+<li id="section-7.1-2.5">The actual expiration time TIMESTAMP + (D'-D+1) * 365 
days
+             is in the future.<a href="#section-7.1-2.5" class="pilcrow">¶</a>
+</li>
+</ol>
+</section>
 </div>
-<p id="section-7-23">where:<a href="#section-7-23" class="pilcrow">¶</a></p>
-<dl class="dlParallel" id="section-7-24">
-        <dt id="section-7-24.1">SIZE</dt>
-<dd id="section-7-24.2">
-           A 32-bit value containing the length of the signed data in bytes
-           (36 bytes) in network byte order.<a href="#section-7-24.2" 
class="pilcrow">¶</a>
-</dd>
-<dt id="section-7-24.3">PURPOSE</dt>
-<dd id="section-7-24.4">
-           A 32-bit signature purpose flag. This field MUST be 3 (in network
-           byte order).<a href="#section-7-24.4" class="pilcrow">¶</a>
-</dd>
-</dl>
 </section>
 </div>
 <div id="governance">
@@ -2664,8 +2671,34 @@ table {
       <h2 id="name-security-considerations">
 <a href="#section-9" class="section-number selfRef">9. </a><a 
href="#name-security-considerations" class="section-name selfRef">Security 
Considerations</a>
       </h2>
-<p id="section-9-1">
-         TODO<a href="#section-9-1" class="pilcrow">¶</a></p>
+<div id="security_rev">
+<section id="section-9.1">
+        <h3 id="name-revocations">
+<a href="#section-9.1" class="section-number selfRef">9.1. </a><a 
href="#name-revocations" class="section-name selfRef">Revocations</a>
+        </h3>
+<p id="section-9.1-1">
+           Revocation payloads do NOT include a 'new' key for key replacement.
+           In inclusion of such a key would have two major disadvantages:<a 
href="#section-9.1-1" class="pilcrow">¶</a></p>
+<p id="section-9.1-2">
+           If revocation is used after a private key was compromised,
+           allowing key replacement would be dangerous, because if an
+           adversary took over the private key, the adversary could then
+           broadcast a revocation with a key replacement. For the replacement,
+           the compromised owner would have no chance to issue even a
+           revocation. Thus, allowing a revocation message to replace a private
+           key makes dealing with key compromise situations worse.<a 
href="#section-9.1-2" class="pilcrow">¶</a></p>
+<p id="section-9.1-3">
+           Sometimes, key revocations are used with the objective of changing
+           cryptosystems. Migration to another cryptosystem by replacing keys
+           via a revocation message would only be secure as long as both
+           cryptosystems are still secure against forgery. Such a planned,
+           non-emergency migration to another cryptosystem should be done by
+           running zones for both ciphersystems in parallel for a while. The
+           migration would conclude by revoking the legacy zone key only once
+           it is deemed no longer secure, and hopefully after most users have
+           migrated to the replacement.<a href="#section-9.1-3" 
class="pilcrow">¶</a></p>
+</section>
+</div>
 </section>
 </div>
 <div id="iana">
@@ -2694,7 +2727,7 @@ The registry shall record for each entry:<a 
href="#section-10-1" class="pilcrow"
          Served", as described in <span>[<a href="#RFC8126" 
class="xref">RFC8126</a>]</span>.
          IANA is requested to populate this registry as follows:<a 
href="#section-10-3" class="pilcrow">¶</a></p>
 <div id="figure_rrtypenums">
-<figure id="figure-22">
+<figure id="figure-17">
         <div class="artwork art-text alignLeft" id="section-10-4.1">
 <pre>
            Number   | Type            | Contact | References
@@ -2708,7 +2741,7 @@ The registry shall record for each entry:<a 
href="#section-10-1" class="pilcrow"
            FIXME We have a lot more?
            </pre>
 </div>
-<figcaption><a href="#figure-22" class="selfRef">Figure 
22</a></figcaption></figure>
+<figcaption><a href="#figure-17" class="selfRef">Figure 
17</a></figcaption></figure>
 </div>
 </section>
 </div>
@@ -2870,9 +2903,9 @@ The registry shall record for each entry:<a 
href="#section-10-1" class="pilcrow"
 <dt id="TWOFISH">[TWOFISH]</dt>
 <dd>
 <span class="refAuthor">Schneier, B.</span>, <span class="refTitle">"The 
Twofish Encryptions Algorithm: A 128-Bit Block Cipher, 1st Edition"</span>, 
<time datetime="1999-03">March 1999</time>. </dd>
-<dt id="RFC7914">[RFC7914]</dt>
+<dt id="Argon2">[Argon2]</dt>
 <dd>
-<span class="refAuthor">Percival, C.</span><span class="refAuthor"> and S. 
Josefsson</span>, <span class="refTitle">"The scrypt Password-Based Key 
Derivation Function"</span>, <span class="seriesInfo">RFC 7914</span>, <span 
class="seriesInfo">DOI 10.17487/RFC7914</span>, <time datetime="2016-08">August 
2016</time>, <span>&lt;<a 
href="https://www.rfc-editor.org/info/rfc7914";>https://www.rfc-editor.org/info/rfc7914</a>&gt;</span>.
 </dd>
+<span class="refAuthor">Biryukov, A.</span><span class="refAuthor">, Dinu, 
D.</span><span class="refAuthor">, Khovratovich, D.</span><span 
class="refAuthor">, and S. Josefsson</span>, <span class="refTitle">"The 
memory-hard Argon2 password hash and proof-of-work function"</span>, <time 
datetime="2020-03">March 2020</time>, <span>&lt;<a 
href="https://datatracker.ietf.org/doc/draft-irtf-cfrg-argon2/";>https://datatracker.ietf.org/doc/draft-irtf-cfrg-argon2/</a>&gt;</span>.
 </dd>
 </dl>
 </section>
 <div id="authors-addresses">
diff --git a/draft-schanzen-gns.txt b/draft-schanzen-gns.txt
index bd51c62..5ac2e0a 100644
--- a/draft-schanzen-gns.txt
+++ b/draft-schanzen-gns.txt
@@ -85,12 +85,14 @@ Table of Contents
        6.2.5.  VPN . . . . . . . . . . . . . . . . . . . . . . . . .  18
        6.2.6.  NICK  . . . . . . . . . . . . . . . . . . . . . . . .  19
    7.  Zone Revocation . . . . . . . . . . . . . . . . . . . . . . .  19
+     7.1.  Verification  . . . . . . . . . . . . . . . . . . . . . .  23
    8.  Determining the Root Zone and Zone Governance . . . . . . . .  23
    9.  Security Considerations . . . . . . . . . . . . . . . . . . .  24
-   10. IANA Considerations . . . . . . . . . . . . . . . . . . . . .  24
-   11. Test Vectors  . . . . . . . . . . . . . . . . . . . . . . . .  25
-   12. Normative References  . . . . . . . . . . . . . . . . . . . .  27
-   Authors' Addresses  . . . . . . . . . . . . . . . . . . . . . . .  29
+     9.1.  Revocations . . . . . . . . . . . . . . . . . . . . . . .  25
+   10. IANA Considerations . . . . . . . . . . . . . . . . . . . . .  25
+   11. Test Vectors  . . . . . . . . . . . . . . . . . . . . . . . .  26
+   12. Normative References  . . . . . . . . . . . . . . . . . . . .  28
+   Authors' Addresses  . . . . . . . . . . . . . . . . . . . . . . .  30
 
 1.  Introduction
 
@@ -103,9 +105,7 @@ Table of Contents
    threatening the global availability and integrity of information on
    the Internet.
 
-   DNS was not designed with security as a goal.  This makes it very
-   vulnerable, especially to attackers that have the technical
-   capabilities of an entire nation state at their disposal.  This
+
 
 
 
@@ -114,6 +114,9 @@ Schanzenbach, et al.       Expires 13 May 2020              
    [Page 2]
 Internet-Draft             The GNU Name System             November 2019
 
 
+   DNS was not designed with security as a goal.  This makes it very
+   vulnerable, especially to attackers that have the technical
+   capabilities of an entire nation state at their disposal.  This
    specification describes a censorship-resistant, privacy-preserving
    and decentralized name system: The GNU Name System (GNS).  It is
    designed to provide a secure alternative to DNS, especially when
@@ -160,9 +163,6 @@ Internet-Draft             The GNU Name System             
November 2019
    p  is the prime of edwards25519 as defined in [RFC7748], i.e.  2^255
       - 19.
 
-   B  is the group generator (X(P),Y(P)) of edwards25519 as defined in
-      [RFC7748].
-
 
 
 Schanzenbach, et al.       Expires 13 May 2020                  [Page 3]
@@ -170,6 +170,9 @@ Schanzenbach, et al.       Expires 13 May 2020              
    [Page 3]
 Internet-Draft             The GNU Name System             November 2019
 
 
+   B  is the group generator (X(P),Y(P)) of edwards25519 as defined in
+      [RFC7748].
+
    L  is the prime-order subgroup of edwards25519 in [RFC7748].
 
    zk  is the ECDSA public key corresponding to d.  It is defined in
@@ -215,9 +218,6 @@ Internet-Draft             The GNU Name System             
November 2019
       the GNS resource records as defined in Section 3 or a DNS record
       type as defined in [RFC1035] or any of the complementary
       standardized DNS resource record types.  This value must be stored
-      in network byte order.  Note that values below 2^16 are reserved
-      for allocation via IANA ([RFC6895]).
-
 
 
 
@@ -226,6 +226,9 @@ Schanzenbach, et al.       Expires 13 May 2020              
    [Page 4]
 Internet-Draft             The GNU Name System             November 2019
 
 
+      in network byte order.  Note that values below 2^16 are reserved
+      for allocation via IANA ([RFC6895]).
+
    FLAGS  is a 32-bit resource record flags field (see below).
 
    DATA  the variable-length resource record data payload.  The contents
@@ -274,9 +277,6 @@ Internet-Draft             The GNU Name System             
November 2019
 
 
 
-
-
-
 Schanzenbach, et al.       Expires 13 May 2020                  [Page 5]
 
 Internet-Draft             The GNU Name System             November 2019
@@ -1073,21 +1073,27 @@ Internet-Draft             The GNU Name System          
   November 2019
    work.  The revocation message including the proof-of-work MAY be
    calculated ahead of time to support timely revocation.
 
-   For all occurences below, "scrypt" is the scrypt Password-based Key
-   Derivation Function as defined in [RFC7914] with the following
-   parameters set:
+   For all occurences below, "Argon2d" is the Password-based Key
+   Derivation Function as defined in [Argon2] with the following fixed
+   parameters:
 
             S := "gnunet-revocation-proof-of-work" /* Salt */
-            N := 2
-            r := 8 /* Block size */
-            p := 2 /* Parallelization parameter */
-
-   The following the the basic data "REV" on which the proof-of work is
+            t := 3 /* Iterations */
+            m := 1024 /* Memory size, 1 MiB */
+            T := 64 /* Tag (=output) length in bytes */
+            p := 1 /* Parallelization parameter */
+            v := 0x13 /* Version */
+            y := 0 /* Type (Argon2d) */
+            X, K is unused
+
+   The following is the message string "P" on which the proof-of work is
    calculated:
 
               0     8     16    24    32    40    48    56
               +-----+-----+-----+-----+-----+-----+-----+-----+
-              |                     NONCE                     |
+              |                      POW                      |
+              +-----------------------------------------------+
+              |                   TIMESTAMP                   |
               +-----------------------------------------------+
               |                  PUBLIC KEY                   |
               |                                               |
@@ -1097,23 +1103,17 @@ Internet-Draft             The GNU Name System          
   November 2019
 
                                  Figure 15
 
-   A single pass in the proof-of-work algorithm is defined as follows:
-
-   1.  Derive initial key material K from the REV data.
-
-   2.  Derive IV material from the key material K.
-
-   3.  Encrypt the REV data using K and IV.
+   where:
 
-   4.  Derive the proof of work from the encrypted REV and check against
-       the proof condition.
+   POW  A 64-bit solution to the proof of work.
 
-   The first step in the PoW is a call to scrypt with the REV data as
-   password parameter to derive the initial key material K:
+   TIMESTAMP  denotes the absolute 64-bit expiration date of the record.
+      In microseconds since midnight (0 hour), January 1, 1970 in
+      network byte order.
 
-            K := scrypt (P := REV, dkLen := 32)
+   PUBLIC KEY  A 512-bit ECDSA deterministic signature compliant with
+      [RFC6979] over the public zone zk of the zone which is revoked and
 
-                                 Figure 16
 
 
 
@@ -1122,42 +1122,42 @@ Schanzenbach, et al.       Expires 13 May 2020          
       [Page 20]
 Internet-Draft             The GNU Name System             November 2019
 
 
-   where dkLen denotes the intended output length in octets.  The second
-   step is to derive a 128 bit initialization vector using a Hash-based
-   Key Derivation Function as defined in ([RFC5869]).  Specifically,
-   HMAC-SHA512 is used for the extraction phase and HMAC-SHA256 for the
-   expansion phase.
+      corresponds to the key used in the proof-of-work.  The signature
+      is created using the private zone key "d" (see Section 2).
+
+   Traditionally, proof-of-work schemes require to find a "POW" such
+   that at least D leading zeroes are found in the hash result.  D is
+   then referred to as the "difficulty" of the proof-of-work.  In order
+   to reduce the variance in time it takes to calculate the proof-of-
+   work, we require that a number "Z" different PoWs must be found that
+   on average have "D" leading zeroes.
+
+   The resulting proofs may then published and disseminated.  The
+   concrete dissemination and publication methods are out of scope of
+   this document.  Given an average difficulty of "D", the proofs have
+   an expiration time of 365 days.  With each additional bit difficulty,
+   the lifetime of the proof is prolonged for another 365 days.
+   Consequently, by calculating a more difficult PoW, the lifetime of
+   the proof can be increased on demand by the zone owner.
+
+   Given that proof has been found, a revocation data object is defined
+   as follows:
+
+
+
+
+
 
-              PRK := HKDF-Extract ("gnunet-proof-of-work-iv", K)
-              IV := HKDF-Expand (PRK,
-                                 "gnunet-revocation-proof-of-work",
-                                 128 / 8);
 
 
-                                 Figure 17
 
-   We use the resulting keying material "K" as a 256-bit TWOFISH
-   [TWOFISH] key and use IV as the corresponding initialization vector:
 
-              EREV := TWOFISH(K, IV, REV)
 
-                                 Figure 18
 
-   The above EREV data object is again derived using the scrypt
-   algorithm.  The proof of work is complete, if the following
-   inequality holds for a given NONCE:
 
-            scrypt(P := EREV, dkLen := 64) < 2^(39)-1
 
 
-                                 Figure 19
 
-   where dkLen again denotes the intended output length in octets.  The
-   final revocation data object consists of a signature over the public
-   of the zone which is revoked, the zone key itself and the just
-   calculated proof-of-work.  The resulting block is then published and
-   disseminated.  The concrete dissemination and publication methods are
-   out of scope of this document.
 
 
 
@@ -1180,6 +1180,16 @@ Internet-Draft             The GNU Name System           
  November 2019
 
               0     8     16    24    32    40    48    56
               +-----+-----+-----+-----+-----+-----+-----+-----+
+              |                   TIMESTAMP                   |
+              +-----+-----+-----+-----+-----+-----+-----+-----+
+              |                      TTL                      |
+              +-----+-----+-----+-----+-----+-----+-----+-----+
+              |                     POW_0                     |
+              +-----+-----+-----+-----+-----+-----+-----+-----+
+              |                       ...                     |
+              +-----+-----+-----+-----+-----+-----+-----+-----+
+              |                     POW_Z-1                   |
+              +-----------------------------------------------+
               |                   SIGNATURE                   |
               |                                               |
               |                                               |
@@ -1189,43 +1199,33 @@ Internet-Draft             The GNU Name System          
   November 2019
               |                                               |
               |                                               |
               +-----+-----+-----+-----+-----+-----+-----+-----+
+              |         SIZE (0x24)   |       PURPOSE (0x03)  |
+              +-----+-----+-----+-----+-----+-----+-----+-----+
               |                  PUBLIC KEY                   |
               |                                               |
               |                                               |
               |                                               |
               +-----+-----+-----+-----+-----+-----+-----+-----+
-              |                    NONCE                      |
-              +-----------------------------------------------+
 
-                                 Figure 20
+                                 Figure 16
 
    where:
 
+   TIMESTAMP  denotes the absolute 64-bit expiration date of the
+      revocation.  In microseconds since midnight (0 hour), January 1,
+      1970 in network byte order.
+
+   TTL  denotes the relative 64-bit time to live of of the record in
+      microseconds also in network byte order.
+
+   POW_i  The POWs calculated as part of the proof-of-work.  Each POW_i
+      MUST be unique in the set of POW values.
+
    SIGNATURE  A 512-bit ECDSA deterministic signature compliant with
       [RFC6979] over the public zone zk of the zone which is revoked and
       corresponds to the key used in the proof-of-work.  The signature
       is created using the private zone key "d" (see Section 2).
 
-   PUBLIC KEY  is the 256-bit public key "zk" of the zone which is being
-      revoked and the key to be used to verify SIGNATURE.  The wire
-      format of this value is defined in [RFC8032], Section 5.1.5.
-
-   NONCE  The nonce calculated as part of the proof-of-work.
-
-   The signature over the public key covers a 32 bit pseuso header
-   conceptually prefixed to the public key.  The pseudo header includes
-   the key length and signature purpose:
-
-              0     8     16    24    32    40    48    56
-              +-----+-----+-----+-----+-----+-----+-----+-----+
-              |         SIZE (0x24)   |       PURPOSE (0x03)  |
-              +-----+-----+-----+-----+-----+-----+-----+-----+
-              |                  PUBLIC KEY                   |
-              |                                               |
-              |                                               |
-              |                                               |
-              +-----+-----+-----+-----+-----+-----+-----+-----+
-
 
 
 
@@ -1234,16 +1234,33 @@ Schanzenbach, et al.       Expires 13 May 2020          
       [Page 22]
 Internet-Draft             The GNU Name System             November 2019
 
 
-                                 Figure 21
-
-   where:
-
    SIZE  A 32-bit value containing the length of the signed data in
       bytes (36 bytes) in network byte order.
 
    PURPOSE  A 32-bit signature purpose flag.  This field MUST be 3 (in
       network byte order).
 
+   PUBLIC KEY  is the 256-bit public key "zk" of the zone which is being
+      revoked and the key to be used to verify SIGNATURE.  The wire
+      format of this value is defined in [RFC8032], Section 5.1.5.
+
+7.1.  Verification
+
+   In order to verify a revocation the following steps must be taken, in
+   order:
+
+   1.  The current time MUST be between TIMESTAMP and TIMESTAMP+TTL.
+
+   2.  The signature MUST match the public key.
+
+   3.  The set of POW values MUST NOT contain duplicates.
+
+   4.  The average number of leading zeroes resulting from the provided
+       POW values D' MUST be greater than or equal to D.
+
+   5.  The actual expiration time TIMESTAMP + (D'-D+1) * 365 days is in
+       the future.
+
 8.  Determining the Root Zone and Zone Governance
 
    The resolution of a GNS name must start in a given start zone
@@ -1265,6 +1282,14 @@ Internet-Draft             The GNU Name System           
  November 2019
 
    In the following, we give examples how a local client resolver SHOULD
    discover the start zone.  The process given is not exhaustive and
+
+
+
+Schanzenbach, et al.       Expires 13 May 2020                 [Page 23]
+
+Internet-Draft             The GNU Name System             November 2019
+
+
    clients MAY suppliement it with other mechanisms or ignore it if the
    particular application requires a different process.
 
@@ -1283,13 +1308,6 @@ Internet-Draft             The GNU Name System           
  November 2019
    locally managed zone matches the suffix of the name to be resolved,
    resolution SHOULD start from the respective local zone:
 
-
-
-Schanzenbach, et al.       Expires 13 May 2020                 [Page 23]
-
-Internet-Draft             The GNU Name System             November 2019
-
-
             Example name: www.example.gnu
             Local zones:
             fr = (d0,zk0)
@@ -1320,7 +1338,36 @@ Internet-Draft             The GNU Name System           
  November 2019
 
 9.  Security Considerations
 
-   TODO
+
+
+
+Schanzenbach, et al.       Expires 13 May 2020                 [Page 24]
+
+Internet-Draft             The GNU Name System             November 2019
+
+
+9.1.  Revocations
+
+   Revocation payloads do NOT include a 'new' key for key replacement.
+   In inclusion of such a key would have two major disadvantages:
+
+   If revocation is used after a private key was compromised, allowing
+   key replacement would be dangerous, because if an adversary took over
+   the private key, the adversary could then broadcast a revocation with
+   a key replacement.  For the replacement, the compromised owner would
+   have no chance to issue even a revocation.  Thus, allowing a
+   revocation message to replace a private key makes dealing with key
+   compromise situations worse.
+
+   Sometimes, key revocations are used with the objective of changing
+   cryptosystems.  Migration to another cryptosystem by replacing keys
+   via a revocation message would only be secure as long as both
+   cryptosystems are still secure against forgery.  Such a planned, non-
+   emergency migration to another cryptosystem should be done by running
+   zones for both ciphersystems in parallel for a while.  The migration
+   would conclude by revoking the legacy zone key only once it is deemed
+   no longer secure, and hopefully after most users have migrated to the
+   replacement.
 
 10.  IANA Considerations
 
@@ -1338,18 +1385,23 @@ Internet-Draft             The GNU Name System          
   November 2019
    *  References: Optionally, references describing the record type
       (such as an RFC)
 
+   The registration policy for this sub-registry is "First Come First
+   Served", as described in [RFC8126].  IANA is requested to populate
+   this registry as follows:
+
 
 
 
-Schanzenbach, et al.       Expires 13 May 2020                 [Page 24]
+
+
+
+
+
+Schanzenbach, et al.       Expires 13 May 2020                 [Page 25]
 
 Internet-Draft             The GNU Name System             November 2019
 
 
-   The registration policy for this sub-registry is "First Come First
-   Served", as described in [RFC8126].  IANA is requested to populate
-   this registry as follows:
-
               Number   | Type            | Contact | References
               ---------+-----------------+---------+---------
               65536    | PKEY            | N/A     | [This.I-D]
@@ -1360,7 +1412,7 @@ Internet-Draft             The GNU Name System            
 November 2019
               65541    | BOX             | N/A     | [This.I-D]
               FIXME We have a lot more?
 
-                                 Figure 22
+                                 Figure 17
 
 11.  Test Vectors
 
@@ -1394,18 +1446,18 @@ Internet-Draft             The GNU Name System          
   November 2019
             d_h :=
             01fb61f482c17633
             77611c4c2509e0f3
+            81b0e7e4405c10bd
+            0017c802f7d32e18
 
+            q (query key) :=
 
 
-Schanzenbach, et al.       Expires 13 May 2020                 [Page 25]
+
+Schanzenbach, et al.       Expires 13 May 2020                 [Page 26]
 
 Internet-Draft             The GNU Name System             November 2019
 
 
-            81b0e7e4405c10bd
-            0017c802f7d32e18
-
-            q (query key) :=
             6fce4deddc5ad681
             f4e29a3310767e3b
             8b38bc1b276ce2ba
@@ -1450,18 +1502,18 @@ Internet-Draft             The GNU Name System          
   November 2019
             RRBLOCK :=
             055cb070e05fe6de SIGNATURE
             ad694a50e5b4dedd
+            b9fdcbdbae004f65
+            afc99ba9c5a3bb54
+            07e731a34680ee33
+            ae0de7bfeda7d2b7
 
 
 
-Schanzenbach, et al.       Expires 13 May 2020                 [Page 26]
+Schanzenbach, et al.       Expires 13 May 2020                 [Page 27]
 
 Internet-Draft             The GNU Name System             November 2019
 
 
-            b9fdcbdbae004f65
-            afc99ba9c5a3bb54
-            07e731a34680ee33
-            ae0de7bfeda7d2b7
             8c6b854a008b1b54
             10df4f39f5ba9f46____________
             8cb514a56c0eaae0 zk_h
@@ -1506,18 +1558,18 @@ Internet-Draft             The GNU Name System          
   November 2019
 
    [RFC3826]  Blumenthal, U., Maino, F., and K. McCloghrie, "The
               Advanced Encryption Standard (AES) Cipher Algorithm in the
+              SNMP User-based Security Model", RFC 3826,
+              DOI 10.17487/RFC3826, June 2004,
+              <https://www.rfc-editor.org/info/rfc3826>.
 
 
 
-Schanzenbach, et al.       Expires 13 May 2020                 [Page 27]
+
+Schanzenbach, et al.       Expires 13 May 2020                 [Page 28]
 
 Internet-Draft             The GNU Name System             November 2019
 
 
-              SNMP User-based Security Model", RFC 3826,
-              DOI 10.17487/RFC3826, June 2004,
-              <https://www.rfc-editor.org/info/rfc3826>.
-
    [RFC5869]  Krawczyk, H. and P. Eronen, "HMAC-based Extract-and-Expand
               Key Derivation Function (HKDF)", RFC 5869,
               DOI 10.17487/RFC5869, May 2010,
@@ -1559,13 +1611,17 @@ Internet-Draft             The GNU Name System          
   November 2019
    [TWOFISH]  Schneier, B., "The Twofish Encryptions Algorithm: A
               128-Bit Block Cipher, 1st Edition", March 1999.
 
-   [RFC7914]  Percival, C. and S. Josefsson, "The scrypt Password-Based
-              Key Derivation Function", RFC 7914, DOI 10.17487/RFC7914,
-              August 2016, <https://www.rfc-editor.org/info/rfc7914>.
+   [Argon2]   Biryukov, A., Dinu, D., Khovratovich, D., and S.
+              Josefsson, "The memory-hard Argon2 password hash and
+              proof-of-work function", March 2020,
+              <https://datatracker.ietf.org/doc/draft-irtf-cfrg-
+              argon2/>.
 
 
 
-Schanzenbach, et al.       Expires 13 May 2020                 [Page 28]
+
+
+Schanzenbach, et al.       Expires 13 May 2020                 [Page 29]
 
 Internet-Draft             The GNU Name System             November 2019
 
@@ -1621,4 +1677,4 @@ Authors' Addresses
 
 
 
-Schanzenbach, et al.       Expires 13 May 2020                 [Page 29]
+Schanzenbach, et al.       Expires 13 May 2020                 [Page 30]
diff --git a/draft-schanzen-gns.xml b/draft-schanzen-gns.xml
index 591739f..e2495b4 100644
--- a/draft-schanzen-gns.xml
+++ b/draft-schanzen-gns.xml
@@ -1,19 +1,19 @@
 <?xml version='1.0' encoding='utf-8'?>
-<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
-<!ENTITY RFC1034 PUBLIC '' 
"http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.1034.xml";>
-<!ENTITY RFC1035 PUBLIC '' 
"http://xml2rfc.ietf.org/rfc/bibxml/reference.RFC.1035.xml";>
-<!ENTITY RFC2119 PUBLIC '' 
"http://xml2rfc.ietf.org/rfc/bibxml/reference.RFC.2119.xml";>
-<!ENTITY RFC2782 PUBLIC '' 
"http://xml2rfc.ietf.org/rfc/bibxml/reference.RFC.2782.xml";>
-<!ENTITY RFC3629 PUBLIC '' 
"http://xml2rfc.ietf.org/rfc/bibxml/reference.RFC.3629.xml";>
-<!ENTITY RFC3826 PUBLIC '' 
"http://xml2rfc.ietf.org/rfc/bibxml/reference.RFC.3826.xml";>
-<!ENTITY RFC5869 PUBLIC '' 
"http://xml2rfc.ietf.org/rfc/bibxml/reference.RFC.5869.xml";>
-<!ENTITY RFC5890 PUBLIC '' 
"http://xml2rfc.ietf.org/rfc/bibxml/reference.RFC.5890.xml";>
-<!ENTITY RFC5891 PUBLIC '' 
"http://xml2rfc.ietf.org/rfc/bibxml/reference.RFC.5891.xml";>
-<!ENTITY RFC6895 PUBLIC '' 
"http://xml2rfc.ietf.org/rfc/bibxml/reference.RFC.6895.xml";>
-<!ENTITY RFC6979 PUBLIC '' 
"http://xml2rfc.ietf.org/rfc/bibxml/reference.RFC.6979.xml";>
-<!ENTITY RFC7748 PUBLIC '' 
"http://xml2rfc.ietf.org/rfc/bibxml/reference.RFC.7748.xml";>
-<!ENTITY RFC8032 PUBLIC '' 
"http://xml2rfc.ietf.org/rfc/bibxml/reference.RFC.8032.xml";>
-<!ENTITY RFC8126 PUBLIC '' 
"http://xml2rfc.ietf.org/rfc/bibxml/reference.RFC.8126.xml";>
+<!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent" [
+<!ENTITY RFC1034 PUBLIC '' 
"http://xml.resource.org/public/rfc/bibxml/bibxml/reference.RFC.1034.xml";>
+<!ENTITY RFC1035 PUBLIC '' 
"http://xml.resource.org/public/rfc/bibxml/reference.RFC.1035.xml";>
+<!ENTITY RFC2119 PUBLIC '' 
"http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml";>
+<!ENTITY RFC2782 PUBLIC '' 
"http://xml.resource.org/public/rfc/bibxml/reference.RFC.2782.xml";>
+<!ENTITY RFC3629 PUBLIC '' 
"http://xml.resource.org/public/rfc/bibxml/reference.RFC.3629.xml";>
+<!ENTITY RFC3826 PUBLIC '' 
"http://xml.resource.org/public/rfc/bibxml/reference.RFC.3826.xml";>
+<!ENTITY RFC5869 PUBLIC '' 
"http://xml.resource.org/public/rfc/bibxml/reference.RFC.5869.xml";>
+<!ENTITY RFC5890 PUBLIC '' 
"http://xml.resource.org/public/rfc/bibxml/reference.RFC.5890.xml";>
+<!ENTITY RFC5891 PUBLIC '' 
"http://xml.resource.org/public/rfc/bibxml/reference.RFC.5891.xml";>
+<!ENTITY RFC6895 PUBLIC '' 
"http://xml.resource.org/public/rfc/bibxml/reference.RFC.6895.xml";>
+<!ENTITY RFC6979 PUBLIC '' 
"http://xml.resource.org/public/rfc/bibxml/reference.RFC.6979.xml";>
+<!ENTITY RFC7748 PUBLIC '' 
"http://xml.resource.org/public/rfc/bibxml/reference.RFC.7748.xml";>
+<!ENTITY RFC8032 PUBLIC '' 
"http://xml.resource.org/public/rfc/bibxml/reference.RFC.8032.xml";>
+<!ENTITY RFC8126 PUBLIC '' 
"http://xml.resource.org/public/rfc/bibxml/reference.RFC.8126.xml";>
 ]>
 <?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
 <?rfc strict="yes" ?>
@@ -1260,7 +1260,8 @@
          </dd>
          <dt>POW_i</dt>
          <dd>
-           The POWs calculated as part of the proof-of-work.
+           The POWs calculated as part of the proof-of-work. Each POW_i MUST
+           be unique in the set of POW values.
          </dd>
          <dt>SIGNATURE</dt>
          <dd>
@@ -1298,6 +1299,7 @@
            <li>The current time MUST be between TIMESTAMP and
              TIMESTAMP+TTL.</li>
            <li>The signature MUST match the public key.</li>
+           <li>The set of POW values MUST NOT contain duplicates.</li>
            <li>The average number of leading zeroes resulting from the provided
              POW values D' MUST be greater than or equal to D.</li>
            <li>The actual expiration time TIMESTAMP + (D'-D+1) * 365 days
@@ -1388,10 +1390,34 @@
      </section>
      <section anchor="security" numbered="true" toc="default">
        <name>Security Considerations</name>
-       <t>
-         TODO
+       <section anchor="security_rev" numbered="true" toc="default">
+         <name>Revocations</name>
+         <t>
+           Revocation payloads do NOT include a 'new' key for key replacement.
+           In inclusion of such a key would have two major disadvantages:
+         </t>
+         <t>
+           If revocation is used after a private key was compromised,
+           allowing key replacement would be dangerous, because if an
+           adversary took over the private key, the adversary could then
+           broadcast a revocation with a key replacement. For the replacement,
+           the compromised owner would have no chance to issue even a
+           revocation. Thus, allowing a revocation message to replace a private
+           key makes dealing with key compromise situations worse.
+         </t>
+         <t>
+           Sometimes, key revocations are used with the objective of changing
+           cryptosystems. Migration to another cryptosystem by replacing keys
+           via a revocation message would only be secure as long as both
+           cryptosystems are still secure against forgery. Such a planned,
+           non-emergency migration to another cryptosystem should be done by
+           running zones for both ciphersystems in parallel for a while. The
+           migration would conclude by revoking the legacy zone key only once
+           it is deemed no longer secure, and hopefully after most users have
+           migrated to the replacement.
        </t>
      </section>
+     </section>
      <section anchor="iana" numbered="true" toc="default">
        <name>IANA Considerations</name>
        <t>

-- 
To stop receiving notification emails like this one, please contact
address@hidden.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]