-
Die Erfindung betrifft die Provisionierung von Hardware-Prozessorsystemen mit einem oder mehreren Prozessoren mit Funktionsprogrammen.
-
Moderne Hardware-Prozessorsysteme mit einem oder mehreren Prozessoren bzw. Prozessor-Kernen, wie sie beispielsweise in PCs, Smartphones, oder anderen elektronischen Vorrichtungen verbaut sind, müssen mit Funktionsprogrammen, welche als Funktionsprogrammcode vorliegen und beispielsweise eine Firmware realisieren, provisioniert werden, um die gewünschte Funktionsweise, beispielsweise digitale Signalverarbeitung, kryptographische Verschlüsselung oder Kommunikation über Kommunikationsnetzwerke, zu entfalten.
-
Die Funktionsprogramme werden in der Regel durch Kompilierung eines beispielsweise in einer Hochsprache wie C/C++ geschriebenen Programmcodes (Sourcecodes) in einen Binärcode umgewandelt, welcher das Funktionsprogramm darstellt.
-
Ein Hardware-Prozessorsystem kann beispielsweise als ein System-on-Chip (SoC) implementiert werden und einen Arbeitsspeicher aufweisen, in welchem beispielsweise ein Funktionsprogram wie ein Betriebssystem gespeichert sind.
-
Bei einer Fehlfunktion des Funktionsprogramms, beispielsweise verursacht durch eine Schadsoftware, kann es jedoch zu einer unerwünschten Fehlfunktion des gesamten Hardware-Prozessorsystems kommen, welche unerwünscht ist.
-
Es ist daher die Aufgabe der vorliegenden Erfindung, ein Konzept zum sichereren Betrieb eines Hardware-Prozessorsystems zu schaffen.
-
Diese Aufgabe wird durch die Merkmale der Ansprüche, der Beschreibung sowie der beiliegenden Figuren gelöst.
-
Die vorliegende Erfindung basiert auf der Erkenntnis, dass die obige Aufgabe durch eine zusätzliche Bereitstellung eines weiteren Funktionsprogrammcodes gelöst werden kann, welcher die Funktionsweise des allgemeinen Funktionsprograms überwacht. Dieses Konzept kann vorteilhaft in Hardware-Prozessorsystemen implementiert werden, welche voneinander getrennte Datenspeicherbereiche, beispielsweise eines Arbeitsspeichers aufweisen. So kann in einem ersten Datenspeicher, welcher ungesichert sein kann, ein allgemeiner Funktionsprogrammcode wie beispielswiese eine Firmware und in einem zweiten Datenspeicher, welcher gesichert sein kann, ein beispielsweise spezifischer Funktionsprogrammcode gespeichert werden.
-
Gemäß einem ersten Aspekt betrifft die Erfindung eine Datenverarbeitungsvorrichtung zur Provisionierung eines Hardware-Prozessorsystems mit einem ersten Funktionsprogrammcode und einem zweiten Funktionsprogrammcode, wobei das Hardware-Prozessorsystem einen Prozessor und einen Arbeitsspeicher mit einem ersten Datenspeicherbereich und einem zweiten Datenspeicherbereich aufweist, wobei das Hardware-Prozessorsystem einen Hardware-Adressraum aufweist, wobei dem ersten Datenspeicherbereich ein erster Adressbereich des Hardware-Adressraums zugeordnet ist, wobei dem zweiten Datenspeicherbereich ein zweiter Adressbereich des Hardware-Adressraums zugeordnet ist, und wobei die Datenverarbeitungsvorrichtung ausgebildet ist, einen ersten ausführbaren Programmcode bereitzustellen, wobei der erste ausführbare Programmcode bei Ausführung durch den Prozessor ausgebildet ist, ausschließlich auf eine Adressuntermenge des Hardware-Adressraums zuzugreifen, wobei die Datenverarbeitungsvorrichtung ausgebildet ist, den ersten ausführbaren Programmcode unter Verwendung eines kryptographischen Verschlüsselungsschlüssels mit einer digitalen Signatur zu signieren, um den ersten Funktionsprogrammcode zu erhalten, und einen zweiten ausführbaren Programmcode bereitzustellen, wobei der zweite ausführbare Programcode bei Ausführung durch den Prozessor ausgebildet ist, auf den gesamten Hardware-Adressraum mit (d.h. einschließlich) dem zweiten Adressbereich des zweiten Datenspeicherbereichs zuzugreifen, wobei die Datenverarbeitungsvorrichtung ausgebildet ist, den zweiten ausführbaren Programmcode mit einem kryptographischen Entschlüsselungsschlüssel zu versehen, welcher dem kryptographischen Verschlüsselungsschlüssel zugeordnet ist, um den zweiten Funktionsprogrammcode zu erhalten, wobei der zweite Funktionsprogrammcode bei Ausführung durch den Prozessor ausgebildet ist, die digitale Signatur des ersten Funktionsprogrammcodes unter Verwendung des kryptographischen Entschlüsselungsschlüssels zu verifizieren, wobei die Datenverarbeitungsvorrichtung ausgebildet ist, den ersten Funktionsprogrammcode in den ersten Datenspeicherbereich des Hardware-Prozessorsystems zu laden und den zweiten Funktionsprogrammcode in den zweiten Datenspeicherbereich des Hardware-Prozessorsystems zu laden.
-
Das Hardware-Prozessorsystem ist kein Element der Datenverarbeitungsvorrichtung.
-
Der Hardware-Adressraum umfasst beispielsweise alle Hardware-Adressen, welche das Hardware-Prozessorsystem aufweist. Hardware-Adressen können beispielsweise einen Adressraum mit Hardware-Adressen von 0x0000 bis OxFFFF, welche eine hexadezimale Schreibweise haben können, definieren. Die Hardware-Adressen dienen zur Adressierung von Komponenten des Hardware-Prozessorsystems, welche beispielsweise an einen Prozessor-Bus des Hardware-Prozessorsystems angeschlossen sind.
-
Der jeweilige ausführbare Programmcode ist beispielsweise ein kompilierter Source-Code.
-
Der jeweilige Funktionsprogrammcode ist ausführbar und beispielsweise ein kompilierter Source-Code.
-
Durch das Laden des jeweiligen Funktionsprogrammcodes in den jeweiligen Datenspeicherbereich wird der jeweilige Funktionsprogrammcode an den jeweiligen Datenspeicherbereich übertragen und dort gespeichert. Hierzu kann ein Prozessorbus des Hardware-Prozessorsystems verwendet werden.
-
In einer Ausführungsform ist die Datenverarbeitungsvorrichtung ausgebildet, den ersten ausführbaren Programmcode durch Kompilierung eines ersten Basisprogrammcodes zu erzeugen, wobei die Datenverarbeitungsvorrichtung ferner ausgebildet ist, den zweiten ausführbaren Programmcode durch Kompilierung eines zweiten Basisprogrammcodes zu erzeugen.
-
Der jeweilige Basisprogrammcode liegt beispielsweise als Source-Code vor. Die Datenverarbeitungsvorrichtung ist bevorzugt als Kompilierer ausgebildet, um den jeweiligen ausführbaren Programmcode zu erzeugen.
-
In einer Ausführungsform ist die Datenverarbeitungsvorrichtung ausgebildet, den ersten ausführbaren Programmcode und den zweiten ausführbaren Programmcode zu empfangen, insbesondere über ein Kommunikationsnetzwerk zu empfangen und, insbesondere in einer vor unberechtigten externen Zugriffen geschützten Umgebung, zu signieren.
-
Die Datenverarbeitungsvorrichtung kann hierzu beispielswese als ein Hardware-Sicherheitsmodul ausgebildet sein, welche den jeweiligen Programmcode über eine Schnittstelle, welche drahtlos der drahtgebunden sein kann, empfangen kann.
-
In einer Ausführungsform weist der erste ausführbare Programcode eine erste digitale Signatur auf der Basis eines ersten kryptographischen Verschlüsselungsschlüssels auf, wobei die Datenverarbeitungsvorrichtung ausgebildet ist, die erste digitale Signatur mit einem ersten kryptographischen Entschlüsselungsschlüssel, welcher dem ersten kryptographischen Verschlüsselungsschlüssel zugeordnet ist, zu verifizieren und die erste digitale Signatur nach erfolgreicher Verifizierung zu entfernen, um den ersten ausführbaren Programcode bereitzustellen, und wobei der zweite ausführbare Programcode eine zweite digitale Signatur auf der Basis eines zweiten kryptographischen Verschlüsselungsschlüssels aufweist, wobei die Datenverarbeitungsvorrichtung ausgebildet ist, die zweite digitale Signatur mit einem zweiten kryptographischen Entschlüsselungsschlüssel, welcher dem zweiten kryptographischen Verschlüsselungsschlüssel zugeordnet ist, zu verifizieren und die zweite digitale Signatur nach erfolgreicher Verifizierung zu entfernen, um den zweiten ausführbaren Programcode bereitzustellen.
-
Nach dem Entfernen der bestehenden digitalen Signaturen werden die ausführbaren Programmcodes durch die Datenverarbeitungsvorrichtung erneut signiert. Die erste und zweite digitale Signatur können beispielsweise auf der Basis eines generischen kryptographischen Testschlüssels erzeugt worden sein. Durch den Austausch dieser Signaturen wird die Systemsicherheit insgesamt erhöht.
-
In einer Ausführungsform ist die Datenverarbeitungsvorrichtung ausgebildet ist, eine hybride Verschlüsselung des ersten ausführbaren Programmcodes durchzuführen, d.h. den ersten ausführbaren Programmcode mit einem zufällig gewählten symmetrischen Verschlüsselungsschlüssel zu verschlüsseln und den hierfür verwendeten symmetrischen Verschlüsselungsschlüsselt mit einem asymmetrischen Verschlüsselungsschlüssel zu verschlüsseln. In dieser Ausführungsform ist der zweite Funktionsprogrammcode bei Ausführung durch den Prozessor des Hardware-Prozessorsystems zusätzlich ausgebildet, den symmetrischen Verschlüsselungsschlüssel mit dem asymmetrischen Entschlüsselungsschlüssel zu entschlüsseln und anschließend mit dem symmetrischen Verschlüsselungsschlüssel den ersten Funktionsprogrammcode zu entschlüsseln, bevor dieser zur Ausführung gebracht wird.
-
In einer Ausführungsform ist die Datenverarbeitungsvorrichtung ausgebildet, das Hardware-Prozessorsystem zu emulieren und den ersten und zweiten Funktionsprogrammcode auszuführen, um die gemeinsame Funktionsweise der Funktionsprogrammcodes zu testen.
-
Hierbei können insbesondere die Wechselwirkungen zwischen den Funktionsprogrammcodes überprüft werden, bevor die Funktionsprogrammcodes in die Datenspeicher geladen werden.
-
In einer Ausführungsform ist die Datenverarbeitungsvorrichtung ausgebildet, den ersten Funktionsprogrammcode und den zweiten Funktionsprogrammcode drahtlos, insbesondere über ein Kommunikationsnetzwerk, oder drahtgebunden, insbesondere über eine drahtgebundene Kommunikationsschnittstelle, zu übertragen.
-
In einer Ausführungsform legen die einander zugeordneten kryptographischen Entschlüsselungsschlüssel und Verschlüsselungsschlüssel eine kryptographisch symmetrische Verschlüsselung fest und sind gleich, oder die einander zugeordneten kryptographischen Entschlüsselungsschlüssel und Verschlüsselungsschlüssel legen eine kryptographisch asymmetrische Verschlüsselung fest und formen jeweils ein Schlüsselpaar mit einem kryptographischen privaten Schlüssel und einem kryptographischen öffentlichen Schlüssel.
-
In einer Ausführungsform ist der erste ausführbare Programmcode bzw. Funktionsprogrammcode ein Betriebssystem oder eine Firmware, und der zweite ausführbare Programmcode bzw. Funktionsprogrammcode implementiert eine kryptographische Funktion.
-
Gemäß einem zweiten Aspekt betrifft die Erfindung ein Provisionierungsverfahren zur Provisionierung eines Hardware-Prozessorsystems mit einem ersten Funktionsprogrammcode und einem zweiten Funktionsprogrammcode, wobei das Hardware-Prozessorsystem einen Prozessor und einen Arbeitsspeicher mit einem ersten Datenspeicherbereich und einem zweiten Datenspeicherbereich aufweist, wobei das Hardware-Prozessorsystem einen Hardware-Adressraum aufweist, wobei dem ersten Datenspeicher ein erster Adressbereich des Hardware-Adressraums zugeordnet ist, wobei dem zweiten Datenspeicher ein zweiter Adressbereich des Hardware-Adressraums zugeordnet ist, und wobei das Provisionierungsverfahren die folgenden Merkmale aufweist: Bereitstellen eines ersten ausführbaren Programmcodes, wobei der erste ausführbare Programmcode bei Ausführung durch den Prozessor ausgebildet ist, ausschließlich auf eine Adressuntermenge des Hardware-Adressraums zuzugreifen; Signieren des ersten ausführbaren Programmcodes unter Verwendung eines kryptographischen Verschlüsselungsschlüssels mit einer digitalen Signatur, um den ersten Funktionsprogrammcode zu erhalten; Bereitstellen eines zweiten ausführbaren Programmcodes, wobei der zweite ausführbare Programcode bei Ausführung durch den Prozessor ausgebildet ist, auf den gesamten Hardware-Adressraum mit (d.h. einschließlich) dem zweiten Adressbereich des zweiten Datenspeicherbereichs zuzugreifen; Versehen des zweiten ausführbaren Programmcodes mit einem kryptographischen Entschlüsselungsschlüssel, welcher dem kryptographischen Verschlüsselungsschlüssel zugeordnet ist, um den zweiten Funktionsprogrammcode zu erhalten, wobei der zweite Funktionsprogrammcode bei Ausführung durch den Prozessor ausgebildet ist, die digitale Signatur des ersten Funktionsprogrammcodes unter Verwendung des kryptographischen Entschlüsselungsschlüssels zu verifizieren; Laden des ersten Funktionsprogrammcodes in den ersten Datenspeicherbereich des Hardware-Prozessorsystems; und Laden des zweiten Funktionsprogrammcodes in den zweiten Datenspeicherbereich des Hardware-Prozessorsystems.
-
Weitere Merkmale des Provisionierungsverfahrens gemäß dem zweiten Aspekt ergeben sich unmittelbar aus der Funktionsweise der Datenverarbeitungsvorrichtung gemäß dem ersten Aspekt.
-
Das Provisionierungsverfahren wird in einer Ausführungsform durch die Datenverarbeitungsvorrichtung gemäß dem ersten Aspekt ausgeführt.
-
Weitere Ausführungsformen werden Bezug nehmend auf die beiliegenden Figuren beschrieben. Es zeigen:
- 1 eine schematische Darstellung einer herkömmlichen Datenverarbeitungsvorrichtung zur Provisionierung eines Hardware-Prozessorsystems mit Funktionsprogrammcode;
- 2 eine schematische Darstellung einer Datenverarbeitungsvorrichtung zur Provisionierung eines Hardware-Prozessorsystems mit Funktionsprogrammcode gemäß einer Ausführungsform der Erfindung;
- 3 eine schematische Darstellung einer Datenverarbeitungsvorrichtung zur Provisionierung eines Hardware-Prozessorsystems mit Funktionsprogrammcode gemäß einer weiteren Ausführungsform der Erfindung;
- 4 eine schematische Darstellung einer Datenverarbeitungsvorrichtung zur Provisionierung eines Hardware-Prozessorsystems mit Funktionsprogrammcode gemäß einer weiteren Ausführungsform der Erfindung; und
- 5 ein Flussdiagramm, welches Schritte eines Verfahrens zur Provisionierung eines Hardware-Prozessorsystems mit Funktionsprogrammcode gemäß einer Ausführungsform der Erfindung zeigt.
-
In der folgenden ausführlichen Beschreibung wird auf die beiliegenden Zeichnungen Bezug genommen, die einen Teil hiervon bilden und in denen als Veranschaulichung spezifische Ausführungsformen gezeigt sind, in denen die Erfindung ausgeführt werden kann. Es versteht sich, dass auch andere Ausführungsformen genutzt und strukturelle oder logische Änderungen vorgenommen werden können, ohne vom Konzept der vorliegenden Erfindung abzuweichen. Die folgende ausführliche Beschreibung ist deshalb nicht in einem beschränkenden Sinne zu verstehen. Ferner versteht es sich, dass die Merkmale der verschiedenen hierin beschriebenen Ausführungsbeispiele miteinander kombiniert werden können, sofern nicht spezifisch etwas anderes angegeben ist.
-
Die Aspekte und Ausführungsformen werden unter Bezugnahme auf die Zeichnungen beschrieben, wobei gleiche Bezugszeichen sich im Allgemeinen auf gleiche Elemente beziehen. In der folgenden Beschreibung werden zu Erläuterungszwecken zahlreiche spezifische Details dargelegt, um ein eingehendes Verständnis von einem oder mehreren Aspekten der Erfindung zu vermitteln. Für einen Fachmann kann es jedoch offensichtlich sein, dass ein oder mehrere Aspekte oder Ausführungsformen mit einem geringeren Grad der spezifischen Details ausgeführt werden können. In anderen Fällen werden bekannte Strukturen und Elemente in schematischer Form dargestellt, um das Beschreiben von einem oder mehreren Aspekten oder Ausführungsformen zu erleichtern. Es versteht sich, dass andere Ausführungsformen genutzt und strukturelle oder logische Änderungen vorgenommen werden können, ohne von dem Konzept der vorliegenden Erfindung abzuweichen.
-
Es werden Vorrichtungen beschrieben, und es werden Verfahren beschrieben. Es versteht sich, dass Grundeigenschaften der Vorrichtungen auch für die Verfahren gelten und umgekehrt. Deshalb wird der Kürze halber gegebenenfalls auf eine doppelte Beschreibung solcher Eigenschaften verzichtet.
-
1 zeigt eine herkömmliche Software-Entwicklungsumgebung 110 in Form einer Datenverarbeitungsvorrichtung 110, beispielsweise eines PCs 110, welcher für die Entwicklung von Software konfiguriert ist. Hierzu weist die Datenverarbeitungsvorrichtung 110 beispielsweise entsprechende Entwicklungssoftware auf, insbesondere einen Compiler und einen Linker, welche ausgebildet sind, gegebenenfalls unter Verwendung von Software-Bibliotheken 113 einen Source-Code 111 in einer Hochsprache, wie z.B. C oder C++, in einen Funktionsprogrammcode 127 in binärer Form (auch als Binär-Code oder Maschinecode bekannt) für eine Zielplattform 120 umzuwandeln. In 1 handelt es sich bei der Zielplattform 120 um ein Hardwareprozessorsystem 120 mit einem Prozessor 121, einem Arbeitsspeicher 123 und einem Festspeicher 127, in dem der Funktionsprogrammcode 127 gespeichert ist, um zur Ausführung durch den Prozessor 121 in den Arbeitsspeicher 123 geladen zu werden.
-
Im Einzelnen sind in 1 die folgenden Abschnitte bzw. Phasen der Softwareentwicklung mit der bekannten Datenverarbeitungsvorrichtung 110 dargestellt. In einem Abschnitt „1“ übersetzt der Compiler der Datenverarbeitungsvorrichtung 110 den Source-Code 111 in den Funktionsprogrammcode 127 und der Linker der Datenverarbeitungsvorrichtung 110 legt die Adressen im Adressraum des Hardware-Prozessorsystems 120 fest, an welche der Funktionsprogrammcode 127 zur Ausführung durch den Prozessor 121 gebunden wird. In einem Abschnitt „2“ wird der Funktionsprogrammcode 127 als Binärcode in den Festspeicher 125 des Hardware-Prozessorsystems 120 geladen. In einem anschließenden Abschnitt „3“ kann der Funktionsprogrammcode 127 durch den Prozessor 121 des Hardware-Prozessorsystems 120 zu jeder Zeit ausgeführt werden (wobei dieser zur Ausführung in den Arbeitsspeicher 123 geladen wird).
-
Wie bereits erwähnt, können bei Bedarf zusätzliche Software-Bibliotheken 113 in den Funktionsprogrammcode 127 integriert werden, wie beispielsweise eine Bibliothek 113 mit Betriebssystemaufrufen (z.B. die POSIX-Bibliothek für Hardware-Prozessorsysteme 120, welche mit Linux betrieben werden, oder Treiber für Zugriffe auf Peripheriegeräte). Dabei werden aus dem Source-Code 111 und den Software-Bibliotheken 113 ausführbare Maschinenbefehle generiert, die zusammen mit Daten an bestimmte Speicheradressen des Hardware-Prozessorsystems 120 gebunden sind.
-
2 zeigt eine Datenverarbeitungsvorrichtung 210, welche beispielweise ein PC 210 sein kann und erfindungsgemäß zur Provisionierung des Hardware-Prozessorsystems 220 mit einem ersten Funktionsprogrammcode 227a und einem zweiten Funktionsprogrammcode 227b ausgebildet ist. Das Hardware-Prozessorsystem 220, bei dem es sich beispielsweise um einen Computer, ein Smartphone oder eine andere elektronische Vorrichtung handeln kann, umfasst einen Prozessor, einen Festspeicher 225, beispielsweise einen Flash-Speicher 225 und einen Arbeitsspeicher. Wie in 2 dargestellt, umfasst sowohl der Prozessor als auch der Arbeitsspeicher des Hardware-Prozessorsystems 220 einen normalen Bereich und einen gesicherten Bereich, nämlich der Prozessor einen normalen Prozessorbereich 221a und einen sicheren Prozessorbereich 221b und der Arbeitsspeicher einen ersten normalen Datenspeicherbereich 223a und einen zweiten sicheren bzw. gesicherten Datenspeicherbereich 223b. Wie ferner in 2 dargestellt, weist das Hardware-Prozessorsystem 220 einen Hardware-Adressraum auf, wobei dem ersten normalen Datenspeicherbereich 223a ein erster Adressbereich des Hardware-Adressraums zugeordnet ist und dem zweiten sicheren Datenspeicherbereich 223b ein zweiter Adressbereich des Hardware-Adressraums zugeordnet ist. Die vorstehend beschriebene Unterteilung des Prozessors und des Arbeitsspeichers in normale Bereiche 221a, 223a und gesicherte Bereiche 221b, 223b ist dem Fachmann beispielsweise unter dem Begriff „Trusted Execution Environment“ bekannt, was nachstehend noch detaillierter beschrieben wird.
-
Generell ist die Datenverarbeitungsvorrichtung 210 erfindungsgemäß dazu ausgebildet, zwischen Programmbestandteilen für den sicheren Bereich und des Hardware-Prozessorsystems 220 zu unterscheiden. Hierfür ist die Datenverarbeitungsvorrichtung 210 im Einzelnen ausgebildet, auf der Grundlage eines Source-Code 211 in einer Hochsprache, beispielsweise C oder C++, einen ersten ausführbaren Programmcode bereitzustellen, wobei der erste ausführbare Programmcode bei Ausführung durch den Prozessor des Hardware-Prozessorsystems 220, insbesondere durch den normalen Bereich 221a des Prozessors ausgebildet ist, ausschließlich auf eine Adressuntermenge des Hardware-Adressraums zuzugreifen. Dabei kann in einer Ausführungsform der zweite Adressbereich des zweiten Datenspeicherbereichs 223b aus der Adressuntermenge ausgeschlossen sein.
-
Ferner ist die Datenverarbeitungsvorrichtung 210 ausgebildet, den ersten ausführbaren Programmcode unter Verwendung eines kryptographischen Verschlüsselungsschlüssels mit einer digitalen Signatur zu signieren, um den ersten Funktionsprogrammcode 227a zu erhalten.
-
Die Datenverarbeitungsvorrichtung 210 ist ferner ausgebildet, einen zweiten ausführbaren Programmcode bereitzustellen, wobei der zweite ausführbare Programcode bei Ausführung durch den Prozessor des Hardware-Prozessorsystems 220, insbesondere durch den sicheren Bereich 221b des Prozessors ausgebildet ist, auf den gesamten Hardware-Adressraum mit (d.h. einschließlich) dem zweiten Adressbereich des zweiten Datenspeicherbereichs 223b zuzugreifen.
-
Ferner ist die Datenverarbeitungsvorrichtung 210 ausgebildet, den zweiten ausführbaren Programmcode mit einem kryptographischen Entschlüsselungsschlüssel zu versehen, welcher dem kryptographischen Verschlüsselungsschlüssel zugeordnet ist, um den zweiten Funktionsprogrammcode 227b zu erhalten, wobei der zweite Funktionsprogrammcode 227b bei Ausführung durch den Prozessor des Hardware-Prozessorsystems 220, insbesondere durch den sicheren Bereich 221b des Prozessors ausgebildet ist, die digitale Signatur des ersten Funktionsprogrammcodes 227a unter Verwendung des kryptographischen Entschlüsselungsschlüssels zu verifizieren.
-
Die Datenverarbeitungsvorrichtung 210 ist ferner ausgebildet, den ersten Funktionsprogrammcode 227a in den ersten Datenspeicherbereich 223a des Hardware-Prozessorsystems 220 zu laden und den zweiten Funktionsprogrammcode 227b in den zweiten Datenspeicherbereich 223b des Hardware-Prozessorsystems 220 zu laden.
-
In einer Ausführungsform ist die Datenverarbeitungsvorrichtung 210 ausgebildet, den ersten ausführbaren Programmcode durch Kompilierung eines ersten Basisprogrammcodes zu erzeugen, wobei die Datenverarbeitungsvorrichtung 210 ferner ausgebildet ist, den zweiten ausführbaren Programmcode durch Kompilierung eines zweiten Basisprogrammcodes zu erzeugen. Wie in 2 dargestellt, kann der jeweilige Basisprogrammcode beispielsweise als Source-Code 211 vorliegen. Die Datenverarbeitungsvorrichtung 210 ist bevorzugt als Kompilierer ausgebildet, um den jeweiligen ausführbaren Programmcode zu erzeugen.
-
In einer alternativen Ausführungsform ist die Datenverarbeitungsvorrichtung 210 ausgebildet, den ersten ausführbaren Programmcode und den zweiten ausführbaren Programmcode zu empfangen, insbesondere über ein Kommunikationsnetzwerk zu empfangen und, insbesondere in einer vor unberechtigten externen Zugriffen geschützten Umgebung, zu signieren. Die Datenverarbeitungsvorrichtung 210 kann hierzu beispielswese als ein Hardware-Sicherheitsmodul ausgebildet sein, welche den jeweiligen Programmcode über eine Schnittstelle, welche drahtlos der drahtgebunden sein kann, empfangen kann.
-
In einer Ausführungsform weist der erste ausführbare Programcode eine erste digitale Signatur auf der Basis eines ersten kryptographischen Verschlüsselungsschlüssels auf, wobei die Datenverarbeitungsvorrichtung 210 ausgebildet ist, die erste digitale Signatur mit einem ersten kryptographischen Entschlüsselungsschlüssel, welcher dem ersten kryptographischen Verschlüsselungsschlüssel zugeordnet ist, zu verifizieren und die erste digitale Signatur nach erfolgreicher Verifizierung zu entfernen, um den ersten ausführbaren Funktionsprogramcode 227a bereitzustellen, und wobei der zweite ausführbare Programcode eine zweite digitale Signatur auf der Basis eines zweiten kryptographischen Verschlüsselungsschlüssels aufweist, wobei die Datenverarbeitungsvorrichtung 210 ausgebildet ist, die zweite digitale Signatur mit einem zweiten kryptographischen Entschlüsselungsschlüssel, welcher dem zweiten kryptographischen Verschlüsselungsschlüssel zugeordnet ist, zu verifizieren und die zweite digitale Signatur nach erfolgreicher Verifizierung zu entfernen, um den zweiten ausführbaren Funktionsprogramcode 227b bereitzustellen.
-
Nach dem Entfernen der bestehenden digitalen Signaturen können die ausführbaren Programmcodes durch die Datenverarbeitungsvorrichtung 210 erneut signiert werden. Die erste und zweite digitale Signatur können beispielsweise auf der Basis eines generischen kryptographischen Testschlüssels erzeugt worden sein. Durch den Austausch dieser Signaturen wird die Systemsicherheit insgesamt erhöht.
-
In einer Ausführungsform ist die Datenverarbeitungsvorrichtung 210 ausgebildet ist, eine hybride Verschlüsselung des ersten ausführbaren Programmcodes durchzuführen, d.h. den ersten ausführbaren Programmcode mit einem zufällig gewählten symmetrischen Verschlüsselungsschlüssel zu verschlüsseln und den hierfür verwendeten symmetrischen Verschlüsselungsschlüsselt mit einem asymmetrischen Verschlüsselungsschlüssel zu verschlüsseln. In dieser Ausführungsform ist der zweite Funktionsprogrammcode bei Ausführung durch den Prozessor des Hardware-Prozessorsystems 220 zusätzlich ausgebildet, den symmetrischen Verschlüsselungsschlüssel mit dem asymmetrischen Entschlüsselungsschlüssel zu entschlüsseln und anschließend mit dem symmetrischen Verschlüsselungsschlüssel den ersten Funktionsprogrammcode zu entschlüsseln, bevor dieser zur Ausführung gebracht wird.
-
In einer Ausführungsform ist die Datenverarbeitungsvorrichtung 210 ausgebildet, das Hardware-Prozessorsystem 220 zu emulieren und den ersten und zweiten Funktionsprogrammcode 227a, 227b auszuführen, um die gemeinsame Funktionsweise der Funktionsprogrammcodes 227a, 227b zu testen. Hierbei können insbesondere die Wechselwirkungen zwischen den Funktionsprogrammcodes 227a, 227b überprüft werden, bevor die Funktionsprogrammcodes 227a, 227b in die entsprechenden Datenspeicherbereiche geladen werden.
-
In einer Ausführungsform ist die Datenverarbeitungsvorrichtung 210 ausgebildet, den ersten Funktionsprogrammcode 227a und den zweiten Funktionsprogrammcode 227b drahtlos, insbesondere über ein Kommunikationsnetzwerk, oder drahtgebunden, insbesondere über eine drahtgebundene Kommunikationsschnittstelle, zu übertragen.
-
In einer Ausführungsform legen die einander zugeordneten kryptographischen Entschlüsselungsschlüssel und Verschlüsselungsschlüssel eine kryptographisch symmetrische Verschlüsselung fest und sind gleich, oder die einander zugeordneten kryptographischen Entschlüsselungsschlüssel und Verschlüsselungsschlüssel legen eine kryptographisch asymmetrische Verschlüsselung fest und formen jeweils ein Schlüsselpaar mit einem kryptographischen privaten Schlüssel und einem kryptographischen öffentlichen Schlüssel.
-
Im Einzelnen sind in 2 die folgenden Abschnitte bzw. Phasen der Softwareentwicklung mit der vorstehend beschriebenen erfindungsgemäßen Datenverarbeitungsvorrichtung 210 dargestellt.
-
In dem Abschnitt „1“ übersetzt die erfindungsgemäße Datenverarbeitungsvorrichtung 210 den Source-Code 211 in Binärcode bzw. Maschinencode und unterscheidet dabei zwischen dem Code, d.h. dem ersten Funktionsprogrammcode 227a, der später im normalen Bereich 221a ausgeführt wird, und dem sicherheitskritischem Code, d.h. dem zweiten Funktionsprogrammcode 227b, der gegebenenfalls auf Basis einer Sicherheitskonfiguration an Adressen im gesicherten Bereich 221b gebunden ist.
-
In den Abschnitten „2a“ und „2b“ übermittelt die Datenverarbeitungsvorrichtung 210 den normalen Code, d.h. den ersten Funktionsprogrammcode 227a, und den sicherheitskritischen Code, d.h. den zweiten Funktionsprogrammcode 227b, an das Hardware-Prozessorsystem 220, um den jeweiligen Code 227a, 227b in dem Festspeicher 225 des Hardware-Prozessorsystems 220 zu speichern. Dabei ist, wie bereits vorstehend beschrieben, der jeweilige Code 227a, 227b an unterschiedliche Adresszuweisungen für die unterschiedlichen Bereiche 223a, 223b des Arbeitsspeichers des Hardware-Prozessorsystems 220 gebunden. Wie in 2 beispielhaft dargestellt, kann der erste Funktionsprogrammcode 227a an den Adressbereich 0x1000... bis 0x1FFF... des Arbeitsspeichers gebunden sein und der zweite Funktionsprogrammcode 227b an den Adressbereich 0x2000... bis 0x2FFF... des Arbeitsspeichers gebunden sein.
-
In den Abschnitten „3a“ und „3b“ können der erste Funktionsprogrammcode 227a und der zweite Funktionsprogrammcode 227b durch den Prozessor des Hardware-Prozessorsystems 220, wie vorstehend beschrieben, ausgeführt werden.
-
In einer Ausführungsform kann die Datenverarbeitungsvorrichtung 210 zusätzliche Software-Bibliotheken 213 bei der Erstellung des ersten Funktionsprogrammcodes 227a und/oder des zweiten Funktionsprogrammcodes 227b verwenden: Insbesondere kann die Datenverarbeitungsvorrichtung 210 Software-Bibliotheken 213 mit Sicherheitsfunktionen für die Erstellung des zweiten Funktionsprogrammcodes 227b für den gesicherten Bereich 221b des Hardware-Prozessorsystems 220 verwenden. Diese Software-Bibliotheken 213 mit Sicherheitsfunktionen können zum Beispiel einen sicheren Bootmanager, ein „Trusted Execution Environment“ oder eine Bibliothek mit kryptographischen Routinen umfassen.
-
In einer Ausführungsform besitzen der sicherheitskritische Code und der normaler Code Software-Schnittstellen, die bei der Übersetzung des Programms 211 in Binärcode durch die Datenverarbeitungsvorrichtung 210 berücksichtigt werden, so dass zur Laufzeit des Codes ein Datenaustausch möglich ist.
-
In einer Ausführungsform ist die Datenverarbeitungsvorrichtung 210 ausgebildet, zwischen unterschiedlichen Sicherheitsprozessorbereichen des Hardware-Prozessorsystems 220 (von deinen einer in 2 als „Sicherheits-Subsystem“ bezeichnet ist) zu unterscheiden, beispielsweise zwischen einer Arm TrustZone, einem Samsung Secure Flash Interface (SFI), einem Renesas Trusted Service Interface Protocol (TSIP) oder einem in einm SoC (System-on-Chip) integrierten Sicherheitsprozessor (iSE), der mit einem Hauptprozessor über einen Datenbus oder eine serielle Schnittstelle verbunden ist. Wie bereits vorstehend beschrieben, beruht die Unterscheidung durch die Datenverarbeitungsvorrichtung 210 im Wesentlichen darauf, dass sicherheitskritischer Code an andere Adressen als normaler Code gebunden wird, d.h. das Sicherheits-Subsystem verfügt über einen anderen Adressbereich, der über einen Isolierungsmechanismus (wie dies in 2 schematisch dargestellt ist) vom Adressbereich im normalen Bereich getrennt ist. Wie bereits vorstehend beschrieben, kann diese Trennung mittels einer „TrustZone“ der Firma ARM implementiert werden. Zum Datenaustausch zwischen dem normalen Bereich 221a und dem gesicherten Bereich 221b (d.h. dem Sicherheits-Subsystem 221b) kann ein gemeinsamer Adressbereich verwendet werden. In einer Ausführungsform können unterschiedliche Mechanismen zum Datenaustausch mit dem gesicherten Bereich 221b (d.h. dem Sicherheits-Subsystem 221b) über eine Softwareschnittstelle vereinheitlichen werden, die durch die Datenverarbeitungsvorrichtung 210 bereitgestellt wird. Hierzu kann, wie bereits teilweise vorstehend beschrieben, die Datenverarbeitungsvorrichtung 210 Steuerelemente und Software-Komponenten für den gesicherten Bereich 221b (d.h. das Sicherheits-Subsystem 221b, welches beispielsweise als „TrustZone“ implementiert sein kann) bereitstellen. In diesen Software-Komponenten können die Funktionen implementiert sein, die über die Softwareschnittstelle in vereinheitlichter Form zur Verfügung gestellt werden. Diese Software-Komponenten können beispielsweise enthalten: Software-Komponenten für die Ver- und Entschlüsselung von Daten; Software-Komponenten für die Signatur-Erstellung und -Prüfung; Software-Komponenten für die Ableitung, d.h. Erzeugung von neuen kryptographischen Schlüsseln, z.B. zur Verwendung für eine temporär Transportverschlüsselung; Software-Komponenten für die sichere Speicherung von Daten sowie von Konfigurationseinstellungen; und/oder Software-Komponenten für die Authentisierung von externen und internen Modulen.
-
3 zeigt eine weitere Ausführungsform der Datenverarbeitungsvorrichtung 210 von 2, welche ausgebildet ist, mit einem externen Schlüssel-Provisionierungssystem 300 zu interagieren, um insbesondere den kryptographischen Verschlüsselungsschlüssel und den zugeordneten kryptographischen Entschlüsselungsschlüssel zu erhalten.
-
Im Einzelnen sind in 3 die folgenden Abschnitte bzw. Phasen der Softwareentwicklung mit der vorstehend beschriebenen erfindungsgemäßen Datenverarbeitungsvorrichtung 210 dargestellt.
-
In dem Abschnitt „1“ übersetzt die erfindungsgemäße Datenverarbeitungsvorrichtung 210 den Source-Code 211 in Binärcode und unterscheidet dabei zwischen dem Code, der später im normalen Bereich 211a ausgeführt wird, nämlich dem ersten Funktionsprogrammcode 227a, und dem sicherheitskritischen Code, nämlich dem zweiten Funktionsprogrammcode 227b, und zwar auf der Grundlage einer Sicherheitskonfiguration, welche auch Informationen zu den benötigten kryptographischen Schlüsseln enthält und diese Informationen auch an das Schlüssel-Provisionierungssystem 300 weiterleitet.
-
In den Abschnitten „2a“ und „2b“ übermittelt die Datenverarbeitungsvorrichtung 210 den normalen Code, d.h. den ersten Funktionsprogrammcode 227a, und den sicherheitskritischen Code, d.h. den zweiten Funktionsprogrammcode 227b, an das Hardware-Prozessorsystem 220, um den jeweiligen Code 227a, 227b in dem Festspeicher 225 des Hardware-Prozessorsystems 220 zu speichern. Dabei ist, wie bereits vorstehend beschrieben, der jeweilige Code 227a, 227b an unterschiedliche Adresszuweisungen für die unterschiedlichen Bereiche 223a, 223b des Arbeitsspeichers des Hardware-Prozessorsystems 220 gebunden. Wie in 3 beispielhaft dargestellt, kann der erste Funktionsprogrammcode 227a an den Adressbereich 0x1000... bis 0x1FFF... des Arbeitsspeichers gebunden sein und der zweite Funktionsprogrammcode 227b an den Adressbereich 0x2000... bis 0x2FFF... des Arbeitsspeichers gebunden sein.
-
In dem Abschnitt „3“ werden von dem Schlüssel-Provisionierungssystem 300 geeignete kryptographische Schlüssel in das Sicherheits-Subsystem 221b, d.h. den gesicherten Prozessorbereich 221b des Hardware-Prozessorsystems 220 geschrieben. Bei diesen kryptographischen Schlüsseln kann es sich neben dem vorstehend beschriebenen kryptographischen Verschlüsselungsschlüssel und dem zugeordneten kryptographischen Entschlüsselungsschlüssel um kryptographische Schlüssel zur Authentisierung bei einem Server oder einem Netzwerk, kryptographische Schlüssel zur Autorisierung einer finanziellen Transaktion und/oder um kryptographische Schlüssel zur Verifikation einer digitalen Signatur von anderen externen oder internen Komponenten handeln, z.B. zur Verifikation der Integration von anderen Softwarebestandteilen.
-
In den Abschnitten „4a“ und „4b“ können der erste Funktionsprogrammcode 227a und der zweite Funktionsprogrammcode 227b durch den Prozessor des Hardware-Prozessorsystems 220, wie vorstehend beschrieben, ausgeführt werden. Dabei können die vorstehend beschriebenen Sicherheitsfunktionen ausgeführt werden und die kryptographischen Schlüssel von dem zweiten Funktionsprogrammcode 227b (d.h. dem sicherheitskritischen Code) im gesicherten Bereich 221b, d.h. im Sicherheits-Subsystem 221b des Hardware-Prozessorsystems 220 verwendet werden. Dabei kann eine Softwareschnittstelle den Zugriff auf diese Sicherheitsdienste unabhängig von der unterlagerten Hardware vereinheitlichen.
-
4 zeigt eine weitere Ausführungsform der erfindungsgemäßen Datenverarbeitungsvorrichtung 210, welche neben kryptographischen Schlüsseln auch weitere Sicherheitsinformationen auf dem Hardware-Prozessorsystem 220 provisionieren kann, wie beispielsweise einen Fehlbedienungszähler, Konfigurationseinstellungen für Updates des Funktionsprogramms, Identitätsinformationen, beispielsweise ein X.509 Zertifikat, und dergleichen. Dazu kann im ersten Abschnitt der Softwareentwicklung mittels der Datenverarbeitungsvorrichtung 210 ein Sicherheitsprofil definiert werden, welches die Personalisierung steuert. Ferner kann die Datenverarbeitungsvorrichtung 210 ausgebildet sein, Platzhalter für die Ablage der kryptographischen Schlüssel zu definieren. Im Einzelnen sind in 4 die folgenden Abschnitte bzw. Phasen der Softwareentwicklung mit einer erfindungsgemäßen Datenverarbeitungsvorrichtung 210 dargestellt.
-
In einem Abschnitt „1a“ wird mittels der Datenverarbeitungsvorrichtung 210 eine Sicherheitskonfiguration definiert. Zum Beispiel kann die Datenverarbeitungsvorrichtung 210 definieren, dass Schlüssel für eine spätere Netzwerk- oder Server-Authentisierung benötigt werden. Diese Sicherheitskonfiguration kann auch Platzhalter 405 für die benötigten Schlüssel in einer Sicherheits-Software 403 definieren, die bereits als Bestandteil der Software-Entwicklungsumgebung vorhanden sein kann. Bei der Sicherheits-Software 403 kann es sich beispielsweise um einen Secure Boot Code, ein Trusted Execution Environment oder ein Chipkarten-Betriebssystem handeln.
-
In einem Abschnitt „1b“ stellt dann die Sicherheits-Software 403 über eine SoftwareSchnittstelle 401 der Anwendungssoftware, d.h. des Funktionsprogramms geeignete Sicherheitsdienste zur Verfügung, beispielsweise einen Dienst zur Netzwerk- oder Server-Authentisierung.
-
In einem Abschnitt „1c“ kann die Datenverarbeitungsvorrichtung 210 Informationen zu der vorgenommenen Sicherheitskonfiguration an ein Personalisierungssystem 400 übermitteln.
-
Der in 4 nicht dargestellte Abschnitt „2“ entspricht den im Rahmen der vorstehenden Ausführungsformen von 2 und 3 beschriebenem Abschnitt „2“ und wird daher hier nicht weiter im Detail ausgeführt.
-
In einem in 4 dargestellten Abschnitt „3“ werden die in einem Personalisierungsvorgang benötigten Schlüssel in den sicheren Prozessorbereich 221 b des Hardware-Prozessorsystems 220 eingebracht.
-
Für die Massenproduktion, d.h. die Provisionierung und Personalisierung einer Vielzahl von Hardware-Prozessorsystemen 220 kann das komplette Personalisierungssystem 400 entkoppelt von der Datenverarbeitungsvorrichtung 210 betrieben werden. Hierzu kann in der Datenverarbeitungsvorrichtung 210 in dem ersten Abschnitt einmalig ein generisches Sicherheitsprofil mit generischen Konfigurationsinformationen definiert werden, welches bei der Massenproduktion im Abschnitt 3 mittels des Personalisierungssystems 400 provisioniert und personalisiert wird.
-
5 zeigt ein Flussdiagramm, welches Schritte eines Verfahrens 500 zur Provisionierung des Hardware-Prozessorsystems 220 mit dem ersten Funktionsprogrammcode 227a und dem zweiten Funktionsprogrammcode 227b darstellt.
-
Das in 5 dargestellte Provisionierungsverfahren 500 umfasst das Bereitstellen 501 eines ersten ausführbaren Programmcodes, wobei der erste ausführbare Programmcode bei Ausführung durch den Prozessor des Hardware-Prozessorsystems 220 ausgebildet ist, ausschließlich auf eine Adressuntermenge des Hardware-Adressraums zuzugreifen Dabei kann in einer Ausführungsform der zweite Adressbereich des zweiten Datenspeicherbereichs 223b des Hardware-Prozessorsystems 220 aus der Adressuntermenge ausgeschlossen sein.
-
Ferner umfasst das Provisionierungsverfahren 500 das Signieren 503 des ersten ausführbaren Programmcodes unter Verwendung eines kryptographischen Verschlüsselungsschlüssels mit einer digitalen Signatur, um den ersten Funktionsprogrammcode 227a zu erhalten.
-
Das Provisionierungsverfahren 500 umfasst ferner das Bereitstellen 505 eines zweiten ausführbaren Programmcodes, wobei der zweite ausführbare Programcode bei Ausführung durch den Prozessor des Hardware-Prozessorsystems 220 ausgebildet ist, auf den gesamten Hardware-Adressraum mit (d.h. einschließlich) dem zweiten Adressbereich des Datenspeichers, d.h. des zweiten Datenspeicherbereichs 223b zuzugreifen.
-
Ferner umfasst das Provisionierungsverfahren 500 das Versehen 507 des zweiten ausführbaren Programmcodes mit einem kryptographischen Entschlüsselungsschlüssel, welcher dem kryptographischen Verschlüsselungsschlüssel zugeordnet ist, um den zweiten Funktionsprogrammcode zu erhalten, wobei der zweite Funktionsprogrammcode bei Ausführung durch den Prozessor ausgebildet ist, die digitale Signatur des ersten Funktionsprogrammcodes unter Verwendung des kryptographischen Entschlüsselungsschlüssels zu verifizieren.
-
Schließlich umfasst das Provisionierungsverfahren 500 das Laden 509 des ersten Funktionsprogrammcodes 227a in den ersten Datenspeicherbereich 223a des Hardware-Prozessorsystems 220 und des zweiten Funktionsprogrammcodes 227b in den zweiten Datenspeicherbereich 223b des Hardware-Prozessorsystems 220.