Zas tak uplne debilni napad to neni. Umim si predstavit, ze "predgenerovani" by melo svuj vyznam. Dejme tomu, ze si zarizeni predgeneruje 10000 hesel a zapomene, jak je vygenerovalo. Pri prihlasovani pak bude zarizeni vyzadovat pin (4 cisla), ktere mu zadate a ono pak na zalklade jednoho z ulozenych hesel + zadaneho pinu vyrobi heslo. Zaroven to jedno pouzite heslo smaze z databaze.
K cemu to je? Pin zna jen DS, na zarizeni ulozene neni. Predstavte si, ze nekdo odposlechne vasich 20 jednorazovych hesel a nasledne vam ukradne zarizeni. Kdyby se hesla jen generovala, muze zpetne zjistit stara hesla a pin celkem snadno dopocitat (vzhledem jeho kratkosti).
Existuje tu i moznost, kdyby se heslo generovalo prostym aritmetickym souctem pin+(heslo z databaze), muze si DS celkem snadno dopocitat, ze vam nekdo ukradl zarizeni, zadal spatny pin a ted se s nim pokousi prihlasit. (heslo se bude lisit +- 9999) a muze ucet po nekolika takovych pokusech zablokovat.
"Reálně by k ní mohlo dojít například tehdy, pokud by se někdo systematicky snažil uhádnout cizí jednorázové heslo, a tak se vloupat do jeho datové schránky."
V tomto případě ke ztrátě synchronizace dojít nemůže, protože na straně serveru ke skutečnému posunu v sekvenci OTP dojde až ve chvíli uspěšné autentizace, jinak zůstává na původním místě.
Na pozadí generování OTP je počítadlo, které je u klienta vždy v předstihu před serverem (typicky o 1) a server si svoje posunuje až při úspěšné autentizaci. Pokud si klient vygeneruje OTP víc, server zkouší další hodnoty počítadla, až do nějakého limitu (u DS tuším 50 dalších hodnot) a počítadlo v případě úspěchu nastaví na odpovídající hodnotu.
Ke ztrátě synchronizace tak může dojít jen na straně klienta vygenerováním více než 50ti hesel, např. když se tokenu zmocní neposedné dítě a zkouší co se stane, když bude mačkat čudlík :)