Memahami Java Card 2.0

Artikel ini dimulai dengan ikhtisar kartu pintar dan ulasan singkat tentang ISO 7816, standar kartu pintar. Mengingat latar belakang kartu pintar di kolom Pengembang Java sebelumnya , angsuran ini akan dimulai dengan jawaban atas pertanyaan, "Apa itu Kartu Java?" dan gambaran umum arsitektur sistem Kartu Java. Selanjutnya, kita akan fokus pada banyak masalah khusus untuk Java Card, termasuk siklus hidup Java Card; subset bahasa Java Card 2.0 dan kelas pustaka API; dan keamanan Java Card. Kemudian kita akan membahas lingkungan runtime Kartu Java dan menunjukkan bagaimana Kartu Java bekerja. Kami akan menutup dengan contoh yang mencerahkan: Aplikasi dompet elektronik yang ditulis hanya untuk Kartu Java.

Mulai saat ini, semua referensi ke Java Card secara implisit merujuk ke Java Card 2.0.

Apa itu kartu pintar?

Identik dengan ukuran sebuah kartu kredit, sebuah smart card menyimpan dan memproses informasi melalui sirkuit elektronik yang tertanam dalam silikon di substrat plastik tubuhnya. Ada dua jenis kartu pintar dasar: Kartu cerdas cerdas berisi mikroprosesor dan menawarkan kemampuan membaca, menulis, dan menghitung, seperti komputer mikro kecil. Sebuah kartu memori , di sisi lain, tidak memiliki mikroprosesor dan dimaksudkan hanya untuk penyimpanan informasi. Kartu memori menggunakan logika keamanan untuk mengontrol akses memori.

Semua kartu pintar berisi tiga jenis memori: memori tetap yang tidak dapat berubah; memori yang bisa berubah terus-menerus; dan memori yang bisa berubah non-persisten. ROM, EEPROM, dan RAM adalah memori yang paling banyak digunakan untuk tiga jenis masing-masing di kartu pintar saat ini. Memori persisten juga disebut memori non-volatile. Kami akan menggunakan istilah persisten dan non-volatile secara bergantian dalam artikel ini.

ISO 7816 bagian 1-7, ditentukan oleh Organisasi Standar Internasional, berisi seperangkat standar yang mencakup berbagai aspek kartu pintar. ISO 7816 terdiri dari:

  • Karakteristik fisik (bagian 1)

  • Dimensi dan lokasi kontak (bagian 2)

  • Sinyal elektronik dan protokol Transmisi (bagian 3)

  • Perintah antar-industri untuk pertukaran (bagian 4)

  • Pengidentifikasi aplikasi (Bagian 5)

  • Elemen data antar industri (Bagian 6)

  • Perintah antar-industri untuk SCQL (Bagian 7)

Diagram berikut mengilustrasikan karakteristik fisik dari smart card, yang didefinisikan dalam ISO 7816, bagian 1.

Untuk lebih lanjut tentang ISO 7816 dan kartu pintar, lihat "Kartu pintar: Primer."

Biasanya, kartu pintar tidak berisi catu daya, layar, atau keyboard. Ini berinteraksi dengan dunia luar menggunakan antarmuka komunikasi serial melalui delapan titik kontaknya. Dimensi dan lokasi kontak tercakup dalam bagian 2 dari ISO 7816. Diagram ini menunjukkan kontak pada kartu pintar.

Kartu pintar dimasukkan ke dalam Perangkat Penerimaan Kartu (CAD), yang dapat terhubung ke komputer lain. Istilah lain yang digunakan untuk Perangkat Penerimaan Kartu adalah terminal , pembaca , dan IFD (perangkat antarmuka). Semuanya menyediakan fungsi dasar yang sama, yaitu untuk memasok daya ke kartu dan untuk membuat sambungan pembawa data.

Ketika dua komputer berkomunikasi satu sama lain, mereka bertukar paket data, yang dibangun mengikuti seperangkat protokol. Demikian pula, kartu pintar berbicara ke dunia luar menggunakan paket datanya sendiri - disebut APDU (Application Protocol Data Units). APDU berisi perintah atau pesan respons. Dalam dunia kartu, model master-slave digunakan dimana smart card selalu memainkan peran pasif. Dengan kata lain, smart card selalu menunggu perintah APDU dari terminal. Kemudian menjalankan tindakan yang ditentukan dalam APDU dan membalas terminal dengan APDU tanggapan. APDU perintah dan APDU respons dipertukarkan secara bergantian antara kartu dan terminal.

Tabel berikut menggambarkan format APDU perintah dan respons. Struktur APDU dijelaskan dalam ISO 7816, bagian 4.

Perintah APDU
Header Wajib Badan Kondisional
CLA INS P1 P2 Lc Bidang data Le

Header mengkodekan perintah yang dipilih. Ini terdiri dari empat bidang: kelas (CLA), instruksi (INS), dan parameter 1 dan 2 (P1 dan P2). Setiap bidang berisi 1 byte:

  • CLA: Kelas byte. Di banyak kartu pintar, byte ini digunakan untuk mengidentifikasi aplikasi.

  • INS: Byte instruksi. Byte ini menunjukkan kode instruksi.

  • P1-P2: Byte parameter. Ini memberikan kualifikasi lebih lanjut untuk perintah APDU.

Lc menunjukkan jumlah byte dalam bidang data dari perintah APDU; Le menunjukkan jumlah byte maksimum yang diharapkan dalam bidang data dari APDU respons berikut.

Respon APDU
Badan Kondisional Trailer Wajib
Bidang data SW1 SW2

Byte status SW1 dan SW2 menunjukkan status pemrosesan dari perintah APDU di kartu.

Apa itu Kartu Java?

Kartu Java adalah kartu pintar yang mampu menjalankan program Java. Spesifikasi Java Card 2.0 dipublikasikan di //www.javasoft.com/javacard. Ini berisi informasi rinci untuk membangun mesin virtual Java Card dan antarmuka pemrograman aplikasi (API) di kartu pintar. Persyaratan sistem minimum adalah 16 kilobyte memori hanya baca (ROM), 8 kilobita EEPROM, dan 256 byte memori akses acak (RAM).

Arsitektur sistem pada Java Card diilustrasikan pada gambar berikut.

Seperti yang ditunjukkan pada gambar, Java Card VM dibangun di atas sirkuit terintegrasi (IC) tertentu dan implementasi sistem operasi asli. Lapisan JVM menyembunyikan teknologi milik pabrikan dengan bahasa umum dan antarmuka sistem. Kerangka kerja Kartu Java mendefinisikan sekumpulan kelas Antarmuka Pemrograman Aplikasi (API) untuk mengembangkan aplikasi Kartu Java dan untuk menyediakan layanan sistem untuk aplikasi tersebut. Industri atau bisnis tertentu dapat menyediakan pustaka tambahan untuk menyediakan layanan atau untuk menyempurnakan model sistem dan keamanan. Aplikasi Java Card disebut applet . Beberapa applet dapat berada di satu kartu. Setiap applet diidentifikasi secara unik oleh AID -nya (pengenal aplikasi), sebagaimana didefinisikan dalam ISO 7816, bagian 5.

Hal penting yang perlu diingat adalah apa yang bukan merupakan kartu pintar : Mereka bukan komputer pribadi. Mereka memiliki sumber daya memori dan daya komputasi yang terbatas. Pengguna tidak boleh menganggap Java Card 2.0 hanya sebagai versi JDK yang dipreteli.

Masa pakai Kartu Java

Masa pakai Kartu Java dimulai saat OS asli, VM Kartu Java, pustaka kelas API, dan secara opsional, applet dibakar ke ROM. Proses penulisan komponen permanen ke dalam memori chip yang tidak dapat diubah untuk menjalankan perintah yang masuk disebut masking .

Sebelum masuk ke dompet Anda, Kartu Java harus melalui inisialisasi dan personalisasi. Inisialisasi mengacu pada memuat data umum ke dalam memori non-volatile kartu. Data ini identik di sejumlah besar kartu dan tidak spesifik untuk individu; contohnya mungkin nama penerbit atau manufaktur.

Langkah selanjutnya, personalisasi, melibatkan pemberian kartu kepada seseorang. Itu dapat terjadi melalui personalisasi fisik atau melalui personalisasi elektronik. Personalisasi fisik mengacu pada pengukiran atau ukiran laser nama dan nomor kartu Anda pada permukaan plastik kartu. Personalisasi elektronik mengacu pada pemuatan data pribadi ke dalam memori non-volatile kartu, misalnya, kunci pribadi, nama, dan nomor pin Anda.

Inisialisasi dan Personalisasi bervariasi dari vendor ke vendor dan penerbit ke penerbit. Di keduanya, EEPROM (sejenis memori non-volatile) sering digunakan untuk menyimpan data.

Pada titik ini, Kartu Java siap digunakan. Anda bisa mendapatkan Kartu Java dari penerbit atau membelinya dari pengecer. Kartu yang dijual oleh pengecer bersifat umum, dalam hal ini personalisasi sering dihilangkan.

Sekarang Anda dapat memasukkan Kartu Java Anda ke dalam pembaca dan mengirim perintah APDU ke applet yang berada di kartu atau mengunduh lebih banyak applet atau data ke kartu.

Kartu Java tetap aktif hingga kedaluwarsa atau diblokir karena kesalahan yang tidak dapat dipulihkan.

Masa pakai mesin virtual Java Card

Tidak seperti mesin virtual Java (JVM) di PC atau workstation, mesin virtual Java Card berjalan selamanya.

Sebagian besar informasi yang disimpan di kartu harus dipertahankan bahkan saat daya dilepas - yaitu, saat kartu dikeluarkan dari pembaca. Java Card VM membuat objek di EEPROM untuk menyimpan informasi yang ada. Masa eksekusi Java Card VM adalah masa pakai kartu. Jika daya tidak tersedia, VM berjalan dalam siklus jam tak terbatas.

Masa pakai applet dan objek Java Card

Kehidupan applet dimulai ketika dipasang dan didaftarkan dengan benar pada tabel registri sistem dan berakhir ketika dihapus dari tabel. Ruang dari applet yang dihapus dapat atau tidak dapat digunakan kembali, bagaimanapun, tergantung pada apakah pengumpulan sampah diterapkan pada kartu. Sebuah applet pada sebuah kartu berada dalam tahap tidak aktif sampai secara eksplisit dipilih oleh terminal.

Objek dibuat dalam memori persisten (misalnya, EEPROM). Mereka bisa hilang atau dikumpulkan sampah jika objek persisten lainnya tidak mereferensikannya. Namun, ini seribu kali lebih lambat untuk menulis ke EEPROM daripada ke RAM.

Beberapa objek sering diakses, dan konten bidangnya tidak perlu selalu ada. Kartu Java mendukung objek sementara (sementara) di RAM. Setelah sebuah objek dideklarasikan sebagai sementara, isinya tidak dapat dipindahkan kembali ke memori persisten.

Subset bahasa Java Card 2.0

Program Java Card, tentu saja, ditulis dalam Java. Mereka dikompilasi menggunakan kompiler Java yang umum. Karena sumber daya memori dan daya komputasi yang terbatas, tidak semua fitur bahasa yang ditentukan dalam Spesifikasi Bahasa Java didukung di Kartu Java. Secara khusus, Kartu Java tidak mendukung:

  • Pemuatan kelas dinamis

  • Manajer keamanan

  • Benang dan sinkronisasi

  • Kloning objek

  • Finalisasi

  • Tipe data primitif besar (float, double, long, dan char)

Tidak mengherankan jika kata kunci yang mendukung fitur tersebut juga dihilangkan dari bahasa. Pelaksana VM dapat memutuskan untuk mendukung tipe integer 32-bit atau metode asli untuk applet pasca-penerbitan jika mereka bekerja pada kartu pintar yang lebih canggih dengan lebih banyak memori. Applet pasca-penerbitan adalah applet yang dipasang pada Kartu Java setelah kartu diterbitkan kepada pemegang kartu.

Kerangka Java Card 2.0

Kartu pintar telah dipasarkan selama 20 tahun, dan kebanyakan dari mereka umumnya kompatibel dengan ISO 7816 Bagian 1-7 dan / atau EMV. Kami telah melihat ISO 7816. Apakah EMV? Standar EMV, yang ditentukan oleh Europay, MasterCard, dan Visa, didasarkan pada seri standar ISO 7816 dengan fitur kepemilikan tambahan untuk memenuhi kebutuhan spesifik industri keuangan. Kerangka Kartu Java dirancang untuk mendukung sistem dan aplikasi kartu pintar dengan mudah. Ini menyembunyikan detail infrastruktur kartu pintar dan menyediakan pengembang aplikasi Java Card dengan antarmuka pemrograman yang relatif mudah dan lugas.

Kerangka Java Card berisi empat paket:

Nama paket Deskripsi
javacard.framework Ini adalah paket inti pada kartu. Ini mendefinisikan kelas seperti dan , yang merupakan blok bangunan dasar untuk program Java Card dan , dan , yang menyediakan runtime dan layanan sistem untuk program Java Card, seperti penanganan APDU dan berbagi objek
javacardx.framework Paket ini menyediakan desain berorientasi objek untuk sistem file yang kompatibel dengan ISO 7816-4. Ini mendukung file dasar (EF), file khusus (DF) dan APDU berorientasi file seperti yang ditentukan dalam ISO7816
javacardx.crypto dan javacardx.cryptoEnc Kedua paket tersebut mendukung fungsionalitas kriptografi yang diperlukan dalam kartu pintar

Sesuai dengan konvensi penamaan Java, paket Java Cardx adalah ekstensi untuk kerangka Java Card. Anda tidak perlu mendukung mereka di kartu.

Keamanan Kartu Java

Applet Java tunduk pada batasan keamanan Java, namun model keamanan sistem Java Card berbeda dari Java standar dalam banyak hal.

Kelas Manajer Keamanan tidak didukung di Kartu Java. Kebijakan keamanan bahasa diimplementasikan oleh mesin virtual.

Applet Java membuat objek yang menyimpan dan memanipulasi data. Sebuah objek dimiliki oleh applet yang membuatnya. Meskipun applet mungkin memiliki referensi ke suatu objek, applet tidak dapat memanggil metode objek, kecuali jika ia memiliki objek tersebut atau objek tersebut secara eksplisit dibagikan. Sebuah applet dapat berbagi objek apapun dengan applet tertentu atau dengan semua applet.

Applet adalah entitas independen dalam Kartu Java. Pemilihan, eksekusi, dan fungsinya tidak terpengaruh oleh applet lain yang berada di kartu yang sama.

Bagaimana segala sesuatunya bekerja sama di dalam Kartu Java

Di dalam Kartu Java, JCRE (Java Card Runtime Environment) mengacu pada mesin virtual Java Card dan kelas-kelas dalam Java Card Framework. Setiap applet dalam Kartu Java dikaitkan dengan AID unik yang diberikan oleh JCRE.

Setelah applet dimuat dengan benar ke dalam memori persisten kartu dan dihubungkan dengan Java Card Framework dan pustaka lain pada kartu, JCRE memanggil metode pemasangan applet sebagai langkah terakhir dalam proses pemasangan applet. Sebuah metode statis publik install,, harus diimplementasikan oleh kelas applet untuk membuat sebuah instance dari applet dan mendaftarkannya dengan JCRE. Karena memori terbatas, praktik pemrograman yang baik, pada titik ini, untuk membuat dan menginisialisasi objek yang dibutuhkan applet selama masa pakainya.