„Třikrát a dost“ v TrueCryptu

Zhruba jednou do týdne se na diskusním fóru TrueCryptu objeví požadavek na funkci, která by umožnila po třech (pěti, deseti) chybných pokusech o zadání hesla smazat hlavičku kontejneru a tím zničit všechna data. TrueCrypt tuto funkci nemá a ani mít nebude – za prvé proto, že ta funkce je z bezpečnostního hlediska naprosto zbytečná, a za druhé proto, že v dané situaci vůbec implementovat nejde.

Nelze implementovat

Proč tuto funkci v TrueCryptu implementovat? Už ze samotné podstaty věci. V podstatě žádáme funkci, která detekuje nějakou speciální situaci (několikrát chybně zadané heslo) a reaguje na ni změnou určitých dat (přepsání hlavičky). To se v zásadě zařídit dá, dokonce to ani není moc těžké, ale je třeba zajistit splnění dvou předpokladů:

  1. Útočník nesmí mít možnost pozměnit způsob, jakým je ta zvláštní situace detekována – protože kdyby tu možnost měl, tak mu stačí jednoduše vyřadit celý detekční proces a celé omezení „třikrát a dost“ tím okamžitě padá – útočník získává nekonečně mnoho pokusů.
  2. Útočník nesmí mít přístup k datům, která jsou při detekování situace měněna – protože kdyby tu možnost měl, tak si napřed udělá kopii, provede si své tři pokusy, v případě neúspěchu data obnoví a celé se to opakuje znovu.

V případě TrueCryptu, a ostatně i jakéhokoliv jiného čistě softwarového řešení, není splněn ani jeden z předpokladů:

Útočník docela snadno může ovlivnit způsob, jak je situace detekována – konkrétně u TrueCryptu si prostě zkompiluje svoji vlastní verzi, ve které bude klíčová podmínka (if PočetPokusů > 3 then ZničHlavičky) změněna tak, aby nikdy nemohla být splněna (if False then ZničHlavičky) nebo aby splněna byla, ale volaná funkce neměla žádný efekt (if PočetPokusů > 3 then NedělejNic) – to je operace na pár minut. Programy, které nejsou open-source, na tom nejsou o mnoho lépe – ta samá změna se dá udělat i ve zkompilovaném programu, jen je o něco těžší najít to správné místo. Pokud se ovšem bavíme o útočníkovi, který má důvod a prostředky pro louskání šifer, neměl by pro něj být problém zaměstnat na tu operaci programátora, který to dokáže.

Druhý požadavek je u softwarového řešení splnitelný ještě hůře – sebedokonalejší software dost dobře nemůže chránit sám sebe nebo svoje data, pokud není spuštěn. Na každém PC je naprosto triviální záležitostí nastartovat systém z bootovacího CDčka nebo klíčenky a tím všechny nainstalované programy okamžitě vyřadit, nebo disk (flashku, cokoliv) vzít a přenést do vedlejšího počítače. U kompaktnějších zařízení (mobily apod.) to může být o něco obtížnější, ale nemožné to není.

Každý seriozní útočník si pochopitelně tu kopii udělá a bude pracovat na ní. A i kdyby si ji nakrásně neudělal a ta data by se mu opravdu povedlo zničit – byla by na tom oběť nějak výrazně lépe? Útočník, který má prostředky pro luštění šifer, obvykle také má prostředky, jak velmi znepříjemnit život nespolupracující oběti – ať už v podobě zákonů zakazujících ničení důkazů nebo v podobě gumové hadice a kluzkých schodů…

Samozřejmě, pokud by byly splněny předpoklady výše, může systém typu „třikrát a dost“ fungovat. Šifrovaná klíčenka (IronKey, KingSton DataTraveler Secure/Vault apod.) nebo čipová karta s PINem může docela dobře odolat i dobře vybavenému útočníkovi – program detekující chybná hesla je zavřený „někde uvnitř“ a nedá se k němu dostat bez rozebrání celého zařízení, a totéž platí pro paměť držící data. Celé je to pochopitelně udělané tak, aby se zařízení nedalo rozebrat bez toho, aby už samo rozebrání data nezničilo. Spoléhá se ovšem na to, že útočník nedokáže najít způsob, jak zařízení rozebrat bez zničení dat.

Nemá to smysl

K čemu by vlastně měla podobná funkce sloužit? K tomu, aby nešlo hrubou silou vyzkoušet všechny kombinace a časem narazit na tu správnou. To je nebezpečné u případů, kde těch kombinací je relativně málo a je reálné je všechny, nebo aspoň jejich větší část, vyzkoušet. Klasický PIN se čtyřmi číslicemi má 10000 kombinací; pokud bych předpokládal jeden pokus za sekundu, najdu správný PIN v průměru za hodinu a 23 minut. Omezení na tři pokusy tu má docela dobrý smysl – čas v podstatě přestane hrát roli a budeme se bavit jen o pravděpodobnosti, že se jedním z těch tří pokusů trefím do správné kombinace.

V případě klasických symetrických šifer vůbec nemá smysl uvažovat o prolomení šifrovacího klíče – počet možných kombinací je obrovský a vyzkoušet z nich dostatečně velkou část je vyloučeno už fyzikálními zákony (Wikipedia). Pokud vám to nestačí, můžete si spočítat počet možných kombinací (děleno dvěma), počet klíčů, které jste schopni luštit za sekundu, a tato dvě čísla mezi sebou vydělit. Vyjde počet sekund, jak dlouho hledání v průměru potrvá. Pro lepší vypovídací hodnotu je vhodné převést ho ze sekund na roky a ty si pak srovnat s odhadovaným stářím vesmíru.

Smysl ovšem má lámat heslo, ze kterého je šifrovací klíč nějakým mechanismem odvozován – už jenom proto, že lidé mají tendenci volit jednoduchá, snadno zapamatovatelná hesla. Počet možných kombinací je stále velmi vysoký, ale počet pravděpodobných kombinací už dosahuje jakž takž přijatelných hodnot. Potíž je ovšem v tom, že stačí někam do hesla zamíchat krátký náhodný řetězec znaků, čísel a symbolů, aby složitost hesla neúměrně narostla (šestiznakové náhodné heslo tvořené malými a velkými písmeny, čísly a snadno dostupnými symboly – to se dá celkem snadno zapamatovat – má samo o sobě 7,8*1011 = cca 239 kombinací, což je docela dobře luštitelné, ale ne už tolik, když to vložíte doprostřed nějakého běžného slova). Druhá potíž je v tom, že dnešní šifrovací programy si dávají pořádnou práci s tím, aby převod hesla na klíč trval dlouho a nešlo tudíž vyzkoušet víc než několik tisíc různých hesel za sekundu. Lámání hesel se tak stává poměrně nepraktickým, zvlášť s ohledem na mnohem jednodušší a účinnější metody využívající nejrůznější malware a/nebo sociální inženýrství.

Závěr

Je tu přirozeně argument, že pokud zavedu zničení dat po několika nesprávných pokusech, vystačí si lidé s mnohem kratšími a jednoduššími hesly, u kterých snad nebudou mít takovou tendenci napsat si je na lísteček a nalepit na monitor. To je pravda. Nabízí se však otázka, proč by měl člověk, který není ochoten zapamatovat si slušné heslo, vůbec používat šifrovací software. A druhá otázka, nakolik je rozumné slevit z nároků na kvalitní heslo a nahradit je nároky na splnění podmínek uvedených na začátku – u dobrých hesel máme skoro jistotu, že nebudou prolomena, zatímco u HW zařízení tu jistotu nemáme (jako příklad, jak znepřístupnit vnitřnosti klíčenky, se často uvádí její zalití epoxidem – to ovšem stojí a padá s tím, že není dostupné ředidlo).

To ale tak jako tak není příliš relevantní – základní problém není v tom, že požadovaná funkce není užitečná, ale v tom, že ji v softwaru nelze účinně realizovat, protože ty požadavky ze začátku článku v čistém softwaru nelze splnit. A její neúčinná realizace by šla proti duchu TrueCryptu, který se dlouhodobě a konzistentně brání všemu, co bezpečnost zhorší.

Podobné příspěvky:

4 komentáře “„Třikrát a dost“ v TrueCryptu”

  1. avatar Danoboss napsal:

    Aké si kúpil, ak to neni tajné? 🙂

  2. avatar pepak napsal:

    V tokeny jsem vkládal určité naděje, až jsem dokonce pár koupil (hlavní + záloha), ale nakonec je nepoužívám, třebaže je můj šifrovací program podporuje – prostě to nějak není ono.

  3. avatar Danoboss napsal:

    Oveľa vhodnejšie by bolo k Truecryptu pridať možnosť používať security tokeny na bootovací disk. Prípadne skombinovať možnosť používať token ktorý by mal svoj krátky pin a ktorý by sa po 10 pokusoch zablokoval plus normálne ľubovolné dlhé heslo k Truecryptu. Tým by sa vyriešilo aj to aby útočník nemohol zničiť dáta len tak (iba ak by ich úmyselne sformátoval). Bohužiaľ ako si už v jednom článku písal je Truecrypt pri botovacích diskoch obmedzený veľkosťou pamäte a preto používa najslabší hashovací algoritmus, nepoužíva security tokeny a tak ďalej.

Leave a Reply

Themocracy iconWordPress Themes

css.php