-
Notifications
You must be signed in to change notification settings - Fork 2
/
draft-ietf-trans-gossip-03.txt
3136 lines (2215 loc) · 121 KB
/
draft-ietf-trans-gossip-03.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
TRANS L. Nordberg
Internet-Draft NORDUnet
Intended status: Experimental D. Gillmor
Expires: January 9, 2017 ACLU
T. Ritter
July 08, 2016
Gossiping in CT
draft-ietf-trans-gossip-03
Abstract
The logs in Certificate Transparency are untrusted in the sense that
the users of the system don't have to trust that they behave
correctly since the behavior of a log can be verified to be correct.
This document tries to solve the problem with logs presenting a
"split view" of their operations. It describes three gossiping
mechanisms for Certificate Transparency: SCT Feedback, STH
Pollination and Trusted Auditor Relationship.
Status of This Memo
This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet-
Drafts is at http://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
This Internet-Draft will expire on January 9, 2017.
Copyright Notice
Copyright (c) 2016 IETF Trust and the persons identified as the
document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info) in effect on the date of
Nordberg, et al. Expires January 9, 2017 [Page 1]
Internet-Draft Gossiping in CT July 2016
publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License.
Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3
2. Defining the problem . . . . . . . . . . . . . . . . . . . . 4
3. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . 4
4. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 5
4.1. Pre-Loaded vs Locally Added Anchors . . . . . . . . . . . 5
5. Who gossips with whom . . . . . . . . . . . . . . . . . . . . 5
6. What to gossip about and how . . . . . . . . . . . . . . . . 6
7. Data flow . . . . . . . . . . . . . . . . . . . . . . . . . . 6
8. Gossip Mechanisms . . . . . . . . . . . . . . . . . . . . . . 7
8.1. SCT Feedback . . . . . . . . . . . . . . . . . . . . . . 7
8.1.1. SCT Feedback data format . . . . . . . . . . . . . . 8
8.1.2. HTTPS client to server . . . . . . . . . . . . . . . 8
8.1.3. HTTPS server operation . . . . . . . . . . . . . . . 11
8.1.4. HTTPS server to auditors . . . . . . . . . . . . . . 13
8.2. STH pollination . . . . . . . . . . . . . . . . . . . . . 14
8.2.1. HTTPS Clients and Proof Fetching . . . . . . . . . . 15
8.2.2. STH Pollination without Proof Fetching . . . . . . . 17
8.2.3. Auditor Action . . . . . . . . . . . . . . . . . . . 17
8.2.4. STH Pollination data format . . . . . . . . . . . . . 17
8.3. Trusted Auditor Stream . . . . . . . . . . . . . . . . . 17
8.3.1. Trusted Auditor data format . . . . . . . . . . . . . 18
9. 3-Method Ecosystem . . . . . . . . . . . . . . . . . . . . . 19
9.1. SCT Feedback . . . . . . . . . . . . . . . . . . . . . . 19
9.2. STH Pollination . . . . . . . . . . . . . . . . . . . . . 20
9.3. Trusted Auditor Relationship . . . . . . . . . . . . . . 21
9.4. Interaction . . . . . . . . . . . . . . . . . . . . . . . 22
10. Security considerations . . . . . . . . . . . . . . . . . . . 22
10.1. Attacks by actively malicious logs . . . . . . . . . . . 22
10.2. Dual-CA Compromise . . . . . . . . . . . . . . . . . . . 23
10.3. Censorship/Blocking considerations . . . . . . . . . . . 24
10.4. Flushing Attacks . . . . . . . . . . . . . . . . . . . . 25
10.4.1. STHs . . . . . . . . . . . . . . . . . . . . . . . . 25
10.4.2. SCTs & Certificate Chains on HTTPS Servers . . . . . 26
10.4.3. SCTs & Certificate Chains on HTTPS Clients . . . . . 26
10.5. Privacy considerations . . . . . . . . . . . . . . . . . 27
10.5.1. Privacy and SCTs . . . . . . . . . . . . . . . . . . 27
10.5.2. Privacy in SCT Feedback . . . . . . . . . . . . . . 27
10.5.3. Privacy for HTTPS clients performing STH Proof
Fetching . . . . . . . . . . . . . . . . . . . . . . 28
Nordberg, et al. Expires January 9, 2017 [Page 2]
Internet-Draft Gossiping in CT July 2016
10.5.4. Privacy in STH Pollination . . . . . . . . . . . . . 28
10.5.5. Privacy in STH Interaction . . . . . . . . . . . . . 29
10.5.6. Trusted Auditors for HTTPS Clients . . . . . . . . . 29
10.5.7. HTTPS Clients as Auditors . . . . . . . . . . . . . 30
11. Policy Recommendations . . . . . . . . . . . . . . . . . . . 30
11.1. Blocking Recommendations . . . . . . . . . . . . . . . . 31
11.1.1. Frustrating blocking . . . . . . . . . . . . . . . . 31
11.1.2. Responding to possible blocking . . . . . . . . . . 31
11.2. Proof Fetching Recommendations . . . . . . . . . . . . . 32
11.3. Record Distribution Recommendations . . . . . . . . . . 33
11.3.1. Mixing Algorithm . . . . . . . . . . . . . . . . . . 34
11.3.2. The Deletion Algorithm . . . . . . . . . . . . . . . 35
11.4. Concrete Recommendations . . . . . . . . . . . . . . . . 36
11.4.1. STH Pollination . . . . . . . . . . . . . . . . . . 36
11.4.2. SCT Feedback . . . . . . . . . . . . . . . . . . . . 39
12. IANA considerations . . . . . . . . . . . . . . . . . . . . . 53
13. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 53
14. ChangeLog . . . . . . . . . . . . . . . . . . . . . . . . . . 53
14.1. Changes between ietf-02 and ietf-03 . . . . . . . . . . 53
14.2. Changes between ietf-01 and ietf-02 . . . . . . . . . . 54
14.3. Changes between ietf-00 and ietf-01 . . . . . . . . . . 54
14.4. Changes between -01 and -02 . . . . . . . . . . . . . . 54
14.5. Changes between -00 and -01 . . . . . . . . . . . . . . 55
15. References . . . . . . . . . . . . . . . . . . . . . . . . . 55
15.1. Normative References . . . . . . . . . . . . . . . . . . 55
15.2. Informative References . . . . . . . . . . . . . . . . . 55
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 56
1. Introduction
The purpose of the protocols in this document, collectively referred
to as CT Gossip, is to detect certain misbehavior by CT logs. In
particular, CT Gossip aims to detect logs that are providing
inconsistent views to different log clients, and logs failing to
include submitted certificates within the time period stipulated by
MMD.
One of the major challenges of any gossip protocol is limiting damage
to user privacy. The goal of CT gossip is to publish and distribute
information about the logs and their operations, but not to expose
any additional information about the operation of any of the other
participants. Privacy of consumers of log information (in
particular, of web browsers and other TLS clients) should not be
undermined by gossip.
This document presents three different, complementary mechanisms for
non-log elements of the CT ecosystem to exchange information about
logs in a manner that preserves the privacy of HTTPS clients. They
Nordberg, et al. Expires January 9, 2017 [Page 3]
Internet-Draft Gossiping in CT July 2016
should provide protective benefits for the system as a whole even if
their adoption is not universal.
2. Defining the problem
When a log provides different views of the log to different clients
this is described as a partitioning attack. Each client would be
able to verify the append-only nature of the log but, in the extreme
case, each client might see a unique view of the log.
The CT logs are public, append-only and untrusted and thus have to be
audited for consistency, i.e., they should never rewrite history.
Additionally, auditors and other log clients need to exchange
information about logs in order to be able to detect a partitioning
attack (as described above).
Gossiping about log behavior helps address the problem of detecting
malicious or compromised logs with respect to a partitioning attack.
We want some side of the partitioned tree, and ideally both sides, to
see the other side.
Disseminating information about a log poses a potential threat to the
privacy of end users. Some data of interest (e.g. SCTs) is linkable
to specific log entries and thereby to specific websites, which makes
sharing them with others a privacy concern. Gossiping about this
data has to take privacy considerations into account in order not to
expose associations between users of the log (e.g., web browsers) and
certificate holders (e.g., web sites). Even sharing STHs (which do
not link to specific log entries) can be problematic - user tracking
by fingerprinting through rare STHs is one potential attack (see
Section 8.2).
3. Overview
This document presents three gossiping mechanisms: SCT Feedback, STH
Pollination, and a Trusted Auditor Relationship.
SCT Feedback enables HTTPS clients to share Signed Certificate
Timestamps (SCTs) (Section 3.3 of [RFC-6962-BIS-09]) with CT auditors
in a privacy-preserving manner by sending SCTs to originating HTTPS
servers, who in turn share them with CT auditors.
In STH Pollination, HTTPS clients use HTTPS servers as pools to share
Signed Tree Heads (STHs) (Section 3.6 of [RFC-6962-BIS-09]) with
other connecting clients in the hope that STHs will find their way to
CT auditors.
Nordberg, et al. Expires January 9, 2017 [Page 4]
Internet-Draft Gossiping in CT July 2016
HTTPS clients in a Trusted Auditor Relationship share SCTs and STHs
with trusted CT auditors directly, with expectations of privacy
sensitive data being handled according to whatever privacy policy is
agreed on between client and trusted party.
Despite the privacy risks with sharing SCTs there is no loss in
privacy if a client sends SCTs for a given site to the site
corresponding to the SCT. This is because the site's logs would
already indicate that the client is accessing that site. In this way
a site can accumulate records of SCTs that have been issued by
various logs for that site, providing a consolidated repository of
SCTs that could be shared with auditors. Auditors can use this
information to detect a misbehaving log that fails to include a
certificate within the time period stipulated by its MMD metadata.
Sharing an STH is considered reasonably safe from a privacy
perspective as long as the same STH is shared by a large number of
other log clients. This safety in numbers can be achieved by only
allowing gossiping of STHs issued in a certain window of time, while
also refusing to gossip about STHs from logs with too high an STH
issuance frequency (see Section 8.2).
4. Terminology
This document relies on terminology and data structures defined in
[RFC-6962-BIS-09], including MMD, STH, SCT, Version, LogID, SCT
timestamp, CtExtensions, SCT signature, Merkle Tree Hash.
This document relies on terminology defined in
[draft-ietf-trans-threat-analysis-03], including Auditing.
4.1. Pre-Loaded vs Locally Added Anchors
Through the document, we refer to both Trust Anchors (Certificate
Authorities) and Logs. Both Logs and Trust Anchors may be locally
added by an administrator. Unless otherwise clarified, in both cases
we refer to the set of Trust Anchors and Logs that come pre-loaded
and pre-trusted in a piece of client software.
5. Who gossips with whom
o HTTPS clients and servers (SCT Feedback and STH Pollination)
o HTTPS servers and CT auditors (SCT Feedback and STH Pollination)
o CT auditors (Trusted Auditor Relationship)
Nordberg, et al. Expires January 9, 2017 [Page 5]
Internet-Draft Gossiping in CT July 2016
Additionally, some HTTPS clients may engage with an auditor who they
trust with their privacy:
o HTTPS clients and CT auditors (Trusted Auditor Relationship)
6. What to gossip about and how
There are three separate gossip streams:
o SCT Feedback - transporting SCTs and certificate chains from HTTPS
clients to CT auditors via HTTPS servers.
o STH Pollination - HTTPS clients and CT auditors using HTTPS
servers as STH pools for exchanging STHs.
o Trusted Auditor Stream - HTTPS clients communicating directly with
trusted CT auditors sharing SCTs, certificate chains and STHs.
It is worthwhile to note that when an HTTPS client or CT auditor
interacts with a log, they may equivalently interact with a log
mirror or cache that replicates the log.
7. Data flow
The following picture shows how certificates, SCTs and STHs flow
through a CT system with SCT Feedback and STH Pollination. It does
not show what goes in the Trusted Auditor Relationship stream.
Nordberg, et al. Expires January 9, 2017 [Page 6]
Internet-Draft Gossiping in CT July 2016
+- Cert ---- +----------+
| | CA | ----------+
| + SCT -> +----------+ |
v | Cert [& SCT]
+----------+ |
| Log | ---------- SCT -----------+
+----------+ v
| ^ +----------+
| | SCTs & Certs --- | Website |
| |[1] | +----------+
| |[2] STHs ^ |
| |[3] v | |
| | +----------+ | |
| +--------> | Auditor | | HTTPS traffic
| +----------+ | |
STH | SCT & Cert
| SCTs & Certs |
Log entries | |
| STHs STHs
v | |
+----------+ | v
| Monitor | +----------+
+----------+ | Browser |
+----------+
# Auditor Log
[1] |--- get-sth ------------------->|
|<-- STH ------------------------|
[2] |--- leaf hash + tree size ----->|
|<-- index + inclusion proof --->|
[3] |--- tree size 1 + tree size 2 ->|
|<-- consistency proof ----------|
8. Gossip Mechanisms
8.1. SCT Feedback
The goal of SCT Feedback is for clients to share SCTs and certificate
chains with CT auditors while still preserving the privacy of the end
user. The sharing of SCTs contribute to the overall goal of
detecting misbehaving logs by providing auditors with SCTs from many
vantage points, making it more likely to catch a violation of a log's
MMD or a log presenting inconsistent views. The sharing of
certificate chains is beneficial to HTTPS server operators interested
in direct feedback from clients for detecting bogus certificates
issued in their name and therefore incentivizes server operators to
take part in SCT Feedback.
Nordberg, et al. Expires January 9, 2017 [Page 7]
Internet-Draft Gossiping in CT July 2016
SCT Feedback is the most privacy-preserving gossip mechanism, as it
does not directly expose any links between an end user and the sites
they've visited to any third party.
HTTPS clients store SCTs and certificate chains they see, and later
send them to the originating HTTPS server by posting them to a well-
known URL (associated with that server), as described in
Section 8.1.2. Note that clients will send the same SCTs and chains
to a server multiple times with the assumption that any man-in-the-
middle attack eventually will cease, and an honest server will
eventually receive collected malicious SCTs and certificate chains.
HTTPS servers store SCTs and certificate chains received from
clients, as described in Section 8.1.3. They later share them with
CT auditors by either posting them to auditors or making them
available via a well-known URL. This is described in Section 8.1.4.
8.1.1. SCT Feedback data format
The data shared between HTTPS clients and servers, as well as between
HTTPS servers and CT auditors, is a JSON array [RFC7159]. Each item
in the array is a JSON object with the following content:
o x509_chain: An array of PEM-encoded X.509 certificates. The first
element is the end-entity certificate, the second certifies the
first and so on.
o sct_data: An array of objects consisting of the base64
representation of the binary SCT data as defined in
[RFC-6962-BIS-09] Section 3.3.
We will refer to this object as 'sct_feedback'.
The x509_chain element always contains a full chain from a leaf
certificate to a self-signed trust anchor.
See Section 8.1.2 for details on what the sct_data element contains
as well as more details about the x509_chain element.
8.1.2. HTTPS client to server
When an HTTPS client connects to an HTTPS server, the client receives
a set of SCTs as part of the TLS handshake. SCTs are included in the
TLS handshake using one or more of the three mechanisms described in
[RFC-6962-BIS-09] section 3.4 - in the server certificate, in a TLS
extension, or in an OCSP extension. The client MUST discard SCTs
that are not signed by a log known to the client and SHOULD store the
remaining SCTs together with a locally constructed certificate chain
Nordberg, et al. Expires January 9, 2017 [Page 8]
Internet-Draft Gossiping in CT July 2016
which is trusted (i.e. terminated in a pre-loaded or locally
installed Trust Anchor) in an sct_feedback object or equivalent data
structure for later use in SCT Feedback.
The SCTs stored on the client MUST be keyed by the exact domain name
the client contacted. They MUST NOT be sent to any domain not
matching the original domain (e.g. if the original domain is
sub.example.com they must not be sent to sub.sub.example.com or to
example.com.) They MUST NOT be sent to any Subject Alternate Names
specified in the certificate. In the case of certificates that
validate multiple domain names, the same SCT is expected to be stored
multiple times.
Not following these constraints would increase the risk for two types
of privacy breaches. First, the HTTPS server receiving the SCT would
learn about other sites visited by the HTTPS client. Second,
auditors receiving SCTs from the HTTPS server would learn information
about other HTTPS servers visited by its clients.
If the client later again connects to the same HTTPS server, it again
receives a set of SCTs and calculates a certificate chain, and again
creates an sct_feedback or similar object. If this object does not
exactly match an existing object in the store, then the client MUST
add this new object to the store, associated with the exact domain
name contacted, as described above. An exact comparison is needed to
ensure that attacks involving alternate chains are detected. An
example of such an attack is described in
[dual-ca-compromise-attack]. However, at least one optimization is
safe and MAY be performed: If the certificate chain exactly matches
an existing certificate chain, the client MAY store the union of the
SCTs from the two objects in the first (existing) object.
If the client does connect to the same HTTPS server a subsequent
time, it MUST send to the server sct_feedback objects in the store
that are associated with that domain name. However, it is not
necessary to send an sct_feedback object constructed from the current
TLS session, and if the client does so, it MUST NOT be marked as sent
in any internal tracking done by the client.
Refer to Section 11.3 for recommendations for implementation.
Because SCTs can be used as a tracking mechanism (see
Section 10.5.2), they deserve special treatment when they are
received from (and provided to) domains that are loaded as
subresources from an origin domain. Such domains are commonly called
'third party domains'. An HTTPS client SHOULD store SCT Feedback
using a 'double-keying' approach, which isolates third party domains
by the first party domain. This is described in [double-keying].
Nordberg, et al. Expires January 9, 2017 [Page 9]
Internet-Draft Gossiping in CT July 2016
Gossip would be performed normally for third party domains only when
the user revisits the first party domain. In lieu of 'double-
keying', an HTTPS client MAY treat SCT Feedback in the same manner it
treats other security mechanisms that can enable tracking (such as
HSTS and HPKP.)
If the HTTPS client has configuration options for not sending cookies
to third parties, SCTs of third parties MUST be treated as cookies
with respect to this setting. This prevents third party tracking
through the use of SCTs/certificates, which would bypass the cookie
policy. For domains that are only loaded as third party domains, the
client may never perform SCT Feedback; however the client may perform
STH Pollination after fetching an inclusion proof, as specified in
Section 8.2.
SCTs and corresponding certificates are POSTed to the originating
HTTPS server at the well-known URL:
https://<domain>/.well-known/ct-gossip/v1/sct-feedback
The data sent in the POST is defined in Section 8.1.1. This data
SHOULD be sent in an already-established TLS session. This makes it
hard for an attacker to disrupt SCT Feedback without also disturbing
ordinary secure browsing (https://). This is discussed more in
Section 11.1.1.
The HTTPS server SHOULD respond with an HTTP 200 response code and an
empty body if it was able to process the request. An HTTPS client
who receives any other response SHOULD consider it an error.
Some clients have trust anchors or logs that are locally added (e.g.
by an administrator or by the user themselves). These additions are
potentially privacy-sensitive because they can carry information
about the specific configuration, computer, or user.
Certificates validated by locally added trust anchors will commonly
have no SCTs associated with them, so in this case no action is
needed with respect to CT Gossip. SCTs issued by locally added logs
MUST NOT be reported via SCT Feedback.
If a certificate is validated by SCTs that are issued by publicly
trusted logs, but chains to a local trust anchor, the client MAY
perform SCT Feedback for this SCT and certificate chain bundle. If
it does so, the client MUST include the full chain of certificates
chaining to the local trust anchor in the x509_chain array.
Performing SCT Feedback in this scenario may be advantageous for the
broader internet and CT ecosystem, but may also disclose information
about the client. If the client elects to omit SCT Feedback, it can
Nordberg, et al. Expires January 9, 2017 [Page 10]
Internet-Draft Gossiping in CT July 2016
choose to perform STH Pollination after fetching an inclusion proof,
as specified in Section 8.2.
We require the client to send the full chain (or nothing at all) for
two reasons. Firstly, it simplifies the operation on the server if
there are not two code paths. Secondly, omitting the chain does not
actually preserve user privacy. The Issuer field in the certificate
describes the signing certificate. And if the certificate is being
submitted at all, it means the certificate is logged, and has SCTs.
This means that the Issuer can be queried and obtained from the log,
so omitting the signing certificate from the client's submission does
not actually help user privacy.
8.1.3. HTTPS server operation
HTTPS servers can be configured (or omit configuration), resulting
in, broadly, two modes of operation. In the simpler mode, the server
will only track leaf certificates and SCTs applicable to those leaf
certificates. In the more complex mode, the server will confirm the
client's chain validation and store the certificate chain. The
latter mode requires more configuration, but is necessary to prevent
denial of service (DoS) attacks on the server's storage space.
In the simple mode of operation, upon receiving a submission at the
sct-feedback well-known URL, an HTTPS server will perform a set of
operations, checking on each sct_feedback object before storing it:
1. the HTTPS server MAY modify the sct_feedback object, and discard
all items in the x509_chain array except the first item (which is
the end-entity certificate)
2. if a bit-wise compare of the sct_feedback object matches one
already in the store, this sct_feedback object SHOULD be
discarded
3. if the leaf cert is not for a domain for which the server is
authoritative, the SCT MUST be discarded
4. if an SCT in the sct_data array can't be verified to be a valid
SCT for the accompanying leaf cert, and issued by a known log,
the individual SCT SHOULD be discarded
The modification in step number 1 is necessary to prevent a malicious
client from exhausting the server's storage space. A client can
generate their own issuing certificate authorities, and create an
arbitrary number of chains that terminate in an end-entity
certificate with an existing SCT. By discarding all but the end-
entity certificate, we prevent a simple HTTPS server from storing
Nordberg, et al. Expires January 9, 2017 [Page 11]
Internet-Draft Gossiping in CT July 2016
this data. Note that operation in this mode will not prevent the
attack described in [dual-ca-compromise-attack]. Skipping this step
requires additional configuration as described below.
The check in step 2 is for detecting duplicates and minimizing
processing and storage by the server. As on the client, an exact
comparison is needed to ensure that attacks involving alternate
chains are detected. Again, at least one optimization is safe and
MAY be performed. If the certificate chain exactly matches an
existing certificate chain, the server MAY store the union of the
SCTs from the two objects in the first (existing) object. If the
validity check on any of the SCTs fails, the server SHOULD NOT store
the union of the SCTs.
The check in step 3 is to help malfunctioning clients from exposing
which sites they visit. It additionally helps prevent DoS attacks on
the server.
[ Note: Thinking about building this, how does the SCT Feedback app
know which sites it's authoritative for? It will need that amount of
configuration at least. ]
The check in step 4 is to prevent DoS attacks where an adversary
fills up the store prior to attacking a client (thus preventing the
client's feedback from being recorded), or an attack where an
adversary simply attempts to fill up server's storage space.
The above describes the simpler mode of operation. In the more
advanced server mode, the server will detect the attack described in
[dual-ca-compromise-attack]. In this configuration the server will
not modify the sct_feedback object prior to performing checks 2, 3,
and 4.
To prevent a malicious client from filling the server's data store,
the HTTPS server SHOULD perform an additional check in the more
advanced mode:
o if the x509_chain consists of an invalid certificate chain, or the
culminating trust anchor is not recognized by the server, the
server SHOULD modify the sct_feedback object, discarding all items
in the x509_chain array except the first item
The HTTPS server MAY choose to omit checks 4 or 5. This will place
the server at risk of having its data store filled up by invalid
data, but can also allow a server to identify interesting certificate
or certificate chains that omit valid SCTs, or do not chain to a
trusted root. This information may enable an HTTPS server operator
Nordberg, et al. Expires January 9, 2017 [Page 12]
Internet-Draft Gossiping in CT July 2016
to detect attacks or unusual behavior of Certificate Authorities even
outside the Certificate Transparency ecosystem.
8.1.4. HTTPS server to auditors
HTTPS servers receiving SCTs from clients SHOULD share SCTs and
certificate chains with CT auditors by either serving them on the
well-known URL:
https://<domain>/.well-known/ct-gossip/v1/collected-sct-feedback
or by HTTPS POSTing them to a set of preconfigured auditors. This
allows an HTTPS server to choose between an active push model or a
passive pull model.
The data received in a GET of the well-known URL or sent in the POST
is defined in Section 8.1.1 with the following difference: The
x509_chain element may contain only he end-entity certificate, as
described below.
HTTPS servers SHOULD share all sct_feedback objects they see that
pass the checks in Section 8.1.3. If this is an infeasible amount of
data, the server MAY choose to expire submissions according to an
undefined policy. Suggestions for such a policy can be found in
Section 11.3.
HTTPS servers MUST NOT share any other data that they may learn from
the submission of SCT Feedback by HTTPS clients, like the HTTPS
client IP address or the time of submission.
As described above, HTTPS servers can be configured (or omit
configuration), resulting in two modes of operation. In one mode,
the x509_chain array will contain a full certificate chain. This
chain may terminate in a trust anchor the auditor may recognize, or
it may not. (One scenario where this could occur is if the client
submitted a chain terminating in a locally added trust anchor, and
the server kept this chain.) In the other mode, the x509_chain array
will consist of only a single element, which is the end-entity
certificate.
Auditors SHOULD provide the following URL accepting HTTPS POSTing of
SCT feedback data:
https://<auditor>/ct-gossip/v1/sct-feedback
Auditors SHOULD regularly poll HTTPS servers at the well-known
collected-sct-feedback URL. The frequency of the polling and how to
determine which domains to poll is outside the scope of this
Nordberg, et al. Expires January 9, 2017 [Page 13]
Internet-Draft Gossiping in CT July 2016
document. However, the selection MUST NOT be influenced by potential
HTTPS clients connecting directly to the auditor. For example, if a
poll to example.com occurs directly after a client submits an SCT for
example.com, an adversary observing the auditor can trivially
conclude the activity of the client.
8.2. STH pollination
The goal of sharing Signed Tree Heads (STHs) through pollination is
to share STHs between HTTPS clients and CT auditors while still
preserving the privacy of the end user. The sharing of STHs
contribute to the overall goal of detecting misbehaving logs by
providing CT auditors with STHs from many vantage points, making it
possible to detect logs that are presenting inconsistent views.
HTTPS servers supporting the protocol act as STH pools. HTTPS
clients and CT auditors in the possession of STHs can pollinate STH
pools by sending STHs to them, and retrieving new STHs to send to
other STH pools. CT auditors can improve the value of their auditing
by retrieving STHs from pools.
HTTPS clients send STHs to HTTPS servers by POSTing them to the well-
known URL:
https://<domain>/.well-known/ct-gossip/v1/sth-pollination
The data sent in the POST is defined in Section 8.2.4. This data
SHOULD be sent in an already established TLS session. This makes it
hard for an attacker to disrupt STH gossiping without also disturbing
ordinary secure browsing (https://). This is discussed more in
Section 11.1.1.
On a successful connection to an HTTPS server implementing STH
Pollination, the response code will be 200, and the response body is
application/json, containing zero or more STHs in the same format, as
described in Section 8.2.4.
An HTTPS client may acquire STHs by several methods:
o in replies to pollination POSTs;
o asking logs that it recognizes for the current STH, either
directly (v2/get-sth) or indirectly (for example over DNS)
o resolving an SCT and certificate to an STH via an inclusion proof
o resolving one STH to another via a consistency proof
Nordberg, et al. Expires January 9, 2017 [Page 14]
Internet-Draft Gossiping in CT July 2016
HTTPS clients (that have STHs) and CT auditors SHOULD pollinate STH
pools with STHs. Which STHs to send and how often pollination should
happen is regarded as undefined policy with the exception of privacy
concerns explained below. Suggestions for the policy can be found in
Section 11.3.
An HTTPS client could be tracked by giving it a unique or rare STH.
To address this concern, we place restrictions on different
components of the system to ensure an STH will not be rare.
o HTTPS clients silently ignore STHs from logs with an STH issuance
frequency of more than one STH per hour. Logs use the STH
Frequency Count metadata to express this ([RFC-6962-BIS-09]
sections 3.6 and 5.1).
o HTTPS clients silently ignore STHs which are not fresh.
An STH is considered fresh iff its timestamp is less than 14 days in
the past. Given a maximum STH issuance rate of one per hour, an
attacker has 336 unique STHs per log for tracking. Clients MUST
ignore STHs older than 14 days. We consider STHs within this
validity window not to be personally identifiable data, and STHs
outside this window to be personally identifiable.
When multiplied by the number of logs from which a client accepts
STHs, this number of unique STHs grow and the negative privacy
implications grow with it. It's important that this is taken into
account when logs are chosen for default settings in HTTPS clients.
This concern is discussed upon in Section 10.5.5.
A log may cease operation, in which case there will soon be no STH
within the validity window. Clients SHOULD perform all three methods
of gossip about a log that has ceased operation since it is possible
the log was still compromised and gossip can detect that. STH
Pollination is the one mechanism where a client must know about a log
shutdown. A client who does not know about a log shutdown MUST NOT
attempt any heuristic to detect a shutdown. Instead the client MUST
be informed about the shutdown from a verifiable source (e.g. a
software update). The client SHOULD be provided the final STH issued
by the log and SHOULD resolve SCTs and STHs to this final STH. If an
SCT or STH cannot be resolved to the final STH, clients SHOULD follow
the requirements and recommendations set forth in Section 11.1.2.
8.2.1. HTTPS Clients and Proof Fetching
There are two types of proofs a client may retrieve; inclusion proofs
and consistency proofs.
Nordberg, et al. Expires January 9, 2017 [Page 15]
Internet-Draft Gossiping in CT July 2016
An HTTPS client will retrieve SCTs together with certificate chains
from an HTTPS server. Using the timestamp in the SCT together with
the end-entity certificate and the issuer key hash, it can obtain an
inclusion proof to an STH in order to verify the promise made by the
SCT.
An HTTPS client will have STHs from performing STH Pollination, and
may obtain a consistency proof to a more recent STH.
An HTTPS client may also receive an SCT bundled with an inclusion
proof to a historical STH via an unspecified future mechanism.
Because this historical STH is considered personally identifiable
information per above, the client needs to obtain a consistency proof
to a more recent STH.
A client SHOULD perform proof fetching. A client MUST NOT perform
proof fetching for any SCTs or STHs issued by a locally added log. A
client MAY fetch an inclusion proof for an SCT (issued by a pre-
loaded log) that validates a certificate chaining to a locally added
trust anchor.
If a client requested either proof directly from a log or auditor, it
would reveal the client's browsing habits to a third party. To
mitigate this risk, an HTTPS client MUST retrieve the proof in a
manner that disguises the client.
Depending on the client's DNS provider, DNS may provide an
appropriate intermediate layer that obfuscates the linkability
between the user of the client and the request for inclusion (while
at the same time providing a caching layer for oft-requested
inclusion proofs). See [draft-ct-over-dns] for an example of how
this can be done.
Anonymity networks such as Tor also present a mechanism for a client
to anonymously retrieve a proof from an auditor or log.
Even when using a privacy-preserving layer between the client and the
log, certain observations may be made about an anonymous client or
general user behavior depending on how proofs are fetched. For
example, if a client fetched all outstanding proofs at once, a log
would know that SCTs or STHs received around the same time are more
likely to come from a particular client. This could potentially go
so far as correlation of activity at different times to a single
client. In aggregate the data could reveal what sites are commonly
visited together. HTTPS clients SHOULD use a strategy of proof
fetching that attempts to obfuscate these patterns. A suggestion of
such a policy can be found in Section 11.2.
Nordberg, et al. Expires January 9, 2017 [Page 16]
Internet-Draft Gossiping in CT July 2016
Resolving either SCTs and STHs may result in errors. These errors
may be routine downtime or other transient errors, or they may be
indicative of an attack. Clients SHOULD follow the requirements and
recommendations set forth in Section 11.1.2 when handling these
errors in order to give the CT ecosystem the greatest chance of
detecting and responding to a compromise.
8.2.2. STH Pollination without Proof Fetching
An HTTPS client MAY participate in STH Pollination without fetching
proofs. In this situation, the client receives STHs from a server,
applies the same validation logic to them (signed by a known log,
within the validity window) and will later pass them to another HTTPS
server.
When operating in this fashion, the HTTPS client is promoting gossip
for Certificate Transparency, but derives no direct benefit itself.
In comparison, a client who resolves SCTs or historical STHs to
recent STHs and pollinates them is assured that if it was attacked,
there is a probability that the ecosystem will detect and respond to
the attack (by distrusting the log).
8.2.3. Auditor Action
CT auditors participate in STH pollination by retrieving STHs from
HTTPS servers. They verify that the STH is valid by checking the
signature, and requesting a consistency proof from the STH to the
most recent STH.
After retrieving the consistency proof to the most recent STH, they
SHOULD pollinate this new STH among participating HTTPS servers. In
this way, as STHs "age out" and are no longer fresh, their "lineage"
continues to be tracked in the system.
8.2.4. STH Pollination data format
The data sent from HTTPS clients and CT auditors to HTTPS servers is
a JSON object [RFC7159] with the following content:
o sths - an array of 0 or more fresh SignedTreeHeads as defined in
[RFC-6962-BIS-09] Section 3.6.1.
8.3. Trusted Auditor Stream
HTTPS clients MAY send SCTs and cert chains, as well as STHs,
directly to auditors. If sent, this data MAY include data that
reflects locally added logs or trust anchors. Note that there are
Nordberg, et al. Expires January 9, 2017 [Page 17]
Internet-Draft Gossiping in CT July 2016
privacy implications in doing so, these are outlined in
Section 10.5.1 and Section 10.5.6.
The most natural trusted auditor arrangement arguably is a web
browser that is "logged in to" a provider of various internet
services. Another equivalent arrangement is a trusted party like a
corporation to which an employee is connected through a VPN or by
other similar means. A third might be individuals or smaller groups
of people running their own services. In such a setting, retrieving
proofs from that third party could be considered reasonable from a
privacy perspective. The HTTPS client may also do its own auditing
and might additionally share SCTs and STHs with the trusted party to
contribute to herd immunity. Here, the ordinary [RFC-6962-BIS-09]
protocol is sufficient for the client to do the auditing while SCT
Feedback and STH Pollination can be used in whole or in parts for the
gossip part.
Another well established trusted party arrangement on the internet
today is the relation between internet users and their providers of
DNS resolver services. DNS resolvers are typically provided by the
internet service provider (ISP) used, which by the nature of name
resolving already know a great deal about which sites their users
visit. As mentioned in Section 8.2.1, in order for HTTPS clients to
be able to retrieve proofs in a privacy preserving manner, logs could
expose a DNS interface in addition to the ordinary HTTPS interface.
A specification of such a protocol can be found in
[draft-ct-over-dns].
8.3.1. Trusted Auditor data format
Trusted Auditors expose a REST API at the fixed URI:
https://<auditor>/ct-gossip/v1/trusted-auditor
Submissions are made by sending an HTTPS POST request, with the body
of the POST in a JSON object. Upon successful receipt the Trusted
Auditor returns 200 OK.
The JSON object consists of two top-level keys: 'sct_feedback' and
'sths'. The 'sct_feedback' value is an array of JSON objects as
defined in Section 8.1.1. The 'sths' value is an array of STHs as
defined in Section 8.2.4.
Example: