-
Die
Erfindung betrifft das technische Gebiet des Schutzes von Software,
die durch einen Prozessor eines tragbaren Datenträgers ausgeführt werden soll
oder ausgeführt
wird, gegen Angriffe. Ein tragbarer Datenträger im Sinne des vorliegenden
Dokuments kann insbesondere eine Chipkarte (smart card in unterschiedlichen
Bauformen oder ein Chipmodul oder eine sonstige ressourcenbeschränkte Vorrichtung
sein.
-
Chipkarten
und andere tragbare Datenträger werden
häufig
für sicherheitskritische
Anwendungen wie z.B. zur Autorisierung von Finanztransaktionen oder
zur Verschlüsselung
oder elektronischen Signatur von Dokumenten eingesetzt. Durch einen
erfolgreichen Angriff, bei dem z.B. Daten und/oder Berechnungsvorgänge ausgespäht und/oder
manipuliert werden, könnte
großer
Schaden entstehen. Deshalb kommt dem Schutz des Datenträgers gegen
Angriffe aller Art entscheidende Bedeutung zu. Kapitel 8.2 des Buches "Handbuch der Chipkarten" von W. Rankl und
W. Effing, Hauser Verlag, 3. Auflage 1999, Seiten 469-519, beschreibt
eine Reihe heute bekannter Angriffsverfahren und Abwehrmaßnahmen.
-
Tragbare
Datenträger
werden heute in großen
Stückzahlen
hergestellt. Die einzelnen Datenträger einer Baureihe weisen jeweils
ein identisches Betriebssystem und identische Anwendungssprogramme
auf. Zwar werden bei der Personalisierung der Datenträger unterschiedliche
persönliche
Daten der zukünftigen
Benutzer in die Datenträger
eingespielt; die Speicherbelegung der Datenträger sowohl im Hinblick auf
den gesamten ausführbaren
Programmcode als auch im Hinblick auf die Position der Individualisierungsdaten
bleibt jedoch bei allen Datenträgern
der Baureihe identisch.
-
WO
02/46890 A2 zeigt ein Verfahren zum Schutz von Software gegen Angriffe
im Sinne des Oberbegriffs von Patentanspruch 1.
-
Um
eine Dekompilation von frei auf einem Computer zugänglicher
Computersoftware zu verhindern, ist es aus US 2004/0003264 A1 und
WO 00/72112 A2 bekannt, einzelne Instruktionen der Computersoftware
zu maskieren und die zugehörige Demaskierungsinformation
verschlüsselt
auf dem Computer abzulegen. US 2002/0016918 A1 schlägt ergänzend vor
zufällig
ausgewählte
einzelne Instruktionen durch gleichwirkende Instruktionen zu ersetzen,
um eine Dekompilation zu erschweren.
-
Eine
auf einem Computer ausführbare
Software zum Schutz von Anwendungsprogrammen wird in WO 00/39956
A1 beschrieben. Mit Hilfe eines zufällig gesteuerten Quellcodegenerators
werden über die
Schritte des Kompilierens und Linkens individuelle Softwareversionen
erstellt, die auf dem jeweiligen Computer zum Schutz von Anwendungsprogrammen ausführbar sind.
-
Die
Tatsache, das alle Datenträger
einer Baureihe in ihrer Speicherbelegung übereinstimmen, stellt eine
mögliche
Schwachstelle dar. Wenn einem Angreifer ein erfolgreicher Angriff
gegen einen einzigen Datenträger
gelingt, sind damit alle Datenträger der
Baureihe kompromittiert. Überdies
steht Angreifern, die sich mehrere Datenträger derselben Baureihe beschaffen,
Material für
statistische Untersuchungen zur Verfügung. Ferner steigert die Tatsache,
daß ein
erfolgreicher Angriff auf viele weitere Datenträger übertragbar ist, die "Attraktivität" der entsprechenden Baureihe
für potentielle
Angreifer.
-
Aus
dem US-Patent 6,006,328 ist ein Verfahren zum Schutz von Anwendungsprogrammen,
die zur Ausführung
durch übliche
Arbeitsplatzrechner vorgesehen sind, gegen Ausspähung und andere Angriffe bekannt.
Bei diesem Verfahren wird eine lauffähige Konfiguration des Anwendungsprogramms
verschlüsselt
und durch zusätzlichen
Lade- und Überwachungscode
ergänzt.
Wenn das so erzeugte Programmpaket auf einem Arbeitsplatzrechner
gestartet wird, wird zunächst
der Lade- und Überwachungscode
ausgeführt.
Dieser entschlüsselt
das Anwendungsprogramm und stellt es im Speicher des Arbeitsplatzrechners
in seiner ursprünglichen
Konfiguration wieder her. Der dann im Arbeitsplatzrechner ausgeführte Programmcode
weist dieselbe Speicherbelegung wie der ursprüngliche Programmcode auf.
-
Die
Erfindung hat die Aufgabe, auf dem Gebiet der tragbaren Datenträger eine
verbesserte Technik zum Schutz von Software gegen Angriffe bereitzustellen.
Insbesondere sollen durch die Erfindung die Auswirkungen eines erfolgreichen
Angriffs gegen einen tragbaren Datenträger im Hinblick auf andere
Datenträger
derselben Baureihe reduziert werden. In bevorzugten Ausgestaltungen
soll auch ein Angriff gegen einen einzelnen Datenträger erschwert
werden.
-
Erfindungsgemäß wird diese
Aufgabe gelöst durch
ein Verfahren zum Schutz von Software mit den Merkmalen des Anspruchs
1, ein Computerprogrammprodukt gemäß Anspruch 17 und eine programmgesteuerte
Vorrichtung gemäß Anspruch
18.
-
Die
abhängigen
Ansprüche
definieren bevorzugte Ausgestaltungen der Erfindung.
-
Die
Erfindung geht von der Grundidee aus, die zu schützende Software individuell
für jeden
Datenträger
oder zumindest jede Gruppe von Datenträgern zu konfigurieren. Mit
anderen Worten wird erfindungsgemäß aus einer lauffähigen ersten
Konfiguration der Software mindestens eine lauffähige zweite Konfiguration der
Software erzeugt, so daß die
mindestens eine zweite Konfiguration der Software die gleiche Funktion
wie die erste Konfiguration, aber eine veränderte Speicherbelegung, aufweist.
Die auf diese Weise individualisierte Software ist zum Einschreiben
in einen nichtflüchtigen überschreibbaren Speicher
des Datenträgers
vorgesehen oder wird innerhalb des Datenträgers in einem solchen Speicher generiert.
-
Die
Erfindung hat den erheblichen Vorteil, daß aus der Speicherbelegung
eines Datenträgers nicht
auf die Speicherbelegung eines anderen Datenträgers geschlossen werden kann.
Selbst ein erfolgreicher, gegen einen Datenträger einer Baureihe gerichteter
Angriff würde
daher die Sicherheit anderer Datenträger derselben Baureihe nicht
kompromittieren. Angesichts des hohen Aufwands für einen erfolgreichen Angriff
und des beschränkten
Nutzens für den
Angreifer ist davon auszugehen, daß Datenträger, die mit dem erfindungsgemäßen Schutzmechanismus
ausgestattet sind, generell für
Angreifer weniger "attraktiv" werden.
-
Der
erfindungsgemäße Schutzmechanismus betrifft
Software, die zur Ausführung
durch einen Prozessor des tragbaren Datenträgers vorgesehen ist oder gerade
durch einen solchen Prozessor ausgeführt wird. Der Begriff "Software" soll in diesem Zusammenhang
nicht nur ausführbaren
Programmcode, sondern vorzugsweise auch konstante und variable Daten,
die von diesem Programmcode angesprochen werden, umfassen. Mit anderen
Worten soll in bevorzugten Ausgestaltungen der Begriff "Software" als die Gesamtheit
aller zur Programmausführung benötigten Programmbefehle
und Daten verstanden werden. In anderen Ausführungsformen wird dagegen die
Erfindung nur im Hinblick auf die im strengen Sinne ausführbaren
Teile der Software angewendet.
-
Besonders
bevorzugt sind Ausgestaltungen, bei denen die Software ein Betriebssystem
des tragbaren Datenträgers
oder ein Teil davon ist. Da das Betriebssystem besonders sicherheitskritische
Funktionen ausführt,
können
Schutzmaßnahmen,
selbst wenn sie auf das Betriebssystem beschränkt sind, viele Angriffe wirksam
verhindern. In Ausführungsalternativen
der Erfindung wird jedoch – alternativ
oder zusätzlich
zum Schutz des Betriebssystems – mindestens
ein Anwendungsprogramm oder mindestens ein Teil davon in die erfindungsgemäßen Schutzmaßnahmen
einbezogen.
-
Vorzugsweise
ist der nichtflüchtige überschreibbare
Speicher des Datenträgers,
in den die individualisierte Software eingeschrieben wird, ein Flash-Speicher oder FeRAM
(ferroelelectric random access memory). Der Datenträger enthält in bevorzugten
Ausgestaltungen keinen maskenprogrammierten Festwertspeicher zur
Aufnahme von Programmcode, da sich die erfindungsgemäße Individualisierung
nicht für
Software, die zur Speicherung in maskenprogrammiertem Festwertspeicher
vorgesehen ist, eignen würde.
-
Die
erfindungsgemäße Änderung
der Software kann auf unterschiedliche Weise erfolgen, sofern die
Funktion der Software unverändert
bleibt. Beispielsweise können
Abschnitte der Software verschoben und/oder vertauscht werden. Alternativ
oder zusätzlich
können
funktionsneutrale Befehle und/oder Befehlssequenzen eingefügt oder
entfernt werden, was in der Regel – aber nicht zwingend – eine Verschiebung
von Abschnitten der Software zum Ausgleich eines veränderten
Programmcodeumfangs nach sich zieht. Ferner wird in bevorzugten Ausgestaltungen
berücksichtigt,
daß gegebenenfalls manche
Abschnitte der Software nicht oder nur im Ganzen verschoben werden
dürfen.
In vorteilhaften Ausgestaltungen ist vorgesehen, daß Sprungziele und
Referenzen – z.B.
Zeiger auf konstante oder variable Daten – in der gesamten Software
an die veränderte
Speicherbelegung angepaßt
werden.
-
Die
erfindungsgemäß erzeugte
Software braucht nicht notwendigerweise einen zusammenhängenden
Speicherbereich zu belegen. In manchen Ausgestaltungen der Erfindung
ist vielmehr vorgesehen, den zur Verfügung stehenden nichtflüchtigen überschreibbaren
Speicher voll auszunutzen, wobei Lücken zwischen einzelnen Abschnitten
der Software in Kauf genommen werden.
-
Um
eine besonders hohe Sicherheit zu erreichen, wird die Veränderung
der Software vorzugsweise zufallsgesteuert – d.h. auf eine zwar möglicherweise
deterministische, aber für
Dritte nicht vorhersagbare Weise – durchgeführt. Die Funktion der Software
darf nicht verändert
werden. Dies schließt
jedoch nicht aus, daß zumindest
Programmabschnitte, die nicht absolut zeitkritisch sind, hinsichtlich
ihrer Ausführungszeit
verändert
werden. Wenn z.B. funktionsneutrale Programmbefehle oder Sprungbefehle eingefügt oder
gelöscht werden,
beeinflußt
dies die Ausführungsgeschwindigkeit
des Programms. Eine solche Veränderung
ist in der Regel nicht nur unschädlich,
sondern sogar vorteilhaft, weil sie Angriffe durch Laufzeitanalysen
erschwert.
-
Das
erfindungsgemäße Verfahren
kann sowohl innerhalb des tragbaren Datenträgers durch den Prozessor des
Datenträgers
als auch extern, z.B. in Zusammenhang mit der Herstellung oder Initialisierung
oder Personalisierung des Datenträgers, ausgeführt werden.
Im erstgenannten Fall greift der Prozessor des Datenträgers vorzugsweise
auf die bereits in ihrer ersten Konfiguration im nichtflüchtigen überschreibbaren
Speicher des Datenträgers
befindliche Software zu und verändert
diese, um die zweite Konfiguration zu erhalten. Dieser Vorgang kann
einmalig zu Beginn der Lebensdauer des Datenträgers oder in Reaktion auf ein
vorbestimmtes Ereignis durchgeführt
werden. Wenn das erfindungsgemäße Verfahren
extern ausgeführt
wird, dient dies vorzugsweise dazu, eine Mehrzahl von Datenträgern mit
individualisierter Software zu versorgen.
-
Das
erfindungsgemäße Computerprogrammprodukt
weist in einer ersten Ausgestaltung die Software in einer Mehrzahl
unterschiedlich individualisierter Konfigurationen auf. In einer
zweiten Ausgestaltung enthält
das Computerprogrammprodukt Programmbefehle, die das erfindungsgemäße Verfahren
implementieren. Ein derartiges Computerprogrammprodukt kann ein
körperliches
Medium sein, beispielsweise ein Halbleiterspeicher oder eine Diskette
oder eine CD-ROM. Das Computerprogrammprodukt kann jedoch auch ein
nicht-körperliches
Medium sein, beispielsweise ein über
ein Computernetzwerk übermitteltes
Signal. Insbesondere kann das Computerprogrammprodukt bei der Herstellung
oder Initialisierung oder Personalisierung oder während des
Betriebs des tragbaren Datenträgers
oder zur Programmierung eines Verarbeitungsrechners eingesetzt werden.
-
Die
erfindungsgemäße programmgesteuerte Vorrichtung
ist in einer ersten Ausgestaltung ein Verarbeitungsrechner zur Erzeugung
einer Mehrzahl von unterschiedlich individualisierten Konfigurationen
der Software und in einer zweiten Ausgestaltung ein tragbarer Datenträger, der
die zur funktionsneutralen Veränderung
der Software erforderliche Funktionalität aufweist. In bevorzugten
Ausgestaltungen weist/weisen die Vorrichtung und/oder das Computerprogrammprodukt
Merkmale auf, die den gerade beschriebenen und/oder den in den abhängigen Verfahrensansprüchen genannten
Merkmalen entsprechen.
-
Weitere
Einzelheiten und Vorteile der Erfindung gehen aus der folgenden
genauen Beschreibung mehrerer Ausführungsbeispiele und Ausführungsalternativen
hervor. Es wird auf die schematischen Zeichnungen verwiesen:
-
1 zeigt
ein Blockdiagramm eines tragbaren Datenträgers nach einem Ausführungsbeispiel der
Erfindung,
-
2 veranschaulicht
ein Beispiel einer erfindungsgemäßen Schutzmaßnahme,
-
3 zeigt
ein Ablaufdiagramm eines Verfahrens nach einem Ausführungsbeispiel
der Erfindung, und
-
4 veranschaulicht
einen außerhalb
des Datenträgers
ausgeführten
Vorgang des Erzeugens individualisierter Software.
-
Der
in 1 dargestellte Datenträger 10 ist im vorliegenden
Ausführungsbeispiel
als Chipkarte ausgestaltet. Der Datenträger 10 weist auf einem
einzigen Halbleiterchip einen Prozessor 12 und eine Kommunikationsschnittstelle 14 zur
kontaktlosen oder kontaktgebundenen Kommunikation auf. Ferner enthält der Datenträger 10 einen
als RAM ausgestalteten Arbeitsspeicher 16 und einen nichtflüchtigen überschreibbaren
Speicher 18. Der nichtflüchtige überschreibbare Speicher 18 ist
im vorliegenden Ausführungsbeispiel
als Flash-Speicher ausgebildet; in Ausführungsalternativen kann jedoch
eine andere Speichertechnologie, beispielsweise FeRAM, verwendet
werden.
-
Im
vorliegenden Ausführungsbeispiel
weist der nichtflüchtige überschreibbare
Speicher 18 ein Betriebssystem 20, mindestens
ein Anwendungsprogramm 22 und einen freien Speicherbereich 24 auf. Ein
Programmodul 26, das das im folgenden noch genau zu beschreibende
Angriffsschutzverfahren implementiert, ist Teil des Betriebssystems 20.
Die Darstellung der Speicherbelegung in 1 ist lediglich schematisch
zu verstehen. In realen Implementierungen können das Betriebssystem 20,
das mindestens eine Anwendungsprogramm 22 und der freie Speicherbereich 24 in
ineinander verzahnten, nicht-zusammenhängenden Speicherabschnitten angeordnet
sein.
-
2 zeigt
einen Ausschnitt des nichtflüchtigen überschreibbaren
Speichers 18, der Software 28 enthält. Diese
Software 28 wird durch das erfindungsgemäße Verfahren
gegen Angriffe geschützt. Hierzu
wird die Software 28 derart verändert, daß sich bei gleichbleibender
Funktion der Software 28 eine neue Speicherbelegung im
nichtflüchtigen überschreibbaren
Speicher 18 ergibt. Im vorliegenden Ausführungsbeispiel
ist die Software 28 das gesamte Betriebssystem 20 oder
ein Teil davon; in Ausführungsvarianten
kann die Software 28 jedoch – zusätzlich zum Betriebssystem 20 oder
stattdessen – das Anwendungsprogramm 22 oder
einen Teil davon umfassen. Auch das Modul 26, das das erfindungsgemäße Schutzverfahren
implementiert, kann durch das Verfahren selbst geschützt werden
und damit Teil der Software 28 sein.
-
In 2 ist
die Software 28 links in einer ersten Konfiguration 30 gezeigt.
Diese erste Konfiguration 30 der Software 28 wird
durch einen Schritt des erfindungsgemäßen Verfahrens, der in 2 durch einen
offenen Pfeil dargestellt ist, in eine zweite Konfiguration 32 umgewandelt.
In dem in 2 gezeigten, einfachen Beispiel
unterscheiden sich die beiden Konfigurationen 30, 32 dadurch,
daß in
der zweiten Konfiguration 32 ein funktionsneutraler Programmabschnitt 34 – z.B. zwei
aufeinanderfolgende Befehle zur Negierung von Prozessorregistern – zwischen
zwei in der ersten Konfiguration 30 direkt aufeinanderfolgende
Abschnitte 36, 38 der Software 28 eingefügt wurde.
Um Platz für
den zusätzlichen
Programmabschnitt 34 zu schaffen, wurde der Abschnitt 38 "nach hinten" verschoben, während der
Abschnitt 36 an seiner ursprünglichen Stelle belassen wurde. Um
die Software 28 funktionsfähig zu halten, wurden ferner
Sprungziele und Referenzen in der gesamten Software 28 an
die Verschiebung des Abschnitts 36 angepaßt.
-
Der
erfindungsgemäße Vorgang
der funktionsneutralen Veränderung
der Software 28 wird durch das Modul 26 ausgeführt. Dieses
Modul 26 weist im vorliegenden Ausführungsbeispiel fünf Hauptkomponenten
auf, nämlich
einen Sucher, einen Einfüger,
einen Mischer, einen Optimierer und einen Relokator. Diese Komponenten
werden durch eine ebenfalls im Modul 26 implementierte
Steuerung aufgerufen und in ihrem Zusammenwirken gesteuert. Die
prinzipielle Funktionsweise des Einfügers, Mischers, Optimierers
und Relokators ist als solche z.B. aus dem technischen Gebiet des
Compilerbaus bekannt.
-
Ein
beispielhafter Ablauf des erfindungsgemäßen Verfahrens ist in 3 gezeigt.
Das Verfahren wird von einem Ereignis 40 angestoßen. Das
Ereignis 40 kann beispielsweise eine vorbestimmte Ausgabe
eines Pseudozufallszahlengenerators ein, die bei jeder Transaktion
mit einer Wahrscheinlichkeit von z.B. 1 % auftritt. Der Ablauf in 3 kann
jedoch auch periodisch – z.B.
nach jeder hundertsten Transaktion – aufgerufen werden. Alternativ
oder zusätzlich
kann das Ereignis 40 auch ein möglicher Manipulationsversuch – z.B. die
Eingabe einer falschen Geheimzahl – oder der Empfang eines entsprechenden Befehls über die
Kommunikationsschnittstelle 14 sein. Ferner kann vorgesehen
sein, das Verfahren immer dann oder nur dann auszuführen, wenn
keine anderen dringenden Aufgaben zur Bearbeitung durch den Datenträger 10 anstehen.
-
Nach
dem Start des Verfahrens von 3 in Reaktion
auf das Ereignis 40 wird zunächst in Schritt 42 der
Sucher aufgerufen. Der Sucher verwaltet einen Suchzeiger 44,
der, ausgehend von einem zufälligen
Startwert, die Software 28 im nichtflüchtigen überschreibbaren Speicher 18 überstreicht.
Allgemein identifiziert der Sucher. Speicherbereiche im nichtflüchtigen überschreibbaren
Speicher 18, die verschoben und/oder manipuliert werden
dürfen. Dies
ist wichtig, weil z.B. Speicherbereiche, in denen sich in den Adreßraum abgebildete
Ein- und Ausgaberegister (memory mapped ports) befinden, nicht verschoben
werden dürfen.
Andere Speicherbereiche – z.B.
zusammenhängende
Datenbereiche – dürfen nur
als Ganzes verschoben werden. Ferner kann die Software 28 Programmabschnitte
enthalten, die zwar verschoben, aber nicht modifiziert werden dürfen, z.B.
Programmabschnitte mit zwingend vorgegebener, fester Laufzeit.
-
In
manchen Ausgestaltungen kann vorgesehen sein, daß der Sucher die verschiebbaren und/oder
modifizierbaren Speicherabschnitte anhand einer Tabelle identifiziert,
die bei der Herstellung des Datenträgers 10 vorgegeben
wurde und, falls erforderlich, bei jedem Veränderungsschritt an die neue Konfiguration
angepaßt
wird. Alternativ oder zusätzlich
kann vorgesehen sein, daß verschiebbare und/oder
modifizierbare Programmcodeteile mit einem vorgegebenen Schlüsselwert
(magic number) beginnen, durch den sie vom Sucher eindeutig identifizierbar
sind. Schließlich
kann der Sucher auch eine Analyse der Software 28 durchführen, um
verschiebbare und/oder modifizierbare Abschnitte zu identifizieren.
Die dazu erforderlichen Techniken sind als solche bekannt; jedoch
wäre eine
solche Analyse relativ aufwendig zu implementieren und auszuführen.
-
In
Schritt 46 wird der Suchvorgang von Schritt 42 zufallsgesteuert
wiederholt. Wenn in Schritt 46 ein Rücksprung zu Schritt 42 erfolgt,
wird der aktuell gefundene Speicherabschnitt unverändert belassen,
und ein neuer verschiebbarer und/oder modifizierbarer Abschnitt
wird gesucht. Wenn in Schritt 46 kein Rücksprung erfolgt, wird das
Verfahren in Schritt 48 mit dem zufälligen Aufruf des Einfügers (Schritt 50)
oder des Mischers (Schritt 52) oder des Optimierers (Schritt 54)
fortgesetzt.
-
Die
Aufgabe des Einfügers
besteht darin, den vorhandenen Programmcode an einer durch den Suchzeiger 44 angegebenen
Stelle durch zusätzliche Befehle
oder Befehlssequenzen, die keine Auswirkung auf die Funktion des
Programmcodes haben, zu erweitern. Beispielsweise kann der Programmcode durch
einen Sprungbefehl an eine Stelle, die einen sofortigen Rücksprung
enthält,
ergänzt
werden. Weitere Beispiele für
funktionsinvarianten Programmcode sind die Addition eines Wertes
mit darauffolgender Subtraktion des gleichen Wertes oder die zweimalige
aufeinanderfolgende Negie rung eines Prozessorregisters. Es können auch
einzelne Maschinenbefehle durch funktionsidentische Befehle ersetzt werden,
beispielsweise ein Sprungbefehl mit kurzer Sprungzielangabe (short
jump) durch einen entsprechenden Sprungbefehl mit langer Sprungzielangabe (long
jump). Insgesamt vergrößert sich
in Schritt 50 durch die Einfügeoperation der Gesamtumfang
des Programmcodes.
-
Der
in Schritt 52 aufgerufene Mischer hat die Aufgabe, zwei
Programmabschnitte funktionsinvariant zu vertauschen. Die beiden
miteinander vertauschten Programmcodeteile werden durch entsprechende
Sprungbefehle derart miteinander verbunden, daß sich die Ausführungsreihenfolge
der einzelnen Programmbefehle – und
damit die Funktion der Software 28 – nicht ändert. Wenn die zu vertauschenden
Programmbefehle voneinander unabhängig sind, kann deren Ausführungsreihenfolge ohne
Funktionsänderung
vertauscht werden. In diesem Fall können die zusätzlichen
Sprungbefehle weggelassen werden. Je nachdem, ob zusätzliche Sprungbefehle
erforderlich sind oder nicht, kann sich durch die Ausfühung von
Schritt 52 der Umfang des Programmcodes vergrößern oder
gleich bleiben. In manchen Ausgestaltungen werden zusätzliche Sprungbefehle
jedoch selbst dann eingefügt,
wenn dies nicht unbedingt erforderlich wäre, weil die durch die Sprungbefehle
hervorgerufene Änderung
der Programmabläufe
bei der Ausführung
der Software 28 die Angriffssicherheit weiter erhöht.
-
Mit
dem in Schritt 54 aufgerufenen Optimierer wird ein früher durch
den Einfüger
eingebrachter Programmcode wieder entfernt. Der Optimierer ist also
das Gegenstück
zum Einfüger.
Der Optimierer kann funktionsinvarianten Programmcode erkennen und
entfernen, wobei sich der Gesamtumfang des Programmcodes verkleinert.
Es ist nicht zwingend erforderlich, daß alle vom Einfüger vorgenommenen Änderungen
durch den Optimierer rückstandsfrei entfernt
werden können.
-
Nachdem
einer der Schritte 50 bis 54 ausgeführt worden
ist – in
Ausführungsalternativen
können auch
mehrere dieser Schritte kombiniert werden – wird in Schritt 56 der
Relokator aufgerufen, um Sprungzieladressen und Referenzen – z.B. Zeigeradressen – in der
gesamten Software 28 an die neue Speicherbelegung im nichtflüchtigen überschreibbaren
Speicher 18 anzupassen.
-
Die
bisher beschriebenen Vorgänge
werden in den Schritten 58 und 60 zufallsgesteuert
wiederholt, wobei Schritt 58 einen weiteren Einfüge- oder Misch-
oder Optimierungsvorgang an der durch den Suchzeiger 44 angegebenen
Stelle und Schritt 60 das Suchen eines neuen zu verändernden
Programmabschnitts betrifft. Der zu erwartende Umfang der Veränderungen
kann durch Variation der Zufallswahrscheinlichkeiten bei den Schritten 46, 48, 58 und 60 gesteuert
werden. Diese Zufallswahrscheinlichkeiten können in manchen Ausgestaltungen
kartenindividuell und/oder individuell zu jeder Abfrage parametrisiert
werden.
-
Insgesamt
wird durch das in 3 gezeigte Verfahren die Software 28 stellenweise
verändert, um
eine neue Speicherbelegung im nichtflüchtigen überschreibbaren Speicher 18 zu
erhalten. Die geänderte
Software ist nach wie vor funktionsfähig und funktionsidentisch
zu der urspünglichen
Software.
-
Bei
dem gesamten Verfahrensablauf von 3 muß darauf
geachtet werden, daß Ablaufsequenzen,
die Schreibzugriffe auf den nichtflüchtigen überschreibbaren Speicher 18 umfassen,
atomar, also entweder ganz oder gar nicht, ausgeführt werden.
Dies kann durch eine geeignete Verwaltung von Rückführdaten (rollback data) erzielt
werden. Durch die atomare Verfahrensausführung wird sichergestellt,
daß im
Falle einer plötzlichen
Spannungsunterbrechung während
der Ausführung
des Verfahrens von 3 die gerade veränderte Software 28 in
einem funktionsfähigen
oder zumindest wiederherstellungsfähigen Zustand verbleibt.
-
In
manchen Ausführungsformen
ist das Verfahren derart ausgestaltet, daß die Software 28 bei den
einzelnen Veränderungsvorgängen möglichst kompakt
bleibt. Es sind jedoch auch Ausführungsvarianten
vorgesehen, bei denen der gesamte zur Verfügung stehende Speicherplatz
im nichtflüchtigen überschreibbaren
Speicher 18 genutzt wird. Hierdurch kann eine besonders
gute Verschleierungswirkung erzielt werden. Wenn zusätzlicher
Speicher benötigt
wird – z.B.
von dem Anwendungsprogramm 22 –, kann dieser durch einen
Aufruf des Optimierers gesucht und freigegeben werden.
-
In
einer Ausführungsalternative
wird das Verfahren gemäß 3 nicht
oder nicht nur während des
regulären
Betriebs des Datenträgers 10,
sondern auch oder ausschließlich
beim Laden des Betriebssystems 20 und/oder des Anwendungsprogramms 22 in
den nichtflüchtigen überschreibbaren
Speicher 18 angestoßen.
Das Verfahren selbst wird in dieser Ausführungsalternative nach wie
vor durch den Prozessor 12 des Datenträgers 10 ausgeführt. Es
sind jedoch weitere Ausgestaltungen der Erfindung vorgesehen, in
denen ein Verfahren wie in 3 nicht
innerhalb des Datenträgers 10,
sondern extern ausgeführt
wird. Eine derartige Ausführungsform
ist in 4 veranschaulicht.
-
Der
Ablauf von 4 geht von der Software 28 ihrer
ersten Konfiguration 30 aus. Ein Verarbeitungsrechner 70,
der als leistungsfähiger
Computer mit mindestens einem Prozessor ausgestaltet ist und eine
sichere Umgebung bereitstellt, führt
ein Verfahren wie in 3 aus, um die Software 28 in
eine Vielzahl unterschiedlicher zweiter Konfigurationen 32A, 32B, 32C,
... zu überführen. jede
dieser zweiten Konfigurationen 32A, 32B, 32C,
... – im
folgenden zusammenfassend mit 32x bezeichnet – ist für einen einzigen
Datenträger 10 vorgesehen.
Mit anderen Worten wird eine kartenindividuelle zweite Konfiguration 32x der
Software 28 erstellt. In einer Ausführungsalternative wird jede
zweite Konfiguration 32x nicht nur für einen einzigen Datenträger 10,
sondern für
eine relativ kleine Gruppe von Datenträgern – z.B. zehn Datenträger – verwendet.
-
Die
diversen zweiten Konfigurationen 32x der Software 28 können auf
einem computerlesbaren Medium 72 – z.B. einer Festplatte oder
CD-ROM – zwischengespeichert
werden. Bei der Herstellung oder Initialisierung oder Personalisierung
eines Datenträgers 10 wird
die individualisierte Software 28 über ein Terminal 74 in
den Datenträger 10 geladen. Hierbei
kann der Datenträger 10 nach
dem Stand der Technik – also
ohne die Funktionalität,
weitere Veränderungen
der Software ereignisgesteuert durchzuführen – ausgestaltet sein. Der Datenträger 10 kann aber
auch gemäß der vorliegenden
Erfindung ausgestaltet sein und bei Bedarf die in ihm gespeicherte Software 28 nochmals
verändern.
-
In
einer besonders einfachen Realisierung des in 4 gezeigten
Vorgangs ist vorgesehen, die einzelnen kompilierten Programmodule,
die in ihrer Summe die Software 28 bilden, vor dem Laden
in den nichtflüchtigen überschreibbaren
Speicher 18 des Datenträgers 10 in
zufälliger
Reihenfolge zu linken. Durch diese Vorgehensweise läßt sich
eine kartenindividuelle Belegung des nichtflüchtigen überschreibbaren Speichers 18 mit
sehr geringem Aufwand realisieren.