Vkládání pomocí Vterbho algortmu Andrew Kozlk KA MFF UK C
Vkládání pomocí Vterbho algortmu Cíl: Využít teor konvolučních kódů. Motvace: Vterbho dekodér je soft-decson dekodér. Každému prvku nosče přřadíme váhu, která udává jeho ctlvost na změnu. Nebudeme nutně mnmalzovat počet změn v nosč, ale celkovou váhu změn. C
Značení Nosč rozdělujeme na bloky n hodnot z konečného tělesa F q. Rozdíl oprot matcovému vkládání: Nepracujeme s jednotlvým bloky samostatně. Sestrojíme z nch posloupnost vektorů {x } l =, kde x = (x (),..., x (n) ) T F n q. Máme tedy nosč {x } l = a stegoobjekt {y } l =. Zpráva je obecně posloupnost vektorů {z } l =, kde z F m q. My se omezíme na případ m =. Zpráva je pak posloupnost jednosložkových vektorů. Budeme j psát jako posloupnost skalárů {z } l =. C3
Proč se omezujeme na m =? Zobecnění pro m > je jednoduché. Složtost Vterbho algortmu neúměrně narůstá s m. Relatvní kapacta nosče je α = m log q. n Čl jsme omezen na hodnoty tvaru α = log q. n Nevadí. Ve steganograf obvykle cílíme na hodnoty blízké. C4
Konvoluční extrakce Extrakce zprávy se provádí konvolučním překladačem. Implementace pomocí konvolučního kodéru. Kontrolorova normální forma: n paměťových regstrů. Pozorovatelova normální forma: m = paměťový regstr. r (j) = hodnota j-té buňky regstru na konc -tého kroku. d = délka regstru. D = operátor zpoždění. Defnujeme r (j) = pro j d. Hodnoty f (k) j F q a g j F q jsou konstanty a g =. C5
Konvoluční extrakce y () f () f ()... f () f () d y () f () f () + + + + +... f () f () d y (n) z f (n). f (n).. + + + + + r ()... f (n) f (n) d r () + D + D +... + D +. r (d). g g g d g d... C6
Algortmus (konvoluční extrakce) vstup: stegoobjekt {y } l = z Fn q, parametry f (k) j F q a g j F q výstup: zpráva {z } l = (s,..., s d ) := (,..., ) for =,..., l do 3 for j =,..., n do 4 (s,..., s d ) := (s,..., s d ) + y (j) (f (j),..., f (j) d ) 5 z := s 6 (s,..., s d ) := (s,..., s d ) + s (g,..., g d ) 7 (s,..., s d ) := (s,..., s d, ) 8 return {z } l = C7
Vkládání Extrakční algortmus popíšeme jako konečný překladač. Pro tento překladač sestrojíme trelážový graf. (Graf vývoje stavů v závslost na vstupu.) Obecně: Cesty v grafu = všechny možné vstupy překladače. Náš trk: Graf sestavíme tak, aby obsahoval pouze ty cesty (vstupy), jejchž výstupem je zpráva, kterou chceme vložt. Tyto cesty jsou kanddátky na stegoobjekt. Vterbho algortmus potom najde cestu, která se nejméně lší od nosče, resp. má nejmenší váhu (dstorz). C8
Příklad Celý proces předvedeme na následujícím příkladu. Mějme extrakční algortmus nad F s parametry f(d) = ( + D + D, D + D, + D ) a g(d) = D : y () y () y (3) z + + + D + D + C9
Příklad Ukázka přechodu automatu: Počáteční stav r () r () =. Vstup y = (,, ) T. () Výsledný stav r r () =. Výstup z =. / Záps: + + + D + D + C9
Příklad Ukázka přechodu automatu: Počáteční stav r () r () =. Vstup y = (,, ) T. () Výsledný stav r r () =. Výstup z =. / Záps: + + + D + D + C9
Příslušný konečný překladač / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / C
Trelážové moduly Přechody rozdělíme do dvou trelážových modulů podle jejch výstupních hodnot. Výstup Výstup C
Treláž pro vložení zprávy V závslost na zprávě pospojujeme moduly do treláže. Vterbho algortmus najde cestu treláží, která se nejvíce podobá nosč. C
Rozdíly oprot treláž pro dekódování kódů Treláž se skládá z různých modulů v závslost na zprávě. Nevyžadujeme, aby překladač skončl v nulovém stavu. Hrany označujeme vstupním hodnotam překladače místo výstupních hodnot. Vkládač: Upravuje vstup, aby dosáhl požadovaný výstup. Dekodér: Upravuje poškozený výstup, aby dosáhl platný výstup. Vstup překladače je delší než výstup. Konvoluční extraktor: n m. Konvoluční kodér: n m. C3
Vterbho algortmus V první fáz procházíme treláž zleva doprava, tj. pro =,..., l. Pro každé máme až q d možných stavů překladače. Pro každý z těchto stavů spočítáme váhu nejlehčí cesty, která do něho vede, a zaznamenáme poslední hranu cesty. Jakmle dojdeme na konec treláže, vybereme stav, do kterého vede nejlehčí cesta. Zpětným průchodem tuto cestu zrekonstruujeme. Průběh algortmu s předvedeme na příkladu nosče {x } 3 = = {(,, )T, (,, ) T, (,, ) T, (,, ) T } Používáme Hammngovu metrku. C4
Vterbho algortmus {x } 3 = {z } 3 = C5
Vterbho algortmus {x } 3 = 3 {z } 3 = C5
Vterbho algortmus {x } 3 = 3 {z } 3 = C5
Vterbho algortmus {x } 3 = 3 4 3 3 {z } 3 = C5
Vterbho algortmus {x } 3 = 3 {z } 3 = C5
Vterbho algortmus {x } 3 = 3 {z } 3 = C5
Vterbho algortmus {x } 3 = 3 {z } 3 = C5
Vterbho algortmus {x } 3 = 3 {z } 3 = C5
Vterbho algortmus {x } 3 = {z } 3 = C5
Vterbho algortmus {x } 3 = {z } 3 = C5
Vterbho algortmus {x } 3 = {z } 3 = {y } 3 = C5
Vterbho algortmus {x } 3 = {z } 3 = {y } 3 = C5
Vterbho algortmus {x } 3 = {z } 3 = {y } 3 = C5
Vterbho algortmus {x } 3 = {z } 3 = {y } 3 = C5
Časová složtost algortmu Procházíme l modulů zleva doprava. V každém modulu projdeme (až) q d stavů a spočítáme váhu nejlehčí cesty, která do každého stavu vede. Pro každý stav tedy zvážíme všechny vstupující hrany. Do každého stavu vede v průměru q qn hran. Zvážení jedné hrany vyžaduje O(n) porovnání. Zpětný průchod má složtost O(n) operací. (Zanedbatelné.) Časová složtost algortmu je O(q d+n ln) porovnání. Složtost ještě vylepšíme na O(q d+ ln) vektorových operací tak, že rozvneme treláž. C6
Rozvnutí modulů Každý přechod automatu rozvneme na n + podkroků. Čl každý modul rozvneme na n + podmodulů. Přpomeňme algortmus konvoluční extrakce: (s,..., s d ) := (,..., ) for =,..., l do 3 for j =,..., n do 4 (s,..., s d ) := (s,..., s d ) + y (j) (f (j),..., f (j) d ) 5 z := s 6 (s,..., s d ) := (s,..., s d ) + s (g,..., g d ) 7 (s,..., s d ) := (s,..., s d, ) 8 return {z } l = C7
Příklad: Rozvnutí přechodu automatu + + + D + D + Na počátku máme (s, s, s ) = (,, ). Podkroky pak jsou:. (s, s, s ) := (s, s, s ) + (,, ) = (,, ). (s, s, s ) := (s, s, s ) + (,, ) = (,, ) 3. (s, s, s ) := (s, s, s ) + (,, ) = (,, ) 4. (s, s, s ) := (s, s, s ) + (,, ) = (,, ) (s, s, s ) := (s, s, ) = (,, ) C8
Rozvnutí modulu s výstupem výstupní symbol Přčtení y () (,, ) pro y () F. Přčtení y () (,, ) pro y () F. Přčtení y (3) (,, ) pro y (3) F. Posunutí regstru. C9
Rozvnutí modulu s výstupem výstupní symbol Přčtení y () (,, ) pro y () F. Přčtení y () (,, ) pro y () F. Přčtení y (3) (,, ) pro y (3) F. Přčtení zpětné vazby (,, ) a posunutí regstru. C
Rozvnutá treláž a dstrozní funkce Trelážové moduly nahradíme jejch rozvnutým verzem. Vterbho algortmus najde cestu rozvnutou treláží, která se nejvíce podobá nosč. Algortmus umí zohlednt váhy jednotlvých změn v nosč. Ke každému prvku nosče x (j) ρ (j) : F q R. přřazujeme dstorzní funkc Hodnota ρ (j) (a) udává, jak moc by přspělo nastavení y (j) = a ve stegoobjektu k celkové dstorz vyvolané vkládáním. C
Příklady dstrozních funkcí Chceme-l Hammngovu metrku, defnujeme { ρ (j), jestlže a = x (j) (a) =, jestlže a x (j) Pro psaní na mokrý papír defnujeme ρ (j) (a) =,., jestlže prvek na j-té pozc v -tém bloku je mokrý a zároveň a x (j), jnak. Pro vkládání př kvantzac defnujeme ρ (j) (a) = (dstorze př vložení a) (dstorze př zaokrouhlení). C
Algortmus (vkládání pomocí Vterbho algortmu) vstup: dstorzní funkce prvků nosče {ρ } l =, zpráva {z } l = nad F q, parametry f (k) j F q a g j F q výstup: stegoobjekt {y } l = Incalzace. for s F d+ q \ {} do w[s] := 3 w[] := Dopředný průchod treláží. 4 for =,..., l do 5 for j =,..., n do do 7 path (j) [s] := arg mn a Fq w[s a(f (j),..., f (j) d )] + ρ(j) (a) 8 w [s] := mn a Fq w[s a(f (j),..., f (j) d )] + ρ(j) (a) 9 w := w 6 for s F d+ q for (s,..., s d ) F d q do w [(s,..., s d, )] := w[(z, s,..., s d ) z (g (),..., g (n) )] for s d F q \ {} do 3 w [(s,..., s d )] := 4 w := w C3
Algortmus (pokračování) Volba stavu, ve kterém končí nejlehčí cesta. 5 (s,..., s d ) := arg mn s F w[s ] d+ q Rekonstrukce nejlehčí cesty zpětným průchodem treláže. 6 for = l,..., do 7 (s, s,..., s d ) := (z, s,..., s d ) z (g,..., g n ) 8 for j = n,..., do 9 y (j) := path (j) [(s,..., s d )] (s,..., s d ) = (s,..., s d ) y (j) return {y } l = (f (j),..., f (j) d ) w[s] = váha nejlehčí cesty, která vede do s. path (j) [s] = poslední hrana nejlehčí cesty, která vede do s. C4
Složtost algortmu Nejčastěj jsou volány nstrukce na řádcích 7 a 8, celkem (lnq d+ )-krát. Instrukce na řádku 7 provádí q-krát: vektorovou operac (nejdražší), nahlédnutí do pamět, (j) volání ρ (a) (předpokládáme v konstantním čase), porovnání. Časová složtost: O(q d+ ln) vektorových operací. Obvykle stačí specalzace algortmu pro q =, kterou lze mplementovat pomocí operací xor. V pol path ukládáme q d+ ln prvků tělesa F q. Paměťová složtost: O(q d+ ln log q) btů. C5
Výsledky několka expermentů Stegosystém popsaný v příkladu dosahuje efektvty e = 3,87, přčemž α = /3. Toto velm dobře odpovídá efektvtě Hammngových kódů v dané oblast. Použjeme-l větší regstr lze dosáhnout lepších výsledků. Např. d =, pak pro α = /3 lze dosáhnout efektvty 4,94. Přítomnost zpětné vazby g(d) nevedla k měřtelnému zlepšení efektvty vkládání. C6