On Mon, January 18, 2016 12:26 pm, Eric Mill wrote:
>  On Mon, Jan 18, 2016 at 10:19 AM, Richard Barnes <rbar...@mozilla.com>
>  wrote:
>
> > ...
> >
> > One thing that has been proposed is to have an exception for local
> > roots,
> > i.e., to let non-default trust anchors continue to use SHA-1 for some
> > more
> > time.  What do folks here think about that idea?
> >
>
>  That seems like a choice to make only if it must be made, in order to shut
>  off SHA-1 for public roots in the absence of change in the enterprise.
>  It's
>  not something I would proactively accept and move towards, since it
>  removes
>  all pressure from vendors and enterprises to fix up their stuff.

I think this misses out as to how enterprise support generally works.

I think we're all in agreement that we want users safe by default.

I think it should, but may not be, obvious that the risk profiles for a
publicly trusted CA are very different than that of an enterprise-operated
CA. In both cases, a SHA-1 chosen-prefix collision puts all users who
trust that certificate at risk, but the population size for a given
enterprise-root versus Mozilla-default root are many orders of magnitude
different (a single enterprise versus all Mozilla users)

It's also worth considering that enterprise *users* are in a very
different position to enact change. Generally, they're dependent on
vendors, who unlike CAs, don't participate in many (any) industry forums
and which have a very different set of use cases and constraints than
publicly trusted CAs do. Showing a *user* an error because the *vendor* is
slacking doesn't really help protect the user - it just gets them to shift
off that browser or innoculate them to warnings, more than it gets them to
apply pressure to the vendor.

Because of this, anyone who has ever supported enterprise software is
aware of the all too present necessity for enterprise flags. That is,
off-by-default configuration flags that can change or alter behaviour to
support an enterprises' needs. Yes, some of these directly reduce security
- such as enabling NTLM over HTTP sites, for example, or the "Intranet
Zone" of IE - but are necessary to support the slow-moving,
contract-driven reality of enterprise software support.

So imagine a world where we turn SHA-1 off by default. I can assure you
that both Microsoft and Chrome will end up having some form of enterprise
policy to enable it, in some specific cases. Quite possibly Android too.
So what should the flag do when it's enabled? Enable it for all sites?
Probably not - that's encouraging publicly trusted CAs to act in bad-faith
for Internet security. It's most likely that it would do exactly what
Richard proposes - whether it be metadata associated with the root at time
of installation ("Allow this certificate to issue SHA-1 certificates") or
general policy ("Allow enterprise-installed certificates to issue SHA-1"),
the effect is the same.

I agree that we (as browser vendors and security community members) want
to exert some influence onto vendors to guide them to secure behaviour.
But the reality is the incentives of these vendors is very much *not* in
security. If you have any doubt of that, see examples like
https://code.google.com/p/google-security-research/issues/detail?id=693 (
or really, any number of examples from
https://code.google.com/p/google-security-research/issues/list?can=1 )

But there's opportunity to exert softer pressure. For example, UI that
reminds users every time they access one of these SHA-1 sites that their
vendor software is insecure, but which doesn't require the user to get
conditioned to click through interstitials, and for which the noisiness
ratchets up over time.

There's no question that a number of vendors will need months to fix their
products, and aren't doing their due dilligence now. And even when they
do, it may take enterprises months-to-years to deploy these new versions,
because it's always with trade-offs (perhaps the vendor discontinued Vital
Feature X in the version that supports SHA-2, for example).

So we definitely can't think of this as a game of chicken with enterprise
vendors - it's a complex ecosystem balance - and one where, if we want to
support enterprise users, needs to be sensitive to their needs. Whether
it's a default policy (which I support Richard's proposal, which is not
surprising, considering I was one of several to have suggested it) or a
custom flag in about:flags, or an environment variable to be set, a
registry key to be tweaked, whatever have you, I think we need to
recognize a distinction in timelines and risk factors between publicly
trusted and enterprise trusted.

>  This also seems like something of enough import that a multi-browser/OS
>  plan would probably be more effective than any single browser leading on
>  it, since enterprises tend to have 0 qualms about directing their entire
>  staff to use whatever browser works around the problem they're seeing.

This suggest it's all or nothing, but I tried to spell out above how it's
not the case. Collective action against enterprises consistently
backfires, and just alienates users and makes enterprises more risk averse
- which makes them less likely to apply updates and fixes if they think
the risks are high. We balance that with customization - defaults that
work for the 99.99% of users, and leave enough of an escape hatch where we
believe it's reasonable or that the tradeoffs are balanced.

It doesn't have to be a permanent exception, by any means - enterprise
flags go away all the time too, especially if and as they increase support
costs or decrease velocity in maintaining the code (which grows to support
each possible permutation and combination of flags). But all or nothing,
nah.

For what it's worth, the policy proposed by Richard is more or less what
Chrome has presently adopted ( see
https://googleonlinesecurity.blogspot.com/2015/12/an-update-on-sha-1-certificates-in.html
), and almost certainly more or less what Microsoft will adopt (given that
RSA keysize deprecation already has enterprise flags associated with it,
as does the 'strong crypto' behaviour of CryptoAPI & Edge), so it's not at
all unreasonable.

A possible migration path is to distinguish PTCs (Publicly Trusted Certs)
from ETCs (Enterprise Trusted Certs), and have separate flags, with
defaults being SHA-1 off for PTCs, and SHA-1 left on for ETCs by default.
Enterprises can use Firefox's policy management to adjust the ETC flags,
and with a date set in the future where the default for ETCs, in the
absence of policy explicitly configuring it, will switch from "On" to
"Off". This is how you securely migrate things, potentially with
additional UI to communicate if/when ETCs are encountered (which is a
separable issue, really - you can introduce the flag well before and w/o
needing any corresponding UI; the UI is for evangelism, not enforcement)

Alternatively, a more complicated change would be configuring per-root
whether SHA-1 was allowed or not-allowed, but the downside for that is it
creates incentives for PTCs to encourage or instruct users to do so. Given
the history of root CAs encouraging and evangelizing insecure practices
when it can net them additional revenue, I think that would perhaps be
unwise, but it is a more robust option for organizations that have many
ETCs with distinct threat/risk profiles. In my experience, however, such
enterprises are rare, and the risk/reward/complexity tradeoffs favor the
simple flag-for-all solution rather than flag-per-CA.

_______________________________________________
dev-security-policy mailing list
dev-security-policy@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-security-policy

Reply via email to