Maintaining digital certificate security
googleonlinesecurity.blogspot.com
googleonlinesecurity.blogspot.com
Every CA should be required to publish a signed, public list of every certificate they have issued that is currently valid; and no certificate should be considered valid if it isn't on a CA's public list of certificates.
That way, when a CA fucks up like this, vendors could remove their certificates from the root stores, but could grandfather in all their previous certificates so the CA's customers have a few months to get a certificate from a decent CA. We could even use the list to contact all the CA's customers and advise them of the upgrade deadline.
If this CA isn't removed from the root store, it sends a message to other CAs: You can issue bad certificates with impunity, and there will be no negative consequences.
http://www.aaronsw.com/weblog/squarezooko
Ben Laurie (a co-inventor of CT) had some particular objections to blockchains, partly to do with the problem that the total computational power that is or will be brought to bear on mining is unknown and maybe unknowable.
http://www.links.org/files/decentralised-currencies.pdf http://www.links.org/files/distributed-currency.pdf
I'd like to actually make a web page that talks about the historical relationship between blockchains and other decentralized append-only data stores, as well as the points of debate and trade-offs between different designs, and the space of proposals that achieve consensus about the contents of an append-only record.
http://www.freespeechme.org/ is a more mature and more secure.
Edit: DNSChain does not appear to provide certificate validation for .bit domains in common browsers at this time. It can serve DANE records, but the browsers don't currently verify them and the existing browser extensions for adding DANE support require DNSSEC which DNSChain does not provide, unless I'm missing something.
DNSChain is just as secure as FreeSpeechMe when connected to a trusted DNSChain server.
> It advocates using someone else's trusted server
This is misleading. You and Jeremy keep repeating this line and it honestly feels like a vendetta at this point (I hope it's not). It advocates connecting to your DNSChain server (or a close friend's). This is security that is either on par with FreeSpeechMe (without the baggage), or orders of magnitude better than what's provided by HTTPS today.
It does not, as it claims, always provide a log of issued certificates and it does not stop MITM attacks:
- http://www.ietf.org/mail-archive/web/trans/current/msg00233....
It also does nothing to fix the non-functioning certificate revocation problem (which is not a problem with the blockchain).
CAs knew that the stakes were high when they signed up to be a CA, so I think it'd be fair to remove them permanently. Eventually, only the truly paranoid would be left. It may cost a bit more to run a fully secure CA, and that would be reflected in the cost of a certificate from those that remain, but that'd be a price that everyone should be willing to pay.
I don't know, this could really discourage the adoption of HTTPS. We need to be making it easier for sites to adopt it.
Ideally we could lessen our dependence on CAs. Sure, a "fully secure/expensive" CA would validate a certificate's authenticity with high confidence, but we'd be excluding tons of hobby projects and small shops who wouldn't want that expense.
I'm all for reducing our dependence on CAs, and, reducing the number of CAs we trust for signing a site, like putting the keys in DNSSEC. But until we do that, we must not trust bad apples.
TLSv1.2 with good ciphersuites using ECDHE with a named curve like secp256r1 [murky origins I know, but we know of nothing else wrong with it, though Curve25519 is superior in my opinion], and an AEAD like AES-128-GCM or CHACHA20-POLY1305, properly implemented with no TLS compression at least comprehensively prevents Eve from spying on the contents of your connection in most cases, even if you're using self-signed certificates with no pinning and are entirely unprotected from Mallory.
A browser shouldn't call it secure or the endpoint trusted, but it should transparently replace all uses of unencrypted HTTP worldwide, including internal ones. That should not be discouraged, and will hopefully be actioned with HTTP/2 - that was the plan, anyway.
Even if the encryption is crap (Export ciphers... RC4?) I guess it does take some more work for Eve, which knocks out a few of the lower-capability adversaries.
So it would be possible to prove a certificate was issued before a certain time (eg. before a breach at a CA), if CAs were forced to immediately publish, in the Bitcoin block chain, the hash of each newly issued certificate. There would be no need to trust a single (bypassable/hackable) entity doing timestamping, since the block chain itself is distributed.
(This is just one of the numerous applications that distributed block chains enable IMHO! And we are just barely scratching the surface of what we can do with such a concept...)
But the bitcoin blockchain is already too big to store and sync on mobile devices with costly data connections - and it would only get bigger if it had to contain every SSL certificate ever issued!
You could have SSL clients connect to trusted nodes, like mobile bitcoin clients do [1], but then you've basically taken Certificate Authorities and replaced them with 'trusted nodes' so you're not much better off really.
however, a CA could just issue certificates with the issuing date in the past. they probably wouldn't do this for real customers because it would be detected easily. however, they could do it for fraudulent customers and it would be a massive temptation for CAs who have no other source of revenue to do this.
It seems like the way to fix this is to phase out bad CAs over time. And since certificates already have expiration dates and CAs typically don't issue certificates for longer than a couple years this should be easy: You don't trust any certificate signed by that CA which expires after a date two years from when you blacklist them. So the certificate some website got six months ago keeps working until it expires in a year and a half, but the certificate someone gets from them tomorrow fails immediately because it expires two years and a day after you removed the CA, which the site operator will discover in their testing and use a different CA before it reaches production.
Sure, next month they could still be issuing certificates that expire in 23 months and they would be valid. But a year from then they'll only be able to issue certificates that expire in 11 months, and after two years they'll only be able to issue certificates that are already expired.
That's what the parent post is talking about.
[edit: You're right. Even w/ arbitrary dates, end dates crossing the threshold will still not be accepted.]
You are addressing the other problem: CRLs essentially.
It depends on how worried you are about (a) proactively contacting site administrators; (b) stopping the CA issuing anything at all, instead of allowing them to issue shorter and shorter certificates as the end date approaches - and thereby demonstrating clear, immediate justice instead of slow, drawn-out justice; (c) 10 year certificates [1]; and (d) allowing website owners to proactively check for accidentally-issued certificates by monitoring the certificate lists.
(admittedly, monitoring the certificate lists wouldn't help if the bad certificate wasn't on the main signed public cert list, and people being MITMed were served a different signed public cert list. So this wouldn't be safe against CA insiders or CIA warrants)
[1] Really. https://www.positivessl.com/ssl-certificate-positivessl.php
Really browsers should just discard anything that isn't a root CA and expires more than two years from now as a matter of principle. Consider the consequences of issuing a certificate that far out on domain ownership transfers: Facebook bought facebook.com in 2005. The previous owner could still have a signed certificate for it.
You cannot grandfather in old certificates because you have no idea what else may have been tampered with. If they have a security hole, it could have been there for a long time. There is almost no way to know if a certificate was improperly issued unless you're the domain owner. All of them have to be invalidated to stop any other potentially invalid certificates.
This is why the CA model is so stupid. It relies on humans at over 650 institutions "doing the right thing" every time, and when the inevitable happens, destroying a large number of innocent certificates.
In terms of sending a message, we already know that you can issue invalid certificates with impunity. Exploit a CA, make your fake cert, use it, get found out eventually, repeat. It doesn't work as well for pinned certificates but there's more than one way to skin that cat.
Doing it this way is actually a good way to handle product differentiation, because generally people won't make browsing choices based on certificate brand name, but commercial website owners will choose a better CA if it means that CA is less likely to get de-certified.
There were probably other reasons for the differential treatment (the scope of the Diginotar hack was bigger, for example), but I think that a lot of them are essentially strong correlates of the disclosure policy (i.e. if you have other responsible security practices, you're more likely to have a good disclosure policy).
For example fines, changes to procedures, mandatory security audits, agreeing not to issue certain types of certificate etc - the CA is going to do their best to comply if the alternative is to be put out of business.
Whether we want browser vendors / an industry standards committee to have that much power is another matter, of course.
Unfortunately there's no real procedure you can put in place to prevent hacking, as the NSA discovered to their cost.
If we told people "no matter who swindles you, we'll make you whole", everybody would invest in ponzi schemes.
You'd be punishing a lot of people because they don't know better for something that really should be built into dns and http.
It has many unintended consequences, for example it's especially a pain with UEFI Secure Boot.
A LIST??? This will be much MUCH larger than a list of revocations, take a LONG time to verify, and frankly, would never be up to date.
The talk - https://www.youtube.com/watch?v=pDmj_xe7EIQ The alternative - http://convergence.io/
http://www.freespeechme.org/ is a more mature and more secure.
Wrong; it advocates using your own server, but proposes public servers for tests. Here's an excerpt of the README:
DNSChain is meant to be run by individuals!
Yes, you can use a public DNSChain server, but it's far
better to use your own because it gives you more
privacy, makes you more resistant to censorship, and
provides you with a stronger guarantee that the
responses you get haven't been tampered with by a
malicious server.It is still the case that using DNSChain will not get you validated SSL for .bit domains without additional software. It can serve DANE records, but the browser won't verify them and the existing browser extensions for adding DANE support require DNSSEC which DNSChain does not provide.
Yes, just like FreeSpeechMe it the SSL validation will initially work via a browser extension, but unlike FSM (heh) it does not carry the additional baggage of requiring you to run a Namecoin node on your [phone/laptop/etc.].
B) Use a third party to register the information to secure the initial connection. This is what CAs were created for, and now people are suggesting DNS (and I would wager somebody might recommend whois at some point) as central trusted authorities for this data. Upside: no initial connection mitm, attack surface is minimized compared to number of CAs, distributed model. Downside: still a 3rd-party central authority, and due to smaller attack surface one successful attack could have much wider-ranging consequences, and it adds complication.
C) Decentralized network of 3rd party peers to share authority information. Upside: decentralized, loosely organized, requires a bigger attack surface to disable. Downside: peers not held to as high a security standard, not necessarily businesses so no guarantees of integrity.
D) Require the user get out-of-bounds information to verify the integrity of initial connection, and after that any connection between the source and destination is secured in any number of ways. Upside: total security not dependent on 3rd parties, no man in the middle. Downside: incredibly inconvenient and totally unscalable.
E) All of the above. Support all possible schemes and allow the domain and the users to determine which of them they will use. Layer all different forms of verification so that the number of successful exploits to achieve a fake cert is so complicated that only a few dedicated state actors or elite hackers would spend enough time on it to be successful. Upside: users have choice, domain owners have choice, increased security overall. Downside: browsers have to figure out how to explain to the users what the fuck is going on when they get a warning about a cert now.
1. An identity.
2. A secure communications certificate.
These do not need to be the same thing or issued by the same entity. I propose to modify the system as follows:
1. Register a domain name using an email address and a PGP key.
2. The registrar verifies that the applicant has the private key by requiring a clicked link in an encrypted mail.
3. A phone number is required for "full trust".
4. Thus with a private PGP key and a phone, trust that the applicant is the applicant has been established. It really doesn't matter who or what that applicant is -- just that the applicant and only that applicant has the required items.
5. The registrar passes the public key and the top domain to DNS servers. DNS validates against the registrar. And trust in the domain as an entity is now established.
6. Secure communications with the domain can now be established through the use of certs issued by the top level domain. And the domain becomes it's own authority.
Any changes to registrar/domain information requires decrypting an email and answering a phone. Expensive and compromised CA's go away - Domain records become secure - Trust becomes decentralized - And domain owners hold all the keys... The only thing anyone else has is the domain holder's public key... SSL itself remains in place as is...
Sure, if you lose your private key - you're screwed -- but that's just owning up being a responsible domain owner.
Yes, it's better because you now only trust one party [1] what's much better than 600 random companies around the world. But it's not a panacea, that still puts too much power into governments hands, and still relies too much on a third party that can be hacked, bribed, threatened.
I'd still like it better if browsers pinned the key of every site I access, and issued a warning if it changed without the new key being signed with the old.
[1] Ok, a few, because you don't contact ICANN directly when you get a domain.
Second, all you've described is a certificate authority that works inside DNS. Instead of a CA validating your certificate and the client blindly believing whatever the CA tells it, now it's the DNS validating your PGP key and the client blindly believing whatever DNS tells it. It's the same, only now you've got more eggs in one basket to get owned.
So no, any changes to DNS do not require any key from a domain owner. If the client implicitly trusts the DNS it means the DNS can make any change it wants and the client will believe it. This is the whole reason nobody likes the CA model, because the CA can decide at any time to issue a certificate for any domain and any client will just blindly believe it.
You're defining trust as trust that the entity is who the entity claims to be in societal space. But this is unnecessary. All that needs to be trusted is that the claimed domain owner is the domain owner. It doesn't matter who that entity is in societal space - just cryptographic space.
Each domain is its own CA. And the registrar doesn't need to be trusted at all. All it is doing is dolling out domain names to public keys. There is no need for "true" personal identity to be established - since the only entity that can decrypt the PGP encrypted verification email is the owner of the associated private key.
I've drawn a very rough diagram for you... http://s26.postimg.org/daz5u1izd/replacement_CA.png
If computer A wants to connect securely to computer B, and it doesn't want its connection to be MITM'd, computer A trusts a 3rd party (computer C) to tell it that computer B is really computer B and not a fake. If you take over the DNS system (which is your version of computer C in my example) you get to write anything to computer A and it will believe it.
The whole idea behind a MITM is that an attacker controls communication between A and B, and ideally also controls communication between A and C. Just controlling the network isn't enough to subvert the connection, though, because an attacker would need to control one of A, B, or C.
If you are the NSA, and you write up a very nice National Security Letter and go to computer C and say "make a fake DNS record for me, because terrorism," you now get to write blank checks for yourself and computers A and B have effectively no idea that their connection is now subject to MITM.
Specifically to exploit your system all you'd need to do is create a fake A record pointing to computer D, and a fake public key record which matches the PGP key and SSL cert of computer D. If you weren't using DNSSEC you could do this on a regular open wireless network with no extra hacking needed. If you are using DNSSEC (and a mandatory validating stub resolver, which Windows doesn't ship with) you'd need to take over the root DNS servers or the registrar which feeds records to the .com. root DNS servers. But the NSA can do all that. Probably others too.
So, again, it's the exact same state we're in with the CAs, with the exception that DNS would be less secure because the client (computer A) doesn't have any public keys/ca certs stored on it to verify the DNS servers or domains against.
The system I've laid out would be significantly more secure and less spoof-able than the current system. Further, DNSSEC becomes entirely unnecessary...
Also, it is entirely possible to create a registrar which would store all user record data in an encrypted store which could also be encrypted using a domain owner provided public key... if this were added to the architecture, no government entity could modify anything regarding a domain - except replacement of the entire record.
Of course, since the entire system current and any possible future Internet relies upon computers and networks that are explicitly not under the control of the content provider - any government can at any time break the system... This is always going to be true of any and every system of wide networks.
EDIT: Computer A and B need a third entity C to validate A to B and B to A. True... However, this does not need to be a computer -- it could very well be a cryptographically generated unique ID... In my example "C" is the PGP ID. However, it could be any cryptographic item that is tied to the domain record and only modifiable using the private key that generated the unique cryptographic item... for example, it could be a bit coin address.
This is the entire reason we are trying to get away from CAs! What we have works perfectly fine. The only reason anyone wants to get away from it is to prevent state actors from overriding a CA's authority. If you want to just reinvent the wheel with the DNS system, use RFC 6698.
However, my personal reasons to discard the current CA system is to enable secure communications from multiple subdomains without the need to pay a $500 rental fee for a wildcard identity+cert --- As well as enable secure passwordless access to A/MX records without fear of compromise.
The government is going to be able to break any system that's put out there. At the very least, a government can disrupt IP traffic in and out of a node. There is always going to be an open addressing scheme, unless the network is an encrypted peer-to-peer network with every node attempting to decrypt every packet... I seem to remember reading about a block chain peer-to-peer data network being developed. However, my guess is that overhead bandwidth limitations will be a problem for large networks.
What would help is be more ruthless when CA's mess up, and no the pussy approach we are using now: do nothing.
There is no easy way to add or remove a CA from our trusted sets. There is no way for a server to send multiple signatures to the client, so the client can choose any CA he actually trusts and silently discard the bad CAs.
There is no problem in having any CA issue a certificate for any domain; the problem is that we have to trust these CAs and we can't move fast enough.
No! Certificate Transparency still relays on central authorities. We need to get rid of CAs. TACK + Convergence is the correct solution.
Are these what you are referring to? [1] [2]
[1]: http://tack.io/ [2]: http://convergence.io/
...that their CT approach is superior to TACK because (T1) Servers can instantly roll out a new key if the previous one is lost (T2) Global (ie. whole internet sees evil server instead of good server) and targeted attack detection is superior (T3) There are no trusted third parties (T4) Newly issued keys on totally new sites can also be validated (to a greater extent) (T5) No server modification (ie. to deliver pinning headers) is required.
... that their CT approach is superior to Convergence because (C1) It is not known to introduce side-channel attacks due to changes in the SSL connection negotiation phase (C2) Servers can instantly roll out a new key if the previous one is lost (C3) Global attacks (ie. whole internet sees evil server instead of good server) are negated (C4) There are no trusted third parties (C5) Newly issued keys on totally new sites can also be validated (C6) No server modification (ie. to deliver pinning headers) is required.
Can anyone refute these claims?
But unfortunately she does not take TACK/pinning + Convergence in consideration.
https://medium.com/bitcoin-security-functionality/b64cf5912a...
Convergence IMHO does not work. The UI is poor and fundamentally it's just the CA model with very short lived constantly renewed certificates. There's no particular reason to believe it'd work better than the existing PKI for ordinary users.
Very strange conclusion. Convergence have following properties CA model does not have:
* trust is optional (you don't have to trust Iranian CAs) * trust is revocable (you can safely remove trust from any notary) * trust is distributed (you trust only if all notaries are acting as one; as opposing to "you trust anything any of CAs will say")
Notaries are not signing anything, they are not CAs. Also, there is nothing like "short lived constantly renewed certificates" in this model. Hosts are using self-signed certs (or CA signed - does not matter). Notaries are functioning in "attacker will not MiTM whole Internet" model and only help you detecting if something went wrong.
If anything, convergence is a combination of TOFU and WoT models. Although an attempt to describe a security model by such comparisons does not help much.
There is no need for a UI in Convergence that I know of? What part are you talking about?
> and fundamentally it's just the CA model with very short lived constantly renewed certificates.
I don't understand what you are referring to. There are no "short lived constantly renewed certificates" in Convergence.
Maybe you mean something else
That's interesting coming from the Bitcoin angle as I've seen Trezor present before and personally opposed Gavin's stance on both SSL use and the general scope increase in Bitcoin's Payments/Receipts discussions. Deaf ears.
With CT we still have to trust CAs. Basically forever.
What is there to investigate? If they had a proper system in place this should not require 'investigation'.
While I embrace the global infrastructure, it's a bit weird to give authority rights within a country that has a pretty broken legal system (re: Avnish Bajaj, etc).
Can you elaborate? I've heard a lot of people say it's broken or badly designed, but not that it's malicious or intentionally broken.
Almost certainly the creation of the standard was not malicious, and almost certainly it currently gets support of people acting with malice. But I don't have anybody to point a finger at, even the most logical suspects aren't overtly trying to keep it broken.
You appear to believe that any security system that has any failure, ever, indicates "massive systemic problems". I assert that there are no security systems in history that would meet such a standard.
There are an enormous number of sites and certificates out there. Studies have been carried out at scale on attacks on SSL and found that most MITM attacks come from locally installed virus scanners, malware, or company firewalls. Hacked CA's didn't even register. So if you represented the number of bad certs as a percentage it'd probably have a lot of zeros after the decimal point.
That doesn't mean the world should sit on its hands. Although real world studies have been done, requiring all certs to be public will be a massive upgrade.
DANE and DNSSEC feel to me like the only currently proposed replacement for the CA system that has a chance of succeeding, not necessarily because of technical superiority, but because of practicality and simply being "good enough".
Instead of trusting 600 CAs, with DNAE you only trust the TLD, second level if existent, and registrar. It's an incredibly smaller attack surface. You can also register in a second TLD, inserting redundancy into any system that knows your address beforehand.
Obviously Certificate Transparency (or any public audit log to some extent, really) helps a bunch with this sort of thing.
Back to the Bazaar!
Jesus Christ, the CA system is so broken.