Skip to content

Commit 9ffb511

Browse files
author
ID Bot
committed
Script updating gh-pages from 86ead15. [ci skip]
1 parent b9c3c7f commit 9ffb511

6 files changed

Lines changed: 54 additions & 7465 deletions

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

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1046,11 +1046,11 @@
10461046
<thead><tr>
10471047
<td class="left">Internet-Draft</td>
10481048
<td class="center">Merkle Tree Certificates</td>
1049-
<td class="right">October 2025</td>
1049+
<td class="right">November 2025</td>
10501050
</tr></thead>
10511051
<tfoot><tr>
10521052
<td class="left">Benjamin, et al.</td>
1053-
<td class="center">Expires 22 April 2026</td>
1053+
<td class="center">Expires 8 May 2026</td>
10541054
<td class="right">[Page]</td>
10551055
</tr></tfoot>
10561056
</table>
@@ -1063,12 +1063,12 @@
10631063
<dd class="internet-draft">draft-davidben-tls-merkle-tree-certs-latest</dd>
10641064
<dt class="label-published">Published:</dt>
10651065
<dd class="published">
1066-
<time datetime="2025-10-19" class="published">19 October 2025</time>
1066+
<time datetime="2025-11-04" class="published">4 November 2025</time>
10671067
</dd>
10681068
<dt class="label-intended-status">Intended Status:</dt>
10691069
<dd class="intended-status">Experimental</dd>
10701070
<dt class="label-expires">Expires:</dt>
1071-
<dd class="expires"><time datetime="2026-04-22">22 April 2026</time></dd>
1071+
<dd class="expires"><time datetime="2026-05-08">8 May 2026</time></dd>
10721072
<dt class="label-authors">Authors:</dt>
10731073
<dd class="authors">
10741074
<div class="author">
@@ -1128,7 +1128,7 @@ <h2 id="name-status-of-this-memo">
11281128
time. It is inappropriate to use Internet-Drafts as reference
11291129
material or to cite them other than as "work in progress."<a href="#section-boilerplate.1-3" class="pilcrow"></a></p>
11301130
<p id="section-boilerplate.1-4">
1131-
This Internet-Draft will expire on 22 April 2026.<a href="#section-boilerplate.1-4" class="pilcrow"></a></p>
1131+
This Internet-Draft will expire on 8 May 2026.<a href="#section-boilerplate.1-4" class="pilcrow"></a></p>
11321132
</section>
11331133
</div>
11341134
<div id="copyright">
@@ -4779,26 +4779,28 @@ <h3 id="name-certificate-malleability">
47794779
<p id="section-12.6-3.4.1"><code>subjectPublicKeyInfo</code> is hashed as <code>subjectPublicKeyInfoHash</code> in TBSCertificateLogEntry. Provided the underlying hash function is collision-resistant, no other values are possible for a given log entry.<a href="#section-12.6-3.4.1" class="pilcrow"></a></p>
47804780
</li>
47814781
</ul>
4782-
<p id="section-12.6-4">Some non-conforming X.509 implementations use a BER <span>[<a href="#X.690" class="cite xref">X.690</a>]</span> parser instead of DER and then, instead of computing the canonical DER encoding per <span><a href="https://rfc-editor.org/rfc/rfc5280#section-4.1.1.3" class="relref">Section 4.1.1.3</a> of [<a href="#RFC5280" class="cite xref">RFC5280</a>]</span>, verify the signature over the particular BER encoding received. Those implementations may still assume the received BER-encoded TBSCertificate is not malleable. However, as BER encoding is not unique, this breaks the above assumptions in Merkle Tree Certificates. To preserve non-malleability, these non-conforming implementations MUST do the following when verifying a Merkle Tree Certificate:<a href="#section-12.6-4" class="pilcrow"></a></p>
4782+
<p id="section-12.6-4">X.509 implementations often implement <span><a href="https://rfc-editor.org/rfc/rfc5280#section-4.1.1.3" class="relref">Section 4.1.1.3</a> of [<a href="#RFC5280" class="cite xref">RFC5280</a>]</span> by equivalently retaining the original received DER encoding, rather than recomputing the canonical DER encoding TBSCertificate. This optimization is compatible with the assumptions above.<a href="#section-12.6-4" class="pilcrow"></a></p>
4783+
<p id="section-12.6-5">Some non-conforming X.509 implementations use a BER <span>[<a href="#X.690" class="cite xref">X.690</a>]</span> parser instead of DER, and then apply this optimization to the received BER encoding. BER encoding is not unique, so this does not produce the same result. In such implementations, the BER-encoded TBSCertificate becomes also non-malleable, and applications may rely on this. To preserve this property in Merkle Tree Certificates, such non-conforming implementations MUST do the following when implementing <a href="#verifying-certificate-signatures" class="auto internal xref">Section 7.2</a>:<a href="#section-12.6-5" class="pilcrow"></a></p>
47834784
<ul class="normal">
4784-
<li class="normal" id="section-12.6-5.1">
4785-
<p id="section-12.6-5.1.1">When parsing the outermost TBSCertificate SEQUENCE tag and length, reparse with a conforming DER parser.<a href="#section-12.6-5.1.1" class="pilcrow"></a></p>
4785+
<li class="normal" id="section-12.6-6.1">
4786+
<p id="section-12.6-6.1.1">Reparse the initial identifier (the SEQUENCE tag) and length octets of the TBSCertificate structure with a conforming DER parser and fail verification if invalid.<a href="#section-12.6-6.1.1" class="pilcrow"></a></p>
47864787
</li>
4787-
<li class="normal" id="section-12.6-5.2">
4788-
<p id="section-12.6-5.2.1">When copying the <code>version</code>, <code>issuer</code>, <code>validity</code>, <code>subject</code>, <code>issuerUniqueID</code>, <code>subjectUniqueID</code>, and <code>extensions</code> fields, either reparse with a conforming DER parser, or copy over the observed BER encodings.<a href="#section-12.6-5.2.1" class="pilcrow"></a></p>
4788+
<li class="normal" id="section-12.6-6.2">
4789+
<p id="section-12.6-6.2.1">When copying the <code>version</code>, <code>issuer</code>, <code>validity</code>, <code>subject</code>, <code>issuerUniqueID</code>, <code>subjectUniqueID</code>, and <code>extensions</code> fields, either copy over the observed BER encodings, or reparse each field with a conforming DER parser and fail verification if invalid.<a href="#section-12.6-6.2.1" class="pilcrow"></a></p>
47894790
</li>
4790-
<li class="normal" id="section-12.6-5.3">
4791-
<p id="section-12.6-5.3.1">Reparse the <code>serialNumber</code> field with a conforming DER parser.<a href="#section-12.6-5.3.1" class="pilcrow"></a></p>
4791+
<li class="normal" id="section-12.6-6.3">
4792+
<p id="section-12.6-6.3.1">Reparse the <code>serialNumber</code> field with a conforming DER parser and fail verification if invalid.<a href="#section-12.6-6.3.1" class="pilcrow"></a></p>
47924793
</li>
4793-
<li class="normal" id="section-12.6-5.4">
4794-
<p id="section-12.6-5.4.1">Reparse the <code>signature</code> field with a conforming DER parser. Equivalently, check for an exact match for the expected, DER-encoded value.<a href="#section-12.6-5.4.1" class="pilcrow"></a></p>
4794+
<li class="normal" id="section-12.6-6.4">
4795+
<p id="section-12.6-6.4.1">Reparse the <code>signature</code> field with a conforming DER parser and fail verification if invalid. Equivalently, check for an exact equality with for the expected, DER-encoded value.<a href="#section-12.6-6.4.1" class="pilcrow"></a></p>
47954796
</li>
4796-
<li class="normal" id="section-12.6-5.5">
4797-
<p id="section-12.6-5.5.1">When hashing <code>subjectPublicKeyInfo</code>, either reparse with a conforming DER parser, or hash the observed BER encoding.<a href="#section-12.6-5.5.1" class="pilcrow"></a></p>
4797+
<li class="normal" id="section-12.6-6.5">
4798+
<p id="section-12.6-6.5.1">When hashing <code>subjectPublicKeyInfo</code>, either hash the observed BER encoding, or reparse the structure with a conforming DER parser and fail verification if invalid.<a href="#section-12.6-6.5.1" class="pilcrow"></a></p>
47984799
</li>
47994800
</ul>
4800-
<p id="section-12.6-6"><a href="#log-entries" class="auto internal xref">Section 5.3</a> requires that the TBSCertificateLogEntry in a MerkleTreeCertEntry be DER-encoded, so applying a stricter parser will be compatible with conforming CAs. While these existing non-conforming implementations may be unable to switch to a DER parser due to compatibility concerns, Merkle Tree Certificates is new, so there is no existing deployment of malformed BER-encoded TBSCertificateLogEntry structures.<a href="#section-12.6-6" class="pilcrow"></a></p>
4801-
<p id="section-12.6-7">The above only ensures the TBSCertificate portion is non-malleable. In Merkle Tree Certificates, similar to ECDSA X.509 signature, the signature value is malleable. Multiple MTCProof structures may prove a single TBSCertificate structure. Additionally, in all X.509-based protocols, a BER-based parser for the outer, unsigned Certificate structure will admit malleability in those portions of the encoding. Applications that derive a unique identifier from the Certificate MUST instead use the TBSCertificate, or some portion of it, for Merkle Tree Certificates.<a href="#section-12.6-7" class="pilcrow"></a></p>
4801+
<p id="section-12.6-7">These additional checks are redundant in X.509 implementations that use a conforming DER parser.<a href="#section-12.6-7" class="pilcrow"></a></p>
4802+
<p id="section-12.6-8"><a href="#log-entries" class="auto internal xref">Section 5.3</a> requires that the TBSCertificateLogEntry in a MerkleTreeCertEntry be DER-encoded, so applying a stricter parser will be compatible with conforming CAs. While these existing non-conforming implementations may be unable to switch to a DER parser due to compatibility concerns, Merkle Tree Certificates is new, so there is no existing deployment of malformed BER-encoded TBSCertificateLogEntry structures.<a href="#section-12.6-8" class="pilcrow"></a></p>
4803+
<p id="section-12.6-9">The above only ensures the TBSCertificate portion is non-malleable. In Merkle Tree Certificates, similar to ECDSA X.509 signature, the signature value is malleable. Multiple MTCProof structures may prove a single TBSCertificate structure. Additionally, in all X.509-based protocols, a BER-based parser for the outer, unsigned Certificate structure will admit malleability in those portions of the encoding. Applications that derive a unique identifier from the Certificate MUST instead use the TBSCertificate, or some portion of it, for Merkle Tree Certificates.<a href="#section-12.6-9" class="pilcrow"></a></p>
48024804
</section>
48034805
</div>
48044806
</section>

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

Lines changed: 32 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@
55
Network Working Group D. Benjamin
66
Internet-Draft Google LLC
77
Intended status: Experimental D. O'Brien
8-
Expires: 22 April 2026
8+
Expires: 8 May 2026
99
B. E. Westerbaan
1010
L. Valenta
1111
Cloudflare
1212
F. Valsorda
1313
Geomys
14-
19 October 2025
14+
4 November 2025
1515

1616

1717
Merkle Tree Certificates
@@ -58,7 +58,7 @@ Status of This Memo
5858
time. It is inappropriate to use Internet-Drafts as reference
5959
material or to cite them other than as "work in progress."
6060

61-
This Internet-Draft will expire on 22 April 2026.
61+
This Internet-Draft will expire on 8 May 2026.
6262

6363
Copyright Notice
6464

@@ -2582,32 +2582,42 @@ Table of Contents
25822582
collision-resistant, no other values are possible for a given log
25832583
entry.
25842584

2585+
X.509 implementations often implement Section 4.1.1.3 of [RFC5280] by
2586+
equivalently retaining the original received DER encoding, rather
2587+
than recomputing the canonical DER encoding TBSCertificate. This
2588+
optimization is compatible with the assumptions above.
2589+
25852590
Some non-conforming X.509 implementations use a BER [X.690] parser
2586-
instead of DER and then, instead of computing the canonical DER
2587-
encoding per Section 4.1.1.3 of [RFC5280], verify the signature over
2588-
the particular BER encoding received. Those implementations may
2589-
still assume the received BER-encoded TBSCertificate is not
2590-
malleable. However, as BER encoding is not unique, this breaks the
2591-
above assumptions in Merkle Tree Certificates. To preserve non-
2592-
malleability, these non-conforming implementations MUST do the
2593-
following when verifying a Merkle Tree Certificate:
2594-
2595-
* When parsing the outermost TBSCertificate SEQUENCE tag and length,
2596-
reparse with a conforming DER parser.
2591+
instead of DER, and then apply this optimization to the received BER
2592+
encoding. BER encoding is not unique, so this does not produce the
2593+
same result. In such implementations, the BER-encoded TBSCertificate
2594+
becomes also non-malleable, and applications may rely on this. To
2595+
preserve this property in Merkle Tree Certificates, such non-
2596+
conforming implementations MUST do the following when implementing
2597+
Section 7.2:
2598+
2599+
* Reparse the initial identifier (the SEQUENCE tag) and length
2600+
octets of the TBSCertificate structure with a conforming DER
2601+
parser and fail verification if invalid.
25972602

25982603
* When copying the version, issuer, validity, subject,
25992604
issuerUniqueID, subjectUniqueID, and extensions fields, either
2600-
reparse with a conforming DER parser, or copy over the observed
2601-
BER encodings.
2605+
copy over the observed BER encodings, or reparse each field with a
2606+
conforming DER parser and fail verification if invalid.
2607+
2608+
* Reparse the serialNumber field with a conforming DER parser and
2609+
fail verification if invalid.
26022610

2603-
* Reparse the serialNumber field with a conforming DER parser.
2611+
* Reparse the signature field with a conforming DER parser and fail
2612+
verification if invalid. Equivalently, check for an exact
2613+
equality with for the expected, DER-encoded value.
26042614

2605-
* Reparse the signature field with a conforming DER parser.
2606-
Equivalently, check for an exact match for the expected, DER-
2607-
encoded value.
2615+
* When hashing subjectPublicKeyInfo, either hash the observed BER
2616+
encoding, or reparse the structure with a conforming DER parser
2617+
and fail verification if invalid.
26082618

2609-
* When hashing subjectPublicKeyInfo, either reparse with a
2610-
conforming DER parser, or hash the observed BER encoding.
2619+
These additional checks are redundant in X.509 implementations that
2620+
use a conforming DER parser.
26112621

26122622
Section 5.3 requires that the TBSCertificateLogEntry in a
26132623
MerkleTreeCertEntry be DER-encoded, so applying a stricter parser

index.html

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -45,23 +45,15 @@ <h2>Preview for branch <a href="proof-explain">proof-explain</a></h2>
4545
<tr>
4646
<td><a href="proof-explain/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>
4747
<td><a href="proof-explain/draft-davidben-tls-merkle-tree-certs.txt" class="txt draft-davidben-tls-merkle-tree-certs" title="Merkle Tree Certificates (Text)">plain text</a></td>
48-
<td>same as main</td>
49-
</tr>
50-
</table>
51-
<h2>Preview for branch <a href="notation">notation</a></h2>
52-
<table id="branch-notation">
53-
<tr>
54-
<td><a href="notation/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>
55-
<td><a href="notation/draft-davidben-tls-merkle-tree-certs.txt" class="txt draft-davidben-tls-merkle-tree-certs" title="Merkle Tree Certificates (Text)">plain text</a></td>
56-
<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/notation/draft-davidben-tls-merkle-tree-certs.txt" class="diff draft-davidben-tls-merkle-tree-certs">diff with main</a></td>
48+
<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/proof-explain/draft-davidben-tls-merkle-tree-certs.txt" class="diff draft-davidben-tls-merkle-tree-certs">diff with main</a></td>
5749
</tr>
5850
</table>
5951
<h2>Preview for branch <a href="draft-davidben-tls-merkle-tree-certs-08">draft-davidben-tls-merkle-tree-certs-08</a></h2>
6052
<table id="branch-draft-davidben-tls-merkle-tree-certs-08">
6153
<tr>
6254
<td><a href="draft-davidben-tls-merkle-tree-certs-08/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>
6355
<td><a href="draft-davidben-tls-merkle-tree-certs-08/draft-davidben-tls-merkle-tree-certs.txt" class="txt draft-davidben-tls-merkle-tree-certs" title="Merkle Tree Certificates (Text)">plain text</a></td>
64-
<td>same as main</td>
56+
<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/draft-davidben-tls-merkle-tree-certs-08/draft-davidben-tls-merkle-tree-certs.txt" class="diff draft-davidben-tls-merkle-tree-certs">diff with main</a></td>
6557
</tr>
6658
</table>
6759
<h2>Preview for branch <a href="unify-consistency">unify-consistency</a></h2>

0 commit comments

Comments
 (0)