PatentDe  


Dokumentenidentifikation DE102006031790A1 17.01.2008
Titel Abgesicherter Programmcode
Anmelder Giesecke & Devrient GmbH, 81677 München, DE
Erfinder Baldischweiler, Michael, 81825 München, DE
DE-Anmeldedatum 10.07.2006
DE-Aktenzeichen 102006031790
Offenlegungstag 17.01.2008
Veröffentlichungstag im Patentblatt 17.01.2008
IPC-Hauptklasse G06F 12/14(2006.01)A, F, I, 20060710, B, H, DE
IPC-Nebenklasse G06F 21/24(2006.01)A, L, I, 20060710, B, H, DE   
Zusammenfassung Eine Simulationsvorrichtung (10) zur Simulation einer von der Simulationsvorrichtung (10) verschiedenen Computerplattform umfasst in einem sicheren Speicherbereich (33) eines Speichers (30) einen abgesicherten Programmcode (34), der auf der Computerplattform lauffähig ist und von einer Simulationseinrichtung (20) der Simulationsvorrichtung (10) ausgeführt werden kann. Der abgesicherte Programmcode liegt in dem sicheren Speicherbereich verschlüsselt vor und wird von einer Sicherheitseinrichtung (40) der Simulationsvorrichtung (10) nur zur Ausführung des Programmcodes (34) durch den Simulator (20) entschlüsselt.

Beschreibung[de]

Die Erfindung betrifft ein Verfahren und eine Vorrichtung zum Absichern eines auf einer Computerplattform ausführbaren Programmcodes in einem Simulator der Computerplattform.

Bei der Entwicklung von Software, z.B. von Betriebssystemen oder Applikationen für Chipkarten, Smart Cards, Mobilfunkkarten, sicheren Multimediakarten und ähnlichen spezialisierten portablen Datenträgern, wird die Software in der Regel nicht direkt auf der betreffenden Zielcomputerplattform entwickelt und ausgetestet, sondern auf einem Simulator und/oder Emulator, der die entsprechende Zielcomputerplattform bzw. den dort eingesetzten Prozessor/Mikrocontroller in einer separaten Entwicklungsumgebung nachbildet. Dies ist insbesondere für die Debugging-Phase der Softwareentwicklung sinnvoll, in der der auszutestende Programmcode und seine Interaktion mit der Zielcomputerplattform schrittweise nachvollzogen und auf ein korrektes Verhalten überprüft werden kann, denn das Debugging in einem Simulator ermöglicht die schnelle und einfache Fehlersuche ohne den zu testenden Programmcode auf der Zielplattform, möglicherweise fest verdrahtet, installieren zu müssen.

Bei der verteilten Softwareentwicklung für kommerzielle Computerplattformen stellt sich somit das Problem, dass ein für die Zielplattform entwickelter Programmcode, z.B. das Betriebssystem einer Chipkarte, zwar von Drittanbietern, die z.B. ergänzende Applikationen entwickeln, in einem Simulator mit Debugger ausführbar sein muss, der eigentliche Programmcode bzw. seine Algorithmik jedoch vor Nachahmung und Übernahme durch den Drittanbieter geschützt sein muss.

Demzufolge ist es die Aufgabe der vorliegenden Erfindung, einen zur Weiterentwicklungen durch einen Drittanbieter bereitgestellten Programmcode vor Auslesen und Nachahmen durch den Drittanbieter zu schützen.

Diese Aufgabe wird erfindungsgemäß durch ein Verfahren und eine Vorrichtung zum Absichern eines Programmcodes in einem Simulator mit den Merkmalen der unabhängigen Ansprüche gelöst. Die abhängigen Ansprüche beschreiben vorteilhafte Ausgestaltungen und Weiterbildungen der Erfindung.

Zum Absichern eines auf einer Computerplattform ausführbaren Programmcodes, der in einem Simulator dieser Computerplattform weiterentwickelt oder zur Entwicklung von weiteren Applikationen benötigt wird, wird der abzusichernde Programmcode verschlüsselt hinterlegt und nur dann entschlüsselt, wenn er in dem Simulator ausgeführt wird. Bei einer Simulationsvorrichtung, die einen Simulator der Computerplattform zum Ausführen und einen Speicher zum Speichern des abzusichernden Programmcodes umfasst, wird der Programmcode erfindungsgemäß durch ein verschlüsseltes Hinterlegen in dem Speicher abgesichert, wobei eine Sicherheitseinrichtung der Simulationsvorrichtung den abgesicherten Programmcode jeweils nur dann temporär entschlüsselt, wenn er in dem Simulator ausgeführt wird.

Auf diese Weise kann der abgesicherte Programmcode zwar in dem Simulator ausgeführt werden, es ist jedoch aufgrund der Verschlüsselung nicht möglich, die genaue Funktionsweise des Programmcodes bzw. den durch ihn implementierten Algorithmus analytisch nachzuvollziehen, da dies nur bei einem unverschlüsselt vorliegenden Programmcode möglich ist. Der abgesicherte Programmcode kann zwar zur Entwicklung von Applikationen, die mit dem Programmcode interagieren, dessen Routinen aufrufen, ausgeführt werden, die Möglichkeit des Auslesens des Programmcodes oder des Rekonstruieren des ihm zugrundeliegenden Algorithmus besteht jedoch nicht. Ein erfindungsgemäß abgesicherter Programmcode kann deshalb an einen Drittanbieter zum Entwickeln und Austesten von ergänzenden Applikationen in Interaktion mit dem abgesicherten Programmcode gefahrlos herausgegeben werden. Insbesondere kann ein Drittanbieter ein abgesichertes Betriebssystem in einem Simulator der Zielcomputerplattform im Rahmen von Eigenentwicklungen debuggen, ohne dass algorithmische oder implementatorische Details des Betriebssystems bekannt werden.

Der durch Verschlüsselung abgesicherte Programmcode wird von der Sicherheitseinrichtung in einem hierfür vorgesehenen sicheren Speicherbereich des Speichers der Simulationsvorrichtung derart abgelegt, dass zunächst nur die Sicherheitseinrichtung auf diesen Speicherbereich zugreifen kann. Dazu kann der abgesicherte Programmcode direkt in bereits verschlüsselter Form in den sicheren Speicherbereich eingespielt werden. Ebenso kann die Sicherheitseinrichtung den abzusichernden Programmcode in unverschlüsselter Form aufnehmen und vor dem Einspielen in den sicheren Speicherbereich selbst verschlüsselt, z.B. mittels des asymmetrischen RSA-Algorithmus oder anderer geeigneter Verschlüsselungsverfahren.

Gleichzeitig kontrolliert die Sicherheitseinrichtung jeden Zugriff auf den sicheren Speicherbereich, um Manipulationen und unautorisierte Zugriffe auf den abgesicherten Programmcode zu erkennen und zu verhindern. Einen Zugriff auf den sicheren Speicherbereich durch den Simulator erkennt die Sicherheitseinrichtung beispielsweise dadurch, dass sie einen Programmzähler des Simulators auslesen kann, der die Speicheradresse des jeweils nächsten auszuführenden Befehls angibt, und dadurch eine in den sicheren Speicherbereich weisende Speicheradresse erkennt.

Ein auszuführender, abgesicherter Programmcode, z.B. eine Betriebssystemroutine der Zielcomputerplattform, wird vor seiner Ausführung durch die Sicherheitseinrichtung entweder vollständig entschlüsselt und befehlsweise abgearbeitet, oder es wird jeder auszuführende Befehl des Programmcodes einzeln entschlüsselt und anschließend ausgeführt bevor der nächste Befehl entschlüsselt wird. Die entschlüsselten Befehle des Programmcodes können dabei von dem Simulator ausgeführt werden, nachdem der entschlüsselte Programmcode bzw. der jeweils entschlüsselte Befehl von der Sicherheitseinrichtung an den Simulator weitergeleitet wurde. Alternativ ist es auch möglich, dass die Sicherheitseinrichtung den entschlüsselten Programmcode bzw. einen entschlüsselten Befehl unter Umgehung des Simulators direkt ausführt, also temporär die Kontrolle über die Programmabarbeitung von dem Simulator übernimmt. In diesem Fall muss die Sicherheitseinrichtung jedoch nach Abarbeitung aller Befehle des abgesicherten Programmcodes die Registerzustände des Simulators, insbesondere den Programmzähler, entsprechend aktualisieren, bevor dem Simulator die Programmausführung wieder übertragen werden kann. Die Sicherheitseinrichtung umfasst dann eine eigene Befehlsausführungseinheit für den z.B. als Hexadezimalcode vorliegenden Programmcode.

Im Verlauf der Ausführung von Befehlen des abgesicherten Programmcodes kann der Programmzähler des Simulators nach jedem ausgeführten Befehl aktualisiert, d.h. auf die Speicheradresse des nächsten auszuführenden Befehls gesetzt werden, oder der Programmzähler kann erst dann weitergesetzt werden, wenn alle Befehle des abgesicherten Programmcodes abgearbeitet sind und der nächste auszuführende Befehl nicht im sicheren Speicherbereich liegt. In diesem Fall wird der Programmzähler auf diese Speicheradresse außerhalb des sicheren Speicherbereichs gesetzt, damit der Simulator diesen Befehl ausführen kann.

Falls der abgesicherte Programmcode in einem innerhalb der Simulationsumgebung aufrufbaren Debugger ausgeführt wird, verhindert die Sicherheitseinrichtung eine Ablaufverfolgung des Programmcodes im Debugging-Modus. Der Programmcode kann dann zwar in dem Debugger ausgeführt werden aber nicht schrittweise nachvollzogen werden, selbst wenn der Programmcode spezielle Debugging-Information umfassen sollte. Falls in der Simulationsvorrichtung ein von dem gesicherten Programmcode verschiedener ungesicherter Programmcode installiert ist, der den gesicherten Programmcode oder einzelne Routinen des gesicherten Programmcodes aufruft, wird die aufgerufene Routinen derart ausgeführt, dass ein Austesten der Funktionalität des ungesicherten Programmcodes und dessen Interaktion mit dem gesicherten Programmcode möglich ist, eine echte Verzweigung in den abgesicherten Programmcode zu dessen Ablaufverfolgung wird jedoch unterbunden. Zum Debugging einer Applikation werden zudem Speicheradressen in dem sicheren Speicherbereich angegeben, die auf eine offene Schnittstelle in dem gesicherten Programmcode verweisen, um eine ungesicherte Applikation mit entsprechenden Basisroutinen des abgesicherten Programmcodes koppeln zu können. Wird bei einer schrittweisen Ablaufverfolgung einer auszutestenden Applikation z.B. eine solche Basisroutine eines abgesicherten Betriebssystems aufgerufen, so wird diese in einem zusammenhängenden Zyklus abgearbeitet, so dass ein Verzweigen in den Programmcode nicht möglich ist.

Die Simulationsvorrichtung kann als Entwicklungscomputer ausgestaltet sein, auf dem ein Simulationsprogramm als Simulator einer bestimmten Zielcomputerplattform, z.B. einer Chipkarte oder dergleichen, sowie ein mit dem Simulationsprogramm interagierendes Sicherheitsprogramm als erfindungsgemäße Sicherheitseinrichtung implementiert ist. Hierbei ist z.B. ein Chipkarten-Betriebssystem, das auf dem Chipkarten-Simulator des Entwicklungscomputers ausgeführt wird, bei der Entwicklung von Applikationen oder Applets für dieses Betriebsystem durch einen Drittanbieter vor Auslesen und Nachvollziehen im Debugger geschützt, während die Applikation ohne Einschränkungen der Betriebssystemfunktionalität oder der Debugging-Möglichkeiten entwickelt und ausgetestet werden kann. Zudem ist es aufgrund der erfindungsgemäß erforderlichen Interaktionen zwischen dem Simulationsprogramm und dem Sicherheitsprogramm sowohl möglich, beide als separate, interagierende Softwarekomponenten auf dem Entwicklungscomputer zu implementieren, als auch das Sicherheitsprogramm als erfindungsgemäße Erweiterung des Simulationsprogramms zu implementieren, z.B. als Programmbibliothek bzw. DLL („Dynamic Linked Library").

Da die Sicherheitseinrichtung sämtliche Zugriffe auf den sicheren Speicherbereich kontrolliert, erkennt sie z.B. auch die Anforderung eines Speicherauszugs („Memory Dump") des sicheren Speicherbereichs. Ein Speicherauszug kann dann entweder insgesamt verweigert oder derart maskiert werden, dass ein Auslesen oder Nachvollziehen des gesicherten Programmcodes nicht möglich ist, z.B. durch Ausgabe von konstanten Werten.

Weitere Merkmale und Vorteile der Erfindung ergeben sich aus der folgenden Beschreibung verschiedener erfindungsgemäßer Ausführungsbeispiele und Ausführungsalternativen in Zusammenhang mit den begleitenden Zeichnungen. Darin zeigen:

1 eine erfindungsgemäß ausgestaltete Simulationsvorrichtung mit einer Sicherheitseinrichtung;

2 eine schematisierte Darstellung einer Simulationsvorrichtung mit einem Debugger;

3 eine Darstellung eines erfindungsgemäßen Verfahrens; und

4 einen Simulationscomputer nach dem Stand der Technik.

Bei der Softwareentwicklung für spezialisierte oder proprietäre Computerarchitekturen und deren Mikrocontroller, wie z.B. für Chipkarten, Smart Cards und anderen digitalen Datenträgern für spezifische Einsatzgebiete, werden häufig Simulatoren und/oder Emulatoren eingesetzt. Die Softwareentwicklung findet dann nicht auf der eigentlichen Zielcomputerplattform statt, für die sie entwickelt wird, sondern in einer Entwicklungsumgebung, die diese Computerplattform mit ihrem Mikrocontroller simuliert.

Eine solche Entwicklungsumgebung zeigt 4. Die Simulationsvorrichtung 10 ist als Entwicklungscomputer ausgestaltet, der in der Regel sämtliche Standardkomponenten einer üblichen Computerumgebung umfasst, insbesondere einen Prozessor 11 (CPU), eine adäquate Speicherhierarchie 30 (MEM), die zumindest aus einem Arbeitsspeicher und einem oder mehreren nachgeordneten Sekundärspeichern besteht, sowie diverse Peripheriegeräte 13, wie z.B. geeignete Kommunikationsschnittstellen mit UART-Bausteinen, spezialisierte Co-Prozessoren, z.B. für kryptographische Zwecke, und dergleichen. Die zentrale Steuerung dieser Komponenten übernimmt das Betriebssystem 12 (OS), neben dem zusätzlich ein Simulator 20 (SIM) installiert ist, der mit dem Betriebssystem 12 in Interaktion steht und die simulierte Entwicklungsumgebung der Zielcomputerplattform bereitstellt. Die Zielcomputerplattform wird von dem Simulationsprogramm 20 dabei so genau nachgebildet, dass ein Programmcode 32 eines in der Simulationsumgebung entwickelten Programms (PRG) mit identischem Verhalten auf der simulierten Computerplattform lauffähig ist. Der Simulator 20 bindet also auch die Hardwarekomponenten des Simulationscomputers 10 derart ein, dass die Hardwarekomponenten der simulierten Computerplattform nachgebildet werden. Aus diesem Grund kann eine Softwareentwicklung für die Zielplattform kostengünstig und flexibel innerhalb des Simulators 20 auf dem Entwicklungscomputer 10 stattfinden, ohne dass die Software auf der Zielplattform installiert werden muss.

Der Simulator 20 repräsentiert also ein auf dem Prozessor 11 unter Kontrolle des Betriebssystems 12 lauffähiges Simulationsprogramm, das mit dem Betriebssystem 12 in Interaktion steht (A) und die Speicher 30 und Peripheriegeräte 13 des Simulationscomputers 10 auf die gleiche Art und Weise wie die simulierte Zielplattform anspricht (B). In dem Speicher 30 ist dabei ein in dem Simulator 20 zu entwickelnder oder zu testender und auf der Zielplattform lauffähiger Programmcode 32 hinterlegt. Der Simulator 20 umfasst u.a. ein Programmzählerregister 21 (PC), in dem diejenige Speicheradresse des Speichers 30 verzeichnet ist, an der der nächste von dem Simulator 20 auszuführende Befehl des Programmcodes 32 liegt. Bei der Ausführung eines solchen Befehls lädt der Simulator 20 den Inhalt dieser Speicheradresse und führt ihn als Befehl aus. Anschließend wird der Programmzähler 21 auf die neue Speicheradresse des nächsten auszuführenden Befehls des Programmcodes 32 weitergesetzt.

Darüber hinaus umfasst ein Simulator 20 der Entwicklungsumgebung 10 meist einen Debugger, um schnell und einfach semantische Fehler in dem Programmcode 32 zu finden, dessen Performance zu bewerten, Schnittstellen zu anderen Programmcodes auszutesten und dergleichen.

Ausgehend von der Anordnung der 4 zeigt 1 einen erfindungsgemäß eingerichteten Entwicklungscomputer 10, der zusätzlich über eine Sicherheitseinrichtung 40 verfügt, die einerseits in enger Interaktion mit dem Simulator 20 steht (D1) und andererseits einen sicheren Speicherbereich 33 in dem Speicher 30 kontrolliert (F1).

Um einen abzusichernden Programmcode 34, insbesondere das Betriebssystem der Zielcomputerplattform (CODE OS), gegenüber Auslesen und Nachvollziehen durch Nichtberechtigte abzusichern, wenn der Programmcode 34 in einem Simulator 20 bei einem Fremdanbieter vorliegt, wird der abzusichernde Programmcode 34 in einem sicheren Speicherbereich 33 (SEC MEM) des Speichers 30 von der Sicherheitseinrichtung 40 verschlüsselt hinterlegt. Dadurch ist der Programmcode 34 lediglich für die Sicherheitseinrichtung 40, die über eine entsprechende Kryptographiefunktionalität 41 verfügt, zugänglich und vor unberechtigtem Auslesen geschützt.

Neben dem verschlüsselten Programmcode 34 in dem sicheren Speicherbereich 33 sind in dem Speicher 30 zumeist auch ungesicherte Programmcodes 32 vorhanden, beispielsweise von Drittanbietern bereitgestellte weitere Applikationen. Falls der Simulator 20 über seinen Programmzähler 21 durch einen entsprechenden Zeiger 22 auf einen auszuführenden Befehl des abgesicherten Programmcodes 34 verweist, erkennt die Sicherheitseinrichtung 40 die in dem Programmzähler 21 des Simulators 20 vorhandene Speicheradresse des sicheren Speicherbereichs 33 (E). Zur Ausführung des an dieser Speicheradresse vorliegenden verschlüsselten Befehls muss er zunächst von der Sicherheitseinrichtung 40 mittels ihrer Kryptographiefunktion 41 entschlüsselt werden (F1), bevor er ausgeführt werden kann. Hierbei gibt es sowohl die Möglichkeit, dass der gesamte auszuführende verschlüsselte Programmcode 34 vor der Ausführung entschlüsselt wird, oder nur jeweils derjenige Befehl des Programmcodes 34, der unmittelbar auszuführen ist. Letzteres erhöht das Sicherheitsniveau, da niemals der gesamte abgesicherte Programmcode 34 vollständig entschlüsselt verfügbar ist.

Zur Ausführung eines entschlüsselten Befehls des Programmcodes 34 gibt es einerseits die Möglichkeit, dass der Befehl von der Sicherheitseinrichtung 40 an den Simulator 20 weitergeleitet und von diesem schließlich ausgeführt wird (G1). Andererseits ist auch möglich, dass die Sicherheitseinrichtung 40 selbst Befehle unmittelbar und unter Umgehung des Simulators 20 laden und ausführen kann (G2). In diesem Zusammenhang ist es zweckmäßig, dass bei der Ausführung eines verschlüsselten Programmcodes die Kontrolle über die Programmausführung vollständig von dem Simulator 20 auf die Sicherheitseinrichtung 40 übergeht, um den Kommunikationsaufwand während der Ausführung des abgesicherten Programmcodes 34 zu minimieren. Nach der Beendigung der Ausführung des verschlüsselten Programmcodes 34 wird die Kontrolle über den Programmablauf wieder von der Sicherheitseinrichtung 40 an den Simulator 20 zurückgegeben, indem der Programmzähler 21 und sämtliche anderen benötigten Register des Simulators 20 entsprechend aktualisiert werden.

Da die Sicherheitseinrichtung 40 und der Simulator 20 bei der vorliegenden Erfindung in enger Interaktion stehen (D1), kann es zweckmäßig sein, die Sicherheitseinrichtung 40 bzw. deren Funktionalität direkt in den Simulator 20 zu integrieren und nicht, wie in 2 dargestellt, als eigenständiges Sicherheitsprogramm 40 neben dem Simulationsprogramm 20 vorzusehen. Insofern ist es auch möglich, die Funktionalität der Sicherheitseinrichtung 40 als Programmbibliothek, z.B. als dynamisch aufzurufende DLL („Dynamic Linked Library") zu implementieren, auf deren Funktionen der Simulator 20im Bedarfsfalle zurückgreift. Insofern kann eine derartige Sicherheitsbibliothek 40 zusätzliche Funktionalitäten in den Simulator 20 einbringen, die es ermöglichen, einen abzusichernden Programmcode 34 in verschlüsselter Form in den sicheren Speicherbereich 33 einzuspielen und diesen im Bedarfsfalle zu entschlüsseln.

2 zeigt eine Ausführungsform der vorliegenden Erfindung, bei der zum Zwecke der Fehlersuche und Weiterentwicklung eines ungeschützten Programmcodes 32 ein Debugger 23 in dem Simulator 20 ausgeführt werden kann, der wiederum unter Einfluss der Sicherheitseinrichtung 40 steht (D2). Bei der Ausführung des ungesicherten Programms 32 in dem Debugger 23 kann der Ablauf des Programmcodes 32 verfolgt werden, so dass jeweils einzelne Befehle schrittweise und nachvollziehbar für den Entwickler ausgeführt und auf ihre Korrektheit überprüft werden können (G3).

Besonders wenn ein Betriebssystem der simulierten Computerplattform als abgesicherter Programmcode 34 in dem sicheren Speicherbereich 33 liegt, kommt es häufig vor, dass ein ungesicherter Programmcode 32 eine Routine 35 des abgesicherten Betriebssystems 34 in dem Debugger 23 aufruft (H1), so dass der Debugger 23 zunächst versucht, eine Ablaufverfolgung der Betriebssystemroutine 35 vorzunehmen (G4). Ein solcher Zugriff des Debuggers 23 auf den sicheren Speicherbereich 33 wird jedoch von der Sicherheitseinrichtung 40 über die Überwachung des Programmzählers 21 erkannt (E) und in der Weise unterbunden (F2), dass zwar die Routine 35 ausgeführt wird und ihre Wirkung entfaltet, die Ablaufverfolgung des Programmcodes der Routine 35 in dem Debugger 23 jedoch nicht gestattet wird. Auf diese Weise kann ein Entwickler des ungesicherten Programmcodes 32 diesen zwar mit Hilfe des Debuggers 23 auch in seiner Interaktion mit gesicherten Betriebssystemroutinen 35 austesten, eine Ablaufverfolgung, die einen Rückschluss auf den Programmcodes des gesicherten Betriebssystems 34 und seiner Routinen 35 zulässt, ist jedoch nicht möglich. In diesem Zusammenhang werden auch Schnittstellenadressen des gesicherten Betriebssystems 34 angegeben, um die ungesicherten Applikationsfunktionen 32 mit den Basisfunktionen und -routinen 35 des gesicherten Betriebssystems 34 koppeln zu können. Wird bei der schrittweise Ablaufverfolgung die Applikation 32 durchlaufen und eine Basisroutine 35 des Betriebssystems 34 aufgerufen (H1), so wird diese in einem zusammenhängenden Zyklus abgearbeitet, so dass ein Verzweigen in den Programmcode der Betriebssystemroutine 35 nicht möglich ist. Nach dem Rücksprung (H2) im Anschluss an die Ausführung der Routine 35 ist ein normales Debugging der ungesicherten Applikation 32 wieder möglich.

Neben den geschilderten Zugriffen auf den sicheren Speicherbereich 33 erkennt die Sicherheitseinrichtung 40 außerdem auch die Anforderung eines Speicherauszugs („Dump") des sicheren Speicherbereichs 33 und übernimmt diese Anfrage von dem Simulator 20. Ein herkömmlicher Speicherauszug des sicheren Speicherbereichs 33 wird von der Sicherheitseinrichtung 40 nicht erstellt, stattdessen wird lediglich ein maskierter Speicherauszug bereitgestellt, dem der gesicherte Programmcode 34 nicht zu entnehmen ist. Beispielsweise kann ein solcher Speicherauszug mit ausschließlich konstanten Werten erzeugt werden, z.B. Nullwerten 0x00.

3 zeigt schließlich beispielhaft eine Ausgestaltung des erfindungsgemäßen Verfahrens. In Schritt S1 spielt die Sicherheitseinrichtung 40 den verschlüsselten abgesicherten Programmcode 34, beispielsweise das Betriebssystem der zu simulierenden Computerplattform, in den sicheren Speicherbereich 33 ein (IMPORT ENCRYPTED CODE). Alternativ ist es möglich, dass die Sicherheitseinrichtung 40 den abzusichernden Programmcode unverschlüsselt erhält, ihn mittels ihrer Kryptographiefunktion 41 verschlüsselt, beispielsweise durch herkömmliche Verschlüsselungsverfahren wie z.B. RSA, und im sicheren Speicherbereich 33 ablegt.

Anschließend wird in Schritt S2 die Überwachung sämtlicher Zugriffe auf den sicheren Speicherbereich 33 aufgenommen (MONITOR SECMEM), insbesondere durch den Simulator 20, einen Debugger 23 oder eine Betriebssystemroutinen 35 aufrufende ungesicherte Applikation 32. Ein solcher Zugriff auf den sicheren Speicherbereich 33 wird beispielsweise in Schritt S3 durch eine im Programmzähler 21 des Simulators 20 hinterlegte Speicheradresse des sicheren Speicherbereichs 33 erkannt (PC POINTING TO SECMEM). Anschließend übernimmt in Schritt S4 die Sicherheitseinrichtung 40 die Kontrolle über den weiteren Programmablauf von dem Simulator 20 und aktualisiert auch jeweils den Programmzähler 21 des Simulators 20 (TAKE CONTROL). Dies kann beispielsweise in der Weise geschehen, dass bei jedem Befehl eines ausgeführten abgesicherten Programmcodes 34 die entsprechende Speicheradresse im sicheren Speicherbereich 33 im Programmzähler 21 aktualisiert wird.

Nach der Entschlüsselung entweder der vollständigen aufgerufenen Betriebsystemroutine 35 oder eines Befehls dieser Routine 35 in Schritt S5 (DECRYPT CODE) wird die entschlüsselte Betriebssystemroutine 35 in Schritt S6 ausgeführt (EXEC SEC ROUTINE). Anschließend gibt die Sicherheitseinrichtung 40 in Schritt S7 die Kontrolle über die Programmausführung wieder an den Simulator 20 zurück (RETURN CONTROL), indem sämtliche Register des Simulators 20 aktualisiert werden, so dass der Simulator 20 den in dem Programmzähler 21 verzeichneten nächsten ungesicherten Befehl ausführen kann.

Alternativ zu dem schrittweisen Aktualisieren des Programmzählers 21 durch die Sicherheitseinrichtung 40 ist es auch möglich, dass der Programmzähler 21 nicht aktualisiert wird, solange die Sicherheitseinrichtung 40 eine abgesicherte Betriebssystemroutine 35 ausführt, sondern erst von der Sicherheitseinrichtung 40 weitergesetzt wird, wenn der nächste auszuführende Befehl nicht im sicheren Speicherbereich 34 liegt, d.h. wenn die Kontrolle über die Programmausführung an den Simulator 20 zurückfällt (Schritt S8). Der Programmzähler 21 wird also erst dann weitergesetzt (UPDATE PC), wenn alle Befehle im sicheren Speicherbereich abgearbeitet sind und der Programmzähler 21 auf eine Stelle im Speicherbereich zeigt, die keinen verschlüsselten Befehl enthält.


Anspruch[de]
Verfahren zum Absichern eines auf einer Computerplattform ausführbaren Programmcodes (34) in einem Simulator (20) der Computerplattform, dadurch gekennzeichnet, dass der abzusichernde Programmcode (34) in dem Simulator (20) verschlüsselt vorliegt und nur beim Ausführen des verschlüsselten Programmcodes (34) entschlüsselt wird (S5). Verfahren nach Anspruch 1, dadurch gekennzeichnet, dass der abzusichernde Programmcode (34) verschlüsselt in einen hierfür vorgesehenen sicheren Speicherbereich eingespielt wird (S1), auf den der Simulator (20) keinen unmittelbaren Zugriff hat. Verfahren nach Anspruch 2, dadurch gekennzeichnet, dass Zugriffe auf den sicheren Speicherbereich (33) kontrolliert werden (F1; F2), wobei ein Zugriff auf den sicheren Speicherbereich (33) anhand einer in den sicheren Speicherbereich (33) verweisenden Speicheradresse in einem Programmzähler (21) des Simulators (20) erkannt wird (E). Verfahren nach Anspruch 3, dadurch gekennzeichnet, dass beim Ausführen (S6) des ausführbare Befehle umfassenden, verschlüsselten Programmcodes (34) alle Befehle oder lediglich der jeweils auszuführende Befehl des verschlüsselten Programmcodes (34) von einer Sicherheitseinrichtung (40) entschlüsselt werden/wird (S5). Verfahren nach Anspruch 4, dadurch gekennzeichnet, dass die entschlüsselten Befehle des verschlüsselten Programmcodes (34) von der Sicherheitseinrichtung (40) dem Simulator (20) zugeleitet und von diesem ausgeführt werden (G1; S6). Verfahren nach Anspruch 4, dadurch gekennzeichnet, dass die entschlüsselten Befehle des verschlüsselten Programmcodes (34) von der Sicherheitseinrichtung (40) ausgeführt werden (G2; S6). Verfahren nach Anspruch 6, dadurch gekennzeichnet, dass ein Programmzähler (21) des Simulators (20) nur dann auf den nächsten auszuführenden Befehl weitergesetzt wird (S8), wenn der nächste auszuführende Befehl nicht in dem sicheren Speicherbereich (33) liegt. Verfahren nach einem der Ansprüche 1 bis 7, dadurch gekennzeichnet, dass beim Ausführen (S6) des verschlüsselten Programmcodes (34) in einem in dem Simulator (20) ausführbaren Debugger (23) eine Ablaufverfolgung des verschlüsselten Programmcodes (34) verhindert wird. Verfahren nach Anspruch 8, dadurch gekennzeichnet, dass beim Aufrufen einer Routine (35) des verschlüsselten Programmcodes (34) durch einen auf der Computerplattform ausführbaren ungesicherten Programmcode (32) in dem Debugger (23), die Routine (35) des verschlüsselten Programmcodes (34) ausgeführt wird (S6) und ein Verzweigen in den verschlüsselten Programmcode (34) der Routine (35) zur Ablaufverfolgung verhindert wird (F2). Verfahren nach einem der Ansprüche 1 bis 8 und 9, dadurch gekennzeichnet, dass der abgesicherte, verschlüsselte Programmcode (34) ein Betriebssystem der Computerplattform repräsentiert und der ungesicherte Programmcode (32) eine unter dem Betriebssystem der Computerplattform ausführbare Applikation repräsentiert. Verfahren nach einem der Ansprüche 1 bis 10, dadurch gekennzeichnet, dass bei einer Erstellung eines Speicherauszugs des sicheren Speicherbereichs (33) der verschlüsselte Programmcode (34) in dem Speicherauszug derart maskiert wird, dass der abgesicherte Programmcode (34) nicht nachvollzogen wenden kann. Sicherheitseinrichtung (40) zur Realisierung eines Verfahrens nach einem der Ansprüche 1 bis 11, dadurch gekennzeichnet, dass die Sicherheitseinrichtung ein auf einem Simulationscomputer (10) ausführbares Sicherheitsprogramm (40) ist und mit einem auf dem Simulationscomputer (10) implementierten Simulationsprogramm (20) als Simulator einer von dem Simulationscomputer (10) verschiedenen Computerplattform zusammenwirkt. Sicherheitseinrichtung (40) nach Anspruch 12, dadurch gekennzeichnet, dass die Sicherheitseinrichtung (40) als Programmbibliothek in das Simulationsprogramm (20) integriert ist. Simulationsvorrichtung (10) zur Simulation eines auf einer von der Simulationsvorrichtung (10) verschiedenen Computerplattform ausführbaren abgesicherten Programmcodes (34), umfassend einen Simulator (20) der Computerplattform zum Ausführen des Programmcodes (34) und einen Speicher (30) zum Speichern zumindest des Programmcodes (34), dadurch gekennzeichnet, dass der abgesicherte Programmcode (34) in dem Speicher (30) verschlüsselt vorliegt und durch eine Sicherheitseinrichtung (40), die eingerichtet ist, den abgesicherten Programmcode (34) bei Ausführung des Programmcodes (34) durch den Simulator (20) zu entschlüsseln. Vorrichtung nach Anspruch 14, dadurch gekennzeichnet, dass die Sicherheitseinrichtung (40) eingerichtet ist, den abgesicherten Programmcode (34) in einen hierfür vorgesehenen sicheren Speicherbereich (33) des Speichers (30) einzuspielen, wobei der sichere Speicherbereich (33) derart eingerichtet ist, dass der Simulator (20) keinen unmittelbaren Zugriff auf den sicheren Speicherbereich hat (34) hat. Vorrichtung nach Anspruch 15, dadurch gekennzeichnet, dass die Sicherheitseinrichtung (40) eingerichtet ist, einen Programmzähler (21) des Simulators (20) auszulesen und einen Zugriff auf den sicheren Speicherbereich (33) anhand einer in dem Programmzähler (21) vorliegenden in den sicheren Speicherbereich (33) verweisenden Speicheradresse zu erkennen. Vorrichtung nach Anspruch 16, dadurch gekennzeichnet, dass der abgesicherte Programmcode (34) verschlüsselte, ausführbare Befehle umfasst und die Sicherheitseinrichtung (40) eingerichtet ist, beim Ausführen des abgesicherten Programmcodes (34) alle verschlüsselten Befehle oder lediglich den jeweils auszuführenden verschlüsselten Befehl zu entschlüsseln. Vorrichtung nach Anspruch 17, dadurch gekennzeichnet, dass die Sicherheitseinrichtung (40) eingerichtet ist, die entschlüsselten Befehle dem Simulator (20) zuzuleiten, und der Simulator (20) eingerichtet ist, die von der Sicherheitseinrichtung (40) erhaltenen entschlüsselten Befehle auszuführen. Vorrichtung nach Anspruch 17, dadurch gekennzeichnet, dass die Sicherheitseinrichtung (40) eingerichtet ist, die entschlüsselten Befehle auszuführen. Vorrichtung nach Anspruch 19, dadurch gekennzeichnet, dass die Sicherheitseinrichtung (40) eingerichtet ist, ein Weitersetzen des Programmzählers (21) des Simulators (20) auf den nächsten auszuführenden Befehl nur dann zuzulassen, wenn der nächste auszuführende Befehl nicht in dem sicheren Speicherbereich (34) liegt. Vorrichtung nach einem der Ansprüche 14 bis 20, gekennzeichnet durch einen in dem Simulator (20) ausführbaren Debugger (23), wobei die Sicherheitseinrichtung (40) eingerichtet ist, beim Ausführen des abgesicherten Programmcodes (34) in dem Debugger (23) eine Ablaufverfolgung des Programmcodes (34) zu verhindern. Vorrichtung nach Anspruch 19, gekennzeichnet durch einen auf der Computerplattform ausführbaren ungesicherten Programmcode (32), der bei einer Ausführung durch den Simulator (20) eine Routine (35) des gesicherten Programmcodes (34) aufruft, und dadurch, dass die Sicherheitseinrichtung (40) eingerichtete ist, beim Aufrufen der Routine (35) des verschlüsselten Programmcodes (34) durch den ungesicherten Programmcode (32) in dem Debugger (23) die Routine (35) des abgesicherten Programmcodes (34) auszuführen und ein Verzweigen in den verschlüsselten Programmcode (34) der Routine (35) zur Ablaufverfolgung zu verhindern. Vorrichtung nach einem der Ansprüche 14 bis 21 und 22, dadurch gekennzeichnet, dass der abgesicherte Programmcode (34) ein Betriebssystem der Computerplattform ist und der ungesicherte Programmcode (32) eine unter dem Betriebssystem der Computerplattform ausführbare Applikation ist. Verfahren nach einem der Ansprüche 14 bis 23, dadurch gekennzeichnet, dass die Sicherheitseinrichtung (40) eingerichtet ist, einen Speicherauszug des sicheren Speicherbereichs (34) derart zu erstellen, dass der abgesicherte Programmcode (34) in dem Speicherauszug so maskiert ist, dass der Programmcode (34) nicht nachvollziehbar ist. Vorrichtung nach einem der Ansprüche 14 bis 24, dadurch gekennzeichnet, dass die Simulationsvorrichtung (10) ein Simulationscomputer ist und der Simulator (20) ein auf dem Simulationscomputer ausführbares Simulationsprogramm ist. Vorrichtung nach Anspruch 25, dadurch gekennzeichnet, dass die Sicherheitseinrichtung (40) ein auf dem Simulationscomputer ausführbares Sicherheitsprogramm oder eine Programmbibliothek ist. Vorrichtung nach Anspruch 26, dadurch gekennzeichnet, dass das Sicherheitsprogramm (40) in das Simulatorprogramm (20) integriert ist. Vorrichtung nach einem der Ansprüche 14 bis 27, dadurch gekennzeichnet, dass die von dem Simulator (20) simulierte Computerplattform eine Chipkarte, eine Smart Card eine Mobilfunkkarte oder eine sichere Multimediakarte ist.






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