Aplikace Morseovka umí šifrovat zprávy pomocí Vigenèrovy šifry. Tato stránka popisuje konkrétní implementaci použitou v aplikaci a přehled kladů a záporů této šifry. Dozvíte se, pro které situace je vhodná a kdy ji naopak nepoužívat.

Možnosti použití

Toto jednoduché šifrování se hodí hlavně pro různé hry a také, abyste si mohli soukromně povídat na veřejném kanálu, kde může poslouchat více lidí. Tato šifra se naopak nehodí pro přenos opravdu citlivých informací. Vzhledem k jejímu stáří poskytuje nesrovnatelně menší zabezpečení oproti moderním metodám jako je AES. I když ostatní nemohou vědět v reálném čase, o čem si povídáte, pokud si útočník vaši konverzaci zaznamená a dá si práci s jejím rozluštěním, pravděpodobně se mu to povede.

Proč Vigenèrova šifra pro Morseovku

Po přečtení předchozí kapitoly se pravděpodobně se budete ptát, proč nebyla jednoduše do aplikace implementovaná modernější a podstatně bezpečnější metoda. Vigenèrova šifra má totiž spoustu vlastností užitečných pro praktické použití:

(+)
Je velmi tolerantní k chybám. Pokud přijmete jeden znak v zašifrované zprávě špatně, budete mít pak v dešifrovaném textu tak jen jednu chybu. Při použití moderních metod by se zpráva s jednou jedinou chybou stala úplně nečitelnou a bylo by třeba odeslat celou znovu.
(+)
Nemění délku textu. Při zašifrování krátké zprávy některou z moderních metod by se zpráva prodloužila a bylo by obtížnější ji poslat.
(+)
Zachovává ve zprávě mezery, tečky, čárky a obdobné znaky. Díky tomu je odesílání i přijímání zprávy lidmi jednodušší oproti situaci, kdy by zašifrovanou zprávou byl jen jeden dlouhý řádek nesmyslných znaků bez jakékoliv struktury.
(+)
Zašifrovaná zpráva obsahuje jen znaky stejného druhu jako původní zpráva. Písmena A až Z se zašifrují opět na některé z písmen A až Z. Pokud chcete odeslat jen jednoduchou zprávu obsahující pouze písmena, nemusí te se učit pokročilejší kódy v Morseovce pro další méně používané znaky.

Díky těmto vlastnostem je snadné přenést Morseovkou zprávu zašifrovanou pomocí Vigenèrova šifry. Jak bylo ale řečeno, jsou tu o zásadní nevýhody, na které byste měli myslet při rozhodování, jestli tuto funkci použít.

(-)
Tato metoda je mnohem méně bezpečná než moderní kryptografické metody. Neměla by být proto použita pro přenos opravdu citlivých informací.
(-)
To, že je s trochou práce velká šance šifru prolomit a odhalit text původní zprávy má jeden důsledek, který nemusí být na první pohled zřejmý. Pokud se útočníkovy podaří dešifrovat zprávu, není pro něj pak už příliš obtížné porovnáním původního a zašifrovaného textu odvodit heslo, které bylo pro šifrování použito. To znamená, že byste neměli používat pro tuto šifru hesla, která používáte i jinde (např. heslo pro přihlášení ke svému e-mailovému účtu).

Postup šifrování

Předtím než popíšeme Vigenèrovu šifru, musíme zmínit její jednodušší variantu - Caesarovu šifru.

Caesarova šifra

Jedná se o jednu z nejjednodušších šifer, která jen nahradí každé písmeno jiným písmenem o pevně daný počet písmen dále v abecedě. Klíč (heslo) je pak udává, o kolik se má písmeno posunout.

Klíč 1 znamená, že každé písmeno ve zprávě se jednoduše nahradí následujícím písmenem v abecedě (tj. o jednu pozici dále) To znamená, že z A se stane B a tak dále. Následující příklad ukazuje slovo "message" zašifrované s klíčem 1.

Původní text m e s s a g e
Zašifrovaný text n f t t b h f

V dalším příkladě je zašifrované opět slovo "message", ale s klíčem 3.

Původní text m e s s a g e
Zašifrovaný text p h v v d j h

Situace, kdy dojdeme na konec abecedy (písmeno Z) se řeší jednoduše tak, že se s dalším posunem vracíme na začátek abecedy (zpět k písmenu A). Například z písmena "X" se po posunutí o 5 pozic stane X → Y → Z → A → B → C.

Podrobnější popis najdete na Wikipedii.

Dešifrování zprávy je velmi jednoduché. Postupuje se stejně jako při jejím šifrování, jen se písmena posouvají opačným směrem v abecedě.

Klíč (heslo) byste si mohli místo čísla udávajícího počet posunů v abecedě také vyjádřit také jako jedno písmeno. Například A=0, B=1, C=2 a tak dále. Toho využijeme v další kapitole.

Jak vidíte, tato šifra je v dnešní době prakticky nepoužitelná. Protože heslo je jen jedno z písmen A až Z, existuje jen 26 možných hesel a nebylo by těžké vyzkoušet je všechny jedno po druhém.

Vigenèrova šifra

Vigenèrova šifra je rozšířením Caesarovy šifry, kde heslo má více znaků. První znak zprávy je zašifrován pomocí prvního znaku hesla, druhý znak zprávy pomocí druhého znaku hesla a tak dále. Jakmile vyčerpáme všechny znaky hesla, vracíme se opět na jeho začátek.

Následující příklad ukazuje slovo "message" zašifrované heslem "abc". Výsledkem je text "mfusbie".

Původní text m e s s a g e
Heslo a b c a b c a
Znak z původního textu posunout o 0 1 2 0 1 2 0
Zašifrovaný text m f u s b i e

Více o historii a podrobnější popis najdete na anglické Wikipedii.

Tato kapitola popisovala obecný princit, jak tato šifra funguje. Konkrétní implementace se ale mohou mírně lišit. Hlavním rozdílem je použitá abeceda. V předchozích příkladech byla zvolena abeceda s písmeny "a" až "z". To ale znamená, že zpráva, kterou chcete zašifrovat, nemůže obsahovat žádné jiné znaky jako například čísla a další (tedy obsahovat je může, ale nebude je možné zašifrovat je). Různé modifikace této šifry mohou používat obsáhlejší abecedu s více znaky.

Další důležitý rozdíl je metoda, která převádí znaky z hesla na počet posunů v abecedě. V předchozích příkladech jsme pro jednoduchost přiřazovali písmenům hesla odpovídající počet posunů následovně: a=0, b=1, c=2, ... až z=25. Nevýhoda je, že heslo pak nemůže obsahovat jiné znaky než tato písmena (nemůže obsahovat čísla, nebo jiné speciální symboly). Jiné verze této šifry mohou používat jinou metodu, jak písmena hesla převést na počet posunů v abecedě, aby heslo mohlo obsahovat i jiné znaky.

Výsledkem toho je, že pokud zašifrujete zprávu pomocí Vigenèrovy šifry v jedné aplikaci, nemusí se podařit zprávu dešifrovat v jiné aplikaci, pokud obě aplikace používají mírně odlišnou verzi této šifry.

Verze Vigenèrovy šifry použitá v aplikaci

Aplikace Morseovka používá následující parametry pro šifrování:

  • Šifrovány jsou pouze písmena a číslice. Jakékoliv další znaky se objeví ve výsledné zprávě v nezměněné podobě. To znamená, že zůstanou zachovány mezery mezi slovy, tečky za větami atd.
  • Aplikace používá celkem dvě abecedy. Jedna obsahuje všechna písmena použitá ve verzi Morseovky, kterou máte zvolenou v nastavení. V případě české nebo mezinárodní verze je tato abeceda "abcdefghijklmnopqrstuvwxyz". Další samostatná abeceda je použita pro čísla (ta je vždy "0123456789"). Takže písmeno se zašifruje na jiné písmeno a číslo na jiné číslo.
  • První abeceda pro písmena závisí na verzi Morseovky, kterou máte nastavenou v nastavení. Pokud zvolíte jednu z lokálních verzí, abeceda pro písmena se odvodí z ní (vezmou se všechna písmena o délce 1 znak ve stejném pořadí, v jakém se zobrazují v aplikaci). Například pokud zvolíte řeckou verzi Morsovky, použije se pro šifrování písmen abeceda "αβγδεζηθικλμνξοπρστυφχψω". V takovém případě budou šifrovány jen řecká písmena a číslice (ne např. písmena v latince).
  • Pokud zpráva obsahuje znaky s diakritikou a ty nejsou přímo v abecedě použité pro šifrování, diakritika se odstraní. Takže například písmeno "é" v původní zprávě se nahradí "e" a až poté se zašifruje.
  • Znaky hesla se převádí na počet posunů v abecedě pomocí jejich pořadového čísla v Unicode. To můžete najít například v následujícím seznamu Unicode znaků. Libovolný znak z hesla najděte v tabulce ve sloupci Glyph a odpovídající počet posunů pak bude ve sloupci Decimal. V předchozích kapitolách jsme počet posunů z hesla odvozovali velmi jednoduše jako A=0, B=1, C=2, ... To bylo ale jen pro jednoduchost. Ze zmíněné tabulky vidíte, že v aplikaci ve skutečnosti A=65, B=66 atd. To, že počet posunů je větší než počet písmen v abecedě nepředstavuje žádný problém - pokud dojdeme na konec abecedy, jednoduše se s dalším posunem vracíme na její začátek. Použití Unicode čísla pro převod na počet posunů má velkou výhodu v tom, že heslo může obsahovat jakékoliv znaky, které napíšete na klávesnici. Všimněte si také, že u hesla se rozlišují malá a velká písmena, protože ve zmíněné tabulce malému písmenu "a" odpovídá jiné číslo (97) než velkému "A" (65).

Zpráva "message" zašifrovaná v aplikaci pomocí hesla "abc" tedy podle předchozích pravidel bude "fynlubx"

Původní text m e s s a g e
Heslo a b c a b c a
Počet posunů 97 98 99 97 98 99 97
Zašifrovaný text f y n l u b x

Na závěr ještě uvedeme příklad s delší zprávou "It's a secret message." zašifrovanou opět heslem "abc". Výsledkem bude "Bn'l v mzvlzm hxmntaz.".

Původní text I t ' s a s e c r e t m e s s a g e .
Heslo a b c a b c a b c a b c a b c a b c a b c a
Počet posunů 97 98 - 97 - 99 - 98 99 97 98 99 97 - 99 97 98 99 97 98 99 -
Zašifrovaný text B n ' l v m z v l z m h x m n t a z .

Apostrof, mezery a tečka za větou zůstanou zachovány bez změny (v předchozí tabulce je v řádku s počtem posunů u nich pomlčka), protože tyto znaky se nenachází v abecedě použité pro šifrování (v jedné abecedě jsou jen písmena a v druhé jsou číslice).