Heute werden wir wieder das alte Nest aufschlagen und darĂŒber sprechen, wie man mit der Katze ein paar Teile im Bild versteckt, verschiedene verfĂŒgbare Werkzeuge ansieht und die beliebtesten Angriffe analysiert. Und es scheint, was hat die SingularitĂ€t damit zu tun?
Wie sie sagen, wenn Sie etwas herausfinden wollen, dann schreiben Sie einen Artikel darĂŒber auf Habr! (Achtung, viel Text und Bilder)
Steganographie (wörtlich aus der griechischen "Kryptographie") ist die Wissenschaft der Ăbertragung versteckter Daten (Stego-Nachrichten) in andere offene Daten (Stegocontainer), wĂ€hrend die Tatsache der DatenĂŒbertragung verborgen bleibt. Seien Sie nicht beunruhigt, in der Tat ist nicht alles so kompliziert.
Wo im Bild können Sie die Nachricht verstecken, damit niemand es bemerkt?
Und es gibt nur zwei Stellen: Metadaten und das Bild selbst. Letzteres ist ganz einfach, geben Sie einfach
"exif" bei Google ein. Beginnen wir also gleich mit dem zweiten.
Am wenigsten bedeutendes StĂŒck
Das beliebteste Farbmodell ist RGB, bei dem die Farbe in Form von drei Komponenten dargestellt wird:
Rot, GrĂŒn und Blau . Jede Komponente wird in der klassischen Version mit 8 Bit codiert, dh sie kann einen Wert von 0 annehmen
Hier verbirgt sich das niedrigstwertige Bit. Es ist wichtig zu verstehen, dass eine solche RGB-Farbe drei solcher Bits ausmacht.
Um sie klarer darzustellen, werden wir einige kleine Manipulationen vornehmen.
Machen Sie wie versprochen ein Foto von einer Katze im PNG-Format.

Wir teilen es in drei KanĂ€le auf und nehmen in jedem Kanal das niedrigstwertige Bit. Erstellen Sie drei neue Bilder, wobei jedes Pixel fĂŒr NZB steht. Null - das Pixel ist weiĂ, die Einheit ist jeweils schwarz.
Wir bekommen das.
In der Regel befindet sich das Bild jedoch in der "zusammengesetzten Form". Um die NZB von drei Komponenten in einem Bild darzustellen, reicht es aus, die Komponente in einem Pixel zu ersetzen, in dem die NZB Eins ist, sie durch 255 zu ersetzen und sie ansonsten durch 0 zu ersetzen.
Dann stellt sich heraus, dass
Kann ich hier etwas einfĂŒgen?
Aber nicht weniger bedeutsam
Stellen Sie sich vor, alles, was wir auf dem letzten Bild gesehen haben, gehört uns und wir haben das Recht, alles damit zu tun. Dann nehmen wir es als einen Strom von Bits, von wo aus wir lesen und wo wir schreiben können.
Wir nehmen die Daten, die wir in das Bild einstreuen möchten, prÀsentieren sie in Form von Bits und schreiben sie anstelle der vorhandenen auf.
Um diese Daten zu extrahieren, lesen wir die NZB als Bitstrom und bringen sie in die gewĂŒnschte Form. Um herauszufinden, wie viele Bits gezĂ€hlt werden mĂŒssen, wird in der Regel die NachrichtengröĂe an den Anfang geschrieben. Dies sind jedoch Implementierungsdetails.
Es ist zu beachten, dass in etwa 50% der FĂ€lle das Bit, das wir schreiben möchten, und das Bit im Bild zusammenfallen und wir nichts Ă€ndern mĂŒssen.
Das ist alles, die Methode endet hier.
Warum funktioniert es?
Schauen Sie sich die Bilder unten an.
Dies ist ein leerer Stegocontainer:

Und das ist zu 95% voll:

Sehen Sie den Unterschied? Aber sie ist es. Warum so?
Schauen wir uns zwei Farben an: (0, 0, 0) und (1, 1, 1), dh Farben, die sich nur durch die NZB in jeder Komponente unterscheiden.

Geringe Pixelunterschiede auf den ersten, zweiten und dritten Blick sind nicht erkennbar. Tatsache ist, dass unser Auge ungefÀhr 10 Millionen Farben unterscheiden kann und das Gehirn nur ungefÀhr 150. Das RGB-Modell enthÀlt auch 16.777.216 Farben. Sie können versuchen, sie alle
hier zu unterscheiden
.Ăber die Befehlszeile
Es sind nicht viele Open Source-Befehlszeilentools verfĂŒgbar, die die LSB-Steganographie darstellen.
Die beliebtesten finden Sie in der folgenden Tabelle.
Wo ist die Katze?
Und der erste in der Liste der Angriffe auf die LSB-Steganographie ist ein visueller Angriff. Klingt komisch, nicht wahr? Immerhin hat sich die Katze mit dem Geheimnis auf den ersten Blick nicht als gefĂŒllter Stegocontainer verraten. Hmmm ... Sie mĂŒssen nur wissen, wo Sie suchen mĂŒssen. Es ist leicht zu erraten, dass nur die NZB unsere Aufmerksamkeit verdient.
FĂŒr einen gefĂŒllten Stegocontainer sieht das Bild mit NZB folgendermaĂen aus:

Glaubst du nicht? Hier haben Sie NZB von allen drei KanÀlen getrennt:
Dies ist eine "Zeichnung", die speziell zum Ausblenden der Nachricht in der NZB dient. Auf den ersten Blick scheint dies ein einfaches GerĂ€usch zu sein. Aber wenn man bedenkt, ist die Struktur sichtbar. Hier sehen Sie, dass der Stegocontainer voll ist. Wenn wir eine Nachricht mit 30% der KapazitĂ€t einer armen Katze aufnehmen wĂŒrden, wĂŒrden wir folgendes Bild erhalten:
Sein NZB:

~ 70% der Katze bleiben unverÀndert.
Hier lohnt es sich, einen kleinen Exkurs zu machen und ĂŒber GröĂen zu sprechen. Was ist eine 30% Katze? Die GröĂe der Katze betrĂ€gt 603x433 Pixel. 30% dieser GröĂe sind 78459 Pixel. Jedes Pixel enthĂ€lt 3 Informationsbits. Insgesamt 78459 3 = 235377 Bits oder etwas weniger als 30 Kilobyte passen in 30% der Dichtung. Und in die ganze Katze passen etwa 100 Kilobyte. Solche Dinge.
Aber wir sind aus einem bestimmten Grund fĂŒr Sie da. Wie kann man dann die Augen tĂ€uschen?
Erster Gedanke: Stecke die Nachricht in den LĂ€rm. Aber es war nicht da. Als nĂ€chstes folgt ein Fragment des gefĂŒllten Stegocontainers und seines LSB.

Mit ein wenig Aufwand können wir immer noch eine vertraute Struktur erkennen. Verlieren Sie nicht die Hoffnung, meine Herren!
Hee hee hee
Viele Dinge brechen die Statistik, wissen Sie.
Wenn wir etwas im Bild Ă€ndern, Ă€ndern wir seine statistischen Eigenschaften. Es reicht fĂŒr den Analysten aus, einen Weg zu finden, um diese Ănderungen zu beheben.
Der gute alte Chi-Platz wurde von Andreas Wesfield und Andreas Pfitzmann von der UniversitĂ€t Dresden in ihrer Arbeit âAttacks on Steganographic Systemsâ ins Leben gerufen, die
hier zu finden
ist.Im Folgenden werden wir ĂŒber Angriffe innerhalb derselben Farbebene oder im Kontext von RGB ĂŒber Angriffe auf einen Kanal sprechen. Die Ergebnisse jedes Angriffs können auf den Durchschnitt reduziert werden und das Ergebnis fĂŒr das âzusammengesetzteâ Bild erhalten.
Der Chi-Quadrat-Angriff basiert also auf der Annahme, dass die Wahrscheinlichkeit des gleichzeitigen Auftretens benachbarter (durch das niedrigstwertiges Bit unterschiedlicher) Farben (Wertepaare) in einem leeren Stegocontainer Ă€uĂerst gering ist. Es ist wirklich so, man kann es glauben. Mit anderen Worten, die Anzahl der Pixel zweier benachbarter Farben unterscheidet sich fĂŒr einen leeren BehĂ€lter erheblich. Wir mĂŒssen lediglich die Anzahl der Pixel jeder Farbe berechnen und einige Formeln anwenden. TatsĂ€chlich ist dies eine einfache Aufgabe, um eine Hypothese unter Verwendung des Chi-Quadrat-Tests zu testen.
Ein bisschen Mathe?
Sei h ein Array an der i-ten Stelle, das die Anzahl der Pixel der i-ten Farbe in dem untersuchten Bild enthÀlt.
Dann:
- Gemessene Farbfrequenz i = 2 k ::
n k = h [ 2 k ] , k i n [ 0 , 127 ] ;
- Theoretisch erwartete Farbfrequenz i = 2 k ::
n †k = f r a c h [ 2 k ] + h [ 2 k + 1 ] 2 , k i n [ 0 , 127 ] ;
UPD: Eine kleine ErklÀrung zu den obigen FormelnViele werden eine Frage haben: Warum nehmen wir einen solchen Index? Warum genau 2k?
Sie mĂŒssen bedenken, dass wir mit benachbarten Farben arbeiten, dh mit Farben (Zahlen), die sich nur im niedrigstwertigen Bit unterscheiden. Sie gehen paarweise nacheinander:
[0(00),1(01)] [2(10),3(11)] und usw.
Wenn die Anzahl der Pixel in Farbe 2k und 2k + 1 sehr unterschiedlich ist, ist die gemessene Frequenz und theoretisch erwartet unterschiedlich, was fĂŒr einen leeren Stegocontainer normal ist.
Wenn Sie dies in Python ĂŒbersetzen, erhalten Sie ungefĂ€hr Folgendes:
for k in range(0, len(histogram) // 2): expected.append(((histogram[2 * k] + histogram[2 * k + 1]) / 2)) observed.append(histogram[2 * k])
Wobei das Histogramm die Anzahl der Pixel der Farbe i im Bild ist,
i i n [ 0 , 255 ] Das Chi-Quadrat-Kriterium fĂŒr die Anzahl der Freiheitsgrade k-1 wird wie folgt berechnet (k ist die Anzahl verschiedener Farben, d. H. 256):
chi2kâ1= sumki=1 frac(nkânâk)2nâk;
Und schlieĂlich ist P die Wahrscheinlichkeit, dass die Verteilungen
ni und
nâi Unter diesen Bedingungen sind sie gleich (die Wahrscheinlichkeit, dass wir einen gefĂŒllten Stegocontainer haben). Sie wird durch Integration der GlĂ€ttungsfunktion berechnet:
P=1â frac12 frackâ12 Gamma( frackâ12) int chi2kâ10eâ fracx2x frackâ12â1dx;
Am effektivsten ist es, ein Chi-Quadrat nicht auf das gesamte Bild anzuwenden, sondern nur auf seine Teile, beispielsweise auf die Linien. Wenn die berechnete Wahrscheinlichkeit fĂŒr die Linie gröĂer als 0,5 ist, fĂŒllen Sie die Linie im Originalbild mit Rot. Wenn weniger, dann grĂŒn. Bei einer Katze mit 30% FĂŒlle sieht das Bild wie folgt aus:

Ganz richtig, nicht wahr?
Nun, wir haben einen mathematisch fundierten Angriff, Sie können die Mathematik nicht tÀuschen! Oder ... ??
Mische Tanz
Die Idee ist ganz einfach: Schreiben Sie die Bits nicht in der richtigen Reihenfolge, sondern an zufĂ€lligen Stellen. Dazu mĂŒssen Sie das PRSP nehmen und so konfigurieren, dass es denselben zufĂ€lligen Stream mit derselben Seite (auch als Passwort bezeichnet) ausgibt. Ohne Kenntnis des Passworts können wir das PRNG nicht konfigurieren und die Pixel finden, in denen die Nachricht versteckt ist. Wir werden es an einer Katze testen.
KĂ€tzchen (32% Abschluss):

Sein LSB:

Das Bild sieht laut aus, ist aber fĂŒr einen unerfahrenen Analysten nicht verdĂ€chtig. Was sagt Chi-Quadrat?
Es scheint, der schwarze Hut hat gewonnen !? Egal wie ...
RegelmĂ€Ăigkeit-SingularitĂ€t
Eine weitere statistische Methode war 2001 Jessica Friedrich, Miroslav Golyan und Andreas Pfitzman. Es wurde als RS-Methode bezeichnet. Der Originalartikel kann hier genommen
werden.Das Verfahren enthÀlt mehrere vorbereitende Schritte.
Das Bild ist in Gruppen von n Pixeln unterteilt. Zum Beispiel 4 aufeinanderfolgende Pixel in einer Reihe. Solche Gruppen enthalten in der Regel benachbarte Pixel.
FĂŒr unsere Katze mit sequentieller FĂŒllung im roten Kanal sind die ersten fĂŒnf Gruppen:
- [78, 78, 79, 78]
- [78, 78, 78, 78]
- [78, 79, 78, 79]
- [79, 76, 79, 76]
- [76, 76, 76, 77]
(Alle Messungen sind in der klassischen Version von RGB)
Dann definieren wir die sogenannte Diskriminanzfunktion oder GlĂ€ttungsfunktion, die jede Pixelgruppe einer reellen Zahl zuordnet. Der Zweck dieser Funktion besteht darin, die GlĂ€tte oder "RegelmĂ€Ăigkeit" der Pixelgruppe G zu erfassen. Je lauter die Pixelgruppe ist
G=(x1,...,xn) desto wichtiger wird die Diskriminanzfunktion sein. Am hĂ€ufigsten wird eine "Variation" einer Gruppe von Pixeln gewĂ€hlt, oder einfacher die Summe der Unterschiede benachbarter Pixel in einer Gruppe. Es können aber auch statistische Annahmen ĂŒber das Bild berĂŒcksichtigt werden.
f(x1,x2,...,xn)= sumnâ1i=1|xi+1âxi|
Die Werte der GlĂ€ttungsfunktion fĂŒr eine Gruppe von Pixeln aus unserem Beispiel:
- f (78, 78, 79, 78) = 2
- f (78, 78, 78, 78) = 0
- f (78, 79, 78, 79) = 3
- f (79, 76, 79, 76) = 9
- f (76, 76, 76, 77) = 1
Als nÀchstes wird die Klasse der Flip-Funktionen von einem Pixel bestimmt.
Sie mĂŒssen einige Eigenschaften haben.
1. ~~~ \ forall x \ in P: ~ F (F (x)) = x, ~~ P = \ {0, ~ 255 \};
2. F1:0 leftrightarrow1, 2 leftrightarrow3, ...,254 leftrightarrow255;
3 forallx inP: Fâ1(x)=F1(x+1)â1;
Wo
F - jede Funktion aus einer Klasse,
F1 Ist eine direkte Flip-Funktion und
Fâ1 - umkehren. AuĂerdem wird ĂŒblicherweise die identische Flip-Funktion bezeichnet
F0 das Àndert das Pixel nicht.
Die Python-Flip-Funktionen könnten ungefĂ€hr so ââaussehen:
def flip(val): if val & 1: return val - 1 return val + 1 def invert_flip(val): if val & 1: return val + 1 return val - 1 def null_flip(val): return val
FĂŒr jede Pixelgruppe wenden wir eine der Flip-Funktionen an und bestimmen basierend auf dem Wert der Diskriminanzfunktion vor und nach dem Flip den Typ der Pixelgruppe: normal (regelmĂ€Ăig), einzeln / ungewöhnlich (singulĂ€r) und
unbrauchbar unbrauchbar. Da der letztere Typ nicht weiter verwendet wird, wurde die Methode nach den ersten Buchstaben der SchlĂŒsseltypen benannt. Das ist das ganze Geheimnis des Namens, die SingularitĂ€t hat nichts damit zu tun :)

Möglicherweise
möchten wir unterschiedliche Pixel auf verschiedene Pixel anwenden. Dazu definieren wir eine Maske M mit n Werten von -1, 0 oder 1.
FM(G)=(FM(1)(x1),FM(2)(x2),...,FM(n)(xn))
Die Maske fĂŒr unser Beispiel sei klassisch - [1, 0, 0, 1]. Es wurde experimentell festgestellt, dass symmetrische Masken, die nicht enthalten
Fâ1 . Ebenfalls erfolgreiche Optionen wĂ€ren: [0, 1, 0, 1], [0, 1, 1, 0], [1, 0, 1, 0]. Wir wenden das Spiegeln fĂŒr die Gruppen aus dem Beispiel an, berechnen den GlĂ€ttungswert und bestimmen den Typ der Pixelgruppe:
- Fm (78, 78, 79, 78) = [79, 78, 79, 79];
f (79, 78, 79, 79) = 2 = 2 = f (78, 78, 79, 78)
Nicht verwendbare Gruppe
- Fm (78, 78, 78, 78) = [79, 78, 78, 79];
f (79, 78, 78, 79) = 2> 0 = f (78, 78, 78, 78)
RegelmĂ€Ăige Gruppe
- Fm (78, 79, 78, 79) = [79, 79, 78, 78];
f (79, 79, 78, 78) = 1 <3 = f (78, 79, 78, 79) SingulÀre Gruppe
- Fm (79, 76, 79, 76) = [78, 76, 79, 77];
f (78, 76, 79, 77) = 7 <9 = f (79, 76, 79, 76) SingulÀre Gruppe
- Fm (76, 76, 76, 77) = [77, 76, 76, 76];
f (77, 76, 76, 76) = 1 = 1 = f (76, 76, 76, 77)
Nicht verwendbare Gruppe
Wir bezeichnen die Anzahl der regulĂ€ren Gruppen fĂŒr die Maske M als
RM (in Prozent aller Gruppen) und
SM fĂŒr einzelne Gruppen.
Dann
RM+SM leq1 und
RâM+SâM leq1 fĂŒr eine negative Maske (alle Maskenkomponenten werden mit -1 multipliziert), weil
RM+SM+UM=1 , dabei
UM kann leer sein. Ăhnliches gilt fĂŒr eine negative Maske.
Die wichtigste statistische Hypothese ist, dass in einem typischen Bild der erwartete Wert
RM gleich
RâM und das gleiche gilt fĂŒr
SM und
SâM . Dies wird durch experimentelle Daten und einige TĂ€nze mit einem Tamburin um die letzte Eigenschaft der Flip-Funktion bewiesen.
RM congSM RâM congSâM
Schauen wir uns unser kleines Beispiel an. Angesichts der geringen StichprobengröĂe können wir diese Hypothese möglicherweise nicht bestĂ€tigen. Mal sehen, was mit der invertierten Maske passiert: [-1, 0, 0, -1].
- F_M (78, 78, 79, 78) = [77, 78, 79, 77];
f (77, 78, 79, 77) = 4> 2 = f (77, 78, 79, 77)
RegelmĂ€Ăige Gruppe
- F_M (78, 78, 78, 78) = [77, 78, 78, 77];
f (77, 78, 78, 77) = 2> 0 = f (78, 78, 78, 78)
RegelmĂ€Ăige Gruppe
- F_M (78, 79, 78, 79) = [77, 79, 78, 80];
f (77, 79, 78, 80) = 5> 3 = f (78, 79, 78, 79)
RegelmĂ€Ăige Gruppe
- F_M (79, 76, 79, 76) = [80, 76, 79, 75];
f (80, 76, 79, 75) = 11> 9 = f (79, 76, 79, 76)
RegelmĂ€Ăige Gruppe
- F_M (76, 76, 76, 77) = [75, 76, 76, 78];
f (75, 76, 76, 78) = 3> 1 = f (76, 76, 76, 77)
RegelmĂ€Ăige Gruppe
Nun, alles ist offensichtlich.
Allerdings ist der Unterschied zwischen
RM und
SM neigen zu Null, wenn die LĂ€nge m der eingebetteten Nachricht zunimmt und wir das bekommen
RM congSM .
Es ist lustig, dass die Randomisierung der LSB-Ebene den gegenteiligen Effekt hat
RâM und
SâM . Ihre Differenz nimmt mit der LĂ€nge m der eingebetteten Nachricht zu. Eine ErklĂ€rung dieses PhĂ€nomens finden Sie im Originalartikel.
Hier ist der Zeitplan
RM ,
SM ,
RâM und
SâM AbhĂ€ngig von der Anzahl der Pixel mit invertierten LSBs wird es als RS-Diagramm bezeichnet. Die x-Achse ist der Prozentsatz der Pixel mit invertierten LSBs, die y-Achse ist die relative Anzahl der regulĂ€ren und singulĂ€ren Gruppen mit den Masken M und -M.
M=[0 1 1 0] .

Die RS-Steganalyse besteht im Wesentlichen darin, die vier Kurven des RS-Diagramms auszuwerten und ihren Schnittpunkt mithilfe von Extrapolation zu berechnen. Angenommen, wir haben einen Stegocontainer mit einer Nachricht unbekannter LÀnge p (als Prozentsatz der Pixel), die in die unteren Bits zufÀllig ausgewÀhlter Pixel eingebettet ist (d. H. Unter Verwendung von RandomLSB). Unsere ersten Messungen der Anzahl der Gruppen R und S entsprechen Punkten
RM(p/2) ,
SM(p/2) ,
RâM(p/2) und
SâM(p/2) . Wir nehmen Punkte von genau der halben LĂ€nge der Nachricht, da die Nachricht ein zufĂ€lliger Bitstrom ist und im Durchschnitt, wie bereits erwĂ€hnt, nur die HĂ€lfte der Pixel durch Einbetten der Nachricht geĂ€ndert wird.
Wenn wir das LSB aller Pixel im Bild invertieren und die Anzahl der R- und S-Gruppen berechnen, erhalten wir vier Punkte
RM(1âp/2) ,
SM(1âp/2) ,
RâM(1âp/2) und
SâM(1âp/2) . Da diese beiden Punkte von der spezifischen Randomisierung des LSB abhĂ€ngen, mĂŒssen wir diesen Vorgang viele Male wiederholen und bewerten
RM(1/2) und
SM(1/2) aus statistischen Stichproben.
Wir können bedingt Linien durch Punkte ziehen
RâM(p/2) ,
RâM(1âp/2) und
SâM(p/2) ,
SâM(1âp/2) .
Punkte
RM(p/2) ,
RM(1/2) ,
RM(1âp/2) und
SM(p/2) ,
SM(1/2) ,
SM(1âp/2) Definieren Sie zwei Parabeln. Jede Parabel und die entsprechende Linie schneiden sich links. Das arithmetische Mittel der x-Koordinaten beider Schnittpunkte ermöglicht es uns, die unbekannte NachrichtenlĂ€nge p abzuschĂ€tzen.
Um eine lange statistische SchĂ€tzung der Mittelpunkte RM (1/2) und SM (1/2) zu vermeiden, können einige weitere Ăberlegungen angestellt werden:
- Kurvenschnittpunkt RM und RâM hat die gleiche x-Koordinate wie der Schnittpunkt fĂŒr die Kurven SM und SâM . Dies ist im Wesentlichen eine strengere Version unserer statistischen Hypothese. (siehe oben)
- Die RM- und SM-Kurven schneiden sich bei m = 50% oder RM(1/2)=SM(1/2) .
Diese beiden Annahmen liefern eine einfache Formel fĂŒr die LĂ€nge der geheimen Nachricht p. Nachdem die x-Achse so skaliert wurde, dass p / 2 zu 0 und 1 - p / 2 zu 1 wird, ist die x-Koordinate des Schnittpunkts die Wurzel der folgenden quadratischen Gleichung

Dann kann die NachrichtenlÀnge durch die Formel berechnet werden:
p= fracxxâ frac12
Hier betritt unsere Katze die Szene. (Ist es nicht Zeit, ihm einen Namen zu geben?)
Also haben wir:
- RegelmĂ€Ăige RM-Gruppen (p / 2): 23121 Stk.
- SingulÀre SM-Gruppen (p / 2): 14124 Stk.
- RegelmĂ€Ăige Gruppen mit umgekehrter Maske RM (p / 2): 37191 Stk.
- Einzelgruppen mit umgekehrter Maske SM (p / 2): 8440 Stk.
- RegelmĂ€Ăige Gruppen mit invertiertem LSB RM (1-p / 2): 20298 Stk.
- Einzelgruppen mit invertiertem LSB SM (1-p / 2): 16206 Stk.
- RegelmĂ€Ăige Gruppen mit invertiertem LSB und invertierter Maske RM (1-p / 2): 40603 Stk.
- Einzelne Gruppen mit invertiertem LSB und mit invertierter Maske SM (1-p / 2): 6947 Stk.
(Wenn Sie viel Freizeit haben, können Sie diese selbst berechnen, aber ich schlage vor, Sie glauben meinen Berechnungen.)
Auf der Tagesordnung haben wir eine bloĂe Mathematik gelassen. Erinnern Sie sich noch daran, wie man quadratische Gleichungen löst?
d0=8997
dâ0=$2875
d1=4092
dâ1=33656
Wenn wir alle d in der obigen Formel einsetzen, erhalten wir eine quadratische Gleichung, die wir wie in der Schule gelehrt lösen.
26178x2â35988xâ19754=0
D=(â35988)2â426178â(â19754)=$336361699
x1=1.7951 x2=â0.4204
Nehmen Sie eine Wurzel mit
kleinerem Modul, d.h.
x2 . Dann ist die ungefĂ€hre SchĂ€tzung fĂŒr die in die Katze eingebaute Nachricht folgende:
p= fracâ0,4204â0,4204â0,5=0,4567
Ja, diese Methode hat ein groĂes Plus und ein groĂes Minus. Der Vorteil ist, dass die Methode sowohl mit der gewöhnlichen LSB-Steganographie als auch mit der RandomLSB-Steganographie funktioniert. Ein Chi-Quadrat kann sich einer solchen Gelegenheit nicht rĂŒhmen. Die Methode erkannte unsere
zufÀllig aussehende Katze genau und schÀtzte die NachrichtenlÀnge auf 0,3256, was sehr, sehr genau ist.
Das Minus liegt im groĂen (sehr groĂen) Fehler dieser Methode, der mit der langen Nachricht
mit sequentieller Einbettung wĂ€chst. Zum Beispiel ergibt meine Implementierung der Methode fĂŒr eine Katze mit einer Belegung von 30% eine ungefĂ€hre durchschnittliche SchĂ€tzung fĂŒr drei KanĂ€le von 0,4633 oder 46% der GesamtkapazitĂ€t bei einer Belegung von mehr als 95% - 0,8597. Aber fĂŒr eine leere Katze bis zu 0,0054. Und dies ist ein allgemeiner Trend, der unabhĂ€ngig von der Umsetzung ist. Die genauesten Ergebnisse mit der normalen LSB-Methode ergeben eine integrierte NachrichtenlĂ€nge von 10% + - 5%.
Plus oder Minus
Um nicht erwischt zu werden, muss man unerwartet sein und ± 1 Codierung verwenden. Anstatt das niedrigstwertige Bit im Farbbyte zu Àndern, erhöhen oder verringern wir das gesamte Byte um eins. Es gibt nur zwei Ausnahmen:
- wir können Null nicht reduzieren, deshalb werden wir sie erhöhen,
- Wir können 255 auch nicht erhöhen, daher werden wir diesen Wert immer verringern.
FĂŒr alle anderen Bytewerte wĂ€hlen wir entweder zufĂ€llig eine Erhöhung um eins oder eine Verringerung aus. ZusĂ€tzlich zu dieser Manipulation Ă€ndert sich das LSB wie zuvor. FĂŒr eine höhere ZuverlĂ€ssigkeit ist es besser, zufĂ€llige Bytes zum Aufzeichnen einer Nachricht zu verwenden.
Hier ist unsere Freundin Katze:

ĂuĂerlich ist die Einleitung aus demselben Grund unmerklich genau, warum die Unterschiede zwischen (0, 0, 0) und (1, 1, 1) nicht sichtbar waren.

Das LSB-Slice bleibt aufgrund der Aufnahme an zufÀlligen Stellen einfach verrauscht.

Das Chi-Quadrat ist immer noch blind und die RS-Methode ergibt eine grobe SchÀtzung von
0,0036 .
Um nicht sehr glĂŒcklich zu sein, lesen Sie
diesen Artikel hier.
Die aufmerksamsten fragen sich möglicherweise, wie wir eine Nachricht erhalten können, wenn ganze Bytes zufĂ€llig geĂ€ndert werden, und wir haben kein Passwort zum Festlegen des PRNG (es ist besser, verschiedene Seeds, auch bekannt als den Status des Generators oder Passwörter, fĂŒr die Arbeit mit RandomLSB und ± 1-Codierung zu verwenden). Die Antwort ist so einfach wie möglich. Wir erhalten die Nachricht genauso wie ohne ± 1 Codierung. Wir wissen möglicherweise nicht einmal ĂŒber seine Verwendung. Ich wiederhole, wir verwenden diesen Trick
nur, um automatische Erkennungswerkzeuge zu umgehen . Beim Einbetten / Abrufen einer Nachricht arbeiten wir nur mit ihrem LSB und nicht mehr. Bei der Erkennung mĂŒssen wir jedoch den Implementierungskontext berĂŒcksichtigen, dh alle Bytes des Bildes, um statistische SchĂ€tzungen zu erstellen. Dies ist genau der gesamte Erfolg der ± 1-Codierung.
Anstelle einer Schlussfolgerung
Ein weiterer sehr guter Versuch, Statistiken gegen die LSB-Steganographie zu verwenden, wurde mit einer Methode namens Sample Pairs unternommen. Sie finden es
hier. Seine Anwesenheit hier wĂŒrde den Artikel zu akademisch machen, deshalb lasse ich ihn fĂŒr das auĂerschulische Lesen interessiert. Aber im Vorgriff auf die Fragen des Publikums werde ich sofort antworten: Nein, er fĂ€ngt keine ± 1-Codierung ab.
Und natĂŒrlich maschinelles Lernen. Moderne Methoden, die auf ML basieren, liefern sehr gute Ergebnisse. Sie können
hier und
hier darĂŒber lesen.
Basierend auf diesem Artikel wurde (vorerst) ein kleines
Tool geschrieben. Es kann Daten generieren, einen visuellen Angriff separat auf die KanĂ€le ausfĂŒhren, die RS-, SPA-Bewertung berechnen und die Ergebnisse des Chi-Quadrats visualisieren. Und sie wird dort nicht aufhören.
Zusammenfassend möchte ich ein paar Tipps geben:
- Betten Sie die Nachricht in zufÀllige Bytes ein.
- Reduzieren Sie die Menge der eingebetteten Informationen so weit wie möglich (denken Sie an Onkel Hamming).
- Verwenden Sie ± 1 Codierung.
- WĂ€hlen Sie Bilder mit verrauschtem LSB.
- Remdalps UPD: Verwenden Sie Bilder, die nirgendwo erscheinen.
- Sei nett!
Ich freue mich ĂŒber Ihre VorschlĂ€ge, ErgĂ€nzungen, Korrekturen und sonstigen RĂŒckmeldungen!
PS Ich möchte mich ganz besonders bei
PavelMSTU fĂŒr die Beratungen und Motivationskicks
bedanken .