Login| Sign Up| Help| Contact|

Patent Searching and Data


Title:
METHOD FOR THE COMPUTER-AIDED OBFUSCATION OF PROGRAM CODE
Document Type and Number:
WIPO Patent Application WO/2018/162107
Kind Code:
A1
Abstract:
The invention relates to a method for the computer-aided obfuscation of program code (CO), wherein a plurality of calculation steps (ST) is implemented in the program code (CO), wherein predetermined calculation steps of the plurality of calculation steps (ST) are retrieved in a predetermined order with the execution of the program code (CO), and at least some of the predetermined calculation steps are predefined calculation steps (STi) in which a respective first table (T1) that is stored in the program code (CO) and consists of a plurality of digital first tabular values (T1i) is accessed in order to read a first tabular value (T1i) required for the respective predefined calculation step (STi) from the first table (T1). As part of the obfuscation of the program code, a dynamic mask (M) formed by a plurality of digital mask values (Mi) is used, wherein, for any predefined calculation step, another mask value (Mi) is used to replace the first tabular value (T1i) from the first table (T1) with a second tabular value (T2i). In addition, the program code (CO) to be obfuscated is adapted in such a way that, during the run time thereof in the respective predefined calculation step (STi), an inverse calculation of the second tabular value (T2i) to the original first tabular value (T1i) is performed. The method according to the invention permits an efficient obfuscation of protection-worthy information stored in tabular form in a program code. The demasking of the tabular information is distributed over the entire program code during the run time of the program code, whereby it becomes more difficult for an unauthorised attacker to reconstruct the information.

Inventors:
ZWANZGER JOHANNES (DE)
Application Number:
PCT/EP2017/082508
Publication Date:
September 13, 2018
Filing Date:
December 13, 2017
Export Citation:
Click for automatic bibliography generation   Help
Assignee:
SIEMENS AG (DE)
International Classes:
G06F21/14; H04L9/00
Foreign References:
US20140101458A12014-04-10
EP0900488A11999-03-10
EP2937803A12015-10-28
Other References:
None
Download PDF:
Claims:
Patentansprüche

1. Verfahren zur rechnergestützten Obfuskation von Programmcode (CO) , wobei in dem Programmcode (CO) eine Vielzahl von Rechenschritten (ST) implementiert ist, wobei vorbestimmte

Rechenschritte der Vielzahl von Rechenschritten (ST) bei Ausführung des Programmcodes (CO) in einer vorbestimmten Reihenfolge aufgerufen werden und zumindest manche der vorbestimmten Rechenschritte vorgegebene Rechenschritte (STi) sind, in denen jeweils auf eine im Programmcode (CO) hinterlegte erste Tabelle (Tl) aus einer Vielzahl von digitalen ersten Tabellenwerten (Tli) zugegriffen wird, um einen für den jeweiligen vorgegebenen Rechenschritt (STi) benötigten ersten Tabellenwert (Tli) aus der ersten Tabelle (Tl) auszulesen, wobei zur Veränderung des Programmcodes die folgenden Schritte ausge¬ führt werden:

es wird eine dynamische Maske (M) umfassend eine Vielzahl von digitalen Maskenwerten (Mi) erzeugt, wobei sich die Maskenwerte (Mi) zumindest eines Teils der Maske (M) ge- genseitig unterscheiden und ein jeweiliger Maskenwert (Mi) für einen jeweiligen vorgegebenen Rechenschritt (STi) gültig ist;

jeder erste Tabellenwert (Tli) der ersten Tabelle (Tl) wird mittels des Maskenwerts (Mi) , der beim Einlesen des jeweiligen ersten Tabellenwerts (Tli) im jeweiligen vorgegebenen Rechenschritt (STi) gültig ist, in einen digitalen zweiten Tabellenwert (T2±) gewandelt, wodurch eine zweite Tabelle (T2) aus zweiten Tabellenwerten (Ί2±) erhalten wird, die anstatt der ersten Tabelle (Tl) in dem Programm- code (CO) hinterlegt wird;

für jeden vorgegebenen Rechenschritt (STi) wird ein zu¬ sätzlicher Rechenschritt (fiiM-1) im Programmcode (CO) im¬ plementiert, welcher einen ausgelesenen zweiten Tabellenwert (T2i) in denjenigen ersten Tabellenwert (Tli) rück- rechnet, der für den jeweiligen vorgegebenen Rechenschritt

(STi) benötigt wird.

2. Verfahren nach Anspruch 1, dadurch gekennzeichnet, dass zur Erzeugung der dynamischen Maske (M) ein initialer Maskenwert und Aktualisierungsschritte festgelegt werden, wobei durch Anwenden eines oder mehrerer aufeinander folgender Ak- tualisierungsschritte auf einen aktuell gültigen Maskenwert (Mi) der für den nächsten vorgegebenen Rechenschritt (STi) gültige Maskenwert (Mi) berechnet wird, wobei die Aktualisie¬ rungsschritte auch im Programmcode (CO) implementiert werden, so dass im jeweiligen vorgegebenen Rechenschritt (STi) der aktuell gültige Maskenwert (Mi) vorliegt, wobei der zusätzli¬ che Rechenschritt (fiiM-1) im jeweiligen vorgegebenen Rechen¬ schritt von dem aktuell gültigen Maskenwert (Mi) abhängt, wo¬ bei die Aktualisierungsschritte für zumindest einen Teil der Maskenwerte (Mi) , auf welche sie angewendet werden, vorzugs- weise unterschiedlich festgelegt sind.

3. Verfahren nach Anspruch 2, dadurch gekennzeichnet, dass ein Aktualisierungsschritt in jedem der vorgegebenen Rechenschritte (STi) implementiert wird, wobei vorzugsweise ferner auch in zumindest einem Teil der vorbestimmten Rechenschrit¬ te, welche keine vorgegebenen Rechenschritte (STi) sind, je¬ weils ein Aktualisierungsschritt implementiert wird.

4. Verfahren nach Anspruch 2 oder 3, dadurch gekennzeichnet, dass der initiale Maskenwert (Mi) und/oder die Aktualisie¬ rungsschritte mittels eines Zufallszahlengenerators festge¬ legt werden.

5. Verfahren nach einem der vorhergehenden Ansprüche, dadurch gekennzeichnet, dass die ersten Tabellenwerte (Tli) und die zweiten Tabellenwerte (T2±) sowie die Maskenwerte (Mi) je¬ weils eine Bitfolge darstellen.

6. Verfahren nach Anspruch 5, dadurch gekennzeichnet, dass das Wandeln eines jeweiligen ersten Tabellenwerts (Tli) in einen zweiten Tabellenwert (T2±) durch Anwenden von logischen Operationen zwischen der Bitfolge des jeweiligen ersten Tabellenwerts (Tli) und der Bitfolge des aktuell gültigen Mas- kenwerts (Mi) durchgeführt wird, wobei das Anwenden der logi¬ schen Operationen den zweiten Tabellenwert (T2±) liefert.

7. Verfahren nach Anspruch 6, dadurch gekennzeichnet, dass die logischen Operationen bitweise auf einander korrespondie¬ rende Bits der Bitfolgen des jeweiligen ersten Tabellenwerts (Tli) und des aktuell gültigen Maskenwerts (Mi) angewendet werden, wobei die logischen Operationen vorzugsweise eine oder mehrere OR- und/oder XOR- und/oder NOR- und/oder XNOR- und/oder AND- und/oder NAND-Operationen umfassen.

8. Verfahren nach Anspruch 7, dadurch gekennzeichnet, dass im Falle, dass die Bitfolge des aktuell gültigen Maskenwerts

(Mi) kürzer als die Bitfolge des jeweiligen ersten Tabellen- werts (Tli) ist, die ursprüngliche Bitfolge des aktuell gül¬ tigen Maskenwerts (Mi) durch mehrfache Verwendung der Bits der ursprünglichen Bitfolge, insbesondere durch ein oder mehrfaches Wiederholen der ursprünglichen Bitfolge, verlängert wird, so dass für jedes Bit der Bitfolge des jeweiligen ersten Tabellenwerts (Tli) ein korrespondierendes Bit der Bitfolge des aktuell gültigen Maskenwerts (Mi) existiert.

9. Verfahren zur Ausführung eines Programmcodes (CO'), der mit einem Verfahren nach einem der vorhergehenden Ansprüche obfusziert ist, wobei bei Aufruf eines jeweiligen vorgegebe¬ nen Rechenschritts (STi) des Programmcodes (CO') der zweite Tabellenwert (T2±) aus der zweiten Tabelle (T2±) ausgelesen wird und für den jeweiligen vorgegebenen Rechenschritt (STi) der zusätzliche Rechenschritt (fiiM-1) ausgeführt wird, wel- eher den ausgelesenen zweiten Tabellenwert (T2±) in denjenigen ersten Tabellenwert (Tli) rückrechnet, der für den jewei¬ ligen vorgegebenen Rechenschritt (STi) benötigt wird.

10. Technisches System, dadurch gekennzeichnet, dass das technische System (1) ein Rechnermittel (2) umfasst, welches zur Ausführung eines Programmcodes (CO') gemäß dem Verfahren nach Anspruch 9 eingerichtet ist.

11. Technisches System nach Anspruch 10, dadurch gekennzeichnet, dass das technische System (1) eine Automatisierungsanlage oder eine Komponente einer Automatisierungsanlage oder ein elektrisches Energieerzeugungs- und/oder

Energieverteilsystem oder eine Komponente eines elektrischen Energieerzeugungs- und/oder Energieverteilsystems oder ein medizinisches Gerät ist.

12. Computerprogrammprodukt mit auf einem maschinenlesbaren Träger gespeicherten Programmcodeabschnitten zur Durchführung eines Verfahrens nach einem der Ansprüche 1 bis 8, wenn die Programmcodeabschnitte auf einem Computer ausgeführt werden.

13. Computerprogramm mit Programmcodeabschnitten zur Durch- führung eines Verfahrens nach einem der Ansprüche 1 bis 8, wenn die Programmcodeabschnitte auf einem Computer ausgeführt werden .

Description:
Beschreibung

Verfahren zur rechnergestützten Obfuskation von Programmcode

Die Erfindung betrifft ein Verfahren zur rechnergestützten Obfuskation von Programmcode sowie ein Verfahren zur Ausführung eines solchen obfuszierten Programmcodes. Darüber hinaus umfasst die Erfindung ein technisches System, ein Computerprogrammprodukt und ein Computerprogramm.

Oftmals besteht das Bedürfnis, Informationen aus einem Pro ¬ grammcode gegen unbefugten Zugriff durch Dritte zu schützen. Ein gängiger Ansatz besteht dabei darin, die Informationen mit einer geeigneten Verschlüsselungsfunktion zu verschlüsseln oder den Programmcode mittels eines Code-Packers zu ver ¬ packen. Dabei ist es nachteilhaft, dass zur Laufzeit des Pro ¬ grammcodes die Informationen wieder entschlüsselt bzw. der Code wieder entpackt wird, so dass die schützenswerten Informationen bei der Programmausführung komplett im Klartext im Programmspeicher vorliegen und somit die Gefahr besteht, dass ein Angreifer diese Informationen mit geeigneten Techniken aus dem Speicher ausliest.

Aufgabe der Erfindung ist es, ein rechnergeschütztes Verfah ¬ ren zu schaffen, mit dem schützenswerte Informationen in einem Programmcode sehr gut gegen unbefugten Zugriff durch Dritte zur Laufzeit des Programmcodes geschützt werden.

Diese Aufgabe wird durch die unabhängigen Ansprüche gelöst. Weiterbildungen der Erfindung sind in den abhängigen Ansprüchen definiert.

Das erfindungsgemäße Verfahren dient zur rechnergestützten Obfuskation (d.h. Verschleierung) von Programmcode. In dem zu verschleiernden bzw. obfuszierenden Programmcode ist eine Vielzahl von Rechenschritten implementiert, wobei vorbestimmte Rechenschritte der Vielzahl von Rechenschritten bei Ausführung des Programmcodes in einer vorbestimmten Reihenfolge aufgerufen werden. Der Begriff des Rechenschritts sowie auch des weiter unten genannten Aktualisierungsschritts ist dabei weit zu verstehen. Ein Rechenschritt muss nicht zwangsläufig nur eine einzelne Rechenoperation enthalten, sondern er kann sich aus einer Vielzahl von Rechenoperationen, ggf. mit Bedingungen, Schleifen, Schachtelungen und dergleichen, zusammensetzen. Durch einen Rechenschritt bzw. Aktualisierungs ¬ schritt kann somit eine Abfolge von Operationen gekapselt sein .

Die vorbestimmten Rechenschritte des zu verschleiernden Programmcodes enthalten vorgegebene Rechenschritte. Die vorbe ¬ stimmten Rechenschritte können zum Beispiel nur die vorgege ¬ benen Rechenschritte umfassen, jedoch können neben den vorge- gebenen Rechenschritten ggf. auch weitere Rechenschritte vor ¬ gesehen sein. Die vorgegebenen Rechenschritte zeichnen sich dadurch aus, dass in diesen Schritten jeweils auf eine im Programmcode hinterlegte erste Tabelle aus einer Vielzahl von digitalen ersten Tabellenwerten zugegriffen wird, um einen für den jeweiligen vorgegebenen Rechenschritt benötigten ersten Tabellenwert aus der ersten Tabelle auszulesen. Für alle vorbestimmten Rechenschritte, welche keine vorgegebenen Re ¬ chenschritte sind (sofern vorhanden) , ist zwar weiterhin eine vorbestimmte Reihenfolge ihres Aufrufs festgelegt, jedoch greifen diese Rechenschritte nicht auf die erste Tabelle zu.

Der Begriff der Tabelle ist weit zu verstehen. Eine Tabelle stellt eine Menge von digitalen Werten dar, auf welche ge ¬ zielt durch den Programmcode mit entsprechenden Befehlen zu- gegriffen werden kann. Ferner ist auch der Begriff des Tabellenwerts weit zu verstehen. Insbesondere kann sich ein Tabel ¬ lenwert aus mehreren Teilwerten zusammensetzen, welche an unterschiedlichen Stellen im entsprechend aufgerufenen Rechenschritt verarbeitet werden.

Im Rahmen der erfindungsgemäßen Obfuskation des Programmcodes wird eine dynamische Maske umfassend eine Vielzahl von digi ¬ talen Maskenwerten erzeugt, wobei sich die Maskenwerte zumin- dest eines Teils der Maske und vorzugsweise alle Maskenwerte der Maske gegenseitig unterscheiden und ein jeweiliger Maskenwert für einen jeweiligen vorgegebenen Rechenschritt gültig ist.

Im Rahmen des erfindungsgemäßen Verfahrens wird jeder erste Tabellenwert der ersten Tabelle mittels des Maskenwerts, der beim Einlesen des jeweiligen ersten Tabellenwerts im jeweiligen vorgegebenen Rechenschritt gültig ist, in einen digitalen zweiten Tabellenwert gewandelt, wodurch eine zweite Tabelle aus zweiten Tabellenwerten erhalten wird, die anstatt der ersten Tabelle in dem Programmcode hinterlegt wird. Mit ande ¬ ren Worten wird bei der Ausführung des obfuszierten Programmcodes nicht mehr auf die ersten Tabellenwerte, sondern auf die entsprechenden zweiten Tabellenwerte zugegriffen. Der

Maskenwert, der beim Einlesen des jeweiligen ersten Tabellenwerts im jeweiligen vorgegebenen Rechenschritt gültig ist, wird im Folgenden als auch der aktuell gültige Maskenwert be ¬ zeichnet .

Damit der obfuszierte Programmcode die gleichen Ergebnisse wie der nicht-obfuszierte Programmcode liefert, wird im Rah ¬ men der Obfuskation ferner für jeden vorgegebenen Rechenschritt ein zusätzlicher Rechenschritt im Programmcode imple- mentiert, welcher einen ausgelesenen zweiten Tabellenwert bei Ausführung des entsprechenden vorgegebenen Rechenschritts in denjenigen ersten Tabellenwert rückrechnet, der für den je ¬ weiligen vorgegebenen Rechenschritt benötigt wird. Das erfindungsgemäße Verfahren weist den Vorteil auf, dass mittels einer dynamischen Maske schützenswerte Informationen, die tabellarisch hinterlegt sind, sehr gut verschleiert wer ¬ den. Die Operationen der Demaskierung bzw. Entschleierung werden dabei auf eine Vielzahl von Rechenschritten im gesam- ten Programmcode verteilt. Somit wird eine Rekonstruktion der verschleierten Informationen während der Laufzeit des

obfuszierten Programmcodes stark erschwert. In einer besonders bevorzugten Ausführungsform werden zur Erzeugung der dynamischen Maske ein initialer Maskenwert und Aktualisierungsschritte festgelegt, wobei durch Anwenden ei ¬ nes oder mehrerer aufeinander folgender Aktualisierungs- schritte auf einen aktuell gültigen Maskenwert der für den nächsten vorgegebenen Rechenschritt gültige Maskenwert be ¬ rechnet wird. Der initiale Maskenwert und die Aktualisie ¬ rungsschritte werden auch im Programmcode implementiert, so dass im jeweiligen vorgegebenen Rechenschritt der aktuell gültige Maskenwert vorliegt, wobei der zusätzliche Rechen ¬ schritt im jeweiligen vorgegebenen Rechenschritt von dem aktuell gültigen Maskenwert abhängt. Durch die Implementierung der Aktualisierungsschritte im Programmcode benötigt ein An ¬ greifer zur Rekonstruktion eines ersten Tabellenwerts in ei- nem vorgegebenen Rechenschritt das Wissen über den initialen Maskenwert und die vorhergehenden Aktualisierungsschritte. Da dieses Wissen im Programmcode verteilt ist, wird ein beson ¬ ders guter Schutz der Informationen im Programmcode erreicht. Um eine Rückrechnung der ursprünglichen ersten Tabellenwerte zu erschweren, sind in einer bevorzugten Variante der soeben beschriebenen Ausführungsform die Aktualisierungsschritte für zumindest einen Teil der Maskenwerte und insbesondere für al ¬ le Maskenwerte, auf welche sie angewendet werden, unter- schiedlich festgelegt. In einer weiteren bevorzugten Variante ist ein Aktualisierungsschritt in jedem der vorgegebenen Re ¬ chenschritte vorgesehen, wobei vorzugsweise ferner auch in zumindest einem Teil der vorbestimmten Rechenschritte (insbe ¬ sondere in allen vorbestimmten Rechenschritten) , welche keine vorgegebenen Rechenschritte sind (sofern vorhanden), jeweils ein Aktualisierungsschritt vorgesehen ist.

In einer weiteren bevorzugten Variante werden der initiale Maskenwert und die Aktualisierungsschritte mittels eines Zu- fallszahlengenerators festgelegt. Auf diese Weise wird eine sehr willkürliche Festlegung dieser Werte bzw. Schritte erreicht und somit die Verschleierung des Programmcodes weiter verbessert . In einer weiteren bevorzugten Ausführungsform stellen die ersten Tabellenwerte und die zweiten Tabellenwerte sowie auch die Maskenwerte jeweils eine Bitfolge dar. Vorzugsweise er- folgt dabei das Wandeln eines jeweiligen ersten Tabellenwerts in einen zweiten Tabellenwert durch Anwenden von logischen Operationen zwischen der Bitfolge des ersten Tabellenwerts und der Bitfolge des aktuell gültigen Maskenwerts. Das Anwen ¬ den der logischen Operationen liefert dabei den zweiten Ta- bellenwert.

Vorzugsweise werden die obigen logischen Operationen bitweise auf einander korrespondierende Bit der Bitfolgen des jeweili ¬ gen ersten Tabellenwerts und des aktuell gültigen Maskenwerts angewendet, wobei die logischen Operationen vorzugsweise eine oder mehrere OR- und/oder XOR- und/oder NOR- und/oder XNOR- und/oder AND- und/oder NAND-Operationen umfassen. Im Falle, dass die Bitfolge des aktuell gültigen Maskenwerts länger als die Bitfolge des ersten Tabellenwerts ist, werden somit nicht alle Bits des aktuell gültigen Maskenwerts zur Modifikation des ersten Tabellenwerts herangezogen.

Im Falle, dass die Bitfolge des aktuell gültigen Maskenwerts kürzer als die Bitfolge des jeweiligen ersten Tabellenwerts ist, wird in einer bevorzugten Variante des erfindungsgemäßen Verfahrens die ursprüngliche Bitfolge des aktuell gültigen Maskenwerts durch mehrfache Verwendung der Bits der ursprünglichen Bitfolge verlängert, so dass für jedes Bit der

Bitfolge des jeweiligen ersten Tabellenwerts ein korrespon- dierendes Bit der Bitfolge des aktuell gültigen Maskenwerts existiert. Das Verlängern der Bitfolge erfolgt vorzugsweise derart, dass die ursprüngliche Bitfolge ein oder mehrfach wiederholt wird. Auf diese Weise wird eine gute Verschleie ¬ rung des entsprechenden (ersten) Tabellenwerts auch dann er- reicht, wenn die Bitlänge des Maskenwerts kürzer als diejeni ¬ ge des entsprechenden Tabellenwerts ist. Neben dem Verfahren zur Obfuskation von Programmcode betrifft die Erfindung auch ein Verfahren zur Ausführung des

obfuszierten Programmcodes. Dabei wird bei Aufruf eines je ¬ weiligen vorgegebenen Rechenschritts des (obfuszierten) Programmcodes der zweite Tabellenwert aus der zweiten Tabelle ausgelesen und für den jeweiligen vorgegebenen Rechenschritt der zusätzliche Rechenschritt ausgeführt, welcher den ausge ¬ lesenen zweiten Tabellenwert in denjenigen ersten Tabellenwert rückrechnet, der für den jeweiligen vorgegebenen Rechenschritt benötigt wird.

Im Falle, dass der obfuszierte Programmcode mit einer Ausfüh ¬ rungsform erzeugt wurde, welche Aktualisierungsschritte zur Bestimmung des aktuell gültigen Maskenwerts verwendet, werden im Rahmen der Ausführung des obfuszierten Programmcodes auch die im obfuszierten Programmcode implementierten Aktualisierungsschritte ausgeführt.

Die Erfindung betrifft darüber hinaus ein technisches System, welches ein Rechnermittel umfasst, das zur Ausführung des obfuszierten Programmcodes gemäß dem soeben beschriebenen Verfahren eingerichtet ist. Der Begriff des technischen Systems ist dabei weit zu verstehen, und es kann sich hierbei auch um ein einzelnes technisches Gerät handeln. Der

obfuszierte Programmcode kann dabei in verschiedenen techni ¬ schen Systemen hinterlegt sein. Das technische System kann z.B. eine Automatisierungsanlage oder eine Komponente einer Automatisierungsanlage oder ein elektrisches Energieerzeu- gungs- und/oder Energieverteilsystem oder eine Komponente eines Energieerzeugungs- und/oder Energieverteilsystems oder ein medizinisches Gerät sein.

Darüber hinaus betrifft die Erfindung ein Computerprogrammprodukt mit auf einem maschinenlesbaren Träger gespeicherten Programmcodeabschnitten zur Durchführung des erfindungsgemäßen Verfahrens zur rechnergestützten Obfuskation von Programmcode bzw. zur Durchführung des erfindungsgemäßen Verfahrens zur Ausführung des obfuszierten Programmcodes bzw. zur Durchführung bevorzugter Varianten dieser Verfahren, wenn die Programmcodeabschnitte auf einen Computer ausgeführt werden.

Darüber hinaus betrifft die Erfindung ein Computerprogramm, mit Programmcodeabschnitten zur Durchführung des erfindungsgemäßen Verfahrens zur rechnergestützten Obfuskation von Programmcode bzw. zur Durchführung des erfindungsgemäßen Verfahrens zur Ausführung des obfuszierten Programmcodes bzw. bevorzugter Varianten dieser Verfahren, wenn die Programmcodeabschnitte auf einem Computer ausgeführt werden.

Im Falle, dass das obige Computerprogrammprodukt bzw. Compu ¬ terprogramm zur Ausführung eines Verfahrens zur Obfuskation von Programmcode dient, wird die Obfuskation mit den entspre ¬ chenden Programmcodeabschnitten bewirkt. Die Programmcodeabschnitte stellen somit nicht den zu obfuszierenden Programmcode dar.

Im Falle, dass das Computerprogrammprodukt bzw. das Computer ¬ programm zur Ausführung des obfuszierten Programmcodes dient, entsprechen die Programmcodeabschnitte dem obfuszierten Pro ¬ grammcode .

Ein Ausführungsbeispiel der Erfindung wird nachfolgend anhand der beigefügten Fig. 1 detailliert beschrieben. Diese Figur zeigt ein Ablaufdiagramm einer Ausführungsform des erfin- dungsgemäßen Verfahrens zur Obfuskation von Programmcode.

Gemäß Fig. 1 ist Ausgangspunkt des Verfahrens ein Programm ¬ code CO, der im Rahmen der Erfindung zu verschleiern ist. Dieser Programmcode erhält eine Vielzahl von Rechenschritten, welche in Fig. 1 mit ST bezeichnet sind. Ein Teil dieser Re ¬ chenschritte STi (i = 1, n) greift dabei auf eine erste Tabelle Tl zu, wobei der jeweilige Rechenschritt den entspre ¬ chenden Eintrag Tli aus der Tabelle ausliest. Über den Index i wird die vorbestimmte Reihenfolge festgelegt, in der die Rechenschritte STi nacheinander ausgeführt werden. Die Re ¬ chenschritte STi entsprechen dabei vorgegebenen Rechenschrit- ten im Sinne von Anspruch 1. Zwischen den Rechenschritten STi können auch noch weitere Rechenschritte des Programmcodes CO ausgeführt werden, wobei diese weiteren Rechenschritte jedoch nicht auf die Tabelle Tl zugreifen.

Gemäß dem Programmcode CO wird somit nur in den Rechenschrit ¬ ten STi auf einen bestimmten Eintrag Tli der ersten Tabelle Tl zugegriffen. Der jeweilige Tabelleneintrag stellt dabei eine Bitfolge dar, die in dem entsprechenden Rechenschritt verarbeitet wird. Die Bitfolgen der einzelnen Tabelleneinträ ¬ ge haben dabei die Länge 1 (i) . Diese Längen können für unterschiedliche Tabelleneinträge verschieden groß sein.

Der Programmcode CO erzeugt zur Laufzeit aus einem bekannten Input durch Anwendung der Rechenschritte ST einen bestimmten Output. Grundsätzlich können die Rechenschritte ST dabei in beliebiger Reihenfolge durchlaufen werden, jedoch werden die speziellen Rechenschritte STi untereinander immer in der gleichen Reihenfolge und unabhängig vom Input stets genau einmal durchlaufen. Ein jeweiliger Rechenschritt STi greift immer nur auf einen einzelnen Tabelleneintrag Tli zu, wobei der Rechenschritt jedoch beliebig oft auf diesen Tabellenein ¬ trag bei seiner Ausführung zugreifen darf. Die nicht verschleierte Tabelle Tl mit den entsprechenden Ta ¬ belleneinträgen Tli enthält schützenswerte Informationen und es ist das Ziel der nachfolgend beschriebenen Ausführungs ¬ form, den Programmcode CO derart zu obfuszieren, dass ein un ¬ befugter Dritte die Tabelleneinträge nicht oder nur mit sehr großem Aufwand aus dem Programmcode rekonstruieren kann. Im Gegensatz zu einer einmaligen Anwendung einer Verschlüsselungsfunktion auf die gesamte Tabelle Tl erfolgt die Ver ¬ schleierung über den gesamten Programmcode verteilt, wodurch die Rückrechnung der ursprünglichen Tabellenwerte stark er- schwert wird.

Gemäß Schritt Sl der Fig. 1 wird zur Obfuskation des Pro ¬ grammcodes CO zunächst eine dynamische Maske M mit Maskenein- trägen Mi (i = 1, n) bestimmt. Es existiert somit für je ¬ den vorgegebenen Rechenschritt STi ein entsprechender Maskenwert Mi. Dieser Maskenwert Mi ist nur für den Rechenschritt S i gültig. Durch die Indizierung der Maskenwerte wird eine der Ausführung der Rechenschritte S i entsprechende Reihen ¬ folge festgelegt. Die einzelnen Maskenwerte Mi stellen je ¬ weils eine Bitfolge mit einer bestimmten Länge dar, wobei diese Länge in der hier beschriebenen Ausführungsform über die Maskenwerte Mi gleich bleibt, was jedoch nicht zwangsläu- fig der Fall sein muss.

Die einzelnen Maskenwerte Mi werden über eine Folge von Aktualisierungsschritten bestimmt, welche aufeinander folgend ausgehend von einem willkürlichen initialen Maskenwert auf den zuletzt aktualisierten Maskenwert angewendet werden. Der Begriff des Aktualisierungsschritts ist dabei weit zu verste ¬ hen. Im Besonderen kann ein Aktualisierungsschritt nicht nur eine einzelne Operation, sondern ggf. auch mehrere Operatio ¬ nen enthalten. In der hier beschriebenen Ausführungsform wur- den die Aktualisierungsschritte willkürlich festgelegt und sind somit untereinander zumindest teilweise unterschiedlich. Nichtsdestotrotz sind die einzelnen Aktualisierungsschritte fest vorgegeben und die darin enthaltenen Operationen werden in einer festen Reihenfolge ausgeführt. Gemäß dem Schritt Sl wird somit eine Maske M mit willkürlichen Maskenbelegungen bzw. Maskenwerten Mi generiert. Vorzugsweise wird dabei ein Zufallszahlengenerator zur Festlegung des Initialwerts der Maske sowie zur Festlegung der Aktualisierungsschritte ver ¬ wendet .

In einem Schritt S2 wird dann der im jeweiligen Rechenschritt STi ausgelesene Tabelleneintrag Tli mittels einer Funktion f±,M verändert, welche von dem Maskenwert Mi abhängt, der im entsprechenden Rechenschritt STi gültig ist. Die Funktion fi fM kann dabei beliebig festgelegt sein, entscheidend ist ledig ¬ lich, dass die Funktion von dem jeweiligen Maskenwert Mi abhängt und einen Tabelleneintrag Tli auf einen neuen Tabellen ¬ eintrag T2i einer zweiten Tabelle T2 bijektiv abbildet. Wie aus Fig. 1 ersichtlich, ist die Funktion fi fM in diesem Ausführungsbeispiel eine Abbildung, welche die Bitfolge eines Tabelleneintrags Tli auf eine andere Bitfolge mit gleicher Länge abbildet, wobei diese andere Bitfolge dem neuen Tabel- leneintrag Ί2± entspricht.

Nachdem für alle Rechenschritte STi modifizierte Tabellenein ¬ träge T2i erzeugt wurden, werden die ursprünglichen Tabelleneinträge Tli durch diese neuen Tabelleneinträge Ί2± ersetzt, so dass für einen Angreifer die ursprünglichen Tabelleneinträge nicht ohne weiteres aus dem Programmcode CO ausgelesen werden können. Aufgrund der Modifikation der Tabelleneinträge muss der Programmcode CO auch noch dahingehend geändert wer ¬ den, dass im entsprechenden Rechenschritt STi der ausgelesene Tabelleneintrag Ί2± in den ursprünglichen Tabelleneintrag Tli umgerechnet wird. Dies wird gemäß Fig. 1 im Schritt S3 er ¬ reicht. In diesem Schritt wird der initiale Maskenwert am An ¬ fang des Programmcodes hinterlegt und die obigen Aktualisie ¬ rungsschritte werden auch im Programmcode implementiert, wo- bei in der hier beschriebenen Ausführungsform bei Aufruf eines jeweiligen Rechenschritts STi ein entsprechender Aktualisierungsschritt zur Bestimmung des aktuell gültigen Maskenwerts durchgeführt wird. Darüber hinaus wird in jedem Rechen ¬ schritt ein Zusatzschritt implementiert, der den ausgelesenen Tabelleneintrag T2i mittels der inversen Funktion fi iM -1 , die von dem aktuell gültigen Maskenwert Mi abhängt, in den ur ¬ sprünglichen Tabelleneintrag Tli umrechnet.

Als Ergebnis der Schritte Sl bis S3 erhält man somit einen obfuszierten Programmcode CO', in dem die ursprüngliche Ta ¬ belle Tl verschleiert ist. Durch einen Rückrechnungsschritt auf die ursprünglichen Tabellenwerte wird jedoch das gleiche Rechenergebnis wie mit dem nicht-obfuszierten Programmcode CO erreicht. Der obfuszierte Programmcode CO' kann anschließend in einem beliebigen technischen Gerät hinterlegt werden und zur Ausführung gebracht werden. Dies ist in Fig. 1 durch den Pfeil P angedeutet. Dabei wird der obfuszierte Programmcode CO' auf dem technischen Gerät 1 gespeichert, welches über ein Rechnermittel 2 verfügt, mit dem der obfuszierte Programmcode CO' zur Ausführung gebracht wird.

Die im Vorangegangenen beschriebene Obfuskation eines Pro- grammcodes kann in verschiedenen technischen Gebieten eingesetzt werden. Im Besonderen kann dabei Programmcode in SCADA- Systemen, PLCs (PLC = Programmable Logic Controller) , Motion- Control-Systemen, Automatisierungssoftware, Computertomogra ¬ phiegeräten, SmartGrids usw. verändert werden. Es können da- bei beliebige Algorithmen obfusziert werden, z.B. Programme auf PCs (PC = Personal Computer) oder Firmware auf Geräten. Die Programme können beliebige Aufgaben übernehmen, z.B. kann es sich um Steuerungs- und/oder Regelungsalgorithmen oder um Algorithmen basierend auf neuronalen Netzen handeln.

Allgemein wird mit der erfindungsgemäßen Obfuskation erreicht, dass tabellarisch gespeicherte und schützenswerte Da ¬ ten in einer Software verschleiert werden. Bei den schützens ¬ werten Daten kann es sich z.B. um kryptographische Informati- onen oder um Informationen handeln, die von Bedeutung für Lizenzprüfungen sind.

Die im Vorangegangenen beschriebene Ausführungsform des erfindungsgemäßen Verfahrens weist eine Reihe von Vorteilen auf. Insbesondere kann ein Angreifer aufgrund der Maskierung einer Tabelle keinerlei Information mehr aus dieser Tabelle extrahieren. Um die maskierte Form der Tabelle sinnvoll in ¬ terpretieren zu können, ist vielmehr die zusätzliche Kenntnis über den Initialisierungswert der Maske und der gesamten Fol- ge der Aktualisierungsschritte für die Maske notwendig.

Im Gegensatz zu einmaligen Entschlüsselungs- bzw.

Entpackungsoperationen finden die Schritte der Demaskierung der Tabelle nicht an einer punktuellen Stelle im Programmcode statt, sondern die Demaskierung ist über den gesamten Programmcode verteilt. Ein Angreifer muss somit den gesamten Programmcode analysieren, um Rückschlüsse auf die ursprüngli ¬ chen Werte der Tabelle zu bekommen. Im Gegensatz hierzu kann ein Angreifer im Falle einer einmaligen Verschlüsselung einer Tabelle bei Kenntnis über die Entschlüsselung unmittelbar auf den Klartext der Tabelleneinträge zugreifen. Bei der erfindungsgemäßen Obfuskation kann ferner zu keinem Zeitpunkt der Ausführung des Programmcodes anhand des Spei ¬ cherzustands, d.h. insbesondere des aktuellen Maskenwerts, ohne weiteres auf mehr als den im aktuellen Schritt verwende ¬ ten Tabelleneintrag geschlossen werden. Bereits bei der nächsten Aktualisierung des Maskenwerts ist der Rückschluss auf den früheren Tabelleneintrag nicht mehr möglich.

Das erfindungsgemäße Obfuskationsverfahren kann ferner sehr gut mit weiteren Techniken des Reverse Engineering, wie z.B. Anti-Debug-Maßnahmen oder die Verwendung selbstmodifizierender Codes, kombiniert werden. Auf diese Weise wird es für ei ¬ nen Angreifer nochmals schwerer, die gesamte Abfolge von De- maskierungsoperationen zur Extraktion der ursprünglichen Tabellenwerte zu rekonstruieren.