Phasing Out SHA-1 on the Public Web
blog.mozilla.org
blog.mozilla.org
[1] https://security.googleblog.com/2015/12/an-update-on-sha-1-c...
[2] https://blogs.windows.com/msedgedev/2016/04/29/sha1-deprecat...
EDIT: My frustration is that it's a bit difficult to grok who's warning against what when, and who's blocking what when, and who's giving unskippable errors to what when but I'll try to collect and distill this down because right now I have to look it up every time on blog posts that haven't been updated in years (-cough- Google)
https://gist.github.com/anonymous/63e5ecb1de2511985255a98bce...
[1] you'll most likely need to write code for this, I don't think it's widely supported. If you send SHA-1 to TLS1.0 and SSLv3, that's probably easier than triggering off the signature algorithms extension.
I want to point out here that the oldest OS the newest Firefox supports is Windows XP SP2 [0], released 8 years ago, and a free upgrade from the original XP release 14 years ago. Unless you need support for last millennium's hardware you have no excuse for not supporting SHA-256.
[0] https://en.wikipedia.org/wiki/Firefox#System_requirements
Whenever TLS 1.0 starts getting pulled from servers, it's going to be similarly painful. Nokia S40/Asha (last device released in 2014), only supports TLS 1.0, even though TLS 1.2 was 6 years old at that point. Nobody meaningfully supports TLS 1.1, but not TLS 1.2, so let's not hold lack of TLS 1.1 support against them.
(Not to pick on Nokia, they just happen to be an easily identifiable client platform that I'm familiar with)
[1] https://pibytes.wordpress.com/2013/02/09/deduplication-inter...
If you know a technique for making SHA-1 collisions and a technique for making MD5 collisions, it's probably possible to combine the techniques and make a collision for SHA-1-MD5.
If you are interested in hash function combiners, have a look at Robust Multi-Property Combiners for Hash Functions [2], a recent paper on the topic. It aims at getting several properties at the same time (preimage resistance, collision resistance). For simpler schemes with a single property, just explore the bibliography at the end of the paper.
So as long as your data on disk hasn't evolved intelligence and actively tries to create two blocks with the same hash, your storage system is absolutely fine.
Source: I wrote that hash-based dedup code
Can you tell why SHA256 was chosen? Was it because of the larger hash, or was it a requirement to have a cryptographic secure hash?
Do you know how the hash is used in the Netapp in regard to the remark MichaelMoser123 made: "(two blocks are considered equal if the hash is equal - most systems don't care to check for collisions" [...]
Is it (overoversimplifed ;):
if sha256(a) == sha256(b) {
performDedup()
[...]
Or is a compare added if the hashes found to be identical: if ( sha256(a) == sha256(b) and
byteCompare(a) == byteCompare(b)
) {
performDedup()
[...]I understand SHA1 is an issue, but I'm also confused by some things. Happy to have web pages be encrypted to keep my personal information from being captured. Not really sure why we are encrypting video streams from Youtube. Is a cat video something that we need to make more secure?
And I agree with the comment that the problems are now coming back to the plethora of CA's that have popped up in the last few years.
If the video you're watching is political in nature and you live in under an oppressive regime, absolutely. Youtube's not just cat videos.
You think the Internet is still a toy?
[0]: https://www.mozilla.org/en-US/firefox/organizations/faq/
Yes, for several reasons. Multiple ISPs have purposefully messed with YouTube and other video traffic, and YouTube reported that after they switched to HTTPS, many of their video reliability issues simply went away.
Also see https://en.wikipedia.org/wiki/Great_Cannon ; it's not safe to load any content over insecure HTTP.
This is about solidarity by increasing the background noise. If only those people who really need it would use encrytion, they were easy to detect and to suppress.
So, please show solidarity with the weak people in our and other societies by encrypting as much non-sensitive stuff as possible.
If I'm hosting a cat video on my website, I don't want my visitors' slimy ISPs adding Javascript-injected ads to my page and my visitors thinking it was me.
But more importantly: There's something very wrong with declaring that certain kinds of content should be relegated to a second-tier, less-secure technical stack based on a judgment that their content doesn't deserve security.
- Browsers are huge attack targets and if you don't update you will be vulnerable to many more vulnerabilities.
- TLS not only provides confidentiality but also integrity. This prevents others from injecting content into the sites you visit, even if you don't care if they know the content.
Mozilla used to have a page that said something along the lines of "Your version of Firefox is out of date. Please update to stay safe and secure. If you don't want to update we recommend that you use the most recent version of another browser to avoid security issues." I can't find this page anymore, and I might have dreamed it but the message is good either way.
Also if you want Firefox to get off of your lawn and stop changing so often you can try the ESR release which has feature releases far less often while still receiving security fixes.
> per recommendations by NIST, issuance of SHA-1 certificates halted for the web last January.
> In early 2017, Firefox will show an overridable “Untrusted Connection” error whenever a SHA-1 certificate is encountered.
Allowing users to click past security warnings is a really bad idea. How is a user supposed to know the difference between untrusted because of SHA-1 deprecation and untrusted because of a MITM?
It's not "basically no different" from an HTTP connection, it's strictly better than an HTTP connection, but not as good as a cert made with a more modern hash. (For that matter the same argument applies to self-signed certificates: you're still keeping a third party from snooping on the phishing attempt the MITM is giving you, which is itself a Good Thing.)
Web browsers cannot reliably distinguish between a configuration mistake and an attack.
For this reason, I think hard HPKP fails are a good thing. For those who opt-in to HPKP, this is a risk one takes in exchange for greater control over certificate validation.
* DH short exchange keys
* NTLM1 passwordsForgetting this leads to wonderful issues like the eight year old dupe certificate bug: https://bugzilla.mozilla.org/show_bug.cgi?id=435013
When people visit TLS URLs, they're asking the browser to establish a TLS connection. When attackers make that impossible, it's the job of the browser to refuse, on the user's behalf, to downgrade to an insecure connection.
It should be the browser's job to inform the user if it can't meet Mozilla's definition of security, but if accessing the information is more important at the time, it needs to get out of the way with an override and honor the intention of retrieving the information.
How many of them were a result of a pretty blatant configuration error? Things like self signed certs on personal/toy sites, T+1d expiration, subdomains using the main domain's cert (or vice versa), bad local clock, things like that that?
How many of them were ambiguous?
How many of them were unmistakably fishy?
If your breakdown is anything like mine, it'll be 9/1/0.
I speak of intent because the original person I replied to suggested that security warnings should not be dismissable. I vehemently disagree, because it is my decision to make whether accessing the information I clicked on is more or less important than the risks for the particular class of cert problem that presented itself.
Hide it behind an about:config variable or explicit cert trusting or something else, I don't care. That is still superior to telling me that I can't access something for my own protection.
In fact: apart from the sheer ugliness and cryptographic ass-backwardness of the protocol itself, this is my biggest problem with DNSSEC: it takes the exact same set of failure modes and migrates them to the DNS, where there is no error recovery possible. When DNSSEC configurations break, sites simply vanish from the Internet.
Chrome's BADIDEA is a good middle ground. Advanced users have a workaround. Average users generally don't.
There are of course plenty of SHA-1-using sites that aren't being MITMed, but there are also plenty of sites with invalid certificates that aren't being MITMed, either (or sites that are being MITMed in benign ways), and the browser doesn't distinguish between those and real MITMs.
The whole reason SHA-1 is being deprecated is because it's judged no longer strong enough to protect against MITM.
So I'd say it's intentional and desirable to treat SHA-1 like MITM, rather than to try to get the user to distinguish. User's don't have the capacity to distinguish between, and shoudln't have to, any category of "someone may be viewing and/or altering the content in this connection." They are moving to judging SHA-1 such a category.
Warning: The above sentence may not be right in 5-10 years so they are starting to shut it down now.
I personally find the schedule rather aggressive. Stop issuing certs this year, block it next year. What's the average cert lifetime? 1-2-3 years? This is gonna give some warnings.
Fortunately it's only becoming possible for attackers to create pairs of messages that have the same SHA1 hash; an attacker still can't create a collision between a message of their choosing and an arbitrary SHA1 hash, and that type of attack is probably a long way off. But that's not much safety margin!
https://github.com/cgwalters/git-evtag
https://github.com/nodejs/node/issues/7579
I personally think it's overkill
I don't describe it in that post unfortunately, as I still consider the git tree "rehashing" support to be alpha-level, but I'll look into git-evtag.
Rewriting to e.g. SHA-3 would therefore break a lot of references all over the place. Some can be rewritten automatically, some can't (e.g. commit IDs manually entered into commit messages).
It is a "private PKI" but their (current) intermediate and root certificates do not expire for a long, long time. Hopefully they'll move to a SHA256 root in the near future.
Their intermediates and end-entity certificates should be updated, but still, the attacks PKIs are concerned about on SHA1 (a preimage attack) can only happen during issuance.
However, if a second preimage attack on SHA1 were viable, all of the above would be invalid, and SHA1 would be permanently weakened for all digital signature uses.
I'm interested in crypto systems but still getting my feet wet, so a simplified answer would be really appreciated! Also, pointers to any articles or papers would be great.
If you can create a hash collision between two pieces of content and then get someone to sign one of the pieces of content, then effectively you've gotten them to sign the other piece of content too without them knowing it. This happened a few years ago when SSL certificates still allowed MD5: http://www.zdnet.com/article/ssl-broken-hackers-create-rogue...
It's common to sign hashes instead of the data, reasons are explained here: http://crypto.stackexchange.com/questions/12768/why-hash-the...
What I'm imagining: CA takes the hash of the certificate, encrypts that with its private key, and appends it to the cert. Client's browser then takes hash of locally stored certificate, and uses the CA's public key to check that the MAC attached to the incoming cert is valid.
I'm guessing SSL uses RSA-PSS[1] or something similar. Guess I'll have to do some reading when I find the time.
[1]: http://www.onefs.com/emc-plus/rsa-labs/historical/raising-st...
The relying party can then take HashAlgo(tbsCertificate) and see if the CA signed that value.
Make sure you do not confuse encryption with signing. The hash is not private, so you do not need to hide its contents. I'm not sure if you can call it a MAC, because there is no key involved. It provides integrity guarantees, but the hash itself does not provide any authenticity guarantees; only the signed hash does.
Preventing the CA from taking any new business ascribes accountability to the CA.
Usually you'll have enough lead time to configure your servers to send the other certificate, though. All you need to do is buy it in advance and have it ready to deploy.
And yeah, with HSTS you can definitely pin multiple intermediate roots.
Having a secondary cert ready to be swapped out with an Ansible playbook (or whatever your tooling of choice is) and ensuring both intermediate roots are pinned seems to be the best way to handle this then. Good to know!
"We sell certificates, but they won't work in Firefox, and maybe Chrome or IE if Google and Microsoft follow suit". Doesn't exactly sound like a vendor I'd purchase anything from.
In early 2017, Firefox will show an overridable “Untrusted Connection” error whenever a SHA-1 certificate is encountered that chains up to a root certificate included in Mozilla’s CA Certificate Program. SHA-1 certificates that chain up to a manually-imported root certificate, as specified by the user, will continue to be supported by default; this will continue allowing certain enterprise root use cases, though we strongly encourage everyone to migrate away from SHA-1 as quickly as possible.
This means that self-signed certificates, approved as an exception in browser, will continue to work because they are do not chain up to a root certificate included in Mozilla’s CA Certificate Program? I.e. if user has confirmed an exception for self-signed certificate, it is not impacted by this change in Mozilla?
However if you add your own CA then yes, I believe it will continue to work for the near future. (You should be moving away anyways though ;) )
A value of 1 means "entirely forbidden", a value of 3 means "forbidden for public roots".
I can't speak for the behavior when using any other value.
Unless BitTorrent relies on digital signatures somewhere, that's probably the worst of it.
[banking industry gasps]
https://www.ietf.org/mail-archive/web/tls/current/msg21278.h...