BAB 4 OBJEK PADA JAVA CARD

Teknologi Java Card dengan JCRE dan appletnya membuat objek untuk mewakili, menyimpan, dan memanipulasi data. Applet ditulis dengan menggunakan bahasa pemrograman Java. Applet yang dapat berjalan di kartu adalah objek dari kelas applet.

Objek dalam platform Java Card berdasarkan aturan bahasa pemrograman Java sebagai berikut:

  • Semua objek di platform Java Card adalah instans dari kelas-kelas atau tipe array, yang punya kelas root yang sama yaitu java.lang.Object
  • Field dalam objek baru atau komponen dalam array baru di set ke nilai defaultnya (nol, null, atau false) kecuali ada inisialisasi ke beberapa nilai lain dalam konstruktor.

Teknologi Java Card mendukung objek persisten dan transien. Akan tetapi, konsep objek persisten dan transien dan mekanisme untuk mendukungnya dalam platform Java Card tidak sama dengan platform Java.

MODEL MEMORI JAVA CARD

Smart card mempunyai 3 jenis memori, yaitu ROM, RAM, dan EEPROM. ROM adalah memori yang hanya dibaca dan memori yang paling murah diantara ke-3 memori. Program dan data di-burn ke dalam ROM saat kartu diproduksi. RAM dan EEPROM dapat dibaca dan ditulisi. RAM kehilangan isinya ketika tidak ada daya, akan tetapi isi EEPROM tetap disimpan. Operasi menulis ke EEPROM biasanya 1.000 kali lebih lambat daripada operasi menulis ke RAM. Disamping itu, sebuah sel RAM cenderung 4 kali lebih besar daripada sebuah sel EEPROM. Smart card saat ini umumnya menyediakan EEPROM 16 K dan RAM 1K.

Model memori Java Card dipengaruhi oleh jenis memori dalam smart card dan karakteristik fisiknya. Sistem Java Card meletakkan kode JCRE (JCVM, kelas API, dan software lain) dalam ROM. Kode applet dapat juga disimpan dalam ROM. RAM digunakan untuk penyimpanan yang bertempo. Stack runtime pada Java Card dialokasikan dalam RAM. Hasil pertengahan, parameter pada metode, dan variabel lokal diletakkan dalam stack. Metode native (misalnya komputasi kriptografi) juga menyimpan hasil pertengahannya dalam RAM. Data yang masih dipakai seterusnya, disimpan dalam EEPROM.

JCRE dan objek applet menggambarkan informasi yang perlu disimpan ketika daya dihilangkan. Perbandingan ukuran RAM/EEPROM dalam smart card secara alami membuat ruang objek dalam EEPROM. Oleh karena itu, penggunaan operator baru, secara otomatis mengiinstansiasi objek persisten dalam EEPROM.

Akan tetapi, ada objek yang sering diakses, datanya (isi dari field-nya) tidak perlu disimpan. Maka dari itu, teknologi Java Card juga mendukung objek transien yang terletak dalam RAM. Objek transien dibuat dengan memanggil API Java Card.

Objek persisten dan transien dalam platform Java

    Dalam platform Java, objek dibuat dalam RAM. Objek secara otomatis dihilangkan ketika JVM mati, atau ketika objek dikumpulkan oleh garbage collector. Atribut, field, dan informasi keadaan dari beberapa objek dapat disimpan dengan menggunakan serialisasi objek dan mekanisme deserialisasi. Serialisasi objek menyimpan keadaan yang sedang berlangsung dan atribut objek dalam urutan byte. Urutan kemudian dideserialisasi untuk mengembalikan onjek dengan keadaan dan atribut yang sama. Bahasa Java juga mendukung keyword “transient”. Field ditandai dengan transient untuk menunjukkan bahwa mereka bukan bagian dari persisten objek. Field transien tidak disimpan selama serialisasi objek. Teknologi Java Card tidak mendukung serialisasi objek atau keyword “transient”.

OBJEK PERSISTEN

Memori dan data dari objek persisten disimpan saat sesi CAD. Objek persisten punya ciri-ciri sebagai berikut:

  • Objek persisten dibuat oleh operator baru
  • Objek persisten menangani keadaan dan nilai saat sesi CAD
  • Beberapa update kepada satu field dalam objek persisten bersifat atomik. Sehingga, jika kartu kehilangan daya atau kegagalan terjadi selama update, field dikembalikan ke nilai sebelumnya.
  • Sebuah objek persisten dapat dihubungkan oleh sebuah field dalam sebuah objek transien.
  • Sebuah field dalam sebuah objek persisten dapat menghubungkan sebuah objek transien.
  • Jika sebuah objek persisten tidak dihubungkan oleh objek lain, maka objek persisten tidak dapat terjangkau atau dapat di garbage collected.

Ketika sebuah instance applet dibuat, seperti pada objek persisten, ruang applet dan data akan disimpan terus dari satu sesi CAD ke sesi berikutnya.

OBJEK TRANSIEN

Istilah objek transien adalah sebutan yang keliru. Istilah ini dapat menjadi suatu kesalahpahaman yang menganggap objeknya-lah yang bersifat temporary (saat daya hilang, objek hilang juga). Kenyataannya, istilah objek transien bermakna bahwa isi field milik objek bersifat temporary. Seperti objek persisten, ruang yang dialokasikan untuk objek transien disimpan dan tidak dapat dikembalikan kecuali mengimplementasikan garbage collector.

Sebuah applet hanya membuat objek transien sekali selama lifetime-nya dan harus menyimpan referensi (penghubung) objek dalam field persisten. Setelah kartu diberi daya, applet dapat menggunakan referensi objek yang sama untuk mengakses objek transien, meskipun data objek dari sesi sebelumnya hilang.


Ciri-ciri objek transien

Pada Java Card 2.1, hanya array dengan tipe primitif atau array yang referensinya Object yang dapat disebut transien. Tipe primitive dalam platform Java Card adalah byte, short, int dan boolean. Dalam artikel ini, istilah objek transien dan array transien digunakan secara bergantian. Objek transien dalam platform Java Card mempunyai ciri-ciri sebagai berikut:

  • Objek transien dibuat dengan memanggil API Java Card.
  • Objek transien tidak menangani keadaan dan nilai selama sesi CAD. Fiels objek transien dihapus menjadi nilai default (nol, false, atau null) pada peristiwa tertentu.
  • Beberapa update pada satu field dalam objek transien bersifat tidak atomik. Sehingga, ketika kartu kehilangan daya atau terjadi suatu kegagalan selama update, field tidak dikembalikan ke nilai sebelumnya. Jika operasi menulis pada field objek transien berupa sebuah transaksi, transaksi yang gagal tidak akan pernah menyebabkan field objek transien kembali ke nilai sebelumnya.
  • Sebuah objek transien dapat dihubungkan oleh sebuah field dalam sebuah objek persisten.
  • Sebuah field dalam sebuah objek transien dapat menghubungkan sebuah objek persisten.
  • Jika objek transien tidak dihubungkan oleh objek lain, maka menjadi tidak dapat dijangkau atau dapat di garbage collected.
  • Menulis pada field objek transien tidak mempunyai masalah performansi, karena RAM mempunyai waktu siklus menulis yang lebih cepat dibandingkan EEPROM.

Ciri-ciri objek transien tersebut membuatnya cocok untuk data applet yang kecil, yang bertempo, dan yang sering dimodifikasi, tapi tidak perlu disimpan di sesi CAD. Developer applet harus menjamin bahwa data temporary tersebut disimpan dalam array transien. Objek transien mengurangi penggunaan memori persisten, menjamin performansi operasi menulis yang lebih baik, dan menambahkan keamanan tambahan untuk melindungi data yang penting. Aturan sederhana objek transien adalah jika data temporary sedang di-update berkali-kali untuk tiap pemrosesan APDU, developer applet harus memindahkannya ke dalam array transien.

Jenis-jenis objek transien

Ada 2 jenis objek transien, yaitu CLEAR_ON_RESET dan CLEAR_ON_DESELECT. Kedua jenis objek transien didasarkan oleh kejadian yang menyebabkan JCRE harus menghapus filed pada objek.

Objek transien CLEAR_ON_RESET digunakan untuk melindungi data yang perlu disimpan pada saat pemilihan applet tapi tidak pada saat reset kartu. Contohnya, sebuah kunci sesi utama kartu harus dinyatakan sebagai CLEAR_ON_RESET sehingga kunci sesi yang sama dapat di-sharing diantara applet-applet yang dipilih selama satu sesi CAD. Ketika kartu reset, field pada objek transien CLEAR_ON_RESET dihapus. Sebuah reset kartu dapat disebabkan oleh reset sinyal yang dikirim ke kartu (warm reset) atau dengan mengubah power supply mati dan hidup lagi.

Objek transien CLEAR_ON_DESELECT digunakan untuk melindungi data yang harus disimpan selama sebuah applet dipilih tapi bukan pada pemilihan applet atau reset kartu. Contohnya, sebuah kunci sesi yang dimiliki applet dinyatakan sebagai CLEAR_ON_DESELECT sehingga ketika applet di-deselect, kunci sesi secara otomatis dihapus oleh JCRE. Ini merupakan kemanan dengan tindakan pencegahan sehingga applet lain tidak dapat menemukan data kunci sesi dan tidak dapat berpura-pura menjadi applet yang dipilih sebelumnya yang memiliki objek kunci.

Karena reset kartu secara implisit men-deselect applet yang sedang dipilih, filed pada objek CLEAR_ON_DESELECT juga dihapus oleh kejadian yang dispesifikasikan untuk CLEAR_ON_RESET. Dengan kata lain, objek CLEAR_ON_DESELECT juga merupakan objek CLEAR_ON_RESET. Disamping itu, objek transien CLEAR_ON_DESELECT mempunyai karakteristik tambahan dikarenakan adanya firewall applet.

Membuat objek transien

Dalam teknologi Java Card, objek transien dibuat dengan menggunakan salah satu dari metode dalam kelas JCSystem.


    Parameter pertama, “length”, dalam masing-masing metode menspesifikasikan panjang array transien yang diperlukan. Parameter kedua, “event”, menunjukkan jenis objek transien. 2 konstanta dalam kelas JCSystem digunakan untuk menunjukkan 2 jenis array transien:

public static final byte CLEAR_ON_RESET;

public static final byte CLEAR_ON_DESELECT;

    Pecahan kode berikut menunjukkan cara pembuatan array CLEAR_ON_DESELECT:

byte[] buffer = JCSystem.makeTransientByteArray (BUFFER_LENGTH, JCSystem.CLEAR_ON_DESELCT);

Meng-queri-kan objek transien

Applet mungkin perlu mengakses objek yang dibuat oleh applet yang berbeda. Kelas JCSystem menyediakan metode query yang mudah untuk applet yang membantu memutuskan apakah sebuah objek yang sedang diakses adalah transien atau bukan:

public static byte isTransient (Object theObject);

Metode “isTransient” mengembalikan konstanta jenis objek transien (CLEAR_ON_RESET atau CLEAR_ON_DESELECT) atau konstanta JCSystem.NOT_A_TRANSIENT_OBJECT untuk menunjukkan objek null atau merupakan objek persisten.

SEDIKIT TENTANG PEMBUATAN DAN PENGHAPUSAN OBJEK

Karena memori dalam smart card sangat terbatas, baik objek persisten maupun transien mau tak mau harus dibuat. Jika ruang nonvolatile tidak cukup saat applet mencoba membuat objek persisten menggunakan operator baru, JCRE akan membuang sebuah SystemException dengan reason code JCSystem.NO_RESOURCE. Ketika applet memanggil salah satu metode untuk membuat objek transien dan ruang RAM tidak cukup, JCRE membuang SystemException dengan reason code JCSystem.NO_TRANSIENT_SPACE. Reason code sama dengan pesan detail yang terkandung dalam objek eksepsi Java.

Sekali dibuat, objek persisten dan transien dapat dijangkau jika direferensikan (dihubungkan) dari stack, dari field kelas static, dari field objek lainnya yang ada, atau dari JCRE. Ketika semua referensi ke sebuah objek dihapus, objek menjadi tidak dapat dijangkau. Apakah ruang yang ditempati objek dapat dikembalikan atau tidak tergantung apakah garbage collector diimplementasikan dalam JCVM. Teknologi Java Card tidak membutuhkan JCRE yang mempunyai garbage collector, karena tidak layak diimplementasikan dalam smart card berteknologi rendah. Bab 13 menyediakan tips pemrograman bagaimana menggunakan ulang objek dalam applet ketika tidak ada garbage collector.

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

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