Russell Coker recently reviewed the Yubikey. The article mentions me, so I figured I’d correct a minor thing and respond to one of the comments.
yubikey-server-c is my reimplementation of the
Yubikey authentication protocol. Yubico provides two implementations,
one in PHP and one in Java, neither which I’m particuarly interesting
on building my system security on. Any bugs, misfeatures, etc in the C
implementation are mine and mine alone.
Barak A. Pearlmutter, one of the commenters on Russell’s blog writes:
i don’t understand. isn’t this thing vulnerable to eavesdropping and replaying? even if it has a counter which changes etc, the things it is talking to (web sites) can’t know that some generated string is being reused. and it doesn’t even have a clock, so these things can be old.
The way the Yubikey works is you have a central authentication server. This has a secret shared with the key. Setting this secret is the primary function of the personalisation tool. When you press the button, the key takes its internal state (various counters, uid field, etc) and encrypts this using AES-128. This is then sent to the application you are trying to access, be it Wordpress, SSH or something else. Said application then contacts the authentication server which decrypts the ticket, checks the values of the counters to make sure it’s not a replay and responds with OK, bad ticket, replay and various other status codes. Based on this, the application grants or denies access.
There are really two places you could attack this: in the communication between the web browser and application or between application and authentication server. Both of those can be secured using SSL.
There is no way to use a single yubikey in multiple authentication realms without extra software. To do this, you would have a OpenID provider that uses the Yubikey for authentication, or you could have a Kerberos server with cross-realm trust.
As for the PAM modules and other tools so far not being packaged, yes, I know, I might fix it, but the current setup has the bits I use, as I use RADIUS authentication to get services to support both Yubikey and passwords.