DE102005048029A1 - Compiliervorrichtung und Verfahren zum Compilieren - Google Patents

Compiliervorrichtung und Verfahren zum Compilieren Download PDF

Info

Publication number
DE102005048029A1
DE102005048029A1 DE102005048029A DE102005048029A DE102005048029A1 DE 102005048029 A1 DE102005048029 A1 DE 102005048029A1 DE 102005048029 A DE102005048029 A DE 102005048029A DE 102005048029 A DE102005048029 A DE 102005048029A DE 102005048029 A1 DE102005048029 A1 DE 102005048029A1
Authority
DE
Germany
Prior art keywords
program sequence
commands
security
functionality
category
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.)
Granted
Application number
DE102005048029A
Other languages
English (en)
Other versions
DE102005048029B4 (de
Inventor
Dietmar Scheiblhofer
Franz Klug
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Infineon Technologies AG
Original Assignee
Infineon Technologies AG
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Infineon Technologies AG filed Critical Infineon Technologies AG
Priority to DE102005048029A priority Critical patent/DE102005048029B4/de
Priority claimed from DE200510063499 external-priority patent/DE102005063499B4/de
Priority to US11/539,198 priority patent/US8627480B2/en
Publication of DE102005048029A1 publication Critical patent/DE102005048029A1/de
Application granted granted Critical
Publication of DE102005048029B4 publication Critical patent/DE102005048029B4/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Storage Device Security (AREA)

Abstract

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.

Description

  • 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 all gemeine 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 Funktiona litä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 Reihen folge 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 je doch 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 Pro grammsequenz, 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 Si cherheitskategorie 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 erfindungsge mäß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 Compilierein richtung 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

Claims (16)

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. Compiliervorrichtung gemäß einem der vorangegangenen Ansprüche, wobei die Befehle (304a) der zweiten Sicherheitskategorie Registerzugriffe ausführen.
  7. 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.
  8. Compiliervorrichtung gemäß Anspruch 7, wobei die Ausführeinrichtung einen Zwischenspeicher aufweist und wobei das Aktivieren des sicheren Modus ein Deaktivieren des Zwischenspeichers umfasst.
  9. Compiliervorrichtung gemäß einem der Ansprüche 7 oder 8, wobei der Zusatzbefehl ein Steuerregister der Ausführeinrichtung beschreibt.
  10. 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.
  11. 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.
  12. Compiliervorrichtung gemäß einem der vorangegangenen Ansprüche, wobei es sich bei den Befehlen der ersten und zweiten Sicherheitskategorie um Assembler-Befehle handelt.
  13. 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.
  14. 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.
  15. Computerprogramm mit Programmcode zur Durchführung des Verfahrens nach Anspruch 14, wenn das Computerprogramm auf einem Computer abläuft.
  16. 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.
DE102005048029A 2005-10-06 2005-10-06 Compiliervorrichtung und Verfahren zum Compilieren Active DE102005048029B4 (de)

Priority Applications (2)

Application Number Priority Date Filing Date Title
DE102005048029A DE102005048029B4 (de) 2005-10-06 2005-10-06 Compiliervorrichtung und Verfahren zum Compilieren
US11/539,198 US8627480B2 (en) 2005-10-06 2006-10-06 Compiler and method for compiling

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
DE102005048029A DE102005048029B4 (de) 2005-10-06 2005-10-06 Compiliervorrichtung und Verfahren zum Compilieren
DE200510063499 DE102005063499B4 (de) 2005-10-06 2005-10-06 Compiliervorrichtung und Verfahren zum Compilieren

Publications (2)

Publication Number Publication Date
DE102005048029A1 true DE102005048029A1 (de) 2007-04-12
DE102005048029B4 DE102005048029B4 (de) 2009-03-12

Family

ID=37886957

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102005048029A Active DE102005048029B4 (de) 2005-10-06 2005-10-06 Compiliervorrichtung und Verfahren zum Compilieren

Country Status (2)

Country Link
US (1) US8627480B2 (de)
DE (1) DE102005048029B4 (de)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2856377A1 (de) * 2012-06-01 2015-04-08 Intel Corporation Identifizierung und ausführung von untergruppen mehrerer befehle in einer ausführungsumgebung mit erhöhter sicherheit

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8812873B2 (en) 2012-09-26 2014-08-19 Intel Corporation Secure execution of a computer program using binary translators

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3067023B2 (ja) * 1988-09-29 2000-07-17 オムロン株式会社 ファジィデータ送信方法、ファジィデータ送信装置、ファジィデータ受信方法、ファジィデータ受信装置およびファジィデータ通信装置
US4979832A (en) * 1989-11-01 1990-12-25 Ritter Terry F Dynamic substitution combiner and extractor
US6199152B1 (en) * 1996-08-22 2001-03-06 Transmeta Corporation Translated memory protection apparatus for an advanced microprocessor
US6182203B1 (en) 1997-01-24 2001-01-30 Texas Instruments Incorporated Microprocessor
US6351797B1 (en) * 1997-12-17 2002-02-26 Via-Cyrix, Inc. Translation look-aside buffer for storing region configuration bits and method of operation
US6301647B1 (en) * 1997-12-17 2001-10-09 Via-Cyrix, Inc. Real mode translation look-aside buffer and method of operation
US6158048A (en) * 1998-05-29 2000-12-05 Intel Corporation Method for eliminating common subexpressions from java byte codes
US6704925B1 (en) * 1998-09-10 2004-03-09 Vmware, Inc. Dynamic binary translator with a system and method for updating and maintaining coherency of a translation cache
AU2001269354A1 (en) * 2000-05-12 2001-11-20 Xtreamlok Pty. Ltd. Information security method and system
US7103915B2 (en) * 2000-11-13 2006-09-05 Digital Doors, Inc. Data security system and method
US7346780B2 (en) * 2002-04-03 2008-03-18 Microsoft Corporation Integrity ordainment and ascertainment of computer-executable instructions
US7219239B1 (en) * 2002-12-02 2007-05-15 Arcsight, Inc. Method for batching events for transmission by software agent
US7509644B2 (en) * 2003-03-04 2009-03-24 Secure 64 Software Corp. Operating system capable of supporting a customized execution environment
US7996671B2 (en) * 2003-11-17 2011-08-09 Bluerisc Inc. Security of program executables and microprocessors based on compiler-architecture interaction
US7580520B2 (en) * 2004-02-14 2009-08-25 Hewlett-Packard Development Company, L.P. Methods for scaling a progressively encrypted sequence of scalable data
US7500115B2 (en) * 2005-06-03 2009-03-03 Dell Products L.P. Information handling system including a memory device capable of being powered by a battery

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
C for AIX Compiler Reference, May 2002 Edition. IBM. SC09-4960-00, pp. 276-279 <http://www-1.ibm. com/support/docview.wss?uid=swg27002098&aid=1> (recherchiert am 08.06.06) *

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2856377A1 (de) * 2012-06-01 2015-04-08 Intel Corporation Identifizierung und ausführung von untergruppen mehrerer befehle in einer ausführungsumgebung mit erhöhter sicherheit
EP2856377A4 (de) * 2012-06-01 2016-01-27 Intel Corp Identifizierung und ausführung von untergruppen mehrerer befehle in einer ausführungsumgebung mit erhöhter sicherheit
US9465946B2 (en) 2012-06-01 2016-10-11 Intel Corporation Identification and execution of subsets of a plurality of instructions in a more secure execution environment

Also Published As

Publication number Publication date
US20070133789A1 (en) 2007-06-14
DE102005048029B4 (de) 2009-03-12
US8627480B2 (en) 2014-01-07

Similar Documents

Publication Publication Date Title
EP3274825B1 (de) Verfahren und ausführungsumgebung zum gesicherten ausführen von programmbefehlen
DE102009041176B9 (de) Compiler-System und Verfahren zum Kompilieren eines Quellencodes zu einem verschlüsselten Maschinensprachcode
DE112017004843T5 (de) Technologien für deterministischen Codeflussintegritätsschutz
DE60127310T2 (de) Vorrichtung zum schutz digitaler daten
DE102007038763A1 (de) Verfahren und Vorrichtung zur Sicherung eines Programms gegen eine Kontrollflussmanipulation und gegen einen fehlerhaften Programmablauf
DE112010003971T5 (de) Vorübergehende Bereitstellung höherer Vorrechte für ein Rechensystem für eine Benutzerkennung
DE102012215196A1 (de) Schützen von Anwendungsprogrammen vor zerstörerischer Software oder Malware
DE102012205689A1 (de) Anweisungsverschlüsselungs-/-entschlüsselungsanordnung und -verfahren mit iterativer Verschlüsselungs-/Entschlüsselungsaktualisierung
EP1798653B1 (de) Verfahren, Computerprogrammprodukt und Vorrichtung zum Schützen eines einen Funktionsblock aufweisenden Programms
DE102016102945A1 (de) Code-Analyse zum Bereitstellen von Datenschutz in ETL-Systemen
DE102014214792A1 (de) Vorrichtung und Verfahren zum Zugreifen auf einen verschlüsselten Speicherabschnitt
DE102005048029B4 (de) Compiliervorrichtung und Verfahren zum Compilieren
WO2020025463A1 (de) Verfahren zum analysieren von quelltexten
DE102020131154A1 (de) Gefährdungsabschwächung für leichte Prozessorkerne
DE102004057490A1 (de) Vorrichtung und Verfahren zum Verarbeiten eines Programmcodes
EP1439446A1 (de) Verfahren zum Erweitern eines Programms um eine Kopierschutzfunktion
DE102005063499B4 (de) Compiliervorrichtung und Verfahren zum Compilieren
Talukder et al. Analysis of obfuscated code with program slicing
DE102011006000B4 (de) Signaturaktualisierung durch Codetransformation
DE10340411A1 (de) Vorrichtung und Verfahren zur sicheren Ausführung eines Programms
DE102005046696B4 (de) Verfahren zum Erzeugen von geschütztem Programmcode und Verfahren zum Ausführen von Programmcode eines geschützten Computerprogramms sowie Computerprogrammprodukt
DE102004011488B4 (de) Schutz von Software gegen Angriffe
EP3745287B1 (de) Schützen einer softwareapplikation
DE102005006832B4 (de) Schaltungsanordnung und Verfahren zur gesicherten Datenverarbeitung und deren Verwendung
WO2013068217A1 (de) Verfahren zum schutz gegen reverse-engineering eines computerprogramms

Legal Events

Date Code Title Description
OP8 Request for examination as to paragraph 44 patent law
8172 Supplementary division/partition in:

Ref document number: 102005063499

Country of ref document: DE

Kind code of ref document: P

Q171 Divided out to:

Ref document number: 102005063499

Country of ref document: DE

Kind code of ref document: P

AH Division in

Ref document number: 102005063499

Country of ref document: DE

Kind code of ref document: P

8364 No opposition during term of opposition