Generarea/compararea codurilor de securitate și ceasuri atomice

Am construit un proces de autentificare cu două factori pentru aplicația noastră web. Am construit o mică aplicație independentă care generează un cod de securitate din 8 cifre în fiecare minut. Când un utilizator se conectează, acestea sunt solicitate pentru codul de securitate. Când este trimisă aplicația web, acesta generează codul de securitate pe capătul său și îl compară cu codul de securitate introdus. Dacă cele două sunt egale atunci utilizatorul este permis în aplicație. Acesta este folosit ca un simbol RSA.

Cu toate acestea, folosesc servere de ceas atomic pentru a vă asigura că generarea de coduri de securitate este aceeași atât pentru aplicația USB, cât și pentru aplicația web, deoarece sincronizarea cu fusul orar și ceasul reprezintă o problemă. Aceasta este o durere nu numai pentru că serverele pot fi uneori nesigure, dar trebuie să adăugăm reguli de firewall pentru a ne permite să atingem ceasurile atomice specifice. Există o modalitate sigură de a face acest lucru fără a utiliza un ceas atomic la distanță?

0

3 răspunsuri

Nu aveți nevoie de ceas precis, ci mai degrabă aceeași valoare. Așadar, expuneți un fel de serviciu "curent de timp" din aceeași aplicație web (adică HTTP de bază primiți "/ currenttime" cu răspuns JSON) și căutați-l din aplicația USP. În acest caz, va trebui să sincronizați timpul dintre serverele care oferă aplicația (dacă aveți mai multe).

0
adăugat

Dacă aplicația dvs. nu trebuie să fie complet sigură pentru RSA, puteți modifica aplicația web pentru a accepta ultimele 2 sau 3 coduri de securitate. În acest fel, nu sunteți atât de dependent de consistența timpului.

Dacă trebuie să aveți sincronizare în timp, puteți rula propriul server de timp care poate fi accesat de aplicația web și de aplicația USB. Timpul trebuie să fie coerent, nu neapărat corect.

0
adăugat

Bazându-se pe timpul extern este o idee proastă, pentru că dacă sursa de timp poate fi manipulată (de exemplu, un atac în mijloc, DNS malware în amonte etc.), atunci se poate interoga de la distanță dispozitivul să colecteze viitor valori.

Ar trebui să evaluați cu adevărat cerințele de securitate înainte de a vă rula cripta proprie. Este foarte ușor să fii victimă a unei serii de greșeli, cum ar fi utilizarea accidentală a unui PRG care nu este sigur din punct de vedere criptografic, atacurile de sincronizare a canalelor laterale sau altele similare.

Dacă trebuie să faceți acest lucru pentru producție, asigurați-vă că vă deschideți implementarea pentru a putea fi revizuită.

0
adăugat