Univerza v Ljubljani Fakulteta za elektrotehniko Komunikacije v avtomatiki Kodiranje Stanislav Kovačič http://vision.fe.uni-lj.si 2013/14 Iz vsebine • Preprečevanje napak – zanesljivost prenosa (“kodiranje kanala”) • Odkrivanje napak • Popravljanje napak • Odpravljanje odvečnosti (“kodiranje vira”) • Zgoščevanje podatkov • Brezizgubo kodiranje • Izgubno kodiranje • Zaščita podatkov - šifriranje • Zagotavljanje tajnosti • Zagotavljaje verodostojnosti • Zagotavljanje istovetnosti - certificiranje Odkrivanje napak Začetek • • • • • Vsebina okvirja Kontrolna vsota Konec Oddajnik vsebini okvirja po določenem pravilu doda “kontrolno vsoto” Okvir pošlje v komunikacijski kanal Med prenosom lahko pride do napake na okvirju Sprejemnik preveri, če kontrolna vsota ustreza danemu pravilu V primeru, da kontrolna vsota ne ustreza pravilu, javi napako, zahteva ponovitev istega okvirja, zavrže okvir Kontrolna vsota: • Največkrat t.i. vzdolžno preverjanje parnosti (LRC – Longitudinal Redundancy ckeck) • Ciklično preverjanje (CRC – Cyclic Redundancy Check) Vzdolžno preverjanje parnosti Začetek Vsebina okvirja LRC Konec • • • • Imamo vsebino okvirja – niz bajtov: B0, B1, B2, .... , Bk, .... BK Oddajnik izračuna kontrolno vsoto B0 + B1 + B2 + .... + Bk + .... + BK = LRC (seštevanje po modulu 2) B0 + B1 + B2 + .... + Bk + .... + BK + LRC = 0 (seštevanje po modulu 2) LRC je potemtakem dodatni bajt (tipično eden ali dva bajta) • Sprejemnik preveri pogoj “parnosti” 0: ni napake (ali ni odkrita) • B0 + B1 + B2 + .... + Bk + .... BK + LRC = ≠0: odkrita napaka Dejanske izvedbe se sicer razlikujejo v majhnih, a pomembnih podrobnostih (soda ali liha kontrola; 8/16 bitni podatki; „pravo“ seštevanje;) Primer: Internet - UDP št. izvornih vrat št. ponornih vrat dolžina Kontrolna vsota UDP paket Koristna vsebina • • • • • • Pri izračunu se upošteva celotna vsebina paketa (glava in vsebina) V izračun se doda še „psevdo glava“ IP paketa (naslednja stran); • oba IP naslova, tip protokola (UDP = 0x11) in dolžina paketa Seštevajo se 16-bitne enote Sešteva se „eniško“ – z upoštevanje „prenosa“ – „ADDC seštevanje“ Kontrolna vsota je eniški komplement dobljenega seštevka Sprejemnik računa na enak način, upoštevaje tudi kontrolno vsoto. • če je dobljeni rezultat 0xFFFF, pomeni, da ni napake. Primer: UDP paket + psevdo glava IP naslov ponora IP naslov izvora Protokol Psevdo glava dolžina št. izvornih vrat št. ponornih vrat dolžina Kontrolna vsota UDP paket Koristna vsebina • • Kontrolna vsota za TCP segment + psevdo glava se računa praktično na enak način Kontrolna vsota IP glave se računa praktično na enak način Ciklično preverjanje - CRC Začetek • • • • • • Vsebina okvirja CRC Konec Imamo vsebino okvirja – niz podatkov: B0, B1, B2, .... , Bk, .... BK Oddajnik deli niz podatkov z delilnim zaporedjem – “generatorjem” G (B0 B1 B2 .... Bk .... BK ) : G = Rezultat deljenja Q + Ostanek R Ostanek “pripnemo” deljencu in pošljemo: B0 B1 B2 .... Bk .... BK R Sprejemnik preveri pogoj “deljivosti” B0 B1 B2 .... Bk .... BK R : G = Rezultat deljenja Q’+ Ostanek R’ 0: ni napake (ali ni odkrita) R’ = ≠0: odkrita napaka Ciklično preverjanje oz. kodiranje Začetek 101110010101010101010101011111001010 00........0 Konec Ciklično preverjanje oz. kodiranje Deljivo brez ostanka To pošljemo CRC, primer 1/2 CRC, primer Začetek 1 1 0 1 0 1 1 0 1 1 2/2 1110 Konec Preverjanje deljivosti Začetek 101110010101010101010101011111001010 101.....01 Konec CRC, nekateri “dobri” polinomi Ethernet_32 = x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x + 1 Izvedbena vprašanja: kateri je „prvi“ bit, „prvi“ bajt CRC, načelna izvedba v hardveru CRC s tabelo ostankov 1/5 Z B0 B1 B2 .... .... .... .... B K Del vsebine okvirja: P(x) P’(x) = P(x) . x8 + B(x) B(x) Zamisel: Dodajamo bajt za bajtom in delimo, vsakič dobimo rezultat deljenja in ostanek Vprašanje: Ko dodamo naslednji bajt, ali se da zgolj iz dodanega bajta in tekočega ostanka izračunati nov ostanek? R’(x) = T( R(x), B(x) ) CRC s tabelo ostankov 2/5 CRC s tabelo 3/5 R CRC s tabelo 4/5 CRC s tabelo Tabela ostankov RH RL + B V V T(V) TH + TL TH TL RH RL CRC tabela (5/5) Vzdolžno in prečno preverjanje • Zakodirajmo 111010100 -> 111, 010, 100 • Pošljemo 1111010110010011 -> 1111, 0101, 1001, 0011 Vzdolžno in prečno preverjanje • Sprejmemo na primer: 1111000110010011 • V drugi vrstici in drugem stolpcu je odkrita in popravljena napaka Hammingov kod Hammingov kod Primer za eno izmed šestnajstih kodnih besed b1=1; b2=0; b4=0; -> 1000011 Hammingov kod napaka V današnjem času se v glavnem uporabljajo „konvolucijski kodi“ in „mrežno kodiranje“ - trellis Iz vsebine • Osnovno o zgoščevanju podatkov • Entropijsko kodiranje, Huffmanov kod • Kodiranje nizov, algoritem LZW Zgoščevanje podatkov – osnovni cilj • Čimkrajše zapisati dano informacijsko vsebino • zmanjšamo potrebni pomnilniški prostor • povečamo informacijski pretok • Osnovna pristopa: • brezizgubno kodiranje: • vsa informacijska vsebina ostane popolnoma neokrnjena • izgubno kodiranje: • nekaj informacije se izgubi, bistvena pa ostane Količina informacije • Kolikšna je informacijska vsebina sporočila ? • Na primer sporočila: a b a b a b a a c a a c a b d d ? • Množica simbolov S = {s1 , s2 , s3 ,...., si ,...., s N } • Verjetnosti simbolov (pogostost pojavljanja): P = { p1 , p2 , p3 ,...., pi ,...., p N } • Entropija – merilo nedoločenosti in količine informacije (C. E.Shannon) N H ( S ) = −∑ pi log pi i =1 Primer 1/3 • Za prejšnji primer, vseh simbolov v nizu: 16 • a –– 8, pa = 8/16 = 0.5 • b –– 4, pb = 4/16 = 0.25 • c –– 2, pc = 2/16 = 0.125 • d –– 2, pd = 2/16 = 0.125 (to je seveda ocena verjetnosti) • Entropija (dvojiški logaritem): • H = - (0.5 x log 0.5 + 0.25 x log 0.25 + 0.125 x log 0.125 + 0.125 x log 0.125) • H = 1.75 bitov/simbol • Razlaga: Če želimo z binarnimi simboli (biti) zakodirati osnovne simbole a, b, c, d, rabimo v povprečju vsaj 1.75 binarnih simbolov (bitov) na osnovni simbol. Z manj biti se tega ne da narediti. Primer 2/3 • Vprašanje: kako ? •a wa = 00 •b wb = 01 •c wc = 10 •d wd = 11 a b a b a b a a c a a c a b d d -> 00010001000100001000001000011111 • (Povprečno) število bitov na simbol, n = 2 • To je več, kot bi bilo nujno potrebno • Nekaj binarnih simbolov je torej odveč • Delež odvečnih simbolov imenujemo odvečnost ali redundanca: H(S) 1.75 R = 1= 1− = 0.125 n 2 Primer 3/3 • Naslednja možnost – različno število bitov na simbol: •a wa = 0 •b wb = 10 •c wc = 110 •d wd = 111 a b a b a b a a c a a c a b d d -> 0100100100011000110010111111 • (Povprečno) število bitov na simbol: n = 1 x 0.5 + 2 x 0.25 + 3 x 0.125 + 3 x 0.125 = 1.75 • Redundanca: R = 1- H(S) 1.75 = 1− =0 n 1.75 • Boljše se s kodiranjem posameznih osnovnih simbolov ne da zakodirati Kodiranje - splošno • Imamo: S = {s1 , s2 , s3 ,...., si ,...., s N } P = { p1 , p2 , p3 ,...., pi ,...., p N } • Kod je pravilo za prirejanje kodnih besed osnovnim simbolom: si → wi • Iščemo kod - kodne besede: W = {w1 , w2 , w3 ,...., wi ,...., wN } • Želimo, da bi bila redundanca čim manjša: Povprečna dolžina kodnih besed čim manjša Kodiranje - splošno • Velja (!): H(S) ≤ n • Ampak (brez prevelikega truda lahko pokažemo, da velja tudi:) H(S) ≤ n < H(S) + 1 • Pri tem je: N H(S) = −∑ pi log pi i =1 N n = ∑ pi n i , i =1 n i =| wi | Kodiranje - splošno log(1 / pi ) ≤ ni < log(1 / pi ) + 1 / pi (množimo) pi log(1 / pi ) ≤ pi ni < pi log(1 / pi ) + pi 1 / ∑ i ∑ p log(1 / p ) ≤ ∑ p n < ∑ p log(1 / p ) + ∑ p i i i i i i i i H (S ) ≤ n < H (S ) + 1 i i i (seštejemo) Huffmanov kod • Bolj pogostim (bolj verjetnim) simbolom priredimo krajše kodne besede pi > p j → n i ≤ n j • Simbol z najmanjšo verjetnostjo ima najdaljšo kodno besedo • Simbola z najmanjšima verjetnostima imata enako dolgi kodni besedi (razlikujeta se na zadnjem kodnem – binarnem simbolu) • Pomembno: • Zakodirano sporočilo se da ‘sproti’ odkodirati Huffmanov kod - postopek • Simbole uredimo po padajočih verjetnostih • Združimo simbola z najmanjšo verjetnostjo v nov simbol z verjetnostjo, ki je enaka vsoti verjetnosti posameznih simbolov • Ponavljamo zgornja koraka, dokler se da – imamo samo dva simbola • Dobljena simbola zakodiramo, priredimo enemu 0 in drugemu 1 • Razdružimo združeni simbol • Pripišemo prejšnjemu binarnemu simbolu enkrat 0 in drugič 1 • Ponavljamo zgornja dva koraka, dokler se da. Huffmanov kod - primer S1,45 Huffmanov kod - primer Huffmanov kod – primer 1 0 0 0 Huffmanov kod – primer 2 0,57 0,32 0,57 0,17 0,32 Huffmanov kod – primer 3 H(S) = H(0.9, 0.1) = 0.469 n =1 Huffmanov kod – primer 3 H(S2) = H(0.81, 0.09, 0.09, 0.01) = 0.938 H (S2) = 2 H(S) Huffmanov kod – primer 3 H(S2) = H(0.81, 0.09, 0.09, 0.01) = 0.938 H (S2) = 2 H(S) Huffmanov kod – primer 3 H(S2) = H(0.81, 0.09, 0.09, 0.01) = 0.938 H(S2) = 2 H(S) Na en simbol torej 1.29/2 = 0.645 Na ta način se spodnji meji lahko poljubno približamo LZW (Lempel, Ziv, Welch) Daljše in različno dolge nize vhodnih simbolov nadomestimo s krajšimi in enako dolgimi nizi izhodnih simbolov. Algoritem se sproti prilagaja statističnim zakonitostim vhodnega niza Sprva kodni slovar sestavljajo osnovni simboli, s kodiranjem se slovar dopolnjuje tako, da se vhodnim nizom prireja nove simbole. Kodni slovar, ki je potreben za dekodiranje, se da pridobiti iz sprejetega zakodiranega niza. Kodnega slovarja torej ni potrebno poznati (prenašati). LZW (Lempel, Ziv, Welch) LZW (Lempel, Ziv, Welch) Slovar a 1 b 2 c 3 d 4 a b a b a b a a c a b a a c a b a d d ab 5 1 2 ba 6 aba 7 abaa 8 ac 9 ca 10 abaac 11 cab 12 bad 13 dd 14 a b a b a b a a c a b a a c a b a d d 5 7 1 3 8 10 6 4 Iz vsebine • Šifrirni algoritmi • Simetrični, nesimetrični algoritmi • Overovitev, digitalni podpis, potrdila • Protokoli Zaščita podatkov - izhodišča • varnost / tajnost / zasebnost / zaupnost • preprečevanje zlorabe podatkov, dostopa do občutljivih podatkov • (angl. Security, secrecy, privacy, confidentiality) • itegriteta – celovitost (neokrnjenost) podatkov • preprečevanje ponarejanja • (angl. Integrity) • avtentičnost, verodostojnost • pristnost udeležencev v komuniciranju, preverjanje ustreznosti. • (angl. Authentication) • zanikanje, utaja • preprečevanje zanikanja avtorstva oz. utaje poslanega • (angl. Non-repudiation) Zaščita podatkov • Šifriranje/dešifriranje (prikrivanje podatkov) algoritmi za zagotavljanje tajnosti, varnosti • Protokoli postopki varovanja, izmenjave podatkov, ki skupaj s šifrirnimi algoritmi zagotavljajo primerno varnost • Področja komunikacijski sistemi operacijski sistemi informacijski sistemi na različnih področjih uporabe Zaščita podatkov 7 6 5 4 3 2 1 7 6 5 4 3 2 1 7 6 5 4 3 2 1 • Ni omejena na en sam sloj • Lahko prisotna praktično na vsakem sloju • Na splošno čim bližje končnemu uporabniku 7 6 5 4 3 2 1 Šifriranje / prikrivanje podatkov • Kriptografija (področje šifriranja izdelave kriptogramov) • Kriptoanaliza (področje napadov na šifrirni sistem) • Kriptologija (kriptografija, kriptoanaliza) Šifriranje / prikrivanje podatkov • P: Odprto besedilo (angl. Plaintext) • E: Šifrirni postopek (algoritem), parametriran s šifrirnim ključem KE (Angl. Encryption, encryption key) • C = E( P, KE ): kriptogram • D: Dešifrirni postopek (algoritem), parametriran z dešifrirnim ključem KD (Angl. Decryption, decryption key) • Vsiljivec (pasivni, aktivni) prisluškuje in ponareja kriptograme. • Pomembno: Oba ključa morata biti tajna, postoka E in D pa sta lahko (tipično tudi sta) znana oziroma “javna”. Oba ključa sta (tipično) kar enaka. Šifriranje - pristopi • Klasični pristopi šifriranja uporabljajo dve operaciji: • substitucija, zamenjava oz. nadomeščanje simbolov • transpozicija, permutacija oz. premeščanje simbolov • poljubna kombinacija obeh. • Sicer pa sta prvi pravili šifriranja • redundanca, t.j. odvečnost v kriptogramu, čim večja je, tem bolje. • aktualnost kriptograma, omejeno trajanje kriptograma Nadomeščanje • Osnovne simbole nadomestimo z novimi simboli Preprost primer: si r i, r i = s (i+k ) mod N Preprost napad • Možen napad: upoštevamo statistične zakonitosti odprtih besedil Nadomeščanje • Uporabimo več (različnih) abeced in • abecede izbiramo s “ključem” Nadomeščanje, več abeced Premeščanje To so zaporedne številke črk ključa Premeščanje / nadomeščanje Ključ Premeščanje, P-blok Kombinacija obeh Ključ Nadomeščanje S-blok “Zmnožek“ DES (Data Encryption Standard) • DES, razvoj IBM – 1977, izveden iz sistema Lucifer (128 bitni ključ) • Množično uporabljan • Za vse današnje potrebe/razmere ne zagotavlja zadostne varnosti, je pa še uporaben. • V spremenjeni – izpopolnjeni obliki in v kombinaciji z drugimi postopki še vedno množično prisoten. DES je kompleksna kombinacija transpozicij in substitucij, t.i. (angl. Block cipher) “bločni” način (šifriranje po blokih) in (angl. Product cipher) “množilni” način šifriranja (transp., subst.). DES (Data Encryption Standard) DES • 56 bitni ključ, dejanski problem je premajhna dolžina ključa • 19 stopenj, 16 iteracij • vsa kompleksnost algoritma je v funkciji F • v vsaki iteraciji se uporabi modificiran ključ • DES je simetričen, isti ključ za šifriranje/dešifriranje • dešifrirni postopek je enak šifrirnemu v obratnem vrstnem redu. DES P izboljšave – trojni DES K1 K2 K1 E D E • dva 56-bitna ključa • K1 = K2 enojni DES C C K1 K2 K1 D E D P AES - Advanced Ecryption standard • NIST (National Institute of Standards and Technology) • 1997: razpis za prijavo novega algoritma • Simetričen, bločni • Zasnova in izvedba algoritma morata biti javni • Dolžina ključa: 128, (192, 256) • Možnost izvedbe s strojno ali programsko opremo • Algoritem mora biti v javni lastni ali licenciran na nediskriminatoren način AES - Advanced Ecryption standard • 1998: NIST izbere pet finalistov • 2000: NIST na osnovi glasovanja izbere algoritem RIJNDAEL (Rijmen, Daemen) • Nekaj podatkov: • Dolžina ključa 128 do 256 s korakom 32 (v praksi 128, ali 256) • Dolžina bloka 128 • Sicer pa je izvedbeno gledano algoritem zelo podoben DES, bistven pa je daljši ključ. Nekateri bolj pogosti algoritmi • Blowfish • DES, 56 bitni ključ • IDEA, 128 bitni ključ • RC4, 1- 2048 bitni ključ • RC5, 128-256 bitni ključ • AES128-256 bitni ključ (prva izbira) • Trojni DES, 168 bitni ključ (druga najboljša izbira) Sistemi z javnim ključem • PKS (Angl. Public Key Systems) • Simetrični sistemi (klasični sistemi) uporabljajo enak ključ za šifriranje in dešifriranje • Oba ključa (pravzaprav je en sam) morata biti TAJNA • Problem: distribucija ključev • V sistemih z javnim ključem je ŠIFRIRNI ključ JAVEN, objavljen oz. znan vsem zainteresiranim uporabnikom. • Razumljivo, (vsaj) dešifrirni ključ MORA biti TAJEN • Ključa sta torej različna • BISTVO sistema: na osnovi javnega šifrirnega ključa se ne da ali vsaj ne v doglednem času odkriti tajnega dešifrirnega ključa. Sistemi z javnim ključem RSA • Bistveno vprašanje: kako generirati (E,D) pare ključev? • RSA: Rivest, Shamir, Adleman • RSA temelji na dejstvu, da je velika števila težko faktorizirati. • RSA algoritem danes velja za nezlomljivega ali zelo trdnega • Slabost je zelo velika dolžina ključa in računska zahtevnost • Zato se največ uporablja za “distribucijo” ključev v kombinaciji z računsko učinkovitejšimi simetričnimi algoritmi. RSA - osnove • Generiranje ključev: • izberi dve veliki praštevili, p in q (tipično v obsegu 1024 bitov) • izračunaj n = p x q, in z = (p-1) x (q-1) • izberi z-ju tuje število, naj bo to število d • izberi e tako, da velja e x d = 1 (mod z) • Sedaj imamo par ključev, e in d • Šifriranje: • deli besedilo na enako dolge bloke P, tako da je P < n • šifriraj, C = Pe (mod n) • Dešifriraj: • P = Cd (mod n) RSA – primer • izberemo p in q • naj bosta p = 3 in q = 11 • Izračunamo n in z, • izačunamo n = p x q = 3 x 11 = 33 • izračunamo z = (p-1) x (q-1) = 2 x 10 = 20 • Izberemo d • d = 7 (d in z nimata skupnega delitelja, no seveda, 7 je praštevilo) • Izberemo e • e x 7 = 1 (mod 20), na primer (3 x 7 = 21 (mod 20) = 1) • Imamo oba ključa • šifriramo z (e, n) = (3, 33), dešifriramo z (d, n) = (7, 33) • (e, n) “objavimo” RSA – primer • Šifriramo, C = P3 (mod 33) • Dešifriramo, P = C7 (mod 33) • Na primer, odprto besedilo je SDV, šifriramo posamezne črke. PKS – digitalni (elektronski) podpis • Problem: • možnost ponarejanja, vsak se lahko predstavi pod lažnim imenom • možnost utaje, vsak lahko kasneje zanika pošiljanje • Rešitev: digitalni podpis PKS – digitalni (elektronski) podpis • Vsaka postaja (uporabnik) ima svoj par ključev, javnega in tajnega • Z javnim šifrira tisti, kdor pošilja • Postaja A se najprej podpiše, “(de)šifrira” s svojim tajnim ključem • Postaja A skrije besedilo, šifrira z javnim ključem postaje B • Postaja A pošlje kriptogram postaji B • Postaja B dešifrira kriptogram s svojim tajnim ključem • Postaja B “šifrira” besedilo, dobi odprto besedilo • Ker je vsaka postaja edina, ki pozna svoj tajni ključ, je to dokazilo, da kriptogram pošilja ona – njen podpis. • Če postaja B obdrži podpis besedila, je tudi utaja nemogoča. Digitalni podpis s simetričnim ključem • Uporabniki izberejo zaupnega posrednika Z, ki mu vsi zaupajo. • Vsak uporabnik po zaupnem kanalu sporoči svoj ključ zaupnemu posredniku: KA, KB, ...., • Uporabnik A pošilja besedilo P uporabniku B • Zato kreira KA( B, RA, t, P) in pošlje Z-ju: A, KA( B, RA, t, P) • RA je naključno število, t je čas, A je njegova identiteta • Zaupni posrednik ugotovi, da mu A pošilja kriptogram in ga dešifrira z njegovim ključem. • Zaupni posrednik Z pošlje B-ju kriptogram: B, KB(A,RA,t,P, KZ(A,t,P)) • KZ(A,t,P) je besedilo A-ja, ki ga je podpisal zaupni posrednik • S pomočjo zaupnega posrednika oz. njegovega podpisa lahko B dokaže, da je P poslal A Overovitev • Digitalni podpis ali tajnost nista vedno potrebna, zadostuje overovitev • Enosmerne funkcije – “odtis” besedila (angl. Message digest – MD) • za dano odprto besedilo P je enostavno izračunati MD(P) • za dani MD(P) je težko, vsaj v doglednem času določiti P • za dani P je nemogoče najti Q, da bo MD(P) = MD(Q) • majhna sprememba P-ja povzroči veliko spremembo MD(P) A P, DA(MD(P)) B • Overovitev v sistemu z javnim ključem • Če tretji ponaredi P, B lahko preveri verodostojnost preko MD(P) • Znane enosmerne funkcije v uporabi MD5, SHA-1 Potrdila • V sistemih z javnim ključem je rešen problem distribucije ključev, ne pa tudi problem zaupanja v dejansko identiteto pošiljatelja. • Potreben je zaupnik, ki izdaja potrdila (jamstva) za istovetnost javnih ključev. • Skratka, bistvena naloga zaupnika je jamstvo, da dotični javni ključ pripada dani (pravi) osebi. • Vzemimo, da želi B zaupno komunicirati z A-jem in drugimi uporabniki. • B zato predloži svoj javni ključ KB zaupniku v potrditev • Zaupnik izda potrdilo (certifikat), s katerim jamči, da javni ključ KB pripada B-ju, identiteto B-ja (npr. Njegovo ime), in odtis potrdila, podpisanega z zaupnikovim tajnim ključem. • Če A komunicira z B-jem, lahko preko preverjanja potrdila ugotovi istovetnost B-ja. Odtisa potrdila se ne da podtakniti.
© Copyright 2024