Technischer Beitrag
Aufbau eines MAC-Befehls
Viele Kunden von ID TECH interessieren sich für Point-to-Point-Verschlüsselung (P2PE), und im Rahmen ihrer Bemühungen, die strengen P2PE-Anforderungen des PCI zu erfüllen, ziehen Kunden häufig SRED (Secure Reading and Exchange of Data)-Zahlungsgeräte in Betracht. Solche Geräte verschlüsseln Daten nicht nur am Erfassungspunkt (wie es alle Geräte von ID TECH können), sondern verfügen darüber hinaus über Manipulationsschutz, automatische Datenlöschung (Zeroization) im Falle einer Manipulation sowie weitere spezialisierte Sicherheitsfunktionen.
Zu den herausragendsten dieser „weiteren spezialisierten Sicherheitsfunktionen" zählt die sogenannte MAC-Authentifizierung von Befehlen.
In der Kryptografie ist ein Message Authentication Code (MAC) ein kurzer Code, der dem Empfänger einer Nachricht ermöglicht, deren Authentizität zu überprüfen – also zu bestätigen, dass die Nachricht von einem vertrauenswürdigen Absender stammt. Der MAC-Wert schützt sowohl die Datenintegrität als auch die Authentizität einer Nachricht, indem er diese mit einem gemeinsamen Geheimnis verknüpft, das sowohl Sender als auch Empfänger bekannt ist. Die Nachricht selbst wird im Klartext übertragen, jedoch wird zusätzlich die Kombination aus Nachricht und MAC – der das verschlüsselte Geheimnis enthält – mitgesendet. Jeder, der das Geheimnis kennt, kann feststellen, ob die Nachricht (einschließlich des MAC-Anteils) tatsächlich von jemandem stammt, der Zugriff auf dasselbe Geheimnis hat.
In den SRED-basierten Kartenlesern von ID TECH sind bestimmte sicherheitsrelevante Befehle MAC-geschützt. Das bedeutet, das Gerät führt einen Befehl nur dann aus, wenn dieser mit einem MAC-Hash übermittelt wird, der mithilfe eines im Gerät gespeicherten Schlüssels verifiziert werden kann. Der Absender des Befehls muss den MAC-Hash mit demselben Schlüssel erstellen, den das Gerät zur Validierung verwendet.
Ein Beispiel kann dies verdeutlichen.
Angenommen, Sie möchten Datum und Uhrzeit an einem ID TECH Augusta S Kartenleser einstellen, bei dem es sich um ein SRED-Gerät handelt. Der Befehl „Datum und Uhrzeit einstellen" gilt als sicherheitsrelevant, da unbefugten Personen nicht erlaubt sein sollte, Transaktionen rückzudatieren oder auf andere Weise zu manipulieren. (Weitere „sicherheitsrelevante" Befehle sind beispielsweise Befehle, die Karten zu einer Whitelist hinzufügen oder daraus entfernen, oder die die Zertifikatsperrliste des Geräts ändern.)
Normalerweise würden Sie Datum und Uhrzeit einer Augusta ohne SRED über den Firmware-Befehl 78 53 01 50 einstellen, gefolgt von der Payload-Länge (0x08), dann der Datum-/Uhrzeit-Länge (0x06), dann den sechs Datum-/Uhrzeit-Bytes im Format JJ MM TT HH MM SS, gefolgt von der „MAC-Länge", die bei einem Gerät ohne SRED gleich null ist. Bei Augusta S gilt die gleiche Formel, mit dem Unterschied, dass die Payload-Länge 0x26 und die „MAC-Länge" 0x1E beträgt, da am Ende 30 zusätzliche Bytes als „MAC-Payload" angehängt werden.
Selbstverständlich muss der gesamte Befehl bei Augusta im NGA-Protokoll von ID TECH formatiert werden. Das bedeutet, dass STX (0x02) und zwei Little-Endian-Längenbytes an den Anfang der Befehlsstruktur gestellt werden, während LRC, Prüfsumme und ETX (0x03) an das Ende angehängt werden. Der fertige Befehl mit MAC sieht in seiner Gesamtheit wie folgt aus (Befehlsbytes in Gelb):
02 2B 00 78 53 01 50 26 06 17 11 10 09 15 00 1E 10 00 4E C7 DF CF 04 D3 3C C6 EC 6F 50 92 00 86 A1 DD 0A 00 62 99 49 00 00 00 00 00 00 02 EB F9 03
Schauen wir uns die Struktur Abschnitt für Abschnitt an:
02 ist STX.
2B 00 ist die (Little-Endian-)Länge der gesamten Struktur, ohne den abschließenden LRC-/Prüfsummen-/ETX-Trailer.
78 53 01 50 ist der Firmware-Befehl zum Einstellen von Datum und Uhrzeit.
26 (hex) bedeutet, dass 38 Bytes Payload folgen.
06 bedeutet, dass Datum und Uhrzeit aus 6 Bytes bestehen, nämlich:
17 11 10 09 15 00 — 10. November 2017, 09:15:00 Uhr.
1E bedeutet, dass 30 Bytes MAC-Nutzdaten folgen.
10 00 ist ein Little-Endian-Längenwert von 16 (da alle ID TECH MAC-Hashes 16 Bytes lang sind).
4E C7 DF CF 04 D3 3C C6 EC 6F 50 92 00 86 A1 DD ist der 16-Byte-MAC-Hash, auch „HMAC" genannt.
0A 00 ist ein Little-Endian-Längenwert von 10, für die nachfolgende KSN.
62 99 49 00 00 00 00 00 00 02 ist die MAC-KSN.
EB ist der LRC-Wert (Longitudinal Redundancy Check).
F9 ist die 8-Bit-Prüfsumme über alles von 78 bis zum letzten KSN-Byte (02).
03 ist ETX (End of Transmission).
Die Konstruktion dieses Befehls ist grundsätzlich nicht schwierig. Die erklärungsbedürftigen Bestandteile sind der KSN und der HMAC (der Hash selbst).
MAC KSN
Der MAC KSN (Key Serial Number) muss zum Zeitpunkt des Bedarfs direkt vom Gerät abgefragt werden. Wer mit ANSI X9.24-1 (dem Standard für abgeleitete, transaktionsindividuelle Schlüssel – Derived Unique Key Per Transaction)vertraut ist, weiß, dass der KSN ein 10-Byte-Wert ist, bei dem die unteren 21 Bits einen Zähler bilden, der nach jeder Verwendung inkrementiert wird. Was dabei leicht übersehen wird: Enthält ein Gerät mehrere DUKPT-Schlüssel – etwa für Daten, MAC und PIN –, verfügt jeder über einen eigenen dedizierten KSN, der unabhängig von den anderen hochgezählt wird. Der KSN ist jedoch ein öffentlicher Wert und kann in ID TECH's Augusta jederzeit über den vollständig formatierten Befehl 02090078463e040005010000000603 abgefragt werden.
Der KSN ist von entscheidender Bedeutung, da er in die Berechnung des MAC-Schlüssels einfließt, der pro Verwendung einmalig ist (und damit nicht für Replay-Angriffe anfällig). Weitere Informationen zu KSNs und zur DUKPT-Schlüsselableitung finden Sie in meinem früheren zweiteiligen Beitrag zu diesem Thema.
HMAC-ABLEITUNG
Jetzt wird es technisch.
HMAC (siehe RFC 2104) ist eine branchenweit anerkannte Methode zur Erstellung von MAC-Hashes unter Verwendung von:
- — einem einmaligen 128-Bit-Schlüssel
- — einer beliebigen Nachrichtennutzlast
- — SHA-256-Hashing
Der betreffende Schlüssel wird dynamisch mithilfe des MAC-KSN und des IPEK des Geräts (der seinerseits aus einem BDK abgeleitet wird) gemäß den Standard-DUKPT-Regeln abgeleitet. Diese Regeln schreiben eine bestimmte Methode zur Ableitung eines MAC-Schlüssels vor (im Unterschied zu einem Datenschlüssel oder PIN-Schlüssel). Alles wird beschrieben in meinem früheren zweiteiligen Beitrag
Der gefürchtete HMAC-Hash wird nach folgender, auf den ersten Blick beängstigend wirkender Formel berechnet:
H( (K' ⊕ opad) ‖ H( (K' ⊕ ipad) ‖ m) )
Lassen Sie sich davon nicht abschrecken. Es ist tatsächlich gut nachvollziehbar. Der Wert K ist der 128-Bit-Schlüssel. K' (k-prime) bezeichnet denselben Schlüssel, mit Nullen auf eine Gesamtlänge von 64 Bytes aufgefüllt.
Die ipad (Inner Pad) ist lediglich der konstante Wert 36363636… wiederholt bis zu einer Länge von 64 Bytes.
K' ⊕ ipad bedeutet, den mit Nullen aufgefüllten Schlüssel mit dem ipad-Wert mittels Exklusiv-ODER (auch XOR genannt) zu verknüpfen – einer bitweisen arithmetischen Operation, die bei Informatik-Enthusiasten sehr beliebt ist.
K' ⊕ ipad) ‖ m bedeutet, die Nachricht (m) an den oben erhaltenen Wert anzuhängen. Die Bytes werden einfach am Ende hinzugefügt. (Die Länge wird nun größer als 64 Bytes sein – das ist kein Problem.)
H( (K' ⊕ ipad) ‖ m) bedeutet, die Hash-Funktion (in diesem Fall SHA-256) auf den gesamten Wert in den Klammern anzuwenden.
Sobald dieser Schritt abgeschlossen ist, hängen Sie das Ergebnis an K' ⊕ opadan, wobei opad (der Outer Pad) eine Konstante ist, die aus 5C5C5C5C… wiederholt bis zu einer Länge von 64 Bytes besteht. Anschließend wird der gesamte Wert erneut gehasht.
Falls Sie sich fragen: Die ipad- und opad-Werte wurden von den ursprünglichen Entwicklern dieses Algorithmus willkürlich gewählt, jedoch so, dass der Hamming-Abstand (also die bitweisen Unterschiede) zwischen der vorderen und hinteren Hälfte des Hashes maximiert wird. Der Hash wird in zwei Hälften im verschachtelten Verfahren berechnet, um verschiedene Arten von Spoofing zu verhindern.
Um Ihnen die Erstellung von HMAC-Werten zu erleichtern, hat ID TECH ein HTML-Formular online bereitgestellt hier, in dem Sie KSN- und BDK-Werte (Root-Key) eingeben, Ihren MAC-Schlüssel ableiten und mithilfe von HMAC einen 32-Byte-MAC-Hash (über SHA-256) erstellen können. Probieren Sie unbedingt die Option „Generate HMAC (with verbose output)" aus dem Dropdown-Menü oben im Formular aus. Sie erhalten eine sehr übersichtliche, ausführliche Ausgabe, die jeden Bestandteil des HMAC-Puzzles klar und verständlich erläutert.
Wenn Sie unser Online-Tool verwenden, um einen MAC-Schlüssel mit einem KSN von 62 99 49 00 00 00 00 00 00 02 und einem Root-Key (BDK) von 0123456789ABCDEFFEDCBA9876543210 – dem standardisierten ANSI-Testschlüssel – zu generieren, sollte Ihr MAC-Schlüssel den Wert 3E4A480ACE8B239B9539E6053EAB03D9 haben. Wenden Sie den HMAC-Algorithmus auf eine Nutzlast von 78 53 01 50 26 06 17 11 10 09 15 00 1E 10 00 mit diesem Schlüssel an, erhalten Sie einen 32-Byte-HMAC-Hash, dessen erste 16 Bytes den Wert 4EC7DFCF04D33CC6EC6F50920086A1DD ergeben. (ID TECH verwendet ausschließlich die ersten 16 Bytes.) Dieser „Fingerabdruck" wird dem Set-Date-and-Time-Befehl hinzugefügt. Das Kartenlesegerät analysiert die Klartextnutzlast und nutzt seinen eigenen KSN sowie den internen Schlüsselableitungscode, um denselben HMAC-Wert zu berechnen, den Sie in Ihrem Befehl angegeben haben. Damit wird bestätigt, dass der Befehl von einer Quelle stammen muss, die den geheimen BDK (0123456789ABCDEFFEDCBA9876543210) kennt – also von einer vertrauenswürdigen Quelle.
Haben Sie Fragen zu DUKPT, HMAC, SRED oder P2PE? Kontaktieren Sie unsere Experten – wir helfen Ihnen gerne weiter:
