Práce do předmětu Systémy odolné proti poruchám>
Typická čipová karta se skládá z 8-bitového mikroprocesoru s ROM, EEPROM a RAM pamětí a samozřejmě ze sériového vstupu a výstupu. ROM slouží pro uložení základního softwaru od výrobce - komunikační rutiny, “operační systém” - který umožňuje vytváření aplikací. Aplikační programy, včetně klíčového materiálu jsou uloženy v EEPROM a RAM je používána pro uložení pracovních výsledků výpočtů.
Druhý typ útoků je založen na jednoduché myšlence. Jestliže se mi podaří vytvořit vhodnou chybu při provádění výpočtů na zařízení, tak dostanu výsledky s jejichž použitím jsem schopen snadno získat požadované informace (klíčový materiál, výpis celé, nebo části paměti, implementované algoritmy, atd.)
Pro úplnost se nejdříve stručně zmíním o prvním typu útoků a poté se budu důkladněji věnovat vytváření chyb v bezpečném zařízení. Na závěr se pokusím vyjmenovat možnosti, jež mají návrháři těchto zařízení pro zajištění bezpečných zařízení proti útokům.
Jestliže je známo rozložení a účel čipu, tak je možno použít techniku, kterou vyvinula IBM. Na čip je položen krystal z niobatu lithia, jehož refrakční index se mění podle elektrického pole. Napětí v křemíkové destičce pak může být přečteno pomocí ultrafialového laserového paprsku. Tato technika je při napětí 5 V schopna pracovat až do frekvence 25 MHz. Je to technika běžná v dobře finančně zajištěných laboratořích pro získávání šifrovacích klíčů a algoritmů z čipů.
U většiny čipových karet lze ovšem úspěšně použít mnohem jednodušší a také levnější postup.
U současných karet je obvykle použita pouze slabá ochrana, jež má zabránit přímému přístupu ke křemíku. To nejúčinnější co se používá, je kapacitní senzor pro detekci přítomnosti pasivační vrstvy, nebo optický senzor pod neprůhledným umělohmotným obalem. Bohužel platí, že čím citlivější jsou tyto ochrany, tak tím méně je zařízení (čipová karta) robustní. Výsledkem je, že jsou jen zřídka používány, nebo je lze lehce odstranit. Téměř vždy záleží na programátoru aplikace, zda je bude používat, nebo ne.
Prvním problémem je opět získání přístupu k čipu. Oddělení od plastu je jednoduché. Nejdříve použijeme ostrý nůž pro odříznutí plastiku pod modulem čipu tak, aby byla vidět epoxidová vrstva. Poté na čip použijeme pár kapek koncentrované HNO3 (>98 %) a pár minut počkáme. Naleptanou hmotu smyjeme v acetonu. Tento postup opakujeme tak dlouho, abychom se dostali k celé ploše křemíku. Pokud nepoškodíme některý ze spojovacích drátků, tak bude čip funkční. Křemík (ani jeho sloučeniny), zlato a hliník s kyselinou téměř nereagují.
Někdy nepotřebujeme ani to a stačí odstranit materiál tak, aby bylo možno dostat se ke křemíku s mikrosondami - pro tento účel se používá ultrazvuk.
S takto připraveným čipem už můžeme dělat co chceme. Nejjednodušší je průzkum čipu s použitím mikrosond, kterými můžeme např. přemostit vypálené pojistky apod. Jestliže nalezneme vypálenou testovací pojistku, tak můžeme použít testovací programy, které např. vypisují celý obsah paměti.
Tyto útoky nejsou pouze teoretické, ale byly s úspěchem použity pro analýzu velkého množství čipových karet. Zatímco některé karty jsou schopné odolat SPA, tak nebyl nalezen komerčně používaný produkt, který by odolal útoku metodou DPA.
Aplikace těchto analytických útoků je velice rychlá a cena potřebného zařízení je několik tisíc korun. Analýzu pomocí SPA lze provést během několika sekund. U DPA je tento čas poněkud větší díky její složitosti, ale stále jsou to řádově hodiny.
Základní skutečností, která je využita, je ignorování informací, které poskytuje konkrétní fyzická implementace odolného zařízení ze strany návrhářů odolných zařízení. Předpokládají, že jediné co má útočník k dispozici je vstup a výstup ze zařízení. Proto jediným cílem jejich bezpečnostní analýzy je samotný použitý algoritmus, který by měl být černou skříňka.
Princip výkonových analýz je založen na faktu, že spotřeba proudu tranzistorem se mění (různé stavy, přechody) a tím mimo jiné dochází k emitaci elektromagnetického záření. Jestliže se na problém podíváme abstraktněji, tak různé operace mikrokódu používají jiné množství tranzistorů a podle operandů dané operace se mění spotřeba těchto tranzistorů. My jsme jednoduchými prostředky schopni měřit změny v příkonu celého čipu (zařízení). Tyto informace je možné dále využít.
DPA se skládá ze dvou fází. Shromáždění dat a analýza dat. Sbírání dat pro DPA může být provedeno vzorkováním příkonu zařízení během kryptografických operací, jak už bylo popsáno. Pro DPA je potřeba posbírat množství (stovky až tisíce) kryptografických operací, jež používají cílový soukromý klíč.
Příklad průběhu DPA na DES:
Provedeme měření spotřeby proudu posledních několika cyklů z 1000 DESových operací. Každá množina vzorků obsahuje 100.000 bodů. Posbíraná data jsou dále reprezentována jako dvourozměrné pole S[0..999][0..99999], kde první index určuje operaci a druhý konkrétní vzorek. Útočník má i pole zašifrovaných textů C[0..999].
Útočník si vybere funkci D, jež je závislá na klíči. V tomto případě má formu D(Ki, C), kde Ki je nějaká informace o klíči a C je zašifrovaný text. Řekněme, že útočník chce najít 6 bitů DES klíče, které jsou vstupem jedné z operací DESu. Diferenciální průměrová stopa T[0..63][0..99999] je vytvořena z dat S použitím výsledků funkce D. Tedy
T[i][j]=SUMA[(D(i, C[k])-1/2)(S[k][j])]
Útočník ví, že jedna z hodnot Ki(index v poli T) je správná. Cílem je tedy určit správnou hodnotu. To provedeme tak, že počítáme korelaci jednotlivých řad v poli T s naměřenými příkony. U správné řady bude korelace nejvyšší. U vzorků ze špatných stop bude určitá malá fluktuace díky šumu a chybám, která bude tím nižší, čím více vstupních měření budeme mít k dispozici. Popsaným postupem je možno získat 48 z 56 bitů klíče. Zbytek už je snadné dohledat silou.
I když je nemožné zjistit přepnutí jednoho tranzistoru z přímého sledování příkonu, tak statistické operace použité při DPA jsou schopny spolehlivě identifikovat vyjímečně malé změny v příkonu.
V těchto útocích jsou posbírány informace z více zdrojů, např. signály posbírané pomocí různých měřících technik. Navíc je možno použít složitější diferenciální funkce (D). Celkově je základní HO-DPA mnohem obecnější než standardní DPA.
Dnes jsou HO-DPA v popředí zájmu výzkumníků a systémových implementátorů, i když zatím není znám systém, který by byl zranitelný HO-DPA a přitom nebyl zranitelný DPA. Obrana proti DPA, aby byla účinná, ovšem musí počítat i s HO-DPA.
Jestliže neznáme a nemůže získat kompletní informaci o implementaci, tak může být tento útok použit trochu jiným způsobem. Cílem mohou být obsahy S-boxů, což jsou definice pro záměnu vstupní informace na výstupní tak, že šifrování se stane lineární transformací nad polem GF(2).
Jako příklad uvedli DES, který je typicky implementován v hardwaru pomocí cyklu. Dále je použit registr, který uchovává výstup cyklu k a posílá ho zpět na začátek cyklu k+1. Ukázali, že jestliže nejméně významný bit v registru je pevně nastaven, pak nejméně významný bit ve výsledku je 0. Porovnáním 6 nejméně významných bitů levé a pravé poloviny je možné získat několik bitů klíče. S přibližně deseti šifrovanými texty z takto poškozeného zařízení je možné získat informace o částečných klíčích (použitých v jednotlivých cyklech šifrování) a pomocí diferenciální analýzy získat dostatek informací o klíči, ¨takže čas potřebný pro dohledání zbytku hrubou silou byl zanedbatelný.
V tomto případě už šifrování a dešifrování nejsou inverzní operace, takže je možno použít jednoduché kontroly. Libovolný vstupní vzorek je zašifrován a následně dešifrován a výsledek je porovnán se vstupem.
Připomeňme si, že algoritmus DES používá klíče s lichou paritou a správná implementace vyžaduje, aby při vstupu klíče se špatnou paritou byla vrácena chybová zpráva. Přepokládejme, že víme kde je klíč uložen, ale nemůžeme ho přímo přečíst a nemáme vybavení, jež je popsáno v [3].
Nám ovšem stačí zapsat do daného bitu klíče určitou hodnotu (k tomu stačí 18V puls o délce 10 ms). Útok probíhá následujícím způsobem. Najdeme první bit klíče a nastavíme ho na 0. Poté se pokusíme provést šifrování s upraveným klíčem. Jestliže došlo k úspěšnému šifrování, tak hodnota bitu byla 0, jinak to byla 1. Takto postupně zpracujeme všechny bity klíče.
Samotný útok vychází z prací, kde byl popisován útok na zjištění šifrovacích klíčů jenž předpokládá indukování jednobitových chyb okolím. Ten byl popsán v [4]. V [5] byl tento útok rozšířen na reverzní inženýrství algoritmů, jejichž struktura je neznámá. A v [6] je diskutována možnost použití na algoritmus RSA (tedy neblokovou šifru). Všechny tyto útoky jsou pouze teoretické.
V [7] jsou tyto útoky vylepšeny takovým způsobem, že např. pro úspěšný útok na algoritmus DES je potřeba méně než 10 šifrovaných textů. Navíc je tento útok praktický v tom směru, že používá chybový model, který už byl implementován v útocích na reálné čipové karty.
Taková úspěšnost útoku je dána použitím zákmitů buď v napájecím napětí, nebo v hodinách. Použití tohoto způsobu bylo poprvé zmíněno v útoku na algoritmus RSA, což umožnilo radikálně snížit množství potřebných šifrovacích procesů.
Principem je použití časovacího pulsu, který je mnohem rychlejší než obvykle, nebo přechodu v napájecím napětí. Obě tyto akce často zapříčiní chybnou reakci procesoru, kdy čítač instrukcí je inkrementován, ale instrukce je buď provedena chybně, nebo vůbec. Standardní verze útoku nahrazuje jeden 5 MHz kmitu čtyřmi zákmity o frekvenci 20 Mhz.
Jaké jsou hlavní výhody tohoto útoku? Za prvé je to možnost přesně si určit, kde chceme chybu indukovat a na stejném místě ji můžeme vytvářet opakovaně (např. pomocí počítání hodinových pulsů od resetu karty). Další výhodu je to, že zákmit můžeme parametrizovat - můžeme zkoušet různé frekvence, nebo různě velké a rychlé přechody. Tím můžeme provádět operace podle přání, a to dokonce i takové, které nejsou mkódem karty podporovány. Další výhodou je jejich univerzálnost. Díky problematičnosti používání detektorů změn ve vstupních signálech nejsou tyto schopny na popsané změny reagovat, takže tento útok je účinný jak na čipové karty, tak i na další bezpečnostní procesory bez ohledu na výrobce.
Toto je úplně ideální podmínka pro útok pomocí zákmitů, protože karta potřebuje téměř všechen čas pro výpočet podpisu a zákmit v kterémkoli okamžiku bude fungovat. Nalezení místa pro aplikaci útoku je tedy triviální. Navíc nám stačí pouze jedno provedení operace, takže útok je možné provádět on-line.
Mafie tak může sbírat tajné RSA klíče aniž by si banka, nebo klient něčeho všimli. Jestliže v novém systému EMV je doporučováno používat pouze 100.000 různých klíčů, tak mafie bude mít za chvíli kompletní sbírku.
Jediným problémem je určit správnou instrukci, na kterou budeme útočit. Většina čipových karet obsahuje sadu rutin, které jsou někdy označovány jako “operační systém”. Ty slouží jako knihovna pro komunikaci s kartou a pro další operace. Součástí těchto programů je i DES. Jestliže si koupíte za několik tisíc korun vývojovou sadu, tak získáte kompletní dokumentaci pro testováni. Jestliže tuto dokumentaci nemáte, tak je i tak nalezení správné instrukce nepříliš velkým problémem. Zjistilo se totiž, že poškození jakékoliv instrukce v posledních dvou cyklech šifry má obdobné účinky.
Jestliže použijeme zákmity, tak si můžeme určovat, kterou instrukci vyřadíme a tím je celý proces mnohem jednodušší.
Předpokládejme, že máme algoritmus “Red Pike”, který byl navržen pro šifrování medicínských dat pro britskou vládu.
Aby vláda přesvědčila Britskou lékařskou asociaci, že Red Pike je kvalitní šifra vytvořila komisi 4 akademiků [7]. Jejich studie říká, že Red Pike “používá stejné instrukce jako RC5”, protože základními instrukcemi jsou sčítání, xor a bitový posun doleva. Nemá žádné vyhledávací tabulky, žádný seznam klíčů a vyžaduje pouze pět řádků kódu. “Vliv každého bitu se rychle rozšiřuje” a “každé šifrování vyžaduje zhruba 100 operací”.
Podle algoritmu RC5 se můžeme pokusit o odhad náročnosti zjištění algoritmu z čipové karty s tím, že u Red-Piku to bude méně, protože je jednodušší.
Začneme vynecháním poslední instrukce. Výsledkem je, že se změní pravá půlka výsledku (je to (B xor A) shl A). Jde tedy o Feistelovskou šifru bez závěrečné permutace. Po odejmutí další operace zjistíme, že to byl left shift o 32 bitů, ale nevíme, jak byl parametrizován. Další operace (xor) je jasná a další (přidání klíčového materiálu v předchozím kole) vyústí v hodnoty A a B v uvedeném výrazu. To vyjasňuje rotaci závislou na datech. Útočník může určit že algoritmus je definován jako:
A = ((A xor B) shl B) op key
B = ((B xor A) shl A) op key
Zjištění dosti složité tabulky klíčů u RC5 (a určení, že op je +) vyžaduje postupování zpět po jednotlivých krocích. Po určení operace op už však jednotlivé bity lze určit jednoduše.
Takže, bez tabulky klíčů, je RC5 nejhorší možnou volbou pro aplikaci do hardwaru s tajným algoritmem. Jestliže je Red Pike podobný s jednodušší tabulkou klíčů, tak bude ještě náchylnější k útokům.
Vývoj speciálních lepidel a obalů čipů, které při pokusu o odebrání ničí i samotný čip. Jsou používány armádou USA a snaží se zabránit fyzickému přístupu k samotnému čipu. Příkladem může být čip pro Clipper, která má pojistky, jež jsou po naprogramování klíče přepáleny, vyrobeny z amorfního křemíku. Povrch čipu je navíc poset oscilátory, aby nebylo jednoduché sledovat činnost čipu.
Co se týče elektromagnetického vyzařování, tak ideální je použít optickou logiku, která bude možná jednou dostupná.
Existují hardwarové a softwarové techniky, které se snaží znesnadnit smysluplné měření unikajících informací v průběhu výpočtu. Zahrnují způsoby, jež se pokoušejí snížit množství uniklé informace, zavádět do měření šum, pokouší se dekorelovat vnitřní proměnné od tajných parametrů (šifrovacích klíčů) a dočasně dekoralovat kryptografické operace. Bohužel v aplikacích, kde útočníci mají možnost fyzicky získat zařízení nejsou tyto techniky příliš účinné.
Je možné navrhnout a implementovat kryptosystémy s předpokladem, že informace o výpočtu budou unikat a podle toho je změnit. Existující implementace kryptografických algoritmů (včetně RSA, DES, DSA, DH, El Gamal, elipických křivek) které udržují bezpečnost systému, i když obvody uvolňují určité informací o výpočtu.
Jinou obranou je přidání další výpočetní jednotky na čip, která bude provádět výpočty nad náhodnými čísly. To může maskovat spotřebu proudu pro druhou část čipu použitou pro šifrování, ale při použití statistických metod je možné se tohoto zkreslení zbavit.
Také je možné přidat paralelní šifrovací jednotku, která bude zrcadlit opravdové šifrovací operace. Jestliže se při šifrování bude násobit 101, tak druhá jednotka bude násobit číslem 010. To by mělo vyhladit křivku příkonu. Účinnost takového postupu je ovšem nejistá.
Co se týká chyb při výpočtu, tak je možno použít kontrolní výpočty. Např., máme-li inverzní operace (šifrování/dešifrování), tak provedením obou a porovnáním výsledku můžeme ověřit jejich správnost.
Vůbec je důležité odstranit místa programu, jejichž porušením dojde k nezjistitelné chybě při výpočtu. Jestliže v 50-tých letech existovali programátoři, kteří po vymaskování tří nejnižších bitů otestovali, jestli není výsledek větši než 7, tak to je přesně ten postup, který je potřeba používat při programování bezpečného hardwaru. Není od věci ani implementace násobného provádění bloku operací s následným hlasováním.
Určitou možností je i přepočítávání kontrolního součtu přes paměť obsahující programy zařízení, ale je třeba počítat s tím, že i algoritmus přepočtu může být cílem útoku.
Jestliže implementujeme tajné algoritmy do bezpečného hardwaru, tak bychom měli zajistit jejich dostatečnou složitost. Např. rozsáhlé S-boxy pro blokové šifrovací programy by měli učinit útok dražším.