Kartu pintar: Primer

Kartu pintar akhir-akhir ini mendapatkan banyak perhatian di Web, di konferensi JavaOne April lalu (empat sesi membahas teknologi), di stasiun berita jaringan besar, dan di CNN. Dalam artikel ini, kami akan menghidupkan kartu pintar dengan contoh kartu pintar dunia nyata. Teknik yang disajikan di sini akan memungkinkan Anda untuk mulai membangun aplikasi Java dengan kartu pintar yang diaktifkan.

Kami akan fokus pada dua jenis kartu pintar: kartu pintar memori , yang dapat dilihat sebagai disk baca / tulis yang dapat dilepas dengan keamanan opsional; dan kartu prosesor , yang dapat dilihat sebagai komputer miniatur dengan port input dan output. Artikel selanjutnya akan membahas kartu prosesor secara lebih mendalam.

Sebagai inti dari artikel ini, kami akan mengembangkan prototipe sederhana untuk membaca dan menulis data ke kartu pintar. Kami akan membahas kartu resep obat , yang menyimpan daftar semua resep Anda dan melacak asuransi Anda, rencana resep, dan info berguna lainnya. Artikel-artikel selanjutnya akan memperluas gagasan tentang kartu resep.

Anda akan melihat bahwa tema berulang yang berjalan di seluruh seri ini pada kartu pintar adalah perlunya kerangka kerja keamanan untuk mencegah plug-in nakal, komponen ActiveX, dan sebagainya agar tidak mendapatkan info-barang pribadi dan / atau perusahaan Anda. Untuk tujuan ini, demonstrasi tentang cara membaca dan menulis data ke kartu pintar yang disertakan dalam artikel ini akan memberi Anda penyimpanan yang persisten, aman (dan portabel).

Apa itu kartu pintar?

Anda dapat menganggap smart card sebagai "kartu kredit" dengan "otak" di atasnya, otak adalah chip komputer kecil yang tertanam. Komputer kartu ini dapat diprogram untuk melakukan tugas dan menyimpan informasi, tetapi perhatikan bahwa otaknya kecil - yang berarti bahwa kekuatan kartu pintar jauh dari komputer desktop Anda.

Kartu pintar saat ini digunakan dalam transaksi telepon, transportasi, perbankan, dan perawatan kesehatan, dan segera - terima kasih kepada pengembang seperti Anda - kami akan mulai melihatnya digunakan dalam aplikasi Internet. Kartu pintar telah digunakan secara luas di Jepang dan Eropa dan mendapatkan popularitas di AS. Faktanya, tiga peristiwa penting telah terjadi baru-baru ini dalam industri kartu pintar di negara ini:

PC / SC

Microsoft dan beberapa perusahaan lain memperkenalkan PC / SC , antarmuka aplikasi kartu pintar untuk berkomunikasi dengan kartu pintar dari platform berbasis Win32 untuk komputer pribadi. PC / SC saat ini tidak mendukung sistem berbasis non-Win32 dan mungkin tidak pernah mendukungnya. Kami akan membahas ini lebih detail nanti.

Kerangka OpenCard

OpenCard adalah standar terbuka yang menyediakan interoperabilitas aplikasi kartu pintar di NCs, POS, desktop, laptop, set top, dan sebagainya. OpenCard berjanji untuk menyediakan 100% aplikasi kartu pintar Java murni. Aplikasi kartu pintar seringkali tidak murni karena mereka berkomunikasi dengan perangkat eksternal dan / atau menggunakan pustaka pada klien. (Sebagai catatan tambahan, 100% aplikasi murni dapat eksis tanpa OpenCard, tetapi tanpanya, pengembang akan menggunakan antarmuka buatan sendiri ke kartu pintar.) OpenCard juga menyediakan pengembang dengan antarmuka ke PC / SC untuk penggunaan perangkat yang ada di Win32 platfroms.

JavaCard

JavaCard diperkenalkan oleh Schlumberger dan dikirimkan sebagai standar oleh JavaSoft baru-baru ini. Schlumberger memiliki satu-satunya kartu Java di pasaran saat ini, dan perusahaan tersebut adalah pemegang lisensi JavaCard pertama. Sebuah kartu pintar dengan potensi untuk mengatur standar kartu pintar secara keseluruhan, JavaCard terdiri dari kelas standar dan API yang memungkinkan applet Java berjalan langsung pada kartu standar yang sesuai dengan ISO 7816. JavaCards memungkinkan eksekusi yang aman dan tidak bergantung pada chip untuk berbagai aplikasi.

catatan:

Meskipun artikel ini berfokus pada kartu pintar, penting untuk diperhatikan bahwa Anda tidak terbatas pada jenis perangkat ini. Secara pribadi, saya lebih suka perangkat "Ibuttons" yang diproduksi oleh Dallas Semiconductor. Ini kecil dan portabel seperti kartu kredit, tetapi jauh lebih praktis. Mengapa? Anda tidak perlu mengeluarkan dompet untuk mencari kartu; Tombol ada di sana, di jari Anda. Ya, itu cincin!

Sementara versi nirsentuh dari kartu pintar memang ada (lihat di bawah untuk informasi lebih lanjut tentang ini), saya pikir Ibuttons, jenis perangkat perhiasan fungsional bisa sangat menguntungkan. Untuk informasi lebih lanjut tentang Ibuttons, lihat bagian Resources. Omong-omong, Tim Perdagangan Java mendemonstrasikan "JavaRing" di Java Internet Business Expo (JIBE) di New York Agustus lalu. Anda dapat membaca tentang ini di artikel di majalah Fortune (sekali lagi, lihat bagian Sumberdaya).

Mengapa menggunakan kartu pintar?

Apa keuntungan menggunakan kartu pintar? Nah, kartu pintar:

  • lebih dapat diandalkan daripada kartu strip magnetik
  • saat ini dapat menyimpan informasi seratus kali lebih banyak daripada kartu strip magnetik
  • lebih sulit untuk dirusak daripada garis mag
  • bisa sekali pakai atau digunakan kembali
  • dapat melakukan banyak fungsi di berbagai industri
  • kompatibel dengan perangkat elektronik portabel seperti telepon, asisten digital pribadi (PDA), dan PC
  • terus berkembang (lagipula, ini menggabungkan chip komputer)

Jenis kartu pintar

Seperti disebutkan di atas, artikel ini akan fokus pada dua jenis kartu pintar - memori dan proses. Secara keseluruhan, ada lima jenis kartu pintar:

  1. kartu memori
  2. kartu prosesor
  3. kartu dompet elektronik
  4. kartu keamanan
  5. JavaCard

Kartu pintar adalah perangkat keras pribadi yang harus berkomunikasi dengan beberapa perangkat lain untuk mendapatkan akses ke perangkat layar atau jaringan. Kartu dapat dipasang ke alat pembaca, biasa disebut sebagai a

terminal kartu

, atau mereka dapat beroperasi menggunakan frekuensi radio RF.

Kartu pintar dapat berkomunikasi dengan pembaca atau penerima (lihat bagian pembaca di bawah untuk lebih lanjut tentang dua istilah ini) dalam salah satu dari dua bentuk:

Hubungi kartu pintar - Sambungan dibuat ketika pembaca menghubungi chip emas kecil di bagian depan kartu.

Kartu pintar nirkontak - Ini dapat berkomunikasi melalui antena, menghilangkan kebutuhan untuk memasukkan dan mengeluarkan kartu dengan tangan. Dengan kartu nirsentuh, yang harus Anda lakukan adalah mendekati penerima, dan kartu akan mulai berkomunikasi dengannya. Kartu nirkontak dapat digunakan dalam aplikasi di mana penyisipan / pelepasan kartu mungkin tidak praktis atau yang kecepatannya penting.

Beberapa produsen membuat kartu yang berfungsi dalam mode kontak dan tanpa kontak.

Ciptakan lingkungan pengembangan untuk membangun aplikasi kartu pintar

Untuk mengembangkan aplikasi kartu pintar, Anda memerlukan beberapa hal, yaitu: pembaca kartu pintar; perangkat lunak untuk berkomunikasi dengan pembaca serta beberapa perangkat lunak untuk berkomunikasi dengan kartu yang telah dicolokkan ke pembaca; dan, tentu saja, kartu pintar dan perangkat keras kartu pintar.

Pembaca kartu pintar

Untuk berkomunikasi dengan kartu pintar atau mengembangkan aplikasi yang mendukung kartu pintar, Anda harus memiliki pembaca . Pembaca menyediakan jalur bagi aplikasi Anda untuk mengirim dan menerima perintah dari kartu. Ada banyak jenis pembaca di pasaran, yang paling umum adalah model serial , PCCard , dan keyboard . (Model keyboard muncul di sana-sini; diharapkan tersedia langsung dari pembuat PC besar sebelum Juni 1998.)

Artikel ini menggunakan pembaca serial untuk mendukung perangkat. Pembaca serial terhubung ke port serial komputer. Perhatikan bahwa kode yang diberikan juga mendukung pembaca PCCard; kebanyakan laptop dilengkapi dengan slot PCCard bawaan.

Setiap pabrikan menyediakan protokol berbeda untuk berbicara dengan pembaca. Setelah Anda dapat berkomunikasi dengan pembaca, ada satu protokol untuk berkomunikasi dengan kartu pintar: Komunikasi dengan kartu pintar didasarkan pada format APDU. (Format APDU dibahas di bawah.) Untuk informasi tentang membeli pembaca Anda sendiri, lihat tajuk "pembaca kartu pintar Gemplus" di bagian Sumber.

Perangkat lunak untuk berkomunikasi dengan pembaca

Sejumlah kelas berorientasi objek diperlukan untuk contoh kartu pintar yang disertakan dalam artikel ini. Ini adalah:

  • Kelas perintah ISO untuk berkomunikasi dengan protokol 7816
  • Kelas untuk berkomunikasi dengan pembaca
  • Kelas untuk mengonversi data ke format khusus pabrikan
  • Aplikasi untuk menguji dan menggunakan kartu untuk tujuan desain aplikasi tersebut

Kartu pintar dan perangkat keras kartu pintar

Seperti disebutkan di awal artikel, untuk mengembangkan aplikasi kartu pintar di sini, Anda memerlukan perangkat keras kartu pintar dan beberapa kartu pintar. Anda dapat membeli kit pengembangan kartu pintar dari sejumlah perusahaan, termasuk Gemplus dan Schlumberger.

Bagi Anda yang sudah memiliki pembaca, Anda harus bisa menggunakan pembaca Anda dengan menyediakan implementasi kelas antarmuka yang akan kita bahas nanti. Seperti disebutkan di atas, sebelum kita dapat berkomunikasi dengan kartu tersebut, kita harus dapat berkomunikasi dengan pembaca, dan sebagaimana terdapat banyak kartu yang berbeda, juga terdapat banyak pembaca yang berbeda.

Standar kartu pintar yang penting

Bagian penting dari teka-teki pengembangan aplikasi smart card adalah protokol standarnya. Pada dasarnya, aplikasi berkomunikasi dengan pembaca, yang pada gilirannya berbicara ke kartu pintar menggunakan protokol standar - dalam kasus kami, protokol Organisasi Standar Internasional (ISO) 7816.

Seperti halnya teknologi baru, ada begitu banyak standar untuk kartu pintar sehingga Anda mungkin merasa kecil hati dan kewalahan. Mencapai pemahaman dasar tentang standar berikut akan memungkinkan Anda mengembangkan aplikasi dengan keyakinan bahwa Anda tidak mengabaikan sesuatu yang mendasar dalam menggunakan kartu pintar. Namun, untuk beberapa sistem, standar khusus ikut bermain. Saya telah memecah semua standar menjadi standar "horizontal" dan "vertikal": Standar horizontal dapat digunakan oleh semua aplikasi, sementara standar vertikal khusus untuk sistem.

Standar horizontal

  • ISO 7816 - menjelaskan antarmuka tingkat terendah ke kartu pintar. Pada tingkat inilah byte data ditransfer antara pembaca kartu dan kartu.

  • PC / SC - standar untuk berkomunikasi dengan kartu pintar yang terhubung ke mesin Win3.1 / Win95 / NT.

  • OCF - antarmuka semua-Java untuk berkomunikasi dengan kartu pintar dari lingkungan Java. (OCF akan segera mengizinkan pengembang untuk menulis ke OCF dan melakukan terjemahan, jadi tidak perlu menulis ke PC / SC.)

  • JavaCard - menjelaskan JavaCard dan apa yang didukungnya.

Standar vertikal

  • Mondex - uang digital yang hanya menggunakan kartu pintar. Pendekatan Mondex tidak mengizinkan uang tunai ada di luar kartu.

  • VisaCash - kartu debit yang melacak kartu di server.

  • Proton - bentuk lain dari E-cash.

  • MPCOS-EMV - kartu serba guna yang memungkinkan Anda menerapkan jenis mata uang atau token Anda sendiri.

Saya selalu kagum bahwa potongan plastik sekecil itu membutuhkan begitu banyak pembacaan dokumentasi dan menuntut begitu banyak pengetahuan dari pihak pengembang!

Karena tingkat keahlian yang tinggi diperlukan dengan kartu pintar, ada pasar bagi pengembang untuk memasok produk berkemampuan Kacang yang menerapkan standar vertikal menggunakan standar horizontal untuk pasar tempat Anda ingin menjual. Ini berarti Anda dapat mengembangkan kacang yang menggunakan berbagai kombinasi standar horizontal, seperti OpenCard, untuk mengimplementasikan aplikasi tertentu menggunakan beberapa standar industri lain untuk perdagangan atau aplikasi lain.

Berkomunikasi dengan kartu pintar dari applet atau aplikasi Java

Anda tahu apa yang Anda butuhkan untuk menghubungkan semua perangkat keras. Sekarang kita perlu memahami cara menggunakan beberapa API yang memungkinkan kita mengirim perintah dari aplikasi ke pembaca. (Pembaca, pada gilirannya, berkomunikasi dengan kartu, dengan demikian bertindak sebagai perantara sebelum mengirim data ke kartu.) Pembaca kartu pintar menggoyangkan titik kontak emas dan mentransfer data. Kartu akan melakukan sesuatu dengan data dan mengembalikannya ke pembaca, yang kemudian akan mengembalikan data ke aplikasi. Jadi, di mana semua byte ini saat berpindah dari aplikasi Anda ke kartu?

Seperti disebutkan di atas, aplikasi berkomunikasi dengan pembaca, yang kemudian berbicara ke kartu pintar menggunakan standar yang dibahas di atas. Pada dasarnya, seiring berkembangnya teknologi kartu pintar, standar kartu pintar diusulkan oleh ISO. Karakteristik mekanis dan kelistrikan yang ditentukan standar serta protokol untuk berkomunikasi dengan kartu. Petunjuk ke dokumen ISO yang relevan tercantum di bagian Sumber Daya. Sayangnya, grup ISO tidak dapat memberikan standar untuk berkomunikasi dengan pembaca. Jadi, untuk mengirim perintah ke kartu, pertama-tama Anda perlu menemukan perintah yang didukung kartu tersebut, bungkus perintah ini dalam paket perintah ISO, lalu bungkus perintah baru ini dalam pembungkus yang diperlukan untuk pembaca yang bersangkutan. Aplikasi contoh yang disediakan di sini melakukan semua pelapisan ini untuk Anda.

Unit Data Protokol Aplikasi (APDU)

Unit dasar pertukaran dengan kartu 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 kartu dan pembaca dilakukan dengan APDU. APDU dapat dianggap sebagai paket data yang berisi instruksi lengkap atau respons lengkap dari kartu. Untuk menyediakan fungsionalitas ini, APDU memiliki struktur yang terdefinisi dengan baik yang ditentukan dalam sejumlah dokumen ISO yang termasuk dalam keluarga spesifikasi 7816.

APDU terdiri dari bidang-bidang berikut:

Format APDU Perintah

CLA INS P1 P2 Lc Data Le

Format APDU Respon

Data SW1 SW2

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