client certs can get generated hassle-free in the browser without user interaction:
http://stackoverflow.com/questions/9197484/generating-client-side-certificates-in-browser-and-signing-on-server
implementing this into an authenticator seems straight forward: generate client certs after first login and link it to a user's account. the next time that user visits the website the browser will automatically pick the right cert to authenticate itself. depending on the browser settings a confirmation dialog might pop up.
thinking even further the authenticator could also require the user to enter a password after manually logging out and accessing the site again. in that case i'm assuming that the user doesn't want other people using the same machine to be logged in automatically.
why do we still have to fill out login forms?
Unfortunately:
* The UX for installing a certificate on a Windows or Mac machine is atrocious; it's incomprehensible even to people who understand X.509, and might as well not exist for laypersons.
* The browser UX for matching certificates to sites is not much better; the mechanism basically only works if you have a single client cert you use for every site.
* Getting certificates from a CA introduces yet another nearly incomprehensible UX element, and leaves your site to the mercy of the CAs you trust.
* Issuing your own certificates involves you building a hopefully- less- incomprehensible UX for getting certs into the hands of users, and also implicates a chicken/egg problem of figuring out when it's OK to issue a cert to whom.