Hlavní navigace

ChaosKey: skutečný generátor náhodných čísel do USB

11. 8. 2016
Doba čtení: 4 minuty

Sdílet

Základem silné kryptografie je dostatečně kvalitní generátor náhodných čísel. ChaosKey v sobě jeden takový obsahuje a jeho hardware i software je navíc plně otevřený a podporovaný v Linuxu.

Náhodná čísla potřebujeme

Podstatná část dnešní kryptografie závisí na generování kvalitních náhodných čísel. Pokud by bylo možné činnost generátoru predikovat, vzniká tím potenciální riziko prolomení šifrované komunikace. Většina systémů dnes používá pseudonáhodný generátor čísel (PRNG), který se pomocí deterministického algoritmu snaží z nejrůznějších vstupních dat vytvořit řadu dostatečně náhodných hodnot.

Proti tomu skutečné generátory náhodných čísel (TRNG) jsou implementovány v hardware, jehož základem je šumový generátor. Ten nabízí opravdu náhodný fyzikální jev, ze kterého je možné při správné implementaci odečítat skutečná nepredikovatelná náhodná data. Existuje řada komerčně dostupných generátorů, které jsou ale obvykle velmi drahé a zároveň uzavřené.

ChaosKey: otevřený generátor

Na konferenci DebConf16 představili Bdale Garbee a Keith Packard produkční verzi zařízení ChaosKey, na jehož vývoji pracovali déle než dva roky. Jejich cílem bylo vytvořit jednoduché zařízení, které by přidávalo skutečnou entropii do jaderného generátoru náhodných čísel. Ten za normálních okolností používá jako vstup různé události ze svého okolí – stisky kláves, čtení z disku či komunikaci po síti. Většina počítačů dnes nemá hardware pro generování náhodných čísel a cílem projektu ChaosKey je takový hardware vytvořit a přidat jeho entropii k jadernému generátoru.

Vývojáři si dali za úkol vytvořit velmi levné a plně otevřené zařízení, které bude jednoduše použitelné v Linuxu a bude odolné proti softwarovému útoku. To znamená, že i když je zařízení připojené do USB, není možné přepisovat jeho firmware. K tomu je potřeba mít fyzický přístup, otevřít krabičku a propojit uvnitř dva kontakty. Nemůže tedy dojít k tomu, že by někdo generátor softwarově poškodil nebo upravil jeho chování jen pomocí vzdáleného přístupu.

Samotné zařízení má podobu malé destičky, která není větší než USB konektor. Podle autorů byla velikost dána malou krabičkou, kterou se jim podařilo nakoupit. Výhodou takto malého zařízení je, že je úzké a nebude zasahovat do vedlejšího USB konektoru. Design desky je minimalistický – obsahuje vlastně jen procesor a obvod pro generování šumu.

Vpravo nahoře vidíte procesor, uprostřed dva tranzistory generující šum a vpravo dole je zdroj 20 V.

Celá hardwarová specifikace:

  • procesor STM32F042 System-on-Chip
    • ARM Cortex-M0 MCU
    • 32k Flash
    • 6k RAM
    • USB 2.0 Full Speed
    • provoz bez krystalu
  • 20V zdroj šumu
    • zvyšující měnič s AP3015A
    • šum na dvojici tranzistorů 3904
  • operační zesilovač OPA356
    • 200MHz GBP

Princip činnosti

K samotnému generování šumu dochází na dvou tranzistorech, využívá se při tom lavinový průraz přechodu báze-emitor jednoho z nich. K tomu je potřeba napětí vyšší než 6 V, proto deska obsahuje také vlastní zdroj 20 V. Více o principu naleznete na Wikipedii.

Generovaný šum pak po zesílení širokopásmovým zesilovačem putuje do A/D převodníku umístěném v procesoru. Výsledkem je následující rozložení do zvonové křivky, které ale při generování náhodných čísel nepotřebujeme.

Podobný výsledek ukazuje i oscilogram vynesený z 2000 naměřených bodů – hodnot je nejvíce u středu rozsahu.

Dobrou zprávou je, že při analýze pomocí Fourierovy transformace se neprojeví žádná dominantní frekvence.

Vývojáři uvažovali, jak by mohli takové rozložení transformovat na skutečně náhodně rozložené. Jednou z možností by bylo u 16bitového A/D převodníku použít jen spodních 8 bitů. Nakonec ale místo toho používají hardwarovou podporu pro CRC32, kterému předhodí celý výstup z převodníku. Výsledkem je výstup s lépe (náhodněji) rozloženými hodnotami. Podle autorů přes USB do počítače přitéká přibližně megabajt náhodných hodnot každou sekundu.

Podpora v Linuxu

Vývojáři přidali podporu zařízení do jádra verze 4.1 (červen 2015, zprávička). Ovladač vytváří zařízení /dev/chaoskeyX a zároveň jej registruje v jaderném generátorů náhodných čísel hwrng. USB ID pochází z OpenMoko USB vendor (0×1d50) a má hodnotu 0×60c6. Pokud máte jádro s tímto ovladačem, stačí ChaosKey zasunout do USB portu a vše začne automaticky fungovat.

Pokud máte na svém počítači spuštěné virtuální stroje, je i v nich možné využít vlastností ChaosKey. KVM a QEMU totiž obsahují zařízení virtio-rng, které dovoluje vytahovat data ze zásobníku entropie hostitelského stroje a předávat je dovnitř vituálu. Postup pomocí virt-manageru je popsán na webu projektu.

Koupit nebo postavit?

ChaosKey je možné si objednat hotový za 40 dolarů za kus. Pokud objednáte deset kusů, vyjde vás jeden na 35 dolarů a pokud si jich objednáte rovnou pětadvacet, dostanete se na 30 dolarů. Bohužel pro nás cenu navýší poštovné z USA. Při objednávce většího množství kusů by se ale jistě dalo poštovné rozpustit.

CS24_early

Druhou variantou je vlastní stavba, schémata, deska i firmware jsou otevřené:

Sami vývojáři doporučují stavbu i vylepšování ChaosKey. Jakou možnost preferujete vy?

Byl pro vás článek přínosný?

Autor článku

Petr Krčmář pracuje jako šéfredaktor serveru Root.cz. Studoval počítače a média, takže je rozpolcen mezi dva obory. Snaží se dělat obojí, jak nejlépe umí.