-
Technisches Gebiet
-
Die
vorliegende Erfindung betrifft eine Wasserzeichen-Einfügevorrichtung,
die ein Wasserzeichen in ein Programm einfügt, um die illegale Verwendung
und Verteilung des Programms zu verhindern und zu unterdrücken, sowie
eine Wasserzeichen-Extrahiervorrichtung.
-
Hintergrund der Technik
-
Mit
der Weiterentwicklung von Computernetzwerken ist es heute allgemein
verbreitet, dass Computerprogramme über Netzwerke verteilt werden.
Da ein Computerprogramm auf einfache Weise kopiert werden kann,
besteht die Möglichkeit
einer illegalen sekundären
Verteilung von Programmkopien sowie eines Diebstahls oder eines
Manipulierens von Algorithmen in Programmen. Dementsprechend besteht
ein Bedarf an dem Schützen
der Programme vor solch einer illegalen Verwendung.
-
Ein
Beispiel einer herkömmlichen
Technologie zum Schützen
von Programmen ist ein Verfahren, bei dem ein elektronisches Wasserzeichen
in ein Programm eingefügt
wird. Mit diesem Verfahren wird ein Programm mit unterschiedlichen
Wasserzeichen, die für
jedes Verteilungsziel eingebettet sind, verteilt. Dann wird in dem
Fall einer illegalen Verwendung das Wasserzeichen von dem Programm
des illegalen Benutzers extrahiert, und dieses Wasserzeichen wird analysiert.
Durch diese Vorrichtung kann die Quelle des Umlaufs auf einfache
Weise erfasst werden.
-
Ein
tatsächliches
Verfahren zum Einfügen von
Wasserzeichen wird beispielsweise in der
Ungeprüften
Japanischen Offenlegungsschrift Nr. 2000-76064 (Seiten
3 bis 4,
2,
7) offenbart.
-
Mit
diesem Verfahren wird zuerst der Code ohne Abhängigkeitsverhältnis zu
der Reihenfolge der Ausführung
erfasst. Als Nächstes
wird in den erfassten Teil eine Scheinvariablen-Operation eingefügt. Anschließend wird
die Reihenfolge der Ausführung des erfassten
Teils, der die Scheinvariablen-Operation enthält, auf Zufallsbasis umgeschaltet.
-
Mittels
einer solchen Verarbeitung wird ein Mechanismus implementiert, der
diese Reihenfolge der Ausführung
als elektronisches Wasserzeichen für jedes Verteilungsziel ändert.
-
Ein
Problem mit dem herkömmlichen
Verfahren des Einfügens
eines elektronischen Wasserzeichens in ein Programm besteht jedoch
darin, dass es einfach ist, ein Wasserzeichen auf Basis eines Kollusionsangriffes
zu ändern
oder zu löschen.
-
Ein „Kollusionsangriff" ist ein Angriff,
bei dem die Einfügungsorte
von Wasserzeichendaten durch Finden der Unterschiede in einer Vielzahl
von Programmen, in die Wasserzeichen eingefügt worden sind, identifiziert
werden.
-
Wenn
für jedes
Verteilungsziel ein unterschiedliches Wasserzeichen in ein Programm
eingefügt
wird, würden,
wenn Unterschiede zwischen den Programmen, die zu jedem Verteilungsziel
gefunden werden, lediglich die Orte, an denen Wasserzeichen eingefügt worden
sind, als Unterschiede zu Tage treten. Dementsprechend besteht ein
Problem dahingehend, dass die Einfügungsorte von Wasserzeichen auf
einfache Weise identifiziert werden können und dass ein Wasserzeichen
auf einfache Weise gelöscht oder
geändert
werden kann.
-
Collberg,
C. S., 2002 („Watermarking,
Tamper-Proofing, and obfuscation – Tools for Software Protection", IEEE, ISSN: 0098
bis 5598) spiegelt die grundlegende Funktionalität von Manipulationssicherheit
wieder. Es offenbart das Verfahren, bei dem die empfangende Seite
des Programms, das Verteilungsziel, einen Wert eines Codes, der
an der Verteilungsquelle berechnet wird, mit dem Wert des Wasserzeichen-Prüfcodes,
einem Code zum Manipulationsschutz, der an dem Verteilungsziel berechnet wird,
vergleicht. Die Verteilungsquelle des Programms fügt ein Wasserzeichen,
das sich für
jedes Verteilungsziel des Programms unterscheidet, sowie einen Wasserzeichen-Prüfcode, der
sich für
jedes Verteilungsziel des Programms unterscheidet, ein. Demzufolge
sind sowohl der Wasserzeichen-Prüfcode,
der Manipulationsschutz-Code und das Wasserzeichen selbst für jedes
Verteilungsziel des Programms unterschiedlich.
-
Offenbarung der Erfindung
-
Es
ist eine Aufgabe der vorliegenden Erfindung, das einfache Generieren
eines Programms, das ein Wasserzeichen hat und normal arbeitet, durch
Einfügen
eines Wasserzeichens auf eine Weise, bei der der Einfügungsort
des Wasserzeichens nicht identifiziert werden kann, zu verhindern.
-
Die
vorliegende Erfindung generiert ein Wasserzeichen anhand von Kennungsinformationen,
die ein Programmziel eindeutig identifizieren, fügt das generierte Wasserzeichen
in ein Programm ein und verhindert, dass das Programm ordnungsgemäß arbeitet,
wenn das Wasserzeichen manipuliert ist, und fügt darüber hinaus denselben Wasserzeichen-Prüfode ein,
um zu prüfen,
ob das Wasserzeichen in einem Programm ungeachtet des Verteilungsziels
manipuliert ist.
-
Mittels
dieser Vorrichtung ist es möglich,
das Erfassen eines Wasserzeichen-Prüfcodes, der ein Wasserzeichen
darstellt, mit Hilfe eines Kollusionsangriffes zu verhindern. Als
ein Ergebnis kann ein Verteilungsziel kein Programm generieren,
das kein Wasserzeichen hat und normal arbeitet und ist dementsprechend
nicht in der Lage, ein Programm illegal in Umlauf zu bringen.
-
Kurze Beschreibung der Zeichnungen
-
1 ist
ein Konfigurationsdiagramm eines Systems zur Verhinderung der illegalen
Verteilung von Programmen, das mittels eines Einfügens von Wasserzeichen
in Übereinstimmung
mit der Ausführungsform
1 der vorliegenden Erfindung implementiert wird;
-
2 ist
ein Konfigurationsdiagramm einer Wasserzeichen-Einfügevorrichtung
in Übereinstimmung
mit der Ausführungsform
1;
-
3 ist
ein Konfigurationsdiagramm einer Wasserzeichen-Extrahiervorrichtung
in Übereinstimmung
mit der Ausführungsform
1;
-
4 ist
ein Ablaufplan, der die Funktionsweise eines Wasserzeichen-Einfügeabschnittes
in Übereinstimmung
mit der Ausführungsform
1 darstellt;
-
5 ist
eine Zeichnung, die einen Programmcode darstellt, der generiert
wird, wenn Ausführungsform
1 angewendet wird;
-
6 ist
ein Ablaufplan, der die Funktionsweise eines Wasserzeichen-Erfassungsabschnittes der
Ausführungsform
1 darstellt;
-
7 ist
ein Ablaufplan, der die Funktionsweise eines Wasserzeichen-Einfügeabschnittes
in Übereinstimmung
mit der Ausführungsform
2 der vorliegenden Erfindung darstellt;
-
8 ist
eine Zeichnung, die einen Programmcode darstellt, der durch einen
Wasserzeichen-Einfügeabschnitt
in Übereinstimmung
mit der Ausführungsform
2 generiert wird;
-
9 ist
ein Ablaufplan, der die Funktionsweise eines Wasserzeichen-Einfügeabschnittes
in Übereinstimmung
mit der Ausführungsform
3 der vorliegenden Erfindung darstellt;
-
10 ist
eine Zeichnung, die einen Programmcode darstellt, der durch einen
Wasserzeichen-Einfügeabschnitt
in Übereinstimmung
mit der Ausführungsform
3 generiert wird;
-
11 ist
ein 1 Konfigurationsdiagramm eines Systems zur Verhinderung der
illegalen Verteilung von Programmen, das mittels eines Einfügens von
Wasserzeichen in Übereinstimmung
mit der Ausführungsform
4 der vorliegenden Erfindung implementiert wird;
-
12 ist
ein Konfigurationsdiagramm einer Wasserzeichen-Einfügevorrichtung
in dem Beispiel 5;
-
13 ist
ein Ablaufplan, der die Funktionsweise eines Scheincode-Einfügeabschnittes
und eines Wasserzeichen-Einfügeabschnittes
in dem Beispiel 5 darstellt;
-
14 ist
ein Beispiel eines Programmcodes, der durch einen Wasserzeichen-Einfügeabschnitt
in dem Beispiel 5 generiert wird;
-
15 ist
ein Ablaufplan der die Funktionsweise eines Wasserzeichen-Erfassungsabschnittes in
dem Beispiel 5 darstellt;
-
16 ist
ein Ablaufplan der die Funktionsweise eines Wasserzeichen-Einfügeabschnittes
von dem Beispiel 6 der vorliegenden Erfindung; und
-
17 ist
eine Zeichnung, die einen Programmcode zeigt, der durch einen Wasserzeichen-Einfügeabschnitt
in Übereinstimmung
mit dem Beispiel 6 generiert wird.
-
Beste Art und Weise des Ausführens der
Erfindung
-
(Ausführungsform
1)
-
Im
Folgenden wird in Bezug auf die beigefügten Zeichnungen ein System
zur Verhinderung der illegalen Verteilung von Programmen, das eine
Wasserzeichen-Einfügevorrichtung
und eine Wasserzeichen-Extrahiervorrichtung in Übereinstimmung mit der Ausführungsform
1 der vorliegenden Erfindung umfasst, beschrieben.
-
1 ist
ein Konfigurationsdiagramm eines Systems zur Verhinderung der illegalen
Verteilung von Programmen, das mittels eines Einfügens von Wasserzeichen
in Übereinstimmung
mit der Ausführungsform
1 der vorliegenden Erfindung implementiert wird.
-
Zuerst
führt zu
dem Zeitpunkt der Programmverteilung die Verteilungsquelle 10 Verteilung
mit einem unterschiedlichen Wasserzeichen, das mittels einer Wasserzeichen-Einfügevorrichtung 20 für jedes Verteilungsziel 40a und 40b eingefügt wird,
durch (hierbei wird angenommen, dass die sekundäre Verteilung durch Verteilungsziele
nicht authorisiert ist).
-
Durch
Durchführen
von Verteilung mit Wasserzeichen, die auf diese Weise eingebettet
werden, kann in dem Fall eines Programmumlaufs durch eine illegale
sekundäre
Verteilung beispielsweise die Verteilungsquelle 10 das
Verteilungsziel bestätigen,
indem mittels einer Wasserzeichen-Extrahiervorrichtung 30 das
Wasserzeichen aus dem in Umlauf zu dem Umlaufziel 50 gebrachten
Programm extrahiert wird und die Umlaufquelle (Verteilungsziel) 40a oder 40b identifiziert
wird.
-
Des
Weiteren werden die Verteilungsziele 40a oder 40b die
Identifizierung als die Umlaufquelle fürchten und werden so von einer
illegalen Verteilung absehen.
-
Auf
diese Weise unterdrückt
das System zur Verhinderung der illegalen Verteilung von Programmen
die illegale Verteilung mittels Wasserzeichen.
-
Im
Folgenden wird die Wasserzeichen-Einfügevorrichtung 20 in Übereinstimmung
mit der Ausführungsform
1 unter Verwendung von 2 beschrieben. 2 ist
ein Konfigurationsdiagramm einer Wasserzeichen-Einfügevorrichtung
in Übereinstimmung
mit der Ausführungsform
1.
-
Die
Wasserzeichen-Einfügevorrichtung 20 wird
mit einem Programm-Eingabeabschnitt 201 bereitgestellt.
Bei dem Programm-Eingabeabschnitt 201 handelt es sich um
eine Vorrichtung zum Eingeben eines Programmcodes, der ein Wasserzeichen eingibt.
Der Programm-Eingabeabschnitt 201 gibt einen Programmcode
an einen Wasserzeichen-Einfügeabschnitt 202 aus.
-
Der
Wasserzeichen-Einfügeabschnitt 202 ist eine
Vorrichtung zum Erzeugen eines Wasserzeichens, das tatsächlich in
ein Programm anhand von Kennungsinformationen, die durch einen Abschnitt zum
Generieren von Kennungsinformationen 205 generiert werden,
eingebettet wird, und zum Eingeben des Wasserzeichens in den Programmcode,
der von dem Programm-Eingabeabschnitt 201 ausgegeben wird.
Wenn es sich bei dem Programmcode, der durch den Programm-Eingabeabschnitt 201 ausgegebenen
wird, um den Quellencode handelt, kompiliert der Wasserzeichen-Einfügeabschnitt 202 den Quellencode
und leitet den Wasserzeichen-Einfügungsort an einen Abschnitt
zum Speichern von Wasserzeicheninformationen 206 als eine
Assemblercode-Zeilennummer weiter.
-
Bei
einem Programm-Ausgabeabschnitt 203 handelt es sich um
eine Vorrichtung, mit der ein Wasserzeichen-Einfügeabschnitt 202 einen
eingegebenen Programmcode ausgibt.
-
Ein
Wasserzeichendaten-Eingabeabschnitt 204 gibt Wasserzeichendaten
ein. Bei den eingegebenen Wasserzeichendaten handelt es sich um
Informationen, die ein Verteilungsziel eindeutig spezifizieren,
die die Verteilungsziel-Adresse, die Telefonnummer, die Firma, die
E-Mail-Adresse, und so weiter umfassen. Verteilungsquellen-Informationen können ebenfalls
in die Wasserzeichendaten eingegeben werden.
-
Der
Abschnitt zum Generieren von Kennungsinformationen 205 generiert
Kennungsinformationen, die eindeutig anhand von Wasserzeichendaten
bestimmt werden, die durch den Wasserzeichendaten-Eingabeabschnitt 204 eingegeben
werden. Bei den Kennungsinformationen kann es sich um die eingegebenen
Daten selbst handeln, oder es kann sich um Daten handeln, die durch
Verschlüsseln
der eingegebenen Daten erhalten werden. Darüber hinaus kann es sich bei
den Kennungsinformationen um eine Kennung zum eindeutigen Spezifizieren
von Wasserzeichendaten in einer Datenbank, die Wasserzeichendaten
unterhält,
handeln.
-
In
den Ausführungsformen
der vorliegenden Erfindung wird ein Modus verwendet, durch den ein Wasserzeichen
auf Basis der Kennungsinformationen generiert wird, es ist jedoch
nicht zwingend erforderlich, dass die Wasserzeichen auf Basis von
Kennungsinformationen generiert werden, und es ist ausreichend,
dazu befähigt
zu sein, ein Verteilungsziel eindeutig anhand eines Wasserzeichens
zu spezifizieren. So ist es beispielsweise auch akzeptabel, ein Verteilungsziel
dazu zu befähigen,
eindeutig dadurch spezifiziert zu werden, dass in die Software eine
Sequenznummer 1 bis N als Wasserzeichen eingegeben wird, dass die
Software der Sequenznummer i an das Verteilungsziel A verteilt wird,
dass die Software der Sequenznummer j an das Verteilungsziel B verteilt
wird, und so weiter und so fort.
-
Der
Abschnitt zum Speichern von Wasserzeicheninformationen 206 ist
eine Vorrichtung zum Speichern eines Einfügungsortes eines Wasserzeichens,
das durch den Wasserzeichen-Einfügeabschnitt 202 eingefügt wird.
Genauer gesagt, wird die Assemblercode-Zeilennummer des Codes, in den ein Wasserzeichen
eingefügt
wird, gespeichert.
-
Im
Folgenden wird eine Wasserzeichen-Extrahiervorrichtung 30 in Übereinstimmung
mit der Ausführungsform
1 unter Verwendung von 3 beschrieben. 3 ist
ein Konfigurationsdiagramm der Wasserzeichen-Extrahiervorrichtung 30 in Übereinstimmung
mit der Ausführungsform
1.
-
Bei
dem Programm-Eingabeabschnitt 301 handelt es sich um eine
Vorrichtung zum Eingeben eines Programms, in das ein Wasserzeichen
eingegeben wird.
-
Ein
Wasserzeichen-Erfassungsabschnitt 302 zerlegt ein Programm,
das von Programm-Eingabeabschnitt 301 ausgegeben
wird und extrahiert ein eingegebenes Wasserzeichen von dem Wasserzeichen-Einfügungsort
(Assemblercode-Zeilennummer), der von einem Abschnitt zum Speichern
von Wasserzeicheninformationen 305 erhalten wird. Der Wasserzeichen-Erfassungsabschnitt 302 generiert anschließend Kennungsinformationen
anhand des extrahierten Wasserzeichens und leitet diese Kennungsinformationen
zu einem Abschnitt zum Speichern von Kennungsinformationen 304 weiter.
-
Bei
dem Abschnitt zum Speichern von Kennungsinformationen 304 handelt
es sich um eine Vorrichtung zum Generieren von Informationen über Verteilungsziele
anhand von Kennungsinformationen, die von dem Wasserzeichen-Erfassungsabschnitt 302 erhalten
werden. Wenn es sich bei den Kennungsinformationen um eine Datenkennung
einer Datenbank handelt, erhält
der Abschnitt zum Speichern von Kennungsinformationen 304 Informationen
zu Verteilungszielen durch Extrahieren der Daten von der Kennung.
Wenn es sich bei den Kennungsinformationen um Verschlüsselungsdaten
von Informationen zu Verteilungszielen handelt, erhält der Abschnitt
zum Speichern von Kennungsinformationen 304 die Informationen
zu Verteilungszielen durch Durchführen von Entschlüsselung.
-
Der
Abschnitt zum Speichern von Wasserzeicheninformationen 305 ist
eine Vorrichtung zum Speichern eines Wasserzeichen-Einfügungsortes
eines verteilten Programms. Informationen zum Wasserzeichen-Einfügungsort
werden von dem Abschnitt zum Speichern von Wasserzeicheninformationen 206 der
Wasserzeichen-Einfügevorrichtung 20 erhalten.
-
Bei
dem Ausgabeabschnitt 303 handelt es sich um eine Vorrichtung
zum Ausgeben von erhaltenen Informationen zu Verteilungszielen.
-
Im
Folgenden wird ein Wasserzeichen-Einfügeabschnitt 202 in Übereinstimmung
mit der Ausführungsform
1 unter Verwendung von 4 beschrieben. 4 ist
ein Ablaufplan, der die Funktionsweise des Wasserzeichen-Einfügeabschnittes 202 in Übereinstimmung
mit der Ausführungsform
1 darstellt.
-
Zuerst
generiert ein Wasserzeichen-Einfügeabschnitt 202 mittels
einer Generierungsfunktion F(1) die Wasserzeichen X1 und X2 so,
dass sie tatsächlich
anhand von Kennungsinformationen I von den Informationen zu dem
Verteilungsziel 40 in das Programm eingefügt werden
(Schritt 401).
-
Anschließend konfiguriert
der Wasserzeichen-Einfügeabschnitt 202 die
Funktion F21, die die Konstante C1 ausgibt, sowie die Funktion F22,
die die Konstante C2 ausgibt, wenn die Wasserzeichen X1 und X2 als
Eingabe verwendet werden (Schritt 402).
-
Anschließend bettet
der Wasserzeichen-Einfügeabschnitt 202 eine
Gleichung in den Programmcode ein, die das Wasserzeichen X1 und
das Wasserzeichen X2 einer Variablen val1 und einer Variablen val2
zuweist (Schritt 403).
-
Anschließend bettet
der Wasserzeichen-Einfügeabschnitt 202 eine
Gleichung in den Programmcode ein, die die Funktion F21 (val1, val2)
der Variablen val3 zuweist, und die die Funktion F22 (val1, val2) der
Variablen val4 zuweist (Schritt 404).
-
Anschließend bettet
der Wasserzeichen-Einfügeabschnitt 202 eine
Bedingungsverzweigung als einen Wasserzeichen-Prüfcode in den Programmcode ein,
die bestimmt, ob die Variable val3 und die Konstante C1 miteinander übereinstimmen,
und die das Programm anhält,
wenn sie nicht miteinander übereinstimmen,
und bettet eine Bedingungsverzweigung ein, die bestimmt, ob die
Variable val4 und die Konstante C2 miteinander übereinstimmen und die das Programm
anhält,
wenn sie nicht miteinander übereinstimmen
(Schritt 405).
-
Anschließend speichert
der Wasserzeichen-Einfügeabschnitt 202 die
Orte, an denen das Wasserzeichen und der Wasserzeichen-Prüfode in den
Schritten 403 bis 405 eingefügt wurden, in dem Abschnitt
zum Speichern von Wasserzeicheninformationen 206 (Schritt 406).
-
Auf
diese Weise fügt
der Wasserzeichen-Einfügeabschnitt 202 das
Wasserzeichen und den Wasserzeichen-Prüfcode in das Programm ein.
-
Der
Wasserzeichen-Einfügeabschnitt 202 gibt
die Gleichungen und die Bedingungsverzweigungen (Wasserzeichen-Prüfcode),
die in den Schritten 403 bis 405 eingefügt wurden,
in der Reihenfolge der Ausführung
des Programms ein. Eine Bedingung für die Funktion F1 besteht darin,
dass eine inverse Funktion der Funktion F1 vorhanden sein sollte,
die I eindeutig anhand der Wasserzeichen X1 und X2 generiert, und
eine Bedingung für
die Funktion F2 besteht darin dass F21 (X1, X2) == C1 und dass F22 (X1,
X2) == C2 für
nichts Anderes als für
die Wasserzeichen X1 und X2 zutreffen sollten („==” zeigt an, dass die Werte
miteinander übereinstimmen).
-
So
wird beispielsweise ein Fall betrachtet, in dem die Kennungsinformationen
= 12345678 sind, F1 eine Funktion ist, die einen 8-stelligen Wert
in zwei Werte von der 4. Stelle an unterteilt, F21 (x, y) und F22
(x, y) lineare Funktionen mit 2 Variablen sind, und die Konstanten
C1 = 2345 und C2 = 5678 sind.
-
In
diesem Fall werden zuerst das Wasserzeichen X1 = 1234 und das Wasserzeichen
X2 = 5678 anhand der Funktion F1 generiert. Die Funktionen F21 und
F22 werden konfiguriert, indem a1, a2, b1 und b2 gesucht werden,
die die Bedingung a1 × 1234 +
b1 × 5678
= 2345 und die Bedingung a2 × 1234
+ b2 × 5678
= 5678 erfüllen.
So erfüllen
beispielsweise die Werte von a1 = 1, a2 = 0,195667, a2 = 3,700972 und
b2 = 0,195667 die Bedingungen.
-
Ein
Beispiel des Programmcodes, der generiert wird, wenn die Ausführungsform
1 angewendet wird, ist in 5 dargestellt.
-
In 5 bezeichnet 500a ein
Basisprogramm, das die grundlegende Eingabe durch den Programm-Eingabeabschnitt 201 bildet.
Die Programme 500b und 500c sind Programme zum
Einfügen
von Wasserzeichen, in die ein Wasserzeichen und Wasserzeichen-Prüfcode in
das Basisprogramm 500a eingegeben wurden.
-
Zuerst
fügt in
Schritt 403 der Wasserzeichen-Einfügeabschnitt 202 das
Wasserzeichen X1a (1234), das Wasserzeichen X1b (5678) sowie das Wasserzeichen
X2a (1111) und das Wasserzeichen X2b (2222), die anhand von unterschiedlichen
Kennungsinformationen Ia (12345678) und Ib (11112222) generiert
wurden, in die Programme 500b und 500c ein (der
Teil, der in der Zeichnung durch die Referenznummer 501 gekennzeichnet
ist).
-
Als
Nächstes
fügt in
Schritt 404 der Wasserzeichen-Einfügeabschnitt 202 die
gegenseitig voneinander abweichenden Funktionen F21 und F22 jeweils
in die Programme zum Einfügen
von Wasserzeichen 500b und 500c ein (der Teil,
der in der Zeichnung durch die Referenznummer 502 gekennzeichnet
ist).
-
Anschließend bettet
in Schritt 405 der Wasserzeichen-Einfügeabschnitt 202 als
Wasserzeichen-Prüfcode
eine Bedingungsverzweigung in den Programmcode ein, die bestimmt,
ob die Variable val3 und die Konstante C1 (2345) miteinander übereinstimmen
und die das Programm anhält,
wenn sie nicht miteinander übereinstimmen
((0) bestätigen), und
er bettet eine Bedingungsverzweigung ein, die bestimmt, ob die Variable
val4 und die Konstante C2 (5678) miteinander übereinstimmen und die das Programm
anhält,
wenn sie nicht miteinander übereinstimmen
((0) bestätigen)
(der Teil, der in der Zeichnung durch die Referenznummer 503 gekennzeichnet
ist).
-
Der
Punkt, der an dieser Stelle zu beachten ist, ist der, dass, wenn
die Unterschiede zwischen den zwei Programmen 500b und 500c identifiziert werden,
die Teile 501 und 502, die das Wasserzeichen bilden,
erfasst werden, jedoch werden die Bedingungsverzweigungen 503,
die den Wasserzeichen-Prüfcode
bilden, nicht erfasst. Demzufolge kann, selbst wenn ein Wasserzeichen-Einfügungsort mittels
eines Kollusionsangriffes auf die Programme 500b und 5001 erfasst
wird, und ein Ändern
oder Löschen
des erfassten Teils durchgeführt
wird, ein Ändern
oder ein Löschen
nicht an den Bedingungsverzweigungen 503, die den Wasserzeichen-Prüfcode bilden,
durchgeführt
werden. Dementsprechend erfüllt
der Teil des Wasserzeichen-Prüfcodes 503 nicht die
Bedingungen, und das Programm arbeitet nicht weiter.
-
Auf
diese Weise ist es in dem Fall eines einfachen Verfahrens des Änderns oder
des Löschens von
lediglich einem Ort, der mittels eines Kollusionsangriffes erfasst
wird, möglich,
die Akquisition eines Programms zu verhindern, das normal arbeitet,
wenn sämtliche
Wasserzeichen gelöscht
werden.
-
Im
Sinne einer verständlichen
Beschreibung wird in 5 der Quellencode verwendet,
dasselbe trifft jedoch auch zu, wenn ein binärer Code verwendet wird. Auch
in dem Fall der Bedingungsverzweigungen 503 wird die Verarbeitung
so durchgeführt, dass
das Programm angehalten wird, wenn die Bedingungserklärung wahr
ist, es ist jedoch auch möglich,
die Verarbeitung so durchzuführen,
dass Werte von Variablen in dem Programm (unter Verwendung von a++
beispielsweise) geändert
werden, so dass, anstatt das Programm anzuhalten, das Programm abnormal
arbeitet.
-
Darüber hinaus
werden in der Ausführungsform
1 zwei Elemente des Wasserzeichens anhand der Kennungsinformationen
generiert, es ist jedoch auch möglich,
drei oder mehr Elemente des Wasserzeichens zu generieren.
-
Im
Folgenden wird ein Wasserzeichen-Erfassungsabschnitt 302 in Übereinstimmung
mit der Ausführungsform
1 unter Verwendung von 6 beschrieben. 6 ist
ein Ablaufplan, der die Funktionsweise des Wasserzeichen-Erfassungsabschnittes 302 von
der Ausführungsform
1 darstellt.
-
Zuerst
zerlegt der Wasserzeichen-Erfassungsabschnitt 302 den Programmausführungscode (Schritt 1001).
-
Anschließend bezieht
sich der Wasserzeichen-Erfassungsabschnitt 302 auf den
Abschnitt zum Speichern von Wasserzeicheninformationen 305,
erhält
gespeicherte Informationen, in denen der Wasserzeichen-Einfügungsort
in dem Programm gespeichert ist (das heißt, eine Zeilennummer, die
den Einfügungsort
anzeigt), und basierend darauf spezifiziert der Wasserzeichen-Erfassungsabschnitt 302 den
Einfügungsort
des Wasserzeichens X1 und des Wasserzeichens X2. Anschließend extrahiert
der Wasserzeichen-Erfassungsabschnitt 302 das Wasserzeichen
X1 und das Wasserzeichen X2 aus dem Programm (Schritt 1002).
-
Anschließend generiert
der Wasserzeichen-Erfassungsabschnitt 302 Kennungsinformationen
unter Verwendung der inversen Funktion der Funktion F1, die verwendet
wird, wenn die Wasserzeichen X1 und X2 generiert werden (Schritt 1003).
-
Auf
diese Weise erhält
der Wasserzeichen-Erfassungsabschnitt 302 die Kennungsinformationen
und führt
eine Spezifizierung des Verteilungsziels 40 durch.
-
Wenn
mit dem voranstehend beschriebenen Verfahren die Reihenfolge der
Codeausführung
mittels einer Optimierung oder eines „Verschleierns" (das das Lesen schwieriger
macht) durch ein Verteilungsziel oder ein Umlaufziel eines Ausführungscodes
umgeschaltet wird, ist es möglich,
dass die Assemblercode-Zeilennummer eines Wasserzeichen-Einfügungsortes
geändert
wird, wodurch die Akquisition des Wasserzeichens verhindert wird.
Unter Anbetracht einer solchen Möglichkeit
kann die Verarbeitung in Schritt 1002 zu einer Verarbeitung geändert werden,
bei der eine Zuweisungsanweisung in den Zeilen um die Assemblercode-Zeilennummer
gesucht wird, die den Einfügungsort
anzeigt, und der operierende Teil der Zuweisungsanweisung wird extrahiert.
-
Wie
dies voranstehend beschrieben worden ist, ist in Übereinstimmung
mit der Ausführungsform 1
der Wasserzeichen-Prüfcode
(Teil 503 in 5) derselbe ungeachtet des Verteilungsziels,
und dementsprechend ist es möglich,
zu verhindern, dass der Wasserzeichen-Prüfcode (Teil 503 in 5)
mittels eines Kollusionsangriffes als ein Unterschied erfasst wird.
Demzufolge kann der Einfügungsort
des Wasserzeichen-Prüfcodes nicht
durch einen Kollusionsangriff erfasst werden. Als ein Ergebnis kann
in dem Fall eines einfachen Verfahrens des Änderns oder des Löschens von
lediglich einem Ort, der mittels eines Kollusionsangriffes erfasst
wird, keine Änderung beziehungsweise
kein Löschen
sämtlicher
Wasserzeichen durchgeführt
werden, und es ist nicht möglich,
ein Programm ohne ein Wasserzeichen (oder mit einem geänderten
Wasserzeichen) zu generieren, das normal arbeitet. Auf diese Weise
kann ein Verteilungsziel kein Programm generieren, das kein Wasserzeichen
aufweist und normal arbeitet, und dementsprechend kann das Verteilungsziel
ein Programm nicht illegal in den Umlauf bringen.
-
Es
ist des Weiteren auch ein Modus möglich, bei dem die Verarbeitung,
die durch die Wasserzeichen-Einfügevorrichtung 20 und
die Wasserzeichen-Extrahiereinrichtung 30 durchgeführt wird,
in Form eines Programms vorliegt und durch einen Universalcomputer
ausgeführt
wird.
-
(Ausführungsform
2)
-
Die
Ausführungsform
2 liefert einen Fall, in dem eine Person, die versucht, ein Programm
illegal zu verteilen, den Versuch unternimmt, den Wasserzeichen-Prüfcode der
Ausführungsform
1 durch Erfassen des Wasserzeichens mittels eines Kollusionsangriffes,
durch Erfassen des Ortes, an dem eine Variable, die durch eine Funktion
generiert wird, in dem erfassten Wasserzeichen verwendet wird, (Teil
der in 5 durch die Referenznummer 503 gekennzeichnet
ist) und durch Ändern
oder Löschen
des erfassten Ortes zu ändern
oder zu löschen.
-
Genauer
gesagt, wird das Wasserzeichen verwendet, und der Wasserzeichen-Prüfcode, der
erforderlich ist, damit das Programm normal arbeiten kann, wird
in das Programm eingefügt.
-
Durch
diese Vorrichtung ist es möglich
zu verhindern, dass ein Programm normal arbeitet, wenn der Wasserzeichen-Prüfcode unter
Verwendung des Wasserzeichens erfasst wird und mittels der voranstehend
beschriebenen Vorgehensweise geändert
oder gelöscht
wird.
-
Im
Folgenden wird die Ausführungsform
2 auf ausführlichere
Weise beschrieben. Der Unterschied zwischen der Wasserzeichen-Einfügevorrichtung
in der Ausführungsform
2 und der Wasserzeichen-Einfügevorrichtung 20 in
der Ausführungsform 1
liegt in der Funktionsweise des Wasserzeichen-Einfügeabschnittes 202.
-
Im
Folgenden wird die Funktionsweise des Wasserzeichen-Einfügeabschnittes
der Ausführungsform
2 unter Verwendung von 7 beschrieben. 7 ist
ein Ablaufplan, der die Funktionsweise des Wasserzeichen-Einfügeabschnittes
der Ausführungsform
2 darstellt.
-
Die
Operationen, die in den Schritten 601 und 602 durchgeführt werden,
sind dieselben, wie die Operationen, die in den Schritten 401 und 402 durchgeführt werden,
die in der Ausführungsform
1 beschrieben worden sind, und dementsprechend werden an dieser
Stelle die Beschreibungen davon weggelassen.
-
Anschließend generiert
der Wasserzeichen-Einfügeabschnitt
die Funktion F3, die die Konstante C3 so generiert, dass C1 + C2
+ C3 = 0 ist, anhand des Wasserzeichens X1 und des Wasserzeichens
X2 (Schritt 603).
-
Anschließend bettet
der Wasserzeichen-Einfügeabschnitt
eine Gleichung in den Programmcode ein, die das Wasserzeichen X1
und das Wasserzeichen X2 den Variablen val1 und val2 zuweist (Schritt 604).
-
Anschließend bettet
der Wasserzeichen-Einfügeabschnitt
eine Gleichung in den Programmcode ein, die die Funktion F21 (val1,
val2) der Variablen val3 zuweist und die die Funktion F22 (val1,
val2) der Variablen val4 zuweist (Schritt 605).
-
Anschließend bettet
der Wasserzeichen-Einfügeabschnitt
eine Bedingungsverzweigung als den Wasserzeichen-Prüfcode in
den Programmcode ein, die bestimmt, ob die Variable val3 und die
Konstante C1 miteinander übereinstimmen,
und die das Programm anhält,
wenn sie nicht miteinander übereinstimmen,
und er bettet eine Bedingungsverzweigung als den Wasserzeichen-Prüfcode in
den Programmcode ein, die bestimmt, ob die Variable val4 und die Konstante
C2 miteinander übereinstimmen,
und die das Programm anhält,
wenn sie nicht miteinander übereinstimmen
(Schritt 606).
-
Anschließend bettet
der Wasserzeichen-Einfügeabschnitt
eine Gleichung ein, die der Variablen val5 die Funktion F3 (val1,
val2) zuweist (Schritt 607).
-
Anschließend fügt der Wasserzeichen-Einfügeabschnitt
einen Code als Wasserzeichen-Prüfcode in
das Programm ein, der val3 + val4 + val5 zu einer Entscheidungserklärung hinzuaddiert,
die den ursprünglichen
Code 0 bestimmt (Schritt 608).
-
Anschließend speichert
der Wasserzeichen-Einfügeabschnitt 202 die
Orte, an denen das Wasserzeichen und der Wasserzeichen-Prüfode in den
Schritten 604 bis 608 eingefügt wurden, in dem Abschnitt
zum Speichern von Wasserzeicheninformationen 206 (Schritt 609).
-
Auf
diese Weise fügt
der Wasserzeichen-Einfügeabschnitt 202 ein
Wasserzeichen in das Programm ein.
-
Die
Punkte, die an dieser Stelle zu beachten sind, bestehen darin, dass
die Variablen val3, val4 und val5, die durch einen Kollusionsangriff
erfasst werden, in val3 + val4 + val5 enthalten sind, die in Schritt 608 eingefügt werden,
und dass val3 + val4 + val5 in den 0-Teil der Entscheidungserklärung eingefügt wird,
die sich auf den Betrieb des Programms bezieht. Wenn als Ergebnis
ein illegaler Benutzer einen Versuch unternimmt, die Variablen (val3,
val4, val5) mittels eines Kollusionsangriffes zu erfassen und einen
Ort unter Verwendung der Variablen, die durch eine Funktion unter
Verwendung der erfassten Variablen generiert werden, ändert oder
löscht,
wird eine Entscheidungserklärung
in Bezug auf den Betrieb des Programms ebenfalls geändert oder
gelöscht. Auf
diese Weise wird das Programm nicht normal arbeiten und kann dementsprechend
nicht illegal verwendet werden.
-
Im
Folgenden wird ein Programmcode, der unter Verwendung eines Wasserzeichen-Einfügeabschnittes
generiert wird, in Übereinstimmung
mit der Ausführungsform
2 unter Verwendung von 8 beschrieben.
-
In 8 bezeichnet 800a ein
Basisprogramm, das die grundlegende Eingabe durch den Programm-Eingabeabschnitt 201 bildet,
und 800b bezeichnet ein Programm zum Einfügen von
Wasserzeichen, in dem ein Wasserzeichen in das Basisprogramm 800a eingefügt worden
ist.
-
In
das Programm 800b wird in Schritt 604 ein Wasserzeichen
in den Teil eingefügt,
der durch die Referenznummer 701 angezeigt wird, und Berechnungsgleichungen
(Code) für
die Wasserzeichenprüfung
werden in den Teil eingefügt,
der durch die Referenznummer 702 angezeigt wird.
-
Anschließend wird
in dem Programm 800b das Verarbeitungsergebnis von Schritt 608 in
den Teil eingefügt,
der durch die Referenznummer 703 angezeigt wird. Des Weiteren
wird in dem Schritt 606 in das Programm 800b der
Wasserzeichen-Prüfcode
in den Teil eingefügt,
der durch die Referenznummer 704 angezeigt wird.
-
Das
Ergebnis des Generierens des Programms 800b besteht auf
diese Weise darin, dass, wenn eine Person, die den Versuch unternimmt,
eine illegale Verwendung durchzuführen, den Wasserzeichen-Prüfcode 703 von
dem Programm 800b mittels eines Kollusionsangriffes erfasst
und den Wasserzeichen-Prüfode ändert oder
löscht,
da der Wasserzeichen-Prüfcode 703 ein
Code ist, der sich auf die Spezifizierungen bezieht (bezogen auf
die Programmeingabe/Programmausgabe in den ursprünglichen Code), das Programm
nicht normal arbeiten wird, wenn dieser Code gelöscht wird.
-
Um
lediglich die Entscheidungserklärung des
Wasserzeichen-Prüfcodes 703 innerhalb
des Wasserzeichens zu ändern,
ist es erforderlich, die Programmspezifizierungen zu verstehen und
zu wissen, dass der Wasserzeichen-Prüfcode ein spezifizierungsbezogener
Code ist. Es nimmt Zeit in Anspruch, um die Struktur eines Programms
zu verstehen, und das Löschen
des Wasserzeichens kann nicht mittels einer mechanischen Verarbeitung
durchgeführt
werden.
-
Die
Bedingung C1 + C2 + F3 = 0 muss an dieser Stelle nicht zutreffen.
In diesem Fall kann C1 + C2 + F3 in eine Entscheidungserklärung eingefügt werden,
die den Wert verwendet, der durch C1 + C2 + F3 erhalten wird. Wenn
beispielsweise C1 + C2 + F3 = 1 ist, wird der Wert 1 einer Entscheidungserklärung, die
den Wert 1 bestimmt, mit C1 + C2 + F3 umgeschaltet.
-
Wie
dies voranstehend beschrieben worden ist, wird, wenn ein Ort (Teil,
der in 8 mit 703 gekennzeichnet wird), an dem
die Variablen, die durch Funktionen generiert werden, die in dem
Wasserzeichen (701, 702) verwendet werden, das
mittels eines Kollusionsangriffes erfasst wird, erfasst wird und
geändert
oder gelöscht
wird, wird es unmöglich,
dass das Programm normal arbeitet. Das bedeutet, es kann unmöglich gemacht
werden, ein Programm ohne ein Wasserzeichen (oder mit einem geänderten Wasserzeichen)
zu generieren, das normal arbeitet, wodurch es möglicht gemacht wird, die illegale
Verteilung eines Programms zu verhindern.
-
Beispiel 3
-
Das
Beispiel 3 ändert
einen Code um einen Ort herum, an dem das Wasserzeichen und der
Wasserzeichen-Prüfcode
eingegeben werden, oder es ändert
alle Codes durch Durchführen
einer Verarbeitung, wie beispielsweise eines „Verschleierns". Demzufolge wird
ein Code, der ein anderer ist als ein Wasserzeichen, durch einen
Kollusionsangriff erfasst, wodurch es möglich gemacht wird, dass die Änderung
des Wasserzeichens oder das Löschen des
Wasserzeichens auf Basis eines Kollusionsangriffes mit Sicherheit
verhindert werden.
-
Im
Folgenden wird das Beispiel 3 auf ausführlichere Weise beschrieben.
Der Unterschied zwischen der Wasserzeichen-Einfügevorrichtung in dem Beispiel
3 und der Wasserzeichen-Einfügevorrichtung 20 in
der Ausführungsform
1 liegt in der Funktionsweise des Wasserzeichen-Einfügeabschnittes 202.
-
Im
Folgenden wird die Funktionsweise des Wasserzeichen-Einfügeabschnittes 202 des
Beispiels 3 unter Verwendung von 9 beschrieben. 9 ist
ein Ablaufplan, der die Funktionsweise des Wasserzeichen-Einfügeabschnittes 202 des
Beispiels 3 darstellt.
-
Zuerst
weist der Wasserzeichen-Einfügeabschnitt 202 der
Variablen i einen Anfangswert von 1 zu (Schritt 800). Anschließend unterteilt
der Wasserzeichen-Einfügeabschnitt 202 die
Kennungsinformationen in n Elemente an Informationen und erzeugt Wasserzeichen
X(1), X(2) ... X(n) (Schritt 801).
-
Anschließend erfasst
der Wasserzeichen-Einfügeabschnitt 202 einen
Schleifenabschnitt (obgleich für
die Erklärungen)
in dem Programmquellen-Code (Schritt 802) und fügt ein Wasserzeichen X(i)
in die Schleife ein (Schritt 803).
-
Anschließend „verschleiert" der Wasserzeichen-Einfügeabschnitt 202 den
Schleifenabschnitt des Einfügungsortes
durch Anwenden des Verfahrens, das in dem Dokument „Method
for Scrambling Programs Containing Loops" (Monden et al., Technical Report of
IEICE D-I, Bnd. J80-D-I, Nr. 7, Seiten 644 bis 652, Juli 1997) beschrieben
ist (Schritt 804). Hierbei gibt es eine Reihe von Varianten
in dem Verfahren zum Verschleiern des Programms, und die Variante
wird auf Zufallsbasis ausgewählt
(oder so ausgewählt,
dass das Verschleiern, das auf einem Programm, das in der Vergangenheit
verteilt worden ist, nicht doppelt angewendet wird).
-
Anschließend bestimmt
der Wasserzeichen-Einfügeabschnitt 202,
ob die Variable i kleiner ist oder der Anzahl von Elementen des
Wasserzeichens n entspricht (Schritt 805), und wenn die
Variable i kleiner ist als die Anzahl von Elementen des Wasserzeichens
n oder dieser entspricht, erhöht
der Wasserzeichen-Einfügeabschnitt 202 die
Variable i (Schritt 806) und geht zu der Verarbeitung in
Schritt 802 über.
Wenn im Gegensatz dazu in dem Schritt 805 bestimmt wird,
dass die Variable i nicht kleiner ist als die Anzahl von Elementen
des Wasserzeichens n oder dieser entspricht, das heißt, wenn
alle Wasserzeichen eingegeben worden sind, kompiliert der Wasserzeichen-Einfügeabschnitt 202 als
Nächstes den
Quellencode und speichert die Assemblercode-Zeilennummern, an denen Wasserzeichen
eingegeben worden ist, gibt das Programm aus und beendet die Verarbeitung
(Schritt 807).
-
Im
Folgenden wird der Programmcode, der durch den Wasserzeichen-Einfügeabschnitt 202 in Übereinstimmung
mit dem Beispiel 3 generiert wird, unter Verwendung von 10 beschrieben.
In 10 bezeichnet 900a ein Basisprogramm,
das die grundlegende Eingabe durch den Programm-Eingabeabschnitt 201 bildet.
Die Programme 900b und 900c sind Programme zum
Einfügen
von Wasserzeichen, in denen das Wasserzeichen 901 in das
Basisprogramm 900a eingegeben worden ist.
-
In
den Programmen 900b und 900c unterscheidet sich
die Implementierung entsprechend dem Verschleiern, jedoch werden
die Spezifizierungen (Beziehung zur Programmeingabe/Programmausgabe)
nicht verändert.
Wenn die Unterschiede zwischen den Programmen 900b und 900c identifiziert
werden, da auch der Programmcode an Orten modifiziert worden ist,
die andere sind als der Ort des Wasserzeichens, werden die Nicht-Wasserzeichen-Teile 902a und 902b ebenfalls
als Unterschiede erfasst.
-
Dementsprechend
ist es, um die Wasserzeichen der Programme 900b und 900c zu ändern oder zu
löschen,
erforderlich, die Programme zu analysieren und herauszufinden, welche
Teile Wasserzeichen sind, die sich nicht auf die Programmspezifizierungen beziehen.
Da das Bestimmen, ob sich ein Teil auf die Programmspezifizierungen
bezieht, ein Verständnis der
Programmspezifizierungen voraussetzt, erweist es sich als schwierig,
ein Wasserzeichen, das unter Verwendung dieses Verfahrens eingebettet
wird, auf mechanische Weise zu löschen.
-
Wie
dies voranstehend beschrieben worden ist, fungiert in Übereinstimmung
mit dem Beispiel 3 der Wasserzeichen-Einfügeabschnitt 202 auch
als eine Änderungsvorrichtung,
die die Verarbeitung des Verschleierns so durchführt, dass Programmspezifizierungen
nicht in Teilen beeinträchtigt
werden, die andere sind als ein Ort, an dem ein Programmwasserzeichen
eingefügt
wird, so dass ein Nicht-Wasserzeichen-Code in Teilen, die sich auf
Programmspezifizierungen beziehen, durch einen Kollusionsangriff erfasst
wird. Es erweist sich auf diese Weise als schwierig, einen Ort des
Einfügens
des Wasserzeichens auf Basis eines Kollusionsangriffes zu identifizieren.
Als ein Ergebnis ist es möglich,
ein Ändern oder
ein Löschen
des Wasserzeichens mit Sicherheit zu verhindern und einen illegalen
Umlauf des Programms zu verhindern.
-
(Ausführungsform
4)
-
In
der Ausführungsform
4 wird eine Wasserzeichen-Einfügevorrichtung
an einem Verteilungsziel bereitgestellt, und ein Wasserzeichen wird
einem verteilten Programm an dem Verteilungsziel zugewiesen.
-
Im
Folgenden wird die Konfiguration eines Systems zum Verhindern der
illegalen Verteilung von Programmen in Übereinstimmung mit der Ausführungsform
4 unter Verwendung von 11 beschrieben. 11 ist
ein Konfigurationsdiagramm eines Systems zum Verhindern der illegalen
Verteilung von Programmen, das mittels des Einfügens von Wasserzeichen in Übereinstimmung
mit der Ausführungsform
4 der vorliegenden Erfindung implementiert wird. Teilen, die mit
Teilen identisch sind, die bereits beschrieben worden sind, werden
dieselben Referenzcodes zugewiesen, wie ihre entsprechenden voranstehend
beschriebenen Teile.
-
In
diesem System verteilt die Verteilungsquelle 1100 zuerst
jeweils Kennungsinformationen 1101 und Kennungsinformationen 1102 an
das Verteilungsziel 1110 und an das Verteilungsziel 1120, wobei
die Kennungsinformationen jeweils das Verteilungsziel 1110 und
das Verteilungsziel 1120 eindeutig bestimmen.
-
In
Reaktion darauf speichern die Verteilungsziele 1110 und 1120 die
Kennungsinformationen 1101 und 1102 in den Wasserzeichen-Einfügevorrichtungen 20a und 20b.
-
Anschließend verteilt
die Verteilungsquelle 1100 ein Programm 1103 an
das Verteilungsziel 1110 und das Verteilungsziel 1120.
-
In
Reaktion darauf generieren die Verteilungsziele 1110 und 1120 Programme 1111 und 1121, in
denen Wasserzeichen unter Verwendung der Wasserzeichen-Einfügevorrichtungen 20a und 20b in
das verteilte Programm 1103 eingefügt werden.
-
Die
Wasserzeichen-Einfügevorrichtungen 20a und 20b können Wasserzeichen-Einfügevorrichtungen
in Übereinstimmung
mit der Ausführungsform 1
oder 2 sein.
-
Anschließend senden
die Wasserzeichen-Einfügevorrichtungen 20a und 20b Speicherinformationen 1104 und 1105 an
die Verteilungsquelle 1100, und die Verteilungsquelle 1100 behält die Speicherinformationen 1104 und 1105 ein.
-
Wenn
das Verteilungsziel 1110 illegale sekundäre Verteilung
zu dem Umlaufziel 1130 durchführt, erhält die Verteilungsquelle 1100 das
in Umlauf gebrachte Programm 1112 und gibt es zusammen
mit den Speicherinformationen 1104 und 1105 in
die Wasserzeichen-Extrahiervorrichtung 30 ein. Anschließend akquiriert
die Verteilungsquelle 1100 Kennungsinformationen 1107,
die das Verteilungsziel 1110 oder das Verteilungsziel 1120 mittels
der Wasserzeichen-Extrahiervorrichtung 30 spezifizieren.
Anschließend
vergleicht die Verteilungsquelle 1100 die Kennungsinformationen 1101 und 1102,
die zu den Verteilungszielen 1110 und 1120 verteilt
worden sind, mit den erfassten Kennungsinformationen 1107 und identifiziert
das Verteilungsziel 1110 oder 1120, das das Programm
illegal in Umlauf gebracht hat.
-
Wie
dies voranstehend beschrieben worden ist, ist es in Übereinstimmung
mit der Ausführungsform
4 möglich,
auf einfache Weise ein Programm an eine nicht spezifizierte Anzahl
von Verteilungszielen zu verteilen, und Wasserzeichen an den Verteilungszielen
einzufügen.
Diese Art von Modus ist effektiv, wenn er auf ein System angewendet
wird, in dem es wünschenswert
ist, auf einfache Weise Programme lediglich zu verteilen, wie beispielsweise
eine Programmverteilung unter Verwendung eines digitalen Rundsendens,
Multicasting oder Rundsendens über ein
IP-Netzwerk, und so weiter.
-
Beispiel 5
-
Das
Beispiel 5 ändert
ein Programm durch Hinzuaddieren eines Scheincodes, der nicht die
Programmspezifizierungen beeinträchtigt,
an einem Ort, an dem ein Verfahren des Einfügens von Wasserzeichen oder
ein anderes Verfahren implementiert wird. Als ein Ergebnis wird
ein Code, der ein anderer ist als ein Wasserzeichen, an unterschiedlichen
Orten erfasst, wenn ein Kollusionsangriff ausgeführt wird, wodurch es möglich wird,
dass die Änderung
des Wasserzeichens oder das Löschen
des Wasserzeichens auf Basis eines Kollusionsangriffes mit Sicherheit verhindert
wird.
-
Im
Folgenden wird eine Wasserzeichen-Einfügevorrichtung 1200 in Übereinstimmung
mit dem Beispiel 5 unter Verwendung von 12 beschrieben. 12 ist
ein Konfigurationsdiagramm einer Wasserzeichen-Einfügevorrichtung
von dem Beispiel 5.
-
Die
Funktionsweise des Programm-Eingabeabschnittes 201 der
Wasserzeichen-Einfügevorrichtung 1200 in Übereinstimmung
mit dem Beispiel 5 ist identisch mit der des Programm-Eingabeabschnittes 201 der
Wasserzeichen-Einfügevorrichtung 20 in
anderen Ausführungsformen.
-
Die
Wasserzeichen-Einfügevorrichtung 1200 ist
mit einem Scheincodeverfahren-Eingabeabschnitt 1203 bereitgestellt,
der ein redundantes Scheincode-Verfahren eingibt, das die Ausführung einer Programmausgabe
durch den Programm-Eingabeabschnitt 201 nicht
beeinträchtigt.
Der Scheincodeverfahren-Eingabeabschnitt 1203 gibt ein
eingegebenes Scheincode-Verfahren an einen Scheincodeverfahren-Einfügeabschnitt 1201 aus.
-
Bei
dem Scheincodeverfahren-Einfügeabschnitt 1201 handelt
es sich um eine Vorrichtung zum Addieren eines Scheincode-Verfahrens,
das durch den Scheincodeverfahren-Eingabeabschnitt 1203 eingegeben
wird, als einen Bereich zum Einbetten eines Wasserzeichens. Der
Scheincodeverfahren-Einfügeabschnitt 1201 gibt
ein Programm, zu dem ein Scheincode-Verfahren hinzuaddiert worden
ist, an einen Scheincode-Einfügeabschnitt 1202 aus.
-
Der
Scheincode-Einfügeabschnitt 1202 ist eine Änderungsvorrichtung
zum Durchführen
von Änderung
ohne das Ändern
von Programmspezifizierungen durch Einfügen eines Scheincode-Paares, das
für die
Programmausführungsergebnisse
nicht erforderlich ist, an Orten, an denen sämtliche Programmverfahren (sämtliche
Verfahren einschließlich dem
Scheincode-Verfahren) implementiert werden, ohne die Programmausführung zu
beeinträchtigen. Ein
Beispiel eines Scheincodes, der eingefügt wird, ist das PUSH/POP-Paar.
-
Der
Wasserzeichen-Einfügeabschnitt 202, der
Programm-Ausgabeabschnitt 203, der Wasserzeichendaten-Eingabeabschnitt 204,
und der Abschnitt zum Generieren von Kennungsinformationen 205 sind
jeweils identisch mit dem Wasserzeichen-Einfügeabschnitt 202,
dem Programm-Ausgabeabschnitt 203, dem Wasserzeichendaten-Eingabeabschnitt 204,
und dem Abschnitt zum Generieren von Kennungsinformationen 205 der
Wasserzeichen-Einfügevorrichtung 20 in
anderen Ausführungsformen
oder Beispielen.
-
Der
Abschnitt zum Speichern von Wasserzeicheninformationen 1204 speichert
Informationen hinsichtlich der Entsprechung zwischen den Zeichen, numerischen
Werten und Symbolen, die in den Wasserzeichen und Bitzeichenketten
verwendet werden, sowie Informationen hinsichtlich der Entsprechung zwischen
den Bitzeichenketten und den Anweisungscodes für Wasserzeichen, die durch
den Wasserzeichen-Einfügeabschnitt 202 eingefügt worden
sind. Der Abschnitt zum Speichern von Wasserzeicheninformationen 1204 hält darüber hinaus
auch einen Verfahrensnamen und eine Zeilennummer als die Identifizierungsinformationen
für ein
Scheincode-Verfahren, das zum Einfügen von Wasserzeichen verwendet
wird. Wenn darüber
hinaus verschlüsselte
Daten als die Wasserzeichendaten verwendet werden, speichert der
Abschnitt zum Speichern von Wasserzeicheninformationen 1204 auch Schlüsselinformationen
für das
Verschlüsseln
von den Daten.
-
Auf
diese Weise kann ein Wasserzeichen-Einfügungsort auf einfache Weise
unter Verwendung der Identifizierungsinformationen identifiziert
werden, und ein Wasserzeichen kann auf einfache Weise erfasst werden.
-
Im
Folgenden wird eine Wasserzeichen-Extrahiervorrichtung 30 in Übereinstimmung
mit dem Beispiel 5 beschrieben. Der Unterschied zwischen der Wasserzeichen-Extrahiervorrichtung 30 in Übereinstimmung
mit dem Beispiel 5 und einer Wasserzeichen-Extrahiervorrichtung 30 in
anderen Ausführungsformen
oder Beispielen liegt in der Funktionsweise des Abschnittes zum
Speichern von Wasserzeicheninformationen 305.
-
Der
Wasserzeichen-Erfassungsabschnitt 302 akquiriert die Identifizierungsinformationen
eines Verfahrens, die für
das Einfügen
von Wasserzeichen verwendet werden, die von dem Abschnitt zum Speichern
von Wasserzeicheninformationen 305 in einem Programm erhalten
werden, das von dem Programm-Eingabeabschnitt 301 ausgegeben
wird und überprüft das Verfahren,
das durch die Identifizierungsinformationen angezeigt wird.
-
Anschließend extrahiert
der Wasserzeichen-Erfassungsabschnitt 302 das Wasserzeichen, das
in das Programm eingefügt
wurde, durch Umwandeln von einem Anweisungscode in eine Bitzeichenkette
und von der Bitzeichenkette in Zeichen, einen numerischen Wert oder
ein Symbol unter Verwendung der Entsprechung zwischen Zeichen, numerischen
Werten und Symbolen, die in Wasserzeichen und Bitzeichenketten verwendet
werden, und der Entsprechung zwischen Bitzeichenketten und Anweisungs-Codes,
die von dem gleichen Abschnitt zum Speichern von Wasserzeicheninformationen 305 erhalten
werden.
-
Der
Wasserzeichen-Erfassungsabschnitt 302 generiert Kennungsinformationen
anhand eines extrahierten Wasserzeichens und gibt diese an den Abschnitt
zum Speichern von Kennungsinformationen 304 aus.
-
Bei
dem Abschnitt zum Speichern von Wasserzeicheninformationen 305 handelt
es sich um eine Vorrichtung zum Halten von Identifizierungsinformationen
eines Verfahrens, bei dem ein Wasserzeichen eingefügt wird.
Der Abschnitt zum Speichern von Wasserzeicheninformationen 305 speichert
darüber hinaus
auch Entsprechung zwischen Zeichen, numerischen Werten und Symbolen,
die in einem Wasserzeichen eines verteilten Programms verwendet
werden und Bitzeichenketten, sowie Entsprechung zwischen Bitzeichenketten
und Anweisungs-Codes. Wenn darüber
hinaus ein eingefügtes
Wasserzeichen verschlüsselt
ist, hält
der Abschnitt zum Speichern von Wasserzeicheninformationen 305 auch den
Schlüssel
für die
Entschlüsselung
der Daten. Der Abschnitt zum Speichern von Wasserzeicheninformationen 305 erhält die Entsprechung
zwischen Zeichen, numerischen Werten und Symbolen und Bitzeichen ketten,
sowie die Entsprechung zwischen Bitzeichenketten und Anweisungs-Codes,
die Identifizierungsinformationen für ein Verfahren, bei dem ein Wasserzeichen
eingefügt
wird, sowie einen Schlüssel
für die
Entschlüsselung
von verschlüsselten
Daten aus dem Abschnitt zum Speichern von Wasserzeicheninformationen 1204.
-
Im
Folgenden wird die Funktionsweise des Abschnittes zum Einfügen von
Scheincodes 1202 und einem Wasserzeichen-Einfügeabschnitt 202 des Beispiels
5 unter Verwendung von 13 beschrieben. 13 ist
ein Ablaufplan, der die Funktionsweise des Abschnittes zum Einfügen von
Scheincodes 1202 und des Wasserzeichen-Einfügeabschnittes 202 des
Beispiels 5 darstellt.
-
Zuerst
weist der Abschnitt zum Einfügen
von Scheincodes 1202 der Variable i einen Anfangswert von
1 zu (Schritt 1300). Anschließend generiert der Wasserzeichen-Einfügeabschnitt 202 das
Wasserzeichen S anhand der Kennungsinformationen unter Verwendung
der Entsprechung zwischen Zeichen, numerischen Werten und Symbolen
und Bitzeichenketten (Schritt 1301).
-
Anschließend erfasst
der Abschnitt zum Einfügen
von Scheincodes 1202 einen Verfahrensabschnitt (Ort, an
dem ein Verfahren implementiert wird) in dem Programm (Schritt 1302)
und bestimmt, ob die Variable i kleiner ist als die Gesamtanzahl
an Verfahren in dem Programm oder dieser entspricht (Schritt 1303),
und wenn die Variable i kleiner ist als die Gesamtanzahl an Verfahren
oder dieser entspricht, fügt er
einen im Wesentlichen unnötigen
Scheincode ein, der die Programmspezifizierungen nicht beeinträchtigt (Schritt 1304).
-
Es
gibt eine Anzahl von Varianten des Scheincodes, der hierbei eingefügt wird,
und die Variante wird auf Zufallsbasis ausgewählt oder so ausgewählt, dass
der Scheincode nicht kopiert wird, der in ein Programm in der Vergangenheit
eingefügt
wurde. Das heißt,
der Scheincode wird so eingefügt, dass
der Scheincode durch einen Kollusionsangriff extrahiert wird.
-
Als
Nächstes
bestimmt der Wasserzeichen-Einfügeabschnitt 202,
ob der erfasste Verfahrensabschnitt ein Scheincode-Verfahren ist
(Schritt 1305), und wenn es sich um ein Scheincode-Verfahren
handelt, fügt
er das Wasserzeichen S durch Anwenden des Ver fahrens ein, das in
dem Dokument „A Watermarking
Method for Computer Program" (Monden
et al., 1998, Symposium an Cryptography and Information Security,
SCIS, 98-9.2.A,
Januar, 1998) beschrieben ist (Schritt 1306).
-
Hierbei
behält
der Wasserzeichen-Einfügeabschnitt 202 auch
die Identifizierungsinformationen zum Scheincode-Verfahren ein (Schritt 1307).
-
Anschließend erhöht der Wasserzeichen-Einfügeabschnitt 202 die
Variable i (Schritt 1308) und geht zu der Verarbeitung
in Schritt 1302 über.
-
Wenn
im Gegensatz dazu in Schritt 1303 von der Variable i bestimmt
wird, dass sie nicht kleiner ist als die Gesamtanzahl von Verfahren
oder dieser entspricht, das heißt,
wenn der Scheincode in sämtlichen
Verfahren eingefügt
worden ist, und wenn das Wasserzeichen in einem Scheincode-Verfahren
davon eingefügt
worden ist, gibt der Wasserzeichen-Einfügeabschnitt 202 ein
Programm aus, in das ein Wasserzeichen eingebettet worden ist (Schritt 1309).
-
Mit
einem Programm, das durch den Wasserzeichen-Einfügeabschnitt 202 in Übereinstimmung
mit dem Beispiel 5 generiert worden ist, unterscheidet sich die
Implementierung entsprechend dem Einfügen des Scheincodes, die Spezifizierungen
(Beziehung zu der Programmeingabe/Programmausgabe) bleiben jedoch
unverändert.
Da darüber hinaus
unterschiedliche Scheincodes durch die jeweiligen Programme eingefügt werden,
werden, wenn Unterschiede zwischen den Programmen identifiziert
werden, um ein Verfahren zum Einfügen eines Wasserzeichens zu
identifizieren, Verfahren, die andere sind, als ein Verfahren, bei
dem ein Wasserzeichen eingefügt
wird, ebenfalls als Unterschiede erfasst.
-
Dementsprechend
ist es, um ein Wasserzeichen eines Programms zu ändern oder zu löschen, erforderlich,
das Programm zu analysieren und herauszufinden, bei welchem Verfahren
es sich um ein Scheincode-Verfahren zum Einfügen eines Wasserzeichens, das
sich nicht auf die Programmspezifizierungen bezieht, handelt. Da
das Bestimmen, ob es sich bei einem Teil um einen Teil handelt,
der sich auf die Programmspezifizierungen bezieht, das Verständnis der
Programmspezifizierungen erfordert, erweist es sich als schwierig,
ein Wasserzeichen, das unter Verwendung dieses Verfahrens eingebettet worden
ist, mechanisch zu löschen.
-
Ein
Programmcode, der in Übereinstimmung mit
dem Beispiel 5 generiert worden ist, ist in 1 dargestellt.
-
Das
Programm, das in 14 durch die Referenznummer 1600a bezeichnet
wird, ist das Basis-Quellenprogramm. Das Programm, das aus dem Kompilieren
dieses Programms 1600a resultiert, wird von dem Programm-Eingabeabschnitt 210 in
die Wasserzeichen-Einfügevorrichtung 1200 eingegeben.
Im Sinne einer verständlichen
Beschreibung wird das Programm 1600b, das aus dem Zerlegen
eines kompilierten Programms 1600a resultiert, an dieser
Stelle der Beschreibung verwendet.
-
Das
Programm 1600a und das Programm 1600d sind Programme,
bei denen unterschiedliche Wasserzeichen und Scheincodes eingefügt werden. In
den Programmen 1600a bis 1600d bezeichnet das Verfahren
A2 ein Scheincode-Verfahren, und die Nummer vor jeder Anweisungs-Mnemonik
bezeichnet die Zeilennummer.
-
Zuerst
generiert in Schritt 1301 der Wasserzeichen-Einfügeabschnitt 202 das
Wasserzeichen S1 (100111 001101 101000 000000 000001) und das Wasserzeichen
S2 (100111 001101 101000 000000 000010) mit 6 Bits pro Zeichen anhand
von jeweils unterschiedlichen Kennungsinformationen I1 ((C)01) und
I2 ((C)02) für
die Verwendung von Programmen zum Einfügen von Wasserzeichen 1600c und 1600d.
-
Anschließend erfasst
in Schritt 1302 der Abschnitt zum Einfügen von Scheincodes 1202 einen Verfahrensabschnitt
in einem Programm zum Einfügen
von Wasserzeichen, und fügt
in Schritt 1304 voneinander unterschiedliche Scheincodes
in A1 ein, bei dem es sich um kein Scheincode-Verfahren handelt (der
Teil, der in 14 durch die Referenznummer 1601 bezeichnet
wird).
-
Des
Weiteren bettet, wenn es sich bei dem Verfahren um das Scheincode-Verfahren
A2 handelt, in Schritt 1306 der Wasserzeichen-Einfügeabschnitt 202 als
Wasserzeichen nur die Anzahl von Bits, die den Anweisungen zugewiesen
wurden, die dem Einbetten von den Wasserzeicheninformationen S1
und S2 unterliegen, in das Programm zum Einfügen von Wasserzeichen 1600b ein.
-
In
diesem Beispiel handelt es sich bei iconst_0 in dem Verfahren A2
des Programms 1600b um eine Anweisung, die dem Einbetten
unterliegt, und ihr werden 2-Bit-Informationen
zugewiesen, und das Einbetten wird durch Durchführen von Extrahieren von 2
Bits von S1 und S2 durchgeführt
(der Teil, der in 14 durch die Referenznummer 1602 bezeichnet
wird).
-
Hierbei
führt der
Wasserzeichen-Einfügeabschnitt 202 das
Extrahieren von den Bits unterer Ordnung eines jeden Zeichens durch,
und wenn das Extrahieren für
das gesamte Zeichen abgeschlossen ist, führt er das Extrahieren der
Bits unterer Ordnung des nächsten
Zeichens durch.
-
Der
Abschnitt zum Einfügen
von Scheincodes 1202 führt
dieselbe Art von Einfügen
von Scheincodes für
das Verfahren A2 wie für
das Verfahren A1 durch (der Teil, der in 14 durch
die Referenznummer 1603 gekennzeichnet ist).
-
Wenn
die Verteilungsziele der Programme 1600c und 1600d in
Kollusion sind, und Unterschiede zwischen den Programmen gefunden
werden, um den Wasserzeichen-Einfügungsort
zu identifizieren, werden die Teile, die durch die Referenznummern 1601 und 1603 angezeigt
werden, bei denen es sich nicht um ein Wasserzeichen handelt, ebenfalls
zusammen mit dem Wasserzeichen 1602 erfasst, wodurch es
sich als schwierig erweist, einen Wasserzeichen-Einfügungsort
auf Basis eines Kollusionsangriffes zu identifizieren.
-
Auf
diese Weise ist es möglich,
das mechanische Ändern
oder Löschen
eines Wasserzeichens zu verhindern, und es ist möglich, zu verhindern, dass
Programme auf illegale Weise in Umlauf gebracht werden.
-
Im
Folgenden wird unter Verwendung von 15 die
Funktionsweise des Wasserzeichen-Erfassungsabschnittes 302 in Übereinstimmung
mit dem Beispiel 5 beschrieben. 15 ist
ein Ablaufplan, der die Funktionsweise des Wasserzeichen-Erfassungsabschnittes 302 des
Beispiels 5 darstellt.
-
Zuerst
akquiriert der Wasserzeichen-Erfassungsabschnitt 302 Informationen
zum Identifizieren von Scheincodes von dem Abschnitt zum Speichern von
Wasserzeicheninformationen 305 (Schritt 1500).
-
Anschließend erfasst
der Wasserzeichen-Erfassungsabschnitt 302 einen Scheincode-Verfahrensabschnitt,
in dem ein Scheincode-Verfahren implementiert wird und einen Verfahrensabschnitt
in dem Programm unter Verwendung der akquirierten Identifizierungsinformationen
(Schritt 1501) und extrahiert das Wasserzeichen S von dem
Scheincode-Verfahrensabschnitt unter Verwendung der Entsprechung zwischen
Bitzeichenketten und Anweisungscodes, die in einem Abschnitt zum
Speichern von Wasserzeicheninformationen 305 gespeichert
sind (Schritt 1502).
-
Der
Wasserzeichen-Erfassungsabschnitt 302 generiert Kennungsinformationen,
die das Verteilungsziel des Programms eindeutig identifizieren, anhand
der Informationen, die in dem Abschnitt zum Speichern von Kennungsinformationen 304 gespeichert
sind, und anhand des extrahierten Wasserzeichens S (Schritt 1503),
gibt die Kennungsinformationen aus (Schritt 1504) und beendet
die Verarbeitung.
-
Auf
diese Weise kann der Wasserzeichen-Erfassungsabschnitt 302 auf
einfache Weise einen Scheincode-Verfahrensabschnitt und einen Verfahrensabschnitt
unter Verwendung der Kennungsinformationen erfassen, und er kann
das Verteilungsziel des Programms durch Extrahieren des Wasserzeichens
S aus dem Scheincode-Verfahrensabschnitt
identifizieren. Als ein Ergebnis kann verhindert werden, dass Programme
illegal in Umlauf gebracht werden.
-
Wie
dies voranstehend beschrieben worden ist, ist es in Übereinstimmung
mit dem Beispiel 5 möglich,
in ein Programm nicht nur ein Wasserzeichen sondern auch einen Scheincode,
der ein Ausführungscode-Paar
umfasst, einzufügen,
wodurch die Spezifizierungen nicht beeinträchtigt werden. Als ein Ergebnis
wird ein Nicht-Wasserzeichen-Code
an unterschiedlichen Orten erfasst, wenn ein Kollusionsangriff durchgeführt wird,
wodurch es möglich
wird, ein Ändern
oder ein Löschen
des Wasserzeichens auf Basis eines Kollusionsangriffes mit Sicherheit
zu verhindern.
-
(Beispiel 6)
-
Das
Beispiel 6 ändert
ein Programm durch Umschalten der Reihenfolge der Teile, die andere sind
als ein Wasserzeichen-Einfügungsort,
oder des Codes des gesamten Programms. Als ein Ergebnis wird ein
Nicht-Wasserzeichen-Code an unterschiedlichen Orten erfasst, wenn
ein Kollusionsangriff durchgeführt
wird, wodurch es möglich
wird, ein Ändern oder
ein Löschen
des Wasserzeichens auf Basis eines Kollusionsangriffes mit Sicherheit
zu verhindern.
-
Im
Folgenden wird das Beispiel 6 auf ausführlichere Weise beschrieben.
Der Unterschied zwischen der Wasserzeichen-Einfügevorrichtung in dem Beispiel
6 und der Wasserzeichen-Einfügevorrichtung 20 in
der Ausführungsform
1 liegt in der Funktionsweise des Wasserzeichen-Einfügeabschnittes 202.
-
Im
Folgenden wird die Funktionsweise des Wasserzeichen-Einfügeabschnittes 202 des
Beispiels 6 unter Verwendung von 16 beschrieben. 16 ist
ein Ablaufplan, der die Funktionsweise des Wasserzeichen-Einfügeabschnittes 202 darstellt.
-
Zuerst
weist der Wasserzeichen-Einfügeabschnitt 202 der
Variable i einen Anfangswert von 1 zu (Schritt 1601). Anschließend generiert
der Wasserzeichen-Einfügeabschnitt 202 das
Wasserzeichen S anhand der Kennungsinformationen (unterschiedlich für jedes
Verteilungsziel) zum Einbetten in den Code (Programm) (Schritt 1602).
-
Anschließend extrahiert
der Wasserzeichen-Einfügeabschnitt 202 Code-Teile
innerhalb des Programms, die die Spezifizierungen nicht beeinträchtigen,
das heißt,
die es zulassen, dass die Spezifizierungen aufrecht erhalten werden,
selbst wenn ihre Reihenfolge umgeschaltet wird (Schritt 1603). Hierbei
bedeutet ein Code-Teil einen Teil eines Programms, das aus einer
Vielzahl von Codes gebildet ist.
-
Anschließend bestimmt
der Wasserzeichen-Einfügeabschnitt 202,
ob die Variable i kleiner ist als die Anzahl (N) von Code-Teilen,
die es den Spezifizierungen ermöglicht,
selbst dann aufrechterhalten zu werden, wenn ihre Reihenfolge umgeschaltet
wird, oder dieser entspricht (Schritt 1604), und wenn die
Variable i kleiner ist als die Anzahl (N), schaltet er die Reihenfolge
des Codes, der in diesem Code-Teil enthalten ist, um (Schritt 1605),
erhöht
die Variable i (Schritt 1606) und geht zu dem Schritt 1604 über.
-
Wenn
die Variable i nicht kleiner ist als N oder dieser Anzahl N entspricht,
fügt der
Wasserzeichen-Einfügeabschnitt 202 das
Wasserzeichen S in de Code ein (Schritt 1607), kompiliert
den Quellencode, speichert die Assemblercode-Zeilennummer, an der
das Wasserzeichen S eingegeben wurde, gibt das Programm aus und
beendet die Verarbeitung (Schritt 1608).
-
Auf
diese Weise wandelt der Wasserzeichen-Einfügeabschnitt 202 die
Teile, andere Teile sind als ein Ort, an dem ein Wasserzeichen eingegeben
wird, um, wobei die Spezifizierungen aufrecht erhalten werden, durch
Umschalten der Reihenfolge der Code-Teile, die es den Spezifizierungen ermöglichen,
selbst dann aufrecht erhalten zu werden, wenn ihre Reihenfolge umgeschaltet
wird.
-
Im
Folgenden wird ein Programmcode, der durch den Wasserzeichen-Einfügeabschnitt 202 in Übereinstimmung
mit dem Beispiel 6 generiert wird, unter Verwendung von 17 beschrieben.
Das Programm 1700a ist ein ursprüngliches Programm, das durch
den Programm-Eingabeabschnitt 201 eingegeben worden ist.
Die Programme 1700b und 1700c sind Programme,
in denen unterschiedliche Wasserzeichen 1702b und 1702c für jedes
Verteilungsziel in das ursprüngliche
Programm 1700a eingegeben worden sind.
-
Die
Programme 1700b und 1700 enthalten Code-Teile 1701b und 1701c,
sowie 1703b und 1703c. Die Code-Teile 1701b und 1701c,
sowie 1703b und 1703c sind nicht Code-Teile zum Einfügen eines
Wasserzeichens, das in dem ursprünglichen
Programm 1700a enthalten ist, und in diesen Code-Teilen 1701b und 1701c,
sowie 1703b und 1703c wird die Codesequenz der
Code-Teile 1701a und 1701b, die es ermöglichen,
dass die Spezifizierungen selbst dann aufrecht erhalten werden,
wenn ihr Code, der umgeschaltet wird, geändert.
-
Auf
diese Weise wurden das Programm 1700b und das Programm 1700c zu
unterschiedlichen Anweisungssequenzen in Bezug auf das Programm 1700a ungewandelt,
jedoch wurden die allgemeinen Spezifizierungen nicht geändert. Das
bedeutet, in dem Programm 1700b und in dem Programm 1700c wurde
das Programm 1700a umgewandelt, während seine Spezifizierungen
aufrecht erhalten wurden. Wenn die Unterschiede zwischen den Programmen 1700b und 1700c identifiziert
werden, werden, da der Programmcode ebenfalls an Orten modifiziert
worden ist, die andere sind als die Wasserzeichen-Einfügungsorte,
auch die Nicht-Wasserzeichen-Teile 1701b, 1701c, 1703b und 1703c als
Unterschiede erfasst.
-
Dementsprechend
ist es, um die Wasserzeichen der Programme 1700b oder 1700c zu ändern oder
zu löschen,
erforderlich, die Programme zu analysieren und herauszufinden, welche
Teile Wasserzeichen sind, die die Programmspezifizierungen nicht
beeinträchtigen.
Da das Bestimmen, ob ein Teil die Programmspezifizierungen nicht
beeinträchtigt, ein
Verständnis
der Programmspezifizierungen erfordert, erweist es sich als schwierig,
ein Wasserzeichen, das unter Verwendung dieses Verfahrens eingebettet
worden ist, auf mechanische Weise zu löschen.
-
Wie
dies voranstehend in dem Beispiel 6 beschrieben worden ist, arbeitet
der Wasserzeichen-Einfügeabschnitt 202 als
eine Umwandlungsvorrichtung, die von Programmteilen, die andere
sind als die Orte, an denen ein Programmwasserzeichen eingefügt worden
ist, die Programmteile erfasst, die es zulassen, dass die Programmspezifizierungen selbst
dann aufrecht erhalten werden, wenn die Anweisungssequenz umgeschaltet
wird, und er führt
die Umwandlung der Sequenz von Programmteilen durch, deren Anweisungssequenz
ohne ein Beeinträchtigen
der Programmspezifizierungen umgeschaltet werden kann, das heißt, während die
Programmspezifizierungen aufrecht erhalten werden. Demzufolge werden
Programmteile, die die Programmspezifizierungen nicht beeinträchtigen,
die den Nicht-Wasserzeichen-Code umfassen, durch einen Kollusionsangriff
erfasst. Als Ergebnis ist es möglich,
das Ändern
und Löschen
eines Wasserzeichens mit Sicherheit zu verhindern und ein illegales in
Umlauf bringen von Programmen zu verhindern.
-
Darüber hinaus
werden in Übereinstimmung mit
dem Beispiel 6 in Bezug auf die Sequenzumwandlung von Programmteilen,
für die
das Umschalten der Anweisungssequenz kein Problem darstellt, Permutationen
von Anweisungserklärungen
innerhalb eines Programms gefunden, und die Umwandlung wird in Übereinstimmung
mit einer Permutation durchgeführt,
die so ausgewählt
wird, das sie für
jedes Verteilungsziel unterschiedlich ist. Als ein Ergebnis unterscheiden
sich die Anweisungssequenzen von Programmteilen, für die das
Umschalten der Anweisungssequenz kein Problem darstellt, für jedes Verteilungsziel
voneinander. Es erweist sich auf diese Weise als schwierig, einen
Programmteil zu identifizieren, für den das Umschalten der Anweisungssequenz kein
Problem darstellt, und es ist möglich,
das Ändern
oder das Löschen
eines Wasserzeichens mit Sicherheit zu verhindern.
-
Als
ein Verfahren, das ein anderes ist, als die Umwandlung in Übereinstimung
mit Permutationen von Anweisungssequenzen, kann die Reihenfolge von
Programmteilen, für
die das Umschalten der Anweisungssequenz kein Problem darstellt,
für jedes Verteilungsziel
unterschiedlich gestaltet werden, indem die Umwandlung auf Zufallsbasis
erfolgt.
-
Es
ist darüber
hinaus auch möglich,
historische Informationen zu der Sequenzumwandlung des Codes zu
halten, die in Codeteilen enthalten sind, für die das Umschalten der Sequenz
kein Problem darstellt, und die historischen Informationen zum Durchführen der
Umwandlung von Codeteilen zu verwenden, für die das Umschalten der Sequenz
kein Problem darstellt, so dass sie für jedes Verteilungsziel unterschiedlich
sind.
-
Durch
diese Vorrichtung kann die Sequenzumwandlung des Codes, der in Codeteilen
enthalten ist, für
die das Umschalten der Sequenz kein Problem darstellt, auf einfache
und zuverlässige
Weise für
jedes Verteilungsziel unterschiedlich gestaltet werden.
-
Industrielle Anwendbarkeit
-
Wie
dies voranstehend beschrieben worden ist, ist es in Übereinstimmung
mit der vorliegenden Erfindung möglich,
ein Wasserzeichen so einzufügen,
dass es sich als schwierig erweist, den Wasserzeichen-Einfügungsort
zu identifizieren, und dementsprechend ist die vorliegende Erfindung
in einem breiten Bereich, einschließlich dem in Umlauf bringen von
Computerprogrammen unter Verwendung eines Netzwerkes anwendbar.