Skip to content

Commit 09379fd

Browse files
author
ID Bot
committed
Script updating gh-pages from 6795e4f. [ci skip]
1 parent 77936a5 commit 09379fd

3 files changed

Lines changed: 135 additions & 4 deletions

File tree

draft-ietf-plants-merkle-tree-certs.html

Lines changed: 58 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1382,6 +1382,14 @@ <h2 id="name-copyright-notice">
13821382
</li>
13831383
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.12.2.2">
13841384
<p id="section-toc.1-1.12.2.2.1"><a href="#section-12.2" class="auto internal xref">12.2</a>.  <a href="#name-transparency" class="internal xref">Transparency</a></p>
1385+
<ul class="compact toc ulBare ulEmpty">
1386+
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.12.2.2.2.1">
1387+
<p id="section-toc.1-1.12.2.2.2.1.1"><a href="#section-12.2.1" class="auto internal xref">12.2.1</a>.  <a href="#name-log-failures" class="internal xref">Log Failures</a></p>
1388+
</li>
1389+
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.12.2.2.2.2">
1390+
<p id="section-toc.1-1.12.2.2.2.2.1"><a href="#section-12.2.2" class="auto internal xref">12.2.2</a>.  <a href="#name-limiting-issuance-logs" class="internal xref">Limiting Issuance Logs</a></p>
1391+
</li>
1392+
</ul>
13851393
</li>
13861394
<li class="compact toc ulBare ulEmpty" id="section-toc.1-1.12.2.3">
13871395
<p id="section-toc.1-1.12.2.3.1"><a href="#section-12.3" class="auto internal xref">12.3</a>.  <a href="#name-public-key-hashes" class="internal xref">Public Key Hashes</a></p>
@@ -3839,7 +3847,7 @@ <h3 id="name-issuance-logs">
38393847
<p id="section-5.2-6">Each log additionally maintains a <em>minimum index</em> value, which is the index of the first log entry which is available. See <a href="#log-pruning" class="auto internal xref">Section 5.2.3</a>. This value changes over the lifetime of the log.<a href="#section-5.2-6" class="pilcrow">¶</a></p>
38403848
<p id="section-5.2-7">Unlike <span>[<a href="#RFC6962" class="cite xref">RFC6962</a>]</span> and <span>[<a href="#RFC9162" class="cite xref">RFC9162</a>]</span>, an issuance log does not have a public submission interface. The log only contains entries which the log operator, i.e. the CA, chose to add. As entries are added, the Merkle Tree is updated to be computed over the new sequence.<a href="#section-5.2-7" class="pilcrow">¶</a></p>
38413849
<p id="section-5.2-8">A snapshot of the log is known as a <em>checkpoint</em>. A checkpoint is identified by its <em>tree size</em>, that is the number of elements committed to the log at the time. Its contents can be described by the Merkle Tree Hash (<span><a href="https://rfc-editor.org/rfc/rfc9162#section-2.1.1" class="relref">Section 2.1.1</a> of [<a href="#RFC9162" class="cite xref">RFC9162</a>]</span>) of entries zero through <code>tree_size - 1</code>.<a href="#section-5.2-8" class="pilcrow">¶</a></p>
3842-
<p id="section-5.2-9">At any point in time, one of the CA's issuance logs is its <em>current</em> log. Initially, this is log 1. A CA MUST NOT append to any log that is not the current log. Logs before the current log may have historical entries. Logs after the current log MUST be empty. A CA MAY increment its current log number as part of recovering from certain operational failures.<a href="#section-5.2-9" class="pilcrow">¶</a></p>
3850+
<p id="section-5.2-9">At any point in time, one of the CA's issuance logs is its <em>current</em> log. Initially, this is log 1. A CA MUST NOT append to any log that is not the current log. Logs before the current log may have historical entries. Logs after the current log MUST be empty. A CA MAY increment its current log number as part of recovering from certain operational failures. See <a href="#log-failures" class="auto internal xref">Section 12.2.1</a> for further discussion.<a href="#section-5.2-9" class="pilcrow">¶</a></p>
38433851
<div id="log-entries">
38443852
<section id="section-5.2.1">
38453853
<h4 id="name-log-entries">
@@ -5235,6 +5243,55 @@ <h3 id="name-transparency">
52355243
<p id="section-12.2-6.2.1">If the relying party accepts log views without a trusted mirror, the unauthorized entry may not be available. However, the existence of <em>some</em> entry at that index will be visible, so monitors will know the CA is failing to present an entry. This is sufficient to determine the serial number, so relying parties can then react by revoking the undisclosed entries (<a href="#revoked-ranges" class="auto internal xref">Section 7.5</a>), and likely removing the CA.<a href="#section-12.2-6.2.1" class="pilcrow">¶</a></p>
52365244
</li>
52375245
</ul>
5246+
<div id="log-failures">
5247+
<section id="section-12.2.1">
5248+
<h4 id="name-log-failures">
5249+
<a href="#section-12.2.1" class="section-number selfRef">12.2.1. </a><a href="#name-log-failures" class="section-name selfRef">Log Failures</a>
5250+
</h4>
5251+
<p id="section-12.2.1-1">Merkle Tree Certificates introduce additional state to PKI deployments and thus new kinds of operational failures. CAs are required to only sign subtree hashes that are consistent with a single append-only view of each issuance log. A CA might violate this as a result of operational failures. For example:<a href="#section-12.2.1-1" class="pilcrow">¶</a></p>
5252+
<ul class="normal">
5253+
<li class="normal" id="section-12.2.1-2.1">
5254+
<p id="section-12.2.1-2.1.1">A CA loses some state and signs subtree hashes from two inconsistent copies of the log<a href="#section-12.2.1-2.1.1" class="pilcrow">¶</a></p>
5255+
</li>
5256+
<li class="normal" id="section-12.2.1-2.2">
5257+
<p id="section-12.2.1-2.2.1">A CA miscalculates some hash and signs a subtree hash that cannot be computed from some underlying sequence of entries<a href="#section-12.2.1-2.2.1" class="pilcrow">¶</a></p>
5258+
</li>
5259+
</ul>
5260+
<p id="section-12.2.1-3">As described above, PKIs can use additional cosigners to provide transparency guarantees even in the face of such CA violations. In doing so, individual cosigners may be locked to only one of two views of the log or unable to sign further checkpoints because some hash's preimage is unknown. It may then no longer be possible to add entries to the log that are trusted by existing relying parties.<a href="#section-12.2.1-3" class="pilcrow">¶</a></p>
5261+
<p id="section-12.2.1-4">Whether by accident or compromise, these violations are ultimately CA failures. However, it is useful for the CA instance to remain functional during and after incident management:<a href="#section-12.2.1-4" class="pilcrow">¶</a></p>
5262+
<ul class="normal">
5263+
<li class="normal" id="section-12.2.1-5.1">
5264+
<p id="section-12.2.1-5.1.1">While the incident is diagnosed, authenticating parties may still need new certificates.<a href="#section-12.2.1-5.1.1" class="pilcrow">¶</a></p>
5265+
</li>
5266+
<li class="normal" id="section-12.2.1-5.2">
5267+
<p id="section-12.2.1-5.2.1">If relying parties consider the CA operator and the CA instance still trustworthy, repairing the incident without changing the CA requires less overhead.<a href="#section-12.2.1-5.2.1" class="pilcrow">¶</a></p>
5268+
</li>
5269+
<li class="normal" id="section-12.2.1-5.3">
5270+
<p id="section-12.2.1-5.3.1">If relying parties consider either the CA operator or the CA instance no longer trustworthy and in need of replacement, the CA may still be needed to serve older, unupdated relying parties.<a href="#section-12.2.1-5.3.1" class="pilcrow">¶</a></p>
5271+
</li>
5272+
</ul>
5273+
<p id="section-12.2.1-6">This is mitigated by a CA instance consisting of a series of issuance logs (<a href="#issuance-logs" class="auto internal xref">Section 5.2</a>). After a log failure, the CA SHOULD increment its current issuance log to restore availability. Both the underlying log failure and the use of a new issuance log will be visible to monitors and SHOULD be treated as a PKI incident. Such PKI incidents can be handled by some combination of:<a href="#section-12.2.1-6" class="pilcrow">¶</a></p>
5274+
<ul class="normal">
5275+
<li class="normal" id="section-12.2.1-7.1">
5276+
<p id="section-12.2.1-7.1.1">Revoking the diverging log indices (<a href="#revoked-ranges" class="auto internal xref">Section 7.5</a>)<a href="#section-12.2.1-7.1.1" class="pilcrow">¶</a></p>
5277+
</li>
5278+
<li class="normal" id="section-12.2.1-7.2">
5279+
<p id="section-12.2.1-7.2.1">Reevaluating trusted CAs and, if necessary, removing the old CA instance and switching to a new CA instance<a href="#section-12.2.1-7.2.1" class="pilcrow">¶</a></p>
5280+
</li>
5281+
</ul>
5282+
<p id="section-12.2.1-8">In the latter case, the CA operator MAY continue to operate the removed CA instance if, for example, there remain unupdated relying parties that require it.<a href="#section-12.2.1-8" class="pilcrow">¶</a></p>
5283+
</section>
5284+
</div>
5285+
<div id="limiting-issuance-logs">
5286+
<section id="section-12.2.2">
5287+
<h4 id="name-limiting-issuance-logs">
5288+
<a href="#section-12.2.2" class="section-number selfRef">12.2.2. </a><a href="#name-limiting-issuance-logs" class="section-name selfRef">Limiting Issuance Logs</a>
5289+
</h4>
5290+
<p id="section-12.2.2-1">While multiple issuance logs help mitigate log failures, as described above, they introduce transparency risks. If a CA violates the requirement to only use one issuance log at a time, it might add an entry in some far future log number. To be accepted in transparency-enforcing relying parties, the log state must still be cosigned. However, monitors may not know which log numbers to monitor.<a href="#section-12.2.2-1" class="pilcrow">¶</a></p>
5291+
<p id="section-12.2.2-2">PKIs with transparency requirements SHOULD mitigate this by only accepting a limited range of log numbers in relying parties, transparency cosigners, or both. This limit MAY be set to a fixed value or a rolling value that is updated whenever the CA switches its current log. Fixed values require committing to a limit of recoverable log failures over the lifetime of a CA.<a href="#section-12.2.2-2" class="pilcrow">¶</a></p>
5292+
<p id="section-12.2.2-3">Log number limits in relying parties can be implemented by revoking all serial numbers above some threshold. (See <a href="#revoked-ranges" class="auto internal xref">Section 7.5</a>.)<a href="#section-12.2.2-3" class="pilcrow">¶</a></p>
5293+
</section>
5294+
</div>
52385295
</section>
52395296
</div>
52405297
<div id="public-key-hashes">

draft-ietf-plants-merkle-tree-certs.txt

Lines changed: 75 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,8 @@ Table of Contents
144144
12. Security Considerations
145145
12.1. Authenticity
146146
12.2. Transparency
147+
12.2.1. Log Failures
148+
12.2.2. Limiting Issuance Logs
147149
12.3. Public Key Hashes
148150
12.4. Non-Repudiation
149151
12.5. Extensibility
@@ -1247,7 +1249,8 @@ Table of Contents
12471249
is not the current log. Logs before the current log may have
12481250
historical entries. Logs after the current log MUST be empty. A CA
12491251
MAY increment its current log number as part of recovering from
1250-
certain operational failures.
1252+
certain operational failures. See Section 12.2.1 for further
1253+
discussion.
12511254

12521255
5.2.1. Log Entries
12531256

@@ -3008,6 +3011,77 @@ Table of Contents
30083011
then react by revoking the undisclosed entries (Section 7.5), and
30093012
likely removing the CA.
30103013

3014+
12.2.1. Log Failures
3015+
3016+
Merkle Tree Certificates introduce additional state to PKI
3017+
deployments and thus new kinds of operational failures. CAs are
3018+
required to only sign subtree hashes that are consistent with a
3019+
single append-only view of each issuance log. A CA might violate
3020+
this as a result of operational failures. For example:
3021+
3022+
* A CA loses some state and signs subtree hashes from two
3023+
inconsistent copies of the log
3024+
3025+
* A CA miscalculates some hash and signs a subtree hash that cannot
3026+
be computed from some underlying sequence of entries
3027+
3028+
As described above, PKIs can use additional cosigners to provide
3029+
transparency guarantees even in the face of such CA violations. In
3030+
doing so, individual cosigners may be locked to only one of two views
3031+
of the log or unable to sign further checkpoints because some hash's
3032+
preimage is unknown. It may then no longer be possible to add
3033+
entries to the log that are trusted by existing relying parties.
3034+
3035+
Whether by accident or compromise, these violations are ultimately CA
3036+
failures. However, it is useful for the CA instance to remain
3037+
functional during and after incident management:
3038+
3039+
* While the incident is diagnosed, authenticating parties may still
3040+
need new certificates.
3041+
3042+
* If relying parties consider the CA operator and the CA instance
3043+
still trustworthy, repairing the incident without changing the CA
3044+
requires less overhead.
3045+
3046+
* If relying parties consider either the CA operator or the CA
3047+
instance no longer trustworthy and in need of replacement, the CA
3048+
may still be needed to serve older, unupdated relying parties.
3049+
3050+
This is mitigated by a CA instance consisting of a series of issuance
3051+
logs (Section 5.2). After a log failure, the CA SHOULD increment its
3052+
current issuance log to restore availability. Both the underlying
3053+
log failure and the use of a new issuance log will be visible to
3054+
monitors and SHOULD be treated as a PKI incident. Such PKI incidents
3055+
can be handled by some combination of:
3056+
3057+
* Revoking the diverging log indices (Section 7.5)
3058+
3059+
* Reevaluating trusted CAs and, if necessary, removing the old CA
3060+
instance and switching to a new CA instance
3061+
3062+
In the latter case, the CA operator MAY continue to operate the
3063+
removed CA instance if, for example, there remain unupdated relying
3064+
parties that require it.
3065+
3066+
12.2.2. Limiting Issuance Logs
3067+
3068+
While multiple issuance logs help mitigate log failures, as described
3069+
above, they introduce transparency risks. If a CA violates the
3070+
requirement to only use one issuance log at a time, it might add an
3071+
entry in some far future log number. To be accepted in transparency-
3072+
enforcing relying parties, the log state must still be cosigned.
3073+
However, monitors may not know which log numbers to monitor.
3074+
3075+
PKIs with transparency requirements SHOULD mitigate this by only
3076+
accepting a limited range of log numbers in relying parties,
3077+
transparency cosigners, or both. This limit MAY be set to a fixed
3078+
value or a rolling value that is updated whenever the CA switches its
3079+
current log. Fixed values require committing to a limit of
3080+
recoverable log failures over the lifetime of a CA.
3081+
3082+
Log number limits in relying parties can be implemented by revoking
3083+
all serial numbers above some threshold. (See Section 7.5.)
3084+
30113085
12.3. Public Key Hashes
30123086

30133087
Unlike Certificate Transparency, the mechanisms in this document do

index.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,15 +77,15 @@ <h2>Preview for branch <a href="log-number-security-considerations">log-number-s
7777
<tr>
7878
<td><a href="log-number-security-considerations/draft-ietf-plants-merkle-tree-certs.html" class="html draft-ietf-plants-merkle-tree-certs" title="Merkle Tree Certificates (HTML)">Merkle Tree Certificates</a></td>
7979
<td><a href="log-number-security-considerations/draft-ietf-plants-merkle-tree-certs.txt" class="txt draft-ietf-plants-merkle-tree-certs" title="Merkle Tree Certificates (Text)">plain text</a></td>
80-
<td><a href="https://author-tools.ietf.org/api/iddiff?url_1=https://ietf-plants-wg.github.io/merkle-tree-certs/draft-ietf-plants-merkle-tree-certs.txt&amp;url_2=https://ietf-plants-wg.github.io/merkle-tree-certs/log-number-security-considerations/draft-ietf-plants-merkle-tree-certs.txt" class="diff draft-ietf-plants-merkle-tree-certs">diff with main</a></td>
80+
<td>same as main</td>
8181
</tr>
8282
</table>
8383
<h2>Preview for branch <a href="current-log-number">current-log-number</a></h2>
8484
<table id="branch-current-log-number">
8585
<tr>
8686
<td><a href="current-log-number/draft-ietf-plants-merkle-tree-certs.html" class="html draft-ietf-plants-merkle-tree-certs" title="Merkle Tree Certificates (HTML)">Merkle Tree Certificates</a></td>
8787
<td><a href="current-log-number/draft-ietf-plants-merkle-tree-certs.txt" class="txt draft-ietf-plants-merkle-tree-certs" title="Merkle Tree Certificates (Text)">plain text</a></td>
88-
<td>same as main</td>
88+
<td><a href="https://author-tools.ietf.org/api/iddiff?url_1=https://ietf-plants-wg.github.io/merkle-tree-certs/draft-ietf-plants-merkle-tree-certs.txt&amp;url_2=https://ietf-plants-wg.github.io/merkle-tree-certs/current-log-number/draft-ietf-plants-merkle-tree-certs.txt" class="diff draft-ietf-plants-merkle-tree-certs">diff with main</a></td>
8989
</tr>
9090
</table>
9191
<h2>Preview for branch <a href="lvalenta">lvalenta</a></h2>

0 commit comments

Comments
 (0)