-
Die
vorliegende Erfindung bezieht sich auf ein Compiler-System zum Kompilieren
eines Quellencodes zu einem Maschinensprachcode, so dass der Maschinensprachcode
auf einer Verarbeitungseinheit ausführbar ist.
-
Aus
verschiedenen Gründen
müssen
Programme von Mikrosteuerungen oder allgemein Verarbeitungseinheiten
oder elektronischen Vorrichtungen manchmal vor einem Ausspionieren
oder Kopieren geschützt
werden. Beispielsweise kann eine Sicherheitsmikrosteuerung für spezielle
Sicherheitsanwendungen wie persönliche
Identifikation, Geldkarten, Pay-TV oder Zugriffsrechte auf bestimmte
Bereiche oder Gebäude
bestimmt sein, und diese Programme sollten geheim gehalten werden,
um zu verhindern, dass Unbefugte die jeweiligen Einrichtungen gefährden, oder
um zu verhindern, dass Dritte die jeweiligen Sicherheitsprodukte
auf abnormale Weise handhaben.
-
Die
Aufgabe der vorliegenden Erfindung besteht darin, ein Compiler-System,
Verarbeitungseinheiten sowie Verfahren mit verbesserten Charakteristika
zu liefern.
-
Die
Aufgabe wird durch die Merkmale der unabhängigen Ansprüche gelöst. Weiterbildungen
finden sich in den abhängigen
Ansprüchen.
-
Bevorzugte
Ausführungsbeispiele
der vorliegenden Erfindung werden nachfolgend Bezug nehmend auf
die beiliegenden Zeichnungen näher
erläutert.
Es zeigen:
-
1 ein
schematisches Diagramm eines Compiler-Systems zum Kompilieren eines
Quellencodes zu einem Maschinensprachcode für eine Verarbeitungseinheit
gemäß einem
Ausführungsbeispiel der
Erfindung;
-
2 ein
weiteres schematisches Diagramm eines Compiler-Systems zum Kompilieren
eines Quellencodes zu einem Maschinensprachcode, wobei der Compiler-verschlüsselte Maschinensprachcode
auf einen Nur-Lese-Speicher gebrannt wird, der mit der Verarbeitungseinheit
gemäß einem Ausführungsbeispiel
der Erfindung verbunden ist;
-
3 ein
weiteres schematisches Diagramm eines Compiler-Systems mit einer
Verarbeitungseinheit, wobei die Verarbeitungseinheit eine Speicherverschlüsselungseinheit
und eine Speicherentschlüsselungseinheit
sowie einen Programmspeicher und ein internes Register gemäß einem
Ausführungsbeispiel
der Erfindung umfasst;
-
4 ein
schematisches Diagramm einer Verarbeitungseinheit zum Ausführen eines
Maschinensprachcodes gemäß einem
anderen Ausführungsbeispiel
der Erfindung;
-
5 ein
Flussdiagramm eines Verfahrens zum Verschlüsseln eines Quellencodes zu
einem verschlüsselten
Maschinensprachcode, wobei der verschlüsselte Maschinensprachcode
durch einen Anweisungsdecodierer der Verarbeitungseinheit gemäß einem
weiteren Ausführungsbeispiel
der Erfindung entschlüsselt
wird;
-
6 ein
Flussdiagramm eines Verfahrens zum Kompilieren eines Quellencodes
zu einem verschlüsselten
Maschinensprachcode gemäß einem Ausführungsbeispiel
der Erfindung; und
-
7 ein
Flussdiagramm eines Verfahrens zum Verschlüsseln eines Quellencodes zu
einem verschlüsselten
Maschinensprachcode gemäß einem
Ausführungsbeispiel
der Erfindung.
-
In 1 ist
ein schematisches Diagramm eines Compiler-Systems 100 zum
Kompilieren eines Quellencodes 5 zu einem Maschinensprachcode 15 gemäß einem
Ausführungsbeispiel
der Erfindung gezeigt. Das Compiler-System 100 umfasst
einen Compiler 10. Der Compiler 10 ist in der
Lage, einen Quellencode 5 zu einem Maschinensprachcode
zu kompilieren, so dass der Maschinensprachcode auf einer Verarbeitungseinheit 20 ausführbar ist.
Der Quellencode kann beispielsweise ein Java-, C-, C++- oder ein
Visual-Basic-Code
sein. Der Maschinensprachcode ist beispielsweise ein Binärcode, der
eine Sequenz des Maschinencodes umfasst, der direkt auf der Verarbeitungseinheit 20 ausführbar ist,
die wiederum beispielsweise auf einer 8051-, 8031- oder 8751-Architektur
beruhen kann. Die Verarbeitungseinheit 20 umfasst ein internes
Register 25, das ansprechend auf eine Ausführung des
Maschinensprachcodes 15 seinen Zustand ändert. Der Compiler 10 ist
ferner dahin gehend konfiguriert, den Maschinensprachcode auf der
Basis einer Verschlüsselungsfunktion 18,
die von dem Zustand des internen Registers 25 der Verarbeitungseinheit 20 abhängt, zu verschlüsseln.
-
Die
gestrichelte Linie zwischen der Verarbeitungseinheit 20 und
dem Compiler 10 und dem Compiler-verschlüsselten
Maschinensprachcode 15 soll angeben, dass zwischen der
Verarbeitungseinheit und dem Compiler eventuell keine direkte Verbindung
vorliegt. Die Kompilierung mit dem Compiler 10 kann beispielsweise
am Ort eines Kunden durchgeführt
werden, und somit kann die Verschlüsselungsfunktion über das
Internet, über
ein beliebiges anderes digitales Speichermedium wie beispielsweise eine
CD oder DVD übermittelt
werden. Dies bezieht sich auf die Übermittlung oder die Speicherung
des Compiler-verschlüsselten
Maschinensprachcodes, der beispielsweise zu dem Ort des Herstellers
der Verarbeitungseinheit zurück übermittelt
wird. Der Quellencode 5 für die Verarbeitungseinheit
kann seitens des Kunden erzeugt werden, und eine Verschlüsselungsfunktion
kann seitens eines Herstellers der Verarbeitungseinheit erzeugt
werden.
-
Der
Quellencode 5 kann beispielsweise ein Programm oder eine
Firmware für
eine elektronische Vorrichtung, eine Mikrosteuerung, eine Verarbeitungseinheit,
eine Sicherheitssteuerung oder eine Zentralverarbeitungseinheit
(CPU – central
processing unit) sein. Der Compiler 10 kann dahin gehend konfiguriert
sein, den bereitgestellten Quellencode 5 zu einem Maschinensprachcode
zu kompilieren und damit zu verbinden. Dieser kompilierte Maschinensprachcode
kann durch den Compiler oder ein Verschlüsselungswerkzeug des Compiler-Systems 100 (in 1 nicht
gezeigt) mit einer Verschlüsselungsfunktion
verschlüsselt
werden. Diese Verschlüsselungsfunktion
kann von dem Zustand eines internen Registers der Verarbeitungseinheit 20,
auf der der Maschinensprachcode laufen soll, und insbesondere von
dem Zustand des internen Registers 25 zu dem Zeitpunkt,
zu dem die Verarbeitungseinheit 20 das Programm 15 ausführt, abhängen, wobei
der Zustand während
der Ausführung
gemäß einem
Ausführungsbeispiel
der Erfindung variiert. Mit anderen Worten ist das interne Register 25 dahin
gehend konfiguriert, seinen Zustand ansprechend auf eine Ausführung des
Maschinensprachcodes auf der Verarbeitungseinheit zu ändern.
-
Das
interne Register 25 kann beispielsweise ein Programmzähler (PZ)
der Verarbeitungseinheit sein, und die Verschlüsselungsfunktion, die seitens des
Compilers dazu verwendet wird, den Quellencode des Programms für die Verarbeitungseinheit
zu verschlüsseln,
kann dahin gehend entworfen sein, einen erwarteten Zustand des PZ
zum Zeitpunkt eines Abrufens einer jeweiligen Anweisung des Maschinensprachcodes
oder eines Wortes derselben von dem Speicher mit der jeweiligen
Anweisung oder einem Wort derselben zu kombinieren. Das heißt beispielsweise,
dass eine erwartete Adresse für
eine Anweisung oder ein Wort einer Anweisung des Maschinensprachcodes
in dem Programmzähler
dazu verwendet werden kann, eine Verschlüsselungsfunktion bzw. ihren
Schlüssel
zu definieren, um den Quellencode in dem Compiler 10 zu
einem Compiler-verschlüsselten
Quellencode zu verschlüsseln.
-
Ein
Hersteller der Verarbeitungseinheit kann beispielsweise die Definition
der Verschlüsselungsfunktion
an einen Kunden liefern, der sich um das Programm der jeweiligen
Verarbeitungseinheit kümmert.
Die Verschlüsselungsfunktion
kann in dem Compiler 10 oder, gemäß einem anderen Ausführungsbeispiel
der Erfindung, in einem separaten Verschlüsselungswerkzeug implementiert
sein, das zusammen mit dem Compiler 10 eine Werkzeugkette bildet,
so dass ein Operationscode oder -programm für die Verarbeitungseinheit
bereits an dem Ort eines Kunden während der Erzeugung des Operationscodes
(opcode) – des
Maschinensprachcodes für
die Verarbeitungseinheit – verschlüsselt werden
kann. Dadurch kann die Sicherheit weiter erhöht werden, da nach der Kompilierung
des Quellencodes und der Verschlüsselung
mit der Verschlüsselungsfunktion ein
Compilerverschlüsselter
Maschinensprachcode zur Verfügung
steht. Ein Kunde kann diesen Compiler-verschlüsselten Maschinensprachcode
an den Hersteller der Verarbeitungseinheit liefern. Dann kann der
Compiler-verschlüsselte
Maschinensprachcode in einem mit der Verarbeitungseinheit 20 verbundenen
Programmspeicher 30 (siehe 2) gespeichert
werden. Das heißt,
dass die Anweisungen des Programms, das in den Programmspeicher
der Verarbeitungseinheit gespeichert oder gebrannt werden soll,
gleichzeitig bereits Computer-verschlüsselt sein kann und von dem
Kunden an den Hersteller weitergeleitet wird. Dies kann einen zusätzlichen Schutz
vor einem Ausspionieren durch mögliche
Angreifer bieten.
-
Gemäß einem
anderen Ausführungsbeispiel der
Erfindung (2) kann das Compiler-System 10 einen
Speicher, z. B. einen Nur-Lese-Speicher (ROM – read-only memory) umfassen,
wobei der Speicher 30 mit der Verarbeitungseinheit verbunden
ist. Der Compiler 10 kann dahin gehend konfiguriert sein,
den Compiler-verschlüsselten
Maschinensprachcode in den Speicher 30 zu speichern. Der
Speicher 30 kann beispielsweise ein Nur-Lese-Speicher, z. B. ein elektrisch
löschbarer
programmierbarer Nur-Lese-Speicher (EEPROM – electrically erasable program read-only
memory), ein Masken-ROM, ein löschbarer programmierbarer
Nur-Lese-Speicher (EPROM – erasable
programmable readonly memory), ein programmierbarer Nur-Lese-Speicher
(PROM – programmable
readonly memory) oder ein sonstiger Nur-Lese-Speicher, sein. Jedoch
kann der Speicher 30 eine beliebige Art von Speicher sein,
der in der Lage ist, den Compiler-verschlüsselten Maschinensprachcode
zu speichern. Ein derartiger Speicher kann beispielsweise ein Direktzugriffsspeicher
(RAM – random-access
memory), z. B. ein dynamischer Direktzugriffsspeicher (DRAM – dynamic
random-access memory), ein statischer RAM (SRAM – static RAM), ein Phasenänderungs-RAM
(PCRAM – phase change
RAM), ein magnetoresistiver RAM (MRAM – magnetoresistive RAM) oder
ein ferroelektrischer RAM (FRAM – ferroelectric RAM), sein.
Der Speicher kann auch ein ferromagnetischer Speicher wie z. B. ein
Festplattenlaufwerk (HDD – hard
disc drive), ein optischer Speicher wie z. B. eine CD, eine DVD,
eine Blue-Ray-Disc usw. sein.
-
Gemäß einem
Ausführungsbeispiel
der Erfindung kann die Kompilierung und die Verschlüsselung
des Quellencodes an einer ersten Örtlichkeit an einem Personal-Computer
oder einem Computersystem durchgeführt werden. Die Verarbeitungseinheit 20 kann
sich auf einem unabhängigen
Chip an einer zweiten Örtlichkeit
befinden. Der Compiler-verschlüsselte Maschinensprachcode
kann deshalb beispielsweise über
das Internet oder auch überandere digitale
Speichermedien an die zweite Örtlichkeit übermittelt
werden.
-
Der
Nur-Lese-Speicher 30 kann ein externer Nur-Lese-Speicher
oder allgemein ein externer Programmspeicher sein, oder er kann
in die Verarbeitungseinheit integriert sein. Der Programmspeicher 30 kann
mit der Verarbeitungseinheit verbindbar oder gekoppelt sein.
-
Wie
bei dem schematischen Diagramm in 3 gezeigt
ist, kann das Compiler-System 100 zum Kompilieren eines
Quellencodes zu einem Maschinensprachcode eine Verarbeitungseinheit 20 umfassen,
wobei die Verarbeitungseinheit einen Programmspeicher 30 aufweist
oder damit verbunden ist. Die Verarbeitungseinheit umfasst ferner
eine Speicherentschlüsselungseinheit 35 und
eine Speicherverschlüsselungseinheit 40.
Der Compiler 10 kann dahin gehend konfiguriert sein, den
Compiler-verschlüsselten
Maschinensprachcode 15 über die
Speicherverschlüsselungseinheit 40 in
den Programmspeicher 30 zu speichern. Gemäß diesem Ausführungsbeispiel
kann die Speicherverschlüsselungseinheit
dahin gehend konfiguriert sein, den Compiler-verschlüsselten
Maschinensprachcode 15 in Abhängigkeit von einer Speicheradresse,
an der der Maschinensprachcode in dem Programmspeicher 30 gespeichert
werden soll, ein zweites Mal zu verschlüsseln. Mit anderen Worten kann
die Speicherverschlüsselungseinheit 40 in
Abhängigkeit
von einer Speicheradresse, an der der Compiler-verschlüsselte Maschinensprachcode
in der Verarbeitungseinheit 20 gespeichert werden soll,
eine zweite Verschlüsselung
des Compiler-verschlüsselten
Maschinensprachcodes durchführen.
Auf Grund dieser zweiten Verschlüsselung
kann der Schutz der Verarbeitungseinheit vor einem feindlichen Angriff
weiter erhöht
werden. Die Verarbeitungseinheit 20 kann ferner eine Speicherentschlüsselungseinheit 35 umfassen,
die dahin gehend konfiguriert ist, den aus dem Programmspeicher
ausgelesenen, zweifach verschlüsselten
Maschinensprachcode zu entschlüsseln,
um den Compiler-verschlüsselten
Maschinensprachcode zu erhalten, und bei einem weiteren Entschlüsselungsschritt
auf der Basis einer Entschlüsselungsfunktion,
die auf dem Zustand des internen Registers 25 beruht, zu
entschlüsseln,
um Anweisungen zu erhalten, die auf der Verarbeitungseinheit 20 ablaufen
können.
Die Verschlüsselungsfunktion,
die der Maschinenverschlüsselungseinheit 40 zu
Grunde liegt, kann komplizierter sein als die Verschlüsselungsfunktion 18.
-
Gemäß einem
weiteren Ausführungsbeispiel der
Erfindung umfasst die Verarbeitungseinheit 20 einen Programmspeicher 30 und
eine Speicherentschlüsselungseinheit 35 zum
Entschlüsseln
von aus dem Programmspeicher ausgelesenen Anweisungsdaten. Das Compiler-System
kann dahin gehend konfiguriert sein, den Compiler-verschlüsselten
Maschinensprachcode auf eine weitere verschlüsselte Weise in den Programmspeicher
zu speichern, was dann, wenn er durch die Speicherentschlüsselungseinheit 35 entschlüsselt wird,
zu dem Compiler-verschlüsselten
Maschinensprachcode führt.
-
Während des
Betriebs der Verarbeitungseinheit kann die Verarbeitungseinheit
Anweisungen aus dem Programmspeicher 30 auslesen bzw. Anweisungen
in denselben schreiben. Die Anweisungen können wiederum von einer Speicheradresse
der Anweisung abhängen,
die in dem Programmspeicher gespeichert werden soll und die die
Speicherverschlüsselungseinheit
verschlüsselt.
-
Wie
in 3 gezeigt ist, kann die Verschlüsselungsfunktion 18 von
einer bitweisen Exklusiv-ODER(XOR)- oder einer Exklusiv-NICHT-ODER(NXOR)-Logikverknüpfung zwischen
dem Zustand des internen Registers 25 und dem Maschinensprachcode
abhängen.
Gemäß einem
Ausführungsbeispiel
wird diese logische Verknüpfung
durch eine XOR-Logikverknüpfung
zwischen der Anweisung oder dem generischen Operationscode und dem
tatsächlichen
Wert des Programmzählers
durchgeführt.
Das interne Register kann der Programmzähler der Verarbeitungseinheit gemäß Ausführungsbeispielen
der Erfindung sein. Eine Anweisung für die Verarbeitungseinheit
kann Nutzdaten, wobei der Zustand dieser Nutzdaten ein Verhalten
der Verarbeitungseinheit beeinflussen kann, und Fehlererfassungsdaten
umfassen, die ein Prüfen
einer Integrität
der Nutzdaten ermöglichen und
Bedeutungslos-Daten bezüglich
des Verhaltens der Verarbeitungseinheit darstellen. Gemäß Ausführungsbeispielen
der Erfindung kann die Anweisung des Maschinensprachcodes beispielsweise
Prüfbits in
dem Operationscode umfassen. Derartige Prüfbits können beispielsweise Paritätsbits oder
sonstige Codesegmente mit höher
entwickelten Algorithmen sein, um einen Fehler zu detektieren oder
einen erzwungenen Angriff von einem feindlichen Angreifer auf die
Verarbeitungseinheit zu entdecken.
-
In 4 ist
ein schematisches Diagramm einer Verarbeitungseinheit 20 zum
Ausführen
eines Maschinensprachcodes gezeigt. Die Verarbeitungseinheit 20 umfasst
ein Register für
einen Programmzähler 70,
eine Ausführungsschaltungsanordnung 75,
eine Abrufeinrichtung 60, eine Entschlüsselungseinheit 40 und
einen Anweisungsdecodierer 65. Der Programmzähler 70 kann
das interne Register 25 sein. Die Abrufeinrichtung 60 ist
dahin gehend konfiguriert, ein Wort von einer Adresse eines Programmspeichers 30,
der mit der Verarbeitungseinheit 20 verbindbar ist, abzurufen.
Gemäß einem
Ausführungsbeispiel
der Erfindung kann die Adresse des Wortes einem aktuellen Zustand
des Programmzählers 70 entsprechen,
und der Programmzähler 70 kann
dahin gehend konfiguriert sein, auf ein Abrufen hin inkrementiert
zu werden. Eine Anweisung für
die Verarbeitungseinheit kann aus zumindest einem Wort bestehen.
Ein Wort kann beispielsweise ein Byte oder zwei Bytes an Informationen
umfassen, es kann als der kleinste zusammenhängende Block einer Anweisung
für die
Verarbeitungseinheit angesehen werden. Eine Anweisung für eine Verarbeitungseinheit
kann beispielsweise in einen Operationscode, der eine Zahl sein
kann, die auf eine bestimmte Maschinenanweisung bezogen ist, z.
B. eine Multiplikation, eine Inkrementierung oder einen Befehl,
ein Register zu laden, und einen Operanden, d. h. einen Parameter,
der seitens des Operationscodes bearbeitet wird, unterteilt werden.
Ein Operand kann z. B. eine Adresse oder ein Register sein.
-
Eine
Anweisung für
die Verarbeitungseinheit 20 kann ein oder mehrere Wörter umfassen.
Die Abrufeinrichtung kann dahin gehend konfiguriert sein, an Stellen,
auf die der PZ zeigt, Wörter
von dem Programmspeicher Wort für
Wort abzurufen. Die Entschlüsselungseinheit 40 ist
dahin gehend konfiguriert, das von dem Programmspeicher 30 abgerufene Wort
zu entschlüsseln,
und der Anweisungsdecodierer 65 ist dahin gehend konfiguriert,
das entschlüsselte
Wort zu analysieren. Der Anweisungsdecodierer 65 entscheidet,
ob das entschlüsselte
Wort zu einer Anweisung gehört,
die ein weiteres Wort einschließt. Das
heißt,
der Anweisungsdecodierer kann unterscheiden, ob das abgerufene Wort
von dem Programmspeicher bereits eine vollständige Anweisung ist, die seitens
der Ausführungsschaltungsanordnung 75 der
Verarbeitungseinheit 20 ausgeführt werden kann, oder ob beispielsweise
immer noch ein Operand der aktuellen Anweisung fehlt. Falls die
Anweisung keine weiteren Wörter
einschließt,
wird die Ausführungsschaltungsanordnung 75 gemäß der Anweisung
gesteuert. In jedem Fall führt
die Abrufeinrichtung 60 fort, an Stellen, die durch den
Programmzähler
(PZ) indexiert werden, Wörter
von dem Programmspeicher 30 abzurufen, beispielsweise das fehlende
Wort der Anweisungen oder das Wort bzw. die Wörter der nächsten Anweisung. Gemäß diesem Ausführungsbeispiel
gehört
jedes Wort der Anweisung zu einer bestimmten Adresse in dem Programmspeicher.
Der Programmzähler 70 kann
nach jedem Abrufen eines Wortes der Anweisung inkremen tiert werden.
Bei einem anderen Ausführungsbeispiel
der Erfindung wird der Programmzähler 70 nicht
nach jedem Abruf inkrementiert. Selbstverständlich können manche der Anweisungen
den Programmzähler
manipulieren, wenn sie als Sprunganweisungen ausgeführt werden.
-
Gemäß einem
anderen Ausführungsbeispiel der
Erfindung kann die Verarbeitungseinheit 20 einen Programmspeicher 30,
ein internes Register 25, das ansprechend auf eine Ausführung des
Maschinensprachcodes seinen Zustand ändert, umfassen. Die Verarbeitungseinheit
kann ferner eine Entschlüsselungseinheit 40 umfassen,
die dahin gehend konfiguriert ist, einen von dem Programmspeicher
empfangenen verschlüsselten
Maschinensprachcode auf der Basis einer Entschlüsselungsfunktion zu entschlüsseln. Die
Entschlüsselungsfunktion
kann von dem Zustand des internen Registers 25 abhängen. Der
entschlüsselte
Maschinensprachcode ist auf der Verarbeitungseinheit 20 ausführbar. Der
entschlüsselte
Maschinensprachcode kann durch einen Anweisungsdecodierer 65 interpretiert
oder analysiert werden. Der Maschinensprachcode kann Anweisungen
umfassen, die auf der Verarbeitungseinheit auszuführen sind.
Das interne Register 25 kann beispielsweise der Programmzähler 70 sein.
Gemäß Ausführungsbeispielen
der Erfindung kann die Entschlüsselungseinheit 40 beispielsweise
den Compiler-verschlüsselten
Maschinensprachcode oder den zweifach verschlüsselten Maschinensprachcode
entschlüsseln,
so dass der Maschinensprachcode nach der Entschlüsselung ausführbar ist
oder eine Ausführungsschaltungsanordnung 75 der
Verarbeitungseinheit 20 steuern kann. Gemäß Ausführungsbeispielen der
Erfindung kann der Maschinensprachcode Nutzdaten, wobei diese Daten
ein Verhalten der Verarbeitungseinheit beeinflussen können, und
Fehlererfassungsdaten umfassen, die ein Prüfen einer Integrität der Nutzdaten
ermöglichen
und Bedeutungslos-Daten
bezüglich
des Verhaltens der Verarbeitungseinheit darstellen. Die Verarbeitungseinheit 20 kann
ferner eine Fehlererfassungseinheit 99 umfassen. Die Entschlüsselungseinheit
kann dahin gehend konfiguriert sein, einen von dem Programmspeicher
empfangenen verschlüsselten
Maschinensprachcode zu entschlüsseln,
und die Fehlererfassungseinheit kann dahin gehend konfiguriert sein,
die Fehlererfassungsdaten des entschlüsselten Maschinensprachcodes
mit den erwarteten Fehlererfassungsdaten zu vergleichen. Die Fehlererfassungseinheit
kann ferner ein Rückkopplungssignal
bezüglich
dessen liefern, ob sich die Fehlererfassungsdaten des Maschinensprachcodes
von den erwarteten Fehlererfassungsdaten unterscheiden. Auf diese
Weise kann die Integrität
des Maschinensprachcodes überprüft werden, und
ein möglicher
Angriff auf die Verarbeitungseinheit oder auf den Maschinensprachcode
kann entdeckt werden. Bei einem alternativen Ausführungsbeispiel
der Erfindung kann die Fehlererfassungseinheit dahin gehend konfiguriert
sein, ein Rückkopplungssignal
zu unterbrechen, falls sich die Fehlererfassungsdaten des entschlüsselten
Maschinensprachcodes von den erwarteten Fehlererfassungsdaten unterscheiden.
-
Gemäß einem
anderen Ausführungsbeispiel der
Erfindung (siehe 4) kann die Verarbeitungseinheit 20 ein
programmierbares Register 80 umfassen. Bei diesem Ausführungsbeispiel
kann die Entschlüsselungseinheit 40 dahin
gehend konfiguriert sein, das seitens der Abrufeinrichtung 60 von
dem Programmspeicher 30 abgerufene Wort auf der Basis einer
Entschlüsselungsfunktion
zu entschlüsseln,
die einerseits von dem Zustand des internen Registers 25,
beispielsweise des Programmzählers 70,
und dem Zustand des programmierbaren Registers 80 abhängt. Der
entschlüsselte
Maschinensprachcode kann auf der Verarbeitungseinheit ausführbar sein, und
die jeweilige Anweisung kann die Ausführungsschaltungsanordnung 75 steuern.
Das programmierbare Register 80 kann beispielsweise ein
Pseudozufallsrückkopplungsschieberegister
sein, dem ein vorbestimmter Startparameter zugeführt wird. Das programmierbare
Register 80 kann dahin gehend konfiguriert sein, mit einer
bestimmten Software betrieben und programmiert zu werden. Das programmierbare Register
kann ein Zustandsregister sein.
-
Bei
anderen Ausführungsbeispielen
der Erfindung kann die Komplexität
der Verschlüsselungsfunktion
und der jeweiligen Entschlüsselungsfunktion erhöht werden.
Beispielsweise können
zusätzliche Logikverknüpfungen
enthalten sein, oder es können komplexere
Algorithmen dazu verwendet werden, den Maschinensprachcode zu verschlüsseln und
zu entschlüsseln.
Dies kann genutzt werden, um die Stärke des Sicherheitsalgorithmus
zu erhöhen und/oder
um eine Fehlermultiplikation zu erzielen.
-
Gemäß einem
anderen Ausführungsbeispiel der
Erfindung kann die Verarbeitungseinheit 20 wiederum ein
Register für
einen Programmzähler 70, eine
Ausführungsschaltungsanordnung 75,
eine Abrufeinrichtung 60, eine Entschlüsselungseinheit 40 und
einen Anweisungsdecodierer 65 umfassen. Die Abrufeinrichtung 60 kann
dahin gehend konfiguriert sein, Wort für Wort den Maschinensprachcode
von einer Adresse des Programmspeichers 30 abzurufen, die
dem aktuellen Zustand des Programmzählers 70 entspricht.
Die Entschlüsselungseinheit
kann dahin gehend konfiguriert sein, den von dem Programmspeicher 30 abgerufenen
Wort-Für-Wort-Maschinensprachcode
zu entschlüsseln
und das entschlüsselte
Wort zu analysieren und zu entscheiden, ob das entschlüsselte Wort
zu einer Anweisung des Maschinensprachcodes, die weitere Wörter einschließt, gehört, und
falls die Anweisung keine weiteren Wörter einschließt, eine
Ausführungsschaltungsanordnung 75 der
Verarbeitungseinheit gemäß der Anweisung
des Maschinensprachcodes zu steuern. Bei einem alternativen Ausführungsbeispiel
der Erfindung kann die Abrufeinrichtung dahin gehend konfiguriert
sein, eine vollständige
Anweisung, die mehr als ein Wort einschließen kann, von dem Programmspeicher 30 abzurufen.
Ein Wort kann beispielsweise ein oder mehrere Bytes umfassen. In
diesem Fall kann die Entschlüsselungseinheit 40 dahin
gehend konfiguriert sein, unter Verwendung einer Entschlüsselungsfunktion,
die von einem Zustand eines internen Registers abhängt, eine
vollständige
Anweisung für
die Ausführungsschaltungsanordnung 35 zu
entschlüsseln.
Bei Ausführungsbeispielen
der Erfindung kann eine verschlüsselte
Maschinensprachcodeanweisung Anweisung um Anweisung in dem Programmspeicher 30 gespeichert
werden. Eine Anweisung kann gemäß manchen
Ausführungsbeispielen der
Erfindung beispielsweise ein Byte, zwei Bytes, drei Bytes, vier
Bytes oder 64 Bytes umfassen.
-
In 5 ist
gemäß einem
anderen Ausführungsbeispiel
der Erfindung ein schematisches Diagramm einer Verarbeitungseinheit 20 gezeigt.
Die Verarbeitungseinheit 20 umfasst ein Register für einen
Programmzähler 70,
eine Ausführungsschaltungsanordnung 75,
eine Speicherentschlüsselungseinheit 40a,
eine Entschlüsselungseinheit 40b und einen
Anweisungsdecodierer 65. Ein Programmspeicher (PS) 30 kann
in die Verarbeitungseinheit 20 integriert sein oder kann
mit der Verarbeitungseinheit 20 verbindbar sein. Die Speicherentschlüsselungseinheit 40a kann
dahin gehend konfiguriert sein, von dem Programmspeicher 30 empfangene
Anweisungen in Abhängigkeit
von einer Speicheradresse, die auf einen Speicherplatz zeigt, an
dem die Anweisung in dem Programmspeicher gespeichert ist, zu entschlüsseln. Die
Anweisungsentschlüsselungseinheit 40b kann
dahin gehend konfiguriert sein, die abhängig von der Speicheradresse
entschlüsselten
Anweisungen von der Speicherentschlüsselungseinheit 40a in
Abhängigkeit
von einem aktuellen Zustand des Programmzählers 70, 25 zu
entschlüsseln.
Mit anderen Worten entschlüsselt
die Speicherentschlüsselungseinheit 40a den
speicheradressabhängigen Teil,
und die Anweisungsentschlüsselungseinheit 40b entschlüsselt beispielsweise
den Compiler-verschlüsselten
Maschinensprachcode, wie im Zusammenhang mit anderen Ausführungsbeispielen
der Erfindung beschrieben ist. Der Anweisungsdecodierer 65 kann
dann dahin gehend konfiguriert sein, die abhängig von dem Programmzähler entschlüsselten Anweisungen
von der Anweisungsentschlüsselungseinheit 40b zu
decodieren. Der Anweisungsdecodierer 65 kann auch dahin
gehend konfiguriert sein, die Ausführungsschaltungsanordnung 75 gemäß den decodierten
Anweisungen zu steuern. Bei diesem Ausführungsbeispiel kann der Anweisungsdecodierer
dahin gehend konfiguriert sein, die verschlüsselte Anweisung zu interpretieren
und eine Ausführungsschaltungsanordnung
der Verarbeitungseinheit gemäß den interpretierten
Anweisungen zu steuern.
-
Die
Speicherentschlüsselungseinheit 40a kann
alternativ dazu dahin gehend konfiguriert sein, ein Wort einer in
dem Programmspeicher gespeicherten Anweisung zu entschlüsseln, wobei
eine Anweisung zumindest ein Wort umfasst.
-
Gemäß manchen
Ausführungsbeispielen
der Erfindung kann der Programmspeicher 30 eine Mehrzahl
von Speicherblöcken
umfassen, wobei der Programmspeicher dahin gehend konfiguriert ist,
eine Mehrzahl von Anweisungen in dem Speicherblock zu speichern.
Mit anderen Worten kann der Programmspeicher 30 in eine
Mehrzahl von Unterteilungen, die so genannten Speicherblöcke, unterteilt
sein, wobei in einem Speicherblock eine Mehrzahl von Anweisungen
gespeichert sein können.
Eine Anweisung selbst kann in ein oder mehrere Wörter getrennt sein, wobei beispielsweise
ein Wort den Operationscode umfassen kann und andere Wörter der
Anweisung Operanden der Anweisung umfassen können. Eine Adresse für eine Anweisung
in einem Programmspeicher kann von einer Speicherblockadresse in
dem Programmspeicher abhängen.
-
6 zeigt
ein Flussdiagramm und ein Beispiel eines Compiler-Systems und eines
Verfahrens zum Verschlüsseln
einer Quelle zu einem verschlüsselten
Maschinensprachcode, sowie ein schematisches Diagramm einer Verarbeitungseinheit
zum Ausführen
eines entschlüsselten
Maschinensprachcodes.
-
Wie
in 6 gezeigt ist, kann ein Quellencode 5 beispielsweise
in der C-Computersprache oder in einer beliebigen anderen hierfür geeigneten Computersprache
geschrieben sein. Der Quellencode 5 kann seitens eines
Compilers 10 kompiliert und verbunden werden, so dass nach
der Kompilierung ein Maschinensprachcode erzeugt wird, der auf einer
Verarbeitungseinheit ausgeführt
werden kann. Der Deutlichkeit halber ist in dem Kästchen 80 ein Beispiel
eines derartigen Teils eines Maschinensprachcodes gezeigt. Eine
Anweisung des Maschinensprachcodes kann einen Operationscode, beispielsweise
mov A, und einen Operanden Nr. 0 umfassen. In diesem Fall kann die
Anweisung zwei Wörter
umfassen, ein Wort kann beispielsweise mov A sein, und das andere
Wort kann Nr. 0 sein. Diese Art von Anweisungscode kann ein Assembler-Code sein.
Jedes Wort des Assembler-Codes kann einer bestimmten erwarteten
Adresse in einem Programmzähler
der Verarbeitungseinheit entsprechen, beispielsweise beginnend mit
einer Adresse 0 für
den Assembler-Code mov A. Der Compiler 10 kann direkt aus
dem Quellencode 5 eine hexadezimale Form der Anweisung
erzeugen, die zum Steuern der Verarbeitungseinheit verwendet werden
kann. Bei dem in dem Kästchen 80 gezeigten
Beispiel kann die Assembler-Anweisung mov A an der Adresse 0 in
einer hexadezimalen Form dem Ausdruck 0xAA entsprechen. Der Operand
Nr. 0 kann an der Adresse 1 gespeichert werden und kann in hexadezimaler
Form dem Wert 0x00 entsprechen. Die anderen Anweisungen in dem Kästchen 80 können auf
dieselbe Weise interpretiert werden.
-
Das
Verfahren zum Kompilieren einer Quelle kann ferner beispielsweise
ein Verschlüsseln
des Maschinensprachcodes, wie er in dem Kästchen 80 gezeigt
ist, auf der Basis einer Verschlüsselungsfunktion
umfassen. Bei diesem Ausführungsbeispiel kann
die Verschlüsselungsfunktion
(Kästchen 82, 6)
als Funktion des Operationscodebytes, die von einem um 1 inkrementierten
Programmzählerwert
abhängt,
definiert sein. Mit anderen Worten kann der Compiler 10 oder
ein Verschlüsselungswerkzeug,
das in den Compiler integriert sein kann oder das eine separate
Software sein kann, eine Verschlüsselungsfunktion
anwenden, die von dem Zustand eines internen Registers, beispielsweise
des Programmzählers,
abhängt.
Bei diesem Ausführungsbeispiel
wird die Komplexität
der Verschlüsselungsfunktion
erhöht,
indem zu dem Programmzählerwert
1 hinzu addiert wird. Das Kompilieren des Quellencodes und das Verschlüsseln des
Maschinensprachcodes auf der Basis einer Verschlüsselungsfunktion kann beispielsweise
an einem Ort eines Kunden der Verarbeitungseinheit durchgeführt werden.
Das Speichern und Brennen des verschlüsselten Maschinensprachcodes
kann am Ort eines Herstellers der Verarbeitungseinheit durchgeführt werden.
-
Nach
dem Verschlüsseln
des Maschinensprachcodes auf der Basis der oben erwähnten Verschlüsselungsfunktion
wird ein verschlüsselter
Maschinensprachcode erzeugt (siehe Kästchen 85). Der hexadezimale
Maschinensprachcode 0xAA an der Adresse 0 in dem Kästchen 80 hat
sich nun zu dem verschlüsselten
Maschinensprachcode 0xAB geändert.
Gemäß der Verschlüsselungsfunktion 82 wird das
erste Operationscodebyte 0xAA durch den um 1 inkrementierten Programmzählerwert
verschlüsselt, was
bedeutet Adresse 0 plus 1, und deshalb wird der Compiler-verschlüsselte Maschinensprachcode 0xAB.
An der Adresse 1 ist der hexadezimale Code 0x00 (siehe Kästchen 80),
der durch den Compiler 10 oder ein separates Verschlüsselungswerkzeug
verschlüsselt
ist, so dass der Compilerverschlüsselte Maschinensprachcode
0x02 ist. Die Programmzähleradresse
ist bei diesem Beispiel 1 (Adresse 1) plus 1, so dass der Compiler-verschlüsselte Maschinensprachcode
nun 0x02 ist. Der restliche Maschinensprachcode kann auf dieselbe
Weise verschlüsselt werden.
Der Compiler-verschlüsselte
Maschinensprachcode kann anschließend in einen bzw. auf einen
Programmspeicher oder Speicher, z. B. einen Nur-Lese-Speicher (ROM-Maske), gespeichert
oder gebrannt werden.
-
Der
verschlüsselte
Maschinensprachcode kann beispielsweise in einer Reihenfolge aufsteigender
Adressen in dem Programmspeicher 30 einer Verarbeitungseinheit 20 gespeichert
werden. Wie oben beschrieben wurde, kann der Maschinensprachcode
bei diesem Ausführungsbeispiel über einen
Mikrosteuerungsprogrammbus Wort für Wort an die Entschlüsselungseinheit 40 übermittelt
werden. Die Entschlüsselungseinheit 40 kann
in der Lage sein, in Abhängigkeit
von einer Entschlüsselungsfunktion
zu entschlüsseln,
die bei diesem Beispiel das Operationscodebyte sein kann, das von
dem Programmzählerwert
minus 1 abhängt.
Die Entschlüsselungsfunktion
kann die umgekehrte Verschlüsselungsfunktion
sein. Nach dem Entschlüsseln des
Compiler-verschlüsselten
Maschinensprachcodes kann ein Anweisungsdecodierer den entschlüsselten
Maschinensprachcode analysieren und die Verarbeitungseinheit gemäß den Maschinensprachcodeanweisungen
steuern. Die Entschlüsselungsfunktion
kann von einem internen Zustand eines internen Registers, beispielsweise
des Programmzählers,
abhängen.
-
Durch
Verwendung einer Verschlüsselungsfunktion
und einer Entschlüsselungsfunktion,
die von einem internen Register einer Verarbeitungseinheit abhängen, wobei
das interne Register ansprechend auf eine Ausführung des Maschinensprachcodes
seinen Zustand ändert,
ist es schwieriger für
einen potentiellen Angreifer, die Firmware oder das Programm der
Verarbeitungseinheit zu entschlüsseln. Beispielsweise
kann die Verwendung statistischer Verfahren, um einen verschlüsselten
Maschinensprachcode zu entziffern, schwieriger sein als ohne eine
Verschlüsselung,
die von einem internen Zustand eines Registers abhängt. Die
Maschinenanweisung jmp (engl. jump, Sprungbefehl) in dem Kästchen 85 wird
einmal durch den hexadezimalen Ausdruck 0xBE und das zweite Mal
durch den hexadezimalen Ausdruck 0x0C verschlüsselt.
-
In 7 ist
ein Flussdiagramm des Verfahrens zum Kompilieren eines Quellencodes
zu einem verschlüsselten
Maschinensprachcode gezeigt. Der Maschinensprachcode ist auf einer
Verarbeitungseinheit ausführbar,
wobei die Verarbeitungseinheit ein internes Register umfasst, das
ansprechend auf eine Ausführung
des Maschinensprachcodes seinen Zustand ändert, wie oben gezeigt ist.
Das Verfahren umfasst ein Kompilieren 110 des Quellencodes
zu einem Maschinensprachcode und ein Verschlüsseln 120 des Maschinensprachcodes
auf der Basis einer Verschlüsselungsfunktion,
die von dem Zustand des internen Registers abhängt. Die Verschlüsselungsfunktion
kann komplexer sein, wie dies bei dem Ausführungsbeispiel der 6 gezeigt
ist.
-
Gemäß einem
anderen Ausführungsbeispiel des
Verfahrens zum Kompilieren eines Quellencodes kann die Verarbeitungseinheit
ein programmierbares Register umfassen, und das Verschlüsseln 120 des Maschinensprachcodes
kann zusätzlich
auf einer Verschlüsselungsfunktion
beruhen, die von dem Zustand des programmierbaren Registers abhängt. Mit anderen
Worten kann die Verschlüsselungsfunktion komplexer
sein, indem sie beispielsweise ein zusätzliches programmierbares Zustandsregister
verwendet. Eine jeweilige Bedienperson kann das Zustandsregister
programmieren. Es kann unter Verwendung eines bestimmten Computerprogramms
oder einer bestimmten Software programmiert werden.
-
In 8 ist
ein Flussdiagramm des Verfahrens zum Verschlüsseln eines Quellencodes zu
einem verschlüsselten
Maschinensprachcode gezeigt. Das Verfahren wird so durchgeführt, dass
ein entschlüsselter
Maschinensprachcode des verschlüsselten
Maschinensprachcodes auf einer Verarbeitungseinheit ausführbar ist,
wobei die Verarbeitungseinheit ein internes Register, das ansprechend
auf eine Ausführung
des Maschinensprachcodes seinen Zustand ändert, einen Programmspeicher
und eine Entschlüsselungseinheit
umfasst.
-
Das
Verfahren wird durchgeführt,
indem ein Quellencode zu einem Maschinensprachcode für die Verarbeitungseinheit
kompiliert wird 110, indem der Maschinensprachcode auf
der Basis einer Verschlüsselungsfunktion,
die von dem Zustand des internen Registers der Verarbeitungseinheit
abhängt,
verschlüsselt
wird 120. Ferner umfasst das Verschlüsselungsverfahren ein Sichern 130 des
Compiler-verschlüsselten
Maschinensprachcodes auf einem Programmspeicher und ein Entschlüsseln 140 des
Compiler-verschlüsselten
Maschinensprachcodes, der von dem Programmspeicher ausgelesen wird,
mit einer Entschlüsselungsfunktion,
die von dem Zustand des internen Registers der Verarbeitungseinheit
abhängt,
so dass der entschlüsselte
Maschinensprachcode auf der Verarbeitungseinheit ausführbar ist.
-
Das
Verfahren kann ferner ein Brennen des Compiler-verschlüsselten
Maschinensprachcodes auf einen Nur-Lese-Speicher (ROM) umfassen.
Gemäß einem
anderen Ausführungsbeispiel
des Verfahrens kann der Compiler-verschlüsselte Maschinensprachcode
vor dem Sichern 130 des Compiler-verschlüsselten
Maschinensprachcodes ein zweites Mal verschlüsselt werden. Die zweite Verschlüsselung
kann in Abhängigkeit
von einer Speicheradresse durchgeführt werden, an der der Maschinensprachcode
in dem Programmspeicher gespeichert werden soll.
-
Gemäß einem
weiteren Ausführungsbeispiel des
Verfahrens kann ein Adressentschlüsseln des abhängig von
der Speicheradresse verschlüsselten Maschinensprachcodes
mit einer Entschlüsselungsfunktion
durchgeführt
werden, die von der Speicheradresse abhängt, an der der Maschinensprachcode in
dem Programmspeicher gespeichert wurde. Das Entschlüsseln 140 kann
durchgeführt
werden, indem der Maschinensprachcode Wort für Wort aus einem Programmspeicher
ausgelesen und entschlüsselt wird
und indem das entschlüs selte
Wort analysiert wird, indem entschieden wird, ob das entschlüsselte Wort
zu einer Anweisung des Maschinensprachcodes gehört, die weitere Wörter einschließt, und falls
die Anweisung keine weiteren Wörter
einschließt,
indem die Anweisung auf der Verarbeitungseinheit ausgeführt wird.
-
Gemäß manchen
Ausführungsbeispielen
der Erfindung kann das Verfahren zum Verschlüsseln eines Quellencodes während der
Erzeugung des Maschinensprachcodes durchgeführt werden. Das bedeutet, dass
die Operationscodes bereits während der
Erzeugung des Maschinensprachcodes durch eine Werkzeugkette verschlüsselt werden
können.
-
Gemäß Ausführungsbeispielen
der Erfindung kann der verschlüsselte
Maschinensprachcode, der in dem Programmspeicher der Verarbeitungseinheit
oder des Systems gespeichert ist, ausgehend von dem generischen
CPU-Opcode (-Operationscode) und einem erwarteten internen Zustand der
CPU gefolgert werden. Bei einem Ausführungsbeispiel der Erfindung
kann zum Verschlüsseln
des Maschinensprachcodes eine Exklusiv-ODER-Logikverknüpfung (XOR) zwischen dem generischen
Operationscode und dem tatsächlichen
Wert des Programmzählers
durchgeführt
werden. Ein jeweiliger Anweisungsdecodierer 65 der CPU
muss dies berücksichtigen,
um den Maschinensprachcode richtig zu interpretieren und einen richtigen
generischen Operationscode auf der Verarbeitungseinheit auszuführen.
-
Gemäß Ausführungsbeispielen
der Erfindung kann das Verfahren beispielsweise auch eine Sicherheitsmikrosteuerung,
eine Verarbeitungseinheit oder eine Zentralverarbeitungseinheit
vor einem erzwungenen Angriff auf die Adressleitungen eines Programmspeichers
schützen.
Ein erzwungener Angriff auf eine Adressleitung eines Programmspeichers
kann verschlüsselte
Operationscodes ändern, die
danach nicht mehr korrekt entschlüsselt werden können. Folglich
kann eine hohe Wahrscheinlichkeit bestehen, dass in der Zentralverarbeitungseinheit eine „illegale
Opcode-Operationsausnahme” auftritt. Eine
Voraussetzung für
eine derartige „illegale
Opcode-Operationsausnahme” besteht
darin, dass der Anweisungssatz eine jeweilige Struktur für eine „illegale
Opcode-Operationsausnahme” umfasst.
-
Gemäß Ausführungsbeispielen
der Erfindung können
effektivere Maßnahmen
gegen ein Springen auf Grund erzwungener Adress-, Daten- oder Befehlsleitungen
in einer Verarbeitungseinheit ergriffen werden. Gemäß Ausführungsbeispielen
der Erfindung kann der jeweilige Maschinensprachcode Prüfbits umfassen,
so dass die Integrität
einer Anweisung oder eines Wortes einer Anweisung überprüft werden
kann. Gemäß anderen
Ausführungsbeispielen
der Erfindung können
die Verschlüsselungsfunktion
und die jeweilige Ent schlüsselungsfunktion
eine höhere
Komplexität
aufweisen, wie hierin beschrieben ist. Bei manchen Ausführungsbeispielen
der Erfindung kann die Verarbeitungseinheit zusätzliche Hardwarekomponenten,
z. B. Register, programmierbare Register, Logikgatter oder Logikschaltungen zum
Erzeugen einer komplexeren Verschlüsselungsfunktion und einer
jeweiligen Entschlüsselungsfunktion
umfassen. Gemäß einem
Ausführungsbeispiel der
Erfindung kann ein zusätzliches
programmierbares Register verwendet werden, um eine Verschlüsselungsfunktion
zu erzeugen. Das programmierbare Register kann mit einer bestimmten
Software programmiert werden.
-
Gemäß weiteren
Ausführungsbeispielen
der Erfindung können
zusätzliche
Maßnahmen
zum Erhöhen
der Sicherheit für
Sicherheitsanwendungen gegen beispielsweise eine äußerliche
Störung,
ein äußerliches
Erzwingen eines bestimmten Zustandes der Sicherheitsanwendung oder
ein erzwungenes Springen in dem Programm oder der Firmware der Sicherheitsanwendung
vorgesehen sein. Um die Sicherheit der Funktion und des Programms
von Mikrosteuerungen zu bewahren, können anwendereigene Anweisungen
verwendet werden, oder der Programmspeicher und/oder die Bussysteme
auf der Mikrosteuerung können
verschlüsselt
werden.
-
Gemäß einem
weiteren Ausführungsbeispiel der
Erfindung kann zum Definieren einer Verschlüsselungsfunktion, die durch
das Compiler-System verwendet werden kann, statt eines internen
Zustands eines Programmzählerregisters
ein beliebiges anderes Zustandsregister in der Verarbeitungseinheit,
z. B. ein separates Verbindungsregister, verwendet werden. In diesem
Fall muss der Compiler beispielsweise gewährleisten, dass sich das jeweilige
Zustandsregister zu Beginn der Ausführung des Compiler-verschlüsselten
Maschinensprachcodes in einem vorbestimmten Zustand befinden muss.
-
Obwohl
die vorliegende Erfindung anhand mehrerer Ausführungsbeispiele beschrieben
wurde, gibt es Abänderungen,
Permutationen und Äquivalente,
die innerhalb des Schutzumfangs der vorliegenden Erfindung liegen.
Auch sollte man beachten, dass es viele alternative Möglichkeiten
zum Implementieren der Verschlüsselungsfunktion,
der Entschlüsselungsfunktion
und des Verfahrens und der Zusammensetzungen der vorliegenden Erfindung gibt.
Deshalb ist beabsichtigt, dass die folgenden angehängten Patentansprüche dahin
gehend interpretiert werden, dass sie alle derartigen Abänderungen, Permutationen
und Äquivalente,
die in der wahren Wesensart und dem wahren Schutzumfang der vorliegenden
Erfindung enthalten sind, umfassen.