On a recent bugzilla ticket, a commenter (BCC'd) asks:> Isn't there a chance that some subscribers are omitting the revocation reason even for key compromise revocations?> ...> Isn't it better to err on the side of caution for this type of issues and additionally prevent the reuse of keys whose certificate has been revoked with reason “unspecified” considering that some of them might be compromised?I'd like to take a moment to reply because I believe this discussion is interesting, but I'm doing so here because I believe it is off-topic for that incident ticket. The issue contained in that preliminary report has to do with handling of revocation requests that specified the keyCompromise reason, not handling of revocation requests that did not specify a reason.Jaime,I think it would be a bad idea to assume that all certificates revoked with reason "unspecified" have actually had their keys compromised. I have four arguments:First, I see no argument that it is more likely that any given unspecified revocation actually be a keyCompromise than that it actually be a cessationOfOperation or some other reason. In fact, I think it is quite likely that the vast majority of unspecified revocations most closely match the superseded revocation reason: this would be the case any time a Subscriber automatically revokes their old certificate after renewing or replacing it.I can see an obvious counter-argument here: sure, maybe they're almost all actually "superseded", but we should assume the worst, just in case! But that gets right at my second reason this would be a bad idea: the root programs use revocation reasons to inform their own trust behavior. For example, it is my understanding that the CRLite updates its list of keyCompromise-revoked certs (and pushes the resulting bloom filters to Firefox installs) much more frequently than for other revocation reasons. This compromise ensures that keyCompromise revocations are handled as quickly as possible, while saving bandwidth by not updating the whole list every time.Which brings me to my third reason: treating all unspecified revocations as keyCompromises would increase the number of compromised keys by several orders of magnitude. The minutes of the latest CA/Browser Forum Face-to-Face include a presentation from Ben Wilson at Mozilla which shows that, globally, keyCompromise revocations comprise about 0.2% of revocations while unspecified comprises about 21%.
Increasing the number of keyCompromise revocations by 100x would not only drastically increase the bandwidth usage of systems like CRLite, but it would drastically increase the storage costs of CAs. A compromised key is compromised forever, and therefore must be retained forever.
And so finally, the strongest reason of all: per the Baseline Requirements, if a CA treats a key as compromised, then they are required to revoke all other certificates which share that key within 24 hours.
Therefore a CA has a prerogative to treat a key as compromised only when that compromise has been demonstrated (e.g. by seeing the private key themselves, receiving an ACME revocation request signed by that key, or receiving a CSR with a "this key is compromised" subject signed by that key). Otherwise they open themselves up to denial-of-service attacks: a malicious actor could identify a victim site, apply for a certificate containing the same public key, revoke that certificate with reason unspecified, and let the CA do the rest of the work to treat that as a keyCompromise and revoke the target site's cert as well.
Dear Jamie,
I don't see what's the final goal here. Is it to prohibit anybody from re-using any key that was ever involved in a certificate that was revoked (any reason could be "false" or "mistaken")? Or also keys of certificates that expired (not everybody who has a key compromise reports it or revokes the certificate, they might just create a new key and let the cert expire)?
Kind regards
Roman
--
You received this message because you are subscribed to the Google Groups "dev-secur...@mozilla.org" group.
To unsubscribe from this group and stop receiving emails from it, send an email to
dev-security-po...@mozilla.org.
To view this discussion visit https://groups.google.com/a/mozilla.org/d/msgid/dev-security-policy/00f38a3e-f2b7-4000-bb3a-ac8d756c95cfn%40mozilla.org.
Key-generation isn't that cheap and the larger the keys get, the more expensive it gets.
Also, the CA's would probably need to feed and query one central database of "used" keys to prevent the re-use.
-Roman
I'm not generating a lot of keys… 😉 The last time I used openssl to generate a keypair it took a few seconds. But of course, you're right, it scales as it's done on the subscriber side.
On 1 Nov 2024, at 7:28 AM, Roman Fischer <roman....@swisssign.com> wrote:Key-generation isn't that cheap and the larger the keys get, the more expensive it gets.Also, the CA's would probably need to feed and query one central database of "used" keys to prevent the re-use.
-RomanFrom: Mike Shaver <mike....@gmail.com>
Sent: Freitag, 1. November 2024 13:16
To: Roman Fischer <roman....@swisssign.com>
Cc: dev-secur...@mozilla.org
Subject: Re: Assuming keyCompromise for unspecified-reason revocationsI guess I’m curious about the opposite question: why is it important that a key be permitted to be reused ever? I understand that there are some operational shortcuts that can be taken to avoid deploying a new key along with a new certificate, but I’m not sure if there are other reasons to not just require a new private key for every certificate. They are cheap to generate!I feel a nagging at the back of my brain as I ask this question, so I anticipate that someone will provide a tremendously obvious answer.MikeOn Fri, Nov 1, 2024 at 6:00 AM Roman Fischer <roman....@swisssign.com> wrote:Dear Jamie,I don't see what's the final goal here. Is it to prohibit anybody from re-using any key that was ever involved in a certificate that was revoked (any reason could be "false" or "mistaken")? Or also keys of certificates that expired (not everybody who has a key compromise reports it or revokes the certificate, they might just create a new key and let the cert expire)?