Wie wurde der Chiffretext im Kartenleser mit DUKPT-Verschlüsselung erzeugt?

8

Für

%Vor%

Der erzeugte Schlüsseltext war unter

%Vor%

Ich fand hier . Ich weiß, dass dieser Chiffre-Text auf BDK und KSN basiert, aber wie dieser Chiffretext mit 128 Längen generiert wurde? Welche Schritte sind dabei oder welcher Algorithmus wird verwendet? Könnte jemand in einfachen Schritten erklären. Ich fand es schwierig, die Dokumente zu verstehen, die ich beim Googlen bekommen habe.

    
Dolo 28.06.2013, 10:25
quelle

4 Antworten

14

In Bezug auf DUKPT gibt es Erklärungen zu Wiki . Wenn Ihnen das nicht genügt, hier eine kurze Erklärung.

Zitieren Ссылка

  

Was ist DUKPT?

     

Abgeleiteter eindeutiger Schlüssel pro Transaktion (DUKPT) ist ein Schlüsselverwaltungsschema. Es verwendet einmalige Verschlüsselungsschlüssel, die von einem geheimen Hauptschlüssel abgeleitet sind, der von der Einheit (oder dem Gerät), die verschlüsselt, und der Einheit (oder dem Gerät), die die Daten entschlüsselt, gemeinsam genutzt wird.   Warum DUKPT?   Jeder Verschlüsselungsalgorithmus ist nur so sicher wie seine Schlüssel. Der stärkste Algorithmus ist nutzlos, wenn die Schlüssel, die zum Verschlüsseln der Daten mit dem Algorithmus verwendet werden, nicht sicher sind. Das ist, als würde man die Tür mit dem größten und stärksten Schloss abschließen, aber wenn man den Schlüssel unter der Fußmatte versteckt, ist das Schloss selbst nutzlos. Wenn wir über Verschlüsselung sprechen, müssen wir auch daran denken, dass die Daten am anderen Ende entschlüsselt werden müssen.   In der Regel ist die schwächste Verbindung in einem Verschlüsselungsschema die gemeinsame Nutzung der Schlüssel zwischen den verschlüsselnden und entschlüsselnden Parteien. DUKPT ist ein Versuch, sicherzustellen, dass beide Parteien Daten verschlüsseln und entschlüsseln können, ohne die Verschlüsselungs- / Entschlüsselungsschlüssel herumreichen zu müssen.   Das von VISA veröffentlichte Dokument zu kryptografischen Best Practices empfiehlt außerdem die Verwendung von DUKPT für die PCI-DSS-Konformität.

     

Wie DUKPT funktioniert

     

DUKPT verwendet einmalige Schlüssel, die für jede Transaktion generiert und dann verworfen werden. Der Vorteil besteht darin, dass, wenn einer dieser Schlüssel kompromittiert wird, nur eine Transaktion kompromittiert wird. Bei DUKPT teilen sich der ursprüngliche (z. B. ein Pin Entry Device oder PED) und der empfangende (Prozessor, Gateway, etc.) Parteien einen Schlüssel. Dieser Schlüssel wird nicht zur Verschlüsselung verwendet. Stattdessen wird ein weiterer einmaliger Schlüssel, der von diesem Hauptschlüssel abgeleitet ist, zum Verschlüsseln und Entschlüsseln der Daten verwendet. Es ist wichtig zu beachten, dass der Hauptschlüssel nicht aus dem abgeleiteten Einmalschlüssel wiederhergestellt werden kann.   Um Daten zu entschlüsseln, muss das empfangende Ende wissen, welcher Hauptschlüssel verwendet wurde, um den Einmalschlüssel zu erzeugen. Dies bedeutet, dass das empfangende Ende für jedes Gerät einen Hauptschlüssel speichern und verfolgen muss. Dies kann eine Menge Arbeit für jemanden sein, der viele Geräte unterstützt. Ein besserer Weg ist erforderlich, um damit fertig zu werden.   So funktioniert es in der Praxis: Der Empfänger hat einen Hauptschlüssel, den sogenannten Base Derivation Key (BDK). Der BDK soll geheim sein und niemals mit jemandem geteilt werden. Dieser Schlüssel wird verwendet, um Schlüssel zu generieren, die als Initial Pin Encryption Key (IPEK) bezeichnet werden. Daraus wird eine Schlüsselgruppe namens Future Keys generiert und die IPEK verworfen. Jeder der Zukunftsschlüssel ist vom Gerätehersteller in ein PED eingebettet, mit dem diese gemeinsam genutzt werden. Dieser zusätzliche Ableitungsschritt bedeutet, dass der Empfänger nicht jeden einzelnen Schlüssel, der in die PEDs gelangt, verfolgen muss. Sie können bei Bedarf neu generiert werden.

     

     

Der Empfänger teilt die Future-Schlüssel mit dem PED-Hersteller, der einen Schlüssel in jede PED einbettet. Wenn einer dieser Schlüssel kompromittiert ist, kann das PED mit einem neuen Future-Schlüssel, der von dem BDK abgeleitet ist, erneut verschlüsselt werden, da der BDK immer noch sicher ist.

     

Verschlüsselung und Entschlüsselung

     

Wenn Daten vom PED an den Empfänger gesendet werden müssen, wird der Future-Schlüssel innerhalb dieses Geräts verwendet, um einen einmaligen Schlüssel zu generieren. Dieser Schlüssel wird dann mit einem Verschlüsselungsalgorithmus zum Verschlüsseln der Daten verwendet. Diese Daten werden dann zusammen mit der Schlüsselnummer (Key Serial Number, KSN), die aus der Geräte-ID und dem Gerätetransaktionszähler besteht, an den Empfänger gesendet.   

     

Basierend auf dem KSN erzeugt der Empfänger dann die IPEK und erzeugt daraus den Zukunftsschlüssel, der vom Gerät verwendet wurde, und dann den tatsächlichen Schlüssel, der zum Verschlüsseln der Daten verwendet wurde. Mit diesem Schlüssel kann der Empfänger die Daten entschlüsseln.

Source

    
Shankar Damodaran 07.07.2013, 17:16
quelle
5

Lassen Sie mich zunächst den vollständigen Quellcode zitieren, den Sie verlinkt haben und von dem Sie nur drei Zeilen angegeben haben ...

%Vor%

Nun fragst du, wie der "verschlüsselte Text" erstellt wurde ...

Zunächst wissen wir, dass es auf "Klartext" basiert, der im Code verwendet wird, um zu überprüfen, ob die Entschlüsselung funktioniert.

Der Klartext ist 0-gepolstert - was der Verschlüsselung entspricht, die getestet wird, indem die Entschlüsselung mit diesem DecrypterTest-Testfall überprüft wird.

Schauen wir uns den Codierungscode dann an ...

Ich habe den entsprechenden Verschlüsselungscode unter Ссылка gefunden.

Da DecrypterTEst "cbc" verwendet, wird es offensichtlich, dass die Verschlüsselung verwendet:

%Vor%

Ein bisschen mehr nach diesem Verschlüsselungscode löst das Folgende unsere Suche nach einer Antwort:

%Vor%

Was zeigt, dass wir tatsächlich das Ergebnis einer DES-Verschlüsselung betrachten.

Nun hat DES eine Blockgröße von 64 Bit. Das ist (64/8 =) 8 Bytes binär, oder - wie der "verschlüsselte Text" ist eine hexadezimale Textdarstellung der Bytes - 16 Zeichen hex.

Der "Chiffretext" ist 128 Hex-Zeichen lang, was bedeutet, dass er 8 DES-Blöcke mit je 64 Bits verschlüsselter Information enthält (128 Hex-Zeichen / 16 Hex-Zeichen =).

Alles in einer einfachen Antwort zusammenfassen:

Wenn Sie "ciphertext" betrachten, betrachten Sie (8 Blöcke) DES-verschlüsselte Daten, die mit einer für Menschen lesbaren, hexadezimalen Schreibweise (2 Hexadezimalzeichen = 1 Byte) dargestellt werden anstelle der ursprünglichen binären Bytes, die DES-Verschlüsselung erzeugen würde.

Was die Schritte in "Neuerstellung" des Chiffretextes betrifft, neige ich dazu, Ihnen zu sagen, dass Sie einfach die relevanten Teile des Ruby Projekts verwenden sollen, auf dem Sie Ihre Frage begründet haben . Sehen Sie sich einfach den Quellcode an. Die Datei in " Ссылка " erklärt ziemlich genau Alles und ich bin mir ziemlich sicher, dass alle benötigten Funktionen im GitHub-Repository des Projekts zu finden sind. Alternativ können Sie versuchen, es selbst neu zu erstellen - mit der bevorzugten Programmiersprache Ihrer Wahl. Sie müssen nur zwei Dinge handhaben: DES Verschlüsselung / Entschlüsselung und bin-zu-hex / hex-to-bin Übersetzung.

    
e-sushi 07.07.2013 17:11
quelle
2

Da dies eines der ersten Themen ist, die diesbezüglich auftauchen, dachte ich mir, ich würde erzählen, wie ich den Chiffretext kodieren konnte. Dies ist das erste Mal, dass ich mit Ruby gearbeitet habe und es war speziell mit DUKPT zu arbeiten

Zuerst musste ich die Methode ipek und pek (wie in der Entschlüsselung) bekommen. Entpacke dann den Klartext String. Konvertiere die entpackte Zeichenkette in ein 72-Byte-Array (verzeih mir, wenn meine Terminologie falsch ist).

Ich bemerkte, dass er im Beispiel des Dukpt Gem Autors die folgende Klartextzeichenfolge verwendete

  

"% B5452300551227189 ^ HOGAN / PAUL ^ 08043210000000725000000? \ x00 \ x00 \ x00 \ x00"

Ich finde, dass diese Zeichenfolge falsch ist, da hinter dem Namen (AFAIK) kein Leerzeichen stehen sollte. Also sollte es

sein
  

"% B5452300551227189 ^ HOGAN / PAUL ^ 08043210000000725000000? \ x00 \ x00 \ x00 \ x00"

Alles in allem ist dies die Lösung, die ich am Ende habe, die einen String verschlüsseln und dann mit DUKPT

entschlüsseln kann %Vor%

Ende

  

boomedukpt FFFF9876543210E00008 "% B5452300551227189 ^ HOGAN / PAUL ^ 08043210000000725000000?"

(mein Rubinstein, der KSN und die Klartextkette)

  

2542353435323330303535313232373138395e484f47414e2f5041554c5e30383034333231303030303030303732353030303030303f000000000000000000000000000000000000

(mein Ruby-Juwel macht eine puts auf die entpackte Zeichenkette nach dem Aufruf von hex_string_from_unpacked)

  

C25C1D1197D31CAA87285D59A892047426D9182EC11353C0B82D407291CED53DA14FB107DC0AAB9974DB6E5943735BFFE7D72062708FB389E65A38C444432A6421B7F7EDD559AF11

(mein Ruby-Juwel macht eine puts auf die verschlüsselte Zeichenfolge)

  

% B5452300551227189 ^ HOGAN / PAUL ^ 08043210000000725000000?

(mein Rubin-Juwel macht eine Puts nach dem Aufruf entschlüsseln auf dem Dukpt Juwel)

    
ainesophaur 19.06.2015 09:30
quelle
0

Schau dir das an: Ссылка , ich war in einer ähnlichen Situation, in der ich mich gefragt habe, wie dudpt auf dem Terminal implementieren soll Das Terminal hat seine eigenen Funktionsaufrufe, die INIT und KSN zum Erstellen des ersten Schlüssels verwenden. Mein einziges Problem bestand darin, sicherzustellen, dass die INIT-Taste auf dem Terminal genauso erzeugt wurde wie im oben erwähnten Repo-Code Einfach genug mit ossl Verschlüsselungsbibliothek für 3des mit ebc und die entsprechenden Masken anwenden.

    
user5710183 23.12.2015 07:46
quelle

Tags und Links