The current concoction involve 3 steps:
(1) Upon connection, the server provide a random token to the client
(2) The client sign the token with its private key and pass it back to
the server
(3) The server ask a directory service for the location of the client
and ask that node to validate the token signature.
And yes, each step can be compromised one way or another: the random
token could not be that random. The signature could turn out to be
quite predictable. The directory service could be compromised. The
callback could be highjacked. Etc...
I'm open to concrete and practical suggestions beside pointers to Mr
Schneier's blog :)