Matematické základy šifrování a kódování Permutace Pojem permutace patří mezi základní pojmy a nachází uplatnění v mnoha oblastech, např. kombinatorice, algebře apod. Definice Nechť je n-prvková množina. Permutací na množině A rozumíme libovolné uspořádání prvků množiny A, tj. libovolnou uspořádanou n-tici tvořenou právě všemi prvky množiny A. Běžně je k zápisu permutací využíván následující dvouřádkový zápis který interpretujeme následovně první řádek určuje pozice v uspořádané n-tici a druhý řádek určuje prvky (z množiny A), které se na dané pozici vyskytují (tj. na 1. pozici je prvek, atd. až na n-té pozici je prvek ). S ohledem na tuto skutečnost je zřejmé, že např. zápisy definují stejnou permutaci. a, Permutace budeme obvykle značit malými řeckými písmeny z druhé poloviny řecké abecedy, např. apod. Alternativně lze permutaci definovat jako vzájemně jednoznačné zobrazení množiny A na sebe. Množinu všech permutací na n-prvkové množině budeme značit (platí ) a definujeme na ní operaci násobení následovně: (Pokud permutace chápeme jako vzájemně jednoznačné zobrazení množina A na sebe, potom součin odpovídá operaci skládání zobrazení.) Množina spolu s výše definovanou operací násobení tvoří tzv. symetrickou grupu, zapisujeme. Permutace tvoří tzv. jednotkový prvek (označujeme id n, resp. 1) symetrické grupy a permutace tvoří inverzní permutaci k. Zřejmě platí (ověřte): - - -
Příklad Nechť, kde. Zřejmě platí: ; Úvod do šifrování (kryptografie) Kryptografie je vědecká disciplína, která se zabývá metodami ochrany dat před neautorizovaným přístupem, resp. nakládáním s daty. Je přirozené, že snaha o ochranu dat před neautorizovaným přístupem vede k protireakci, tj. vyvolává snahu o prolomení kryptografické ochrany. Kryptoanalýza Vědecká disciplína, která se zabývá metodami prolomení kryptografické ochrany. Kryptoanalytické metody jsou v případě klasických substitučních šifrovacích metod založeny na tzv. frekvenční analýze, která odhaduje identitu znaků (resp. jejich kombinací) na základě porovnání frekvence jejich výskytu v daném jazyce a zašifrovaném textu. Kryptologie Disciplína, která zahrnuje jak kryptografii, tak i kryptoanalýzu. Vývoj obou disciplín je vzájemně provázán. Steganografie Ochránit data před neautorizovaným přístupem lze v zásadě dvěma způsoby učinit data nesrozumitelnými ( kryptografická ochrana) nebo utajit jejich samotnou existenci ( steganograficke metody: technické a lingvistická). Kryptologie Steganografie Kryptografie Kryptoanalýza Základní pojmy Otevřená abeceda Konečná množina znaků A, které používáme k zápisu nezašifrovaných zpráv. Jde např. o českou abecedu doplněnou o cifry a další speciální symboly. V těchto skriptech se pro jednoduchost omezíme na abecedu uvedenou v horním řádku následující tabulky (v celé řadě metod budeme znaky otevřené abecedy nahrazovat jejich pořadím, číslujeme od 0 - viz druhý řádek). 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 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
Otevřený text Otevřeným textem rozumíme konečný řetězec znaků otevřené abecedy (n je délka). Otevřený text budeme psát obvykle malými písmeny a interpretujeme ho jako zprávu určenou k zašifrování. Prostor otevřených textů Množinu všech potenciálních otevřených textů budeme nazývat prostorem otevřených textů a značit. Šifrová abeceda Konečná množina znaků B, které používáme v zašifrovaných zprávách. V případě binárním šifrování., mluvíme o Zašifrovaný text (šifrový text) Konečný řetězec textu. znaků šifrové abecedy, který vzniknul zašifrováním některého otevřeného Prostor šifrových textů Množinu všech šifrových textů vzniklých zašifrováním otevřených textů z prostoru otevřených textů budeme nazývat prostorem otevřených textů a značit. Klíč, prostor klíčů Klíčem rozumíme uspořádanou dvojici, kde e nazýváme šifrovacím klíčem (parametr šifrovací metody), d dešifrovacím klíčem (parametr dešifrovací metody). Množina všech klíčů tvoří tzv. prostor klíčů, značíme. Jedním ze základních požadavků je, aby prostor klíčů byl dostatečně obsáhlý a prakticky znemožňoval uhádnout klíč metodou hrubé síly, tj. prohledáním prostoru klíčů. Šifrování Proces transformace otevřeného textu do zašifrovaného textu. Zjednodušeně řečeno, lze šifrování chápat jako přesně definovaný proces převedení otevřeného textu do nesrozumitelné podoby zašifrovaného textu. Šifrovací funkce/transformace Šifrovací funkcí rozumíme vzájemně jednoznačné zobrazení definované pro všechny (šifrovací) klíče z prostoru klíčů. Vzájemná jednoznačnost je základním předpokladem pro možnost zpětného dešifrování. Šifrovací systém Uspořádaná trojice, kde je prostor klíčů, je množina šifrovacích funkcí, je množina dešifrovacích funkcí, tvoří šifrovací systém, jestliže Interpretace - každý klíč definuje jedinou dvojici transformací a (šifrovací transformaci a jí příslušnou dešifrovací).
Symetrické (klasické) šifrovací metody Šifrovací metody, kde dešifrovací klíč je výpočetně jednoduché odvodit ze šifrovacího klíče. Asymetrické šifrovací metody (s veřejným klíčem) Šifrovací metody, kde dešifrovací klíč nelze výpočetně jednoduše odvodit ze šifrovacího klíče. Transpoziční metody Šifrovací metody, ve kterých znaky otevřeného textu mění svou pozici, ale nemění svou identitu. Substituční metody Šifrovací metody, ve kterých znaky otevřeného textu mění svou identitu, ale nemění svou pozici. Monoalfabetické šifry Šifrovací metody (obvykle substituční), využívající pouze jednu šifrovou abecedu. Homofonní šifry Šifrovací metody, kde znaky šifrového textu mají teoreticky stejnou frekvenci výskytu. Polyalfabetické šifry Šifrovací metody (obvykle substituční) využívající více šifrovacích abeced, které systematicky (tj. dle definovaných pravidel) střídají. Jednoduchá transpozice Šifrovací klíč:, kde Šifrovací transformace:, kde,. (V tomto případě použijeme jako úplnou soustavu zbytků modulo n množinu ) Dešifrovací klíč:, kde označuje inverzní permutaci k Dešifrovací transformace:, kde,. (V tomto případě použijeme také jako úplnou soustavu zbytků modulo n množinu ) Postup šifrování lze popsat následovně - nejprve text rozdělíme na po sobě jdoucí podřetězce délky d. Každý podřetězec pak zašifrujeme pomocí permutace na řetězec (tj. na pozici i umístíme znak z pozice ). Analogicky postupujeme i při dešifrování (pouze místo použijeme ). Pokud délka n textu není násobkem čísla d, doplníme ho libovolnými znaky na délku rovnou prvnímu násobku čísla d většímu než n. Příklad Uvažujte jednoduchou transpozici s klíčem. a) Zašifrujte text koloseum.
otevřený text: k o l o s e u m x y zašifrovaný text: L K S O O M E Y U X b) Dešifrujte text DRMUITEMNU (při šifrování byl použit klíč ). Dešifrovací klíč zašifrovaný text: D R M U I T E M N U otevřený text: r u d i m e n t u m Afinní šifra Šifrovací klíč:, kde Šifrovací funkce:, kde, je číselná reprezentace i-tého znaku otevřeného textu. Poznámka Nejprve převedeme textový řetězec na číselný řetězec např. tak, že každý znak nahradíme jeho pořadím v rámci uvažované abecedy (pozor - číslujeme od 0 nebo od 1) - viz tabulka č. 1. Dešifrovací klíč:, kde je inverzní prvek k Dešifrovací funkce:, kde. Příklad Uvažujte afinní šifru s šifrovacím klíčem, kde. a) Zašifrujte text vista. Průběh šifrování lze zapsat následovně: b) Dešifrujte text BOWLC. Průběh dešifrování lze zapsat následovně: Jednoduchá substituce Šifrovací klíč: Šifrovací funkce: Dešifrovací klíč:, kde označuje inverzní permutaci k Šifrovací funkce: Poznámka Alternativní způsob zadání šifrovacího klíče využívá šifrování označované jako substituce s klíčovým slovem. V tomto případě tvoří šifrovací klíč uspořádaná dvojice, kde. Číslo k definuje pozici, odkud začneme postupně umisťovat znaky textového řetězce, opakující se znaky vynecháváme. V další fázi doplníme chybějící znaky otevřené abecedy.
Příklad Otevřený text aqua fontis zašifrujte pomocí jednoduché substituce. Jako šifrovací klíč použijte: a) Schematický zápis šifrování může vypadat následovně otevřený text: a q u a f o n t i s zašifrovaný text: D U C D T A R M B O b) Nejprve na základě klíče vygenerujeme příslušnou permutaci definující substituční abecedu - od 7. znaku (tj. od písmene g) doplňujeme text regnumbohemiae (opakující se znaky vynecháváme). V dlaší fázi doplníme chybějící znaky otevřené abecedy. otevřený text: a q u a f o n t i s zašifrovaný text: T A J T Z H O F G D Hillova šifra Šifrovací klíč:, kde Šifrovací funkce: kde je číselný vektor reprezentující šifrovaný podřetězec otevřeného textu, je číselný vektor reprezentující odpovídající šifrový text. Dešifrovací klíč:, matice inverzní k H modulo 26 Dešifrovací funkce: Postup šifrování lze popsat následovně - nejprve otevřený text rozdělíme na po sobě jdoucí podřetězce délky d. Každý podřetězec pak převedeme na číselný vektor, který zašifrujeme pomocí šifrovací funkce na řetězec. Pokud délka n otevřeného textu není násobkem čísla d, doplníme ho libovolnými znaky na délku rovnou prvnímu násobku čísla d většímu než n. Existence inverzní matice je nezbytnou podmínkou pro jednoznačné dešifrování. Lze ukázat, že nutnou a postačující podmínkou je, kde označuje determinant matice H. Platí. Výpočet se provádí v soustavě Z 26 a lze využít standardní postupy, např. Gaussovu metodu, determinanty atd. Příklad Uvažujte Hillovu šifru s klíčem. a) Zašifrujte text tarsus. Průběh šifrování lze zapsat následovně:
b) Dešifrujte text QASNAL. Průběh dešifrování lze zapsat následovně: Vigenerova šifra Šifrovací klíč: Šifrovací funkce:, kde (využíváme úplnou soustavu zbytků ) Dešifrovací klíč:, kde označuje inverzní permutaci k Dešifrovací funkce: Vigenerova šifra je polyalfabetická šifra, jejíž klíč tvoří d cyklicky se střídajících substitučních abeced. Tedy pro zašifrování: znaku použijeme abecedu, znaku použijeme abecedu, znaku použijeme abecedu, Speciálním případem je šifrování pomocí tzv. Vigenerova čtverce, jehož první řádek tvoří otevřená abeceda a následující řádky reprezentují substituční abecedy vzniklé pouhým posunutím (viz tab. č. 2). Šifrovací klíč tvoří textový řetězec, který určuje řádky (první znak řádku), používané k zašifrování daného znaku otevřeného textu. 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 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 Tabulka č. 2 - Vigenerův čtverec Příklad Uvažujte Vigenerovu šifru s klíčovým slovem sera. a) Zašifrujte text circumicio klíč: s e r a s e r a s e otevřený text: c i r c u m i c i o zašifrovaný text: U M I C M Q Z C A S b) Dešifrujte text SKXRWWJIG klíč: s e r a s e r a s zašifrovaný text: S K X R W W J I G otevřený text: a g g r e s s i o Binární šifrování Ze zřejmých důvodů převládají v současné době šifrovací metody, které používají binární abecedu, tj. a tedy šifrují bitový (binární) řetězec reprezentující otevřený text opět na bitový (binární) řetězec tvořící šifrový text. Standardní bitové (logické) operace: Bitové operace rozšíříme přirozeně na operace mezi bitovými řetězci stejné délky - provádíme bitové operace mezi sobě odpovídajícími bity obou bitových řetězců. Např.. Pro převod otevřeného textu na binární řetězec budeme využívat níže uvedenou ASCII tabulku. Znak 0 1 2 3 4 5 6 7 8 9 ASCII 00110000 00110001 00110010 00110011 00110100 00110101 00110110 00110111 00111000 00111001 Znak a b c d e f g h i j ASCII 01100001 01100010 01100011 01100100 01100101 01100110 01100111 01101000 01101001 01101010 Znak k l m n o p q r s t ASCII 01101011 01101100 01101101 01101110 01101111 01110000 01110001 01110010 01110011 01110100 Znak u v w x y z ASCII 01110101 01110110 01110111 01111000 01111001 01111010
Vernamova šifra Šifrovací klíč: Šifrovací funkce: kde, kde je binární reprezentace otevřeného textu (resp. jeho části), je binární reprezentace zašifrovaného textu (resp. jeho části), je symbol pro operaci vylučovací nebo (exclusive or, resp. xor). Dešifrovací klíč:, kde (tj. společný pro šifrování i dešifrování) Dešifrovací funkce: Dešifrování probíhá korektně, neboť: Postup šifrování lze popsat následovně - nejprve otevřený text převedeme na bitový řetězec, který následně rozdělíme na po sobě jdoucí bitové řetězce délky klíče (tj. d). Tyto řetězce pak zašifrujeme pomocí výše uvedené šifrovací funkce. Šifrovací klíč lze zadat pomocí klíčového slova, jehož binární reprezentace pak tvoří skutečný klíč k. Příklad Uvažujte Vernamovu šifru s klíčovým slovem ico. a) Zašifrujte text secus Bitová reprezentace klíče: otevřený text: s e c u s binární reprezentace: 01110011 01100101 01100011 01110101 01110011 klíč: 01101001 01100011 01101111 01101001 01100011 zašifrovaný text: 00011010 00000110 00001100 00011100 00010000 b) Dešifrujte text (00001111000011000001110100011010) zašifrovaný text: 00001111 00001100 00011101 00011010 klíč: 01101001 01100011 01101111 01101001 binární reprezentace: 01100110 01101111 01110010 01110011 otevřený text: f o r s Feistelova šifra Šifrovací klíč:, kde Šifrovací proces probíhá následovně, v na sebe navazujících krocích: 1. krok:, kde 2. krok:, kde d. krok:, kde (d+1). krok: kde je bitový řetězec délky reprezentující otevřený text (resp. jeho část),
reprezentuje prvních n bitů, reprezentuje následujících n bitů (svislá čárka mezi a má pouze pomocný charakter), je bitový řetězec délky reprezentující zašifrovaný text příslušný. Dešifrovací klíč:, kde odpovídá šifrovacímu klíči Dešifrovací proces probíhá následovně, v na sebe navazujících krocích: 1. krok:, kde 2. krok:, kde d. krok:, kde (d+1). krok: Proces dešifrování probíhá stejně jako šifrování, pouze klíče používáme v obráceném pořadí, tj. v 1. kroku, 2. kroku,, d. kroku. Na závěr zaměníme prvních a druhou polovinu bitů. DES, NDS, AES
Úvod do kódování Cílem následujících části skript je seznámit čtenáře se základy kódování. V úvodní části budou formulovány základní pojmy a poznatky z oblasti tzv. kódování bez šumu a následující část bude věnována úvodu do problematiky bezpečnostních (detekčních, opravných) kódů, zejména pak lineárních kódů. Úvod do kódování bez šumu Základní pojmy: Zdrojová abeceda Konečná množina, jejíž prvky budeme nazývat zdrojové znaky. Zdrojovou abecedu interpretujeme jako množinu znaků, které používáme k zápisu původní, tj. nezakódované zprávy (např. anglická/česká abeceda spolu s ciframi 0, 1,, 9 a dalšími speciálními symboly). Kódová abeceda Konečná množina, jejíž prvky budeme nazývat kódové znaky. Kódovou abecedu interpretujeme jako množinu znaků, které používáme ke kódování (tj. k zápisu zakódované zprávy). V případě, kdy, tj. kódová abeceda obsahuje dva znaky (nejčastěji 0, 1), mluvíme o binárním kódu/kódování. V případě mluvíme o ternárním kódování atd. Kódování Kódováním K rozumíme libovolné prosté zobrazení zdrojové abecedy A do množiny všech konečných slov nad abecedou B, tj.. Kódování lze interpretovat jako předpis, který každému zdrojovému znaku přiřadí slovo vytvořené ze znaků kódové abecedy. Slovo nazýváme kódové slovo příslušné zdrojovému znaku a. Vlastnost K je prosté zajišťuje přirozený požadavek kladený na každé smysluplné kódování, totiž různým znakům zdrojové abecedy odpovídají různá kódová slova. Kód Kódem rozumíme množinu všech kódových slov, tj. množinu. V další části nebudeme striktně rozlišovat mezi pojmy kódování (zobrazení) a kód (množina kódových slov) a budeme v obou případech používat označení K. Kódování zdrojových zpráv Je-li kódování, potom zobrazení definované pro libovolné slovo nad abecedou A vztahem nazveme kódováním zdrojových zpráv příslušným kódování K. Je zřejmé, že Jednoznačně dekódovatelné kódování Řekneme, že K je jednoznačně dekódovatelné kódování, jestliže kódování zdrojových zpráv K* je prosté zobrazení. Prefixový kód Prefixovým kódem (kódováním) rozumíme takový kód, kde žádné kódové slovo není prefixem jiného kódového slova.
Blokový kód Kód, jehož všechna kódová slova mají stejnou délku, nazýváme blokovým kódem délky. Počet znaků kódového slova pak nazýváme délkou blokového kódu. Platí: Každý prefixový kód je jednoznačně dekódovatelný a lze je dekódovat znak po znaku. Každý blokový kód je zřejmě prefixový a tedy i jednoznačně dekódovatelný.