I'm not sure if Authy is using the same protocol.
What really surprises me is that Twitter doesn't support any OTP solution; Twitter accounts getting hacked is a fairly common thing (@mat), and there's basically no solution to it now. Facebook doesn't use OTP but uses the information they have to do probably the best knowledge based authentication on the Internet (plus, shows IPs in use, and does geo-IP based fraud prevention, but Twitter doesn't really know anything secret about you. I've bugged Twitter people about this several times.
1. If you change phones you have to reconfigure all your accounts that are using Google Authenticator. With Authy it just works when you install the Authy app on the new phone.
2. Authy fixes time sync problems between your phone and UTC in the background so you do not have to worry.
3. And if you lose your phone with Google Authenticator there's no simple way to revoke access to all your accounts. With Authy there is.
4. Authy has a way to revoke tokens across all devices. If (like what happened to RSA) the private information were stolen from Authy they can invalidate all the tokens and securely reissue new ones.
The suggested default for HOTP/TOTP is SHA-1 with a 160 bit seed and that's what most systems seem to use.
AWS supports the same system in a less brain-dead way, treating the authentication as a separate feature per account profile, and letting you re-enroll a new token and delete the old one. I'm pretty sure this is a Google Account problem, not a Google Authenticator problem. (AWS IAM is actually a pretty awesome product, but not very well documented, and from what I've seen of AWS users, not being correctly used to even 5% of its potential by most users.)
It's obviously more secure to make changes to the authentication system harder than just "any single valid login from any device lets me reset authentication requirements for future logins", though. The real problem is being able to get a one-time authenticated login, use that session to add a new "always let me log in" credential, and leave everything else as-is. The legitimate owner then has no reason to be suspicious, and you can continue to subversively use the account. It's almost better when the legit owner is forced out of his account on a change like that, as he can then contact Google's excellent customer support (...) to resolve the issue.
Of course, Google exposes themselves to THAT with application specific passwords, which are neither application-specific nor otherwise limited, and can be created easily once you log in.
I realize that corporations with lots of employees to support see things differently, and centralized 2-factor proxy in that environment makes more sense.
The only problem I have with google authenticator is that it's barely maintained. Even obvious features like rearranging order of accounts, haven't been implemented. http://code.google.com/p/google-authenticator/issues/list?ca...
Although they could add some export functionality, that would be a problem, now that I think about it, because anyone with even brief access to your phone could export all the OATH seeds to their phone.
There is also a weird bug in google authenticator (on ios) where the edit button in the lower left doesn't work until you hit legal information button, then go back. Very weird.
But they don't actually check that you have the 2 factor device when you do this, so all you need to do is get logged in once and you're clear to lock the original user out, change auth credentials, etc.
It's totally fine for the "protect a personal gmail account" threat model, but as far as I can tell, no one does 2fa in a way as-secure as I'd want it for an enterprise/IT deployment.
Interesting. I have been using 2fa for a while now, and hadn't noticed this yet (guess I don't view that page often). It seems they rely on someone needing to know the password and the generated pin to get to that point (or the pre-generated backup codes -- which are also not invalidated with the new 2fa replacement).
> But they don't actually check that you have the 2 factor device when you do this, so all you need to do is get logged in once and you're clear to lock the original user out, change auth credentials, etc.
I don't see how this is different than it was before. If someone gets your password and a valid 2fa pin or pre-generated code (eg. they can log in), they could just change your password, turn off 2fa, etc. Your aren't getting in then either.
What I want is a system where only momentary access to all login credentials normally used for a login (password (saved in browser?) and 2fa device) is enough to log in once, potentially lock out the authorized user, but not to have permanent access.
With a "real" token, at least in most enterprise systems, a normal user can't remove the token from his account. So you'd be able to log in once, maybe reset the password, but couldn't change the token or remove the need for a token.
I'd be fine with a system where removing 2fa was a big procedure, same as the lost password recovery should be (i.e. more than just one email). Maybe just requiring a 72h wait (after emailing you and a trusted designee?) where anyone could complain to stop it and escalate to humans?
There should be a "low trust path" way to lock someone out of an account (with minimal authentication), so if you lose your token it can be locked, which sucks, but being unable to check your email for 12-72h in the interim might be an acceptable compromise. All of this should be configured when you open the account, or as you rely more on the account, in advance of an actual breach.
I guess what I really want is an Internet login system which assigns different levels of trust and trust requirement to different actions, not the current basically binary system. Something more similar to credit (less checking for small amounts, repeated transactions, etc. than for a new mortgage).
Amazon sort of does this (they have at least 4 levels; un logged in, sort of logged in on a machine without 1-click, logged in enough to make purchases to existing addresses, logged in in last 5 minutes or so to edit details). However, Amazon is light years ahead of everyone on a lot of things related to ecommerce, and it's not trivial to figure out how this should work.
re: 1 - By putting your MFA codes in a centralized (and synchronizable) location, you're losing much of the effectiveness of the second factor. So "when you install the Authy app on the new phone" now there are two (or more) devices with access to the second factor. So when someone hacks your Authy account, all of your MFA tokens are compromised.
re: 2 - time sync problems are supposed to happen server-side, per the spec. As an implementor it's nice to not have to solve that problem, but you should be using a library for it regardless. Also, please find me a phone (at least one with GPS) that doesn't keep remarkably accurate time. I'd be more worried about server clock drift.
re: 4 - Any company dealing with MFA secret keys should have a way to revoke them. It's conceptually as easy as nulling out a cell in a database. By putting everything with this service provider, you're increasing the amount of damage a single breach can do.
There are a lot of things wrong with Google's Authenticator app, but the fact that it doesn't sync with a remote service is a HUGE benefit to security. I like the idea of a "revoke everything from this device" button, but I don't like having all my security eggs in one basket.
I strongly agree.