Kryptografie

Jan Paseka 1. dubna 1996

Obsah

1 Caesar neboli Každý začátek je lehký! 7 1.1 Spartská skytála . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.2 Posouvací šifry . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.3 Monoabecední šifrování . . . . . . . . . . . . . . . . . . . . . . . . 13 1.4 Záměnné šifry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 1.5 Klíčová slova . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 1.6 Kryptoanalýza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

2 Proč jednoduše, když to jde i složitě? 21 2.1 Zneprůhlednění četností . . . . . . . . . . . . . . . . . . . . . . . 21 2.2 Vigenerova šifra . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 2.3 Kryptoanalýza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

2.3.1 Kasiského test . . . . . . . . . . . . . . . . . . . . . . . . . 26 2.3.2 Friedmanův test . . . . . . . . . . . . . . . . . . . . . . . . 27 2.3.3 Určení klíčového slova . . . . . . . . . . . . . . . . . . . . 32 2.3.4 Závěrečné poznámky . . . . . . . . . . . . . . . . . . . . . 33

3 Dopřejme si jistoty neboli trochu teorie 35 3.1 Šifrovací systémy . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 3.2 Perfektní bezpečnost . . . . . . . . . . . . . . . . . . . . . . . . . 36 3.3 Redundance přirozeného jazyka a bod unicity . . . . . . . . . . . 44

4 One-time Pad 53 4.1 Posouvací registry . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 4.2 Kryptoanalýza lineárních posouvacích registrů . . . . . . . . . . . 58

\underline{2 OBSAH}

5 Výpočetní složitost 61 5.1 Obtížnost problému . . . . . . . . . . . . . . . . . . . . . . . . . . 61 5.2 P =polynomiální čas . . . . . . . . . . . . . . . . . . . . . . . . . 64 5.3 NP = nedeterministický polynomiální čas . . . . . . . . . . . . . 67 5.4 NP-úplné a NP-těžké problémy . . . . . . . . . . . . . . . . . . . 68 5.5 Náhodné algoritmy . . . . . . . . . . . . . . . . . . . . . . . . . . 69 6 Autentičnost a digitální podpisy 71

6.1 Motivace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 6.2 Integrita a autentičnost . . . . . . . . . . . . . . . . . . . . . . . . 72

6.2.1 Message-Authentication-Code . . . . . . . . . . . . . . . . 72 6.3 Autentičnost uživatele . . . . . . . . . . . . . . . . . . . . . . . . 75

6.3.1 Zero-Knowledge protokol . . . . . . . . . . . . . . . . . . . 79 6.4 Čipové karty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

6.4.1 Čipové karty na kontrolu vstupu . . . . . . . . . . . . . . . 84 6.4.2 Nákupy s čipovou kartou . . . . . . . . . . . . . . . . . . . 85

7 Asymetrické šifrovací systémy neboli systémy s veřejným klíčem 87 7.1 Asymetrické šifrovací systémy . . . . . . . . . . . . . . . . . . . . 87 7.2 Elektronický podpis . . . . . . . . . . . . . . . . . . . . . . . . . . 89 7.3 Idea funkce s vlastností padacích dveří . . . . . . . . . . . . . . . 93 7.4 RSA-algoritmus . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 7.5 Diskuse RSA-algoritmu . . . . . . . . . . . . . . . . . . . . . . . . 97 7.6 Systémy založené na ruksakové metodě . . . . . . . . . . . . . . . 98 7.7 Systém s veřejným klíčem se složitostí stejnou jako faktorizace . . 101 7.8 Jak se napadá RSA-algoritmus? . . . . . . . . . . . . . . . . . . . 112 7.9 Diskrétní logaritmus . . . . . . . . . . . . . . . . . . . . . . . . . 123 7.10 Rychlejší podpisy ale méně bezpečnosti . . . . . . . . . . . . . . . 125 7.11 Kódy opravující chyby jakožto systém s veřejným klíčem . . . . . 127

8 Šifrový standard DES 129 8.1 Potřeba a historie vzniku DES . . . . . . . . . . . . . . . . . . . . 129 8.2 Popis šifrovacího algoritmu DES . . . . . . . . . . . . . . . . . . . 131 8.3 Kritika šifrového standardu . . . . . . . . . . . . . . . . . . . . . 140 8.4 Použití NP-těžkých problémů v šifrovacích systémech . . . . . . . 150

Úvod

Od chvíle co existují tvorové obdaření řečí, existují i důvěrná sdělení, jež jsou určena jen pro jedinou osobu nebo jen pro zcela určitý okruh lidí, přičemž pro ostatní osoby mají být nedostupná.

Jakým způsobem lze ţbezpečně� předat zprávu, tedy tak, že nikdo nežádoucí nezjistí obsah této zprávy? S tím pak souvisí téměř ještě důležitější otázka: Jak můžeme dosáhnout toho, aby zpráva skutečně dorazila k příjemci a sice právě v tom stavu, jak byla odeslána?

Obvykle jsou dvě možnosti, jak tyto problémy vyřešit. První z nich je zamlčení existence zprávy. Mohli bychom napsat důvěrnou zprávu například pomocí neviditelného inkoustu nebo ji poslat pomocí důvěryhodné osoby. O toto se ve všech dobách pokoušeli tajně zamilovaní – a téměř všechny klasické tragédie svědčí a selhání těchto snah.

Jiná možnost spočívá v zakódování důvěrné zprávy. V tomto případě se neutajuje její existence. Naopak: Zpráva se předá pomocí nejistého kanálu, ale tak ţzašifrovaná�, aby nikdo – mimo skutečného příjemce – nemohl zprávu ţrozšifrovat�. Zde se jedná o vědomě proradnou výzvu soupeři; takovéto výzvy bývají zpravidla také přijaty – a ne zřídka se hra obrátí.

Dále je zajímavý problém integrity a autentičnosti dat. Zde se jedná o to, aby zpráva byla chráněna proti neoprávněné změně.

Až do nedávna byly armáda a tajné služby jediný subjekt, který se profesionálně zabýval s takovýmito systémy utajení. Pouze v tomto odvětví byla dostatečná motivace – a odpovídající peněžní prostředky – na vyvinutí šifrovacích strojů, což byly chytré mechanické zázraky.

Skutečnost, že se kryptologie účastnila zrodu moderních počítačů, má symbolický charakter. S ohromným rozšířením elektronického zpracování dat se kryptologie postavila na nový základ. To má různé příčiny a to:

• Při pokusu o prolomení nepřátelského systému se musí zpracovat obrovská množství dat (řetězce písmen, sloupce cifer); musí se srovnat data, spočítat průměrné hodnoty, standartní odchylky a mnoho jiného – to všechno jsou věci, které počítač zvládne mnohem rychleji a lépe než člověk. Důsledkem je pak, že kryptosystémy, které se v současnosti používají, musí být podstatně komplexnější než jejich předchůdci před dvěma generacemi.

• Z druhé strany umožňuje moderní hardware a software implementaci komplexních a náročných matematických algoritmů. Pomocí těchto algoritmů lze dosáhnout takového stupně jistoty, který v historii nemá obdoby: malý přírůstek komplexity algoritmu vede k obrovskému nárůstu zdrojů nutných k prolomení systému. Vtip moderní kryptologie spočívá v tom, že počítač není jenom příčinou mnoha problémů, nýbrž i klíčem k jejich řešení.

• Vstupem elektronického zpracování dat a obzvláště elektronické komunikace do stále více odvětví se otevírají zcela nová pole působnosti pro kryptologii. Vedle ţklasického� vojenského použití nastupují na kryptologii zcela nové požadavky. Není nutné mít mnoho věšteckého nadání k předpovědi, že kryptologie (která se nyní stává seriózní vědou) zažije v příštích letech další razantní rozvoj.

Z novodobých problémů kryptologie vyjmenujme následující:

• Mnoho telefonních hovorů je v současnosti zprostředkováno přes satelit. Tímto je umožněno, že v principu kdokoliv je schopen tyto hovory odposlouchávat. Tedy alespoň tajné telefonní hovory je nutno tak šifrovat, že odposlouchavač slyší pouze slátaninu tónů.

• Podobný problém se týká placené televize. Zde spočívá problém v tom, že se neautorizovaný uživatel chce podívat na svoje oblíbené filmy, aniž by za to platil. Pomocí prostředků na rozpoznání autentičnosti uživatele se tomuto lehce zabrání.

• V stále rostoucí míře se provádí převody peněz elektronicky (ţHomebanking, electronic cash�). Zde je nutná elektronická náhrada obvyklého podpisu vlastní rukou. Přitom tzv. elektronický podpis je v mnohém směru lepší než obvyklé podepsání.

• Většina nynějších středních a větších počítačů je tak uzpůsobena, že mnoho uživatelů může navzájem nezávisle pracovat s počítačem (multiuser systémy). V takovýchto situacích se počítač musí přesvědčit o identitě uživatele. V současné době se to děje pomocí hesla; v budoucnosti toto bude u situací souvisících s obzvláštní bezpečností nahrazeno ţčipovou kartou�.

• Zároveň se můžeme zmínit o ţpočítačových virech�. To jsou programy, které prakticky nepozorovaně vniknou do počítačového programu; mají schopnost se samostatně reprodukovat a to je důvodem k vzniku velkých škod na programovém, datovém i hardwarowém vybavení počítače. Zhruba řečeno, virus změní svůj ţhostitelský program�; lze tedy použít s úspěchem k rozpoznání viru metodu autentičnosti programu.

\underline{OBSAH 5}

Každý, kdo má něco společného s těmito nebo jim podobnými aplikacemi, bude souhlasit:ţOvšemže potřebujeme bezpečnost! Ale – proč má být kryptologie všelék? Nejsou k dispozici jiné metody, abychom získali potřebnou jistotu?� Přirozeně, jsou jiné metody! Pomyslete na techniky vyvíjené po staletí, aby byly naše bankovky bezpečné proti falšování: speciální papír, komplexní (mnohdy dokonce krásné) obrazy, perfektní tisk, vodoznak a mnoho jiného. Tedy ještě jednou: Proč kryptologie?

[figure]

Odpověď je jednoduchá: Kryptologie je lepší! Důvodem proto je: Kryptologie je matematická disciplína. To může znít nadneseně, ale není tomu tak: Matematika poskytuje – alespoň v principu – teoretické odůvodnění pro sílu algoritmu nebo šifrovacího protokolu. S matematikou lze (v ideálním případě) dokázat, že kryptografický algoritmus má jistý stupeň bezpečnosti. A jakmile je jednou bezpečnost algoritmu jednou matematicky dokázána, není žádných pochyb o tom, že algoritmus je skutečně bezpečný; nemusíme se pak spoléhat na (zpravidla rozporuplné) posudky expertů, nepotřebujeme se odvolávat při posuzování bezpečnosti na ţtechnologii dneška� (která může být zítra úplně jiná), atd.

Je však nutno přiznat, že takovéto důkazy se podařily jen ve velmi málo případech. Avšak přesto: matematika je důvěrohodný nástroj pro systematické zkoumání kryptosystémů (tzn. návrh a analýza). To je důvod, proč dáváme kryptologickým mechanismům v případě pochyb přednost před jinými bezpečnostními systémy: In dubio pro mathematica

Věda, která se zabývá se všemi těmito problémy (a mnoha dalšími) se nazývá kryptologie nebo také kryptografie.

6  OBSAH

Kapitola 1

Caesar neboli Každý začátek je lehký!

Nun-e-zuz-o-fuf-e-juj! Bub-u-dud-e-šuš o-sus-vuv-o-bub-o-zuz-e-nun!

Pup-o-zuz-o-rur! Tut-o juj-e tut-e-nun vuv-rur-a-huh!

Astrid Lingrenová

Při každém zakódování musí být příjemce vždy o něco před útočníkem. S pomocí této informace může příjemce zprávu rozšifrovat; tato informace nesmí být žádnému útočníkovi k dispozici, neboť by útočník byl schopen rozluštit zprávu zrovna tak lehce jako příjemce. O této exkluzivní informaci mluvíme jako o klíči. Klasické šifrovací metody jsou založeny na tom základě, že odesilatel a příjemce mají společný šifrovací klíč, se kterým odesilatel zprávu zašifruje a příjemce ji rozšifruje; takováto metoda se nazývá symetrická. V dalším uvidíme, že existují také asymetrické šifrovací algoritmy: v těchto systémech potřebuje pouze příjemce tajný klíč.

V této kapitole se budeme zabývat v jistém slova smyslu pouze těmi nejjednoduššími šifrovacími algoritmy a to takovými, že v nich je jedno a totéž písmeno nahrazeno jedním a tímtéž symbolem. Například písmeno e obsažené v textu by se zašifrovalo pomocí písmena K.

*

Nejdříve několik slov k terminologii. Pojmy kryptologie a kryptografie pochází z řeckých slov κρυπτoσ (tajný) a λoγoσ (slovo, smysl) a γραφεiv (psát).Obě slova označují umění a vědu, která se zabývá rozvojem metod k utajení zpráv. (Mnozí autoři rozlišují mezi kryptografií, tj. vědou o vývoji kryptosystémů a kryptoanalýzou, uměním tyto kryptosystémy a prolomit a označují slovem kryptologie, spojení těchto věd.)

Text, řetězec znaků nebo písmen, který chceme zprostředkovat se nazývá zpráva; obvykle budeme zprávu reprezentovat pomocí malých písmen a, b, c,. . ..

Zašifrovanou zprávu budeme nazývat kryptogram; tento pak budeme psát pomocí velkých písmen A, B, C,. . .. Šifrovací postup nazýváme šifrování, odšifrovací postup dešifrování. Odesilatel tedy šifruje, zatímco příjemce musí dešifrovat, aby si mohl přečíst zprávu.

Texty, které budeme šifrovat, se skládají z písmen; tato písmena jsou prvky nějaké abecedy. V prvních dvou kapitolách bude obvykle naše abeceda přirozená abeceda {a, b, c,…}. Budeme také vybírat za abecedu např. množinu {1, …, 26}, množinu {0, 1} nebo také množinu {(a_{1}, …, a_{64}) : a_{i} ∈ {0, 1}} všech binárních posloupností délky 64 v případě, že to bude pro naše úvahy vhodné.

V rozporu s nadpisem kapitoly začínají dějiny kryptografie před Caesarem.

1.1 Spartská skytála

Historie začíná asi před 2500 lety. Jak dobře víme z díla řeckého dějepisce Plutarcha, používala vláda ve Spartě následující lstivou metodu pro přenos tajné zprávy pro své generály: odesilatel a příjemce museli mít oba tzv. skytálu: byly to dva válce o přesně stejném průměru. Odesilatel navinul úzkou pergamenovou pásku spirálovitě okolo své skytály a napsal pak podle délky svou zprávu na pásku. Po odmotání pásky mohla zprávu číst jen ta osoba, která měla skytálu stejného rozměru – doufejme, že to byl pouze příjemce.

Uvažujme nyní příklad převedený do moderního jazyka. Představme si, že jsme zachytili list papíru, na kterém čteme následující řetězec písmen:

UNDTLATEDZEEIOVEMEJKSSMYNZ.EOI IELAENLTCTENLOIEKRZOAMKKIUENN

Skytála odesílatele má průměr, který můžeme vyjádřit pomocí počtu písmen. Můžeme tedy jednoduše vyzkoušet různé rozsahy u. Zvolíme-li u = 7, dostaneme následující nesmysl:

U E V S O N L O E
N D E M I L O A V
D Z M Y I T I M N
T E E N E C E K
L E J Z L T K K
A I K . A E R I
T O S E E N Z U ,

zvolíme-li ale uspořádání textu pro u = 9, dostaneme:

U Z J E N O M
N E K O L I K
D E S I T E K
T I S I C K I
L O M E T R U
A V Y L E Z E
T E N A N O V
E M Z E L A N
D E .

Skytála je prototyp transpozičního algoritmu; přitom písmena zůstávají, co jsou, nezůstanou však, kde jsou. Nejedná se o nic jiného, než o permutaci míst písmen.

Transpoziční algoritmy jsou důležitým stavebním kamenem pro moderní algoritmy. Jinou složkou jsou substituční algoritmy; u nich se zpráva stane nečitelnou tím, že každé písmeno se nahradí jiným, ale jeho pozice zůstane zachována.

A nyní nastává doba pro vstup Caesara na scénu.

1.2 Posouvací šifry

Jeden z prvních, kdo používal kryptologické techniky, byl římský vojevůdce a státník Gaius Julius Caesar(100-44 př. n. l.). U Suetona (Caes. LVI) můžeme číst

Exstant et [epistolae] ad Ciceronem, item ad familiares de rebus, in quibus, si qua occultius perferenda erant, per notas scripsit, id est sic structo litterarum ordine, ut nullum verbum effici posset; quae si qui investigare et persequi velit, quartam elementorum litteram, id est D pro A et perinde reliquas commutet.

Překlad zní přibližně následovně

Existují také [Caesarovy dopisy] Cicerovi a známým o věcech, v kterých psal tajným písmem, pokud něco muselo být důvěrně sděleno. Tzn. změnil pořadí písmen tak, že nešlo zjistit jediné slovo. Pokud někdo chtěl toto rozluštit o poznat obsah, musel dosadit čtvrté písmeno abecedy, tedy D, za A, a podobně toto provést se zbývajícími písmeny.

Šifru použitou Caesarem obdržíme tím způsobem, že místo abecedy zprávy budeme psát abecedu kryptogramu, ale o 23 míst doprava, což znamená totéž, jako posunutí doleva o 3 místa:

Zpráva:  a b c d e f g h i j k l m n o p q r s t u v w x y z
Kryptogram: A B C D E F G H IJK LM N O P Q R S T U V W X Y Z.

Šifruje se tím způsobem, že nahradíme písmeno zprávy pod ním stojícím písmenem kryptogramu. Například ze slova ţzprava�se stane zdánlivě nesmyslné slovo ţCSUDYD�. Dešifrování je zrovna tak jednoduché: Každé písmeno kryptogramu se nahradí nad ním stojícím písmenem zprávy.

Člověk se ovšem může ptát, proč Caesar zvolil právě posunutí o 3 místa. Odpověď je jednoduchá: nebyl na to vůbec žádný důvod! Samozřejmě můžeme posunout abecedu o libovolný počet míst. Protože se naše abeceda sestává z 26 písmen, existuje právě 26 takových šifrování; mluvíme o posouvacích neboli aditivních šifrách a mezi nimi je samozřejmě triviální šifrování a → A, b → B, …, z → Z, které samozřejmě nikdo nebude používat k šifrování tajných zpráv.

Vyjasněme si na této nejjednodušší třídě šifer pojmy ţšifrovací algoritmus� a ţklíč�. Šifrovací algoritmus je bezprostředně vidět na šifrování slova zprava. Naproti tomu klíč je např. počet míst, o která je nutno posunout abecedu. Klíč nám přesně popisuje, jak se algoritmus použije ve speciální situaci.

Partneři, kteří spolu komunikují, se musí dohodnout o šifrovacím algoritmu a o způsobu přenosu klíče. Šifrovací algoritmus a klíč mají dvě zcela rozličné funkce a musí být proto zcela jasně rozlišitelné. Algoritmus jako takový je zpravidla velmi ţvelký�. Přitom mnoho algoritmů se realizuje pomocí mechanického zařízení nebo spočívá na více či méně veřejně přístupném postupu. Z toho plyne, že algoritmus nelze v podstatě udržet v tajnosti. To pak znamená, že celková bezpečnost kryptosystému leží na utajení klíče.

Tento požadavek se zdá být přehnaný, je ale nanejvýš realistický: pro někoho, kdo chce neoprávněně číst naši zprávu, je srovnatelně lehké získat algoritmus (např. odcizit či zkopírovat přístroj). A pak tento zlosyn ví vše o algoritmu; nezná ale (doufejme) současný klíč.

Z toho nutně plyne, že klíč je nutno předat bezpečnou cestou. K čemu pak vůbec šifrování zprávy? V tom případě jsme mohli hned přenést celou zprávu touto bezpečnou cestou! – Tato námitka je plně oprávněná, lze ji však následujícími argumenty podstatně zmírnit.

1. Zpráva bývá zpravidla velmi dlouhá, klíč se obvykle volí co nejkratší. Dodatečná námaha pro spolehlivý přenos klíče je pak silně redukovatelná. Proto je pravděpodobnost, že klíč bude odposloucháván, relativně malá.

2. Odesilatel a příjemce si mohou libovolně vybrat dobu předání klíče. Klíč lze například dohodnout dny před přenosem zprávy. Naproti tomu se zpráva musí odeslat v okamžiku, který není ovlivnitelný komunikujícími partnery (uvažme politické události, vývoj na burze, atd.)

3. S pomocí tzv. Public-Key systémů lze klíče bez nebezpečí vyměnit, abychom pak provedli zakódování s pomocí konvenčních postupů.

Upozorněme ještě na další nebezpečí. Je-li klíč vyměněn, musí být spolehlivě uložen; nesmí nastat případ, že jej bude možno z přístroje zjistit. Experti souhlasí s tím, že klíč je pouze tehdy bezpečně uložen, pokud přístroj nelze najít fyzikálními prostředky.

Nyní ale nastala doba na změnu stran. Kryptologie se nezabývá pouze tím, že navrhuje bezpečnostní systémy pro přenos zpráv; jedna z jejich ústředních úloh je takové systémy ţrozluštit� (nebo se o to alespoň pokusit!).

Začněme tedy na okamžik hrát roli zlosyna – to lze vyjádřit trochu slušněji následovně: pracujeme jako kryptoanalytik a provádíme kryptoanalýzu kryptogramu (případně zkoumaného kryptosystému). Tvůrce kryptosystému musí vždy počítat s možností, že algoritmus je protivníkovi znám (alespoň po delší dobu). Kromě toho se doporučuje protivníka nepodceňovat a přisoudit mu co nejvyšší inteligenci; nazvěme je Mr. X.

Představme si, že Mr. X zachytil následující kryptogram:

BIBV HXZIDI CH VMVQ BIRVI

Na základě jistých indicií došel k domněnce, že tento text byl zašifrován pomocí posouvací šifry (např. by mohl ţnajít� jeden z výše popsaných šifrovacích strojů). Takovýto text pak lze principiálně analyzovat dvěma způsoby. 1.ţSystematické� prozkoušení všech možností

Protože se jedná pouze o 26 posunutí, není naše námaha příliš velká. Mr. X ale může tuto námahu podstatně zredukovat, omezí-li se pouze na malou část zachyceného textu.

Uvažme např. ţslovo� VMVQ. Vyzkoušíme-li všechna ţposunutí� této posloupnosti písmen, zjistíme snadno, že ze všech možných ekvivalentů pouze slovo neni dává smysl. Je tedy více než pravděpodobné, že kryptogram byl získán posunutím o 8 míst. Mr. X pak prověří svou domněnku tím, že dešifruje celkový text:

tato zprava uz neni tajna.

Tato metoda pro prolomení posunovací šifry je proto tak dobrá, protože většina kombinací písmen je v češtině zcela bez významu. Ačkoliv je toto pozorování důležitý základ pro mnoho kryptoanalytických metod, má výše uvedená metoda velkou nevýhodu. Nelze ji totiž (nebo jen s neúměrně velkou námahou) automatizovat. Pokud by tato metoda měla být provedena počítačem samostatně, pak by bylo nutno uložit všechna (nebo v každém případě velmi mnoho) česká slova. I když je to v principu možné, používali bychom zbytečně silný nástroj. A to nelze následující metodě vytknout.

2.Statistická analýza

V češtině, němčině a angličtině (stejně jako v každém přirozeném jazyku) se nevyskytují všechna písmena se stejnou četností; spíše má každé písmeno svou charakteristickou četnost.

Tyto početnosti jsou uvedeny v následující tabulce:

Písmeno Četnost v % Četnost v %
němčina  angličtina
a  6.51  6.40
b  1.89  1.40
c  3.06  2.70
d  5.08  3.50
e  17.40  10.00
f  1.66  2.00
g  3.01  1.40
h  4.76  4.20
i  7.55  6.30
j  0.27  0.30
k  1.21  0.60
l  3.44  3.50
m  2.53  2.00
n  9.78  5.60
o  2.51  5.60
p  0.79  1.70
q  0.02  0.40
r  7.00  4.90
s  7.27  5.60
t  6.15  7.10
u  4.35  3.10
v  0.67  1.00
w  1.89  1.80
x  0.03  0.03
y  0.04  1.80
z  1.13  0.02

Můžeme pak písmena rozdělit v závislosti na četnosti jejich výskytu do čtyř skupin (např. v němčině). V první skupině budou nejpočetněji se vyskytující e a n, v druhé skupině budou písmena s ještě relativně velkou četností (cca. 7%); ve třetí skupině jdou uvedena písmena s malou, ale dosti podstatnou četností zatímco v poslední skupině jsou uvedena zanedbatelná písmena.

Skupina  Počet písmen

skupiny v textu

e, n  27.18%
i, s, r, a, t  34.48%
d, h, u, l, c, g, m, o, b, w, f, k z  36.52%
p, v, j, y, x, q  1.82%

Co se stane, dešifrujeme-li nějakou (německou) zprávu? Pak samozřejmě zůstane četnost písmen zachovánana; avšak jednotlivá četnosti písmen nemusí být již přiřazeny svým odpovídajícím písmenům. Např. zašifrujeme-li ve zpráve písmeno e za X, pak bude písmeno X nejčetnějším písmenem kryptogramu, zašifrujemeli y za S, nebude se S v kryptogramu téměř vyskytovat.

Konkrétně Mr. X ve své analýze zprávy

MRNBNA CNGC RBC WRLQC VNQA PNQNRV

vytvoří seznam jednotlivých četností

Písmeno: A B C D E F G H I JK LM N O P Q R S T U V W X Y Z
Četnost:  2 2 4 0 0 0 1 0 0 0 0 1 3 6 O 1 3 4 0 0 0 2 1 0 0 0.

Písmeno s největší četností je N; můžeme tedy v prvním přiblížení vyjít z toho, že N v kryptogramu odpovídá e ve zprávě.

Pozor: Protože celá metoda je založená na statistice, není nic 100% jisté! Mr. X se musí zabývat dalším potvrzením své domněnky. Je-li jeho domněnka správná, jedná se o posunutí o 9 písmen. Pak by muselo R odpovídat písmenu i (to potvrzuje jeho hypotézu, že se R vyskytuje relativně často) a W by muselo odpovídat písmenu n – to je však v rozporu s tím, že W se vyskytlo pouze jednou. Z druhé strany se vyskytují A, B, C relativně často (měly by odpovídat r, s, t, a ekvivalenty x, y, z (totiž G, H, I se prakticky nevyskytují).

Mr. X se tedy pokusí provést posunutí zpět o 9 písmen a obdrží

dieser text ist nicht mehr geheim.

Výše uvedený text je smysluplný a tedy jeho domněnka je s konečným závěrem potvrzena.

Závěrem několik poznámek. Druhá metoda má bezespornou přednost, že ji počítač může sám lehce provést. Protože zde ale rozhodující roli hrají statistické úvahy, musí být zachována jistá obezřetnost. Obzvláště při krátkých textech může vést naivní hledání po nejčastěji se vyskytujícím písmenu do slepé uličky. Pokud ale uvážíme ještě četnosti několika jiných písmen, lze použít algoritmy, které jsou i při velmi krátkých textech velmi úspěšné.

1.3 Monoabecední šifrování

Šifrování se nazývá monoabecední, jestliže každé písmeno abecedy zprávy je zašifrováno jako nějaké písmeno téže abecedy. Monoabecední šifrování si můžeme představit tím, že pod abecedu zprávy napíšeme abecedu kryptogramu. Např. následující metody šifrování jsou monoabecední.

Zpráva:  a b c d e f g h i j k l m n o p q r s t u v w x y z
Kryptogram: Q W E R T Z U I O P A S D F G H J K LY X C V B N M.

Zpráva:  a b c d e f g h i j k l m n o p q r s t u v w x y z
Kryptogram:  ȷ→Π ακβ˘ ⊥ffl ı≤´ Ξ Σ Υ Φ Ω ≥3ß 7 9 ¯ 2 4 5.

Poslední příklad by nám měl připomenout, že zpráva a kryptogram nemusí být definovány nad stejnou abecedou. Je-li tomu ale tak, pak každému monoabecední šifrování odpovídá permutace písmen abecedy; obráceně lze každé permutaci přiřadit monoabecední šifrování. Z toho zejména plyne, že máme přesně

26! = 26 · 25 · . . . · 2 · 1 ≈ 4 · 10^{26}

monoabecedních šifrování nad přirozenou abecedou {a, b, c, …, z}.

1.4 Záměnné šifry

Chceme-li použít k zakódování písmen počítač, pak identifikujeme obvykle a (resp. A) s 1, b (resp. B) s 2, atd.; x (resp. X) s 24, y (resp. Y) s 25 a z (resp. Z) s 0. Pomocí této reprezentace lze posunovací šifry popsat obzvlášť dobře: posunutí o s míst odpovídá přičtení čísla s modulo 26. Konkrétně postupujeme následovně:

• Nejdříve převedeme písmena zprávy do odpovídajících číslic;

• pak připočteme k tomuto číslu číslo s;

• z výsledku uvažujeme pouze zbytek, který obdržíme po dělení 26; tento zbytek přeložíme zpátky na odpovídající písmeno.

Tímto způsobem získáme příslušný text kryptogramu. Příklad.Nyní chceme zašifrovat písmeno a pomocí posunovací šifry, která posouvá o 3 místa.

• a se reprezentuje pomocí číslice 1;

• 1 + 3 = 4;

• 4 je reprezentace písmena D kryptogramu.

Při dešifrování písmene B postupujeme následovně:

• B se reprezentuje pomocí číslice 2;

• 2 – 3 = –1;

• Zbytek –1 po dělení26 je 25 a to odpovídá písmenu y zprávy.

S pomocí této metody lze tzv. čísla sčítat.Celá věc se stává podstatně zajímavější, pokud budeme písmena násobit.To lze provést následovně:

Abychom mohli násobit písmena číslem t, budeme počítat opět modulo 26. Tzn., že vynásobíme číslo odpovídající zadanému písmenu číslem t a uvažujeme zbytek po dělení 26. Pak je tomuto zbytku odpovídající písmeno výsledek tohoto ţnásobení�.

Vynásobíme-li hodnotu každého písmena zprávy číslem 2, obdržíme

Zpráva:  a b c d e f g h i j k l m n o p q r s t u v w x y z
Kryptogram: B D F H JLN P R T V X Z B D F H JLN P R T V X Z.

Vidíme, že vždy dvě písmena (např. ha u) nám dávají tentýž ţsoučin� (v našem případě P). Proto nemůžeme tuto substituci použít jako šifru. Pro každé šifrování musí totiž platit doposud nevyslovené ale zcela samozřejmé pravidlo, že text zprávy musí být s pomocí klíče jednoznačně rekonstruovatelný z kryptogramu. Mnozí považují tozo pravidlo za příliš omezující; lze ho však zeslabit a zároveň odůvodnit: Každý kryptogram musí být s pomocí klíče dešifrovatelný nějakým počítačem.

Pokusme naše štěstí ještě jednou a vynásobme všechna písmena číslem 3:

Zpráva:  a b c d e f g h i j k l m n o p q r s t u v w x y z
Kryptogram: C F I LO R U X A D G JM P S V Y B E H K N Q T W Z.

V tomto případě získáme skutečně monoabecední šifrování. Lehkým prozkoušením vidíme, že obdržíme monoabecední šifrování právě tehdy, když násobíme jedním z čísel 1, 3, 5, 7, 9, 15, 17, 19, 21, 23 nebo 25; takovéto šifrování nazýváme multiplikativní šifry.

Máme tedy (včetně triviální šifry) právě 12 multiplikativních šifrování; jejich počet je tedy ještě menší než počet posouvacích šifer. Proto můžeme od těchto šifer očekávat velmi nepatrnou kryptografickou bezpečnost.

Můžeme ale navzájem kombinovat posouvací a multiplikativní šifry. Za tímto účelem přičteme nejprve k písmenu zprávy číslo s a výsledek vynásobíme dalším číslem t. Podle tohoto předpisu získáme opět šifru, tzv. záměnnou (afinní)šifru, kterou budeme označovat [s, t].

Klíč záměnné šifry [s, t] sestává z dvojice čísel (s, t) (přirozeně musí být pro každou záměnnou šifru číslo t zvoleno tak, že násobení číslem t je multiplikativní šifra; t tedy musí být jedno z výše uvedených čísel 1, 3, 5, 7, 9, 15, 17, 19, 21, 23 nebo 25).

Počet všech záměnných šifer vypočteme jako počet všech posuvacích šifer vynásobený počtem všech multiplikativních šifer; tedy počet všech záměnných šifer je 26 · 12 = 312. Toto číslo je už tak velké, že při ruční kryptoanalýze nám systematické prověření všech možností dá pěkně zabrat.

1.5 Klíčová slova

Velké množství monoabecedních šifer získáme následujícím způsobem: klíč sestává ze dvou komponent – klíčového slova a klíčového písmene. Nejdříve vytvoříme z klíčového slova posloupnost písmen, ve které se každé písmeno vyskytne pouze jednou. To získáme následujícím způsobem, že každé písmeno se při svém druhém, třetím, … výskytu vyškrtne. Máme-li zvoleno například klíčové slovo

MATEMATIKA,

získáme posloupnost

MATEIK.

Napišme nyní tuto posloupnost pod abecedu zprávy, a to tím způsobem, že bude začínat právě pod klíčovým písmenem. Např., zvolili jsme jako klíčové písmeno ţj�, obdržíme

Zpráva:  ab cd efgh i j k l m n o p q rstu v w x y z
Kryptogram:  M A T E I K  .

Na závěr napíšeme zbývající písmena kryptogramu v abecedním pořádku, přičemž začneme po posledním písmenu klíčového slova. V našem případě pak získáme

Zpráva:  a b c d e f g h i j k l m n o p q r s t u v w x y z
Kryptogram: Q R S U V W X Y Z M A T E I K B C D F G H J L N O P.

Zřejmě lze každé monoabecední šifrování získat pomocí vhodného klíčového slova.

1.6 Kryptoanalýza

ţFilozofii� moderní kryptoanalýzy lze popsat Kerckhoffovým principem; tento princip byl poprvé formulován v knize La cryptographie militaire (1883) holandským jazykovědcem Jeanem Guillaumem Hubertem Victorem Francoisem Alexandrem Augustem Kerckhoffem von Nieuwenhofem (1835–1903). Kerckhoffův princip. Spolehlivost kryptosystému nesmí záviset na utajení algoritmu. Spolehlivost je založena pouze na utajení klíče.

To je zásadní varování pro tvůrce kryptosystémů. Nesmíme být tak naivní a přepokládat, že Mr. X nemá možnost získat znalost algoritmu. Dějiny kryptografie jsou plné příkladů, kdy objevitel kryptosystému založil důvěru na něm tím, že jeho algoritmus nikdy nemohl být znám.

Naopak: Cílem moderní kryptografie musí být vývoj systémů, které zůstanou bezpečné i v tom případě, že o algoritmu bylo dlouhou dobu veřejně diskutováno. ţPříkladem� je DES-algoritmus.

Kryptoanalytik rozlišuje následující případy útoku na šifru:

1. Known ciphertext attack:

Kryptoanalytik zná relativně velkou část kryptogramu. To je opravdu reálný předpoklad, protože je zpravidla celkem jednoduché zajistit si (libovolně dlouhé) části kryptogramu.

2. Known plaintext attack:

Kryptoanalytik zná relativně malou část související zprávy/kryptogramu. Tato hypotéza je reálnější, než se na první pohled zdá. Totož často ţví� Mr. X, o co se jedná, a může proto uhádnout několik hlavních slov. Mimoto lze nalézt zpravidla standardní úvodní a závěrečné fráze atd.

3. Chosen plaintext attack:

Má-li kryptoanalytik přístup k šifrovacímu algoritmu (s aktuálním klíčem), může pak za účelem zjištění klíče kódovat vybrané části zprávy a pokusit se udělat z obdrženého kryptogramu závěry o struktuře klíče. Mohl by například do stroje vkládat pravidelná zdrojová slova, např. posloupnosti stejných písmen (aaa …) za účelem jejich zakódování. Nebezpečí takovéhoto útoku spočívá v tom, že by se mohlo Mr. X podařit přimět šifrovací stroj k tomu, aby zakódoval zdánlivě neškodné zprávy, s jejichž pomocí pak Mr. X může zašifrovat zprávu, kterou by odesilatel nikdy nezašifroval. Jak nebezpečný může být takovýto útok, se obzvláště ukáže, když pomyslíme na to, že mnohé šifrovací přístroje pouze nešifrují, ale také ţpodpisují: Pokud je algoritmus tak slabý, že dovolí tento útok, pak by mohl Mr. X vytvořit z nevinně vyhlížejících podepsaných zpráv brizantní, platně podepsaný dokument.

*

Každé monoabecední šifrování přirozeného jazyka může být dosti lehce prolomena. Musíme si pouze ujasnit, že každé monoabecední šifrování (přirozeného jazyka) lze prolomit již za vysoce slabého (přičemž nanejvýš realistického) předpokladu 1. Předvedeme pouze ţprincip� algoritmu.

Představme si, že Mr. X zachytil kryptogram o délce asi 500 písmen a že ví, že kryptogram byl zašifrován pomocí monoabecedního šifrování.

Krok 1. Nejdříve Mr. X zjistí četnosti písmen kryptogramu. Tím získá ekvivalent e, n spolu s množinou písmen {i, s, r, a, t}. Jednotlivá písmena z této množiny přitom zpravidla ještě nemůže identifikovat.

Krok 2. Nyní Mr. X spočte bigramy, tzn. páry po sobě sledujících písmen. Nejčastější bigramy německého jazyka jsou uvedeny v následující tabulce:

Bigram Četnost Bigram Četnost
en  3.88%  nd  1.99%
er  3.75%  ei  1.88%
ch  2.75%  ie  1.79%
te  2.26%  in  1.67%
de  2.00%  es  1.52%

Tímto způsobem může Mr. X izolovat písmena o největším výskytu. Např. dvojice er má velmi velkou četnost, zatímco všechny jiné kritické kombinace s e se vyskytují dosti zřídka (ea a et jsou opravdu velmi řídké – pod 0.5%) a také es se vyskytuje se signifikantně malou četností. Konkurentem by mohla být dvojice ei; tu však lze vyřadit tím způsobem, že testujeme inverzní dvojice: jen u těchto dvojic je tomu tak, že jak v původní posloupnosti, tak i v obráceném pořadí se vyskytují s prakticky stejnou četností. Tímto způsobem může Mr. X nejprve izolovat rozlišitelná písmena skupiny { i, s, r, a, t} s druhou největší četností. Dále může rozpoznat písmena c a h podle toho, že se jako dvojice vyskytují relativně často ale samostatně velmi zřídka. Tímto způsobem může prakticky bezchybně identifikovat nejčastěji se vyskytující písmena; tj. písmena e, n, i, s, r, a, t, h, c, která tvoří více než dvě třetiny textu. A to všechno lze provést automaticky pomocí počítače!

Krok 3. Pak nechá Mr. X dosadit rozpoznaná písmena do celého textu. Jinak řečeno: počítač rozšifruje známé díly textu. Ten se objeví na obrazovce, příčemž nerozluštěná písmena se nahradí účelně prázdnými znaky.

Zpravidla tento text není rozšifrován, nebo se jeho šifrování provádí ještě stále náročně. Další písmena však může inteligentní Mr. X na základě kontextu lehce hádat! To provede a nechá si vždy po každém kroku ukázat změněný text. Po dvou nebo třech krocích dospěje k velmi dobře čitelnému textu.

*

Shrnutí: Monoabecední šifrování nad přirozeným jazykem jsou pozoruhodně nejistá (přirozený jazyk má málo písmen, jež jsou dost nerovnoměrně rozdělena). V současné době proto používáme buď monoabecední šifrování nad umělým jazykem nebo polyabecední šifrování.

Nejpopulárnější monoabecední šifrování je DES – Data Encryption Standard. Tento algoritmus byl vyvinut firmou IBM a v roce 1977 se stal standardem. DES nešifruje písmena, nýbrž symboly 0 a 1, a to 64 naráz (v případě, že používáme DES k zašifrování obyčejného textu, musí být písmena nejdřív přeložena do řetězce bitů. Jednou z takových metod je použití ASCII kódu. Tedy DES je monoabecední algoritmus nad abecedou {(a_{1}, …, a_{64}) : a_{i} ∈ {0, 1}}. Jako klíč lze se bere posloupnost binárních řetězců z 56 bitů, tj. všech klíčů je právě 2^{56} ≈ 7·10^{16}.

Tento algoritmus byl od samého počátku úplně publikován – jednalo se o první algoritmus historii, kdy se to stalo. DES se převážně úspěšně používá v bankovnictví.

V roce 1990 předvedli Biham a Shamir, že DES je algoritmus vyvinutý podle vynikajících principů; všeobecně však převládá obecné přesvědčení, že by délka klíče měla být větší. Biham a Shamir zároveň ukázali, že mnoho algoritmů příbuzných DESu lze jejich chytrou analýzou rozbít.

20  Caesar neboli Každý začátek je lehký!

Proč jednoduše, když to jde i složitě?

Slovo, věta a z šifer se

zvedá poznaný život, náhlý

smysl. Gottfried Benn

V této kapitole se budeme zabývat převážně polyabecedními šifrováními. U těchto šifrování se písmena zprávy nešifrují pomocí téže abecedy. Zejména tedy nelze polyabecední šifrování popsat jednoduše pomocí abecedy zprávy a pod ní napsané abecedy kryptogramu.

Přiřazení písmene zprávy k nějakému písmenu kryptogramu nesmí být prováděno svévolným způsobem. Šifrování musí splňovat silný požadavek jednoznačnosti; v opačném případě by nebylo možné žádné dešifrování. Jinak řečeno: kdyby nebylo šifrování jednoznačné, nenáchazel by se příjemce principiálně v žádné lepší situaci než Mr. X!

Typickým příkladem algoritmu, u kterého není šifra jednoznačná, je homofonní šifra. Takovéto algoritmy budou předvedeny v následujícím odstavci. Největší část kapitoly bude však věnována zkoumání takovýchto polyabecedních šifer, které vzniknou z kombinací monoabecedních algoritmů; takovýmto charakteristickým příkladem je Vigienérevo šifrování.

2.1 Zneprůhlednění četností

Jak můžeme dosáhnout toho, že všechna písmena kryptogramu se v něm vyskytují se stejnou četností? Zcela jednoduše: Šifrovací předpis přiřadí každému písmeno nikoliv znak, nýbrž množinu znaků (v našem příkladu to budou dvojice čísel), a to tak, že jsou splněny následující podmínky:

– Aby bylo dešifrování jednoznačné, musí být množiny příslušející různým písmenů zprávy disjunktní.

– Počet písmen kryptogramu, které patří k nějakému písmenu zprávy, odpovídá četnosti tohoto písmene.

V následujícím příkladu homofonní šifry jsou znaky kryptogramu tvořeny 100 dvojicemi číslic 00, 01, …, 99:

Homofonní šifra

Písmeno Zašifrování (němčina)
a  10 21 52 59 71
b  20 34
c  28 06 80
d  04 19 70 81 87
e  09 18 33 38 40 42 53 54 55 60 66 75 85 86 92 93 99
f  00 41
g  08 12 97
h  07 24 47 89
i  14 39 46 50 65 76 88 94
j  57
k  23
l  16 03 84
m  27 11 49
n  30 35 43 62 63 67 68 72 77 79
o  02 05 82
p  31
q  25
r  17 36 51 69 74 78 83
s  15 26 45 56 61 73 96
t  13 32 90 91 95 98
u  29 01 58
v  37
w  22
x  44
y  48
z  64

Při zašifrování se přiřadí písmenu zprávy náhodně jeden z příslušných znaků kryptogramu. Příjemce pak může pomocí výše uvedené tabulky jednoduš dešifrovat následující text:

00097449599505371089483102139964713748836696427752.

Protože znaky byly vybrány náhodně, vyskytuje se každý znak (v našem případě dvojice číslic) stejně často (odtud jméno ţhomofonní�). Případný kryptoanalytik je tak postaven před podstatně těžší úlohu než při zkoumání monoabecedního šifrování.

Avšak neměli bychom příliš jásat, neboť kryptoanalýza je také zde možná. Analýza je založena na pozorování, že četnosti písmen kryptogramu jsou sice stejné, ale že z uvažování nad dvojicemi znaků kryptogramu můžeme stejně dobře získat novou informaci. Budeme diskutovat dva příklady

• Uvažuje-li Mr. X ekvivalent písmena c, tedy dvojici 28, zjistí, že v úvahu jako přirozený následník přichází pouze určitá písmena kryptogramu. Toto jsou dvojice 07, 24, 23, 47, 89, tedy ekvivalenty písmen h a písmenk.

• Zkoumáme-li ekvivalent písmene e, tedy např. 99, zjistíme, že jisté znaky kryptogramu se vyskytují jako předchůdci a následníci 99 – a to prakticky stejně početně. Musí se pak jednat o ekvivalenty písmene i.

2.2 Vigenerova šifra

Vigenerovo zašifrování bylo veřejnosti zpřístupněno v roce 1586 francouzským diplomatem Blaisem de Vigenere (1523–1596). Základní idea je používat střídavě různá monoabecední šifrování. Tato idea je tak přirozená, že variace Vigenerova zašifrování byly vícenásobně znovuobjeveny. Dva z nejdůležitějších předchůdců byli Johannes Trithemius (1462 – 1516), jehož knihy Poligraphia (1518) a Steganographia (1531) byly uveřejněny posmrtně, a Giovanni Battista Della Porta (1538-1615), vynálezce přístroje Camera obscura, který v roce 1558 ve své knize Magia naturalis zveřejnil polyabecední algoritmus, který vykazuje velkou podobu s Vigenerovou šifrou.

V této kapitole se budeme hlavně zabývat Vigenerovou šifrou, která je nejznámější mezi všemi periodickými polyabecedními algoritmy, a to ze dvou důvodů:

• Vigenerova šifra je prototyp mnoha algoritmů, které byly profesionálně používány až do našeho století (Caesarova šifra je zvláštním případem Vigenerovy šifry pro klíčové slovo délky 1).

• Při kryptoanalýze se seznámíme se dvěmi extrémně důležitými metodami, a to Kasiského testem a Friedmanovým testem.

Abychom mohli použít Vigenerův algoritmus, potřebujeme dvě věci: klíčové slovo a Vigenerův čtverec. Tento čtverec se skládá z 26 abeced, které jsou napsány pod sebou takovým způsobem, že první abeceda je obyčejná abeceda, druhá abeceda je o jedno písmeno posunutá, třetí o dvě atd. Jinak řečeno: Vigenerův čtverec sestává z 26 posouvacích šifer v přirozeném pořadí.

24  Proč jednoduše, když to jde i složitě?

Vigenerův čtverec

Zpráva:  a b c d e f g h i j k l m n o p q r s t u v w x y z
Kryptogram:  A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
B C D E F G H I J K L M N O P Q R S T U V W X Y Z A
C D E F G H I J K L M N O P Q R S T U V W X Y Z A B
D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
E F G H I J K L M N O P Q R S T U V W X Y Z A B C D
F G H I J K L M N O P Q R S T U V W X Y Z A B C D E
G H I J K L M N O P Q R S T U V W X Y Z A B C D E F
H I J K L M N O P Q R S T U V W X Y Z A B C D E F G
I J K L M N O P Q R S T U V W X Y Z A B C D E F G H
J K L M N O P Q R S T U V W X Y Z A B C D E F G H I
K L M N O P Q R S T U V W X Y Z A B C D E F G H I J
L M N O P Q R S T U V W X Y Z A B C D E F G H I J K
M N O P Q R S T U V W X Y Z A B C D E F G H I J K L
N O P Q R S T U V W X Y Z A B C D E F G H I J K L M
O P Q R S T U V W X Y Z A B C D E F G H I J K L M N
P Q R S T U V W X Y Z A B C D E F G H I J K L M N O
Q R S T U V W X Y Z A B C D E F G H I J K L M N O P
R S T U V W X Y Z A B C D E F G H I J K L M N O P Q
S T U V W X Y Z A B C D E F G H I J K L M N O P Q R
T U V W X Y Z A B C D E F G H I J K L M N O P Q R S
U V W X Y Z A B C D E F G H I J K L M N O P Q R S T
V W X Y Z A B C D E F G H I J K L M N O P Q R S T U
W X Y Z A B C D E F G H I J K L M N O P Q R S T U V
X Y Z A B C D E F G H I J K L M N O P Q R S T U V W
Y Z A B C D E F G H I J K L M N O P Q R S T U V W X
Z A B C D E F G H I J K L M N O P Q R S T U V W X Y

Klíčovým slovem může být libovolná posloupnost písmen; pro náš demonstranční případ vybereme slovo ţVENUSE�.

Klíčové slovo: V E N U S E V E N U S E
Zpráva:  p o l y a b e c e d n i.

Při šifrování určí písmeno klíčového slova, které stojí nad určitým písmenem zprávy příslušnou abecedu tj. řádku ve Vigenerově čtverci a pomocí této abecedy bude písmeno zprávy šifrováno.

Celkem tedy máme

Klíčové slovo: V E N U S E V E N U S E
Zpráva:  p o l y a b e c e d n i
Kryptogram: K S Y S S F Z G R Y F M.

Je jasné, že takováto šifrovací metoda staví Mr. X před podstatně větší problémy, než je tomu při monoabecedním šifrování. Četnost písmen je daleko rovnoměrnější, což lze poznat i na našem krátkém příkladu. Např. písmeno zprávy e bylo zašifrováno do Z a R, písmeno kryptogramu S vzniklo ze tří různých písmen zprávy (o, y, a).

2.3 Kryptoanalýza

Přirozeně lze i pomocí dnešních metod prolomit text zašifrovaný pomocí Vigenerovy šifry. Totiž dostatečně dlouhý text vykazuje mnoho statisticky zachytitelných pravidelností, které umožňují zjištění klíčového slova. První uveřejněný útok byl publikován v roce 1863 pruským majorem dělostřelectva Friedrichem Wilhelmem Kasiským (1805–1881). Druhá metoda se připisuje plukovníkovi Williamu Fredericku Friedmanovi (1891–1969). Obě metody slouží k určení délky klíčového slova. Protože oba testy mají i mimo speciální analýzu Vigenerovy šifry svůj dalekosáhlý a zásadní význam, představíme podrobně obě metody.

Předpokládejme, že Mr. X zachytil následující text, o kterém ví (nebo se domnívá), že je zašifrován pomocí Vigenerovy šifry:

Kryptogram

U E Q P C VC K A H V N R Z U RN L A O
K I R V G J T D V R V R I C V I D L M Y
I Y S B C CO J Q S Z N Y M B VD L O K
F S L M W E F R Z A V I Q M F J T D I H
C I F P S EB X M F F T D M H ZG N M W
KA X A U VU H J H N U U L S V S J I P
J C K T I V S V M Z J E N Z S KA H Z S
U I H Q V I B X M F F I P L C X E Q X O
CA V B V RTWM B L N G N I VR L P F
VT D M H ZG N MW K R X V R QE K V R
LK D B S E I P U C E AW J S BA P M B
V S Z C F U E G I T L E U O S J O U O H
UA V A G Z E Z I S Y R H V R ZH U M F
RR E M WKU L K V K G H A H F E U B K
LR G M B J I H L I I FW M B ZH U M P
L E U W G RB H Z O L C K C W THW D S
I L D A G VN E M J F R V Q S V I Q M U
V S W M Z CT H I I WG D J S X E O W S
J T K I H KE Q

2.3.1 Kasiského test

Ačkoliv tato působivá metoda analýzy polyabecedních algoritmů byla poprvé publikována Kasiským, musíme se zmínit, že anglický matematik Charles Babbage (1792–1871), který je mimo jiné znám svou koncepcí předchůdce moderního počítače, provedl neuveřejněná zkoumání i v kryptografii. Mj. vyvinul Kasiského test už v roce 1854, tj. devět let před Kasiským.

Test je založen na následující myšlence: vyskytují-li si ve zprávě dvě posloupnosti stejných písmen (např. v němčině slovo ein), mohou obecně odpovídající posloupnosti v kryptogramu dopadnout různě. Jsou-li ale obě počáteční písmena posloupností zašifrována pomocí téhož písmene klíčového slova, jsou i obě písmena kryptogramu stejná. V tomto případě bude také druhé písmeno posloupnosti v zprávě zašifrováno pomocí téhož písmene klíčového slova; tedy obdržíme i v kryptogramu stejné písmeno. To tedy znamená: Budou-li obě počáteční písmena posloupností zprávy zašifrována pomocí téhož písmene klíčového slova, pak sestávají obě posloupnosti v kryptogramu ze stejných písmen.

Kdy může nastat případ, že dvě písmena jsou zašifrována pomocí téhož písmene klíčového slova? Právě tehdy, když se klíčové slovo mezi tato písmena n-krát vejde pro vhodné přirozené n.

*

Když nyní Mr. X najde v kryptogramu dvě posloupnosti skládající se se stejných písmen, pak se může domnívat, že jejich vzdálenost je několikanásobek délky klíče. Tato pravděpodobnost se řídí pravidlem ţčím delší, tím milejší�: stejná písmena nevypovídají, že víme něco o délce klíče, a také dvojice složené ze stejných písmen by mohly vzniknout náhodně. Z posloupností třech nebo více písmen již může Mr. X dostatečně spolehlivě usuzovat na délku klíčového slova. V našem případě pak zjistí:

Posloupnost  Odstup Rozklad na součin

prvočinitelů odstupu

JTD  50  2 · 5 · 5
VIQM  265  5 · 53
TDMHZGNMWK  75  2 · 3 · 3 · 5
MWK  75  3 · 5 · 5

Největší společný faktor je 5. Optimistický kryptoanalytik by mohl říci, že ţže délka klíčového slova je 5� (ve skutečnosti funguje Kasiského test v praxi velmi dobře). Pokud je ale kryptoanalytik opatrný, mluví pouze o silné indicii pro délku klíčového slova 5. Jsou dva důvody pro jeho opatrnost:

1. Mohl by nastat případ, že se vyskytují dvě posloupnosti kryptogramu ze tří nebo více stejných písmen, které mají vzdálenost nedělitelnou pěti. Pak bychom získali jako největší společný dělitel jedničku! (V našem případě tento případ skutečně nastane: posloupnost KAH se vyskytne dvakrát a sice s odstupem 128 = 2 · 2 · 2 · 2 · 2 · 2.) To znamená, že nesmíme počítat největší společný dělitel ţslepě� pomocí počítače, ale musíme jej určit ţcitem�. Musíme tedy zřejmé chyby vypustit.

2. Právě proto bychom mohli přijít na myšlenku, že délka klíče by nemusela být pouze 5, nýbrž 10, 15 nebo 30 (neboť faktory 2 a 3 se vyskytují také dostatečně často). Jinak řečeno: Kasiského test nám poskytuje délku klíčového slova až na násobek.

Kryptogram

UE Q P C VC K A H V N R Z U RN L A O
K I R V G J T D V R V R I C V I D L M Y
I Y S B C CO J Q S Z N Y M B VD L O K
F S L MW E F R Z A V I Q M F J T D I H
C I F P S EB X M F F T D M H ZG N MW
KA X A U VU H J H N U U L S V S J I P
J C K T I V S V M Z J E N Z S KA H Z S
U I H Q V I B X M F F I P L C XE Q X O
CA V B V RTWM B L N G N I VR L P F
VT D M H ZG N MW K R X V R QE K V R
LK D B S E I P U C E AW J S BA P M B
V S Z C F UE G I T L E U O S J O U O H
UA V A G Z E Z I S Y R H V R ZH U M F
RR E MWKU L K V K G H A H F E U B K
LR G M B J I H L I I FW M B ZH U M P
L E U W G RB H Z O L C K C WTHW D S
I L D A G VN E M J F R V Q S V I Q M U
V SWM Z CT H I I WG D J S XE O W S
J T K I H KE Q

Z výše uvedeného důvodu budeme prezentovat druhou metodu; tato určuje řádový odhad délky klíčového slova. Kombinace těchto obou metod je prakticky úplně spolehlivá.

2.3.2 Friedmanův test

Tento postup byl vyvinut Williamem Friedmanem v roce 1925. V tomto testu se ptáme na to,s jakou šancí se náhodně vybraný pár písmen ze zprávy sestává ze stejných písmen. Odpověď je pak dána indexem koincidence.

Představme si nejprve libovolnou posloupnost písmen délky n. Buď n_{1} počet písmen a, n_{2} počet písmen b, …, n_{26} počet písmen z.

Zajímáme se o počet dvojic, kdy jsou obě písmena rovna aa. (Nepožadujeme, aby se uvažované dvojice skládaly za sebou následujích písmen.) Pro počet prvního a máme práve n_{1} možností, pro výběr druhého a zbývá n_{1} − 1 možností. Protože nezáleží na pořadí písmen, je počet hledaných dvojic roven \frac{n_{1}·(n_{1}−1)}{2}.

Je tedy počet dvojic, kdy jsou obě písmena stejná, roven

\frac{n_{1} · (n_{1} − 1)}{2} + \frac{n_{2} · (n_{2} − 1)}{2} + … + \frac{n_{26} · (n_{26} − 1)}{2} = ∑_{i=1}^{26} \frac{n_{i} · (n_{i} − 1)}{2}.

Šance obdržení dvojice složené ze stejných písmen je určena následujícím výrazem:

I = \frac{∑_{i=1}^{26} n_{i} · (n_{i} − 1)}{n · (n − 1)}

a nazývá se Friedmanův index koincidence. Friedman sám značil toto číslo jako κ, proto se občas pro metodu, kterou v dalším předvedeme, používá název kappa-test.

*

Přibližme se nyní tomuto indexu koincidence z jiné strany. Předpokládejme, že bychom věděli, že se v našem textu vyskytuje písmeno a s pravděpodobnpstí p_{1}, písmeno b s pravděpodobnpstí p_{2}, …, písmeno z s pravděpodobnpstí p_{26}. (Konkrétní hodnoty pro pravděpodobnosti p_{i} můžeme udat, jestliže víme, ze kterého jazyka text pochází.)

Představme si nyní dvě libovolně vybraná písmena našeho textu. Pravděpodobnost, že první písmeno je rovno a je p_{1}; tedy přibližná pravděpodobnost, že obě písmena jsou rovna a je p_{1}^{2} (pokud n je dostatečně velké, lze takto vzniklou chybu zanedbat). Odpovídající vztahy platí i pro ostatní písmena. Tedy pravděpodobnost toho, že obě písmena jsou si rovna je

p_{1}^{2} + p_{2}^{2} + … + p_{26}^{2} = ∑_{i=1}^{26}p_{i}^{2}.

Toto číslo závisí přirozeným způsobem na pravděpodobnostech p_{1}, p_{2}, …, p_{26}. Spočtěme si dva příklady.

• Pro text v německém jazyce máme

∑_{i=1}^{26}p_{i}^{2} = 0.0762.

To znamená, že náhodně zvolená dvojice písmen se skládá ze dvou stejných písmen s šancí 7,62%.

• Představme si obráceně zcela náhodný text, tj. text, ve kterém jsou písmena divoce promíchána. Pak každé písmeno se zde vyskytne se stejnou pravděpodobností

p_{i} = \frac{1}{26}.

V tomto případě pak

∑_{i=1}^{26}p_{i}^{2} = ∑_{i=1}^{26} \frac{1}{26^{2}} = \frac{1}{26} = 0.0385.

Šance, že v takovémto textu najdeme dvě stejná písmena, se nám zmenšila na polovinu.

1. Pokud známe pravděpodobnosti p_{1}, p_{2}, …, p_{26} (jako je tomu např. s němčinou či angličtinou), pak víme, že součet čtverců pracděpodobností je přibližně roven indexu koincidence:

I ≈ ∑_{i=1}^{26}p_{i}^{2}.

Obecně lze pak dokázat, že index koincidence (nebo stejně platně i ∑_{i=1}^{26} p_{i}^{2}) je tím větší, čím je text nepravidelnější, a menší, čím je text pravidelnější. Hodnota 0.0385 je absolutní minimum proi index koincidence. Totiž

0 ≤ ∑_{i=1}^{26}(p_{i} − \frac{1}{26})^{2} = ∑_{i=1}^{26}p_{i}^{2} − \frac{1}{26}.

2. Vraťme se na okamžik k monoabecedním šifrováním. Protože monoabecední šifrování je pouze permutace písmen, zůstává rozdělení četností zachováno. (Četnosti jednotlivých písmen jsou permutovány zároveň s písmeny). Např. četnost 0.17 už nepatří písmenu e, nýbrž jeho ekvivalentu v kryptogramu.

Máme tedy, že při monoabecedním šifrování index koincidence zůstává zachován, zatímco při polyabecedním šifrování klesá, vzhledem k tomu, že polyabecední šifrování bylo vytvořeno za tím účelem, aby se navzájem vyrovnaly četnosti jednotlivých písmen.

Z toho lze odvodit test, který nám ukáže, zda byl kryptogram vytvořen monoabecedním šifrováním nebo ne: Nejprve vypočteme index koincidence kryptogramu. Je-li tento index přibliženě 0.0762, je šifrování pravděpodobně monoabecední. Je-li index koincidence zřetelně menší, můžeme vycházet z toho, že text byl šifrovan polyabecedním šifrováním.

*

Nyní použijeme index koincidence k výpočtu délky klíčového slova pro text zašifrovaný Vigenerovou šifrou. Cílem je určit index koincidence textu bez jeho znalosti. Protože bylo použito polyabecedního algoritmu, je index koincidence menší než 0.0762. Ale o kolik menší? Odpověď je, že to závisí na délce klíčového slova.

Předpokládejme, že klíčové slovo má délku l a skládá se z navzájem různých písmen.

Rozepišme náš kryptogram do l sloupců. Pak se v prvním sloupci nacházejí písmena číslo 1, l + 1, 2l + 1, …, tedy všechna ta písmena, která byla zašifrována pomocí prvního písmene klíčového slova. Podobně se v druhém, …, l-tém sloupci nacházejí všechna ta písmena, která byla zašifrována pomocí druhého, …, l-tého písmene klíčového slova.

Písmeno S_{i} S_{1}  S_{2}  S_{3}  S_{l}

klíč. slova

1 2 3 l
l + 1 l + 2 l + 3  2l
2l + 1 2l + 2 …  3l
3l + 1 …
…

Podrobnějším studiem výše uvedeného schématu lze vypočítat index koincidence. První pozorování: Každý sloupec byl získán pomocí monoabecedního šifrování (dokonce pomocí posouvací šifry). Šance, že zde vybereme dvojici stejných písmen, je tedy rovna 0.0762. Uvažme nyní dvojice písmen, která stojí v různých sloupcích. Protože příslušné šifrovací abecedy byly vybrány ţnáhodně�, může se takováto dvojice skládat ze stejných písmen pouze náhodným způsobem.

Pravděpodobnost pro tento jev je podstatně nižší než 0.0762, tj. přibližně 0.0385. (Je to přesně \frac{1}{26}, jestliže je klíčové slovo náhodná posloupnost písmen. Pokud ne, je tato pravděpodobnost o něco vyšší.) Druhé pozorování: Vypočtěme nyní počet dvojic písmen ze stejných sloupců a z různách sloupců. Má-li náš kryptogram celkem n písmen, pak v každém sloupci stojí přesně n/l písmen (Vzdáme se uvažování zaokrouhlovacích chyb; budeme předpokládat, že text je tak dostatečně dlouhý, že zaokrouhlovací chyby se neprojeví.)

Pro výběr jednoho písmene máme přesně n možností. Je-li toto písmeno zvoleno, pak je pevně určen i sloupec, ve kterém leží. V tomto sloupci máme k dispozici ještě zbývajících n/l − 1 písmen, tedy právě tolik možností pro výběr druhého písmene. Je tedy počet dvojic písmen, která se nacházejí v tom samém sloupci roven

n · (\frac{n}{l} − 1)/2 = \frac{n · (n − l)}{2l}.

Protože máme k dispozici právě n−n/l písmen mimo určený sloupec, je počet dvojic písmen z různých sloupců rovna

n · (n − \frac{n}{l})/2 = \frac{n^{2} · (l − 1)}{2l}.

Na základě výše zmíněného pak máme, že očekávaný počet A dvojic stejných písmen je roven

A = \frac{n · (n − l)}{2l} · 0.0762 + \frac{n^{2} · (l − 1)}{2l} · 0.0385.

Pravděpodobnost, že získáme dvojici složenou ze stejných písmen, je rovna

\frac{A}{n · (n − 1)/2)} = \frac{(n − l)}{l · (n − l)} · 0.0762 + \frac{n · (l − 1)}{l · (n − 1)} · 0.0385,

tj. po úpravě

\frac{A}{n · (n − 1)/2)} = \frac{1}{l · (n − 1)} · [0.0377 · n + l · (0.0385 · n − 0.0762)].

Zároveň víme, že index koincidence I je aproximací tohoto čísla; proto platí

I = \frac{0.0377 · n}{l · (n − 1)} + \frac{0.0385 · n − 0.0762}{n − 1}.

Vyjádříme-li si z výše uvedeného vztahu l, získáme důležitou Friedmanovu formuli pro délku klíčového slova:

l ≈ \frac{0.0377 · n}{(n − 1) · I − 0.0385 · n + 0.0762} .

*

Použijme nyní tuto formuli na náš příklad. Najdeme-li všechna n_{i}, obdržíme n = 368, ∑_{i=1} 26n_{i}^{2} = 5924. Máme tedy

I = \frac{5924}{135056} = 0.0439.

Jedná se tedy s velkou pravděpodobností o polyabecední šifrování. Spočtěme nyní délku klíčového slova l :

l ≈ 6.5.

To ukazuje současně s výsledkem testu Kasiského na to, že délka klíčového slova je skutečně 5 (a ne 10, 15 nebo 20).

2.3.3 Určení klíčového slova

Jakmile je zjištěna délka klíčovího slova, jde o to poznat klíčové slovo samotné. Ale to už není tak těžké.

Pokud kryptoanalytik Mr. X zná délku klíčového slova, ví, že písmena č. 1, l+ 1, 2l + 1, … příp. č. 2, l + 2, 2l + 2, … atd. byla získána pomocí monoabecedního šifrování (dokonce pomocí posouvací šifry). Zpravidla tedy stačí nalézt ekvivalent písmene e.

V našem příkladu je l = 5. Ze 74 písmen první ţmonoabecední� části je 14 rovno V. Proto odpovídá e písmenu V. Z Vigenerova čtverce pak obdržíme , že první písmeno klíčového slova je ţR�. Analogicky, Ze 74 písmen druhé, třetí, čtvté a páté ţmonoabecední� částí je 11 rovno E, 8 rovno H, 21 rovno M a 13 rovno S. Proto odpovídá e písmenu E, H, M a S. Opětovným nahlédnutím do Vigenerova čtverce pak obdržíme , že další písmena klíčového slova jsou po řadě ţA�, ţD�, ţI� a ţO�. Rozšifrování textu je již standartní záležitostí. Snadným porovnáním získáme

Zpráva

de nhoec h s t e n o rgan i s a
t i ons s t a n d e r f uhrd i e k
ryp to l o g i e i n v ened i gw
os i e in f o r m e i n e r s t a a t
l i c henb u e r o t a e t i g k e i
tau sgeu e b t wu r dee s g ab
sch lue s s e l s e k r e ta e r e
d i e ihrb u e r o im doge n p a
l a s that t e n un d fuer i h r
e t a e t i g k e i t r u ndze h nd
uka ten imm o n a t bekame n
e swurde d a f u e r ge so r g t
da s s s i ew a e h r e nd ih r e r
ar b e i tn i c h t g e s toe r tw
ur d ens i e d u r f t en ih r e b
ue r osab e r a u c h n i ch t v e
r l a s sen b e v o r s i ee i n e g
e s t e l l t e a u f g a bege l o e
s t h at te n

2.3.4 Závěrečné poznámky

Viděli jsme, že každé Vigenerovo šifrování s dostatečně krátkým klíčem (aby se mohla ke slovu dostat pravděpodobnost ve sloupcích) lze jednoduchým způsobem rozšifrovat.

Uvažujme nyní Vigenerovo šifrování s dlouhým klíčovým slovem. Budeme předpokládat, že klíčové slovo je dlouhé právě tak, jak je délka zprávy. Ukážeme dva triky, které Mr. X znemožní účinně využít výše uvedených testů.

Trik č.1 Mohli bychom se pokusit, použít jako klíč text knihy. Takový klíč má zcela určitě tu výhodu, že ho lze přenést bez velkých problémů. Např. stačí podat příjemci informaci Eugen Eichhorn: Felix Hausdorff - Paul Mongré, aby mohl začít dešifrovat kryptogram pomocí následujícího slova:

As you have already heard, Hausdorff was born in the Silesian metropolis Breslau, today called Wroclaw. In the last days of the Second World War, the German Wehrmacht declared Breslau a fortress; the result was its complete destruction. That happened …

V případě použití takovéhoto klíče se všechny metody na určení délky klíče minou účinkem. Protože však klíč tvoří souvislý text nějaké řeči (angličtina, němčina, apod.), působí na kryptogram statisticky signifikantní data, takže nemůžeme takovouto šifru označit za zcela bezpečnou. První, kdo odhalil tuto slabinu, byl opět Friedman. Proto půjdeme ještě o kus dál.

Trik č.2 V případě triku č.1 mohl Mr. X ještě použít nějakou statistiku v důsledku tvaru klíčového slova. Proto nyní zvolíme za klíčové slovo prakticky nekonečnou, náhodnou posloupnost písmen, na kterou si se statistickými testy nepřijdeme. Např. lze za ni zvolit výsledky opakování vrhu ideální 26-hranou kostkou. Lze pak ukázat, že takovýto způsob šifrování je dokonce teoreticky bezpečný! Jinak řečeno: nabízí nám perfektní bezpečnost.

Takovýmito perfektními systémy se budeme zabývat v následující kapitole.

34  Proč jednoduše, když to jde i složitě?

Dopřejme si jistoty neboli trochu teorie

Mnozí lidé používají svoji inteligenci k zjednodušení, mnozí k zesložitění. (Erich Kästner)

V této kapitole se pokusíme vytvořit teoretický základ pro naše dřívější úvahy. Zejména vymezíme pojem ţperfektní bezpečnosti� šifrovacího systému.

3.1 Šifrovací systémy

Podle našich předchozích představ si dohodnou odesílatel a příjemce nějaký klíč a zašifrují s ním zprávu. Správný pohled na věc se od této představy jemně odlišuje. Budeme nyní uvažovat systémy, které sestávají z nějaké množiny zpráv, příslušných kryptogramů a klíčů. V případě, že bychom následující myšlenky chtěli provést zcela precizně, museli bychom se držet axiomatiky; pro naše účely však bude lepší vysvětlení pojmů pomocí typických příkladů.

Takovýmto typickým příkladem množiny zpráv je sbírka matematických knih v knihovně sekce matematika týkajících se kódování. Získáme pak šifrovací systém, pokud budeme navíc uvažovat všech 312 afinních šifer s příslušnými kryptogramy. Pro jiný případ stačí vzít všechna slova cizího původu vyskytující se v tomto textu, všech 26 aditivních posouvacích šifrování a výsledné kryptogramy.

Zaveďme následující označení. Pomocí písmene M (messages) označíme množinu všech zpráv, C (cryptogram) množinu všech kryptogramů (obvykle se jedná o řetězce nad konečnými abecedami Σ_{1} a Σ_{2}) a K (key) množinu všech klíčů. Šifrovacím systémem (kryptosystémem) pak nazýváme trojici ⟨M, K, C⟩ spolu s dodatečným předpokladem, že existují funkce (neboli algoritmy) e a d takové, že

e : M × K → C a d : C × K → M a že pro všechna (M, K) ∈ M × K platí:

d(e(M, K), K) = M.

Zejména tedy pro každý klíč K máme invertibilní funkci (transformaci) f_{K} : M → C tak, že f_{K}(M) = e(M, K) a f_{K}^{−1}(f_{K}(M)) = M. Systém (f_{K})_{K∈K} je nazýván šifrovací algoritmus.

Výše uvedená definice byla formulována praotcem moderní kryptografie Claudem E. Shannonem.

Uveďme dvě triviální pozorování:

1. Je možné, že dvě různé transformace převádí tutéž zprávu na jednu transformaci.

2. Skutečnost, že transformace je invertibilní, implikuje |M| ≤ |C|.

3.2 Perfektní bezpečnost

Nyní víme, co je šifrovací systém. Těžištěm tohoto odstavce je podání definice a popisu bezpečného šifrovacího systému.

Intuivně řečeno znamená ţperfektní bezpečnost�, že Mr. X nemá žádnou šanci zvětšit své znalosti o systému, i kdyby měl k dispozici všechno vědění a všechnu počítačovou kapacitu světa.

Předpokládejme nyní, že máme šifrovací systém ⟨M, K, C⟩ a že

(a) p_{i} je pravděpodobnost, že je odeslána zpráva M_{i}, 1 ≤ i ≤ n = |M|; tyto pravděpodobnosti se nazývají a priori (nebo teoretické) pravděpodobnosti a jsou přirozeně každému dobrému kryptoanalytikovi známy.

(b) pravděpodobnost, že je použit klíč K_{j} je k_{j} a výběr klíče nezávisí na zprávě, která je přenášena.

Tyto dvě rozdělení pravděpodobností indukují rozdělení pravděpodobností na množině možných kryptogramů, kde pro jistý kryptogram C, řekněme C_{u}, je pravděpodobnost toho, že ţnáhodný� kryptogram C je roven kryptogramu C_{u}, je určena vztahem

P (C = C_{u}) = ∑ p_{i}k_{j},

kde v sumě na pravé straně sčítáme přes všechny dvojice zpráva-klíč (M_{i}, K_{j}) takové, že e(M_{i}, K_{j}) = C_{u}.

Výše uvedené lze přeformulovat následovně pomocí pojmu náhodné veličiny. Mějme tři náhodné veličiny M, K, C tak, že jev M = M_{i} znamená, že byla odeslány zpráva M_{i} ∈ M, jev K = K_{j} znamená, že byl pro šifrování vybrán klíč K_{j} ∈ K a jev C = C_{u} znamená, že byl zachycen kryptogram C_{u} ∈ C. Zejména tedy P (M = M_{i}) = p_{i} a P (K = K_{j}) = P (K = K_{j}|M = M_{i}) pro všechan i a všechna k.

Připomeňme, že výše uvedená situace je analogická situaci v teorii kódování pro případ zdroje bez paměti. Přitom považujeme zdroj za proud symbolů jisté konečné abecedy. Zdroj má obvykle nějaký náhodný mechanismus, který je založen na statistice situace, která je modelovaná. Tento náhodný mechanismus může být poměrně dost komplikovaný, ale my se budeme pro okamžik soustředit na následující opravdu speciální a jednoduchý příklad. Značí-li X_{i} i-tý symbol vytvořený zdrojem, dohodneme se pak, že, pro každý symbol a_{j}, pravděpodobnost

P (X_{i} = a_{j}) = p_{j}

je nezávislá na i a tedy je nezávislá na všech minulých nebo v budoucnosti vyslaných symbolech. Jinak řečeno, X_{1}, X_{2}, … je právě posloupnost identicky distribuovaných, nezávislých náhodných veličin. Takovýto zdroj nazveme zdrojem s nulovou pamětí nebo zdrojem bez paměti a jeho entropie H je definována jako

H = − ∑ p_{j}logp_{j},

kde sčítáme přes množinu j takových, že p_{j} > 0.

Připomeňme, že jsou-li X_{1}, …, X_{m} náhodné proměnné takové, že každá z nich nabývá pouze konečně mnoha hodnot, lze pak považovat X = (X_{1}, …, X_{m}) za náhodný vektor a definovat souhrnou entropii X_{1}, …, X_{m} jako

H(X_{1}, …, X_{m}) = H(X) = − ∑_{k} p(x_{1}, …, x_{m}) · log_{2} p(x_{1}, …, x_{m}),  (3.1)

kde p(x_{1}, …, x_{m}) = P (X_{1} = x_{1}, X_{2} = x_{2}, …, X_{m} = x_{m}).

Předpokládejme dále, že X je náhodná proměnná na pravděpodobnostním prostoru Ω a A je událost z Ω. Nabývá-li X konečné množiny hodnot {a_{i} : 1 ≤ i ≤ m}, je přirozené definovat podmíněnou entropii náhodné proměnné X určenou událostí A jako

H(X|A) = − ∑_{k=1}^{m} P (X = a_{k}|A)logP (X = a_{k}|A).

Úplně stejně, je-li Y jiná náhodná proměnná nabývající hodnot b_{k} (1 ≤ k ≤ m), definujeme podmíněnou entropii náhodné proměnné X určenou náhodnou proměnnou Y jako

H(X|Y) = ∑_{j} H(X|Y = b_{j})P (Y = b_{j}).

Považujeme H(X|Y) za entropii náhodné proměnné X určenou jistou hodnotou Y zprůměrovanou přes všechny hodnoty, jichž může Y nabývat.

Diskrétní kanál bez paměti je charakterizován vstupní abecedou Σ_{1} = {a_{1}, …, a_{m}} vstupních znaků, výstupní abecedou Σ_{2} = {b_{1}, …, b_{n}} výstupních znaků a maticí P kanálu

P = ( \begin{matrix}p_{11} & p_{12} & … & … & p_{1n−1} & p_{1n} \\ p_{21} & p_{22} & … & … & p_{2n−1} & p_{2n} \\ ⋮ & ⋮ & … & … & ⋮ & ⋮ \\ p_{m−11} & p_{m−12} & … & … & p_{m−1n−1} & p_{m−1n} \\ p_{m1} & p_{m2} & … & … & p_{mn−1} & p_{mn} \end{matrix} ) .

Způsob používání kanálu je následující: každá posloupnost (u_{1}, u_{2}, …, u_{N}) symbolů ze vstupní abecedy Σ_{1} na vstupu se převede na posloupnost (v_{1}, v_{2}, …, v_{N}) téže délky symbolů z výstupní abecedy Σ_{2} na výstup tak, že

P (v_{k} = b_{j}|u_{k} = a_{i}) = p_{ij} (1 ≤ i ≤ m, 1 ≤ j ≤ n),

a to nezávisle pro každé k.

Implicitně je ve výše uvedeném obsaženo, že pro každé i, 1 ≤ i ≤ m platí

∑_{j} p_{ij} = 1.

Matice P s nezápornými hodnotami taková, že součet prvků v každém řádku je roven 1, se nazývá stochastická matice; v teorii náhodných procesů mluvíme o matici přechodu markovského řetězce.

Kapacita komunikačního kanálu je míra jeho schopnosti přenášet informaci. Formální definice je motivována níže uvedeným:

Předpokládejme, že máme diskrétní kanál bez paměti se vstupní abecedou Σ_{1} = {a_{1}, …, a_{m}}, výstupní abecedou Σ_{2} = {b_{1}, …, b_{n}} a maticí P kanálu

P = [p_{ij}]= P (b_{j} obdrženo|a_{i} odesláno).

Přidáme-li k tomuto kanálu zdroj S bez paměti, který vysílá symboly a_{1}, …, a_{m} s pravděpodobnostmi p_{1}, …, p_{m}, pak výstup kanálu můžeme považovat za zdroj J bez paměti, který vysílá symboly b_{1}, …, b_{n} s pravděpodobnostmi q_{1}, …, q_{n}, kde

q_{j} = ∑_{i=1}^{m} P (b_{j} obdrženo|a_{i} odesláno)P (a_{i} odesláno)
= ∑_{i=1}^{m} p_{i}p_{ij}.

Jsou-li U a V dva náhodné vektory, definujeme informaci o U poskytnutou V jako číslo

I(U|V) = H(U) − H(U|V).

Jinak řečeno, I(U|V) vyjadřuje množství nejistoty o U odstraněné V. Totiž, množství informace, průměrně obsažené v jednom znaku zprávy, je entropie vstupního rozdělení H(S) = − ∑_{i} p_{i}logp_{i}. Při přenosu diskrétním kanálem se ztratí informace

H(S/J) = − ∑_{i,j} p_{i,j}logp_{i,j}

průměrně na jeden znak. Zbývá pak H(S)−H(S/J) přenesené informace. Jestliže entropii počítáme v bitech a známe průměrnou dobu τ, kterou kanál spotřebuje na přenos jednoho znaku, je rychlost přenosu

I(S|J) = \frac{H(S) − H(S/J)}{τ} bitů za sekundu.

Často se za jednotku času volí jeden přenos znaku a potom

I(S|J) = H(S) − H(S/J) bitů za jednotku času.

Informace o S podaná pomocí J je pak rovna

I(S|J) = H(S) − H(S|J) = H(S) + H(J) − H(S, J)

a je to funkce, která závisí pouze na pravděpodobnostním rozdělení q_{1}, …, q_{n}, a maticí kanálu P. Proto je přirozené definovat kapacitu C kanálu jako maximální rychlost přenosu, tedy

C = sup I(S|J),  (3.2)

kde supremum je bráno přes všechny zdroje bez paměti S, nebo, ještě přesněji, nad všemi možnými rozděleními pravděpodobností (p_{1}, …, p_{n}).

V dalším tedy můžeme považovat M za zdroj bez paměti s šifrovací funkcí e, přičemž klíče slouží jako komunikační kanál.

Základním pojmem je pojem klíčové ekvivokace zavedený Shannonem H(K|C). ten nám měří průměrnou nejistotu, která nám zůstává po zachycení kryptogramu C. Podobně budeme definovat ekvivokaci zpráv jakožto H(M|C). Občas budeme psát S = ⟨M, K, C⟩ a budeme značit H(S) klíčovou ekvivokaci H(K|C).

Náhodná proměnná zpráv má pak entropii zpráv

H(M) = − ∑ p_{i}logp_{i},

a, jsou-li po řadě K a C náhodné proměnné klíčů a kryptogramů, jsou pak klíčová entropie H(K) a entropie kryptogramů definovány jakožto

\begin{aligned}H(K) & = & − ∑ P (K = K_{i})logP (K = K_{i}), \\ H(C) & = & − ∑ P (C = C_{j})logP (C = C_{j}), \end{aligned}

kde sumace je prováděna přes všechny možné klíče K_{i} a všechny možné kryptogramy C_{j}.

Následující vlastnost ekvivokace vyjadřuje tu skutečnost, že daleko více nejistoty je spjato s klíčem než se zprávou.

Věta 3.2.1 Klíčová ekvivokace je určena ekvivokací zprávy vztahem

H(K|C) = H(M|C) + H(K|M, C).

Důkaz. Připomeňme základní identitu pro entropii

H(X|Y) = H(X, Y) − H(Y).

Můžeme tedy psát

\begin{matrix}H(M|C) & = & H(M, C) − H(C) \\ = & H(M, K, C) − H(K|M, C) − H(C). \end{matrix}

Nyní tedy i

\begin{matrix}H(K|C) & = & H(K, C) − H(C) \\ = & H(M, K, C) − H(M|K, C) − H(C). \end{matrix}

Ale

H(M|K, C) = 0,

protože jakmile je znám kryptogram C a klíč K, je jednoznačně určena i zpráva M a tedy míra neurčitosti je nulová. Tedy

H(K|C) = H(M, K, C) − H(C),

což, porovnáno s výše uvedeným, nám dává dokazovanou identitu.

Důsledek 3.2.2 Klíčová ekvivokace je alespoň tak velká jako ekvivokace zprávy.

Lemma 3.2.3 Pro každý kryptosystém ⟨M, K, C⟩ platí

H(K, C) = H(M) + H(K).

Důkaz. Protože náhodné veličiny K a M jsou nezávislé, víme, že H(M) + H(K) = H(M, K). Stačí tedy ověřit, že H(C, K) = H(M, K) tj. H(C|K) = H(M|K). Poznamenejme, že stačí pro pevný klíč K_{j} ověřit, že H(C|K = K_{j}) = H(M|K = K_{j}). Položme C’ = {C_{u} ∈ C : existuje M_{i} ∈ M tak, že C_{u} = e(M_{i}, K_{j})}. Pak evidentně H(C|K = K_{j}) = H(C′|K = K_{j}), protože pro kryptogramy neležící v C’ je odpovídající podmíněná pravděpodobnost nulová. Připomeňme známý fakt z teorie informace

H(U|V) = 0 právě tehdy, kdyžU = g(V) pro nějakou funkcig.  (3.3)

Zřejmě, protože f_{K_{j}} : M → C’ tak, že f_{K_{j}}(M_{i}) = e(M_{i}, K_{j}) a f_{K_{j}}^{−1}(f_{K_{j}}(M_{i})) = M_{i}, je f_{K_{j}} bijekce. Speciálně, C′|K = K_{j} je funkcí M|K = K_{j} a obráceně M|K = K_{j} je funkcí C′|K = K_{j}. Lehkou úpravou pak obdržíme, že H(M|K = K_{j}) = H(C′|K = K_{j}), tj. H(C|K = K_{j}) = H(M|K = K_{j}).

Důsledek 3.2.4 Pro každý kryptosystém ⟨M, K, C⟩ platí

H(C|K) = H(M|K), H(C, K) = H(M, K) a H(M) ≤ H(C).

Důkaz. Stačí ověřit poslední nerovnost. H(M)+H(K) = H(M, K) = H(C, K) ≤ H(C) + H(K) tj. H(M) ≤ H(C).

Příklady:

(a) Předpokládejme, že ţzprávy� v M jsou písmena slov nějaké (německé) knihy; pravděpodobnost zprávy je pak četnost odpovídajícího písmene; v případě písmene e je pak p(e) ≈ 0.174.

(b) Nyní předpokládejme, že ţzprávy� v M jsou dvojice za sebou následujících písmen slov nějaké (německé) knihy; pravděpodobnost zprávy je pak četnost odpovídajícího bigramu.

Představme si nyní, že Mr. X zachytil kryptogram C. Aby ho byl schopen analyzovat, může (alespoň teoreticky) vyzkoušet všechny zprávy a vždy určit pravděpodobnost toho, že kryptogram C vznikl zašifrováním zprávy M. Označme pak tyto pravděpodobnosti p_{C}(M) = P (M|C); mluvíme pak o a posteriori (nebo pozorovaných) pravděpodobnostech.

Příklady:

(c) Buď M stejné jako ve výše uvedeném příkladu (a); jako algoritmus budeme uvažovat posouvací šifry se všemi 26 možnými klíči. Uvažme, že každé písmeno kryptogramu C má tutéž šanci, že odpovídá určitému písmenu zprávy; např. v 17.4% případů vznikne C z e, v 9.8% případů vznikne z n, atd. Jinak řečeno, pro každý kryptogram C platí p_{C}(M) = p(M) pro každou zprávu M.

(b) Nyní předpokládejme, že každá zpráva v M sestává z prvních 100 písmen každé strany prvního dílu slovníku das große Brockhaus. Algoritmus nechť opět sestává z posouvacích šifer. Pro každou zprávu M je její pravděpodobnost \frac{1}{|M|}, malé, ale stále ještě kladné číslo. Protože je relativně snadné prověřit, zda určitý kryptogram pochází z určité zprávy (rozdělení písmen v kryptogramu musí přesně odpovídat rozdělení písmen ve zprávě), je p_{C}(M) rovno buď jedné nebo nule. To znamená obzvlášť, že pro každý kryptogram je p_{C}(M) ≠ p(M).

Proberme tuto skutečnost podrobněji: Předpokládejme, že kryptoanalytik Mr. X zjistí. že pro jistou zprávu M je p_{C}(M) > p(M). Pak by věděl, že kryptogram C vznikl s vysokou pravděpodobností ze zprávy M. Tzn., že by se analýzou něco nového naučil. To ale nesmí při perfektním systému nastat. V případě, že by bylo p_{C}(M) < p(M), pak by Mr. X věděl, že kryptogram C vznikne s velmi malou pravděpodobností ze zprávy M. I v tomto případě by si Mr. X rozšířil svoje znalosti.

Můžeme tedy definovat: Šifrovací systém ⟨M, K, C⟩ poskytuje perfektní bezpečnost, jestliže pro každý kryptogram C platí

p_{C}(M) = p(M)

pro každou zprávu M.

Jinak řečeno, ⟨M, K, C⟩ je perfektní, pokud jsou a priori pravděpodobnosti rovny pravděpodobnostem a posteriori (viz příklad (c)). Posouvací šifry jsou perfektní, jestliže operují nad jednotlivými písmeny. Mr. X se pak může namáhat jak chce; písmena kryptogramu jsou totiž zcela náhodně rozdělena.

Chceme-li perfektnost šifrovacího systému vyjádřit pomocí náhodných proměnných M a C, je systém perfektní právě tehdy, když M a C jsou nezávislé. Z toho bezprostředně plyne, že šifrovací systém ⟨M, K, C⟩ poskytuje perfektní bezpečnost, jestliže pro každou zprávu M platí

p_{M}(C) = p(C)

pro každý kryptogram C.

*

Věta 3.2.5 Kryptosystém ⟨M, K, C⟩ je perfektní právě tehdy, když

H(M|C) = H(M).

Důkaz. Z teorie informace je známo, že H(M|C) = H(M) právě tehdy, když M a C jsou nezávislé náhodné proměnné tj. to je právě tehdy, když se jedná o perfektní kryptosystém.

Ptejme se nyní, jak můžeme rozpoznat, kdy je šifrovací systém perfektní či nikoliv. K tomu si dokážeme několik jednoduchých kritérií.

1. Kritérium Je-li šifrovací systém ⟨M, K, C⟩ perfektní, pak každá zpráva s odpovídajícím klíčem může být zobrazena na libovolný kryptogram.

Proč platí toto kritérium? Uvažme zprávu M a kryptogram C. Protože ⟨M, K, C⟩ je perfektní, platí p_{C}(M) = p(M). V každém šifrovacím sytému je p(M) > 0, protože každá zpráva se vyskytuje s kladnou pravděpodobností. Dohromady obdržíme p_{C}(M) > 0. To znamená, že existuje klíč, pomocí kterého se zašifruje M do C.Tím je dokázáno první kritérium.

Toto kritérium je velmi užitečné - v ţnegativním smyslu�: Umožní nám rozhodnout, že jisté systémy nejsou perfektní.

2. Kritérium Je-li šifrovací systém ⟨M, K, C⟩ perfektní, pak platí:

|M| ≤ |C| ≤ |K|.

Důkaz. Zřejmě |M| ≤ |C|. Proč platí |C| ≤ |K|? Uvažme libovolnou, pevně zvolenou zprávu M a zašifrujme ji pomocí všech možných klíčů z ⟨M, K, C⟩. Podle prvního kritéria lze M převést do každého možného kryptogramu. Pro každý kryptogram C potřebujeme alespoň jeden klíč (totiž pomocí jednoho klíče nemůžeme M zobrazit na dva různé kryptogramy). Potřebujeme tedy alespoň tolik klíčů, kolik je kryptogramů. Máme tedy |C| ≤ |K|.

3. Kritérium Buď ⟨M, K, C⟩ šifrovací systém tak, že

|M| = |C| = |K|,

ve kterém se všechny klíče vyskytují s toutéž pravděpodobností. Dále předpokládejme, že ke každé zprávě M a ke každému kryptogramu C existuje právě jeden klíč K z ⟨M, K, C⟩ tak, že e(M, K) = C. Pak je ⟨M, K, C⟩ perfektní. Důkaz. Stačí zřejmě ověřit, že pro každou zprávu M_{i} platí P (M = M_{i}|C = C_{j}) = P (M) pro každý kryptogram C_{j}. Z Bayesova vzorce máme

\begin{aligned}P (M = M_{i}|C = C_{j}) & = & \frac{P (C = C_{j}|M = M_{i}) · P (M = M_{i})}{∑_{k=1}^{|K|} P (C = C_{j}|M = M_{k}) · P (M = M_{k})} \\ & = & \frac{P (M = M_{i})}{∑_{k=1}^{|K|} P (M = M_{k})} = P (M = M_{i}), \end{aligned}

neboť P (C = C_{j}|M = M_{k}) = \frac{1}{|K|} nezávisle na j a k.

Přirozeným způsobem jak zvýšit bezpečnost šifrování je vzít různé systémy a kombinovat je. Dvě takovéto metody navržené Shannonem jsou stále základem mnoha praktických kryptosystémů. Jedná se o

• Vážený součet: Jsou-li S_{1} a S_{2} dva kryptosystémy se stejným prostorem zpráv M = M_{1} = M_{2} a 0 < p < 1, je pak jejich vážený součet pS_{1}+(1−p)S_{2} kryptosystém určený následným výběrem: použijeme S_{1} s pravděpodobností p a S_{2} s pravděpodobností 1 − p.

Má-li tedy S_{1} klíče K_{1}, …, K_{m} s pravděpodobnostmi použití p_{i} pro klíč K_{i} a S_{2} má klíče K′_{1}, …, K′_{n} s pravděpodobnostmi použití p′_{j} pro klíč K′_{j}, má pak kryptosystém pS_{1} + (1 − p)S_{2} m + n klíčů K_{1}, …, K_{m}, K′_{1}, …, K′_{n} s pravděpodobnostmi použití pp_{i} pro klíč K_{i} a s pravděpodobnostmi použití (1 − p)p′_{j} pro klíč K′_{j}. Tento postup lze přirozeně rpzšířit na více než dva systémy.

• Součin: Druhý způsob kombinování kryptosystémů S_{1} a S_{2} je to, že nejprve použijeme na naši zprávu kryptosystém S_{1} a potom aplikujeme S_{2} na výsledný kryptogram. Abychom toto mohli provést, musí být nutně C_{1} ⊆M_{2} . Pak můžeme definovat součin jako S_{1}∗S_{2} .

Jsou-li klíče K_{1}, …, K_{m} s pravděpodobnostmi použití p_{i} pro klíč K_{i} v kryptosystému S_{1} a S_{2} má klíče K′_{1}, …, K′_{n} s pravděpodobnostmi použití p′_{j} pro klíč K′_{j}, má pak kryptosystém S_{1}∗S_{2} m.n klíčů (K_{i}, K′_{j}) s pravděpodobnostmi použití p_{i}p′_{j}. Poznamenejme, že skutečně efektivních klíčů může být méně, protože některé se složených transformací mohou splývat.

Poznamenejme, že evidentně platí následující:

Jsou-li S_{1}, S_{2} a S_{3} kryptosystémy tak, že níže uvedené operace jsou definovány, 0 < p < 1, q = 1 − p, pak

S_{3}∗(pS_{1}+qS_{2}) = pS_{3}∗S_{1} + qS_{3}∗S_{2} ,
(pS_{1}+qS_{2})*S_{3} = pS_{1}∗S_{3} + qS_{2}∗S_{3} ,
S_{1}∗ (S_{2}∗S_{3} )= (S_{1}∗S_{2} )∗ S_{3}
S_{1}∗S_{2} není obecně rovno S_{2}∗S_{1} .

3.3 Redundance přirozeného jazyka a bod unicity

Věnujme se nyní chvíli zkoumání přirozeného jazyka jakým je například angličtina. Budeme v dalším považovat angličtinu za jazyk skládající se z abecedy o 27 písmenech, z toho je 26 římských písmen a 1 mezera. První, a velmi špatná aproximace angličtiny je, že vezmeme aproximaci 0. řádu. V tomto případě mají všechny symboly stejnou pravděpodobnost: každý se tedy vyskytne s pravděpodobností \frac{1}{27} a následující text nám ukáže typickou sekvenci symbolů vytvořenou takovýmto zdrojem:

DM QASCJDGFOZYNX ZSDZLXIKUD.

Tato aproximace vůbec nevyužívá relativní četnosti symbolů použitých v anglickém jazyce. Použijeme-li odhady těchto četností, můžeme vytvořit aproximaci 1. řádu, jejímž typickým příkladem je

OR L RW NILI E NNSBATEI.

Ačkoliv je tento přístup zřejmější než aproximace 0. řádu, stále zde není žádná informace o vzájemné závislosti sousedních písmen. Tomuto lze vyhovět například Markovovým zdrojem 1. řádu, kde můžeme použít podmíněné pravděpodobnosti založené na četnostech dvojic písmen tj. digramů:

P (i|j) = p(i, j)/p(j),

kde p(i, j) je pravděpodobnost výskytu digramu (i, j) a p(i|j) je podmíněná pravděpodobnost výskytu písmene i za předpokladu, že předcházející písmeno je j.

To je však velmi časově náročné a Shannon místo toho navrhl použít metodu Monte Carlo, která má stejný efekt.

Vyberme náhodně text či texty. Náhodně z textu vyberme první písmeno jakožto první symbol X_{1}. Předpokládejme bez újmy na obecnosti, že je to např. B. Opět náhodně nalistujme nějakou stránku textu a pokračujme na ní dále, až narazíme na první výskyt B. Vezměme za X_{2} písmeno textu bezprostředně za B. Použijeme-li výše uvedené metody, lze obdržet Markovovu aproximaci 1. řádu pro angličtinu:

OUCTIE IN ARE AMYST TE TUSE SOBE CTUSE.

Shannonovu metodu lze použít na to, abychom získali lepší aproximaci tak, že vybereme písmena z textu vzhledem k dvěma předchozím písmenům. Např., Markovovou aproximací druhého řádu je posloupnost

HE AREAT BEIS THAT WISHBOUT SEED DAY OFTE, AND HE IS FOR THAT MINUMB LOOTS WILL AND GIIRLS, A DOLL WILL IS FRIECE ABOARICE STRED SAYS.

Použijeme-li Shannonovu metodu s Cicerovým dílem de Senectute, obdrží velmi zřetelnou Markovovu aproximaci latiny:

IENEC FES VIMONILLITUM M ST ER PEM ENIM PTAUL

(Markovova aproximace 1. řádu)

SENECTOR VCI QUAEMODOMIS SE NON FRATURDIGNAVIT SINE VELIUS

(Markovova aproximace 2. řádu).

Teoreticky může být tato metoda použita pro aproximace libovolně vysokého řádu. Je však více než namáhavé provádět už aproximace třetího řádu. Lze však akceptovat to, že už aproximace druhého řádu už je přijatelná.

Alternativní přístup navržený Shannonem bylo modelování angličtiny nikoliv jako zdroje písmen, nýbrž jako zdroje s množinou anglických slov, jakožto základní abecedou. Shannon dává přednost náhodnému výběru z textů před metodou četnosti anglických slov. Uveďme následující aproximace:

REPRESENTING AND SPEEDILY IS AN GOOD APT OR COME CAN DIFFERENT NATURAL HERE HE THE A IN CAME THE TO OF THE EXPERT GRAY COME TO FUR-NISHES THE LINE MESSAGE HAD BE THESE

(slovní aproximace 1. řádu)

THE HEAD AND IN FRONTAL ATTACK ON AN ENGLISH WRITER THAT THE CHARACTER OF THIS POINT IS THE-REFORE ANOTHER METHOD FOR THE LETTERS THAT THE TIME OF WHOEVER TOLD THE PROBLEM FOR AN UNEXPECTED.

(Markovova aproximace 2. řádu).

Budeme tedy v dalším považovat přirozené jazyky za zdroje s entropií. Pokusíme se podat jisté odhady a interpretace této entropie, kterou budeme v případě angličtiny značit jako H_{E}. Je známo, že lze H_{E} interpretovat pomocí přibližné formule

2^{nH_{E}} ≃ T (n) (n dostatečně velké),

kde T (n) označuje počet typických ( =smysluplných) posloupností délky n anglického jazyka. Tento vztah nám však bezprostředně nepomůže s odhadem H_{E}, protože není znám žádný způsob odhadu T (n). Víme však, že existuje 27^{n} možných posloupností délky n z anglické abecedy a protože log27 = 4.76, máme

H_{E} ≤ 4.76 bitů na symbol.

Lepší odhad pro H_{E} můžeme obdržet z aproximace 1. řádu, ve které můžeme použít informaci o rozdílných pravděpodobnostech výskytu písmen. Například nejpravděpodobnějším symbolem je mezera s pravěpodobností P (mezera) = 0.18 …, P (E) = 0.13… atd.

Použijeme-li základní identitu

H(X, Y) ≤ H(X) + H(Y),

dostaneme horní závoru

H_{E} ≤ H_{E}^{1} ≤ − ∑_{p_{i}} logp_{i},

kde p_{i} je pravděpodobnost výskytu i-tého symbolu . Podobně obdržíme

H_{E} ≤ H_{E}^{2} = −\frac{1}{2} ∑_{i} ∑_{j} p(i, j)logp(i, j),

kde p(i, j) jsou odhadnuté výskyty symbolů (i, j) a my ignorujeme dvojice symbolů s nulovou pravděpodobností ( Qq).

Následující tabulka nám ukazuje přehled odhadů entropií pro 26- a 27-písmenou anglickou abecedu.

26-ti písmenná abeceda 27-ti písmenná abeceda
H_{E}^{0}  4.70  4.76
H_{E}^{1}  4.14  4.03
H_{E}^{2}  3.56  3.32
H_{E}^{3}  3.30  3.10

Jiný přístup nalezení odhadu entropie je založený na četnosti slov. Považujme angličtinu za konečný jazyk skládající se ze slov w_{1}, …, w_{N}, jež se vyskytují nezávisle s pravděpodobnostmi p_{1}, …, p_{N}. Pak slovní entropie H_{W} je určena vztahem

H_{W} = − ∑_{i=1}^{N}p_{i}logp_{i}.

Shannon navrhl, že pak entropii symbolů H_{E} lze aproximovat jakožto

H_{E} = H_{W} /\overline{w},

kde \overline{w} je průměrná délka slova v angličtině. K tomuto přístupu lze mít následující výhrady:

• Slova použitá v angličtině nejsou nezávislá a slovní entropie je spíše odhad slovní entropie prvního řádu.

• Podíl slovní entropie a průměrné délky slova je velmi hrubá aproximace a je nejlépe ji nahradit vhodnou nerovností.

Pokračujme však dále ve výše uvedeném přístupu. Abychom vyčíslili slovní entropii, použijme pravidlo navržené linguistou G. K. Zipfem (1935). To tvrdí, že, pokud jsou slova přirozeného jazyka uspořádáná v klesajícím uspořádání podle jejich pravděpodobností výskytu (p_{n} pak označuje pravděpodobnost n−tého nejvýše pravděpodobného slova), dobrá aproximace těchto pravděpodobností je určena formulí

p_{n} = A/n,

kde A je nějaká konstanta závisející na daném jazyce.

Ačkoliv Zipfův přístup byl kritizován, jeho pravidlo dobře funguje pro tak různé jazyky jako je hebrejština, starogermánština, křováčtina a norština. Shannon použil Zipfovo pravidlo jakožto aproximaci pro angličtinu s konstantou A = 0.1 a počtem slov M = 12366. Pak

∑_{n=1}^{12366} p_{n} = 0.1 ∑_{n=1}^{12366} \frac{1}{n} = 1,

pak je slovní entropie H_{w} = 9.72 bitů na slovo. Protože střední délka \overline{w} anglických slov je 4.5, obdržíme odhad pro H_{4.5} ≃ 9.72/4.5 = 2.16 bitů na písmeno.

Proveďme nyní následující výpočet:

H_{W} = ∑_{k=1}^{∞} H(W : |W | = k)P (|W | = k),

kde W je ţnáhodný� slovní výstup a |W | označuje délku (nebo počet písmen) W. Tedy

\begin{aligned}H_{W} & = & ∑_{k=1}^{∞} H(X_{1}X_{2} … X_{k})P (|W | = k) \\ & ≤ & ∑_{k=1}^{∞} kH(X)P (|W | = k), \end{aligned}

kde H(X) je entropie symbolů H_{E} a nerovnost bezprostředně vyplývá ze základní identity

H(U, V) ≤ H(U) + H(V).

Máme pak H_{W} ≤ H_{4.5} ∑_{k=1}^{∞} kH(X)P (|W | = k), tj.

H_{W} ≤ H_{4.5}\overline{w}.

Je známo, že zdroj s entropií H má v abecedě |Σ| jednoznačně dešifrovatelné zakódování s minimální průměrnou délkou slova l(n) typického řetězce o n symbolech, přičemž

l(n) = nH/log|Σ|.

Představíme-li si redundanci jako míru zbytečných symbolů (v procentech), je přirozené ji definovat následujícím přirozeným způsobem:

l(n) ≃ n(1 − R/100).

Z výše uvedeného pak obdržíme

R = 1 − H/log_{2}|Σ|,

uvažujeme-li redundanci jako číslo mezi 0 a 1. Poslední vztah bude pro nás oficiální definicí.

Přesný odhad redundance je obtížný; odhady zřejmě závisí na vybraném textu. Uveďme následující příklad

Bible Měsíčník
H_{1} 4.086 4.152
H_{12} 2.397 2.824
R 0.413 0.285
\overline{w} 4.060 4.653

Zajímavější je studium identických pasáží Bible přeložených do různých jazyků. Zatímco samojština je jazyk s pouze 16 písmeny, z nichž 60% tvoří samohlásky, ruština před rokem 1917 používala abecedu o 35 písmenech. Srovnání viz v následující tabulce:

Angličtina Ruština Samojština
H_{1}  4.114  4.612  3.370
H_{12}  2.397  2.395  2.136
R  0.413  0.474  0.372
\overline{w}  4.060  5.296  3.174

Shannon odhadl, že entropii angličtiny lze redukovat na jeden bit na písmeno, což by nám dávalo řádově redundanci asi 75%. Tento odhad je však nutno interpretovat s jistou opatrností. Například výše uvedené neznamená, že můžeme rekonstruovat zprávu, ve které jsou písmena smazána s pravděpodobností \frac{3}{4}. Přesný způsob mazání je také důležitý. Jsou-li písmena smazána s pravděpodobností 0.5, pak například zpráva

MATHEMATICS IS BEAUTIFUL

může být obdržena ve tvaru

MTMASSBUFL;

a tedy by bylo opravdu obtížné získat zprávu pouze z narušeného textu. Bylo dokázáno, že kritická hodnota je p ≃ 0.25 a pro vyšší hodnotu je obdržení původní zprávy nemožné.

Jinak řečeno, ačkoliv je teoreticky možné zkrátit vytištěný text na čtvrtinu jeho současné délky, náhodné zkrácení není vhodný způsob, jak toho dosáhnout. Je nám ale jasné, že velkou redukci lze obdržet smysluplným zakódováním. Např., lze bez obtíží akceptovat pravdivost následujících tvrzení:

• Vynecháme-li nějaké písmeno z textu, lze ho zpětně zrekonstruovat.

• Vynecháme-li všechny samohlásky z textu, lze text zpětně zrekonstruovat.

Oba tyto případy jsou příklady suboptimálního zakódování a vezmeme-li redundanci angličtiny mezi 75% a 50%, dostaneme, že entropie H_{E} splňuje

1.19 ≤ H_{E} ≤ 2.38.

Dále buď dán kryptosystém ⟨M, K, C⟩, položíme M_{N} a C_{N} pro ţnáhodné� části zdrojového textu a odpovídajícího kryptogramu délky N. Nyní pak zřejmě

H(K|C_{N})= H(K, C_{N}) − H(C_{N})
= H(M_{N}, K, C_{N}) − H(C_{N})
= H(M_{N}, K) − H(C_{N})
= H(M_{N}) + H(K) − H(C_{N}).

Definujeme pak bod unicity U jakožto

U := min{N > 0 : H(K|C_{N}) = 0}, tj.
H(M_{U}) + H(K) − H(C_{U}) = 0.

Předpokládejme, že platí následující:

1. Přirozený jazyk, ve kterém šifrujeme, má tu vlastnost, že je dán vhodný

odhad H(M_{N}) jako

H(M_{N}) ≃ NH,

kde H je entropie jednoho symbolu jazyka;

2. kryptosystém má tu vlastnost, že všechny sekvence délky N symbolů mají stejnou pravděpodobnost jakožto kryptogram; jinak řečeno

H(C_{N}) ≃ Nlog|Σ|.

To není nevhodný požadavek: každý dobrý kryptosystém by měl mít tuto vlastnost. Z výše uvedeného obdržíme

UH + H(K) − Ulog|Σ| = 0,

tj.

U = \frac{H(K)}{log|Σ| − H} .

Obvykle se rovněž předpokládá, že každý klíč můžeme vybrat se stejnou pravděpodobností a to znamená, že

U = \frac{log|K|}{log|Σ| − H} ,

kde H je entropie symbolu zdroje.

Připomeňme, že existuje těsný vztah mezi bodem unicity kryptosystému a redundancí jazyka, ve kterám se přenáší zpráva. Přitom redundance R jazyka s entropií H je určena vztahem

R = 1 − \frac{H}{log|Σ|} ,

a tedy

U = \frac{log|K|}{log|Σ| − H} == \frac{log|K|}{Rlog|Σ|} .

Zejména pak má-li jazyk nulovou redundanci, je pro každý kryptosystém splňující 1 a 2 bod unicity nekonečno.

Příklad: Předpokládejme, že šifrujeme pomocí jednoduché substituce tak, že máme právě 26! klíčů. Uvažujeme-li log26 = 4.7 a entropii anglického jazyka H_{E} rovnu 2 bitům na symbol, obdržíme

U = \frac{log26!}{4.7 − 2} = \frac{88.4}{2.7} ≃ 32.

Jinak řečeno, při výše uvedené entropii anglického jazyka jsme obdrželi hodnotu bodu unicity rovnu 32 symbolům. To pak celkem souhlasí s empirickým pozorováním Shannona (1949), který tvrdí, že pro bod unicity

”lze ukázat, že leží mezi krajními body 20 a 30. S 30 písmeny existuje téměř vždy jediné řešení pro kryptogram tohoto typu a s 20 můžeme najít nějaký počet řešení. ”

Podobným způsobem Friedman (1973) tvrdí, že

”Prakticky každý příklad 25 nebo více charakterů reprezentujících monoabecední zašifrování smysluplné zprávy v angličtině lze snadno vyřešit.”

V roce 1977 M.E. Hellman navrh alternativní a přítažlivé rozšíření výše zkoumaného přístupu. V tomto modelu je prostor zpráv rozdělen do dvou disjunktních podmnožin. První podmnožina obsahuje 2^{HN} smysluplných či typických zpráv, přičemž každá z těchto zpráv má a priori pravděpodobnost 2^{−HN}. Zbývající zprávy nemají v našem jazyku smysl a mají pravděpodobnost 0. Zároveň budeme předpokládat, že klíče jsou použity nezávisle na zprávě a se stejnou pravděpodobností. Je-li C kryptogram, označme Z(C) počet dvojic (M, K) takových, že zpráva M je smysluplná a

e(M_{i}, K_{j}) = C,

pak nepřítel, který zachytí C bude v pochybách o použitém klíči. Je-li |Z(C)| > 1, je kryptogram C zašifrován pomocí šifrování s falešným klíčem. Klademe-li

s(C) = max{[Z(C) − 1], 0},

očekávaná hodnota s(C), totiž

\overline{s} = ∑_{C∈C} s(C)P (C),

nám odhaduje očekávaný počet šifrování s falešným klíčem. Ale je okamžitě vidět, že

\overline{s} = \overline{z} − 1,

kde

\overline{z} = ∑_{C∈C} Z(C)P (C) = ∑_{C∈C} Z^{2}(C)/2^{NH}|K|,

a tedy z definice modelu obdržíme pro každý kryptogram C

P (C) = Z(C)/2^{NH}|K|.

Přitom evidentně

∑_{C∈C} Z(C) = 2^{NH}|K|.

Aplikujeme-li na výše uvedené jednoduché lemma tvrdící, že pro všechna x_{i} splňující

∑_{i=1}^{n}x_{i} = a,

máme

∑_{i=1}^{n}x_{i}^{2} ≥ a^{2}/n,

obdržíme

\overline{Z} ≥ (2^{NH}|K|)^{2}/|C|2^{NH}|K| = 2^{NH}|K|/|C|.

Můžeme pak vyslovit následující

Věta 3.3.1 Za předpokladu platnosti výše uvedeného je očekávaný počet šifrování s falešným klíčem odhadnut jako

\overline{s} ≥ (2^{NH}|K|/|C|) − 1.

Píšeme-li nyní K = 2^{H(K)}, C = 2^{NH_{0}} = |Σ|^{N}, kde H_{0} je entropie jazyka, lze výše uvedenou větu přepsat jakožto

\overline{s} ≥ 2^{NH−H(K)−NH_{0}} − 1,

přičemž pravá strana je rovna nula přesně v bodu unicity.

Příklad: Předpokládejme, že šifrujeme pomocí Vigenerova šifrování tak, že máme anglickou abecedu s 26 písmeny. Víme, že H_{0} = 4.7 = log26 a H = H_{E} ≃ 1.5 bitů, H(K) = 80log26 = 376. Obdržíme pak průměrně alespoň 2^{376−320} ≃ 2^{56} různých šifrování s falešným klíčem pro kryptogram o 100 písmenech.

One-time Pad

Nyní budeme hovořit o následujícím perfektním systému: Předpokládejme, že abeceda Σ je obvyklá 26-ti písmenná anglická abeceda a že tečky, mezery atd. jsou vypuštěny a že odesílaná zpráva M sestává z N písmen. Abychom zašifrovali zprávu, vygenerujeme náhodnou posloupnost o N písmenech z abecedy Σ, přičemž výběr každého písmene je nezávislý a každé písmeno má pravděpodobnost \frac{1}{26}, že bude vybráno. Tato náhodná posloupnost (Z_{1}, …, Z_{N}) bude klíč K a, abychom zašifrovali M = (x_{1}, …, x_{N}) pomocí K budeme definovat

C = e(M, K)
y_{i} = x_{i} ⊕ Z_{i} mod 26,

kde jako v obvyklém substitučním číslicovém systému jsme písmenům po řadě přiřadili číselnou hodnotu z množiny {0, …, 25}. Tedy jako klíče vybereme rovněž všech 26^{N} posloupností délky N; každou z těchto posloupností lze zvolit se stejnou pravděpodobností tj.

H(K) = Nlog26.

Protože klíč K = (Z_{1}, Z_{2}, …, Z_{N}) je posloupnost náhodných písmen z 26-ti prvkové abecedy Σ, je zřejmé, že existuje 26^{N} stejně pravděpodobných kryptogramů. Zároveň platí

P (K|C) = \frac{1}{26^{N}}

pro všechna K ∈ K. Z kritéria 3 vidíme, že šifrovací systém ⟨M, K, C⟩ je perfektní, neboť klíč je jednoznačně určen zprávou a kryptogramem, množina zpráv je je zároveň množinou klíčů, resp. kryptogramů, zejména tedy mají stejnou mohutnost. Zejména je tedy tento tzv. one-time pad systém perfektní.

Tento šifrovací systém byl objeven v roce 1926 americkým inženýrem společnosti AT&T Gilbertem S. Vernamem (v dřívějších dobách byla písmena klíče napsána na listech trhacího bloku a jakmile bylo klíčové písmeno použito, byl odpovídající list vytrhnut a zničen).

Dnes se one-time pad neprovozuje s písmeny nýbrž s bity. Pak a_{i}, k_{i} ∈ {0, 1} a kryptogram a_{1}⊕k_{1}a_{2}⊕k_{2}… a_{n}⊕k_{n} získáme pomocí binárního sčítání.

Pro bezpečnost tohoto systému je podstatné, že všechny posloupnosti délky n se vyskytují s toutéž pravděpodobností. Jinak řečeno: Bity klíčového slova musí být voleny náhodně. Nejlépe si to představíme tím způsobem, že vrháme ideální minci. V praxi používáme fyzikální náhodný zdroj a tím automaticky vytvoříme bity.

Za tuto formu perfektní bezpečnosti musíme – nikoliv neočekávaně – platit vysokou cenu. Pro tradiční one-time pad potřebujeme velké množství papíru, který musí být před útočníkem absolutně bezpečně ukryt. Proto se takovéto systémy používají jen zřídka. V druhé světové válce se one-time pad používal anglickou dešifrovací skupinou, aby zprostředkovala zprávy premiérovi, které byly Němci zašifrovány pomocí Enigmy a které Angličané rozšifrovali. Tímto způsobem si spojenci zajistili, že Němci až do konce války nevěděli, že Enigma byla rozluštěna.

Jednou z dalších nevýhod tohoto systému je neexistence matematického způsobu generování nezávislých náhodných proměnných, které slouží jako klíč. Tedy je nutné použít pseudonáhodných posloupností generovaných jednou z mnoha standardních metod. Neexistuje pak žádná záruka, že takováto pseudonáhodné posloupnosti nám budou stejnou úroveň bezpečnosti. Jedná se o hluboký matematický problém.

*

Proč se tento nepochybně perfektní systém používá jen velmi zřídka? Abychom byli schopni zodpovědět tuto otázku, představme si sebe v roli příjemce. Ten může přirozeně kryptogram pohodlně rozšifrovat: dešifrování je v podstatě stejný postup jako zašifrování (používáme-li bity, jedná se dokonce o přesně totéž). To al může příjemce provést jen v případě, že má klíč.

Kde je vlastně problém? Problém spočívá v tom, že musíme přenést (doručit) dlouhý tajný klíč. Kdybychom toto prováděli pomocí stejné cesty jako zprávu, je vzhledem k délce klíče šance přečtení klíče stejná jako při předání nezašifrovaného textu zprávy. Člověk by si mohl myslet, že u takovéhoto systému by mohl odesilatel zprávu nepříteli předat přímo do domu. To ale není zcela správné; totiž pro přenos klíče může odesilatel určit druh, způsob a dobu předání, což samozřejmě u přenosu zprávy neplatí. Jiný způsob přenosu klíče je použití kurýra.

4.1 Posouvací registry

Při přenosu klíče se nejedná pouze o teoretický problém, nýbrž o to, že obtížnost výměny klíče silně ovlivňuje nasazení šifrovacích systémů.

Důležitý postup pro vyřešení tohoto problému spočívá v tom, že namísto skutečně náhodných klíčových posloupností použijeme pouze pseudonáhodné posloupnosti. Takováto posloupnost vypadá na první pohled jako skutečná náhodná posloupnost. A co je ještě důležitější: náhodnou posloupnost lze určit pomocí několika málo dat; tyto data pak představují skutečný klíč. Oba komunikující partneři pak mohou z těchto dat spočítat náhodné posloupnosti a zašifrovat zprávu resp. dešifrovat kryptogram. Problém přenosu klíče tak není zcela vyřešen, ale podstatně ulehčen.

Samozřejmě musíme za tuto výhodu zaplatit: takovéto systémy neposkytují žádnou perfektní bezpečnost. Budeme tedy hledat kompromis mezi docílenou bezpečností a množinou tajně přenositelných dat.

*

Posouvací registr je poslopnost v řadě za sebou následujících registrů, přičemž každý registr může obsahovat pouze číslici 1 (on) nebo 0 (off). Hodinový strojek reguluje chování systému, který pracuje v souladu s následujícími podmínkami:

Předpokládejme, že systém má n registrů R_{1}, R_{2}, …, R_{n} a že X_{i}(t) označuje obsah registru R_{i} v čase t. Nechť je dále na začátku systém ve stavu

x(0) = (X_{1}(0), …, X_{n}(0)).

Pokud

x(t) = (X_{1}(t), …, X_{n}(t)).

označuje stav systému v době t, stav v čase t + 1 je určen vztahy

X_{i}(t + 1) = X_{i−1}(t)  (2 ≤ i ≤ n),  (4.1)
X_{1}(t + 1) = f(x(t)),  (4.2)

kde f je nějaká binární funkce n proměnných. Pokud je f tvaru

f = ∑_{i=1}^{n}c_{i}X_{i}(t),

mluvíme o lineárním posouvacím registru. Přitom chování systému je jednoznačně určeno (a) počátečním stavem x(0) a (b) množinou konstant c_{1}, …, c_{n}. Budeme vždy předpokládat, že c_{n} ≠ 0; jinak bychom mohli pracovat bez registru R_{n}.

Způsob, jakým lineární systém pracuje, je, že po obdržení signálu každý registr provede dvě věci:

(i) Přenese svůj obsah do svého pravého souseda (n−tý registr toto provést nemůže).

(ii) Takové registry R_{i}, pro které je c_{i} = 1 přenesou svůj obsah do čítače, ten je sečte a výsledek přenese do registru R_{1}.

Jakmile je jednou nastaven počáteční vektor, lze posouvací registr považovat za zdroj nekonečné posloupnosti binárních číslic

X_{1}(0), X_{1}(1), X_{1}(2), ….

Ačkoliv takto vytvořená posloupnost není náhodná, lze ukázat, že má jisté rysy nahodilosti. Navíc ji lze snadno a rychle generovat. Bohužel je však velmi nejistá.

Vlastnosti posloupností vytvořených lineárními posouvacími registry

Nejprve uvažujme periodicitu. Nekonečná posloupnost (y_{i} : 0 ≤ i < ∞) se nazývá periodická s periodou p, jestliže je p kladné přirozené číslo takové, že y_{i+p} = y_{i} pro všechna i a navíc je p nejmenší kladné přirozené číslo s touto vlastností. Má-li tedy posloupnost (y_{i} : 0 ≤ i < ∞) periodu p, můžeme ji psát ve tvaru

y_{0}, y_{1}, y_{2}, …, y_{p−1}, y_{0}, y_{1}, y_{2}, …, y_{p−1}, y_{0}, y_{1}, ….

Jinak řečeno, posloupnost s periodou p je přesně posloupnost opakování konečného bloku délky p.

Vraťme se nyní k posloupnosti určené lineárním posouvacím registrem: předpokládejme, že počáteční vektor x(0) není nulový vektor a že rovnice 4.1 a 4.2 lze přepsat ve tvaru

x(t + 1) = Cx(t),  (4.3)

kde C je matice tvaru

C = [ \begin{matrix}c_{1} & c_{2} & c_{3} & … & c_{n−1} & c_{n} \\ 1 & 0 & 0 & … & 0 & 0 \\ 0 & 1 & 0 & … & 0 & 0 \\ ⋮ & ⋮ & ⋮ & ... & ⋮ & ⋮ \\ 0 & 0 & 0 & … & 1 & 0 \end{matrix} ] .

Protože jsme předpokládali, že c_{n} = 1 a protože

det C = c_{n} = 1,

vidíme, že C je regulární matice. Iterováním rovnice 4.3 dostaneme x(t) = C^{t}x(0). Přitom platí Věta 4.1.1 Posloupnost vytvořená pomocí lineárního posouvacího registru je periodická a pokud je vytvořena z n registrů, je její maximální perioda 2^{n} − 1.

Důkaz. Protože je C regulární, je i regulární matice C^{i} (i = 0, 1, …); přitom je x(0) nenulový vektor a existuje právě 2^{n} − 1 nenulových vektorů délky n. Je-li m = 2^{n} − 1, pak jsou

x(0), Cx(0), C^{2}x(0), …, C^{m}x(0)

nenulové vektory délky n a tudíž nemohou být všechny různé: řekněme, že

C^{s}x(0) = C^{s+t} x(0),

kde 0 ≤ s < s + t ≤ 2^{n} − 1. Protože existuje C^{−s}, máme

x(t) = C^{t}x(0) = C^{−s}C^{s+t} x(0) = x(0).

Tedy

x(r + t) = C^{r+t} x(0) = C^{r}C^{t}x(0) = C^{r}x(t) = C^{r}x(0) = x(r)

pro všechna r ≥ 0, a C je periodická s periodou nejvýše t ≤ 2^{n} − 1. Posloupnost vytvořená pomocí lineárního posouvacího registru je tedy periodická.

Definujme charakteristický polynom lineárního posouvacího registru jako polynom

P_{n}(x) = 1 + ∑_{i=1}^{n}c_{i}x^{i},

s c_{n} ≠ 0, c_{i} ∈ {0, 1}. Charakteristický polynom je primitivní, jestliže

(a) nemá vlastní netriviální dělitele,

(b) P_{n}(x) nedělí polynom x^{d} + 1 pro všechna d < 2^{n} − 1.

Následující tvrzení uvedeme bez důkazu.

Věta 4.1.2 Posloupnost vytvořená pomocí lineárního posouvacího registru z nenulového vstupu má maximální periodu právě tehdy, je-li její charakteristický polynom primitivní.

Nalezení primitivních polynomů je netriviální úloha moderní algebry. Poznamenejme pouze, že primitivní polynomy existují pro každé n a že jsou tabelovány.

4.2 Kryptoanalýza lineárních posouvacích registrů

Můžeme tedy použít lineární posouvací registry k vytvoření pseudonáhodných posloupností pro kryptografické účely. To je laciné, lineární posouvací registry provádí výpočty velmi rychle – co můžeme ještě víc chtít?

Nelze popřít, že posloupnosti vytvořené pomocí lineárních posouvacích registrů mají vynikající statistické vlastnosti; a to platí dokonce pro posloupnosti, které vzniknou z relativně krátkých lineárních posouvacích registrů. Ale z kryptologického pohledu mají tyto posloupnosti mimořádně pochybný charakter. To je důsledkem toho, že v případě known-plaintext útoku mu nejsou schopny odolat.

Definujme blok délky t jako posloupnost tvaru 011… 10 obsahující právě t jedniček. Dírou délky t je posloupnost tvaru 100… 01 obsahující právě t nul.

Platí následující výsledek.

Věta 4.2.1 Má-li lineární posouvací registr s n registry maximální periodu 2^{n}−1, mají pak výsledné posloupnosti délky 2^{n} − 1 následující vlastnosti:

(a) obsahuje právě 2^{n−1} − 1 nul a 2^{n−1} jedniček;

(b) obsahuje pro všechna t taková, že 1 ≤ t ≤ n − 2, 2^{n−t−2} bloků délky t a stejný počet děr délky t.

Důkaz. Stav lineárního posouvacího registru lze v každém okamžiku jednoznačně popsat přirozeným číslem z intervalu [1..2^{n}−1]: stačí vzít příslušnou část výstupní posloupnosti.

Protože se všechna nenulová čísla z intervalu [1..2^{n} − 1] musí vyskytnout jako stavy v cyklu maximální délky, výsledek okamžitě dostaneme výsledek (a) spočtením sudých a lichých čísel v této množině.

Abychom dokázali (b), poznamenejme, že běh typu 011… 10 obsahující právě t jedniček se může vyskytnout jako součást výstupu právě tehdy, když v nějaké části výpočtu je stav lineárního posouvacího registru 011 … 10x_{1}x_{2} … x_{n−t−2}, kde x_{i} ∈ {0, 1}. Protože máme právě 2^{n−t−2} stavů tohoto tvaru a protože každý stav je realizován v nějakém okamžiku výpočtu vzhledem k tomu, že lineární posouvací registr má maximální periodu, výsledek (b) pro bloky platí. Zaměníme-li 0 a 1, dostáváme výsledek (b) pro díry.

Vraťme se nyní k dešifrování. Je-li

M = m_{1}m_{2} …

zpráva složená z binárních číslic, a je-li

X = x_{1}x_{2} …

posloupnost vyprodukovaná lineárním posouvacím registrem, pak kryptogram C je posloupnost

C = c_{1}c_{2} …,

kde

c_{i} = m_{i} + x_{i} (mod 2)  (1 ≤ i < ∞).  (4.4)

Jsou-li tedy m_{i} a c_{i} známy, lze x_{i} získat triviálně jako

x_{i} = m_{i} + c_{i} (mod 2)  (1 ≤ i < ∞).  (4.5)

Uvažme nyní lineární posouvací registr s n registry a koeficienty d_{1}, d_{2}, …, d_{n}. Jakmile zná nepřítel nějakých 2 n za sebou následujících členů x_{i} výsledné posloupnosti, je schopen najít tyto koeficienty d_{1}, d_{2}, …, d_{n}. Totiž odpovídající systém lineárních rovnic má tvar

[ \begin{matrix}1 & 0 & 0 & … & & & 1 & 0 & 0 & … \\ 0 & 1 & 0 & … & & & 0 & 1 & 0 & … \\ 0 & 0 & 1 & … & & & 0 & 0 & 1 & … \\ ⋮ & ⋮ & ⋮ & ... & & & ⋮ & ⋮ & ⋮ & ... \\ 0 & 0 & 0 & 0 & 0 & 0 & x_{1} & x_{2} & x_{3} & … & x_{n−1} & x_{n} \\ 0 & 0 & 0 & 0 & 0 & 0 & x_{2} & x_{3} & x_{4} & … & x_{n} & x_{n+1} \\ 0 & 0 & 0 & 0 & 0 & 0 & x_{3} & x_{4} & x_{5} & … & x_{n+1} & x_{n+2} \\ ⋮ & ⋮ & ⋮ & ... & & & ⋮ & ⋮ & ⋮ & ... \\ 0 & 0 & 0 & 0 & 0 & 0 & x_{n} & x_{n+1} & x_{n+3} & … & x_{2n−2} & x_{2n−1} \end{matrix} ] . [ m_{1} ; m_{2} ; m_{3} ; ⋮ ; c_{1} ; c_{2} ; c_{3} ; ⋮ ; c_{n} ] = [ x_{1} ; x_{2} ; x_{3} ; ⋮ ; x_{n+1} ; x_{n+2} ; x_{n+3} ; ⋮ ; x_{2n} ] .

To pak plně určuje šifrovací systém a tudíž platí následující věta.

Věta 4.2.2 Užití posloupností vytvořených pomocí lineárního posouvacího registru není bezpečné proti known-plaintext útoku.

Chceme-li zachovat hezké vlastnosti lineárních registrů a zároveň zajistit větší stupeň bezpečnosti, použijeme v rovnici 4.2 nelineární funkci. Skutečně je tomu tak, že většina dnes používaných algoritmů je založena na nelineárních posouvacích registrech, ačkoliv bychom neměli zapomenout na DES.

60  One-time Pad

Výpočetní složitost

5.1 Obtížnost problému

Důkaz toho, že existují nerozhodnutelné problémy a nevyčíslitelné funkce, je jedním z největších výdobytků v této oblasti.

Šifrovací systém, jehož dešifrování je založeno na výpočtu nevyčíslitelných funkcí, by měl výhodnou pozici. Můžeme však snadno ověřit, že takovéto zbožné přání nemůže být splněno: všechny takovéto systémy jsou konečné a tedy mohou být narušeny prověřením všech možností.

Teorie výpočetní složitosti se týká třídy problémů, které lze v principu vyřešit: ale vzhledem k této třídě se teorie pokouší klasifikovat problémy podle jejich výpočetní obtížnosti v závislosti na množství času nebo paměti potřebných pro toto řešení,

Porozumění základním pojmům teorie složitosti je podstatné pro kryptografii a v této kapitole se budeme snažit pokrýt podstatu problémů teorie složitosti. Nejprve začněme informálně s několika příklady.

Příklad. 1 Násobení přirozených čísel Uvažme problém násobení dvou binárních n-bitových čísel x a y. Je-li x = x_{1} … x_{n} a y = y_{1} … y_{n}, můžeme provést standardní metodu ţdlouhého násobení�, která je učena na základní škole následovným způsobem:

Postupně násobme x čísly y_{1}, y_{2} atd., posuňme a pak přičtěme výsledek. Každé násobení x číslem y_{i} nás stojí n jednoduchých bitových operací. Podobně sečtení n součinů nám zabere O(n^{2}) bitových operací. Je tedy celkový počet operací O(n^{2}). Můžeme výše uvedené ještě zlepšit? Tj., existuje rychlejší algoritmus v tom smyslu, že provede podstatně méně bitových informací. Přesněji, jsou-li dána 2 n-bitová čísla, n sudé, píšeme

x = a2^{\frac{1}{2}} + b, y = c2^{\frac{1}{2}} + d,

pak součin z lze získat pomocí tří multiplikací \frac{1}{2} n-bitových čísel použitím reprezentace

z = xy = (ac)2^{n} + [ac + bd − (a − b)(c − d)]2^{\frac{1}{2} n} + bd.

Označíme-li T (n) čas, který nám zabere násobení podle této metody, máme, prože násobení 2^{n} je rychlé, že

T (n) ≤ 3T (\frac{1}{2}n) + O(n).

Po vyřešení výše uvedené rekurentní nerovnosti obdržíme, že

T (n) ≤ An^{log3} + Bn,

kde A a B jsou konstanty. Protože log3 ≃ 1.59, máme k dispozici algoritmus o časové složitosti O(n^{1.59}) v porovnání se standardním O(n^{2}) algoritmem. V současnosti má jeden z nejlepších známých algoritmů (Schönhagen, Strassen) složitost O(nlognloglogn).

Příklad. 2 Determinanty a permanenty. Uvažujme následující dva výpočetní problémy. Pro každý vstup složený z binární matice A typu n×n chceme vypočítat

1. determinant matice A, píšeme pak detA,

2. permanent matice A, píšeme pak perA, permanenent je definován jako

perA = ∑_{π} a_{1π(1)}a_{2π(2)} … a_{nπ(n)},

kde sčítáme přes všechny permutace π na množině {1, 2, …, n} a a_{ij} značí (i, j)−tou komponentu matice A.

Zdánlivě je permanent mnohem jednodušší funkce matice A než její determinant; jedná se o součet toho samého systému termů, ale bez toho, že bychom dávali pozor na ± znaménka jako u determinantu.

Avšak z hlediska výpočetní složitosti platí opak: zatímco determinant je relativně snadná funkce k výpočtu, u permanentu se prokázalo, že se jedná o vždy téměř jistě o neobvykle obtížnou záležitost.

Upřesněme výše uvedené: standardní Gaussova eliminační metoda výpočtu determinantu matice n×n potřebuje O(n^{3}) bitových operací, přičemž V. Strassen zkonstruoval algoritmus, který potřebuje

O(nlog_{2}7) = O(n^{2.81...})

bitových operací. Redukce exponentu pod hranici log_{2}7 se prokázalo být velmi obtížné a jeden z nejrychlejších současných algoritmů (Coppersmith, Winograd) potřebuje O(n^{2.3976...}) operací. Snadn je vidět, že všechny vstupy matice musí být načteny a tedy

n^{2} ≤ tdet(n) ≤ Cn^{2.3976...}

kde tdet(n) označuje časovou složitost problému výpočtu determinantu a C je nějaká konstanta. Pro permanent však oproti výše uvedenému žádný takový algoritmus není znám. Nejrychlejší doposud známý algoritmus je pouze o něco lepší než sečtení všech n! termů naší sumy.

Příklad. 3 Třídění. Předpokládejme, že chceme sestrojit algoritmus, který, obdrží-li na vstupu n celých čísel a_{1}, …, a_{n}, setřídí tyto v rostoucím pořadí. Snadný, téměř instinktivní přístup je následující algoritmus, známý jako Bubblesort.

Postupně porovnávejme a_{1} s každým s prvků a_{2}, …, a_{n}. Pro maximální index i takový, že a_{i} < a_{1} umístěme a_{1} za a_{i} a obdržíme pak nové uspořádání. Po n − 1 porovnáních obdržíme uspořádání b_{1}, …, b_{n}; je okamžitě vidět, že se jedná o vzestupně uspořádaný seznam. Jednoduchý výpočet ukazuje, že k výše uvedenému je třeba O(n^{2}) porovnání.

Poznamenejme, že máme několik rekurzivních algoritmů založených na princiou rozděl a panuj tím, že třídíme 2 polovice množiny a pak spojíme setříděné seznamy k sobě, což nám zabere pouze O(n logn) srovnání. Pro názornost uveďme následující tabulku

\begin{aligned}n & n log_{2}n & n^{2} \\ 50 & ≃ 300 & 2500 \\ 500 & ≃ 4500 & 250000 \end{aligned} .

Ovšem, výraz O(n logn) může skrýt velké konstantní výrazy, ale tak joko tak se jedná o velký rozdíl, obzvláště proto, že třídění je často používaný algoritmus a velikost seznamů je často velmi velká.

Jiný fascinující pohled na třídění je ten, že existuje spodní mez stejného řádu pro každý algoritmus založený na třídění. Často mluvíme o informačně-teoretické spodní mezi, ale nejedná se o nic jiného, než o přímý důsledek pozorování, že každý algoritmus založený na srovnání lze reprezentovat pomocí binání stromové struktury a protože musíme pokrýt všech n! možných uspořádání, každý takovýto strom musí mít alespoň n! listů.

Příklad. 4 Test prvočíselnosti. Bezprostředně se zdá, že testovat, zda přirozené číslo N je prvočíslo, lze vyřešit velmi rychlým a snadným algoritmem: testujeme, zda je N dělitelené 2 nebo nějakým lichým číslem z intervalu [3, N^{\frac{1}{2}}]. Protože se jedná pouze o \frac{1}{2}N^{\frac{1}{2}} dělení, jedná se o polynomiální algoritmus v proměnné N a tudíž rychlý algoritmus.

Avšak další úvahy ukazují, že reprezentace čísla N v počítači by byl binární řetězec délky ⌈logN⌉ a tudíž, abychom mohli algoritmus na testování prvočíselnosti považovat za rychlý, jeho výpočetní složitost musí být polynomiální v n = ⌈logN⌉. Doposud však žádný takovýto algoritmus není znám. V současnosti jsou k dispozici algoritmy se složitostí

t(N) = O(lnN)^{cln ln ln N},

kde c je kladná konstanta.

Příklad. 5 Největší společný dělitel a Euklidův algoritmus. Uvažujme problém nalezení největšího společného dělitele (nsd) dvou přirozených čísel u a v. Zřejmá metoda je faktorizace obou čísel na prvočísla

u = 2^{u_{1}}3^{u_{2}}5^{u_{3}} …, v = 2^{v_{1}}3^{v_{2}}5^{v_{3}} …,

pak lze zjistit jejich největší společný dělitel následovně

w = nsd(u, v) = 2^{w_{1}}3^{w_{2}}5^{w_{3}} …,

kde w_{i} = min{u_{i}, v_{i}}. Jedná se však o velmi neefektivní postup. Potřebujeme totiž faktorizovat obě čísla a tento postup nelze rychle provést pro velká přirozená čísla. Metoda, jíž tento postup můžeme obejít, je známá jako Euklidův algoritmus.

Předpokládejme, že u > v > 0. Pak obdržíme posloupnost dělení:

u= a_{1}v + b_{1},  0 ≤ b_{1} < v,
v= a_{2}b_{1} + b_{2},  0 ≤ b_{2} < b_{1},
b_{1}= a_{3}b_{2} + b_{3},  0 ≤ b_{3} < b_{2},
⋮
b_{k−2}= a_{k}b_{k−1} + b_{k},  0 ≤ b_{3} < b_{2},

která skončí buď b_{k} = 0 nebo b_{k} = 1. Pokud b_{k} = 1, jsou čísla u a v nesoudělná; pokud b_{k} = 0, je nsd(u, v) = b_{k−1}.

O tomto algoritmu lze snadno dokázat, že je korektní a detailní analýza jeho účinnosti ukáže, že nejhorší případ (měřeno počtem dělení) nastane, jsou-li u a v za sebou následující Fibonacciho čísla F_{n+2} a F_{n+1} . Pak v tomto případě

F_{k+2} = F_{k+1} + F_{k},

a to vede k následujícímu Lamého výsledku (1845)

Věta 5.1.1 Je-li 0 ≤ u, v < N, pak počet dělení při použití Euklidova algoritmu na u a v je nejvýše

⌈log_{φ}(\sqrt{5}N)⌉ − 2,

kde φ je zlatý řez \frac{1}{2}(1 + \sqrt{5}).

5.2 P =polynomiální čas

Základní mírou obtížnosti výpočtu je množství doby, které nám výpočet zabere. Zformulování přesné definice, co to je čas, je netriviální záležitost; přesná formulace požaduje velmi precizní definici strojového modelu, jednotky času atd.

V příkladech z předchozího paragrafu jsme měřili složitost výpočtu v pojmech počtu základních operací, které byly prováděny. Mohlo se jednat o součet bitů, srvnání nebo cokoliv jiného.

Klíčové pojmy jsou následující:

5.2 P =polynomiální čas  65

1. složitost je funkce velikosti vstupu (obvykle ji značíme jako n),

2. pro danou velikost vstupu n je složitost doba nejhoršího možného případu běhu algoritmu.

Připomeňme si, že při testování prvočíselnosti přirozeného čísla N jsme obdrželi jinou složitost v případě, že jsme považovali vstup velikosti N nebo vhodněji pomocí reprezentace n = ⌈logN⌉ binárních číslic. Na základě tohoto důsledku bude velikost vstupu vždy považována za ţpřirozenou� délku ekonomického vstupu. Co se týče definice složitosti jako nejhoršího možného případu, jiná možnost – ţprůměrný případ� – se potýká s obtížemi, a to jak teoretickými tak praktickými. Ne poslední obtížnost je rozhodnout citlivě o pravdivostním rozdělení na vstupu.

Nejprve budeme postupovat neformálně. Řekneme, že algoritmus A má polynomiální složitost, jestliže existuje polynom p(x) tak, že

t_{A}(n) ≤ p(n),

pro všechna přirozená čísla n, přičemž t_{A}(n) je maximální doba potřebná algoritmem k výpočtu přes všechny vstupy velikosti n.

Problém lze provést v polynomiálním čase, pokud existuje nějaký algoritmus, který ho řeší a má polynomiální složitost, v tomto případě tvrdíme, že problém leží v třídě P.

Porovnejme naši definici s příklady 1-5 z předchozího paragrafu.

Příklad. 1 Násobení přirozených čísel je operace prováděná v polynomiální době,

Příklad. 2 Determinanty a permanenty. Výpočet determinantu je problém, který určitě leží v P. U výpočtu permanentu nevíme, zda tento problém leží v P, předpokládá se, že zde neleží, a důkaz jakékoliv implikace by měl velkou důležitost v teorii složitosti.

Příklad. 3 Třídění lze provést pomocí O(n logn) srovnání a protože srovnání lze provést v polynomiálním čase, leží třídění v P.

Příklad. 4 O testu prvočíselnosti nevíme, zda leží v P. Zatím bylo dokázáno, že je ţvelmi blízko� P.

Příklad. 5 Nalezení největšího společného dělitele dvou přirozených čísel velikosti ≤ N a proto velikosti vstupu logN bitů lze provést v čase O(log N) a proto tento problém leží v P.

Třída P je v současnosti nejdůležitější třídou v matematice a computer science, to, že nějaký problém leží v P, lze obvykle považovat za to, že se jedná o výpočetně dobrý problém. Ačkoliv poslední uvedené obecně zcela neplatí (problém nalezení klik v grafu), následující tvrzení nám ukazují, že se jedná o atraktivní a efektivní pojem.

1. Třída P je robustní vzhledem k různým reprezentacím vstupních hodnot za předpokladu, že tyto změny jsou vůči sobě polynomiálně korelovány.^{‡} Například, zda uvažujeme vstup matice typu n × n velikosti n nebo n^{2}, nedělá žádný rozdíl.

2. Třída P je robustní vzhledem k použitému modelu výpočetního stroje. Jinak řečeno, zda použijeme Pentium nebo stroj s náhodným přístupem nebo Turingův stroj, naše třída zůstane nezměněna. Toto lze celkem snadno dokázat. Je pouze nutno ověřit, že doby pro simulaci základních operací na obou strojích, jsou polynomiálně korelovány.

Připomeňme stručně formální definici třídy P.

Turingovy stroje – formální definice třídy P

Turingův stroj sestává z 2-směrné nekonečné pásky rozdělené do čtverců. Každý čtverec může obsahovat symbol z konečné abecedy Σ. Páska je snímána rychlostí 1 čtverec za jednotku času tzv. čtecí i zapisovací hlavicí. Stroj může být v jednom z konečné množiny Q stavů, Q = {q_{0}, q_{1}, …, q_{m}} a příslušná akce stroje v danám čase je jednoznačně určena jeho vnitřním stavem a symbolem v současně snímaném čtverci. Akce provede libovolnou z následujících operací:

1. změní (přepíše) snímaný symbol na jiný symbol ze Σ,

2. posune čtecí hlavici o jeden čtverec doprava či doleva,

3. změní svůj současný stav z q_{i} na q_{j}.

Výpočet Turingova stroje sestává z následujících kroků:

1. reprezentace výpočtu konečným řetězcem x ∈ Σ^{∗}, který je umístěn ve čtvercích 1 − n, kde n je počet symbolů obsažených v x,

2. odstartování činnosti Turingova stroje z jeho počátečního stavu (obvykle q_{0}) s přepisovací hlavou na čtverci 1 a jeho pokračování se základními operacemi (četní, zapsání a změny stavu) až do doby, kdy stroj skončí v koncovém stavu (q_{f}).

Výstup stroje M po jeho aplikování na stav x je obsah pásky dosažený v koncovém stavu. Jeden krok výpočtu stroje sestává z jedné akce 1-3 uvedených výše a délka neboli čas použitý při výpočtu je počet takovýchto kroků. Pokud M označuje nějaký Turingův stroj , označíme tuto dobu t_{M}(x).

Funkce f : Σ^{∗} → Σ^{∗} je vyčíslitelná pomocí Turingova stroje M, jestliže pro všechna x ∈ Σ^{∗}, x je vstup pro M, v případě ukončení výpočtu stroj zastaví s

‡Dvě funkce f a g jsou vůči sobě polynomiálně korelovány, pokud existují polynomy p_{1} a p_{2} tak, že f(n) ≤ p_{1}(g(n)) a g(n) ≤ p_{2}(f(n)) pro všechna dostatečně velká n.

5.3 NP = nedeterministický polynomiální čas  67

hodnotou f(x) na jeho výstupní pásce. Tedy Turingův stroj je přesná analogie počítače – každý výpočet, který lze vykonat moderním počítačem, lze provést i Turingovým strojem. Ovšem v praxi je konstrukce Turingova stroje schopného i pouze jednoduchých výpočtů velmi časově náročná. Proto byl vyvinut soubor základních Turingových strojů, které provádí odpovídající úlohy. Konstruujeme-li pak složitý Turingův stroj, používáne strojů již dříve zkonstruovaných, podobně jako když používáme podrutiny v obvyklých počítačových programech.

Můžeme pak formálně definovat časovou složitost. Je-li M Turingův stroj, který zastaví pro všechny vstupy x ∈ Σ^{∗}, časová složitost Turingova stroje M je funkce t_{M} : Z^{+} → Z^{+} určená vztahem

t_{M}(n) = max{t : existuje x ∈ Σ^{∗} tak, že |x| = n

a čas provedený strojem M na vstupux je t}.

Funkce f je vyčíslitelná v polynomiálním čase nebo má polynomiální složitost, pokud existuje nějaký Turingův stroj, který vypočte f a jistý polynom p tak, že t_{M}(n) ≤ p(n) pro všechna n. V praxi většinou neuvažujeme s Turingovým modelem, ale pracujeme na mnohem vyšší úrovni.

5.3 NP = nedeterministický polynomiální čas

Popišme si neformální ideu třídy NP. Předpokládejme, že máte za úkol prodat velká složená čísla opravdu hodně zaměstnaným nákupčím. S pomocí otroků pracujících neomezený počet hodin můžete sestavit seznam složených čísel c_{1}, c_{2}, … a abychom byli schopni prodávat tato čísla rychle, budete mít k dispozici odpovídající seznam faktorů y_{1}, y_{2}, … tak, že pokud má dojít k prodeji, vše, co musíte udělat, je dát číslo c_{i} dohromady s faktorem y_{i} a ověřit, že složené číslo c_{i} je dělitelné číslem y i. Pak y_{i} nazýváme certifikátem neprvočíselnosti čísla c_{i}, protože pak existuje při jeho použití algoritmus pracující v polynomiální době pro ověření, že c_{i} je složené.

Neformálně můžeme tedy říci, že vlastnost náleží do NP, jestliže splnění této vlastnosti lze ověřit v polynomiální době s pomocí vhodného certifikátu.

Podejme nyní formální definici:

Buď Σ nějaká konečná abeceda. Libovolnou podmnožinu π množiny Σ^{∗} nazveme vlastností (jazykem). Řekneme pak, že π ∈ NP, jestliže existuje funkce f : Σ^{∗} × Σ^{∗} → {0, 1} tak, že

1. x ∈ π právě tehdy, když existuje y ∈ Σ^{∗} tak, že f(x, y) = 1,

2. výpočtová časová náročnost f je omezena polynomem v proměnné x.

V pojmech teorie Turingových strojů, považujem y sdružené se vstupem x za certifikát relace patřit prvku x v π, a necháváme Turingův stroj pracovat v polynomiální době na vstupu sestávajícímu z vstupu x a certikátu y. Speciálně pak

P ⊆ NP,

považujeme-li P za soubor vlastností. Otázka, zda P = NP je pracděpodobně nejdůležitější otázkou v teoretické computer science.

5.4 NP-úplné a NP-těžké problémy

Důležitou vlastností třídy NP je, že obsahuje ţnejtěžší vlastnosti� tak, že kdybychom byli schopni vyřešit některou z těchto vlastností, byli bychom schopni rozhodnout každou z vlastností v NP. Precizněji, řekneme, že vlastnost π_{1} je polynomiálně redukovatelná na vlastnost π_{2}, pokud existuje funkce f z P tak, že x má vlastnost π_{1} právě tehdy, když f(x) má vlastnost π_{2}. Píšeme pak

π_{1}^{α}π_{2}.

Je snadno vidět, že pokud π_{1}^{α}π_{2}, implikuje existence polynomiálního algoritmu pro π_{2} existenci polynomiálního algoritmu pro π_{1}. Totiž, nechť A je algoritmus pro π_{2}, který pracuje v čase t(n). Je-li x nějaký vstup pro π_{1} tak, že |x| = n, pak transformujme x na f(x) a aplikujme algoritmus A. Protože transformace pracuje v polynomiálním čase, je |f(x)| ohraničené nějakým polynomem g(n). Tedy transformace f a algoritmus A pracují v čase ohraničeny nějakým polynomem.

Připomeňme následující tvrzení:

Věta 5.4.1 Existuje vlastnost π ∈ NP tak, že libovolná jiná vlastnost π′ je polynomiálně redukovatelná na π.

Takovéto π se nazývá polynomiálně úplný problém.

Připomeňme, že máme k dispozici seznam více než 3000 NP -úplných problémů. Přitom téměř každá vlastnost z NP, o které se neví, zda leží v P, je NP -úplná, ačkoliv máme k dispozici tvrzení, které říká, že pokud NP ≠ P, pak NP − P obsahuje problémy, jež nejsou NP -úplné.

Řekneme, že problém π je NP -těžký, pokud existuje nějaká NP -úplná vlastnost π_{0} tak, že pokud existuje polynomiální algoritmus pro π, existuje i polynomiální algorotmus pro π_{0}. Triviální důsledky této definice jsou následující tvrzení:

1. Pokud existuje polynomiální algoritmus pro každý NP -problém, je pak NP = P.

2. Je-li π_{1} NP -těžký a π_{1}^{α}π_{2}, je i π_{2} NP -těžký.

3. Každý NP -úplný problém je NP -těžký.

Obrácené tvrzení k 3 není pravdivé.

5.5 Náhodné algoritmy

Algoritmus, který má pravděpodobnost chyby méně, než 2^{−100} a který během minuty je schopen identifikovat číslo 2^{400}−593 jakožto největší prvočíslo menší než 2^{400}, má bezprostřední praktický a estetický důsledek. Takovými jsou například algoritmy pro testování prvočíselnosti od Rabina a dále od Solovaye a Strassena.

Nejprve ilustrujme ideu náhodného algoritmu na příkladě: Předpokládejme, že máme polynomiální výraz v n proměnných, řekněme f(x_{1}, …, x_{n}) a že si přejeme ověřit, zda je polynom f identicky nulový. Ověřit to analyticky je neskutečné počítání. Předpokládejme místo toho, že jsme vygenerovali náhodný vektor (r_{1}, …, r_{n}) a vyčíslili f(r_{1}, …, r_{n}). Pokud f(r_{1}, …, r_{n}) ≠ 0, víme že f je nenulový. Pokud f(r_{1}, …, r_{n}) = 0, je buď f identicky nulové nebo jsme měli obrovské štěstí s výběrem (r_{1}, …, r_{n}). Proveďme tyto kroky několikrát a pokud vždy obdržíme nulu, můžeme tvrdit, že f je identicky nula. Pravděpodobnost toho, že jsme udělali chybu je zanedbatelná.

Je-li π výpočetní problém a x je vstup nebo instance π, řekneme, že náhodný algoritmus pro řešení π postupuje následovně. V jistých okamžicích pro řešení instance x problému π algoritmus provede náhodné rozhodnutí. S vyjímkou těchto náhodných rozhodnutí je algoritmus čistě deterministický. Jazyk L je náhodně rozhodnutelný v polynomiálním čase neboli leží ve třídě RP, pokud existuje polynom f a polynomiální algoritmus, který pro každý vstup x a každý možný certifikát y délky f(|y|) vypočte hodnotu ν(x, y) ∈ {0, 1} tak, že

1. x ∉ L implikuje ν(x, y) = 0 pro všechna y.

2. x ∈ L implikuje ν(x, y) = 1 pro alespoň polovici všech možných certifikátů y.

Evidentně

RP ⊆ NP

a

P ⊆ RP.

70  Výpočetní složitost

Autentičnost a digitální podpisy

6.1 Motivace

V předchozích 3 kapitolách jsme předvedli metody, které mohou pomoci proti pasívnímu útoku; pomocí zašifrování lze data pro nepovolané osoby udělat nečitelná. Téma této kapitoly je věnováno metodám proti aktivnímu útoku.

Kryptografický protokol spedifikuje, jakým způsobem každá strana začíná a odpovídá na zprávy a to včetně chybných nebo ilegálních zpráv. Protokol může rovněž specifikovat požadavky na nastavení jako je např. nastavení knihovny veřejných klíčů. Strana, která se řídí protokolem, bude ochráněna proti jistým specifikovaným nebezpečím i v tom případě, že ostatní strany se protokolem neřídí.

Je zřejné, že Mr. X může způsobit podstatně větší škodu, jestliže neumí pouze pasívně číst data, nýbrž je dokonce aktivně změnit. Skutečně se u většiny dnešních aplikací v kryptologii požaduje autentičnost dat a ne jejich utajení. Je zvykem rozlišovat 3 základní typy problémů, které vzniknou z různých variant aktivního útoku. Odpovídající ţbezpečnostní architektura� byla vytvořena institucí International Standards Organisation (ISO) v ţSecurity Addendum k referenčnímu modelu ISO�.

Nejdříve je třeba ptát se, zda byla zpráva přenesena bez změny nebo zfalšování; jedná se o požadavek integrity zprávy. Je-li Mr. X v pozici, že může měnit zprávy, nezbývá než doufat, že příjemce zpozoruje případnou změnu. Musí být schopen rozhodnout, zda byla zpráva změněna či nikoliv.

Druhý typ útoku je prvnímu podobný; zde je položen důraz na otázku, zda si příjemce může být jistý, že zpráva skutečně pochází od údajného odesilatele. Mluvíme pak o autentičnosti zprávy.

Poslední varianta je autentičnost uživatele: Může osoba dokázat svoji identitu? Příjemce potřebuje prostředek, aby se mohl přesvědčit o tom, že skutečně komunikuje s tou osobou, o které si myslí, že je s ní spojen.

6.2 Integrita a autentičnost

6.2.1 Message-Authentication-Code

Připomeňme si, že při integritě a autentičnosti zprávy jde o to, abychom vyvinuli metody, které příjemci umožní rozhodnout, zda zpráva došla neporušená a autentická. K tomu potřebuje příjemce něco, s čím může být zpráva ověřena: Potřebuje dodatečnou informaci od odesilatele. Takový informační blok se nazývá kryptografický zkušební součet neboli Message-Authentication-Code, zkráceně MAC.

Protokol k vytvoření a verifikaci kryptografického zkušebního součtu je založen na použití tajného klíče k, který je znám jak odesilateli tak příjemci, a kryptografickém algoritmu A, který budeme v dalším diskutovat.

Odesílatel neposílá pouze holou zprávu M, nýbrž dodatečně příslušný MAC; ten se vypočte pomocí klíče k algoritmem A ze zprávy M následovně:

MAC = A_{k}(M).

Poznamenejme, že M je odesíláno nezašifrované, protože cílem odesílatele není utajit obsah zprávy, nýbrž zprávu zabezpečit. Pokud chceme navíc důvěrnost, musí být m a MAC zašifrovány.

Nyní přijde na řadu příjemce. Jeho zájem je zjistit, zda přijatá zpráva souhlasí se zprávou odeslanou a zda skutečně pochází od uvedeného odesilatele. Aby to provedl, simuluje proceduru odesilatele: Použije algoritmus A s klíčem k na přijatou zprávu M′ a prověří, zda výsledek souhlasí s obrženým MACem.

Je-li A_{k}(M′) ≠ MAC′, ví příjemce, že se ţněco� stalo: proto neakceptuje zprávu jako autentckoi a odmítne ji. Je-li ale A_{k}(M′) = MAC′, může si být dostatečně jistý, že zpráva nebyla změněna. Přirozeně tato jistota závisí ve velké míře na kvalitě algoritmu A a velikosti množiny možných klíčů. Představy o MAC–mechanismu jsou následující:

• Podvodu ze strany Mr. X bude zamezeno, protože nezná klíč k. Musel by totiž spočítat odpovídající MAC pro svou zprávu.

• Příjemce může pouze rozpoznat, či je zpráva neporušená a autentická; v záporném případě nemá žádnou možnost zrekonstruovat původní zprávu. To znamená, že v tomto případě je nutný nový přenos zprávy.

• MAC–mechanismus je metoda k dosažení integrity a autentičnosti. Už jsme viděli, že lze poznat integritu. Poku proběhne verifikace kladně, je příjemce rovněž přesvědčen o autentičnosti zprávy, protože odesilatel je jedinou jinou instancí, která zná tajný klíč.

*

Jaké algoritmy A můžeme použít k výpočtu MACu? Okamžitá odpověď je jednoduchá: použijme jednoduše šifrovací algoritmus, přičemž MAC je kryptogram, který odpovídá zprávě M. Odhlédneme-li od toho, že takovýto slabý algoritmus není vhodné doporučit, má tento návrh tu nevýhodu, že přenášená data jsou dvojnásobně delší než ţvlastní zpráva�. Přirozeně každý MAC prodlouží zprávu, ale chtěli bychom délku tohoto dodatečného bloku držet v nějakých rozumných mezích.

V praxi používáme k výpočtu MACu také šifrovací algoritmus, ale ne přímo, nýbrž v tzv. Cipher-Block-Chaining módu. Představme si šifrovací algoritmus f (v praxi se většinou používá algoritmus DES), který zobrazuje bloky zprávy složených z n znaků pomocí nějakého klíče K na bloky kryptogramu, rovněž složených z n znaků (typická hodnota je n = 64). Abychom mohli vypočítat MAC, rozdělíme zprávu M do bloků M_{1}, M_{2}, …, M_{s} délky n. Pak aplikujeme f na blok M_{1} a obdržíme první blok kryptogramu C_{1} = f_{K}(M_{1}). Potom přičteme C_{1} k M_{2} a položíme C_{2} = f_{K}(C_{1} ⊕ M_{2}). Tento postup opakujeme až skončíme výstupem C_{s} = f_{K}(C_{s−1}⊕M_{s}), který vybereme za MAC. Takto vypočtený MAC má následující přednosti:

– MAC má pevnou délku n nezávislou na délce zprávy.

– MAC závisí na všech blocích zprávy.

Protože všechny možné zprávy jsou zkomprimovány na MACy pevné délky, má mnoho zpráv tentýž MAC. To nepředstavuje žádný problém pro příjemce, protože ten nemusí rekonstruovat původní zprávu z MACu.

Ne všechny algoritmy jsou vhodné k tomu, aby byl Mr. X postaven před nepřekonatelné problémy. Algoritmus pro výpočet MACu by měl mít následující vlastnosti.

1. Mělo by být prakticky nemožné najít pro daný MAC odpovídající zprávu (pokud tato vlastnost platí, nazýváme algoritmus jednosměrnou (oneway) funkcí). ţPrakticky nemožné� znamená, že s dnešními metodami a počítači by vyřešení problému trvalo příliš dloho (několik století).

2. Mělo by být prakticky nemožné najít dvě zprávy, které mají tentýž MAC (jednosměrná funkce splňující tuto podmínku se nazývá bezkolizní).

Je velmi obtížné podat precizní matematickou definici jednosměrné funkce. Neformálně je jednosměrná funkce funkce f : S → T, kde S a T jsou množiny takové, že

(1) pro všechna x ∈ S je f(x) ţsnadno� vypočitatelné,

(2) máme-li k dispozici informaci, že f(x) = y, neexistuje žádný ţpřiměřený� způsob

jak získat (výpočtem) x pro ţdostatečně velké� množství prvků y z T.

Pracovní slova zde jsou ţsnadno�, ţpřiměřeně� a ţdostatečně velké�.

Je zřejmé, že je-li dáno f(x), jeden způsob, jak získat x je prohledávat všechny možné hodnoty x ∈ S. Nepovažujeme to za přiměřené, protože S sestává obvykle z posloupnosti binárních řetězců délky n ∼ 200.

Požadujeme, že výpočet pro nalezení x ze znalosti y je příliš dlouhotrvající nebo nákladný, kdykoliv y leží v ţdosti velké� podmnožině množiny T. Příklad. Elementárním příkladem kandidáta na jednosměrnou funkci je, pro dostatečně velké prvočíslo p, funkce f(x), kde f(x) je polynom nad tělesem Z_{p}. Pak je relativně snadné vypočíst f(x) (1 ≤ x ≤ p−1), ale obvykle je těžké nalézt řešení rovnice

f(x) = y.

Výše uvedená nepřesná definice znamená, že co je jednosměrná funkce se mění s dobou. Například, výpočet požadující milión instrukcí a 1O OOO slov paměti nemohl být v roce 1950 považován za snadný, ale nyní by trval několik sekund na osobním počítači. Tedy funkce považovaná v roce 1950 za jednosměrnou nemusí být za ni považovaná nyní.

Jedna metoda podání formální definice by mohlo být užitím fyzikálního přístupu. Např. 10^{60}-bitová paměť vždy zůstane nedosažitelnou, protože i kdybychom potřebovali pouze jednu mulekulu na bit paměti, její konstrukce by vyžadovala více hmoty než existuje v slunečním systému. Podobně, termodynamika nám dává omezení maximálně 10^{70} operací, které lze provést s využitím celkové energie slunce.

Nižší úroveň nedosažitelnosti je použití myšlenek výpočetní složitosti. Nejdříve uvažujme některé z vlastností, které bychom rádi požadovali po jednosměrné funkci.

(I) Výpočet f(x) z x musí být přiměřený: vyjádříme to tím, že f je vypočitatelná v polynomiálně omezené době (říkáme, že f ∈ P.

(II) Výpočet f^{−1} nesmí být snadné; budeme tudíž požadovat, že není znám žádný algoritmus pro výpočet f^{−1} v polynomiálně omezené době.

(III) Třetí podmínka bude tzv. upřímnost funkce tj., že existuje polynom p splňující |x| ≤ p(|f(x)|).

Poslední podmínka je technická podmínka pro vyloučení funkcí jako

f(x) = ⌈log logx⌉,

která zcela jistě splňuje (I) a (II), ale kterou bychom nemohli obvykle považovat za jednosměrnou funkci. Funkce f splňující (I),(II) a (III) se nazývá slabě jednosměrná funkce.

Příklad. Nechť I_{k} značí množinu všech k-bitových přirozených čísel tj.

I_{k} = {2^{k−1}, …, 2^{k} − 1} (k = 1, 2, …).

Nechť S_{k} = I_{k} × I_{k} a nechť f : S_{k} → Z^{+} je definována jako

f(m, n) = m · n.

Položíme-li S = ⋃{S_{k} : 1 ≤ k < ∞} a rozšiříme-li f na S, získáme slabě jednosměrnou funkci. Přitom v současné době není známo, že by inverzní funkce ležela v P.

Není lehké najít matematickou explicitní definici jednosměrné funkce. Uveďme následující příklad.

Příklad. Buď F šifrovací algoritmus, který zobrazuje zprávu M pomocí klíče K na kryptogram C, F_{K}(M) = e(M, K) = C a předpokládejme, že M ⊆ K. Změňme trochu tuto funkci. Zafixujme za tímto účelem (ne tajnou) zprávu M_{0} (např. M_{O} = 00 … 0); tato ţzpráva� se objeví v algoritmu místo obvyklé zprávy, nehraje ale roli variabilní zprávy. Variabilní zpráva se vloží do algoritmu F na místě klíče. Krátce: uvažujeme funkci

f = e(M_{0}, −) : M → C.

Tvrdíme pak, že f je jednosměrná funkce. Představme si, že Mr. X zná jak M_{0} tak i C a chtěl by nají M. V řeči šifrovacího algoritmu F to lze vyjádřit následovně: Mr. X zná sobě odpovídající dvojici zpráva-kryptogram (M_{0}, C) a chtěl by vypočíst klíč. Je-li algoritmus F kryptologicky bezpečný, je rezistentní proti tomuto known-plaintext útoku a proto je f jednosměrná funkce.

Položme si otázku, zda lze matematicky dokázat, že tato funkce f je jednosměrná. Odpověď zní: Ne! Matematici nemohli ještě o žádné funkci dokázat, že je jednosměrná. To znamená, že neznáme žádnou funkci, jejíž funkční hodnoty lze spočítat v polynomiálně omezené době, ale která při výpočtu funkce inverzní potřebuje exponenciální dobu. Nevíme tedy, zda teoreticky jednosměrné funkce existují. Pro praktické účely mají ale výše popsané funkce dostatečně dobré vlastnosti.

6.3 Autentičnost uživatele

Základní úloha bezpečnostní techniky je spolehlivá identifikace osob tj. autentifikace. Dřívo to byl výlučně proces mezi dvěma lidmi, který je dnes rozšířen na proces mezi člověkem a počítačem. Přitom vznikají přirozeně problémy; ale, jak uvidíme, lze i s počítačem provádět velmi dobrou autenticitu uživatele. Nejprve si připomeňme, jak je tento problém řešen mezi lidmi. Zásadně lze lidi poznávat podle následujících znaků:

– Osobu lze identifikovat podle charakteristických vlastností.

– Osobu lze identifikovat podle vlastnictví.

– Osobu lze identifikovat podle znalosti.

První mechanismus je v běžném životě používán tak často, že si ho ani nejsme vědomi: poznáváme naše známé podle jejich obličeje, hlasu, chůze atd. V jistých situacích se používají za účelem obzvlášť spolehlivé identifikace otisky prstů. Následující metody se používají jen ve speciálních situacích. V druhém kole kupónové privatizace je nutno předložit občanský průkaz, kde je uvedeno české občanství; při přechodu hranic se musíme prokázat pasem; platíme-li kreditní kartou, lze ověřit identitu jejím vlastnictvím atd. Identifikace na základě znalosti je prováděna velmi zřídka – ačkoliv tento mechanismus je znám již z nejstarších dob (vojáci musí znát současné heslo, aby se mohli identifikovat).

Při procesu autenticity mezi člověkem a počítačem je situace zcela jiná. Autenticita na základě znalosti je mechanismus, který lze nejjednodušeji realizovat; autenticita na základě vlastnictví je rovněž možná. Naproti tomu je autenticita podle charakterostických vlastností velmi komplexní a používá se pouze při aplikacích, které vyžadují extrémně vysokou bezpečnost. Proto se budeme výhradně zabývat s metodami založenými na znalosti resp. vlastnictví. Při použití těchto metod má uživatel nějaké tajemství a počítač se chce přesvědčit, že osoba má skutečně jí odpovídající tajemství.

Hesla

Klasická metoda, se kterou se osoba prokáže stroji, je založena na heslech. Heslo je libovolná posloupnost znaků (písmena, číslice, speciální znaky), která je výlučným tajemstvím osoby a počítače. To znamená, že v ideálním případě znají jen uživatel a počítač příslušné heslo.

Základní myšlenka je jednoduchá: počítač uložil ţreferenční heslo� P_{0}, které je známo uživateli. Když chce uživatel prokázat svou antenticitu (např. přístup k danému počítači), napíše své heslo P a počítač porovná, zda jsou P a P_{0} totožné. Uživatel je připuštěn, jestliže P = P_{0}.

Je mnoho problémů s hesly, obzvláště takové, které souvisí se špatnám zacházením s hesly. My se budeme věnovat jen těm problémům, které lze řešit pomocí kryptologických prostředků. To jsou problémy, které se týkají ukládání hesel.

V případě, že má Mr. X čtecí práva na soubor obsahující hesla (nebo si ho opatří), může číst všechna hesla a tím se stát libovolným uživatelem. Výše popsaná procedura je pouze tehdy bezpečná, jestliže je soubor obsahující hesla uložen jako nečitelný – a to je požadavek, který každý systémový programátor odmítne jako nerealizovatelný. Přirozeně nám napadne zašifrovat hesla. Když to provedeme ţnaivně�, navrhneme následující protokol: počítač uloží zašifrovaná hesla P^{∗} = e(P_{0}, K),; při ověření autenticity uživatele se P^{∗} rozšifruje a srovná se s heslem zadaným uživatelem.

Tato procedura má jasnou výhodu. Dokonce i když Mr. X může číst soubor obsahující hesla, může je číst pouze zašifrovaná. Protože ale není schopen je dešifrovat, nemůže simulovat jednotlivého uživatele vložením správného hesla.

Je tento argument správný? Přirozeně jsme podstatně redukovali množinu tajných dat; namísto neohraničeného počtu hesel, která mají být tajně uložena, musíme v šifrovacím modelu jen uložit tajně klíč K. To je nepochybně velká výhoda, ale není to žádné principiální řešení problému: Pokud si Mr. X opatří klíč K, může dešifrovat všechna zašifrovaná hesla a má tak stejně jako předtím možnost stát se libovolným uživatelem.

Po takovéto analýze je pro tvůrce přístupového systému založeného na heslech těžké vyjádřit své přání: chtěl by mít k dispozici funkci, která ţzašifruje� hesla bez toho, že by použila tajný klíč – to není nic jiného, než naše známá jednosměrná funkce.

Nyní použijme takovouto jednosměrnou funkci f. V paměti počítače uložme hodnotu P^{#} = f(P_{0}). Během procedury ověření autenticity se aplikuje f na posloupnost znaků P, kterou vloží uživatel. Pak počítač prověří, zda platí P^{#} = f(P).

Přednost této metody je zřejmá: soubor obsahující hesla je nedešifrovatelný a není žádné tajmeství. Je pozoruhodné, že jednosměrné funkce byly vyvinuty proto, aby ukládaly hesla v nečitelné formě; tato metoda byla v šedesátých letech navržena a realizována Rogerem Needhamem z University Cambridge.

Přirozeně nechrání takováto procedura proti špatně zvoleným heslům. Mr. X se může totiž pokusit o ţchosen password�-útok: Má-li seznam nejčastěji používaných hesel (dívčí jména, telefonní čísla, data narození,...), může aplikovat f na tato populární hesla a výsledky srovnat s obsahem souboru obsahující pozměněná hesla. Empirické výsledky ukazují, že Mr. X může tímto způsobem získat podstatné procento všech hesel.

Autenticita pomocí čipových karet

Žádný systém založený na heslech nesplňuje extrémně vysoké bezpečnostní požadavky. To spočívá zcela jednoduše na tom, že lidé nemají schopnost si pamatovat hesla; aby si člověk zapamatoval heslo (bez toho, že by si je bokem zapsal), musí se jednat o krátké a přehledné slovo. Mimo to je ochrana pomocí hesel statická metoda pro určení autenticity. Přiroozeně může počítač nutit uživatele k pravidelné obměně hesel, např. každý měsíc. To je ale jen malý pokrok: Stejné heslo se vždy použije vícekrát. Proč je to problém? Mr. X jednou odposlechne přenos hesla a od té chvíle se může vydávat za uživatele.

Abychom vyřešili tento problém, musí se data, která jsou vyměňována mezi počítačem a uživatelem neustále měnit – pokaždé nová otázka a nová odpověď. Je jasné, že uživatelova odpověď se musí formulovat tak, že nikdo jiný nemůže tuto odpověď poskytnout. To znamená, že reakce uživatele na otázku musí záviset na nějakém tajemství, jinak by totiž na ni mohl odpovědět i Mr. X.

Odpovídající protokol podle metody Challenge-and-Response probíhá následovně. Jak počítač tak uživatel mají k dispozici jednosměrnou funkci f a společný tajný klíč K. Počítač obdrží od uživatele data k identifikaci; v našem případě třeba jméno uživatele A. Nato si počítač opatří pro dané jméno příslušný klíč K. (Klíč K může být uložen v seznamu, může být odvozen systémovým globálním klíčem nebo dán k dispozici pomocí podobné procedury.)

Počítač se musí přesvědčit o tom, že uživatel, který se chce identifikovat, je skutečně uživatel A a ne zákeřný Mr. X. Pokud může uživatel dokázat, že má správný klíč K, je automaticky uznán za autentického. Tj. považujeme za dokázané, že se skutečně jedná o uživatele A. Cílem počítače v následující popsané proceduře autenticity je ţnepřímo� se přesvědčit, že uživatel je ve vlastnictví klíče K. V popisu protokolu označme klíč, který je ve vlastnictví uživatele (to by mohl být i Mr. X) jako K′.

Za tímto účelem klade počítač uživateli otázku tím, že mu zašle náhodně zvolené číslo RAND. Pak uživatel vypočte parametr autenticity AP′ = f_{K′}(RAND) a zašle jej počítači. Současně počítač vypočte hodnotu AP = f_{K}(RAND) a porovná zda AP = AP′. Pokud ne, pak něco nesouhlasí, v opačném případě má počítač s vysokou pravděpodobností stejný klíč jako uživatel. Tedy uživatel bude akceptován.

Tato procedura má dvě výhody a dvě nevýhody. Protože je číslo RAND náhodně voleno, mění se případ od případu a Mr. Xnemá žádnou šanci předpovědět následující RAND. Také AP má charakter náhodného čísla, takže Mr. X nikdy nemůže na otázku dát správnou odpověď. Právě tak důležitá je skutečnost, že pomocí protokolu se prokáže, že oba klíče jsou identické, ale klíče samotné se uvnitř protokolu nikdy neobjeví.

Nevýhody Challenge-and-Response protokolu jsou sice ţmalé�, ale nesmějí být jak prakticky tak teoreticky zanedbány. Uvědomme si, že počítač vlastní přístup k tajným klíčům uživatelů. To počítači umožňuje, aby se vydával vzhledem k jiným instancím (nebo vůči sám sobě) za uživatele. Jinak řečeno: Předpoklad pro použití Challenge-and-Response protokolu je, že uživatelé důvěřují integritě počítače provádějícího autenticitu.

Jiná nevýhoda spočívá v tom, že odesilatel A musí provést algoritmus f. Provedení kryptografického algoritmu však přesahuje znalosti a možnosti každého lidského stvoření; tyto věci bychom měli přenechat elektronickému sluhovi. Takovýmto sluhou může být např. tzv. ţčipová karta�. Problém je však v tom, aby čipová karta rozpoznala, že ji chce použít oprávněný uživatel A a ne Mr. X. Musí tedy od uživatele vyžadovat, aby vůči ní prokázal totožnost.

6.3.1 Zero-Knowledge protokol

Zero-Knowledge protokol je procedura, která jedné straně dovolí přesvědčit druhou stranu, že má určité tajemství, aniž by prozradila o tomto tajemství nejmenší informaci.

Zero-knowldege protokol je dvoustranný protokol; jedna strana se nazývá dokazovatel, druhá prověřovatel. Dokazovatel zná nějakou skutečnost a přeje si přesvědčit prověřovatele o této skutečnosti. Prověřovatel chce protokol, který mu dovolí se přsvědčit o platnosti této skutečnosti právě tehdy, když je tato skutečnost pravdivá. Přesněji, dokazovatel (jestliže jedná podle protokolu) bude schopen přesvědčit prověřovatele o platnosti skutečnosti, pokud je tato skutečnost pravdivá, ale dokazovatel (dokonce i když se pokusí podvádět) nebude mít žádnou podstatnou šanci v přesvědčení prověřovatele o platnosti skutečnosti, pokud tato neplatí. Přitom si dokazovatel nepřeje podat žádnou informaci o podstatě skutečnosti (např. důvody proč skutečnost platí).

Uveďme tři jednoduché příklady.

Historický příklad: Tartagliovo tajemství

Řešení rovnic byl v historii matematiky nanejvýš důležitý problém. Jednoduché bylo řešení lineárních a kvadratických rovnic. Kubická rovnice, tedy rovnice tvaru

ax^{3} + bx^{2} + cx + d = 0

nebyla tak snadno řešitelná a nalezení jejího řešení trvalo podstatně déle. Benátský matematik Niccolo Tartaglia (1499-1557) objevil podle svých údajů v roce 1535 metodu jejího řešení. Veřejně oznámil svůj objev, ale vzorec pečlivě tajil. Tartaglia snadno ukázal, že je schopen kubickou rovnici řešit a tím každého bez obtíží přesvědčil, že jeho řešení je správné.

Ačkoliv se Tartagliovi konkurenti mimořádně snažili, nebyli schopni odhalit jeho tajemství. Až Geronimo Cardano (1501-1576) přesbědčil Tartagliu, aby mu vzorec ukázal. Slíbil, že ho udrží v absolutní tajnosti. Stalo se. co se stát muselo: Ve své knize Ars Magma (1545) zveřejnil Cardano Tartagliův vzorec; čestně však popsal, že tato formule pochází od Tartaglii. Přesto zůstává ironií osudu, že se dnes vzorec pro řešení kubické rovnice nazývá Cardanova formule.

Pro nás je důležité, že Tartaglia měl tajemství (metodu řešení kubických rovnic), které byl schopen utajit a o jehož existenci mohl přesvědčit ostatní.

Odmocninový příklad

Uvažme hru probíhající následovně: Máma hráče A a hráče B. Hráč A tvrdí, že zná číslo s, které hráč B nezná, a s přitom splňuje, že s^{2} ≡ 34 mod 55. Hráč A chce hráče B přesvědčit, že toto číslo opravdu zná. Proto náhodně zvolí číslo r, umocní je na druhou a spočítá zbytek po dělení 55, řekněme např. 26 a ukáže jej hráči B.

Nyní přichází na řadu hráč B. Hodí si mincí; pokud padne hlava, chce znát od prvního hráče r · s mod 55, jinak pouze r.

Předpokládejme, že padla hlava. Pak řeknu, že r · s mod 55 = 53, a to lze jednoduše prověřit, neboť skutečně platí

53^{2} mod 55 = 4 = (26 · 34) mod 55 = r^{2} · s^{2} mod 55.

Uvědomme si, že je právě tak těžké najít s, pokud navíc známe r^{2} mod 55 a r · s mod 55, jako kdybychom je obě neznali. Připomeňme, že r nesmí být zcela náhodně zvoleno; například by r mělo být větší než \sqrt{55}.

Lze u této hry podvádět? Ano - v případě, že hráč B neobjeví podvod. Ale po čase se na alespoň jeden podvod přijde.

Představme si, že hráč A podváděl a číslo s nezná. Kdyby věděl, že mince hráče B neukáže hlavu, neměl by žádný problém ukázat hráči B číslo r. Avšak A by nevěděl, co udělat, kdyby hráč B chtěl znát r · s mod 55!

Kdyby hráč A věděl, že mince hráče B ukáže hlavu, mohl by A také podvádět; nejprve by si vybral číslo, o kterém by věděl, že jeho zbytek po dělení 55 je čtverec, např 2^{2} = 4 a zvolil by pak

r^{2} = (4/s^{2}) mod 55 = (4/34) mod 55 = 26.

V případě, že by hráč B chtěl znát r · s mod 55, odpoví jednoduše 2 a hráč B se může přesvědčit, že platí

2^{2} = (26 · 34) mod 55 = (4/34) · 34 mod 55.

Když ale hráč A musí říci číslo r, okamžitě se přijde ne jeho podvod.

Celkem tedy můžeme říci, že hráč A má v každém kole 50%-ní šanci úspěšného podvodu. Aby se tedy hráč B přesvědčil, že hráč A nelže, musela by se hra hrát více kol.

Tato hra ukazuje rozhodující vlastnosti skutečného Zero-Knowledge protokolu:

• Protokol je interaktivní; oba partneři provádí náhodné volby (hráč A volí náhodné číslo r, hráč B se rozhodne, zda chce znát r nebo r · s mod 55).

• Pravděpodobnost úspěšného podvodu závisí na počtu odehrátých kol. V každém kole se pravděpodobnost zmenší na polovičku.

Příklad tříbarevného obarvení grafu

Uvažme následující hru dvou hráčů A a B. Hráč A chce přesvědčit hráče B, že jistý graf je obarvitelný třemi barvami, aniž by mu prozradil konkrétní obarvení. Přitom hráč A to může provést v posloupnosti |E|^{2} stavů zadaných následovně:

• Hráč A náhodně přebarví tyto tři barvy (např. všechny červené uzly na modro, všechny žluté uzly na červeno a všechny modré uzly na žluto).

• Hráč A zašifruje barvu každého uzlu pomocí použití šifrovacího schématu s různou pravděpodobností pro každý vrchol. Potom ukáže hráči B všechna tato zašifrování spolu s předpisem přiřazujícím zašifrování s odpovídajícím vrcholem.

• Hráč B vybere hranu grafu.

• Hráč A provede dešifrování barev dvou uzlů této hrany odkrytím odpovídajících šifrovacích klíčů.

• Hráč B potvrdí, že dešifrování bylo provedeno správně a že dva koncové uzly hrany jsou obarveny dvěma různými, ale legálními hranami.

Je-li graf skutečně 3-barevný (a hráč A zná obarvení), pak hráč B nikdy nezjistí žádnou špatně obarvenou hranu. V případě, že graf není 3-barevný, pak existuje šance alespoň |E|^{−1} v každém stavu, že hráč A se hráče B pokouší podvést. Šance, že by hráč A mohl hráče B podvést v |E|^{2} krocích je exponenciálně malá.

Poznamenejme, že historie naší komunikace – v případě, že graf je 3-barevný – sestává se zřetězení zpráv odeslaných během každého stavu. Je možné dokázat, (za předpokladu, že je možné perfektní zašifrování), že pravděpodobnostní rozdělení definované nad těmito průběhy naší množinou možných interakcí je nerozeznatelné v polynomiálním čase od rozdělení, které můžete vytvořit nad těmito průběhy samotnými, bez účasti hráče A. To znamená, že hráč B nezíská jinou vědomost z protokolu, než že graf je skutečně 3-barevný.

Nyní se věnujme skutečnému protokolu.

Fiat-Shamirův protokol

V roce 1986 předložili izraelští matematici Adi Shamir a Amos Fiat protokol, který otevřel nové rozměry v určování autenticity uživatele. Přesněji, jedná se o určení autenticity typu počítač – počítač, přičemž jedním z počítačů je čipová karta uživatele. Fiat-Shamirův protokol je založen na výsledcích Shafi Goldwassera a Silvia Micaliho z Massachusettského technologického institutu a rovněž Charles Rackoffa z Univerzity Toronto. Verze, kterou nyní popíšeme, je zobecněním odmocninového příkladu.

Bezpečnost protokolu spočívá na tom, že je mimořádně obtížné najít druhou odmocninu nějakého čísla v modulo n. Přesněji, buď dáno přirozené číslo n, které není prvočíslo. Jestliže neznáme rozklad n na součin prvočísel, je prakticky nemožné najít číslo s tak, že s^{2} mod n = v. Doporučeje se volit n tak veliké, aby bylo řádově asi 10^{200}; to znamená, že normálním písmen je n dlouhé asi 1 m.

Před vlastním procesem určení autenticity uživatele pomocí Fiat-Shamirova protokolu se zvolí v šifrovací centrále dvě prvočísla p a q a utvoří se jejich součin n = p · q. Je rozhodující, že centrála drží p a q v tajnosti, zatímco n je veřejně známo. Proto musí být n tak veliké, že faktorizace n je odsouzena k neúspěchu. Důvod proto je, že můžeme relativně jednoduše určit druhé odmocniny z mod p a mod q. Z těchto čísel lze pak snadno získat druhou odmocninu mod n.

Centrála spočítá pro každého uživatele číslo s (které je tajemství uživatele) a číslo v tak, že platí v = s^{2} mod n. Číslo v slouží k veřejné identifikaci uživatele. Centrála by mohla zvolit pro v identifikační údaje uživatele (v binární podobě) a odtud vypočítat s. Číslo n je veřejná systémová konstanta.

Tímto jsou už všechny úlohy centrály popsány. Zejména už centrála nehraje při aktuálních procesech určení autenticity žádnou úlohu.

Popis Fiat-Shamirova protokolu

Uživatel  Počítač

Uživatel náhodně zvolí

číslo r, které je nesoudělné s

n a vypočte x = r^{2} mod n.

[figure: x]  ⟶

Počítač náhodně vybere bit b.

Uživatel v případě, že b = 1 položí

y := r · s mod n; v případě, že

b = 0 položí y := r mod n.

[figure: y]  ⟶

Počítač prověří, že y je nesoudělné s n;v případě, že b = 1 prověří, zda y^{2} mod n = x · v mod n; v případě, že b = 0 prověří, zda y^{2} mod n = x.

Přitom zřejmě má Fiat-Shamirův protokol následující vlastnosti:

• Oba počítače musí provést jen několik málo výpočtů mod n: na straně uživatele se musí pouze umocnit na druhou náhodné číslo r; v polovině všech případů se musí ještě spočítat r · s. Počítač provádějící určení autenticity uživatele musí umocnit na druhou číslo y a v polovině všech případů vynásobit x s v.

• Počítač používá pouze veřejně dostupné informace, zatímco uživatel podstatným způsobem používá tajemství znalosti s.

• Počítač se za jistou dobu přesvědčí, že uživatel zná opravdu tajemství s. Pravděpodobnost, že by nepřítel, který nezná tajemství s pokaždé předpověděl, který bit b bude zvolen, je při t-násobném opakování protokolu jen 1/2^{t}. V případě, že t = 20, je tato pravděpodobnost méně než 1 ku miliónu.

• I po provedení určení autenticity uživatele zůstane tajemství s absolutně utajeno.

• Bezpečnost protokolu je v rozhodné míře závislá na tom, že výpočet odmocnin mod n je tak obtížné, že ani sám Mr. X není schopen vypočítat druhou odmocninu z v – a to ani tehdy ne, když odposlechne tisíce transakcí mezi uživatelem a počítačem.

6.4 Čipové karty

Co je to čipová karta? Čipová karta je plastiková karta o velikosti obvyklé šekové nebo kreditní karty, do které je zabudován čip, který je schopen ukládat data a provádět výpočty tj. čipová karta je skutečný minipočítač. Dnešní čipové karty nemají žádné baterie, takže proud musí být přiváděn během provozu z venku. To je jedna z úloh zlatých kontaktů, podle kterých lze odlišit čipovou kartu od jejích zaostalých příbuzných. Jiná jejich důležitá funkce je, že zajišťují transport dat od a do karty.

Čipová karta vznikla v roce 1974, kdy francouzský novinář Roland Moreno nahlásil k patentování systém pro ukládání dat na nezávislém přenosném předmětu. Od této doby byly vyrobeny stovky miliónů čipových karet a to hlavně ve Francii, kde se stala vzorem čipová karta CP 8 firmy Bull. Také v Německu se čipové karty masově používají (telefonní karty).

Proč se tak zajímáme v kryptologii o čipové karty? Protože s čipovou kartou máme poprvé k dispozici médium, které zajišťuje bezpečnost na základě kryptologie a to pro každého a ne pouze pro experty. To spočívá v tom, že čipová karta má dvě vlastnosti, které doposud byly od sebe odděleny:

• Čipové karty jsou ideální pro kryptologii: mohou provádět kryptologické algoritmy a ukládat bezpečným způsobem tajné klíče.

• Čipové karty jsou ideální pro lidi: dají se velmi jednoduše používat. Uvidíme, že jediná úloha uživatele je, aby si zapamatoval svoje tajné číslo, aby se mohl vůči čipové kartě identifikovat.

Shrneme-li si předchozí argumenty, máme že čipové karty se neobsluhují obtížněji než obvyklé kreditní karty; poskytují však bezpečnostní služby na nejvyšší úrovni, totiž takové, které jsou založeny na kryptologických mechanismech.

6.4.1 Čipové karty na kontrolu vstupu

Základní idea je vložit čipovou kartu mezi uživatele a počítač, aby se proces určení autenticity uživatele stal bezpečnější. Tento proces je prováděn následovně:

• Uživatel se identifikuje vůči své čipové kartě pomocí tajného čísla, které se obvykle nazývá PIN (osobní identifikační číslo).

• Karta se identifikuje vůči počítači pomocí dynamického protokolu pro určení autenticity.

V případě, že Mr. X si chce zajistit neoprávněný přístup k systému, musí nejen zjistit u právoplatného uživatele tajné číslo, nýbrž i získat čipovou kartu.

Uvažme nyní oba kroky k určení autenticity samostatně.

• Když uživatel zadá svůj PIN přes klávesnici terminálu, přenese se tajné číslo přímo k čipové kartě a porovná se s uvnitř uloženou referenční hodnotou. Pokud obě tyto hodnoty nesouhlasí, nedovolí karta žádnou jinou službu. Protože se porovnává pouze tajné číslo uživatele uvnitř jeho karty, není třeba žádného centrálního PIN–souboru. Můžeme si snadno představit systémy, u kterých může uživatel měnit svůj PIN, pokud chce, a u kterých může mít PIN proměnnou délku.

• Proces určení autenticity karty vůči počítači se provádí pomocí Challengeand-Response procedury, jak je popsáno v odstavci 6.3. Proto potřebují karta a počítač společný algoritmus f a společný tajný klíč K. Počítač vyzve kartu tak, že jí zadá náhodné číslo RAND. Karta aplikuje algoritmus f za klíče K na náhodné číslo RAND a zašle výsledek AP jako odpověď počítači. Tento pak v mezidobí rovněž spočítal AP a může se tak přesvědčit, zda oba výsledky splývají.

Přednosti této procedury leží na dlani: Čísla RAND se mění případ od případu; z tohoto důvodu nemůže Mr. Xpředpovědět, které bude příští číslo RAND. Přitom tajná data (jako např. klíče) zůstanou utajené.

Dnešní čipové karty nají standardizované rozměry 53, 98 × 85, 595 × 0, 76 mm dle normy ISO 7810. Čipové karty nesou ve svém těle vlepený nebo zalaminovaný plochý mikroelektronický paměťový modul, jehož poloha, význam a počet kontaktů je normován. Všeobecně i u nás rozšířenou takovou kartou je telefonní karta SPT Telecom, s.p. pro placení ve veřejných telefonních automatech. Modul totiž nesmí být větší než 20 mm^{2}, jinak by se totiž čip pro ohnutí karty mohl zlomit. Proto jsou na čipových kartách prakticky všude implementovány symetrické algoritmy, tj. algoritmy, u kterých obě strany vlastní tentýž tajný klíč. Samozřejmě bychom si přáli implementaci Zero-Knowledge protokolu nebo asymetrických algoritmů, což ale doposud není zcela možné.

Karty osazené paměťovým čipem jsou buď kontaktní nebo bezkontaktní. Velikost a typ jejich paměti předurčují čipové kary pro určité typy aplikací. Z hlediska použití lze rozlišit tyto základní skupiny karet:

– paměťové karty s volným přístupem (Free Access Cards) obvykle s 2-4 kbity paměti typu EEPROM.

– předplatní karty (Prepaid Cards/Token Memorz Cards) obvykle v podobě PROM nebo kombinace ROM/PROM 104-160-208 bitů, při aplikaci ţabacus� čitačů až 20 kbitů jednotek,

– víceúčelové paměťové karty (Multi-Service Cards, Electronic Purse) s pamětmi ROM/EPROM do 1 kbit spolu se zabezpečovací logikou jakou je transportní kód, který slouží k otevření karty v procesu jejího vydávání,PIN na kartě, který je vydavatelem karty přidělen adresně uživateli karty, který slouží pro ověření konzistence karty a jejího předkladatele ap.

Aplikace pro identifikaci uživatele

Důkazy založené na Zero-Knowledge protokolu tvoří nový revoluční způsob pro realizaci hesel. Základní myšlenka je, že každý uživatel uloží tvrzení věty ve své veřejně přístupné knihovně a přitom důkaz tvrzení zná pouze on. Po loginu uživatel provede Zero-Knowledge důkaz správnosti věty. Je-li důkaz uspokojivý, je poskytnuto povolení práce na počítači. Toto garantuje, že dokonce protivník, který odposlechne Zero-Knowledge důkaz, se nemůže naučit tolik, aby získal neautorizovaný přístup k počítači. To je nová vlastnost, které nemůže být dosaženo tradičním heslovým mechanismem.

6.4.2 Nákupy s čipovou kartou

Idea elektronických nákupů (electronic cash) je následující: Zákazník A jde do obchodního domu, vybere si zboží a zaplatí pomocí čipové karty.

Situace, která vznikne, je problém určení autenticity mezi třemi různými skupinami: zákazník A, obchodník O a banka B (za předpokladu identity banky obchodníka a zákazníka).

Musíme rozlisšovat mezi dvěma různými službami – určení autenticity komunikujících partnerů a určení autenticity zprávy, což je nyní něco jako elektronický šek.

Určení autenticity zákazníka A vzhledem k terminálu obchodníka O se provede pomocí obvyklého protokolu pro určení autenticity uživatele. Obvykle se požaduje oboustranné určení autenticity; také terminál obchodníka se musí vykázat vůči čipové kartě jako autentický. Čipová karta má pak možnost rozlišit manipulované terminály od opravdových. Takovýto protokol opět probíhá podle metody ţChallenge-and-Response� s tím rozdílem, že nyní posílá karta náhodné číslo, na které musí dát počítač obchodníka správnou odpověď.

Jiná věc je určení autenticity elektronického šeku. Tento dokument se podepíše způsobem MAC a pak je odeslán od čipové karty k terminálu obchodníka. Je zřejmé, že obchodník O nemůže změnit šek; z druhé strany je vhodné, aby mohl ověřit platnost šeku. Ale problém při použití symetrických algoritmů spočívá v tom, že každý, kdo dovede ověřit MAC, je schopen ho také zfalšovat (změní jednoduše dokument a určí s pomocí tajného klíče odpovídající nový MAC). Zde se nabízí jako nejjednodušší řešení asymetrická podpisovací schémata.

Když je z praktických důvodů nutné použít symetrické algoritmy, lze postupovat následovně:

Zákazník A a jeho banka B mají společný tajný klíč K^{∗}, který obchodník O nezná. Na elektronický šek D aplikujeme obvyklou MAC-proceduru. Potom, co jsou zákazník a karta akceptováni, lze uskutečnit nákup. Za tímto účelem musí potvrdit účetní data D (obnos, druh zboží, datum, jméno obchodního domu) a předat je takovým způsobem obchodníkovi O, že

– obchodník má jistotu, že obdrží peníze od banky, a

– na obchodmích datech obchodník O nemůže provést dodatečné úpravy (podvodný obchodník by mohl po dodání zboží zvýšit dohodnnutou částku a tuto zvýšenou částku požadovat od banky).

Aby bylo možno zabránit tomuto podvodu, má čipová karta uložený tajný klíč K^{∗}. To je klíč, který byl dohodnut mezi zákazníkem A a jeho bankou B – a tento klíč je zcela neznám každému potenciálmímu podvodníkovi.

Čipová karta neposílá pouze účetní data D na terminál obchodníka. nýbrž také s pomocí klíče K^{∗} podepsaná data. Takto konstruovaný MAC se nyzývá certifikát a označuje se CER. Takovýto CER zaručuje, že obchodník O nemůže zfalšovat získaný šek. Pokud se chce přesvědčit o spolehlivosti šeku, může pověřit určením pravosti banku.

Způsob certifikování není přirozeně ideální a to ze dvou důvodů. Nejdřív musí jak zákazník A, tak obchodník O důvěřovat bance B. Dále nemůže obchodník vyměnit šek okamžitě. Dohromady však nabízí tento systém podstatně větší bezpečnost pro všechny zúčastněné než jiné systémy založené na magnetických či jiných kartách.

Asymetrické šifrovací systémy neboli systémy s veřejným klíčem

Doposud jsme pracovali se šifrovacími systémy následujících vlastností:

1. Kdo může zašifrovat zprávu, může ji i dešifrovat.

2. Každá dvojice partnerů musí mít svůj společný tajný klíč.

Druhá vlastnost je nepochybně nevýhodná. Pokud by počítačová síť měla n navzájem propojených účastníků, museli by používat \frac{n·(n+1)}{2} různých šifrovacích klíčů, které by si účastníci museli mezi sebou vyměnit. Zvolíme-li např. n = 500, bylo by nutno mít v systému cca 125000 klíčů. Vzhledem k nutné obnově za nové klíče bychom se dostali do prakticky nerealizovatelné situace.

O šifrovacím systému s první vlastností pak obvykle mluvíme jako o symetrickém šifrovacím systému. První vlastnost můžeme považovat za výhodnou, protože lze k šifrování a dešifrování použít stejný stroj. Asymetrické algoritmy se vyznačují tím, že jsou od první vlastnosti co nejvíce možná vzdáleny. Ukážeme, že takovéto systémy nemají druhou vlastnost a tedy práce s klíči je jednoduchá.

Budeme hlavně používat pojem asymetrického algoritmu; občas budeme mluvit o public-key algoritmu. Takovéto postupy byly vyvinuty v roce 1976 Whitfieldem Diffiem a Martinem Hellmanem v jejich práci New Directions in Cryptography, za kterou tito američtí matematici obdrželi v témže roce výroční cenu M.I.T.

7.1 Asymetrické šifrovací systémy

Budeme předpokládat, že každý účastník T má dvojici klíčů, a to

• veřejný klíč E = E_{T} k zašifrování;

• soukromý (tajný) klíč D = D_{T} k dešifrování;

které se vyznačují následující vlastností: Ze znalosti klíče E_{T} nelze zjistit soukromý klíč D_{T} . Kryptosystém s touto vlastností se nazývá asymetrický kryptosystém.

Pokud navíc předpokládáme, že pro každou zprávu M platí

D(E(M)) = M,

mluvíme o asymetrickém šifrovacím systému. Asymetrický kryptosystém se nazývá asymetrické podpisovací schéma, pokud pro každou zprávu M lze pomocí veřejného klíče E prověřit, zda se k sobě M a D(M) hodí.

Všechny veřejné klíče jsou uloženy ve veřejně dostupném souboru (podobnému telefonnímu seznamu), zatímco soukromé klíče jsou tajné tj. známé pouze jejich vlastníkům.

Šifrování a dešifrování pomocí asymetrického šifrovacího systému probíhá ve 3 krocích:

1. Chce-li A zaslat B zprávu M, pak

• najde veřejný klíč E_{B} pro B,

• zašifruje zprávu M pomocí klíče E_{B} a

• odešle E_{B}(M) k B.

2. B může kryptogram E_{B}(M) dešifrovat, protože zná jako jediný tajný klíč

D_{B} :

D_{B} (E_{B}(M)) = M.

3. Žádný jiný účastník nemůže (E_{B}(M) rozluštit, protože podle předpokladu ze znalosti (E_{B} a (E_{B}(M) nelze získat znalost o D_{B} .

*

Výhody asymetrického šifrovacího systému jsou následující:

• Není potřeba výměna klíčů. Tímto je vyřešen hlavní problém symetrického algoritmu. Zejména je tedy s pomocí asymetrického algoritmu možná bezprostřední komunikace. Můžeme tedy navzájem komunikovat, aniž bychom se složitě dohadovali o klíči. Asymetrické algoritmy jsou ideální pro otevřenou komunikaci.

• Není potřeba mnoho klíčů. U symetrického algoritmu se zvyšuje počet klíčů kvadraticky s počtem uživatelů, u asymetrického algoritmu je počet klíčů roven dvojnásobku počtu uživatelů.

• Lze přijmout bez problémů nové uživatele. Je-li přijat nový účastník do symetrického systému, musí si s ním všichni staří účastníci vyměnit klíč. U asymetrického systému není naproti tomu nutno, aby staří účastníci aktualizovali svoje data.

• Mnoho asymetrických systémů poskytuje skvělé možnosti pro elektronický podpis.

Nevýhody asymetrického šifrovacího systému jsou pak:

• Doposud není znám žádný asymetrický kryptosystém, který by byl zároveň rychlý a bezpečný. Postup, kterým se budeme hlavně zabývat, je tzv. RSAalgoritmus. V poslední době se také pracuje s algoritmy, které spočívají na ţdiskrétních logaritmech�.

• Asymetrické algoritmy potřebují jistý dohled nad klíči. Může se totiž stát, že Mr. X opatří svoji schránku s falešným jménem, ke kterému se však hodí jeho klíč. Pak může zachytit všechny zprávy, které byly adresovány původnímu adresátovi.

7.2 Elektronický podpis

Další důležitou myšlenkou Diffieho a Hellmana je elektronický neboli digitální podpis. Nejdříve si ujasněme vlastnosti obvyklého podpisu rukou.

Předpokládejme, že osoba A se podepsala rukou na nějaký dokument D. Pak má tento podpis v ideálním případu následující vlastnosti:

• Pouze osoba A může vytvořit tento podpis.

• Každý jiný účastník může prověřit, že se opravdu jedná o podpis osoby A.

Diskutujme nejprve digitální podpis s použitím symetrického šifrovacího systému (např. DES). Popíšeme dva možné přístupy.

Diffie-Lamportovo schéma

Odesílat A, který si přeje podepsat n-bitovou binární zprávu

M = M_{1} … M_{n},

si předem vybere 2n klíčů šifrovacího systému ⟨M, K, C⟩. Označme je po řadě

jako  a_{1}, …, a_{n};  b_{1}, …, b_{n}.

Tyto klíče jsou tajné.

Je-li šifrovací algoritmus e, osoba A vygeneruje 4n parametrů {(X_{i}, Y_{i}, U_{i}, V_{i}) : 1 ≤ i ≤ n}, kde X_{i}, Y_{i} leží v definičním oboru e a

U_{i} = e(X_{i}, a_{i}) a V_{i} = e(Y_{i}, b_{i}) (1 ≤ i ≤ n).  (7.1)

Tyto parametry jsou dopředu zaslány příjemci B. Zároveň jsou odeslány nezávislému prověřovateli (veřejný registr).

Nyní předpokládejme, že osoba A chce odeslat podepsanou n-bitovou zprávu M = M_{1} … M_{n}. Bude postupovat podle následující procedury. Jejím podpisem bude řetězec

S = S_{1} … S_{n},

kde pro všechna i, 1 ≤ i ≤ n platí

S_{i} = \{ \begin{matrix}a_{i} & pokud M_{i} = 0, \\ b_{i} & pokud M_{i} = 1. \end{matrix}

Ověřovací protokol osoby B probíhá následovně: pro všechna i (1 ≤ i ≤ n) použije osoba B bit M_{i} a klíč S_{i}, aby ověřila, že

\{ \begin{matrix}pokud M_{i} = 0 & pak e(X_{i}, S_{i}) = U_{i}, \\ pokud M_{i} = 1 & pak e(Y_{i}, S_{i}) = V_{i}. \end{matrix}

Osoba B pak akceptuje podepsanou zprávu pouze za předpokladu, že ověřovací protokol je splněn pro všechna i.

Ačkoliv tento systém je jednoduchý pro použití a snadno pochopitelný, má minimálně dvě nevýhody. První je nutná předběžná komunikace s parametry. Důležitější je však zvýšení rozměru zprávy – např. v případě DESu, kdy klíče mají délku 64 bitů, by se zpráva zvětšila 64-krát.

Rabinovo pravděpodobnostní podpisovací schéma

Rabin (1978) navrhl jiný přístup. Buď e šifrovací funkce nějakého šifrovacího systému ⟨M, K, C⟩. Buď dále (K_{i} : 1 ≤ i ≤ 2r) posloupnost náhodně vybraných klíčů, které odesílatel A uchová v tajnosti. Příjemce B obdrží seznam 2r parametrů (X_{i}, U_{i}), (1 ≤ i ≤ 2r), kde

e(X_{i}, K_{i}) = U_{i} (1 ≤ i ≤ 2r),  (7.2)

a tyto parametry jsou uloženy na nějakém veřejně přístupném místě.

Předpokládejme nyní, že osoba A si přeje podepsat zprávu M. Jejím podpisem pak bude řetězec

S = S_{1}S_{2} … S_{2r},

kde pro všechna i, (1 ≤ i ≤ 2r) platí

S_{i} = e(M, K_{i}).

Osoba B pak pokračuje následovně: nejprve vybere náhodně či jinak r klíčů, které si přeje uveřejnit. Nechť to jsou klíče

K_{i_{1}}, K_{i_{2}}, …, K_{i_{r}}.

Pak po obdržení těchto klíčů osoba B prověří, že platí

e(M, K_{i_{j}}) = S_{i_{j}}, e(X_{i_{j}}, K_{i_{j}}) = U_{i_{j}} (1 ≤ j ≤ r).

Osoba B akceptuje podpis jako podpis osoby A, pokud všechny tyto rovnosti platí. Je zřejmé, že bezpečnost příjemce závisí na jeho důvěře, že jedině osoba vlastnící tajné klíče mu mohla poslat tuto podepsanou zprávu.

Předpokládejme, že si osoba A chce podrobit kritice zprávu, o které se tvrdí, že ji podepsala a kterou B zkontroloval. Protokol A je jasný; musí vytvořit před kontrolorem svých 2r tajných klíčů

S = K_{1}, K_{2} … K_{2r},

a veřejně prověřit rovnosti

e(M, K_{i}) = S_{i} e(X_{i}, K_{i}) = U_{i} (1 ≤ i ≤ 2r).

Protokol Rabinova systému se řídí pravidlem, že kritika je oprávněná, pouze v případě, že všechna U_{i} a S_{i} s vyjímkou nejméně r S_{i} souhlasí. Uvažme, co může nastat ve třech možných případech:

(a) Platí méně než r kontrol S_{i}. V tomto případě neměla osoba B akceptovat (M, S) jako správně podepsanou zprávu.

(b) Platí právě r kontrol S_{i}. V tomto případě, když si osoba B vybrala r klíčů k zveřejnění, musela si vybrat právě tyto klíče. Pravděpodobnost výběru takovéto množiny je určena předpisem

p_{r} = \frac{1}{\binom{2r}{r}}

a p_{r} ∼ 10^{−10} pro r = 18.

(c) Platí r + 1 kontrol S_{i} či více. V tomto případě je příjemce v právu.

Vraťme se nyní k asymetrickému šifrování. Pak můžeme digitální podpis realizovat následujícím způsobem:

1. Chce-li osoba A podepsat zprávu M, tak

• ţzašifruje� M pomocí svého tajného soukromého klíče D_{A} ,

• uveřejní podepsanou zprávu D_{A} (M).

2. Každý jiný účastník může tento podpis D_{A} (M) zkontrolovat tím, že pomocí veřejného klíče E_{A} prověří, zda se k sobě hodí M a D_{A} (M).

Např. u RSA algoritmu se prověří zda platí

E_{A} (D_{A} (M)) = M.

V takovém případě je někdy i jiná možnost kontroly digitálního podpisu: podepsaná osoba A zveřejní jen D_{A} (M), ale ne zprávu M. Pokud osoba B obdrží při aplikaci E_{A} smysluplnou zprávu, považuje to za důkaz správnosti digitálního podpisu. Všimněme si, že při vytvoření a kontrole správnosti digitálního podpisu byly použity pouze klíče patřící odesílateli A.

Každý účastník může prověřit digitální podpis. Rozhodující rozdíl mezi digitálním a obyčejným podpisem je, že digitální podpis D_{A} (M) je neoddělitelně spjat se zprávou M. Naproti tomu je obyčejný podpis připojen na konec zprávy. Důsledkem je pak, že při změně D_{A} (M) na (D_{A} (M)′ se změní i E(D_{A} (M)) a tedy zpráva M a E(D_{A} (M)′) spolu nesouhlasí.

Předpokládejme tedy, že máme šifrovací systém s veřejným klíčem s vlastností, že pro každého uživatele I šifrovací a dešifrovací funkce komutují tj. že

e_{I}(d_{I}(M)) = M.  (7.3)

Uvažme následující algoritmus.

1. Odesílatel A vypočte podpis S zprávy M užitím svého vlastního soukromé-

ho klíče a obdrží

S = d_{A}(M).

2. Užitím veřejného klíče příjemce B vypočte A kryptogram

C = e_{B}(S).

3. Příjemce B vypočte podpis S z kryptogramu C užitím svého vlastního sou-

kromého klíče a obdrží

S = d_{B}(C).

4. Užitím veřejného klíče odesílatele A vypočte B zprávu

M = e_{A}(S).

Nyní je příjemce B ve velmi výhodné pozici. Vlastní dvojici (M, S). V případě sporu, potřebuje-li přesvědčit soudce, že odesílatel A opravdu odeslal zprávu, požádá A o vytvoření jejího soukromého klíče K_{A}. Odesílatel A musí opravdu vytvořit svůj soukromý klíč K_{A}, protože ho lze otestovat na identitě e_{A}(d_{A}(M)) = M. Soudci pak pouze stačí prověřit, že S = d_{A}(M).

Ze stejného důvodu musí příjemce B zůstat poctivý. Předpokládejme, že změnil zprávu M na zprávu M′. Pak by ale musel být schopen změnit podpis S na S′, aby platilo, že S′ = d_{A}(M′). Ale to může provést pouze A.

7.3 Idea funkce s vlastností padacích dveří

Zopakujme si vlastnosti systému s veřejným klíčem z odstavce 7.1.

Všichni uživatelé systému, kteří si přejí navzájem komunikovat, používají tentýž šifrovací algoritmus e a tentýž dešifrovací algoritmus d. Každý uživatel U_{i} má dvojici klíčů (K_{i}, L_{i}) tak, že pro každou možnou zprávu M platí identita

d(e(M, K_{i}), L_{i}) = M,  (7.4)

kde K_{i} je zveřejněn a uložen ve veřejném souboru; L_{i} zůstane utajem a mluvíme o něm jako o soukromém klíči; K_{i} se nazývá veřejný klíč. Pokud chce jiný uživatel U_{j} odeslat uživateli U_{i} zprávu M, postupuje následovně.

(a) Uživatel U_{j} najde veřejný klíč K_{i} uživatel U_{i} ve veřejném souboru.

(b) Uživatel U_{j} odešle kryptogram

C = e(M, K_{i})

k uživateli U_{i} veřejným kanálem.

Bezpečnost systému závisí na funkcích e a d, které mají následující vlastnosti.

Vlastnost 1 Známe-li M a K, mělo by být snadné vypočíst C = e(M, K).

Vlastnost 2 Je-li dán pouze kryptogram C, není snadné výpočetně nají M.

Vlastnost 3 Je-li znám kryptogram C a tajný klíč L_{i}, je snadné určit zprávu M.

Jinak řečeno, vlastnosti 1 a 2 tvrdí, že šifrovací funkce e používající veřejný klíč by měla být jednosměrná, ale vlastnost 3 požaduje navíc existenci ţveřejného klíče�. Takováto jednosměrná funkce se nazývá funkce s vlastností padacích dveří.

Aby byl takovýto systém prakticky použitelný, je nutné splnění následující podmínky.

Vlastnost 4 Mělo by být snadné generovat ţnáhodné� dvojice veřejný/soukromý klíč (K_{i}, L_{i}).

Jinak řečeno, mělo by být dostatečně ţmnoho� dvojic (K, L) tak, že je pro Mr. X nemožné sestrojit tabulku vhodných funkčních hodnot.

7.4 RSA-algoritmus

Připomeňme dvě zásadní tvrzení z teorie čísel.

Věta 7.4.1 (Euler) Nechť (c, m) = 1. Pak platí c^{φ(m)} = 1 mod m.

Věta 7.4.2 (Fermat) Nechť p je prvočíslo (c, p) = 1. Pak platí c^{p−1} = 1 mod p.

Postup při šifrování RSA-algoritmu

1. Najděme dvě ţvelká� přirozená čísla p a q a položme n = p · q.

2. Najděme ţvelké a náhodné� přirozené číslo d tak, že je nesoudělné s číslem (p − 1) · (q − 1).

3. Vypočtěme jediné přirozené číslo e ležící v oboru hodnot 1 ≤ e ≤ (p − 1) ·

(q − 1) ze vztahu

e · d = 1 mod(p − 1) · (q − 1).

4. Zveřejněme veřejný klíč, který se skládá z dvojice přirozených čísel (e, n).

5. Reprezentujme zprávu M jako přirozené číslo z intervalu {1, …, n}; rozdělme zprávu M do bloků, je-li příliš velká.

6. Zakódujme M do kryptogramu C dle předpisu

C = M^{e} modn.

7. Dešifrujme pomocí soukromého klíče d a předpisu

D = C^{d} modn.

RSA-podpisovací schéma

Označme veřejný klíč uživatele I dvojici (e_{I}, n_{I}) a soukromý klíč d_{I}. V praxi je n_{I} obvykle voleno jako číslo, které je součin dvou náhodně zvolených asi 100místných prvočísel, n_{I} = p_{I} · q_{I}. Prvočísla p_{I} a q_{I} jsou osobním tajemstvím uživatele I. Dále si uživatel I zvolí tzv. šifrovací exponent e_{I} tak, aby byl nesoudělný s φ(n_{I}). Zejména tedy platí, že (e_{I}, (p_{I} − 1) · (q_{I} − 1)) = 1. Uživatel I najde číslo d_{I} tak, že splňuje e_{I} · d_{I} = 1 modφ(n_{I}). Toto číslo je výše uvedenými hodnotami jednoznačně určeno. Pak šifrovací předpis pro odesílatele A, který chce zaslat příjemci B podepsanou zprávu M následovně:

1. Očíslujme po řadě písmena latinské abecedy A=01 B=02, …, Z=26. V praxi se používá desítkové vyjádření v ASCII kódu. Text, který chceme utajit, převedeme do číselné formy a rozdělíme na bloky stejné délky. Číselné vyjádření bloku B označíme M. Přitom požadujeme, aby 1 ≤ M < n_{A}.

2. Odesílatel A vypočte podpis S jako

S = M^{d_{A}}(modn_{A}).

3. Pak A vypočte kryptogram

C = S^{e_{B}}(modn_{B}).

4. Po obdržení kryptogramu C vypočte B podpis

S = C^{d_{B}}(modn_{B}).

5. Dále B vypočte zprávu

M = S^{e_{A}}(modn_{A}).

Lemma 7.4.3 Pro všechna vhodně zvolená M platí

S = M^{d_{A}}(mod n_{A})
M = S^{e_{A}}(mod n_{A}).

Důkaz. Můžeme bez újmy na obecnosti předpokládat, že (M, n_{A}) > 1. Dle předpokladu RSA-algoritmu e_{A} · d_{A} = (q_{A} − 1) · c pro vhodné číslo c. Z Fermatovy věty máme

p_{A}^{e_{A}·d_{A}−1} = (p_{A}^{q_{A}−1})^{c} = 1 mod q_{A}.

Po vynásobení číslem p_{A} máme

p_{A}^{e_{A}·d_{A}} = p_{A} mod p_{A} · q_{A}.

Je-li (M, n_{A}) > 1, je M dělitelné buď p_{A} nebo q_{A}. Nechť např. M = a · p_{A}, 1 ≤ a < q_{A}. Pak

(M^{d_{A}})^{e_{A}} = M^{e_{A}·d_{A}} = a^{e_{A}·d_{A}} · p_{A}^{e_{A}·d_{A}} = a^{e_{A}·d_{A}} · p_{A} mod p_{A} · q_{A}.

Protože (a, q_{A}) = 1, máme dle Eulerovy věty

a^{e_{A}·d_{A}} = a mod q_{A}.

Po vynásobení číslem p_{A} máme

p_{A} · a^{e_{A}·d_{A}} = p_{A} · a = M mod p_{A} · q_{A}.

Pro M = b · q_{A}, 1 ≤ b < p_{A} se důkaz provede analogicky.

Poznamenejme, že odhlédneme-li od nutného požadavku 7.3, musí být nutně podpis S vypočtený odesílatelem A v definičním oboru šifrovací procedury e_{B}. Tato poslední podmínka nemusí platit, když použitý systém je RSA; podpis S může být větší přirozené číslo, než je veřejný klíč n_{B}. Můžeme však zajistit platnost této podmínky tím, že přizpůsobíme velikost bloků naší zprávy tak, že výsledek padne do požadovaného definičního oboru.

Příklad. Zvolme (e_{A}, n_{A}) = (5, 35), (e_{B}, n_{B}) = (3, 15), M = 3. Pak d_{A} = 5, d_{B} = 3. Máme pak S = 3^{5} = 33 (mod35), C = 33^{3} = 12 (mod15). B vypočte podpis S′ = 12^{3} = 3 (mod15) a z něho zprávu M′ = 3^{5} = 33 (mod35). Protože 3 ≠ 33, není pro uživatele B splněna podmínka 7.3 a M se nám zobrazí na zcela jinou zprávu M′. Pokud by však bylo n_{A} < n_{B} (zvolme např. (e_{B}, n_{B}) = (5, 35), (e_{A}, n_{A}) = (3, 15), M = 3, d_{B} = 5, d_{A} = 3), máme S = 3^{3} = 12 (mod15), C = 12^{5} = 17 (mod35), S′ = 17^{5} = 12 (mod35), M′ = 12^{3} = 3 (mod15).

Rivest, Shamir a Adleman (1978) navrhli mnohem elegantnější řešení:

Je zvolena mezní hodnota h pro systém s veřejným klíčem (řekněme h ∼ 10^{199}). Každý uživatel pak má dvě dvojice veřejných klíčů, jednu pro zašifrování a druhou pro ověření podpisu. Označme je po řadě (e_{I}, n_{I}) a (f_{I}, m_{I}), kde I probíhá množinu uživatelů. Soukromý klíč odpovídající dvojici pro ověření podpisu budeme značit g_{I}. Zvolený předpis se řídí tím, že šifrovací modul n_{i} a podpisovací modul m_{I} by měly pro každého uživatele I splňovat

m_{I} < h < n_{I}.

Počítáme pak následovně:

1. Odesílatel A vypočte podpis S jako

S = M^{g_{A}}(modm_{A}).

2. Pak A vypočte kryptogram

C = S^{e_{B}}(modn_{B}).

3. Po obdržení kryptogramu C vypočte B podpis

S = C^{d_{B}}(modn_{B}).

4. Dále B vypočte zprávu

M = S^{f_{A}}(modm_{A}).

Snadno se ověří, že tento systém opravdu pracuje a aby bylo zprávy možno podepsat a ověřit všemi uživateli systému, vše co potřebujeme, aby platilo

0 ≤ maxM ≤ min{m_{I} : I ∈ U},  (7.5)

kde U je množina uživatelů systému.

7.5 Diskuse RSA-algoritmu

V uvedené verzi RSA-algoritmu vystupují veřejné parametry (e_{I}, n_{I}) a tajné parametry d_{I}, p_{I} a q_{I} spolu s číselným vyjádřením (části) zprávy M. Rozeberme si požadavky na jejich výběr.

• Při použití RSA-algoritmu každý účastník systému používá dvě (čtyři) 100místná prvočísla. Kolik jich máme k dispozici? Použitím prvočíselné funkce π, která udává počet prvočísel menších než dopředu zvolené číslo n a odhaduje se pomocí odhadu

π(n) ≐ \frac{n}{lnn}

získáme přibližný počet prvočísel δ ležících v intervalu [10^{99}, 10^{100}]

δ = π(10^{100}) − π(10^{99}) ≐ 3.9 · 10^{97}.

Pravděpodobnost, že by si dva účastníci systému vybrali tutéž dvojici 100místných prvočísel, je pak řádově 10^{−391}.

• Dalším problémem je nalezení 100-místného náhodného prvočísla. Nejprve pomocí generátoru pseudonáhodných čísel sestrojíme 100-místné náhodné číslo m. V případě, že m bude sudé, nahradíme ho číslem m + 1. Pak nové číslo m otestujeme některým z testů na prvočíselnost. Pokud m nebude prvočíslo, vyzkoušíme číslo m + 2 a postup opakujeme až do té doby, než nenajdeme první prvočíslo větší než m. Lze ověřit, že počet pokusů nutných k nalezení prvočísla v okolí čísla m je logaritmickou funkcí čísla m.

Jako další uvedeme příklad jednoduchého pravděpodobnostního algoritmu na zjištění prvočíselnosti čísla m.

Algoritmus na zjištění prvočíselnosti čísla m na k pokusů

BEGIN

READ (m, k);

FOR i := 1 TO k DO BEGIN

a :=RANDOM(1, m − 1); b := (a**(m − 1) MODm);

IF b <> 1 THEN

BEGIN WRITE (m, ţje složené číslo�); GO TO KONEC

END

END; WRITE (m, ţje složené prvočíslo�);

KONEC: END.

Funkce RANDOM vybírá pseudonáhodná celá čísla z určeného intervalu. Algoritmus na vstupu načte číslo m a číslo k a na výstupu obdržíme buď pravdivou odpověď, že m je složené číslo nebo odpověď, že se asi jedná o prvočíslo. V případě, že je k dostatečně velké, je pravděpodobnost, že se nejedná o prvočíslo, v případě kladné odpovědi velmi malá.

V praxi máme několik nevýhod RSA-systému:

(a) Odesílatel A může úmyslně ţztratit� svůj soukromý klíč tak, že ,ačkoliv je uložen v ţbance soukromých klíčů� před startem systému, jí odeslané zprávy se stanou neověřitelnými.

(b) Odesílatel A může úmyslně vydat svůj soukromý klíč d_{A} a dovolit tak, aby všechny jí adresované zprávy byly řešitelné.

(c) Doba věnovaná šifrování, podepsání, dešifrování a prověření může být nepřiměřená. Totiž teprve nedávno byla nalezena rozumná implementace RSAalgoritmu a v současné době jsou na trhu RSA-čipy, které ale mají rychlost asi 10 Kbit/s. K dispozici jsou i speciální RSA-karty, které zvládnou 100 Kbit/s. Uvážíme-li však, že budoucí ISDN síťový standard elektronické pošty pracuje s 64Kbit/s a že se v půmyslu (lokální sítě apod.) pracuje s rychlostmi kolem 10 Mbit/s, vidíme, že nebude ještě dlouho možno použít RSA-algoritmus za účelem šifrování zpráv, nýbrž hlavně pro správu klíčů a elektronické podpisování. Při tvorbě elektronického podpisu se totiž nejdříve text zkomprimuje a podpisovací algoritmus se aplikuje na komprimát; není tedy nutno podpisovat velké soubory.

7.6 Systémy založené na ruksakové metodě

Jeden z prvních (1978) sytémů s veřejným klíčem byl vyvinut Merklem a Hellmanem a byl založen na tzv. ruksakovém problému. Přesněji, jedná se o výpočetní problém známý jako PODMNOŽINOVÝ SOUČET definovaný následovně:

Vstup: Otázka:

Kladná reálná čísla a_{1}, a_{2}, …, a_{n}, t

Existuje podmnožina J ⊆ {1, …, n} tak, že

∑_{i∈J} a_{i} = t?

Tento problém je jedním z klasických NP-úplných problémů.

Zašifrování zprávy

1. Odesílaná zpráva je odeslána v binárním tvaru m.

2. Veřejné klíče tvoří soubor n-tic (a_{1}, …, a_{n}) kladných přirozených čísel.

3. Binární zpráva m je rozdělena do bloků a n znacích tak, že m = m_{1} … m_{t}, kde každé m_{j} je n-tice nul a jedniček.

4. Pro každé j, 1 ≤ j ≤ t, položme

c_{=} ∑_{i=1}^{n}M_{i} · a_{i},

kde m_{j} = (M_{1}, …, M_{n}).

5. Přeneseme posloupnost (kryptogram) c_{1}, …, c_{t}.

Dešifrování zprávy

Zdánlivě se příjemce a každý, kdo zachytí kryptogram, zabývají tínže problémem; aby bylo možno rozluštit zprávu z posloupnosti c_{1}, …, c_{t} a veřejného klíče (a_{1}, …, a_{n}), musí vyřešit t různých NP-úplých problémů, každý pro jedno c_{j}.

Merkle-Hellmanův systém je založen na skutečnosti, že ne všechny případy NP-úplných problémů jsou obtížně řešitelné. Řekneme, že posloupnost a_{1}, …, a_{n} je superrostoucí, jestliže pro všechna k, 1 ≤ k ≤ n, platí

a_{k+1} > ∑_{i=1}^{k}a_{i}.  (7.6)

Snadno se dokáže následující tvrzení.

Lemma 7.6.1 Existuje rychlý algoritmus (v polynomiálním čase) pro vyřešení třídy problémů podmnožinového součtu pro superrostoucí posloupnosti.

Proof. Předpokládejme, že posloupnost a_{1}, …, a_{n} je superrostoucí,. Potřebujeme reprezentovat vstup t jako součet vybrané podposloupnosti posloupnosti a_{1}, …, a_{n} nebo rozhodnout, že takovouto reprezentaci nelze najít.

Položme r = max{i : a_{i} ≤ t}. Pak t = a_{r} + s, kde nyní potřebujeme najít reprezentaci čísla s jako součet vybrané podposloupnosti posloupnosti a_{1}, …, a_{r−1} nebo rozhodnout, že takovouto reprezentaci nelze najít. Opakování tohoto postupu nám pak dá naši reprezentaci pro t nebo ojeví, že takovou reprezentaci není možno najít.

*

Základ Merkle-Hellmanova systému je následovný:

1. Typický uživatel A si vybere ţsnadnou� superrostoucí posloupnost přirozených čísel e_{1}, …, e_{n}.

2. Uživatel si vybere dvojici ţvelkých� nesoudělných přirozených čísel w a N a transformuje pomocí ní vybranou superrostoucí posloupnost do ţobtížné� posloupnosti T (e_{1}), …, T (e_{n}) podle předpisu

T (e_{i}) = w · e_{i} (modN).

Transformovaný vektor (T (e_{1}), …, T (e_{n})) se stane veřejným klíčem uživatele A. Přitom by mělo být

e_{1} + e_{2} + · + e_{n}.

Lemma 7.6.2 Buď c kryptogram odeslaný uživatel A při použití obtížného veřejného klíče T (e_{1}), …, T (e_{n}) uživatele A a předpisu T (e_{i}) = w · e_{i} (modN). Lehký kryptogram c′ pak získáme z následujícího vzorce:

c′ = w^{−1} · c (modN).

Důkaz. Položme a_{i} = T (e_{i}). Je-li tedy M = (M_{1}M_{2} … M_{n}) zpráva, pak máme

c = ∑_{i=1}^{n}M_{i} · a_{i}.

Ale

c = ∑_{i=1}^{n}M_{i} · a_{i} = ∑_{i=1}^{n}M_{i} · w · e_{i} + ∑_{i=1}^{n}M_{i} · N · d_{i} = ∑_{i=1}^{n}M_{i} · w · e_{i} (modN)

pro vhodná přirozená čísla d_{i}.

Máme tedy

w^{−1} · c = ∑_{i=1}^{n}M_{i} · e_{i} (modN).

Výhody a nevýhody

Zásadní výhodou je relativně vysoká rychlost šifrování odesílatelem. Skutečně, výpočet součtu je velmi rychlý. Viditelnou nevýhodou systému je jeho nelinearita. Skutečně, platí E(x + y) = E(x) + E(y), kde E(x) = x ∗ a = ∑_{i=1}^{n} x_{i}a_{i} je operace zašifrování. Navíc v nejnižším bitu součtu E(x) se operace sčítání proměňuje na operaci XOR. Proto nejnižší bit součtu E(x), což je dostupný šifrový text, je roven výsledku operace XOR těch bitů otevřeného textu tj. vektoru x, které stojí u lichých a_{i}. Bude-li například liché jen a_{1} a a_{2}, dostaneme x_{1} or x_{2}=nejnižší bit E(x). I když to není velká informace, ze šifrového textu by neměla ţvyzařovat�. Kvalitní šifrovací systémy nevydávají o otevřeném textu vůbec žádnou využitelnou informaci.

Luštění, sázky a prohry

Merkle, jeden ze spoluautorů výše uvedeného šifrovacího systému, si byl jeho bezpečností tak jist, že na něj vsadil 100 USD. Bezpečností se pak zabývalo mnoho vědců. Herlestam učinil zkušenost, že poměrně často lze zjistit jeden bit otevřené zprávy. Shamir ukázal, že je řešitelný tzv. kompaktní problém rance. S Zippelem pak dokázali řešitelnost Merkle-Hellmanova systému, jestliže luštitel bude znát tajný modul N. Pokrok pak nastal po Lenstrově objevu řešitelnosti ţproblému celočíselného programování� v polynomiálním čase. S jeho využitím pak Shamir popsal metodu řešení v polynomiálním čase a tím vyhrál Merklovu sázku. Merkle sice prohrál 100 USD, ale vsadil desetkrát tolik, že iterovaný problém nebude rozbit. E. Brickel v létě 1984 oznámil, že je schopen rozluštit čtyřicetkrát iterovaný problém rance během jedné hodiny.

7.7 Systém s veřejným klíčem se složitostí stejnou jako faktorizace

Uveďme příklad systému s veřejným klíčem, o kterém lze ukázat, že jeho složitost je ekvivalentní s problémem faktorizace. Tvůrcem systému je Rabin (1979). Každý uživatel systému vybere dvojici (p, q) velkých různých prvočísel, které uchová v tajnosti. Zároveň si vybere přirozené číslo B < N = p · q.

Veřejný klíč bude dvojice (B, N), soukromý klíč bude faktorizace (p, q) čísla N.

Šifrovací funkce e zprávy M, kde M je reprezentovatelná jako přirozené číslo v definičním oboru {1, …, N − 1} (v případě potřeby se zpráva rozparceluje na více bloků), je

e(M) = M · (M + B) (modN).  (7.7)

Je-li C výsledný kryptogram, pak dešifrovací problém je nalézt M tak, že

M^{2} + B · M = C (modN).  (7.8)

Kongruenční rovnice a mocninné zbytky

Poznamenejme nejprve, že platí následující tvrzení

Věta 7.7.1 Kongruenční rovnice

ax = b (modm).  (7.9)

je řešitelná právě tehdy, když (a, m)/b. V tomto případě má rovnice právě (a, m) navzájem nekongruentních řešení modulo m.

Důkaz. Výše uvedená podmínka je nutná, neboť v opačném případě nemůže platit rovnost ax = b + km v oboru celých čísel. Buď tedy d = (a, m) a nechť d/b.

1. Nechť d = 1. Dle Bezoutovy věty existují celá čísla u, v taková, že au+mv = 1. Existují tedy celá čísla x, y splňující ax+my = b, tj. platí ax = b (modm). Řešení x je jednoznačně určeno modulo m, neboť je-li x′ jiné řešení splňující ax′ = b (modm), máme a(x − x′) = 0 (modm) a tedy x = x′ (modm).

2. Nechť d > 1. Protože nutně d/b, máme po dosazení do vztahu ax = b + km za a = a′d, b = b′d, m = m′d a po vydělení číslem d kongruenční rovnici

a′x = b′ (modm′).

Z případu 1 víme, že tato kongruenční rovnice má jediné řešení x = x_{0} (modm′). Všechna řešení modulo m tvoří právě d následujících čísel

x = x_{0}, x_{0} + m′, …, x_{0} + (d − 1)m′, (modm).

Budeme chtít vyřešit resp. zjistit, zda následující kongruenční rovnice má řešení v celých číslech pro n ≥ 2:

ax^{n} = b (modm).  (7.10)

Podobně jako v případě lineárních kongruečních rovnic se lze omezit na případ, kdy (a, m) = 1. Použitím Eulerovy věty pak obdržíme rovnici x^{n} = ba^{φ(m)−1} (modm).

Buďte tedy m, n přirozená čísla taková, že m ≥ 2, n ≥ 2, a celé číslo takové, že (a, m) = 1. Číslo a se nazývá n-tý mocninný zbytek modulo m, je-li řešitelná kongruence

x^{n} = a (modm).  (7.11)

Pro zkoumání takovýchto kongruenčních rovnic využijeme následujících tvrzení.

Věta 7.7.2 Buďte čísla m_{1}, m_{2}, …, m_{r} navzájem nesoudělná, a_{1}, a_{2}, …, a_{r} a b_{1}, b_{2}, …, b_{r} libovolná celá čísla taková, že (a_{1}, m_{1}) = (a_{2}, m_{2}) = … = (a_{r}, m_{r}) = 1. Pak má systém

a_{i}x = b_{i} (modm_{i})  (7.12)

pro 1 ≤ i ≤ r právě jedno řešení modulo m = m_{1} · m_{2}, · . . . · m_{r}.

Důkaz. Zřejmě mají jednotlivé kongruenční rovnice právě jedno řešení, které získáme z Euklidova algoritmu pro čísla a_{i} a m_{i} (a_{i}·u_{i}+m_{i}·v_{i} = 1 a pronásobímeli b_{i} máme a_{i} · x_{i} + m_{i} · y_{i} = b_{i} tj. a_{i}x = b_{i} (modm_{i})). Předpokládejme, že toto řešení je ve tvaru

x = c_{i} (modm_{i})  (7.13)

pro 1 ≤ i ≤ r. Protože máme (m_{i}, m_{j}) = 1 pro i ≠ j, máme (\frac{m}{m_{1}}, \frac{m}{m_{2}}, …, \frac{m}{m_{r}}) = 1. Zejména tedy existují čísla y_{1}, y_{2}, …, y_{r} tak, že

\frac{m}{m_{1}} · y_{1} + \frac{m}{m_{2}} · y_{2} + … + \frac{m}{m_{r}} · y_{r} = 1.

Položme e_{i} = \frac{m}{m_{i}} · y_{i} pro 1 ≤ i ≤ r. Zřejmě platí

e_{1} + e_{2} + … + e_{r} = 1 (modm),  (7.14)
e_{i} · e_{j} = 0 (modm) pro i ≠ j,  (7.15)
e_{i} · e_{i} = e_{i} (modm),  (7.16)
e_{i} = \{ \begin{matrix}0 (modm_{i}) & pro i ≠ j, \\ 1 (modm_{i}) & pro i = j. \end{matrix}  (7.17)

Totiž e_{i} · e_{j} = m · c, e_{i} · e_{i} = ∑_{i}^{r} e_{j} · e_{i} = 1 · e_{i} = e_{i} (modm), e_{j} = m_{i} · c′, (e_{i}, m_{i}) = 1.

Položme

x_{0} = c_{1}e_{1} + c_{2}e_{2} + … + c_{r}e_{r},

máme pak z 7.17, že

x_{0} = c_{i} (modm_{i})

pro 1 ≤ i ≤ r. Je tedy x_{0} společné řešení modulo m. Pro každé jiné řešení x′_{0} modulo m systému 7.13 máme

x_{0} = x′_{0} (modm_{i})

pro 1 ≤ i ≤ r a tedy také x_{0} = x′_{0} (modm).

Připomeňme, že pro všechna přirozená čísla m tvoří zbytkové třídy [a]_{m} pro (a, m) = 1 multiplikativní abelovskou grupu modulo m. Přitom počet prvků této grupy je právě φ(m). Tuto grupu budeme v dalším označovat jako G_{m}. Věnujme se pro chvíli zkoumání její algebraické struktury. Nechť m = m_{1}m_{2} … m_{r}, m_{1}, m_{2}, …, m_{r} jsou navzájem nesoudělná. Podle věty 7.7.2 má systém kongruencí

x = a_{i} (modm_{i})

pro 1 ≤ i ≤ r právě jedno řešení a modulo m. Přitom platí, že (a, m_{i}) = (a_{i}, m_{i}) pro 1 ≤ i ≤ r. Zejména tedy (a, m_{i}) = 1 právě tehdy, když (a_{i}, m_{i}) = 1. Opět podle věty 7.7.2 máme jednoznačně určený rozklad na základě rovností 7.14, 7.15, 7.16, 7.17 tvaru

[a]_{m} = [a_{1}e_{1}]_{m} + … + [a_{r}e_{r}]_{m}.  (7.18)

Označme jakožto [a_{i}^{∗}]_{m} zbytkovou třídu [e_{1}+…+e_{i−1}+a_{i}e_{i} +e_{i+1} +…+e_{r}]_{m}. Pak pro pevné i tvoří množina G_{m_{i}}^{∗} zbytkových tříd [a_{i}^{∗}]_{m} podgrupu grupy G_{m}. Z rovnosti 7.18 obdržíme jednoznačně určený rozklad

[a]_{m} = [a_{1}^{∗}]_{m} … [a_{r}^{∗}]_{m}.  (7.19)

Provedeme-li tento rozklad pro všechna [a]_{m} ∈ G_{m}, lze výše uvedené formulovat tak, že grupa G_{m} je přímý součin podgrup G_{m_{1}}^{∗}, …, G_{m_{r}}^{∗}. Máme zejména izomorfismus mezi grupami G_{m_{i}} a G_{m_{i}}^{∗} pomocí zobrazení [a_{i}^{∗}]_{m} ⟷ [a_{i}]_{m_{i}}.

Řekneme, že a patří modulo m k exponentu d, pokud (a, m) = 1, a^{d} = 1 (modm), ale a^{n} ≠ 1 (modn) pro 1 ≤ n < d.

Lemma 7.7.3 Patří-li a modulo m k exponentu d, jsou čísla 1, a, a^{2}, …, a^{d−1} modulo m nekongruentní. Je-li dále a^{t} = 1 (modm), tedy d|t.

Důkaz. Nechť a^{k} = a^{h} (modm), 0 ≤ h < k < d. Protože (a, m) = 1, je a^{k−h} = 1 (modm). To je však spor s 0 < k−h < d a minimalitou d. Položíme-li t = dq+r, 0 ≤ r < d, máme

1 = a^{t} = a^{dq+r} = a^{r} (modm),

tj. musí platit r = 0.

Lemma 7.7.4 Patří-li a modulo m k exponentu d a n je přirozené číslo s (n, d) = 1, patří a^{n} rovněž modulo m k exponentu d.

Důkaz. Nechť a^{n} patří k exponentu t. Pak z 7.7.3 a (a^{n})^{t} = 1 (modm), obdržíme d|nt. Protože (n, d) = 1, je nutně d|t a tedy i d ≤ t. Protože (a^{n})^{d} = (a^{d})^{n} = 1 (modm), je nutně i t ≤ d. Celkem t = d.

Poznamenejme, že číslo g, které modulo m patří k exponentu φ(m), se nazývá primitivní kořen modulo m. Lze dokázat, že pro každé prvočíslo p vždy existuje primitivní kořen g modulo p, tedy každé číslo od 1 do p − 1 lze vyjádřit jakožto mocninu g. Speciálně lze ověřit, že pokud t|φ(p), má kongruenční rovnice

x^{t} = 1 (modp),  (7.20)

právě t navzájem nekongruentních řešení.

Tvrzení 7.7.5 K modulu m existuje buď žádný nebo φ(φ(m)) modulo m nekonguentních primitivních kořenů.

Důkaz. Nechť g je primitivní kořen modulo m. Podle lemmatu 7.7.4 je rovněž g^{n} primitivní kořen modulo m v případě, že platí (n, φ(m)) = 1. Takovýchto čísel n ≤ φ(m) je právě φ(φ(m)). Máme tedy v každém případě alespoň φ(φ(m)) primitivních kořenů. To, že nelze nalézt žádné další primitivní kořeny, plyne z lemmatu 7.7.3. Totiž, probíhá-li ν čísla mezi 0 a φ(m) − 1, probíhá pak g^{ν} grupu G_{m}. Zvolíme-li ν tak, že (ν, φ(m)) = t > 1, pak platí

(g^{ν})^{\frac{φ(m)}{t}} = (g^{φ(m)})^{\frac{ν}{t}} = 1 (modm).

Pak ale nemůže být g^{ν} primitivní kořen modulo m.

Tvrzení 7.7.6 Buď p prvočíslo. Pak G_{p} je cyklická. Zejména tedy existuje primitivní kořen modulo p.

Důkaz. Prp p = 2 je tvrzení věty triviální. Nechť p je v dalším liché prvočíslo. Pro d|(p − 1) označme χ(d) počet zbytkových tříd z G_{m}, které patří k exponentu d modulo p. Máme ukázat, že χ(p − 1) > 0. Podle tvrzení 7.7.5 je pak dokonce φ(p − 1) = χ(p − 1).

Nechť tedy existuje nějaké číslo a, které patří k exponentu d. Pak dle lemmatu 7.7.3 jsou čísla tvaru 1, a, a^{2}, …, a^{d−1} navzájem nekongruentní řešení rovnice x^{d}− 1 = 0 (modp). Toto lze přepsát pomocí polynomiální kongruence následovně

x^{d} − 1 = (x − 1)(x − a) ⋯ (x − a^{d−1}) (modp).

Zároveň jsou výše uvedená čísla také všechna řešení této kongruence. Podle lemmatu 7.7.4 pak i a^{k} patří k exponentu d, pokud (d, k) = 1. To znamená, že mezi řešení přináleží φ(d) čísel, která patří k exponentu d. Nutně pak buď χ(d) = 0 nebo χ(d) = φ(d).

Provedeme-li výčet všech prvků z G_{m} podle toho, ke kterému exponentu patří, je

∑_{d|(p−1)} χ(d) = p − 1.

Je ale dobře známo, že

∑_{d|(p−1)} φ(d) = p − 1.

Nutně pak χ(d) = φ(d).

Buď g primitivní kořen modulo m, (a, m) = 1 a μ buď jednoznačně určené číslo mezi 0 a φ(m) − 1 z kongruenční rovnice

g^{μ} = a (modm).

Pak říkáme, že μ je index (diskrétní logaritmus) čísla a vzhledem k bázi g. Píšeme pak μ = log_{g}a modφ(m). Přitom platí pravidla pro logaritmování součinu, mocniny atd.

Tvrzení 7.7.7 Pro diskrétní logaritmování platí následující zákony:

1. log_{g}ab = log_{g}a + log_{g}b (modφ(m)),

2. log_{g}a^{n} = nlog_{g}a (modφ(m)),

3. log_{g}1 = 0 (modφ(m)),

4. log_{g}g = 1 (modφ(m)),

5. log_{g}(−1) = \frac{1}{2}φ(m) (modφ(m)), m > 2.

Důkaz. Z a = g^{log_{g}a}(modm) a b = g^{log_{g}b}(modm) obdržíme ab = g^{log_{g}a+log_{g}b} (modm). Porovnáme-li toto s ab = g^{log^{g}^{ab}}(modm), obdržíme první vlastnost. Vlastnosti 2 a 3 plynou bezprostředně z vlastnosti 1. Z g = g^{log_{g}g}(modm) obdržíme 4. Pátá vlastnost je založena na Fermat-Eulerově větě:

g^{φ(m)} − 1 = (g^{\frac{φ(m)}{2}} − 1)(g^{\frac{φ(m)}{2}} + 1) = 0(modm).

Tvrzení 7.7.8 Buď p liché prvočíslo tak, že číslo a není dělitelné p. Kongruenční rovnice

x^{n} = a (modp^{r})

má právě d = (n, p^{r−1}(p − 1)) nekongruentních řešení, pokud d dělí log_{g}a. Jinak je tato kongruence neřešitelná.

Důkaz. Tvrzení věty se logaritmováním převede na lineární kongruenční rovnici

nlog_{g}x = log_{g}a (modp^{r−1}(p − 1)).

Zbytek plyne z tvrzení 7.7.1.

Tvrzení 7.7.9 Buď p liché prvočíslo tak, že číslo a není dělitelné p, d = (n, p^{r−1}(p− 1)). Kongruenční rovnice

x^{n} = a (modp^{r})

má právě řešení právě tehdy, když platí kongruenční rovnice

a^{\frac{1}{d} p^{r−1}(p−1)} = 1 (modp^{r}).  (7.21)

Důkaz. Buď g primitivní kořen modulo p^{r}. Podle věty 7.7.8 je výše uvedená kongruence řešitelná právě tehdy, když existuje číslo h tak, že log_{g}a = h · d. Pak

platí a = g^{log_{g}a} = g^{h·d} (modp^{r}). Tedy a^{\frac{1}{d} p^{r−1}(p−1)} = g^{h·p^{r−1}(p−1)} = 1 (modp^{r}). Nechť obráceně platí kongruenční rovnice 7.21. Položme μ = log_{g}a. Protože a = g^{μ} (modp^{r}), máme g^{\frac{μ}{d} ·p^{r−1}(p−1)} = 1 (modp^{r}). Protože g je primitivní kořen modulo p^{r}, je \frac{μ}{d} celé číslo, tj. d dělí μ. Tedy dle tvrzení 7.7.8 je kongruenční rovnice řešitelná.

Věta 7.7.10 Buď f(x) polynom v proměnné x s celočíselnými koeficienty. Pak počet řešení kongruenční rovnice

f(x) = 0 (modm), m = Π_{i=1}^{r} p_{i}^{s_{i}}  (7.22)

je číslo N = n_{1}n_{2} · . . . · n_{r}, přičemž n_{i} je počet řešení rovnice

f(x) = 0 (modp_{i}^{s_{i}})  (7.23)

pro 1 ≤ i ≤ r.

Důkaz. Řešitelnost kongruenční rovnice 7.22 nastává právě tehdy, když je systém kongruečních rovnic 7.23 řešitelný. V případě řešitelnosti každé jednotlivé kongruenčí rovnice označme x = c_{i} (modp_{i}^{s_{i}}) řešení i-té kongrunční rovnice. Obdržíme pak lineární systém kongruencí, který má jednoznačně určené řešení (mod m). Probíhají-li c_{i} všech n_{i} nekongruentních řešení, získáme celkem N řešení (mod m).

Důsledek 7.7.11 Počet řešení kongruenční rovnice

x^{s} = x (modm), m = Π_{i=1}^{r} p_{i}^{s_{i}}  (7.24)

je číslo N = n_{1}n_{2} · . . . · n_{r}, přičemž n_{i} je počet řešení rovnice

x^{s} = x (modp_{i}^{s_{i}})  (7.25)

pro 1 ≤ i ≤ r.

Tvrzení 7.7.12 Počet řešení kongruenční rovnice

x^{s} = x (modp),  (7.26)

kde p je prvočíslo, je roven 1 + (p − 1, s − 1).

Důkaz. Uvažme dva případy. Nechť x je číslo soudělné s p tj. x = p (modp) - takové x je pouze jedno (p) a je řešením. Nechť x je nesoudělné s p. Množina všech nesoudělných čísel s p tvoří cyklickou grupu stupně p − 1 a z předchozího víme, že existuje právě (p − 1, s − 1) prvků této grupy splňujících 7.26.

Důsledek 7.7.13 Počet řešení kongruenční rovnice

x^{s} = x (modm), m = Π_{i=1}^{r} p_{i}  (7.27)

je číslo N = Π_{i=1}^{r} (1 + (p_{i} − 1, s − 1)).

Kvadratické kongruence

Uvažme pro celá čísla a, b, c, m (m > 1, a ≠ 0 (modm)) kvadratickou kongruenci

ax^{2} + b · x + c = 0 (modm).  (7.28)

Vynásobením 4a převedeme rovnici na tvar

(2ax + b)^{2} = b^{2} − 4ac (modm).  (7.29)

To znamená, že jsme schopni plně vyřešit kvadratickou kongruenci 7.28, jestliže umíme vyřešit speciální případ

x^{2} = a (modm).  (7.30)

Tím se celá problematika převede na problém kvadratických zbytků. Z důkazu věty 7.7.10 víme, že se lze dále omezit na řešení rovnice

x^{2} = a (modp^{s}),  (7.31)

kde p je prvočíslo. Zároveň lze předpokládat, že (a, p) = 1. Totiž v případě, že p dělí a máme

1. x = 0 (modp), pokud je s = 1,

2. v případě s > 1 by muselo být x = py tj. py^{2} = a′ (modp^{s−1}), a = pa′. Nutně pak a′ = pa′′ tj. získáme kongruenční rovnici y^{2} = a (modp^{s−2}),.

Uvažme nyní kongruenční rovnici tvaru

x^{2} = a (modp^{s}), (a, p) = 1.  (7.32)

Snadným ověřením získáme řešení pro p = 2.

1. s = 1 : Existuje právě jedno řešení a to x = 1.

2. s = 2 :

(a) a = 1 (mod4) : Existují právě dvě řešení.

(b) a = −1 (mod4) : Neexistuje žádné řešení.

3. s ≥ 3 :

(a) a = 1 (mod8) : Existují právě čtyři řešení.

(b) a ≠ 1 (mod8) : Neexistuje žádné řešení.

Věta 7.7.14 Je-li p liché prvočíslo, pak má kongruence 7.32 buď žádné nebo právě dvě řešení. Je-li a kvadratický zbytek modulo p, je také kvadratický zbytek modulo p^{s} a obráceně.

Důkaz. Víme, že (2, p^{s−1}(p − 1) = 2. Podle věty 7.7.8 má pak kongruenční rovnice 7.32 právě dvě řešení, pokud loga = 0 (mod2) a žádné řešení, pokud loga = 1 (mod2). Musíme ještě ukázat, že loga je nezávisle na s dělitelné 2 nebo ne. Buď g primitivní kořen modulo p^{s} pro libovolné s ≥ 1 a μ_{s} = log_{g}a vzhledem k modulu p^{s}. Ze vztahu

a = g^{μ_{s}} (modp^{s}), a = g^{μ_{s}} = g^{μ_{1}} (modp),

plyne μ_{s} = μ_{1} (modp − 1) a proto μ_{s} = μ_{1} (mod2).

Stačí se tedy zřejmě omezit na případ, že s = 1.

Věta 7.7.15 Je-li p liché prvočíslo, pak máme právě tolik kvadratických zbytků jako nezbytků. Kvadratické zbytky modulo p jsou určeny a = 1^{2}, 2^{2}, …, \frac{p−1}{2}^{2} modp.

Důkaz. Uvedená čísla jsou zřejmě modulo p nekongruentní. Totiž je-li b^{2} = c^{2} (modp), kde 1 ≤ b, c ≤ \frac{p−1}{2}, máme (b − c)(b + c) = 0 (modp). Protože 1 < b+c < p, máme b−c = 0 (modp), tj. b = c. Protože dále (p−k)^{2} = k^{2} (modp), musí být každý kvadratický zbytek kongruentní s jedním z výše uvedených čísel. Tímto je tvrzení dokázáno.

Lemma 7.7.16 Řešení rovnice

x^{2} + B · x = C (modp · q)  (7.33)

lze obdržet jako kombinaci řešení u, v rovnic

x^{2} + B · x = C (modp)  (7.34)
x^{2} + B · x = C (modq)  (7.35)

a přirozených čísel a, b splňujících

a = 1 (modp), a = 0 (modq), b = 0 (modp), b = 1 (modq),  (7.36)

a pak

x = a · u + b · v

splňuje 7.33.

Důkaz. Plyne bezprostředně z předchozích tvrzení.

Buď p liché prvočíslo, p nedělí číslo a. Legendrův symbol (\frac{a}{p}) definujeme jako

(\frac{a}{p}) = \{ \begin{matrix}+1 & pokud je a kvadratický zbytek modulo p, \\ −1 & pokud je a kvadratický nezbytek modulo p. \end{matrix}

Mimo jiné je vhodné vytvořit pravidla pro výpočet Legendrova symbolu. Evi-

dentní jsou následující vlastnosti

(\frac{a^{2}}{p} ) = 1^{(\frac{a}{p}) = (\frac{b}{p}) pro b = a (modp)}

Z Fermat-Eulerovy věty víme, že a^{p−1} = 1 (modp) a proto platí a^{\frac{p−1}{2}} = ±1 (modp). Podle věty 7.7.9 je podmínka a^{\frac{p−1}{2}} = 1 (modp) dostatečná a nutná pro řešitelnost kongruenční rovnice x^{2} = a (modp), (a, p) = 1. Máme tedy tzv. Eulerovo kritérium:

Věta 7.7.17

(\frac{a}{p}) = a^{\frac{p−1}{2}} modp.

Z tohoto kritéria lze odvodit řadu důležitých faktů:

Tvrzení 7.7.18

(\frac{ab}{p}) = (\frac{a}{p}) (\frac{b}{p}) .

Důkaz. Z Eulerova kritéria máme, že

(\frac{ab}{p}) = (ab)^{\frac{p−1}{2}} = a^{\frac{p−1}{2}} · b^{\frac{p−1}{2}} = (\frac{a}{p}) (\frac{b}{p}) modp.

Tvrzení 7.7.19

(\frac{−1}{p}) = (−1)^{\frac{p−1}{2}}, (\frac{2}{p}) = (−1)^{\frac{p^{2}−1}{8}}.

Důkaz. První vztah plyne bezprostředně z Eulerova kritéria. Abychom dokázali druhý vztah, uvažme součin

∏_{k=1}^{\frac{p−1}{2}}(−1)^{k}k = (\frac{p − 1}{2})!(−1)^{\frac{p^{2}−1}{8}}.

Je-li v součinu číslo k liché, zaměníme (−k) modulo p číslem (p − k) o obdržíme rovnost

∏_{k=1}^{\frac{p−1}{2}}(−1)^{k}k = 2 · 4 · 6 . . . · (p − 1) = (\frac{p − 1}{2})!2^{\frac{p−1}{2}} modp.

Protože ale p nedělí (\frac{p−1}{2})!, máme

(\frac{p − 1}{2})!2^{\frac{p−1}{2}} =

Z Eulerova kritéria plyne tvrzení.

Lemma 7.7.20 Je-li p prvočíslo tvaru 4k − 1 a d kvadratický zbytek modulo p, řešení kongruenční rovnice tvaru

y^{2} = d (modp)  (7.37)

je dáno předpisem

y = d^{k} (modp).  (7.38)

Důkaz. Z Eulerova kritéria máme, že

(\frac{d}{p}) = 1 = d^{\frac{p−1}{2}} modp.

Protože k = \frac{1}{4}(p + 1), máme

d^{\frac{1}{4} (p+1)} d^{\frac{1}{4} (p+1)} = d^{\frac{1}{2} (p+1)} = d^{\frac{1}{2} (p−1)}d = d modp.

Zkombinujeme-li předchozí úvahy, dostaneme následují tvrzení

Tvrzení 7.7.21 Za předpokladu, že jak p tak q jsou kongruentní s 3 modulo 4, lze dešifrovací proceduru provést v polynomiálním čase.

Důkaz. Příjemci, který zná faktory p a q a ví, že kryptogram je kvadratický zbytek, stačí jenom aplikovat předchozí lemmata.

Rabin ve skutečnosti dokázal víc než 7.7.21. Totiž dokázal, že i v případě, že prvočísla p a q nejsou v tomto speciálním tvaru, kongruenční rovnice modulo p a modulo q lze řešit náhodným algoritmem v polynomiálním čase. Poznamenejme, že praktickou nevýhodou Rabinova schématu je, že příjemce obdrží čtyři možné zprávy, z nichž ná vybrat tu správnou. Obvykle to lze provést tím, že má nějakou dodatečnou informaci - např. že po převedení z binárního do textového tvaru je zpráva psaná v angličtině.

Mr. X však nezná faktory p a q čísla N a musí se zabývat mnohonásobně obtížnějším problémem. Že je tomu skutečně tak, plyne z níže uvedené druhé Rabinovy věty.

Věta 7.7.22 Označme D_{N} množinu všech takových d, 0 ≤ d < N, že existuje řešení kongruenční rovnice

y^{2} = d (modN).  (7.39)

Jestliže pro alespoň ⌈\frac{|D_{N} |}{logN} ⌉ takovýchto d jsme schopni najít takové y, pak jsme schopni najít faktor N v náhodné polynomiální době.

Lemma 7.7.23 Jsou-li x, y ∈ Z_{N} celá čísla modulo N taková, že

x^{2} = y^{2} (modN),  x ≠ ±y (modN),  (7.40)

jsou pak (x+y, N) a (x−y, N) dělitelé N. Zejména pro N = p·q, p a q prvočísla je (x + y, N) prvočíselný dělitel N.

Důkaz. x^{2} = y^{2} (modN) implikuje x^{2} = y^{2} + rN, kde r ∈ Z. Tudíž (x − y)(x +

y) = rN.

Věta 7.7.24 Rozšifrování Rabinova systému s veřejným klíčem je ekvivalentní nalezení efektivního algoritmu pro faktorizaci.

Důkaz. Předpokládejme, že máme algoritmus A ,který pro dané (q, N) a pro ⌈\frac{|D_{N} |}{logN} ⌉ takovýchto q dává na výstupu odmocninu z q modulo N. Pak můžeme faktorizovat N iterováním následujících kroků: Vyberme náhodně z ze Z_{N} tak, že (z, N) = 1 a vypočtěme q = z^{2} (modN). Vložme na vstup algoritmu A dvojici (q, N). Pokud A má za výstup druhou odmocninu z q různou od z nebo −z modulo N, pak 7.7.23 nám dává, že jsme schopni faktorizovat N. Očekávaný počet iterací algoritmu bude malý, protože je \frac{1}{2logN}-ní šance na faktorizaci N v každé iteraci.

7.8 Jak se napadá RSA-algoritmus?

Pokusy o narušení RSA-algoritmu prostřednictvím faktorizace modulu N = p · q

Faktorizace modulu N je nepoměrně obtížnější než jeho konstrukce, tj. nalezení prvočísel p a q. V době vzniku RSA-algoritmu (1978) byla 50-místná prvočísla bezpečná, což dnes už není pravda. Proto se v současné době pracuje se 100-místnými prvočísly. Přitom není vyloučené, že bude možno najít algoritmus na faktorizaci, který pracuje v polynomiálmím čase. Zároveň se nepodařilo dokázat, že by faktorizace šifrovacího modulu byla ekvivalentní s bezpečností RSAsystému. Mohla by se totiž najít metoda, jak tento systém narušit bez faktorizace N. Zatím jsou však pokusy o narušení bezpečnosti RSA-systému založeny hlavně na faktorizaci. Lze například dokázat, že výpočet dešifrovacího exponentu t je ekvivalentní faktorizaci šifrovacího modulu N.

Prvním algoritmem, který nám napadne, je tzv. pokusné dělení (Trial Division) čísly 2, 3, …, ⌈\sqrt{N}⌉. Postup lze urychlit tak, že dělíme jen čísly 2, 3 a pak čísly tvaru 6k − 1, 6k + 1 pro k = 1, 2, . . ..

Další používanou metodou je Pollardova p − 1 a p + 1 metoda. Základem metody je následující tvrzení:

Věta 7.8.1 Buď n = p·q, p, q, r prvočísla, r−1/b, r/n a n nedělí a. Pak r/(n, a^{b}− 1).

Důkaz. Podle Fermatovy věty platí a^{r−1} = 1 modr a tedy i a^{b} = 1 modr tj. r/(a^{b} − 1). Zároveň však r/n.

Aby se výše uvedená věta dala využít, je nutno najít vhodná čísla a, b. Nalezení a je snadné. Stačí zvolit nějaké malé prvočíslo a přesvědčit, zda je či není dělitelem n - pokud by bylo dělitelem, našli bychom faktorizaci čísla n a tím byli hotovi.

Volba b je obtížnější, je třeba ho najít postupným zkoušením. Přitom se obvykle za b volí čísla tvaru

b_{j} = nsn(1, 2, …, j).

Tato čísla je vhodné volit z toho důvodu, že mají mnoho vlastních dělitelů a je tedy velká šance na splnění podmínky r − 1/b.

Algoritmus se hodí na nalezení menších prvočíselných dělitelů čísla n. Touto metodou bylo např. faktorizované číslo 2^{257} − 1 jako součin tří různých prvočísel.

Další známou metodou je Pollardova rho-metoda (Monte Carlo), kterou se obvykle najdou malé prvočíselné dělitele modulu N asi po \sqrt{p} cyklech programu.

Metoda začíná výběrem libovolné nelineární funkce f s celočíselnými koeficienty, nejčastěji f(x) = x^{2} + c, c ≠ 0, −2 a volbou počáteční hodnoty x_{0}, kterou lze zvolit náhodně. V dalších krocích se rekurentně počítají hodnoty posloupnosti x_{j+1} = f(x_{j}) modN, j = 0, 1, 2, . . ..

Pomocí pravděpodobnostních úvah lze dokázat, že výsledná posloupnost bude skoroperiodická. To znamená, že po jisté době lze očekávat výskyt dvou hodnot x_{j}, x_{k}, pro které platí

x_{j} ≠ x_{k} modN, N = p · q
x_{j} = x_{k} modp.

To ale znamená, že (x_{j} − x_{k}, N) = p. Hledání největšího společného dělitele lze však provést Euklidovým algoritmem s malou složitostí. Algoritmus se ještě trochu upraví: kdyby se tímto způsobem porovnávaly všechny rozdíly x_{k} − x_{j} pro všechna j < k, počet operací by neúměrně narůstal. Proto postupujeme následovně:

předpokládejme, že máme už spočítané x_{k}, přičemž k je h + 1-bitové číslo, 2^{h} ≤ k < 2^{h+1} . Označme j = 2^{h} − 1. Pak najdeme (x_{k} − x_{j}, N). Pokud prvočíslo p nenalezneme, postup zopakujeme pro k + 1. Nevýhodou takovéhoto postup je, že pravděpodobně nenajdeme ţprvní dvojici� x_{k}, x_{j}.

Věnujme se pro okamžik tzv. Fermatově faktorizaci, která je založena na tvrzení 7.7.23 tj. že x − y je pravděpodobně netriviální dělitel čísla N. Je-li navíc N = p · q, je pak i

N = (\frac{p + q}{2} )^{2} − (\frac{p − q}{2})^{2} .  (7.41)

Protože p a q jsou různá prvočísla, nemusíme se bát toho, že by N bylo úplným čtvercem nějakého prvočísla. Pokud jsou prvočísla p a q blízko, resp. rozdíl |p−q| je malý, je číslo \frac{p+q}{2} jen o málo větší než \sqrt{N}. Pak ale stačí pro x = 1 + ⌈\sqrt{N}⌉, 2 + ⌈\sqrt{N}⌉, … počítat x^{2} − N = u. Je-li u = y^{2} úplný čtverec, bude p = x − y hledané prvočíslo.

Další z možných metod je metoda tzv. řetězových zlomků. Na základě této metody lze navrhnout procesor v ceně asi 1000000 $, který rozloží 100-místné dekadické číslo asi za 1 měsíc. Pro 200-místné dekadické číslo je ale odhad 3.8 miliónů let, což garantuje postačující bezpečnost celého systému.

Připomeňme si, že tvůrci RSA vsadili 100 USD na to, že nikdo nerozluští jejich anglický text zašifrovaný algoritmem RSA s veřejným modulem e = 9007 a známým modulem N, který je součinem dvou 64- a 65-ciferných prvočísel. Rivest v roce 1977 spočítal, že na roznásobení uvedeného modulu N by bylo nejlepší faktorizační metodou potřeba 40 000 000 000 000 000 let. Proto se nebáli ţinvestovat� 100 USD do sázky. V dubnu 1994 bylo však oznámeno, že se toto 129-ciferné číslo N podařilo roznásobit. Zároveň tak byl odhalen otevřený text zašifrované zprávy, která neměla nikdy spatřit světlo světa: ţThe magic words are squemish ossifrage�.

Poznamenejme k výše uvedenému, že v roce 1873 se zdálo nemožné faktorizovat deseticiferné číslo. V roce 1977 byla však už známá Pollardova rho metoda faktorizace. S její výkonností také Rivest počítal při odhadu uvedeného času na faktorizaci našeho čísla N. Od té doby se však objevily další metody faktorizace: ECM (elliptic curve method), QS (quadratic sieve factoring) a NFS (number field sieve factoring algorithm). Pollardova rho metoda na nalezení 64-ciferného součinitele potřebovala odhadem 4 × 10^{32} modulárního násobení, tj. asi 1.3 × 10^{16} let – Rivest uvažoval, že by jedno molekulární násobení mohlo trvat jednu nanosekundu. ECM však už dnes potřebuje už jen 5 × 10^{15} modulárního násobení, tj. asi 2 měsíce. Ve skutečnosti se takovéto rychlosti modulárního násobení nedosahuje a reálný odhad by byl cca 15 000 let, což je však obrovský pokrok oproti 10^{16} letům.

Na rozdíl od ECM a Pollardovy rho metody metoda QS, použitá k nalezení 64-ciferného součinitele u našeho čísla N, závisí mnohem více na přístupu do paměti než na výkonu procesoru. Na základě analýzy reálně použitých typů počítačů a jimi spotřebovaného času na faktorizaci bylo spočítáno, že k nalezení 64-ciferného součinitele se spotřebovalo celkem 4000 až 6000 tzv. MIPS roků. Přitom jeden MIPS rok je množství operací, které za jeden rok vykoná počítač s výkonem jeden milion operací za vteřinu. Je to tedy 365, 25×24×3600×1000000 =cca. 3.16 cot10^{13} operací. Počítáme-li průměrný výkon jednoho počítače v experimentu 10 MIPS s tím, že na experimentu pracoval jen polovinu dne tj. s reálným výkonem pouze 5 MIPS, bylo k faktorizaci použito cca. 1000 let práce. Zároveň je z výše uvedeného vidět úžasný nárůst výkonnosti faktorizačních metod v posledních letech. Faktorizaci 154-místného čísla (512 bitů) pak bude trvat cca 500000 MIPS let. Tent výkon by mohli zajistit všichni účastníci sítě INTERNET. Dostáváme pak výpočetní kapacitu 20 miliónů MIPS - tj. faktorizace by proběhla během devíti dní.

Důsledky nových faktorizačních algoritmů pro bezpečnost RSA-šifrovacího systému

Nejspolehlivější cesta, jak narušit veřejnou síť využívající RSA-kryptosystém, je nalezení dešifrovacího exponentu, označme si ho třeba t. Jednou z takovýchto možností je poznání čísel p − 1 a q − 1, tj. faktorizace šifrového modulu N = pq. Slabým místem Pollardovy p−1 a p+1 metody je nalezení vhodného čísla b. Aby jsme úlohu faktorizace čísla N pro nekompetentní osobu zkomplikovali, musíme zvolit prvočísla p a q tak, aby p − 1 (q − 1) mělo velký prvočíselného dělitel r a p + 1 (q + 1) velký prvočíselný dělitel d. Zároveň je vhodné požadovat, aby číslo r−1 mělo rovněž velký prvočíselný dělitel e. Proto prvočísla splňující kongruenční rovnice

p = 1mod r
p = d − 1mod d
r = 1mod e.

(7.42)

(kde r, d a e jsou velká náhodná prvočísla) se nazývají silná prvočísla.

Aby jsme se zabezpečili i proti metodám založeným na Fermatově faktorizaci, musíme zvolit silná náhodná prvočísla p a q tak, aby rozdíl |p−q| byl několik řádů. Pokud budeme mít efektivní metodu na nalezení silných náhodných prvočísel, pak splnění poslední podmínky nám nezpůsobí žádné komplikace. Takováto metoda byla poprvé navržená Gordonem v roce 1985.

Další možné útoky na RSA-šifrovací systém

Ukážeme, že dva účastníci RSA-šifrovacího systému nemohou mít stejný šifrovací modul N. Uvažujme účastníky A a B, N_{A} = N_{B} = N. Pak musí platit

(s_{A}, φ(N)) = 1 a s_{B} · t_{B} − 1 = k · φ(N)  (7.43)

pro nějaké celé číslo k. Uvidíme, že účastník B je schopen díky společnému N číst každou zprávu určenou účastníkovi A a také podpisovat účastníka A.

Totiž účastník B je schopen použitím Euklidova algoritmu vypočíst f = (s_{B} · t_{B} − 1, s_{A}). Označme

n = \frac{s_{B} · t_{B} − 1}{f}.  (7.44)

Pak (n, s_{A}) = 1 a (f, φ(N)) = 1, protože šifrovací exponent s_{A} je nesoudělný s N. Odtud pak

n = \frac{k}{f} φ(N)  (7.45)

a přitom číslo f dělí číslo k. Proto je n násobek φ(N). Z nesoudělnosti čísel n a s_{A} plyne existence čísel u, v tak, že

u · n + v · s_{A} = 1.  (7.46)

Bez újmy na obecnosti lze předpokládat, že v > 0. Pak

v · s_{A} = 1 − u · n = 1 modφ(N)  (7.47)

a

t_{A} · s_{A} = 1 modφ(N).  (7.48)

Zejména tedy

(v − t_{A}) · s_{A} = 0 modφ(N).  (7.49)

a

v = t_{A} modφ(N).  (7.50)

Takovéto v je dešifrovacím exponentem zpráv, které jsou zasílány účastníkovi A. Totiž, je-li

y = x^{s_{A}} mod(N),  (7.51)

zpráva určená pro A, pak platí

y^{v} = x^{s_{A}·v} = x^{s_{A}·v+s_{A}·l·φ(N)} = x mod(N),  (7.52)

pro vhodné l ∈ Z. Pokud chce B odeslat zprávu jinému účastníkovi C, stačí podepsat zprávu místo dešifrovacím exponentem účastníka A exponentem v.

Jinou z možných příčin narušení RSA-šifrovacího systému by mohla být skutečnost, že tatáž zpráva je odeslána více účastníkům šifrovacího systému tak, že je zašifrovaná různými šiframi tohoto systému. RSA-algoritmus nemůže používat stejné šifrovací exponenty.

Z důvodu jednoduchosti uvažujme tři účastníky šifrovacího systému, kteří mají šifrovací klíče (s, N_{i}), i = 1, 2, 3. Můžeme bez újmy na obecnosti předpokládat, že moduly jsou navzájem nesoudělné. Pokud by tomu tak nebylo, našli bychom faktorizaci a tím byli hotovi. Zašleme-li těmto třem účastníkům stejnou zprávu x, x < minN_{i}, pak Mr. X, který zachytí její zašifrované varianty y_{i}, i = 1, 2, 3, může zprávu x lehce dešifrovat. Postup Mr. X bude následovný. Z kongruenčních rovnic

y_{1} = x^{s} modN_{1}  (7.53)
y_{2} = x^{s} modN_{2}  (7.54)
y_{3} = x^{s} modN_{3}  (7.55)

dostaneme pro N = N_{1}N_{2}N_{3}

y_{1}N_{2}N_{3} = x^{s}N_{2}N_{3} modN  (7.56)
y_{2}N_{1}N_{3} = x^{s}N_{1}N_{3} modN  (7.57)
y_{3}N_{1}N_{2} = x^{s}N_{1}N_{2} modN.  (7.58)

Po jejich sečtení obdržíme

y_{1}N_{2}N_{3} + y_{2}N_{1}N_{3} + y_{3}N_{1}N_{2} = x^{s} · (N_{2}N_{3} + N_{1}N_{3} + N_{1}N_{2}) modN.  (7.59)

Je-li s = 3, pak x^{s} < N a Mr. X může z poslední kongruence přímo vypočítat zprávu x - vynásobením prvkem inverzním k prvku (N_{2}N_{3} + N_{1}N_{3} + N_{1}N_{2}) a standardním odmocněním. Výsledek lze zobecnit na d účastníků šifrovacího systému.

Speciální přístupy k dešifrování RSA-šifrovacího systému

Můžeme-li počítat s jistou neopatrností účastníka sítě, zašle Mr. Xúčastníkovi A zprávu x^{s} · a^{s}, kde x^{s} je zašifrovaná zpráva, ktero Mr. X zachytil a pozměnil ji pronásobením číslem a^{s}. Veřejný šifrovací klíč je dvojice (s, N). Tedy účastník A obdrží zprávu

y′ = a^{s} · x^{s} modN  (7.60)

a po dešifrování x′ = (y′)^{t} = xa modN. Pokud bude A neopatrný a umožní x′ přístup k číslu x′, pak můžeme jednoduše spočítat

x = a^{−1} · x′ modN.  (7.61)

Další možný přístup souvisí s protokolem při vytváření spojení mezi účastníky, kdy se A i B navzájem identifikují. Pokud chce účastník B navázat spojení s účastníkem A, zvolí libovolnou zprávu x a vyšle pomocí dešifrovacího exponentu t_{B} šifru y = x^{t_{B}} modN_{B}. Účastník A zná šifrovací exponent účastníka B a proto si může zkontrolovat y^{s_{B}} = x^{t_{B}·s_{B}} = x modN_{B}. Nyní použije účastník A svůj dešifrovací exponent t_{A} a výše uvedený postup zopakuje. Zřejmě je x < min{N_{A}, N_{B}}. Jak bude probíhat vlastní útok? Pokud účastník B získá dva takovéto podpisy od účastníka A

y_{1} = x^{t_{A}} modN_{A},  (7.62)
y_{2} = x^{t_{A}} modN_{A},  (7.63)

je pak schopný vytvořit třetí hodnověrný podpis účastníka A bez znalosti jeho dešifrovacího exponentu t_{A}

y = (x_{1}x_{2})^{t_{A}} modN_{A},  (7.64)

a ten zneužít při podpisu nějaké zprávy (B zná jak x_{1} tak x_{2}). Proto je vhodné doplnit při podpisování zprávu x nějakou aktuální redundantní a nepředvídanou informací.

Třetí z možných přístupů je následující. Nechť šifrovací modul N = p · q má n-bitovou reprezentaci a prvočísla p a q mají \frac{n}{2}-bitovou reprezentaci. Předpokládejme, že Mr. X má možnost získat nějakým způsobem \frac{n}{2}-bitovou informaci o modulu N. Potom ho samozřejmě může faktorizovat - přímo se zeptá na jedno z prvočísel p a q. Dá se ukázat, že šifrovací modul N je možno faktorizovat polynomiálním algoritmem, pokud má Mr. X možnost získat jen \frac{n}{3} bitů.

Na poslední z přístupů k rozšifrování RSA-šifry poukázali jako první G.J. Simmons a M.J. Norris. Tento přístup využívá algebraické vlastnosti RSA-krypto-systému.

Algebraické vlastnosti RSA-kryptosystému a iterovaný útok na jeho bezpečnost

Uvažujme množinu zpráv rozšířenou o nulový prvek, tj. M = {0, 1, 2, …, N − 1}. Pro každé s, (s, ϕ(N)) = 1 je zobrazení

T (s, x) = x^{s} modN  (7.65)

permutací množiny M, která nechává nulový prvek na místě. Lze tedy množinu M s násobením považovat za konečnou komutativní pologrupu s nulovým prvkem, T (s, −) : M → M je homomorfismus pologrup zachovávající nulový prvek.

Ukažme si možnost narušení systému iterovaným šifrováním. Z konečnosti množiny M víme, že existuje číslo h tak, že

T (s, −)^{h+1} = T (s, −)  (7.66)

a tedy pro každé zprávu x platí T (s, x)^{h} = x. Navíc lze pro konkrétní zprávu najít takové minimální h - tj. délku cyklu, který obsahuje zprávu x.

Tento postup je však prakticky realizovatelný jen v případě, když h bude relativně malé číslo, např. menší než milión. Je přitom dokázáno, že při vhodném výběru prvočísel p a q je pravděpodobnost nalezení takovéhoto malého h menší než 10^{−90}. Vzhledem k tomu, že počet elementárních částic v nám známém vesmíru je řádově 10^{80}, lze každou pravděpodobnost menší než 10^{−80} považovat za nulovou.

Popišme si nyní pologrupu M. Ta je sjednocením čtyř disjunktních grup a obsahuje přesně čtyři idempotenty - 0, 1, e_{1}, e_{2}. Poslední dva idempotenty dostaneme jako řešení rovnic

a_{1} · p = 1 modq,  resp. a_{2} · q = 1 modp,  (7.67)

kde a_{1} · p = e_{1} a a_{2} · q = e_{2} leží v M. Příslušné grupy jsou tedy

G(0) = {0}, G(1) = {x : (x, p · q) = 1},
G(e_{1}) = {x : x = p · a modq, a = 1, 2, …, q − 1},
G(e_{2}) = {x : x = q · b modp, b = 1, 2, …, p − 1}.

To znamená, že počet prvků v jednotlivých grupách je 1, (p − 1)(q − 1), q − 1 a p − 1.

Nejprve určeme počet těch zpráv x ∈ M, které zůstanou při permutaci T (s, −) = T_{s} na místě. Ptáme se tedy na počet řešení rovnice

T (s, x) = x^{s} = x modN.  (7.68)

Lze dokázat, že všechna takováto řešení tvoří podpologrupu Z_{1} pologrupy M, která obsahuje přesně

|Z_{1}| = [1 + (s − 1, p − 1)][1 + (s − 1, q − 1)]  (7.69)

prvků. V případě, že zvolíme parametry s, p, q tak, že

s = 2r + 1, p = 2p_{1} + 1, q = 2q_{1} + 1,  (7.70)

kde p_{1}, q_{1} a r jsou navzájem různá prvočísla, je |Z_{1}| = 9 a to je zřejmě nejmenší možný počet zpráv, které se nezašifrují.

Podívejme se nyní, jak to vypadá při iterovaném šifrování. Chceme vědět, kolik různých zašifrovaných zpráv můžeme tímto způsobem přečíst, zopakujemeli šifrování h + 1-krát. Rovnost 7.66 přepíšeme na tvar

x^{s^{h+1}} = x^{s} modN, resp. x^{s^{h}} = x modN.  (7.71)

Všechna takováto řešení opět tvoří podpologrupu Z_{h} pologrupy M, která obsahuje přesně

|Z_{h}| = [1 + (s^{h} − 1, p − 1)][1 + (s^{h} − 1, q − 1)]  (7.72)

prvků.

Lemma 7.8.2 a) Z_{l} ∩ Z_{h} = Z_{d}, kde d = (l, h),

b) Dělí-li číslo l číslo h, je Z_{l} ⊆ Z_{h}.

Důkaz. a) Nechť x ∈ G(f), kde f ≠ 0 je jeden z idempotentů pologrupy M. Rovnice

x^{s^{l}−1} = f modN a x^{s^{h}−1} = f modN,  (7.73)

které získáme vydělením vztahu 7.71 v příslušné grupě G(f), mají společné řešení právě tehdy, když (s^{l} − 1, s^{h} − 1) = s^{d} − 1, kde d = (l, h).

Tvrzení b) je speciálním případem pro l = (l, h).

Lemma 7.8.3 Označme Z_{h}^{∗} = {x : x = x^{s^{h}}, x^{s^{l}} ≠ x pro všechna l < h}, D_{h} = {d : d/h, d ≠ h}. Pak

a) Z_{h}^{∗} = Z_{h} − ⋃{Z_{d} : d/h, d ≠ h},

b) |Z_{h}^{∗}| = |Z_{h}|−[∑{|Z_{d}| : d ∈ D_{h}} − ∑{|Z_{d_{1}} ∩ Z_{d_{2}}| : d_{1}, d_{2} ∈ D_{h}, d_{1} ≠ d_{2}} + … +

+ (−1)^{|D_{h}|}| ⋂{Z_{d} : d ∈ D_{h}, }|.],

c) Pokud je h = p^{α}, p prvočíslo, je Z_{h}^{∗} = Z_{h} − Z_{\frac{h}{p}}.

Důkaz. a) Nechť x ∈ Z_{h}^{∗}, pak x ∉ Z_{l} pro libovolné l < h, (l, h) ≠ 1. Tedy Z_{h}^{∗} ⊆ Z_{h} − ⋃{Z_{l} : l < h, (l, h) ≠ 1} tj. Z_{h}^{∗} ⊆ Z_{h} − ⋃{Z_{d} : d/h, d ≠ h}. Opačná implikace je zřejmá. Zároveň protože Z_{h} ⊇ ⋃{Z_{d} : d/h, d ≠ h}, máme |Z_{h}^{∗}| = |Z_{h} − ⋃{Z_{d} : d/h, d ≠ h}|.

b) Plyne z principu exkluze a inkluze.

c) Plyne z inkluzí

Z_{1} ⊆ Z_{p} ⊆ Z_{p^{2}} ⊆ … ⊆ Z_{p^{α−1}}

a z rovnosti Z_{\frac{h}{p}} = ⋃\{Z_{d} : d/h, d ≠ h\}.

Pologrupu M můžeme tedy napsat jako disjunktní sjednocení množin Z_{h}^{∗}. Úloha navrhovatele šifrovacího systému je, aby |Z_{h}^{∗}| = 0 pro malá h. Množinu Z_{h}^{∗} můžeme pomocí zobrazení T_{s} popsat následovně

Z_{h}^{∗} = {x : T_{s}^{h}(x) = x a T_{s}^{l}(x) = x pro l < h}.

Lze ukázat, že univerzálním dešifrovacím exponentem je h_{0} = λ(λ(N)), kde λ je tzv. Carmichaelova funkce, která číslu n = p_{1}^{α_{1}} · p_{2}^{α_{2}} · ·p_{r}^{α_{r}} přiřadí číslo

λ(n) = \{ \begin{matrix}1 & jestliže n = 1, \\ 2^{α−2} & jestliže n = 2^{α}, α > 2, \\ φ(n) & jestliže n = 2, 4, p^{α}, p – liché prvočíslo, \\ nsn\{λ(p_{1}^{α_{1}}), …, λ(p_{r}^{α_{r}})\} & jinak. \end{matrix}

Zejména tedy pro každou zprávu x ∈ M a pro každé 1 ≤ s ≤ N −1, (s, N) = 1 platí

T_{s}^{h_{0}} (x) = x.  (7.74)

Zároveň lze dokázat, že tento univerzální dešifrovací exponent nelze nahradit menším číslem. Je zřejmé, že permutace T_{s} tvoří grupu. Lze dokázat, že počet prvků této grupy je φ(λ(N)). Každá z permutací T_{s} generuje v této grupě nějakou konečnou cyklickou podgrupu {T_{s}, T_{s}^{2}, …}. Její exponent (exponentem grupy G nazýváme takové celé číslo h tak, že a^{h} = 1 pro všechny prvky a grupy G) musí dělit exponent h_{0} celé grupy. Proto nutná podmínka neprázdnosti množiny Z_{h}^{∗} je, aby h dělilo h_{0}.

Nyní se budeme zajímat o výběr vhodných parametrů s, p a q. Po analýze, kterou jsme provedli, lze psát

M = ⋃{Z_{h}^{∗} : h dělí h_{0}}, resp. |M| = ∑{|Z_{h}^{∗}| : h dělí h_{0}},  (7.75)

kde některé sčítance |Z_{h}^{∗}| mohou být nulové. Naším úkolem je zvolit s a N tak, aby |Z_{h}^{∗}| ≠ 0 pro velká h, tj. aby pravděpodobnost úspěchu při pokusu o narušení RSA-algoritmu iterovaným útokem byla co nejmenší. Protože víme, že

h_{0} = λ(λ(N)) = λ(nsn{p − 1, q − 1}),

takovouto nutnou podmínkou je, aby číslo h_{0} mělo velké prvočíselné dělitele. Vezmeme-li do úvahy podmínku 7.70, pak dostaneme

h_{0} = λ(nsn{a_{1}p_{1}, b_{1}q_{1}}) = λ(p_{1}q_{1}nsn{a_{1}, b_{1}}),  (7.76)

kde a_{1}, b_{1} jsou libovolná náhodně zvolená malá čísla, p − 1 = a_{1}p_{1}, q − 1 = b_{1}q_{1}. Podle definice Carmichaelovy funkce λ je pak h_{0} násobek čísla nsn{p − 1, q − 1}. Aby toto číslo bylo co největší, můžeme zvolit p_{1} = a_{2}p_{2} + 1 a q_{1} = b_{2}q_{2} + 1, kde a_{2}, b_{2} jsou libovolná náhodně zvolená malá čísla a p_{2} a q_{2} jsou přibližně 90-ti ciferná prvočísla. Pak bude h_{0} = p_{2} · q_{2} · a, pro vhodné celé číslo a.

Dále dokážeme, že toto h_{0} je pro většinu transformací T_{s} nejmenším exponentem v příslušné grupě.

Zabývejme se nyní exponentem zpráv x ∈ M. Zpráva x nebude z grupy G(1) ⊆ M právě tehdy, když bude násobkem prvočísla p nebo q. Pravděpodobnost takovéto situace, že (x, N) = (x, pq) ≠ 1 pro náhodně zvolené x bude

\frac{|G(e_{1})| + |G(e_{2})| + 1}{N} = \frac{p + q − 1}{N} ≤ \frac{1}{p} + \frac{1}{q} ≤ 10^{−90},  (7.77)

což je možno považovat za nulovou pravděpodobnost. Tento výsledek podtrhuje spolehlivost RSA-systému při vhodné volbě klíče. Tvrdí, že pro odesilatele zprávy nemá praktický význam, aby počítal číslo (x, N), které může být rovné 1, p nebo q.

Předpokládejme tedy, že (x, N) = 1 a prvočísla jsou vybraná výše uvedeným způsobem

p = a_{1} · p_{1} + 1, q = b_{1} · q_{1} + 1

(7.78)

p_{1} = a_{2} · p_{2} + 1, q_{1} = b_{2} · q_{2} + 1

kde a_{i}, b_{j} jsou libovolná náhodně zvolená malá čísla, p, q, p_{1}, q_{1}, p_{2}, q_{2} jsou náhodně zvolená prvočísla, p_{2}, q_{2} ≥ 10^{90}. Ukážeme, že pro většinu zpráv x je jejich exponent násobkem čísla p_{1}q_{1}.

Připomeňme si následující známou větu z obecné algebry.

Věta 7.8.4 (L. Sylow) Nechť G je abelovská grupa, |G| = n. Nechť dále p^{α} je největší mocnina prvočísla p, která dělí n. Pak grupa G obsahuje jedinou podgrupu, která má přesně p^{α} prvků. Tato podgrupa se nazývá Sylowovská.

Důsledek 7.8.5 Nechť |G| = p_{1}^{α_{1}} ·p_{2}^{α_{2}} ·. . .·p_{k}^{α_{k}} je kanonický rozklad čísla n = |G|. Pak G je izomorfní s kartézským součinem všech svých Sylowovských podgrup G_{p_{i}}.

Aplikujeme-li předchozí důsledek na naši situaci, dostáváme, že pro podgrupu G(1) platí |G(1)| = t_{1}^{α_{1}} · t_{2}^{α_{2}} · . . . · t_{k}^{α_{k}} · p_{1} · q_{1}. Je tedy grupa G(1) izomorfní s kartézským součinem grup G′ × G_{p_{1}} × G_{p_{2}}, kde G′ = G_{t_{1}^{α_{1}}} × G_{t_{2}^{α_{2}}} × … × G_{t_{k}^{α_{k}}}. Počet prvků x ∈ G(1), jejichž exponent nebude soudělný se součinem p_{1}q_{1} je

|G′| · (p_{1} + q_{1}) − |G′|.

Proto pravděpodobnost, že náhodně zvolené x ∈ G(1) nebude mít exponent h, který je násobek p_{1} · q_{1}, bude rovna

\frac{|G′| · (p_{1} + q_{1}) − |G′|}{|G′| · p_{1} · q_{1}} = \frac{p_{1} + q_{1} − 1}{p_{1} · q_{1}} ≤ 10^{−90}.  (7.79)

Naprostá většina prvků pologrupy M má tedy exponent, který je násobkem prvočísel p_{1} a q_{1}, tj. h = a · p_{1} · q_{1}.

Aplikujeme-li tedy tento postup na grupu τ různých transformací T_{s} pro pevně zvolený modul N, víme, že se jedná o komutativní grupu, která má přesně φ(λ(N)) prvků a její exponent je h_{0} = λ(λ(N)). Zvolíme-li parametry p a q v souladu s 7.78, dostaneme

φ(λ(N))  = φ(p_{1}q_{1} · nsn{a_{1}, b_{1}}) =  (7.80)
= (p_{1} − 1) · (q_{1} − 1) · φ(nsn{a_{1}, b_{1}}) =  (7.81)
= a_{2} · b_{2} · φ(nsn{a_{1}, b_{1}}) · p_{2} · q_{2}.  (7.82)

Snadno lze spočítat prvky x ∈ G(1), jejichž exponent není dělitelný součinem p_{2}q_{2}. Pak pravděpodobnost, že při iterovaném šifrování budeme úspěšní, je

\frac{a · (p_{2} + q_{2}) − |G′|}{|G′| · p_{2} · q_{2}} = \frac{p_{2} + q_{2} − 1}{p_{2} · q_{2}} ≤ 10^{−90}.  (7.83)

Navíc exponent h pro většinu transformací T_{s} je řádově 10^{180}.

Poznámka. Poznamenejme, že exituje ještě další zřejmá možnost, jak úspěšně narušit RSA-algoritmus a to za předpokladu, že známe φ(N). Pak je snadné nají tajný dešifrovací klíč t. Ale jak je snadno vidět, znalost φ(N) vede k faktorizaci N. Platí totiž identity

p + q = n − φ(N), (p − q)^{2} = (p + q)^{2} − 4N, q = \frac{1}{2}[(p + q) − (p − q)].  (7.84)

Rozluštění RSA-kryptosystému za 100 USD

Tvůrci RSA vsadili 100 USD na to, že nikdo nerozluští anglický text a zašifrovaný RSA s veřejným exponentem e = 9007 a modulem N = 1143816257578886766923577997614661010218

7.9 Diskrétní logaritmus

V tomto odstavci se budeme zabývat dalším příkladem toho, co lze v současnosti považovat za další jednosměrnou funkci. Definujme tedy diskrétní logaritmus. Uvažme n tak, že má primitivní kořen a, tj. platí (a, n) = 1 a pro všechna d, 1 ≤ d ≤ φ(n) − 1 je a^{d} ≠ 1. Pokud pro x, 1 ≤ x ≤ φ(n) − 1, platí

y = a^{x} modn,  (7.85)

říkáme, že x je diskrétní logaritmus z y při základu a modulo n a píšeme x = log_{a}y modφ(n). Důležitost toho, aby a bylo primitivní kořen, spočívá v tom, že nám tím garantuje pro každé y, 1 ≤ y ≤ n − 1, (y, n) = 1 existenci jediného takového x tj. diskrétní logaritmus je korektně definovaná funkce.

Platí pak následující tvrzení.

Tvrzení 7.9.1 Exponenciální funkce definovaná v 7.85 je jednosměrná, tj. provedení umocňování je snadné, ale logaritmování je obtížné.

Důkaz. Umocňování lze provést pomocí 2·⌈logn2⌉ násobení modulo n tj. umocňování je funkce ležící v třídě operací, které lze provést v polynomiálním čase. V současné době není znám žádný algoritmus pracující v polynomiálním čase na výpočet diskrétního logaritmu.

Využití diskrétních algoritmů pro bezpečnou distribuci klíčů

Jeden za základních problémů klasické kryptografie je způsob bezpečné distribuce klíčů. Jaká je jistota, že když nemůžeme bezpečně přenášet zprávy, že klíče budou bezpečné?

Diffie a Hellman navrhli elegantní způsob vyřešení tohoto problému. Závisí na jednosměrné povaze problému diskrétní logaritmizace. Uvažme seznam uživatelů (U_{i} : 1 ≤ i ≤ N), kteří spolu chtějí navzájem komunikovat. Buď p velké prvočíslo (o mnoho větší než N) a nechť a je primitivní kořen z p. Typický uživatel U_{i} si vygeneruje, nezávisle na ostatních uživatelích, pseudonáhodné číslo X_{i} v rozmezí od 1 do p − 1 a ponechá ho v tajnosti. Zároveň prohlásí za svůj veřejný klíč přirozené číslo

Y_{i} = a^{X_{i}} modp.  (7.86)

Přejí-li si uživatelé U_{i} a U_{j} komunikovat soukromě, použijí za svůj klíč číslo

K_{ij} = a^{X_{i}X_{j}} modp.  (7.87)

Uživatel U_{i} si vypočte K_{ij} tím, že si najde ve veřejně přístupném souboru Y_{j} a použije vztah

K_{ij} = Y_{j}^{X_{i}} modp.  (7.88)

Podobně to provede i uživatel U_{j}

K_{ij} = Y_{i}^{X_{j}} modp.  (7.89)

Je-li p prvočíslo zapsané v dvojkové soustavě pomocí b bitů, je na umocnění potřeba nejvýše 2b násobení modulo p. Naopak však Mr. X potřebuje více než polynomiální počet operací, aby byl schopen napadnout systém. Poznamenejme, že doposud není známo, zda prolomení tohoto systému je ekvivalentní výpočtu diskrétního logaritmu.

Šifrovací systém bez klíčů

Uvažme následující šifrovací systém. Předpokládejme, že uživatel A chce poslat zprávu uživateli B a že tato zpráva je reprezentovatelná jako přirozené číslo v intervalu {0, 1, 2, …, p−1}, kde p je velké prvočíslo. Uživatel A si vybere přirozené číslo a nesoudělné s p − 1. Totéž provede uživatel B pro číslo b. Komunikace mezi A a B sestává ze tří kroků. Nejdřív A pošle B celé číslo

C = M^{a} modp.  (7.90)

Potom B odešle A číslo

D = C^{b} modp.  (7.91)

Pak A určí celé číslo a′ tak, že a · a′ = 1 modp − 1 a zašle B číslo

E = D^{a′} modp.  (7.92)

Následovně příjemce B dešifruje zprávu podle předpisu

F = E^{b′} modp,  (7.93)

kde b′ je celé číslo tak, že b · b′ = 1 modp − 1 tj. existuje celé číslo t splňující b · b′ = 1 + t · (p − 1).

Ukažme, že F = M. Totiž

\begin{aligned}F & = E^{b′} = (D^{a′})^{b′} = D^{a′b′} = C^{a′b′b} = (C^{a′})^{b′b} = (C^{a′})^{1+t(p−1)} modp \\ & = C^{a′} · (C^{a′})^{t(p−1)} = C^{a′} = (M^{a})^{a′} = M^{aa′} = M modp. \end{aligned}  (7.94)

Vážnou nevýhodou tohoto systému je 3-násobná časová náročnost.

Šifrovací systém s veřejným klíčem založený na diskrétním logaritmování

Všichni uživatelé systému znají velké prvočíslo p spolu s primitivním kořenem a modulo p. Platí tedy, že (a, p) = 1, a^{p−1} = 1 modp a pro všechna d, 1 ≤ d ≤ φ(p) − 1 je a^{d} ≠ 1 modp.

Soukromý klíč uživatele B je náhodně vybrané přirozené číslo x_{B}, 1 ≤ x_{B} ≤ p − 1.

Veřejný klíč uživatele B je číslo y_{B} = a^{x_{B}} modp.

Předpokládejme, že A chce odeslat B zprávu M, 1 ≤ M ≤ p − 1. A postupuje následovně:

1. Vybere náhodně číslo k tak, že 1 ≤ k ≤ p − 1.

2. Vypočte ţklíč� K = y_{B}^{k} modp.

3. Zašifruje zprávu M jako dvojici přirozených čísel (C_{1}, C_{2}), kde

C_{1} = a^{k} modp, C_{2} = KM modp.

Je tedy enkrypce určena zobrazením

e : M ↦ C = (C_{1}, C_{2}),

které nám zdvojnásobí délku zprávy.

Přitom toto zašifrování má tu vlastnost, že stejná zpráva šifrovaná podruhé nemusí dát tentýž kryptogram vzhledem k náhodnosti k.

Dešifrování provádí uživatel B následovně:

1. Vypočte K jako

K = y_{B}^{k} = a^{x_{B}k} = (a^{k})^{x_{B}} = C_{1}^{x_{B}} modp.

2. Vypočte M tím, že podělí C_{2} číslem K modulo p.

Zřejmě je tento algoritmus snadno napadnutelný každým, kdo je schopen provést diskrétní logaritmování v dostatečně krátké době. Doposud však není známo, zda je úspěšné napadnutí tohoto systému ekvivalentní diskrétnímu logaritmování.

7.10 Rychlejší podpisy ale méně bezpečnosti

Pokud se nás příliš nedotýká bezpečnost systému, pak může být šifrovací procedura popsaná v předchozím paragrafu modifikovaná tak, že umožní výpočet rychlejší téměř o polovici. Uvažme následující algoritmus.

1. Odesílatel A vypočte podpis S zprávy M užitím svého vlastního soukromé-

ho klíče a obdrží

S = d_{A}(M).

2. A odešle podpis S otevřeným kanálem příjemci B.

3. Užitím veřejného klíče odesílatele A vypočte B zprávu

M = e_{A}(S).

B je pak ve stejné pozici jako předtím, když ověřuje, že A skutečně odeslal zprávu M. Ale, pokud Mr. X zachytil přenášený podpis S, pak může Mr. X vypočítat zprávu M stejně jako B. Tedy tento algoritmus nemá skutečné utajení. Je však mnohem rychlejší a jeho rychlost ho dělá cenným pro ty aplikace, kde je podstatným faktorem autenticita a ne utajení. Pokud jsem připraveni zcela zapomenout na utajení, pak zřejmý protokol pro odesílatele A na odeslání podepsané zprávy pro B je poslat otevřeným kanálem podepsanou zprávu (M, S), kde

S = d_{A}(M).

Uvažme následující příklad. Rabinovo podpisovací schéma je odvozeno ze systému s veřejným klíčem, kde šifrovací funkce má tvar

e(x) = x · (x + B) modN,  (7.95)

kde N je součin dvou prvočísel (ta jsou utajena) a (N, B) je veřejný klíč typického uživatele. Bez újmy na obecnosti lze předpokládat, že B = 0, a tedy

e(x) = x · x modN, d(x) = \sqrt{x} modN.  (7.96)

Tedy uživatel A podepíše zprávu podpisem

S = \sqrt{M} modN_{A};  (7.97)

přitom zde použije své znalosti faktorizace N_{A}. Příjemce podepsané zprávy (M, \sqrt{M}) musí pouze ověřit autenticitu zprávy kontrolou, že

M = (\sqrt{M})^{2} modN_{A}.  (7.98)

Je okamžitě vidět, že toto schéma není zcela dokonalé - ne všechna přirozená čísla menší než N_{A} jsou čtverci modulo N_{A}. Aby to šlo napravit, Rabin zavedl následující postup:

Chce-li A podepsat zprávu M, přidá k ní binární řetězec U dohodnuté délky k. Výběr U je náhodný. Uživatel A pak zajistí kompresí nebo jinou vhodnou funkcí c, že

c(MU) ≤ N_{A}.  (7.99)

Funkce c je veřejně známá a proto veřejně zkontrolovatelná.

Uživatel A nyní použije svůj soukromý klíč, aby zjistila, zda toto přirozené číslo c(MU) je čtverec modulo N_{A}. Pokud tomu tak není, vybere opět náhodně jiný binární řetězec délky k a postup opakuje do té doby, než najde číslo c(MU), které je čtverec modulo N_{A}. Lze dokázat, že průměrný počet pokusů pro nalezení takovéhoto U je malý.

Uživatel A nyní použije jako svůj podpis zprávy M dvojici (U, S). Kdokoliv si přeje ověřit, že A skutečně zprávu M odeslala, musí pouze provést • výpočet c(MU) = M_{1},

• kontrolu, že M_{1} = S^{2} modN_{A}.

7.11 Kódy opravující chyby jakožto systém s veřejným klíčem

Edgar Allan Poe, který se považoval za dobrého kryptoanalytika, se jednou vyjádřil v novinách, že je schopen bezprostředně rozluštit každý kryptogram (tím mínil monoabecední substituční šifru). G.W. Kulp tuto výzvu přijal a zaslal mu 43-slovní šifrový text. V dalším článku Poe dokázal, že tento šifrogram byl shlukem náhodných charakterů bez jakéhokoliv významu. V roce 1975 byl Kulpův kryptogram rozluštěn B. J. Winskelem a M. Lysterem. Ke Kulpově hlavní chybě se navíc přidalo alespoň 15 menších (snad tiskových) chyb - z toho pak vyplynuly důvody pro obtížnost dešifrování tohoto kryptogramu.

Ať je to úmyslné nebo nikoliv, zavedení chyn zcela jistě zmate nepřátelského kryptoanalytika a toto je pak základem chytrého návrhu systému s veřejným klíčem od R. J. McEliece z roku 1978. Tento systém pracuje následovně:

Typický uživatel, řekněme A, má za svůj veřejný klíč binární matici Ĝ typu k× n; zasílá-li uživatel B binární zprávu M uživateli A, použije následující kódovací algoritmus.

1. B rozdělí zprávu do bloků velikosti k, a pokračuje s každým blokem zvlášť.

2. B zakóduje každý blok m pomocí předpisu

c = em = mĜ + z,  (7.100)

zde z je náhodný vektor chyb délky n a váhy menší nebo roven t, přirozené číslo bylo t předtím sjednano dopředu.

Soukromý klíč uživatele A je dvojice matic (S, P), kde S je regulární matice typu k × k a P je náhodná permutační matice. Platí pak

Ĝ = SGP,  (7.101)

kde G je matice lineárního kódu typu k × n, který je schopen odhalit a opravit až t chyb. Dešifrovací proces uživatele A je následující:

1. ĉ = cP^{−1}=(mSGP + z)P^{−1} = mSG + zP^{−1}.

2. Protože z je náhodný vektor s váhou menší nebo rovnu t a kód generovaný maticí G opraví t chyb, dekóduje pak dekódovací algoritmus ĉ do mS.

3. Určím m pomocí násobení S^{−1} zprava.

McEliece navrhoval použít Goppovy kódy jako základ. Jedná se o třídu dobrých lineárních kódů s velmi efektivním dekódovacím algoritmem. Jejich parametry jsou tvaru

n = 2^{a}, k = n − at, d ≥ 2t + 1,

pro daná čísla t a a. Je-li tedy n = 1024 = 2^{10} a t = 50, tj, k = 524, nepřítel se musí zabývat luštěním kryptogramu, kde se v každé části délky 1024 vyskytuje až 50 náhodných chyb.

Šifrový standard DES

8.1 Potřeba a historie vzniku DES

Obrovský nárůst počítačové komunikace a nástup elektronických bankovních systémů v sedmdesátých letech byly jedním z hlavních faktorů pro rozhodnutí exekutivy Spojených států amerických na zajištění standardu pro bezpečný a spolehlivý transfer dat Federální banky a ostatních bank. Bylo tedy potřeba zajistitit ochranu dat jak v počítačích zpracovávaných a tamtéž ukládaných, tak i dat počítači přenášených.

Soutěž na tvorbu šifrovacího algoritmu vyhlásilo ministerstvo obchodu Spojených států amerických v roce 1973. Organizoval ji National Bureau of Standards (NBS). Požadovaným vlastnostem však nevyhověl žádný ze zaslaných algoritmů - základní idea byla, že šifrovací proces by mělo být možno provádět na malém čipu. Důsledkem pak by byla masová výroba těchto čipů, jejichž použití by zajišťovalo naprostou bezpečnost transferu dat. Přitom sám algoritmus měl být bezpečný, pochopitelný, dostupný, výkonný, jeho bezpečnost neměla záviset na utajení algoritmu, vhodný pro nejrůznější aplikace a ekonomický při elektronické realizaci – tj. čip by měl být levný. V srpnu 1974 byla výzva opakována.

Tentokrát se algoritmus podařilo nalézt. Bylo akceptováno šifrovací schéma navržené firmou IBM. Její výzkumný tým pod vedením dr. Tuchmana jej založil na zdokonalení šifrovacího algoritmu LUCIFER, který IBM používala pro své potřeby. Na rozdíl od algoritmu LUCIFER, jež používal klíč o délce 128 bitů, délka klíče navržená pro NBS byla 64 bitů a z toho bylo 8 bitů odstraněno hned na začátku šifrování.

NBS, IBM a NSA (National Security Agency) se dohodly, že NSA provede ohodnocení bezpečnosti DES (Data Encryption Standars), jak byl později nový algoritmus nazván, a IBM umožní jeho bezplatné využívání na území Spojených států amerických. DES byl patentován 24.2. 1975 a v březnu téhož roku byl zveřejněn pro všeobecné veřejné hodnocení.

Přes některé výhrady byl 23.11. 1976 přijat jako federální standard a jako takový zveřejněn 15.1. 1977. Algoritmus byl určen pro ochranu neutajovaných dat v civilním sektoru i vládních institucí vyjma ozbrojených složek, kde nemohl být používán ani k ochramě neutajovaných dat. Předpokládaná doba použití byla 10-15 let.

Algoritmus měl být po svém přijetí v roce 1977 každých pět let hodnocen a jeho platnost potvrzována NBS. V roce 1984 zahájila NSA program ţCommercial COMSEC Endorsement Program� (CCEP), určený pro zabezpečování ochramy vládních informací, v rámci něhož mělo být připraveno i nahrazování DES. Byly vyvinuty hardwarové bezpečnostní moduly, provádějící šifrové algoritmy navržené pro tentokrát NSA. Tyto algoritmy byly typu 1 a typu 2. První byl určen pro utajované vládní informace a druhý pro neutajované vládní informace (měl nahradit DES). Později byla aplikace zařízení s algoritmem typu 2 rozšířena i na soukromý sektor.

Po 1.1. 1988 neměla už NSA v úmyslu doporučovat DES pro vládní použití. Bylo však zjištěno, že by to způsobilo značné potíže v bankovním sektoru. DES byl v této době už masově používán v nejrůznějších zařízeních včetně mezinárodního bankovního spojení. To vedlo ministerstvo obchodu USA ke zmírnění stanoviska NSA. V lednu 1988 NBS znovu potvrdil možnost používat DES v dalších 5 letech, avšak ne pro federální nefinanční použití. Ve federálních nefinančních institucích musel být DES nahrazován algoritmy vyvinutými NSA v rámci CCEP.

Algoritmy jsou utajovány a nesmí být exportovány ze Spojených států amerických. Čipy, které je realizují, mají ochranný kryt. Výrobci produktů musí při jejich výrobě dodržovat zvláštní postup, stanovený NSA. Tato opatření na ochranu nových algoritmů přinášejí do celé koncepce jejich využívání velké rozpory. Jejich softwarová implementace by nebyla schválena, protože by zde nemohla být zajištěna ochrana algoritmu před jeho odhalením. Přitom v mnoha aplikacích je softwarová implementace nezbytná. Otázkou zůstávají i mezinárodní spoje, kde se předpokládá vývoz těchto zařízení. Je pravděpodobné, že dnes je už povolen přísně regulovaný vývoz, i když algoritmy zůstávají nadále utajeny. Vzhledem k tomu, že uvedená obranná opatření fungují velmi dobře, o zařízeních nevíme téměř nic, dokonce neznáme, ani jejich výkonové charakteristiky. Také není dosud nic známo o rozhodnutí, které mělo být přijato NBS v únoru r. 1993, týkajícím se dalšího existence DES ve finančním sektoru pro léta 1993–1997.

DES se od roku 1977 stal nejrozšířenějším kryptografickým systémem ve světě. Je všeobecným nástrojem bezpečnosti ve veřejném i soukromém sektoru. Ve finančním sektoru se používá k ochraně všech aspektů síťové komunikace a autentizace a de facto se stal mezinárodním standardem. Je včleněn do maloobchodních i velkoobchodních systémů, je přístupný v nedrahém hardwaru a jako volný software. Pouze ve Spojených státech amerických vývoz hardwaru i softwaru s DES dosud podléhá kontrole. DES je dostupný ve všech možných formách: ve formě čipů, zásuvkových modulů do PC nebo celých šifrovacích jednotek. Jsou k dispozici oficiální programy pro softwarovou realizaci a pro kontrolu správnosti jeho realizace v zařízeních. Standardizaci na bázi DES podporuje pět největších standardizačních organizací: ABA, ANSI, GSA, ISO a NBS. Standardy NBS jsou používány jako základ standardů dalších organizací. DES se používá pro šifrování PIN (Personal Identification Number) v různých druzích platebních, přístupovýc aj. karet. Také v několika amerických vládních organizacích vytváří DES základní mechanismus ochrany (ministerstvo ekonomiky, ministerstvo spravedlnosti). V USA na bázi DES vznikl kryptografický průmysl. Je proto pravděpodobné, že výroba a zavádění DES budou nadále pokračovat.

8.2 Popis šifrovacího algoritmu DES

DES patří do třídy blokových šifer. Otevřený text (OT) je rozdělen na bloky po 64 bitech. Každý z těchto bloků M otevřeného textu je jako celek zpracováván na blok C šifrového textu (ŠT) také o délce 64 bitů. Píšeme jako obvykle

C = E_{K}(M), M = D_{K}(C),

kde K je klíč o délce 56 bitů (vznikne z osmibajtového klíčového slova vynecháním jeho paritních bitů).

Zpracování bloku M probíhá v 16 krocích. V každém z nich je z klíče K vybráno podle určitého postupu 48 bitů tvořících pracovní klíč K_{i}. Vlastní blokový algoritmus při šifrování zpracovává blok M tak, že M je nejprve podroben počáteční permutaci IP, která permutuje všech 64 bitů, a poté je rozdělen na pravou polovinu R_{0} a levou polovinu L_{0}, každá o 32 bitech. Pak probíhá 16 totožných kroků, kdy je z dvojice (L_{i}, R_{i}) za účasti pracovního klíče K_{i} vytvořena dvojice (L_{i+1} , K_{i+1} ), i = 0, 1, …, 15. R_{i} je nejprve rozšířen z 32 bitů na 48 bitů prostřednictvím expanze E tak, že

E(R_{i}) = E(r_{1}, r_{2}, …, r_{31}, r_{32})  (8.1)
= (r_{32}, r_{1}, r_{2}, r_{3}, r_{4}, r_{5}, r_{4}, r_{5}, r_{6}, r_{7}, r_{8}, r_{9}, …, r_{28}, r_{29}, r_{30}, r_{31}, r_{32}, r_{1}),

a k výsledku je v modulu 2 tj. bit po bitu přečten klíč K_{i}. Výstup E(R_{i}) ⊕ K_{i} je rozdělen do osmi částí po 6 bitech, které procházejí přes substituční boxy S_{1} až S_{8}. Tyto S-boxy jsou v podstatě pamětí ROM 6×4 bity a výstup je tedy celkem 8×4=32-bitový. Většinou se tyto boxy popisují i zadávají tak, že krajní bity vstupu (1. a 6. bit) vybírají jeden ze čtyř možných boxů 4×4 bity a výstup těchto boxů se uvádí v tabulce. Přitom se jejich vstupní i výstupní 4-bitová hodnota pro jednoduchost zapisuje dekadicky jako 0 až 15. Jsou to permutace na množině {0, 1, …, 15}. Výstup z S-boxů, tj. 8×4=32 bity, je upraven permutací P (32 na 32 bitů). Vzniklé 32-bitové slovo je označováno f(R_{i}, K_{i}), neboť je funkcí klíče K_{i} a slova R_{i}. Poslední operace v i-tém kroku je

L_{i+1} = R_{i} R_{i+1} = L_{i} ⊕ f(R_{i}, K_{i}).  (8.2)

Po proběhnutí 16. kroku je provedena záměna L_{16} a R_{16} a 64-bitový blok (R_{16}, L_{16}) je permutován permutací IP^{−1} (permutací inverzní k IP). Výsledek je již C = E_{K}(M).

8.2 Popis šifrovacího algoritmu DES  133

Otevřený text OT

64

[figure]

Permutovaný text IP

64

L_{0} – Levá ; polovina IP

Klíč K 56

R_{0} – Pravá ; polovina IP
32 L_{i} Pracovní ; klíč K_{i} 48 R_{i} 32
E(R_{i}) {32 \atop 48}
⨁
S_{1}  64 …  S_{8}  {48 \atop 32}

32

[figure]

Permutace P ; Permutovaný ; text z S-boxů

32  L_{i+1}  32  \begin{aligned}R_{16} \\ & L_{16} \end{aligned}  32  R_{i+1}  32
32  L_{16}  [figure: Permutovaný ; text IP^{−1}] 64  R_{16}  32

Šifrový text OT 32

[figure]

[figure]

32

[figure]

[figure]

[figure] [figure] [figure]

[figure]

[figure]

[figure] [figure]

[figure]

[figure]

[figure]

[figure]

[figure] [figure] [figure]

[figure] [figure]

⨁ [figure] [figure]

Tvorba klíčů K_{i}

Klíč K 56

[figure]

Permutace P C1 56

Registr C 28  28 Registr D

[figure: Posunutí ; SHL p_{i}; 28; 28; Posunutí ; SHL p_{i}]

Permutační výběr P C2

{56 \atop 48}

Pracovní klíč K_{i} 48

[figure] [figure]

[figure] [figure]

[figure]

[figure]

[figure]

[figure]

Tvorba pracovních klíčů K_{i} probíhá při šifrování tak, že klíč K o 56 bitech je podroben permutaci P C1 a poté je naplněn do dvou 28-bitových registrů C a D. Obsah registrů C, D je v každém kroku i, i = 0, 1, …, 15 cyklicky posunut doleva o p_{i} bitů (posun p_{i} je v krocích 0, 1, 8 a 15 jednobitový a ve zbývajících dvoubitový) a jejich výsledné 56-bitové zřetězení je podrobeno permutačnímu výběru P C2. P C2 svůj vstup 56 bitů nejen permutuje, ale i redukuje na 48 bitů vynecháním některých bitů. Výstup z P C2 už tvoří pracovní klíč K_{i}. Klíče K_{i} lze vytvářet buď souběžně se zpracováním otevřeného textu nebo předem. Postup formování klíčů K_{i} je takový, že v uvedených 16×48=768 bitech je každý bit klíče K obsažen 12 až 15 a objevuje se na různých pozicích. Tímto je popis šifrovací části blokového algoritmu uzavřen.

Filozofie algoritmu je taková, aby při dešifrování nemuselo být použito zcela jiné hardwarové schéma. Dešifrování M = D_{K}(C) probíhá stejným postupem jako šifrování! Pouze pořadí výběru klíčů K_{i} je obrácené - místo K_{0}, K_{1}, …, K_{15} se používá pořadí K_{15}, K_{14}, …, K_{2}, K_{1}, K_{0}. Vytváříme-li klíče postupně, pak ve výše uvedeném popisu se místo SHL musí použít SHR a tabulka posunů (0, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1), jinak zůstane vše zachováno. Tento princip zpracování (L_{i}, R_{i}) na (L_{i+1} , R_{i+1} ) se nazývá Feistelův princip podle dr. Horsta Feistela, kryptologa IBM a vynálezce šifrovacího algoritmu LUCIFER.

Tabulka permutací

IP PC1 PC2 P 1 58  57  14 16 2 50  49  17 7 3 42  41  11 20 4 34  33  24 21 5 26  25  1 29 6 18  17  5 12 7 10  9  3 28 8 2  1  28 17 9 60  58  15 1 10 52  50  6 15 11 44  42  21 23 12 36  34  10 26 13 28  26  23 5 14 20  18  19 18 15 12  10  12 31 16 4  2  4 10 17 62  59  26 2 18 54  51  8 8 19 46  43  16 24 20 38  35  7 14 21 30  27  27 32 22 22  19  20 27 23 14  11  13 3 24 6  3  2 9 25 64  69  41 19 26 56  52  52 13 27 48  44  31 30 28 40  36  37 6 29 32  63  47 22 30 24  55  55 11 31 16  47  30 4 32 8  39  40 25  IP PC1 PC2 33 57  31  51 34 49  23  45 35 41  15  33 36 33  7  48 37 25  62  44 38 17  54  49 39 9  46  39 40 1  38  56 41 59  30  34 42 51  22  53 43 43  14  46 44 35  6  42 45 27  61  50 46 19  53  36 47 11  45  29 48 3  37  32 49 61  29 50 53  21 51 45  13 52 37  5 53 29  28 54 21  20 55 13  12 56 5  4 57 63 58 55 59 47 60 39 61 31 62 23 63 15 64 7

136  Šifrový standard DES

S-box S1

(x_{2}, x_{3}, x_{4}, x_{5})

x_{1} x_{6} 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 0 14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7
0 1 0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 8
1 0 4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 0
1 1 15 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13

S-box S2

(x_{2}, x_{3}, x_{4}, x_{5})

x_{1} x_{6} 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 0 15 1 8 14 6 11 3 4 9 7 2 13 12 0 5 10
0 1 3 13 4 7 15 2 8 14 12 0 1 10 6 9 11 5
1 0 0 14 7 11 10 4 13 1 5 8 12 6 9 3 2 15
1 1 13 8 10 1 3 15 4 2 11 6 7 12 0 5 14 9

S-box S3

(x_{2}, x_{3}, x_{4}, x_{5})

x_{1} x_{6} 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 0 10 0 9 14 6 3 15 5 1 13 12 7 11 4 2 8
0 1 13 7 0 9 3 4 6 10 2 8 5 14 12 11 15 1
1 0 13 6 4 9 8 15 3 0 11 1 2 12 5 10 14 7
1 1 1 10 13 0 6 9 8 7 4 15 14 3 11 5 2 12

S-box S4

(x_{2}, x_{3}, x_{4}, x_{5})

x_{1} x_{6} 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 0 7 13 14 3 0 6 9 10 1 2 8 5 11 12 4 15
0 1 13 8 11 5 6 15 0 3 4 7 2 12 1 10 14 9
1 0 10 6 9 0 12 11 7 13 15 1 3 14 5 2 8 4
1 1 3 15 0 6 10 1 13 8 9 4 5 11 12 7 2 14

S-box S5

(x_{2}, x_{3}, x_{4}, x_{5})

x_{1} x_{6} 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 0 2 12 4 1 7 10 11 6 8 5 3 15 13 0 14 9
0 1 14 11 2 12 4 7 13 1 5 0 15 10 3 9 8 6
1 0 4 2 1 11 10 13 7 8 15 9 12 5 6 3 0 14
1 1 11 8 12 7 1 14 2 13 6 15 0 9 10 4 5 3

S-box S6

(x_{2}, x_{3}, x_{4}, x_{5})

x_{1} x_{6} 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 0 12 1 10 15 9 2 6 8 0 13 3 4 14 7 5 11
0 1 10 15 4 2 7 12 9 5 6 1 13 14 0 11 3 8
1 0 9 14 15 5 2 8 12 3 7 0 4 10 1 13 11 6
1 1 4 3 2 12 9 5 15 10 11 14 1 7 6 0 8 13

S-box S7

(x_{2}, x_{3}, x_{4}, x_{5})

x_{1} x_{6} 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 0 4 11 2 14 15 0 8 13 3 12 9 7 5 10 6 1
0 1 13 0 11 7 4 9 1 10 14 3 5 12 2 15 8 6
1 0 1 11 4 13 12 3 7 14 10 15 6 8 0 5 9 2
1 1 6 11 13 8 1 4 10 7 9 5 0 15 14 2 3 12

S-box S8

(x_{2}, x_{3}, x_{4}, x_{5})

x_{1} x_{6} 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 0 13 2 8 4 6 15 11 1 10 9 3 14 5 0 12 7
0 1 1 15 13 8 10 3 7 4 12 5 6 11 0 14 9 2
1 0 7 11 4 1 9 12 14 2 0 6 10 13 15 3 5 8
1 1 2 1 14 7 4 10 8 13 15 12 9 0 3 5 6 11

Vlastnosti DES

Cílem počáteční permutace IP je provést rozprostření vlivu bitů z jedněch bajtů otevřeného textu M do ostatních. Permutace IP^{−1} je zde proto, aby se v dešifrovacím procesu napravil účinek IP. Kryptograficky je tato permutace nevýznamná a v rozborech je zanedbáváná. Skutečně, při útoku se znalostí otevřeného textu M, tj. při znalosti odpovídajících si dvojic M otevřeného textu a C šifrového textu, si vliv permutace IP na otevřený i šifrový text snadno eliminujeme. Uvažujeme-li IP^{−1}(M) a IP (C), je to totéž, jako by schéma tyto permutace vůbec neobsahovalo.

Také závěrečná výměna slov L a R je zde jen proto, aby dešifrovací proces byl shodný se šifrovacím, tj. pro možnost zahájení rekonstrukce předchozích dvojic (L, R) z následujících.

Základem schématu je transformace f, která vytváří tzv. substitučně-permutační síť. V podstatě se skládá ze substituce (S-boxy) a permutace P a zároveň zajišťuje vliv klíče na proces zpracování otevřeného textu. Klíč je na proměnné R načítán v modulu 2 jako heslo na otevřený text u Vernamovy šifry, permutace P nám připomíná historické transpoziční systémy a S-boxy substituční systémy. DES je pak jejich součinová šifra.

DES jako celek je substituční systémem, pracujícím se slovy délky 64 bitů. Je to tedy kódová kniha, která má 2^{64} kódových výrazů, neboť to je počet všech možných otevřených textů. Kódové výrazy se nevyhledávají, ale na základě znalosti klíče se vypočítávají. Ten, kdo nezná klíč, by měl být postaven před neřešitelnou úlohu ţdekódování�. Cílem algoritmu je, aby v uvedené kódové knize neexistovala jiná skrytá souvislost mezi klíčem K, otevřeným textem M a šifrovým textem C, která by byla využitelná k luštění.

Jednou z vlastností DESu, která se rovněž statisticky testovala, je vliv změny jednoho bitu v otevřeném textu M (resp. v klíči K), aby pravděpodobnost změny každého bitu šifrového textu C byla asi 50%. Tímto bude mj. zaručeno, že šifrové výrazy odpovídající dvěma málo se lišícím otevřeným textů budou naprosto odlišné. Podobně to je i s požadavkem vlivu klíče na šifrový text.

Dále se požadovalo, aby neexistovala žádná korelace mezi otevřeným textem M a šifrovým textem C a mezi šifrovým textem C a klíčem K. Tyto vlastnosti byly statisticky potvrzeny a testovány. Výběrové statistické testy pak mohou potvrdit jen některé vlastnosti, ale nemohou vyloučit nekonečně mnoho dalších. To se týká například vlastnosti komolementárnosti, kterou budeme diskutovat dále. Jak na ni máme přijít statistickými testy, když nevíme, že vůbec existuje?

Dalšími požadovanými vlastnostmi jsou konfúze a difúze. Jedná se o to, aby měl každý bit klíče K a otevřeného textu M vliv na každý bit šifrového textu C a aby tento vliv byl velmi komplikovaný. Na složitost zde pak mají největší vliv S-boxy. Každý výstupní bit S-boxu je nelineární funkcí všech vstupních bitů (při vyjádření operacemi ⨁ a ∧). V případě, že by S-boxy realizovaly lineární funkci, celé schéma by realizovalo pouze lineární funkci. Potom by ovšem všech 64 bitů šifrového textu C bylo jen různými lineárními kombinacemi bitů otevřeného textu M a klíče K. Ale takovéto schéma bychom mohli okamžitě rozluštit řešením soustavy lineárních rovnic. Nelineárním vlastnostem se při studiu DES věnovala velká pozornost, neboť zajišťují požadovanou konfúzi. Bohužel, kritéria návrhu S-boxů zůstávají doposud tajná a přitom právě zde bylo nalezeno mnoho slabin.

Režimy činnosti DES

U DES byly stanoveny 4 základní módy činnosti, které byly odvozeny od různých potřeb. Základem je vlastní blokový algoritmus, tj. zobrazení E_{K} : X → X, kde X = {0, 1}{1, 2, …, 64} je množina všech 64-bitových bloků. Tento algoritmus je zároveň prvním módem.

1. ECB – Elektronická kódová kniha, píšeme C = E_{K}(M), kde M je otevřený text a C je šifrový text. Jedná se skutečně o kódovou knihu, neboť při opakovaných blocích otevřeného textu M jsou šifrové zprávy C stejné. Proto by bylo možné při šifrování zpráv tímto módem z operativních informací domýšlet část zašifrovaného obsahu bez nutnosti jejich luštění. Formalizované části zpráv by bylo možné opakovat v zašifrovaném tvaru (platební příkazy, standardní hlášení). Proto se tento mód nepoužívá k šifrování zpráv, ale jen k šifrování klíčů.

2. CBC – Zřetězení šifrového textu, symbolicky zapsáno jako

C_{n} = E_{K}(M_{n} ⊕ C_{n−1}),  (8.3)

kde (M_{n})_{n} je systém bloků otevřeného textu. Tento mód využívá výstup z jednoho kroku šifrování k modeifikaci nového vstupu, takže každý blok C_{n} šifrového textu je závislý nejen na právě šifrovaném bloku M_{n} otevřeného textu, ale i na všech předchozích blocích otevřeného textu a šifrového textu.

3. CFB – Zpětná vazba ze šifrového textu, píšeme

C_{n} = M_{n} ⊕ E_{K}(I_{n}),  (8.4)

kde I_{n} je vstupní registr posunutý o k bitů doleva a doplněný zprava k bity C_{n−1}. Přitom M_{n} je proud k−bitových znaků otevřeného textu. Je to mód vhodný tam, kde se data zpracovávají po znacích nebo po částech menších než 64 bitů. Zpětná vazba je vedena ze šifrového textu, ale jen v délce k bitů, přičemž u výstupu z blokového algoritmu je využíváno také jen k bitů. Je to systém podobný proudové šifře, avšak zachovávající vlastnost závislosti šifrového textu na předchozím otevřeném textu a šifrovém textu.

4. CFB – Zpětná vazba z výstupu, symbolicky zapsáno jako

H_{n} = E_{K}(J_{n}),  C_{n} = M_{n} ⊕ H_{n},  (8.5)

kde J_{n} je vstupní registr posunutý o k bitů doleva a doplněný zprava k bity H_{n−1}, M_{n} je proud k-bitových znaků otevřeného textu a H_{n} je vytvořený proud hesla. Tento mód pracuje podobně jako Vernamova šifra, pouze zdroj hesla není náhodný. Mód byl navržen pro potřeby, kdy je nežádoucí, aby se chyby vzniklé na komunikačním kanálu rozšiřovaly působením šifrového algoritmu do otevřeného textu. Jde například o přenosy dat s vysokou rychlostí a redundantností (kódovaná řeč, videosignál, satelitní spoje aj.).

Poznamenejme, že u módů CBC, CBF a OFB je nutné ţvstupní registr� nejprve na začátku naplnit nějakou hodnotou. Ta se nazývá inicializační vektor a odesílá se většinou na začátku zprávy.

8.3 Kritika šifrového standardu

Příliš krátký klíč

Prvními velkými kritiky návrhu DES se stali Diffie a Hellman ze Stanfordské univerzity. Ve svém dopise NBS nejvíce kritizovali malý objem klíče – 56 bitů. Poukazovali na to, že nehledě na jiný možný útok k rozbití DES postačí pouhé zkoušení možných klíčů. To může provádět kdokoli, kdykoli a se zaručeným úspěchem. Dokazovali, že to bylo možné i s tehdejší technologií (1975). Uvažovali o sestrojení speciálního stroje, který by pro danou dvojici otevřený text M a šifrový klíč C hledal použitý klíč vyzkoušením všech jeho možností. V době kritiky, tj. v říjnu 1975, odhadovali, že by s tímto strojem vyluštili za jeden den jednu takovou úlohu za cenu 10 000 $. Speciální stroj by potřeboval vyzkoušet 2^{56} tj. cca. 10^{17} klíčů za jeden den, což je přibližně 10^{12} klíčů za sekundu. Při ceně 10 $ za čip by tento stroj stál 20 000 000 $ (10 000 000 $ na čipy a zbytek na ostatní náklady). Při úplném odepsání stroje za 5 let by tak denní provoz stál 10 000 $. Ve skutečnosti se s padesátiprocentní pravděpodobností narazí na správný klíč už po vyzkoušení poloviny klíčů. To by hledání klíče dvakrát zrychlilo a tím i o polovinu snížilo náklady. Dále argumentovali tím, že během 5 let se cena technologie sníží v průměru 10-krát, a proto by za 10 let tento stroj stál pouze 200 000 $. Přitom si v odhadu nedělali nárok na přesnost v rozmezí jednoho řádu! Doporučovali rozšířit klíč na 128 nebo 256 bitů nebo šifrovat víckrát za sebou s použitím nezávislých klíčů, tedy šifrový text

C = E_{K_{1}}(E_{K_{2}}(… E_{K_{m}}(M) …)).

Pracovní konference NBS

NBS reagoval na jejich argumenty svoláním pracovní konference, která se konala 30.-31. srpna 1976 a byla zaměřena na to, zda předpovědi a tvrzení Diffieho a Hellmana jsou realistické. Závěr z konference byl, že tehdejší technologií by jejich stroj nebylo možné nebylo možné sestrojit, a pokud se ho sestrojit podaří, nebude to dříve než po roce 1990 (a to asi za 72 000 000 $). Proti zvětšení klíče bylo argumentováno tím, že by to vedlo k prodražení čipů, horším podmínkám vývozu a že to není nezbytné ani pro zamýšlené aplikace, ani pro uvažovanou životnost schématu (10-15 let).

Diffie a Hellman na to odpověděli článkem ţExhaustive Cryptoanalysis of the NBS Data Encryption Standard� (1977), v němž vyčerpávajícím způsobem a podloženými argumenty dokazovali, že jejich odhady jsou správné (dnes víme, že měli pravdu). Mezitím i interní studie IBM odhadla, že by takový stroj mohl být sestrojen do roku 1981 a za cenu 200 000 000 $, tedy v rámci jejich tolerance.

Komplementárnost a pracovní bloky

Protože Diffie, Hellman a dalších pět jejich kolegů nesouhlasili s tím, že IBM a NSA utajují výsledky svého zkoumání bezpečnosti DES a návrhová kritéria, zorganizovali během srpna 1976 vlastní krátké studiem DES ţResults of an initial attempt to cryptoanalyze the NBS Data Encryption Standard� (1976). Z něho vyplynuly další závažné slabosti DES: vlastnost komplementárnosti, určité pravidelnosti v S-boxech a jejich dostatečná nelinearita. Poukazovali na to, že veřejný standard by měl mít i veřejná návrhová kritéria. V opačném případě to budí nedůvěru. Těm, kdo návrhová kritéria znají, umožňuje využít jejich slabosti k luštění, a jsou tedy proti ostatním zvýhodněni.

Mohlo by jít buď o osoby, které se k těmto tajným informacím dostanou neoprávněně (např. cizí tajné služby), nebo o samotné ochránce (IBM, NSA). To by u veřejného standardu nemělo být. Účastníci studia se domnívali, že NSA si ve skutečnosti nepřeje silný standard, aby jej mohla snadněji luštit. Nesouhlasili s tím, že by DES měl být odolný jen proti ţluštění se znalostí otevřeného textu�, což NBS do požadvků dal, ale i proti ţluštění s možností volby otevřeného textu�, což původně požadováno nebylo.

Druhá konference NBS

Nato NBS zorganizoval pracovní setkání matematiků v září 1976 k analýze kvality DES a možnosti, že by mohl obsahovat ţtrojského koně� (ţReport of the workshop on cryptography on support of computer security�).

Přestože jiní účastníci na různé nedostatky také upozorňovali, fakticky nabyla předložena žádná konkrétní metoda na jejich přímé využití. Představitel IBM na konferenci k problému ţtrojského koně� dokonce prohlásil: ţMusíte nám důvěřovat, my všichni jsme dobří skauti�. Také NBS a NSA prohlásily, že neznají žádné metody, jak využít objevené kvazilinearity.

Bezprostředně po skončení konferencí se NBS rozhodl ponechat DES beze změn. Toto rozhodnutí způsobil zejména tlak průmyslu, který už potřeboval konečný verdikt, aby mohl vyrábět čipy. Změny v DES by tento proces nejméně o rok oddálily. Aféra kolem utajovaní však zanechala na NSA nesmazatelný stín podezření. Zvláště když vyšetřovací komise Senátu USA potvrdila, že NSA přesvědčila IBM o vhodnosti redukce délky klíče. Původně totiž IBM pro své potřeby používala 128-bitový klíč.

V roce 1978 prohlásil Davis na podporu DES následující:

ţ Každý, kdo si zakoupí kryptografické zařízení pracující na základě DES, může být ujištěn o specifické úrovni bezpečnosti dat: totiž je potřeba použít 2^{55} pokusů a metodu prověření všech možností, aby bylo možno získat klíč pro použitý šifrovací algoritmus.�

Komplementárnost

Objevená vlastnost komplementárnosti spočívá v tom, že ze vztahu

C = E_{K}(M) plyne non C = non E_{non K}(non M),  (8.6)

kde non označuje negaci bit po bitu. To je pravidelnost, která by se v takovémto případě rozhodně neměla objevit. Autoři rozboru její odhalení považovali diplomaticky řečeno za velmi znepokojující. Tvůrcům schématu tato vlastnost pravděpodobně unikla. Je umožněna tím, že negace klíče i vstupu se při jejich součtu mod 2 ve funkci f zruší:

f(R, K) = f(non R, non K).  (8.7)

To se dá pak využít i k luštění v případě, že hledáme klíč K a máme k dispozici dvojice (M, C_{1}) a (non M, C_{2}), které vznikly při šifrování tímto neznámým klíčem.

Proveďme zašifrování E_{K}(M). Není-li tento výraz roven C_{1}, vylučujeme klíč K. Kdyby byl při šifrování non M použít klíč non K, obdrželi bychom

C_{2} = E_{non K}(non M) = non E_{K}(M).  (8.8)

Nejsou-li si oba krajní výrazy, které máme k dispozici, rovny, můžeme vyloučit i klíč non K. Tím jsme nahradili jedno šifrování (klíčem non K) za pohé porovnávání výrazů, což je proti šifrování časově zanedbatelné. Prostor klíčů je tedy de facto poloviční a hledání 2-krát rychlejší.

Vlastnost komplementarity by navíc mohla ve špatně navržených protokolech způsobit i nežádoucí odhalení chráněných informací. Při všech možných aplikacích na ni musí být dáván pozor. Je smutné, že mnozí kryptologové (zejména z NBS) tuto vlastnost nepovažují za podstatnou. Ostatně v oficiálním popisu DES vypracovaném NBS se také tvrdí že klíč je 64-bitový. Rozhodně nejde o chybu, ale o vytvoření dojmu, že tomu tak je. S ţdobrými skauty� tedy není asi všechno v pořádku.

Nevhodný návrh S-boxů

Kromě tajných návrhových kritérií, která mohla obsahovat další skryté vady, v studiu bylo poukázáno na velkou korelovanost a nedostatečnou nelinearitu výstupních bitů S-boxů. Například box S4 má pětasedmdesátiprocentní nadbytečnost.

S-box S4  (x_{1}, x_{6})
(x_{2}, x_{3}, x_{4}, x_{5}) 0 0 0 1 1 0 1 1
0 0 0 0 0 1 1 1 1 1 0 1 1 0 1 0 0 0 1 1
0 0 0 1 1 1 0 1 1 0 0 0 0 1 1 0 1 1 1 1
0 0 1 0 1 1 1 0 1 0 1 1 1 0 0 1 0 0 0 0
0 0 1 1 0 0 1 1 0 1 0 1 0 0 0 0 0 1 1 0
0 1 0 0 0 0 0 0 0 1 1 0 1 1 0 0 1 0 1 0
0 1 0 1 0 1 1 0 1 1 1 1 1 0 1 1 0 0 0 0
0 1 1 0 1 0 0 1 0 0 0 0 0 1 1 1 1 1 0 1
0 1 1 1 1 0 1 0 0 0 1 1 1 1 0 1 1 0 0 0
1 0 0 0 0 0 0 1 0 1 0 0 1 1 1 1 1 0 0 1
1 0 0 1 0 0 1 0 0 1 1 1 0 0 0 1 0 1 0 0
1 0 1 0 1 0 0 0 0 0 1 0 0 0 1 1 0 1 0 1
1 0 0 1 0 1 0 1 1 1 0 0 1 1 1 0 1 0 1 1
1 1 0 0 1 0 1 1 0 0 0 1 0 1 0 1 1 1 0 0
1 1 0 1 1 1 0 0 1 0 1 0 0 0 1 0 0 1 1 1
1 1 1 0 0 1 0 0 1 1 1 0 1 0 0 0 0 0 1 0
1 1 1 1 1 1 1 1 1 0 0 1 0 1 0 1 1 1 1 0

Jeho 4 menší boxy 4×4 (při hodnotách krajních bitů x_{1}x_{6} = 00, 01, 10, 11) jsou snadno odvoditelné pouze od prvního z nich (00). Platí dokonce vztah

S4(x ⊕ 000001) = (12)(34)S4(x) ⊕ (x_{6}, non x_{6}, non x_{6}, x_{6}),  (8.9)

kde x = (x_{1}, x_{2}, x_{3}, x_{4}, x_{5}, x_{6}) je vstup a symbolický zápis (1,2) znamená výměnu 1. a 2. bitu. Označíme-li y = (y_{1}, y_{2}, y_{3}, y_{4}) jako výstup, vyplývá odud, že součet (y_{1} ⊕ y_{2}) je na x_{6} závislý pouze lineárně a (y_{1} ⊕ y_{2} ⊕ y_{3} ⊕ y_{4}) na něm nezávisí vůbec. Taková pravděpodobnost je nežádoucí.

Slabé a poloslabé klíče

Hodně pozornosti bylo věnováno studiu klíčů. Budou-li registry C a D na počátku obsahovat konstantní bity (buď nuly nebo jedničky), pak je operace SHL a PC2 je nijak nezmění a klíče K_{i} si budou rovny. Tím nastane i nežádoucí rovnost E_{K} = D_{K}. Celkem existují 4 tyto klíče (podle toho, zda registry C nebo D obsahují nuly nebo jedničky). Podobnou vlastnost má 6 dvojic tzv. poloslabých klíčů K_{1} a K_{2}, pro něž platí

E_{K_{1}}E_{K_{2}} = Id neboli E_{K_{1}} = D_{K_{2}}.

Ty vznikají tak, že jejich klíče jsou shodné, ale v opačném pořadí jejich použití. Tím vzniká efekt, že při šifrování druhým klíčem probíhá postupné dešifrování klíčem prvním. To nastane např. u této dvojice klíčů

(01F E01F E01F E01F E, F E01F E01F E01F E01).

Později bylo identifikováno mnoho dalších tříd různě ţslabých� klíčů.

Hellmanův časopaměťový útok

Východisko k luštění lz nalézt i v efektivním využití času a paměti. Vychází se ze znalosti konkrétního otevřeného textu, který se velmi často objevuje ve zprávách, např. osm za sebou jdoucích mezer. Při zachycení jemu odpovídajícímu šifrového textu můžeme klíč luštit vyzkoušením všech jeho možností (čas t=256 šifrování, paměť m=1 slovo) nebo tím, že si předem připravíme tabulku všech možných dvojic (klíč, šifrový text) (čas t=1, paměť m=256 slov) a porovnáním šifrového textu. V obou případech je celková spotřeba ţčasopaměti� t·m=256 – spotřebu času lze přelít do paměti a naopak. Hellman v roce 1980 přišel na to, jak část tabulky vypočítat předem a ve velmi zhuštěné podobě ji uložit do paměti. Luštění potom probíhá částečně jako šifrování a částečně jako porovnávání. Při optimalizaci požadavků na čas, paměť a cenu dospěl k návrhu, který zahrnoval 10 000 DES čipů, paměť 1000 GB a přípravné výpočty tabulek trvající 1 až 2 roky. To vše v ceně asi 3,6 miliónu $. S těmito prostředky byl schopen určit až 1000 klíčů denně (v důsledku paralelismu) s průměrným čekáním na řešení 1 den. Při plné amortizaci zařízení do 5 let by cena za vyluštění jednoho klíče byla 1-100 $. Nevýhoda Hellmanova útoku spočívá v tom, že vše se počítá pro konkrétní otevřený text. Pro jiný otevřený text musíme všechny předběžné výpočty provést znovu.

Další zajímavé vlastnosti DES

Při studiu DES do r. 1990 bylo popsáno několik dalších vlastností DES. Zmiňme se o odhalení kratší periody v jednom z modů činnosti DES. Při vazbě k = 64 u OFB je průměrná délka cyklu produkovaného hesla přibližně 2^{63} bloků, avšak při jiné délce k je pouze kolem 2^{31} bloků! Toto množství hesla při rychlosti šifrování 2^{16} bitů za sekundu (např. pro digitalizovanou řeč) je vyčerpáno asi za 18 hodin! Poté by došlo k dvojímu použití hesla, což je pro luštitele známá a jednoduchá úloha. Musí být proto používaná pouze plná vazba k = 64, při které je průměrná délka periody hesla dostatečná.

Mnohonásobné použití DES

K odstranění nedostatku malého objemu klíče bylo doporučováno několikanásobné šifrování DES. Při dvojnásobném šifrování algoritmem DES s použitím dvou různých klíčů, tj.

C = E_{K_{2}}(E_{K_{1}}(M))  (8.10)

by klíč vzrostl na 112 bitů, což se zdá být dostatečné. Avšak byla nalezena technika, která by de facto redukovala klíč na pouhých 57 bitů. Spočívá v útoku se znalostí otevřeného textu. Známý otevřený text je zašifrován všemi možnými klíči (vzniká množina E_{K_{1}}(M) o 2^{56} prvcích) a známý šifrový text je dešifrován všemi možnými klíči (vzniká množina D_{K_{2}}(C) o 2^{56} prvcích). Průnik obou vzniklých množin obsahuje pravé řešení. Kromě toho vzniká asi 2^{48} falešných párů klíčů. Ty lze snadno vyloučit kontrolním zašifrováním na dalším známém páru (M, C). Tato metoda se nazývá ţmeet in the middle�. IBM doporučení Diffieho a Hellmana přijala, vylepšila a k šifrování významných informací (jako jsou například klíče nižších úrovní) používá dvou klíčů následným způsobem

C = E_{K_{1}}(D_{K_{2}}(E_{K_{1}}(M))).  (8.11)

Tato metoda trojnásobného šifrování (s dvojnásobným klíčem) má výhodu v kompatibilitě se systémy s jedním klíčem (původního šifrování se dosáhne volbou K_{1} = K_{2}).

První vážný analytický útok

Obránci DES, kteří argumentovali tím, že doposud nebyl předložen žádný vážnější útok proti DES (a přehlíželi tak výše uvedené skutečnosti), mají od 11.8. 1990 ztíženou argumentaci. Tento den předložili Eli Biham a Adi Shamir z Weizmanova institutu v Izraeli metodu luštění, nazývanou diferenciální kryptoanalýza (DK). Je analytickým útokem proti DES. Snadno s ní rozbili osmikrokovou DES, japonskou blokovou šifru FEAL a předchůdce DES LUCIFERa. U patnáctikrokové verze DES s ní dosáhli lepších výsledků, než je zkoušení všech možných klíčů. Po dvou letech pak metodu zdokonalili i pro plně šestnáctikrokovou verzi DES a tím vyvrátili tvrzení Davise.

Podstata diferenciální kryptografie spočívá ve využití nevhodných S-boxů a slabého zpracování klíče. Vliv klíče K_{i} se dá totiž určitým způsobem ţvyblokovat�. Uvažujme v jednom kroku DES při výpočtu f(R, K) zpracování dvou vstupů: R_{1} a R_{2}. První úvaha spočívá v tom, že diference R_{1} a R_{2} (=R_{1} ⊕ R_{2}) zůstává nezměněna, když R_{1} a R_{2} projdou rozšířením (expanzí) E a operací ⊕ s klíčem K. Vliv klíče se v této diferenci eliminuje:

(E(R_{1}) ⊕ K) ⊕ (E(R_{2}) ⊕ K) = E(R_{1}) ⊕ E(R_{2}) = E(R_{1} ⊕ R_{2})!  (8.12)

Druhá myšlenka spočívá v tom, jak obejít nelineární S-boxy. Pro některé diference vstupů jsou mnohé diference výstupů z S-boxů málo pravděpodobné a jiné velmi pravděpodobné. Výstupní diference se ovšem v dalším kroku schématu stávají vstupními diferencemi! Permutac P nám v tom vůbec nevadí. Tímto postupným zřetězením vstupně-výstupních diferencí dostáváme nakonec pravděpodobnostní vztah mezi diferencemi otevřeného textu a diferencemi šifrového textu. Nalezneme-li páry (M, C), kde M je otevřený text, C je šifrový text, které vyhovují našemu modelu, máme o průběhu šifrování už dost informací. Určení klíčů K_{1}6 až K_{1} je pak jen složitou technickou záležitostí. S každým krokem se ovšem příslušné pravděpodobnosti násobí, takže čím více kroků má schéma, tím je účinnost metody horší. Například na rozbití osmikrokové verze DES stačily pouze 2 minuty, na šestnáctikrokovou verzi je to již 2^{37} operací. Dosud je také k tomu potřeba velké množství odpovídajících si dvojic (M, C). Na druhé straně se metoda neustále zdokonaluje, takže nelze odhadnout, kde se zastaví její účinnost.

Na obranu proti ní v dnešní podobě zatím postačuje trojnásobné šifrování. Avšak důvěra v DES jako celek dostala vážnou trhlinu. Záplata v podobě mnohonásobného šifrování může brzy povolit. Kromě toho existují oblasti, u nichž přepracování z jednoduchého šifrování vyjde stejně jako zavedení jiného kryptosystému (platební karta, klíčová hospodářství, …).

Další analytické útoky

Ve dnech 23.-27.května 1993 se v Lofthusu, malé norské vesničce, konala další ze série konferencí Mezinárodní asociace pro kryptologický výzkum - EURO-CRYPT’93. K DES se vztahovalo několik příspěvků. Uveďme dva nejdůležitější.

První z příspěvků přednesl Eli Biham, jeden ze známých izraelských ţrozbíječů� DES. Svůj příspěvek s názvem ţNové typy kryptoanalytických útoků na bázi příbuzných klíčů� uvedl předvedením čersvého výtisku knihy o diferenciální kryptoanalýze DES; napsal ji společně s Adi Shamirem. Biham si všiml, že některé rodiny kryptoschémat využívají poměrně jednoduché tvorby rundovských klíčů (u DES viz K_{i}), čímž mezi nimi vznikají zřejmé vztahy, a ty pak využil ke dvěma útokům.

Prvním útokem ţs možností volby otevřeného textu� dosáhl novou redukci složitosti při luštění poměrně široké třídy kryptoschémat a předvedl rychlejší variantu tohoto útoku s využitím vlastnosti komplementárnosti.

Druhý útok je nový a autor ho pojmenoval ţútok s možností volby vztahů v klíči s nízkou složitostí�. Připomeňme rozlišení typů útoků na šifrovací systém

• Luštění pouze ze šifrového textu. Kryptoanalytik má k dispozici libovolné množství kryptogramů, neví ovšem, jaký otevřený text byl zašifrován.

• Luštění při znalosti otevřeného a šifrovího textu. Kryptoanalytik má k dispozici libovolné množství dvojic otevřeného textu a jemu příslušného kryptogramu.

• Luštění s možností volby. Kryptoanalytik má možnost vnutit šifrovacímu systému svůj otevřený text a obdržet od něj odpovídající kryptogram.

Jaký útok kryptoanalytik zvolí, záleží vždy na konkrétní úloze, před kterou je postaven. V tomto typu útoku bylo využito toho, že určité jednoduché vztahy mezi klíči mají za následek určité jednoduché vztahy mezi otevřenými a šifrovými texty. Bihamovy útoky jsou aplikovatelné na rodinu schémat LOKI a LUCIFERA.

Mohly by být aplikovatelné i na DES, kdyby posuny registrů C a D v algoritmu přípravy klíčů K_{i} byly stejné . . .. Jak křehká je bezpečnost DES! Ukazuje se, že nové výsledky útoků nepadají z nebe, ale jsou pouze výsledkem nového soustředěného úsilí kryptoanalytiků. Bihamův útok je totiž zlepšením, rozšířením a zobecněním Knudsenova útoku na australský algoritmus LOKI91 z roku 1992, ale vznikl nezávisle na něm.

Druhý příspěvek byl ještě zajímavější. Přednesl ho Japonec M. Matsui a byl nazván ţLineární kryptoanalytická metoda pro šifru DES�. Nová metoda kryptoanalýzy je útokem ţse znalostí otevřeného textu�. Její podstata spočívá v objevu lineárních vztahů v kryptosystému DES (s využitelnou pravděpodobností). To se mu podařilo díky slabým nelinearitám S-boxů.

Následující výsledky kryptoanalýzy byly získány na pracovní stanici Hewlett-Packard HP 9750 (PA-RISC/66MHz) s programy vytvořenými v jazyku C.

1. Výsledky experimentů při útoku se znalostí otevřeného textu:

• osmikroková DES je rozluštitelná s 2^{21} otevřenými texty za 40 sekund,

• dvanáctikroková DES je rozluštitelná s 2^{33} otevřenými texty za 50 hodin,

• šestnáctikroková DES je rozluštitelná s 2^{47} známými otevřenými texty rychleji, než je vyčepávající hledání 56-bitového klíče.

V některých případech (není-li otevřený text náhodný) lze klíč luštit přímo ze šifrového textu. To je novinka, která přímo ohromuje. Přitom Matsuiho metoda luštění je myšlenkovitě přímočará.

2. Zde jsou výsledky experimentů pro luštění pouze ze šifrového textu:

• je-li otevřený text tvořen anglickými texty ve znacích ASCII, osmikroková DES je rozluštitelná s 2^{29} šifrovými texty.

• jsou-li otevřené texty náhodné znaky ASCII, je potřeba 2^{37} šifrových textů,

• jsou-li otevřené texty tvořeny zcela náhodnými znaky, existují situace, kdy je Matsuiho metoda rychlejší než vyzkoušení všech hodnot klíče.

Z příspěvku je zřejmé, že poslední slovo ve využití této myšlenky ještě nepadlo. Dává zcela konkrétní metodu pro luštění algoritmu DES, ale má zejména význam vědecko-metodologický. Příspěvek obsahuje mnoho nových myšlenek, které budou studovány a použity jak pro kryptoanalýzu, tak pro tvorbu nových kryptoschémat. Je téměř neuvěřitelné, že celý útok je založen na tom, že ţS-box S5 dává s velkou pravděpodobností lineární vztah mezi některými vstupy a některými výstupy�. Je to další útok se znalostí otevřeného textu a první útok se znalostí šifrového textu na DES.

Původní varování Diffieho a Hellmana

Vraťme se nyní k původním varováním Diffieho a Hellmana z roku 1976. Jak víme, brali v úvahu 1 milión čipů provádějících asi 800 000 zkoušek klíčů za sekundu. Z konference NBS vyplynul závěr, že takový čip nebude možno vyrobit dříve než v roce 1990. Podívejme se na následující tabulku

Rok  Forma  Počet zkoušek  Zdroj  Uvedená
ohlášení  DES klíčů/s  informace  cena
1984  vyrobeno  2^{18} (256 k)  Proc. CRYPTO84
1987  vyvinuto  2^{19} (512 k)  Proceedings of
1987  možné vyrobit  2^{20} (1 M)  EUROCRYPT 87  40 $
1991  možné vyrobit  2^{22} (4 M)  DES Watch
1992  možné vyrobit  2^{24} (16 M)  Proc. CRYPTO92  300 $
1995  možné vyrobit  2^{26} (64 M)  odhad
1999  možné vyrobit  2^{28} (256 M)  odhad

Z tabulky je vidět, že konference vývoj mírně podcenila a požadovaných parametrů bylo dosaženo už v roce 1987! Dnes je možno za 300 $ pořídit čip s rychlostí zkoušek 16 M klíčů/s. Pokud chceme v průměru luštit jeden klíč za den, potřebujeme 2^{55}/(86400 · 2^{24}) = 24855 čipů. Za ně zaplatíme 24855 · 300 = 7 456 500 $. Uvažujeme-li o stejné ceně za běžnou technologii v daném roce, zaplatíme za totéž v roce 1995 pouze 1 864 125 $ a v roce 1999 jen 466 031 $. Cena za jeden vyluštěný klíč by tak byla v roce 1992 asi 4000 $, v roce 1995 potom jen 1000 $ a v roce 1999 pouze 250 $. To už je báječná investice pro vysoce kvalifikované zloděje!!! Uvědomme si, že za 5 let projdou pod ochranou DES v severoamerických bankách finanční transakce v hodnotě

1826 · 400 · 10^{9} ≈ 700 000 000 000 000 $..

V tomto světle vypadá argumentace lidí od NBS, že ţnejutajovanější věci mohou být vyzrazeny za mnohem méně než desítky miliónů dolarů, nutných k rozbití DES … � jako omezená a účelová. Stejně účelové je i chování některých bank, které prostě uvedenou situaci neberou na vědomí (pokud o ní vůbec vědí). Klasické argumenty jsou: ţV praxi jsou tyto ceny za hardware dostatečně odstrašující, další výdaje jsou nutné na zaplacení expertů – kryptoanalytiků, úroveň znalostí o bankovních systémech je nízká, hlavní hrozba je spíše uvnitř banky než drahý a nejistý matematický útok, snadnější je klíče ukrást atd.� Kde budou tyto argumenty banky, až jednoho dne pan prezident banky zjistí, že neznámý poberta odeslal aktiva banky někam na druhý konec světa? Tvářit se, že hrozba neexistuje, je pštrosí politika. A tu nelze dělat v oblastech týkajících se bezpečnosti. Rozbití DES je rok od roku atraktivnější a hrozba se stává hrozivější. Útočníkem nemusí být ţobyčejní� zloději, ale třeba některá z tajných služeb či mafií.

Dnes by Hellmanův časopaměťový útok mohl být proveden s 1024 DES čipy, 32 GB paměti a pár měsíci předběžných výpočtů. To vše v ceně do 3,6 miliónu $ a s dobou čekání na řešení jeden den. I to je dost nepříjemné.

Softwarová hrozba

Softwarový útok je snadno a všem dostupný. Softwarová verze DES běží na pracovních stanicích dostatečně rychle, aby hravě rozluštila nekvalitní hesla (zašifrovaná v DES). Ukazuje se, že na novějších počítačích může software nahradit průměrně rychlé čipy DES. Současný experiment využívající nečinnost v síti 40 pracovních stanic dosáhl 2^{34} zkoušek klíčů DES během jednoho dne. Uvažujeme-li, že heslo obsahuje pouze malá písmena, je to 26^{8} možností. V daném experimentu by nám k úspěchu stačilo zkoušet klíč po víkendech necelý měsíc.

Představíme-li si síť o 512 nejmodernějších pracovních stanicích, které pracují po dobu jednoho měsíce v mimopracovní době, pak jsou tyto stanice schopny provést

512(poč.)· (22 · 15 + 8 · 24)(hod.)· 3600(sec.)· 32000(klíčů/s)≈ 2^{45} zkoušek klíčů.

Pravý klíč bude tedy za tuto dobu nalezen s pravděpodobností 1:2000, tedy větší, než je pro činitele odpovědné za bezpečnost zdrávo.

Závěr

Velmi brzy budeme postaveni před kolaps dnešní bezpečnostní technologie postavené na bázi DES. Reálné luštění hrozí ze tří stran: sestrojením speciálního stroje na hledání klíčů, analytickým útokem a softwarovým útokem. Cena za jeden vyluštěný klíč bude v roce 1999 jen 250 $. Analytický útok s využitím diferenciální kryptoanalýzy a lineární kryptoanalytické metody pro DES se bude zdokonalovat. Možnosti softwarové hrozby porostou s rozšiřováním počítačových sítí. To vše si vynutí náhradu DES. Bude to velmi drahý a náročný proces. Do té doby tam, kde je to možné, bude nutné jednoduché šifrování DES nahradit za několikanásobné. Časem se bude muset vyměnit množství různých platebních a jiných karet pracujících pod DES. Pravděpodobně se změní i politika ţveřejnosti� šifrových schémat. Budou muset být zahájeny nové mezinárodní standardizační procesy. Vnitřní ochranu některých národních komerčních systémů bude vhodnější zabezpečit po vzoru švýcarských bank národními nebo firemními neveřejnými kryptoschématy. Jedinými možnostmi jak nahradit DES jsou algoritmus RSA a diskrétní mocnění. Rozhodně bychom se z vývoje DES měli poučit.

8.4 Použití NP-těžkých problémů v šifrovacích systémech

V současné době neexistuje rychlý (tj. pracující v polynomiální době) algoritmus pro žádný NP-těžký problém, a pokud NP≠P, takový algoritmus neexistuje. Je tedy přirozený nápad založit kryptosystém na NP-těžkém problému, aby rozbití šifrovacího systému bylo ekvivalentní nalezení rychlého algoritmu, který by řešil NP-těžký problém.

To je mj. základní idea pro DES. Uvažme následující výpočetní problém.

Algebraické rovnice nad Z_{2}

Vstup: Polynomy p_{1}, …, p_{k} v proměnných x_{1}, …, x_{n} nad Z_{2}.

Otázka: Mají polynomy společný nulový bod (x_{1}, ….x_{n}) v Z_{2}^{n}?

Například následující tři rovnice

x_{1}x_{4}x_{6} + x_{2}x_{4}x_{5} − 1 = 0
x_{1}x_{2} + x_{2}x_{3} + x_{3}x_{4} − 1 = 0
x_{1}x_{3} + x_{4}x_{5} + x_{1}x_{6} − 1 = 0

mají společné řešení (1, 0, 1, 1, 1, 1). Ačkoliv výše uvedený problém je lehký pro malá k a n, se zvětšováním těchto parametrů se obtížnost vyřešení neustále zvyšuje. Lze navíc dokázat, že platí

Věta 8.4.1 Problém rozhodnout, zda algebraický systém rovnic modulo 2 má řešení, je NP-těžký.

Výše uvedená věta byla použita při tvorbě šifrovacího systému LUCIFER navrženého IBM a popsaného H. Feistelem v roce 1973. Systém pracuje následovně. Bez újmy na obecnosti lze předpokládat, že délka zprávy M je 2n (pokud by byla větší, použijeme rozdělení do bloků délky 2n a na každý blok aplikujeme šifrovací proceduru). Zprávu M rozdělíme na dva stejné bloky délky n, tj. M = (M_{0}, M_{1}). Klíč K bude vektor k, který určuje podklíče k_{1}, k_{2}, …, k_{d−1} . Pro 2 ≤ i ≤ d, rekurzivně definujeme

M_{i} = M_{i−2} + f(k_{i−1} , M_{i−1}),  (8.13)

kde f je nějaká libovolná pevně zvolená nelineární transformace a počítáme modulo 2.

Závěrečný kryptogram C je určen vztahem

C = e(M, K) = (M_{d−1}, M_{d}).  (8.14)

Zprávu M lze získat z kryptogramu C opačným postupem – všechno, co musí příjemce zprávy provést, je obrácení pořadí 8.13. Tedy

M_{i−2} = M_{i} + f(k_{i−1} , M_{i−1}),  (8.15)

d ≥ i ≥ 2, až dospějeme k původní zprávě M = (M_{0}, M_{1}).

Za předpokladu, že příjemce zná tvar funkce f a hodnoty šifrovacích klíčů, je dešifrování kryptogramu právě tak těžké jako jeho zašifrování. Poznamenejme, že díky 8.15 funkce f nemusí být invertibilní.

V typické situaci, Mr. X může znát tvar funkce f, ale nesmí znát klíče. Zda je pak schopen získat klíče pomocí luštění s pomocí volby, závisí na tvaru f. Je-li f lineární transformace, je určení klíče výpočetně snadné. Avšak, v případě, že f je nelineární transformace, např.

f(x_{1}, …, x_{n}; y_{1}, …, y_{n}) = (p_{1}, …, p_{n}),

kde každé p_{i} je polynom v proměnných (x_{1}, …, x_{n}; y_{1}, …, y_{n}), pak určení klíče ze znalosti M a C se redukuje na problém vyřešení algebraických rovnic pro klíčové proměnné. Jak jsme viděli, to je NP-těžký problém.

Dosáhli jsme tedy našeho cíle: nalezení kryptosystému, který má lehký proces šifrování a dešifrování, ale který zároveň vynucuje po Mr. X, aby při hledání klíče pomocí luštění s pomocí volby řešil NP-těžký problém. Za předpokladu, že NP-těžké problémy jsou nezvládnutelné, je bezpečnost systému zajištěna.

Je zde však následující problém. Klasická teorie složitosti se téměř úplně zabývá s nejhorším možným chováním. Ačkoliv tedy určení klíče je těžký problém, nemáme jistotu, že neexistuje velký počet ţsnadných vstupů�.

152  Šifrový standard DES

Literatura

[1] J. Adámek: Stochastické procesy a teorie informace - úlohy. ČVUT, Praha 1989.

[2] J. L. Balcázar, J. Díaz, J. Gabarró: Structural Complexity I. Springer-Verlag, Heidelberg 1988.

[3] H. Beker and F. Piper: Cipher Systems. The Protection of Communication. Northwood, London 1982.

[4] A. Beutelspacher: Kryptologie. Vieweg, Braunschweig 1991.

[5] E. Biham and A. Shamir: Differential Cryptoanalasys of the Data Encryption Standard. Springer-Verlag, New York 1993.

[6] V. Klíma: Kódy, komprimace a šifrování. Chip 2/1993, str. 24-28.

[7] V. Klíma: Kritika šifrového standardu. Chip 5/1993 str. 52-58, Chip 6/1993, str. 50-55, 7/1994 str. 50-51.

[8] V. Klíma: Šifry a kryptéři. Chip 2/1994, str. 206-207.

[9] V. Klíma: Utajené komunikace. Chip 5/1994, Chip 6/1994, str. 184-188, 7/1994 str. 138-141 a 8/1994 str. 118-121.

[10] V. Klíma: Utajené komunikace. Chip 2/1995 str. 126-128, Chip 3/1995, str. 136-141, 4/1995 str. 136-138, Chip 5/1995 str. 166-168, Chip 6/1995, str. 174-175, 7/1995 str. 130-131, 8/1995 str. 142-143, 9/1995 str. 206-208, 10/1995 str. 226-228, 11/1995 str. 170-172 a 12/1995 str. 164-166.

[11] J. Kodl, V. Smejkal, T. Sokol: Smíme šifrovat. Chip 5/1995, str. 30-32.

[12] J. Kodl, V. Smejkal, T. Sokol: Šifry, státní zájmy a lidská práva. Chip 4/1995, str. 34-37.

[13] K. Kukura: Pretty Good Privacy. Elektronika 12/1995, str. 18-19.

[14] Š. Porubský a O. Grošek: Šifrovanie. Algoritmy, Metódy, Prax. Grada, Praha

154  LITERATURA

[15] B. Preneel, R. Govaerts and J. Vandewalle: Information Authentication: Hash Functions and Digital Signatures. preprint 1993.

[16] B. Preneel: Standardization of Cryptographic Techniques. preprint 1993.

[17] B. Schneier: Digitální podpisy. Bajt 11/93, str.79-82.

[18] National Bureau of Standards: Data Encryption Standard. U.S. Department of Commerce, FIPS pub. 46, December 1977.

[19] National Bureau of Standards: Data Encryption Standard. U.S. Department of Commerce, FIPS pub. 81, December 1977.

[20] D. Welsh: Codes and Cryptography. Oxford University Press, New York 1989.