JARS Apskaita
Dokumentacija/Sauga/PIN kodų apsauga

PIN kodų apsauga

PIN kodų saugojimas, klaidingų bandymų ribojimas ir atstatymas.

PIN saugojimas

Kasininko PIN kodas serveryje saugomas ne atviru tekstu, o kaip kriptografinis hash (scrypt), kiekvienam kasininkui sugeneruojama unikali atsitiktinė druska (salt). Tai reiškia:

  • Net jei piktavalis kažkokiu būdu gautų prieigą prie serverio duomenų bazės, jis nematytų faktinių PIN kodų — tik jų hash reikšmes.
  • Hash neįmanoma efektyviai atvirkščiai dešifruoti — PIN reikia spėti, o brutalaus spėjimo bandymai serveryje ribojami (žr. žemiau).
  • Tas pats PIN dviejų skirtingų kasininkų atveju duomenų bazėje atrodo skirtingai dėl skirtingos druskos, todėl ataka prieš vieną hash nedaugina pavojaus likusiems.

PIN formatas

PIN visada yra keturių skaitmenų seka (00009999). Trumpesni ar ilgesni kodai atmetami tiek kliento, tiek serverio pusėje.

Klaidingų bandymų ribojimas

Serveris stebi klaidingus PIN įvedimo bandymus per kasos aparatą (raktas formuojamas iš autentifikuoto cashRegisterId, ne IP adreso — todėl pakeisti tinklą ar VPN ataką ribojimą apeiti negalima). Po 5 klaidingų bandymų iš eilės terminalas užblokuojamas, o pakartotiniai pažeidimai blokavimo trukmę didina pagal griežtėjantį tvarkaraštį:

Blokavimas iš eilėsTrukmė
1-asis30 sekundžių
2-asis2 minutės
3-iasis10 minučių
4-asis1 valanda
5-asis24 valandos
6-asis ir vėliau7 paros

Kaip tai veikia praktiškai:

  • Per blokavimo laiką visi bandymai grąžina klaidą Too many attempts, net jei PIN įvestas teisingai.
  • Pasibaigus blokavimui kasininkas vėl gauna 5 bandymus — bet kitas blokavimo lygis automatiškai pakyla per vieną pakopą. Lygis nesumažėja vien tik palaukus, o nulinamas tik po sėkmingo PIN įvedimo. Todėl atakuojantis negali atstatyti laikmačio paprastu laukimu.
  • Skaitiklis ir lygis saugomi duomenų bazėje, ne serverio atmintyje — blokavimo neįmanoma apeiti perkraunant terminalą, paleidžiant API iš naujo arba diegimo metu. Po 30 dienų be naujų bandymų įrašas automatiškai išvalomas, kad atsitiktiniai praeities suklydimai neaugintų rizikos amžinai.

Praktinė matematika: atakuojantis per parą gali išbandyti ne daugiau kaip ~30 PIN'ų vienai kasai. Visiems 10 000 keturženklių PIN'ų išmėginti reikėtų daugiau nei dešimtmečio.

Kasininko PIN ekranas terminale su pranešimu „Per daug bandymų. Pabandykite po 30 sekundžių." po 5 klaidingų bandymų

PIN įvedimo terminale apsauga

  • Įvedimo metu rodomi tik taškai, ne patys skaitmenys.
  • Po neaktyvumo terminale kasininko sesija automatiškai uždaroma, reikalingas pakartotinis PIN įvedimas.
  • PIN įvedimas vyksta vietoje terminalo arba per ekrane esančią klaviatūrą — abu būdai siunčia PIN tik per HTTPS kanalą.

PIN keitimas ir atstatymas

  • Administratorius gali priskirti naują PIN kasininkui per žiniatinklio sąsajos darbuotojo kortelę. Senas PIN tampa negaliojantis tuoj pat.
  • Visi PIN pakeitimai įrašomi į audito žurnalą (kas keitė, kada, kuriam kasininkui). Patys PIN ar jų hash reikšmės žurnale niekada nesaugomi — tik veiksmo faktas.

Darbuotojo kortelė žiniatinklio sąsajoje su PIN priskyrimo forma apačioje

Rekomendacijos administratoriui

  • Nesteikite kasininkams paprastai atspėjamų PIN (pvz., 1234, 0000, kasininko gimimo metai).
  • Reguliariai (pavyzdžiui, kas kelis mėnesius) skatinkite kasininkus pakeisti PIN.
  • Nesidalykite vienu PIN tarp kelių kasininkų — kiekvienas kasininkas turi turėti savo paskyrą, kad audito žurnale liktų aiški atsakomybė už atliktus veiksmus.