Krypta.cz - Magazín o informační bezpečnosti
Nejdříve si musíme ujasnit, co to vlastně ten XOR je. XOR je jedna z logických operací. Stejně jako například sčítání je operací s čísly, XOR a další jsou operace s logickými hodnotami TRUE (Pravda) a FALSE (nepravda), symbolicky 1 a 0 (v tomto pořadí). "Počítání" se XORem je definováno následovně: 0 xor 0 = 0, 1 xor 1 = 0, 1 xor 0 = 1 xor 0 = 1 , tedy slovně vyjádřeno výsledek je TRUE právě když právě jeden z "čísel" je TRUE. Důležitá věc je, že platí
(a xor b) xor b = a,
tedy číslo dvakrát zaxorované stejnou hodnotou dá zpět původní hodnotu. Stejně dobře jako můžeme xorovat nuly a jedničky, můžeme mezi sebou xorovat jakákoliv čísla mezi sebou : výsledkem prostě bude číslo, které bude mít na n-tém místě číslici získanou jako xor n-té číslice z prvního čísla a n-té číslice z druhého místa, vše samozřejmě v dvojkové soustavě (tj. všechno je vyjádřeno pomocí nul a jedniček). Menší číslo přitom samozřejmě doplníme zleva nulami, abychom měli co xorovat.
Výše uvedený vztah má za následek příjemnou vlastnost : není žádný rozdíl mezi algoritmem šifrovacím a dešifrovacím, oba vezmou zdroj a zaxorujou ho heslem. Nebudeme samozřejmě celý soubor xorovat jednou hodnotou (to by bylo moc jednoduché dešifrovat), vytvoříme si heslo které budeme opakovat, tedy například pokud máme třímístné heslo zaxorujeme první znak textu prvním znakem hesla, druhý druhým třetí třetím, čtvrtý znak textu opět prvním znakem hesla, pátý druhým, a tak dále postupně všechny znaky.
Pro laika se zdá všechno naprosto v pořádku a bezpečně zašifrované. Že je tato šifra děravá jak ementál a tím pádem nepoužitelná, si ukážeme. Stačí totiž, abychom znali alespoň zlomek originálu a s pomocí počítače máme vyhráno. Může to být cokoliv: oslovení podpis, WWW či e-mailová adresa, jméno, telefonní číslo, cokoliv z toho. Můžou nastat dvě možnosti: buď víme přesně kde se toto slovo nachází nebo ne. V prvním případě máme naprosto vyhráno, budeme postupovat následovně: ze zašifrované zprávy izolujeme ty bity, o kterých vím, co v originále vyjadřují. Nyní vyřešíme rovnici a xor x = b,
kde a je známá část originálu, b je kus zašifrovaného textu, my hledáme x, což je heslo. Že x = a xor b je jasné jednak z výše uvedené tabulky, popřípadě si to můžeme ověřit.
Má platit a xor (a xor b) = b. Jelikož platí a xor b = b xor a platí také (a xor b) xor a = b, tedy (b xor a) xor a = b a podle výše uvedeného vztahu b = b pro jakákoliv a,b. Pokud známe dostatečný počet bitů originálu, máme heslo úplné. Pokud jsme náhodou znali méně bitů než bylo heslo (což poznáme nejlépe tak, že dešifrovaná zpráva nedává smysl), musíme se pokusit buď uhodnout zbytek hesla, nebo domyslet si z dešifrované části zprávy ještě kus a opět použít předcházející způsob. Tím máme spočítané heslo a můžeme dešifrovat celou zprávu.
Pokud bychom náhodou nevěděli, kde přesně známé slovo je (pouze víme, že tam někde je), není nic snazšího, než postupně předpokládat že se toto slovo vyskytuje na všech místech zprávy. Zabere nám to sice daleko více času, ovšem důležité je, že časová náročnost roste lineárně a ne exponenciálně. A navíc, od čeho máme počítač, aby všechny možnosti během sekundy vyzkoušel.
Ještě si na chvíli představte, že máte dva dokumenty, zašifrované touto šifrou se stejným heslem, které neznáte. Dále víte, že na určitém místě v jednom i v druhém textu jsou data určité konstantní délky. Například víte, že na 5. až 10. bytu textu jsou dvě různá jména. Přestože tyto jména neznáte, můžete je mezi sebou prohodit, k veliké nelibosti adresáta. Jelikož jsou oba na stejném místě zašifrovaná stejným heslem, adresát vůbec nic nepozná. Navíc tyto dvě slova nemusí být ani ve dvou různých zprávách, můžou být klidně v jedné, čímž je navíc zaručeno, že jsou zašifrované stejným heslem. Nemůžou být sice najednou na stejném místě, ale to vůbec nevadí, stačí když n-tý znak (číslice) prvního a n-tý druhého jsou zaxorovány stejným číslem. Pokud by se například jednalo o bankovní transakci, kde by byl uveden zdrojový a cílový účet, mohlo by použití této zdánlivě bezpečné šifry způsobit bance velmi velké ztráty.