Ausarbeitung
Ausarbeitung
Ausarbeitung
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
Steganographie mit JPEG Graphiken<br />
Christian Kuka<br />
2. Mai 2008<br />
1 JPEG<br />
Zum besseren Verständnis der steganographischen Algorithmen mittels JPEG Graphiken sei hier nochmal<br />
ein kurzer überblick über das JPEG Komprimierungsverfahren dargestellt.<br />
Der Prinzipielle Aufbau des JPEG Kompressors ist in Abbildung 1 zu sehen. Dabei wird zunächst das eigentliche<br />
Bild in 8x8 Pixel große Teilbilder zerlegt. Diese werden dann mittels der diskreten Kosinustransformation<br />
(DCT) in 64 Frequnzkoeffizienten überführt. Die daraufhin ausgeführte verlustbehaftete Quantisierung rundet<br />
jeden Frequnzkoeffizienten auf einen geeigneten ganzen Wert. Nach der Komprimierung sorgt eine Huffman<br />
Kodierung für eine redundanzarme Speicherung der quantisierten Frequnzkoeffizienten.<br />
Abbildung 1: JPEG Aufbau<br />
1.1 Diskrete Kosinustransformation<br />
Die beim JPEG Komprimierungsverfahren zugrunde liegende zweidimensionale diskrete Kosinustransformation<br />
lautet:<br />
1.2 Quantisierung<br />
F xy = 1 4 C xC y<br />
7∑<br />
m=0 n=0<br />
C k =<br />
7∑<br />
f mn cos<br />
(2m + 1)xπ<br />
16<br />
{<br />
1√2<br />
wenn k = 0<br />
1 sonst<br />
cos<br />
(2n + 1)yπ<br />
16<br />
Die einzelnen Frequnzkoeffizienten eines 8x8 Teilbildes werden mit Hilfe einer Quantisierungsmatrix gerundet.<br />
F Q F (x, y)<br />
(x, y) = ⌊<br />
Q(x, y) ⌋<br />
Die Quantisierungswerte sind für niedrige Frequnzen kleiner als für hohe Frequnzen, da das menschliche Auge<br />
für grobe Strukturen empfindlicher ist. Die Qunatisierung stellt somit eine Irrelevanzreduktion dar.<br />
1.3 Frequenzhistogramm<br />
Das durch die Transformierung und Quantisierung entstehende Frequenzhistogramm 1.3 einer Bilddatei zeigt<br />
deutlich, daß die Häufigkeit der Frequnzkoeffizienten mit steigendem Betrag abnimmt.<br />
1
1 JPEG 2<br />
Häufigkeit<br />
-4 -3 -2 -1 0 1 2 3 4 JPEG Koeffizienten<br />
Abbildung 2: JPEG Frequnzhistogramm<br />
1.4 Steganographie mit JPEG<br />
Wie bereits erwähnt bietet die JPEG Komprimierung nur an gewissen Stellen die Möglichkeit zur Einbettung<br />
von steganographischen Nachrichten. Wie in Abbildung 1.4 gezeigt ist die Einbettung vor der Quantisierung<br />
nicht möglich, da durch die Quantisierung ein Informationsverlust herrscht. Somit ist die Einbettung erst vor<br />
der Huffman Kodierung erfolgsversprechend.<br />
Bitmap Datei<br />
JPEG Datei<br />
DCT<br />
Quantisierung<br />
Huffman<br />
Kodierung<br />
Informationsverlust<br />
Stego<br />
Abbildung 3: Steganographie in JPEG
2 JSTEG 3<br />
2 JSteg<br />
JSteg ist einer der ältesten Stegonographischen Algorithmen für JPEG komprimierte Grafiken. Entwicklt<br />
wurde JSteg 1997 von Derek Upham Bei JSteg wird eine steganographische Nachricht Bit für Bit in das Bild<br />
eingebettet. Dabei wird jeweils das letzte Bit eines quantifizierten Frequenzkoeffizienten (LSB) überschrieben.<br />
Ausnahme hiervon sind die Frequenzkoeffizienten mit dem Wert 0 und 1. Der Wert 0 wird deshalb nicht<br />
überschrieben, weil dadurch für das Menschliche Auge sichtbare Unterschiede entstehen können (Bereiche<br />
mit niedriger Frequenz sind Bereiche mit groben Strukturen). Frequenzkoeffizienten mit dem Wert 1 werden<br />
ebenfalls nicht überschrieben, weil der resultierende Wert zu 0 werden könnte und ein Kommunikationspartner<br />
nichtmehr zwischen einem ursprünglichen Koeffizienten mit Wert 0 und einem Koeffizienten, der erst nach<br />
der Einbettung zu 0 wurde, unterscheiden könnte.<br />
2.1 Algorithmus<br />
In Abbildung 4 ist der relativ einfache Einbettungsalgorithmus von JSteg dargestellt. Für jeden Frequenzkoeffizienten<br />
der nicht 0 oder 1 ist wird in Zeile 4 jeweils das letzte Bit (LSB) mit einem Bit der steganographischen<br />
Nachricht überschrieben. Erst wenn kein Nachrichtenbit oder Frequenzkoeffizient mehr vorhanden<br />
ist terminiert der Algorithmus.<br />
JSteg Algorithmus<br />
C = JPEG Frequenzkoeffizienten<br />
m = Nachrichtenbit<br />
1 for each Frequenzkoeffizient a ∈ C<br />
2 if a ≠ 0 and a ≠ 1 then<br />
3 lsb(a) = n<br />
4 m = nextbit<br />
Abbildung 4: JSteg Algorithmus<br />
2.2 Eigenschaften<br />
Beim Vergleich des eigentlichen JPEG Histogramms Abb.1.3 und des Histogramms nach der Einbettung<br />
mittels JSteg Abb.2.2 fällt auf, daß JSteg die Frequenzkoeffizienten paarweise ausgleicht.<br />
Häufigkeit<br />
-4 -3 -2 -1 0 1 2 3 4 JPEG Koeffizienten<br />
Abbildung 5: JSteg Histogramm<br />
Die Kapazität des JSteg Algorithmus beträgt wegen der Nicht-Nutzung der Frequenzkoeffizienten 0 und<br />
1 nur 12,8%. Zudem ist festzustellen, daß JSteg eine steganographische Nachricht von oben nach unten in<br />
den Träger einbettet.
2 JSTEG 4<br />
2.3 Angriff<br />
Genau das eben besprochene Histogramm, nach der Einbettung mittels JSteg, ist der Angriffspunkt um mit<br />
statistischen Werkzeugen eine Einbettung zu erkennen. Ein möglicher statistischer Angriff ist der χ 2 Test wie<br />
er in [Wes01] beschrieben wird.<br />
2.3.1 χ 2 Test<br />
Der χ 2 Test zeigt die Unterschiede zwischen einer beobachteten Verteilung und einer erwarteten Verteilung.<br />
Dabei ist die beobachtete Verteilung n i = c 2i die Häufigkeit eines Frequenzkoeffizienten. Die erwartete Verteilung<br />
ist das arithmetische Mittel n ∗ i = c2i+c2i+1<br />
2<br />
zweier im Histogramm nebeneinander liegender Häufigkeiten<br />
von Frequenzkoeffizienten. Der Unterschied der beiden Verteilung ist definiert als:<br />
χ 2 =<br />
k∑<br />
i=1<br />
(n i − n ∗ i )2<br />
n ∗ i<br />
Je mehr Frequenzkoeffizienten durch den JSteg Algorithmus ausgeglichen werden, um so mehr nährt sich der<br />
Wert von χ 2 1.
3 F5 5<br />
3 F5<br />
F5 wurde 2001 von Andreas Westfeld [Wes01] entwickelt und soll die statistischen Eigenschaften eines Trägers<br />
erhalten. Im Gegensatz zu JSteg werden die einzelnen Frequenzkoeffizienten nicht überschrieben, sondern ihr<br />
absoluter Wert dekrementiert. Zudem werden Frequenzkoeffizienten mit Wert 1 genutzt, lediglich Koeffizienten<br />
mit Wert 0 werden nicht für dir Einbettung genutzt.<br />
Zudem bedient sich F5 der Matrixkodierung von Ron Crandall, wodurch die Einbettungseffizients gesteigert<br />
wird.<br />
3.0.2 Permutative Spreizung<br />
Im Gegensatz zu JSteg wird bei F5 eine steganographische Nachricht nicht von oben nach unten in den<br />
Träger eingebettet, sondern mit Hilfe einer Permutation der Frequenzkoeffizienten in dem Träger verteilt.<br />
Die Permutation ist abhängig von einem Schlüssel, den sowohl Sender als auch Empfänger besitzen müssen.<br />
3.0.3 Matrixkodierung<br />
Bei der Matrixkodierung werden n änderbare Stellen eines Trägers zu einem Block (Kodewort) zusammengefaßt.<br />
Um eine Nachricht x bestehend aus k Stellen in den Träger einzubetten, wird geprüft ob eine Hashfunktion<br />
f aus dem Kodewort bereits die Nachricht extrahieren kann x = f(a). Ansonsten muß das Kodewort<br />
so geändert werden das gilt x = f(a ′ ), wobei a ′ das veränderte Kodewort ist. Dabei darf die Anzahl der<br />
Änderungen (Hammingdistanz) bei F5 nicht größer als 1 sein d(a, a ′ ) ≤ 1. Die Kodewortlänge ergibt sich bei<br />
einer Nachrichtenlänge k somit zu n = k 2 − 1<br />
Das folgende Beispiel verdeutlicht die Einbettung einer Nachricht, die aus zwei Bits x 1 ,x 2 besteht, in ein<br />
Kodewort a der Länge n = 3.<br />
x 1 = a 1 ⊕ a 3 , x 2 = a 2 ⊕ a 3<br />
x 1 ≠ a 1 ⊕ a 3 , x 2 = a 2 ⊕ a 3<br />
x 1 = a 1 ⊕ a 3 , x 2 ≠ a 2 ⊕ a 3<br />
x 1 ≠ a 1 ⊕ a 3 , x 2 ≠ a 2 ⊕ a 3<br />
⇒ nichts ändern<br />
⇒ a 1 ändern<br />
⇒ a 2 ändern<br />
⇒ a 3 ändern<br />
3.1 Algorithmus<br />
Zu Beginn des F5 Algorithmuses wird die Permutation der Frequenzkoeffizienten mittels eines Schlüssels<br />
initialisiert. Zudem wird mit Hilfe der maximalen Kapazität des Trägers und der Nachrichtengröße der Parameter<br />
k, sowie die Kodewortlänge n bestimmt.<br />
Die Einbettung selbst ist in 6 beschrieben.<br />
buffer[n] = n Stelliger Einbettungspuffer<br />
1 do<br />
2 buffer mitn Indiezes der Koeffizienten, die nicht 0 sind, füllen<br />
3 hash = k Stelliger Hashwert<br />
4 msg = k Bits der Nachricht<br />
5 position = hash ⊕ msg<br />
6 if position ≠ 0 then<br />
7 Dekrementiere Betrag von C[buffer[position − 1]] um 1<br />
8 while C[buffer[position]] = 0<br />
Abbildung 6: F5 Algorithmus
3 F5 6<br />
Wobei die Bildung des Hashwerts in Zeile 3 nach folgendem Schema berechnet wird:<br />
3.2 Eigenschaften<br />
hash(a) = ⊕ n i=1a i ∗ i<br />
Beim Vergleich des eigentlichen JPEG Histogramms Abb.1.3 und des Histogramms nach der Einbettung<br />
mittels F5 Abb.3.2 fällt auf, daß die Häufigkeit der Frequenzkoeffizienten mit Wert 0 leicht ansteigt. Dieses<br />
ist auf das Shrinkage zurück zu führen, daß entsteht, wenn bei der Einbettung ein Koeffizient mit einem<br />
Absolutwert von 1 zu 0 dekrementiert wird und ein neuer Block zur Einbettung ausgewählt werden muß.<br />
Häufigkeit<br />
-4 -3 -2 -1 0 1 2 3 4 JPEG Koeffizienten<br />
Abbildung 7: F5 Histogramm<br />
Durch die Matrixkodierung bieted F5, in Abhängigkeit von der Einbettungsrate, eine relativ hohe Einbettungseffizienz<br />
wie in Abb.3.2 zu sehen.<br />
10<br />
9<br />
E(k)<br />
R(k)<br />
D(k)<br />
8<br />
7<br />
6<br />
5<br />
4<br />
3<br />
2<br />
1<br />
Abbildung 8: F5 Einbettungseffizienz<br />
0<br />
1 2 3 4 5 6 7 8 9 10<br />
Dabei ergeben sich die einzelnen Kurven für die Einbettungsrate R, d ie Änderungsdichte D und die Einbettungseffizienz<br />
E aus den folgenden Formeln:<br />
Einbettungsrate:<br />
R(k) =<br />
k<br />
2 k − 1<br />
Änderungsdichte:<br />
D(k) = 1<br />
2k
3 F5 7<br />
Einbettungseffizienz (Eingebettete Bits pro Änderung):<br />
E(k) = R(k)<br />
D(k)<br />
Allerdings muß hierbei noch das Shrinkage berücksichtigt werden, wodurch F5 eine Einbettungseffizienz von<br />
1,5 bei maximaler Einbettungrate erreicht.<br />
3.3 Angriff<br />
In [JFH] wird beschrieben, daß es möglich ist Einbettungen mittels F5 zu entdecken und sogar die Länge der<br />
eingebetteten Nachricht zu ermitteln. Dazu wird der Träger erst dekomprimiert und um 4 Zeilen verkleinert,<br />
wie in Abb. 3.3 gezeigt.<br />
Abbildung 9: Crop Angriff<br />
Daraufhin wird ein Tiefpassfilter verwendet um Blockartifakte zu entfernen. Eine erneute Komprimierung<br />
mit der Quantisierungsmatrix des Trägers und ein darauf folgender Vergleich der Histogrammdaten der<br />
Frequenzkoeffizienten kann einen erhöhten Anteil an 0-Koeffizienten aufdecken.
4 MODEL BASED STEGANOGRAPHIE 8<br />
4 Model Based Steganographie<br />
Bei MBS liegt die Idee des perfekten Komprimierers zugrunde. Unter einem perfekten Komprimierer versteht<br />
man einen Komprimierer der alle Eigenschaften der realen Welt kennt, also intern ein perfektes Modell der<br />
realen Welt besitzt. Somit sind komprimierte Bilder lediglich eine willkührliche Aneinanderreihung von Bits.<br />
Darauf aufbauend kann man davon ausgehen, daß ein Dekomprimierer aus willkührlichen Daten immer ein<br />
ursprürliches Bild erstellen kann. Da er ebenfalls ein perfektes Modell der realen Welt besitzt.<br />
Da es allerdings keinen perfekten Komprimierer gibt, versucht die modelbasierte Stegonographie (MBS) ein<br />
nahezu perfektes Modell P zu nutzen um eine steganographische Nachricht in einen Träger einzubetten.<br />
Dabei werden für einen Menschen oder Maschine wahrnehmbare Eigenschaften des Trägers X det 1 genutzt<br />
um das Modell zu initialisieren. Vernachlässigbare Eigenschaften des Trägers X indet werden bei MBS unter<br />
Berücksichtigung des Modells mit Hilfe eines arithmetischen Dekodierers so verändert, daß sie die Nachricht<br />
enthalten. Ein Empfänger kann somit wieder das Modell mit Hilfe von X det initialisieren und die eingebettete<br />
Nachricht extrahieren.<br />
Die genaue Arbeitsweise von MBS ist in Abb.4 dargestellt.<br />
Cover<br />
X<br />
Model<br />
X<br />
det<br />
X<br />
indet<br />
P<br />
X i ndet | X det<br />
X X ’<br />
det<br />
indet<br />
Entropy<br />
Decoder<br />
X’<br />
Message<br />
M<br />
Abbildung 10: MBS<br />
Im Hinblick auf JPEG komprimierte Graphiken bedeutet dies, daß es eine Aufteilung von wahrnehmbaren<br />
und vernachlässigbaren Eigenschaften gibt.<br />
Wobei die vernachlässigbaren Eigenschaften einer JPEG komprimierten Graphik die Häufigkeit eines Frequenzkoeffizienten<br />
darstellt. Im folgenden werden die Häufigkeit eines bestimmten Frequenzkoeffizienten c als<br />
high precision bins h c bezeichnet.<br />
Dagegen stellen die wahrnehmbaren Eigenschaften eine Gruppe l c von, im Histogramm benachbarter, high<br />
precision bins dar.<br />
⎧<br />
⎪⎨ h 2c+1 + h 2c wenn c < 0<br />
l c = h 0 wenn c = 0<br />
⎪⎩<br />
h 2c−1 + h 2c wenn c > 0<br />
1 In dem Artikel von Rainer Böhme und Andreas Westfeld [BW04] werden die Bezeichnung X det und X indet statt wie bei<br />
Phil Sallee [Sal] α und β verwendet. Da diese <strong>Ausarbeitung</strong> sich öfter auf Andreas Westfeld beruft, sollen diese Bezeichnung das<br />
weitere Lesen vereinfachen
4 MODEL BASED STEGANOGRAPHIE 9<br />
Diese Gruppe wird im folgenden low precision bins genannt.<br />
Low precision bins sind somit Teil von X det und dürfen bei der Einbettung nicht verändert werden. Dagegen<br />
stellen high precision bins Elemente von X indet dar, die unter Berücksichtigung eines Models P verändert<br />
werden dürfen. Dabei muß der Algorithmus beachten, daß die Häufigkeit innerhalb einer low precision bin<br />
unverändert bleibt und die Änderung weiterhin kohärent zum Modell bleibt.<br />
4.0.1 Model<br />
Als Modell für die Häufigkeitsverteilung wird eine Cauchy Verteilung genutzt, die wie folgt definiert ist:<br />
P (c) = p − 1 (|c/s| + 1)−p<br />
2s<br />
mit p > 1 und s > 0<br />
Die zugehörige Dichtefunktion ist:<br />
D(c) =<br />
{<br />
1<br />
2 (1 + |c/s|)1−p wenn c ≤ 0<br />
1 − 1 2 (1 + |c/s|)1−p wenn c ≥ 0<br />
Abb.4.2 zeigt das Histogramm einer mit JPEG komprimierten Graphik mit den jeweiligen high und low<br />
precision bins (l −2 . . . l 2 ). Die rote Linie beschreibt dabei das Modell, das über die Parameter p und s an die<br />
low precision bins angepasst wurde.<br />
Häufigkeit<br />
l<br />
-1<br />
l<br />
1<br />
l<br />
-2<br />
l<br />
2<br />
-4 -3 -2 -1 0 1 2 3 4 JPEG Koeffizienten<br />
Abbildung 11: MBS Modell<br />
Nach dem anpassen des Modells wird die Wahrscheinlichkeit von jedem Koeffizienten innerhalb des Modells<br />
über die Dichtefunktion berechnet. Diese Wahrscheinlichkeiten werden mit der Nachricht und der Häufigkeiten<br />
der Koeffizienten an einen arithmetischen Dekodierer übergeben. Der Rückgabewert des arithmetischen Dekodierers<br />
zusammen mit der jeweiligen low precision bin entspricht dem Wert des neuen Koeffizienten. Ein<br />
möglicher Dekodierer wird nach Sallee [Sal] in [IHWC87] beschrieben.<br />
4.1 Eigenschaften<br />
Bei MBS ergibt sich die Einbettungsrate R, die Änderungsdichte D und die Einbettungseffizienz E aus der<br />
Wahrscheinlichkeit k der Häufigkeit eines Frequenzkoeffizienten.<br />
Einbettungsrate:<br />
R(k) = −(k log 2 (k) + (1 − k) log 2 (1 − k))
4 MODEL BASED STEGANOGRAPHIE 10<br />
Änderungsdichte:<br />
Einbettungseffizienz:<br />
D(k) = 2k(1 − k)<br />
E(k) = R(k)<br />
D(k)<br />
Die Einbettungsrate ist hierbei gleichbedeutend mit der Entropy.<br />
4<br />
3.5<br />
E(k)<br />
R(k)<br />
D(k)<br />
3<br />
2.5<br />
2<br />
1.5<br />
1<br />
0.5<br />
Abbildung 12: MBS Einbettungseffizienz<br />
0<br />
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1<br />
Wie in Abb.4.1 zu sehen ist, sinkt die Einbettungseffizienz nie unter 2 für 0 < k < 1.<br />
4.2 Angriff<br />
Bisher wurde immer davon ausgegangen, daß die Häufigkeit von Frequenzkoeffizienten kontinuierlich mit<br />
steigender Frequenz abnimmt.<br />
Dies ist aber nicht immer der Fall, je nach Art des Bildes und je nach Aufnahmegerät kann ein Träger<br />
eine erhöhte Häufigkeit von Frequenzen in hḧren Bereichen aufzeigen. Diese Besonderheit wird von dem verwendeten<br />
Modell nicht abgedeckt wie in Abb.4.2 ersichtlich. Bei der Einbettung durch MBS würde diese<br />
Besonderheit unter Umständen entfernt werden, da Änderungen kohärent zum zugrunde liegenden Modell<br />
bleiben müßen.<br />
Bei genügend statistischen Daten kann diese Veränderung der Frequenzkoeffizienten daher durch einen Vergleich<br />
der erwarteten und der vorhandenen Koeffizienten aufgedeckt werden. Nach [BW04] ist die Wahrscheinlichkeit,<br />
daß eine steganographische Nachricht entdeckt werden kann, bei einer Nutzung von mehr als<br />
40% der möglichen Kapazitat eines Trägers bei 50%.
5 FAZIT 11<br />
Häufigkeit<br />
-4 -3 -2 -1 0 1 2 3 4 JPEG Koeffizienten<br />
5 Fazit<br />
Abbildung 13: MBS Histogramm<br />
Alle hier vorgestellten Algorithmen können schon bei einer geringen Einbettungsrate entdeckt werden. Dennoch<br />
können die verwendeten Techniken und Blickwinkel für neue steganographische Algorithmen genutzt<br />
werden. Weitere steganographische Algorithmen, die in dieser <strong>Ausarbeitung</strong> nicht Untersucht wurden, wären<br />
MB2 und ”writing on wet paper”[JFS05]. MB2 stellt dabei eine Weiterentwicklung des hier vorgestellten<br />
MBS (MB1) Algorithmuses dar. Writing on wet paper betrachtet dabei einen Träger als einen Speicher mit<br />
defekten Zellen und bietet somit einen völlig neuen Blickwinkel auf das Einbetten von steganographischen<br />
Nachrichten.
ABBILDUNGSVERZEICHNIS 12<br />
Abbildungsverzeichnis<br />
1 JPEG Aufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1<br />
2 JPEG Frequnzhistogramm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2<br />
3 Steganographie in JPEG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2<br />
4 JSteg Algorithmus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3<br />
5 JSteg Histogramm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3<br />
6 F5 Algorithmus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5<br />
7 F5 Histogramm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6<br />
8 F5 Einbettungseffizienz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6<br />
9 Crop Angriff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7<br />
10 MBS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8<br />
11 MBS Modell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9<br />
12 MBS Einbettungseffizienz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10<br />
13 MBS Histogramm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11<br />
Literatur<br />
[BW04]<br />
Rainer Böhme and Andreas Westfeld. Breaking cauchy model-based jpeg steganography with first<br />
order statistics. 2004.<br />
[IHWC87] Radford M. Neal Ian H. Witten and John G. Cleary. Arithmetic coding for data compression.<br />
Commun. ACM, 30(6):520–540, 1987.<br />
[JFH]<br />
[JFS05]<br />
[Sal]<br />
Miroslav Goljan Jessica Fridrich and Dorin Hogea. Steganalysis of jpeg images: Breaking the f5<br />
algorithm.<br />
Petr Lisoněk Jessica Fridrich, Miroslav Goljan and David Soukal. Writing on wet paper. IEEE<br />
TRANSACTIONS ON SIGNAL PROCESSING, 53(10):3923–3935, 2005.<br />
Phil Sallee. Model-based steganography.<br />
[Wes01] Andreas Westfeld. F5 - ein steganographischer algorithmus. 2001.