Smart Card Guy

Smart Card, Java Card, PCI DSS, IoT Device Security

Java Card Technical概要

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クラスは重要!

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インストール

略語

  • CAD (Card Acceptance Device)
  • CAP (Converted Applet)
  • JCVM (Java Card Virtual Machine)
  • JCRE (Java Card Runtime Environment)

smartcardguy.hatenablog.jp

smartcardguy.hatenablog.jp