Re: [Trans] AD Review: draft-ietf-trans-rfc6962-bis-26.txt
Paul Wouters <paul@nohats.ca> Thu, 19 April 2018 13:30 UTC
Return-Path: <paul@nohats.ca>
X-Original-To: trans@ietfa.amsl.com
Delivered-To: trans@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 253D612D9FF for <trans@ietfa.amsl.com>; Thu, 19 Apr 2018 06:30:38 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.999
X-Spam-Level:
X-Spam-Status: No, score=-1.999 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key) header.d=nohats.ca
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id lN5OyjNgUbf9 for <trans@ietfa.amsl.com>; Thu, 19 Apr 2018 06:30:34 -0700 (PDT)
Received: from mx.nohats.ca (mx.nohats.ca [193.110.157.68]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 5EBF912D964 for <trans@ietf.org>; Thu, 19 Apr 2018 06:30:34 -0700 (PDT)
Received: from localhost (localhost [IPv6:::1]) by mx.nohats.ca (Postfix) with ESMTP id 40Rfxh681gz38r; Thu, 19 Apr 2018 15:30:32 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nohats.ca; s=default; t=1524144632; bh=iCmFHtpiQ/hkahJdi62pLF2IjexbJ1oA3Mce3qs6Cus=; h=Date:From:To:cc:Subject:In-Reply-To:References; b=syvQHIWdqgh/sooeJq6le0tkdxJ2xyC79iiIKQmy2cZRArbTTETQRDjmMekNK1Ue5 iz6kGPgpFaNhIPoCTpuBGGan+MHHKEBsn32fhYyhs/sRVn9JdpWcvqKxgpk8sRwcyY jjMG/YhKDZSue4L1L/Zq4YSHORq/6PYiWtdGncLA=
X-Virus-Scanned: amavisd-new at mx.nohats.ca
Received: from mx.nohats.ca ([IPv6:::1]) by localhost (mx.nohats.ca [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id OHiKzw3fjujB; Thu, 19 Apr 2018 15:30:28 +0200 (CEST)
Received: from bofh.nohats.ca (bofh.nohats.ca [76.10.157.69]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx.nohats.ca (Postfix) with ESMTPS; Thu, 19 Apr 2018 15:30:27 +0200 (CEST)
Received: by bofh.nohats.ca (Postfix, from userid 1000) id DFD6F61D7F; Thu, 19 Apr 2018 09:30:25 -0400 (EDT)
DKIM-Filter: OpenDKIM Filter v2.11.0 bofh.nohats.ca DFD6F61D7F
Received: from localhost (localhost [127.0.0.1]) by bofh.nohats.ca (Postfix) with ESMTP id D8E43411AC49; Thu, 19 Apr 2018 09:30:25 -0400 (EDT)
Date: Thu, 19 Apr 2018 09:30:25 -0400
From: Paul Wouters <paul@nohats.ca>
To: Eric Rescorla <ekr@rtfm.com>
cc: "trans@ietf.org" <trans@ietf.org>
In-Reply-To: <CABcZeBNd3xBdVtdLe6bmhXRfJsn8MwC-TaS=Dk49QRZYpj-itA@mail.gmail.com>
Message-ID: <alpine.LRH.2.21.1804190925350.1699@bofh.nohats.ca>
References: <CABcZeBPWarWU=5bOAFyxJj-AkLgLaCwX6T836Er8bQC19WkeoA@mail.gmail.com> <CABrd9SQbbEF2CNwvaN=2j-izEG+qvh1wp85j5AU-CYFAEkEYzg@mail.gmail.com> <CABcZeBPrqRW_p4PD1f6uJmd9TMFVxXz0tjcrxoUePvSwd4PXDA@mail.gmail.com> <CABrd9STnNkcTvOytf=PCDBaD5MZmPiSs+rcE6uHoC7ogzzGP=Q@mail.gmail.com> <CABcZeBNd3xBdVtdLe6bmhXRfJsn8MwC-TaS=Dk49QRZYpj-itA@mail.gmail.com>
User-Agent: Alpine 2.21 (LRH 202 2017-01-01)
MIME-Version: 1.0
Content-Type: text/plain; charset="UTF-8"; format="flowed"
Content-Transfer-Encoding: 8bit
Archived-At: <https://mailarchive.ietf.org/arch/msg/trans/acQAiupOyN-o-DezjHYMva1k-qg>
Subject: Re: [Trans] AD Review: draft-ietf-trans-rfc6962-bis-26.txt
X-BeenThere: trans@ietf.org
X-Mailman-Version: 2.1.22
Precedence: list
List-Id: Public Notary Transparency working group discussion list <trans.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/trans>, <mailto:trans-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/trans/>
List-Post: <mailto:trans@ietf.org>
List-Help: <mailto:trans-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/trans>, <mailto:trans-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 19 Apr 2018 13:30:38 -0000
On Thu, 7 Sep 2017, Eric Rescorla wrote: Eric, Are all your concerns raised in the AD review met by version -28 ? The diff since your last review: https://tools.ietf.org/rfcdiff?url2=draft-ietf-trans-rfc6962-bis-28.txt&url1=draft-ietf-trans-rfc6962-bis-26.txt Paul > Date: Thu, 7 Sep 2017 10:41:45 > From: Eric Rescorla <ekr@rtfm.com> > Cc: "trans@ietf.org" <trans@ietf.org> > To: Ben Laurie <benl@google.com> > Subject: Re: [Trans] AD Review: draft-ietf-trans-rfc6962-bis-26.txt > > > > On Thu, Sep 7, 2017 at 3:24 AM, Ben Laurie <benl@google.com> wrote: > > > On 5 September 2017 at 18:46, Eric Rescorla <ekr@rtfm.com> wrote: > > > On Tue, Sep 5, 2017 at 9:04 AM, Ben Laurie <benl@google.com> wrote: > > > On 4 September 2017 at 00:17, Eric Rescorla <ekr@rtfm.com> wrote: > Hi folks, > > Please find enclosed the first cut of my AD review of this draft. > > Note: the original of this review is on Phabricator at: > > https://mozphab-ietf.devsvcdev.mozaws.net/D13 > > If you want to see comments in context -- which is a lot easier -- you > can go there. Also, you can create an account and respond inline if > you like. If you elect to, let me know if you run into problems. > > -Ekr > > > Note: I have not yet reviewed the algorithms in S 2.1. I plan to do > that separately, but figured it would be useful to provide the rest of > my review on the assumption that the changes to that section will be > modest if any. > > > High-Level: > > 1. This document makes a variety of claims about the assurances that > clients get that only obtain if some as-yet-to-be-specified > third-party verifiability mechanism is implemented. For instance, in > the intro: > > Certificate Transparency aims to mitigate the problem of misissued > certificates by providing append-only logs of issued certificates. > The logs do not need to be trusted because they are publicly > auditable. > > > As the extensive discussion following Richard Barnes's and my previous > comments should make clear, this is only a property of CT if you also > have some mechanism for third-party verifiability of STHs, and this > document does not supply that. In the actually deployed -- we can > debate deployable separately the deployability of some of the > proposals for how to get this-- versions of CT, what clients get is > SCTs, which are effectively countersignatures and in fact do require > trusting the logs. This is implicitly acknowledged by proposals that > RPs only accept certificates with >1 SCT. > > > The purpose of multiple SCTs is to avoid the death of a single log causing the death of a large number of certificates. It is not about trust. > > > That seems like the reason for the server to offer it, but not for the client to require it. > > Line 763 > Maximum Chain Length: The longest chain submission the log is > willing to accept, if the log chose to limit it. > Nit: chooses > > > Past tense seems correct? > > > I'm willing to dert this to the RFC Editor. > > > > > Line 785 > accepted trust anchor, using only the chain of intermediate CA > certificates provided by the submitter. > Why is this a 2119 MUST? It seems wise, but not necessarily a conformance requirement > > > "To avoid being overloaded by invalid submissions" > > > There seem like one way to prevent this, but not the only one. > > > Line 816 > anchor used to verify the chain (even if it was omitted from the > submission). The log MUST present this chain for auditing upon > request (see Section 5.6). This prevents the CA from avoiding blame > What happens in cases of multiple chains. For instance, say that the submitter provides superfluous certificates? > > > Not allowed. > > > Hmm... So your theory is that the submitter does path construction > > > Yep - and that's borne out by practice. > > > OK, well, then it would help if the document were clearer on this point. > > > > > > Line 837 > opaque LogID<2..127>; > This seems to be the first use of the TLS specification language, but I don't see a cite. Please provide one, > > > See s1.2. > > > OK. Thanks. > > > > Line 926 > opaque TBSCertificate<1..2^24-1>; > NIT: there's no actual way a TBSCertificate can be 1 byte. > > > Line 948 > "tbs_certificate". The length of the "issuer_key_hash" MUST match > HASH_SIZE. > Is this true? What happens if we have two CAs that share a key? > > > Eh? > > > Say that a CA spins up two subordinates that happen to share the same key. I agree it's foolish. > return an empty > > > > Line 1522 > permissible. These entries SHALL be sequential beginning with the > entry specified by "start". > How does the client know which of the above two cases has occurred? > > > The response includes an STH, which says how big the tree is. Probably should be the latest one known to that server. > > > > Line 1552 > TLS servers MUST use at least one of the three mechanisms listed > below to present one or more SCTs from one or more logs to each TLS > This needs to somehow be clear that it only applies to TLS servers that are compliant with this specification, as it's not a new requirement on all > TLS servers. > > > Surely its the other way round: i.e. new requirements on all TLS servers have to be made clear? > > > I'm not sure what you mean. This document does not get to require that all TLS servers do CT. Was that your intent? > > > What I meant is that if every time you mention a thing you have to say "but only if you are conforming to this RFC" then you a) make the whole thing a lot more > cumbersome, b) are stating the obvious (i.e. that you only have to conform to the RFC if you have decided to conform to the RFC). > > > I don't think it's merely stating the obvious in that we have *other* RFCs which actually do attempt to retrospectively impose requirements on all uses of TLS. See, for > instance: https://tools.ietf.org/html/rfc7465. And this is a different story, in that we are not (I assume) going to go around saying that TLS stacks that don't do CT are not > TLS conformant. > > I think the text I would use here would be "CT-using TLS servers MUST..." > > > Surely if you are making a new requirement for TLS compliance then you have to explicitly say so? > > > Well, my point is that the way that this document is written in fact does so, and so you have to look at "Updates" to find out that that's not the case. > > -Ekr > > > > > > -EKr > > > > Line 1595 > been struck off for misbehavior, has had a key compromise, or is not > known to the TLS client). For example: > Maybe replace "For example:" with "Some ways this can happen are..." > > > Line 1599 > misissuance from clients. Including SCTs from different logs > makes it more difficult to mount this attack. > Assuming that the server is malicious, why would it include multiple SCTs? It seems like requiring multiple SCTs does in fact provide this defense, > but that's not an argument for servers to provide multiples. > > > Line 1627 > SerializedTransItem trans_item_list<1..2^16-1>; > } TransItemList; > Structurally, it's kind of a mess to have this be the place that you make TransItems self-contained (by having a defined length field). What about > other places I might want to concatenate TransItems. Why don't you instead make TransItem self-contained, like so: > > struct { > VersionedTransType versioned_type; > uint16 length; // NEW > select (versioned_type) { > case x509_entry_v2: TimestampedCertificateEntryDataV2; > case precert_entry_v2: TimestampedCertificateEntryDataV2; > case x509_sct_v2: SignedCertificateTimestampDataV2; > case precert_sct_v2: SignedCertificateTimestampDataV2; > case signed_tree_head_v2: SignedTreeHeadDataV2; > case consistency_proof_v2: ConsistencyProofDataV2; > case inclusion_proof_v2: InclusionProofDataV2; > } data; > } TransItem; > This is pretty much the universal TLS convention. > > > Line 1649 > 6.4. transparency_info TLS Extension > This extension appears not to have any explicit support for CT entries for intermediate certs. Am I just supposed to glue together all the TransItems? > > > Line 1651 > Provided that a TLS client includes the "transparency_info" extension > type in the ClientHello, the TLS server SHOULD include the > You need to provide an actual definition of what the client includes, and having the server ignore the contents is bad mojo. TLS convention is for the > client to include an empty extension and the server to validate that it is in fact empty. > > > Line 1654 > "transparency_info" extension in the ServerHello with > "extension_data" set to a "TransItemList". The TLS server SHOULD > ignore any "extension_data" sent by the TLS client. Additionally, > IMPORTANT: The normative language here is kind of confusing. It SHOULD include the extension but if it's included, it MUST consist of TransItemList, > no? And surely only SHOU > Also, I'm not sure this is the right logic. If the server knows that it has the SCT information in the certificate or in OCSP, why SHOULD It send this > extension. I would think, rather that servers should aim to send information at most once, so that it should only send the extension if it contains > information that's not in the cert/OCSP. as it pretty much has to send those anyway. Otherwise, don't we just end up in a world where if this info is > in OCSP and certs, it's always sent twice, because the client doesn't know where the info is, and so has to always offer the extension. > > > Line 1658 > session is resumed, since session resumption uses the original > session information. > Does this mean the client MUST abort the handshake if the server includes it? > > > Line 1668 > o The TLS client includes the "transparency_info" extension type in > the ClientHello. > This condition is non-sensical, because if the client *doesn't* include the extension, the server cannot send the transparency_info extension at all. > > > Line 1722 > 8. Clients > Given the imminent standardization of TLS 1.3, you need to somehow provide a mapping for client-side CT for that, I think > > > Line 1739 > view. The exact mechanisms will be in separate documents, but it is > expected there will be a variety. > Given the somewhat science fictional status of Gossip, this entire paragraph should be stricken > > > Line 1747 > MUST implement all of the three mechanisms by which TLS servers may > present SCTs (see Section 6). TLS clients MAY also accept SCTs via > the "status_request_v2" extension ([RFC6961]). TLS clients that > IMPORTANT: This also needs to be rewritten so it makes clear it's not a general levy on TLS clients. > > Line 1770 > In addition to normal validation of the server certificate and its > chain, TLS clients SHOULD validate each received SCT for which they > have the corresponding log's parameters. To validate an SCT, a TLS > IMPORTANT: Why is this a SHOULD and not a MUST? If you support CT at all, why would you not do this? > > Line 1791 > TLS clients MUST NOT consider valid any SCT whose timestamp is in the > future. > What's the reason for this? If your clock is slightly wrong, this is going to cause new certs to fail even if they otherwise would have succeeded > (because the notBefore and notAfter are more conservative). > > > Line 1800 > will disclose to the log which TLS server the client has been > communicating with. > IMPORTANT: This "Note" just mentions in passing a huge privacy issue. You need to be a lot clearer about this. > > Line 1823 > "transparency_info" and "status_request" TLS extensions in the > ClientHello. > IMPORTANT: This is not consistent with the requirements on the server. > Trying to reconstruct the reasoning here, the client can only decide that the server is noncompliant if it has given the server a chance to send the > SCTs by every mechanism., otherwise the server might just want to send the SCT some other way. However, if servers can optionally ignore > transparency_info (it's a SHOULD above), then you can have two compliant implementations with the server having a CT-compliant cert and yet the client > declares it noncompliant. To fix this, you need to require the server to respond to "transparency_info" > > > Line 1831 > "CachedObject" of type "ct_compliant" in the "cached_info" extension. > The "hash_value" field MUST be 1 byte long with the value 0. > You should explain why this is one byte long (that the PDU is defined as having a minimum length of 1). Also the server should be required to check > it. > > > Line 1842 > watches. It may also want to keep copies of entire logs. In order > to do this, it should follow these steps for each log: > Why is this not a 2119 SHOULD? > > Also, what does "in order to do this" refer to? Clearly not how to keep copies.... Presumably, how to poll the log. > > > Line 1864 > 8. Either: > IMPORTANT: You seem to be missing there part where you actually look at the entries to verify that they don't contain bogus data (e.g., certificates > for your domain). I get that it's implicit here, but given that you provide an algorithm, that should be an explicit stage. > This is a pretty odd algorithm. If I understand it correctly, 1-4 are setup steps and then 5-9 is supposed to be repeated, but I could just do this > once and stop at 4. > > > Line 1912 > STHs it receives, ensure that each entry can be fetched and that the > STH is indeed the result of making a tree from all fetched entries. > IMPORTANT: How do you verify MMD? > > Line 1944 > If it should become necessary to deprecate an algorithm used by a > live log, then the log should be frozen as specified in Section 4.13 > and a new log should be started. Certificates in the frozen log that > RFC 2119 SHOULD? Isn't this a MUST, though? > > > Line 1958 > "transparency_info" TLS extension. IANA should update this extension > type to point at this document. > IMPORTANT: You'll need to fill in the new field specified in https://tlswg.github.io/draft-ietf-tls-iana-registry-updates/#rfc.section.6 > > Line 2009 > | | ECDSA (NIST P-256) | | > | | with HMAC-SHA256 | | > | | | | > Why are you defining both algorithms? > > > Line 2150 > (with the intention of actually running a CT log that will be > identified by the allocated Log ID). > This seems like it's not a great thing to be asking an expert to do, as it seems to require business arrangements. Is it really that valuable to save > a few bytes here? > > > Line 2163 > that the log has misbehaved, which will be discovered when the SCT is > audited. A signed timestamp is not a guarantee that the certificate > is not misissued, since appropriate monitors might not have checked > IMPORTANT: This is not correct, because the client does not know that the monitors are verifying the data that it is. See my general comments on > public verifiability above. > > Line 2182 > operating correctly. As a log is allowed to serve an STH that's up > to MMD old, the maximum period of time during which a misissued > certificate can be used without being available for audit is twice > Nit: up to the MMD old > > > Line 2211 > compute the proofs from the log) or communicate with the log via > proxies. > This also seems quite handwavy in light of the facts on the ground. > > > Line 2237 > and STHs can be stored by the log and served to other clients that > submit the same certificate or request the same STH. > This needs to be expanded. Who is this risk against? The log or someone else? If the log, what's the logs incentive? > > > Line 2243 > reduce the effectiveness of an attack where a CA and a log collude > (see Section 6.1). > See my comments in 6.1 about this. > > > _______________________________________________ > Trans mailing list > Trans@ietf.org > https://www.ietf.org/mailman/listinfo/trans > > > > > > >
- [Trans] AD Review: draft-ietf-trans-rfc6962-bis-2… Eric Rescorla
- Re: [Trans] AD Review: draft-ietf-trans-rfc6962-b… Ben Laurie
- Re: [Trans] AD Review: draft-ietf-trans-rfc6962-b… Eric Rescorla
- Re: [Trans] AD Review: draft-ietf-trans-rfc6962-b… Andrew Ayer
- Re: [Trans] AD Review: draft-ietf-trans-rfc6962-b… Eric Rescorla
- Re: [Trans] AD Review: draft-ietf-trans-rfc6962-b… Ben Laurie
- Re: [Trans] AD Review: draft-ietf-trans-rfc6962-b… Eric Rescorla
- Re: [Trans] AD Review: draft-ietf-trans-rfc6962-b… Paul Wouters
- Re: [Trans] AD Review: draft-ietf-trans-rfc6962-b… Eric Rescorla
- Re: [Trans] AD Review: draft-ietf-trans-rfc6962-b… Rob Stradling