Así es, supongamos que tu le das a tu usuario A una tarjeta con esta matriz:
Código:
A B C D
1 343 123 546 435
2 131 664 923 123
Esa tarjeta tiene un "serial" supongamos 1234, tu almacenas en sistema que el usuario A su tarjeta es la 1234, al hacer el login le pides de challenge un par aleatorio, por ejemplo B1, y el usuario te debe de dar 123, y tu comparas con tu BDD con la tarjeta con serial 1234, si B1 es efectivamente 123, y si lo es, permites el acceso.