I long for the future where I can safely assume my passwords are stolen
medium.com
medium.com
Then, the only vulnerability is your local machine. If someone hacks a website, the only password related information they can access is your public key, but you tell that to everyone anyway. They won't be able to use that to log onto any other website, even though you use the same password for all of them.
You would still probably want to use multiple public keys, and two-factor authentication (to eliminate the single-point-of-failure risk), but the technology already exists for us to be doing this. It just needs that extra layer that will make using such a system easy for grandma, and then of course for websites to start accepting public key authentication instead of password authentication.
http://www.w3.org/TR/html-markup/keygen.html
https://developer.mozilla.org/en-US/docs/HTML/Element/keygen
http://www.w3.org/2005/Incubator/webid/spec/#authentication-...
edit: I should have added it's equivalent to requiring a password of a certain length.
No, because a public key can't be reversed into a private key. A hashed and salted version of a short-enough password can be reversed (sometimes trivially).
Now that I think about it, you also need to make sure that your hashing mechanism is preimage resistant, which is an additional place to make a mistake, so public keys do have an advantage there.
Whereas with public key authentication you don't send the private key, you 'prove' that you have it by performing a challenge typically.
I also gave a talk at PyCon covering the why, what, and how of Persona, if you prefer that medium: http://pyvideo.org/video/1764
(For what it's worth, the docs need another round of polish but they should get you started. If you have any questions, please feel free to email me directly.)
It also does not solve many problems OpenID had. For example, multiple identities ("which provider did I use here?") got even worse and migration is still completely manual (go everywhere, tell them you have new email, good luck if you already don't have the old one) and, rephrasing the OP title, "I long for the future where I can safely assume my email provider is compromised" is impossible with Persona, too. The point is, I believe, the Persona already has known design-level problems and, I guess, will eventually go away, replaced by something else.
And I don't really understand why we need such steps and finally get to the point we are the source and are in possession of our own identities, and others are just trusted third parties that are asserting our descriptions of ourselves. Standardize an secure key escrow (sync) protocol, think about UI/UX issues (present-day browsers HTTPS certificate UI is plain ugly), have some advertisement and educating articles and that's about it.
(Added after some thinking) Well, maybe I'm oversimplifying it, though, and things are harder than I believe they are... But the only problem I ever had with GPG (which I used as identity system) is key loss and temporary unavailability. And this could be really mitigated by key escrow (trading a bit of security for usability).
It makes identity and account problems just as problematic.
I actually like the auditing idea; however I think he goes a bit overboard about having GeoIP for every single login because I know many people log in from tons of different locations all the time.
Maybe a more simpler alternative would work; but it needs to be well thought out for sure.
Computer security usually starts out from the assumption that physical access to the machine == completely vulnerable, whether you were logged in or not.
Public key crypto does seem to be a better solution - I've heard it proposed a number of times among security people now. And it has some nice features even when you assume that user computers are still vulnerable to attack.
• It seems to be a harder problem to hack all the users of a service than it is to hack the service itself
• If you abstract the public key stuff into the browser nothing would change in that regard. You can use different passwords packaged with your key. Personally I don't think it's worth the bother if you assume that people tend to use the same passwords but... whatever.
• You could do all the crypto on a token and use interface controllers to reduce your attack surface there.
The difficult bit, as far as I can tell at the moment, is that it requires people to know that there's a file they need to keep safe if they want to hang onto their accounts. I really think you'd need a physical token to get it down to the level that many people are capable of understanding, and then you'd better pray they don't lose it....
If we're gonna trend that way, we add complexity - and that's not going to get people to adopt.
Hacked computer will mean, the attacker will be able to sign authorization requests (if they know the password for the token) just while they have access to your computer. Fix the security issues and you're safe again.
Here's a simpler solution: integrate password managers with modern browsers out of the box. Each site I log on to gets a hash of my password with their domain. But I need to install an extension to get this. Just make it more accessible. It doesn't matter if you use sha-1 or md5; it'll get everyone to use high-entropy passwords, and to not reuse passwords across sites. It'll be strictly better (by orders of magnitude) than the current situation.
Not quite.
If a site gets the damn hashing wrong, a successful attack means that your password is now open on the streets.
If a site gets asymmetric crypto wrong, a successful attack means that particular account/site is now compromised, but your pk is still completely private, because you never send it over the network in the first place, bozo site or not. (now if the client is a bozo and allows the pk to be sent across the network, then yes ..)
Now, they should also hash the hash, so that should it be know, your account on that site and that site alone cannot be compromised. But your master password is safe.
One of the problems with a scheme such as this is sites with multiple subdomains that use the same account per user. I'm thinking of Stack Exchange and Slashdot, for example. So simply using the hostname to generate a hash won't quite work.
But either this or the PKI method would be vastly preferable to what exists today.
For myself: I've been generating unique, per-site passwords for the past decade or more, and saving those in an encrypted database. Multiple copies of that spread around to prevent loss of access in the event of any single system going down. But otherwise: secure.
Sure you can get some sites to use it, and sure you can come up with some way to secure a few savvy people. But it wouldn't elevate ambient security if you expect every site on the internet to change.
Instead my proposal would start securing 80% of the internet by fixing three codebases.
On the other hand if your password is strong, then it is very unlikely that an attacker is able to recover it even from a plain unsalted MD5 hash. The only thing gained is protection of reused not-to-weak passwords in the case a system storing plain text passwords gets compromised.
https://en.wikipedia.org/wiki/Secure_Remote_Password_protoco...
It's more of a secondary measure for forensics and incident response purposes when the intrusion resistance measures fail. If your credentials can be hacked for any reason(your key AND your password are compromised, for example), when those credentials are used you have a useful audit trail of when it happened and can possibly even get some early notification. If I hack your laptop and use your valid credentials to log in to a site, even if you log in just to disable the audit logging, there will at least be one entry of that happening somewhere. If the audit collection system supports some early notification, you can potentially change your credentials or notify the service before the hacker does something bad.
So, you have one laptop and one mobile phone. How do you set up your "password" on both? Assume you're not "technical".
Next: your car (or apartment, etc.) is robbed. You lose both devices. OR: water damage. Whatever. You're away from home with one device, and its battery dies, wifi fails, whatever.
No worries, your brother/friend/colleague lends you a device. But... you're locked out of EVERYTHING on that device. All of your accounts require your public key, and you obviously don't have that at an internet cafe, or even at your brother's house, on a computer you're comfortable is safe.
Then ascii-armor that file and print it out and/or store it on a CD, keep that in a (or possibly multiple) safe location(s). You could even give your brother the key and trust him not to try to crack the passphrase.
That doesn't help when we need a general solution with usability that comes close to remembering a password.
I know, the actual usernames/passwords aren't part of the audit trail.
Or... the passwords aren't. The usernames probably are, because otherwise how would this login report be linked to the right user?
So then think about what you could do with that data, if you cracked myaudithooks.com. For the users/services using it, you'd have a comprehensive list (likely with usenames) of all of the sites these users access regularly, probably mostly with the same weak/reused passwords.
Alternative: don't crack it, just ruin it. How is myaudithooks.com going to really lock down the API calls so that only mydogfriends.com can report login events to mydogfriends.com... Otherwise you could have script kiddies just throwing in lots of junk data for fun, or a malicious attempt to discredit a bank, competitor, etc. by convincing many of their users (via fake audit reports) that their accounts are cracked.
I do think the general idea is good, though -- just not centralized.
Login auditing is good. I always appreciate the extra bit of info when I SSH into a server and see "Last login: (timestamp) from (IP.host.blah)".
It's also hardly ever used.
I suspect some of the problem is that the timestamp bit would make sense to most users, but the source is more likely to be confusing for the general public. A raw IP address certainly won't be useful, and location is very scary if they don't know it's not exact and sometimes wrong ("it said last login from the next town over... where my ex lives!!!"), and that means support costs for false positives.
myaudithooks.com should not be centralized -- I 100% agree. You should just be able to put any old URL there. If I want my audit entries to go to my box, I absolutely should be able to.
You're right, some attacker could post bogus information if the know the url... however, the urls should be unique enough that they can't just be randomly "guessed" by an attacker. Another alternative is to provide a callback url, the way stripe does, so the service can "authenticate" the audit log entry before I consider it valid. For example, if I receive an audit log entry with id "abcd1234", I can hit http://mydogfriends.com/audit/abcd1234 to make sure it responds appropriately.
The idea isn't fully fleshed out yet, but I think it wouldn't take a lot of work to make it happen.
Where would all the users who find websites by typing domain names into Google ask mydogfriends.com to send their audit entries?
People running websites are also not necessarily technical -- often there was a techie involved during set up, but then it's just "apply the wordpress updates when it prompts you" and that's that. Support for audit trails needs to be built-in by default if it'll be widespread.
Interesting stuff, anyway. It's worthwhile to keep fleshing out the ideas and possible pathways.
I think I posted this elsewhere or maybe here, but I got around the password remembering problem by keeping one master file of all passwords/usernames/emails etc... that I keep GPG encrypted ( specifically http://www.gpg4win.org/about.html ).
All passwords in the master file are randomly generated. That is, of course, the account I'm creating is a throwaway at Paul's Peanut Brittle shop. Interestingly, paulspeanutbrittle.com isn't taken.
Wouldn't an attacker who's gained access to a secondary account through a password derived from a db dump change the audit URL?
Beside that, knowing an account is compromised is better than nothing but often not particularly useful - see all the horror stories by people who've had their gmail account compromised. They tend to find out very quickly the account has been taken over, recovery is still difficult and the loss of data/time/neurons is often significant.
Gmail is a good counter-example - it does tell you of your last login but who keeps track of these? You log in from home, from work, from your iPhone, from your friend's wifi, etc.
And you needn't stop there. What if the auditing service is compromised? What if the convenience-inclined user is using the same password at myfancyaudit.com as they are at mydogfriends.com and at their bank? Maybe I'm missing something but it mostly seems like a way of shuffling trust around without significantly improving security.
... and since it relies on DNS, it's useless.
When you register for an account you write down on a piece of paper 4 words chosen at random by a computer (eg. "regain gauge chest Texas"). Then to log you provide (a) your email address, (b) your password, and (c) the passphrase printed on the paper.
This is bit of a pain for the user, but it would greatly strengthen the security of the website because it would not depend on the security of any other websites. For a to-do-list website I can see it's not worth it, but I cannot understand how some financial websites still think it is acceptable to use only email+password authentication. (I'm looking at you, Mint.com and Schwab.com).
PS: I just tried registering for a Mint.com account - it didn't let me use "password" as my password, but when I used "password1" it said, "You have a Good password". Wow.
Also, the piece of paper with 4 words will have 52 bits of entropy while a SecurID token with 6 digits has only has 20 bits of entropy. So I wonder whether SecurID would be easier for an attacker who has access to the password hash and salt to derive the original password...?
In any case, whether you use a piece of paper or SecurID the main point is that financial sites which only require email+password are being negligent in their duty to protect user data from unauthorised access.
A notification that someone has logged into your livingsocial|facebook|twitter|linkedin is only valuable if it compels you to immediately change all of your other passwords. Which might be a decent idea for a version 2 of this hypothetical software...automatically change all of my passwords whenever one of my accounts is compromised.
The sad thing is that people reuse their passwords so often. Just remembering two passwords, one for important stuff and one for social stuff, would go a long way toward making this a non-problem and taking a security burden off of a lot of startups.
If some malware gets to your phone or computer, sniffs the password and steals the keyfile it's over. There're no other options but to immediately revoke the key. Hardware security tokens are specifically meant to mitigate this issue.
Otherwise, there're many software implementations out there. Your browser should already have one (search for HTTPS client certificate authentication), although it's not universal due to some X.509 PKI architecture constraints.
2. That said, the number of sites for which we need really solid security is probably under 10. For me it's primary email, 3 for websites I own/hosting/etc., Paypal, bank, arguably Amazon, and not much else. And frankly I forget my bank password and have to keep resetting it (which is part of why my email needs to be secure).
And the fact that I have a number of websites is not exactly a secret.
The doc is a bit outdated but the prototypes work.
We need an open standard for this.
Simplistic? Yup. Perfect? Nope. Does the trick? Sure.
http://www.faqs.org/patents/app/20120110469
What do you guys think of it?
Logging adds value once an account is compromised, so is a contingency measure (minimising impact). Solving this problem requires mitigation (minimising probability) as well as contingency.
Many comments here suggest the use of PKI. PKI is part of a solution and, as with logging and audits, requires more.
PKI's biggest problem is that it doesn't scale. The question then becomes one of issuance. Self-issued certificates have no credibility so cannot be trusted. That problem is solved by using a certificate authority that can be trusted.
That leads to the next question, which is whom to appoint as a certificate authority (CA)? This thing [2] should scale, so my certificate must work world-wide, with any web site and, while we're at it, offline in meat space.
That makes canidates like my bank or a credit check agency bad choices, because they haven't the reach. Credit card companies like Visa, AMEX or Mastercard have better reach, but that only accounts for a tiny percentage of the world's population, because it excludes the poor.
The only viable choice then becomes the organisation that already deals in identity - government departments that issue passports, ID cards and driving licences.
Of course that's just national. The solution to that problem is to federate identities between governments. Awesome. First part of the problem solved [3].
The next part of the problem is anonymity, and it's various variations. This can be solved by using a privacy-enhancing credential - a problem that was solved by Stefan Brands at Credentica [4].
The tradgedy is that while these solutions exist, are mature and proven, there is just not enough incentive to make them a reality.
Some closing notes: Any good identity system must adhere to all the laws of identity (http://www.identityblog.com/?p=352/#lawsofiden_topic3). Technologies like OpenId, Persona and OAuth don't even come close. SAML and WS-Federation do a much better job of it, but both SOAP/XML-based. Which makes them unpalatable to many. There's an oppotunity in there somewhere...
[1] Logging has been done - just not at the scale Jens envisions. Many military and intelligence systems inform the user of previous acvitivy on login. The better ones use geolocation to tell the user where the most recent logins occured.
[2] "This thing" is really an identity meta system.
[3] This technology exists in the form of WS-Federation and, to a lesser extent, SAML (which relies on the browser, so doesn't work at the service level).
[4] Stefan Brands came up with U-Prove, which was open-sourced by Microsoft after they aquired the technology. IBM have also come up with a privacy-enhancing technology (PET) called idemix (identity mixer). An important attribute of any self-respecting PET is that it must be claims-based, so that it functions in a world of federated identities.
In the case of replacing passwords at a website, the issue of 'credibility' or 'trust' is irrelevant - you have no trust or credibility with a u/p, so why do you need that with a PK?
If I'm just replacing user/pass with a PK, why do I need a CA and all the infrastructure around that? The goal is to put something serverside that cannot be used against me elsewhere - a 'public' token that lets us communicate in secret.
The only concern is one of tampering, which would be a problem in either direction anyway.
What could possibly go wrong? There's a reason why it's unconstitutional in my country for the state to issue a single ID number to every citizen.
A protocol should let anyone be a CA, and it should be up to each party to choose what CAs it accepts. If some service wants to only allow government-issued IDs, that's fine, but there's no good reason to enforce that at the system level.
In fact, the article you linked puts it well:
But in many cultures, employers and employees would not feel comfortable using government identifiers to log in at work. A government identifier might be used to convey taxation information; it might even be required when a person is first offered employment. But the context of employment is sufficiently autonomous that it warrants its own identity, free from daily observation via a government-run technology. (...) So when it comes to digital identity, it is not only a matter of having identity providers run by different parties (including individuals themselves), but of having identity systems that offer different (and potentially contradictory) features.
Read up on it - the tech is really that good.
How is that? I see the process working like this:
* I sign up for an email account by sending a request with a username and a public key. No need to "trust" the key, because this is an identity creation process.
* My bank issues a smartcard when I create my account, which can be used to log in to their website.
Sure, there are problems -- key revocation and dealing with lost secret keys are probably the biggest. Those problems are shared by passwords. The point is to solve the more glaring problems we have with passwords, like the fact that you need to rely on many different websites to manage passwords securely, or the fact that humans are terrible at picking passwords.
"The tradgedy is that while these solutions exist, are mature and proven, there is just not enough incentive to make them a reality."
Bingo. That's the real issue, and it always has been.