Cara menulis applet Kartu Java: Panduan pengembang

Artikel ini memandu Anda melalui proses pembuatan applet dompet elektronik sederhana dan memberikan arahan untuk membuat applet dan membuat kodenya. Jika Anda membutuhkan penyegaran tentang dasar-dasar teknologi Java Card, lihat Pengembang Java Maret 1998kolom, "Memahami Java Card 2.0", yang memberikan gambaran umum tentang smart card dan menjelaskan arsitektur sistem, API, dan lingkungan runtime dari teknologi Java Card. Untuk konsistensi, artikel ini menggunakan contoh applet dompet yang sama seperti yang digunakan di kolom Maret 1998. Namun, applet dompet yang akan kami gunakan dalam artikel ini telah diperbarui untuk mencerminkan perubahan pada API di Java Card 2.1. Selain itu, walaupun artikel sebelumnya berfungsi sebagai pengantar keseluruhan tentang teknologi Java Card, artikel ini berfokus pada penulisan applet untuk Java Card 2.1.

Dasar-dasar Kartu Java

Untuk tujuan artikel ini, istilah

Kartu Java

menunjukkan kartu pintar yang mendukung teknologi Kartu Java. Teknologi Java Card memungkinkan applet yang ditulis dalam bahasa Java dijalankan pada smart card. Ini mendefinisikan a

Lingkungan Waktu Proses Kartu Java

(JCRE) dan menyediakan

kelas dan metode

untuk membantu pengembang membuat applet. Applet berjalan di dalam JCRE. JCRE dan API dimodelkan setelah spesifikasi kartu pintar

ISO 7816

.

Ketika Kartu Java dimasukkan ke dalam perangkat penerimaan kartu (CAD), CAD memilih applet pada kartu dan mengirimkannya serangkaian perintah untuk dieksekusi. Setiap applet diidentifikasi dan dipilih oleh pengenal aplikasinya (AID). Perintah seperti perintah pemilihan diformat dan dikirimkan dalam bentuk unit data protokol aplikasi (APDU). Applet membalas setiap perintah APDU dengan kata status (SW) yang menunjukkan hasil operasi. Sebuah applet secara opsional dapat membalas perintah APDU dengan data lain.

Arsitek applet

Seperti halnya pengembangan aplikasi perangkat lunak, sebelum duduk dan menulis applet Java Card, Anda harus terlebih dahulu melalui tahap desain. Dalam fase ini, Anda menentukan arsitektur applet.

Empat langkah terdiri dari fase desain applet:

  1. Tentukan fungsi applet
  2. Minta dan tetapkan AID ke applet dan paket yang berisi kelas applet
  3. Rancang struktur kelas program applet
  4. Tentukan antarmuka antara applet dan aplikasi terminal

Di bagian berikut, kita akan menggunakan contoh applet dompet untuk melihat secara mendetail pada setiap langkah dalam proses desain applet.

Menentukan fungsi applet

Contoh applet dompet kami akan menyimpan uang elektronik dan mendukung fungsi kredit, debit, dan cek saldo.

Untuk membantu mencegah penggunaan yang tidak sah atas kartu tersebut, ini berisi algoritma keamanan. Algoritme ini mengharuskan pengguna untuk memasukkan PIN, string paling banyak delapan digit. Pengguna kartu mengetik PIN-nya pada keypad yang terhubung ke CAD. Algoritme keamanan menyebabkan kartu terkunci setelah tiga kali upaya memasukkan PIN gagal. PIN diinisialisasi sesuai dengan parameter instalasi saat applet dipasang dan dibuat.

PIN harus diverifikasi sebelum transaksi kredit atau debit dapat dilakukan.

Untuk kesederhanaan, katakanlah saldo maksimum kartu adalah 2.767, dan tidak ada transaksi kredit atau debit yang dapat melebihi 27. Jadi, jenis variabel Java shortdan bytedapat mewakili saldo dompet dan jumlah setiap transaksi, masing-masing.

* Applet dompet dunia nyata akan membutuhkan mekanisme keamanan yang jauh lebih canggih untuk mencegah akses yang tidak sah ke dompet.

Menentukan AID

Sebagian besar aplikasi yang Anda kenal diberi nama dan diidentifikasi dengan nama string. Dalam teknologi Java Card, bagaimanapun, setiap applet diidentifikasi dan dipilih oleh AID. Selain itu, setiap paket Java diberikan AID. Ini karena sebuah paket, ketika dimuat pada sebuah kartu, dihubungkan dengan paket lain, yang telah ditempatkan pada kartu melalui AID mereka. Konvensi penamaan ini sesuai dengan spesifikasi kartu pintar seperti yang didefinisikan dalam ISO 7816.

AID adalah urutan byte antara 5 dan 16 byte. Formatnya digambarkan pada Tabel 1.

Pengidentifikasi aplikasi (AID)

Penyedia aplikasi terdaftar nasional (RID)

Ekstensi pengenal aplikasi kepemilikan (PIX)

5 byte

0 hingga 11 byte

Tabel 1. Format AID

ISO mengontrol penugasan RID ke perusahaan, dengan setiap perusahaan mendapatkan RID uniknya sendiri dari ISO. Perusahaan mengelola penugasan PIX untuk AID.

Kelas Java dari applet dompet ditentukan dalam paket Java. AID fiktif untuk applet dompet dan paket applet didefinisikan seperti yang diilustrasikan pada Tabel 2.

Paket AID
Bidang Nilai Panjangnya
MEMBERSIHKAN 0xF2, 0x34, 0x12, 0x34, 0x56 5 byte
PIX 0x10, 0x00, 0x00 3 byte
AID Applet
Bidang Nilai Panjangnya
MEMBERSIHKAN 0xF2, 0x34, 0x12, 0x34, 0x56 5 byte
PIX 0x10, 0x00, 0x01 3 byte
Tabel 2. AID fiktif untuk applet dompet dan paket applet

Paket AID dan applet AID memiliki nilai RID yang sama; nilai PIX mereka berbeda pada bit terakhir.

Mendefinisikan struktur kelas dan fungsi metode dari applet

Kelas applet Java Card harus diturunkan dari javacard.framework.Appletkelas tersebut. Kelas ini adalah kelas super untuk semua applet yang berada di Kartu Java. Ini mendefinisikan metode umum yang harus didukung oleh applet untuk berinteraksi dengan JCRE selama masa pakainya.

Tabel 3 mencantumkan metode publik dan dilindungi yang ditentukan di kelas javacard.framework.Applet:

Ringkasan metode

deselect ()

Dipanggil oleh JCRE untuk menginformasikan applet yang sedang dipilih bahwa applet lain (atau yang sama) akan dipilih.
public Shareable

getShareableInterfaceObject (AID client AID, byte parameter)

Dipanggil oleh JCRE untuk mendapatkan objek antarmuka yang dapat dibagikan dari applet server ini atas nama permintaan dari applet klien.
public static void

install (byte[] bArray, short bOffset, byte bLength)

JCRE memanggil metode statis ini untuk membuat turunan dari Appletsubclass.
public abstract void

process (APDU apdu)

Dipanggil oleh JCRE untuk memproses perintah APDU yang masuk.

protected final void

register ()

Metode ini digunakan oleh applet untuk mendaftarkan instance applet ini dengan JCRE dan menetapkan AID default dalam file CAD ke instance applet.

protected final void

register (byte[] bArray, short bOffset, byte bLength)

Metode ini digunakan oleh applet untuk mendaftarkan instance applet ini dengan JCRE dan untuk menetapkan AID yang ditentukan dalam array bArrayke instance applet.
public boolean

select ()

Dipanggil oleh JCRE untuk memberi tahu applet ini bahwa applet telah dipilih.

protected final boolean

selectingApplet ()

Metode ini digunakan oleh applet

process()

metode untuk membedakan

SELECT APDU

perintah yang memilih applet ini dari yang lainnya

SELECT APDU

Perintah APDU yang mungkin berhubungan dengan file atau pemilihan status applet internal.

Tabel 3. Metode publik dan dilindungi yang ditentukan dalam kelas javacard.framework.Applet

Kelas javacard.framework.Appletmenyediakan kerangka kerja untuk eksekusi applet. Metode yang didefinisikan di kelas ini dipanggil oleh JCRE ketika JCRE menerima perintah APDU dari CAD.

Setelah kode applet telah dimuat dengan benar pada Kartu Java dan dihubungkan dengan paket lain pada kartu, kehidupan applet dimulai ketika sebuah contoh applet dibuat dan didaftarkan dengan tabel registri JCRE. Applet harus mengimplementasikan metode statis install()untuk membuat instance applet dan mendaftarkan instance tersebut dengan JCRE dengan menjalankan salah satu dari dua register()metode. The install()Metode mengambil array byte sebagai parameter. Larik ini berisi parameter instalasi untuk menginisialisasi atau mempersonalisasi instance applet.

Applet pada Kartu Java berada dalam tahap tidak aktif sampai dipilih secara eksplisit. Ketika JCRE menerima SELECTperintah APDU, JCRE mencari tabel internalnya untuk applet yang AID-nya cocok dengan yang ditentukan dalam perintah. Jika ditemukan kecocokan, JCRE mempersiapkan applet baru yang akan dipilih. Proses persiapan ini terdiri dari dua langkah: Pertama, jika ada applet yang saat ini dipilih, JCRE membatalkan pilihannya dengan menjalankan deselect()metode. Applet melakukan pekerjaan pembersihan atau pembukuan dalam deselect()metode ini sebelum masuk ke tahap tidak aktif. Kemudian JCRE memanggil select()metode untuk menginformasikan applet baru yang telah dipilih. Applet baru melakukan inisialisasi apa pun yang diperlukan sebelum benar-benar dipilih. Applet kembali truekeselect()metode jika sekarang siap untuk menjadi aktif dan untuk memproses perintah APDU selanjutnya. Jika tidak, applet akan kembali falseuntuk menolak partisipasinya, dan jika demikian, tidak ada applet yang akan dipilih. The javacard.framework.Appletkelas menyediakan implementasi default untuk kedua select()dan deselect()metode. Sebuah subclass dari Appletkelas tersebut dapat menimpa kedua metode ini untuk mendefinisikan perilaku applet selama pemilihan dan pembatalan pemilihan.

Setelah applet dipilih, JCRE meneruskan semua perintah APDU berikutnya (termasuk SELECTperintah) ke metode applet process(). Dalam process()metode ini, applet mengartikan setiap perintah APDU dan melakukan tugas yang ditentukan oleh perintah tersebut. Untuk setiap perintah APDU, applet merespons CAD dengan mengirimkan kembali APDU respons, yang menginformasikan CAD tentang hasil pemrosesan perintah APDU. The process()metode di kelas javacard.framework.Appletadalah metode abstrak: subclass dari Appletkelas harus mengganti metode ini untuk melaksanakan fungsi applet ini.

Dialog perintah-dan-tanggapan ini berlanjut hingga applet baru dipilih atau kartu dihapus dari CAD. Saat batal dipilih, applet menjadi tidak aktif hingga saat berikutnya dipilih.

The getShareableInterfaceObjectMetode ini dimaksudkan untuk komunikasi interapplet. Ini dipanggil oleh applet klien untuk meminta objek antarmuka yang dapat dibagikan dari applet server. Implementasi default metode ini mengembalikan null. Sayangnya, diskusi mendetail tentang berbagi objek dan komunikasi interapplet berada di luar cakupan artikel ini.

Karena SELECTperintah APDU juga diteruskan ke process()metode, selectingApplet()metode tersebut digunakan oleh metode applet process()untuk membedakan SELECTperintah APDU yang memilih applet ini dari semua SELECTperintah APDU lainnya yang mungkin berhubungan dengan file atau pemilihan status applet internal.

Mendefinisikan antarmuka antara applet dan aplikasi terminalnya

Sebuah applet yang berjalan di kartu pintar berkomunikasi dengan aplikasi terminal di CAD menggunakan unit data protokol aplikasi. Intinya, antarmuka antara applet dan aplikasi terminalnya adalah sekumpulan perintah APDU yang disetujui dan didukung oleh applet dan aplikasi terminal.

Primer APDU

Bagian ini memberikan ringkasan perintah APDU untuk membantu Anda mulai menentukan perintah APDU untuk applet dompet. (Detail protokol APDU ditentukan dalam ISO 7816.)

Perintah APDU selalu berupa set pasangan. Setiap pasangan berisi perintah APDU, yang menetapkan perintah, dan APDU respons, yang mengirimkan kembali hasil eksekusi perintah. Di dunia kartu, smart card adalah komunikator reaktif - artinya, mereka tidak pernah memulai komunikasi, mereka hanya menanggapi APDU dari dunia luar. Aplikasi terminal mengirimkan perintah APDU melalui CAD. JCRE menerima perintah, dan memilih applet baru atau meneruskan perintah ke applet yang saat ini dipilih. Applet yang saat ini dipilih memproses perintah dan mengembalikan APDU respons ke aplikasi terminal. APDU Perintah dan APDU respons dipertukarkan secara bergantian antara kartu dan CAD.

Tabel 4 menjelaskan format APDU perintah dan respons.

Perintah APDU

Header wajib Tubuh opsional
CLA INS P1 P2 Lc Bidang data Le
  • CLA (1 byte): Kelas instruksi --- menunjukkan struktur dan format untuk kategori APDU perintah dan respons
  • INS (1 byte): Kode instruksi: menentukan instruksi dari perintah
  • P1 (1 byte) dan P2 (1 byte): Parameter instruksi - selanjutnya memberikan kualifikasi untuk instruksi
  • Lc (1 byte): Jumlah byte yang ada di bidang data perintah
  • Bidang data (byte sama dengan nilai Lc): Urutan byte di bidang data perintah
  • Le (1 byte): Maksimum byte yang diharapkan di bidang data respons terhadap perintah

Respon APDU

Tubuh opsional Trailer wajib
Bidang data SW1 SW2
  • Bidang data (panjang variabel): Urutan byte yang diterima di bidang data respons
  • SW1 (1 byte) dan SW2 (1 byte): Kata status - menunjukkan status pemrosesan di kartu
Tabel 4. Format APDU perintah dan respons

Mendefinisikan perintah APDU

Applet Java Card harus mendukung sekumpulan perintah APDU, yang terdiri dari SELECTperintah APDU dan satu atau lebih perintah APDU proses.

  • The SELECTperintah menginstruksikan JCRE untuk memilih applet pada kartu.
  • Kumpulan perintah proses mendefinisikan perintah yang didukung applet. Ini didefinisikan sesuai dengan fungsi applet.

Teknologi Java Card menentukan pengkodean SELECTperintah APDU. Pengembang applet bebas menentukan pengkodean perintah proses mereka. Namun, perintah proses harus sesuai dengan struktur yang diuraikan di atas.

Secara struktural, SELECTperintah perintah dan perintah proses adalah pasangan APDU perintah dan respons.

Untuk setiap APDU perintah, applet pertama-tama harus mendekode nilai setiap bidang dalam perintah. Jika bidang data opsional disertakan, applet juga harus menentukan format dan strukturnya. Dengan menggunakan definisi ini, applet tahu bagaimana menafsirkan setiap perintah dan membaca datanya. Itu kemudian dapat menjalankan tugas yang ditentukan oleh perintah.