O HESLECH TAJNÝCH ALGORITMECH A ŠIFROVÁNÍ ZPAMĚTI | ||
Článek představuje šifrování zpaměti především jako levný a snadno použitelný prostředek pro bezpečnější uložení, sdílení a předání hesel. V praxi může také zesílit ověření totožnosti či zkomplikovat tajný algoritmus. Jednou z možností ochrany objektů je použití hesel. Jeho výhody? Nepotřebujeme žádné speciální a drahé zařízení. Je-li seznam hesel v paměti počítače zašifrován jednosměrným šifrovacím algoritmem (algoritmus vybraný tak, aby pro něj neexistoval jednoduchý dešifrovací algoritmus), pak heslo může být uloženo na jediném a to nejbezpečnějším místě - v paměti člověka. A nevýhody? Uvedu jen některé:
Zkusili jste si někdy zvolit jako heslo náhodně sestavený řetězec znaků? Pokud ano, určitě jste si pro jeho vybavení v paměti našli nějaký algoritmus. V tomto směru není následující úryvek z jedné povídky Jamese Thurbera (Asociační metoda ...) zas až takovou nadsázkou: "Tak například jsem si kvůli zapamatování jednoho čísla představoval, že jsem důstojník ve válce s Mexikem (jistý poručík Chelsea), který poslal na pomoc Napoleonovi u Waterloo baseballovou devítku. Klíčové číslo bylo 4615, správně se mělo číst 3724. Prostě jsem odeslal 9 ze 46 k 15 chápete?". Výsledkem takového algoritmu je ovšem stále stejná hodnota. Už v knize [1] a také v [4], ale především v článcích J.A. Hasketta ([2] a [3]), jsou uvedeny příklady, ve kterých uživatel dokazuje svou totožnost znalostí tajného ověřovacího algoritmu (označme jej T), který zpaměti aplikuje na systémem předložené pseudonáhodně vybrané slovo (označme je x). Když se slovo x objeví jako výzva k zadání hesla na obrazovce, provede uživatel zpaměti jednoduchý algoritmus (v [1] a v [4] ještě aritmetickou transformaci), výsledek y = T(x) napíše na klávesnici a předá systému jako heslo platné právě v tomto okamžiku. Systém (pomocí ověřovacího programu) určí, jestli y je výstupní hodnotou algoritmu T při vstupní hodnotě x. Kromě/mimo x je možné využít i jiné smluvené údaje (například datum, hodinu, kdo má ten den svátek). Může být tajný algoritmus uložen jen na jediném místě - v paměti člověka? Obecně ne. Někdo ho mmusí vymyslet a někdo musí napsat a odladit odpovídající ověřovací program. To je dost příležitostí k prozrazení a není-li uživatel programátor, nemůže tuto činnost provádět jedna osoba. Ověřovací programy musí být uloženy v bezpečně chráněných souborech, ale k nim musí mít (už kvůli pojišťování) někdo přístup. Ověřovací program by ale mohl být před zápisem do souboru zašifrován heslem uživatele. V procesu ověření totožnosti by pak byl dešifrován pouze správně zadaným heslem uživatele a teprve potom proveden.
Pokud tajný algoritmus použijeme jako obranu proti odpozorování, měl by být snadno proveditelný zpaměti a přitom téměř neodhalitelný z dvojic hodnot x , y. Z [1, s. 287] vyplývá, že by
mělo být snadné takové algoritmy navrhnout. Putter a Wagner
v kritice Haskettova článku [5] pochybují, že jich je dostatečný
počet. A existuje vůbec nějaký? "Nevím" odpovídá Haskett sám sobě
v [3]. V následujících kapitolách vysvětlím, co to je šifrování zpaměti, jak se provádí a k čemu nám může být dobré. Šifrování hesel zpamětiPředstavme si, že neoprávněná osoba zjistí jen hodnotu y (jenom to, co se napsalo na klávesnici). Pak stačí najít "průměrný" algoritmus, který k heslu h a slovu x určí právě jedno slovo y a splňuje podmínku: pouze z hodnoty y nelze heslo h odvodit, ale při znalosti x je možné určit heslo h jednoznačně. Příkladem takového algoritmu je šifrování hesla h klíčem x na kryptogram y prováděné zpaměti. Nejjednodušší (a i tak dost složitý) postup šifrování zpaměti, který si umím představit, předpokládá: zapamatovat si náhodně vybrané heslo, vybavit si je znak po znaku, každý znak hesla zašifrovat odpovídajícím znakem klíče na znak kryptogramu a tento znak napsat (důležité je, že postupně vytvářený kryptogram si pamatovat nemusíme). Předpokládejme, že je dána konečná, minimálně dvouprvková množina M a na ní je definovaná komutativní operace sčítání, k níž existuje inverzní operace odčítání. To znamená, že pro libovolné prvky a z M , b z M (na jejich pořadí nezáleží) existuje v M právě jeden prvek c takový, že platí c = a + b; a pro libovolné prvky a z M, b z M existuje v M právě jeden prvek d takový, že platí b + d = a (tj. d = a - b). Příklad: (Vernamova šifra) Operace sčítání i odčítání je logická operace nonekvivalence definovaná na dvouprvkové množině.
Jestliže o h a x nelze předpokládat více, než že jsou prvky
množiny M, pak pouze z hodnoty y = h + x nemůžeme h odvodit.
Určíme-li totiž y - p postupně pro všechny prvky p z M, získáme
tak, jako rovnocenné kandidáty na h, všechny prvky M. Jestliže
však známe x, můžeme určit h jednoznačně výpočtem y - x. Pro libovolná slova a = a1a2 ... an z Mn, b = b1b2 ... bn z Mn nazveme součtem slov a, b (zřejmě právě jedno) slovo c = c1c2 ... cn z Mn takové, že platí ci = ai + bi, pro i = 1, 2, ..., n. Toto slovo označíme symbolem c = a + b. Volba vhodného algoritmu šifrování se tedy zjednodušuje na volbu vhodné množiny znaků a na ní definované vhodné komutativní operace, ke které existuje operace inverzní. Proč šifrovat hesla zpaměti?Tato otázka je na místě a je nejvyšší čas na ni odpovědět. Předpoklad, že se neoprávněná osoba bude soustředit jenom na text napsaný na klávesnici, nikoho o užitečnosti šifrování zpaměti nepřesvědčí. Z předchozího výkladu, ale vyplývají některé zajímavé možnosti využití šifrování zpaměti v praxi (další informace uvedu v kapitole Příklady použití). Jestliže h je heslo uživatele a v paměti počítače je uložena hodnota h' = K(h), kde K označuje jednosměrný šifrovací algoritmus, pak odpovědí y = x + h na výzvu systému x prokáže uživatel znalost hesla h, pokud platí rovnost K(y - x) = h'. Jestliže operaci sčítání (odčítání) dvou slov nestejné délky definujeme tak, že délka součtu (rozdílu) se rovná délce kratšího slova, nemusí být v počítači uložen ani údaj o délce hesla. Stačí, aby se délka slova x rovnala maximální povolené délce hesla. Chce-li neoprávněná osoba odvodit heslo h nebo alespoň některé jeho znaky, musí získat dvojice odpovídajících si znaků ve slovech x a y. Jestliže jí v tom dokážeme zabránit, nemůže heslo odvodit (příklad Zesílené ověření totožnosti v kapitole Příklady použití). Šifrováním zpaměti můžeme ztížit odhalení jednoduchých tajných algoritmů (příklad Tajný algoritmus). Pokud uživatel zašifruje heslem h výstupní hodnotu T(x) tajného algoritmu (délka slova T(x) nesmí být menší než délka hesla h), pak odpovědí y = h + T(x) dokáže současně znalost hesla i tajného algoritmu, platí-li rovnost K(y - T(x)) = h'. Uživatel tak může znalostí tajného algoritmu prokázat oprávněnost přístupu k objektu chráněnému heslem. Určíme-li ke slovu h slova h1, h2 tak, že platí h = h1 + h2 (stručněji: rozdělíme-li heslo h na dílčí hesla h1 a h2, pak pouze z hodnoty h1 nebo pouze z hodnoty h2 nelze heslo h odvodit (příklady Předání hesla a Bezpečnější uložení hesla). Protože ve všech příkladech operaci sčítání provádí člověk, zatímco operaci odčítání počítač (pro rozdělení hesla si můžeme napsat program), popíšu v další kapitole podrobně jen provedení operace sčítání. Jak šifrovat hesla zpaměti
Konkrétní volbu množiny M ovlivňuje možnost neoprávněné osoby heslo hádat. Chceme-li, aby pravděpodobnost uhádnutí určitého
slova délky n jediným pokusem byla přibližně rovna 10-6, musíme
pro množinu s počtem prvků 2, 10, a 30 volit číslo n po řadě 20,
6 a 4. Například Vernamova šifra je vzhledem k potřebné délce
hesla pro šifrování zpaměti téměř nepoužitelná, i když sčítání
dvou prvků je velice jednoduché. Nyní uvedu dva algoritmy šifrování zpaměti. První z nich je ověřovací algoritmus J.M.Carrolla a P.M.Lellanda z knihy [4, s. 49]. Algoritmus 1.Prvky množiny M1 jsou celá čísla 0 až 9. Operace sčítání je sčítání modulo 10, operace odčítání je odčítání modulo 10. Máme-li určit zpaměti výsledek operace sčítání dvou čísel z M1 modulo 10, sečteme čísla obvyklým způsobem a je-li součet:
Výsledek sčítání dvou prvků z M1 modulo 10 určíme tedy buď ze slovního vyjádření aritmetického součtu (počítáme-li v duchu devět plus čtyři je tři... už známe výsledek) nebo z jeho číselného vyjádření (poslední cifra).
Operace sčítání je komutativní a asociativní. Operace odčítání není komutativní. Algoritmus 2.Prvky množiny M2 jsou písmena latinské abecedy, středník, čárka, tečka a lomítko. Operace sčítání (odčítání) se odvozuje z tabulky:
V tabulce jsou prvky množiny M2 zapsány ve třech řádcích a deseti sloupcích. Sloupce jsou označeny čísly 1 až 9 a 0 v záhlaví tabulky. Součet dvou prvků z M2 najdeme v tabulce tímto postupem: V záhlaví si přečteme čísla sloupců, ve kterých jsou zapsány sčítané prvky. Čísla sečteme modulo 10. Výsledek určuje sloupec, ve kterém je součet těchto prvků zapsán (součet D + F i O + K je v sedmém sloupci). Jsou-li sčítané prvky ve stejném řádku je v něm i jejich součet (D + F = J); jinak je součet ve zbývajícím řádku (O + K = M), tedy v tom řádku, ve kterém není žádný ze sčítaných prvků zapsán.
Nekomutativní operace odčítání se provádí podobně (číslo
sloupce se určí operací odčítání modulo 10). Operace sčítání je
komutativní, ale není asociativní. Pro a, b , c z M2 platí
a + (b + c) = (a + b) + c tehdy a jen tehdy, když prvky a, c jsou
zapsány ve stejném řádku tabulky. Příklady použitíMožnosti využití šifrování hesel zpaměti v praxi naznačuje následujících pět příkladů. Můžete si je porovnat s popisem záporů použití hesel v úvodu tohoto článku. Na to, že jejich výčet není úplný, jsem vás už upozornil. Příklady ukazují, že není ani náhodně sestavený. Tajný algoritmus"... pochybuji, že lidský důmysl dokáže sestavit takový problém, který by zase lidský důmysl při vypjatém soustředění nevyřešil" čteme v povídce Zlatý brouk od E.A. Poa. Ale posuďte sami jak složité může být odhalení tajného algoritmu. Jste v roli neoprávněné osoby a máte k dispozici tyto údaje ze září roku 1992:
Doplňte odpověď uživatele na výzvu EAXEYNGA (řešení je na konci článku). Předání hesla
Dvě osoby se předem domluví na pevném šifrovacím klíči
"NATL". Chce-li předat jedna osoba druhé heslo "M/AE", předá jí
nechráněným komunikačním kanálem rozdíl hesla a pevného klíče
zřetězený s náhodně zvolenými znaky ("M/AE" - "NATL" = "ZONV",
ale předá se například "ZONVTX/B"). Heslo je pak možné převzít
výpočtem "ZONVTX/B" + "NATL". Použití velkého počtu hesel
Chceme zvolit velký počet hesel tak, aby každé z nich vypadalo jako náhodně vybrané (některé systémy to kontrolují) a přitom nebylo nutné si je někam poznamenávat. Zesílené ověření totožnosti
Chceme utajit informaci, kterou vybraný uživatel vzdáleného
počítače nebo terminálu dokazuje svou totožnost systému střediskového počítače nebo serveru, předpokládáme-li jako možný útok:
odpozorování, infiltrační prostředky v počítači uživatele, úpravy
klávesnice u počítače nebo terminálu uživatele.
Bezpečnější uložení hesla
Správce systému rozdělí své heslo h na dílčí hesla h1 a h2.
Heslo h1 předá určené osobě (vedoucímu), heslo h2 předá svému
zástupci. Zapomene-li správce systému heslo, převezme od zástupce
a vedoucího dílčí hesla a svoje heslo odvodí výpočtem h1 + h2.
Předá-li vedoucí svoje dílčí heslo zástupci, provede tento výpo
čet zástupce a získá tak heslo správce systému. je zřejmé, že operace sčítání musí být asociativní. ZávěrV tomto článku jsem popsal dva algoritmy šifrování zpaměti. Operace sčítání v prvním z nich je jednodušší a je asociativní (příklad Bezpečnější uložení hesla). Výhodou druhého algoritmu je, že můžeme volit kratší a snadněji zapamatovatelné heslo, a pracovat se slovy jazyka nebo zkratkami (příklad Použití velkého počtu hesel). Příklady ukazují, že šifrování zpaměti je především levný a snadno použitelný prostředek pro bezpečnější uložení (sdílení) a předání hesel. "Obvyklé" řešení uvedených příkladů by vyžadovalo: šifrovací zařízení nebo důvěryhodného kurýra (příklad Předání hesla); závěsy na oknech, které by zabránily odpozorování hesla, nebo identifikační kartu vybavenou procesorem (příklad Zesílené ověření totožnosti a možná i příklad Tajný algoritmus); trezor s více zámky nebo identifikační karty umožňující sdílet tajemství (příklad Bezpečnější uložení hesla). Řešení úlohySprávná odpověď je ".DLV". Z datumu (15), hodiny (12) a kalendáře na rok 1992 zjistíme, kdo má svátek 15. prosince. Podle mého kalendáře Radana. Tajné heslo je "GSHE". Heslo platné 15. září 1992 o půl jedné se určí šifrováním zpaměti: "RADANA" + "GSHE". Výzvu systému bychom mohli využít například pro určení hesla platného 30. září ve čvrt na tři. Literatura
|
změněno 1. ledna 2001
Copyright © 1998-2001 Vladimír Zábrodský