-
Ausführungsbeispiele betreffen allgemein Verfahren zum Ausführen eines Programms auf einer Datenverarbeitungsvorrichtung.
-
In sicherheitskritischen Anwendungen, wie beispielsweise bei vielen Anwendungen für Chipkarten, sollen jeweilige Mikrocontroller aufgrund von Sicherheits- und Zuverlässigkeitsanforderungen nur Programmcode ausführen, dessen Integrität erfolgreich geprüft wurde.
-
Anforderungen an die Ausführungszeit von Programmcode, insbesondere beim Starten, wie z.B. beim Start einer NFC(Near Field Communication)-Kommunikation durch eine Chipkarte, verhindern jedoch den Einsatz verschiedener Ansätze zur Programm-Code-Überprüfung. So erfordert ein typischer Ansatz beispielsweise das doppelte Lesen des Programmcodes (einmal, um ihn zu prüfen, und ein weiteres Mal um ihn auszuführen), die Berechnung eines Prüfwerts (z.B. einer Prüfsumme oder einer Signatur) und den Vergleich des Prüfwerts mit einem Referenzwert, was in der Praxis zu viel Zeit erfordern kann.
-
Es sind deshalb Herangehensweisen für die Gewährleistung der Integrität von ausgeführtem Code mit geringem zeitlichem Overhead wünschenswert.
-
Gemäß einem Ausführungsbeispiel wird ein Verfahren zum Ausführen eines Programms auf einer Datenverarbeitungsvorrichtung bereitgestellt, aufweisend Speichern mehrerer Programminstruktionen und von einem Prozessor der Datenverarbeitungsvorrichtung zu verarbeitender Daten in einem oder mehreren Speichern der Datenverarbeitungsvorrichtung, Empfangen, durch die Datenverarbeitungsvorrichtung von einer externen Datenverarbeitungsvorrichtung eines Referenzwerts für eine Prüfung der mehreren Programminstruktionen und Speichern des Referenzwerts in der Datenverarbeitungsvorrichtung, Berechnen eines Prüfwerts aus den mehreren Programminstruktionen für die Prüfung durch die Datenverarbeitungsvorrichtung beim Laden der Programminstruktionen aus den ein oder mehreren Speichern in einen Befehlszwischenspeicher der Datenverarbeitungsvorrichtung oder durch Lesezugriff auf den Befehlszwischenspeicher nach dem Laden der Programminstruktionen in den Befehlszwischenspeicher aus den ein oder mehreren Speichern und Ausführen zumindest eines Teils der Programminstruktionen durch den Prozessor, falls der Prüfwert mit dem empfangenen Referenzwert übereinstimmt.
-
Gemäß einer weiteren Ausführungsform wird eine Datenverarbeitungsvorrichtung gemäß dem oben beschriebenen Verfahren bereitgestellt. Gemäß einer weiteren Ausführungsform wird ein Datenverarbeitungssystem bereitgestellt, das die Datenverarbeitungsvorrichtung und die externe Datenverarbeitungsvorrichtung, die eingerichtet ist, den Referenzwert zu erzeugen und an die Datenverarbeitungsvorrichtung zu liefern, aufweist. Es sollte beachtet werden, dass Ausführungsformen, die im Zusammenhang mit dem Verfahren beschrieben sind, analog für die Datenverarbeitungsvorrichtung gelten und umgekehrt.
-
Die Figuren geben nicht die tatsächlichen Größenverhältnisse wieder sondern sollen dazu dienen, die Prinzipien der verschiedenen Ausführungsbeispiele zu illustrieren. Im Folgenden werden verschiedene Ausführungsbeispiele mit Bezug auf die folgenden Figuren beschrieben.
- 1 zeigt eine Datenverarbeitungsvorrichtung.
- 2 zeigt eine Datenverarbeitungsvorrichtung gemäß einer Ausführungsform.
- 3 veranschaulicht eine Überprüfung von Programmcode bei der Architektur von 2.
- 4 zeigt eine Ausführungsform, bei der eine Überprüfungseinheit zwischen CPU und Instruktions-Cache-Speicher angeordnet ist.
- 5 zeigt eine Variante, bei der die CPU den Vergleich eines von der Überprüfungseinheit gelieferten Prüfwerts mit einem Referenzwert durchführt.
- 6 veranschaulicht die Überprüfung eines weiteren Programmcode-Teils nach der Überprüfung von 5.
- 7 zeigt eine Variante, bei dem die Überprüfungseinheit als Teil des Instruktions-Cache-Speichers implementiert ist und die Prüfwertberechnung sowie den Vergleich mit dem Referenzwert vornimmt.
- 8 zeigt eine Variante, bei der für jeden mehrerer Programmcode-Teile ein jeweiliger Referenzwert zusammen mit dem Programmcode-Teil in einem nichtflüchtigen Speicher enthalten ist.
- 9 veranschaulicht eine Ausführungsform, bei der jeder Programmcode-Teil mit einem jeweiligen Referenzwert versehen ist, der zusammen mit ihm (d.h. als Teil von ihm) gespeichert ist.
- 10 veranschaulicht eine Ausführungsform, bei der ein erster Programmcode-Teil mit dem Referenzwert für einen zweiten Programmcode-Teil versehen ist und der zweite Programmcode-Teil mit dem Referenzwert für einen dritten Programmcode-Teil versehen ist.
- 11 zeigt eine Datenverarbeitungsvorrichtung gemäß einer Ausführungsform.
- 12 zeigt ein Ablaufdiagramm, das ein Verfahren zum Ausführen eines Programms auf einer Datenverarbeitungsvorrichtung veranschaulicht.
-
Die folgende detaillierte Beschreibung bezieht sich auf die beiliegenden Figuren, die Details und Ausführungsbeispiele zeigen. Diese Ausführungsbeispiele sind so detailliert beschrieben, dass der Fachmann die Erfindung ausführen kann. Andere Ausführungsformen sind auch möglich und die Ausführungsbeispiele können in struktureller, logischer und elektrischer Hinsicht geändert werden, ohne vom Gegenstand der Erfindung abzuweichen. Die verschiedenen Ausführungsbeispiele schließen sich nicht notwendig gegenseitig aus sondern es können verschiedene Ausführungsformen miteinander kombiniert werden, so dass neue Ausführungsformen entstehen. Im Rahmen dieser Beschreibung werden die Begriffe „verbunden“, „angeschlossen“ sowie „gekoppelt“ verwendet zum Beschreiben sowohl einer direkten als auch einer indirekten Verbindung, eines direkten oder indirekten Anschlusses sowie einer direkten oder indirekten Kopplung.
-
1 zeigt eine Datenverarbeitungsvorrichtung 100.
-
Die Datenverarbeitungsvorrichtung 100 weist eine CPU (central processing unit) sowie verschiedene Speicher, hier ein ROM (Read Only Memory) 102, eine nichtflüchtigen Speicher (NVM für non-volatile memory) 103 und ein RAM (Random-Access Memory) 104 auf.
-
Zwischen den Speichern 102, 103, 104 ist ein (Instruktions-)Cache-Speicher 105 (oder allgemein ein (Instruktions)-Zwischenspeicher für Instruktionen vorgesehen. Dieser beschleunigt die Abarbeitung von Instruktionen, die in den Speichern 102, 103, 104 gespeichert sind, durch die CPU 101, da die CPU 101 typischerweise schneller Instruktionen ausführen kann, als sie (einzeln) von den Speichern 101, 102, 103 geliefert werden könnten.
-
Ähnlich ist ein (Daten-)Cache-Speicher 106 für Daten vorgesehen, hier zwischen NVM 103 und CPU 101 und RAM 104 und CPU 101, welcher eine schnelle Verarbeitung von Daten durch die CPU 101 ermöglicht.
-
Beim Starten der Datenverarbeitungsvorrichtung 100 (z.B. wenn eine Smartcard in ein Leserfeld eingebracht wird) führt die CPU 101 Start-Programmcode (d.h. Programminstruktionen für den Start der Datenverarbeitungsvorrichtung) aus, der im ROM 102 (oder auch im NVM 103 oder einer Kombination aus beidem) gespeichert ist.
-
Diesen Start-Code führt die CPU 101 in einem besonderen Start-Modus aus. Anschließend wechselt sie in einen Benutzer-Modus, in dem sie Benutzer-Programmcode aus dem NVM 103 abruft und ausführt.
-
Im NVM 103 gespeicherter Programmcode ist allerdings veränderlich, insbesondere durch einen Angreifer. Deshalb kann bei sicherheitskritischen Anwendungen Programmcode aus dem NVM 103 durch Ausführung von entsprechendem Programmcode aus dem ROM 102 (der nicht veränderlich ist und deshalb als sicher angenommen werden kann) auf seine Integrität hin überprüft, bevor er ausgeführt wird. Dies kann beispielsweise erfolgen, indem der Programmcode im ROM vorsieht, dass eine Checksumme (allgemein ein Prüfwert, der gemäß einer vorgegebenen Prüfwert-Berechnungsfunktion berechnet wird, wie z.B. auch ein Hashwert oder eine Signatur) für den Programmcode im NVM 103, der ausgeführt werden soll, berechnet wird und diese mit eine gespeicherten in der Datenverarbeitungsvorrichtung hinterlegtem Referenzwert verglichen wird. Nur bei Übereinstimmung von Prüfwert mit dem Referenzwert führt die CPU 101 den Programmcode aus dem NVM 103 aus.
-
Der Programmcode, der die Überprüfung vornimmt, kann auch (zumindest teilweise) im NVM 103 gespeichert sein, wird aber in diesem Fall vor seiner Ausführung überprüft, sodass er vertrauenswürdig ist.
-
Die Überprüfung des Programmcodes im NVM 103 erfolgt beispielsweise blockweise (d.h. jeder Block hat einen eigenen ihm zugeordneten Referenzwert für eine solche Überprüfung).
-
Wenn so vorgegangen wird, wird für die Überprüfung des Benutzer-Programmcodes dieser zunächst in den Daten-Cache-Speicher 106 geladen, da ihn die CPU 101 als Daten gemäß dem Uberprüfungsprogrammcode aus dem ROM (welcher in den Instruktions-Cache-Speicher 105 geladen wird) verarbeitet wird. Bei erfolgreicher Überprüfung (d.h. Prüfwert ist gleich Referenzwert) wird der Benutzer-Programmcode dann als Instruktionen behandelt und für seine Ausführung in den Instruktions-Cache-Speicher 105 geladen. Der Benutzer-Programmcode wird somit zweimal in einen Cache-Speicher geladen. Zur Beschleunigung kann die Erzeugung der Prüfsumme auch durch eine Hardware-Schaltung erfolgen (d.h. nicht mittels durch ein von der CPU 101 ausgeführtes Überprüfungsprogramm). In diesem Fall sind aber zusätzliche Datentransfers zwischen der CPU 101 und dieser Hardware-Schaltung (z.B. einen Peripheriebaustein) erforderlich.
-
Bei Anwendungen, in denen wenig Zeit zur Verfügung steht, z.B. wenn ein Benutzerprogramm innerhalb der kurzen Zeit, in der eine Smartcard sich in einem NFC(Near Field Communication)-Feld befindet, ausgeführt werden muss, ist deshalb bei einer solchen Vorgehensweise keine (oder zumindest keine vollständige) Programmcode-Überprüfung möglich.
-
Gemäß verschiedenen Ausführungsformen wird eine Herangehensweise beschrieben, die eine schnellere Programmcode-Integritätsüberprüfung ermöglicht, als die oben mit Bezug auf 1 beschriebene Herangehensweise.
-
2 zeigt eine Datenverarbeitungsvorrichtung 200 gemäß einer Ausführungsform.
-
Die Datenverarbeitungsvorrichtung 200 kann jede Art von Datenverarbeitungsvorrichtung sein, wie beispielsweise ein Computer oder ein Smartphone, eine Chipkarte (mit beliebigem Formfaktor) oder eine Steuereinrichtung (z.B. mit einem Mikrocontroller), die z.B. in einem Fahrzeug verwendet wird.
-
Ähnlich wie die Datenverarbeitungsvorrichtung 100 weist die Datenverarbeitungsvorrichtung 200 eine CPU 201, ein ROM 202 und ein NVM 203 auf. Die Datenverarbeitungsvorrichtung 200 kann auch ein RAM aufweisen. Außerdem weist die Datenverarbeitungsvorrichtung 200 einen Daten-Cache-Speicher auf. Da dieser jedoch nicht an der Überprüfung von Programmcode beteiligt ist, ist er in 2 nicht gezeigt. Das ROM 202 und das NVM 203 sind über eine Überprüfungseinheit 204 und einen Instruktions-Cache-Speicher 205 (ähnlich wie der Instruktions-Cache-Speicher 105 zum Beschleunigen der Ausführung von Instruktionen) mit der CPU 201 verbunden.
-
Die Überprüfungseinheit 204 kann zumindest teilweise als (dedizierte) Hardwareschaltung ausgeführt sein oder sie kann auch eine in Software implementierte Uberprüfungs-Engine sein (deren Programminstruktionen z.B. im ROM 202 gespeichert sind) die von der CPU 201 oder auch einer anderen programmierbaren Komponente der die Datenverarbeitungsvorrichtung 200 ausgeführt wird.
-
3 veranschaulicht eine Überprüfung von Programmcode bei der Architektur von 2.
-
Der zu überprüfende Programmcode ist in einem NVM 303, das dem NVM 203 entspricht, gespeichert und besteht beispielhaft aus zwei Programmcode-Blöcken 306, 307.
-
In 3 sind außerdem eine Überprüfungseinheit 304 entsprechend der Überprüfungseinheit 204 sowie ein Instruktions-Cache-Speicher 305 entsprechend dem Instruktions-Cache-Speicher 205 sowie die Tätigkeiten der CPU 301 dargestellt.
-
Im Folgenden wird der in 3 durch die mit (1) bis (7) nummerierten Kreise veranschaulichte Ablauf genauer beschrieben.
-
In (1) wird die Datenverarbeitungsvorrichtung durch Ausführen von Start-Programmcode aus dem ROM 202 z.B. wie mit Bezug auf 2 beschrieben gestartet.
-
In (2) initialisiert die CPU 201 die Überprüfungseinheit 304 für das Überprüfen von Programmcode.
-
In (3) richtet die Überprüfungseinheit 304 den Instruktions-Cache-Speicher 305 für die Unterstützung der Programmcode-Überprüfung ein. In (4a) und (4b) liest der Instruktions-Cache-Speicher 305 den ersten zu überprüfenden Programmcode-Teil 306 über die Überprüfungseinheit 304 ein und sperrt diesen Programmcode-Teil 306 im Instruktions-Cache-Speicher 305 (d.h. es erfolgt ein Cache-Lock für den ersten Programmcode-Teil 306 im Instruktions-Cache-Speicher 305).
-
Die Überprüfungseinheit 304 berechnet dabei (d.h. während der Programmcode-Teil 306 über sie eingelesen wird) den Prüfwert für den ersten Programmcode-Teil 306.
-
In (5) liest die Überprüfungseinheit 304 den Referenzwert für den ersten Programmcode-Teil 306 und vergleicht den gelesenen Referenzwert mit dem berechneten Prüfwert.
-
Ist die Überprüfung erfolgreich (d.h. Prüfwert gleich Referenzwert), so führt die CPU 301 in (6) den ersten Programmcode-Teil 306 aus. Hat die CPU den ersten Programmcode-Teil 306 ausgeführt und die Ausführung eines weiteren Programmcode-Teils, hier des zweiten Programmcode-Teil 307, ist erforderlich, werden (4a), (4b) und (5) auch für den zweiten Programmcode-Teil 307 durchgeführt und (nach erfolgreicher Überprüfung auch dieses Programmcode-Teils) führt die CPU 301 den zweiten Programmcode-Teil 307 aus.
-
Detektiert die Überprüfungseinheit 304 eine Abweichung zwischen Prüfwert und Referenzwert für einen Programmcode-Teil so gibt sie ein (Fehler- oder Alarm-)Signal aus, z.B. zum Rücksetzen (d.h. Auslösen eines Sicherheits-Resets) der Datenverarbeitungsvorrichtung 100. Die CPU 301 kann den jeweiligen Programmteil auch im Falle einer Abweichung ausführen (d.h. eine Abweichung kann akzeptiert werden), wobei dann aber eine geeignete Reaktion auf das Signal erfolgt, z.B. eine Sicherheitsmaßnahme ergriffen wird wie z.B. eine Überprüfung von Verarbeitungsergebnissen.
-
Wenn alle Programmcode-Teile erfolgreich überprüft und ausgeführt wurden, kann die Überprüfungseinheit deaktiviert werden. Dies kann durch den letzten Programmcode-Teil des jeweiligen Programms erfolgen.
-
Da bei der mit Bezug auf 3 beschriebenen Vorgehensweise der zu prüfende Programmcode 306, 307 für Überprüfung und Ausführung nur einmal in einen Cache-Speicher geladen werden braucht, weil er bei seinem Laden in den Instruktions-Cache-Speicher 304 geprüft wird (oder, als Alternative, im Instruktions-Cache-Speicher 304 geprüft wird) ist eine im Vergleich zu der mit 2 beschriebenen Vorgehensweise schnellere Überprüfung und Ausführung von Programmcode möglich. Es sind für die mit Bezug auf 3 beschriebenen Vorgehensweise keine zusätzlichen Datentransfers oder Speicherressourcen (wie NVM oder RAM) erforderlich.
-
Außerdem wird die Sicherheit erhöht, da der Programmcode geprüft ist, wenn er in den Instruktionsspeicher 304 geladen ist und kein weiteres Laden auftritt, bei dem oder vor dem er wieder verändert werden könnte. Die Programmcode-Teile sind, zumindest bis sie ausgeführt wurden, im Cache gesperrt.
-
Für den Fall, dass ein schon einmal geprüfter und ausgeführter Programmteil noch einmal ausgeführt werden muss, können für die Programmteile Markierungen (z.B. ein Flag) vorgesehen sein, die es ermöglichen, dass ein solcher Programmteil als schon geprüft markiert werden kann. In diesem Fall kann die Überprüfungseinheit 304 auf eine erneute Überprüfung des Programmteils verzichten.
-
Der Instruktions-Cache-Speicher 304 kann auch ein anderer (Zwischen-)Speicher oder Speicherbereich sein, der die Abarbeitung von Programmcode beschleunigt, wie z.B. ein TCM (Tightly Coupled Memory), z.B. ein Tightly Coupled RAM, insbesondere ein Speicher mit dedizierter Verbindung zur CPU 301 zum Übertragen von Programminstruktionen. Dieser Speicher (oder Speicherbereich), der auch als Befehlszwischenspeicher bezeichnet wird, kann ein für Instruktionen dedizierter Speicher (oder Speicherbereich) sein.
-
In die Berechnung des Prüfwerts kann ein auf der Datenverarbeitungsvorrichtung 100 hinterlegter, z.B. durch unter anderen Logikzellen versteckter Logikzellen repräsentierter, Schlüsselwert verwendet werden. Dadurch kann verhindert werden, dass ein Angreifer in der Lage ist, für Schadcode den korrekten Prüfwert zu berechnen. Für die Berechnung der Referenzwerte (was z.B. beim Hersteller passiert) wird dieser geheime Schlüsselwert verwendet. Die Prüfwert-Berechnungsfunktion kann auch auf asymmetrischer Kryptographie basieren, d.h. der Prüfwert ist eine Signatur, die mittels eines privaten (geheimen und z.B. versteckten) Schlüssels berechnet wird und der Vergleich mit dem Referenzwert (d.h. die Überprüfung des Prüfwerts auf Korrektheit) erfolgt mittels eines öffentlichen (z.B. in der Firmware hinterlegten) Schlüssels.
-
Der Referenzwert kann z.B. in einem schreibgeschützten Bereich 308 des NVM 303 abgelegt werden (der z.B. nur vom Hersteller geschrieben werden kann, mittels eines Flash-Loader oder für den im Benutzer-Modus der Schreibzugriff blockiert ist). Insbesondere können sich die Referenzwerte in anderen Speicherbereichen befinden als der zu überprüfende Programmcode.
-
Wird der oben beschriebene Überprüfungsmechanismus eingesetzt, kann auf EDC (Error Detection Code) zum Schutz von Programmcode im Speicher verzichtet werden (kann aber auch als zusätzliche Maßnahme, z.B. mit einer reduzierten Anzahl von Prüfbits, vorgesehen sein). Damit kann der Overhead für den Schutz, beispielsweise des NVM 303, verringert werden, da größere Blöcke (mehrere Speicherzellen statt eine pro EDC) durch einen einzigen Referenzwert geschützt werden. Es kann somit ein besseres Verhältnis zwischen Programmcode und Referenzwerten erreicht werden. Da auf diese Weise Overhead eingespart werden kann, kann dann auch eine kompliziertere Prüfwertberechnung (mit Prüfwerten mit einer hohen Anzahl von Bits) vorgesehen werden, wodurch eine hohe Sicherheit gewährleistet werden kann. Weiterhin kann die Anzahl der Bits besser optimiert werden, da EDC auf den kompletten Speicher angewendet wird und der oben beschriebene Überprüfungsmechanismus auch nur auf einen kleinen Codebereich angewendet werden kann. Darüber hinaus bietet der obige Überprüfungsmechanismus im Gegensatz zu EDC einen Schutz gegen das Einbringen von Schadcode durch einen Angreifer mittels eines internen Schreibzugriffs.
-
Der Überprüfungsmechanismus kann von einer MMU (Memory Management Unit) und/oder von einer MPU (Memory Protection Unit) unterstützt werden, die in der Datenverarbeitungsvorrichtung vorgesehen ist bzw. sind.
-
4 zeigt eine Ausführungsform, bei der die Überprüfungseinheit 404 zwischen CPU 401 und Instruktions-Cache-Speicher 405 angeordnet ist. Entsprechend ist der Instruktions-Cache-Speicher 402 direkt (d.h. nicht über die Überprüfungseinheit 404) mit ROM 402 und NVM 403 verbunden.
-
In dieser Ausführungsform erfolgt das Prüfen der Programmcode-Teile nicht beim Laden in den Instruktions-Cache-Speicher 405, sondern die Programmcode-Teile werden in den Instruktions-Cache-Speicher 405 geladen, die Überprüfungseinheit 404 berechnet mittels Lesezugriffen auf den Instruktions-Cache-Speicher 405 den Prüfwert und bei erfolgreicher Überprüfung eines Programmcodeteils führt die CPU ihn (aus dem Instruktions-Cache-Speicher 405 heraus) aus.
-
5 zeigt eine Variante, bei der die CPU 501 den Vergleich des von der Überprüfungseinheit 504 (in diesem Beispiel als Teil des Instruktions-Cache-Speichers 505 implementiert) gelieferten Prüfwerts mit dem zugeordneten Referenzwert durchführt.
-
Hierbei ist in 5 die Überprüfung eines ersten Programmcode-Teils 506 nach dem Start 509 der Datenverarbeitungsvorrichtung veranschaulicht.
-
6 veranschaulicht die Überprüfung eines weiteren Programmcode-Teils 607 nach der Überprüfung des ersten Programmcode-Teils 506 von 5.
-
Die Durchführung des Vergleichs durch die CPU wie in 5 und 6 ist beispielsweise (nur) dann vorgesehen, wenn der Referenzwert schreibgeschützt ist.
-
7 zeigt eine Variante, bei dem die Überprüfungseinheit 704 als Teil des Instruktions-Cache-Speichers 705 implementiert ist und die Prüfwertberechnung sowie den Vergleich mit dem Referenzwert vornimmt.
-
8 zeigt eine Variante, bei der für jeden Programmcode-Teil 806, 807 ein jeweiliger Referenzwert 809, 810 zusammen mit dem Programmcode-Teil 806, 807 im NVM 803 enthalten ist, sodass er zusammen mit dem Programmcode-Teil 806, 807 in den Instruktions-Cache-Speicher 805 geladen wird. Die Überprüfungseinheit 804 kann dann für den Vergleich auf dem im Instruktions-Cache-Speicher 805 abgelegten Referenzwert zugreifen, wenn sie den Prüfwert für den Programmcode-Teil berechnet hat.
-
9 veranschaulicht eine Ausführungsform, bei der jeder Programmcode-Teil 906, 907, 911 mit einem jeweiligen Referenzwert 913, 914, 915 versehen ist, der zusammen mit ihm (d.h. als Teil von ihm) gespeichert ist.
-
10 veranschaulicht eine Ausführungsform, bei der ein erster Programmcode-Teil 1001 mit dem Referenzwert für einen zweiten Programmcode-Teil 1002 versehen ist und der zweite Programmcode-Teil 1002 mit dem Referenzwert für einen dritten Programmcode-Teil 1003 (allgemein so weiter bis zum n-ten, d.h. letzten, Programmcode-Teil) versehen ist. Der letzte Programmcode-Teil 1003 ist mit keinem Referenzwert versehen. Der Referenzwert für den ersten Programmcode-Teil 1001 ist getrennt von den Programmcode-Teilen 1001, 1003, 1003, hier in einem sicheren NVM-Speicherbereich 1004, gespeichert.
-
In diesem Fall kann die Überprüfungseinheit 1005 den Prüfwert für den Code-Teil inklusive des Referenzwerts, mit dem der Code-Teil versehen ist, berechnen. Damit wird auch der Referenzwert vor Manipulation geschützt.
-
Zusammenfassend wird gemäß verschiedenen Ausführungsformen eine Datenverarbeitungsvorrichtung bereitgestellt, wie sie in 11 dargestellt ist.
-
11 zeigt eine Datenverarbeitungsvorrichtung 1100 gemäß einer Ausführungsform.
-
Die Datenverarbeitungsvorrichtung 1100 weist einen Prozessor 1101, einen oder mehrere Speicher 1102, die eingerichtet sind, mehrere Programminstruktionen und von einem Prozessor der Datenverarbeitungsvorrichtung zu verarbeitender Daten zu speichern, einen Befehlszwischenspeicher 1103 zum Zwischenspeichern der Programminstruktionen zur Ausführung durch den Prozessor 1101 und einen Datenzwischenspeicher 1104 zum Zwischenspeichern der zu verarbeitenden Daten auf.
-
Die Datenverarbeitungsvorrichtung 1100 weist ferner eine Kommunikationsschnittstelle 1106 zu einer externen Datenverarbeitungsvorrichtung 1107 auf, die eingerichtet ist, von der externen Datenverarbeitungsvorrichtung 1107 einen Referenzwert für eine Prüfung der mehreren Programminstruktionen zu empfangen.
-
Die Datenverarbeitungsvorrichtung 1100 weist ferner eine Überprüfungseinheit 1105 auf, die eingerichtet ist, einen Prüfwert für die Prüfung beim Laden der Programminstruktionen aus den ein oder mehreren Speichern 1102 in einen Befehlszwischenspeicher 1103 der Datenverarbeitungsvorrichtung oder durch Lesezugriff auf den Befehlszwischenspeicher 1103 nach dem Laden der Programminstruktionen in den Befehlszwischenspeicher aus den ein oder mehreren Speichern 1102 zu berechnen.
-
Der der Prozessor 1101 ist eingerichtet, zumindest einen Teil der Programminstruktionen auszuführen, falls der Prüfwert mit dem empfangenen Referenzwert übereinstimmt.
-
Die externe Datenverarbeitungsvorrichtung 1107 ist gegenüber der Datenverarbeitungsvorrichtung 1100 extern, d.h. es sind getrennte Vorrichtungen, z.B. in getrennten Gehäusen. Beispielsweise kann der Referenzwert bei der Herstellung der Datenverarbeitungsvorrichtung 1100 (z.B. vor der Auslieferung an einen Kunden) mit der externen Datenverarbeitungsvorrichtung 1107 über die Kommunikationsschnittstelle 1106 verbunden werden (z.B. über entsprechende Kontakte oder auch kontaktlos) und den Referenzwert von ihr empfangen und (vorab) speichern. Beispielsweise kann die Datenverarbeitungsvorrichtung 1100 den Referenzwert zusammen mit den Programminstruktionen (also Programmcode) empfangen und dann im Betrieb sicherstellen, dass die Programminstruktionen nicht verändert wurden. Dazu speichert sie den Referenzwert in beispielsweise in einem schreibgeschützten (ggf. gesicherten) Speicherbereich.
-
Der Befehlszwischenspeicher und der Datenzwischenspeicher brauchen nicht notwendig mittels getrennter Speicher (z.B. Speicherchips) implementiert zu werden, sie können auch (getrennte) Speicherbereiche eines Speichers (oder einer Speicheranordnung) sein.
-
Der Befehlszwischenspeicher und der Datenzwischenspeicher sind beispielsweise zumindest in dem Sinne Zwischenspeicher, dass sie flüchtige Speicher sind, während der Speicher (der mehrere Speichervorrichtungen aufweisen kann) beispielsweise ein nichtflüchtiger Speicher ist. Der Befehlszwischenspeicher ist beispielsweise ein für das Zwischenspeichern von Befehlen (d.h. Programminstruktionen) dedizierter Zwischenspeicher und der Datenzwischenspeicher ist beispielsweise ein für das Speichern von zu verarbeitenden Daten (d.h. Daten, die vom Prozessor nicht als Befehle ausgeführt werden, d.h. keine Prozessorinstruktionen spezifizieren, die der Prozessor ausführt, sondern die durch ausgeführte Prozessorinstruktionen verarbeitet werden) dedizierter Zwischenspeicher.
-
12 zeigt ein Ablaufdiagramm, das ein Verfahren zum Ausführen eines Programms auf einer Datenverarbeitungsvorrichtung, veranschaulicht.
-
In 1201 werden mehrere Programminstruktionen und von einem Prozessor der Datenverarbeitungsvorrichtung zu verarbeitende Daten in einem oder mehreren Speichern der Datenverarbeitungsvorrichtung gespeichert.
-
In 1202 wird durch die Datenverarbeitungsvorrichtung von einer externen Datenverarbeitungsvorrichtung ein Referenzwert für eine Prüfung der mehreren Programminstruktionen empfangen und gespeichert.
-
In 1203 wird ein Prüfwert für die Prüfung durch die Datenverarbeitungsvorrichtung aus den mehreren Programminstruktionen beim Laden der Programminstruktionen aus den ein oder mehreren Speichern in einen Befehlszwischenspeicher der Datenverarbeitungsvorrichtung oder durch Lesezugriff auf den Befehlszwischenspeicher nach dem Laden der Programminstruktionen in den Befehlszwischenspeicher aus den ein oder mehreren Speichern berechnet.
-
In 1204 wird zumindest ein Teil der Programminstruktionen durch den Prozessor ausgeführt, falls der Prüfwert mit dem empfangenen Referenzwert übereinstimmt.
-
Die Datenverarbeitungsvorrichtung kann beispielsweise so eingerichtet sein, dass der Referenzwert sowie der Prüfwert nicht durch den Benutzer der Datenverarbeitungsvorrichtung erzeugt werden kann. Das schließt gemäß einer Ausführungsform ein, dass der Prüfwert der in der Datenverarbeitungsvorrichtung (d.h. in der Überprüfungseinheit) berechnet wird, dem Prozessor bzw. einem ausgeführten Programm und dem Benutzer nicht bekannt ist.
-
Im Folgenden werden verschiedene Ausführungsbeispiele angegeben.
-
Ausführungsbeispiel 1 ist ein Verfahren zum Ausführen eines Programms auf einer Datenverarbeitungsvorrichtung, wie mit Bezug auf 12 beschrieben.
-
Ausführungsbeispiel 2 ist ein Verfahren nach Ausführungsbeispiel 1, aufweisend Speichern des Referenzwerts in einem schreibgeschützten Speicherbereich der Datenverarbeitungsvorrichtung.
-
Ausführungsbeispiel 3 ist ein Verfahren nach Ausführungsbeispiel 1 oder 2, wobei der Prüfwert ein kryptographischer Prüfwert ist.
-
Ausführungsbeispiel 4 ist ein Verfahren nach einem der Ausführungsbeispiele 1 bis 3, wobei der Prüfwert von einem in der Datenverarbeitungsvorrichtung verborgenen Schlüssel abgeleitet wird.
-
Ausführungsbeispiel 5 ist ein Verfahren nach einem der Ausführungsbeispiele 1 bis 4, aufweisend Berechnen des Prüfwerts beim Laden der Programminstruktionen aus den ein oder mehreren Speichern in den Befehlszwischenspeicher durch Lesezugriff auf einen Übertragungspfad zwischen den ein oder mehreren Speichern und dem Befehlszwischenspeicher.
-
Ausführungsbeispiel 6 ist ein Verfahren nach einem der Ausführungsbeispiele 1 bis 5, aufweisend Speichern des Referenzwerts in einem schreibgeschützten Speicherbereich der Datenverarbeitungsvorrichtung und Vergleichen des Prüfwerts mit dem Referenzwert durch den Prozessor.
-
Ausführungsbeispiel 7 ist ein Verfahren nach einem der Ausführungsbeispiele 1 bis 5, aufweisend Vergleichen des Prüfwerts mit dem Referenzwert durch eine Überprüfungseinheit, die den Prüfwert berechnet.
-
Ausführungsbeispiel 8 ist ein Verfahren nach einem der Ausführungsbeispiele 1 bis 7, aufweisend Ausgeben eines Signals und/oder Durchführen einer Sicherheitsmaßnahme, falls der Prüfwert nicht mit Referenzwert übereinstimmt.
-
Ausführungsbeispiel 9 ist ein Verfahren nach einem der Ausführungsbeispiele 1 bis 8, wobei für jeden mehrerer Programmcode-Teile mit jeweils mehreren Programminstruktionen eines Programms ein jeweiliger Referenzwert empfangen wird, beim Laden des Programmcode-Teils in den Befehlszwischenspeicher oder durch Lesezugriff auf den Befehlszwischenspeicher nach dem Laden des Programmcode-Teils in den Befehlszwischenspeicher ein Prüfwert berechnet wird, und wobei für jeden der mehreren Programmcode-Teile zumindest ein Teil des Programmcode-Teils durch den Prozessor ausgeführt wird, falls der für den Programmcode-Teil berechnete Prüfwert mit dem für den Programmcode-Teil empfangenen Referenzwert übereinstimmt.
-
Ausführungsbeispiel 10 ist eine Datenverarbeitungsvorrichtung, wie mit Bezug auf 11 beschrieben.
-
Ausführungsbeispiel 11 ist eine Datenverarbeitungsvorrichtung nach Ausführungsbeispiel 10, wobei der Befehlszwischenspeicher einen gegenüber den einen oder mehreren Speichern beschleunigten Zugriff durch den Prozessor aufweist.
-
Ausführungsbeispiel 12 ist eine Datenverarbeitungsvorrichtung nach Ausführungsbeispiel 10 oder 11, wobei die Überprüfungseinheit eingerichtet ist, den Prüfwert mit dem Referenzwert zu vergleichen und ein Signal an eine andere Komponente der Datenverarbeitungsvorrichtung auszugeben, falls der Prüfwert nicht mit Referenzwert übereinstimmt.
-
Ausführungsbeispiel 13 ist eine Datenverarbeitungsvorrichtung nach einem der Ausführungsbeispiele 10 bis 12, wobei der Befehlszwischenspeicher ein Cache-Speicher oder ein Tightly Coupled RAM ist.
-
Obwohl die Erfindung vor allem unter Bezugnahme auf bestimmte Ausführungsformen gezeigt und beschrieben wurde, sollte es von denjenigen, die mit dem Fachgebiet vertraut sind, verstanden werden, dass zahlreiche Änderungen bezüglich Ausgestaltung und Details daran vorgenommen werden können, ohne vom Wesen und Bereich der Erfindung, wie er durch die nachfolgenden Ansprüche definiert wird, abzuweichen. Der Bereich der Erfindung wird daher durch die angefügten Ansprüche bestimmt, und es ist beabsichtigt, dass sämtliche Änderungen, welche unter den Wortsinn oder den Äquivalenzbereich der Ansprüche fallen, umfasst werden.
-
Bezugszeichen
-
- 100
- Datenverarbeitungsvorrichtung
- 101
- CPU
- 102
- ROM
- 103
- NVM
- 104
- RAM
- 105
- Instruktions-Cache
- 106
- Daten-Cache
- 200
- Datenverarbeitungsvorrichtung
- 201
- CPU
- 202
- ROM
- 203
- NVM
- 204
- Überprüfungseinheit
- 205
- Instruktions-Cache
- 301
- CPU
- 303
- NVM
- 304
- Überprüfungseinheit
- 305
- Instruktions-Cache
- 306, 307
- Programmcode-Teile
- 308
- Schreibgeschützter NVM-Bereiche
- 400
- Datenverarbeitungsvorrichtung
- 401
- CPU
- 402
- ROM
- 403
- NVM
- 404
- Überprüfungseinheit
- 405
- Instruktions-Cache
- 501
- CPU
- 504
- Überprüfungseinheit
- 505
- Instruktions-Cache
- 506
- Programmcode-Teil
- 509
- Start der Datenverarbeitungsvorrichtung
- 607
- weiterer Programmcode-Teil
- 704
- Übertragungseinheit
- 705
- Instruktions-Cache
- 803
- NVM
- 804
- Überprüfungseinheit
- 805
- Instruktions-Cache-Speicher
- 806, 807
- Programmcode-Teile
- 809, 810
- Referenzwerte
- 906, 907, 911
- Programmcode-Teile
- 912-914
- Referenzwerte
- 1001-1003
- Programmcode-Teile
- 1004
- Sicherer NVM-Speicherbereich
- 1005
- Überprüfungseinheit
- 1100
- Datenverarbeitungsvorrichtung
- 1101
- Prozessor
- 1102
- Speicher
- 1103
- Befehlszwischenspeicher
- 1104
- Datenzwischenspeicher
- 1105
- Überprüfungseinheit
- 1106
- Kommunikationsschnittstelle
- 1107
- externe Datenverarbeitungsvorrichtung
- 1200
- Ablaufdiagramm
- 1201-1204
- Ablaufschritte