Memahami Kad Java 2.0

Artikel ini dimulakan dengan gambaran keseluruhan kad pintar dan ulasan ringkas mengenai ISO 7816, standard kad pintar. Mengingat latar belakang kad pintar di lajur Pengembang Java sebelumnya , ansuran ini akan dimulai dengan jawaban atas pertanyaan, "Apa itu Kartu Java?" dan gambaran keseluruhan seni bina sistem Java Card. Seterusnya, kami akan memfokuskan pada banyak isu khusus untuk Kad Java, termasuk kitaran hidup Kad Java; subset bahasa Java Card 2.0 dan kelas perpustakaan API; dan keselamatan Kad Java. Kemudian kita akan membincangkan persekitaran runtime Java Card dan menunjukkan bagaimana Java Card berjalan. Kita akan tutup dengan contoh yang menerangi: Aplikasi dompet elektronik yang ditulis hanya untuk Java Card.

Mulai sekarang, semua rujukan ke Java Card secara implisit merujuk kepada Java Card 2.0.

Apakah kad pintar?

Sama dengan ukuran kad kredit, kad pintar menyimpan dan memproses maklumat melalui litar elektronik yang tertanam dalam silikon di substrat plastik badannya. Terdapat dua jenis kad pintar asas: Kad pintar pintar mengandungi mikropemproses dan menawarkan kemampuan membaca, menulis, dan mengira, seperti komputer mikro kecil. A kad memori , di sisi lain, tidak mempunyai mikropemproses dan yang dimaksudkan hanya untuk penyimpanan maklumat. Kad memori menggunakan logik keselamatan untuk mengawal akses memori.

Semua kad pintar mengandungi tiga jenis memori: memori tidak boleh berubah berterusan; memori boleh ubah berterusan; dan memori boleh ubah yang tidak berterusan. ROM, EEPROM, dan RAM adalah memori yang paling banyak digunakan untuk ketiga-tiga jenis kad pintar semasa. Memori berterusan juga disebut memori tidak mudah berubah. Kami akan menggunakan istilah yang berterusan dan tidak mudah berubah secara bergantian dalam artikel ini.

ISO 7816 bahagian 1-7, yang ditakrifkan oleh International Standard Organisation, mengandungi satu set standard yang merangkumi pelbagai aspek kad pintar. ISO 7816 terdiri daripada:

  • Ciri fizikal (bahagian 1)

  • Dimensi dan lokasi kenalan (bahagian 2)

  • Protokol isyarat dan penghantaran elektronik (bahagian 3)

  • Perintah antara industri untuk pertukaran (bahagian 4)

  • Pengecam aplikasi (Bahagian 5)

  • Elemen data antara industri (Bahagian 6)

  • Perintah antara industri untuk SCQL (Bahagian 7)

Gambar rajah berikut menggambarkan ciri fizikal kad pintar, yang ditentukan dalam ISO 7816, bahagian 1.

Untuk maklumat lanjut mengenai ISO 7816 dan kad pintar, lihat "Kad pintar: Buku asas."

Biasanya, kad pintar tidak mengandungi bekalan kuasa, paparan, atau papan kekunci. Ia berinteraksi dengan dunia luar menggunakan antara muka komunikasi bersiri melalui lapan titik hubungannya. Dimensi dan lokasi kenalan diliputi di bahagian 2 ISO 7816. Gambar rajah ini menunjukkan kenalan pada kad pintar.

Kad pintar dimasukkan ke dalam Kad Penerimaan Kad (CAD), yang mungkin tersambung ke komputer lain. Istilah lain yang digunakan untuk Perangkat Penerimaan Kad adalah terminal , pembaca , dan IFD (peranti antara muka). Semuanya menyediakan fungsi asas yang sama, iaitu untuk memberi kad dengan kuasa dan membuat sambungan membawa data.

Apabila dua komputer berkomunikasi antara satu sama lain, mereka bertukar paket data, yang dibina mengikuti satu set protokol. Begitu juga, kad pintar bercakap dengan dunia luar menggunakan pakej data mereka sendiri - dipanggil APDU (Application Protocol Data Units). APDU mengandungi arahan atau mesej respons. Dalam dunia kad, model master-slave digunakan di mana kad pintar selalu memainkan peranan pasif. Dengan kata lain, kad pintar selalu menunggu arahan APDU dari terminal. Ia kemudian melaksanakan tindakan yang ditentukan dalam APDU dan membalas ke terminal dengan jawapan APDU. Perintah APDU dan APDU respons ditukar secara bergantian antara kad dan terminal.

Jadual berikut menggambarkan format APDU arahan dan respons, masing-masing. Struktur APDU dijelaskan dalam ISO 7816, bahagian 4.

Perintah APDU
Tajuk Wajib Badan Bersyarat
CLA INS P1 P2 Lc Medan data Le

Tajuk mengodkan arahan yang dipilih. Ini terdiri daripada empat bidang: kelas (CLA), instruksi (INS), dan parameter 1 dan 2 (P1 dan P2). Setiap medan mengandungi 1 bait:

  • CLA: Bait kelas. Dalam banyak kad pintar, bait ini digunakan untuk mengenal pasti aplikasi.

  • INS: Bait arahan. Bait ini menunjukkan kod arahan.

  • P1-P2: Parameter bait. Ini memberikan kelayakan lebih lanjut untuk perintah APDU.

Lc menunjukkan bilangan bait dalam bidang data arahan APDU; Le menunjukkan bilangan byte maksimum yang diharapkan dalam bidang data APDU tindak balas berikut.

Jawapan APDU
Badan Bersyarat Treler Wajib
Medan data SW1 SW2

Byte status SW1 dan SW2 menunjukkan status pemprosesan perintah APDU dalam kad.

Apa itu kad Java?

Kad Java adalah kad pintar yang mampu menjalankan program Java. Spesifikasi Java Card 2.0 diterbitkan di //www.javasoft.com/javacard. Ini berisi maklumat terperinci untuk membangun mesin maya Kad Java dan antara muka pengaturcaraan aplikasi (API) dalam kad pintar. Keperluan sistem minimum ialah 16 kilobyte memori baca sahaja (ROM), 8 kilobyte EEPROM, dan 256 byte memori akses rawak (RAM).

Senibina sistem pada Kad Java digambarkan dalam gambar berikut.

Seperti yang ditunjukkan pada gambar, Java Card VM dibangun di atas rangkaian terpadu (IC) khusus dan implementasi sistem operasi asli. Lapisan JVM menyembunyikan teknologi eksklusif pengeluar dengan bahasa dan antara muka sistem yang sama. Kerangka Kad Java menentukan sekumpulan kelas Interface Pemrograman Aplikasi (API) untuk mengembangkan aplikasi Java Card dan untuk menyediakan layanan sistem untuk aplikasi tersebut. Industri atau perniagaan tertentu dapat menyediakan perpustakaan tambahan untuk menyediakan perkhidmatan atau untuk memperbaiki keselamatan dan model sistem. Aplikasi Java Card disebut applet . Pelbagai applet boleh berada pada satu kad. Setiap applet diidentifikasi secara unik oleh AIDnya (pengenal aplikasi), seperti yang ditentukan dalam ISO 7816, bahagian 5.

Perkara penting yang perlu diingat adalah kad pintar yang tidak : kad bukan komputer peribadi. Mereka mempunyai sumber memori dan kekuatan pengkomputeran yang terhad. Pengguna tidak boleh menganggap Java Card 2.0 hanya sebagai versi JDK yang dilucutkan.

Jangka hayat Kad Java

Jangka hayat Kad Java bermula apabila OS asli, Java Card VM, perpustakaan kelas API dan secara opsional, applet dibakar ke dalam ROM. Proses menulis komponen kekal ke dalam memori cip yang tidak dapat diubah untuk menjalankan perintah masuk disebut penyamaran .

Sebelum masuk ke dompet anda, Kad Java perlu melalui inisialisasi dan pemperibadian. Permulaan merujuk kepada memuatkan data umum ke dalam memori kad yang tidak mudah berubah. Data ini sama dengan sebilangan besar kad dan tidak khusus untuk individu; contohnya ialah nama penerbit atau pengeluar.

Langkah seterusnya, pemperibadian, melibatkan pemberian kad kepada seseorang. Ia boleh berlaku melalui pemperibadian fizikal atau melalui pemperibadian elektronik. Pemperibadian fizikal merujuk kepada ukiran atau laser yang terukir nama dan nombor kad anda di permukaan plastik kad. Pemperibadian elektronik merujuk kepada memuatkan data peribadi ke dalam memori kad yang tidak mudah berubah, misalnya kunci peribadi, nama, dan nombor pin anda.

Permulaan dan Pemperibadian berbeza dari vendor ke vendor dan penerbit ke penerbit. Dalam kedua-duanya, EEPROM (sejenis memori yang tidak mudah berubah) sering digunakan untuk menyimpan data.

Pada ketika ini, Kad Java siap digunakan. Anda boleh mendapatkan Kad Java dari penerbit atau membelinya dari peruncit. Kad yang dijual oleh peruncit adalah tujuan umum, dalam hal ini pemperibadian sering dihilangkan.

Sekarang anda boleh memasukkan Kad Java anda ke pembaca dan mengirim perintah APDU ke applet yang terdapat di dalam kad atau memuat turun lebih banyak applet atau data ke dalam kad.

Kad Java tetap aktif sehingga kadaluarsa atau disekat kerana ralat yang tidak dapat dipulihkan.

Sepanjang hayat mesin maya Kad Java

Tidak seperti mesin maya Java (JVM) di PC atau stesen kerja, mesin maya Kad Java berjalan selama-lamanya.

Sebilangan besar maklumat yang tersimpan pada kad mesti disimpan walaupun kuasa dikeluarkan - iaitu semasa kad dikeluarkan dari pembaca. Java Card VM membuat objek di EEPROM untuk menyimpan maklumat berterusan. Jangka hayat pelaksanaan Java Card VM adalah jangka hayat kad. Apabila kuasa tidak disediakan, VM berjalan dalam satu pusingan jam yang tidak terhingga.

Jangka hayat applet dan objek Java Card

Kehidupan applet bermula apabila dipasang dengan betul dan didaftarkan dengan jadual pendaftaran sistem dan berakhir apabila dikeluarkan dari jadual. Ruang applet yang dikeluarkan mungkin atau tidak dapat digunakan kembali, bagaimanapun, bergantung pada apakah pengumpulan sampah dilaksanakan pada kad. Applet pada kad berada dalam tahap tidak aktif sehingga terpilih secara jelas oleh terminal.

Objek dibuat dalam memori berterusan (contohnya, EEPROM). Mereka boleh hilang atau dikumpulkan sampah jika benda berterusan yang lain tidak merujuknya. Namun, seribu kali lebih lambat untuk menulis ke EEPROM daripada RAM.

Beberapa objek sering diakses, dan isi bidangnya tidak perlu berterusan. Kad Java menyokong objek sementara (sementara) dalam RAM. Setelah objek dinyatakan sementara, kandungannya tidak dapat dipindahkan kembali ke memori berterusan.

Subset bahasa Java Card 2.0

Program Java Card tentu saja ditulis di Java. Mereka disusun menggunakan penyusun Java biasa. Oleh kerana sumber daya memori dan kekuatan pengkomputeran yang terhad, tidak semua fitur bahasa yang ditentukan dalam Spesifikasi Bahasa Java didukung pada Kad Java. Secara khusus, Kad Java tidak menyokong:

  • Pemuatan kelas dinamik

  • Pengurus keselamatan

  • Benang dan penyegerakan

  • Pengklonan objek

  • Penyelesaian

  • Jenis data primitif yang besar (float, double, long, and char)

Tidak menghairankan bahawa kata kunci yang menyokong ciri tersebut juga dikeluarkan dari bahasa. Pelaksana VM mungkin memutuskan untuk menyokong jenis integer 32-bit atau kaedah asli untuk applet pasca penerbitan jika mereka menggunakan kad pintar yang lebih maju dengan lebih banyak memori. Applet pasca penerbitan adalah applet yang dipasang pada Kad Java setelah kad dikeluarkan kepada pemegang kad.

Rangka kerja Java Card 2.0

Kad pintar telah berada di pasaran selama 20 tahun, dan kebanyakan kad tersebut serasi dengan ISO 7816 Bahagian 1-7 dan / atau EMV. Kami sudah melihat ISO 7816. Apa itu EMV? Piawaian EMV, yang ditakrifkan oleh Europay, MasterCard, dan Visa, didasarkan pada siri piawaian ISO 7816 dengan ciri tambahan tambahan untuk memenuhi keperluan khusus industri kewangan. Kerangka Kad Java direka untuk menyokong sistem dan aplikasi kad pintar dengan mudah. Ini menyembunyikan perincian infrastruktur kad pintar dan menyediakan antara muka pengaturcaraan aplikasi Java Card yang mudah dan ringkas.

Kerangka Kad Java mengandungi empat pakej:

Nama Pakej Penerangan
javacard.framework Ini adalah pakej inti pada kad. Ini mendefinisikan kelas seperti dan , yang merupakan blok bangunan dasar untuk program Java Card dan , dan , yang menyediakan runtime dan perkhidmatan sistem untuk program Java Card, seperti pengendalian APDU dan perkongsian objek
javacardx.framework Pakej ini menyediakan reka bentuk berorientasikan objek untuk sistem fail yang serasi dengan ISO 7816-4. Ia menyokong fail dasar (EF), fail khusus (DF) dan APDU berorientasikan fail seperti yang ditentukan dalam ISO7816
javacardx.crypto dan javacardx.cryptoEnc Kedua-dua pakej tersebut menyokong fungsi kriptografi yang diperlukan dalam kad pintar

Sesuai dengan konvensi penamaan Java, paket Java Cardx adalah sambungan ke kerangka Java Card. Anda tidak perlu menyokong anda pada kad.

Keselamatan Kad Java

Applet Java dikenakan sekatan keselamatan Java, namun, model keamanan sistem Java Card berbeda dari Java standar dalam banyak hal.

Kelas Pengurus Keselamatan tidak disokong pada Kad Java. Dasar keselamatan bahasa dilaksanakan oleh mesin maya.

Applet Java membuat objek yang menyimpan dan memanipulasi data. Objek dimiliki oleh applet yang membuatnya. Walaupun applet mungkin memiliki referensi ke objek, ia tidak dapat menggunakan kaedah objek, kecuali jika ia memiliki objek atau objek tersebut dibagikan secara eksplisit. Applet dapat berkongsi mana-mana objeknya dengan applet tertentu atau dengan semua applet.

Applet adalah entiti bebas dalam Kad Java. Pemilihan, pelaksanaan, dan fungsinya tidak dipengaruhi oleh applet lain yang terdapat pada kad yang sama.

Cara kerja bersama di dalam Kad Java

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

Setelah applet dimasukkan dengan betul ke dalam memori berterusan kad dan dihubungkan dengan Java Card Framework dan perpustakaan lain pada kad, JCRE memanggil kaedah pemasangan applet sebagai langkah terakhir dalam proses pemasangan applet. Kaedah statik awam install, mesti dilaksanakan oleh kelas applet untuk membuat contoh applet dan mendaftarkannya dengan JCRE. Kerana memori terhad, praktik pengaturcaraan yang baik, pada ketika ini, untuk membuat dan menginisialisasi objek yang diperlukan applet sepanjang hayatnya.