"... Jalannya tidak begitu sulit untuk dipahami. Kekuatan alam, kecenderungan alami, pola peristiwa ...
Pemahaman primitif tentang dunia hanya memperhatikan empat elemen dan tidak melangkah lebih jauh dari ini. Sepertinya alam semesta turun ke empat fenomena yang bisa dimengerti. "
Stephen Erickson.
"Midnight Tide."
Halo, Habr!
Topik APDU telah diangkat berulang kali, tetapi terutama menyangkut kartu pintar, yang untuknya Anda memerlukan pembaca kartu dan kartu yang tidak disayangkan, plus perangkat lunak, karena bekerja dengan antarmuka konsol OpenSC, setidaknya di Window $, tidak nyaman untuk sedikitnya.
Untuk melakukan ini, saya menulis sebuah program kecil dengan antarmuka jendela yang berfungsi melalui kartu win.
Sumber dan binari dapat diunduh di
sini .
Ini dikompilasi di bawah Visual studio 2008, Anda perlu menambahkan proyek WinSCard.Lib dari Microsoft Windows SDK ke proyek.
Kemungkinan besar akan ada ikan biru EToken PRO Java 72 K dengan sertifikat EDS yang berakhir bertahun-tahun yang lalu (menggunakan "pertempuran" dengan EDS yang ada, token tidak direkomendasikan untuk percobaan!).
Juga sesuai adalah JaCarta Pro, yang berbeda dari etigen hanya secara eksternal.
Anda juga dapat mencoba bekerja dengan Gemalto SafeNet eToken 5100, mereka dapat melihat isi direktori, tetapi mereka tidak akan dapat membaca file karena batas waktu yang sangat kecil (mungkin beberapa milidetik) antara perintah untuk memilih dan membaca file, akibatnya perintah untuk membaca file merujuk secara manual sudah ada di tempat kosong (kode kesalahan 69 85). Mungkin ini adalah salah satu alasan bahwa pada beberapa platform pada token ini mereka tidak lagi melihat kunci. Mengenai SafeNet eToken 5100 (dengan tulisan jujur di samping “Made in China”) Saya perhatikan yang berikut ini: “Klien Tunggal JaCarta” tidak ingin bekerja dengannya dan menampilkan pesan bahwa produk ini tidak didukung, Klien 64-bit eToken PKI eToken Aladin yang 5.1 Dia tidak melihatnya, tetapi versi 32 untuk Win XP berfungsi dengannya, meskipun untuk token ini disarankan untuk menginstal Klien Otentikasi SafeNet asli.
Token lain, termasuk keluarga JaCarta, tidak akan berfungsi, karena perintah APDU untuk mereka semua sangat berbeda dan nilai digital yang dijelaskan dalam standar ISO7816 tidak cocok.
Rincian tentang format perintah APDU dapat ditemukan, misalnya di
sini .
Seorang pembaca dengan ikan biru dapat berkenalan dengan karya APDU tanpa bangun dari sofa.
Penting untuk menginstal driver untuk eToken eToken PKI Client 5.1 atau "JaCarta Single Client" dan menghubungkan token.
Untuk tampilan terperinci dari isi token dalam bentuk yang mudah dan rekonsiliasi dengan apa yang diberikan perintah APDU, Anda dapat menggunakan
Editor Autoit
JaCarta yang saya tulis.
Luncurkan APDUExplorer, pilih "Aladdin Token JC 0" atau "ARDS JaCarta 0" atau "SafeNet Token JC 0" dari daftar pembaca dan Anda dapat memasukkan perintah.
Anda dapat memasukkan keduanya melalui titik dua dan melalui spasi atau semuanya.
Pertama, Anda dapat memeriksa kinerja dengan mengklik "Periksa ATR" dan dapatkan respons token.
Perintah pertama adalah memilih applet default dan pergi ke direktori root dengan pengenal 3f00 (pengidentifikasi ini mungkin satu-satunya yang umum untuk token dari vendor mana pun).
00: A4: 00: 04: 00
Selanjutnya, kita mendapatkan daftar folder di direktori root
80: 01: 01: 00: 04: 09: 02: 00: 00: CD (perintahnya adalah “daftar folder laporan” yang konstan)).
Respons harus diterima:
0a 02 66 66 0b 01 00 90 00
Byte kedua dalam respons adalah ukuran data yang diterima - dua byte, yaitu hanya satu folder (pengidentifikasi file atau folder dalam APDU selalu membutuhkan dua byte).
Dan kita hanya melihat satu folder dengan pengidentifikasi 66, yang disebut direktori Aladdin AID.
Laporkan daftar file (juga konstan)
80: 01: 02: 00: 04: 09: 02: 00: 00: 00: CD
Harus diterima
0a 00 0b 01 00 90 00
Jawaban di posisi 01 adalah 00.
Pergi ke direktori 66 66
00 A4 08 04 02 66 66 00
Ini adalah perintah SELECT FILE, formatnya: empat byte, perintah 00 A4 08 04 itu sendiri, kemudian ukuran bidang data dari path lengkap (dalam contoh 02 bytes), lalu path itu sendiri (dalam contoh 66 66) dan 00 harus diselesaikan.
Laporkan daftar direktori 66 66
80: 01: 01: 00: 04: 09: 02: 00: 00: CD:
Resv bytes:
0a 04 50 01 50 00 0b 01 00 90 00
Bidang respons 01 (ukuran respons) menunjukkan 04, mis. 4 byte = dua folder 50 01 dan 50 00, dengan 50 01 sebagai folder layanan dan 50 00 yang utama, disebut direktori PKCS # 11, di mana semua data disimpan
Laporkan daftar direktori 66 66
80: 01: 02: 00: 04: 09: 02: 00: 00: 00: CD
Resv bytes:
0a 00 0b 01 00 90 00
Tidak ada file di sini.
Penelitian telah menunjukkan bahwa tidak ada folder dan file yang terlihat di direktori 50 01, jadi buka direktori utama 50 00
00 A4 08 04 04 66 66 50 00 00
Laporkan Daftar Folder
80: 01: 01: 00: 04: 09: 02: 00: 00: CD:
Jawabannya akan tergantung pada apa yang disimpan di token.
Laporkan daftar file
80: 01: 02: 00: 04: 09: 02: 00: 00: 00: CD
Resv bytes:
0a 14 00 0f 00 02 00 03 00 04 00 05 00 06 00 07 00 08 00 09 00 0a 0b 01 00 90 00
Kami melihat 14 file (bidang respons 01), lalu setiap 2 byte ini adalah nama file, maka ada informasi layanan.
Setiap token dari model yang dipelajari selalu memiliki direktori sistem b000 dan file sistem 0002 di dalamnya, cobalah untuk membacanya, dan file lain dapat dibaca dengan prinsip yang sama.
Pergi ke direktori b0 00
00 A4 08 04 06 66 66 50 00 B0 00 00
Dapatkan daftar file
80: 01: 02: 00: 04: 09: 02: 00: 00: 00: CD
Resv bytes:
0a 02 00 02 0b 01 00 90 00
Kita melihat file 00 02 (byte dalam bidang respons 01 adalah ukuran nama (setiap nama selalu mengambil dua byte, bidang berikut adalah nama file, dalam hal ini hanya ada satu file, yang ditentukan oleh nilai bidang 01).
Pilih file 0002 dari B000 untuk path lengkap
00 A4 08 04 08 66 66 50 00 B0 00 00 02 00
Resv bytes:
01 01 02 02 02 02 00 02 03 02 00 10 04 08 00 ff 00 00 ff ff ff ff 05 00 90 00
Format respons adalah sebagai berikut: pembukaan - 2 byte, tipe file - 1 byte (file 02, folder 01), pembatas - 2 byte, nama file - 2 byte, pembatas - 2 byte, ukuran file - 2 byte, pembatas - 2 byte, hak akses - 1 byte (00 - tersedia untuk semua orang, 63 dilindungi oleh kode PIN). Kemudian muncul beberapa informasi overhead, diakhiri dengan kode untuk keberhasilan pelaksanaan perintah APDU - 90 00.
Baca file ini, dua byte terakhir dari perintah adalah ukuran buffer berapa banyak untuk dibaca (dalam hal ini, itu sama dengan ukuran file).
80 18 00 00 04 0E 02 00 00 10
Resv bytes: (nilai dalam setiap kasus akan berbeda):
00 06 63 61 72 64 63 66 00 00 00 00 00 00 00 00 90 00
Saya tidak mempertimbangkan otentikasi pada etoken di sini, karena ini terdiri dari urutan perintah tanya-jawab dan dienkripsi (ada proyek Antitoken di mana masalah otorisasi pada produk ini secara mendasar diselesaikan).
Beberapa token lain, seperti JaCarta GOST-2, mendukung otentikasi dengan hanya memberikan kode pin.
Anda bisa mendapatkan nilai perintah APDU dari kartu pintar dan token apa pun dengan memotong lalu lintas WinSCard.dll dengan menjalankan sniffer yang dikompilasi
dari sini (percobaan telah menunjukkan bahwa sniffer ini diinstal dan berjalan hanya di bawah Win XP).
Untuk referensi, kemungkinan hasil menjalankan perintah APDU:
90 00 - OK
69 85 - Kondisi penggunaan tidak terpenuhi
63 00 - Otentikasi kriptogram host gagal (Ext auth)
64 00 - Tidak ada diagnosis khusus
67 00 - Panjangnya salah di Lc
67 XX - Kesalahan, salah parameter P3 (kode ISO)
68 81 - Saluran logis tidak didukung atau tidak aktif
69 82 - Status keamanan tidak terpenuhi
69 83 - Kode rahasia terkunci
69 85 - Tidak ada EF yang dipilih saat ini, tidak ada perintah untuk memantau / tidak ada File Manajer Transaksi
6A 80 - Parameter di bidang data salah
6A 81 - Kartu diblokir atau perintah tidak didukung
6A 82 - File tidak ditemukan
6A 85 - Lc tidak konsisten dengan struktur TLV
6A 86 - P1 P2 salah
6A 88 - Data yang direferensikan tidak ditemukan (Init upd)
6D 00 - Instruksi tidak valid
6E 00 - Kelas tidak valid