DE69604307T2 - Kodierungstechnik für software - Google Patents
Kodierungstechnik für softwareInfo
- Publication number
- DE69604307T2 DE69604307T2 DE69604307T DE69604307T DE69604307T2 DE 69604307 T2 DE69604307 T2 DE 69604307T2 DE 69604307 T DE69604307 T DE 69604307T DE 69604307 T DE69604307 T DE 69604307T DE 69604307 T2 DE69604307 T2 DE 69604307T2
- Authority
- DE
- Germany
- Prior art keywords
- program
- executable program
- cascades
- clock
- encoding
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Lifetime
Links
- 238000000034 method Methods 0.000 claims description 50
- 238000012360 testing method Methods 0.000 claims description 6
- 230000000737 periodic effect Effects 0.000 claims description 4
- 230000004044 response Effects 0.000 claims description 4
- 230000002159 abnormal effect Effects 0.000 claims 1
- 230000003278 mimic effect Effects 0.000 claims 1
- 238000012544 monitoring process Methods 0.000 claims 1
- 238000013461 design Methods 0.000 description 22
- 230000006870 function Effects 0.000 description 20
- 230000007123 defense Effects 0.000 description 16
- 230000008859 change Effects 0.000 description 12
- 230000008569 process Effects 0.000 description 11
- 238000004364 calculation method Methods 0.000 description 9
- 238000013459 approach Methods 0.000 description 5
- 230000006399 behavior Effects 0.000 description 5
- 230000000694 effects Effects 0.000 description 5
- 230000008901 benefit Effects 0.000 description 4
- 238000004422 calculation algorithm Methods 0.000 description 4
- 230000007246 mechanism Effects 0.000 description 4
- 240000003537 Ficus benghalensis Species 0.000 description 3
- PWPJGUXAGUPAHP-UHFFFAOYSA-N lufenuron Chemical compound C1=C(Cl)C(OC(F)(F)C(C(F)(F)F)F)=CC(Cl)=C1NC(=O)NC(=O)C1=C(F)C=CC=C1F PWPJGUXAGUPAHP-UHFFFAOYSA-N 0.000 description 3
- 241000700605 Viruses Species 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 230000018109 developmental process Effects 0.000 description 2
- 230000009466 transformation Effects 0.000 description 2
- 125000002015 acyclic group Chemical group 0.000 description 1
- 230000002776 aggregation Effects 0.000 description 1
- 238000004220 aggregation Methods 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 238000009792 diffusion process Methods 0.000 description 1
- 230000008029 eradication Effects 0.000 description 1
- 238000010304 firing Methods 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000001343 mnemonic effect Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 239000003607 modifier Substances 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 210000003813 thumb Anatomy 0.000 description 1
- 235000013619 trace mineral Nutrition 0.000 description 1
- 239000011573 trace mineral Substances 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 238000000844 transformation Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/14—Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Multimedia (AREA)
- Technology Law (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Storage Device Security (AREA)
Description
- Die vorliegende Erfindung betrifft allgemein ein Aufbauverfahren für Software-Programme oder Hardware-Entwicklungen, bei dem die enthaltene Intelligenz vor der Entdeckung oder Nachahmung bzw. Fälschung geschützt ist. Insbesondere wird ein ausführbarer Programmentwurf bzw. ein ausführbares Programm durch das Verfahren des Kaskadierens und Verschachtelns oder Verwebens, zusätzlich zur periodischen Prüf-Code-Einfügung, kodiert, so daß das kodierte Programm geschützt ist, jedoch ausführbar bleibt.
- Die Notwendigkeit in Software-Programmen und Hardware-Entwicklungen enthaltene Informationen zu schützen, oder einen Nachahm-Schutz vorzusehen, ist nicht neu. Es wurden viele Mechanismen angewendet, um diese Ziele zu erreichen.
- In dem Artikel mit dem Titel "Operating System Protection Through Program Evaluation" von F. B. Cohen in Computer & Security, Bd. 12, (1993), S. 565-584 wird ein derartiger Mechanismus vorgeschlagen. Der Angriff auf und die Verteidigung von einem Computer-Betriebs-System wird wie folgt beschrieben:
- "Einer der Hauptfaktoren für die erfolgreiche Anwendung von Informations-Schutztechniken besteht in der Ausnutzung bzw. Gewinnung Computer-Rechenvorteils. Der Rechenvorteil stammt historisch aus der Chiffrierung, wobei die Shannon's Theorie deutlich den Effekt der "Arbeitslast" auf die Komplexität der Verschlüsselungsanalyse zeigt und die Konzepte der Zerstreung und Konfusion vorstellt, welche mit den statistischen Angriffen auf Verschlüsselungssysteme in Verbindung stehen. Die meisten modernen Verschlüsse lungssysteme setzen diese als ihre Hauptverteidigung ein. Das gleiche Grundprinzip trifft auf Computer-Virus-Analysen zu, bei denen evolutionäre Viren die Kompliziertheit der Erkennung und Ausrottung dramatisch erhöhen, und. auf den Paßwortschutz, bei dem wir versuchen die Anzahl der für einen erfolgreichen Angriff erforderlichen Versuche zu erhöhen, indem die Verwendung von naheliegenden Paßwörtern eingeschränkt wird. Einer der Hauptgründe für erfolgreiche Angriffe liegt in der statischen Natur der Verteidigung und der dynamischen Natur des Angriffs." (S. 565)
- "Der ultimative Angriff gegen irgendein System beginnt mit dem physikalischen Zugang und fährt mit der Technik des Entfernens und Umkehrens von irgendwelchen in diesem Fall programmierten Verteidigungsmitteln fort. Selbst wenn ein kryptographischer Schlüssel durch den Anwender vorgesehen wurde, kann ein Angreifer diesen Mechanismus herausfinden und den Schlüssel anwenden, wodurch er umfassenden physikalischen Zugriff erhält. Schließlich kann der Angreifer die Verteidigungsmittel entfernen, indem er Entscheidungspunkte auffindet und diese ändert, um veränderte Entscheidungen zu erzielen." (S. 565-66)
- "Ohne einen physikalischen Schutz vorzusehen, hat bisher niemand ein Verteidigungsmittel gegen diesen Angriff gefunden, und es ist unwahrscheinlich, daß dies jemals irgendjemand gelingen wird. Der Grund dafür besteht darin, daß jedes andere als ein physikalisches Schutzsystem von dem Betrieb einer endlichen Zustandsmaschine (finite state machine) abhängt, und letztendlich jede endliche Zustandsmaschine überprüft und nach Belieben verändert werden kann, wenn bei ausreichend zur Verfügung stehender Zeit entsprechende Anstrengungen unternommen werden. Das Beste, das wir unternehmen können, um einen Angriff zu verzögern, ist den Aufwand für die Durchführung der gewünschten Veränderungen zu erhöhen. (S. 566)
- "Die ultimative Verteidigung besteht darin, den Aufwand für den ultimativen Angriff so weit zu erhöhen, daß die für den Angriff erforderlichen Kosten diesen nicht lohnen. Im Ergebnis bedeutet dies Sicherheit durch Undurchschaubarkeit, und es ist unsere allgemeine Schlußfolgerung, daß jeder technische Informationsschutz in Computersystemen zu einem gewissen Grad entweder auf einem physikalischen Schutz, Sicherheit durch Undurchschaubarkeit oder Kombinationen davon beruht.
- Das Ziel der Sicherheit durch Undurchschaubarkeit besteht darin, die Schwierigkeit für einen Angriff derart zu vergrößern, daß er sich in der Praxis nicht lohnt, selbst wenn er eventuell erfolgreich sein könnte. Ein erfolgreicher Angriff gegen die Undurchschaubarkeits-Verteidigungen hängt von der Fähigkeit ab, einige Schlüsselinformationen zu erhalten. Das naheliegendste Beispiel besteht darin, Paßwörter anzugreifen und zu verteidigen, und weil dieses Problem den Sachverhalt deutlich veranschaulicht, werden wir es als Beispiel verwenden. Beim Paßwortschutz gibt es im allgemeinen drei Gesichtspunkte, um einen Angriff schwierig zu machen. Ein Gesichtspunkt besteht darin, das Feld für das Paßwort groß zu gestalten, so daß die potentielle Anzahl von für einen Angriff erforderlichen Versuchen enorm ist. Der zweite Gesichtspunkt besteht darin, die Wahrscheinlichkeitsdichte zu verbreitern, so daß im selektiven Suchen des Platzes bzw. der Stelle nur ein relativ kleiner Vorteil liegt. Dies ist im Grunde das gleiche wie das Konzept der Verteilung von Shannon. Der dritte Gesichtspunkt besteht darin, die gespeicherte Paßwortinformation undurchsichtig zu gestalten, so daß der Angreifer es nicht einfach in der gespeicherten Form lesen kann. Dies entspricht im wesentlichen dem Konzept der Konfusion von Shannon." (S. 566)
- In dem Artikel wird folgende evolutionäre Verteidigung vorgeschlagen:
- "Eine praktischere Lösung für dieses Problem könnte in der Verwendung von evolutionären Verteidigungsmitteln bestehen. Um eine derartige Verteidigungsstrategie für eine Vielzahl von Varianten (beispielsweise eine pro Computer weltweit) kosteneffizient zu machen, wird wahrscheinlich eine gewisse Art von Automatisierung erforderlich sein. Wenn die Automatisierung wirksam sein soll, muß sie einen großen Suchbereich erzeugen und ein erhebliches Maß von Konfusion und Verteilung bzw. Diffusion ergeben. Dies wäre dann das Ziel von evolutionären Verteidigungsmitteln.
- Die Evolution kann auf viele verschiedene Arten und an vielen unterschiedlichen Orten erzielt werden, die von einer, von unterschiedlichen Händlern bereitgestellten, kleinen endlichen Anzahl von Verteidigungsmitteln bis zu einem Verteidigungssystem reicht, das sich selbst durch jeden Systemaufruf weiterentwickelt. Mit einer umfangreicheren Evolution bzw. Weiterentwicklung erhalten wir eine geringere Leistung, erzeugen jedoch höhere Kosten für einen Angriff. Wie bei allen Schutzfunktionen ist somit ein Preis für einen verbesserten Schutz zu zahlen. Unter der Voraussetzung, daß wir einen ausreichend wirksamen Mechanismus für eine wirksame Evolution finden, können wir ein großes Maß an Mannigfaltigkeit mit praktisch keinen Kosten für den Endanwender erzeugen, während wir die Kosten für einen Angriff in großem Ausmaß stark erhöhen. Als ein angenehmer Nebeneffekt könnte der ultimative Angriff für jedes angegriffene System erforderlich werden. Anders ausgedrückt können Angreifer, außer bei endemischen Fehlern, wieder zu Einzelfall-Angriffsexperten herabgestuft werden, und das Verteidigungsszenario kann den physikalischen Zugang umfassen." (S. 567)
- Es existiert eine große Anzahl von Patenten, die unterschiedliche Wege zum Schutz von Software und/oder Hardware und den darin enthaltenen Informationen beschreiben. Für diese Patente werden nachfolgend nur einige Beispiele gegeben.
- Das am 25. Juni 1985 auf den Namen Curran et al erteilte US-Patent Nr. 4 525 599 mit dem Titel "Software Protection Methods and Apparatus", sieht als Kopierschutz von ROM-resistenter Software eine Schutzschaltung vor, die Verschlüsselungs-/Entschlüsselungs-Einrichtungen einschließt, die zwischen dem Mikroprozessor und dem ROM-Speicher geschaltet sind.
- Gemäß dem am 6. Januar 1987 auf den Namen Chorley et al erteilten US-Patent Nr. 4 634 807 mit dem Titel "Software Protection Device", ist zum Verhindern des unautorisierten Kopierens von Software vorgesehen, daß ein Software-Modul gemäß dieser Erfindung durch DES verschlüsselt wird, wobei der Schlüssel unter Verwendung des öffentlichen Schlüssels eines öffentlichen/- privaten Schlüssel-Algorithmus verschlüsselt wird.
- Bei dem am 26. April 1988 auf den Namen William erteilten US-Patent Nr. 4 740 890 mit dem Titel "Software Protection System With Trial Period Usage Code and Unlimited Use Unlocking Code Both Recorded on Program Storage Media", ist vorgesehen, daß die Speicherplatte nach einem Versuchszeitabschnitt betriebsunfähig wird, damit das System die weitere Verwendung des Programms verhindern kann, bis ein entsprechender Sperr- Code eingegeben wird.
- Das am 12. September 1989 auf den Namen Karp erteilte US- Patent Nr. 4 866 769 mit dem Titel "Hardware Assist for Protecting PC Software" beschreibt eine Kopierschutztechnik für PC-Software. Bei diesem Verfahren wird eine eindeutige ID im ROM eines Personal-Computers gespeichert, mit dem Software auf einer Diskette verwendet werden soll. Auf diese ID kann der Benutzer des Computers zugreifen. Ein Händler, der seine durch Disketten vertriebene Software vor einem illegalen Kopieren oder einer illegalen Verwendung schützen möchte, sieht auf der Diskette eine Quell-ID vor.
- Gemäß dem am 20. Februar 1990 auf den Namen Chandra et al. erteilten US-Patent Nr. 4 903 296 mit dem Titel "Implementing a Shared Higher Level of Privilege on Personal Computers for Copy Protection of Software", ist das Original-Medium in funktioneller Hinsicht nicht reproduzierbar, bis es durch die Ausführung eines Programms modifiziert wird, das in einem nachahmungssicheren Co-Prozessor gespeichert ist, der einen Teil des Computers bildet.
- Bei dem Lizenz-Management-System gemäß dem am 26. Juni 1990 auf den Namen Robert et al. erteilten US-Patent Nr. 4 937 863 mit dem Titel "Software Licensing Management System" wird ein Lizenz-Anzahl-Wert für jedes, lizensierte Programm sowie ein Zeiger auf eine Tabelle gespeichert, die einen Anforderunge- Anzahl-Wert speichert, der der Verwendung von jedem lizensierten Programm zugeordnet ist. Als Reaktion auf einen Antrag ein lizensiertes Programm zu verwenden, antwortet das Lizenz- Management-System mit einem Hinweis, ob der Lizenz-Anzahl- Wert den der Anwendung zugeordneten Anforderungs-Anzahl-Wert übersteigt.
- Das am 10. September 1991 auf den Namen Wiedemer erteilte US-Patent Nr. 5 047 928 mit dem Titel "Billing System for Computer Software" lehrt ein Buchungssystem, bei dem das Anwendungsprogramm gemäß einem Algorithmus kodiert ist, der auf einem numerischen Schlüssel basiert. Der Computer des Benutzers ist mit einem Hardware-Sicherheits-Modul und einem entfernbaren Buchungsmodul versehen, von denen beide eindeutige Codes aufweisen.
- Das am 16. Juni 1992 auf den Namen Ostrovsky erteilte US- Patent Nr. 5 123 045 mit dem Titel "Comprehensive Software Protection System", ergibt ein Modell für den Speicherzugriffsschutz während der Ausführung eines Programms, und es ergibt weiterhin den Schutz von im Speicher gespeicherten Daten. Das Patent beschreibt ein Datenverarbeitungssystem, das eine Vielzahl von "Puffer"-Datenstrukturen zur Speicherung verschlüsselter Software und verschlüsselter Daten in einem un geschützten Speicher umfaßt. Die Software und die Daten werden gemäß einer Pseudo-Zufalls-Abbildung derart gespeichert, daß das Zugriffsmuster während der Ausführung des Programms dem fremden Beobachter keine Informationen zurückliefert. Das Schema ist sicher, die Existenz eines physikalisch abgeschirmten Chips, der eine konstante Anzahl von Registern enthält, und die Existenz von irgendeiner Einweg-Funktion vorausgesetzt.
- Gemäß dem am 18. Mai 1993 auf den Namen Glover et al. erteilten US-Patent Nr. 5 212 728 mit dem Titel "Dynamic Trace Elements", ist eine Überwachungsschaltung mit dem Rest der Schaltung eines Produkts verbunden, ihre Funktion hat jedoch nichts mit dem momentanen Betrieb des Produkts zu tun. Eine oder mehrere Zeilen des Überwachungscodes werden in Zeilen des echten Codes eingebettet. Der Überwachungs-Software-Code wirkt mit der Überwachungsschaltung zusammen. Auch wenn der Überwachungs-Software-Code bezogen auf den Ablauf des echten Software-Codes keine Funktion erfüllt, wirkt er mit der vorhandenen Hardware zusammen, d. h. mit der Überwachungsschaltung. Ein Kopierer, der das Programm disassembliert hat, hätte beträchtliche Schwierigkeiten bei der Feststellung dieser Tatsache. Bei einer anderen Ausführungsform können eine oder mehrere Zeilen von Überwachungscodes in den echten Code eingebettet werden, sie wirken jedoch mit Zeilen des echten Codes zusammen, um Ergebnisse zu erzeugen, die nicht in Verbindung mit dem Betrieb oder dem Ablauf des echten Codes stehen.
- Gemäß dem am 15. Februar 1994 auf den Namen Holmes erteilten US-Patent Nr. 5 287 407 mit dem Titel "Computer Software Protection" ist innerhalb einer Hauptkopie einer Software- Datei ein vorherbestimmter Datenblock vorgesehen. Wenn von dieser Datei eine Kopie erstellt wird, wird dieser Datenblock innerhalb der kopierten Datei angeordnet und mit Daten überschrieben, die die kopierte Datei identifizieren. Wenn eine nicht-autorisierte Kopie aufgefunden wird, können die die Kopie identifizierenden Daten gelesen und die Quelle der nichtautorisierten Kopie verfolgt werden.
- Allgemein ausgedrückt können die Schutztechniken, einschließlich einiger der oben genannten, im wesentlichen als die Anwendung des Gegenteils der Grundlagen des "klaren Designs" aufgefaßt werden. Bei der Entwicklung von Software oder Hardware existieren bestimmte Grundsätze, die angewendet werden, um das Design klar, verständlich, managebar und gut organisiert zu machen. In Bezug auf Software werden derartige Grundsätze als "Grundsätze des Software-Engineering" bezeichnet. Wenn jedoch, einfach ausgedrückt, die Anwendung eines Satzes von Grundsätzen zur einfacheren Verständlichkeit und Änderbarkeit des Designs bzw. Entwurfs beiträgt, dann führt die Anwendung ihrer Gegensätze wahrscheinlich dazu, daß der Entwurf schwerer zu verstehen und zu ändern ist.
- Beispielsweise bei Software weist die Wahl von mnemonischen bzw. merkfähigen Variablen auf die tatsächliche Verwendung dieser Variablen hin, was wichtig zum Verständnis des Programms ist. Daher würde die Wahl von variablen Namen, die entweder keinen Bezug zu ihrer Verwendung, oder einen unterschiedlichen Bezug zu ihrer Verwendung aufweisen, das Verständnis und die Änderung der Software erschweren.
- Die Anwendung des Gegenteils der "klaren Design-Grundsätze" soll mit dem Namen "anti-klares Design" bezeichnet werden.
- Die vorliegende Erfindung ist in Bezug auf ihren Zweck und ihre angestrebte Wirkung analog zu diesen Ansätzen, d. h. sowohl der Ansatz des "anti-klaren Designs" als auch die vorliegende Erfindung sind dazu vorgesehen, geistiges Eigentum zu schützen und eine (wirksame) Nachahmung bzw. Kopie zu verhindern. Die Grundlage des erfindungsgemäßen Verfahrens besteht jedoch nicht in der Anwendung des Gegensatzes der "klaren Design-Grundsätze". Die Erfindung unterscheidet sich in zwei entscheidenden Wegen von derartigen bekannten Ansätzen.
- Erstens haben die bekannten Ansätze nicht gegen wirklich bestimmte Angriffe geholfen. Viele Arten von Verschleierungen wurden bei dem Ansatz des "anti-klaren Designs" mit Hilfe von Analyse-Werkzeugen einfach durchschaut, die beispielsweise in Datenfluß-Analysern, optimierenden Compilern oder Programm- Slicing-Hilfsmitteln zu finden sind.
- Zweitens basiert das vorliegende Verfahren auf den Begriffen der Kolmogorov-Komplexität und der Computer- bzw. Rechen- Graphen-Theorie, nicht auf der Umkehr der Regeln von Thumb über das Software-Engineering oder der Grundsätze des klaren Hardware-Designs. Daher sind die bei einem "anti-klaren Design"-Verfahren angewendeten Operationen oberflächlich und lokal, während die bei dem erfindungsgemäßen Verfahren angewendeten Operationen tiefgehend und global sind.
- Die Kolmogorov-Komplexitäts-Theorie ergibt einen Weg zur Messung des "wesentlichen" Informationsgehaltes eines Informationsteils (von beliebiger Art). Gemäß der üblichen Informationstheorie ist beispielsweise die durch die Übertragung einer Nachricht, die aus der binären Codierung der Zahl π = 3,14156... besteht, dargestellte Information unendlich: Es existieren unendlich viele Dezimalstellen und die Zahl ist nicht-periodisch. Die wesentliche Information ist jedoch nicht unendlich: Es ist möglich die Reihe von Dezimalstellen in Form eines kleinen Programms zu definieren, das so viele Dezimalstellen von π wie erwünscht berechnet. Da diese Programm klein ist, ist die Menge der "wesentlichen" Information in π ebenfalls klein. In der vorliegenden Beschreibung verwenden wir das analoge Prinzip, um mit der wesentlichen Komplexität eines Computer-Programms P und der wesentlichen Komplexität der Gewinnung eines anderen Programms Q aus einem Programm P umzugehen. Für eine Einführung in die Kolmogorov-Komplexität wird auf das "Handbook of Theoretical Computer Science", Elsevier/- MIT Press, ISBN 0-444-88074-7 (Volum A, Chapter 4) verwiesen.
- Durch die Erweiterung dieses Konzeptes können wir die Größenordnung des Unterschiedes zwischen Programmen, durch das, was wir den gerichteten Kolmogorov-Abstand zwischen ihnen nennen, messen. Für irgendein festes Programm-Alphabet und ein Kodierverfahren wird der gerichtete Kolmogorov-Abstand zwischen dem Programm P und dem Programm Q als die Länge des kleinsten Programms definiert, das P als Eingangsdaten erhält und Q als Ausgangsdaten liefert. Obwohl sich dieser Abstand von einer Kodierung zur anderen ändert, sind die Abweichungen gemäß dem Invariance-Theorem der Kolmogorov-Komplexitäts-Theorie scharf begrenzt. In diesem Zusammenhang wird auf "An Introduction to Kolmogorov Complexity and its Applications" von Ming Li und Pau Vitanyi, ISBN 0-387-94053-7: Abschnitt 2.1: "The Invariance Theorem" verwiesen. Man beachte das folgende Zitat aus Beispiel 2.2: "Das Invariance-Theorem zeigt tatsächlich, daß es zum knappen Ausdrücken eines Algorithmus in einem Programm nicht darauf ankommt, welche Programmiersprache verwendet wird (bis auf eine feste zu addierende Konstante, die nur von den beiden zu vergleichenden Programmiersprachen abhängt)".
- Ein Design von der Art, wie es durch das Verfahren gemäß der Erfindung erzeugt wird, ist zu einer verschlüsselten Nachricht analog, wobei die Enthüllung der Nachricht ohne Kenntnis des Schlüssels zwar im Prinzip möglicht, jedoch in der Praxis derart schwierig ist, daß die Nachricht nur sehr unwahrscheinlich ohne den Schlüssel zu enthüllen ist. Trotz der Analogie zur Verschlüsselung hinsichtlich des Zwecks und der gewünschten Wirkung, betrifft die Erfindung jedoch nicht die Cryptographie bzw. Verschlüsselung. Ein durch das vorliegende Verfahren erhaltenes Software-Programm oder eine Hardware-Vorrichtung ist "wie sie ist" ausführbar: ihre Information braucht zur Verwendung nicht dekodiert zu werden. Das Verfahren nimmt ausführbare Information (Software, die auf einem Computer laufen kann, oder ein Hardware-Design, das zur Herstellung einer integrierten Schaltung oder einer anderen Hardware-Vorrichtung verwendet werden kann) und transformiert sie in eine neue Form, die immer noch ausführbar ist, die jedoch den Inhalt sowohl vor der Enthüllung als auch vor der Nachahmung schützt.
- Das Verfahren bewahrt den Wert des Designs bzw. Entwurfs: Es besteht keine Notwendigkeit für eine Entschlüsselung, um den Wert zurückzugewinnen, und keine Notwendigkeit für einen Schlüssel, um auf den Wert zuzugreifen. Eine verschlüsselte Nachricht hat jedoch nur in Verbindung mit ihrem Schlüssel einen Wert, und ihr Wert (die Information der Nachricht) kann nur durch Entschlüsselung erhalten werden. Ohne Schlüssel oder Entschlüsselung hat die verschlüsselte Nachricht selbst keinen praktischen Wert. Gemäß der vorliegenden Erfindung kodierte Programme bzw. Designs sind so wie sie sind ohne Schlüssel nutzbar: verschlüsselte Nachrichten sind nur mit einem Schlüssel und nur wenn sie entschlüsselt sind, nutzbar.
- Es ist daher ein Grundgedanke der Erfindung, zum Schutz der Sicherheit ein Verfahren zur Kodierung eines ausführbaren Programms zur Verfügung zu stellen.
- Es ist ein weiterer Grundgedanke der vorliegenden Erfindung, zum Schutz vor Nachahmungen bzw. Vervielfältigungen, ein Verfahren zur Kodierung eines ausführbaren Programms und zum Verbergen der darin enthaltenen Informationen derart bereitzustellen, daß das kodierte Programm ausführbar bleibt.
- Es ist ein weiterer Grundgedanke der vorliegenden Erfindung, zum Schutz vor Nachahmungen bzw. Vervielfältigungen, ein Verfahren zur Kodierung eines ausführbaren Programms und zum Verbergen der darin enthaltenen Informationen bereitzustellen, während das kodierte Programm ausführbar bleibt.
- Es ist noch ein weiterer Grundgedanke der vorliegenden Erfindung, zum Schutz vor Nachahmungen bzw. Vervielfältigungen, ein Verfahren zur Kodierung eines ausführbaren Programms und zum Verbergen der darin enthaltenen Informationen bereitzustellen, während das kodierte Programm ausführbar bleibt, jedoch eine Falle enthält, die aktiviert werden kann, um das Programm in einen nicht-ausführbaren Zustand zu versetzen.
- Kurz ausgedrückt betrifft die Erfindung ein Verfahren zur Kodierung eines ausführbaren Programm zum Schutz vor Nachahmungen und zur Verdeckung der darin enthaltenen Informationen, derart daß das kodierte Programm ausführbar bleibt. Gemäß der Erfindung umfaßt das Verfahren die Schritte zwei oder mehr identische Kopien einer Prüfkaskade für jeden von einem oder mehreren Grundblöcken des ausführbaren Programms anzufertigen, wobei jede Prüfkaskade ähnlich zu jedem entsprechenden Grundblock ist und eine Länge und Breite entsprechend einem vorherbestimmten Sicherheitslevel aufweist.
- Das Verfahren schließt dabei weiterhin die Schritte des Einfügens von periodischen Prüf-Codes ein, die über die Kopien der Prüfkaskaden verteilt sind, wobei die Prüf-Codes zur Überwachung der erwarteten Ausgangsdaten der Prüfkaskaden an vorherbestimmten Punkten des ausführbaren Programms und zum Verschachteln bzw. Verweben des ausführbaren Programms und der Prüfkaskaden dienen, so daß die Ausgangsdaten des kodierten ausführbaren Programms von allen Eingangsdaten des ausführbaren Programms und der Prüfkaskaden abhängen.
- Bei dieser Anmeldung befassen wir uns nur mit Programmen, die einen Datenzugriff ohne Pseudonym bzw. Alias aufweisen, d. h. denjenigen, die als "reine" Daten-Fluß-Diagramme dargestellt werden können. Aggregierte bzw. zusammenhängende Daten können einfach durch gut bekannte Transformationen gehandhabt werden, die die aggregierten Daten in scalare Daten und zusätzlichen Code umsetzen. Diese Transformation kann vor der Kodierung gemäß der vorliegenden Erfindung durchgeführt werden.
- Fig. 1 ist eine schematische Darstellung eines Operationsknotens, der sich in einem Programm findet,
- Fig. 2 ist eine schematische Darstellung eines beispielhaften Netzwerks aus dem Operationsknoten,
- Fig. 3 ist ein Beispiel eines einfachen Programms, das in Basisblöcke aufgeteilt ist,
- Fig. 4 zeigt, daß dort viele Kaskaden vorliegen, die dem ursprünglichen Programm ähnlich sind, Fig. 5 zeigt einen einfachen Fall, bei dem zwei Stränge von Operationen, zum Beispiel ein Original-Programm und der Takt, kombiert sind,
- Fig. 6 zeigt schematisch ein Beispiel einer Verschachtelung des Codes nach Fig. 5, und
- Fig. 7 zeigt schematisch ein alternatives Beispiel der Verschachtelung des Codes von Fig. 5.
- Wie bereits erwähnt, ist ein Software-Programm oder ein Hardware-Design (hier einfach als Programm bezeichnet), wie beispielsweise eine Netzliste für eine integrierte Schaltung, reine Information. Daher kann sie von irgendeinem Empfänger einfach verändert werden. Es besteht jedoch ein Unterschied zwischen einer willkürlichen Änderung (zum Beispiel ist das Löschen oder Zerstören eines Programms mit Sicherheit eine Änderung) und einer wirksamen Änderung. Das Ziel beim Ändern eines Programms besteht normalerweise darin, ein neues Programm zu erzeugen, dessen Verhalten ähnlich dem des Originals ist, dessen Verhalten jedoch auf eine Art verändert ist, die dem Modifizierer nützt. Beispielsweise kann ein Programm - z. B. ein Textverarbeitungsprogramm - als kostenlose Probe einem potentiellen Kunden zur Verfügung gestellt werden, und es kann derart aufgebaut sein, daß es bis zu einem bestimmten Datum in naher Zukunft als Textverarbeitungsprogramm arbeitet. Eine nützliche Veränderung für den Empfänger bestünde darin, das Datum in ein weit in der Zukunft liegendes Datum zu ändern, wodurch er permanenten Zugriff auf das Textverarbeitungsprogramm erhält.
- In dieser Beschreibung wird ein Programm wirksam unveränderbar genannt, wenn es derart beschaffen ist, daß die Durchführung irgendeiner derartigen, bezogen auf das Verhalten kleinen, jedoch nicht überflüssigen, für den Empfänger nützlichen Änderung des Designs äußerst schwierig durchzuführen ist - schwierig genug, um auch einen sehr bestimmten Empfänger zu entmutigen.
- Die bei dieser Beschreibung verwendete Sicht eines Programms basiert auf einer Standard-Sichtweise, die bei optimierenden Compilern verwendet wird, die jedoch verändert ist, um parallele Steuerungsübertragungen zu ermöglichen. Das "Programm" kann genauso gut eine Netzliste für integrierte Schaltungen wie auch ein Software-Quell-Code für Software-Programme, oder eine VHDL-Beschreibung für Hardware sein. Es sollte beachtet werden, daß ein "Prozeß" die Ausführung oder den Betrieb eines Programms bezeichnet, das normalerweise aus einer Sammlung von Schritten besteht.
- Eine einheitliche Darstellung, die in vielen optimierenden Compilern für sequentielle Sprachen verwendet wird, ist in "Compilers: Principles, Techniques and Tools" von Alfred V. Aho, Ravi Sethi und Jeffrey D. Ullman, ISBN 0-201-10088-6 beschrieben. In Abschnitt 9.4: "Basic blocks and flow graphs" beschreibt dieses Buch, wie normaler Code als eine Reihe von Daten-Fluß-Netzwerken aufgefaßt werden kann, die Operationsknoten aufweisen, die durch Datenverbindungen (Bögen, Kanten) verbunden sind. Die Operationsknoten sind Knoten mit einem oder mehreren Eingangs-Anschlüssen und einem oder mehreren Ausgangs-Anschlüssen. Jeder Ausgangs-Anschluß eines Operationsknotens kann mit einem oder mit mehreren Eingangs-Anschlüssen einiger Operationsknoten verbunden sein.
- Fig. 1 zeigt einen Operationsknoten, bei dem die Eingangs- Anschlüsse 1, 2 und 3 auf der Innenseite des Kästchens und die Ausgangs-Anschlüsse 1 und 2 auf der Außenseite liegen. Die Eingangs-Anschlüsse und die Ausgangs-Anschlüsse sind fortlaufend numeriert. Der Name des Operationsknotens, eine Beschreibung davon, oder beides, können auf der Innenseite der Box bzw. des Kästchens vorgesehen sein. Ein Operationsknoten tut so lange nichts, bis er einen Wert auf jedem seiner Eingangs-Anschlüsse und keinen Wert auf irgendeinem seiner Ausgangs-Anschlüsse aufweist. Zu diesem Zeitpunkt ist er in die Lage versetzt zu "feuern", wodurch er einen Wert auf jeden seiner Ausgangs-Anschlüsse legt. Wenn ein Ausgangs-Anschluß mit einem oder mit mehreren Eingangs-Anschlüssen derart verbunden ist, daß alle Eingangs-Anschlüsse leer sind, kann der Wert am Sende-Ende (dem Ausgangs-Anschluß) zu dem Eingangs-Ende (Eingangs-Anschluß) übertragen werden. Dies löscht den Ausgangs-Anschluß.
- Ein Betriebsknoten ist mit anderen Betriebsknoten über Datenverbindungen (Bogen, Kanten) verbunden, um Datenfluß-Netzwerke zu bilden. Fig. 2 zeigt, lediglich beispielhaft, die Implementation eines GateAdd-Netzwerks bzw. eines Addier-Gatter-Netzwerks. Das Netzwerk erwartet ein Takt-Synchronisations-Signal an seinem Eingangs-Anschluß 1 und InData- bzw. Eingangs-Daten- Werte, beispielsweise a und b, an seinen Eingangs-Anschlüssen 2 und 3. Wenn alle Werte vorliegen, feuert es ein Ergebnissignal am Ausgangs-Anschluß 1 ab. Dieses Netzwerk ist ein synchroner (getakter) Addierer, der aus asynchronen Addierern aufgebaut ist.
- Diese Sicht von Programmen stellt die Grundlage für das Programm-Modell bzw. PROGRAM MODEL dar, das in dieser Beschreibung benutzt wird, wobei weiterhin Aufruf-Operationen vorgesehen sind, die die Ausführung von Unterprogrammen auslösen können. Ein PROGRAM weist, dann, eine 2-Level-Standarddarstellung als ein Steuerungs-Flußgraph auf, bei dem Knoten des Kontroll- Flußgraphen die Basis-Blöcke (BB's) darstellen und eingebettete anti-zyklische Datenflußgraphen (DFG) die in diesen Basis- Blöcken durchgeführten Berechnungen sind. Es existiert ein bestimmter "Start"-Basisblock, bei dem die Ausführung beginnt und an dessen Eingangs-Anschlüssen die Eingangsdaten des Programms angelegt werden. Ein Anfangs-Zustand (Anfangswerte, die an einigen der Eingangs-Anschlüsse des Programms vor Beginn der Ausführung anliegen müssen) ist ebenfalls erlaubt.
- Fig. 3 beschreibt ein Beispiel eines Programms, das in BBs aufgeteilt ist, von denen jeder als ein Kästchen bzw. eine Box dargestellt ist. Zur Veranschaulichung schließt es ein Schleifen-BB und ein "if" bzw. "wenn"-Anweisungs-BB ein, um anzuzeigen, daß bei der Erfüllung einer bestimmten Bedingung die Ausführung schleifenförmig ist.
- Bei der obigen Sicht von BBs, ist ein BB eine Folge von aufeinanderfolgenden Anweisungen, bei denen der Steuerungsfluß am Anfang eintritt und am Ende austritt, ohne anzuhalten oder der Möglichkeit einer Verzweigung, außer am Ende. Ein BB stellt daher eine Code-Sequenz ohne Bedingungen und ohne Schleifen dar, ähnlich wie eine "geradlinige" Code-Folge bei sequenziellen Sprachen.
- Die BBs sind miteinander verbunden, d. h. Verbindungen (Bögen, Kanten) verbinden einige Ausgangs-Anschlüsse von einigen BBs mit einigen Eingangs-Anschlüssen von anderen BBs.
- Eine Aufruf-Operation (INVOCATION OPERATION) kopiert eine ROUTINE (wodurch eine "instance" der Routine erzeugt wird), wobei die Werte an ihre Eingangs-Anschlüsse der Eingabedaten- Anschlüsse der Instanz angelegt werden. Die Aufruf-Operationen (INVOCATION-OPERATIONS) weisen Ruf-Operationen (CALL OPERATIONS) und Verzweigungs-Operationen (FORK-OPERATIONS) auf. Eine Ruf- Operation (CALL OPERATION) wartet, sobald sie die Ausführung einer Instanz einer Routine auslöst, auf die Beendung der Instanz, und dann legt sie die Werte an die Ausgabedaten-Anschlüsse der Instanz, an ihre entsprechenden Ausgabe-Anschlüsse. Somit entspricht eine Ruf-Operation (CALL OPERATION) einem Prozedur- oder Funktions-Aufruf. Eine Verzweigungs-Operation (FORK OPERATION) wartet nicht auf die Beendigung der Instanz, und wenn die Instanz beendet wird, wird sie einfach verworfen. Eine Verzweigungs-Operation (FORK OPERATION) entspricht einer Prozeß-/Task-Erzeugung.
- Unabhängig vom Grad der Parallelität in dem Programm, kann es betrachtet werden, als ob es eine Reihe von "im wesentlichen" sequentiellen Prozessen ausführt, wobei ein Prozeß entweder die Ausführung der Haupt- (MAIN-) Routine und der von ihr aufgerufenen Routinen, oder die Ausführung eines Prozesses (Routinen-Instanz) ist, der durch eine Verzeigungs- (FORK-) Operation oder die von ihr aufgerufene Routinen aktiviert wird. Ein Prozeß, der nicht der Haupt- (MAIN-) Prozeß ist, kann nur durch die Verwendung der Verzweigungs-Operation (FORK-OPERATION) erzeugt werden. Die Parallelität in dem Programm wird in einen einzigen sequentiellen Strom von Prozessen zerlegt; dies wird häufig in irgendwelchen Multitasking-Betriebssystemen eingesetzt.
- Diese Sichtweise ist für viele Hardware-Designs geeignet weil:
- 1. Innerhalb von jedem Prozeß eine extensive (jedoch gebundene) Parallelität erlaubt ist.
- 2. Die durch die Verzweigungs-Operation (FORK OPERATION) erzeugten Teile der Prozesse können beliebig klein sein, bis hinab zu dem Level eines einzigen Operationsknotens.
- Viele Hardware-Designs und Programme in sequentiellen oder parallelen Programmierhochsprachen, die gemeinsame Speicher (shared menory), eine Nachrichtenweiterleitung und verteilte Designs darstellen, können in der oben angegebenen Form kodiert werden, ebenso wie Programme auf niedrigeren Leveln wie beispielsweise der Assembler-Sprache.
- Ein Programm (PROGRAM) weist eine Haupt-Routine (MAIN ROUTINE) plus einen Satz anderer Routinen, plus einen Anfangszustand (INITIAL STATE) auf, der Werte für einige der Eingangsdaten- Anschlüsse (ENTRY PORTs) des Programms vorgibt. Die Ausführung beginnt mit Werten gemäß dem Anfangszustand (INITIAL STATE) an den spezifizierten Eingangsdaten-Anschlüssen, und den Eingangsdaten (INPUT) des Programms an den anderen Eingangs-Anschlüssen (ENTRY PORTs) des Programms.
- Das Kodierverfahren gemäß der vorliegenden Erfindung muß das Verhaltens-Aufrechterhaltung und die Proximitäts-Inversion sicherstellen. Nachfolgend wird diese Kodierung gemäß der Erfindung EIS- (Effectively Immutable Software und Hardware = wirksam unveränderbare Software und Hardware) Kodierung genannt, welche die bereits genannten Aufgaben löst. Innerhalb dieser Beschreibung wird EIS oder EIS-Kodierung der Kürze wegen anstelle von wirksamer unveränderbarer Software- und Hardware- Kodierung verwendet.
- Ein Programm P ist proximitäts-invertierend, wenn jede kleine Änderung in P eine große Änderung im Verhalten von P hervorrufen muß.
- Eine EIS-Kodierung nimmt ein normales Programm P und gibt ein Programm Q mit Proximitäts-Inversion und mit dem gleichen Verhalten wie P aus. In gewissem Sinn versuchen die "klares Design-Grundsätze" die Proximität zu bewahren, obwohl auch Bereiche erzeugt werden (die typischerweise Module genannt werden), um die Proximität einzuschränken. Wie vorstehend beschrieben, garantiert das "anti-klar"-Design die Proximitäts- Inversion nicht, es verhindert sie lediglich nicht aktiv.
- Eine Kaskade ist ein azyklischer DFG, derart, daß jeder der Ausgangs-Anschlüsse von allen der Eingangs-Anschlüsse abhängt. Der Sinn besteht darin, daß die Änderung irgendeines Eingabewertes fast alle der Ausgabewerte mit hoher Wahrscheinlichkeit verändern wird. Anders ausgedrückt ist eine Kaskade ein Block von Berechnungen, derart daß jeder der Ausgänge von allen der Eingänge abhängt. Eine andere Möglichkeit besteht darin, den Abhängigkeitsgraphen der Kaskade zu betrachten: Es handelt sich um einen einzelnen dichten Graphen ohne unabhängige Unter- bzw. Teilgraphen.
- Die Kaskaden werden hauptsächlich als ein "Rückgrat" des dichten Abhängigkeitsgraphen verwendet. Das bedeutet, daß die Kaskaden für jeden Basisblock unter Verwendung des Steuergraphen miteinander verbunden sind, wodurch ein Programm gebildet wird, das parallel zum ursprünglichen Programm ausgebildet ist, jedoch eine dichte und komplexe Abhängigkeit aufweist. Da das einzige Interesse dem Abhängigkeitsgraphen gilt, ist das Ergebnis der Berechnung nicht wirklich von Interesse. Wie dies in Fig. 4 dargestellt ist, ist es möglich, verschiedene Kaskaden zu erzeugen, die dem ursprünglichen Programm ähnlich sind, wie beispielsweise die Takt-Kaskade und die Prüf-Kaskaden C1 und C2 etc.
- Das ursprüngliche Programm wird dann mit diesen Kaskaden verschachtelt, wodurch der ursprüngliche Abhängigkeitsgraph (dependency graph) "versteckt" wird. Anders ausgedrückt wird der ursprüngliche Abhängigkeitsgraph (der sehr regelmäßig und/oder einfach sein kann) zu einer willkürlich aufgebauten Monstrosität "gemischt" bzw. "gemerged". Dies macht es extrem schwierig den ursprünglichen Abhängigkeitsgraphen wieder zu gewinnen (wodurch eine der Hauptmöglichkeiten der Rückwärts-Entwicklung vereitelt wird).
- Einige Maßzahlen für die "Güte" einer Kaskade sind:
- - für jeden Operationsknoten, die Anzahl der durch ihn beeinflußten Ausgänge; und
- - für jeden Operationsknoten, die Anzahl von durch ihn beeinflußten nachfolgenden Operationsknoten.
- Eine einfache Möglichkeit zum Aufbau einer Kaskade besteht in der Verwendung eines Schiebenetzwerks der gewünschten Größe, beispielsweise eines Banyan-Netzwerks. Ersetze jedes der 2 · 2 Schaltelemente durch eine Verschachtelungsfunktion mit zwei Eingängen und zwei Ausgängen. Das sich ergebende Netzwerk ist eine Kaskade. Obwohl es ausreichend ist, Kaskaden mit gleichmäßiger Struktur zu verwenden, ist es natürlich wünschenswert Kaskaden mit ungleichmäßiger Struktur zu verwenden.
- Eine M-> N (von M zu N) Verschachtelungsfunktion F ist eine Funktion mit M Eingängen und mit N Ausgängen. Es ist (fast immer) erforderlich, daß F invertierbar ist, und daß jeder der Ausgänge von allen der Eingänge abhängt. Formaler ausgedrückt: Eine Verschachtelungsfunktion ist ein Sub-DFG mit einer Vielzahl von Eingängen und Ausgängen, derart, daß jeder Ausgang eine Funktion von mehr als einem Eingang ist, und daß die Aggregations-Funktion von den Eingängen zu den Ausgängen mit hoher Wahrscheinlichkeit invertierbar ist (d. h., die Informationen werden aufrechterhalten). Derartige Funktionen werden für unterschiedliche Zwecke verwendet:
- (1) Zum Aufbau von Kaskaden: um eine Kaskade aufzubauen, braucht man ein Netzwerk mit M Eingängen und N Ausgängen, wobei M und N größer als zwei sind. Die Form des Netzwerks sollte derart sein, daß wenn jeder Knoten ein Multi-Eingangs-, Multi-Ausgangs-Schalter ist, der alle seiner Eingänge zu jedem seiner Ausgänge leiten kann, dann jeder Ausgang des Netzwerks von jedem Eingang des Netzwerks erreichbar ist, in Abhängigkeit von der Richtung des an jedem Schaltknoten auftretenden Informationsflusses. (Beispiele für derartige Netzwerke sind Banyan- und Omega-Schiebe-Austausch-Netzwerke.) Um das Netzwerk von einem Schaltnetzwerk zu einer Kaskade umzuformen, ersetzen wir jeden Schaltknoten durch eine Verschachtelungsfunktion, die die gleiche Anzahl von Eingängen und Ausgängen wie der Schaltknoten aufweist. "Multi" bedeutet innerhalb dieser Beschreibung "mehr als eins". Beispielsweise werden für Banyan- und Omega- Netzwerke 2-Eingangs-, 2-Ausgangs-Schaltelemente verwendet, so daß diese durch 2-Eingangs-, 2-Ausgangs- Verschachtelungsfunktionen in unserer Kaskade ersetzt würden.
- (2) Um die Dichte der Zwischen-Abhängigkeiten in dem Programm zu erhöhen: angenommen es liegen unabhängige Berechnungsstränge vor (d. h., die Ausgangsdaten des einen hängen nicht von den Eingangsdaten des anderen ab); wir können die kleinen Abhängigkeitsgraphen durch eine Verschachtelung der Eingänge der Stränge zu einem großen Abhängigkeitsgraphen kombinieren. Fig. 5 zeigt einen einfachen Fall mit zwei Strängen: das Original-Programm und den Takt. Fig. 6 zeigt das Ergebnis der Anwendung einer einzigen Verschachtelung auf den Code nach Fig. 5, und
- Fig. 7 zeigt das Ergebnis der Anwendung von zwei alternativen Verschachtelungen auf den Code nach Fig. 5. (3) Um die Domäne der Berechnung zu verändern: Dies läßt sich am besten anhand eines Beispiels erklären. Man betrachte den DFG in Fig. 5. Die Berechnung ist deutlich als "a + b" zu erkennen. Fig. 7 zeigt das gleiche Programm mit zwei Verschachtelungsstufen und wie "die Arithmetic über die Verschachtelung" durchgeführt wird. Zum Zweck der Einfachheit der Erläuterung, wird die Taktberechnung ignoriert und es wird eine einzige Verschachtelungsfunktion verwendet: (a, b)-> (a + b, a - b); das heißt, die beiden Eingangsdaten sind sind "a" und "b", und die beiden Ausgangsdaten sind "a + b" und "a - b". Diese Operation ist analog zu der Modulationsfunktion, die bei UKW-Stereo-Übertragungen zur Kodierung des linken und rechten Kanals verwendet wird. "a + b" stellt das Hauptsignal dar, das von Mono- Empfängern empfangen wird, während das "a - b"-Signal von Stereo-Empfängern verwendet wird, um die ursprünglichen Kanalsignale "a" und "b" wiederzugewinnen.
- Zunächst werden zwei Eingangsdatenpaare (a, c) und (b, c) verschachtelt, wodurch vier mit t, u, v, w bezeichnete Zwischenergebnisse erzeugt werden. Es ist zu beachten, daß (t, u) die Werte von a und c kodiert, und daß (v, w) b, c kodiert. Nur die kodierten Werte müssen bearbeitet werden, um die gewünschte Summe s = a + b zu erzeugen. Der Ausgang (x, y) kodiert dann den Wert von s und die nachfolgende Berechnung kann die Arithmetic auf die gleiche Weise durchführen, so daß der aktuelle Wert von a + b nicht in dem Programm erscheint, das durch die EIS- Kodierung kodiert wurde (tatsächlich sind die Variablen "a" und "b" nie gemeinsam aufgetreten). Der algebraischen Berechnung kann wie unten dargestellt gefolgt werden:
- t = a + c
- u = a - c
- v = b + c
- w = b - c
- Darstellung der Eingangsvariablen als Funktion der Zwischenvariablen:
- a = (t + u)/2
- c = (t - u)/2 oder (v - w)/2
- b = (v + w)/2
- Vereinfachung von "y"
- y = 2t + v + w = (t + u) + (v + w) + (t - u) = 2 · (a + b + c) = 2 · (s + c)
- Ähnliche Vereinfachung von "x"
- x = 2u + v + w (t + u) + (v + w) - (t - u) = 2 · (a + b - c) = 2 · (s - c)
- daher: x + y = 2 · (s + c) + 2* (s - c) = 2 · (25) = 4s
- oder s = (x + y)/4
- Gemäß einer anderen Ausführungsform umfaßt das Verfahren weiterhin die Schritte des Hinzufügens eines Historien-Prüf-Codes, der dazu verwendet wird, eine Nachahmung bei dem Ausführungspfad zu erfassen (zum Beispiel, indem ein Debugger zur Änderung der Werte verwendet wird, die eine bedingte Verzweigung steuern), und um den Code mit dem originalen ausführbaren Programm und anderen Bestandteilen wie hier beschrieben zu verschachteln.
- Die Historie kann überprüft werden, indem zwei Variablen eingefügt werden: "komme-von" und "gehe-zu". Am Ende von jedem Basisblock, vor dem Sprung, würden die beiden Variablen auf die zwei Endpunkte des Sprungs gesetzt. Am Anfang von jedem Basisblock wird ein Code eingefügt, um die vorhandenen "gehe-zu"-Punkte zu überprüfen, bei denen eine tatsächliche Ausführung erfolgt, wobei "komme-von" einer der erlaubten Vorgänger ist.
- Gemäß einer Ausführungsform der Erfindung wird das EIS-Kodier- Verfahren wie unten beschrieben durchgeführt. Die Schritte in dem Verfahren beziehen sich zum Zweck des Treffens von Entscheidungen alle auf einen Zufalls-Bit-Strom. Sie konsumieren diesen Zufallsstrom, wenn die Entscheidungen getroffen werden. Der Zufalls-Bit-Strom funktioniert daher als ein "Einmal- Polster" bei der Verschlüsselung, außer, daß eine Entschlüsselung normalerweise nie erforderlich ist (und sie ist in den meisten Fällen auch nicht möglich). Für eine maximale Sicherheit sollte eine echte Zufallsquelle verwendet werden, eine gute Pseudo-Zufalls-Quelle arbeitet jedoch auch ausreichend gut (und sie weist eine bessere Wiederholbarkeit für Testzwecke auf).
- Nachfolgend ist der genaue Algorithmus für eine Ausführungsform der Erfindung angegeben.
- 100: Initialisierung:
- 120: Bereite das Eingangs-Programm durch Umwandlung in einen DFG (Daten-Fluß-Graph) vor.
- 140: Takt- und Nachahmungs-Flaggen-Strategie:
- - entscheide, ob Duplikat-Takte erforderlich sind, etc.
- - füge Takt-/Nachahmungs-Flaggen-Initialisierungs- Code zu jedem Eingangs-BB hinzu
- - erzeuge eine gewisse Anzahl von Takt-Kaskaden: zum Beispiel unterschiedliche Wege der Inkrementierung, unterschiedliche Höhen des Inkrements, etc.
- 160: Kaskaden-Strategie:
- - entscheide die Anzahl der Kopien von unterschiedlichen Kaskaden
- - entscheide die Breite und Länge für jede Kaskade.
- 180: Erzeuge Trap-Code: (verwendet zur Verfolgung bei der Entdeckung einer Nachahmung)
- - entscheide, wie viele unterschiedliche Trap-Code- Schleifen zu erzeugen sind
- - erzeuge Zufalls-Basis-Blöcke, die dem Original- Programm ähnlich sind (zum Beispiel, Kopiere Original-BB und ändere ihn etwas ab).
- 200: Füge Kaskaden zu jedem BB hinzu:
- 220: Nimm eine Takt-Kaskade und erzeuge eine Kopie für diesen BB
- 240: Erzeuge Prüf-Kaskaden
- - gebe die BB's-Erfordernisse zur Initialisierung der Kaskaden ein (wahrscheinlich mit Zufallsdatenwerten)
- - Nicht-Eingabe-BB's übernehmen die Werte des vorhergehenden BB's und können ebenso Zufallskonstanten hinzufügen
- - passende Paare von Prüfkaskaden erfordern ebenso passende Eingabewerte
- 260: Ersetze alle Original-Konstanten durch ein zufällig erzeugtes Äquivalent, z. B. kann 37 durch 25 + 12 ersetzt werden.
- 300: Verschachtele jeden BB
- 320: Setze Prüf- und Trap- (bzw. Sprung-) Punkte wie erforderlich ein:
- - wenn die berechneten Werte einer Kaskade sich von den erwarteten Werten unterscheiden, setze die Nachahmungsflagge und starte einen Timer
- - wenn die Nachahmungsflagge gesetzt ist und der Timer abgelaufen ist, gehe zum Trap-Code.
- 340: Initialisiere die "Wellenfront" von Berechnungen, die zum Schießen bzw. Feuern geeignet sind (weil alle ihre Eingangswerte bereits berechnet sind und alle weiteren Ordnungsbedingungen erfüllt sind).
- 360: Nimm ein Zufallspaar von Werten von der fertigen Wellenfront zum Verschachteln:
- - es wird eine zufällige Köder-Berechnung hinzugefügt, um das Berechnungspaar für die Verschachtelung sicherzustellen
- - es wird ebenfalls eine zufällige Köder-Berechnung hinzugefügt, um den wahren Abhängigkeitsgraph zu verbergen
- 361: Bei einem gegebenen Paar von Werten:
- - nimm eine Zufalls-Verschachtelungs-Funktion
- - ersetze die beiden getrennten Berechnungen durch eine einzige Berechnung der Verschachtelungs- Funktion.
- 380: Bringe die Wellenfront auf den neuen Stand:
- - wenn die Wellenfront nicht leer ist, gehe zu Schritt 360.
Claims (12)
1. Verfahren zum Kodieren eines ausführbaren Programms
zum Schutz vor Nachahmungen und zum Verbergen der darin
enthaltenen Informationen, derart, daß das kodierte Programm
ausführbar bleibt, mit folgenden Schritten:
a) Erzeugung von zwei oder mehr identischen Kopien einer
Prüf-Kaskade für jeden von einen oder mehreren Basis-Blöcken
des ausführbaren Programms, wobei jede Prüf-Kaskade
ähnlich zu jedem entsprechenden Basis-Block ist und für einen
vorhergegebenen Sicherheitslevel eine Länge und Breite
aufweist;
b) Einfügung von periodischen Prüf-Codes, die über die
Kopien der Prüf-Kaskaden verteilt sind, wobei die Prüf-Codes
die erwarteten Ausgabedaten der Prüf-Kaskaden an
vorherbestimmten Punkten in dem ausführbaren Programm überwachen.
c) Verschachtelung des ausführbaren Programms und der
Prüf-Kaskaden, so daß die Ausgabedaten des kodierten
ausführbaren Programms von allen Eingangswerten des ausführbaren
Programms und der Prüf-Kaskaden abhängen.
2. Verfahren zur Kodierung eines ausführbaren Programms
nach Anspruch 1, das weiterhin die folgenden Schritte
umfaßt:
e) Erzeugung einer Takt-Kaskade, die eine Nachahmungs-
Flagge und einen Takt aufweist, die zumindest um einen Tick
an einem oder mehreren ausgewählten Punkten eines ausgewählten
Satzes von Verzweigungs-Programmschritten vorgestellt sind;
und
f) Verschachteln des ausführbaren Programms, der Takt-
Kaskade und der Prüf-Kaskaden.
3. Verfahren zur Kodierung eines ausführbaren Programms
nach Anspruch 2, das weiterhin den Schritt umfaßt:
g) Anhängen eines Fallen- bzw. Trap-Codes an einen oder an
mehrere ausgewählte Punkte des Programms, wobei dieser Trap-Code
als Antwort auf die Nachahmungs-Flagge und den Takt ausgeführt
wird, wobei die Ausführung dieses Trap-Codes derart aufgebaut
ist, daß das Ende der normalen Ausführung verursacht wird.
4. Verfahren zur Kodierung eines ausführbaren Programms
nach Anspruch 3, das weiterhin den Schritt umfaßt:
h) Anhängen von einem oder von mehreren Trap-Codes an die
Takt-Kaskade, wobei jeder Trap-Code als Antwort auf die
Nachahmungs-Flagge und den Takt auszuführen ist; und
i) rekursives Wiederholen der Schritte c) und d) für jeden
Trap-Code, so daß auch jeder Trap-Code vor der Nachahmung
geschützt ist.
5. Verfahren zur Kodierung eines ausführbaren Programms
nach einem der Ansprüche 3 und 4, bei dem die Ausführung
des Trap-Codes derart aufgebaut ist, daß einer oder mehrere der
folgenden Schritte in einer vorherbestimmten Reihenfolge
ausgeführt werden:
(1) Ausgabe einer Warn-Nachricht und Beendigung der
Ausführung des Programms;
(2) Beendigung der anormalen Ausführung des Programms
ohne eine Warn-Nachricht; und
(3) Ausführung eines Programms, das innerhalb des Trap-Codes
unendliche Schleifen ausführt.
6. Verfahren zur Kodierung eines ausführbaren Programms
nach einem der Ansprüche 1 bis 4, das weiterhin den
Schritt umfaßt:
Steuerung der Intensität der Verschachtelung, um die
Sicherheit und die Leistung des kodierten Programms zu verändern.
7. Verfahren zur Kodierung eines ausführbaren Programms
nach einem der Ansprüche 2 bis 4, das weiterhin den
Schritt umfaßt:
Steuerung der Breite und der Vielfältigkeit von irgendeiner
der Prüf- und Takt-Kaskaden, um die Sicherheit und die Leistung
des kodierten Programms zu verändern.
8. Verfahren zur Kodierung eines ausführbaren Programms
nach einem der Ansprüche 1 bis 4, das weiterhin den
Schritt umfaßt:
Steuerung der Breite und Vielfältigkeit der Kaskaden aus
einem oder mehreren ausgewählten Basis-Blöcken, die anfälliger
für einen Angriff sind, um die Sicherheit und die Leistung des
kodierten Programms weiter zu verändern.
9. Verfahren zur Kodierung eines ausführbaren Programms
nach einem der Ansprüche 1 bis 4, das weiterhin den
Schritt umfaßt:
Steuerung der Intensität der Verschachtelung von Kaskaden
aus einem oder mehreren ausgewählten Basis-Blöcken, die
anfälliger für einen Angriff sind, um die Sicherheit und die
Leistung des kodierten Programms weiter zu verändern.
10. Verfahren zur Kodierung eines ausführbaren Programms
nach einem der Ansprüche 3 und 4, das weiterhin den
Schritt umfaßt:
Einfügen eines Takt-Einstell- und Takt-Lese-Codes in die
periodisch eingefügten Prüf-Codes, mit einem Trap-Code, der
als Antwort auf die Nachahmungs-Flagge und den Lese-Wert des
Taktes ausgeführt wird, wodurch eine variable Zeitverzögerung
eingefügt wird, bevor der Trap-Code ausgeführt wird.
11. Verfahren zur Kodierung eines ausführbaren Programms
nach einem der Ansprüche 1 bis 4, das weiterhin den
Schritt umfaßt:
Anordnen von Sicherheits-Eingangs- und -Ausgangs-Zellen
eines nicht-verzweigten Programm-Schritts; und
Steuerung der Breite und Vielfältigkeit der zugeordneten
Kaskaden, um die Sicherheit des kodierten Programms zu erhöhen.
12. Verfahren zur Kodierung eines ausführbaren Programms
nach einem der Ansprüche 1 bis 4, das weiterhin den Schritt
umfaßt:
Einfügen von Historien-Prüf-Codes, um die Nachahmung des
Ausführungspfades zu entdecken; und
Verschachtelung des Historien-Prüf-Codes mit dem ausführbaren
Programm und weiteren Kaskaden.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US61196896A | 1996-03-07 | 1996-03-07 | |
PCT/CA1996/000859 WO1997033216A1 (en) | 1996-03-07 | 1996-12-19 | Encoding technique for software and hardware |
Publications (2)
Publication Number | Publication Date |
---|---|
DE69604307D1 DE69604307D1 (de) | 1999-10-21 |
DE69604307T2 true DE69604307T2 (de) | 1999-12-30 |
Family
ID=24451142
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE69604307T Expired - Lifetime DE69604307T2 (de) | 1996-03-07 | 1996-12-19 | Kodierungstechnik für software |
Country Status (6)
Country | Link |
---|---|
US (1) | US6088452A (de) |
EP (1) | EP0885416B1 (de) |
JP (1) | JPH11511582A (de) |
CA (1) | CA2243469C (de) |
DE (1) | DE69604307T2 (de) |
WO (1) | WO1997033216A1 (de) |
Families Citing this family (38)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1999001815A1 (en) * | 1997-06-09 | 1999-01-14 | Intertrust, Incorporated | Obfuscation techniques for enhancing software security |
US6334189B1 (en) | 1997-12-05 | 2001-12-25 | Jamama, Llc | Use of pseudocode to protect software from unauthorized use |
US6480959B1 (en) * | 1997-12-05 | 2002-11-12 | Jamama, Llc | Software system and associated methods for controlling the use of computer programs |
US6643775B1 (en) | 1997-12-05 | 2003-11-04 | Jamama, Llc | Use of code obfuscation to inhibit generation of non-use-restricted versions of copy protected software applications |
US6957341B2 (en) * | 1998-05-14 | 2005-10-18 | Purdue Research Foundation | Method and system for secure computational outsourcing and disguise |
US6463538B1 (en) * | 1998-12-30 | 2002-10-08 | Rainbow Technologies, Inc. | Method of software protection using a random code generator |
US7770016B2 (en) | 1999-07-29 | 2010-08-03 | Intertrust Technologies Corporation | Systems and methods for watermarking software and other media |
US7430670B1 (en) | 1999-07-29 | 2008-09-30 | Intertrust Technologies Corp. | Software self-defense systems and methods |
US7287166B1 (en) | 1999-09-03 | 2007-10-23 | Purdue Research Foundation | Guards for application in software tamperproofing |
US7757097B2 (en) * | 1999-09-03 | 2010-07-13 | Purdue Research Foundation | Method and system for tamperproofing software |
JP3888823B2 (ja) * | 2000-02-14 | 2007-03-07 | 松下電器産業株式会社 | 半導体集積回路 |
WO2002079955A2 (en) | 2001-03-28 | 2002-10-10 | Nds Limited | Digital rights management system and method |
ITMI20011938A1 (it) * | 2001-09-17 | 2003-03-17 | Cit Alcatel | Metodo per criptare un flusso di dati |
CA2363795A1 (en) * | 2001-11-26 | 2003-05-26 | Cloakware Corporation | Computer system protection by communication diversity |
US20030120938A1 (en) * | 2001-11-27 | 2003-06-26 | Miki Mullor | Method of securing software against reverse engineering |
CA2372034A1 (en) * | 2002-02-14 | 2003-08-14 | Cloakware Corporation | Foiling buffer-overflow and alien-code attacks by encoding |
US7707295B1 (en) | 2002-05-03 | 2010-04-27 | Foundry Networks, Inc. | Connection rate limiting |
US8554929B1 (en) * | 2002-05-03 | 2013-10-08 | Foundry Networks, Llc | Connection rate limiting for server load balancing and transparent cache switching |
US8819252B1 (en) * | 2002-05-03 | 2014-08-26 | Foundry Networks, Llc | Transaction rate limiting |
US20030217280A1 (en) * | 2002-05-17 | 2003-11-20 | Keaton Thomas S. | Software watermarking for anti-tamper protection |
US7367053B2 (en) * | 2002-10-11 | 2008-04-29 | Yamatake Corporation | Password strength checking method and apparatus and program and recording medium thereof, password creation assisting method and program thereof, and password creating method and program thereof |
US7200760B2 (en) * | 2002-12-31 | 2007-04-03 | Protexis, Inc. | System for persistently encrypting critical software data to control the operation of an executable software program |
US20040156388A1 (en) * | 2003-02-07 | 2004-08-12 | Lockheed Martin Corporation | System for maintaining quality of service |
US8510571B1 (en) | 2003-03-24 | 2013-08-13 | Hoi Chang | System and method for inserting security mechanisms into a software program |
US7249260B2 (en) * | 2003-06-12 | 2007-07-24 | Sun Microsystems, Inc. | Method and apparatus for implementing a pluggable password obscuring mechanism |
US7313817B2 (en) * | 2003-06-17 | 2007-12-25 | Lockheed Martin Corporation | Data transmission system utilizing efficient complexity estimation of the kolmogorov complexity for data transmission |
US20050071656A1 (en) * | 2003-09-25 | 2005-03-31 | Klein Dean A. | Secure processor-based system and method |
US20060020552A1 (en) * | 2004-07-26 | 2006-01-26 | James Sloan | Copy-restriction system for digitally recorded, computer disk-based music recordings |
US7900243B2 (en) * | 2006-10-19 | 2011-03-01 | Oracle America, Inc. | Method and system for managing execution of an application module |
US8752032B2 (en) | 2007-02-23 | 2014-06-10 | Irdeto Canada Corporation | System and method of interlocking to protect software-mediated program and device behaviours |
US8429637B2 (en) * | 2008-09-02 | 2013-04-23 | Apple Inc. | System and method for conditional expansion obfuscation |
EP2689376B1 (de) * | 2011-03-24 | 2020-12-23 | Irdeto B.V. | System und verfahren zur bereitstellung von abhängigkeitsnetzwerken bei anwendungen für den widerstand gegen angriffe |
EP2831795B1 (de) | 2012-03-30 | 2019-01-09 | Irdeto B.V. | Sicherung zugänglicher systeme mit variablenabhängiger codierung |
CN103870340B (zh) * | 2014-03-06 | 2017-11-07 | 华为技术有限公司 | 流计算系统中的数据处理方法、控制节点及流计算系统 |
US9858440B1 (en) * | 2014-05-23 | 2018-01-02 | Shape Security, Inc. | Encoding of sensitive data |
US9495111B2 (en) * | 2014-10-10 | 2016-11-15 | The Boeing Company | System and method for reducing information leakage from memory |
US20160132317A1 (en) | 2014-11-06 | 2016-05-12 | Intertrust Technologies Corporation | Secure Application Distribution Systems and Methods |
US10082975B1 (en) | 2017-03-02 | 2018-09-25 | Micron Technology, Inc. | Obfuscation-enhanced memory encryption |
Family Cites Families (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4525599A (en) * | 1982-05-21 | 1985-06-25 | General Computer Corporation | Software protection methods and apparatus |
US4740890A (en) * | 1983-12-22 | 1988-04-26 | Software Concepts, Inc. | Software protection system with trial period usage code and unlimited use unlocking code both recorded on program storage media |
US4646234A (en) * | 1984-02-29 | 1987-02-24 | Brigham Young University | Anti-piracy system using separate storage and alternate execution of selected proprietary and public portions of computer programs |
GB2163577B (en) * | 1984-08-23 | 1988-01-13 | Nat Res Dev | Software protection device |
US4644493A (en) * | 1984-09-14 | 1987-02-17 | International Business Machines Corporation | Implementing a shared higher level of privilege on personal computers for copy protection of software |
US4864494A (en) * | 1986-03-21 | 1989-09-05 | Computerized Data Ssytems For Mfg., Inc. | Software usage authorization system with key for decrypting/re-encrypting/re-transmitting moving target security codes from protected software |
US5047928A (en) * | 1986-10-24 | 1991-09-10 | Wiedemer John D | Billing system for computer software |
US4866769A (en) * | 1987-08-05 | 1989-09-12 | Ibm Corporation | Hardware assist for protecting PC software |
US4937863A (en) * | 1988-03-07 | 1990-06-26 | Digital Equipment Corporation | Software licensing management system |
US5123045A (en) * | 1989-08-18 | 1992-06-16 | Massachusetts Institute Of Technology | Comprehensive software protection system |
EP0459046A1 (de) * | 1990-05-31 | 1991-12-04 | International Business Machines Corporation | Rechnerprogrammschutz |
CA2026998C (en) * | 1990-10-05 | 1994-05-10 | Thomas Edwin Glover | Dynamic trace elements |
US5359659A (en) * | 1992-06-19 | 1994-10-25 | Doren Rosenthal | Method for securing software against corruption by computer viruses |
DE69432974T2 (de) * | 1993-05-10 | 2004-05-27 | Thinking Software, Inc., Cupertino | Verfahren und vorrichtung zur automatischen analyse eines zielprogramms |
US5613004A (en) * | 1995-06-07 | 1997-03-18 | The Dice Company | Steganographic method and device |
-
1996
- 1996-03-07 US US08/611,968 patent/US6088452A/en not_active Expired - Fee Related
- 1996-12-19 DE DE69604307T patent/DE69604307T2/de not_active Expired - Lifetime
- 1996-12-19 CA CA002243469A patent/CA2243469C/en not_active Expired - Fee Related
- 1996-12-19 WO PCT/CA1996/000859 patent/WO1997033216A1/en active IP Right Grant
- 1996-12-19 EP EP96941553A patent/EP0885416B1/de not_active Expired - Lifetime
- 1996-12-19 JP JP9531272A patent/JPH11511582A/ja active Pending
Also Published As
Publication number | Publication date |
---|---|
DE69604307D1 (de) | 1999-10-21 |
EP0885416B1 (de) | 1999-09-15 |
JPH11511582A (ja) | 1999-10-05 |
US6088452A (en) | 2000-07-11 |
EP0885416A1 (de) | 1998-12-23 |
CA2243469A1 (en) | 1997-09-12 |
CA2243469C (en) | 2000-10-31 |
WO1997033216A1 (en) | 1997-09-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE69604307T2 (de) | Kodierungstechnik für software | |
DE69735103T2 (de) | Manipulationssicheres Verfahren und Vorrichtung | |
Howard et al. | Real'versusimaginary'noise in diffusion-limited reactions | |
DE69028226T2 (de) | Gegen unbefugte Manipulation gesichertes Zugangsberechtigungsverfahren | |
US7966499B2 (en) | System and method for obscuring bit-wise and two's complement integer computations in software | |
DE10319435B4 (de) | Verfahren zur Verarbeitung von Daten zum Schutz eines Softwareprogramms vor Rekonstruktion | |
DE69626530T2 (de) | Schutz von software gegen benutzung ohne erlaubnis | |
DE69330489T2 (de) | Vorrichtung zum Schutz von Software | |
DE69611605T2 (de) | System zur sicherstellung, dass das "blinding" von geheimschlüsselzertifikaten begrenzt ist, auch wenn das vergabeprotokoll im parallelmodus ausgefürht wird | |
DE112021004937T5 (de) | Sicheres erneutes verschlüsseln von homomorph verschlüsselten daten | |
EP1184771A1 (de) | Verfahren zum Schutz von Computer-Software und/oder computerlesbaren Daten sowie Schutzgerät | |
DE10393807T5 (de) | Verfahren zum Schutz von Software von Debugger-Angriffen | |
DE112021005364T5 (de) | Abwehr von gezielten datenbankangriffen durch dynamische generierung von honeypot-datenbankantworten | |
DE60100363T2 (de) | Sequenznummerierungsmechanismus zur sicherung der ausführungsordnungs-integrietät von untereinander abhängigen smart-card anwendungen | |
DE60022770T2 (de) | Gegenmassnahme in einem elektronischen baustein zur ausführung eines kryptoalgorithmus mit öffentlichem schlüssel vom rsa-typ | |
DE102018116572A1 (de) | Schutz gegen seitenkanalangriffe | |
DE69707717T2 (de) | Modulo-arithmetischer koprozessor mit einer schaltung für die division ganzer zahlen | |
EP1506473B1 (de) | Ausspähungsgeschützte modulare inversion | |
Li et al. | A dynamic and heterogeneous web application to defense webshell attacks by using diversified PHP code | |
EP3798873A1 (de) | Verfahren zum schützen einer computer-implementierten anwendung vor manipulation | |
DE102023106166B3 (de) | Sicherheits-controller und verfahren zur durchführung einer auswahlfunktion | |
DE102004058882A1 (de) | Erzeugen von Programmcode in einem Ladeformat und Bereitstellen von ausführbarem Programmcode | |
DE102014001647A1 (de) | Operation basierend auf zwei Operanden | |
DE102004052196B4 (de) | Ausspähungsgeschütztes Ausführen von Operationen unter Verwendung einer maskenunterstützenden Recheneinheit | |
CN105184176A (zh) | 用于电子设备的文件处理方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
8364 | No opposition during term of opposition | ||
8327 | Change in the person/name/address of the patent owner |
Owner name: NORTEL NETWORKS LTD., ST.LAURENT, QUEBEC, CA |