Vedle hardwarových klíčů světových značek, zmiňovaných v [1], kdysi existovaly i původní československé konstrukce; sám jsem tehdy využíval nejméně dvě. Těch ovšem byly vyrobeny pouhé stovky kusů od každého typu. Oproti západním, které často obsahovaly mikrokontrolér (např. na bázi 80x51), jejich obvody zdaleka tak vysoký stupeň integrace neměly; stavěly spíše na (diskutabilním) principu security by obscurity. Ten sice byl jakožto takový právem zpochybněn, zde však v jeho prospěch hrály malé počty klíčů, zatímco u těch rozšířených po celém světě (a chránících software řádově dražší než ten československý) bylo tomu úměrné též daleko větší úsilí je prolomit a možnosti i snaha takovýto crack poté dál šířit.
Obecně vzato, chceme-li vytvořit neduplikovatelnou černou skřínku, black box, již obyčejný mikrokontrolér s pamětí programu zablokovanou proti čtení nám k tomu poskytuje dostatečně silný nástroj. Pak stačí, aby v něm nějaký algoritmus realizoval funkci, netriviálně zobrazující trochu delší vstupní posloupnost na nějakou posloupnost výstupní. Jeho jednoduchým příkladem může být (de)šifrovací algoritmus (včetně šifrovacího klíče). Právě délka vstupní posloupnosti narušiteli snadno zabrání vyzkoušet v rozumném čase všechny kombinace (jejichž počet s ní narůstá exponenciálně), odposlouchávat komunikaci a postavit si kopii či softwarový emulátor té černé skříňky, což by jinak mohl i v případě, že by samotný algoritmus neodhalil a nahradil jej třeba tabulkou nebo pamětí ROM.
Příklad víceméně opačný k předchozímu bychom našli v éře tzv. reálného režimu procesoru [2]. V něm program mohl komunikovat přímo s hardwarem, na němž běžel, instrukcemi IN a OUT, zatímco v operačním systému (či obecněji v prostředí, v němž byl program spuštěn) vůbec neexistoval softwarový nástroj dovolující tuto komunikaci zachytit, tím méně emulovat. I takový hardwarový klíč, který byl skříňkou jen velice málo černou, takže okopírovat jej by bývalo technicky snadné, by proto mohl být napodoben opět jedině hardwarem, což pro dobrodružné cesty, jimiž se před oněmi desítkami let nelegální software šířil, představovalo z praktického hlediska dosti účinnou komplikaci.
Oba (krajní) příklady také ukazují, kde bylo slabé místo: Útočník se o fyzické ani programové napodobování klíče nestaral, místo toho různými prostředky zasáhl do chráněného programu. A leckdy místo slabé až překvapivě: Jak mi tehdy dávno ukazoval majitel jedné (tehdy) význačné počítačové firmy, aplikační programátoři kupříkladu zavolali složitou funkci komunikující s klíčem, pak ale jeho přítomnost jen ověřili jedinou instrukcí JE testující její výsledek [3] a v kladném případě přešli k normálnímu běhu programu. On si v souboru JE přepsal na JNE, takže na disku se odšpuntovaný program od původního lišil přesně jedním bitem; pirát pak musel už jedině dbát, aby náhodou neměl klíč připojený, to by mu totiž ukradený program neběžel. A jiní (čeští) programátoři z nejasných důvodů (možná omylem) veřejně šířili jiný program přeložený i s ladicími informacemi, takže pod debuggerem člověk ten správný test pohodlně našel již podle toho, že cíl jeho skoku byl pojmenován HardlockOK či nějak podobně.
Klíče pro paralelní port musely nejen na své „vnější“ straně emulovat co nejvěrněji originální činnost portu LPT (aby tiskárna i nadále tiskla), ale být z něj také napájeny. To nebylo úplně samozřejmé, protože dle původní specifikace [4] byly výstupem portu otevřené kolektory a napájecí napětí tak bylo přítomno jen skrze jejich pull-up odpory. A z tohoto směru též přišel jejich soumrak: Nejenže novější počítače už LPT port zpravidla vůbec nemají; pokud u nich nějaký dosud existuje, na odporech bývá jen (např.) 3,3 V, a to je staré elektronice klíčů málo.
Ostatně principiálně neprolomitelná ochrana softwaru je asi pouhým snem (neběží-li tento výhradně na vzdálených serverech). Tehdy v době před zhruba čtvrtstoletím však hardwarové klíče přispěly k tomu, aby zde existence autorských práv k softwaru začala být vnímána a o něco později také (většinou) respektována.
[1] Klauz, M.: Vzpomínáte ještě na paralelní dongle? DPS – Elektronika od A do Z, 2017, č. 2.
[2] https://en.wikipedia.org/wiki/Real_mode
[3] https://en.wikipedia.org/wiki/X86_instruction_listings#Original_8086.2F8088_instructions