You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: draft-davidben-tls-merkle-tree-certs.md
+86-13Lines changed: 86 additions & 13 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -278,29 +278,100 @@ Signatureless certificate:
278
278
279
279
# Overview
280
280
281
-
Merkle Tree certificate issuance begins as in a typical CA: The CA receives an issuance request, e.g. over ACME {{?RFC8555}}, and validates it, e.g. with ACME challenges. From there, the issuance process differs.
281
+
In Certificate Transparency, a CA first certifies information by signing it, then submits the resulting certificate to logs for logging. Merkle Tree Certificates inverts this process: the CA certifies information by logging it, then submits the log to cosigners to verify log operation. A certificate is assembled from the result and proves the information is in the CA's log.
282
282
283
-
1. The CA operates an *issuance log* ({{issuance-logs}}), which is an append-only Merkle Tree ({{Section 2.1 of !RFC9162}}). Unlike a CT log, this log only contains entries added by the CA.
283
+
~~~aasvg
284
+
+-- Certificate Authority -----+ +-- Authenticating Party ----+
+-- Mirrors, other cosigners --+ +-- Monitors -----------------+
305
+
| | | |
306
+
| +---[ CA cosign ] +-+ | |
307
+
| / \ [ mirror cosign ] | | | |
308
+
| / \ | | | |
309
+
| / \ <-+-+--+-- 6. Monitor CA operation |
310
+
| +-------+ | | | |
311
+
| * * * * | | +-----------------------------+
312
+
+-+----------------------------+ |
313
+
| ...quorum of cosigners... |
314
+
+------------------------------+
315
+
~~~
316
+
{: #fig-issuance-overview title="A diagram of the issuance architecture, detailed below"}
317
+
318
+
Merkle Tree Certificates are issued as follows. {{fig-issuance-overview}} depicts this process.
319
+
320
+
1. The authenticating party requests a certificate, e.g. over ACME {{?RFC8555}}
321
+
322
+
2. The CA validates each incoming issuance request, e.g. with ACME challenges. From there, the process differs.
323
+
324
+
3. The CA operates an append-only *issuance log* ({{issuance-logs}}). Unlike a CT log, this log only contains entries added by the CA:
284
325
285
-
2. The CA adds a TBSCertificateLogEntry ({{log-entries}}) to its log, describing the information it is certifying.
326
+
1. The CA adds a TBSCertificateLogEntry ({{log-entries}}) to its log, describing the information it is certifying.
286
327
287
-
3. The CA signs a *checkpoint*, which describes the current state of the log. A signed checkpoint certifies that the CA issued *every* entry in the Merkle Tree ({{certification-authority-cosigners}}).
328
+
2. The CA signs a *checkpoint*, which describes the current state of the log. A signed checkpoint certifies that the CA issued *every* entry in the Merkle Tree ({{certification-authority-cosigners}}).
288
329
289
-
4. The CA additionally signs *subtrees* ({{subtrees}}) that together contain certificates added since the last checkpoint ({{arbitrary-intervals}}). This is an optimization to reduce inclusion proof sizes. A signed subtree certifies that the CA has issued *every* entry in the subtree.
330
+
3. The CA additionally signs *subtrees* ({{subtrees}}) that together contain certificates added since the last checkpoint ({{arbitrary-intervals}}). This is an optimization to reduce inclusion proof sizes. A signed subtree certifies that the CA has issued *every* entry in the subtree.
290
331
291
-
These signatures prove to relying parties that the CA has issued the certificate.
332
+
4. The CA submits the new log state to *cosigners*. Cosigners validate the log is append-only and optionally provide additional services, such as mirroring its contents. They cosign the CA's checkpoints and subtrees.
292
333
293
-
A relying party may require additional proof of the proper operation of the issuance log by third parties, like CT logs provide additional transparency. Instead of presenting certificates to transparency logs, CAs present their log state to *cosigners*. Cosigners validate the log is append-only and optionally provide additional services, such as mirroring its contents. They cosign the CA's checkpoints and subtrees.
334
+
5. The CA now has enough information to construct a certificate and give it to the authenticating party. A certificate contains:
294
335
295
-
A signature from either the CA or a cosigner is known as a *cosignature*. A combination of cosignatures from sufficient trusted parties proves both that the CA has issued the certificate, and that the issuance satisfies any additional relying party transparency requirements.
336
+
* The TBSCertificate being certified
337
+
* An inclusion proof from the TBSCertificate to some subtree
338
+
* Cosignatures from the CA and cosigners
339
+
340
+
6. As in Certificate Transparency, monitors observe the issuance log to ensure the CA is operated correctly.
341
+
342
+
A certificate with cosignatures is known as a *full certificate*. Analogous to X.509 trust anchors and trusted CT logs, relying parties are configured with trusted cosigners ({{trusted-cosigners}}) that allow them to accept Merkle Tree certificates. The inclusion proof proves the TBSCertificate is part of some subtree, and cosignatures frm trusted cosigners prove the subtree was certified by the CA and available to monitors. Where CT logs entire certificates, the issuance log's entries are smaller TBSCertificateLogEntry ({{log-entries}}) structures, which do not scale with public key or signature size.
296
343
297
-
A *full certificate* contains:
344
+
This same issuance process also produces a *signatureless certificate*. This is an optional, optimized certificate that avoids cosignatures. Signatureless certificates are available after a short period of time and usable with up-to-date relying parties.
298
345
299
-
* The TBSCertificate being certified
300
-
* An inclusion proof from the TBSCertificate to some subtree
301
-
* Sufficient cosignatures to meet the relying party's requirements
{: #fig-signatureless-overview title="A diagram of signatureless certificates construction and usage, detailed below"}
302
373
303
-
This same issuance process also produces a *signatureless certificate*. This is an optional optimized certificate that avoids any cosignatures:
374
+
Signatureless certificates are constructed and used as follows. {{fig-signatureless-overview}} depicts this process.
304
375
305
376
1. Periodically, the tree size of the CA's most recent checkpoint is designated as a *landmark*. This determines *landmark subtrees*, which are common points of reference between relying parties and signatureless certificates.
306
377
@@ -1470,3 +1541,5 @@ In draft-04, there is no fast issuance mode. In draft-05, frequent, non-landmark
1470
1541
- Rename 'landmarks checkpoint' to 'landmarks'
1471
1542
1472
1543
- Clarify and fix an off-by-one error in recommended landmark allocation scheme
0 commit comments