Yeah, you're right about the fishing problem.
Even worse, if you use YubiKey everywhere (like every forum starts accepting it), some untrustworthy servers could "swallow" the OTP and never send it for verification (just tell you that your login succeeded) and then rush over to your bank and try logging in there. They'd have to do this before you ever used your OTP in a valid place again, but if you've already logged in to your email (or whatever else) for the day, they may actually have 24 hours or more to make use of the OTP.
Thus, you would still need to use separate passwords everywhere (because if they get a good password along with the OTP, you're in trouble), or separate YKs, which kinda moots the point of the YK convenience.
I'm currently only using OTPs with hosts that I trust (currently FastMail and my own servers). But that's mostly because no one else supports YK. On PayPal, I had to get a separate VIP YubiKey. For my bank, they sent me one of those credit card OTP generators with a little calculator screen and a battery inside, which is a pain (type in manually), but maybe that's more secure, because I think it's actually running a clock internally.
Am I right that there's no way to use the new FIDO U2F system with terminal-based SSH logins?
Sadly, if so few people adopted YK OTP, given how simple it was, I don't have a good feeling about FIDO U2F adoption. I mean, it's great news about Google.... maybe they'll send everyone a FIDO key for free or something!
FINALLY, here's an idea that I'll run by you for secure use of OTPs:
The YubiCo server knows your secret key, right? My understanding is that it's symmetric AES, and that the server verifies the OTP by encrypting the sequence number with its copy of the same key.
So, the YubiCo server could generate a verification string using the next sequence number and the shared AES key. This doesn't need to be as long as the OTP. It could even be a single letter of the alphabet. The YC server could send this back to the requesting server, which could display it through the client to the user.
At that point, you could press your YK button again and verify that what the server sent back matches what comes out of your YK. The YK could know that if it's pressed twice in 10 seconds, the second press should display the expected verification string that's coming back from the server (instead of the next OTP) and update the internal counter.
The server would mark BOTH counters as stale.
And this could be a "normal" phase of logging in with YK. Websites could show you a second form with a spot for the server's response and a field in focus ready for you to press your YK again and visually compare. And the YK wouldn't output the ENTER character for the second string, to give you time to study the form.
Of course, for hosts you trust, this could be optional (what comes back from the server could simply be ignored and not displayed).
And if a website that you DON'T TRUST shows you the wrong response coming back from the server (or doesn't show you one, or whatever), then you know to log into a trusted host with your YK immediately to push the sequence number forward.
This does complicate things a bit and put a slight burden on the user to visually verify that strings match, but it keeps everything simple an "it's still just a dumb USB keyboard" and would work for SSH logins and such. And visual verification could be as simple as checking that two letters match.
I know this will never be implemented (it would require a complete re-working of the whole YK OTP infrastructure, including issuing new YKs). But I think it's airtight.
|