First of all, please excuse my ignorance about this topic. (related)
What exactly is needed to implement a process like this:
To login, the client enters its client ID. Also, a random (?) code is
displayed to the visitor:
251 221 555.
The client picks up his smart card reader, puts his smart card into it and clicks on the "Login" button, enters the code 251 221 555
I guess one needs:
What I wonder is how to authenticate the returned token in a website, and also how to return a token in the smart card reader? What are the exact (or simplest) steps to implement a process like the one above?
The easiest implementation is to have a secret key stored in the smartcard, and trigger an encryption or MAC calculation over the input number. For this to work PIN entry should be before input number.
The commands would be
For more details you should have a detailed look into ISO 7816 part 4 (verify and internal auth.) and 7816 part 8 (perform security op.). This assumes a so-called native card (as opposed to a JavaCard).