SlashID and OpenID security
Monday, December 10th, 2007Somehow discussion about SlashID and OpenID security always ends up in these abstract debates around “wouldn’t you trust Verisign” and “can a breach on the Idnetity Provider side affect your account” etc. That’s not actually a discussion about security.
Security is about analyzing specific threats, risks and attacks. It is about accepting or mitigating those risks based on the value of assets and cost of their protection. These are objective things we can reason and have a constructive discussion about.
So here is a table that summarizes the differences between OpenID and SlashID based on specific threats. To indicate how probable (or “difficult”) a particular attack is I just used an (over-)simplified scale, explained below.
| Threat | OpenID | SlashID JavaScript |
SlashID Browser Plugin |
SlashID Decentralized |
| Identity Provider impersonates User | 1 | 3 | 5 | 6 |
| Identity Provider accesses User’s personal data | 1 | 3 | 5 | 6 |
In the table above, “Identity Provider” does what it does because it’s hacked into, is under court order, has a malicious employee, or just for the fun of it.
My simplified difficulty scale is:
- The attacker already has the data (No-op)
- Easy (achievable by simple attacks on the network layer) and untraceable
- Easy (achievable by simple attacks on the network layer), but with a risk of being caught
- Equivalent to breaking weak key (<40 bits)
- Equivalent to breaking medium key (up to 56 bits)
- Equivalent to breaking any stronger key
With OpenID, the user authenticates to the OpenID Provider. After a successful login, the OpenID Provider will issue an assertion saying that the authentication was successful. Since nothing prevents the provider from issuing an assertion without the authentication actually taking place, we can say that he can impersonate the user anytime. Therefore, the difficulty is “1″.
SlashID/JavaScript is the current solution we have. Instead of sending your password to SlashID, we use JavaScript to decrypt your shared secrets, which are then sent to the website. Since you are getting JavaScript from our website, we could inject a Trojan code that will send us back your password without you noticing. But, if somebody inspects the JavaScript code or the network traffic, this will be detected. Therefore, the difficulty is “3″.
SlashID/Browser Plugin is the same service, but with a browser plugin (which we plan to create and release as Open Source). This will remove the need to take any JavaScript from our website. Since the code will be open and maintained by the Open Source community it will be impossible for us to inject any Trojan lines without anyone noticing. Therefore, we would need to crack your password directly to get access to your encrypted data. However, your password is enforced to be 40 bits strong, with 7 more bits added by using 128 hash iterations when turning your password into encryption key. Therefore, the difficulty is “5″.
And the strongest configuration, SlashID/Decentralized will enable key splitting between different unaffiliated services. No single organization will be able to even attempt to crack your password, so the attack becomes nearly impossible.
The upgrade from one of these modes to the next does not require changes on the Relying Party (the website) side.
That’s it! Now, how acceptable these risks are (in each situation) is really up to the Relying Parties, because, well, they rely on these things. Their decision will depend on the value of their assets and their “risk appetite”. We (SlashID) cannot affect their decisions, but we can offer our Identity Management service, as well as an upgrade path towards more secure solutions.
(Of course, in reality, as soon as you get to levels “5″ or “6″ on the difficulty scale, the attacker will switch to other, often non-technical means. For more details on how to reason about these things see Bruce Schneier’s work on Attack Trees).