2017-03-24 2 views
-1

Ich brauche Ihre Hilfe, um die PIN einer Smartcard zu überprüfen. Ich verwende Python und pyscard. Ich habe verstanden, dass ich einen APDU Befehl verwenden muss und dass ich es mit ScardTransmit() senden muss, aber ich kann nicht finden welche APDU zu verwenden. Zum Beispiel:Wie kann die PIN einer Smartcard mit Python überprüft werden?

SCardTransmit(hcard,dwActiveProtocol, 
       [0x00, 0x20, 0x00, 0x01, 0x06, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x00]) 

(so mit PIN = 123456) wird wieder ein bloßen 6A 88 - referenzierte Daten nicht

gefunden

Ich habe mich gefragt: Gibt es eine Möglichkeit, einige Hinweise über die commands zu bekommen mit einer bestimmten Smartcard zu verwenden, um seine ATR zu betrachten? Das heißt, der Befehl "20" im INS-Feld (APDU besteht aus CLA, INS P1, P2, DATA) ist das, was ISO definiert, um die PIN zu verifizieren, aber wie zu verstehen, wenn ich etwas falsch mache?

Danke.

P.S .: Übrigens, mit P2 = "00" bekomme ich 6A 83, Datensatz nicht gefunden.

Antwort

0

Ihre APDU wäre korrekt IFF Ihre Smartcard-Anwendung (der von Ihnen zuvor ausgewählte DF) hatte eine PIN mit der ID 1 (die Sie in P2 angegeben haben). Sie können das höchstwertige Bit so einstellen, dass der Befehl die PIN 1 im MF durchsucht.

+0

Warten wäre: Gibt es eine Möglichkeit zu verstehen, die Befehl zum Senden an die Smartcard? Vielleicht die ATR lesen? Ich werde mich mit vielen verschiedenen Arten von Smartcards beschäftigen müssen und möchte ein "allgemeines" Werkzeug entwickeln, das zwei "einfache" Dinge erledigen kann: lese die PAN (Seriennummer der Karte) und verifiziere den Pin. – Bya

+0

Bitte #ALe, gibt es ein Dokument, wo ich ein paar Informationen darüber finden kann, was ein DF ist, wie man es auswählt und was ist ein MF? Ich bin wirklich ein Neuling über Smartcards ... Ich habe versucht, die richtigen Codes mit einer for-Schleife zu erraten, aber es hat nicht funktioniert. Alles, was ich brauche, ist etwas wie eine allgemeine Anwendung in Python zu bauen, um die PIN zu verifizieren und die PAN zu bekommen, wenn Sie mir bitte sagen würden, wo und was ich lernen würde, würde ich es wirklich schätzen ... – Bya

+0

@Bya: Nein ATR ist keineswegs ausreichend (kann aber einen schwachen Hinweis geben); Ein Ausgangspunkt ist ISO 7816, Teil 4 sowie die meisten Anfänger in [Smartcard]. – guidot

0

Welche PINs existieren (können auch keine sein), und im Falle einer Karte mit einem Dateisystem, in dem DFs leben, wird durch die Personalisierung der Karte definiert. Ohne weitere Einzelheiten müssen die Antworten sehr allgemein sein, z.B. Versuche verschiedene P2-Werte (bis zu 0x1F).

Auf der anderen Seite, sobald die PIN verifiziert wurde, ist es unwahrscheinlich, dass Sie weitere Fortschritte machen, ohne detaillierte Informationen über die Personalisierung der Karte, so dass Sie beginnen können, das sofort zu bekommen.

+0

Danke.Ich habe versucht jeden möglichen P2-Wert mit 'für l im Bereich (255): hresult, Antwort = SCardTransmit (hcard, dwActiveProtocol, [0x00, 0x20, 0x00, int (hex (l), 16), 0x06, 0x31, 0x37 , 0x30, 0x32, 0x37, 0x35, 0x02]) '' aber keiner hat funktioniert. Ich weiß, dass die Karte eine PIN hat, weil ich über mein Java-Applet darauf zugreifen kann. – Bya

+0

Sie konvertieren l zu hex und dann zurück zu einer Ganzzahl? Ihre Karte kann ein CLA-Byte verwenden, das von Null verschieden ist. – guidot

+0

'int (hex (l), 16)' konvertiert zu einem Objekt der int-Klasse, aber in Basis 16. Danke @guidot, dank dem, was du mir erzählst, kann ich jetzt verstehen, dass es keinen Mittelwert gibt (außer der Benutzerhandbuch, das für jede Karte spezifisch ist ...), um zu verstehen, wie man mit einer Chipkarte kommuniziert ... – Bya

1

Dies kann helfen ... wenn es um die GSM-Karten kommt wir immer eine Datenlänge von 8 Byte verwenden, dh VERIFY_CHV = [0xA0, 0x20, 0x00, 0x01, 0x08 ]

Die PIN Die folgenden Daten werden abhängig von der tatsächlichen Stiftlänge mit 0xFF aufgefüllt. dh wenn Pin = 123456 dann LJUST_PIN_HEX = [0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0xFF, 0xFF]

Die APDU dann VERIFY_CHV + LJUST_PIN_HEX

Verwandte Themen