Dovrebbe essere la classica OTP, per cui in linea di principio potresti usare pure il Google authenticator: partendo da un QR code o da una stringa che fa da seed, il token virtuale sa che numero generare e ogni quanto… o mi son perso qualcosa?