- Architecture
- Java Card Language Subset
- JCVM
- JCRE
- Java Card API
- Java Card Applet
- Applet開発プロセス
- Appletインストール
- 略語
- Link
Architecture
メモリ構成
- RAM
- EEPROM / Flash / ReRAM / FeRAM (or Non-Volatile Memory)
- ROM
Java Card仕様3点セット
- JC VM(Virtual Machine)
- JC RE(Runtime Environment) : JC Runtime behavior. Memory Management, Applet Management, Other runtime features
- JC API
Java Card Language Subset
Supported Java Features
- Small primitive data types: boolean, byte, short
- One-dimensional arrays
- Java packages, classes, interfaces, and exceptions
- Java object-oriented features: inheritance, virtual methods, overloading and dynamic object creation, access scope, an- d binding rules
- The int keyword and 32-bit integer data type support are optional.
Unsupported Java Features
- Large primitive data types: long, double, float
- Characters and strings
- Multidimensional arrays
- Dynamic class loading
- Security manager
- Garbage collection and finalization
- Threads
- Object serialization
- Object cloning
JCVM
- Split VM architecture!
- Off-card VM (Converter) : PC上で動くVM
- On-card VM (Interpreter) : カード上で動くVM
Converter
- Java Card Code -> (Java Compiler) -> Class files -> (Converter) -> CAP file, Export file
- CAP : Converted APplet
- Export file : バイトコードは含まない。Cのheaderファイルみたいなイメージ
Interpreter
- Byte codeの実行。これがJava Card上のVM。
- ただし、直接CAPを読み込む分けてはないくCAP Installer(On-Card Installer)が介在される。
JCRE
主な役割
- Card Resource Management
- Network Communication
- Applet Execution
- On-card system / applet security
構成
- On-Card JCVM : Byte code interpreter
- JCRE system classes
- Java Card Application Framework Classes (APIs)
- Industry specific extensions
- Installer (Optional) : CAPのInstaller、出荷後のOTA用途等
JCRE vs. JCVM
- JCREはOn-CardのJCVMを含む、所謂Java Cardのアプリケーションが動作するための実行環境全般を指す。
- 文献によってはJCVMと分離した言い方(JCREとJCVMは別物みたいな)もあるが、On-Card JCVMを含むというのが無難。
CAD Session
Java Card API
java.lang Package
javacard.framework Package
特にAPDUクラスは重要!
- https://docs.oracle.com/javacard/3.0.5/api/javacard/framework/package-summary.html
- https://docs.oracle.com/javacard/3.0.5/api/javacard/framework/service/package-summary.html
javacard.security Package
API Interfaceを提供。実装はJCRE Providerにより行われる。
javacardx.crypto Package
API Interfaceを提供。実装はJCRE Providerにより行われる。
Java Card Applet
概要
- Java Card Appletはjavacard.framework.Appletを継承する
- 各Applet Instanceは一意のAIDを持つ
- HostアプリケーションとJava Card上のAppletをAPDUで通信
- Hostアプリケーション - JCRE - Appletの関係
- HostアプリケーションがAPDUコマンド(SELECT command with Applet AID)を発行
- JCREはそのAppletを探し、Select
- その後とのAPDUコマンドはSelectされたAppletへ転送される
Class javacard.framework.Applet
- install / select / process / deselect method : JCREによりInvokeされる
- register method : Applet InstanceをJCREへ登録し、Applet InstanceへAIDを付与
- process method : Appletのメイン機能を実装する場所
- select method : initializationに必要な処理
- deselect method :cleanup, bookkeeping work
Applet開発プロセス
Appletインストール
- AID構成 : RID(5 bytes) + PIX(0 to 11 bytes)
- RID (5 bytes) : 例)0xa0, 0x00, 0x00, 0x00, 0x62 <= Sun Micro
- Package PIX : 例)0x03, 0x01, 0x0c, 0x06
- Applet PIX : 例)0x03, 0x01, 0x0c, 0x06, 0x01
- RID : ISOにより管理されている
略語
- CAD (Card Acceptance Device)
- CAP (Converted Applet)
- JCVM (Java Card Virtual Machine)
- JCRE (Java Card Runtime Environment)