Kad pintar: buku asas

Kad pintar mendapat banyak berita akhir-akhir ini di Web, pada persidangan JavaOne April lalu (empat sesi berkaitan dengan teknologi), di stesen berita rangkaian besar, dan di CNN. Dalam artikel ini kami akan menghidupkan kad pintar dengan contoh kad pintar dunia nyata. Teknik yang disajikan di sini akan membolehkan anda mula membina aplikasi Java yang diaktifkan dengan kad pintar.

Kami akan memberi tumpuan kepada dua jenis kad pintar: kad pintar memori , yang boleh dilihat sebagai cakera baca / tulis yang boleh ditanggalkan dengan keselamatan pilihan; dan kad pemproses , yang dapat dilihat sebagai komputer mini dengan port input dan output. Artikel masa depan akan merangkumi kad pemproses dengan lebih mendalam.

Sebagai inti artikel, kami akan mengembangkan prototaip ringkas untuk membaca dan menulis data ke kad pintar. Kami akan membincangkan kad preskripsi ubat , yang menyimpan senarai semua preskripsi anda dan menjejaki insurans, rancangan preskripsi, dan maklumat berguna anda yang lain. Artikel kemudian akan dikembangkan mengenai idea kad preskripsi.

Anda akan menyedari bahawa tema berulang yang terdapat di dalam siri kad pintar ini adalah keperluan untuk rangka kerja keselamatan untuk mengelakkan pemalam yang tidak betul, komponen ActiveX, dan sebagainya daripada mendapatkan maklumat peribadi dan / atau syarikat anda. Untuk tujuan ini, demonstrasi cara membaca dan menulis data ke kad pintar yang disertakan dalam artikel ini akan memberi anda simpanan yang berterusan, selamat (dan mudah alih).

Apakah kad pintar?

Anda boleh menganggap kad pintar sebagai "kad kredit" dengan "otak" di atasnya, otak menjadi cip komputer tertanam kecil. Komputer kad ini dapat diprogramkan untuk melakukan tugas dan menyimpan maklumat, tetapi perhatikan bahawa otaknya sedikit - yang bermaksud bahawa kuasa kad pintar jauh dari komputer desktop anda.

Kad pintar pada masa ini digunakan dalam transaksi telefon, pengangkutan, perbankan, dan penjagaan kesihatan, dan tidak lama lagi - terima kasih kepada pembangun seperti anda - kami akan mula melihatnya digunakan dalam aplikasi Internet. Kad pintar sudah banyak digunakan di Jepun dan Eropah dan semakin popular di AS. Sebenarnya, tiga peristiwa penting telah berlaku baru-baru ini di industri kad pintar di negara ini:

PC / SC

Microsoft dan beberapa syarikat lain memperkenalkan PC / SC , antara muka aplikasi kad pintar untuk berkomunikasi dengan kad pintar dari platform berasaskan Win32 untuk komputer peribadi. PC / SC pada masa ini tidak menyokong sistem berasaskan bukan Win32 dan mungkin tidak pernah melakukannya. Kami akan membincangkan perkara ini dengan lebih terperinci di kemudian hari.

Rangka Kerja OpenCard

OpenCard adalah standard terbuka yang menyediakan interoperabiliti aplikasi kad pintar di seluruh NC, POS, desktop, komputer riba, set top, dan sebagainya. OpenCard berjanji untuk menyediakan aplikasi kad pintar 100% murni Java. Aplikasi kad pintar selalunya tidak tulen kerana berkomunikasi dengan peranti luaran dan / atau menggunakan perpustakaan pada pelanggan. (Sebagai catatan, 100% aplikasi murni dapat wujud tanpa OpenCard, tetapi tanpanya, pembangun akan menggunakan antaramuka buatan sendiri untuk kad pintar.) OpenCard juga menyediakan pembangun dengan antara muka ke PC / SC untuk penggunaan peranti yang ada di Win32 platfrom.

Kad Java

JavaCard diperkenalkan oleh Schlumberger dan diserahkan sebagai standard oleh JavaSoft baru-baru ini. Schlumberger memiliki satu-satunya kad Java di pasaran saat ini, dan syarikat itu adalah pemegang lesen JavaCard pertama. Kad pintar yang berpotensi untuk menetapkan standard kad pintar keseluruhan, JavaCard terdiri daripada kelas dan API standard yang membolehkan applet Java berjalan terus pada kad yang mematuhi standard ISO 7816. JavaCards membolehkan pelaksanaan aplikasi yang berbeza dan selamat dari cip.

Catatan:

Walaupun artikel ini memfokuskan pada kad pintar, perlu diketahui bahawa anda tidak terhad kepada jenis peranti ini. Secara peribadi, saya lebih suka peranti "Ibuttons" dihasilkan oleh Dallas Semiconductor. Ia kecil dan mudah alih seperti kad kredit, tetapi lebih mudah. Kenapa? Anda tidak perlu menggali dompet anda untuk mencari kad; Ibuttons ada di sana, di jari anda. Ya, itu cincin!

Walaupun versi kad pintar tanpa sentuh memang ada (lihat di bawah untuk maklumat lebih lanjut mengenai perkara ini), saya rasa Ibuttons, jenis alat perhiasan berfungsi boleh menguntungkan. Untuk maklumat lebih lanjut mengenai Ibuttons, lihat bahagian Sumber. Ngomong-ngomong, Java Commerce Team memperagakan "JavaRing" di Java Internet Business Expo (JIBE) di New York pada Agustus lalu. Anda boleh membaca tentang ini dalam artikel di majalah Fortune (sekali lagi, lihat bahagian Sumber).

Mengapa menggunakan kad pintar?

Apakah kelebihan menggunakan kad pintar? Nah, kad pintar:

  • lebih dipercayai daripada kad jalur magnetik
  • kini boleh menyimpan seratus kali lebih banyak maklumat daripada kad magnetik
  • lebih sukar untuk dirosakkan daripada garis mag
  • boleh guna atau boleh digunakan semula
  • dapat menjalankan pelbagai fungsi dalam pelbagai industri
  • serasi dengan peranti elektronik mudah alih seperti telefon, pembantu digital peribadi (PDA), dan PC
  • sentiasa berkembang (bagaimanapun, ia merangkumi cip komputer)

Jenis kad pintar

Seperti yang disebutkan di atas, artikel ini akan memberi tumpuan kepada dua jenis kad pintar - memori dan proses. Secara keseluruhan, terdapat lima jenis kad pintar:

  1. kad memori
  2. kad pemproses
  3. kad dompet elektronik
  4. kad keselamatan
  5. Kad Java

Kad pintar adalah perkakasan peribadi yang mesti berkomunikasi dengan beberapa peranti lain untuk mendapatkan akses ke peranti paparan atau rangkaian. Kad boleh dipasang ke pembaca, biasanya disebut sebagai

terminal kad

, atau mereka dapat beroperasi menggunakan frekuensi radio RF.

Kad pintar boleh berkomunikasi dengan pembaca atau penerima (lihat bahagian pembaca di bawah untuk maklumat lebih lanjut mengenai dua istilah ini) dalam salah satu daripada dua bentuk:

Hubungi kad pintar - Sambungan dibuat apabila pembaca menghubungi cip emas kecil di bahagian depan kad.

Kad pintar tanpa sentuh - Kad ini dapat berkomunikasi melalui antena, menghilangkan keperluan memasukkan dan mengeluarkan kad dengan tangan. Dengan kad tanpa sentuh, yang perlu anda lakukan ialah menghampiri penerima, dan kad akan mula berkomunikasi dengannya. Kad tanpa sentuh dapat digunakan dalam aplikasi di mana penyisipan / penyingkiran kad mungkin tidak praktikal atau kecepatan penting.

Beberapa pengeluar membuat kad yang berfungsi dalam mod sentuhan dan tanpa sentuh.

Buat persekitaran pembangunan untuk membina aplikasi kad pintar

Untuk mengembangkan aplikasi kad pintar, anda memerlukan beberapa perkara, iaitu: pembaca kad pintar; perisian untuk berkomunikasi dengan pembaca serta beberapa perisian untuk berkomunikasi dengan kad yang telah dipasang ke pembaca; dan, tentu saja, kad pintar dan perkakasan kad pintar.

Pembaca kad pintar

Untuk berkomunikasi dengan kad pintar atau mengembangkan aplikasi yang mampu menggunakan kad pintar, anda mesti mempunyai pembaca . Pembaca menyediakan jalan untuk aplikasi anda menghantar dan menerima arahan dari kad. Terdapat banyak jenis pembaca di pasaran, yang paling lazim adalah model siri , PCCard , dan papan kekunci . (Model papan kekunci muncul di sana-sini; mengharapkannya tersedia secara langsung dari pembuat PC besar pada bulan Jun 1998.)

Artikel ini menggunakan pembaca bersiri untuk menyokong peranti. Pembaca bersiri menyambung ke port bersiri komputer. Perhatikan bahawa kod yang disediakan juga menyokong pembaca PCCard; kebanyakan komputer riba dilengkapi dengan slot PCCard yang terbina dalam.

Setiap pengeluar menyediakan protokol yang berbeza untuk bercakap dengan pembaca. Setelah anda dapat berkomunikasi dengan pembaca, ada satu protokol untuk berkomunikasi dengan kad pintar: Komunikasi dengan kad pintar didasarkan pada format APDU. (Format APDU dibincangkan di bawah.) Untuk maklumat mengenai pembelian pembaca anda sendiri, lihat tajuk "Pembaca kad pintar Gemplus" di bahagian Sumber.

Perisian untuk berkomunikasi dengan pembaca

Sebilangan kelas berorientasikan objek diperlukan untuk contoh kad pintar yang disertakan dalam artikel ini. Ini adalah:

  • Kelas perintah ISO untuk berkomunikasi dengan protokol 7816
  • Kelas untuk berkomunikasi dengan pembaca
  • Kelas untuk menukar data ke format khusus pengeluar
  • Aplikasi untuk menguji dan menggunakan kad untuk tujuan yang dirancang aplikasi tersebut

Kad pintar dan perkakasan kad pintar

Seperti yang dinyatakan di awal artikel, untuk mengembangkan aplikasi kad pintar di sini, anda memerlukan perkakasan kad pintar dan beberapa kad pintar. Anda boleh membeli alat pengembangan kad pintar dari sebilangan syarikat, termasuk Gemplus dan Schlumberger.

Bagi anda yang sudah mempunyai pembaca, anda seharusnya dapat menggunakan pembaca anda dengan menyediakan pelaksanaan kelas antara muka yang akan kita bincangkan kemudian. Seperti yang disebutkan di atas, sebelum kita dapat berkomunikasi dengan kad, kita mesti dapat berkomunikasi dengan pembaca, dan sama seperti terdapat banyak kad yang berbeza, terdapat banyak pembaca yang berbeza.

Piawaian kad pintar yang penting

Bahagian penting dari teka-teki pengembangan aplikasi kad pintar adalah protokol standard. Pada asasnya, aplikasi berkomunikasi dengan pembaca, yang seterusnya bercakap dengan kad pintar menggunakan protokol standard - dalam kes kami, protokol International Standards Organisation (ISO) 7816.

Seperti teknologi baru, terdapat begitu banyak standard untuk kad pintar sehingga anda mungkin merasa kecewa dan terbeban. Mencapai pemahaman asas mengenai standard berikut akan membolehkan anda mengembangkan aplikasi dengan keyakinan bahawa anda tidak mengabaikan sesuatu yang asas untuk menggunakan kad pintar. Walau bagaimanapun, untuk beberapa sistem, standard khas mula digunakan. Saya telah memecahkan keseluruhan standard menjadi standard "horizontal" dan "vertical": Standard horizontal boleh digunakan oleh semua aplikasi, sementara standard menegak khusus untuk sistem.

Piawaian mendatar

  • ISO 7816 - menerangkan antara muka tahap terendah ke kad pintar. Pada tahap inilah bait data dipindahkan antara pembaca kad dan kad.

  • PC / SC - standard untuk berkomunikasi dengan kad pintar yang disambungkan ke mesin Win3.1 / Win95 / NT.

  • OCF - antara muka Java untuk berkomunikasi dengan kad pintar dari persekitaran Java. (Tidak lama lagi, OCF akan membolehkan pembangun menulis kepada OCF dan melakukan terjemahan, jadi tidak perlu menulis ke PC / SC.)

  • JavaCard - menerangkan JavaCard dan apa yang disokongnya.

Piawai menegak

  • Mondex - wang tunai digital yang menggunakan kad pintar sahaja. Pendekatan Mondex tidak membenarkan wang tunai wujud di luar kad.

  • VisaCash - kad debit yang memantau kad di pelayan.

  • Proton - satu lagi bentuk E-tunai.

  • MPCOS-EMV - kad tujuan umum yang membolehkan anda menerapkan jenis mata wang atau token anda sendiri.

Saya selalu kagum kerana sekeping plastik kecil itu memerlukan banyak bacaan dokumentasi dan menuntut banyak pengetahuan dari pihak pembangun!

Oleh kerana tahap kepakaran yang tinggi diperlukan dengan kad pintar, terdapat pasaran bagi pemaju untuk membekalkan produk berkebolehan kacang yang menerapkan standard menegak menggunakan standard mendatar untuk pasaran yang ingin anda jual. Ini bermaksud bahawa anda dapat mengembangkan kacang yang menggunakan pelbagai kombinasi piawai mendatar, seperti OpenCard, untuk menerapkan aplikasi tertentu menggunakan beberapa standar industri lain untuk perdagangan atau aplikasi lain.

Berkomunikasi dengan kad pintar dari applet atau aplikasi Java

Anda tahu apa yang anda perlukan untuk menyambungkan semua perkakasan. Sekarang kita perlu memahami bagaimana menggunakan beberapa API yang akan membolehkan kita mengirim perintah dari aplikasi ke pembaca. (Pembaca, seterusnya, berkomunikasi dengan kad, sehingga bertindak sebagai perantara sebelum mengirim data ke kad.) Pembaca kad pintar menggoyangkan titik kontak emas dan memindahkan data. Kad akan melakukan sesuatu dengan data dan mengembalikannya kepada pembaca, yang kemudian akan mengembalikan data ke aplikasi. Oleh itu, di mana semua bait ini berpindah dari aplikasi anda ke kad?

Seperti disebutkan di atas, aplikasi berkomunikasi dengan pembaca, yang seterusnya bercakap dengan kad pintar menggunakan standard yang dibincangkan di atas. Pada asasnya, ketika teknologi kad pintar dikembangkan, standard kad pintar dicadangkan oleh ISO. Ciri-ciri mekanikal dan elektrikal yang ditetapkan serta protokol untuk berkomunikasi dengan kad. Petunjuk ke dokumen ISO yang berkaitan disenaraikan di bahagian Sumber. Malangnya, kumpulan ISO tidak dapat menyediakan standard untuk berkomunikasi dengan pembaca. Oleh itu, untuk menghantar arahan ke kad, pertama anda perlu mencari perintah yang disokong oleh kad, bungkus perintah ini dalam paket perintah ISO, dan kemudian bungkus perintah baru ini dalam pembungkus yang diperlukan untuk pembaca yang berkenaan. Aplikasi contoh yang disediakan di sini melaksanakan semua lapisan ini untuk anda.

Unit Data Protokol Aplikasi (APDU)

Unit pertukaran asas dengan kad pintar adalah paket APDU. Pesan perintah yang dikirim dari lapisan aplikasi, dan pesan respons yang dikembalikan oleh kartu ke lapisan aplikasi, disebut Unit Data Protokol Aplikasi (APDU). Komunikasi dengan kad dan pembaca dilakukan dengan APDU. APDU dapat dianggap sebagai paket data yang berisi petunjuk lengkap atau respons lengkap dari kad. Untuk menyediakan fungsi ini, APDU mempunyai struktur yang jelas yang ditentukan dalam sejumlah dokumen ISO yang tergolong dalam keluarga spesifikasi 7816.

APDU terdiri daripada bidang berikut:

Format APDU Perintah

CLA INS P1 P2 Lc Data Le

Format APDU Respons

Data SW1 SW2

Berikut adalah beberapa kelas yang disediakan untuk mengangkut APDU dan fungsi kelas: