- •V Excelu vzorec vypadá takto:
- •V InSiSu jsou následující pravidla pro heslo (viz příslušná stránka pro změnu hesla):
- •Výsledek je přibližně 130 sekund.
- •Louskání řetězců nnXxXnX, tj.
- •Louskání řetězců XX
- •Výsledek je přibližně 0,2 sekundy. Lm hash je z dnešního pohledu velmi špatně navržený algoritmus pro ukládání hesel.
- •V našem příkladu za h doplníme 224 (poslední tři byty mac adresy mají 24 bitů), za n doplníme 1022. Pravděpodobnost kolize je 3,06 %.
V InSiSu jsou následující pravidla pro heslo (viz příslušná stránka pro změnu hesla):
Minimální délka hesla je 9 znaků.
Heslo musí obsahovat alespoň jedno malé písmeno.
Heslo musí obsahovat alespoň jedno velké písmeno.
Heslo musí obsahovat alespoň jednu číslici.
Entropie je 4 + 7*2 + 1,5 + 6 = 25,5.
d 2016) V následující tabulce je rychlost prolamování některých typů hesel pomocí CPU i pomocí GPU
|
John the Ripper, Intel i7 2600 |
oclhashcat, 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 |
LM hash |
88 834K/s |
2 384M/s |
Za jak dlouho by program oclhashcat otestoval všechny možné varianty počátečních hesel ze zadání b) na grafické kartě AMD Radeon HD 7970, pokud jsou hesla uložena pomocí LM hash?
Toto vede k velmi jednoduchému výpočtu – počet variant se vydělí rychlostí, tj.
Výsledek je přibližně 130 sekund.
U algoritmu LM hash by bylo prolamování bylo ještě rychlejší – v algoritmu LM hash je maximální délka hesla 14 znaků, pokud je kratší, tak se doplní binárními nulami. Dále se všechna písmena hesla převedou na velká – to nám v našem příkladu nepomůže, neboť víme dopředu velikost písmen. Následně se heslo rozdělí na dvě poloviny po 7 znacích. Každá polovina má délku 56 bitů, která se použije jako klíč pro šifrovací algoritmus DES pro zašifrování řetězce „KGS!@#$%”. Výsledky se spojí do jednoho výsledného řetězce.
Prolamování se tudíž rozpadne na dvě části:
Louskání řetězců nnXxXnX, tj.
Louskání řetězců XX
Výsledek je přibližně 0,2 sekundy. Lm hash je z dnešního pohledu velmi špatně navržený algoritmus pro ukládání hesel.
e) Spočtěte průměrnou dobu pro prolomení jednoho náhodně vygenerovaného hesla uloženého pomocí MD5, pokud útoční použije program oclhashcat a AMD Radeon HD 7970:
-
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 48 bitů?
To jsou opět jednoduché výpočty. Entropie je mocnina 2, takže např. všechny varianty hesel s entropii 16 se otestují za
tj. asi 0,018 vteřiny. V zadání se ale mluví o průměrné době pro prolomení – výsledek je potřeba vydělit dvěma. Některé heslo se najde hned a některé až téměř po prozkoumání téměř všech kombinací.
Sůl na tyto výpočty nemá vliv – v zadání se mluví o prolomení jednoho náhodně vygenerovaného hesla.
Situace se změní, pokud by se mělo prolamovat např. 100 hesel. Pokud se nepoužije sůl, tak všechna hesla se najdou za 0,018 sekundy. Pokud by pro každé heslo byla jiná sůl, tak na prolomení každého hesla potřebujete v průměru 0,009 sekundy a všechny budete mít za 0,9 sekundy.
f) Spočítejte entropii hesel vytvářených uživateli v InSISu a to dle pravidel ze standardu NIST SP 800-63.
V InSISu jsou v současné době následující požadavky na heslo:
Požadavky na heslo
Minimální délka hesla je 9 znaků.
Heslo musí obsahovat alespoň jedno malé písmeno.
Heslo musí obsahovat alespoň jedno velké písmeno.
Heslo musí obsahovat alespoň jednu číslici.
Výpočet dle NIST je jednoduchý:
4 body za první písmeno
po dvou bodech za 2 až 8 písmeno, tj. 14 bodů
1,5 bodu za 9 písmeno
prémie 6 bodů za požadavek na malé písmeno, velké písmeno a nepísmenný znak (číslici)
Tj. celkem 25,5 bodu entropie. Odpovídá náhodně vygenerovanému heslu s entropii 25,5. Pro některé výpočty se počítá, jako by bylo 225,5 kombinací hesel.
g) Ve vytvářené aplikaci hesla před uložením do databáze hašujete pomocí PBKDF2 s funkcí SHA-256. V pravidlech pro hesla požadujete minimální délku 9 znaků, z toho minimálně jedno malé písmeno, jedno velké písmeno a jeden nepísmenný znak. 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 M 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. Předpokládejte náhodně generovaná hesla o 9 znacích splňující pravidla.
O kolik bude potřeba zvýšit počet iterací, pokud budeme předpokládat uživateli vytvářená hesla, tj. při výpočtu budete vycházet z entropie dle NIST 800-63.
Při náhodném generování dle uvedených pravidel vznikne 26 * 26 * 43 * 956 hesel o devíti znacích (nepísmenných znaků je 95 – 26 – 26). To je přibližně 2,1E+16 variant. Útočník za den otestuje 8,8E+13 operací SHA-256. Pokud by každý uživatel měl odlišnou sůl, tak odhalí jedno heslo za přibližně 8 měsíců při jedné iteraci. Pokud by všichni uživatelé měli stejnou sůl, tak útočník odhalí přibližně 83 hesel za den. Pro výše uvedený cíl 1 heslo za den by postačovalo 83 iterací.
Jiná situace je v případě, že heslo si volí uživatel a počítáte entropii dle NIST 800-63. Výsledná entropie je 25,5 (viz úkol c), tj. odpovídají 225,5 ≈ 4,75E+07. Pokud u každého hesla bude odlišná sůl, tak za den by útočník odhalil 1 862 620 hesel – je potřeba mít tento počet iterací v PBKDF2, vhodné zaokrouhlit na 2 milióny. Pokud by u všech hesel byla stejná sůl, tak je potřeba počet iterací vynásobit ještě 20 000.
Uvedený výpočet ukazuje nevýhody počítání entropie dle NIST 800-63. Můj odhad je, že entropie souboru hesel by se pohybovala mezi 30 až 35. Ovlivňují to dva faktory:
většina uživatelů v současné době vytváří složitější hesla, než ze slova (slovního spojení) doplněného o číslici,
významná část uživatelů má heslo delší než 9 znaků.
Druhým problémem je, že uvedený výpočet nezohledňuje průběh prolamování uživatelsky definovaných hesel. Efektivita se průběhem času snižuje. Odhaduji, že za první hodinu útočník získal přibližně polovinu hesel (hašování s jednou iterací), za celý den by získal okolo 90% hesel. Pro získání všech 20000 hesel by potřeboval mnoho let.
Pro zvýšení odolnosti vůči prolamování by bylo vhodné kontrolovat vytvářená hesla vůči slovníku, popř. zavést vícefaktorovou autentizaci.
h) 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á 36M SHA256 operací za vteřinu.
Pokud v PBKDF2 nastavíte 2 milióny iterací, tak se za sekundu ověří heslo pouze 18 uživatelům. Pokud by byla stejná sůl (z kryptografického hlediska je to nesmysl), tak se počet iterací vynásobí 20 000 a úměrně se zvýší nároky na kontrolu správnosti hesla – systém by byl nepoužitelný.
i) varianta zadání f) a g). Při těžbě Bitcoinů se počítají haše SHA-256, na stránce https://en.bitcoin.it/wiki/Mining_hardware_comparison je přehled dostupného hardware pro těžbu bitcoinů včetně rychlosti operací SHA-256.
Při výpočtu počtu iterací pro PBKDF2 dle zadání f) předpokládejte, že útočník má přístup ke specializovanému hardware pro prolamování hesel, který má stejnou rychlost operací SHA-256 jako nejrychlejší zařízení na těžbu bitcoinů s cenou do 3 000 USD. Spočtěte, kolik uživatelů se při tomto počtu iterací přihlásí na Váš server za jednu vteřinu.
Obdoba předchozích výpočtů. Smyslem zadání je, abyste se zamysleli nad možnostmi specializovaného hardware pro prolamování hesel.
Stav k 20. únoru 2016 – za 2 307 USD se prodává AntMiner S5+, které spočítá 7 722 000 MHash za sekundu. Pokud by ve variantě h správce nastavil v PBKDF2 2 milióny iterací, tak útočník se specializovaným hardwarem stejné výkonnosti za vteřinu otestuje téměř 4 miliony hesel.
Je z toho vidět obrovská nevýhoda PBKDF2 v kombinaci s klasickými hašovacími funkcemi jako je SHA-256 – útočník louskající hesla má obrovskou převahu. Pro ukládání hesel by se měly používat algoritmy, které nelze levně implementovat do specializovaného hardware.
Specializované ASICy pro těžbu Bitcoinů naštěstí nelze přímo použít pro prolamování hesel. Pro jejich výrobce je ale poměrně jednoduché upravit návrh obvodu tak, aby se pro prolamování mohl použít. Kolik se najde platících zájemců o tyto upravené obvody?
j) Při vytváření virtuálních serverů ve VMware se náhodně generuje ethernetová adresa (6B). 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čů).
Následující popis převzat z české Wikipedie:
V teorii pravděpodobnosti je narozeninovým problémem (či narozeninovým paradoxem) myšlena pravděpodobnost, že pro skupinu náhodně vybraných 23 (či více) lidí, je více než 50% pravděpodobnost, že nějací dva lidé budou mít narozeniny ve stejný den. Pro 57 a více lidí je ona pravděpodobnost více než 99%, postupně rostoucí až ke 100 % pro 366 lidí (za předpokladu že pracujeme s rokem o 365 dnech).
Výpočet. Je jednodušší nejprve spočítat pravděpodobnost, že všech „n“ narozenin je rozdílných. Pro „n“ > 365 je tato pravděpodobnost rovna nule. Pro „n“ ≤ 365 je dána následujícím vzorcem, protože druhá osoba nemůže mít stejné narozeniny jako první (364/365), třetí nemůže mít stejné narozeniny jako první dvě (363/365), atd.:
Skutečnost, že nejméně dva z „n“ lidí mají stejné narozeniny je komplementární jevu, že všechny data narozenin jsou různé. Proto pravděpodobnost p je
Tato pravděpodobnost překračuje 50% pro „n“ = 23 (pravděpodobnost kolize je ≈50,7 %).
Pokud ze sady o velikost H vybereme n prvků, tak pravděpodobnost kolize lze spočítat dle následujícího přibližného vzorce:
