On Wednesday, June 28, 2017 at 7:39:37 PM UTC-4, Gervase Markham wrote:
> Well, we should ask Kai what methods he uses to maintain it right now,
> and whether he uses a tool.

For the recent name constraints, it was a tool.

> > You can have a JSON file, but that doesn't mean it's human-readable in the 
> > least.
> 
> You mean you can stick it all one one line? Or you can choose opaque key
> and value names? Or something else?

Well, the current certdata.txt is a text file. Do you believe it's 
human-readable, especially sans-comments?

> 
> > The CI tools don't check in artifacts. You're proposing giving some piece 
> > of infrastructure the access to generate and check in files?
> 
> I am led to understand this is a fairly common pattern these days.

Please realize that this makes it impossible to effectively test changes, 
without running said tool. This is, again, why certdata.txt being generated is 
part of the build - so that when you change a file, it's reflected in the build 
and code and you can effectively test.

Moving to a CI system undermines the ability to effectively contribute and test.

That's why "machine-readable" is, in effect, a must-have. Whether or not 
"human-readable" is (and what constitutes human-readable) is the point of 
discussion, but if you check in the machine-readable form, then anyone can 
generate the human-readable form at any time.

> 
> >> If Apple said "we are happy to use the MS format", I guess the next
> >> thing I would do is find Kai or whoever maintains certdata.txt and say
> >> "hey, it's not ideal, but what do you think, for the sake of everyone
> >> using the same thing?".
> > 
> > Thought experiment: Why not have certdata.txt generate a CI artifact that 
> > interoperates for other consumers to use?
> 
> Because certdata.txt's format is not rich enough to support all the data
> we would want to encode in a root store. We could consider extending it,
> but why would we roll our own container format when there exist
> perfectly good ones?

Could you explain how you arrive at that conclusion? That may simply be a 
technical misunderstanding, as certdata.txt's format allows for the expression 
of arbitrary attributes (as recently added with the "Mozilla Root" attribute) 
in an appropriate form.

Which may be why we're at cross-purposes here - the existing certdata.txt is 
already technically capable of expressing the constraints. However, it is a 
complex technical burden to express that in metadata, rather than in code - and 
that is true no matter what format you choose.

If your understanding was based on a misunderstanding that "certdata.txt cannot 
be extended to support arbitrary metadata", then I can easily tell you that's 
not the case. It's a matter of changing NSS to, rather than express something 
simply and cleanly in code (relatively speaking), finding an ontology to 
express the constraint in a machine-readable (but not-code) format, and then 
code to parse that and apply in 100 lines what might take 5 lines in code.

This is the same as the authroot.stl - both are quite robust, 
arbitrarily-extensible formats. The choice to not extend is not one about 
technical limitation, but about unreasonable return for the cost to implement.

> 
> >> Mozilla's opinions on roots are defined by the sum total of:
> >>
> >> 1) certdata.txt
> >> 2) ExtendedValidation.cpp
> >> 3) The changes listed on
> >> https://wiki.mozilla.org/CA/Additional_Trust_Changes
> > 
> > 1 & 2 for sure. I don't believe #3 can or should be, certainly not 
> > effectively maintained. Certainly, Google cannot and would not be able to 
> > find an acceptable solution on #3, just looking at things like CT, without 
> > introducing otherwise meaningless ontologies such as "Follows 
> > implementation #37 for this root".
> 
> There are seven items on the list in #3. The first one is item 2, above.
> The second is not a root store modification, technically. The third,
> fifth and sixth would be accommodated if the new format had a "notAfter"
> field. The fourth and seventh would be accommodated if the new format
> had a "name constraints" field.
> 
> So putting all of #3, as it currently stands, into a new format seems
> eminently doable. That doesn't mean every restriction we ever think of
> could be covered, but the current ones (which are ones I can see us
> using again in the future) could be.

That takes a very Mozilla-centric view, but that doesn't align with, say, the 
goal of supporting Apple.

For example, Apple has three CAs where only certain, previously disclosed (via 
CT) certificates are trusted - 
https://opensource.apple.com/source/security_certificates/security_certificates-55070.30.7/certificates/allowlist/
 - CNNIC and WoSign. In a machine-readable form, either you put that in a 
unified file, or you come up with an ontology for expressing dependencies that 
stretches well beyond the sane bounds.

Mozilla's solution to this was, unsurprisingly, with code ( see 
https://dxr.mozilla.org/mozilla-central/source/security/certverifier/CNNICHashWhitelist.inc
 ) - would you see that be expressed in the same file?

Similarly, consider Google's implementation of CT requirements (for Symantec), 
or the recently removed whitelist for WoSign/StartCom - both implemented via 
code.

So clearly, we get in situations where not all restrictions are expressible. 
From a purely pragmatic standpoint, I think it would be undesirable to bake 
those assumptions and logic into the code. Our goal with Chrome is to remove 
such transition code as quickly and efficiently as possible - there's no reason 
to burden a billion users with code 'just in case' a CA has issues again. 
Rather, we focus our limited time and engineering efforts on helping find 
solutions that avoid such issues in the first place, while recognizing the 
conceptual solution is what we may want to redeploy - and if so, we can 
introduce the specific code for the limited time.

Put differently, rather than try to design and enshrine in code that CAs will 
fail and we should have methods X, Y, and Z to deal with it, it seems much more 
beneficial to try to avoid the failure in the first place.
_______________________________________________
dev-security-policy mailing list
dev-security-policy@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-security-policy

Reply via email to