PatentDe  


Dokumentenidentifikation DE102005048029A1 12.04.2007
Titel Compiliervorrichtung und Verfahren zum Compilieren
Anmelder Infineon Technologies AG, 81669 München, DE
Erfinder Scheiblhofer, Dietmar, Kaindorf, AT;
Klug, Franz, 81739 München, DE
Vertreter Schoppe, Zimmermann, Stöckeler & Zinkler, 82049 Pullach
DE-Anmeldedatum 06.10.2005
DE-Aktenzeichen 102005048029
Offenlegungstag 12.04.2007
Veröffentlichungstag im Patentblatt 12.04.2007
IPC-Hauptklasse G06F 9/45(2006.01)A, F, I, 20051006, B, H, DE
Zusammenfassung Eine Compiliervorrichtung (100) zum Erzeugen einer zweiten Programmsequenz (114) aus einer ersten Programmsequenz (112) weist eine Erkennungseinrichtung zum Erkennen eines ersten Teilbereichs und eines zweiten Teilbereichs der ersten Programmsequenz (112) auf sowie eine Auswahleinrichtung zum Auswählen von Befehlen aus einem Befehlssatz der zweiten Programmsequenz (114), die ausgebildet ist, um zur Abbildung einer Funktionalität des ersten Teilbereichs nur Befehle einer ersten Sicherheitskategorie und zur Abbildung einer Funktionalität des zweiten Teilbereichs Befehle der zweiten Sicherheitskategorie auszuwählen. Ferner weist die Compiliervorrichtung (100) eine Erzeugereinrichtung (106) zum Erzeugen der zweiten Programmsequenz (114) aus den ausgewählten Befehlen auf.

Beschreibung[de]

Die vorliegende Erfindung befasst sich mit einer Compiliervorrichtung und einem Verfahren zum Compilieren, wie sie insbesondere für Sicherheits-relevante Bereiche eingesetzt werden können.

Durch Fehler in der Hardware oder mittels verschiedenster Angriffsverfahren ist es möglich, die Funktion eines Prozessors zu stören. Solche Angriffsverfahren können beispielsweise unter Verwendung von Licht oder durch Probing realisiert werden. In Software oder in Hardware sind eine Menge an Schutzmechanismen vorgesehen, die verhindern sollen, dass Angreifer oder Fehler einen falschen Ablauf von Programmen entstehen lassen.

Es ist die Aufgabe der vorliegenden Erfindung, eine Compiliervorrichtung, ein Verfahren zum Compilieren sowie einen Prozessor zu schaffen, die einen verbesserten Schutz eines Programmablaufs ermöglichen.

Diese Aufgabe wird durch eine Compiliervorrichtung gemäß Anspruch 1, ein Compilierverfahren gemäß Anspruch 14 sowie einen Prozessor gemäß Anspruch 16 gelöst.

Die vorliegende Erfindung schafft eine Compiliervorrichtung zum Erzeugen einer zweiten Programmsequenz aus einer ersten Programmsequenz, wobei die erste Programmsequenz einen ersten Teilbereich mit einer ersten Sicherheitsstufe und einen von dem ersten Teilbereich, durch zumindest einen Indikator, unterscheidbaren zweiten Teilbereich mit einer zweiten Sicherheitsstufe aufweist, mit folgenden Merkmalen:

einer Erkennungseinrichtung (102) zum Erkennen des ersten Teilbereichs der ersten Programmsequenz und des zweiten Teilbereichs anhand des zumindest einen Indikators;

einer Auswahleinrichtung zum Auswählen von Befehlen aus einem Befehlssatz der zweiten Programmsequenz, um eine Funktionalität der ersten Programmsequenz auf die zweite Programmsequenz abzubilden, wobei der Befehlssatz Befehle einer ersten Sicherheitskategorie und Befehle einer zweiten Sicherheitskategorie aufweist, und wobei die Auswahleinrichtung ausgebildet ist, um zur Abbildung einer Funktionalität des ersten Teilbereichs nur Befehle der ersten Sicherheitskategorie und zur Abbildung einer Funktionalität des zweiten Teilbereichs Befehle der zweiten Sicherheitskategorie oder der ersten und der zweiten Sicherheitskategorie auszuwählen; und

eine Erzeugereinrichtung zum Erzeugen der zweiten Programmsequenz aus dem von der Auswahleinrichtung ausgewählten Befehlen.

Die vorliegende Erfindung schafft ferner ein Verfahren zum Erzeugen einer zweiten Programmsequenz aus einer ersten Programmsequenz, das folgende Schritte umfasst:

Bereitstellen der ersten Programmsequenz, wobei die erste Programmsequenz einen ersten Teilbereich mit einer ersten Sicherheitsstufe und einen von dem ersten Teilbereich, durch zumindest einen Indikator, unterscheidbaren zweiten Teilbereich mit einer zweiten Sicherheitsstufe aufweist;

Erkennen des ersten Teilbereichs der ersten Programmsequenz und des zweiten Teilbereichs anhand des zumindest einen Indikators;

Auswählen von Befehlen aus einem Befehlssatz der zweiten Programmsequenz, um eine Funktionalität der ersten Programmsequenz auf die zweite Programmsequenz abzubilden, wobei der Befehlssatz Befehle einer ersten Sicherheitskategorie und Befehle einer zweiten Sicherheitskategorie aufweist, und wobei zur Abbildung einer Funktionalität des ersten Teilbereichs nur Befehle der ersten Sicherheitskategorie und zur Abbildung einer Funktionalität des zweiten Teilbereichs Befehle der zweiten Sicherheitskategorie oder der ersten und der zweiten Sicherheitskategorie ausgewählt werden; und

Erzeugen der zweiten Programmsequenz aus dem von der Auswahleinrichtung ausgewählten Befehlen.

Der vorliegenden Erfindung liegt die Erkenntnis zugrunde, dass es in einem Programm Bereiche gibt, die Sicherheitskritischer sind als andere Bereiche. Die sicherheitstechnische Einstufung kann aufgrund Sicherheits-technischer Gesichtspunkte und aufgrund von Überlegungen über eine effiziente Durchführung von Angriffen auf einen Programmablauf erfolgen. Beispielsweise kann gemäß der vorliegenden Erfindung die erste Sicherheitsstufe einem Bereich der ersten Programmsequenz zugeordnet sein, der aufgrund einer kritischen Funktionalität eine hohe Sicherheitsanforderung erforderlich macht und die zweite Sicherheitsstufe einem Teilbereich zugeordnet sein, der aufgrund einer unkritischen Funktionalität eine weniger hohe Sicherheitsanforderung erforderlich macht.

Bei der zweiten Programmsequenz kann es sich beispielsweise um eine Sequenz von Assembler-Befehlen handeln. Aus Sicherheitstechnischen Gesichtspunkten sind auch die Befehle des zweiten Programmcodes, also beispielsweise die Assembler-Befehle, selbst nicht gleich Sicherheits-kritisch. Obwohl prinzipiell jeder Befehl beliebig störbar ist, beispielsweise durch Spiking oder Strahlung, wird sich ein Angreifer solange vielmehr mit deterministischen Angriffsszenarien auseinandersetzen, wie diese effizient durchführbar sind, da dadurch eine einfache Reproduzierbarkeit gegeben ist. Dies ist vor allem bei Attacken, die ein bestimmtes Ergebnis erzielen möchten, ein wesentlich sinnvollerer Weg. Typischerweise sind solche deterministische Angriffe durch Licht, beispielsweise lokales Licht, gut gesteuert auslösbar. In erster Linie stellen reguläre Strukturen, beispielsweise ein Register-File RAM, Ziele eines lokalen Angriffs dar. Werden zwei unterschiedliche Sprungbefehle, beispielsweise ein relativer Sprung, wie PC = PC + 20 und ein indirekter Sprung, wie PC = REGISTER betrachtet, dann ergibt sich folgende Situation. Bei einem relativen Sprung, bei dem das Sprungziel durch den OP-Code bestimmt ist, ist ein erfolgreicher deterministischer Angriff, beispielsweise durch lokales Licht, wesentlich weniger kritisch als bei einem indirekter Sprung. Dies resultiert daraus, dass die Manipulation eines Registers mittels Licht viel einfacher ist, als das gezielte Abändern eines OP-Codes einer Instruktion. Im Sinne der vorliegenden Erfindung wird also beispielsweise ein relativer Sprungbefehl als unkritischer Befehl der ersten Sicherheitskategorie und ein indirekter Sprung als kritischer Befehl der zweiten Sicherheitskategorie eingeordnet.

Der Erfindung liegt somit die Erkenntnis zugrunde, dass es vorteilhaft ist, sowohl eine Programmsequenz als auch ein Instruktions-Set nach Sicherheits-technischen Gesichtspunkten zu clustern. Eine solche Clusterung kann beispielsweise durchgeführt werden, indem zum einen die Programmsequenzen in kritischen Code und unkritischen Code eingeteilt und zum anderen das Instruktions-Set in kritische Befehle und unkritische Befehle eingeteilt wird:

Programmsequenz: kritischer Code – unkritischer Code

Instruktions-Set: kritischer Befehl – unkritischer Befehl

Nach dem erfindungsgemäßen Ansatz wird die Verwendung von kritischen Befehlen auf jene Code-Bereiche beschränkt, die als unkritisch erachtet werden. Somit wird beispielsweise Tool-unterstützt verhindert, dass kritische Befehle in kritischen Code-Bereichen verwendet werden, wodurch sich der allgemeine Schutz gegen Angreifer für diesen Bereich erhöht. Es wird also von dem bisherigen Ansatz abgewichen, bei dem es keine Sicherheits-technische Unterscheidung der Instruktionen eines Mikro-Controllers gab.

Das erfindungsgemäße Verfahren ermöglicht eine selektive, vom Kunden steuerbare Abstufung von Teilen des Programm-Codes und der Daten. Die erfindungsgemäße Maßnahme wird keinen absoluten Schutz gegen Angriffe auf Programm-Codes bzw. einzelne Befehle darstellen. Durch die Verwendung unkritischer Befehle wird jedoch die Hürde für einen Angriff auf eine kritische Routine erhöht. Durch die erfindungsgemäße Einschränkung der Funktionalität gewinnt der Kunde an Sicherheit gegen lokale Angriffe.

Vorteilhafterweise kann das erfindungsgemäße Verfahren mit anderen Maßnahmen, beispielsweise EDC kombiniert werden, um einen zusätzlichen Schutz vor globalen und deterministischen Angriffen zu bieten. Solche Angriffe können beispielsweise durch Spikes hervorgerufen werden.

Bevorzugte Ausführungsbeispiele der vorliegenden Erfindung werden nachfolgend Bezug nehmend auf die beiliegenden Zeichnungen näher erläutert. Es zeigen:

1 eine Compiliervorrichtung gemäß einem Ausführungsbeispiel der vorliegenden Erfindung;

2 ein Ablaufdiagramm eines Verfahrens zum Compilieren gemäß einem Ausführungsbeispiel der vorliegenden Erfindung;

3a, b Mengendarstellungen von Befehlssätzen gemäß Ausführungsbeispielen der vorliegenden Erfindung; und

4 Blockschaltbild eines Prozessors gemäß einem Ausführungsbeispiel der vorliegenden Erfindung.

1 zeigt eine Compiliervorrichtung 100 gemäß einem Ausführungsbeispiel der vorliegenden Erfindung. Die Compiliervorrichtung 100 weist eine Erkennungseinrichtung 102, eine Auswahleinrichtung 104 und eine Erzeugungseinrichtung 106 auf. Die Compiliervorrichtung 100 ist ausgebildet, um eine erste Programmsequenz 112 zu empfangen und eine zweite Programmsequenz 114 auszugeben.

Bei der ersten Programmsequenz 112 kann es sich um ein Hochsprachenprogramm, wie beispielsweise ein C-Programm handeln. Die erste Programmsequenz 112 beinhaltet die Beschreibung einer bestimmten Funktionalität. Bei der zweiten Programmsequenz 114 kann es sich um ein Maschinenprogramm handeln, das von einem Prozessor ausgeführt werden kann. Beispielsweise kann die zweite Programmsequenz 114 ein Assembler-Programm darstellen. Die Compiliervorrichtung 100 ist ausgebildet, um aus der ersten Programmsequenz 112 die zweite Programmsequenz 114 zu erzeugen. Dabei wird die erste Programmsequenz 112 so auf die zweite Programmsequenz 114 abgebildet, dass die zweite Programmsequenz 114 die gleiche Funktionalität enthält, die in der ersten Programmsequenz 112 beschrieben ist.

Gemäß dem erfindungsgemäßen Ansatz kann die erste Programmsequenz 112 in Teilbereiche unterteilt werden, denen unterschiedliche Sicherheitsanforderungen zugeordnet sind. Beispielsweise kann es sich bei einem ersten Teilbereich mit einer ersten Sicherheitsstufe um einen Verschlüsselungs-Algorithmus bzw. einen Entschlüsselungs-Algorithmus handeln und bei einem zweiten Teilbereich mit einer zweiten Sicherheitsstufe um einen Teilbereich handeln, der eine Datenempfangsroutine, beispielsweise von einem UART definiert. In diesem Fall ist die Ausführung des Ver-/Entschlüsselungs-Algorithmus Sicherheits-kritischer als die Ausführung der Datenempfangs-Routine. Demgemäß weist der erste Teilbereich eine kritische Funktionalität mit einer hohen Sicherheitsanforderung und der zweite Teilbereich eine unkritische Funktionalität mit einer niedrigen Sicherheitsanforderung auf. Zur Kennzeichnung der Teilbereiche bzw. der den Teilbereichen zugeordneten Sicherheitsstufen kann die erste Programmsequenz 112 Indikatoren aufweisen. Beispielsweise kann ein erster Indikator der ersten Sicherheitsstufe und ein zweiter Indikator der zweiten Sicherheitsstufe zugeordnet sein. Bei dem Indikator kann es sich um eine Markierung, beispielsweise in Form eines Wortes, eines Befehls oder einzelne Bits handeln, die beispielsweise am Beginn eines Teilbereichs angeordnet ist und der von der Compiliervorrichtung 100 ausgewertet wird. Alternativ kann auch jeder einzelne Befehl eines Teilbereichs der ersten Programmsequenz durch einen entsprechenden Indikator markiert sein oder es wird jeweils nur ein besonderer Teilbereich, beispielsweise der erste Teilbereich markiert und ein anderer Teilbereich nicht. Die erste Programmsequenz 112 kann eine Vielzahl von Teilbereichen aufweisen, bei denen es sich um erste Teilbereiche mit einer ersten Sicherheitsstufe, zweite Teilbereiche mit einer zweiten Sicherheitsstufe oder auch weitere Teilbereiche mit weiteren, definierbaren Sicherheitsstufen handeln kann.

Gemäß diesem Ausführungsbeispiel wird die erste Programmsequenz 112 sowohl an die Erkennungseinrichtung 102 als auch an die Auswahleinrichtung 104 bereitgestellt. Die Erkennungseinrichtung 102 ist ausgebildet, um die Sicherheitsstufen der jeweiligen Teilbereiche zu erkennen. Dies kann anhand der Indikatoren erfolgen. Gemäß diesem Ausführungsbeispiel stellt die Erkennungseinrichtung 102 ein Auswahlsignal an die Auswahleinrichtung 104 bereit, das der Auswahleinrichtung anzeigt, ob ein empfangener Teilbereich in der ersten Programmsequenz 112 ein erster Teilbereich mit der ersten Sicherheitsstufe oder ein zweiter Teilbereich mit der zweiten Sicherheitsstufe ist.

Die Auswahleinrichtung 104 ist ausgebildet, um Befehle aus einem Befehlssatz auszuwählen. Der Befehlssatz ist dabei ein Befehlssatz der, der zweiten Programmsequenz 114 zugrunde liegt. Handelt es sich bei der zweiten Programmsequenz 114 um einen Maschinencode, der auf einem Prozessor ablaufen kann, so handelt es sich bei dem Befehlssatz um den Befehlssatz dieses Prozessors. Die ausgewählten Befehle bilden die Funktionalität der ersten Programmsequenz 112 auf die zweite Programmsequenz 114 ab.

Gemäß dem erfindungsgemäßen Ansatz sind die Befehle des Befehlssatzes in unterschiedliche Sicherheitskategorien eingeteilt. Gemäß diesem Ausführungsbeispiel weist der Befehlssatz Befehle einer ersten Sicherheitskategorie und Befehle einer zweiten Sicherheitskategorie auf. Bei den Befehlen der ersten Sicherheitskategorie kann es sich um sichere Befehle handeln, die beispielsweise für deterministische Angriffe unanfälliger sind als die Befehle der zweiten Sicherheitskategorie. Abhängig davon, ob es sich bei dem Teilbereich der ersten Programmsequenz 112 um einen ersten Teilbereich mit der ersten Sicherheitsstufe oder um einen zweiten Teilbereich mit der zweiten Sicherheitsstufe handelt, wählt die Auswahleinrichtung 104 entweder Befehle der ersten Sicherheitskategorie oder Befehle der zweiten Sicherheitskategorie aus. Zur Abbildung einer Funktionalität des ersten Teilbereichs mit der ersten Sicherheitsstufe werden von der Auswahleinrichtung 104 gemäß dem erfindungsgemäßen Ansatz ausschließlich Befehle der ersten Sicherheitskategorie ausgewählt. Zur Abbildung einer Funktionalität des zweiten Teilbereichs mit der zweiten Sicherheitsstufe können entweder nur Befehle der zweiten Sicherheitskategorie oder aber Befehle der ersten und der zweiten Sicherheitskategorie ausgewählt werden.

Die zur Abbildung der ersten Programmsequenz 112 ausgewählten Befehle werden von der Auswahleinrichtung 104 an die Erzeugungseinrichtung 106 bereitgestellt. Die Erzeugungseinrichtung 106 ist ausgebildet, um aus den ausgewählten Befehlen die zweite Programmsequenz 114 zu erzeugen. Beispielsweise kann die Erzeugungseinrichtung 106 ausgebildet sein, um die empfangenen ausgewählten Befehle in der empfangenen Reihenfolge als zweite Programmsequenz 114 auszugeben. Alternativ können die ausgewählten Befehle von der Erzeugungseinrichtung 106 noch in ein für die zweite Programmsequenz 114 erforderliches Format gebracht werden.

Die in 1 gezeigte Compiliervorrichtung basiert auf dem erfindungsgemäßen Ansatz einer Einteilung der Befehle, beispielsweise der Assembler-Instruktionen eines Mikro-Controllers, in unterschiedliche Risiko- bzw. Sicherheitsklassen. Die Compiliervorrichtung 100 stellt sicher, dass bei besonders schützenswerten Code-Bereichen nur jene Instruktionen zugelassen werden, die dem geforderten Sicherheitslevel entsprechen. Bei den Code-Bereichen kann es sich beispielsweise um Funktionsblöcke oder Funktionen handeln. Die entsprechenden Sicherheitslevel können von einem Programmierer der ersten Programmsequenz 112 festgelegt werden oder alternativ von Anwendern der Software. Dies ist vorteilhaft, da sich die Sicherheitslevel je nach Anwendungsgebiet der Programmsequenzen unterscheiden können.

Ferner ermöglicht die Benutzung der Sicherheitslevel eine implizite, für den Kunden transparente Veränderung des Verhaltens eines Bausteins mittels Tool-Support zu erreichen, um das Sicherheitsniveau zu erhöhen. Dadurch ist ein impliziter Support von Hardware-Features möglich. Beinhaltet das Hardware-System, auf dem die zweite Programmsequenz 114 ausgeführt wird, beispielsweise einen Cache, der nur unzureichend gegen lokale Angriffe schützbar ist, aber einen Write-Through-Mechanismus unterstützt, kann die Verwendung von Schlüsselwörtern oder Indikatoren dazu genutzt werden, für dieses Modul implizit ein sicheres Verhalten auszulösen. Im Falle eines Caches könnte das darin bestehen, dass keine kritischen Daten in dem Cache eingelagert werden, sondern diese Daten direkt in die CPU gelangen und dort verarbeitet werden. Diese implizite Sicherung mittels Schlüsselwort würde z.B. in einer speziellen Steuerung des Cache mittels SFR-Befehlen (SFR; SFR = SPECIAL FUNCTION REGISTER) enden. Dies wäre jedoch für einen Anwender transparent, der dadurch Plattformunabhängiger ist. Damit einhergehend ist lediglich ein Verlust an Performance bzw. eine Steigerung des Gesamtenergieverbrauchs der Applikation verbunden, wenn häufig auf solche, sich nicht im Cache befindlichen Daten, zugegriffen wird.

In der Programmiersprache C könnte der zu schützende Code-Bereich durch ein spezielles Schlüsselwort gekennzeichnet werden.

Zum Beispiel Void _secure ENCRYPT (char *data).

Das Schlüsselwort _secure stellt sicher, dass beim Kompilieren dieser Funktion nur Assembler-Instruktionen verwendet werden, die als sicher erachtet werden. Auch denkbar wäre, dass die Assembler-Instruktionen in mehrere Sicherheitsklassen eingeteilt werden. Dies entspricht einer feineren Clusterung sowohl der Programmsequenz als auch des Instruktions-Sets. Dann könnte beispielsweise ein Sicherheitslevel für eine bestimmte Funktion gefordert werden.

Zum Beispiel Void _secure-level(3) ENCRYPT (char *data).

Um eine Unterstützung spezieller Hardware-Funktionen zu ermöglichen, kann beispielsweise die in 1 gezeigte Compilier-Vorrichtung eine zusätzliche Einfügevorrichtung (nicht gezeigt in den Figuren) aufweisen, die ausgebildet ist, um beim Erkennen des ersten Indikators einen Zusatzbefehl in die zweite Programmsequenz einzufügen. Der Zusatzbefehl kann eine Aktivierung der besonderen Art der Funktion ermöglichen. Dabei kann es sich beispielsweise um die Aktivierung oder Deaktivierung eines Zwischenspeichers wie ein Cache handeln. Allgemein ausgedrückt kann der Zusatzbefehl in einer Ausführeinrichtung, die zum Ausführen der zweiten Programmsequenz geeignet ist einen sicheren Modus aktivieren, der gewährleistet, dass eine Ausführung eines Teilbereichs der zweiten Programmsequenz, der dem Teilbereich der ersten Programmsequenz entspricht, vor Angriffen weitmöglichst geschützt ist.

2 zeigt ein Flussdiagramm, das einzelne Verfahrensschritte eines Verfahrens zum Compilieren darstellt. In einem ersten Schritt 202 wird die erste Programmsequenz bereitgestellt. Bei der ersten Programmsequenz kann es sich um die in Fig. gezeigte Programmsequenz 112 handeln, die einen ersten Teilbereich, dem eine hohe Sicherheitsstufe zugewiesen ist und einen zweiten Teilbereich, dem eine niedrigere Sicherheitsstufe zugewiesen ist, aufweist.

In einem zweiten Verfahrensschritt 204 wird ein Erkennen der Teilbereiche der ersten Programmsequenz durchgeführt. Wird ein erster Teilbereich erkannt, so erfolgt in einem dritten Schritt 206 ein Auswählen von Befehlen der ersten Sicherheitskategorie, um eine Funktionalität des ersten Teilbereichs darzustellen. Handelt es sich jedoch um einen zweiten Teilbereich, so erfolgt in einem parallelen dritten Schritt 208 ein Auswählen von Befehlen der zweiten Sicherheitskategorie oder der ersten und zweiten Sicherheitskategorie, um die Funktionalität des zweiten Teilbereichs zu realisieren.

In einem vierten Schritt 210 erfolgt ein Erzeugen der zweiten Programmsequenz aus den Befehlen, die in den Schritten 206, 208 ausgewählt wurden. Das in 2 gezeigte Verfahren kann beispielsweise von der in 1 gezeigten Compiliervorrichtung 100 durchgeführt werden.

Die 3a und 3b zeigen Ausführungsbeispiele von Befehlssätzen gemäß der vorliegenden Erfindung. Gemäß dem in 3a gezeigten Ausführungsbeispiel weist ein Befehlssatz 300a eine erste Teilmenge mit Befehlen der ersten Sicherheitskategorie 302a und eine zweite Teilmenge mit Befehlen der zweiten Sicherheitskategorie 304a auf. Beide Teilmengen überschneiden sich nicht. Nach Möglichkeit kann jeder zu realisierenden Funktionalität entweder ein Befehl der ersten Sicherheitskategorie oder ein Befehl der zweiten Sicherheitskategorie zugeordnet werden. Kann einer Funktionalität kein Befehl der ersten Sicherheitskategorie zugeordnet werden, so kann diese Funktionalität von der erfindungsgemäßen Compiliervorrichtung entweder nicht realisiert werden oder es wird auf einen Befehl der zweiten Sicherheitskategorie zurückgegriffen. Dies hätte jedoch den Nachteil, dass die Sicherheit des auszuführenden Programms gesenkt wird, da für einen kritischen Code-Bereich ein kritischer Befehl der zweiten Sicherheitskategorie eingesetzt werden muss. Zur Realisierung unkritischer Code-Bereiche können sowohl Befehle der ersten Sicherheitskategorie als auch Befehle der zweiten Sicherheitskategorie verwendet werden. Vorteilhafterweise wird zur Realisierung unkritischer Code-Bereiche derjenige Befehl ausgewählt, der die einfachste Realisierung, den schnellsten Programmablauf oder den geringsten Energieverbrauch gewährleistet.

Alternativ kann der gezeigte Befehlssatz auch in weitere Teilmengen unterteilt sein. Dies ermöglicht eine feinere Abstufung der Sicherheitskategorien. In einem solchen Fall kann die erste Programmsequenz weitere Teilbereiche mit, durch weitere Indikatoren gekennzeichneten weiteren Sicherheitsstufen aufweisen. Ferner kann die in 1 gezeigte Erkennungseinrichtung zum Erkennen der weiteren Teilbereiche anhand der weiteren Indikatoren ausgebildet sein und die Auswahleinrichtung ausgebildet sein, um zur Abbildung einer Funktionalität der weiteren Teilbereiche Befehle der weiteren Sicherheitskategorien auszuwählen.

Gemäß dem in 3b gezeigten Ausführungsbeispiel weist ein Befehlssatz 300b Teilmengen von Befehlen der ersten Sicherheitskategorie 302b sowie Befehle der zweiten Sicherheitskategorie 304b auf, die sich in einem Überschneidungsbereich 306 überschneiden. Befehle für die es keinen Alternativbefehl in der jeweils anderen Sicherheitskategorie gibt, sind in der Überschneidungszone 306 angeordnet. Greift die erfindungsgemäße Compiliervorrichtung auf solche Befehle in der Überschneidungsmenge 306 zurück, so ist dies nachteilhaft, da es sich bei solchen Befehlen um kritische Befehle handeln kann, die eigentlich nicht zur Realisierung von kritischen Code-Bereichen verwendet werden sollten.

Abhängig von den Gegebenheiten kann das erfindungsgemäße Verfahren zum Erzeugen einer zweiten Programmsequenz aus einer ersten Programmsequenz in Hardware oder in Software implementiert werden. Die Implementierung kann auf einem digitalen Speichermedium, insbesondere einer Diskette oder CD mit elektronisch auslesbaren Steuersignalen erfolgen, die so mit einem programmierbaren Computersystem zusammenwirken können, dass das entsprechende Verfahren ausgeführt wird. Allgemein besteht die Erfindung somit auch in einem Computerprogrammprodukt mit einem auf einem maschinenlesbaren Träger gespeicherten Programmcode zur Durchführung des erfindungsgemäßen Verfahrens, wenn das Computerprogrammprodukt auf einem Rechner abläuft. Mit anderen Worten ausgedrückt, kann die Erfindung somit als ein Computerprogramm mit einem Programmcode zur Durchführung des Verfahrens realisiert werden, wenn das Computerprogramm auf einem Computer abläuft.

Gemäß einem Ausführungsbeispiel kann die in 1 gezeigte Compiliereinrichtung 100 direkt in einem Prozessor implementiert sein. 4 zeigt einen solchen Prozessor oder Mikro-Controller mit einer Empfangseinrichtung 402 in der Compiliereinrichtung 100 sowie eine Recheneinrichtung 404. Die Empfangseinrichtung 402 ist ausgebildet, um die erste Programmsequenz 112 zu empfangen und an die Compiliereinrichtung 100 bereitzustellen. Die Compiliereinrichtung 100 ist ausgebildet, um die zweite Programmsequenz 114 aus der ersten Programmsequenz 112 zu erzeugen und an die Recheneinrichtung 404 bereitzustellen. Die Recheneinrichtung 404 ist ausgebildet, um die Befehle der zweiten Programmsequenz 114 auszuführen. Gemäß diesem Ausführungsbeispiel handelt es sich bei dem Befehlssatz, der von der Auswahleinrichtung der Compiliereinrichtung 100 verwendet wird, um einen Maschinenbefehlsatz, der der Recheneinrichtung 404 zugrunde liegt.

100
Compiliereinrichtung
102
Erkennungseinrichtung
104
Auswahleinrichtung
106
Erzeugungseinrichtung
112
erste Programmsequenz
114
zweite Programmsequenz
202
Bereitstellen der ersten Programmsequenz
204
Erkennen der Teilbereiche
206
Auswählen von Befehlen
208
Auswählen von Befehlen
210
Erzeugen der zweiten Programmsequenz
300a
Befehlssatz
300b
Befehlssatz
302a
Befehle der ersten Sicherheitskategorie
302b
Befehle der ersten Sicherheitskategorie
304a
Befehle der zweiten Sicherheitskategorie
304b
Befehle der zweiten Sicherheitskategorie
400
Prozessor
402
Empfangseinrichtung
404
Recheneinrichtung


Anspruch[de]
Compiliervorrichtung zum Erzeugen einer zweiten Programmsequenz (114) aus einer ersten Programmsequenz (112), wobei die erste Programmsequenz einen ersten Teilbereich mit einer ersten Sicherheitsstufe und einen von dem ersten Teilbereich, durch zumindest einen Indikator, unterscheidbaren zweiten Teilbereich mit einer zweiten Sicherheitsstufe aufweist, mit folgenden Merkmalen:

einer Erkennungseinrichtung (102) zum Erkennen des ersten Teilbereichs der ersten Programmsequenz und des zweiten Teilbereichs anhand des zumindest einen Indikators;

einer Auswahleinrichtung (104) zum Auswählen von Befehlen aus einem Befehlssatz der zweiten Programmsequenz (114), um eine Funktionalität der ersten Programmsequenz (112) auf die zweite Programmsequenz abzubilden, wobei der Befehlssatz Befehle (302a) einer ersten Sicherheitskategorie und Befehle (304a) einer zweiten Sicherheitskategorie aufweist, und wobei die Auswahleinrichtung ausgebildet ist, um zur Abbildung einer Funktionalität des ersten Teilbereichs nur Befehle der ersten Sicherheitskategorie und zur Abbildung einer Funktionalität des zweiten Teilbereichs nur Befehle der zweiten Sicherheitskategorie oder Befehle der ersten und der zweiten Sicherheitskategorie auzuwählen; und

eine Erzeugereinrichtung (106) zum Erzeugen der zweiten Programmsequenz aus dem von der Auswahleinrichtung ausgewählten Befehlen.
Compiliervorrichtung gemäß Anspruch 1, wobei die erste Sicherheitsstufe einem Bereich der ersten Programmsequenz zugeordnet ist, der aufgrund einer kritischen Funktionalität eine hohe Sicherheitsanforderung erforderlich macht, wobei die zweite Sicherheitsstufe einem Teilbereich der ersten Programmsequenz zugeordnet ist, der aufgrund einer unkritischen Funktionalität eine weniger hohe Sicherheitsanforderung erforderlich macht, wobei ein Befehl der ersten Sicherheitskategorie ein sicherer Befehl und wobei ein Befehl der zweiten Sicherheitskategorie ein unsicherer Befehl ist. Compiliervorrichtung gemäß einem der vorangegangenen Ansprüche, wobei die Befehle (302a) der ersten Sicherheitskategorie und die Befehle (304a) der zweiten Sicherheitskategorie einander sich nicht überschneidende Teilmengen des Befehlssatzes bilden. Compiliervorrichtung gemäß einem der Ansprüche 1 oder 2, wobei die Befehle (302b) der ersten Sicherheitskategorie und die Befehle (304b) der zweiten Sicherheitskategorie einander überschneidende Teilmengen des Befehlssatzes bilden. Compiliervorrichtung gemäß einem der vorangegangenen Ansprüche, wobei die Befehle (302a) der ersten Sicherheitskategorie für deterministische Angriffe unanfälliger sind als die Befehle (304a) der zweiten Sicherheitskategorie. Compiliervorrichtung gemäß einem der vorangegangenen Ansprüche, wobei die Befehle (304a) der zweiten Sicherheitskategorie Registerzugriffe ausführen. Compiliervorrichtung gemäß einem der vorangegangenen Ansprüche, ferner mit einer Einfügeeinrichtung, die ausgebildet ist, um beim Erkennen des zumindest einen Indikators einen Zusatzbefehl in die zweite Programmsequenz einzufügen, der in einer Ausführeinrichtung, die zur Ausführung der zweiten Programmsequenz geeignet ist, einen sicheren Modus aktiviert. Compiliervorrichtung gemäß Anspruch 7, wobei die Ausführeinrichtung einen Zwischenspeicher aufweist und wobei das Aktivieren des sicheren Modus ein Deaktivieren des Zwischenspeichers umfasst. Compiliervorrichtung gemäß einem der Ansprüche 7 oder 8, wobei der Zusatzbefehl ein Steuerregister der Ausführeinrichtung beschreibt. Compiliervorrichtung gemäß einem der vorangegangenen Ansprüche, wobei die erste Programmsequenz (112) einem Hochsprachenprogramm entspricht und ein Teilbereich der ersten Programmsequenz eine Funktion oder ein Modul des Hochsprachenprogramms darstellt. Compiliervorrichtung gemäß einem der vorangegangenen Ansprüche, wobei der erste Teilbereich eine Funktionalität eines Entschlüsselungs-Algorithmus oder eines Verschlüsselungs-Algorithmus realisiert, und wobei der zweite Teilbereich eine Funktionalität einer Datenempfangsroutine realisiert. Compiliervorrichtung gemäß einem der vorangegangenen Ansprüche, wobei es sich bei den Befehlen der ersten und zweiten Sicherheitskategorie um Assembler-Befehle handelt. Compiliervorrichtung gemäß einem der vorangegangenen Ansprüche, wobei die erste Programmsequenz einen weiteren Teilbereich mit einer, durch einen weiteren Indikator gekennzeichneten weiteren Sicherheitsstufe aufweist;

wobei die Erkennungseinrichtung (102) zum Erkennen des weiteren Teilbereichs der ersten Programmsequenz anhand des weiteren Indikators ausgebildet ist; und

wobei der Befehlssatz weitere Befehle einer weiteren Sicherheitskategorie aufweist, und wobei die Auswahleinrichtung ausgebildet ist, um zur Abbildung einer Funktionalität des weiteren Teilbereichs nur Befehle der weiteren Sicherheitskategorie auszuwählen.
Verfahren zum Erzeugen einer zweiten Programmsequenz aus einer ersten Programmsequenz, das folgende Schritte umfasst:

Bereitstellen (202) der ersten Programmsequenz (112), wobei die erste Programmsequenz einen ersten Teilbereich mit einer ersten Sicherheitsstufe und einen von dem ersten Teilbereich, durch zumindest einen Indikator, unterscheidbaren zweiten Teilbereich mit einer zweiten Sicherheitsstufe aufweist;

Erkennen (204) des ersten Teilbereichs der ersten Programmsequenz und des zweiten Teilbereichs anhand des zumindest einen Indikators;

Auswählen (206, 208) von Befehlen aus einem Befehlssatz der zweiten Programmsequenz (114), um eine Funktionalität der ersten Programmsequenz (112) auf die zweite Programmsequenz abzubilden, wobei der Befehlssatz Befehle (302a) einer ersten Sicherheitskategorie und Befehle (304a) einer zweiten Sicherheitskategorie aufweist, und wobei zur Abbildung einer Funktionalität des ersten Teilbereichs nur Befehle der ersten Sicherheitskategorie und zur Abbildung einer Funktionalität des zweiten Teilbereichs Befehle der zweiten Sicherheitskategorie oder Befehle der ersten und der zweiten Sicherheitskategorie ausgewählt werden; und

Erzeugen (210) der zweiten Programmsequenz aus dem von der Auswahleinrichtung ausgewählten Befehlen.
Computerprogramm mit Programmcode zur Durchführung des Verfahrens nach Anspruch 14, wenn das Computerprogramm auf einem Computer abläuft. Prozessor mit folgenden Merkmalen:

einer Empfangseinrichtung (402) zum Empfangen einer ersten Programmsequenz (112);

einer Compiliervorrichtung (100) gemäß einem der Anspruch 1 bis 13; und

einer Recheneinrichtung (404) zum Ausführen der Befehle der zweiten Programmsequenz (114);

wobei der Befehlssatz Maschinenbefehle aufweist, die von der Recheneinrichtung (404) ausgeführt werden können.






IPC
A Täglicher Lebensbedarf
B Arbeitsverfahren; Transportieren
C Chemie; Hüttenwesen
D Textilien; Papier
E Bauwesen; Erdbohren; Bergbau
F Maschinenbau; Beleuchtung; Heizung; Waffen; Sprengen
G Physik
H Elektrotechnik

Anmelder
Datum

Patentrecherche

Patent Zeichnungen (PDF)

Copyright © 2008 Patent-De Alle Rechte vorbehalten. eMail: info@patent-de.com