On Thu, Feb 06, 2025 at 10:48:28PM -0800, Arabella Barks wrote:
> In my opinion, currently each Certificate Authority (CA) can only identify
> and reject the public keys revoked due to key compromise within its own
> PKI, but not those from other CAs. However, I believe that CAs have the
> obligation to submit the public keys of compromised keys to PwnedKeys, a
> centralized service. They are also obliged to conduct verification via
> PwnedKeys when receiving CSR to prevent the use of leaked or insecure keys.
Overall, I agree with your sentiment -- I believe that the WebPKI would
be strengthened if CAs were obliged to perform more due diligence around
known problems with private keys before issuing certificates, if for no
other reason than post-issuance revocation is a very lacklustre control,
given the poor support for revocation in the WebPKI. This does not
appear to be a widely shared sentiment, however I applaud your desires
to increase awareness of the problem.
There are a couple of practical problems with the idea of CAs sharing
public keys reported to them as compromised, however, mostly around the
lack of verifiability, and opportunities for attacks. I looked into
this some time ago, after a private discussion on this topic with
someone from a prominent actor in the WebPKI. The conclusion I came to
was that, at present, any scheme involving having CAs report keys as
compromised due to revoking the associated certificate with the
"keyCompromise" reason is a very dangerous proposition.
The issue is that there is no requirement for a CA to robustly verify
proof-of-possession of the private key for which they issue a
certificate. This means that, in a world where reporting a certificate
as needing to be revoked due to key compromise causes that key to be
placed on a global naughty list, would almost invariably lead to the
following attack:
1. Good Guy Greg gets a certificate issued for
gooeguygreg.example.net, using a key they control, whose public key
is P.
2. Naughty Nell gets a certificate issued for
naughtynell.example.com,
which includes the same public key P in the certificate. Nell can do
this because they choose to use a WebPKI CA and issuance method that
does not provide proof-of-possession of the private key for P.
3. Naughty Nell now goes to their CA and reports the certificate for
naughtynell.example.com as needing to be revoked due to key compromise.
Note that at this point the CA can't require proof-of-possession,
because there are entirely valid key compromise scenarios where the
legitimate subscriber would lose access to the private key (think
ransomware, for example).
4. Upon revoking the certificate for key compromise, the CA then reports
public key P as having been compromised, as the rules require them to
do.
5. Good Guy Greg's entirely legitimate certificate gets revoked because
its key has been reported to the "Central Key Compromise Clearinghouse",
even though the key was never actually compromised. While we know that
subscribers are _supposed_ to be able to replace compromised
certificates quickly, there are puh-lenty of examples where certificates
can't be replaced within *five days*, let alone the 24 hours required
for key-compromised certificates. Thus, Good Guy Greg's site could very
well be denied service until a new certificate can be issued and
installed.
Now, I know there are a variety of mitigations that could solve for this
attack -- for example, requiring robust proof-of-possession before
issuing a certificate. However, those mitigations are not in place yet,
and would take considerable time to standardise and roll out to all
WebPKI CAs. Thus, "CAs should report all key-compromised certificates
to a central clearing house", while a great idea, is not something that
can happen any time soon, and is a much larger undertaking than it might
appear at first glance.
That's only one viable attack scenario that I've thought of. I've got
several more, most of which are even harder to mitigate, such as key
flooding.
> It is appropriate for this centralized service to be operated by entities
> like Mozilla or Google, which have their own independent root inclusion
> policies or programs.
Mmmm, I think any proposal of this kind would receive _heavy_ push-back
from CAs. Having to do real-time checks of any kind during certificate
issuance is never something that CAs like, as it slows down the issuance
process -- consider how CAs have not been leaping with joy at the
existence of linting tools, and how much over-engineering had to be put
into CT in order to accomodate CAs' desire not to block the pipe.
If each trust store mandated a check against their own list of
compromised keys, that would be mandating *multiple* real-time
pre-issuance checks, and I would expect CAs to absolutely lose their
minds at the idea.
> Moreover, we need a neutral yet mandatory service to address the issue of
> sharing information about compromised keys.
If there were one service, run by one of the trust stores, that the
various trust stores all required, that would ease the proliferation
concerns, but the next question that would inevitably arise would be:
who would run it? To get any one of the trust stores to spin up
something from scratch and commit to operating it basically forever
would be a politically and financially non-trivial undertaking, and
would, I expect, only happen if there were someone within that
organisation who had an absolutely burning desire to see it happen.
Now personally, I'd be fine with trust stores mandating that all CAs had
to use Pwnedkeys, but I expect that there would be, to put it mildly, a
certain degree of understandable concern expressed, from many different
contituencies, around single-points-of-failure, monopoly, and similar
such things.
Mandating that CAs use _a_ third-party source of compromised key
information, without specifying anything about which one to use, would
ease the single-point-of-failure concern, but then you've got the
quality problem to address. After all, CAs are _already_ required to
maintain and consult some sort of list of keys for which they will not
issue, but we still see problem reports now and then where a certificate
is issued for a key that should _absolutely_ not be used, and the root
cause is invariably found to be "oh, that key wasn't on our list, but
we've definitely got the full list now, yep absolutely, you can totally
trust us".
I have absolutely no doubt that, were a requirement to use a third-party
source of compromised key data instituted, many CAs, either through
ignorance or apathy, would use whatever was easiest for them, rather
than what would be best for the WebPKI, and certificates would still be
issued to keys that other sources of compromised key data already knew
all about. Putting in meaningful requirements for data quality
would basically amount to mandating the use of one service (or at most a
couple), as it isn't exactly a large and vibrant market with a wide
variety of players whose data is broad and up-to-date.
- Matt