{"id":583,"date":"2017-04-29T11:43:36","date_gmt":"2017-04-29T19:43:36","guid":{"rendered":"http:\/\/unmitigatedrisk.com\/?p=583"},"modified":"2017-04-30T08:04:52","modified_gmt":"2017-04-30T16:04:52","slug":"revocation-reasons-dont-make-sense-for-the-the-webpki-of-today","status":"publish","type":"post","link":"https:\/\/unmitigatedrisk.com\/?p=583","title":{"rendered":"Revocation reasons don\u2019t make sense for the WebPKI of today"},"content":{"rendered":"<p>As the old saying goes, to err is human but to forgive is divine, in WebPKI you deal with errors through the concept of revocation.<\/p>\n<p><span style=\"font-weight: 400;\">In the event a CA determines it made a mistake in the issuance of a certificate or has been notified by the subscriber they would like to see a certificate marked invalid, they revoke the corresponding certificate.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The two mechanisms they have available to them to do this are called Certificate Revocation Lists and OCSP responses. The first is a like a phonebook of all known \u201crevoked\u201d certificates while the last is more like a lookup that it enables User Agents to ask the status of a particular set of certificates.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">In both cases they have the option to indicate why the certificate was revoked, the available options include:<\/span><\/p>\n<table>\n<tbody>\n<tr>\n<td><b>Reason<\/b><\/td>\n<td><b>Description<\/b><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Key Compromise<\/span><\/td>\n<td><span style=\"font-weight: 400;\">We believe the key to have been stolen or can no longer be sure it has not been. <\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">CA Compromise<\/span><\/td>\n<td><span style=\"font-weight: 400;\">The issuing CA itself has been compromised (think <\/span><a href=\"https:\/\/threatpost.com\/final-report-diginotar-hack-shows-total-compromise-ca-servers-103112\/77170\/\"><span style=\"font-weight: 400;\">DigiNotar<\/span><\/a><span style=\"font-weight: 400;\">).<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Affiliation Changed<\/span><\/td>\n<td><span style=\"font-weight: 400;\">The certificate contained affiliation information, for example, it may have been an EV certificate and the associated business is no longer owned by the same entity.<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Privilege Withdrawn<\/span><\/td>\n<td><span style=\"font-weight: 400;\">The right to represent the given host was revoked for some reason.<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span style=\"font-weight: 400;\">There are a few other reasons but they are not materially relevant to WebPKI use cases so I left them out.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">CA Compromise is clearly a special and exceptional case, so much so that browsers have developed their own mechanism for dealing with it (see <a href=\"https:\/\/blog.mozilla.org\/security\/2015\/03\/03\/revoking-intermediate-certificates-introducing-onecrl\/\">OneCRL<\/a> and <a href=\"https:\/\/dev.chromium.org\/Home\/chromium-security\/crlsets]\">CRLSets<\/a>) so it&#8217;s not particularly relevant to the options available to CAs anymore, at least in the WebPKI. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">Another thing to consider when looking at revocation reasons is that about 90% of all certificates in used in the WebPKI (for TLS) are considered to be Domain Validated (DV) certificates, this limits the applicability of the remaining reasons substantially.<\/span><\/p>\n<table>\n<tbody>\n<tr>\n<td><\/td>\n<td><b>DV<\/b><\/td>\n<td><b>OV<\/b><\/td>\n<td><b>EV<\/b><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Key Compromise<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Yes <\/span><\/td>\n<td><span style=\"font-weight: 400;\">Yes<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Yes<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Affiliation Changed<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Maybe<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Yes<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Yes<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Privilege Withdrawn<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Maybe<\/span><\/td>\n<td>Yes<\/td>\n<td><span style=\"font-weight: 400;\">Yes<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span style=\"font-weight: 400;\"><br \/>\nAs you can see, the available \u201creasons\u201d for DV certificates are largely reduced to just \u201cKey Compromise\u201d. There is an argument that both \u201cPrivilege Withdrawn\u201d and \u201cAffiliation Changed\u201d could be applicable to DV but in my opinion, they are a bit of a stretch. If nothing else the difference between these two reasons in the case of DV is so subtle you will almost never see these two usages be used on a DV certificate.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">So what about Key Compromise? \u00a0How useful is it? Clearly, it is an important use case, your trust in an SSL certificate is frankly only as good as your confidence in how well the key is protected!<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The reality is that most key compromise cases can not be detected and worse yet is that it\u2019s far too easy to compromise an SSL key. Take for example the Heartbleed (http:\/\/heartbleed.com\/) bug from last year, SSL keys are often kept in the process and relatively minor coding mistakes, as a result, can potentially expose that key and users won\u2019t necessarily know about it.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Some platforms go out of their way to prevent such attacks at the expense of performance like we did at Microsoft with SCHANNEL where we keept the key out of process but this is the exception and not the rule.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Also popping a web server due to some third-party code vulnerability and getting to the shell in the context of the server is unfortunately far too easy. As a result, when an attacker does get a shell on a web server one of the first things they should be doing is taking that key so they can use it later, but again, how is this detected?<\/span><\/p>\n<p><span style=\"font-weight: 400;\">That is not to say \u201cKey Compromise\u201d as a revocation reason is not important when there is a large-scale vulnerability like <a href=\"https:\/\/blog.cloudflare.com\/the-hard-costs-of-heartbleed\/\">Hearbleed<\/a>\u00a0but this is not exactly a common case.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The other cases for the \u201cKey Compromise\u201d revocation reason are notably dependent on the subscriber:<\/span><\/p>\n<ul>\n<li><span style=\"font-weight: 400;\">Knowing the compromise happened,<\/span><\/li>\n<li><span style=\"font-weight: 400;\">Being mindful enough to notify the CA,<\/span><\/li>\n<li><span style=\"font-weight: 400;\">Being willing to let the world know there was a compromise.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">This last point of public signaling of \u201ccompromise\u201d combined with the fact user agents treat all revocations the same (if they check at all) means that we seldom see subscribers even specify a reason when they ask for a certificate to be revoked.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">As I look at why a certificate gets revoked today I think there are a few cases, these include:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">CA has decided the certificate should be revoked,<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">The subscriber has decided the certificate should be revoked,<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">A root program has decided a certificate should be revoked.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">These are far more meaningful signals to relying parties that the ones listed above and are not so specific that these is any negative signaling in their use.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Today it is not possible to specify these things but maybe we should take a second look at revocation reasons and if we continue to use them make them more relevant to the way the WebPKI works today.<\/span><\/p>\n<p>Ryan<\/p>\n","protected":false},"excerpt":{"rendered":"<p>As the old saying goes, to err is human but to forgive is divine, in WebPKI you deal with errors through the concept of revocation. In the event a CA determines it made a mistake in the issuance of a certificate or has been notified by the subscriber they would like to see a certificate [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[3,4],"tags":[34,25,24],"class_list":["post-583","post","type-post","status-publish","format-standard","hentry","category-security","category-thoughts","tag-crl","tag-ocsp","tag-revocation"],"_links":{"self":[{"href":"https:\/\/unmitigatedrisk.com\/index.php?rest_route=\/wp\/v2\/posts\/583","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/unmitigatedrisk.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/unmitigatedrisk.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/unmitigatedrisk.com\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/unmitigatedrisk.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=583"}],"version-history":[{"count":0,"href":"https:\/\/unmitigatedrisk.com\/index.php?rest_route=\/wp\/v2\/posts\/583\/revisions"}],"wp:attachment":[{"href":"https:\/\/unmitigatedrisk.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=583"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/unmitigatedrisk.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=583"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/unmitigatedrisk.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=583"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}