Cytat(kowi87 @ 6.06.2015, 12:51:25 )

Zobaczymy co z tego wyjdzie, bowiem całość opiera się na timestampie, a nie wiem jak zachowa się system w przypadku znacznej różnicy czasu pomiędzy klientem, a serwerem. Jeśli ktoś posiada wiedzę na ten temat proszę o podzielenie się nią.
Algorytm TOTP zakłada generowanie tokena na podstawie tzw. czasu uniksowego zatem problem różnych stref czasowych jest rozwiązany na starcie.
Przy pierwszym połączeniu - dodawaniu nowego klienta, możesz różnicę między czasem klienta a czasem rzeczywistym ustalić i uwzględniać ją przy dalszej weryfikacji kodów.
Bardzo często czas na komputerach jest synchronizowany przez NTP z serwerami czasu, więc w takich przypadkach różnica między czasem klienta a rzeczywistym nie będzie zwykle miała znaczenia. W przypadku braku synchronizacji błąd raczej nie przekroczy kilku-kilkudziesięciu minut. Zatem czas klienta możesz ustalić na podstawie przesłanych przez niego kodów.
Możesz też przy pierwszym połączeniu danego klienta po prostu wysłać czas do serwera i na tej podstawie obliczyć różnicę czasu.
Podczas kolejnych autoryzacji dobrze jest na podstawie przesyłanych kodów utrzymywać synchronizację czasu. Czyli jeśli klient kilka razy prześle kod np. o jeden do przodu to znaczy, że jego zegar zaczyna śpieszyć i należy do zapamiętanej różnicy czasu dodać jedną jednostkę czasu.
Polecam poczytanie
RFC 6238 w
sekcji 6 jest opisany problem utrzymywania synchronizacji czasu.
Cytat(darek334 @ 6.06.2015, 16:53:09 )

Jeśli Twój problem polega tylko na wygenerowaniu jakiegoś kodu, to jeśli dobrze zrozumiałem, to ja ze swojej strony ponieważ pisałem już podobny kod do autoryzacji formularzy czyli po to aby nie można było użyć tego samego formularza dwa razy co moim zdaniem jest o wiele trudniejszym zadaniem niż to o czym piszesz
Masz inną skalę trudności i wygląda na to, że źle zrozumiałeś o co chodzi w tym temacie.
W przypadku chęci zabezpieczenia formularza przed wielokrotnym wysłaniem wystarczy
wygenerowanie przez serwer dowolnego kodu, byle dla danego klienta był inny za każdym razem. Może to być bieżący czas, kolejna liczba, kolejne słowo z Pana Tadeusza. Cokolwiek wygenerujesz zapisujesz w zmiennej sesji i porównujesz z wartością przysłaną wraz z innymi danymi formularza. Jeśli zgadza się to akceptujesz formularz, jeśli nie to nie.
Wyobraź sobie, że do zalogowania do banku potrzebujesz dodatkowo kodu generowanego przez sprzętowy lub programowy (np. zainstalowany na telefonie) token. To jest przypadek z tego tematu i tutaj chodzi o
wygenerowanie przez obie strony niezależnie od siebie identycznego kodu, którego dodatkowo nikt postronny nie odgadnie. W takich przypadkach stosowane są algorytmy TOTP, HOTP (HMAC-Based One-Time Password Algorithm) lub analogiczne.
Jak interesuje cię temat losowości to poczytaj sobie o tym czy generowane liczby losowe są rzeczywiście losowe. Inna ciekawostka to hasło "
nsa intel random".