DE102015226249A1 - Vorrichtung und Verfahren zum Bereitstellen einer Mehrzahl von reproduzierbaren Werten - Google Patents

Vorrichtung und Verfahren zum Bereitstellen einer Mehrzahl von reproduzierbaren Werten Download PDF

Info

Publication number
DE102015226249A1
DE102015226249A1 DE102015226249.9A DE102015226249A DE102015226249A1 DE 102015226249 A1 DE102015226249 A1 DE 102015226249A1 DE 102015226249 A DE102015226249 A DE 102015226249A DE 102015226249 A1 DE102015226249 A1 DE 102015226249A1
Authority
DE
Germany
Prior art keywords
code
execution
unit
reproducible values
time
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Withdrawn
Application number
DE102015226249.9A
Other languages
English (en)
Inventor
Johannes Zwanzger
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Siemens AG
Original Assignee
Siemens AG
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Siemens AG filed Critical Siemens AG
Priority to DE102015226249.9A priority Critical patent/DE102015226249A1/de
Priority to PCT/EP2016/079992 priority patent/WO2017108397A1/de
Publication of DE102015226249A1 publication Critical patent/DE102015226249A1/de
Withdrawn legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/64Protecting data integrity, e.g. using checksums, certificates or signatures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • G06F21/54Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by adding security routines or objects to programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/71Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/21Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/2151Time stamp

Abstract

Es wird eine Vorrichtung zum Bereitstellen einer Mehrzahl von reproduzierbaren Werten, wobei die Mehrzahl von reproduzierbaren Werten an ein Gerät mit einer Hauptprozessoreinheit mit zumindest einem Kern gebunden ist, vorgeschlagen. Die Vorrichtung weist eine Ausführeinheit zum Ausführen einer Mehrzahl von Codeschleifen, eine Bestimmungseinheit zum Bestimmen einer Ausführzeit für jede der Mehrzahl von Codeschleifen, und eine Berechnungseinheit zum Berechnen einer Mehrzahl von reproduzierbaren Werten basierend auf den Ausführzeiten und zum Bereitstellen der Mehrzahl von reproduzierbaren Werten an zumindest eine weitere Einheit auf. Durch die vorgeschlagene Vorrichtung ist es auf einfache Weise möglich, Code an ein bestimmtes Gerät zu binden. Das Verhalten des Codes ist für einen Angreifer nicht vorhersagbar, da er auf unspezifizierten, individuellen Eigenschaften des Geräts beim Timing-Verhalten aufbaut. Dieser Code kann zur Erzeugung von Schlüsseln oder dergleichen verwendet werden. Des Weiteren werden ein entsprechendes Verfahren und ein Computerprogrammprodukt vorgeschlagen.

Description

  • Die vorliegende Erfindung betrifft eine Vorrichtung zum Bereitstellen einer Mehrzahl von reproduzierbaren Werten. Des Weiteren betrifft die vorliegende Erfindung ein Verfahren zum Bereitstellen einer Mehrzahl von reproduzierbaren Werten. Darüber hinaus betrifft die vorliegende Erfindung ein Computerprogrammprodukt, welches auf einer programmgesteuerten Einrichtung die Durchführung eines solchen Verfahrens veranlasst.
  • Für viele Softwareanwendungen kann es erforderlich oder zumindest wünschenswert sein, bestimmte Teile des resultierenden Maschinencodes geheim zu halten. Hierzu zählen beispielsweise Codeabschnitte, die algorithmisches Know-How oder Schlüssel für kryptographische Anwendungen enthalten. Allerdings ist dies auf vielen Systemen so nicht möglich, da der Code ausgeführt werden soll und daher in irgendeiner interpretierbaren Form vorliegen muss. Kommt keine spezielle Sicherheitshardware zum Einsatz, sind die Datenträger, auf denen der Code abgelegt ist, meist leicht auslesbar. In manchen Fällen sind sogar große Teile des Codes, beispielsweise als Firmware, zu Updatezwecken direkt im Internet verfügbar. Liegt einem Angreifer – bei dem es sich auch um den Anwender der Software mit weitreichender Kontrolle über das Zielsystem handeln kann – der Maschinencode erst einmal vor, kann er normalerweise anhand der Dokumentation des Befehlssatzes der Hauptprozessoreinheit (CPU) Schritt für Schritt simulieren, wie sich der Code bei der Ausführung verhalten wird.
  • Oft kann dies sogar in einer völlig anderen Hard- und Softwareumgebung passieren, als sie auf dem Zielsystem vorliegt, etwa durch Ausführung des Maschinencodes auf einer anderen Plattform mit derselben CPU bzw. einem Emulator oder durch Nachprogrammierung in einer höheren Programmiersprache. Hierbei spricht man von einem sogenannten „Ausschneideangriff“. Ein solcher ermöglicht dem Angreifer einerseits bessere Analysemöglichkeiten (z.B. durch den Einsatz von für die Zielhardware nicht verfügbaren Debugging-Tools, Einbau von hilfreichen Ausgaben in den Code, etc.), andererseits kann er den Code auf diese Weise aber auch für seine Zwecke nutzen (etwa um eine attraktive Funktion der Software im eigenen Produkt zu vermarkten) oder modifizieren (z.B. zum Umgehen einer Lizenzprüfung).
  • Es ist bekannt, Codeteile zu schützen, indem sie auf externe Hardware ausgelagert werden, die speziell gegen Angriffe geschützt sein kann. Hierzu ist allerdings zusätzliche Hardware und eine Anbindung dieser Hardware an das Restsystem erforderlich. Außerdem kann es je nach Leistungsfähigkeit der Zusatzhardware vorkommen, dass trotzdem noch kritische Codeteile auf dem ungeschützten Ausgangssystem ausgeführt werden müssen.
  • Des Weiteren kann Code an bestimmte, geräteindividuelle Hardware-Merkmale, wie beispielsweise Seriennummern von Komponenten, gebunden werden, welche bei der Ausführung des Codes an geeigneter Stelle abgefragt werden. Allerdings ist eine solche Abfrage für einen Angreifer leicht erkennbar. Des Weiteren ist die Menge solcher hardwarespezifischen Informationen meist stark beschränkt und oft auch in leicht zugänglichen Dokumenten nachzulesen.
  • Vor diesem Hintergrund besteht eine Aufgabe der vorliegenden Erfindung darin, auf einfache Weise Code an eine Ausführumgebung bzw. ein Gerät zu binden, um die Ausführung des Codes zu sichern.
  • Demgemäß wird eine Vorrichtung zum Bereitstellen einer Mehrzahl von reproduzierbaren Werten, wobei die Mehrzahl von reproduzierbaren Werten an ein Gerät mit einer Hauptprozessoreinheit mit zumindest einem Kern gebunden ist, vorgeschlagen. Die Vorrichtung weist eine Ausführeinheit zum Ausführen einer Mehrzahl von Codeschleifen, eine Bestimmungseinheit zum Bestimmen einer Ausführzeit für jede der Mehrzahl von Codeschleifen, und eine Berechnungseinheit zum Berechnen einer Mehrzahl von reproduzierbaren Werten basierend auf den Ausführzeiten und zum Bereitstellen der Mehrzahl von reproduzierbaren Werten an zumindest eine weitere Einheit auf.
  • Die jeweilige Einheit, zum Beispiel Ausführeinheit oder Berechnungseinheit, kann hardwaretechnisch und/oder auch softwaretechnisch implementiert sein. Bei einer hardwaretechnischen Implementierung kann die jeweilige Einheit als Vorrichtung oder als Teil einer Vorrichtung, zum Beispiel als Computer oder als Mikroprozessor ausgebildet sein. Bei einer softwaretechnischen Implementierung kann die jeweilige Einheit als Computerprogrammprodukt, als eine Funktion, als eine Routine, als Teil eines Programmcodes oder als ausführbares Objekt ausgebildet sein.
  • Durch die vorgeschlagene Vorrichtung ist es möglich, Code, im Folgenden auch Maschinencode genannt, nicht zwingend geheim zu halten, sondern ihn vielmehr eng an die Zielhardware, d.h. das Gerät, zu binden, so dass eine Portierung auf andere Systeme nicht ohne weiteres möglich ist.
  • Die Ausführzeit jeder Codeschleife Si weist dabei bei einer wiederholten Ausführung auf dem Gerät nur eine geringe Abweichung auf, verglichen mit einer Ausführzeit derselben Codeschleife auf einem anderen Gerät. Eine Portierung der Codeschleifen auf andere Geräte führt daher zu anderen Ausführzeiten und somit auch zu anderen Werten, die basierend auf den Ausführzeiten berechnet werden. Somit können auf einfache Weise Werte erzeugt werden, die auf anderen Geräten nicht rekonstruiert werden können. Hierbei wird das Timingverhalten der individuellen Hardware eines Geräts ausgenutzt, welches auf anderen Geräten, gegebenenfalls vom gleichen Hardwaretyp, nur schwer simuliert werden kann.
  • Die Berechnungseinheit berechnet dabei reproduzierbare Werte basierend auf den Ausführzeiten. Die Werte werden dabei so berechnet, dass auch bei Abweichungen zwischen den Ausführzeiten einer Codeschleife der entsprechende Wert reproduzierbar für das Gerät ist. Die Berechnung kann dabei eine Art Normierung beinhalten.
  • Unter anderen Geräten können hierbei sowohl Geräte mit identischer Hardwareplattform als auch Geräte mit unterschiedlichen Hardwareplattformen verstanden werden.
  • Die Vorrichtung zum Bereitstellen einer Mehrzahl von reproduzierbaren Werten kann Teil der Hauptprozessoreinheit (CPU) des Geräts sein. Bei einem Single-Core-Prozessor (CPU mit einem Prozessorkern) kann die Vorrichtung auf dem einzigen Kern vorgesehen sein. Bei einem Multi-Core-Prozessor (CPU mit mehreren Prozessorkernen) kann die Vorrichtung auf einem der Kerne vorgesehen sein.
  • In einer Ausführungsform kann die Vorrichtung die Codeschleifen in einer Bare-Metal-Umgebung, d.h. auf einem System ohne Nutzung eines Betriebssystems, oder in der Phase vor dem Booten des Betriebssystems ausführen. Dies hat den Vorteil, dass eine stabile Lauffähigkeit ohne Beeinflussung des Timingverhaltens durch das Betriebssystem, insbesondere durch andere Prozesse des Betriebssystems, gewährleistet werden kann.
  • Alternativ kann die Vorrichtung die Codeschleifen auch unter einem laufenden Betriebssystem ausführen. Hierbei sollte sichergestellt werden, dass das Timingverhalten noch hinreichend deterministisch ist, um die stabile Lauffähigkeit der Codeschleifen zu gewährleisten. Dies kann beispielsweise durch Setzen einer hohen Priorität für die Codeschleifen (um Unterbrechungen durch das Betriebssystem zu vermeiden) und/oder ein- oder mehrmaliges gezieltes Leeren des Caches erreicht werden.
  • Da nur die Ausführzeit für die weitere Bestimmung der reproduzierbaren Werte von Bedeutung ist, können die Codeschleifen beliebigen Code ausführen. Die Codeschleifen können beispielsweise aus sehr einfachen Berechnungen oder auch einem Hochzählen eines Zählers bestehen.
  • Die Definition des Schleifencodes für die einzelnen Si kann frei erfolgen. Beispielsweise können die Codeschleifen mehrere Male nacheinander oder auch an unterschiedlichen Stellen im Code ausgeführt werden, wodurch die Komplexität für den Angreifer und die Menge der zur Verfügung stehenden stabilen Endwerte wi für die spätere Anwendung im Programm erhöht werden.
  • Gemäß einer Ausführungsform ist die Ausführeinheit dazu eingerichtet, die Mehrzahl von Codeschleifen auf demselben Kern auszuführen.
  • Dies kann sowohl in Singe-Core-Prozessoren als auch Multi-Core-Prozessoren der Fall sein. Auf dem Kern werden nacheinander individuelle Codeschleifen Si mit i = 1...t ausgeführt. Diese führen Berechnungen durch. Die Berechnungen können für jede Codeschleife identisch sein. Es können aber auch für jede Codeschleife individuelle Berechnungen bestimmt werden.
  • Gemäß einer weiteren Ausführungsform ist die Bestimmungseinheit dazu eingerichtet, einen zeitlichen Beginn und ein zeitliches Ende des Ausführens jeder Codeschleife zu bestimmen und basierend auf dem zeitlichen Beginn und dem zeitlichen Ende die Ausführzeit zu bestimmen.
  • Vor und nach Ausführung jeder Codeschleife wird dabei eine möglichst genaue Zeitmessung durchgeführt und anhand der Differenz die für die Abarbeitung der Schleife Si benötigte Zeit zi ermittelt.
  • Selbst für den Fall, dass die Codeschleifen Si jeweils Kopien desselben Codes enthalten, weichen die benötigten Durchlauf- bzw. Ausführzeiten zi bzw. zj für i ≠ j reproduzierbar, und unter Umständen sehr stark, voneinander ab. Dies hängt unter anderem mit Cache-Effekten aufgrund der Codeposition der Codeschleifen Si zusammen. Daher kann bereits ein Verschieben des Codes einer Codeschleife Si an andere Adressen zu einer merklichen Veränderung bei der gemessenen Ausführzeit zi führen. Daher ist zwar die Ausführzeit einer Codeschleife auf dem Gerät reproduzierbar, wodurch reproduzierbare Werte bestimmt werden können, eine Portierung des Codes bzw. der Codeschleife auf andere Geräte, beispielsweise durch einen Angreifer, würde jedoch zu anderen Ergebnissen führen. Somit wird die Sicherheit weiter erhöht, da ein Angreifer nicht einfach den Code auslesen und auf einem anderen System simulieren kann. Allein anhand der Instruktionen im Code der Codeschleifen Si ist eine Vorhersage des Ergebnisses und der reproduzierbaren Werte für einen Angreifer also nicht möglich.
  • Gemäß einer weiteren Ausführungsform weist die Hauptprozessoreinheit eine Mehrzahl von Kernen auf, wobei die Ausführeinheit dazu eingerichtet ist, jede Codeschleife auf einem anderen Kern der Mehrzahl von Kernen zeitgleich auszuführen.
  • Gemäß dieser Ausführungsform kann das Gerät ein Multi-Core-Prozessor mit C1, C2, ..., Ct Kernen (t>1) sein. Die Vorrichtung oder auch nur die Ausführeinheit kann dabei auf einem der Kerne vorgesehen sein. Auf dem entsprechenden Kern kann dabei Code vorhanden sein, der die Ausführung der Codeschleifen initiiert.
  • Die Ausführung der Codeschleifen Si kann dabei nach dem folgenden Schema ablaufen. Zu Beginn sind alle Kerne bis auf Kern C1 in einem idle-Zustand (Leerlaufzustand). Durch den Kern C1 bzw. die darauf angeordnete Ausführeinheit startet so synchron wie möglich auf allen Kernen eine individuelle Codeschleife Si (i = 1...t).
  • Gemäß einer weiteren Ausführungsform ist die Ausführeinheit dazu eingerichtet, die Codeschleifen zu einem vorbestimmten Zeitpunkt auf der Mehrzahl von Kernen zu beenden, wobei bei jeder Iteration einer Codeschleife ein Zähler auf dem jeweiligen Kern inkrementiert wird.
  • Am Ende jedes Durchlaufs einer Codeschleife Si auf einem Kern Ci wird der zugehörige Schleifenzähler zi inkrementiert. Der Schleifenzähler kann dabei global für alle Kerne auslesbar sein. Für alle Schleifen wird als Ausstiegsbedingung das Erreichen eines bestimmten Wertes durch einen der Zähler (z.B. also zt = 1000) festgelegt. Alle Kerne bis auf C1 können nach Verlassen der Schleife bis auf Weiteres wieder in den idle-Zustand zurückkehren. Der Kern C1 kann anschließend Code ausführen, um die reproduzierbaren Werte basierend auf den erreichten Zählerständen z1, z2, ..., zt zu berechnen.
  • Da nicht alle Schleifen die gleiche Zeit für einen Durchlauf benötigen, können sich die einzelnen Zählerwerte zi unterscheiden. Selbst für den Fall, dass die Codeschleifen Si jeweils Kopien desselben Codes enthalten, können die resultierenden Schleifenzähler zi bzw. zj für i≠j unter Umständen sehr stark und reproduzierbar voneinander abweichen. Dies hängt zusätzlich zu den oben genannten Cacheeffekten auch mit Einflüssen der parallelen Abarbeitung, beispielsweise durch gleichzeitige RAM-Zugriffe und zusätzlichen dadurch verursachten Cache-Effekten, zusammen.
  • Gemäß einer weiteren Ausführungsform ist die Bestimmungseinheit dazu eingerichtet, die Ausführzeit für jede der Mehrzahl von Codeschleifen basierend auf den Zählern zu bestimmen.
  • Gemäß dieser Ausführungszeit wird die Ausführzeit nicht explizit gemessen, sondern vielmehr anhand der erreichten Zählerstände bestimmt. Hierdurch können verräterische Codestellen (z.B. das Auslesen eines Taktzählers oder die Abfrage eines Timers) vermieden werden, was die Verschleierbarkeit des Codes gegenüber einem Angreifer erhöht.
  • Gemäß einer weiteren Ausführungsform ist die Berechnungseinheit dazu eingerichtet, die Mehrzahl von reproduzierbaren Werten basierend auf einer Projektion der Ausführzeiten zu berechnen.
  • Unter einer Projektion kann dabei eine Vergröberung der Ausführzeiten verstanden werden. Durch nichtdeterministische Timing-Effekte können sich Varianzen ergeben, die dafür sorgen, dass die Werte der Ausführzeiten zi auch auf dem gleichen Gerät nicht bei jedem Start gleich ausfallen. Die Projektion Pi der Ausführzeiten kann daher auch eine Normierung der Ausführzeiten beinhalten. Auf diese Weise können kleinere Schwankungen in den Ausführzeiten jeder Codeschleife ausgeglichen werden.
  • Gemäß einer weiteren Ausführungsform umfasst die Projektion eine Division jeder Ausführzeit durch einen für jede Ausführzeit vorbestimmten Divisor di.
  • Der reproduzierbare Wert w1 bestimmt sich dabei als Projektion P1(z1). Hierbei ist wi ≔ Pi(zi) ≔ ⌊zi/di wi bestimmt sich dabei als ganzzahliges Ergebnis der Division von zi durch di. Beispielsweise kann der nächstliegende kleinere ganzzahlige Wert als wi verwendet werden, wie es in der oben genannten Funktion der Fall ist. Für jede Codeschleife Si kann dabei ein separater Divisor di gewählt werden.
  • Gemäß einer weiteren Ausführungsform ist der vorbestimmte Divisor geeignet, dass der Divisionsrest der Division einer Ausführzeit durch den Divisor di im Wesentlichen mittig oder mittig in einem vorbestimmten Werteintervall liegt.
  • Der Divisor di kann hierbei so gewählt werden, dass sich für wi als Divisionsergebnis ein stabiler, reproduzierbarer Wert ergibt. Beispielsweise kann ein etwas größerer Divisor di verwendet werden, bei denen der kleinste und größte verbleibende Divisionsrest möglichst mittig in dem Intervall [0, d – 1] liegt, um einen ausreichenden Puffer für statistische Ausreißer zu haben. Der Divisor di wird dabei für jede Codeschleife Si separat bestimmt.
  • In manchen Fällen kann es wünschenswert sein, dass auf Geräten mit identischer Hardwareplattform, beispielsweise zwei Geräten desselben Modells, die Werte wi mit denselben Codeschleifen reproduzierbar sind, d.h. der Code ausgetauscht werden kann. In diesem Fall kann die Berechnungseinheit den Divisor entsprechend groß wählen.
  • Wenn auch auf Geräten mit identischer Hardware dieselbe Codeschleife nicht zu demselben Ergebniswert wi führen soll, können die Projektionen Pi entsprechend feiner gewählt werden. Hierbei soll wi noch stabil auf dem Gerät G bleiben, auf einem anderen Gerät G‘ mit identischer Hardware allerdings möglichst häufig von den Originalwerten auf G abweichen. Dies ist möglich, sofern der Unterschied in den Ausführzeiten zi zwischen G und G‘ hinreichend groß ist.
  • In diesem Fall kann eine Projektion Pi wiederum als wi ≔ Pi(zi) ≔ ⌊zi/di bestimmt werden. Allerdings gilt hierbei di ∈ Di Di wird dabei als Di ≔ {d ∈ {1..mi + 1}|#{⌊z/d⌋| z ∈ Zi} = 1} bestimmt, wobei mi ≔ max(Zi) das Maximum der auf dem Gerät G beobachteten Werte für zi ist. Zi definiert dabei die Menge aller Werte zi aus vorangehenden empirischen Messungen auf dem Gerät G. Di ist dabei nicht leer, denn mi + 1 ist stets enthalten.
  • Des Weiteren gilt für di ∈ Di, dass ⌊z/di⌋ (also die Division mit Abrundung auf die nächste ganze Zahl) auf Zi einen konstanten Wert w(di) annimmt. Nun wird ein di ∈ Di bestimmt (bei mehreren Kandidaten kann die Wahl willkürlich erfolgen), für das die Mächtigkeit der Menge Fi ≔ {k ∈ {1..m}:⌊z'ik/di⌋ ≠ w(di)} maximal wird. z'ik definiert dabei Ausführzeiten, die durch G‘ erreicht werden. Pi liefert dann den konstanten Wert wi für das Gerät G und weicht auf dem Gerät G‘ im Rahmen der Konstruktion maximal häufig von wi ab.
  • Gemäß einer weiteren Ausführungsform ist die zumindest eine weitere Einheit dazu eingerichtet, basierend auf der Mehrzahl von reproduzierbaren Werten einen deterministischen Code auszuführen.
  • Auf Basis der stabilen, reproduzierbaren Werte wi kann weiterer deterministischer Code ausgeführt werden. Dieser Code kann zur Verschlüsselung oder sonstigen Absicherung des Geräts eingesetzt werden.
  • Gemäß einer weiteren Ausführungsform ist die zumindest eine weitere Einheit dazu eingerichtet, einen Schlüssel basierend auf der Mehrzahl von reproduzierbaren Werten zu erzeugen.
  • Beispielsweise können die Werte wi direkt oder über eine Ableitungsfunktion als (Teil-)Schlüssel K für eine kryptographische Chiffre verwendet werden, die benötigte sensible Daten oder weiteren auszuführenden Code verschlüsselt oder entschlüsselt. Der Schlüssel K steht dabei an keiner Stelle – auch nicht in transformierter Form – im Code, sondern ergibt sich nur durch das konkrete Timing-Verhalten der Zielhardware bzw. des Geräts. Schon kleine Manipulationen durch einen Angreifer (z.B. Verschieben von Codeteilen an eine andere Speicherstelle, Einsatz eines Debuggers, etc.) können dazu führen, dass sich ein anderer und damit für den Angreifer nutzloser Schlüssel K‘ ergibt, womit durch K verschlüsselte Daten bzw. Code für ihn unlesbar bleiben.
  • Durch die vorgeschlagene Vorrichtung ist es zusammenfassend möglich, Code an eine spezielle Hardwarekonfiguration zu binden. Ausschneideangriffe sowie statische und dynamische Codeanalyse können stark erschwert werden. Gegenüber der Abfrage feststehender Hardwaremerkmale sind die reproduzierbaren Werte wi wesentlich schwerer zu prognostizieren und der Freiraum für Variationen ist deutlich größer. Dadurch kann die Vorrichtung, in jeweils individualisierter Version, in verschiedenen Geräten mit der gleichen Hardware eingesetzt werden, ohne dass das Sicherheitsniveau durch diesen Mehrfacheinsatz wesentlich sinkt.
  • Des Weiteren wird ein Verfahren zum Bereitstellen einer Mehrzahl von reproduzierbaren Werten vorgeschlagen, wobei die Mehrzahl von reproduzierbaren Werten an ein Gerät mit einer Hauptprozessoreinheit mit zumindest einem Kern gebunden ist. Das Verfahren weist die folgenden Schritte auf: Ausführen einer Mehrzahl von Codeschleifen, Bestimmen einer Ausführzeit für jede der Mehrzahl von Codeschleifen, Berechnen einer Mehrzahl von reproduzierbaren Werten basierend auf den Ausführzeiten, und Bereitstellen der Mehrzahl von reproduzierbaren Werten an zumindest eine weitere Einheit.
  • Die für die vorgeschlagene Vorrichtung beschriebenen Ausführungsformen und Merkmale gelten für das vorgeschlagene Verfahren entsprechend.
  • Weiterhin wird ein Computerprogrammprodukt vorgeschlagen, welches auf einer programmgesteuerten Einrichtung die Durchführung des wie oben erläuterten Verfahrens veranlasst.
  • Ein Computerprogrammprodukt, wie z.B. ein Computerprogramm-Mittel, kann beispielsweise als Speichermedium, wie z.B. Speicherkarte, USB-Stick, CD-ROM, DVD, oder auch in Form einer herunterladbaren Datei von einem Server in einem Netzwerk bereitgestellt oder geliefert werden. Dies kann zum Beispiel in einem drahtlosen Kommunikationsnetzwerk durch die Übertragung einer entsprechenden Datei mit dem Computerprogrammprodukt oder dem Computerprogramm-Mittel erfolgen.
  • Weitere mögliche Implementierungen der Erfindung umfassen auch nicht explizit genannte Kombinationen von zuvor oder im Folgenden bezüglich der Ausführungsbeispiele beschriebenen Merkmale oder Ausführungsformen. Dabei wird der Fachmann auch Einzelaspekte als Verbesserungen oder Ergänzungen zu der jeweiligen Grundform der Erfindung hinzufügen.
  • Weitere vorteilhafte Ausgestaltungen und Aspekte der Erfindung sind Gegenstand der Unteransprüche sowie der im Folgenden beschriebenen Ausführungsbeispiele der Erfindung. Im Weiteren wird die Erfindung anhand von bevorzugten Ausführungsformen unter Bezugnahme auf die beigelegten Figuren näher erläutert.
  • 1 zeigt ein schematisches Blockdiagramm einer Ausführungsform einer Vorrichtung zum Bereitstellen einer Mehrzahl von reproduzierbaren Werten;
  • 2 zeigt eine schematische Ansicht verschiedener Ausführzeiten in verschiedenen Geräten; und
  • 3 zeigt ein schematisches Ablaufdiagramm eines Verfahrens zum Bereitstellen einer Mehrzahl von reproduzierbaren Werten.
  • In den Figuren sind gleiche oder funktionsgleiche Elemente mit denselben Bezugszeichen versehen worden, sofern nichts anderes angegeben ist.
  • 1 zeigt eine Vorrichtung 10 zum Bereitstellen einer Mehrzahl von reproduzierbaren Werten, wobei die Mehrzahl von reproduzierbaren Werten an ein Gerät 100 mit einer Hauptprozessoreinheit mit zumindest einem Kern C1, C2, ..., Ct gebunden ist.
  • Die Vorrichtung 10 weist eine Ausführeinheit 11, eine Bestimmungseinheit 12, eine Berechnungseinheit 13 und zumindest eine weitere Einheit 14 auf.
  • Die Ausführeinheit 11 führt zunächst eine Mehrzahl von Codeschleifen Si aus. Wenn es sich um einen Single-Core-Prozessor mit einem Kern handelt, werden die Codeschleifen Si nacheinander auf demselben Kern ausgeführt. Im Falle eines Multi-Core-Prozessors mit mehreren Kernen C1, C2, ..., Ct können die Codeschleifen parallel auf jedem der Kerne C1, C2, ..., Ct gestartet werden.
  • Die Bestimmungseinheit 12 bestimmt anschließend für jede der Mehrzahl von Codeschleifen Si eine Ausführzeit zi. Dies kann entweder durch Zeitmessung oder basierend auf einem Zähler, der mit jeder Iteration einer Codeschleife Si hochgesetzt wird, erfolgen.
  • Die Berechnungseinheit 13 berechnet dann eine Mehrzahl von reproduzierbaren Werten wi basierend auf den Ausführzeiten zi und stellt diese an die zumindest eine weitere Einheit 14 bereit. Die Einheit 14 kann die Werte wi verwenden, um beispielsweise einen Schlüssel K zu erzeugen, der nur auf dem Gerät 100 reproduzierbar ist.
  • Die Zählerwerte zi schwanken auf dem Gerät 100 in geringem Maße. Auf einem anderen Gerät mit gleicher oder unterschiedlicher Hardware unterscheiden sich die Zählerwerte zi bei Ausführen derselben Codeschleifen Si jedoch ausreichend, um zu verhindern, dass die Werte wi durch einen Angreifer reproduziert werden können.
  • Dies ist in 2 veranschaulicht. Die Ausführzeiten zi des ersten Geräts (dargestellt als Gruppierung 201) schwanken in einem gewissen Rahmen. Werden dieselben Codeschleifen Si nun auf einem zweiten Gerät mit anderer Hardware ausgeführt, ist der Abstand der Ausführzeiten zi des ersten Geräts (Gruppierung 201) zu den Ausführzeiten zi des zweiten Geräts (dargestellt als Gruppierung 202) deutlich. Auch die Ausführzeiten zi eines dritten Geräts (dargestellt als Gruppierung 203) mit identischer Hardware wie das zweite Gerät unterscheiden sich noch von den Ausführzeiten zi des zweiten Geräts (Gruppierung 202), allerdings in geringerem Maße.
  • 3 zeigt ein schematisches Ablaufdiagramm eines Verfahrens zum Bereitstellen einer Mehrzahl von reproduzierbaren Werten. Die Mehrzahl von reproduzierbaren Werten wird dabei an ein Gerät 100 mit einer Hauptprozessoreinheit mit zumindest einem Kern (C1, C2, ..., Ct) gebunden. Das Verfahren weist die folgenden Schritte 301 bis 304 auf.
  • In Schritt 301 wird eine Mehrzahl von Codeschleifen ausgeführt.
  • In Schritt 302 wird eine Ausführzeit für jede der Mehrzahl von Codeschleifen bestimmt.
  • In Schritt 303 wird eine Mehrzahl von reproduzierbaren Werten basierend auf den Ausführzeiten berechnet.
  • In Schritt 304 wird anschließend die Mehrzahl von reproduzierbaren Werten an zumindest eine weitere Einheit 14 bereitgestellt.
  • Obwohl die vorliegende Erfindung anhand von Ausführungsbeispielen beschrieben wurde, ist sie vielfältig modifizierbar.

Claims (13)

  1. Vorrichtung (10) zum Bereitstellen einer Mehrzahl von reproduzierbaren Werten, wobei die Mehrzahl von reproduzierbaren Werten an ein Gerät (100) mit einer Hauptprozessoreinheit mit zumindest einem Kern (C1, C2, ..., Ct) gebunden ist, mit: einer Ausführeinheit (11) zum Ausführen einer Mehrzahl von Codeschleifen, einer Bestimmungseinheit (12) zum Bestimmen einer Ausführzeit für jede der Mehrzahl von Codeschleifen, und einer Berechnungseinheit (13) zum Berechnen einer Mehrzahl von reproduzierbaren Werten basierend auf den Ausführzeiten und zum Bereitstellen der Mehrzahl von reproduzierbaren Werten an zumindest eine weitere Einheit (14).
  2. Vorrichtung nach Anspruch 1, dadurch gekennzeichnet, dass die Ausführeinheit (11) dazu eingerichtet ist, die Mehrzahl von Codeschleifen auf demselben Kern (C1, C2, ..., Ct) auszuführen.
  3. Vorrichtung nach Anspruch 1 oder 2, dadurch gekennzeichnet, dass die Bestimmungseinheit (12) dazu eingerichtet ist, einen zeitlichen Beginn und ein zeitliches Ende des Ausführens jeder Codeschleife zu bestimmen und basierend auf dem zeitlichen Beginn und dem zeitlichen Ende die Ausführzeit zu bestimmen.
  4. Vorrichtung nach einem der Ansprüche 1–3, dadurch gekennzeichnet, dass die Hauptprozessoreinheit eine Mehrzahl von Kernen (C1, C2, ..., Ct) aufweist und dass die Ausführeinheit (11) dazu eingerichtet ist, jede Codeschleife auf einem anderen Kern (C1, C2, ..., Ct) der Mehrzahl von Kernen (C1, C2, ..., Ct) zeitgleich auszuführen.
  5. Vorrichtung nach Anspruch 4, dadurch gekennzeichnet, dass die Ausführeinheit (11) dazu eingerichtet ist, die Codeschleifen zu einem vorbestimmten Zeitpunkt auf der Mehrzahl von Kernen (C1, C2, ..., Ct) zu beenden, wobei bei jeder Iteration einer Codeschleife ein Zähler auf dem jeweiligen Kern (C1, C2, ..., Ct) inkrementiert wird.
  6. Vorrichtung nach Anspruch 5, dadurch gekennzeichnet, dass die Bestimmungseinheit (12) dazu eingerichtet ist, die Ausführzeit für jede der Mehrzahl von Codeschleifen basierend auf den Zählern zu bestimmen.
  7. Vorrichtung nach einem der Ansprüche 1–6, dadurch gekennzeichnet, dass die Berechnungseinheit (13) dazu eingerichtet ist, die Mehrzahl von reproduzierbaren Werten basierend auf einer Projektion der Ausführzeiten zu berechnen.
  8. Vorrichtung nach Anspruch 7, dadurch gekennzeichnet, dass die Projektion eine Division jeder Ausführzeit durch einen für jede Ausführzeit vorbestimmten Divisor d umfasst.
  9. Vorrichtung nach Anspruch 8, dadurch gekennzeichnet, dass der vorbestimmte Divisor geeignet ist, dass der Divisionsrest der Division einer Ausführzeit durch den Divisor d im Wesentlichen mittig in einem vorbestimmten Werteintervall liegt.
  10. Vorrichtung nach einem der Ansprüche 1–9, dadurch gekennzeichnet, dass die zumindest eine weitere Einheit (14) dazu eingerichtet ist, basierend auf der Mehrzahl von reproduzierbaren Werten einen deterministischen Code auszuführen.
  11. Vorrichtung nach Anspruch 10, dadurch gekennzeichnet, dass die zumindest eine weitere Einheit (14) dazu eingerichtet ist, einen Schlüssel basierend auf der Mehrzahl von reproduzierbaren Werten zu erzeugen.
  12. Verfahren zum Bereitstellen einer Mehrzahl von reproduzierbaren Werten, wobei die Mehrzahl von reproduzierbaren Werten an ein Gerät (100) mit einer Hauptprozessoreinheit mit zumindest einem Kern (C1, C2, ..., Ct) gebunden ist, mit: Ausführen (301) einer Mehrzahl von Codeschleifen, Bestimmen (302) einer Ausführzeit für jede der Mehrzahl von Codeschleifen, Berechnen (303) einer Mehrzahl von reproduzierbaren Werten basierend auf den Ausführzeiten, und Bereitstellen (304) der Mehrzahl von reproduzierbaren Werten an zumindest eine weitere Einheit (14).
  13. Computerprogrammprodukt, welches auf einer programmgesteuerten Einrichtung die Durchführung des Verfahrens nach Anspruch 12 veranlasst.
DE102015226249.9A 2015-12-21 2015-12-21 Vorrichtung und Verfahren zum Bereitstellen einer Mehrzahl von reproduzierbaren Werten Withdrawn DE102015226249A1 (de)

Priority Applications (2)

Application Number Priority Date Filing Date Title
DE102015226249.9A DE102015226249A1 (de) 2015-12-21 2015-12-21 Vorrichtung und Verfahren zum Bereitstellen einer Mehrzahl von reproduzierbaren Werten
PCT/EP2016/079992 WO2017108397A1 (de) 2015-12-21 2016-12-07 Vorrichtung und verfahren zum bereitstellen einer mehrzahl von reproduzierbaren werten

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
DE102015226249.9A DE102015226249A1 (de) 2015-12-21 2015-12-21 Vorrichtung und Verfahren zum Bereitstellen einer Mehrzahl von reproduzierbaren Werten

Publications (1)

Publication Number Publication Date
DE102015226249A1 true DE102015226249A1 (de) 2017-06-22

Family

ID=57588973

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102015226249.9A Withdrawn DE102015226249A1 (de) 2015-12-21 2015-12-21 Vorrichtung und Verfahren zum Bereitstellen einer Mehrzahl von reproduzierbaren Werten

Country Status (2)

Country Link
DE (1) DE102015226249A1 (de)
WO (1) WO2017108397A1 (de)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102009049226A1 (de) * 2009-10-13 2011-08-04 Siemens Aktiengesellschaft, 80333 Verfahren und Vorrichtung zum Testen von Einheiten mit Softwareeinheiten und Hardwareeinheiten eines Systems
DE112010004037T5 (de) * 2009-10-16 2013-01-03 International Business Machines Corporation Simulationsverfahren, -system und -programm
WO2013098046A1 (de) * 2011-12-28 2013-07-04 Siemens Aktiengesellschaft Verfahren zum herstellen einer hardwareeinrichtung und hardwareeinrichtung
US20130191817A1 (en) * 2009-12-28 2013-07-25 Hyperion Core, Inc. Optimisation of loops and data flow sections

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPWO2005106623A1 (ja) * 2004-04-28 2008-03-21 松下電器産業株式会社 Cpuクロック制御装置、cpuクロック制御方法、cpuクロック制御プログラム、記録媒体、及び伝送媒体
US8074059B2 (en) * 2005-09-02 2011-12-06 Binl ATE, LLC System and method for performing deterministic processing
US20080052530A1 (en) * 2006-02-16 2008-02-28 International Business Machines Corporation System and method to provide CPU smoothing of cryptographic function timings
KR101406693B1 (ko) * 2008-07-02 2014-06-12 고쿠리츠다이가쿠호진 토쿄고교 다이가꾸 실행시간 추정방법, 실행시간 추정 프로그램 및 실행시간 추정장치

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102009049226A1 (de) * 2009-10-13 2011-08-04 Siemens Aktiengesellschaft, 80333 Verfahren und Vorrichtung zum Testen von Einheiten mit Softwareeinheiten und Hardwareeinheiten eines Systems
DE112010004037T5 (de) * 2009-10-16 2013-01-03 International Business Machines Corporation Simulationsverfahren, -system und -programm
US20130191817A1 (en) * 2009-12-28 2013-07-25 Hyperion Core, Inc. Optimisation of loops and data flow sections
WO2013098046A1 (de) * 2011-12-28 2013-07-04 Siemens Aktiengesellschaft Verfahren zum herstellen einer hardwareeinrichtung und hardwareeinrichtung

Also Published As

Publication number Publication date
WO2017108397A1 (de) 2017-06-29

Similar Documents

Publication Publication Date Title
DE102017217971B4 (de) Ermöglichen von Debugging von serverlosen Anwendungen mittels Graph-Rewriting
DE112012003716B4 (de) Erzeugen von kompiliertem Code, der Registeraktivität angibt
DE112017004843T5 (de) Technologien für deterministischen Codeflussintegritätsschutz
DE202017106508U1 (de) Synchrone Hardware-Ereignis-Sammlung
DE112016006003T5 (de) Vertrauenswürdiger Start sicherer Enklaven in virtuellen Umgebungen
EP3274825A1 (de) Verfahren und ausführungsumgebung zum gesicherten ausführen von programmbefehlen
DE112016005571T5 (de) Aufrufergeschützte stapelrücksprungadresse in einer hardware-verwalteten stapelarchitektur
DE102017123054A1 (de) Verfahren und System zur System-On-Chip-Integritätsverifizierung
DE112017004962T5 (de) Steuerflussintegrität
DE102012210368A1 (de) Hinterlegung und Optimierung von Quellcode für trusted Computing
EP1798653B1 (de) Verfahren, Computerprogrammprodukt und Vorrichtung zum Schützen eines einen Funktionsblock aufweisenden Programms
DE102013213314A1 (de) Hinterlegen mindestens eines berechenbaren Integritätsmesswertes in einem Speicherbereich eines Speichers
DE102014117971B4 (de) Verfahren zur Datenverarbeitung zum Ermitteln, ob bei einer Ausführung eines Programms ein Fehler aufgetreten ist, und Datenverarbeitungsanordnungen zum Erzeugen von Programm-Code
EP3928463A1 (de) Verfahren für das konfigurieren eines sicherheitsmoduls mit mindestens einem abgeleiteten schlüssel
DE102013000857A1 (de) Kompakte Funktionsablaufprotokollierung
WO2019242972A1 (de) Kryptografiemodul und betriebsverfahren hierfür
EP2911080A1 (de) Verfahren und Vorrichtung zum sicheren Initialisieren eines Computers
EP3134842B1 (de) Rechenvorrichtung und verfahren zum erkennen von angriffen auf ein technisches system anhand von ereignissen einer ereignisfolge
DE102015226249A1 (de) Vorrichtung und Verfahren zum Bereitstellen einer Mehrzahl von reproduzierbaren Werten
EP2394232B1 (de) Vorrichtung und verfahren zum verhindern von unautorisierter verwendung und/oder manipulation von software
DE102005046696B4 (de) Verfahren zum Erzeugen von geschütztem Programmcode und Verfahren zum Ausführen von Programmcode eines geschützten Computerprogramms sowie Computerprogrammprodukt
WO2016096139A1 (de) Verfahren zum bereitstellen einer sicherheitskritischen softwareapplikation auf einer computereinheit
EP3798873B1 (de) Verfahren zum schützen einer computer-implementierten anwendung vor manipulation
EP3074862B1 (de) Verfahren für einen sicheren hochfahrablauf eines elektronischen systems
DE112015003759B4 (de) Bearbeiten mehrerer Zähler auf der Grundlage einer einzigen Zugangsprüfung

Legal Events

Date Code Title Description
R163 Identified publications notified
R119 Application deemed withdrawn, or ip right lapsed, due to non-payment of renewal fee