Lekce 3 - Hesla a biometrická ochrana
V minulé lekci, Symetrická a asymetrická kryptografie, jsme si uvedli rozdíly symetrické a asymetrické kryptografie a jejího využití v praxi.
V dnešní lekci se podíváme na další uplatnění kryptografie při ochraně dat. Budeme se zabývat zejména hesly, jejich bezpečností a ukládáním.
Heslo
Heslo je dnes již tradiční a doposud nepřekonanou metodou pro ověření uživatele, respektive toho, zda má uživatel přístup k daným datům či systému. V zásadě využíváme hesla dvěma způsoby:
- Heslo tvoří základ pro tvorbu klíče symetrické šifry, kterou jsou příslušná data zašifrovaná. Výhodou tohoto přístupu je, že k takovým datům až do zadání hesla nemá přístup nikdo, dokonce ani samotný systém. Pokud by tedy došlo ke kompromitaci systému v důsledky odcizení či ztráty disku, dotyčná osoba se k takto chráněným datům bez hesla nedostane.
- Heslo slouží pouze pro ověření, zda ho daný uživatel zná. K samotným datům už systém přístup má, například heslo do Windows.
Využití hesla k ověření
Většina uživatelů si pravděpodobně za procesem ověření pomocí hesla představí, že je heslo někde v systému uložené a když ho uživatel zadá, heslo se jednoduše porovná s tím uloženým a ihned známe výsledek. Je pravda, že některé jednodušší aplikace, například staří správci souborů, to tímto způsobem do dneška opravdu dělají. Nicméně do většiny z nich už alespoň přibylo varovné hlášení podobné tomuto:
POZOR: Ukládání hesel není bezpečné!
Dnes už ale žádný alespoň trochu zabezpečený systém tento způsob nevyužívá. Protože v případě úniku takového souboru s hesly, například v důsledku hacknutí serveru, by měl útočník k dispozici všechna hesla v otevřené podobě. Získaná hesla by ihned mohl zkusit někde použít a my bychom si navíc museli vždy vytvořit a zapamatovat hesla zcela nová, protože ta původní by byla kompromitována. A proto se i v systému, který jinak k vlastním datům přístup má, používá metoda ukládání hesel, při které ani systém otevřenou podobu hesla nezná. Namísto hesla se totiž ukládá takzvaný hash.
Hash
Hash je jednocestná kryptografická funkce, která z vloženého textu vytvoří sekvenci bajtů, ta je sice pro daný vstup jednoznačná, ale vstup samotný už z ní nelze nijak odvodit. Příkladem jednoduché hashovací funkce může být například checksum, kde dojde k sečtení hodnot všech bajtů ze vstupu. Je samozřejmé, že stejný vstup vždy vytvoří stejný výstup, ovšem konkrétní vstup z výstupu již zpětně odvodit nelze.
Porovnání hesla probíhá tak, že se spočítá hash ze zadaného hesla a porovná se s hashem uloženým v systému. Pokud tedy útočník získá soubor s hashi uložených hesel, nikde je nemůže zadat a ani se nedozví, jaká hesla jsme si vymysleli. V praxi se nejčastěji setkáme s hashovací funkcí MD5, která generuje 128bitový hash a v nových aplikacích se už z bezpečnostních důvodů nedoporučuje používat. Dále pak s SHA-512, ta generuje 512bitový hash a v dnešní době je považována za zcela bezpečnou. Mezi nejnovější patří například Argon2.
Řešení má stále drobnou vadu, a to pokud dva uživatelé použijí stejné heslo. V tomto případě jsou pak i jejich hashe na první pohled stejné. Útočník si navíc může připravit tabulku hashů nejběžnějších hesel a ukradené hashe hesel s ní porovnávat. To je významně rychlejší a efektivnější metoda, než vždy každý hash počítat znovu. Z tohoto důvodu se k heslu před jeho hashováním přidává ještě takzvaný salt.
Salt
Salt neboli kryptografická sůl představuje několik náhodných bajtů, které slouží jako doplňující vstup do hashovací funkce a uloží se spolu s hashem hesla. "Osolený" hash má poté různou hodnotu i když jsou původní hesla stejná.
I přes všechna výše uvedená opatření však stále zůstává získání takového seznamu hesel pro útočníka obrovskou výhodou. Sice mu nezbývá nic jiného, než každé možné heslo stejným způsobem zahashovat a výsledek porovnat s tím uloženým, ale stále je tato metoda mnohonásobně rychlejší, než zkoušet heslo třeba po síti prostřednictvím skriptu či dokonce ručně. A pokud pro výpočet hashe použije útočník velké množství zřetězených grafických karet nebo specializovaný hardware, jako například ASIC minery užívané pro těžbu kryptoměn, může dosáhnout luštícího výkonu až stovek miliard hashů za sekundu. Tomuto by sice správně zvolené heslo mělo odolat, ovšem není dobré se na toto spoléhat za předpokladu, že heslo vytvářel člověk
Proto nejbezpečnější vychytávku představuje ukládání hesel pomocí mnohonásobně opakovaného hashování. Počet opakování se obvykle volí tak, aby na původním počítači celý cyklus trval mezi 0,1 – 1 sekundou. To při běžném ověření uživatele nijak významně nezdržuje a zároveň extrémně ztěžuje / zpomaluje možnost opakovaného zkoušení útočníkem metodou BFA.
Využití hesla pro tvorbu klíče
Analogické metody se užívá při ochraně vlastních dat symetrickou šifrou. Namísto toho, aby se data přímo šifrovala klíčem odvozeným z uživatelem zadaného hesla, nejprve se vytvoří pro tento účel náhodný a dostatečně dlouhý klíč, kterým se data skutečně a jednorázově zašifrují. Tento klíč se pak vícenásobně zašifruje pomocí uživatelského hesla a k souboru přiloží. Dešifrování samotného klíče se tímto způsobem záměrně zpomalí, čímž se stane odolnějším proti odzkoušení útočníkem, zatímco šifrování či dešifrování vlastních dat zůstane rychlé. To je velmi důležitá vlastnost, jelikož data mohou být velká, a to například u videa. Počet iterací potřebných k dešifrování se také označuje jako PIM.
Požadavky na bezpečné heslo
Nyní už víme, proč je heslo tak důležité a jaké vlastnosti by správně zvolené heslo mělo mít. Musí existovat dostatečný počet jeho variací, aby bylo výpočetně nezvládnutelné je všechny vyzkoušet. Počet variací s opakováním snadno vypočítáme jako množinu prvků z níž se může skládat, umocněná na počet tvořící jejich skupinu. Pokud bychom například uvažovali běžný čtyřznakový PIN, který se může skládat z deseti číslic (0-9), pak je počet jejich možných variací 104, tedy 10 000. Důležitá je jak množina znaků, které mohou tvořit heslo, tak jeho délka. Ovšem délka hesla je výrazně důležitější, protože počet variací s délkou hesla roste exponenciálně.
Délka hesla
Jak tedy dlouhé heslo musí být, aby bylo neprolomitelné metodou BFA? Trochu to sice závisí na tom, jak moc velcí jsme paranoici, ale za prakticky neprolomitelné se považuje 20-ti místné heslo, a to pokud použijeme znakovou množinu číslice, malá a velká písmena (62 možných znaků anglické abecedy) nebo 18-ti místné heslo, pokud navíc použijeme běžné speciální znaky (množina přibližně 90 možných znaků celkem). Obojí dává prostor pro variace v řádu 1035. Hesla pro bezpečnostní úroveň C2 by měla mít délku alespoň 13 znaků.
Profil osoby
Dalším základním bezpečnostním požadavkem na heslo je jeho
neodhadnutelnost útočníkem na základě psychologického
profilu osoby, která heslo vytvářela. Pokud se osoba jmenuje
Alena Nováková
a je narozena 25.12.1974
, tak heslo
typu AlenkaNovakov&25.12.1974
prolomíme během první hodiny
bez ohledu na to, že má 24 znaků, velká i malá písmena a dokonce dva
speciální znaky.
Možná teď někoho napadne, jak je možné, že PIN pro platební kartu může mít pouze 4 číslice a stačí to. Takto krátká hesla stačí pouze v případě, že je fyzicky znemožněn jakýkoli přístup k uloženým heslům a možnost opakovaného zadávání hesla. Typické řešení je dnes pomocí speciálního hardware. Existují čipy, které se sami zničí pokud se poškodí jejich obal. Další možností je s jistou ztrátou počítat v nákladech daného řešení. To se týkalo dříve například některých platebních karet s magnetickými proužky.
Biometrická ochrana
Biometrická ochrana je založena na ověřování fyzických vlastností člověka, kterými se jednotlivé osoby liší. Nejčastěji se jedná o otisk prstů nebo sken tváře. Na rozdíl od hesel či fyzických klíčů má dvě obrovské výhody:
- Uživatel je nemůže zapomenout nebo ztratit.
- Ověření je rychlejší a pro uživatele častokrát pohodlnější než psát heslo nebo hledat po kapsách klíče.
Na druhou stranu bychom si měli uvědomit následující bezpečnostní rizika:
- Naše tvář či otisky prstů jsou veřejně známé, necháváme je doslova všude. Jejich zneužití k útoku sice není úplně triviální, ale pro profesionála s příslušným vybavením to nepředstavuje vážnější překážku.
- Je mnohem jednodušší na skener přitisknout náš prst nebo na nás zařízení namířit, nežli z nás získat přístupové heslo.
- U většiny zařízení lze při fyzickém přístupu k hardware tuto ochranu obejít, ačkoliv ani toto nebývá úplně jednoduché a v praxi se spíše využívá prvních dvou metod.
Z těchto důvodů lze biometrickou ochranu jako samostatnou metodou doporučit nanejvýše do bezpečnostní úrovně C1. V praxi se jí však často s výhodou využívá v kombinaci s dalšími metodami ochrany.
V následujícím kvízu, Kvíz - Základy kyberbezpečnosti, kryptografie a hesla, si vyzkoušíme nabyté zkušenosti z předchozích lekcí.