Po ľudsky
Vaše heslo v Module nikde neleží v čitateľnej podobe. Ukladáme z neho len „odtlačok“, z ktorého sa heslo spätne zistiť nedá — pri prihlásení sa porovnávajú odtlačky, nie heslá. Kto skúša heslá hádať, bude po niekoľkých neúspechoch na čas zastavený. Zabudnuté heslo sa obnovuje jednorazovým odkazom do e-mailu, ktorý platí hodinu. Dvojfázové overenie pridáva k heslu druhý zámok: šesťmiestny kód z aplikácie v mobile, ktorý sa každých 30 sekúnd mení — samotné ukradnuté heslo potom nestačí. A keď si heslo zmeníte, ostatné zariadenia, kde ste boli prihlásení, sa samy odhlásia.
Technicky
Ukladanie hesiel — bcrypt. Heslo sa hashuje funkciou bcrypt s cenou (cost) 12 — 2¹² opakovaní, s náhodnou soľou pre každé heslo. Bcrypt je zámerne pomalý, takže hromadné skúšanie hesiel z ukradnutej databázy je drahé, a soľ zabraňuje použitiu vopred pripravených tabuliek.
Sila hesla sa kontroluje na serveri pri nastavení (nie pri prihlásení): aspoň 10 znakov, aspoň tri druhy znakov (malé, veľké písmená, číslice, špeciálne znaky), bez známych slabých hesiel a jednoduchých radov typu „1234“.
Ochrana pred hádaním a zisťovaním účtov
- Po sérii neúspešných pokusov sa prihlasovanie z tej istej adresy na 15 minút zablokuje.
- Odpoveď na zlé heslo aj na neexistujúci účet je rovnaká a trvá rovnako dlho (overenie hesla prebehne aj vtedy, keď účet neexistuje), aby sa z odpovede ani z času nedalo zistiť, ktoré e-maily majú účet.
Obnova hesla
- Odkaz obsahuje náhodný token; v databáze sa ukladá len jeho odtlačok SHA-256, takže ani z databázy sa nedá vyrobiť platný odkaz.
- Odkaz platí 1 hodinu a použiť sa dá raz (spotrebuje sa atomicky, dve súbežné použitia neprejdú).
- Počet žiadostí o obnovu je obmedzený, aby sa funkcia nedala zneužiť na zahltenie cudzej schránky.
- Odpoveď je vždy rovnaká bez ohľadu na to, či účet existuje.
Dvojfázové overenie — TOTP (RFC 6238). Aplikácia v mobile (Google Authenticator, Microsoft Authenticator, 1Password a pod.) a server zdieľajú tajomstvo; kód = HMAC nad aktuálnym 30-sekundovým časovým oknom, 6 číslic.
- Toleruje sa rozdiel hodín ±30 s, nie viac.
- Ochrana proti opakovaniu: server si pamätá posledné použité časové okno a ten istý (odpozeraný) kód neprijme druhýkrát.
- Kódy sa porovnávajú v konštantnom čase.
- 10 záložných kódov na prípad straty mobilu — každý platí raz a ukladajú sa len ako odtlačok SHA-256.
- Vypnutie 2FA vyžaduje heslo aj platný kód — otvorené prihlásenie na cudzom počítači na to nestačí.
Relácia a odhlásenie
- Prihlásenie je v zapečatenom (šifrovanom) súbore cookie.
- Odhlasuje sa po nečinnosti (limit je nastaviteľný pre každého používateľa), nie po pevnom čase od prihlásenia.
- Odvolanie všetkých prihlásení: každý účet má „verziu prihlásenia“. Pri obnove hesla, zmene hesla správcom a deaktivácii účtu sa verzia zvýši a všetky staršie prihlásenia na všetkých zariadeniach prestanú platiť — najneskôr do 5 minút. Pri zmene vlastného hesla ostane prihlásené len zariadenie, z ktorého ste heslo menili.
- Zmena roly sa prejaví bez nového prihlásenia.
Ako to máme my
Všetko uvedené vyššie platí pre prihlásenie do Modula (administrácia). Navyše:
- Prihlásenie len prístupovým kľúčom (passkey): heslo sa dá ako prihlasovací údaj úplne vypnúť — pozri článok o prístupových kľúčoch.
- Portál Stravník používa ten istý účet Modula a tie isté pravidlá: rovnaké obmedzenie pokusov, rešpektuje dvojfázové overenie aj vypnuté heslo (vtedy sa prihlasuje jednorazovým kódom z e-mailu). Každý používateľ dostane vlastné prihlásenie s úrovňou oprávnení (napr. správa, kuchyňa, len čítanie); token prihlásenia sa ukladá len ako odtlačok SHA-256.
- Účty zamestnancov určené len na dochádzku sa do administrácie prihlásiť nemôžu — slúžia výhradne na terminál dochádzky.
Časté otázky
Vidíte moje heslo?
Nie. Ukladáme len odtlačok bcrypt, z ktorého sa heslo spätne zistiť nedá. Ani správca systému ho nevie prečítať.
Stratil som mobil s aplikáciou na kódy. Čo teraz?
Prihláste sa jedným zo záložných kódov, ktoré ste dostali pri zapnutí 2FA (každý platí raz), a potom si 2FA nastavte na novom mobile. Ak záložné kódy nemáte, obráťte sa na správcu vašej inštancie.
Zmenil som heslo, lebo mám podozrenie, že ho niekto pozná. Je odhlásený?
Áno. Zmena hesla zneplatní prihlásenia na ostatných zariadeniach a najneskôr do 5 minút sú odhlásené.
Prečo mi prišlo „Príliš veľa pokusov“?
Po sérii nesprávnych hesiel sa prihlasovanie z vašej adresy na 15 minút zablokuje. Je to ochrana pred hádaním hesiel; po uplynutí času to skúste znova alebo si heslo obnovte.