Je skutečně náhodné a jeho tvorba není závislá na prakticky neověřitelném slibu třetí strany, že je jejich generátor náhodných čísel skutečně náhodný. Systém kostek vyhazuje z problému několik potenciálních problémů a zbývá jen důvěra v kvalitu kostek, která může reálně ubrat několik bitů entropie, pokud budou nekvalitní.
To jo, ale kostky nejsou taková neznámá černá skříňka jako generátory skutečných náhodných čásel, které tak i často vypadají. Některé takové externí generátory jsou taky prokazatelně náhodnější než jiné, ikdyž všechny tvrdí dokonalou náhodnost. Kostky jsou pochopitelnější a ověřitelnější. Při vytváření klíče kostkami bez appky odpadá dlouhý řetěz slepé důvěry od ovladače, přes OS, procesor, absenci spywaru až po samotný generátor hesel. Zbyde jen důvera v kostky, algoritmus tvorby klíče a mé schopnosti to správně spočítat, což je v podstatě nejideálnější stav, ke kterému se lze reálně dopracovat.
Kombinaci více generátorů náhodných čísel bych nedělal, je to docela hazard a výsledky jsou neprůkazné. Některé postupy mohou chyby i násobit.
Dobře. Takže máte plus mínus ověřené kostky, ze kterých dostanete 196 bitů entropie. A vedle toho máte hardwarový generátor, který by měl dávat 196 bitů entropie, ale podle vás je cinknutý a dává výrazně méně bitů entropie. Navíc je to jeho obecná vlastnost – můžete takových generátorů koupit několik (stejně jako kostek) a nechat je běžet paralelně vedle sebe. Nějak mne nenapadá, co by ten generátor musel dělat, aby výrazně snížil množství bitů entropie a zároveň jste to při testu nepoznal.
Myslím, že stejně kvalitní heslo, jako tím hodem kostek, získám tak, že prostě do Googlu zadám „random password generator“ a „náhodně“ si vyberu nějaký odkaz, kde si to heslo nechám vygenerovat. Předem na to zaútočit prakticky nejde, a i kdyby byl ten generátor cinknutý, nebude provozovatel stejně vědět, kdo a kde to heslo použil.
Uplne jednoduse. Ten generator bude generovat 196b, kde bude trebas 80b entropie a statistickymi testy to sotva bez extra namahy poznas.
(Jednoducha konstrukce je - vezmi funkcni generator, vygeneruj 196b, z nich 196-80 nahrad pevnym patternem a prozen kryptografickou hash funkci, co ti da novych 196b. Statistickymi metodami to nad blackboxem nepoznas, dokud neudelas _hodne_ testu. Kdybys chtel mit ten generator OSS, tak to samozrejme bude tezsi, ale porad mas prostor pro subtilni chyby, ktere dosahnou podobneho efektu a bude to chtit hodne hodne draheho casu je najit pri auditu.)
A jeste trochu "hloubeji" - rozdil je v tom, ze monoliticka kostka ma daleko mene "zajimavych" vnitrnich stavu proti takovemu generatoru.
(A ne, nerikam poridit si tyhle kostky. Jen rikam, ze nemas pravdu v tom, ze u kostek je podobne riziko skryteho chovani jako u SW nebo elektronickeho generatoru.)
Pořád se ovšem bavíme o případu, že nejde o cílený útok. Tj. cinknutý by nebyl ten jeden můj generátor, ale všechny. Tj. ty testy bych neprováděl jen já, ale všichni uživatelé. Navíc výrobce takového generátoru by nevěděl, k čemu jsem ho použil, takže by stejně nevěděl, na co má útočit.
A jak už jsem psal – kdybych se bál, že jsou všechny generátory kolem mne cinknuté, tak prostě s jejich výstupy udělám XOR. Opravdu se nebojím toho, že když si vygeneruju náhodná data na mobilu, na procesoru stolního počítače, generátorem pseudonáhodných čísel a na internetovém generátoru, že to všechno bude cinknuté a všechny nitky povedou do jednoho místa. (A i kdyby to tak bylo, ty kostky to stejně nezachrání.)
Pořád se tu totiž bavíme o 196 bitech entropie získaných hodem kostkami, k jejichž uchování potřebuju nezanedbatelný prostor a pro jejich dekódování nezanedbatelnou energii (nebo důvěru v aplikaci třetí strany). Takže řešit vedle toho statistickou analýzu elektronického generátoru je jako kdyby děti na pískovišti při dělání báboviček řešily, jestli má písek optimální vlhkost a strukturu zrn.
Nebo-li když si teď na tomhle počítači nechám ve správci hesel vygenerovat 30znakové heslo, které si pak napíšu na papírek, bude to heslo reálně stejně bezpečné, jako to získané z těch kostek. A to předpokládá, že se se s tím správce hesel nijak nemaže a pro generování hesel používá to, co je nejsnáz dostupné v systému, tj. klidně nějaký pseudonáhodný generátor.
Provádět testy můžete jak chcete, jsou věci, které testy neodhalí:
https://en.m.wikipedia.org/wiki/Dual_EC_DRBG
Představte si čip, jehož výrobce jej vydává za HW RNG. Přepočítat po něm výsledky moc dobře nejde. Uvnitř ale bude ve skutečnosti schováno něco jako zmíněné Dual_EC_DRBG. Statistické testy projdou...
Vy ale pořád řešíte případ, kdy mi nějaký útočník podstrčí falešný generátor a bude vědět, na co ho použiju. Jenže takhle to master heslo napsané na papírku nevznikne.
Porovnáváme tu dva případy. V jednom případu si zakoupím tuhle sadu kostek, hodem získám nějaké náhodné heslo a to použiju jako hlavní heslo pro správce hesel. Ty kostky samozřejmě nijak zkoumat nebudu – ony asi nebudou úplně ideální, generovaná entropie bude asi mírně nižší, ale pro daný způsob použití se to nevyplatí řešit.
V druhém případě to samé heslo vytvářím tak, že třeba do Googlu zadám „random password generator“, vyberu si nějaký odkaz a použiju ho pro vygenerování hesla. Použitý generátor bude mít nejspíš hodně daleko k pořádnému hardwarovému generátoru, je vysoce pravděpodobné, že to bude jen nějaký softwarový generátor pseudonáhodných čísel. Jenže to vám je stejně k ničemu, protože nevíte, co jsem použil.
Pokud naopak budu potřebovat použít hardwarový generátor, asi to nebude kvůli jednomu hlavnímu heslu k soukromé klíčence. Spíš to bude kvůli šifrované komunikaci, a tam mi zase nijak nepomůže házení kostkami. Navíc by byl problematický i ten hloupý (neúmyslný) výrobní nedostatek, že ty kostky nebudou úplně dobře vyvážené (což je dost pravděpodobné). A nijak nepomůže, že ten nedostatek umím zjistit.
Jenže on to není žádný nesmysl. user_userovic_login vyjmenovává útoky na elektronické generátory, a tváří se, že na fyzické generátory náhody nelze zaútočit. Když mu dám něco do ruky a budu o tom tvrdit, že jsou to hrací kostky, bude to považovat za generátor skutečně náhodných čísel, bez jakéhokoli ověření.
Přitom nesmysl je už to považovat kostku za generátor náhodných čísel. To, co generuje náhodu, není kostka, ale hod kostkou. Když budete chtít a kostku si v ruce správně připravíte, klidně můžete třeba v 90 % případů hodit číslo, které si vyberete.
Možná jsem to napsal trochu nešikovně, bylo možné to pochopit i tak, že mi jde jen o ověřování samotných kostek. Myslel jsem samozřejmě celý proces generování entropie. Úskalí elektronických generátorů jsou jiná, než úskalí fyzických generátorů, ale jak je známo třeba z různých útoků na kasina, fyzické objekty nejsou žádnou zárukou nenapadnutelnosti generování náhody.
Mohou. Dále mohu třeba kostku položit na plastovou misku ve vodě a zkoušet, jestli se z toho nestane kompas. Ano, lze namítat, že zde může působit ještě nějaká další síla, kterou třeba ani neznám. Pořád v tom ale vidím větší jistotu než v kontrole elektronických náhodných generátorů. A stačí na to znalosti ze základní skoky.
> Ve skutečnosti, kdybyste chtěl ty kostky ověřit, budete tápat úplně stejně, jako u těch generátorů.
Tak to bych se hádal. Do kostek se poměrně špatně přidává komunikace s C&C servery, chování závislé na datu a podobné vychytávky. U kostek stačí "chvíli" házet a ověřit distribuci. To u nějaké chytré krabičky nestačí ani ve snu.
I z těch kostek byste mohl data odesílat. Generátor náhodných čísel také do sítě vůbec nemusíte mít připojený, takže schopnost komunikovat s C&C servery může být stejná, jako u těch kostek. Když dostanete výsledky „házení“, ověříte distribuci, a pak si jeden z výsledků vyberete (třeba upustíte tužku na seznam) – bude záležet na tom, zda ty výsledky „házení“ vznikly na kostce nebo na nějakém generátoru?
Ještě jsem zapomněl dodat, že ty kostky jsou dostupný generátor skutečných náhodných čísel, ne nějaká pseudonáhodná náhražka. Oproti virtuálnímu světu jsou kostky taky odolné proti téměř všem útokům na generátory [pseudo]náhodných čísel.
Například Debian OpenSSL měl v roce 2006 problém poté, co někdo na výzvu kompilátoru kvůli nadbytečnému kódu odstranil velkou část "nadbytečné" entropie. 2 roky se generovaly slabé klíče. Generátor WinXP byl k ničemu od samotného počátku. V roce 2013 byla objevena chyba v Javě, která ohrozila peněženky s bitcoiny (byly zaznamenány i náhodné kolize). A co takhle CVE-2014-3100, buffer overflow v KeyStore Androidu 4.3? atd,...
26. 8. 2020, 08:47 editováno autorem komentáře
A k čemu je mi takové "skutečně náhodné" (ať už to má znamenat cokoliv) heslo, když se ho může snadno zmocnit každý kdo zjistí, kam jsem si strčil tu krabičku? A ještě hůře - když mi může ty kostky přeházet a tím znemožnit přihlášení?
Nejde mi o postup vygenerování, ale o způsob uchování. To si můžu vycvakat klávesy z klávesnice a losovat je z pytlíku a vzniklé heslo si napsat na papírek, který strčím do peněženky...