Below I shall try to address a few of the concerns raised in writing.
You can read just the high-level notes above my signature, diving
into the corresponding detailed exposition below my signature as
you see fit.  Apologies for lack of hypertext links.

0.  The draft as approved by the IESG, describes unilateral pinning
    by the client.  We all agree that was not a good idea, but it
    was a well-intended attempt to address a real security gap.

1.  The hypothetical "assertive use-case" Richard mentions that is
    based on just the current draft is a non-starter.  [ Sadly, Paul
    forgot to disabuse the audience of its possibility on Monday ]

    If the WebPKI is presumed never compromised then we don't need
    a DANE alternative.  With the present draft, DANE offers no
    protection when the WebPKI is compromised.

2.  Denial of existence reached consensus on list shortly after
    London, we just need to polish up the text.  It is also quite
    useful for the greenfield applications that can make do without
    pinning.  I was surprised to hear some suggest that denial of
    existence remains outside the WG consensus.

3.  Given denial of existence, a cached policy that strictly requires
    the extension (STS-like extension pinning) can be removed in
    multiple ways.  Clients can also initially limit the maximum
    pinned extension support lifetime, to avoid excessive exposure
    to any overly eager servers that promise more than they can
    deliver.

4.  Concern that the transport provider, not the domain owner commits
    to the downgrade protection of future connections.  This is
    mitigated by mutually agreed settings between the customer and
    the provider and the customer's freedom to drop TLSA records
    in advance of a provider switch.  The customer (domain owner
    can delete the TLSA records, and within one "extension support
    lifetime" all extant pins will expire.

5.  Concerns that more than a 2 byte lifetime is needed for a
    downgrade protection design.  Neither subdomain pinning nor a
    testing mode are good fit for a TLS-layer mechanism.  Other
    similar STS mechanisms have no additional knobs that might
    apply.

In summary, I'd like to propose that we get an updated draft out
the door *now* with denial of existence word-smithed and updated
security considerations based on Ben's text in the pull request.

We can then quickly follow that up with some final on-list discussion
around downgrade protection, be it a fixed two bytes of lifetime
(in TBD units with TBD implementation guidance for non-zero values),
or one byte of length (initially zero) for a TBD (initialy opaque,
TBD specification) payload.  I see no benefit from a nested extension
block.  This is just a needlessly more complex way of doing separate
extensions.

With either two bytes or an opaque<0..255>, libraries implement the
extension once, and applications can implement downgrade protection
with no new extensions needed in libraries once the TBD bits are
defined, just process the downgrade-protection payload.

My preference is for the two bytes, which simplifies the application
API (extension conveys a network short value rather than an opaque
octet string).  If all we need in addition is a testing bit, with
some sort of in-band signalling (new alert?) for the missing extension
halving the max lifetime from ~7.5 years, to ~3.8 years is fine,
and in any case we get to choose the scale to yield the right range,
15 bits of granularity is plenty.

That said, variable length (0 or up to 255) will do if there's
really a plausible use-case for more bells/whistles in the extension
that make sense at the TLS layer across the application ecosystem
(HTTPS, IMAP, XMPP, NTTP, SUBMIT, POP, ...).

The only remaining alternatives are to severely limit the application
scope or work on a separate (almost identical) extension that fixes
the issues in this one.  It would have all the features of this
one, plus the controversial payload, and would deprecate the present
draft on security grounds.

-- 
        Viktor.

0.  The draft as approved by the IESG, describes unilateral pinning
    by the client.  We all agree that was not a good idea, but it
    was a well-intended attempt to address a real security gap.

        This was added late in the original WG last call and went
        largely unnoticed by the community, including the IESG.  It
        was only when some of us tried to argue for a more robust
        downgrade-protection mechanism that the original unilateral
        pinning was noticed and pointed out, and at that juncture
        the draft went back to the WG to remove the unilateral TOFU
        pinning.  And yet the TOFU pinning was there in order to
        try to close the gap between the intended scope and actual
        security properties of the specification.

1.  The hypothetical "assertive use-case" Richard mentions that is
    based on just the current draft is a non-starter.  [ Sadly, Paul
    forgot to disabuse the audience of its possibility on Monday ]

    If the WebPKI is presumed never compromised then we don't need
    a DANE alternative.  With the present draft, DANE offers no
    protection when the WebPKI is compromised.

        For multiple years (perhaps a decade or more) of the initial
        deployment of the extension in some existing TLS application
        the majority of clients and servers will support only WebPKI
        and not DANE.  Servers that rely on this extension to
        authenticate a privately issued (or self-signed) certificate
        would therefore fail to interoperate with the vast majority
        of clients.  Clients that don't fall back to WebPKI in the
        absence of a DANE TLSA chain would not interoperate with
        the vast majority of servers.

        Rather than lose interoperability with the majority of
        potential clients, non-hypothetical servers will get a
        certificate from Let's Encrypt or similar and *then* perhaps
        consider getting *additional* security from DANE.  Only a
        negligible fraction of servers are going to select DANE-only
        just to save spending $0 on a WebPKI-certificate.  Similar
        considerations rule out a rapid transition to DANE-only
        clients.  The bast majority of clients will do WebPKI
        fallback.

        The extension, as defined in the present draft, can be
        trivially stripped by an attacker able to obtain a fraudulent
        WebPKI certificate.  Therefore, for existing applications,
        it neither obviates the need for WebPKI certificates, nor
        offers any additional security.  Some clients might by local
        policy mandate DANE with some servers, but this is not a
        scalable model for the Internet.

        So all that one gets from (assertive) WebPKI + DANE is the
        extra complexity cost of managing TLSA records in DNSSEC
        and the cost of possible failure if TLSA record update
        automation fails.  There is no benefit at all, so even
        correctly managed TLSA records are just extra baggage, that
        gains no security beyond WebPKI.  This guarantees negligible
        deployment.

        If DANE is to have any use at all, it MUST be downgrade
        resistant.  This is not controversial, when last discussed,
        even the majority (even those who've been rather reluctant
        to support "pinning") of responses broadly agreed with the
        cost/benefit analysis that showed DANE without downgrade
        protection to be all cost and no benefit.

2.  Denial of existence reached consensus on list shortly after
    London, we just need to polish up the text.  It is also quite
    useful for the greenfield applications that can make do without
    pinning.  I was surprised to hear some suggest that denial of
    existence remains outside the WG consensus.

        Denial of existence helps even/especially in the immediate
        "green field" use-case, i.e. in applications that mandate
        the extension.  Such clients can then interoperate with
        servers that are (to coin a term) "DANE chain ready", but
        don't yet have DNSSEC or have not yet worked out the
        operational details of publishing TLSA records.

        The server can send a denial of existence proof (even if
        its own zone is unsigned, in which case it sends proof of
        that from some ancestor domain), and then the client can
        securely fall back to WebPKI, or TOFU...

3.  Given denial of existence, a cached policy that strictly requires
    the extension (STS-like extension pinning) can be removed in
    multiple ways.  Clients can also initially limit the maximum
    pinned extension support lifetime, to avoid excessive exposure
    to any overly eager servers that promise more than they can
    deliver.

    a.  Start sending a TTL of zero, authenticated via the current
        DANE TLSA records.

    b.  Delete the TLSA records.  Send a denial of existence proof.


    c.  Stop doing DNSSEC.  Send a denial of existence proof,
        of insecure delegation of the domain.

    If any of the above happens at least one "pin lifetime" prior
    to moving the service to a new platform that does not support
    the extension, there is no friction for clients that reconnect
    after a long break.

    If the proposed scale of 1h-65536h (max out at ~7.5 years)
    is deemed too risky on the high end, perhaps we can reach
    consensus on units of minutes, which tops out at ~45.5 days.
    That would cover the majority of recurrent connections to
    a site, while allowing a timely planned move to a provider
    that does not support the extension.  It would still
    adequately cover MUAs sending and receiving email, NNTP and
    XMPP clients, connecting regularly to their servers, ...

4.  Concern that the transport provider, not the domain owner commits
    to the downgrade protection of future connections.  This is
    mitigated by mutually agreed settings between the customer and
    the provider and the customer's freedom to drop TLSA records
    in advance of a provider switch.  The customer (domain owner
    can delete the TLSA records, and within one "extension support
    lifetime" all extant pins will expire.

        Yes, the commitment signal comes from the transport provider,
        but denial of existence resets or prevents a strict extension
        requirement, so a strict policy can only be set when the
        domain has both DNSSEC and TLSA records.  The transport
        provider would *not* be able to pin the extension in the
        absence of DNSSEC and TLSA records at the served domain.
        Presumably, the domain owner would like to see the TLSA
        records used, else why publish them.

        One might also expect that the transport endpoint provider
        is operating the service for the benefit of and in concert
        with the domain owner.  If the domain owner wants no pinning,
        or pinning for just a short time (days or weeks, not months
        or years), then that's what the transport provider will be
        be delivering (or they'll not have very many customers).

5.  Concerns that more than a 2 byte lifetime is needed for a
    downgrade protection design.  Neither subdomain pinning nor a
    testing mode are good fit for a TLS-layer mechanism.  Other
    similar STS mechanisms have no additional knobs that might
    apply.

        a. At least an extension lifetime TTL is needed to address
           the downgrade attack.  Zero bytes is definitely not
           enough.

        b. DANE TLSA records are seervice-specific, they cover *one*
           port on one named transport endpoint.  Pinning subdomains
           as in some STS variants is not natural here.  DANE chain
           stapling is a transport-layer (TLS) not an application-layer
           mechanism.  Robust pinning for subdomains drags in the
           public suffix list, and is much too complex for a
           general-purpose TLS-layer mechanism.

        c. Testing is not a good fit at this layer, all that's
           pinned is the ability to deliver the extension, after a
           previous connection delivered DANE TLSA records and a
           non-zero extension support lifetime.  There is no TLS-layer
           mechanism for the client to inform servers that don't
           offer the extension that this extension was expected
           while continuing the connection.  The closest we get is
           the TLS 1.3 missing_extension(109) alert, which does not
           carry the id of the mission extension, and is a failure
           alert.  Out-of-band notification would require HTTP
           support in applications that can't generally be expected
           to include an HTTP implementation.

_______________________________________________
TLS mailing list
TLS@ietf.org
https://www.ietf.org/mailman/listinfo/tls

Reply via email to