Puncte:0

Se caută un algoritm de criptare simetric optimizat pentru text cifrat scurt și care poate fi citit de om

drapel cn

În aplicația mea, utilizatorul se conectează atunci când este conectat la baza de date centrală, iar acreditările lor de conectare sunt autentificate față de acele date și stocate în cache (criptate). Apoi, atunci când utilizatorul este offline, acreditările sale sunt autentificate pe acel cache. Până acum, bine.

Dar uneori, utilizatorul TREBUIE să folosească aplicația când este offline ȘI memoria cache de date este coruptă, astfel încât să nu se poată conecta. Nu există nicio posibilitate de a accesa internetul, chiar și prin hotspot pentru telefonul mobil, dar este totuși esențial să fie capabil să ruleze aplicația și nu există timp să mergi undeva și să încerci să găsești o conexiune la internet.

Așa că am fost însărcinat să implementez o metodă de conectare offline, astfel încât utilizatorul să poată apela asistența tehnică de la un telefon fix de la unitate și să primească verbal un cod pe care îl poate introduce, iar software-ul îl va recunoaște și îl va trata ca pe o autentificare validă. Deoarece transferul se face prin voce umană, acest cod trebuie să fie rezonabil scurt și ușor de înțeles uman (de ex.nu un șir codificat în bază64 de 100 de caractere).

Codul trebuie să încorporeze cel puțin un ID de utilizator (întreg) și o dată de expirare (ar putea fi, de asemenea, doar un număr întreg, cum ar fi numărul de zile de la 1/1/2022) și va fi dat aceleiași persoane o singură dată în aceeași zi, astfel încât data curentă ar putea funcționa ca un bloc unic.

De asemenea, nu trebuie să fie masiv securizat, doar suficient pentru a împiedica cineva să ghicească codul de mâine prin încercare și eroare. (Au aplicația binar instalată, așa că, cu abilități suficiente, ar putea pur și simplu să-l depaneze și să ocolească complet codul de autentificare; nu încerc să țin departe de NSA, doar de „obișnuit” deranjant.)

Cum se poate face asta?

Fleeep avatar
drapel br
„Utilizatorul poate apela asistența tehnică de la o linie fixă ​​de la unitate și poate primi verbal un cod” pare extrem de nesigur. Te-ai gândit să folosești jetoane (hardware), care oferă o expresie pentru autentificare?
drapel cn
De ce nesigur? Cineva ar putea asculta apelul, dar nu sunt îngrijorat că cineva va primi un cod care funcționează doar pentru o zi. Și nici nu mă îngrijorează uzurparea identității.
Fleeep avatar
drapel br
dacă nu sunteți îngrijorat de uzurparea identității, atunci de ce trebuie utilizatorul să se autentifice? Și, vă rugăm să specificați ce înțelegeți prin „cache-ul de date este corupt”. Deoarece codul care a fost primit prin apelul telefonic ar trebui, de asemenea, să fie validat cumva (adică față de unele informații salvate în aplicație). Dacă aplicația nu are nicio memorie cache (persistentă), atunci rămâneți cu date „codificate greu” în aplicație, care nu se pot modifica pentru diferiți utilizatori.
drapel cn
Cache-ul este un fișier, dar uneori în câmp acest fișier este corupt sau șters de eroarea utilizatorului, care se află pe ele. Dar totuși trebuie să rulăm aplicația sau arătăm rău ca companie. Aplicația încă are algoritmii săi, totuși - cu excepția cazului în care șterg sau corup executabilul și atunci, bineînțeles, suntem înșurubați - și acel algoritm poate rula și poate verifica dacă un cod este „codul ușă din spate” valid pentru astăzi.
drapel cn
Prin uzurparea identității, mă refeream la un utilizator neautorizat care se pretinde a fi altcineva și sună și cere codul ușii din spate sau cineva care interceptează apelul și se preface a fi suport tehnic. Utilizatorii și suportul tehnic sunt cunoscuți unul de celălalt și vom presupune că simpla recunoaștere reciprocă prin voce este suficientă securitate aici.
drapel cn
Așadar, sarcina este: poate suportul tehnologic să ofere verbal un cod pe care aplicația îl poate decripta pentru a dezvălui un ID de utilizator, unde „verbal” înseamnă scurt și utilizabil uman?
Puncte:2
drapel br

Nu, fără o „cache de date” (locală), codul oferit de „asistență tehnică” nu poate depinde de „cel puțin un ID de utilizator (întreg) și data de expirare”.

Mai detaliat: Întrebarea cere o autentificare (o singură dată), unde

  1. intrarea poate fi furnizată cu ușurință de către un om, printr-un canal autentificat (care, de asemenea, nu este supus interceptării).
  2. aplicația nu are stocare persistentă/specifică utilizatorului.

Principala problemă pe care o văd este că „cache-ul de date este corupt”: pentru a verifica o intrare, un algoritm ar trebui să compare rezultatul cu o altă intrare.


De exemplu, luați în considerare o procedură de conectare bazată pe hash suprasimplificată: Utilizatorul furnizează o parolă. Un algoritm ia ca intrare parola, împreună cu un șir furnizat de un cache de date; calculează hash-ul parolei și îl compară cu șirul.

Dacă nu există cache de date, atunci algoritmul poate utiliza numai codat dificil valori, adică valori care au fost livrate împreună cu aplicația și nu depind de intrarea utilizatorului.


Comentarii: „deci data curentă ar putea funcționa ca un bloc unic.”

Rețineți că, pentru ca un tampon unic să fie perfect sigur, cheia trebuie să fie aleatorie.Acest lucru nu adaugă nicio securitate.


În afara domeniului de aplicare, deoarece acest lucru nu este considerat sigur, sau cu întrebarea în domeniul de aplicare al PO:

Dacă doriți o valoare codificată pentru o anumită zi, cea mai simplă modalitate de a face acest lucru ar fi să codificați imaginile unei funcții unidirecționale (instanțiate de o funcție hash criptografică) în aplicație. Apoi, asistența tehnologică ar putea oferi o expresie de acces care poate fi citită de om (Cf. Stackexchange: Dicționar lung Passphrase, Stackexchange: De ce să folosiți caractere aleatorii în pw? ), unde asistența tehnică are o „frază de acces validă” pentru fiecare zi. Fraza de acces poate fi furnizată ca intrare de către utilizator; a cărei imagine ar fi comparată cu valorile codificate greu asociate în acea zi. Cu toate acestea, acest lucru nu este sigur din mai multe motive:

(1) Valorile codificate greu

  • ar fi același pentru toți utilizatorii, de ex. nu poate conține ID-ul utilizatorului
  • odată ce o frază de acces este scursă, oricine cu poate accesa aplicația

(2) Data nu aduce cu adevărat siguranță, cu excepția faptului că adversarul ar trebui să știe că zile diferite au expresii de acces diferite.

Așa aș face-o recomand cu tărie împotriva acestui lucru.

Puncte:0
drapel cn

În cele din urmă, nu am rezolvat acest lucru cu criptare simetrică, ci pur și simplu am creat un hash pe server și un hash pe client și le-am comparat. Hash-ul are doar 32 de biți int, așa că este destul de ușor de citit la telefon. Folosesc o cheie și data din hash, așa că este diferit în fiecare zi.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.