Ich versuche, Informationen von einer Smartcard mit einer kontaktlosen OmniKey 5321-Karte zu lesen Leser.
Bearbeiten : Ein Bounty hinzugefügt.
Ich schreibe ein C # 3 in .NET 3.5-Programm, also ist dies eine Windows-Anwendung.
Auf der Karte sind einige Informationen eingeprägt, von denen ich annehme, dass sie in den Kartendaten vorhanden sind (unten ist ein Foto der Karte und des Lesers).
Auf der Karte sind folgende Informationen eingeprägt:
%Vor%Wenn Sie die Diagnoseanwendung verwenden, die mit dem OmniKey-Kartenleser geliefert wird, erhalte ich folgende Informationen:
%Vor%Nun, hier sind einige Conversions, die ich in Betracht gezogen habe:
Hier sind meine Fragen:
Hier ist das Foto, wenn das irgendwelche Informationen gibt.
Sie können sich auf UID verlassen, aber in Ihrem Fall scheint es abgeschnitten zu sein:
%Vor%Uid sind normalerweise 16 Bytes lang.
Sie können das lesen Unique Identifier (UID): Alle ISO-kompatiblen Smartcards erhalten eine UID-Nummer (ähnlich einer VIN-Nummer in einem Fahrzeug). Zum Zu Interoperabilitätszwecken ist die UID einer Karte offen und kann von allen kompatiblen Lesern gelesen werden. Da diese eindeutige Nummer nicht durch Schlüssel gesichert wird, ist das Lesen der UID einer Smartcard vergleichbar mit dem Lesen einer Proximity-Karte, Magnetstreifenkarte oder einer anderen Technologie, die offene, ungesicherte Nummern verwendet.
Ich habe vor kurzem zu viele Stunden damit verbracht, nach einem kompletten Beispiel zu suchen, wie man die ATR von OMNIKEY und die OMNIKEY Proximity-Karte bekommt ...
Jetzt, da ich meinen Code funktioniere, möchte ich teilen, damit andere davon profitieren können.
Der beste Code, den ich gefunden habe, stammt von SpringCard. (Danke!)
Andere Beispiele, die ich fand, waren zeitverschwendend und irreführend und funktionierten nicht, weil der DllImport falsch war ...
%Vor% UID kann über PC / SC 2.01-konformen Funktionsaufruf gegen winscard.dll
gelesen werden.
Bei iCLASS-Karten ist es normalerweise 8 Byte lang. Andere Karten geben eine UID von 4 bis 8 Byte zurück (sie fungiert wie eine Telefonnummer, um mehrere Karten im Feld zu identifizieren und schließlich eine auszuwählen).
Die APDU kann über den Standard SCardTransmit()
mit CLA=0xFF
ausgetauscht werden, um den Zugriff auf die kontaktlose Speicherkarte anzuzeigen.
Marc
HINWEIS: Die UID spiegelt NICHT die auf der Karte aufgedruckte Kartennummer wider. Die Kartennummer ist Teil der Wiegand-Daten, die in der HID PAC-Anwendung der Anwendung 1 auf Seite 0 dieser Karte gespeichert sind.
Auch wenn die UID-Nummer Teil des Standards ist und der Standard sagt, dass sie weltweit einzigartig sein sollte, müssen Sie daran denken, dass Hersteller oft nicht-konforme (aber funktionierende) Karten produzieren.
Fazit: Solange Sie nichts Einzigartiges auf die Karte legen, können Sie nicht sicher sein, dass der Link von der Karte zu einem Karteninhaber erfüllt ist.
Die ATR ( A nswer T o R ) setzt nur das Format der Karte, das Protokoll und die Prüfsummen fest dieser Daten. Siehe ATR Parsing online
Nun wissen Sie, um welche Karte es sich handelt, dann müssen Sie die entsprechende (RS232 / RS485 / ZPL II / APDU - Smartcard A Anwendung P Protokoll anwenden D ata U nit wie in ISO / IEC 7816-4 definiert), um die UID zu erhalten (abhängig davon, ob es sich um Kaskade 1, 2 oder 3 handelt, siehe ACG HF Multi ISO RFID Reader v1.0 Seite 50 aka Omnikey5553 RS232) - für 14443 ist es bis zu 14 Bytes lang, besetzt die ersten beiden Blöcke im ersten 16-Byte-Sektor (Sektor 0) und hat Prüfsummen eingebettet. (Siehe ISO14443-Protokolle oder NXP Semiconductors MF1ICS50-Spezifikationen Seite 8).
Für 15693 geben die RS232 / RS485-Befehle eine volle 16-Byte-UID an (S) (Omnikey5553 RS232 und USB) zurück, aber auf APDU werden nur die letzten 8 Bytes (0xFF 0xCA 0x00 0x00 0x00 auf einem Omnikey5022) zurückgegeben Da der Standard der 15693 ist, antwortet die Karte nur mit 8 Bytes gleichzeitig. Für 14443 können Sie jeweils einen Sektor lesen (32 Bytes von 4 Blöcken zu je 8 Bytes, Logging in den Sektor vor dem Lesen / Schreiben für den S50), aber für 15693 können Sie nur einen Block von 8 Bytes gleichzeitig lesen / schreiben , und hat andere Daten im zurückgegebenen Puffer. Sie müssen codieren, ob Sie die Daten bei 32 oder bei 8 "blockieren". Dies verwendet das Standard-SCardTransmit-Smartcard-Protokoll für Windows-API. Da die Diagnoseanwendung 16 Byte zurückgegeben hat, ist dies die UID der Karte. Darüber hinaus verwenden einige 15693 die 14443 invertierte Taste, um zu verschleiern und zu verhindern, andere halten ein Mikro-Programm, das die Validierung durchführt - entweder auf dem PC oder auf der Karte selbst.
In allen Fällen hat dies keine Beziehung zu dem, was auf der Karte aufgedruckt ist - wir verwenden CODE128C-Barcodes, die auf EV1-Plastikkarten gedruckt sind und eine GUID enthalten, die auf die entsprechende UID in einer Datenbank für Transaktionen verweist. Andere (wie Wiegand usw.) drucken andere Daten wie Ortskennzahlen, Schlüsselsätze usw.
Zusätzliche Probleme treten auf, wenn Sie versuchen, Daten in den 15693 zu schreiben - stellen Sie sicher, dass Sie Ihre Daten an der 4 char-Schnittstelle beenden, sonst haben Sie Probleme mit früheren Daten, wenn Sie versuchen, eine Null '0x00' über ein vorhandenes Zeichen in a zu schreiben Block - also Code für Gürtel, Hosenträger und ein Stück Schnur nach dem Aktualisieren / Schreiben auf eine Karte, um sicherzustellen, dass die Daten wie benötigt sind. Wenn der ganze Block von Null ist, kein Problem, da die Daten als ein Block von 4 Zeichen geschrieben werden. Löschen Sie den Kartenbenutzerbereich NICHT unnötig, da sie NAND-basiert sind und nur begrenzte Schreibzugriffe haben. (Nach dem Schreiben lesen Sie die Karte erneut, um sicherzustellen, dass die geschriebenen Daten wie geschrieben sind!)
Die UID sollte innerhalb des Kartenausgabesatzes eindeutig sein, hängt aber auch von der Kartenquantitätsreihenfolge ab - weshalb die Seriennummer 2-mal erweitert wurde (die Kaskadennummer) und ausnahmsweise einmal Ihr Vertrauen in Ihr System mindern sollte die UID von einem Apple-Telefon, da es das U in UID verletzt - es kann so eingestellt werden, dass es eine andere UID emuliert.
NDEF ist ein weiterer Aspekt von Karten, der verstanden werden sollte - in NFC-NDEF-Standards ist er gut erklärt, sei aber vorsichtig mit den OTP- und LOCK-Bereichen von 14443, da sie nur einmal einbahnig sind.
Sie können immer ein Android-Telefon mit NFC und der TagData-App zur Überprüfung verwenden.
Tags und Links smartcard uid smartcard-reader winscard iso-15693