Skip to content

Commit daa914c

Browse files
author
ID Bot
committed
Script updating gh-pages from 6b183ad. [ci skip]
1 parent 9a2314b commit daa914c

3 files changed

Lines changed: 71 additions & 40 deletions

File tree

draft-davidben-tls-merkle-tree-certs.html

Lines changed: 42 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1249,7 +1249,10 @@ <h2 id="name-copyright-notice">
12491249
<p id="section-toc.1-1.6.2.3.2.1.1"><a href="#section-6.3.1" class="auto internal xref">6.3.1</a>.  <a href="#name-landmarks" class="internal xref">Landmarks</a></p>
12501250
</li>
12511251
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.6.2.3.2.2">
1252-
<p id="section-toc.1-1.6.2.3.2.2.1"><a href="#section-6.3.2" class="auto internal xref">6.3.2</a>.  <a href="#name-constructing-signatureless-" class="internal xref">Constructing Signatureless Certificates</a></p>
1252+
<p id="section-toc.1-1.6.2.3.2.2.1"><a href="#section-6.3.2" class="auto internal xref">6.3.2</a>.  <a href="#name-allocating-landmarks" class="internal xref">Allocating Landmarks</a></p>
1253+
</li>
1254+
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.6.2.3.2.3">
1255+
<p id="section-toc.1-1.6.2.3.2.3.1"><a href="#section-6.3.3" class="auto internal xref">6.3.3</a>.  <a href="#name-constructing-signatureless-" class="internal xref">Constructing Signatureless Certificates</a></p>
12531256
</li>
12541257
</ul>
12551258
</li>
@@ -2904,47 +2907,63 @@ <h4 id="name-landmarks">
29042907
<p id="section-6.3.1-5">Each landmark specifies a tree size. The first landmark, numbered zero, is always a tree size of zero. The sequence of tree sizes MUST be append-only and monotonically increasing.<a href="#section-6.3.1-5" class="pilcrow"></a></p>
29052908
<p id="section-6.3.1-6">Landmarks determine <em>landmark subtrees</em>: for each landmark, other than number zero, let <code>tree_size</code> be the landmark's tree size and <code>prev_tree_size</code> be that of the previous landmark. As described in <a href="#arbitrary-intervals" class="auto internal xref">Section 4.4</a>, select the one or two subtrees that cover <code>[prev_tree_size, tree_size)</code>. Each of those subtrees is a landmark subtree.<a href="#section-6.3.1-6" class="pilcrow"></a></p>
29062909
<p id="section-6.3.1-7">The most recent <code>max_landmarks</code> landmarks are said to be <em>active</em>. Landmarks MUST be allocated such that, at any given time, only active landmarks contain unexpired certificates. The active landmark subtrees are those determined by the active landmarks. There are at most <code>2 * max_landmarks</code> active landmark subtrees at any time. Every unexpired entry will be contained in one or more landmark subtree, or between the last landmark subtree and the latest checkpoint. Active landmark subtrees are predistributed to the relying party as trusted subtrees, as described in <a href="#trusted-subtrees" class="auto internal xref">Section 7.4</a>.<a href="#section-6.3.1-7" class="pilcrow"></a></p>
2907-
<p id="section-6.3.1-8">If landmarks are allocated incorrectly (e.g. past landmarks change, or <code>max_landmarks</code> is inaccurate), there are no security consequences, but some older certificates may fail to validate.<a href="#section-6.3.1-8" class="pilcrow"></a></p>
2908-
<p id="section-6.3.1-9">It is RECOMMENDED that landmarks be allocated by picking some <code>time_between_landmarks</code> interval, and then appending the latest checkpoint tree size to the sequence, once per interval. If the latest checkpoint tree size is already a landmark, the interval is skipped. <code>max_landmarks</code> can then be set to <code>ceil(max_cert_lifetime / time_between_landmarks)</code>, where <code>max_cert_lifetime</code> is the CA's maximum certificate lifetime. Allocations do not need to be precise, as long as <code>max_landmarks</code> is accurate.<a href="#section-6.3.1-9" class="pilcrow"></a></p>
2909-
<p id="section-6.3.1-10">Relying parties will locally retain up to <code>2 * max_landmarks</code> hashes (<a href="#trusted-subtrees" class="auto internal xref">Section 7.4</a>) per CA, so <code>max_landmarks</code> should be set to balance the delay between landmarks and the amount of state the relying party must maintain. Using the recommended procedure above, a CA with a maximum certificate lifetime of 7 days, allocating a landmark every hour, will have a <code>max_landmarks</code> of 168. The client state is then 336 hashes, or 10,752 bytes with SHA-256.<a href="#section-6.3.1-10" class="pilcrow"></a></p>
2910-
<p id="section-6.3.1-11"><code>landmark_url</code> MUST serve a resource with <code>Content-Type: text/plain; charset=utf-8</code> and the following lines. Each line MUST be terminated by a newline character (U+000A):<a href="#section-6.3.1-11" class="pilcrow"></a></p>
2910+
<p id="section-6.3.1-8">It is RECOMMENDED that landmarks be allocated following the procedure described in <a href="#allocating-landmarks" class="auto internal xref">Section 6.3.2</a>. If landmarks are allocated incorrectly (e.g. past landmarks change, or <code>max_landmarks</code> is inaccurate), there are no security consequences, but some older certificates may fail to validate.<a href="#section-6.3.1-8" class="pilcrow"></a></p>
2911+
<p id="section-6.3.1-9">Relying parties will locally retain up to <code>2 * max_landmarks</code> hashes (<a href="#trusted-subtrees" class="auto internal xref">Section 7.4</a>) per CA, so <code>max_landmarks</code> should be set to balance the delay between landmarks and the amount of state the relying party must maintain. Using the recommended procedure above, a CA with a maximum certificate lifetime of 7 days, allocating a landmark every hour, will have a <code>max_landmarks</code> of 168. The client state is then 336 hashes, or 10,752 bytes with SHA-256.<a href="#section-6.3.1-9" class="pilcrow"></a></p>
2912+
<p id="section-6.3.1-10"><code>landmark_url</code> MUST serve a resource with <code>Content-Type: text/plain; charset=utf-8</code> and the following lines. Each line MUST be terminated by a newline character (U+000A):<a href="#section-6.3.1-10" class="pilcrow"></a></p>
29112913
<ul class="normal">
2912-
<li class="normal" id="section-6.3.1-12.1">
2913-
<p id="section-6.3.1-12.1.1">Two space-separated non-negative decimal integers: <code>&lt;last_landmark&gt; &lt;num_active_landmarks&gt;</code>.
2914-
This line MUST satisfy the following, otherwise it is invalid:<a href="#section-6.3.1-12.1.1" class="pilcrow"></a></p>
2914+
<li class="normal" id="section-6.3.1-11.1">
2915+
<p id="section-6.3.1-11.1.1">Two space-separated non-negative decimal integers: <code>&lt;last_landmark&gt; &lt;num_active_landmarks&gt;</code>.
2916+
This line MUST satisfy the following, otherwise it is invalid:<a href="#section-6.3.1-11.1.1" class="pilcrow"></a></p>
29152917
<ul class="normal">
2916-
<li class="normal" id="section-6.3.1-12.1.2.1">
2917-
<p id="section-6.3.1-12.1.2.1.1"><code>num_active_landmarks &lt;= max_landmarks</code><a href="#section-6.3.1-12.1.2.1.1" class="pilcrow"></a></p>
2918+
<li class="normal" id="section-6.3.1-11.1.2.1">
2919+
<p id="section-6.3.1-11.1.2.1.1"><code>num_active_landmarks &lt;= max_landmarks</code><a href="#section-6.3.1-11.1.2.1.1" class="pilcrow"></a></p>
29182920
</li>
2919-
<li class="normal" id="section-6.3.1-12.1.2.2">
2920-
<p id="section-6.3.1-12.1.2.2.1"><code>num_active_landmarks &lt;= last_landmark</code><a href="#section-6.3.1-12.1.2.2.1" class="pilcrow"></a></p>
2921+
<li class="normal" id="section-6.3.1-11.1.2.2">
2922+
<p id="section-6.3.1-11.1.2.2.1"><code>num_active_landmarks &lt;= last_landmark</code><a href="#section-6.3.1-11.1.2.2.1" class="pilcrow"></a></p>
29212923
</li>
29222924
</ul>
29232925
</li>
2924-
<li class="normal" id="section-6.3.1-12.2">
2925-
<p id="section-6.3.1-12.2.1"><code>num_active_landmarks + 1</code> lines each containing a single non-negative decimal integer, containing a tree size. Numbered from zero to <code>num_active_landmarks</code>, line <code>i</code> contains the tree size for landmark <code>last_landmark - i</code>. The integers MUST be monotonically decreasing and lower or equal to the log's latest tree size.<a href="#section-6.3.1-12.2.1" class="pilcrow"></a></p>
2926+
<li class="normal" id="section-6.3.1-11.2">
2927+
<p id="section-6.3.1-11.2.1"><code>num_active_landmarks + 1</code> lines each containing a single non-negative decimal integer, containing a tree size. Numbered from zero to <code>num_active_landmarks</code>, line <code>i</code> contains the tree size for landmark <code>last_landmark - i</code>. The integers MUST be monotonically decreasing and lower or equal to the log's latest tree size.<a href="#section-6.3.1-11.2.1" class="pilcrow"></a></p>
29262928
</li>
29272929
</ul>
29282930
</section>
29292931
</div>
2930-
<div id="constructing-signatureless-certificates">
2932+
<div id="allocating-landmarks">
29312933
<section id="section-6.3.2">
2932-
<h4 id="name-constructing-signatureless-">
2933-
<a href="#section-6.3.2" class="section-number selfRef">6.3.2. </a><a href="#name-constructing-signatureless-" class="section-name selfRef">Constructing Signatureless Certificates</a>
2934+
<h4 id="name-allocating-landmarks">
2935+
<a href="#section-6.3.2" class="section-number selfRef">6.3.2. </a><a href="#name-allocating-landmarks" class="section-name selfRef">Allocating Landmarks</a>
29342936
</h4>
2935-
<p id="section-6.3.2-1">Given a TBSCertificateLogEntry in the issuance log and a landmark sequence, a signatureless certificate is constructed as follows:<a href="#section-6.3.2-1" class="pilcrow"></a></p>
2937+
<p id="section-6.3.2-1">It is RECOMMENDED that landmarks be allocated using the following procedure:<a href="#section-6.3.2-1" class="pilcrow"></a></p>
29362938
<ol start="1" type="1" class="normal type-1" id="section-6.3.2-2">
29372939
<li id="section-6.3.2-2.1">
2938-
<p id="section-6.3.2-2.1.1">Wait for the first landmark to be allocated that contains the entry.<a href="#section-6.3.2-2.1.1" class="pilcrow"></a></p>
2940+
<p id="section-6.3.2-2.1.1">Select some <code>time_between_landmarks</code> duration. Define a series of consecutive, non-overlapping time intervals, each of duration <code>time_between_landmarks</code>.<a href="#section-6.3.2-2.1.1" class="pilcrow"></a></p>
29392941
</li>
29402942
<li id="section-6.3.2-2.2">
2941-
<p id="section-6.3.2-2.2.1">Determine the landmark's subtrees and select the one that contains the entry.<a href="#section-6.3.2-2.2.1" class="pilcrow"></a></p>
2943+
<p id="section-6.3.2-2.2.1">At most once per time interval, append the latest checkpoint tree size to the landmark sequence if it is greater than the last landmark's tree size.<a href="#section-6.3.2-2.2.1" class="pilcrow"></a></p>
2944+
</li>
2945+
</ol>
2946+
<p id="section-6.3.2-3">To ensure that only active landmarks contain unexpired certificates, set <code>max_landmarks</code> to <code>ceil(max_cert_lifetime / time_between_landmarks) + 1</code>, where <code>max_cert_lifetime</code> is the CA's maximum certificate lifetime.<a href="#section-6.3.2-3" class="pilcrow"></a></p>
2947+
</section>
2948+
</div>
2949+
<div id="constructing-signatureless-certificates">
2950+
<section id="section-6.3.3">
2951+
<h4 id="name-constructing-signatureless-">
2952+
<a href="#section-6.3.3" class="section-number selfRef">6.3.3. </a><a href="#name-constructing-signatureless-" class="section-name selfRef">Constructing Signatureless Certificates</a>
2953+
</h4>
2954+
<p id="section-6.3.3-1">Given a TBSCertificateLogEntry in the issuance log and a landmark sequence, a signatureless certificate is constructed as follows:<a href="#section-6.3.3-1" class="pilcrow"></a></p>
2955+
<ol start="1" type="1" class="normal type-1" id="section-6.3.3-2">
2956+
<li id="section-6.3.3-2.1">
2957+
<p id="section-6.3.3-2.1.1">Wait for the first landmark to be allocated that contains the entry.<a href="#section-6.3.3-2.1.1" class="pilcrow"></a></p>
2958+
</li>
2959+
<li id="section-6.3.3-2.2">
2960+
<p id="section-6.3.3-2.2.1">Determine the landmark's subtrees and select the one that contains the entry.<a href="#section-6.3.3-2.2.1" class="pilcrow"></a></p>
29422961
</li>
2943-
<li id="section-6.3.2-2.3">
2944-
<p id="section-6.3.2-2.3.1">Construct a certificate (<a href="#certificate-format" class="auto internal xref">Section 6.1</a>) using the selected subtree and no signatures.<a href="#section-6.3.2-2.3.1" class="pilcrow"></a></p>
2962+
<li id="section-6.3.3-2.3">
2963+
<p id="section-6.3.3-2.3.1">Construct a certificate (<a href="#certificate-format" class="auto internal xref">Section 6.1</a>) using the selected subtree and no signatures.<a href="#section-6.3.3-2.3.1" class="pilcrow"></a></p>
29452964
</li>
29462965
</ol>
2947-
<p id="section-6.3.2-3">Before sending this certificate, the authenticating party SHOULD obtain some application-protocol-specific signal that implies the relying party has been configured with the corresponding landmark. (<a href="#trusted-subtrees" class="auto internal xref">Section 7.4</a> defines how relying parties are configured.) The trust anchor ID of the landmark may be used as an efficient identifier in the application protocol. <a href="#use-in-tls" class="auto internal xref">Section 8</a> discusses how to do this in TLS <span>[<a href="#RFC8446" class="cite xref">RFC8446</a>]</span>.<a href="#section-6.3.2-3" class="pilcrow"></a></p>
2966+
<p id="section-6.3.3-3">Before sending this certificate, the authenticating party SHOULD obtain some application-protocol-specific signal that implies the relying party has been configured with the corresponding landmark. (<a href="#trusted-subtrees" class="auto internal xref">Section 7.4</a> defines how relying parties are configured.) The trust anchor ID of the landmark may be used as an efficient identifier in the application protocol. <a href="#use-in-tls" class="auto internal xref">Section 8</a> discusses how to do this in TLS <span>[<a href="#RFC8446" class="cite xref">RFC8446</a>]</span>.<a href="#section-6.3.3-3" class="pilcrow"></a></p>
29482967
</section>
29492968
</div>
29502969
</section>

draft-davidben-tls-merkle-tree-certs.txt

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,8 @@ Table of Contents
102102
6.2. Full Certificates
103103
6.3. Signatureless Certificates
104104
6.3.1. Landmarks
105-
6.3.2. Constructing Signatureless Certificates
105+
6.3.2. Allocating Landmarks
106+
6.3.3. Constructing Signatureless Certificates
106107
6.4. Size Estimates
107108
7. Relying Parties
108109
7.1. Trust Anchors
@@ -1345,18 +1346,11 @@ Table of Contents
13451346
landmark subtrees are predistributed to the relying party as trusted
13461347
subtrees, as described in Section 7.4.
13471348

1348-
If landmarks are allocated incorrectly (e.g. past landmarks change,
1349-
or max_landmarks is inaccurate), there are no security consequences,
1350-
but some older certificates may fail to validate.
1351-
1352-
It is RECOMMENDED that landmarks be allocated by picking some
1353-
time_between_landmarks interval, and then appending the latest
1354-
checkpoint tree size to the sequence, once per interval. If the
1355-
latest checkpoint tree size is already a landmark, the interval is
1356-
skipped. max_landmarks can then be set to ceil(max_cert_lifetime /
1357-
time_between_landmarks), where max_cert_lifetime is the CA's maximum
1358-
certificate lifetime. Allocations do not need to be precise, as long
1359-
as max_landmarks is accurate.
1349+
It is RECOMMENDED that landmarks be allocated following the procedure
1350+
described in Section 6.3.2. If landmarks are allocated incorrectly
1351+
(e.g. past landmarks change, or max_landmarks is inaccurate), there
1352+
are no security consequences, but some older certificates may fail to
1353+
validate.
13601354

13611355
Relying parties will locally retain up to 2 * max_landmarks hashes
13621356
(Section 7.4) per CA, so max_landmarks should be set to balance the
@@ -1384,7 +1378,25 @@ Table of Contents
13841378
landmark last_landmark - i. The integers MUST be monotonically
13851379
decreasing and lower or equal to the log's latest tree size.
13861380

1387-
6.3.2. Constructing Signatureless Certificates
1381+
6.3.2. Allocating Landmarks
1382+
1383+
It is RECOMMENDED that landmarks be allocated using the following
1384+
procedure:
1385+
1386+
1. Select some time_between_landmarks duration. Define a series of
1387+
consecutive, non-overlapping time intervals, each of duration
1388+
time_between_landmarks.
1389+
1390+
2. At most once per time interval, append the latest checkpoint tree
1391+
size to the landmark sequence if it is greater than the last
1392+
landmark's tree size.
1393+
1394+
To ensure that only active landmarks contain unexpired certificates,
1395+
set max_landmarks to ceil(max_cert_lifetime / time_between_landmarks)
1396+
+ 1, where max_cert_lifetime is the CA's maximum certificate
1397+
lifetime.
1398+
1399+
6.3.3. Constructing Signatureless Certificates
13881400

13891401
Given a TBSCertificateLogEntry in the issuance log and a landmark
13901402
sequence, a signatureless certificate is constructed as follows:

index.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,23 +62,23 @@ <h2>Preview for branch <a href="lvalenta/landmark-parenthetical">lvalenta/landma
6262
<tr>
6363
<td><a href="lvalenta/landmark-parenthetical/draft-davidben-tls-merkle-tree-certs.html" class="html draft-davidben-tls-merkle-tree-certs" title="Merkle Tree Certificates (HTML)">Merkle Tree Certificates</a></td>
6464
<td><a href="lvalenta/landmark-parenthetical/draft-davidben-tls-merkle-tree-certs.txt" class="txt draft-davidben-tls-merkle-tree-certs" title="Merkle Tree Certificates (Text)">plain text</a></td>
65-
<td>same as main</td>
65+
<td><a href="https://author-tools.ietf.org/api/iddiff?url_1=https://davidben.github.io/merkle-tree-certs/draft-davidben-tls-merkle-tree-certs.txt&amp;url_2=https://davidben.github.io/merkle-tree-certs/lvalenta/landmark-parenthetical/draft-davidben-tls-merkle-tree-certs.txt" class="diff draft-davidben-tls-merkle-tree-certs">diff with main</a></td>
6666
</tr>
6767
</table>
6868
<h2>Preview for branch <a href="lvalenta/allocating-landmarks">lvalenta/allocating-landmarks</a></h2>
6969
<table id="branch-lvalenta/allocating-landmarks">
7070
<tr>
7171
<td><a href="lvalenta/allocating-landmarks/draft-davidben-tls-merkle-tree-certs.html" class="html draft-davidben-tls-merkle-tree-certs" title="Merkle Tree Certificates (HTML)">Merkle Tree Certificates</a></td>
7272
<td><a href="lvalenta/allocating-landmarks/draft-davidben-tls-merkle-tree-certs.txt" class="txt draft-davidben-tls-merkle-tree-certs" title="Merkle Tree Certificates (Text)">plain text</a></td>
73-
<td><a href="https://author-tools.ietf.org/api/iddiff?url_1=https://davidben.github.io/merkle-tree-certs/draft-davidben-tls-merkle-tree-certs.txt&amp;url_2=https://davidben.github.io/merkle-tree-certs/lvalenta/allocating-landmarks/draft-davidben-tls-merkle-tree-certs.txt" class="diff draft-davidben-tls-merkle-tree-certs">diff with main</a></td>
73+
<td>same as main</td>
7474
</tr>
7575
</table>
7676
<h2>Preview for branch <a href="lvalenta/rename-landmark">lvalenta/rename-landmark</a></h2>
7777
<table id="branch-lvalenta/rename-landmark">
7878
<tr>
7979
<td><a href="lvalenta/rename-landmark/draft-davidben-tls-merkle-tree-certs.html" class="html draft-davidben-tls-merkle-tree-certs" title="Merkle Tree Certificates (HTML)">Merkle Tree Certificates</a></td>
8080
<td><a href="lvalenta/rename-landmark/draft-davidben-tls-merkle-tree-certs.txt" class="txt draft-davidben-tls-merkle-tree-certs" title="Merkle Tree Certificates (Text)">plain text</a></td>
81-
<td>same as main</td>
81+
<td><a href="https://author-tools.ietf.org/api/iddiff?url_1=https://davidben.github.io/merkle-tree-certs/draft-davidben-tls-merkle-tree-certs.txt&amp;url_2=https://davidben.github.io/merkle-tree-certs/lvalenta/rename-landmark/draft-davidben-tls-merkle-tree-certs.txt" class="diff draft-davidben-tls-merkle-tree-certs">diff with main</a></td>
8282
</tr>
8383
</table>
8484
<h2>Preview for branch <a href="affiliation">affiliation</a></h2>

0 commit comments

Comments
 (0)