Matematika pro informatiky II

Podobné dokumenty
Matematické základy šifrování a kódování

Matematika pro informatiky II

Počet kreditů: 5 Forma studia: kombinovaná. Anotace: Předmět seznamuje se základy dělitelnosti, vybranými partiemi algebry, šifrování a kódování.

Šifrování, kódování a jejich aplikace - ak. rok 2016/17

Maticí typu (m, n), kde m, n jsou přirozená čísla, se rozumí soubor mn veličin a jk zapsaných do m řádků a n sloupců tvaru:

Teorie informace a kódování (KMI/TIK) Reed-Mullerovy kódy

Matice. a m1 a m2... a mn

Vektory a matice. Obsah. Aplikovaná matematika I. Carl Friedrich Gauss. Základní pojmy a operace

0.1 Úvod do lineární algebry

0.1 Úvod do lineární algebry

Kódy pro odstranění redundance, pro zabezpečení proti chybám. Demonstrační cvičení 5 INP

(Cramerovo pravidlo, determinanty, inverzní matice)

Data v počítači. Informační data. Logické hodnoty. Znakové hodnoty

Afinita je stručný název pro afinní transformaci prostoru, tj.vzájemně jednoznačné afinní zobrazení bodového prostoru A n na sebe.

Kryptografie, elektronický podpis. Ing. Miloslav Hub, Ph.D. 27. listopadu 2007

ALGEBRA. Téma 4: Grupy, okruhy a pole

1 Determinanty a inverzní matice

8. RSA, kryptografie s veřejným klíčem. doc. Ing. Róbert Lórencz, CSc.

Šifrová ochrana informací historie KS4

Algebraické struktury s jednou binární operací

Necht tedy máme přirozená čísla n, k pod pojmem systém lineárních rovnic rozumíme rovnice ve tvaru

Matematika (CŽV Kadaň) aneb Úvod do lineární algebry Matice a soustavy rovnic

VI. Maticový počet. VI.1. Základní operace s maticemi. Definice. Tabulku

Kódy a kódování dat. Binární (dvojkové) kódy. Kód Aikenův

1 Vektorové prostory.

1 Řešení soustav lineárních rovnic

Číselné vektory, matice, determinanty

[1] Determinant. det A = 0 pro singulární matici, det A 0 pro regulární matici

1 Báze a dimenze vektorového prostoru 1

1 Linearní prostory nad komplexními čísly

příkladů do cvičení. V textu se objeví i pár detailů, které jsem nestihl (na které jsem zapomněl) a(b u) = (ab) u, u + ( u) = 0 = ( u) + u.

1 Zobrazení 1 ZOBRAZENÍ 1. Zobrazení a algebraické struktury. (a) Ukažte, že zobrazení f : x

Algebra - druhý díl. Lenka Zalabová. zima Ústav matematiky a biomatematiky, Přírodovědecká fakulta, Jihočeská univerzita

CO JE KRYPTOGRAFIE Šifrovací algoritmy Kódovací algoritmus Prolomení algoritmu

Generující kořeny cyklických kódů. Generující kořeny. Alena Gollová, TIK Generující kořeny 1/30

10. Soustavy lineárních rovnic, determinanty, Cramerovo pravidlo

II. Úlohy na vložené cykly a podprogramy

MFF UK Praha, 22. duben 2008

VYBRANÉ PARTIE Z NUMERICKÉ MATEMATIKY

Algoritmy I. Číselné soustavy přečíst!!! ALGI 2018/19

Šifrová ochrana informací historie PS4

Dosud jsme se zabývali pouze soustavami lineárních rovnic s reálnými koeficienty.

Matice. Modifikace matic eliminační metodou. α A = α a 2,1, α a 2,2,..., α a 2,n α a m,1, α a m,2,..., α a m,n

IB112 Základy matematiky

Matematika B101MA1, B101MA2

Báze a dimenze vektorových prostorů

kryptosystémy obecně další zajímavé substituční šifry klíčové hospodářství kryptografická pravidla Hillova šifra Vernamova šifra Knižní šifra

SOUČIN MATIC A m n B n p = C m p, přičemž: a i1 b 1j +a i2 b 2j + +a in b nj = c ij, i=1 m, j=1 p. Např: (-2) = -3

Šifrová ochrana informací historie PS4

RSA. Matematické algoritmy (11MA) Miroslav Vlček, Jan Přikryl. Ústav aplikované matematiky ČVUT v Praze, Fakulta dopravní. čtvrtek 21.

Teorie množin. Čekají nás základní množinové operace kartézské součiny, relace zobrazení, operace. Teoretické základy informatiky.

MATICE. a 11 a 12 a 1n a 21 a 22 a 2n A = = [a ij]

Operace s maticemi. 19. února 2018

8 Matice a determinanty

Teorie informace: řešené příklady 2014 Tomáš Kroupa

Teoretická informatika Tomáš Foltýnek Algebra Struktury s jednou operací

V předchozí kapitole jsme podstatným způsobem rozšířili naši představu o tom, co je to číslo. Nadále jsou pro nás důležité především vlastnosti

Operace s maticemi

Základy matematiky pro FEK

1. Několik základních pojmů ze středoškolské matematiky. Na začátku si připomeneme následující pojmy:

10. DETERMINANTY " # $!

Kapitola Základní množinové pojmy Princip rovnosti. Dvě množiny S a T jsou si rovny (píšeme S = T ) prvek T je také prvkem S.

2.6. VLASTNÍ ČÍSLA A VEKTORY MATIC

INVESTICE DO ROZVOJE VZDĚLÁVÁNÍ. Modernizace studijního programu Matematika na PřF Univerzity Palackého v Olomouci CZ.1.07/2.2.00/28.

Množinu všech matic typu m n nad tělesem T budeme označovat M m n (T ), množinu všech čtvercových matic stupně n nad T pak M n (T ).

Determinanty. Obsah. Aplikovaná matematika I. Pierre Simon de Laplace. Definice determinantu. Laplaceův rozvoj Vlastnosti determinantu.

označme j = (0, 1) a nazvěme tuto dvojici imaginární jednotkou. Potom libovolnou (x, y) = (x, 0) + (0, y) = (x, 0) + (0, 1)(y, 0) = x + jy,

Lineární algebra Kapitola 1 - Základní matematické pojmy

Lineární algebra - I. část (vektory, matice a jejich využití)

[1] samoopravné kódy: terminologie, princip

Nechť M je množina. Zobrazení z M M do M se nazývá (binární) operace

Ukázkyaplikacímatematiky

Hisab al-džebr val-muqabala ( Věda o redukci a vzájemném rušení ) Muhammada ibn Músá al-chvárizmího (790? - 850?, Chiva, Bagdád),

Ukázky aplikací matematiky. Kapitola 1. Jiří Tůma. Úvod do šifrování. Základní pojmy- obsah. Historie šifrování

Šifrová ochrana informací věk počítačů PS5-2

6 Samodružné body a směry afinity

Hammingovy kódy. dekódování H.kódů. konstrukce. šifrování. Fanova rovina charakteristický vektor. princip generující a prověrková matice

CVIČNÝ TEST 15. OBSAH I. Cvičný test 2. Mgr. Tomáš Kotler. II. Autorské řešení 6 III. Klíč 15 IV. Záznamový list 17

Zadání a řešení testu z matematiky a zpráva o výsledcích přijímacího řízení do magisterského navazujícího studia od podzimu 2014

Množiny, relace, zobrazení

BCH kódy. Alena Gollová, TIK BCH kódy 1/27

z = a bi. z + v = (a + bi) + (c + di) = (a + c) + (b + d)i. z v = (a + bi) (c + di) = (a c) + (b d)i. z v = (a + bi) (c + di) = (ac bd) + (bc + ad)i.

Permutační grupy Cykly a transpozice Aplikace. Permutace. Rostislav Horčík: Y01DMA 11. května 2010: Permutace 1/17

3 Lineární kombinace vektorů. Lineární závislost a nezávislost

P 1 = P 1 1 = P 1, P 1 2 =

[1] x (y z) = (x y) z... (asociativní zákon), x y = y x... (komutativní zákon).

Lineární algebra : Násobení matic a inverzní matice

Lineární algebra : Násobení matic a inverzní matice

1 Co jsou lineární kódy

Cyklické kódy. Definujeme-li na F [x] n sčítání a násobení jako. a + b = π n (a + b) a b = π n (a b)

Obsah. Aplikovaná matematika I. Gottfried Wilhelm Leibniz. Základní vlastnosti a vzorce

4. Trojúhelníkový rozklad p. 1/20

Učební texty k státní bakalářské zkoušce Matematika Vlastní čísla a vlastní hodnoty. študenti MFF 15. augusta 2008

Matice. Předpokládejme, že A = (a ij ) je matice typu m n: diagonálou jsou rovny nule.

8 Kořeny cyklických kódů, BCH-kódy

Charakteristika tělesa

OBECNÉ METODY VYROVNÁNÍ

Šifrová ochrana informací věk počítačů PS5-2

Kódováni dat. Kódy používané pro strojové operace

Transkript:

Fakulta přírodovědně humanitní a pedagogická, Technická univerzita v Liberci I Doc. RNDr. Miroslav Koucký, CSc. Liberec, 6

Copyright Doc. RNDr. Miroslav Koucký, CSc.

Obsah. Úvod do šifrování.. Základní pojmy.. Symetrické šifry, transpozice a substituce.3. Binární blokové šifry.4. Asymetrická šifra RSA. Úvod do kódování.. Základní pojmy.. Huffmanova konstrukce.3. Aritmetické kódy metoda DFWLD.4. Adaptivní metody Přílohy Anglická abeceda, pořadí znaků ASCII tabulka Vigenèrův čtverec Tabulka násobení modulo 6 Předmluva Hlavním cílem předkládaného textu je seznámit čtenáře se základy teorie šifrování, s myšlenkami vybraných kompresních metod a se základy detekčních/opravných kódů. Studium těchto skript vyžaduje znalosti vybraných partií matematiky, které čtenář nalezne ve skriptech Matematika pro informatiky I. 3

Při nakládání s daty se obvykle setkáváme se třemi zásadními okruhy problémů Množství dat kompresní metody (bezeztrátová komprese, ztrátová komprese) Spolehlivost dat (ochrana dat před šumem) teorie kódování Bezpečnost dat (ochrana před neautorizovaným přístupem) kryptologie (kryptografie, kryptoanalýza; steganografie). Úvod do šifrování Tato kapitola je stručným úvodem do problematiky šifrování (kryptologie) a seznámí čtenáře se základními pojmy a vybranými šifrovacími metodami. Stručně a zjednodušeně řečeno, smyslem šifrování je ochrana dat před neautorizovaným přístupem. Kryptografie (kryptos = skrytý, graphein = psát) 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 obvykle založeny na tzv. frekvenční analýze, která odhaduje identitu znaků (resp. slov) na základě porovnání frekvence jejich výskytu v daném jazyce a v zašifrovaném textu. Kryptologie Označení pro vědeckou disciplínu, která zahrnuje jak kryptografii, tak i kryptoanalýzu. Steganografie (steganos = schovaný, graphein = psát) 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 (steganografie technické a lingvistická). Kryptologie Steganografie Kryptoanalýza Kryptografie Symetrické metody Asymetrické metody Substituční metody Transpoziční metody 4

.. Základní pojmy Otevřená abeceda Otevřenou abecedou rozumíme konečnou množinu AA, jejíž prvky tvoří znaky používané 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 znaky anglické abecedy. V celé řadě metod budeme znaky otevřené abecedy nahrazovat jejich pořadím, přičemž použijeme ZZ 6, tj. soustavu nejmenších nezáporných zbytků modulo 6, viz následující tabulka. a b c d e f g h i j k l m 3 4 5 6 7 8 9 n o p q r s t u v w x y z 3 4 5 6 7 8 9 3 4 5 Otevřený text Otevřeným textem rozumíme zprávu určenou k zašifrování, tj. libovolné slovo nad otevřenou abecedou. Jde tedy konečný řetězec mm = mm mm nn, kde mm ii AA (nn je délka). Otevřený text zapisujeme obvykle malými písmeny. Prostor otevřených textů Množinu všech otevřených textů budeme značit MM a nazývat prostorem otevřených textů. Zřejmě MM AA, kde AA označuje množinu všech konečných slov nad abecedou AA. Šifrová abeceda Šifrovou abecedou rozumíme konečnou množinu BB znaků používaných k zápisu zašifrovaných zpráv. V případě BB = {,} mluvíme o binárním šifrování. Zašifrovaný text (šifrový text) Konečný řetězec cc = cc cc nn znaků šifrové abecedy, který vzniknul zašifrováním některého otevřeného textu mm MM. Konkrétní zašifrovaný text budeme zapisovat obvykle velkými znaky. Prostor šifrových textů Množinu všech šifrových textů (vzniklých zašifrováním otevřených textů z prostoru MM) budeme značit CC a nazývat prostorem šifrových textů. Klíč, prostor klíčů Klíčem rozumíme uspořádanou dvojici kk = (ee, dd), kde ee je šifrovací klíč - parametr šifrovací metody a dd je dešifrovací klíč - parametr dešifrovací metody. Množina všech klíčů tvoří tzv. prostor klíčů, značíme KK. 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. systematickým prohledáním prostoru klíčů. Šifrování Proces transformace otevřeného textu do zašifrovaného textu. 5

Zjednodušeně řečeno, lze šifrování chápat jako exaktně definovaný proces převedení otevřeného textu do nesrozumitelné podoby zašifrovaného textu. Šifrovací transformace/funkce Šifrovací transformací (funkcí) rozumíme vzájemně jednoznačné zobrazení EE ee : MM CC definované pro všechny (šifrovací) klíče z prostoru klíčů KK. Vzájemná jednoznačnost zobrazení EE ee je nutnou podmínkou pro možnost zpětného dešifrování. Dešifrování Dešifrování je inverzní proces k šifrování, tedy jde o proces převedení zašifrovaného textu do podoby otevřeného textu. Dešifrovací transformace/funkce Dešifrovací transformací (funkcí) rozumíme zobrazení DD dd : CC MM, které je inverzní k zobrazení EE ee : MM CC, kde (ee, dd) KK. Šifrovací systém Uspořádaná trojice (E, DD, KK), kde KK = {(ee, dd)} je prostor klíčů, E = {EE ee (ee, dd) KK} je množina šifrovacích transformací, DD = {DD dd (ee, dd) KK} je množina dešifrovacích transformací, tvoří šifrovací systém, jestliže kk = (ee, dd) KK mm MM DD dd EE ee (mm) = mm Interpretace - každý klíč (ee, dd) jednoznačně definuje dvojici transformací EE ee a DD dd (šifrovací a jí příslušnou dešifrovací), které jsou navzájem inverzní. Kerchoffův princip Bezpečnost šifrovacího systému nesmí záviset na utajení (de)šifrovacího algoritmu, ale pouze na utajení klíče. Symetrické (klasické) šifrovací metody Šifrovací metody, kde dešifrovací klíč je výpočetně snadné odvodit ze šifrovacího klíče. Asymetrické šifrovací metody (s veřejným klíčem) Šifrovací metody, kde dešifrovací klíč je výpočetně složité 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. Zjednodušeně řečeno, šifrování využívá tzv. substituční schémata, která přiřazují znakům otevřené abecedy znaky šifrové abecedy (resp. slova nad šifrovou abecedou). 6

Monoalfabetické šifry Šifrovací metody využívající pouze jedno substituční schéma. (Každý znak otevřené abecedy je zašifrován vždy na jeden pevně daný znak šifrové abecedy (resp. slovo nad šifrovou abecedou). Homofonní šifry Šifrovací metody, kde znaky šifrového textu mají teoreticky stejnou frekvenci výskytu. Polyalfabetické šifry Šifrovací metody využívající více substitučních schémat, která systematicky (tj. dle exaktně definovaných pravidel) střídají... Symetrické šifry, transpozice a substituce Jednoduchá transpozice Šifrovací klíč: ππ SS dd, kde dd NN {,}. Nejprve je otevřený text rozdělen na bloky dd po sobě jdoucích znaků, tj. mm = mm () mm (kk), kde mm (ii) (ii) (ii) = mm mmdd je ii-tý blok. Následně každý blok mm (ii) zašifrujeme pomocí transformace: (ii) (ii) (ii) EE ππ mm mmdd = mmππ() (ii) mm ππ(dd), ii =, kk. Dešifrovací klíč: ππ SS dd, kde ππ označuje inverzní permutaci k ππ. Nejprve zašifrovaný text rozdělíme na bloky dd po sobě jdoucích znaků, tj. cc = cc () cc (kk), kde cc (ii) (ii) (ii) = cc ccdd je ii-tý blok. Následně každý blok cc (ii) dešifrujeme pomocí transformace: (ii) (ii) (ii) DD ππ cc ccdd = ccππ () (ii) cc ππ (dd), ii =, kk. Poznámky Transpoziční šifra je bloková šifra délky dd, tj. šifra, která nejprve rozdělí otevřený text na bloky dd po sobě jdoucích znaků. Každý blok pak zašifruje jako celek. Pokud délka otevřeného textu není násobkem čísla d, doplníme text 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 ππ = 3 4 5 3 5 4. 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 IRMUDUEMNT, který vzniknul zašifrováním otevřeného textu pomocí jednoduché transpozice s šifrovacím klíčem ρρ = (4)(35). (tentokrát je šifrovací klíč zapsán ve tvaru součinu disjunktních cyklů) Dešifrovací klíč ρρ = (4)(35) 7

zašifrovaný text: I R M U D U E M N T otevřený text: r u d i m e n t u m Afinní šifra Šifrovací klíč: (aa, bb), kde aa, bb ZZ 6, NNNNNN(aa, 6) = Šifrovací funkce: EE (aa,bb) (xx xx nn ) = cc cc nn, kde xx ii je číselná reprezentace i-tého znaku otevřeného textu, cc ii = (aa xx ii + bb) mod 6 je číselná reprezentace i-tého znaku šifrového textu. Dešifrovací klíč: (aa, bb), kde aa je inverzní prvek k aa mod 6 Dešifrovací funkce: DD aa,bb (cc cc nn ) = xx xx nn, kde xx ii = (aa (cc ii bb) mod 6). Poznámky Zdůvodněte požadavek NNNNNN(aa, 6) =. Při šifrování nejprve převedeme otevřený text mm = mm mm nn na číselný řetězec xx xx nn např. tak, že každý znak nahradíme jeho pořadím v rámci uvažované otevřené abecedy - viz tabulka č.. Analogicky, při dešifrování nejprve převedeme zašifrovaný text na číselný řetězec cc cc nn. Příklad Uvažujte afinní šifru s šifrovacím klíčem ee = (aa = 7, bb = 4). a) Zašifrujte text vista. Průběh šifrování lze zapsat následovně: CC ii =(7xx ii +4 mmmmmm 6) vista (,8,8,9,) cc = (7,4,8,9,4) RESJY b) Dešifrujte text BOWLC. Nejprve určíme aa jako nejmenší nezáporný zbytek modulo 6, který vyhovuje kongruenci 7aa (mmmmmm 6). Např. z tabulky č. 5 určíme, že aa = 3 a tedy dešifrovací funkce má tvar xx ii = (3(CC ii 4) mmmmmm 6), tj. xx ii = (3CC ii + mmmmmm 6) Průběh dešifrování lze zapsat následovně: xx ii =(3CC ii + mmmmmm 6) BOWLC (,4,,,) mm = (7,4,6,3,4) regno Jednoduchá substituce Šifrovací klíč: ππ SS 6 Šifrovací funkce: EE ππ (mm mm nn ) = ππ(mm ) ππ(mm nn ) Dešifrovací klíč: ππ SS 6, kde ππ označuje inverzní permutaci k ππ Šifrovací funkce: DD ππ (cc cc nn ) = ππ (cc ) ππ (cc nn ) Poznámky V případě monoalfabetických šifer tvoří šifrovací klíč tzv. substituční schéma, což je vzájemně jednoznačné zobrazení otevřené abecedy na šifrovou abecedu. V případě jednoduché substituce je toto zobrazení definováno permutací. 8

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 (kk, textový_řetezec), kde kk ZZ 6. Číslo kk definuje pozici (číslujeme od ), odkud začneme postupně umisťovat znaky textového řetězce (opakující se znaky vynecháváme). V další fázi postupně doplníme chybějící znaky. Příklad Otevřený text aqua fontis zašifrujte pomocí jednoduché substituce. Jako šifrovací klíč použijte: a) ππ = 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 D I K W J T Y V B Z X P G R A S U L O M C F Q E N H Schématický 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) (7, regnum Bohemiae) Nejprve na základě klíče vygenerujeme příslušnou permutaci definující substituční schéma. Od 7. znaku (tj. od písmene h) doplňujeme text regnumbohemiae (opakující se znaky vynecháme). V další fázi postupně doplníme chybějící znaky otevřené abecedy. ππ = 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 S T V W X Y Z R E G N U M B O H I A C D F J K L P Q otevřený text: a q u a f o n t i s zašifrovaný text: S I F S Y O B D E C Hillova šifra Šifrovací klíč: dd HH = h ii,jj, kde h ii,jj= ii,jj ZZ 6 Nejprve rozdělíme otevřený text mm na bloky dd po sobě jdoucích znaků, tj. mm = mm () mm (kk), kde mm (ii) (ii) (ii) = mm mmdd. Následně každý blok mm (ii), ii =,, kk převedeme na číselný řetězec xx (ii) (ii) (ii) = xx,, xxdd, který zašifrujeme pomocí transformace: YY (ii) = xx (ii) HH (mmmmmm 6) YY (ii) (ii) (ii) = YY,, YYdd je číselný vektor reprezentující ii-tý blok zašifrovaného textu YY = YY () YY (kk). Dešifrovací klíč: HH, tj. matice inverzní k HH modulo 6 Dešifrování probíhá zcela analogicky k šifrování, tj. šifrový text rozdělíme na bloky YY (ii), ii =,, kk, délky dd, které dešifrujeme pomocí inverzní transformace: xx (ii) = YY (ii) HH (mmoooo 6). Poznámky Hillova šifra je bloková šifra délky dd, tj. pokud není délka otevřeného textu násobkem čísla dd, doplníme ho libovolnými znaky na délku rovnou nejbližšímu většímu násobku čísla dd. Zřejmou podmínkou pro jednoznačné dešifrování je existence inverzní matice HH (modulo 6). Lze ukázat, že nutnou a postačující podmínkou je v tomto případě NNNNNN(det HH, 6) =, kde det HH označuje determinant matice HH. Připomeňme, že platí HH HH II (mmmmmm 6). 9

Výpočet HH se provádí v soustavě ZZ 6 a lze využít standardní postupy, např. Gaussovu metodu, determinanty apod. Příklad 3 Uvažujte Hillovu šifru s klíčem HH = 5 7. 3 a) Zašifrujte text tarsus. Průběh šifrování lze zapsat následovně: Číselná reprezentace otevřeného textu: tarsus (9,,7,8,,8), ze které sestavíme číselné vektory xx (ii) délky 3 (řád šifrovací matice). Následně šifrujeme dle vztahu YY (ii) = xx (ii) HH (mmmmmm 6). 9 7 64 79 46 3 5 7 = 8 8 3 5 57 536 6 6 9 GTAMYQ. 4 6 b) Dešifrujte text QASNAL. Průběh dešifrování lze popsat následovně nejprve určíme dešifrovací klíč, tj. matici HH. 3 3 9 9 5 7 ~ 5 8 3 ~ ~ 7 3, tedy HH = 7 3 3 3 5 9 5 9 Dále dostáváme QASNAL (6,,8,3,,), tedy 6 8 9 6 466 534 7 3 = 3 5 9 45 346 395 4 4 6 myopie 5 8 4 Vigenèrova šifra Šifrovací klíč: ππ,, ππ dd SS 6 Šifrovací funkce: EE (ππ,,ππ dd )(mm mm nn ) = cc cc nn, kde cc ii = ππ ii mmmmmm dd (mm ii ) Dešifrovací klíč: Dešifrovací funkce: ππ,, ππ dd SS 6, kde ππ ii označuje inverzní permutaci k ππ ii (cc cc nn ) = mm mm nn, kde mm ii = ππ ii mmmmmm dd(cc ii ) DD ππ,,ππ dd Poznámky Vigenèrova šifra je polyalfabetická substituční šifra, jejíž klíč tvoří d cyklicky se opakujících substitučních schémat (šifrových abeced) definovaných permutacemi ππ,, ππ dd. Speciálním případem je šifrování pomocí tzv. Vigenèrova čtverce, jehož první řádek tvoří otevřená abeceda a následující řádky reprezentují substituční abecedy vzniklé pouhým posunutím (viz tab. č. 4 v příloze). Šifrovací klíč tak tvoří vektor (kk,, kk dd ), kk ii ZZ 6 a šifrovací funkce má tvar EE (kk,,kk dd )(mm mm nn ) = cc cc nn, kde cc ii = (mm ii + kk ii mmmmmm dd ) mmmmmm 6. Dešifrovací funkce má tvar mm ii = (cc ii kk ii mmmmmm dd ) mmmmmm 6. Příklad Uvažujte Vigenèrovu š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.3. Binární blokové šifry Ze zřejmých důvodů převládají v současné době šifrovací metody, které používají binární otevřenou i šifrovací abecedu, tj. AA = BB = {,} a tedy šifrují bitový řetězec reprezentující otevřený text na bitový řetězec tvořící šifrový text (obvykle stejné délky). Poznámky V rámci binárního šifrování se používají standardní bitové (logické) operace, zejména pak tzv. vylučující nebo (or exklusive, resp. jen xor) označované. Platí = = ; = = Bitové operace lze rozšířit na operace mezi bitovými řetězci stejné délky tak, že se provedou bitové operace mezi sobě odpovídajícími bity obou bitových řetězců. Např. =. Jsou-li xx, yy, zz {,} nn, potom operace je asociativní, komutativní, má neutrální prvek (nulový bitový řetězec délky nn) a navíc xx xx =. Pro převod otevřeného textu na binární řetězec budeme využívat ASCII tabulku (viz tab. č. v příloze). Vernamova šifra Vernamova šifra je bloková šifra, tj. nejprve rozdělíme binární reprezentaci otevřeného textu na po sobě jdoucí bitové řetězce délky nn, tj. mm = mm () mm (kk), kde mm (ii) (ii) (ii) (ii) = mm mmnn, mmjj {,}. Každý z bitových řetězců mm (ii) zašifrujeme na bitový řetězec cc (ii) délky nn, tj. výsledný zašifrovaný text má tvar cc = cc () cc (kk), kde cc (ii) (ii) (ii) (ii) = cc ccnn, ccjj {,}. Šifrovací klíč: ee = (ee ee dd ), kde ee ii {,} Šifrovací funkce: cc (ii) = mm (ii) ee, kde je symbol pro operaci xor. Dešifrovací klíč: ee = (ee ee nn ), kde ee ii {,} Dešifrovací funkce: mm (ii) = cc (ii) ee Poznámky Snadno se přesvědčíme, že dešifrování probíhá korektně, neboť cc (ii) ee = mm (ii) ee ee = mm (ii) (ee ee) = mm (ii) = mm (ii) Šifrovací klíč lze zadat pomocí klíčového slova, jehož binární reprezentace tvoří skutečný klíč ee.

Příklad Uvažujte Vernamovu šifru s klíčovým slovem ico. a) Zašifrujte text secus Bitová reprezentace klíče: ico = ( ) otevřený text: s e c u s binární reprezentace: klíč: zašifrovaný text: b) Dešifrujte text () zašifrovaný text: klíč: binární reprezentace: otevřený text: f o r s Důležitou třídu šifer tvoří tzv. Feistelovy šifry, jejichž speciálním případem jsou např. dobře známé šifry DES, NDS. Jde o blokové šifry, které nejprve rozdělí šifrovaný text na po sobě jdoucí bitové řetězce délky nn. Každý takový bitový řetězec je pak v několik na sebe navazujících fázích zašifrován na bitový řetězec délky nn. Feistelova šifra Feistelova šifra je bloková šifra. Nejprve proto binární reprezentaci otevřeného textu mm rozdělíme na po sobě jdoucí bitové řetězce mm (ii) délky nn, tj. mm = mm () mm (kk). Každý z bitových řetězců mm (ii) pak zašifrujeme v dd na sebe navazujících fázích na bitový řetězec cc (ii) délky nn, tj. výsledný zašifrovaný text má tvar cc = cc () cc (kk). Šifrovací klíč: (ff,, ff dd ), kde ff ii : {,} nn {,} nn Označme mm (ii) (ii) (ii) (ii) (ii) = mm, mm bitový řetězec délky nn rozdělený na dva podřetězce mm, mm, každý délky nn. Vlastní šifrovací proces probíhá následovně:. fáze: mm (ii), mm (ii) ff mm (ii), mm (ii), (ii) (ii) ff (ii) (ii). fáze: mm, mm mm, mm3, (ii) (ii) ff dd (ii) (ii) (ii) d. fáze: mm dd, mmdd mm dd, mmdd+, kde mmdd+ závěr: cc (ii) (ii) (ii) = mm dd+, mmdd. kde mm (ii) = mm (ii) ff mm (ii) kde mm3 (ii) = mm (ii) ff mm (ii) (ii) (ii) = mm dd ffdd mm dd Dešifrovací klíč: (ff dd,, ff ) Označme cc (ii) (ii) (ii) (ii) (ii) = cc, cc bitový řetězec délky nn rozdělený na dva podřetězce cc, cc, každý délky nn. Vlastní dešifrování probíhá analogicky k šifrování, pouze klíče používáme v obráceném pořadí.. fáze: cc (ii), cc (ii) ff dd cc (ii), cc (ii), kde cc (ii) = cc (ii) ffdd cc (ii)

. fáze: cc (ii), cc (ii) ff dd cc (ii), cc3 (ii), (ii) (ii) ff (ii) (ii) (ii) d. fáze: cc dd, ccdd cc dd, ccdd+, kde ccdd+ závěr: (ii) (ii) mm = cc dd+, ccdd kde cc3 (ii) = cc (ii) ffdd cc (ii) (ii) (ii) = cc dd ff cc dd Poznámka Celá řada dnes používaných šifer patří do třídy Feistelových šifer. Jako příklady lze uvést RC5, RC6, DES (DEA-), 3DES apod. DES (Data Encryption Standard) Vyvíjeno firmou IBM (ve spolupráci s NSA) od 7. let století. Šifrují se vždy 64 bitové bloky (tj. nn = 64) v 6 fázích (tj. dd = 6). Klíč tvoří 56 bitový řetězec s tím, že klíče pro jednotlivé fáze jsou různé 48 bitové podřetězce výše zmíněného 56 bitového klíče. NDS (New Data Seal) Šifrují se 8 bitové bloky (tj. nn = 8), používá se 6 fází (tj. dd = 6) a klíč tvoří pro všechny kroky zobrazení ff: {,} 8 {,} 8. Snadno spočteme, že existuje 48 možností pro volbu ff. Pro představu, jde o číslo: 3376737374876688669959644466975484333454754655388678 9893974593463688779698989494955954999588538644883 6387736739969759775389656796576383846756876798646975668 38943384767475864585363548875758954658867553993933855943 3338966834468497478656456949485676353635877856593369784634 55859864776759436378468573575983553645944369763338737 568478975577693334696785458656697935459976835998638555 6638943733554363543396464538478649548935558536595963656 Příklad Uvažujte dvou krokovou Feistelovu šifru s klíčem (ff, ff ), kde ff (xx, xx, xx 3, xx 4 ) = (xx, xx,, xx xx 3 xx 4 ), ff (xx, xx, xx 3, xx 4 ) = (xx xx 4,, xx xx 3, xx xx ). 4 a) Zašifrujte text kkkk, b) dešifrujte binární řetězec. (pro binární reprezentaci otevřeného textu užijte ASCII kód). Řešení. a) kk = (), tedy mm () () () = mm, mm = ()() (,) ff (,) ff (,), tedy cc () = (). ss = (), tedy mm () () () = mm, mm = ()() ff ff (,) (,) (,), tedy cc () = (). Text kkkk byl zašifrován na bitový řetězec. b) cc =, tedy cc () = a cc () = ff ff cc () : (,) (,) (,), tedy mm () = () = aa cc () ff ff : (,) (,) (,), tedy mm () = () = ee Binární řetězec je dešifrován na text ae. 3

.4. Asymetrická šifra RSA RSA šifra Bloková asymetrická šifra (pojmenovaná po autorech Rivest, Shamir, Adleman), která je vyvíjena od roku 977 a kterou lze dnes považovat prakticky za nejbezpečnější šifru. Nejprve je binární reprezentace otevřeného textu mm rozdělená na po sobě jdoucí bitové řetězce mm ii délky nn, tj. mm = mm mm kk. Každý z bitových řetězců mm ii je pak zašifrován na bitový řetězec cc ii délky nn, tj. výsledný zašifrovaný text má tvar cc = cc cc kk. Šifrovací klíč: (nn, ee), kde nn, ee jsou vhodně zvolená velká přirozená čísla Šifrovací transformace: cc ii = (mm ee ii mmmmmm nn) Dešifrovací klíč: (nn, dd), kde dd je vhodně zvolené přirozené číslo Dešifrovací transformace: mm = cc dd ii mmmmmm nn Poznámky Přirozené číslo nn má řádově několik stovek cifer a je součinem dvou dostatečně velkých prvočísel pp, qq, tj. nn = pppp. Číslo ee je zvoleno tak, že platí NNNNNN ee, φφ(nn) =, kde φφ označuje Eulerovu funkci (vzhledem k volbě nn je φφ(nn) = (pp )(qq )). Číslo dd je pak inverzní prvek k ee modulo φφ(nn), tj. dddd mmmmmm (pp )(qq ). Nyní snadno nahlédneme, že dešifrování skutečně funguje, tj. dešifrovací transformace je inverzní k šifrovací transformaci. Zřejmě platí cc dd ii = (mm ee ii ) dd = mm dddd +tt(pp )(qq ) tt(pp )(qq ) ii = mm ii = mmii mm ii. Z Eulerovy věty dostáváme mm ii tt(pp )(qq ) = mmii (pp ) tt(qq ) (mmmmmm pp) mmii tt(pp )(qq ) = mmii (qq ) tt(pp ) (mmmmmm qq), tedy cc dd ii mm ii (mmmmmm pp) cc dd ii mm ii (mmmmmm qq) a proto cc dd ii mm ii (mmmmmm nn). Zjednodušeně řečeno, bezpečnost šifrovací metody RSA se odvíjí od výpočetní složitosti nalezení kanonického rozkladu velkého přirozeného čísla nn. Znalost tohoto rozkladu je totiž nezbytná pro výpočet dešifrovacího klíče dd jako řešení kongruence dddd mmoooo φφ(nn). Příklad Uvažujte RSA šifrování s veřejným klíčem (nn, ee) = (68 95, 3 9). a) zašifrujte text spinus, b) dešifrujte text 59 339 9 545. Řešení. a) Nejprve textový řetězec převedeme na číselný pomocí např. tab. č. ; bloky tvoří tři znaky) spinus = (8,5,8,3,,8), tj mm = mm mm = 858,38. cc = (8 58 3 9 mmmmmm 68 95) cc = 3 997 cc = (3 8 3 9 mmmmmm 68 95) cc = 57 74 tedy cc = cc cc = 3 997 57 74 b) Vzhledem k nepříliš velké hodnotě nn určíme snadno kanonický rozklad nn = 599 449 a tedy i dešifrovací klíč dd jako řešení kongruence 39dd mmmmmm φφ(nn), tj. dd = 89 5. Zašifrovaný text 59 339 9 545 rozdělíme na bloky cc = cc cc = 59 339,9 545, tedy mm = (59 339 89 5 mmmmmm 68 95) mm = 98 4

mm = (9 545 89 5 mmmmmm 68 95) mm = 88. mm = mm mm = 9 8 8 8 = uuuuuuuuuuuu. Úvod do kódování Cílem následujících části textu je seznámit čtenáře se dvěma tématy z oblasti kódování. Jednak s elementárními výsledky z oblasti bezeztrátových kompresních metod, zejména pak s Huffmanovou konstrukcí nejkratšího kódu a s aritmetickými kódy (nultého řádu), dále pak s elementárními výsledky z teorie detekčních, resp. opravných kódů (error-correcting codes), zejména pak s lineárními kódy... Základní pojmy Zdrojová abeceda Konečná množina AA = {aa,, aa rr }, 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,,, 9 a dalšími speciálními symboly). Kódová abeceda Konečná množina BB = {bb,, bb nn }, 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). Má-li kódová abeceda nn znaků, mluvíme o nn-znakovém kódu. Speciálně, kdy nn =, tj. kódová abeceda obsahuje dva znaky (nejčastěji, ), mluvíme o binárním kódu/kódování. V případě nn = 3 mluvíme o ternárním kódování apod. Kódování Kódováním rozumíme libovolné prosté zobrazení KK zdrojové abecedy AA do množiny BB (množina všech konečných slov nad abecedou BB), tj. KK: AA BB. Poznámka Kódování lze interpretovat jako předpis, který každému zdrojovému znaku aa AA přiřadí slovo KK(aa) BB vytvořené ze znaků kódové abecedy. Slovo KK(aa) nazýváme kódové slovo příslušné zdrojovému znaku a. Vlastnost K je prosté zajišťuje přirozený požadavek, aby různým znakům zdrojové abecedy odpovídaly různá kódová slova. Kód Kódem rozumíme množinu všech kódových slov, tj. množinu KK = {KK(aa) BB aa AA }. Poznamenejme, že v další části skript nebudeme zcela 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. 5

Kódování zdrojových zpráv Je-li KK: AA BB kódování, potom zobrazení KK : AA BB definované pro libovolné slovo aa ii aa iiii nad A vztahem KK (aa ii aa iiii ) = KK(aa ii ) KK(aa iiii ) (tj. zřetězení kódových slov KK(aa ii ),, KK(aa iiii )) nazýváme kódováním zdrojových zpráv. Poznámka Přirozeným požadavkem je, aby také zobrazení KK bylo prosté (zdůvodněte). Tato vlastnost však není bezprostředním důsledkem skutečnosti, že zobrazení KK je prosté. Tento fakt vede k následující definici. 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 Kód nazýváme prefixovým kódem, jestliže žá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. Počet znaků kódového slova nazýváme délkou blokového kódu. Poznámky Každý prefixový kód je zřejmě jednoznačně dekódovatelný a zakódované zprávy lze dekódovat průběžně znak po znaku, tj. není nutné čekat na přijetí celé zprávy. (Zdůvodněte!) Prefixové kódy proto tvoří nejdůležitější třídu kódů. Každý blokový kód je prefixový a tedy i jednoznačně dekódovatelný. (Zdůvodněte!) S pochopitelných důvodů se obvykle snažíme zkonstruovat kódy, které mají co nejkratší kódová slova. Přirozeně tak vzniká otázka, jaké podmínky musí splňovat délky kódových slov u prefixových kódů. Odpověď dává následující tvrzení. Tvrzení - Kraftova nerovnost Nechť AA je rr-znaková zdrojová abeceda. Potom existuje nn-znakový prefixový kód zdrojové abecedy AA rr s délkami kódových slov dd,, dd rr právě tehdy, jestliže nn dd ii ii=. Důkaz. Je-li rr =, musí existovat alespoň jedno slovo (nad nn-znakovou abecedou) délky dd, tj. nn dd, odtud nn dd. Je-li rr =, musí být počet všech slov délky dd alespoň o větší, než počet slov délky dd, které mají prefix KK(aa ), tj. nn dd dd + nn dd, tedy nn dd + nn dd. Analogicky pro obecné rr musí být počet slov délky dd rr alespoň o větší, než počet slov délky dd rr, která mají prefixy KK(aa ),, KK(aa rr ), tj. nn dd rr dd + + nn dd rr dd rr + nn dd rr. Odtud nn dd + + nn dd rr + nn dd rr. Poznámka rr V případě binárního kódování má Kraftova nerovnost zřejmě tvar dd ii ii=. 6

Tvrzení - McMillanova věta Pro každé jednoznačně dekódovatelné kódování platí Kraftova nerovnost. Poznámky Důsledkem výše uvedených tvrzení je skutečnost, že se lze bez újmy na obecnosti omezit pouze na prefixové kódy. Zjednodušeně řečeno jsou prefixové kódy stejně obecné jako všechny jednoznačně dekódovatelné kódy, avšak mají navíc tu dobrou vlastnost, že je lze dekódovat průběžně (není třeba čekat na celou zprávu). Z těchto důvodů se v další části skript omezíme pouze na prefixové kódy. Kraftova nerovnost dává odpověď na otázku existence prefixového kódu s předepsanými délkami kódových slov. Z praktického hlediska je rozumné požadovat, aby kódová slova nebyla přiřazována znakům zdrojové abecedy nahodile, ale tak, že znaky s vysokou četností (frekvencí, pravděpodobností) výskytu budou zakódována na kratší slova než znaky s nízkou četností. Z těchto důvodů budeme u zdrojové abecedy obvykle uvádět i četnosti jednotlivých znaků. Běžně tak budeme psát AA = ZZZZZZZZ aa rr aa rr, kde pp ii >, ii= pp ii =, resp. AA = aa aa rr. PPPPPP. pp pp rr pp pp rr Definice - střední délka kódového slova aa aa rr Nechť AA = pp pp rr je zdrojová abeceda, kde pp ii označuje četnost znaku aa ii a dd ii délku dd dd rr rr kódového slova KK(aa ii ), potom dd = ii= dd ii pp ii nazýváme střední délkou kódového slova. Definice - nejkratší kód Nejkratším nn-znakovým kódem zdrojové abecedy AA rozumíme takový nn-znakový prefixový kód zdrojové abecedy, který má ze všech nn-znakových prefixových kódů dané abecedy nejmenší střední délku kódového slova. Poznámky Je zřejmé, že nejkratší kód není určen jednoznačně a to nejenom z důvodu možné záměny kódů jednotlivých znaků kódové abecedy (např. u binárního kódu záměna symbolů a ). Návod jak zkonstruovat nejkratší kód dává následující Huffmanova konstrukce nejkratšího kódu... Huffmanova konstrukce Huffmanova konstrukce nejkratšího kódu - binární varianta Konstrukce nejkratšího binárního kódu probíhá ve dvou na sebe navazujících fázích - redukce a zpětná rekonstrukce. Fáze redukce spočívá v opakované redukci (nahrazení) dvou nejméně četných znaku zdrojové abecedy jedním znakem dle schématu: Je-li AA = aa aa rr pp pp zdrojová abeceda seřazená dle četnosti výskytu znaku (tj. pp pp rr ), rr potom redukovaná abeceda má tvar AA RR = aa aa rr aa pp pp rr pp, kde pp = pp rr + pp rr. 7

Nově vzniklou redukovanou abecedu AA RR opakovaně redukujeme (po opětovném seřazení znaků dle četností) do okamžiku, než dostaneme abecedu se dvěma znaky (pro tuto abecedu již umíme sestrojit nejkratší binární kód). Fáze zpětné rekonstrukce - základem je následující tvrzení: Jestliže {KK(aa ),, KK(aa rr ), KK(aa )} je nejkratší kód redukované abecedy AA RR = {aa,, aa rr, aa }, potom {KK(aa ),, KK(aa rr ), KK(aa ), KK(aa )} je nejkratší kód neredukované abecedy AA = {aa,, aa rr, aa rr, aa rr }. Poznámky Huffmanovu konstrukci nejkratšího kódu znázorníme pomocí binárního kořenového stromu. Při jeho konstrukci budeme využívat následující standardizovaný postup: Nejprve zapíšeme znaky zdrojové abecedy (s jejich četnostmi výskytu) do sloupce, přičemž znaky jsou seřazeny nerostoucím způsobem dle četnosti výskytu. Každý znak původní zdrojové abecedy bude tvořit list výsledného stromu. Následně opakujeme redukce dvou nejméně pravděpodobných znaků, přičemž redukovaný znak vytvoří nový vrchol konstruovaného stromu. Tento vrchol umístíme na úroveň vrcholu - redukovaného znaku umístěného výše a spojíme hranou s vrcholy reprezentujícími redukované znaky. Redukce ukončíme v situaci, kdy provedeme redukci abecedy mající již jen dva znaky. Touto poslední redukcí vznikne vrchol kořen. Zpětná rekonstrukce spočívá v přiřazení nejkratšího kódu jednotlivým znakům (tj. listům) původní zdrojové abecedy následovně: z každého uzlu, který není listem, vychází dvě hrany k uzlům, jejichž redukcí uzel vzniknul. Horní hraně přiřadíme znak, spodní znak. Kódové slovo reprezentující znak původní neredukované abecedy pak tvoří binární slovo, které vznikne zřetězením symbolů na cestě od kořene k listu. Výsledkem je tedy sestrojení substitučního schématu zapsaného v tabulce aa aa rr KK(aa ) KK(aa rr ), kde KK(aa ii) je kódové slovo reprezentující znak aa ii. Poznamenejme, že pokud budeme dodržovat výše uvedená pravidla standardizované konstrukce, bude výsledný kód jednoznačný. Této skutečnosti budeme později využívat, zejména u adaptivních kompresních metod, kde je jednoznačnost zásadní pro možnost správného dekódování (dekomprese). Příklad Pomocí Huffmanovy konstrukce nalezněte nejkratší binární kód zdrojové abecedy aa aa aa 3 aa 4 aa 5 aa 6 aa 7 AA = 9 4 3 3 3 3 3 3 3 3, spočtěte střední délku kódového slova. 3 8

Řešení. a 6 () 9 a (9) a (4) a 5 (3) 7 3 a 7 (3) 6 a 4 () a 3 () 3 3 Substituční schéma má tvar aa aa aa 3 aa 4 aa 5 aa 6 aa 7. Střední délka kódového slova: dd = ( + 9 + 3 4 + 3 3 + 3 3 + 4 + 4 ) = 5 3. Huffmanova konstrukce nejkratšího kódu - obecná varianta Konstrukce nejkratšího nn-árního kódu (BB = {bb,, bb nn } je kódová abeceda) probíhá zcela analogicky binárnímu případu, tj. ve dvou na sebe navazujících fázích - redukce a zpětná rekonstrukce. Fáze redukce - opakovaně provádíme redukce, přičemž u první provedeme redukci posledních ss nejméně četných znaků zdrojové abecedy, kde ss {,, nn}, navíc s volíme tak, že musí platit (nn ) (rr ss). Ve všech následujících fázích již redukujeme právě nn nejméně četných znaků, přičemž redukce ukončíme v situaci, kdy zredukujeme abecedu s právě nn znaky (pro tuto abecedu již umíme sestrojit nejkratší nn-ární kód). Výše popsanou opakovanou redukci znázorníme pomocí n-árního kořenového stromu (listy reprezentují znaky zdrojové abecedy, kořen pak poslední redukci). Při tvorbě stromu dodržujeme stejná pravidla jako u konstrukce binárního stromu (umístění vrcholů, spojení hranami). Základem zpětné rekonstrukce je následující tvrzení: Je-li {KK(aa ),, KK(aa rr ss ), KK(aa )} je nejkratší kód redukované abecedy AA RR = {aa,, aa rr ss, aa }, potom {KK(aa ),, KK(aa rr ss ), KK(aa )bb,, KK(aa )bb ss } je nejkratší kód neredukované abecedy AA = {aa,, aa rr ss,, aa rr }. Fáze zpětné rekonstrukce tedy spočívá v přiřazení nejkratšího n-arního kódu jednotlivým znakům (tj. listům) původní zdrojové abecedy následovně: z každého uzlu, který není listem, vychází n hran k uzlům, jejichž redukcí uzel vzniknul. Horní hraně přiřadíme znak bb, další znak bb atd.. Kódové slovo reprezentující znak původní neredukované abecedy pak tvoří slovo nad abecedou B, které vznikne zřetězením symbolů na cestě od kořene k listu. Výsledkem této fáze je sestrojení substitučního schématu aa aa rr KK(aa ) KK(aa rr ). Příklad Pomocí Huffmanovy konstrukce nalezněte nejkratší čtyřznakový kód zdrojové abecedy aa aa aa 3 aa 4 aa 5 aa 6 aa 7 aa 8 aa 9 aa aa aa AA = 7 55 3 55 6 55 3 55 9 55 55 6 55 55 8 55 55 55 6, spočtěte střední 55 délku kódového slova. Řešení. 9

Nejprve uspořádáme znaky zdrojové abecedy nerostoucím způsobem dle četnosti výskytu, následně určíme ss - počet znaků redukovaných při první redukci. Jelikož nn = 4, rr = a musí platit (nn ) (rr ss), tj. (3) ( ss), budeme v první fázi redukovat ss = 3 nejméně četné znaky. V následujících fázích zredukujeme vždy nn = 4 nejméně četné znaky. Strom znázorňující průběh redukce má následující tvar. a 5 (9) a 9 (8) a (7) a 3 (6) a 7 (6) 3 5 3 3 a (6) 3 a (3) 3 a 4 (3) 3 a 6 () 3 a 8 () 33 a () 33 a () 33 5 3 3 Výsledné substituční schéma má tvar aa aa aa 3 aa 4 aa 5 aa 6 aa 7 aa 8 aa 9 aa aa aa 3 3 3 33 33 33 3. Pro střední délku kódového slova dostáváme dd = 98 55,78.3. Aritmetické kódy metoda DFWLD V další části se seznámíme s myšlenkou tzv. aritmetických kódů (konkrétně metodou DFWLD), které se řadí k bezeztrátovým kompresním metodám (nultého řádu). Aritmetické kódy, metoda DFWLD (dyadic fraction with least denominator) Zdrojová abeceda AA = aa aa rr rr pp pp, kde pp ii >, ii= pp ii =, navíc předpokládáme, že pp pp rr. rr Dále označme xx = aa ii aa iinn AA slovo určené k zakódování (kompresi). Obecný postup aritmetického kódování:. Pro jednotlivé prefixy kódovaného slova xx postupně konstruujeme posloupnost do sebe vnořených intervalů,) II aa ii II aa ii aa ii II aa ii aa iinn, které jednoznačně reprezentují daný prefix (přesněji intervaly reprezentující všechna slova nad AA mající pevnou délku tvoří rozklad intervalu,)).. Z intervalu II aa ii aa iinn, který odpovídá kódovanému slovu, vybereme tzv. reprezentanta, tj. číslo RR II aa ii aa iinn, které jednoznačně charakterizuje daný interval.

3. Kód slova xx = aa ii aa iinn bude tvořit vhodná binární reprezentace čísla RR. Poznámka Výše popsaný postup je společný aritmetickým kódům obecně a jednotlivé metody se v podstatě liší pouze způsobem výběru reprezentanta a detaily souvisejícími s jeho binární reprezentací. V případě metody DFWLD volíme (jak plyne z názvu - dyadic fraction with least denominator) reprezentanta ve tvaru dyadického zlomku RR = ss II aa tt ii aa iinn s nejmenším jmenovatelem. Detaily DFWLD konstrukce intervalů, výpočtu reprezentanta a jeho binárního zápisu: i. Konstrukce do sebe vnořených intervalů jednotlivých prefixů aa ii, aa ii aa ii,, aa ii aa iijj,, aa ii aa iinn Každý interval II aa ii aa iijj, jj =,, nn je jednoznačně určen svou dolní mezí αα jj a délkou ll jj, tj. ii. iii. II aa ii aa iijj = αα jj, αα jj + ll jj. Při konstrukci postupujeme v podstatě indukcí, tj. na základě αα jj a ll jj vypočteme αα jj+ a ll jj+ následovně αα jj+ = αα jj + ll jj kk<iijj+ pp kk a ll jj+ = ll jj pp iijj+, kde αα =, ll = (odpovídá základnímu intervalu,)). Výpočet reprezentanta RR Hledáme dyadický zlomek RR = ss αα nn, αα tt nn + ll nn ) s nejmenším jmenovatelem. Číslo tt NN + určíme jednoznačně ze zřejmých nerovnic ll tt nn < tt. Následně určíme hodnotu ss NN z nerovnic αα nn ss < αα tt nn + ll nn. Těmto nerovnicím vždy vyhovuje alespoň jedna hodnota ss, ale nejvýše dvě po sobě jdoucí (v tom případě vždy zvolíme ss sudé zdůvodněte!). Binární zápis reprezentanta RR Jelikož RR = ss,), zřejmě ss < tt tt a tedy RR lze zřejmě zapsat ve tvaru RR = (, cc tt cc ), kde (cc tt cc ) je dvojkový zápis přirozeného čísla ss pomocí tt bitů (v případě potřeby doplníme zleva nuly, např. () je dvojkový zápis čísla 5 pomocí šesti bitů). Kódované slovo xx = aa ii aa iinn reprezentujeme bitovým řetězcem cc tt cc. Poznámky Zamyslete se nad výše popsanou konstrukcí intervalů jednotlivých prefixů a zdůvodněte skutečnost, že intervaly reprezentující všechna slova délky nn NN + skutečně tvoří rozklad,). Rozklad zaručuje jednoznačný vztah mezi slovy a intervaly a proto ze znalosti intervalu můžeme jednoznačně rekonstruovat slovo. Je třeba si uvědomit, že reprezentant RR nezaručuje jednoznačnou rekonstrukci ve smyslu délky rekonstruovaného (dekódovaného, dekomprimovaného) slova. Pro jednoznačnost je nutná ještě znalost délky rekonstruovaného slova (např. RR =, tj. kód, reprezentuje libovolně dlouhé slovo obsahující pouze znak aa ). Příklad aa bb cc dd ee Uvažujte zdrojovou abecedu AA =. Pomocí metody DFWLD zakódujte,3,3,,, slovo bbbbbbbb. Řešení. Konstrukci intervalů prefixů kódovaného slova lze přehledně zapsat do následující tabulky:

Znak αα jj ll jj - - - bb,3,3 αα = +,3; ll =,3 aa,3,9 αα =,3 +,3 ; ll =,3,3 dd,37,9 αα 3 =,3 +,9 (,3 +,3 +,), ll 3 =,9, cc,3774,8 αα 4 =,37 +,9 (,3 +,3), ll 4 =,9, Nyní stačí určit reprezentanta RR = ss tt,3774;,379). Pro tt dostáváme nerovnice tt,8 < tt+, tedy tt =. Pro ss máme nerovnice,3774 ss <,379, tedy ss {387,388}. Jelikož v případě dvou po sobě jdoucích hodnot volíme ss sudé, dostáváme RR = 388 97 = = (, ). 8 Slovo bbbbbbbb proto zakódujeme na bitový řetězec. (Poznamenejme, že ASCII kód by vyžadoval 8 bitů místo 8 bitů.) Rekonstrukce (dekódování) původního slova probíhá analogicky ke kódování, tj. postupně určujeme intervaly a následně jim odpovídající prefixy, přičemž v každém kroku přidáme na konec již zkonstruovaného prefixu další znak (znalost délky původního slova je nutná proto, abychom věděli, kdy dekódování ukončit). Při rekonstrukci využíváme vlastnosti reprezentanta RR, konkrétně jj {,, nn } αα jj+ RR < αα jj+ + ll jj+. Nerovnosti v závorce lze přepsat na tvar αα jj + ll jj kk<iijj+ pp kk RR < αα jj + ll jj kk iijj+ pp kk, resp. kk<iijj+ pp kk RR αα jj < ll kk iijj+ pp kk. jj Z nerovnosti již snadno určíme znak aa iijj+, který přidáme k již známému prefixu aa ii aa iijj (startujeme z prázdného prefixu). Poznámka Hodnotu reprezentanta RR vypočteme z kódu cc tt cc dle zřejmého vztahu RR = tt ii= cc ii ii tt. Příklad aa bb cc dd ee ff Uvažujte zdrojovou abecedu AA =. Dekódujte slovo,,5,5,,,, jestliže délka původního slova byla 5. Řešení. Reprezentant má hodnotu RR =,754456. Další postup výpočtu je patrný z následující tabulky. RR αα jj Znak αα jj ll jj,754456 d,7,544556 c,75,778 a,75 5 3,893 e,754 5 4,933 f ll jj

Binární řetězec byl dekódován na text dcaef. Poznámky (dyadické zlomky) Nechť ss ZZ, tt NN. Potom racionální číslo ss tt nazýváme dyadickým zlomkem. Množina všech dyadických zlomků spolu s operacemi sčítání a násobení tvoří těleso, které je husté v RR, tj. xx RR εε > ss ZZ tt NN takové, že xx ss tt < εε. (Jako cvičení ověřte uzavřenost množiny všech dyadických zlomků na sčítání a násobení.) K zápisu dyadických zlomků využíváme obvykle dvojkovou soustavu. Konkrétně ss tt zapisujeme ve tvaru (dd kk dd, cc tt cc ), kde (dd kk dd ) je zápis dolní celé části ss tt ve dvojkové soustavě, tj. platí ss tt = kk ii= dd ii ii a (, cc tt cc ) je zápis lomené části ss tt ve dvojkové soustavě, tj. platí ss tt = tt ii= cc ii ii tt. Je-li číslo αα (,) QQ, lze zjednodušeně popsat konstrukci jeho binárního zápisu následovně (bbbbbb_rrrrrr bude obsahovat textový řetězec s binární reprezentací čísla αα; proměnná pppppppppppppp nabude hodnoty true v případě zjištění periodického rozvoje): bbbbbb_rrrrrr ", "; rrrrrrrrrrrr αα αα; iiii αα ttheeee bbbbbb_rrrrrr bbbbbb_rrrrrr & ""; αα αα eeeeeeee bbbbbb_rrrrrr bbbbbb_rrrrrr & ""; αα αα; uuuuuuuuuu (αα = ) (pppppppppppppp); Příklad a) Sestrojte dyadicky zlomek čísla 5,67875. b) Určete číslo reprezentované dyadickým zlomkem (, ). Řešení. a) αα =,67875; bbbbbb_rrrrrr ", "; αα,34375 (αα αα); bbbbnn rrrrrr ","; αα,34375 (αα αα ); αα,6875 (αα αα); bbbbnn rreeee ","; αα,375 (αα αα); bbbbnn rrrrrr ","; αα,375 (αα αα ); αα,75 (αα αα); bbbbnn rrrrrr ","; αα,5 (αα αα); bbbbnn rrrrrr ","; αα,5 (αα αα ); αα, (αα αα); bbbbnn rrrrrr ","; αα (αα αα ); tedy 5,67875 = (,). b) (, ) = + 3 + 3 nn= nn = 5.4. Adaptivní metody Zásadní informací ovlivňující účinnost kompresních metod (kompresní poměr) je znalost pravděpodobnosti výskytů znaků zdrojové abecedy. Tyto pravděpodobnosti se obvykle zjišťují a priory a předpokládá se jejich univerzální platnost ve smyslu nezávislosti na právě komprimovaných (kódovaných) datech. Je zřejmé, že takto stanovené četnosti nemusí příliš odpovídat četnostem aktuálně zpracovávaných dat. Jednou z možností, jak tento problém alespoň částečně eliminovat, jsou právě adaptivní metody, které stanovují četnosti průběžně, tj. na základě znalosti již zpracovaných dat. 3

a () 4 7 a Adaptivní varianta Huffmanovy () 3 konstrukce a 3 () Nechť AA = {aa,, aa rr } je zdrojová a abeceda, xx = aa ii aa iinn AA 4 () slovo a 5 () určené k zakódování (kompresi). Zakódování slova délky n proběhne a 6 () v n na sebe navazujících fázích. Prvním krokem j-té fáze (jj = a () 4 8,, nn) je aktualizace absolutních a 3 () četností vypočtených z prefixu a () 4 aa ii aa iijj a následné sestavení a 4 () nového substitučního schématu (Huffmanovou standardizovanou a 5 () konstrukcí). Toto substituční a 6 () schéma použijeme k zakódování znaku aa iijj. Poznamenejme, že v první fázi, tj. pro jj =, předpokládáme stejné četnosti všech znaků, tj. rovny (pracujeme s absolutními četnostmi). Postup dokumentuje následující příklad. Příklad Uvažujte zdrojovou abecedu AA = {aa, aa, aa 3, aa 4, aa 5, aa 6 }. Pomocí adaptivní Huffmanovy konstrukce zakódujte slovo aa aa 3 aa 4 aa aa aa. Řešení: Hodnoty uvedené v závorkách jsou a () 6 absolutní četnosti. a () Znak aa zakódujeme na. a 3 () 4 Nyní aktualizujeme četnost znaku aa, opět seřadíme znaky dle a 4 () četností a sestavíme nové a 5 () substituční schéma. a 6 () Znak aa 3 zakódujeme na a tedy prefix aa aa 3 má kód. Nyní aktualizujeme četnost znaku aa 3, seřadíme znaky dle četností a sestavíme nové substituční schéma. Znak aa 4 zakódujeme na a tedy prefix aa aa 3 aa 4 má kód. Nyní aktualizujeme četnost znaku aa 4, seřadíme znaky dle četností a sestavíme nové substituční schéma. 4

a () 5 a 3 () 4 a 4 () a () 3 a 5 () a 6 () a (3) 6 a 3 () 4 a 4 () a () 3 a 5 () a 6 () a (4) a 3 () a 4 () a () a 5 () a 6 () 4 7 3 Znak aa zakódujeme na. Zadané slovo aa aa 3 aa 4 aa aa aa má kód. 9 Znak aa kódujeme na, prefix aa aa 3 aa 4 aa má kód. Aktualizujeme četnost aa, seřadíme znaky dle četností, sestavíme nové substituční schéma. Znak aa zakódujeme na a tedy prefix aa aa 3 aa 4 aa aa má kód. Aktualizujeme četnost aa, seřadíme znaky dle četností a sestavíme nové substituční schéma. Znak aa zakódujeme na. Poznámky V případě dekódování (dekomprimace) binárního řetězce vzniklého adaptivní variantou Huffmanovy konstrukce postupujeme analogicky jako při kódování. V úvodu inicializujeme absolutní četnosti všech znaků zdrojové abecedy na a sestavíme substituční schéma, pomocí kterého určíme první znak původního slova. Následně aktualizujeme četnost dekódovaného znaku a sestavíme nové substituční schéma, pomocí kterého určíme další znak. Tento cyklus (aktualizace četnosti nové substituční schéma dekódování znaku) opakujeme, dokud není celý řetězec dekódován. Víme, že Huffmanova konstrukce není jednoznačná a pokud bychom nezajistili, že při dekódování budou substituční schémata (reprezentována binárními kořenovými stromy) sestavována dle stejných pravidel, nebylo by možné správně dekomprimovat původní text. Z tohoto důvodu budeme používat vždy standardizovanou Huffmanovu konstrukci. Poznamenejme dále, že pokud nově aktualizovaná četnost znaku je rovna četnosti nějakých znaků, zařadíme znak s nově aktualizovanou četností za tyto znaky. Viz konstrukce třetího substitučního schématu v následujícím příkladu - zařazení znaku aa s četností za znak aa 3. 5

Příklad Uvažujte zdrojovou abecedu AA = {aa, aa, aa 3, aa 4, aa 5, aa 6 }. Dekomprimujte (dekódujte) slovo, které vzniklo adaptivní Huffmanovou konstrukcí. Řešení. a () a () a 3 () a 4 () 4 a 5 () a 6 () a 3 () 4 a () 3 a () a 4 () a 5 () Kódové slovo tvoří prefix dekomprimovaného slova, tudíž první dekódovaný znak je aa 3. Zbývá dekomprimovat řetězec. Nyní aktualizujeme četnosti a sestavíme nové substituční schéma. Kódové slovo tvoří prefix, tedy další dekódovaný znak je aa. Zbývá tak dekomprimovat řetězec. Aktualizujeme četnosti a sestavíme další substituční schéma. a 6 () Kódové slovo tvoří a 3 () 5 9 prefix, tedy další dekódovaný znak je aa 3. a () 4 Zbývá tak dekomprimovat řetězec a () a 4 () 3. Aktualizujeme četnosti a sestaví- a 5 () me nové substituční a 6 () schéma. Kódové slovo tvoří prefix, tudíž a 3 (3) 5 9 další dekódovaný znak je aa 3. Zbývá a () tak dekomprimovat řetězec. a () 4 Aktualizujeme četnosti a sestavíme další substituční schéma. a 4 () a 5 () a 6 () 6 7 6

a 3 (4) a () 6 a () 4 a 4 () a 5 () a 6 () a 3 (5) a () 6 a () 4 a 4 () a 5 () a 6 () Kódové slovo tvoří prefix, tedy další dekódovaný znak je aa 3. Zbývá dekomprimovat řetězec. Aktualizujeme četnosti a sestavíme další substituční schéma. Kódové slovo již přímo odpovídá dekódovanému řetězci, tedy další znak je aa 6. Zadaný řetězec byl dekomprimován na text aa 3 aa aa 3 aa 3 aa 3 aa 6. 7

Přehled užitého značení AA množina všech (konečných) slov nad (konečnou) abecedou AA N NN + Z Q/R/C (aa, bb) NNNNNN(aa, bb) množina přirozených čísel, tj.,, množina kladných přirozených čísel množina celých čísel množina racionálních/reálných/komplexních čísel uspořádaná dvojice prvků a a b největší společný dělitel čísel a, b SS nn množina všech permutací na n-prvkové množině (symetrická grupa) ZZ pp konečné těleso (úplná soustava zbytků modulo prvočíslo p) nn ZZ pp aritmetický vektorový prostor dimenze n nad konečným tělesem ZZ pp SS KK KK GG HH AA TT, AA det AA lineární obal množiny S kód duální kód generující matice kódu kontrolní matice kódu matice transponovaná, inverzní determinant matice A Přílohy 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 3 4 5 6 7 8 9 3 4 5 6 7 8 9 3 4 5 Tabulka č. - Anglická abeceda a pořadí znaků Znak 3 4 5 6 7 8 9 ASCII Znak a b c d e f g h i j ASCII Znak k l m n o p q r s t ASCII Znak u v w x y z ASCII 8

Tabulka č. - neúplná ASCII tabulka a b c d e f g h i j k l m 8,,5,8 4,3,7,, 6, 7,,5,77 4,,4 n o p q r s t u v w x y z 6,7 7,5,9, 6, 6,3 9,,8,,4,5, Tabulka č. 3 četnosti výskytu znaků anglické abecedy (v běžném anglickém 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 č. 4 - Vigenèrův čtverec 9

3 4 5 6 7 8 9 3 4 5 6 7 8 9 3 4 5 3 4 5 6 7 8 9 3 4 5 6 7 8 9 3 4 5 4 6 8 4 6 8 4 4 6 8 4 6 8 4 3 3 6 9 5 8 4 4 7 3 6 9 5 5 8 4 7 3 4 4 8 6 4 6 4 8 4 8 6 4 6 4 8 5 5 5 5 4 9 4 9 4 3 8 3 8 3 7 7 6 6 6 6 8 4 4 6 8 4 6 8 4 4 6 8 4 7 7 4 9 6 3 4 8 5 6 3 8 5 3 7 4 5 9 8 8 6 4 6 4 4 8 8 6 4 6 4 4 8 9 9 8 9 3 4 3 5 4 3 6 5 4 7 6 5 8 7 4 4 4 8 8 6 6 4 4 4 8 8 6 6 7 8 3 4 5 6 7 3 4 9 5 6 3 8 9 4 5 4 8 6 8 4 6 4 4 8 6 8 4 6 4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 6 4 8 6 8 4 4 6 4 8 6 8 4 5 5 4 9 8 3 6 5 9 4 3 7 6 5 4 3 8 7 6 6 6 8 8 4 4 4 6 6 8 8 4 4 4 7 7 8 5 6 7 4 5 6 3 4 5 3 4 3 9 8 9 8 8 4 4 6 4 6 8 8 4 4 6 4 6 8 9 9 5 4 7 3 5 8 3 6 5 8 4 3 6 9 4 7 4 8 6 4 4 8 6 4 8 6 4 4 8 6 6 6 7 7 3 8 3 8 3 4 9 4 9 4 5 5 5 8 4 6 4 6 8 4 8 4 6 4 6 8 4 3 3 7 4 8 5 5 9 6 3 7 4 4 8 5 9 6 3 4 4 8 6 4 8 6 4 4 8 6 4 8 6 4 5 5 4 3 9 8 7 6 5 4 3 9 8 7 6 5 4 3 Tabulka č. 5 Tabulka násobení modulo