Plaintext Watermarking

hallo miteinander,

ich plage mich seit geraumer seit mit einem thema das offensichtlich viel komplexer ist als es sich anhört...
es geht primär um das verstecken von informationen in klartext (also wirklich pures ASCII von 0 - 127 bit)

ausgehend von einem unbekanntem text T, muß ich eine markierung vornehmen und irgendwann auch mal
überprüfen ob T markiert wurde, also T = T'

meine constraints (die ich BEIDE erfüllen muss) sind die folgenden:
-------------------------------------------------------------------------
1.) ich darf den text von seiner semantischen ebene (also dem "sinn") her unter keinen umständen verändern...
was dank Natural Language Processing (kurz: NLP) Techniken irgendwie zu schaffen ist...

---> Beispiel:

Orginal, also T: "Das Haus, dass wir gesehen haben, war grün...hmm, oder doch blau?"
Markiert, also T' : "Das Haus, dass wir gesehen haben, war blau...hmm, oder doch grün?"

somit haben wir hier die semantik nicht verändert wohl aber die syntax...was uns zum
zweiten constraint führt...


2.) von der syntaktischen ebene her, darf ich tun und lassen was ich will...dies beinhaltet also z.b
das einfügen von nonprintable charachters wie die ersten: 0 - 32 bits sowie das 127 bit des ascii-
zeichensatzes (und ja ich bin an diesen gebunden, unicode kommt leider NICHT in frage...)
-------------------------------------------------------------------------

der 2.) constraint ist dahingehend eine herrausforderung, da wie wir alle wissen das kryptische
zeichen entstehen, wenn wir sonderzeichen irgendwo anhängen und damit der 1.) constraint zunichte
gemacht wird...das einizigste was den 1.) constraint nicht kapput machen würde, wäre das einfügen
von leerzeichen, jedoch aber auch nur am ende des textes. Das doofe dabei ist, hiermit lassen
sich keine bits unterscheiden ! angenommen wir haben folgenden text:

T = "jungs haben nur frauen, drogen und bla im kopf"
T' = "jungs haben nur drogen, frauen und bla im kopf"

somit wurde das 4 wort mit dem 5 wort vertauscht, diese positionen müsste ich logischerweise
irgendwo protokollieren und da liegt die problematik, ich habe nur leerzeichen zur verfügung :-(

hat irgendjemand ein denkanstoss für mich, wie ich die positionen unterbringen könnte ??
noch ein kleiner constraint ---> die protokollierung muß IM SELBEN file reingeschrieben werden...

wäre dankbar für jede idee...
 
Hallo,
also entweder bischen mit den Leerzeichen spielen, zum Beispiel mach aus einem Leerzeichen zwei Leerzeichen. Das Einfügen von Leerzeichen oder sonstigen Whitespaces ändert den Sinn ja nicht.

Oder vor jedem Zeilenumbruch fügt man ein Tab ein.
 
Ich würde einfach am Zeilenende - vor '\n' ein/mehrer Leerzeichen einfügen

T:
Code:
Das ist ein Test.
Und das auch.
T':
Code:
Das ist ein Test.         
Und das auch.

Das hat weder auswirkungen auf den Inhalt noch auf die Formatierung

---
mist - Elderan tab-idee übersehen
 
vielen dank für den tipp mit den tab, damit hätte ich schon mal 2 verschiedene zeichen die unsichtbar bleiben und könnte damit ein pseudo-binärsystem simmulieren um zumindest wort-positionen als zahlen zu codieren...

frage nun, wie codiere ich z.B eine vertauschung inkl. die positionen in denen diese erfolgt sind..??

Noch mal zurück zum beispiel:

T = "jungs haben nur frauen, drogen und bla im kopf"
T' = "jungs haben nur drogen, frauen und bla im kopf"

in T' müsste ich also am ende der zeile diese info unterbringen: Transformation(c,4,5)
was so zu interpretieren ist:

Es wurde die Transformation 'c' (ich habe insgesammt 8 zur auswahl: a,b,c,...) ausgewählt für den markierungsprozess mit den parametern 4 und 5, die die vertauschung der wort positionen entsprechen...

diese ganze infos mit 2 verschiedenen zeichen zu codieren ist eine kleine herrausforderung :-(

ich hatte gedacht ich könnte andere zeichen einsetzen z.B ein \n bzw. \r aber natürlich getrennt sonst ergeben sie beide ein absatz...benutze ich diese aber einzeln, treten die kryptischen zeichen auf ('quadrat') womit wieder die semantik kaputt geht...lustigerweise ist das aber auch editor-abhängig, im notepad tauchen z.B die kryptischen zeichen auf, wenn ich ein einzelnes \r einfüge, während in wordpad dieses zeichen unbemerkt bleibt (aber gut, wordpad hat ja auch eine RichEdit-komponente die eben fehlerhafte formatierungen einfach schluckt) ich muss also wirklich auf der untersten ebene bleiben (notepad oder ähnliche plaintext editoren)

ich habe im netz schon länger nach dem thema textmarkierungen gesucht, konnte aber nur wirklich 2 brauchbare sachen finden die ich nun nachimplementieren müsste:

1.) unter unix: "Snowdrop" (http://linuxappfinder.com/package/snowdrop) dieser verfolgt zumindest einen netten ansatz, liefert jedoch oft unbrauchbare resultate...

2.) unter windows: "TextMark" (http://www.compris.com/general/en/autoTextMark.html) hier wird auf der webseite viel versprochen, aber das tool, kann man gar nicht erst runterladen...die webseite ist ziemlich schlampig aufgebaut, sodass die da den download-link wohl vergessen haben...

alternativseiten habe ich nicht gefunden...überhaupt scheint das thema relativ frisch zu sein


naja, falls mir jemand noch einen konstruktiven denkanstoss geben könnte, wie ich die nötigen infos unterbringen soll, wäre ich ihm sehr dankbar..
 
Mein Ansatz, vll hilf er dir:

Annahme es gibt nur N Möglichkeiten zwischen 2 Zeilenumbrüchen im Text Vertauschungen vor zunehmen. Der Algo um diese zu finden wird ja immer der selbe sein.
Ich würde jetzt
Code:
bla bla \n _ _ _ _
Wo soll er heute hin Kino, Kneipe oder doch ins Bett. 
Ein Film wäre nett oder doch lieber ein Buch? bla bla \n _ _ _ _ _
Usw.
'_' stellt Leerzeichen dar.
Code:
\n _ _
Vertauschung wurde in dieser Zeile vorgenommen. Zusätzliche "_" gibt die genutzte Möglichkeit an.
Im Bsp. Möglichkeit 1:
Kino, Kneipe oder doch ins Bett
Möglichkeit 2:
Ein Film wäre nett oder doch lieber ein Buch
4 '_' folglich wurde zwischen diesem '\n' und dem nächsten die 2te Möglichkeit genutzt.
beim nächsten '\n' wird mit '_' die Variante codiert

MfG
 
Hallo,
eine Transformation von
"jungs haben nur frauen, drogen und bla im kopf" => "jungs haben nur drogen, frauen und bla im kopf" halte ich äußerst schwierig, da man erst (maschinell!!) die Semantik des Textes analysieren muss um dann zu gucken, ob man nichts kaputt macht.

Einfach nach z.B. einem Komma suchen und dann die Wörter vertauschen geht nicht. Da würde der Satz 'Dieser Satz, den ich mir gerade ausdenke, ergibt keinen Sinn' noch weniger Sinn ergeben.


Sonst wie gesagt, am besten lassen sich Zeilenumbrüche manipulieren (wenn man davon ausgeht, dass der Eingabetext ein paar hat).
Dann kann man jeden Zeilenumbruch als eine Stelle in einer Binärzahl sehen und ein zusätzliches Tab bedeutet eine 1 und wenn keins da ist eine 0.

Oder am Ende des Textes hängt man ne Kombo von Leerzeichen und Tabs an. Z.B. \t_\t_\t\t_ wäre die Zahl 1010110.

Wenn man nicht von 7 Bit Ascii ausgeht, was eh keiner nutzt, sondern von 8 Bit ASCII oder vergleichbaren (also kein Unicode), so haben diese i.d.R ein 'Space' und ein 'Non-breakable Space'. Wenn man als Space durch Non-breakable Spaces ersetzt, sollte das keinem Auffallen und man kann dann ähnlich wie mit der tab-Methode beliebige Binärwerte verstecken, indem man an den entsprechenden Stellen das Space durch ein non-breakable Space ersetzt.
 
Zurück
Oben