====== Příklady zadání pro test na hesla ====== //Varianta pro letní semestr 2024/25// ===== Řešené příklady ===== ==== 1. Jak silné heslo potřebujete? ==== Následující tabulka udává požadovanou entropii hesla v závislosti na možnostech útočníka a počtu iterací při uložení hesla (předpokládá se použití běžných kryptografických hašovacích funkcí jako MD4, MD5, SHA1, SHA-2, SHA-3): ^ Schopnosti útočníka ^ Uložení hesla ||| ^ (počet hašovacích operací) ^5000 iterací ^1000 iterací ^1 iterace ^ |%%2^70%% (NSA za rok) | 58,5| 61| 71| |%%2^58%% (firma za půl roku) | 46,5| 49| 59| |%%2^52%% (jednotlivec s GPU za měsíc) | 41,5| 43| 53| |%%2^42%% (jednotlivec s CPU za týden) | 31,5| 33| 43| Tj. pokud je heslo uloženo s 1000 iterací a snaží se ho rozlousknout firma za půl roku, tak by heslo mělo mít entropii 49. Tj. mělo by existovat minimálně 249 různých variant hesla. === Úkol === Dopočítejte minimální délky hesla pro jednotlivé entropie: ^požadovaná entropie ^ číslice\\ [0-9] ^ malá písmena\\ [a-z] ^ číslice, malá a velká písmena\\ [a-z, A-Z, 0-9] ^ tisknutelné znaky\\ ASCII tabulky ^ diceware ^ ^ (v bitech) ^ 10 ^ 26 ^ 62 ^ 95 ^ 7776 ^ ^43 ^ ^ ^ ^ ^ ^ ^53 ^ ^ ^ ^ ^ ^ ^59 ^ ^ ^ ^ ^ ^ ^71 ^ ^ ^ ^ ^ ^ ==== 2. Entropie hesla ==== InSIS generoval počáteční hesla dle schématu nnxxxnxxX (dvě číslice, tři malá písmena, jedna číslice, dvě malá písmena, velké písmeno). Jaká je entropie těchto hesel? Kolikrát se zkrátí čas prolamování pro 9 znaková hesla proti variantě testování všech variant z 62 znaků ([a-zA-Z0-9])? ==== 3. Prodloužit heslo či rozšířit znakovou sadu? ==== Máte 8 znaková hesla složená z malých/velkých písmen a číslic (62 znaků). Chcete zvětšit odolnost vůči prolamování hrubou silou. Více variant (větší entropii) bude mít zvětšení minimálního počtu znaků na 9 či rozšíření abecedy o tisknutelné ASCII znaky (tj. na 95 znaků)? ==== 4. Za jak dlouho ==== V následující tabulce je rychlost prolamování některých typů hesel pomocí CPU (program [[http://www.openwall.com/john/|John the Ripper]]) a pomocí GPU (program [[https://hashcat.net/wiki/doku.php?id=hashcat|hashcat]]). ^algoritmus ^ John the Ripper\\ Intel i7 2600 ^ hashcat\\ AMD Radeon HD 7970 ^ ^DEScrypt ^ 18 284K/s^ 65 594K/s^ ^MD5 crypt ^ 66,9K/s^ 3 592K/s^ ^Bcrypt ^ 4,8K/s^ 4,1K/s^ ^NT hash ^ 88 834K/s^ 2 384M/s^ Za jak dlouho program oclhashcat otestuje všechny možné kombinace počátečních hesel ze zadání 2 (počáteční hesla v InSIS) na grafické kartě AMD Radeon HD 7970, pokud jsou hesla uložena pomocí NT hash? ==== 5. Doba prolamování ==== Spočtěte průměrnou dobu prolamování jednoho náhodně vygenerovaného hesla uloženého pomocí MD5, pokud útoční použije program oclhashcat a AMD Radeon HD 7970 (viz úloha 4): ^entropie hesla ^doba louskání ve vteřinách ^doba louskání ve dnech^ |16 | ? | ? | |32 | ? | ? | |40 | ? | ? | |48 | ? | ? | Budou se lišit výsledky v případě, že heslo je uloženo se solí o délce 48b? ==== 6. Uživateli zadávaná hesla ==== Entropie hesel vytvářených uživateli se měří poměrně špatně. Knihovna zxcvbn odhaduje entropii na základě existence částí hesla ve slovnících nejčastějších hesel plus zohledňuje „běžné“ operace obsažené v nástrojích pro lámání hesel. Přidává entropii za použití velkých písmen či substituci znaků (např. o se nahradí číslicí 0). Odebírá za posloupnosti či za opakování stejných znaků či skupin znaků. Heslu poté přiřadí skóre dle následující tabulky: ^Skóre ^Skóre text ^Entropie od ^Entropie do^ | 0 |velmi slabé | 0 | < 10 | | 1 |slabé | 10 | < 20 | | 2 |průměrné | 20 | < 27 | | 3 |silné | 27 | < 33 | | 4 |velmi silné | 33 | | Ve vytvářené aplikaci hesla před uložením do databáze hašujete pomocí PBKDF2 s funkcí HMAC-SHA-256 (v každé iteraci se provádějí dvě operace SHA-256). V pravidlech pro hesla požadujete minimální skóre 3. Předpokládáte, že v systému bude uloženo přibližně 20 000 účtů. Vašim úkolem je spočítat počet iterací pro PBKDF2 tak, aby se výrazně snížilo nebezpečí odhalení hesel při ukradení celé databáze. Předpokládáte, že útočník pro prolamování použije počítač s grafickou kartou AMD HD 7970, na které je schopen spočítat 1 032 milionů SHA-256 haší za sekundu (1 032 MH/s). Za jeden den by měl útočník získat v průměru jedno heslo, útočník používá útok hrubou silou. Kolik iterací bude potřeba pokud nebude použita sůl a kolik iterací v případě, že bude použita náhodná sůl o délce 64bitů. ==== 7. Kolik uživatelů se přihlásí na server? ==== Pokračování předchozího zadání. Kolik uživatelů se bude moci za sekundu přihlásit na Vašem serveru se čtyřmi jádry Intel Xeon E3-1230? Tento procesor zvládá 36 miliónů SHA256 operací za vteřinu na jednom jádru. ==== 8. Kolize VMware ==== Při vytváření virtuálních serverů ve VMware se náhodně generuje ethernetová adresa (6 B). První tři bajty jsou dány (00:50:56), další tři se náhodně generují. Jaká je pravděpodobnost kolize MAC adres v podsíti s maskou /22 (1022 počítačů)? ==== 9. Kolize - sůl u hesla ==== Budete ukládat 20 000 hesel. Pro každé uložené heslo vygenerujete náhodnou sůl. Kolik má mít sůl bitů, aby pravděpodobnost stejné soli (tj. kolize) byla menší než 1%? ===== Řešení příkladů ===== V dokumentu {{ ::01._cviceni_-_reseni.pdf }} najdete řešení příkladů včetně komentářů. Soubor obsahuje i příklady z předchozích let. ===== Neřešené příklady ===== ==== 1. Délka fráze generované dle DiceWare ==== Putty ukládá klíče (privátní i veřejný) do souboru .ppk. Heslo pro šifrování privátního klíče se generuje pomocí algoritmu SHA-1 z heslové fráze, kterou zadá uživatel; viz [[https://security.stackexchange.com/questions/71341/how-does-putty-derive-the-encryption-key-in-its-ppk-format | How does Putty derive the encryption key in its .ppk format?]] **Operace SHA-1** se provede **třikrát**. Počítač s 8 grafickými kartami AMD R9 290X zvládne za vteřinu **29,98 miliard** SHA-1 operací (**2,998E+10**). Chcete si zvolit dostatečné bezpečné heslo pro případ, kdy se útočník zmocní Vašeho souboru s privátním heslem. Pro vytvoření hesla k SSH klíči použijete slovník [[https://www.eff.org/deeplinks/2016/07/new-wordlists-random-passphrases|diceware]] (obsahuje **7776 slov**) s náhodným výběrem. Jaká musí být **minimální délka hesla** (počet slov), aby útočník na uvedeném počítači otestoval všechny varianty hesla o zvolené délce nejdříve za **2 roky** (**730 dní**)? Odkazy na diceware: * [[https://www.rempe.us/diceware/#eff | On-line generátor www.rempe.us/diceware ]] * [[https://passwordcreator.org/diceware.html | Jiný on-line generátor]] ==== 2. Délka fráze generované dle DiceWare ==== OpenSSH ukládá RSA privátní klíč do samostatného souboru ~/.ssh/id.rsa. Privátní klíč je zašifrován pomocí symetrické šifry AES-128-CBC, heslo pro zašifrování se generuje pomocí algoritmu **MD5** z heslové fráze, kterou zadá uživatel, a z náhodné soli, která je uložená v souboru **id_rsa**, viz článek [[https://martin.kleppmann.com/2013/05/24/improving-security-of-ssh-private-keys.html | Improving the security of your SSH private key files]]. Počítač s 8 grafickými kartami AMD R9 290X zvládne za vteřinu **93,72 miliard** MD5 operací (**9,372E+10**). Chcete si zvolit dostatečné bezpečnou heslovou frázi pro případ, kdy se útočník zmocní Vašeho souboru s privátním klíčem. Pro vytvoření heslové fráze použijete [[https://www.eff.org/deeplinks/2016/07/new-wordlists-random-passphrases | krátký slovník diceware]] (obsahuje **1296** slov) s náhodným výběrem. **Jaká musí být minimální délka hesla** (**počet slov**), aby útočník na uvedeném počítači otestoval všechny varianty hesla o zvolené délce nejdříve za **30** dní? Odkazy: - [[https://www.tedunangst.com/flak/post/new-openssh-key-format-and-bcrypt-pbkdf | new openssh key format and bcrypt pbkdf ]] od verze 6.5 podporuje OpenSSH nový formát, který kombinuje iterace PBKDF2 a hašovací funkci Bcrypt. ==== 3. Délka počátečního hesla ==== OpenSSL mimo jiné umí vygenerovat privátní a veřejný klíč dle algoritmu RSA pro certifikáty. Privátní klíč může být uložen ve formátu **PKCS8**, tj. zašifrován pomocí symetrické šifry des-ede3-cbc. Klíč se vytváří ze zadaného hesla pomocí **PBKDF2** s **2048** iteracemi a hašové funkce **HMAC-SHA1**. Viz druhá část článku [[https://martin.kleppmann.com/2013/05/24/improving-security-of-ssh-private-keys.html | Improving the security of your SSH private key files]]. Chcete generovat certifikáty pro uživatetele a přiřadit jim počáteční heslo. Toto heslo skládáte ze slabik oddělených tečkou např. tři slabiky ''cvc.cvc.cvc'', kde ''c'' je malé písmeno souhlásky (consonant, 20 různých) a ''v'' je samohláska (vowel, 6 různých). Ukázky hesel: lik.bub.poc ran.led.mer.syf **Kolik slabik** má mít počáteční heslo, aby se všechny varianty hesla otestovali nejdříve za rok (**365 dní**) na počítači, který za vteřinu zvládne **13,27 miliard** HMAC-SHA1 operací (**1,327E+10**)? ==== 4. Počet iterací ==== Zakládáte uživatele v Unixu a přiřazujete jim počáteční hesla. Hesla se ukládají pomocí algoritmu **SHA512crypt** s náhodně zvolenou solí o délce **6 B** (ukládané v Base64 do 8 B). Počáteční heslo generujete náhodně dle vzoru ''CvcnCvcnCvc'', kde ''c'' je malé písmeno souhlásky (consonant, 20 různých), ''C'' je velké písmeno souhlásky, ''v'' je samohláska (vowel, 6 různých) a ''n'' je číslice (10 číslic). Příklady hesla: Lik7Bub3Poc Ran0Led9Mer **Kolik iterací** v algoritmu SHA512crypt zvolíte, pokud chcete umožnit přihlášení **100** uživatelů za vteřinu na serveru s **8** CPU, který na jednom CPU zvládne otestovat **319** hesel za vteřinu při **5000** iteracích v algoritmu SHA512crypt (defaultní počet iterací). ==== 5. Požadovaná složitost hesla ==== Hesla v InSIS se ukládají pomocí algoritmu SHA512crypt se **32100** iteracemi. Uživatelé si vytvářejí sami hesla, je požadována minimální složitost hesla - běžní uživatelé (studenti) vložit **silné heslo** (tři čárky) a uživatelé s vyššími právy **velmi silné heslo** (čtyři čárky). Použitá knihovna **zxcvbn** (viz [[https://bis.vse.cz/dokuwiki/doku.php/zxcvbn]]) odhaduje počet pokusů, které útočník obvykle udělá, než narazí na správné heslo. Např. u ''Heslicko2'' je to 14288 pokusů (tj. 10^4.15497). Jakou **minimální hranici** máme nastavit **pro silné heslo** a jakou **pro velmi silné heslo**, pokud chceme, aby útočníkovi trvalo lámání silného hesla (tři čárky) minimálně **10 dní** a lámání velmi silného hesla (čtyři čárky) minimálně **150 dní** na grafické kartě Nvidia GTX 1080, která za vteřinu otestuje **235 900** hesel uložených pomocí SHA512crypt s **5000** iteracemi.