-
Die
Erfindung betrifft Karten mit Mikroschaltung, und insbesondere Karten
mit Mikroprozessor, die selber diverse Veränderungen ihres nichtflüchtigen
Speichers durchführen.
-
Bei
der Durchführung
einer Transaktion wird im Allgemeinen der Speicher ein oder mehrere
Male verändert,
und es ist natürlich
nötig sicherzustellen, dass
dann alle Veränderungen
sicher richtig ausgeführt
wurden, bevor die neu geschriebenen Informationen genutzt werden
können,
wobei die neu geschriebenen Informationen im Falle eines Fehlers oder
eines Integritätsmangels
des Schreibvorgangs ignoriert oder gelöscht werden müssen.
-
Die
US-A-4 877 945 beschreibt dementsprechend die Art und Weise der
Erfassung einer Unregelmäßigkeit,
die im Laufe einer Sequenz des Schreibens mehrerer Informationen
aufgetreten ist, um das Fortfahren der Transaktion auf fehlerhaften
Grundlagen zu verhindern.
-
Es
ist im Übrigen
wünschenswert,
im Falle einer Unregelmäßigkeit
zum vorherigen Zustand zurückkehren
zu können,
d.h., dass eine spätere
Transaktion in der Lage sein muss, mit den Werten der Informationen
zu arbeiten, die in der Karte vor Durchführung der fehlerbehafteten
Transaktion geschrieben waren.
-
Die
vorzitierte US-A-4 877 945 bietet diesen Vorteil nicht, da einige
der alten Werte der Informationen während der Durchführung der
fehlerbehafteten Transaktion bereits verloren wurden, so dass es nicht
möglich
sein wird, diese Informationen in ihren früheren Zustand zurückzubringen,
zumindest auf der Grundlage der alleinigen Informationen, die in dieser
Karte enthalten sind.
-
Die
WO-A-89/02140 wiederum beschreibt eine solche Vorgehensweise, die
jedoch nur auf den Fall der Veränderung
einer einzigen Information oder mehrerer Veränderungen von Informationen
unabhängig
voneinander anwendbar ist.
-
In
zahlreichen Fällen
ist es jedoch erforderlich, im Verlauf der selben Transaktion mehrere
Informationen zu verändern,
und diese werden als "gegenseitig
voneinander abhängig" betrachtet, falls
es erforderlich ist, dass sie für
die ordentliche Durchführung
der Gesamtheit der Veränderungen
in der Gesamtheit der Informationen zusammen verarbeitet werden.
-
Das
Risiko einer unvollkommenen oder unvollständigen Transaktion, die eine
Mehrzahl von untereinander abhängigen
Informationen betrifft, ist bei den Karten vom "kontaktlosen" Typ besonders hoch, wo die Grenzen
des Volumens, in welchem die Karte um das Terminal ordentlich funktionieren
kann, nicht wahrnehmbar sind. In diesem Fall besteht ein nicht vernachlässigbares
Risiko eines unerwarteten Abbruchs der Kommunikation zwischen der
Karte und dem Terminal, wegen der Entfernung der Karte aus dem Aktionsradius
des Terminals vor Abschluss der Verarbeitung, oder wegen einer vorübergehenden Störung, z.
B. des nahegelegenen Vorbeiziehens einer metallischen Masse.
-
Ein
Beispiel (wohl gemerkt nicht beschränkend) ist die Verwendung einer
solchen Karte bei einer Ferntransaktion für Fahrkarten, d.h. für den Zugang
zu einem öffentlichen
Verkehrsnetz, wobei die Karte die doppelte Rolle einer Fahrkarte
und einer elektronischen Geldbörse übernimmt.
-
Um
die aufgezeigten Schwierigkeiten zu überwinden und eine Mehrzahl
von Schreibvorgängen
oder andere Veränderungen
von voneinander abhängigen
Daten "unteilbar" zu machen, wurden mehrere
Lösungen
vorgeschlagen.
-
In
dem weiter oben angegebenen Anwendungsbeispiel beginnen die bekannten
Systeme damit, die Geldbörse
abzubuchen, und schreiben sodann die durch den Nutzer erworbenen
Beförderungsrechte.
Falls der Nutzer seine Karte während dieser
zwei Vorgänge
entfernt, wird er gebeten, die Karte erneut vorzuzeigen, und das
Schreiben der Beförderungsrechte
fährt fort.
Jedoch wird er einen Schaden erleiden, falls er geht, ohne seine
Karte erneut vorzuzeigen. Es ist natürlich unmöglich, in umgekehrter Reihenfolge
vorzugehen, da dem Nutzer dann der Anreiz gegeben wird, seine Karte
zu entfernen, bevor die Geldbörse
abgebucht wurde.
-
Diese
Lösung
impliziert, dass das Terminal besonders konfiguriert ist, um im
Falle einer Unterbrechung die Aktivierung einer Verarbeitung für den Ausnahmefall
zu erlauben, welche die Wiederaufnahme der Transaktion steuert (Neueinführung der Karte
auf Anfrage des Terminals). Neben der Erhöhung der Komplexität der Software
des Terminals ist diese Lösung
nicht vollständig
zufriedenstellend, insoweit als, wie es angegeben wurde, der Nutzer
im Falle der Nicht-Wiederaufnahme der Transaktion dennoch einen
Schaden erleidet.
-
Eine
andere Lösung
besteht darin, gekreuzte Information zu verwenden, indem im Terminal
Informationen über
den Zustand der Geldbörse
der Karte gehalten werden, und umgekehrt. Diese Lösung ist aber
auch nicht zufriedenstellend, da, abgesehen von ihrer Komplexität, sie das
Volumen an zwischen der Karte und dem Terminal ausgetauschten Daten erhöht, und
dementsprechend die Durchführung
der Transaktion verlangsamt. Sie lässt sich außerdem schwer auf eine große Anzahl
von unteilbar zu machenden Schreibvorgängen (drei und mehr) anwenden.
-
Eines
der Ziele der Erfindung ist es, ein Verfahren vorzuschlagen, welches
die Durchführung
einer Mehrzahl von Veränderungen
des Kartenspeichers auf unteilbare Weise erlaubt.
-
Ein
anderes Ziel der Erfindung ist es, ein solches Verfahren vorzuschlagen,
das vollständig
von der Karte verwaltet werden kann. Dieses Verfahren kann also
ohne Veränderung
der Terminals umgesetzt werden, und ohne dass es erforderlich wäre, Verarbeitungen
durch diese Terminals für
Ausnahmefälle
vorzusehen, und bei Ver wendung der Syntax der bestehenden Befehle
und folglich mit einer großen
Flexibilität
bei der Auswahl der Befehle.
-
Das
erfindungsgemäße Verfahren
ist vom Typ, bei welchem die Karte zeitweise während der Durchführung einer
Transaktion mit einem Terminal gekoppelt ist, wobei die Transaktion
das Anwenden einer Mehrzahl von Veränderungsbefehlen durch das Terminal
auf die Karte umfasst, die jeder wenigstens einen Vorgang des Schreibens
einer entsprechenden durch den Befehl bestimmten Information in
den Kartenspeicher umfasst, wobei die so geschriebenen verschiedenen
Informationen gegenseitig voneinander abhängen.
-
Die
Erfindung ist auf die durch den Anspruch 1 angegebene Weise definiert.
-
Das
Grundprinzip der Erfindung besteht also darin, die Mehrzahl an durchzuführenden
Veränderungen
auf unteilbare Weise innerhalb eines selben Schrittes a) zusammenzufassen,
und, nach Durchführung
dieser Veränderungen,
diese Veränderungen
insgesamt durch die Karte zu validieren. Falls die Validierung wirksam
ist, wird beim nächsten
durch die Karte durchgeführten
Vorgang (im Verlauf derselben Transaktion oder im Verlauf einer
nachfolgenden Transaktion) deren zugänglicher Inhalt zwangsläufig die
durchgeführten
Veränderungen
widerspiegeln.
-
Umgekehrt
wird jegliche Unterbrechung des Kartenbetriebs, die im Verlauf des
Schritts a) stattfindet, die Gesamtheit der vorgenommenen Veränderungen
annullieren, und die Daten des nicht flüchtigen Speichers verbleiben
in ihrem dem Schritt a) vorhergehenden Zustand.
-
Bei
einer besonderen Ausführungsform schreibt
man im Bestätigungsfall
beim Schritt b) in den Kartenspeicher einen Beleg, der die ordentliche Durchführung bestätigt, und,
wenn die Karte später einen
Befehl empfängt,
der das Lesen und/oder die Veränderung
wenigstens einer der beim Schritt a) geschriebenen Informationen
oder des entsprechenden Werts impliziert, betrachtet die Karte vorab
den Zustand des Belegs, und, falls dieser nicht geschrieben wurde,
ignoriert oder annulliert die Karte die vorher beim Schritt a) durchgeführten vorläufigen Schreibvorgänge und
führt den
Befehl auf der Grundlage der vorherigen den Informationen entsprechenden
Werte durch. Wenn die Karte den Zustand des Belegs betrachtet hat,
kann die Karte dann, falls dieser geschrieben wurde, Kopiervorgänge der
vorläufigen beim
Schritt a) vorgenommenen Schreibvorgänge durchführen.
-
In
besonders vorteilhafter Weise ist die Karte in der Lage, gemäß zweier
Modi zu funktionieren, nämlich
einem Sitzungsmodus, bei welchem die Schreibvorgänge durch Durchführung der
Schritte a) und b) vorgenommen werden, und einem sitzungsfreien
Modus, bei welchem die Vornahme der Schreibvorgänge während der Gesamtheit der Schritt
a) und b) nicht bestätigt
wird.
-
Die
Eröffnung
einer Sitzung kann implizit sein, z. B. beim Reinitialisieren (Reset)
der Karte oder infolge eines Befehls mit doppelter Wirkung der Ausführung eines
vorbestimmten Vorgangs und der Interpretation als ein Befehl zur
Eröffnung
einer Sitzung.
-
Zum
Beispiel eröffnet
die Karte, wenn ein normalerweise zertifizierter Schreibvorgang
nicht von einem Zertifikat begleitet wird, automatisch eine Sitzung,
welche den Schreibvorgang in dieser Sitzung behandelt.
-
Auf
dieselbe Weise kann das Schließen
der Sitzung implizit sein, infolge eines Befehls mit doppelter Wirkung
der Durchführung
eines vorbestimmten Vorgangs und der Interpretation als Befehl zum Schließen der
Sitzung.
-
Zum
Beispiel schließt
ein Vorgang des Abbuchens der Geldbörse die Sitzung, was zudem
vermeidet, dass die Kommunikation des resultierenden Zertifikats
aufgeschoben werden muss, und es erlaubt, die Sitzungszertifikate
mit denjenigen der Geldbörsentransaktion
zu verschmelzen.
-
In
besonders vorteilhafter Weise umfasst das Verfahren eine Authentifizierungsfunktion,
die mit der Fertigstellungsfunktion des Schrittes b) kombiniert ist,
welche beim Schritt b) die Verwerfung erzwingt, falls die Authentifizierung
fehlschlägt.
-
Bei
einer ersten Umsetzungsform wird diese Authentifizierung durch die
Karte durchgeführt,
die das Terminal und/oder die zwischen dem Terminal und der Karte
ausgetauschten Daten authentifiziert, wobei die Karte ein durch
das Terminal erzeugtes und an die Karte übertragenes kryptographisches Zertifikat
prüft und
die Veränderungen
beim Schritt b) nur bestätigt,
falls dieses Zertifikat für
korrekt befunden wird.
-
Im
Falle eines Modus mit Sitzung kann man vorsehen, dass, wenn die
Karte vom Terminal Befehle zur Veränderung des Speicherinhalts,
umfassend die Überprüfung eines
kryptographischen Zertifikats, empfängt, diese Überprüfung durchgeführt wird,
falls der Befehl außerhalb
einer Sitzung empfangen wird, und nicht durchgeführt wird, falls der Befehl
während einer
Sitzung empfangen wird.
-
Mit
anderen Worten umfassen diejenigen der beim Schritt b) durch die
Karte b) ausgeführten
Befehle, die normalerweise (d.h., außerhalb der Sitzung) ein kryptographisches
Zertifikat verifizieren würden,
nicht mehr diese Verifikation, wenn sie im Rahmen einer Sitzung
ausgeführt
werden, wobei das "das
Terminal authentifizierende Sitzungszertifikat" eine äquivalente Funktion übernimmt.
-
Bei
einer zweiten Ausführungsform
erfolgt die Authentifizierung durch das Terminal, welches die Karte
und/oder die zwischen dem Terminal und der Karte ausgetauschten
Daten authentifiziert, wobei die Karte unter Bedingungen ein kryptographisches Zertifikat
erzeugt und an das Terminal übermittelt, wenn
und nur wenn die Veränderungen
beim Schritt b) bestätigt
wurden.
-
Im
Falle eines Modus mit Sitzung kann man vorsehen, dass, wenn die
Karte beim Schritt b) vom Terminal Befehle zur Veränderung
des Speicherinhalts, umfassend die Erzeugung eines kryptographischen
Zertifikats, empfängt,
diese Erzeugung er folgt, falls der Befehl außerhalb einer Sitzung empfangen wird,
und nicht erfolgt, falls der Befehl während einer Sitzung empfangen
wird.
-
Mit
anderen Worten umfassen diejenigen der durch die Karte beim Schritt
b) durchgeführten
Befehle, die normalerweise (d.h., außerhalb einer Sitzung) ein
kryptographisches Zertifikat erzeugen würden, nicht mehr diese Erzeugung,
wenn sie im Rahmen einer Sitzung durchgeführt werden, wobei das "das Terminal authentifizierende
Sitzungszertifikat" eine äquivalente
Funktion übernimmt.
-
Man
kann im Übrigen
vorsehen, dass, wenn die Karte vom Terminal Befehle zur Veränderung
des Speicherinhalts, umfassend die Erzeugung einer Mehrzahl von
kryptographischen Zertifikaten, empfängt, diese Zertifikate bei
diesem Schritt b) gespeichert werden, und dann gemeinsam an das
Terminal übertragen
werden, wenn und nur wenn die Veränderungen beim dem Schritt
b) bestätigt
wurden.
-
Mit
anderen Worten sieht man vor, die Kommunikation der normalerweise
durch die Befehle des Schrittes b) erzeugten kryptographischen Zertifikate durch
die Karte aufzuschieben. Insbesondere, falls ein Befehl zum zertifizierten
Schreiben ein bestimmtes Schreibzertifikat erzeugt, ist es wünschenswert, dass
dieses die Karte erst verlässt,
nachdem der Schreibvorgang unumkehrbar durchgeführt wurde.
-
Bei
einer besonderen Ausführungsform
umfassen wenigstens bestimmte der Befehle ein Unterdrückungsattribut,
und, falls die Karte einen solchen Befehl ausführt, wirken die durch diesen
Befehl vorgenommenen Veränderungen
unabhängig
vom Ergebnis des Schrittes b).
-
Mit
anderen Worten definiert das Attribut, ob der Befehl während der
Sitzung durchgeführt
wird (d.h., annulliert werden wird, falls die Sitzung nicht geschlossen
wird) oder außerhalb
der Sitzung (d.h., sofort wirksam, als ob er außerhalb der Sitzung durchgeführt würde, selbst
wenn er sich chronologisch innerhalb der Sitzung befindet).
-
In
besonders vorteilhafter Weise sieht das Verfahren zusätzlich nach
dem Schritt b) und im Falle der Bestätigung der Veränderungen
die folgende Schrittsequenz vor: d) Durchführung eines Vorgangs durch
das Terminal im Anschluss an die Bestätigung durch die Karte; e)
im Falle einer ordnungsgemäßen Durchführung des
Vorgangs durch das Terminal, Schreiben einer Abschlussinformation
in die Karte, die später über einen
Lesevorgang zugänglich
ist.
-
Ein
solcher "Abschluss" (Ratifikation) der
Sitzung zeigt der Karte an, dass das Terminal in der Tat im Anschluss
an die Durchführung
der Sitzung die Entscheidungen hat treffen können (z. B. das Öffnen eines
Tors im Falle einer Anwendung für
den Zugang zu einem öffentlichen
Verkehrsnetz).
-
Man
wird feststellen, dass dieser Abschluss durch die Karte gesteuert
wird, ohne dass ein zusätzlicher
Schreibvorgang erforderlich wäre
(wobei das Kopieren der vorläufigen
Schreibvorgänge
ein Vorgang ist, der auf jeden Fall früher oder später erfolgen muss). Außerdem wird
dieses Kopieren auf der Kartenseite nur durchgeführt, unter der Bedingung, dass
der Vorgang auf der Terminalseite ordentlich durchgeführt ist,
d.h., nur im Falle der Kohärenz
der Gesamtheit der Transaktion.
-
Wenn
die Gesamtheit der Operationen durch die Karte verwaltet wird, kann
man vorteilhafterweise vorsehen, dass der Schreibbefehl des Schritts
e) ein implizierter Befehl ist, wobei jeder durch die Karte nach
dem Schritt b) empfangener Befehl als Befehl des Schreibens einer
Abschlussinformation in die Karte interpretiert wird.
-
Andere
Merkmale und Vorteile gehen aus der folgenden Beschreibung zweier
Ausführungsbeispiele
der Erfindung hervor.
-
In
diesen Beispielen, wie übrigens
im restlichen Text, verweist das Wort "bezeichnen", das hier im Sinne von "einen unter mehreren
bestimmen" zu verstehen
ist, auf die Handlung, die darin besteht, eine besondere Information
unter den verschiedenen in der Karte enthaltenen Informationen zu
charakterisieren.
-
Der
Befehl kann selber auf eine besondere Information verweise; z. B.
bezeichnet der Befehl "einen
Betrag x von der Geldbörse
abbuchen" den Speicherplatz,
welcher den Wert der Information "Saldo der Geldbörse" enthält.
-
Diese
Bezeichnung kann explizit sein, wie z. B. in dem folgenden Beispiel
1, wo Schreibbefehle mit einer Adresse oder einer Sektorenkennung,
die durch einen Index i indexiert sind, vorgesehen sind.
-
Beispiel I
-
Es
wird vorgeschlagen, eine Karte zu verwirklichen, die 100 Werte von
jeweils 8 Byte speichert, und die folgenden Befehle unterstützt:
- – Lesen
eines 8 Bytewertes v, der durch seinen Index i von 1 bis 100 bezeichnet
ist.
- – Schreiben
eines 8 Bytewertes v, der durch seinen Index i von 1 bis 100 bezeichnet
ist.
- – Eröffnung einer
Sitzung.
- – Schließen einer
Sitzung.
-
Die
Karte muss bis zu drei Schreibvorgänge während einer gleichen Sitzung
erlauben. Per Konvention werden Großbuchstaben verwendet, um die Werte
im nicht flüchtigen
Speicher (z. B. EEPROM) zu bezeichnen, und Kleinbuchstaben, um die
Werte im flüchtigen
Speicher (RAM, dessen Inhalt beim Wegfall der Spannung verloren
geht) zu bezeichnen.
-
Ein
nicht flüchtiger
Speicherbereich wird der Hauptspeicherung der Kartendaten zugewiesen (endgültig festgeschrieben):
- • V[i],
i von 1 bis 100 : 100 × 8
Byte
-
Ein
anderer nicht flüchtiger
Speicherbereich wird dem Sitzungsmechanismus zugewiesen, und umfasst:
- • T[k],
k von 1 bis 3 : 3 × 8
Byte, welche die während
der Sitzung geschriebenen Werte enthalten (vorläufig geschrieben).
- • I[k],
k von 1 bis 3 : 3 × 1
Byte, welche die Indize der während
der Sitzung geschriebenen Werte enthalten.
- • C
: 1 Zählbyte,
das am Ende der Sitzung geschrieben wird.
-
C
codiert die Anzahl von Schreibvorgängen, die während der Sitzung durchgeführt wurden;
ein geeigneter Redundanzmechanismus (der z. B. das Komplement dieses
Wertes assoziiert) erlaubt es sicherzustellen, dass man den Fall
zu erkennen weiß, wo
der in diesem Zählbyte
gespeicherte Wert unsicher ist.
-
Der
Ablauf der Vorgänge
ist wie folgt.
-
Schritt
0: Zu einem Zeitpunkt zwischen dem Anlegen einer Spannung an die
Karte und dem ersten ausgeführten
Befehl wird C betrachtet. Falls dieses sich bei einem sicheren Wert
von 1 bis 3 befindet, dann kopiert man für k von 1 bis C den Wert T[k]
an den Index I[k] der Tabelle V[i]. Sodann wird C auf 0 gesetzt,
und eine interne Variable j auf –1 (um anzugeben, dass keine
Sitzung eröffnet
ist).
-
Schritt
1: Beim Lesen betrachtet man, ob j > 0; falls ja, vergleicht man den nachgefragten
Index i mit den Werten I[k] für
k von j bis 1 in abnehmender Weise. Bei Identität gibt man T[k] aus. In allen
anderen Fällen
gibt man V[i] aus.
-
Schritt
2: Beim Eröffnen
der Sitzung initialisiert man j = 0 (wobei festzuhalten ist, dass,
falls eine Sitzung eröffnet
ist, diese annulliert wird).
-
Schritt
3: Bei jedem Schreibvorgang wird, falls j = –1 (keine Sitzung eröffnet),
der kommunizierte Wert v an T[0] geschrieben, der kommunizierte
Index i an I[0], sodann schreibt man C = 1, und dann schreibt man
v an V[i], sodann schreibt man C = 0; falls 0 ≤ j < 3 (Schreibvorgang während einer
Sitzung), erhöht
man j um 1, man schreibt v an T[j], man schreibt i an I[j], falls
j = 3, lehnt man den Vorgang ab (Überschreitung der Begrenzung
der Schreibvorgänge
während
der Sitzung).
-
Schritt
4: Beim Schließen
der Sitzung, falls j > 0,
schreibt man j an C, und kopiert sodann für j von 1 bis C den Wert T[j]
an den Index I[j] der Tabelle V⌷. Sodann wird C auf 0 gesetzt,
und j auf –1.
-
Man
kann zeigen, dass man jederzeit die Versorgung der Karte unterbrechen
kann, und dass die gelesenen Werte stimmen, d.h., für jeden
Index i der letzte außerhalb
einer Sitzung oder in einer geschlossenen Sitzung (der Schreibvorgang
ist abgeschlossen oder die Sitzung ist zum Zeitpunkt geschlossen,
wo ein Wert, der nicht 0 ist, an C geschrieben wird) geschriebene
Wert.
-
Die
Kryptographie kommt hinzu, indem sie bestimmte Operationen verhindert,
falls ein der Karte geliefertes kryptographisches Zertifikat falsch
ist, und/oder indem sie die Karte nach bestimmten Vorgängen kryptographische
Zertifikate erzeugen lässt.
-
Die
verwendeten kryptographischen Zertifikate basieren auf einer Kryptographie
bekannten Typs. Zum Beispiel erhält
man das "die Karte
(respektiv das Terminal) authentifizierende Sitzungszertifikat", indem man auf der
Karten- und Terminalseite den Algorithmus Secure Hash Alogrithm
(SHA) auf durch die Karte (respektiv das Terminal) gelieferte Daten
und eine durch das Terminal (respektiv die Karte) gelieferte Zufallszahl
beim Eröffnen
der Sitzung anwendet; der resultierende Message Authenti cation Code
(MAC) wird durch die Karte (respektiv das Terminal) durch den Signaturalgorithmus
Digital Signature Algorithm (DSA) mit einem in der Karte (respektiv
im Terminal) enthaltenen Geheimschlüssel signiert; das Terminal
(respektiv die Karte) überprüft diese
Signatur mit einem öffentlichen
Schlüssel.
Ein symmetrischer Kryptographiealgorithmus wie beispielsweise Data
Encryption Standard (DES) kann auch zur Erzeugung des MAC und/oder
der Erarbeitung der Signaturen verwendet werden.
-
Gemäß einer
erfindungsgemäßen Option haben
beide Authentifizierungsrichtungen den Schritt der Erzeugung des
MAC gemein, und dieser Schritt deckt die Gesamtheit der Sitzungsdaten
ab. Und im Falle einer symmetrischen Kryptographie werden das die
Karte authentifizierende Zertifikat und das das Terminal authentifizierende
durch einen einzigen Schritt der Verschlüsselung des MAC erhalten, wobei die
jeweiligen Zertifikate der Karte und des Terminals sich durch einen
elementaren Vorgang wie beispielsweise die Extraktion bestimmter
vorbestimmter Bytes daraus ableiten lassen.
-
Beispiel II
-
In
diesem Beispiel sind die Daten des Speichers in Sektoren organisiert,
die jeder vier Felder umfassen:
- 1. Daten;
- 2. Kennung (Zugangsschlüssel,
der die Auswahl eines Sektors erlaubt);
- 3. Relevanz: Erlaubt die Bestimmung des relevanten Sektors,
falls zwei Sektoren dieselbe Kennung haben;
- 4. Kontrolle: Erlaubt die Überprüfung der
Integrität der
drei vorhergehenden Felder (z. B. eine Kontrolle vom Paritätstyp).
-
Ein
Sektor wird durch seine Kennung bezeichnet, ein Begriff, welcher
den Begriff Adresse ersetzt. Der Schreibvorgang eines Sektors hat
eine Kennung und dieser Ken nung zuzuordnende Daten als Parameter.
Der Lesevorgang eines Sektors hat eine Kennung als Parameter und
gibt die Daten aus, die dieser Kennung beim letzten mit dieser selben Kennung
durchgeführten
Schreibvorgang zugeordnet wurden (oder eine geeignete Angabe, falls
diese Kennung nie verwendet wurde). Mit anderen Worten verwirklicht
man einen Zugang vom assoziativen Typ anstatt eines indexierten
Zugangs.
-
Beim
Vorgang des Lesens eines Sektors sucht die Karte nach denjenigen
Sektoren, deren Kennung den gefragten Wert hat und die (auf der Grundlage
des Kontrollfeldes) integer sind. Falls mehrere Sektoren diesen
zwei Kriterien entsprechen, behält
sie einen auf der Grundlage des Relevanzfeldes.
-
Beim
Schreiben eines Sektors schreibt die Karte die gefragten Felder
Daten und Kennung in einen verfügbaren
Sektor, das Relevanzfeld so, dass dieser Sektor für den Lesevorgang
der relevanteste der integeren Sektoren sein wird, welche diese
Kennung aufweisen, und das Kontrollfeld in Übereinstimmung mit den drei
vorhergehenden Feldern (mit anderen Worten wird der Schreibvorgang
so gesteuert, dass der spätere
Lesevorgang ordentlich durchgeführt
werden kann).
-
Vorteilhafterweise
wird der Schreibvorgang durch das Löschen des Sektors fortgesetzt,
der durch das Schreiben des neuen Sektors nicht relevant geworden
ist, wodurch ein neuer verfügbarer
Sektor erzeugt wird.
-
Vorteilhafterweise
sieht man ein (komplementäres)
System vom garbage collection Typ vor, d.h., der Rückgewinnung
der nutzlosen Sektoren, sei es, dass sie nicht integer sind, oder
nicht relevant.
-
Vorteilhafterweise
sieht man ein System vor, welches die von dem Schreiben resultierende
Abnutzung verteilt, durch Vermeidung der Verwendung immer derselben
Sektoren, z. B. durch zufällige
Auswahl eines Sektors unter den verfügbaren Sektoren.
-
Eine
im Allgemeinen vorteilhafte Variante des Vorgangs der Sektorensuche
besteht darin, diesen Suchschritt zur Löschung der Sektoren zu nutzen,
von denen feststeht, dass sie nicht integer sind, und/oder derjenigen,
welche nicht die relevantesten sind, wodurch erneut freie Sektoren
erzeugt werden (dadurch wird während
dieses Lesevorgangs Zeit verloren, zum Vorteil der Geschwindigkeit
nachfolgender Lese- und Schreibvorgänge). Vorteilhafterweise wird
vor der Löschung
eines Sektors, der als integer aber nicht relevant bestimmt wurde,
erneut der relevante Sektor beschrieben, der möglicherweise unvollkommen geschrieben
wurde.
-
Die
Nutzgröße des Speichers
ist gleich der Anzahl an verfügbaren
Sektoren, minus einem Sektor, der im gelöschten Zustand verbleiben muss.
Alle Sektoren (einschließlich
des gelöschten)
sind dynamisch im Speicher verteilt.
-
Falls
die Daten als Dateien strukturiert werden müssen, z. B. gemäß der Norm
ISO/IEC 7816-4, unterteilt sich die Sektorenkennung in zwei Unterfelder,
einer Dateikennung und einer Kennung des Sektors innerhalb der Datei.
-
Es
wird im Folgenden eine (nicht beschränkende) Umsetzung der Lese-/Schreibvorgänge wiedergegeben,
welche diese besondere Strukturierung in Sektoren verwendet:
- – Das
Kontrollfeld enthält,
in Binärcode,
die Anzahl an Null-Bits in den drei anderen Feldern; man kann zeigen,
dass, falls ein Problem wie z. B. ein unterbrochener Schreibvorgang
oder Löschvorgang
eine beliebige Anzahl Bits des Sektors alle in dieselbe Richtung
verändert,
die Überprüfung des
Wertes des Kontrollfeldes immer die Aufdeckung des Problems erlaubt.
- – Das
Relevanzfeld ist eine ganze Zahl von 0 bis 3, über 2 Bits codiert.
- – Der
Lesevorgang durchquert sequentiell alle Sektoren bis ein erster
Sektor gefunden ist, welcher die gesuchte Kennung aufweist und integer ist.
Falls diese Suche keinen Sektor findet, beendet man den Vorgang
mit einem Bericht "Sektor nicht
gefunden". Falls
man einen solchen ersten Sektor findet, speichert man dessen Position, dessen
Daten und dessen Relevanz p. Die Suche fährt fort. Falls man einen zweiten
Sektor entdeckt, welcher die gesuchte Kennung aufweist und integer
ist, testet man, ob dessen Relevanz q der Rest der ganzzahligen
Division von p + 1 durch 3 ist; falls ja, schreibt man erneut den
zweiten Sektor, löscht
man den ersten, und gibt man die Daten des zweiten aus; ansonsten
schreibt man erneut den ersten Sektor, löscht man den zweiten, und gibt
man die Daten des ersten aus. Fall ein zweiter Sektor nicht gefunden
wird, und falls die Relevanz des ersten Sektors p = 3 ist, löscht man
diesen Sektor und liefert man den Bericht "Sektor nicht gefunden"; in den anderen
Fällen
gibt man die Daten des ersten aufgefundenen Sektors aus.
- – Der
Schreibvorgang beginnt wie der obige Lesevorgang. Falls man den
Sektor gefunden hat, welchen das Leseverfahren für die gelieferte Kennung ausgeben
würde,
speichert man die Position dieses Sektors und dessen Relevanz p
(die 0,1 oder 2 beträgt);
falls man ihn nicht gefunden hat, wählt man einen freien Sektor
aus (durch das nachfolgende Verfahren), und man schreibt in diesen
Sektor die Felder Kennung, Daten, Relevanz p = 3 und Kontrolle,
und man speichert die Position und die Relevanz dieses Sektors.
In beiden Fällen
fährt man
fort, indem man einen freien Sektor auswählt (durch das folgende Verfahren).
Man schreibt in diesen Sektor die Felder Kennung, Daten, Relevanz
q (berechnet als der Rest der ganzzahligen Division von p + 1 durch
3) und Kontrolle. Sodann löscht
man den gespeicherten Sektor.
- – für die Suche
eines freien Sektors initialisiert man die Anzahl n an aufgefundenen
freien Sektoren auf Null. Man betrachtet die Sektoren sequentiell. Jeder
Sektor wird, falls er nicht leer und nicht integer ist, gelöscht, und
er wird frei (wodurch zur garbage collection beigetragen wird, die
weiter oben erwähnt
ist); falls er integer ist und dessen Relevanz p = 3 ist, löscht man
ihn (genauso); falls er integer ist und falls seine Relevanz nicht
p = 3 ist, sucht man in der noch nicht durchquerten Zone einen anderen
integeren Sektor mit selber Kennung, und falls man einen findet,
löscht
man denjenigen, der nicht relevant ist, indem man wie beim Lesen
vorgeht; falls nach diesem Vorgang der Sektor leer ist, inkrementiert
man die Anzahl n an aufgefundenen freien Sektoren, und man führt die
zufällige
Ziehung einer ganzen Zahl von 0 bis n – 1 durch; falls diese ganze
Zahl 0 ist, speichert man die Position des leeren Sektors. Sobald
alle Sektoren durchschritten wurden, sind alle nicht leeren Sektoren
integer, gibt es keine zwei Sektoren mit selber Kennung, kennt man
die Anzahl n an leeren Sektoren, und hat man einen von diesen gespeichert,
der zufällig
auf gleich wahrscheinliche Weise ausgewählt wurde. Falls kein freier
Sektor gefunden wird, wird der Schreibvorgang unterbrochen.
-
Es
wird nun die Art und Weise angegeben, mit welcher die Karte Sitzungen
unteilbarer Änderungen
mit einer solchen besonderen Strukturierung in Sektoren steuern
kann.
-
Zur
Speicherung der unteilbaren Änderungen
verfügt
die Karte im nicht flüchtigen
Speicher über
N gelöschte
Sektoren (N entspricht der Anzahl an unteilbaren Änderungen,
die man während
einer selben Sitzung durchführen
kann). Weiterhin verwaltet sie einen Bereich des nicht flüchtigen
Speichers (außerhalb
der Sektoren), der für
die Sitzungssteuerung vorgesehen ist und "Sitzungsbeschreiber" genannt wird.
-
Dieses
Umsetzungsbeispiel umfasst keine sitzungseigene Authentifizierung.
-
Man
definiert einen Sitzungsbeschreiber, der aus drei Feldern besteht:
- – Liste
der Referenzen der unteilbaren Sektoren (LR-SA).
- – Kontrollwert
der Erzeugung der Liste der Referenzen der unteilbaren Sektoren
(VCC).
- – Kontrollwert
der Berücksichtigung
der Liste der Referenzen der unteilbaren Sektoren (VCPC), der es
erlaubt zu wissen, ob man eine Sitzung geschlossen hat oder nicht.
-
Schritt
0: Initialisierung: vor dem ersten Zugriff auf die Daten seit der
letzten Unterbrechung des Kartenbetriebs, z. B. beim Reset (wieder
auf Null setzen), muss die Karte dafür sorgen, dass der Sitzungsbeschreiber
gelöscht
wird. Es gibt mehrere Fälle
zu betrachten, je nach dem Zustand des Sitzungsbeschreibers:
- – er
ist vollständig
gelöscht:
die Karte lässt
ihn in diesem Zustand.
- – er
ist nicht vollständig
gelöscht,
und die VCPC ist korrekt: die Karte sucht und löscht (falls erforderlich) alle
Sektoren, die durch die geschriebenen obsolet geworden sind (innerhalb
derjenigen, die in der Liste aufgeführt sind), und löscht dann den
Sitzungsbeschreiber.
- – er
ist nicht vollständig
gelöscht,
der VCPC ist gelöscht
oder falsch, und der VCC ist korrekt: die Karte löscht die
in der LRSA angegebenen Sektoren, und löscht sodann den Sitzungsbeschreiber.
- – er
ist nicht vollständig
gelöscht,
der VCPC ist gelöscht
oder falsch, und der VCC ist gelöscht
oder falsch: die Karte löscht
den Sitzungsbeschreiber.
-
Schritt
1: Eröffnung
einer Sitzung: die Karte sucht nach N gelöschten Sektoren, und notiert
dann die Liste deren Referenz und deren VCC im Sitzungsbeschreiber
(der als gelöscht
angenommen wird).
-
Schritt
2: im Verlauf der Sitzung: die Karte empfängt Befehle. Wenn einer von
diesen eine oder mehrere unterteilbare Änderungen auslöst, sind
die zum Notieren dieser Änderungen
verwendeten Sektoren diejenigen, die in der LRSA notiert sind, bis
zur Höhe
von N veränderten
Sektoren.
-
Schritt
3: Schließung
der Sitzung: Zum Schließen
der Sitzung schreibt die Karte den VCPC, der sicherstellt, dass
die LRSA und deren VCC berücksichtigt
wurden. Anschließend
sucht und löscht sie
alle Sektoren, die durch die geschriebenen obsolet geworden sind
(unter denen in der Liste aufgeführten).
Schließlich
löscht
sie den Sitzungsbeschreiber.
-
Falls
die Karte außerdem
den Abschluss (Ratifikation) steuert, umfasst die Steuerung der
Sitzungen die folgenden Änderungen.
-
Schritt
0: Initialisierung: in dem Fall, wo der Sitzungsbeschreiber nicht
vollständig
gelöscht
ist und der VCPC korrekt ist, sucht und löscht (falls erforderlich) die
Karte alle Sektoren, die durch die geschriebenen obsolet geworden
sind (unter den in der Liste aufgeführten), jedoch löscht sie
nicht den Sitzungsbeschreiber.
-
Schritt
1: Eröffnung
einer Sitzung: die Karte notiert im flüchtigen Speicher, dass eine
Sitzung eröffnet
ist. Falls der Sitzungsbeschreiber nicht leer ist, zeigt die Karte
an, dass die vorhergehende Sitzung nicht abgeschlossen wurde (ratifiziert
wurde), und kann sogar durch Analyse der LRSA angeben, welche die
nicht abgeschlossenen (nicht ratifizierten) Daten sind. Auf jeden
Fall verändert
sie nicht den Sitzungsbeschreiber.
-
Schritt
2: Im Verlauf der Sitzung: Beim ersten Befehl mit unteilbaren Änderungen
löscht
die Karte den Sitzungsbeschreiber, falls dies erforderlich ist, sucht
nach N gelöschten
Sektoren und schreibt dann die LRSA und deren VCC.
-
Schritt
3: Schließen
der Sitzung: Die Karte notiert im flüchtigen Speicher, dass keine
Sitzung eröffnet
ist. In jedem Fall löscht
sie nicht den Sitzungsbeschreiber.