-
Die vorliegende Erfindung ist gerichtet auf ein Verfahren zur Ausführung eines Programmcodes, in welchem eine Information sicher verwendet werden soll, sowie eine Vorrichtung zum Bereitstellen von entsprechendem Programmcode. Die Information ist vorzugsweise zumindest ein Teil eines kryptographischen Schlüssels, der insbesondere in einer eher ungeschützten Ausführungsumgebung verwendet werden soll.
-
Es ist eine Vielzahl von Verfahren bekannt, welche es ermöglichen, geheime Informationen sicher abzuspeichern. Eine Information die in einem sicheren Element, wie Chipkarte, mit eigener Ausführungsumgebung abgespeichert ist und nur dort verwendet wird, ist bereits gut gegen ein Ausspähen der Information durch einen Angreifer geschützt. In anderen Einheiten, wie beispielsweise auf einem PC oder einem Mobilfunkgerät, ist weder der Speicher noch die Ausführungsumgebung vor einem Angreifer besonders geschützt. Um auch in einer wenig gesicherten Ausführungsumgebung geheime Informationen verarbeiten zu können wurden zuletzt vermehrt geeignete kryptographische Verfahren vorgeschlagen. Solche Verfahren werden teils auch als White-Box-Kryptographie bezeichnet, da sie voraussetzen, dass ein Angreifer beispielsweise ungehinderten Zugriff auf den Programmcode, den Programmablauf und/oder Speicherinhalte haben könnte (White-Box-Angriff).
-
Vorgeschlagen wurde beispielsweise, einen kryptographischen Algorithmus einschließlich des Schlüssels durch ein Netzwerk aus verknüpften Ersetzungstabellen zu ersetzen. Dieses und andere bekannte Verfahren zum sicheren Speichern eines Schlüssels, benötigen entweder sehr viel Speicherplatz oder eine Vielzahl von zusätzlichen Rechenschritten, z. b. um den Schlüssel sicher zu codieren und wieder sicher zu decodieren.
-
Es ist somit eine Aufgabe der vorliegenden Erfindung, ein verbessertes Verfahren zum sicheren Verwenden einer Information in einem Programm bereitzustellen, welches insbesondere mit geringem Aufwand und/oder geringerem Speicherbedarf verbunden ist. Trotz Verwendung in einer unsicheren Ausführungsumgebung soll die Information dabei soweit wie möglich vor dem Angreifer verborgen bleiben.
-
Diese Aufgabe wird gelöst durch den Gegenstand der unabhängigen Ansprüche. In den davon abhängigen Ansprüchen sind vorteilhafte Ausgestaltungen und Weiterbildungen der Erfindung angegeben.
-
Bei der Ausführung eines gespeicherten Programmcodes in einer Ausführungsumgebung wird zumindest ein Programmcodeelement des Programmcodes ausgeführt und eine Adressinformation verwendet, die auf das Programmcodeelement verweist. Eine geheime Information ist verteilt in einer Vielzahl gespeicherter Datenelemente enthalten und eines der Datenelemente wird verwendet. Vorliegend wird das Programmcodeelement sowohl ausgeführt als auch mittels der Adressinformation als das eine der Datenelemente verwendet.
-
Die Sicherheit des ausgeführten Programmcodes wird in mehrfacher Hinsicht verbessert, beispielsweise da eine bewusste Änderung des Programmcodeelements nicht nur den Ablauf ändert, sondern zugleich auch den Inhalt einer anderen Berechnung. Das Verfahren ist zudem flexibel, da die Schritte des Ausführen und der Verwendung als Datenelement zu beliebigen unterschiedlichen Zeitpunkten erfolgen kann. Insbesondere kann eine Ausführung vor und/oder nach einer Verwendung als Datenelement erfolgen.
-
Das Datenelement kann als Teil einer Ersetzungstabelle verwendet werden. Ein Wert, beispielsweise ein Zwischenwert einer kryptographischen Berechnung, wird durch den Wert des Programmcodeelements ersetzt. Insbesondere kann die Adresstabelle anstelle einer Ersetzungstabelle verwendet werden. Anstelle eines Wertes aus einer Ersetzungstabelle wird das Programmcodeelement zum verwendet, auf welches der jeweilige Verweis aus der Adresstabelle mit Verweisen auf Programmcodeelemente verweist. Eine Adresstabelle kann anstelle von einer oder mehreren Ersetzungstabellen verwendet werden. Zusätzlich zu einer Adresstabelle können im Programmcode eine oder mehrere Ersetzungstabellen vorliegen.
-
Somit wird auch verhindert, dass eine Ersetzungstabelle und/oder die zugehörige kryptographische Funktion unabhängig vom Programmcode bzw. dessen Programmcodeelementen verwendet werden kann.
-
Bevorzugt umfasst die Adressinformation einen Verweis auf das Programmcodeelement sowie eine Angabe zu weiteren Programmcodeelementen, die als eines der Datenelemente zu verwenden sind. Der Speicherbedarf für die Adresstabelle ist vorzugsweise somit kleiner als der Speicherbedarf der ursprünglichen Ersetzungstabelle.
-
Die Angabe in der Adressinformation kann kodieren, ob weitere Programmcodeelemente ausgehend von dem Programmcodeelement als Datenelemente zu verwenden sind. Auch kann die Angabe umfassen wie viele weitere Programmcodeelemente ausgehend von dem Programmcodeelement bzw. dessen Adresse zu verwenden sind. Die Angabe kann eine Berechnungsangabe für Adressen der weiteren Programmcodeelemente umfassen. Die (relative) Berechnungsangabe erlaubt (ausgehend von der Adresse des Programmcodeelements) die Berechnung von Adressen weiterer Programmcodeelemente, die als Datenelemente verwendbar sein sollen. Eine Berechnungsangabe kann insbesondere eine Richtung im gespeicherten Programmcode (nach „oben” (wie minus 0x10), nach „rechts unten” (plus 0x11)) umfassen.
-
In der Regel ist der Programmcode eingerichtet, eine kryptographische Funktion auszuführen und als einen Teilschritt der kryptographischen Funktion den Wert des Programmcodeelements als Ersetzungswert zu verwenden.
-
Vorzugsweise ist der Programmcode bzw. die Vielzahl seiner Programmcodeelemente bereits eingerichtet zur Ausführung in einer unsicheren Ausführungsumgebung. Der Programmcode ist also beispielsweise bereits ein verwürfelter und/oder verschleierter Programmcode.
-
Wenn die als Datenelement verwendeten Programmcodeelemente des Programmcodes gemäß einer Vorgabe über den gespeicherten Programmcode verteilt sind, kann die Sicherheit weiter erhöht werden. Die als Datenelement verwendeten Programmcodeelemente des Programmcodes können über alle Programmcodeelemente des gespeicherten Programmcodes gleichmäßig verteilt sein. Eine gleichmäßige Verteilung über den Speicherbereich des Programmcodes erschwert die Trennung des Programmcodes in einzelne Teile und deren Wiederverwendung. Vorab bestimmte Abschnitte des Programmcodes können als zu verwenden vorgegeben sein, um beispielsweise besonders sicherheitskritische Teile des Programmcodes abzusichern.
-
Eine Vorrichtung zum Bereitstellen von gesichertem Programmcode, umfassst eine Codebereitstellungseinheit und eine Adresserzeugungseinheit. Die Codebereitstellungseinheit stellt eine Vielzahl von in der Ausführungsumgebung ausführbaren Programmcodeelementen des Programmcodes bereit. Eine Adresserzeugungseinheit stellt Adressinformationen, welche jeweils auf eines der Programmcodeelemente des Programmcodes verweisen bereit. Der Programmcode ist eingerichtet, die Programmcodeelemente, auf die verwiesen wird, zumindest einmal auszuführen und zumindest einmal auch als Datenelement zu verwenden.
-
Die Vorrichtung ist vorgesehen zum Bereitstellen von Programmcode, welcher gemäß einer der vorgenannten Abläufe in einer Ausführungsumgebung ausführbar ist.
-
Die Adresserzeugungseinheit ist eingerichtet ausgehend von der Vielzahl von Programmcodeelementen und von für den Programmcode nötigen weiteren Daten, die Adressinformationen zu erzeugen, so dass der zu speichernde Programmcode, die Vielzahl von Programmcodeelementen und eine Adresstabelle mit den Adressinformationen umfasst. Die Adresstabelle wird zumindest teilweise anstelle der weiteren Daten, z. B. anstelle von einer von mehreren Ersetzungstabellen, vorgesehen.
-
Die Codebereitstellungseinheit wird die Vielzahl der Programmcodeelemente in einer für eine unsichere Ausführungsumgebung gesicherten Form bereitstellen. Sie kann also insbesondere Schritte des Verwürfelns und/oder des Verschleierns vornehmen, um den Programmcode besser zu schützen. Zusätzliche Programmcodeelemente können in den Programmcode eingebunden werden, welche eingerichtet sind, mittels der Adressinformation das Programmcodeelement als Datenelement zu verwenden. Der eigentliche Hauptteil des Programmcodes bzw. die kryptographische(n) Funktion(en) muss somit nicht vorab für das vorliegende Verfahren vorbereitet werden. Weiterhin kann in den Programmcode eine kryptographische Funktion eingebunden, welche eine in Ersetzungstabellen codierte geheime Information verwendet.
-
Gerade da in unsicheren Ausführungsumgebungen praktisch keine absolute Sicherheit für Informationen gewährleistet werden kann, erhöhen die vorliegenden Lösungen mit geringem Zusatzaufwand für die Absicherung den Aufwand für einen Angreifer erheblich.
-
Eine geheime Information ist verteilt in dem Programmcode enthalten. Die geheime Information ist also insbesondere nicht ungeschützt gespeichert. Die Information kann beispielsweise einfach verteilt vorliegen, kann verteilt im Programmcode in codierter Form vorliegen und/oder insbesondere durch vorbereitende Schritte auf den Programmcode und gegebenenfalls weitere Daten, wie Ersetzungstabellen, verteilt sein.
-
Ein Quelltext für den Programmcode wird typischerweise mittels einer Compiler-Einheit derart umgewandelt, dass ausführbarer Programmcode entsteht. Der Programmcode kann abhängig von dem jeweiligen Zielsystem sein. So ist es regelmäßig notwendig, bezüglich einzelner Prozessoren eigene Versionen des kompilierten Programmcodes zu erstellen.
-
Weitere Merkmale und Vorteile der Erfindung ergeben sich aus der folgenden Beschreibung von erfindungsgemäßen Ausführungsbeispielen sowie weiteren Ausführungsalternativen in Zusammenhang mit den Figuren, die zeigen:
-
1: eine Einheit mit unsicherer Ausführungsumgebung;
-
2: ein Programmcode mit einer Vielzahl von Programmcodeelementen und einer Adresstabelle;
-
3: ein schematisches Ablaufdiagramm für einen Programmablauf in einer ersten Ausgestaltung; und
-
4: ein schematisches Ablaufdiagramm für einen Programmablauf in einer zweiten Ausgestaltung; und
-
5: eine funktionale Darstellung einer Vorrichtung zum Bereitstellen von Programmcode und der wichtigsten Teilschritte der Bereitstellung.
-
1 zeigt eine Einheit 10 mit unterschiedlichen Ausführungsumgebungen 4, 5 und 8 für Programmcode, die beispielsweise als Mobilfunkgerät, Tablet oder Computer vorliegen könnte.
-
Die Einheit 10 umfasst eine unsichere Ausführungsumgebung 4, beispielsweise ein normales Betriebssystem, wie Windows 10, ein offenes (open source) Betriebssystem, wie Android, oder eine proprietäre, einfache Ausführungsumgebung.
-
Daneben umfasst die Einheit 10 optional eine sichere Ausführungsumgebung 5, beispielsweise ein Trusted Execution Environment im Sinne der Global-Patform Spezifikationen. Die Einheit kann weiter optional, darüber hinaus ein oder mehrere sichere Elemente 8 (Secure Elements) umfassen, wie SIM-Karten, sichere Massenspeicherspeicherkarten oder NFC-Einheiten.
-
In der unsicheren Ausführungsumgebung 4, wird ein Programmcode 1 ausgeführt, der einen Bereich mit einer Vielzahl von Programmcodeelementen 2 und eine Adresstabelle 3 umfasst. Der Programmcode 1 ist in einem nicht gezeigten, nicht-flüchtigen Speicher der Einheit 10 gespeichert. Der nicht-flüchtige Speicher kann insbesondere ein frei zugänglicher wieder beschreibbarer Speicher der Einheit 10 sein. Die unsichere Ausführungsumgebung kann für einen Angreifer als White Box betrachtet werden, die der Angreifer also kennt und auf die der Angreifer ggf. auch zur Laufzeit des Programmcodes Zugriff hat.
-
Am Beispiel von 2 werden die Inhalte des Programmcodes 1 näher dargestellt.
-
Der Programmcode 1 umfasst in einem Programmcodebereich 2 eine Vielzahl von Programmcodeelementen. Auf ausgewählte Programmcodeelemente 20, 22, 23, 24 und 25 verweisen Adressinformationen 30, 32, 33, 34 und 35 einer Adresstabelle 3 des Programmcodes. Die Adresstabelle 3 gibt an, welche Programmcodeelemente nicht nur als Programmcode ausgeführt werden, sondern im Programmcode auch als Datenelement verwendet werden.
-
Die Adressinformation 30 enthält einen Verweis V20 auf das Programmcodeelement 20. Der Verweis V20 ist vorgesehen, um das Programmcodeelement 20 zu lesen und als Datenelement im ausgeführten Programm zu verwenden. Das Programmcodeelement 20 wird demnach sowohl als Datenelement mit dem Wert „74” verwendet als auch als Instruktion „74” der Ausführungsumgebung ausgeführt. Ein solcher Ablauf wird später mit Bezug auf die 3 und 4 beschrieben.
-
Der Programmcode 1 soll vorliegend unter anderem eine kryptographische Berechnung ausführen. Die geheime Information, typischerweise ein Schlüssel, wird jedoch nicht am Stück im Programmcode 1 gespeichert. Die geheime Information wird verteilt im Programmcode 1 gespeichert. Insbesondere wird ein Netz von verknüpften Ersetzungstabellen verwendet. Die geheime Information ist insofern primär auf die Ersetzungstabellen verteilt aber auch in den Programmcode zur Verwendung der Ersetzungstabellen verteilt. Die Werte aus den Ersetzungstabellen werden verwendet, um (immer wieder) Zwischenwerte der kryptographischen Berechnung mit Werten aus der Ersetzungstabelle zu ersetzen. Die Adresstabelle 3 ersetzt nun vorliegend zumindest eine der Ersetzungstabellen. Als Ersetzungswerte werden somit – zumindest auch – die Programmcodeelemente verwendet, auf welche die Adresstabelle verweist. Der Programmcode 1 kann dabei zudem – in der 2 nicht dargestellte – Ersetzungstabellen umfassen.
-
Die Verweise der Adresstabelle 3 in 2 sind bevorzugt als relative Adressangaben ausgestaltet, also eher nicht als absolute Adressangabe.
-
In Ausgestaltungen kann die Adressinformation neben einem Verweis auf das (erste) Programmcodeelement auch die Angabe enthalten, ob ausgehend von diesem Programmcodeelement weitere Programmcodeelemente angegeben werden, die auch als Datenelement verwendet werden sollen.
-
So könnte die Adressinformation 30 angeben, dass keine weiteren Programmcodeelemente ausgehend von der Startadresse V20 zu verwenden sind. Die Adressinformation 32 mit dem Verweis V22 auf das Programmcodeelement würde dann anzeigen, dass weitere Programmcodeelemente zu verwenden sind und/oder wie viele Programmcodeelemente zu verwenden sind, in diesem Beispiel drei Weitere ausgehend vom Programmcodeelement 22 bis zum Programmcodeelement 22-3. Dazu kann eine relative Richtung enthalten sein, im Beispiel „nach unten”, in welcher diese weiteren Programmcodeelemente ausgehend vom Programmcodeelement 20 liegen. Die Richtung kann als Berechnungsangabe für die Adresse des jeweils nächsten Programmcodeelements vorliegen, beispielsweise „Adresse plus 0x10”. Analog beinhaltet die Adressinformation 34 neben dem Verweis V24 auf das Programmcodeelement die Angabe, dass zwölf weitere Programmcodeelemente ausgehend von der Adresse des Programmcodeelements 24 in Richtung schräg nach links unten liegen, z. b. „Adresse plus 0x0F”. Das vierte, weitere Programmcodeelement 24-4 ist hier beispielhaft besonders hervorgehoben.
-
3 zeigt in einer ersten Variante die verschiedenen Schritte bei Ausführung des Programmcodes 1 in einer gegebenenfalls unsicheren Ausführungsumgebung.
-
In Schritt 41 wird das Programmcodeelement 20 und anschließend in Schritt 42 das Programmcodeelement 24 ausgeführt. In Schritt 43 wird aus der Adressinformation 30 der Verweis V20 auf das Programmcodeelement 20 gelesen, um das (bereits ausgeführte) Programmcodeelement 20 in Schritt 44 als Datenelement zu verwenden. In Schritt 44 wird demnach im konkreteren Beispiel ein Zwischenwert einer vorzugsweise kryptographischen Berechnung durch den Wert des Programmcodeelements ersetzt.
-
Analog wird in Schritt 45 der Verweis V30 aus der Adressinformation 30 gelesen. Das noch auszuführende Programmcodeelement 23 wird als Datenelement, insbesondere direkt als Ersetzungswert verwendet. Erst anschließend wird das zuvor als Datenelement verwendete Programmcodeelement 23 in Schritt 47 in der Ausführungsumgebung ausgeführt.
-
Anzumerken wäre an dieser Stelle, dass die Schritte 43, 44 sowie 45, 46 durch den Programmcode vorgegeben sind, also auch einer Ausführung von (anderen) Programmcodeelementen des Programmcodes entspricht. Die Ausführung des Programmcodeelements in der Ausführungsumgebung entspricht der Ausführung der dem Wert des Programmcodeelements zugeordneten Instruktion.
-
Wie beispielhaft nur durch die Punkte nach den Schritten 44 und 46 in der Figur angedeutet können, an sich an jeder Stelle des Ablaufs in 3 oder 4, beliebig viele Zwischenschritte des Ausführen bzw. Ersetzen (mittels Adresstabelle und/oder Ersetzungstabellen) erfolgen. Der gezeigte Ablauf dient primär dazu den Sinn und die Verwendung der Adresstabelle zu erläutern.
-
In den zu 3 geschilderten Beispielen enthalten die Adressinformationen einen Verweis auf jeweils ein zu verwendendes Programmcodeelement.
-
Mit Bezug auf 4 wird nun ein möglicher Ablauf für Adressinformationen mit Angaben zu weiteren Programmcodeelementen, wie die Programmcodeelemente 22-3 und 24-4 aus 2, beschrieben.
-
Das dargestellte Verfahren beginnt mit der Ausführung der Programmcodeelemente 23 und 24-4 in den Schritten 51 und 52 respektive.
-
In Schritt 53 wird die Adressinformation 30 des Programmcodeelements 20 ausgelesen. Die Adressinformation 30 verweist auf das Programmcodeelement 20 aber auf keine weiteren Programmcodeelemente. Der Wert des Programmelements 20 wird in Schritt 54 in eine temporäre Ersetzungstabelle gespeichert.
-
Nachfolgend werden mit Hilfe der in Schritt 55 gelesenen Adressinformation 34 mehrere Werte für die temporäre Ersetzungstabelle bestimmt. Die Adressinformation 34 umfasst den Verweis V24 auf das Programmcodeelement 24, die Angabe das zwölf weitere Programmcodeelemente ausgehend von dieser Adresse in die Ersetzungstabelle zu übernehmen sind und die Richtung „Links unten”, z. b. als Berechnungsvorschrift Adresse „minus 0x0F”, in der die Adressen der weiteren Programmcodeelemente liegen. Die zwölf Programmcodeelemente, einschließlich des bereits ausgeführten Programmcodeelements 24-4, werden in Schritt 56 in die temporäre Ersetzungstabelle gespeichert.
-
In weiteren nicht dargestellten Schritten kann insbesondere die temporäre Ersetzungstabelle vervollständigt werden. Aus einer kleinen Adresstabelle 3 kann eine größere temporäre Ersetzungstabelle erstellt werden. Diese kann als einzige Ersetzungstabelle oder zusammen mit weiteren nicht temporären Ersetzungstabellen verwendet werden.
-
Zumindest die temporäre Ersetzungstabelle wird in den Schritten 57 und 58 zum Ersetzen mit den Werten der Programmcodeelemente 24-4 und 20 respektive verwendet. Ob die Verwendung der Werte durch Ersetzen oder in anderer Form, beispielsweise nach Speicherung eines temporären Schlüssels als Schlüssel, erfolgt, kann offen bleiben. Im Schritt 59 wird das zuvor bereits als Datenelement verwendete Programmcodeelement 20 ausgeführt.
-
5 zeigt die an der Bereitstellung des Programmcodes beteiligten funktionalen Einheiten sowie die möglichen Komponenten und Teilschritte.
-
Eine Codebereitstellungseinheit 16 und eine Adresserzeugungseinheit 17 erstellen den Programmcode 1, der den Codebereich 2 und Adressinformationen 3, hier als Adresstabelle, umfasst. Die Adresserzeugungseinheit 17 stellt Adressinformationen bereit, welche jeweils auf eines der Programmcodeelemente des Programmcodebereichs 2 verweisen. Der Programmcode ist eingerichtet, die Programmcodeelemente, auf die verwiesen wird, zumindest einmal auszuführen und zumindest einmal auch als Datenelement zu verwenden.
-
Der Programmcodebereich 2 mit einer Vielzahl von Programmcodeelementen wird von der Codebereitstellungseinheit 16 bereitgestellt. Die Codebereitstellungseinheit 16 kann dabei zugleich ein Kompiler, der insbesondere den Quelltext des Programmcodes oder andere Ausgangsbestandteile des Programmcodes, an die Ausführungsumgebung anpasst.
-
Die Codebereitstellungseinheit 16 kann bereits für die Ausführung in einer unsicheren Ausführungsumgebung angepasste Bestandteile verwenden. Beispielsweise eine kryptographische Funktion 12, in der Regel eine kryptographische Library oder kryptographische API, kann bereits für die Ausführung in einer unsicheren Ausführungsumgebung vorgesehen sein (White-Box-Funktion). Die eigentliche kryptographische Funktion 13 benötigt in der Regel weitere Daten, wie Schlüssel. Als vorliegendes Beispiel dargestellt ist eine White-Box-Krypto-Funktion, die eine Vielzahl miteinander verknüpfter Ersetzungstabellen 14 verwendet. Auf diesem Weg kann der explizite Einsatz eines geheimen Schlüssels vermieden werden. Der Schlüssel ist versteckt in den Ersetzungstabellen und in deren Verwendung durch die kryptograhische Funktion enthalten. Die Funktion ist insbesondere eine symmetrische kryptographische Funktion, wie AES, DES und/oder 3DES. Anstelle zumindest einer der Ersetzungstabellen wird im Programmcode 1 vorliegend die durch die Adresserzeugungseinheit 17 erzeugte Adresstabelle 3 verwendet.
-
In dem in 5 dargestellten Beispiel erstellt die Codebereitstellungseinheit 16 den Codebereich 2 aus einer Anwendung 11 (Hauptteil) und der kryptograhischen Funktion 13. Eine solche Trennung ist möglich aber nicht notwendig. Als optionalen Bestandteil bindet die Codebereitstellungseinheit 16 gegebenenfalls nötigen Code 15 zur Verwendung der Adresstabelle 15 in den Codebereich 2 ein.
-
Die Codebereitstellungseinheit 16 kann den Codebereich 2 als zusätzlich verschleierten und/oder verwürfelten Codebereich 2 bereitstellen. Als Verschleierung könnten beispielsweise unterschiedliche einzelne oder gruppierte Programmcodeelemente für die gleiche Funktion verwendet werden; andere Verschleierungsvarianten sind verfügbar. Eine Verwürfelung kann beispielsweise beinhalten, dass möglichst viele der nacheinander auszuführenden Programmcodeelemente bewusst im Speicherbereich voneinander getrennt werden (keine lineare Ausführung), andere Verwürfelungsvarianten sind verfügbar.
-
Die Adresserzeugungseinheit 17 verwendet den bereitgestellten Codebereich 2 und die benötigten weiteren Daten, hier eine Ersetzungstabelle 14, um die Adressinformation zu erzeugen. Sie prüft dabei, wo im Codebereich Programmcodeelemente mit geeigneten Werten angeordnet sind. Für die, hier als Ersatz für Werte der Ersetzungstabelle benötigten Werte, erstellt sie die Adressinformationen. Die einzelne Adressinformation kann wie in Bezug auf 2 bis 4 genauer beschrieben nur einen Verweis auf ein Programmcodeelement oder weitere Angaben enthalten.
-
Eine Vorgabe für die Adresserzeugungseinheit 17 könnte sein, eine gleichmäßige Verteilung der als Datenelement zu nutzenden Programmelemente über den Programmcodebereich 2 zu erzielen. Ebenso kann für die Adresserzeugungseinheit 17 vorgegeben sein, bestimmte Programmcodeelemente, mindestens ein Programmcodeelement aus bestimmten Teilbereichen des Programmcodebereichs und/oder bevorzugt Programmcodeelemente aus bestimmten Teilbereichen des Programmcodebereichs zu verwenden.
-
Der von der Vorrichtung mit Codebereitstellungseinheit 16 und Adresserzeugungseinheit 17 bereitgestellte Programmcode 1 kann wie zu einer der anderen Figuren beschreiben verwendet werden oder ausgestaltet sein. Die Vorrichtung kann als lokale Einheit, wie PC, oder als zentrale Einheit, beispielsweise als Server ausgebildet sein.