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 tomto tutoriálu kybernetické bezpečnosti 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 tradiční a stále nejrozšířenější 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ůsledku 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 starší 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 dnes setkáme především s moderními hashovacími funkcemi určenými pro ukládání hesel, jako je například Argon2, bcrypt nebo scrypt. Starší funkce jako MD5 jsou z bezpečnostních důvodů již považovány za nevhodné.
Ř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ě.
Pokud útočník využije výkonný hardware, například velké množství grafických karet (GPU), může při použití nevhodných nebo rychlých hashovacích funkcí dosahovat velmi vysokého výkonu při zkoušení hesel. To výrazně zkracuje čas potřebný k jejich prolomení.
Správně zvolené heslo by sice mělo takovým útokům odolat, v praxi se však nelze spoléhat na to, že si uživatel vždy zvolí dostatečně silné a skutečně náhodné heslo.
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á (například u videa). Počet iterací se obvykle nastavuje podle požadované úrovně zabezpečení a výkonu zařízení. V některých nástrojích (například VeraCrypt) se tento parametr 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 nichž 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
Za prakticky neprolomitelné se považuje 20místné heslo, a to pokud použijeme množinu znaků: číslice, malá a velká písmena (62 možných znaků anglické abecedy) nebo 18mí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.
PIN a bezpečnost krátkých hesel
Výjimku z výše uvedeného představuje PIN k platební kartě, který má pouze 4 číslice, přesto může být v praxi dostatečně bezpečný. Je to proto, že jeho použití je omezeno speciálními podmínkami.
Za prvé není možné se snadno dostat k uloženým datům v čipu karty. Za druhé je výrazně omezen počet pokusů o zadání PINu – po několika chybných pokusech dojde k zablokování.
Tato ochrana je zajištěna pomocí speciálního hardwaru, který brání jak opakovanému zkoušení PINu, tak pokusům o fyzické narušení čipu. V některých případech se navíc počítá i s určitým rizikem zneužití jako součástí celkového návrhu systému.
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 hardwaru 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ů není vhodné používat biometrickou ochranu jako jedinou metodu zabezpečení u citlivějších systémů. V praxi se však velmi často využívá v kombinaci s dalšími metodami (například jako součást vícefaktorového ověření).
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í.
