BAB 7 APPLET JAVA CARD (BAGIAN 1)

Aplikasi yang berjalan pada smart card Java disebut applet. Bab ini memperkenalkan framework untuk menulis program applet. Bab ini dibagi menjadi 7 bagian. Bagian pertama memberikan gambaran menyeluruh tentang bagaimana kerja applet di dalam JCRE. Sisanya membahas mengenai teknik menulis program applet.

Fitur applet dijelaskan dengan lengkap pada bab selanjutnya. Bab 8 dan 9 membahas penanganan perintah APDU dan object sharing antara applet.

APPLET

Applet Java Card adalah aplikasi smart card yang ditulis dalam bahasa pemrograman Java dan sesuai dengan aturan sehingga dapat berjalan dalam JCRE. Applet yang berjalan dalam JCRE adalah instans dari kelas applet yang berasal dari javacard.framework.Applet. Seperti objek persisten yang lain, applet berada di kartu selama lifetime kartu. Platform Java Card medukung lingkungan multiaplikasi. Tiap instans applet diidentifikasi secara unik oleh AID (lihat bab 3 untuk penjelasan lengkap tentang AID).

Penginstalan dan pengeksekusian applet

Setelah paket yang mendefinisikan applet sudah di-load pada smart card Java dan dihubungkan dengan paket lain pada kartu, kehidupan applet dimulai saat instans applet dibuat dan diregistrasikan dengan JCRE. JCRE merupakan lingkungan yang hanya membolehkan satu thread. Ini berarti bahwa hanya satu applet yang berjalan pada satu waktu. Saat applet pertama kali diinstal, applet dalam keadaan tidak aktif. Applet menjadi aktif saat dipilih secara eksplisit oleh aplikasi host.


Applet, seperti beberapa aplikasi smart card, merupakan aplikasi reaktif. Setelah dipilih, applet menunggu aplikasi yang berjalan pada sisi host agar mengirim perintah. Applet dapat mengeksekusi perintah dan mengembalikan respon ke host. Perintah dan respon yang bergantian ini berlangsung sampai applet yang baru dipilih atau kartu dikeluarkan dari CAD. Applet tetap dalam keadaan tidak aktif sampai dipilih lagi nantinya.

Komunikasi applet

Komunikasi antara applet dan aplikasi host dilakukan melalui pertukaran APDU. APDU bisa berisi sebuah perintah atau respon. Aplikasi host mengirim perintah ke applet dan applet mengembalikan respon. (lihat bab 2 untuk penjelasan lengkap mengenai APDU)

Ketika aplikasi host ingin memilih applet, aplikasi host mengirim APDU yang menspesifikasikan perintah SELECT dan AID dari applet yang dibutuhkan. JCRE mencari tabel internalnya untuk mencocokkan AID applet dengan AID yang ada dalam perintah. Jika cocok, JCRE mulai memilih applet. Jika tidak, semua APDU tersebut (termasuk APDU SELECT) diteruskan ke applet sampai applet terpilih.


KELAS javacard.framework.Applet

Applet diimplementasikan dengan pembuatan subclass dari javacard.framework.Applet. JCRE memanggil metode “install”, “select”, “process”, atau “deselect” (yang didefinisikan dalam kelas Applet) saat ingin menginstal, memilih, atau men-deselect applet atau meminta applet memporoses C-APDU.

Metode dalam tabel dibawah ini adalah metode yang dipanggil oleh JCRE saat pembuatan atau pengeksekusian applet.


JCRE memanggil metode install untuk membuat sebuah instans applet. Instans applet didaftarkan pada JCRE menggunakan salah satu dari 2 metode register.

Saat menerima sebuah SELECT APDU, JCRE memeriksa apakah applet siap untuk dipilih. Jika ya, JCRE men-deselect applet yang pada waktu itu sedah dipilih dengan memanggil metode deselect. Dalam metode deselect, applet melakukan beberapa pembersihan dan pembukuan sebelum dinonaktifkan. Kemudian JCRE memilih applet yang baru dengan memanggil metode select. Applet melakukan beberapa inisialisasi yang diperlukan dalam metode select.

Setelah pemilihan berhasil, tiap APDU (termasuk SELECT APDU) dikirim ke applet yang aktif melalui panggilan ke metode process-nya. Metode process adalah metode penting dalam kelas applet. Metode ini memproses C-APDU dan menyediakan fungsi-fungsi applet.

Metode install, select, deselect, dan process adalah metode entry point applet yang dipanggil JCRE. Kelas Applet dasar menyediakan hanya perilaku default untuk metode. Applet perlu mengesampingkan
beberapa atau semua metode ini untuk menerapkan fungsi-fungsinya.

METODE install

Metode install biasanya dipanggil oleh JCRE sebagai langkah terakhir saat instalasi applet untuk membuat sebuah instans applet (applet yang akan berjalan dalam kartu). Instalasi applet bisa dilihat pada bab 3. Metode install sama dengan metode main dalam aplikasi Java. Argumen pada metode install merupakan parameter instalasi applet. Parameter tersebut sama dengan argumen yang disediakan pada metode main.

Metode install membuat instans applet dengan menggunakan operator baru yang diikuti dengan pemanggilan konstruktor applet. Dalam konstruktor, applet biasanya melakukan tugas-tugas berikut:

  • Membuat objek yang applet perlukan selama lifetime-nya.
  • Menginisialisasi objek dan variabel internal applet.
  • Mendaftarkan instans applet pada JCRE dengan memanggil salah satu dari metode register yang didefinisikan dalam kelas Applet.

Registrasi applet menandakan permulaan lifetime applet. Applet harus mendaftar pada JCRE sehingga dapat dipilih dan berjalan.

Kode berikut memperlihatkan sebuah contoh pembuatan applet wallet dengan menggunakan konstruktor yang default.


Applet dapat mendefinisikan konstruktor yang mengambil parameter instalasi.

public walletApp (byte[] bArray, short bOffset, byte bLength) {…}

Parameter instalasi menyediakan data tambahan untuk inisialisasi dan personalisasi applet.

Setelah metode install berhasil diterapkan dan memberikan hasilnya, applet siap dipilih dan memproses C-APDU yang datang. Hanya satu instan applet yang dapat dibuat dan didaftarkan dari satu pemanggilan metode install.

Jika terjadi kegagalan metode install dan sebelum berhasil memanggil metode register, JCRE akan melakukan pembersihan yang perlu untuk memperoleh kembali resource kartu ketika memperoleh kembali kendalinya. JCRE menghapus instans applet serta objek lain yang dibuat metode install dan memulihkan keadaan JCRE ke keadaan sebelumnya. Tidak perlu mengatur sebuah transaksi dalam metode install, karena JCRE menjamin metode install bersifat transaksional. Registrasi applet memberi tanda keberhasilan transaksi. Oleh karena itu, penting untuk mendaftarkan applet sebagai langkah terakhir dalam pembuatan applet. Jika error terjadi setelah metode register, applet akan tetap teregistrasi tapi kemungkinan berada dalam keadaan lumpuh.

Perhatikan bahwa metode install dalam kelas Applet dasar hanyalah prototipe. Applet harus mendefinisikan metode install dari prototype yang sama.

Pembuatan objek dalam konstruktor applet

Walaupun objek dan array dapat dibuat pada beberapa titik dalam pengeksekusian applet, disarankan jika memungkinkan, alokasi tersebut hanya dilakukan saat inisialisasi applet. Objek yang mungkin diperlukan saat eksekusi applet harus di alokasikan sebelumnya dalam konstruktor, untuk menjamin applet tidak akan pernah gagal karena kekurangan memori.

Konstruktor dipanggil di dalam metode install. Jika JCRE mendeteksi terjadi kekurangan resource dan tidak bisa mengalokasikan ruang memori untuk applet saat pembuatan objek atau saat beberapa proses alokasi resource yang lain, JCRE akan menghapus applet dan meminta kembali semua ruang memori. Sehingga, tidak akan ada applet yang belum selesai dibuat dan akan tertinggal di kartu dalam keadaan tidak bisa berjalan.

Applet seharusnya tidak membuat objek melebihi kebutuhannya, karena memori yang ditempati oleh objek yang tidak digunakan, tidak dapat digunakan kembali atau di-share oleh applet lain atau JCRE.

Pendaftaran instans applet dengan JCRE

Untuk mendaftarkan applet dengan JCRE, gunakan salah satu dari dua metode register yang disediakan dalam kelas Applet dasar.

protected final void register ();

atau

protected final void register (byte[] bArray, short bOffset, byte bLength);

Metode register mempunyai dua fungsi. Pertama, metode ini menyimpan sebuah referensi pada instans applet dengan JCRE. Kedua, metode ini memberikan AID untuk instans applet. Mengingat kembali bab 3, instans applet pada kartu diidentifikasikan secara unik oleh AID. File CAP mendefinisikan kelas applet yang berisi AID default. Namun, applet boleh memilih mempunyai AID yang berbeda. AID default dapat disediakan dalam parameter instalasi.

Metode registrasi yang pertama (yang tidak ada argumennya) mendaftarkan applet dengan JCRE menggunakan AID default dari file CAP. Metode register yang kedua (yang dengan argument) mendaftarkan applet dengan JCRE menggunakan AID yang telah dispesifikasikan dalam argument bArray. Argumen bOffset menspesifikasikan offset awal dalam bArray, dan bLength menspesifikasikan panjang AID dalam byte.

Pemrosesan parameter instalasi

Biasanya, saat instalasi applet, parameter instalasi dikirim ke kartu bersama dengan file CAP yang mendefinisikan sebuah applet. JCRE kemudian menyediakan parameter instalasi ke applet melalui argument pada metode install. Metode install menyediakan 3 argumen:

  • byte[] bArray : array yang berisi parameter instalasi.
  • short bOffset : offset awal dari bArray.
  • byte bLength : panjang data parameter bArray dalam byte.

Isi dan format dari parameter instalasi didefinisikan oleh pembuat applet atau penerbit kartu. Sering kali, parameter instalasi berisi parameter konfigurasi applet dan nilai inisialisasi applet. Parameter konfigurasi dapat digunakan untuk menspesifikasikan ukuran file internal, sebuah array, dan lain-lain. Dalam hal ini, applet dapat mengalokasikan cukup memori untuk antisipasi dan menghindari sampah di memori. Nilai inisialisasi applet, sebagai contohnya, dapat menspesifikasikan balance awal, ID pemegang kartu, dan nomer account dalam electronic wallet. Kegunaan lain dari parameter instalasi adalah menyediakan AID yang berbeda dengan AID default. Contohnya, misalnya dibutuhkan dua applet wallet: satu untuk kegunaan pribadi dan yang lain untuk bisnis. Dalam hal ini, JCRE harus memanggil metode install applet dua kali. Di tiap instalasi, instans applet wallet dibuat dengan AID yang unik.

Misalkan pembuat applet wallet menspesifikasikan array byte parameter instalasi terdiri dari bagian-bagian sebagai berikut:

  1. 1 byte : jumlah record dalam log transaksi.
  2. 4 byte : ID wallet.
  3. 1 byte : balancae awal pada wallet.
  4. 1 byte : ukuran array berikutnya.
  5. Byte array berukuran bebas : AID untuk instans applet. Jika array ini kosong, applet menggunakan AID default dari file CAP.

Untuk membuat sebuah applet wallet untuk pribadi menggunakan AID default, kemungkinan parameter instalasinya adalah [0x10, 0x1, 0x2, 0x3, 0x4, 0x32, 0] byte, yang akan diterjemahkan oleh applet dengan:

  • Jumlah transaksi dalam log transaksi = 0x10 = 16
  • ID wallet = [0x1, 0x2, 0x3, 0x4]
  • Balance awal = 0x32 = 50
  • AID = AID default dari file CAP

Untuk membuat sebuah instans wallet yang menangani biaya-biaya untuk bisnis dengan AID lain yang tidak default, kemungkinan parameter instalasinya adalah [0x10, 0x4, 0x3, 0x2, 0x1, 0x64, 0xF, ‘B’, ‘A’, ‘N’, ‘K’, ‘_’, ‘w’, ‘a’, ‘l’, ‘l’, ‘e’, ‘t’, ‘_’, ‘B’, ‘I’, ‘S’], yang akan diterjemahkan oleh applet dengan:

  • Jumlah transaksi dalam log transaksi = 0x10 = 16
  • ID wallet = [0x4, 0x3, 0x2, 0x1]
  • Balance awal = 0x64 = 100
  • AID = [‘B’, ‘A’, ‘N’, ‘K’, ‘_’, ‘w’, ‘a’, ‘l’, ‘l’, ‘e’, ‘t’, ‘_’, ‘B’, ‘I’, ‘S’]

Kode berikut mendemonstrasikan bagaimana applet wallet memproses parameter instalasi dalam konstruktor:


Isi bArray bukan milik applet. Untuk alasan keamanan, JCRE menghapus array saat pengembalian pada metode install. Jika applet ingin melindungi beberapa data tersebut, applet harus mengkopi data ke objeknya. Misal pada contoh di atas, ID wallet dalam bArray dikopi ke dalam field wallet_id.

Platform Java Card mendukung parameter instalasi sampai dengan 32 byte. Oleh karena itu, nilai maksimal dari bLength adalah 32. Pada bab 8 kamu akan melihat JCRE mempekerjakan sebuah buffer untuk mengirim APDU. Ukuran minimal buffer APDU adalah 37, meliputi 5 byte header dan 32 byte data. Nilai 32 dipilih sebagai ukuran maksimum parameter instalasi sehingga mereka dapat ditampung dalam buffer dengan satu I/O APDU.

Inisialisasi applet

Setelah pengembalian pada metode install berhasil, applet siap melakukan fungsi-fungsinya. Applet yang kompleks perlu personalisasi informasi lebih lanjut sebelum siap berjalan. Informasi tersebut tidak semua tersedia pada waktu pembuatan applet atau bisa jadi melebihi kapasitas parameter instalasi (32 byte). Dalam hal ini, skema yang terpisah (yang dispesifikasikan pembuat atau penerbit applet) mungkin diperlukan agar applet menyelesaikan personalisasinya dalam metode process. Pada skema tersebut, applet perlu menentukan variabel internal dan bertanggung jawab melacak keadaan transisi ini. Untuk memperoleh personalisasi informasi, applet mempertukarkan APDU dengan host.

Sumber: from book Java card Technology for Smart Card, Architecture and Programmer’s Guide

This entry was posted in Java Card. Bookmark the permalink.