Fact-checked by Grok 2 weeks ago

Java Card

Java Card is an open, interoperable platform developed by Oracle (formerly Sun Microsystems) that enables smart cards, secure elements, and other tamper-resistant, resource-constrained devices to host and execute multiple Java-based applications securely. It combines a subset of the Java programming language with a specialized runtime environment optimized for devices with limited memory and processing power, such as those featuring 8- or 16-bit CPUs, 1 KB of RAM, and over 16 KB of non-volatile memory. This technology supports key standards like ISO/IEC 7816 for communication protocols and GlobalPlatform for multi-application management, ensuring cross-vendor compatibility and high-level security certifications (EAL4+ to EAL7+). The development of Card began in the mid-1990s, driven by the need to bring Java's portability and to smart cards, which originated in as simple memory cards around two decades earlier. Card 1.0 was initially proposed in 1996 by engineers at , focusing solely on application programming interfaces () to enable development on smart cards. The Java Card Forum, formed by companies including , CP8, and Gemplus, promoted its adoption, leading to Java Card 2.0 in 1998, which introduced the Java Card Runtime Environment (JCRE) and a specification for broader . Subsequent versions, such as 2.1.1 (2001) and 2.2.2 (2006), refined the platform with enhanced for and object-oriented features, while the Connected Edition (starting with 3.0 in 2012) added network connectivity support like / and web services. The latest specification, Card 3.2 (released in 2023), incorporates advanced protocols including (D)TLS 1.3 and improved for modern secure elements. Key features of Java Card include its support for multi-application hosting, where applets run in isolated sandboxes to prevent interference, and secure communication via Application Protocol Data Units (APDUs) or Java Card Remote Method Invocation (RMI). It leverages 's object-oriented model for developing tamper-resistant applications, such as those for , electronic payments (e.g., EMVCo compliance), and in SIM cards, e-wallets, and secure tokens. Benefits encompass high portability across hardware vendors, reprogrammability for over-the-air updates, and robust through bytecode verification and firewall mechanisms, making it ideal for applications handling sensitive data like details or medical records. Developers use tools like the Java Card Development Kit (latest version 25.1 as of October 2025, supporting JDK 17) to build, convert, and test applets before deployment.

Overview

History

Java Card was introduced by Sun Microsystems in 1996 as a subset of the Java programming language tailored for smart cards and other resource-constrained devices, aiming to enable the platform-independent execution of small applications, or applets, in secure environments. This initiative addressed the limitations of proprietary smart card operating systems by leveraging Java's portability and security features to support multi-application capabilities on devices with minimal memory and processing power. The initial specification, Java Card 1.0, was released in 1997, focusing on foundational applet support for both contact-based and contactless smart cards, marking the first commercial deployment of Java technology in embedded secure elements. Early adoption was driven by demonstrations from partners like , which produced the first Java Cards in February 1997, and the formation of the Java Card Forum to promote among vendors. Following ' acquisition by in January 2010, Java Card development transitioned under Oracle's oversight, ensuring continued evolution through specification updates and tool enhancements to meet emerging and needs. Key partnerships, particularly the between Sun and GlobalPlatform starting in the late 1990s and accelerating in the early 2000s, integrated Java Card with standardized protocols for secure application lifecycle management, significantly boosting industry adoption in sectors like payments, , and identity verification. Subsequent milestones included the proliferation of open-source elements in development kits, such as community-driven simulators and tools like jCardSim, which democratized access for developers and complemented Oracle's official releases. The platform reached a recent high point with the October 2025 release of the Java Card Development Kit (JCDK) 25.1, providing tools and a simulator supporting the Java Card 3.2 specification, including advancements like (D)TLS 1.3 protocol integration for enhanced secure communications.

Key Concepts and Purpose

Java Card is a platform that extends the Java programming language to resource-constrained embedded systems, particularly smart cards, enabling the development and deployment of secure, portable applications known as applets. Its primary purpose is to implement the "write once, run anywhere" paradigm for smart cards, allowing developers to create applications that operate across diverse hardware platforms without vendor-specific adaptations, thereby reducing lock-in and facilitating multi-application cards that can host multiple independent applets from different providers. This approach supports secure storage and processing of sensitive data, such as electronic payments or identity credentials, on tamper-resistant devices. At its core, Java Card revolves around lightweight Java applets, which are specialized programs extending the Applet class and handling interactions through methods like install() for initialization and process() for command execution. A card manager, integrated into the Java Card Runtime Environment, oversees the installation, deletion, and isolation of these applets to prevent interference, while the platform supports contact interfaces compliant with ISO/IEC 7816 and contactless interfaces compliant with standards such as ISO/IEC 14443, enabling communication via physical contacts or proximity-based . These concepts promote extensibility for diverse applications, including payment systems, , and identity verification, by allowing post-issuance updates and secure sharing of resources through logical channels. The benefits of Java Card include enhanced portability, as applets compiled to a standardized format execute consistently on compliant devices regardless of underlying variations. is bolstered by type-safe execution, which eliminates vulnerabilities like buffer overflows through compile-time checks, array bounds enforcement, and the absence of pointers, alongside an applet that enforces isolation. Compared to native smart card programming in languages like C or assembler, which is hardware-specific and prone to low-level errors, Java Card reduces development time and error rates by leveraging familiar object-oriented tools, simulators, and runtime verification, while matching performance in critical operations when optimized. To address severe resource limitations typical of smart cards—such as 1-16 KB of and limited —Java Card employs a lightweight instead of a full , omitting features like threads, floating-point types, and dynamic class loading to minimize footprint and power consumption. This design ensures efficient operation in constrained environments, using transient objects for temporary data to avoid excessive wear on persistent storage.

Editions

Classic Edition

The Java Card Classic Edition is a platform specification tailored for resource-constrained devices, particularly traditional smart cards equipped with 8- or 16-bit microcontrollers and limited persistent memory, typically 32 to 80 KB of , emphasizing secure, offline execution of lightweight Java applets without support for networking or beyond initial deployment. This edition prioritizes minimal footprints to enable deployment on low-power, tamper-resistant chips where RAM is often restricted to a few kilobytes and holds the fixed . It ensures compatibility with ISO/IEC 7816 standards for integrated circuit cards, supporting both contact-based interfaces via physical connectors and contactless interfaces compliant with protocols like ISO/IEC 14443 for short-range communication. These interfaces facilitate standardized interactions in secure environments, such as through half-duplex transmission protocols (T=0 or T=1). Key limitations include the absence of automatic garbage collection to conserve resources, relying instead on manual object management and the Transaction API for atomic updates to persistent data, ensuring during power loss or interruptions. operations are confined to basic Application Protocol Data Units (APDUs) exchanged over the ISO 7816 interface, restricting communication to command-response patterns without advanced streaming or multitasking features. Primary use cases encompass secure applications like EMV-compliant and debit cards for , telecommunications SIM cards for storing subscriber and over-the-air updates, and e-passports for biometric and verification data storage. These applications leverage the edition's focus on high-assurance in disconnected scenarios. As the foundational and most widely adopted variant, the Edition continues to evolve with ongoing support; the Java Card Development Kit (JCDK) 25.1, released in November 2025, provides tools and simulation for version 3.2 specifications, incorporating updates for enhanced compatibility with modern compilers while preserving its low-resource profile. In contrast to the Connected Edition, it avoids requirements for expanded or features.

Connected Edition

The Connected Edition of the Java Card platform extends the technology to support devices with greater computational resources and network connectivity, targeting smart cards or modules that exceed the severe constraints of traditional contactless cards. Introduced as part of Java Card 3.0, it enables the development of networked applications on with at least 24 kB of and 32-bit processors, allowing for persistent connections and -based interactions such as / sockets and HTTP/ protocols. This edition builds on the foundations of the Classic Edition by accommodating environments where exceeds 64 kB in total, facilitating advanced features like web services without the offline limitations of earlier variants. Key enhancements in the Connected Edition include full garbage collection for automatic memory management of objects, dynamic class loading via .class and .war files, and integration with Java ME through a CLDC-compliant subset supporting Java 6 features such as extended primitive types (byte, short, int, long, char) and java.lang.String. These additions enable servlet-based web applications, including support for HTTP methods (GET, POST), headers, cookies, sessions, and SSL security, alongside APIs for XML parsing to handle structured data in networked scenarios. The specification, version 3.0.1 as of 2025, maintains backward compatibility with Classic Edition applets while providing a significantly enhanced runtime environment and virtual machine optimized for less resource-constrained platforms. Hardware targets for the Connected Edition primarily include USB tokens for secure authentication, secure elements in mobile devices, and modules requiring persistent network access for . These devices leverage the edition's capabilities to host miniature web servers accessible via browsers, supporting secure data exchange in connected ecosystems. Adoption of the Connected Edition has grown in enterprise security applications, such as two-factor systems using FIDO-compliant protocols, and in emerging security for protecting peripherals and sensitive data at the edge. While enabling advanced networked features, its adoption remains more limited than the Classic Edition due to higher hardware requirements. With billions of Java Card deployments overall, the Connected Edition contributes to scalable solutions in tamper-resistant environments, enabling portable web servers and hybrid Java ME integrations for advanced threat mitigation.

Architecture and Design

Java Card Virtual Machine

The Java Card Virtual Machine (JCVM), also known as the Card Virtual Machine (CVM), is a lightweight subset of the (JVM) designed specifically for resource-constrained environments such as smart cards. It provides binary portability for Java Card applets through Converted Applet (CAP) files while operating within severe hardware limitations, typically supporting devices with as little as 1.2 KB of RAM, 16 KB of , and 32–48 KB of . Unlike the full JVM, the JCVM omits resource-intensive features to ensure efficient execution on embedded hardware, focusing on secure, single-threaded operation without support for or dynamic class loading. The JCVM employs a frame-based execution model that uses a stack-based stack with a maximum depth of 255 16-bit cells for each frame, including local variables and return addresses. Execution is -based, with dispatch initiated by the card's runtime environment selecting an via its Application Identifier (), a unique byte sequence compliant with ISO/IEC 7816-5 standards that names packages, , and components. The JCVM supports only a single thread of execution, eliminating the need for primitives and enabling straightforward switching between without multi-threading overhead. This model ensures isolated execution for each while allowing inter- communication through designated shareable objects. Memory management in the JCVM deviates significantly from the JVM by eliminating the and collection mechanisms, as automatic memory reclamation is not feasible in low-resource settings. Instead, all objects are allocated contiguously in non-volatile for persistence across power cycles, with transient data confined to volatile . Object sharing across applets is facilitated via shareable interface objects marked with the ACC_SHAREABLE flag, enabling controlled access through interfaces like javacard.framework.Shareable without violating . Arrays are restricted to one with a maximum of 32,767 elements, and supported primitive types are limited to boolean, byte, short, and optionally int, excluding char, double, float, long, and multi-dimensional arrays. Error handling in the JCVM incorporates an explicit model to maintain , particularly against power loss or resets common in environments. Applets initiate transactions using mechanisms such as JCSystem.beginTransaction() to mark the start of atomic updates to persistent fields or arrays, with JCSystem.commitTransaction() finalizing changes only if successful; any interruption aborts the transaction, restoring prior states. This ensures that partial updates to EEPROM-stored data, such as cryptographic keys or certificates, do not result in inconsistent states, with the JCVM coordinating persistence at the frame level during context switches. Key differences from the full JVM include static linking performed at CAP file conversion time, which resolves dependencies offline to avoid runtime overhead, and the absence of dynamic loading in the Classic Edition, mandating all code be pre-installed. The JCVM also excludes features like object finalization, , native methods, and a security manager, prioritizing a simplified, verifiable of bytecodes tailored for off-card verification and on-card execution efficiency.

Bytecode and Verification

The Java Card bytecode is derived from standard Java class files and undergoes conversion to a compact, platform-optimized format known as the Converted Applet (CAP) file using Oracle's Converter tool. This process transforms the bytecode into a structured set of components, including a Header, Directory, Import, Constant Pool, Class, Method, and Static Field components, which collectively ensure the applet's executability on resource-constrained smart cards. The CAP file format supports both compact (single package, up to 64 KB bytecode) and extended (multiple packages, up to 128 blocks) variants, with type checking integrated at installation time to validate references and signatures. Verification of Java Card occurs in two phases to guarantee safety, type correctness, and prevention of vulnerabilities like buffer overflows. Off-card , performed during development with the Verifier tool, examines the CAP file's structure, adherence to the supported subset, inter-package dependencies via export files, and operand types using an abstract interpreter simulation. On-card , executed by the installer at deployment, resolves constant pool tokens, confirms type consistency across invocations, and enforces permissions, relying on prior off-card checks to minimize runtime overhead. These processes collectively ensure that only safe, verifiable code is executed, mitigating risks such as invalid accesses or underflows. To accommodate the limited memory and processing capabilities of smart cards, the Converter applies several optimizations during CAP file generation, including method inlining for frequently called routines, constant pooling to efficiently store , method, and field references using tokens and offsets, and the elimination of unsupported Java features. Notably, full is absent, replaced by explicit handler references in the ; the class is not available, with strings instead represented as byte arrays managed via utility methods for encoding and manipulation. These adaptations reduce the footprint while maintaining semantic equivalence to the original code. The bytecode's design ensures portability by remaining independent of the host operating system or hardware, allowing CAP files to execute across compliant Java Card platforms without modification. This is achieved through standardized , version-specific compatibility checks during , and the use of Application Identifiers (AIDs) for unique package naming, enabling cross-vendor deployment. For instance, the INVOKESTATIC (0x8D or 141) facilitates static method calls by popping arguments from the operand stack, indexing the constant pool for , and creating a new frame, supporting efficient, portable invocation without runtime polymorphism overhead.

Runtime Environment and Libraries

The Java Card Runtime Environment (JCRE) serves as the foundational execution platform for applets on smart cards, managing and interaction within the constrained hardware environment. The Card Manager, a privileged component of the JCRE, oversees the applet lifecycle, including installation via Converted (CAP) files, where the Applet.install() method is invoked to create and register instances, followed by selection through Application Identifier () matching in SELECT FILE commands per ISO/IEC 7816-4, and deletion coordinated by the Applet Deletion Manager that calls Applet.uninstall() before removing instances or entire packages atomically to prevent partial states. For multi-applet cards, the JCRE implements -switching, allowing only one active applet context at a time while supporting up to 20 logical channels per I/O interface, with switches occurring during selection or deselection to isolate execution and protect inter-applet access via the Shareable interface. Core libraries in the JCRE provide essential APIs for applet development and operation. The javacard.framework package includes foundational classes such as Applet for subclassing to define applet behavior, OwnerPIN for PIN management, and JCSystem for system-level operations like transaction control and object sharing, enabling applets to handle lifecycle events and maintain isolation. The javacard.security package offers basic cryptographic primitives, including key interfaces like DESKey for symmetric encryption and KeyBuilder for generating keys, supporting secure data handling without full algorithm implementations in the base set. Complementing these, the javacard.util utilities, primarily through the Util class, facilitate array manipulation with methods like arrayCopy and arrayFill for efficient data operations, while JCSystem methods such as beginTransaction(), commitTransaction(), and abortTransaction() ensure atomic updates to persistent data, limited to a single nesting level and bounded by a commit buffer capacity of up to 32,767 bytes. Input/output interactions in the JCRE are mediated through the Application Protocol Data Unit (APDU) mechanism, defined in the APDU class of javacard.framework, which encapsulates command-response exchanges compliant with ISO/IEC 7816-4 for T=0 and T=1 protocols, including support for extended-length APDUs up to 32,767 bytes when optional features are enabled. Persistence is simulated via EEPROM for non-volatile storage of objects, with no native file system; instead, applets rely on persistent and transient arrays for data retention, where updates to single fields or arrays are inherently atomic, and multi-object changes are protected by transactions to maintain consistency during power loss or errors. Extensibility in the JCRE allows for optional packages to enhance functionality, particularly in cryptography, where packages like javacardx.crypto provide classes such as Cipher for algorithms including DES and RSA, which are integrated at mask time during card manufacturing if the implementation supports them, ensuring compliance with export controls while extending the base javacard.security capabilities.

Specific Platform Features

Java Card platforms incorporate specialized mechanisms for object sharing to enable controlled inter-applet communication while maintaining isolation through the applet firewall. This is achieved via the Shareable interface, which allows a server applet to expose methods to client applets across context boundaries without granting direct object access. The server implements the Shareable interface and registers it with the runtime environment, enabling clients to obtain a reference using Applet.getShareableInterfaceObject and invoke methods, which triggers an explicit for secure execution. Remote Method Invocation (RMI) in Java Card, introduced in version 3.0 and available in subsequent 3.x releases, provides a proxy-based mechanism for invoking methods on remote objects within multi-context environments on the card. It operates as a subset of standard RMI, using APDU commands like SELECT and INVOKE to marshal parameters and handle return values, though limited to simple types and avoiding complex object graphs to suit resource constraints. This feature facilitates interactions between applets and off-card applications via a Card Acceptance Device (CAD), enhancing modularity in deployments. Support for biometrics and peripherals is provided through optional extension packages like javacardx.biometry and javacardx.biometry1toN, available since version 3.0, which enable secure elements to interface with sensors for tasks such as template management and 1:N matching. These allow to implement biometric servers, handling owner and shared templates via interfaces like OwnerBioTemplate and SharedBioTemplate, ensuring secure data processing within the card's constrained environment. For instance, a biometric can initialize matching sessions and perform verification without exposing raw sensor data outside the secure boundary. Power management in Java Card addresses the intermittent typical of smart s, with the runtime environment ensuring object persistence in across power cycles while handling resets and low-power states during APDU processing. Upon card reset or power loss (known as a "card tear"), transient objects marked as CLEAR_ON_RESET are cleared to default values, ongoing s are aborted, and the card returns to a defined initial state, with the basic logical channel (0) potentially selecting a default . This design supports updates via transaction mechanisms, restoring consistent states post-recovery to prevent in low-power scenarios. The absence of multi-threading in the Classic Edition enforces a single-threaded execution model, where APDUs are processed sequentially with explicit context management to ensure deterministic behavior in resource-limited secure environments. Only one context is active at a time, preventing concurrent access and relying on firewall-enforced switches for inter-context operations, which simplifies implementation but requires developers to handle sequencing manually. This contrasts with the Connected Edition's support for multithreading but aligns with the platform's focus on reliability over parallelism.

Development Process

Tools and Development Kits

The Java Card Development Kit (JCDK) version 25.1, released on November 12, 2025, serves as the primary software suite for building, converting, and verifying Java Card applications. This release includes improvements to the simulator, tools, and workflows, along with a new driver for Windows to enhance integration. It comprises several core tools, including the converter, which transforms compiled Java class files into executable files suitable for deployment on Java Card platforms; the verifier, which checks files for adherence to the Java Card specification and ensures ; and the masker (also known as maskgen), which generates mask files from Java Card outputs produced by the converter, facilitating integration with specific hardware implementations. These tools support Java Card specifications from versions 3.0.4 through 3.2, enabling developers to handle the constraints of resource-limited smart card environments. A key component of the JCDK is its simulator, which emulates the Classic Virtual Machine (CVM) to allow off-card testing of without physical hardware. The simulator supports interactive , APDU (Application Protocol Data Unit) scripting for simulating card-reader interactions, and management, making it invaluable for iterative development and validation of applet behavior under controlled conditions. It implements the full Java Card 3.2 , including and features, to closely mimic on-card execution. For enhanced productivity, the JCDK integrates with integrated development environments (IDEs) like via dedicated plugins that streamline , , and workflows. is further supported through scripts, which automate the conversion and verification processes in multi-applet projects. Open-source alternatives, such as GlobalPlatformPro, provide command-line utilities for loading and management on compatible cards, offering flexibility for developers preferring lightweight, scriptable tools over proprietary IDEs. Testing within the JCDK ecosystem includes CAP file generators embedded in the converter tool and the (TCK), an automated regression test suite designed to validate platform implementations against official specifications. The TCK runs comprehensive suites of test cases covering compliance, verification, and runtime behaviors, ensuring applications meet requirements before deployment.

Applet Development and Deployment

Applet development for Java Card begins with creating a subclass of the javacard.framework.Applet class, which serves as the base for all applets. Developers override key methods such as install(), process(APDU), select(), and deselect() to define the applet's behavior. The install() method is invoked once during installation to register the applet with the Java Card Runtime Environment (JCRE) and initialize persistent objects. The core process(APDU) method handles incoming Application Protocol Data Units (APDUs) by parsing the command header—using constants like ISO7816.OFFSET_CLA for the class byte (CLA), instruction byte (INS), and parameters (P1, P2)—processing the data field, and sending responses via the APDU buffer. For example, a basic implementation might check the CLA byte and delegate to specific handlers for commands like SELECT or other ISO 7816-4 operations. Once the source code is written in , it is compiled into .class files using standard Java compilers from the (JDK). These .class files are then converted into a Converted Applet (CAP) file using the Java Card Converter tool, which performs bytecode verification, resolves symbolic references, and ensures compatibility with the Java Card (JCVM). The CAP file's integrity is verified post-conversion to confirm no errors in structure or dependencies, preparing it for deployment on resource-constrained devices. This process isolates the from the host Java environment, optimizing for the smart card's limited memory and execution model. Deployment of the CAP file onto a Java Card device typically uses GlobalPlatform-compliant tools to establish a for transmission. The process involves sending INSTALL commands: first, INSTALL [for load] to transfer the executable load file in data blocks; followed by INSTALL [for install] to instantiate the from the loaded file, registering its Application Identifier () in the JCRE's registry; and optionally INSTALL [for make selectable] to enable selection. Over-the-air () updates are facilitated through Remote Applet Management (), allowing post-issuance loading and installation via secure, authenticated connections managed by Security Domains. Tools like GlobalPlatformPro or pyGlobalPlatform implement these commands, ensuring the applet is loaded, verified for integrity (e.g., via Load File Data Block Hash), and instantiated without disrupting existing applications. The lifecycle is managed by the JCRE and GlobalPlatform mechanisms, starting with phases: loading the file, verifying its components, and instantiating the via a call to its install() method, which allocates and registers the . Once installed, the can be selected by using a SELECT command with its , triggering the select() method (which typically returns true to confirm readiness) and setting it as the active context for APDU processing. Deselection occurs when another is selected or the session ends, invoking deselect() to release transient resources. Deletion removes the from the registry using a DELETE command, reclaiming but requiring such as a Delete Token or PIN verification to prevent unauthorized removal, especially in multi-application environments. Best practices emphasize resource efficiency due to the constrained environment of smart cards. To minimize use, developers should allocate persistent objects in the install() method, reuse transient buffers like the APDU buffer for temporary data, declare static arrays for constants, and limit (NVM) updates to under 200,000 cycles for reliability. Exceptions must be handled explicitly with try-catch blocks around calls, using ISOException.throwIt() with specific reason codes to avoid unhandled errors that could halt processing; for instance, catch TransactionException and abort if commit limits are exceeded. Power-loss resilience is achieved by wrapping critical operations in transactions with JCSystem.beginTransaction() and JCSystem.commitTransaction(), ensuring atomicity and —developers should test by simulating resets during execution and limit command processing to under 30 seconds to prevent timeouts. These practices enhance robustness and across Java Card platforms.

CAP File Format and Evolution

The Converted Applet (CAP) file serves as the binary representation of a Java Card package, containing all necessary components for installing and executing or libraries on resource-constrained devices such as smart cards. Unlike standard Java JAR files, the CAP format is optimized for efficiency, resulting in a significantly smaller footprint by excluding unsupported Java features and using a compact binary structure. It consists of a stream of 8-bit bytes in big-endian order, where multi-byte values (u2 for 16 bits, u4 for 32 bits in extended formats) are formed from consecutive bytes, and components are self-describing units prefixed with a 1-byte , a 2- or 4-byte size (excluding tag and size fields), and variable-length info data. CAP files are organized into required and optional components, each handling specific aspects of the package. The Header component (tag 1) includes a magic number (0xDECAFFED), major and minor version numbers (e.g., 2 for major in classic editions), flags, and package metadata such as the Application Identifier () per ISO 7816-5 and the package name. The Directory component (tag 2) provides offsets and sizes for all components, enabling efficient parsing and supporting custom components via tags 128-255. Core components include the (tag 4) for dependency tracking, Constant Pool (tag 5) for shared references like class names and field types (tags 1-6), (tag 6) for class/interface descriptors including access flags and member counts, (tag 7) for bytecode arrays and exception handlers, Static (tag 8) for initial values of non-final statics, and Reference Location (tag 9) for mapping constant pool indices in . Optional elements encompass the (tag 3) for AID and install method details, (tag 10) for inter-package visibility of public elements, Descriptor (tag 11) for verification data like type signatures and method offsets, Debug (tag 12) for source mapping and line numbers, and Static Resource (tag 13) for embedded data files. These components support library chaining, where export files from one CAP reference imports in another, facilitating modular development without runtime linking. The format originated in Java Card 2.x versions as a compact, single-package structure designed for static installation, with a maximum bytecode size of 64 KB and u2 size fields to minimize overhead in early smart card environments. This version emphasized on-card by including descriptor info for type checking without requiring a full on the device. In Java Card 3.1, an extended format was introduced as an optional enhancement to the mandatory compact format, addressing limitations for larger applications by supporting up to 128 blocks of 64 KB each, multiple Java packages per file (up to 255), and u4 size fields for scalability. The extended format adds features like packages (inaccessible outside the CAP), packages for sharing across files, block-based organization for , and support for static initialized arrays in contexts, enabling more complex, dynamically loadable applications while maintaining with 2.x devices. Subsequent versions, such as 3.2, refined options and debug support without altering the core structure. CAP files are generated through a conversion process that transforms standard Java class files (from compilation) into this format using a dedicated converter tool, which strips unsupported features like synchronized blocks, floating-point operations, and object cloning to ensure compatibility with the Java Card Virtual Machine. The resulting enables efficient deployment within a JAR container under the javacard directory, with individual components as .cap files (e.g., Header.cap), and supports off-card verification for security before installation. This format's advantages include reduced storage needs compared to JARs—often by an —and the ability to perform complete on-card installation verification, minimizing host-side computation in embedded systems.

Security

Security Model and Sandbox

The Java Card security model is built around a architecture that ensures strict of to prevent interference and unauthorized access to shared resources. Each executes within its own dedicated , defined by a unique Application Identifier (), and is confined to a specific area managed by the Java Card Runtime Environment (). The core mechanism enforcing this is the , which dynamically separates at , allowing method invocations only within the current execution or through explicitly permitted channels. This prevents one from accessing objects owned by another, thereby protecting code and across multiple applications on the same card. Access controls in the Java Card sandbox are implemented at the package level to enable controlled sharing while maintaining boundaries. The Export File component of the Converted () format specifies public s for inter-package linking, ensuring that only designated classes and methods are exposed based on attributes like and . Owner interfaces further restrict exposure, allowing an applet creator or the JCRE to define shareable interface objects (SIOs) that permit limited, mediated communication between —such as through logical channels—without compromising the . These mechanisms, enforced by the Java Card Virtual Machine (JCVM), align with language access modifiers to block unauthorized object creation or manipulation. Integrity protection forms a foundational layer of the , beginning with rigorous processes to reject malformed or tampered code. On-card verification, when implemented, checks files for compliance with the Java Card specification during installation, while off-card occurs prior to loading to ensure authenticity and consistency. The card manager oversees secure boot procedures, using GlobalPlatform-compliant mechanisms to validate the platform state and recover from interruptions like power loss, thereby maintaining a tamper-evident environment. Global arrays and sensitive data are cleared upon deallocation to prevent residual information leakage. To mitigate attacks, the Java Card model incorporates defenses against both logical and physical threats within the constraints. Side-channel attacks, such as timing or , are countered through hardware-supported resistance in certified integrated circuits, including constant-time operations for sensitive computations and unobservability of critical data like keys. The absence of capabilities prevents or dynamic , while native execution is restricted to the predefined Java Card , eliminating avenues for or bypass. These features collectively enhance resilience without relying on external beyond basic support. The overall security model aligns with Common Criteria evaluations at EAL5+ levels for certified implementations, incorporating augmentations like AVA_VAN.5 for advanced vulnerability analysis and ALC_DVS.2 for development security. This assurance , defined in the Java Card Protection Profile Open Configuration, validates the sandbox's effectiveness in high-security applications such as payment cards and identity tokens.

Cryptographic and I/O Enhancements

The javacardx.crypto package provides advanced cryptographic APIs for symmetric encryption and , including support for the () through the Cipher class, which enables operations in modes such as Electronic Codebook (ECB), (CBC), and (CTR). This package also includes the AEADCipher class for with Associated Data (AEAD) modes like in Galois/ Mode (GCM) and with (CCM), facilitating secure messaging with Message (MACs) for integrity protection in data exchanges. Key and management are supported via the KeyEncryption interface, allowing secure handling of encrypted keys, while AES-specific CMAC () is available through constants like ALG_AES_CMAC_128 for efficient on resource-constrained devices. Elliptic Curve Cryptography (ECC) is implemented in the javacard.security package, offering classes such as ECKey, ECPrivateKey, and ECPublicKey for and operations supporting ECDSA signatures and ECDH key agreement over prime fields. The KeyPair class facilitates ECC key pair generation using KeyBuilder.buildKeyPair, with support for curve parameters defined in standards like NIST P-256. Secure is provided by the RandomData class in the same package, offering true random sources (e.g., hardware-based) via ALG_SECURE_RANDOM to ensure cryptographic unpredictability for nonce and key material creation. Hashing enhancements include support in the javacard.security.MessageDigest class, with algorithm constants such as ALG_SHA3_256 and length constants like LENGTH_SHA3_256 (32 bytes) for producing digests resistant to collision attacks. For over-the-air () updates, these enable secure provisioning by integrating with MAC-protected channels and key derivation for session keys. The I/O in Card has been extended to handle larger data transfers and peripheral interactions securely. Extended Application Protocol Data Units (APDUs) in version 3.1 support payloads up to 64 KB using the T=1 block protocol, allowing efficient processing of large inputs like biometric templates without fragmentation, as defined by ISO/IEC 7816-4:2013. This is implemented by applets extending the javacard.framework.ExtendedLength interface, which automatically detects and processes extended-length APDUs for improved throughput in data-intensive operations. Trusted peripherals API, introduced in version 3.1, enables direct access to hardware components via the javacardx.framework packages, including javacardx.framework.event for event-driven interactions and javacardx.framework.nio for buffered I/O. This framework supports hardware accelerators for cryptographic offloading, such as engines, reducing VM overhead and achieving up to 10x performance gains in encryption speed on constrained hardware. True random number generators (TRNGs) integrated as peripherals provide high-entropy sources compliant with NIST SP 800-90B, enhancing for without relying on software pseudo-random methods. Biometric key derivation is facilitated by the javacardx.biometry package, where classes like BioTemplate and OwnerBioTemplate manage biometric data (e.g., fingerprints) to derive session keys via integration with javacardx.security.derivation.DerivationFunction, supporting standards like (RFC 5869) for binding biometric features to cryptographic keys. Logical channels are enhanced to support up to 20 concurrent sessions per I/O interface, allowing multiplexed APDU handling for simultaneous applet interactions without blocking, as managed by the javacard.framework runtime. Proprietary extensions can leverage this framework for custom peripherals, such as secure elements in devices, ensuring isolation through the security model.

Certification and Compliance

Java Card implementations must adhere to a set of established standards to ensure security, portability, and interoperability across diverse hardware platforms. The platform complies with the Java Card Platform specifications defined by , the GlobalPlatform Card Specification version 2.3 and later, which outlines management including loading and execution, and ISO/IEC 7816 for communication protocols and data structures. Certification processes for Java Card platforms primarily rely on the Java Card Protection Profile (JCPP), a modular security requirements document aligned with (ISO/IEC 15408) version 3.1 revision 5. The JCPP, provided by as the worldwide reference, supports the open configuration: version 3.2 (certified by BSI under CC-PP-0099 as of July 2024) allows post-issuance applet downloading. Earlier closed configurations (e.g., version 3.0.5, CC-PP-0101-2018) restrict it for higher assurance. Evaluations under the JCPP typically achieve EAL4+ to EAL7+ levels, with the version 3.2 open configuration certified to EAL4 augmented by ALC_DVS.2, AVA_VAN.5, and ALC_FLR.2; 's reference implementation serves as the baseline for vendor assessments by accredited labs. Testing for compliance involves Oracle's Java Card Technology Compatibility Kit (TCK), a configurable automated test suite that verifies coverage and behavioral adherence to the Java Card specifications. Available under commercial license to authorized vendors, the TCK ensures implementations pass rigorous checks before , complemented by vendor-specific validation to confirm integration with underlying chip architectures. Interoperability is facilitated through standardized Application Identifier (AID) allocation, as defined in ISO/IEC 7816-5, where AIDs (5-16 bytes) uniquely identify and domains to prevent conflicts. GlobalPlatform coordinates AID assignments for its card manager and issuer domains (e.g., A000000151 for the default Card Manager AID), enabling seamless deployment across compliant cards from multiple vendors. A key challenge in certification arises from maintaining in cards certified under earlier profiles following updates like Java Card 3.2, which introduces enhancements such as (D)TLS 1.3 support and signatures; vendors must validate that legacy remain functional without requiring full re-evaluation, balancing new features with established assurances.

Versions

Versions 1.x and 2.x

The Java Card platform's initial releases in versions 1.x and 2.x laid the foundation for smart card programming by adapting a subset of the Java language to resource-constrained environments, focusing on applet lifecycle management, secure communication via Application Protocol Data Units (APDUs), and basic runtime isolation without support for garbage collection. These versions prioritized portability across diverse hardware through the Converted Applet (CAP) file format and established core security mechanisms like the applet firewall, which prevents unauthorized access between applets. Released between 1997 and 2006, they enabled the deployment of simple applications for tasks such as authentication and basic data storage, forming the basis for widespread adoption in payment and identification cards. Java Card 1.0, introduced in 1997, provided fundamental support for development and execution on cards, including core classes for applet registration, selection, and deselecting, as well as APDU buffering and to handle commands from card readers. It lacked advanced features like transaction atomicity, relying instead on manual to ensure data consistency during operations. Cryptographic primitives were absent, limiting applications to non-sensitive use cases without built-in encryption. This version's API-only specification, proposed initially by engineers, emphasized simplicity to fit within the typical 1-2 KB and 16-32 KB constraints of early cards. In 1998, Java Card 1.1 extended the platform with transaction support through the JCSystem.beginTransaction(), JCSystem.commitTransaction(), and JCSystem.abortTransaction() methods, allowing atomic updates to to prevent partial writes during power loss or errors. Basic was added via the javacard.security and javacardx.crypto packages, including () key generation, encryption, and decryption interfaces for symmetric operations. These enhancements enabled secure data exchange in early financial and applications while maintaining the no-garbage-collection model, requiring developers to explicitly manage object deletion to avoid memory exhaustion. Java Card 1.2, released in 1999, introduced features such as support for multi-byte character handling and locale-specific data formatting in the , alongside explicit object deletion mechanisms via JCSystem.requestObjectDeletion() to reclaim without collection. It refined APDU handling for better error recovery and added basic array management for transient objects, improving efficiency for multi-language applets in global deployments. These updates addressed limitations in 1.1 by enhancing developer control over resources, though the platform still excluded and threading to preserve and predictability. The shift to version 2.0 in 1998 marked a significant evolution, introducing Remote Method Invocation (RMI) for object-oriented communication between on-card applets and off-card entities, using stubs and skeletons to abstract method calls over APDUs. It also added the Java Card Toolkit package (javacard.framework.service), enabling access to off-card resources like card readers for extended functionality. Basic crypto extensions from 1.1 were standardized further, with improved key interfaces and random number generation. This version solidified the CAP file format for verified bytecode portability, supporting the growing ecosystem of certified cards. Java Card 2.1, launched in 1999, built on 2.0 by extending cryptographic capabilities with additional algorithms like for asymmetric operations and for message digests in the javacardx.crypto package. It introduced shareable interface objects via the Shareable interface, allowing controlled inter-applet object sharing while enforcing the policy to mitigate access violations. Transaction isolation was refined for better concurrency in multi-applet scenarios, and export files were formalized for package dependencies. These features enhanced modularity for complex applications like multi-application payment schemes. Version 2.2, released in 2003 (with 2.2.1), added support for biometric authentication via the javacardx.biometry package and other enhancements like applet deletion. The 2.2.2 update in 2006 provided minor fixes, including clarifications to the specification for better verification tools and compatibility with evolving hardware, along with support for up to 20 concurrent logical channels, without introducing major . The 1.x and 2.x versions collectively underpin billions of deployed smart cards worldwide, powering , payment systems, and e-passports due to their robust, verifiable . However, the absence of automatic garbage collection necessitated careful , often leading to developer overhead and limiting for memory-intensive applications—a limitation addressed in later editions.

Java Card 3.0

Java Card 3.0, released in 2009 (with updates through 3.0.1 in 2009 and 3.0.5 in 2015), marked a significant evolution in the platform's Classic Edition, targeting resource-constrained smart cards while enhancing runtime efficiency and cryptographic capabilities. This version formalized the distinction between the Classic Edition for traditional applet-based applications and the Connected Edition for networked devices, with the Classic Edition focusing on and incremental improvements over prior versions. Updates continued through version 3.0.5, released in June 2015, incorporating bug fixes, clarifications, and new algorithms without altering core compatibility. A key advancement in Java Card 3.0 Classic Edition was the introduction of optional automatic garbage collection, allowing implementers to enable memory reclamation for transient objects to mitigate fragmentation in limited environments. This feature, specified in the platform's updates, improved long-term performance by automatically identifying and deleting unreferenced objects, though it remained optional to accommodate hardware constraints. enhancements also included refined , such as the addition of the ILLEGAL_STATE constant to PINException for better error reporting in scenarios. Additionally, support for dynamic registration was bolstered, enabling more flexible multi-application environments on cards hosting multiple independent applets. Security in Java Card 3.0 Classic Edition saw substantial extensions to cryptographic APIs, particularly for (ECC), with support for a broader range of key lengths suitable for commercial deployments, including plain ECDSA via the SIG_CIPHER_ECDSA_PLAIN algorithm. Advanced crypto primitives were added, such as AES-CMAC for message authentication, and Diffie-Hellman key agreement through new interfaces like DHKey, DHPrivateKey, and DHPublicKey. Key management was enhanced with support for longer keys (up to 3072 bits via LENGTH_RSA_3072) and the introduction of the javacardx.security package, featuring the SensitiveResult class for handling sensitive operations securely. These updates, including the SensitiveArrays class for protected data handling, strengthened the platform's sandbox model against unauthorized access and side-channel attacks. The platform maintained full with Java Card 2.x Converted Applet (CAP) files, ensuring that existing applications could deploy without modification while leveraging the new features through extended . This compatibility, combined with API versioning (e.g., javacard. updated to 1.6), allowed seamless transitions for developers building multi-application cards. Building on the foundational of versions 1.x and 2.x, Java Card 3.0 resolved early limitations in and , enabling more robust implementations.

Java Card 3.1

Java Card 3.1, released on January 16, 2019, builds upon the foundation of version 3.0 by introducing enhancements that improve application modularity, input/output flexibility, and cryptographic capabilities, particularly for () deployments. This version supports larger-scale applications and post-deployment updates, enabling secure operations on resource-constrained devices such as smart cards and embedded systems. It inherits the garbage collection mechanisms from Java Card 3.0 while adding refinements for better runtime efficiency. A key advancement in Java Card 3.1 is the extended Converted Applet (CAP) file format, which supports modular components through multi-package structures and dynamic linking. This format allows applications exceeding 64 in size and facilitates the inclusion of private and public libraries, simplifying deployment of complex applets by enabling reusable components without recompilation. The new COMPONENT_Static_Resources component manages static resources mandatorily, while the optional extended format improves extensibility via a Virtual Method Mapping Table, reducing the overhead for larger ecosystems. The I/O framework in Java Card 3.1 has been extended to handle more sophisticated interactions, including clarifications on malformed Application Protocol Data Unit (APDU) handling and logical channels. Logical channels now support up to 20 concurrent sessions per interface, allowing multiple applets to execute simultaneously for enhanced multi-application support. Additionally, the extensible I/O model, via packages like javacardx.framework.event and javacardx.framework.nio, enables direct data exchange with trusted peripherals, such as sensors in devices, without relying solely on card readers. Extended APDU formats further accommodate larger data transfers, crucial for operations like signature verification. Core enhancements focus on improved , including better array handling through Array Views, which provide efficient access to array subsets without copying data. The JCSystem.makeArrayView() API, for instance, creates views for optimized processing in memory-constrained environments. Remote object references in the Java Card Remote Method Invocation (RMI) system are refined, with objects passable only as return values to maintain , supporting distributed interactions in networked applets. Cryptographic extensions in Java Card 3.1 introduce support for modern algorithms, including (via X25519 key agreement) and advanced signatures like Ed25519 and Ed448 under the scheme, all optional for platform flexibility. Additional optional features encompass AES-CFB and AES-XTS modes, configurable asymmetric key generation, and named s, enhancing interoperability with contemporary security protocols. These refinements enable more complex applications, such as secure bootloaders in automotive systems and device attestation in IoT gateways, by allowing multiple security services on a single chip with easier upgrades and reduced deployment complexity.

Java Card 3.2

Java Card 3.2, released in January 2023, introduces significant advancements to the Classic Edition platform, building on post-2017 specification evolutions from earlier versions. This update emphasizes enhanced interoperability and security for secure elements in resource-constrained environments, with full implementation support provided by the Java Card Development Kit (JCDK) version 25.0, made available in April 2025. The specification refines the runtime environment to accommodate contemporary hardware, including improved virtual machine (VM) configurations for logical channels that support either multiple channels (Type 4 or Type 4 & 16) or basic channel-only modes, optimizing performance on modern secure elements without compromising resource efficiency. Cryptographic extensions in Java Card 3.2 focus on modern protocols and algorithms to bolster in high-stakes applications, including mandatory support for clearing biometric templates via a new in the javacardx.biometry package, enabling secure management of biometric data on the platform. Key additions encompass optional implementations of (D)TLS 1.3 key schedules for , EdDSA digital signatures using edwards25519 and edwards448 curves, SM2 key agreement with confirmation values, and enhancements to RSA-OAEP, RSA-PSS, and ISO 9796 digital signatures with message recovery. These features provide developers with flexible tools for robust , while optional elements allow platforms to throw CryptoException.NO_SUCH_ALGORITHM if not supported, ensuring . The specification also introduces a mandatory for retrieving available memory as a , aiding efficient in applets. It evolves from Java Card 3.1's CAP file format and I/O mechanisms, incorporating refined handling for these foundational elements. Compliance and security are reinforced through alignment with the Java Card , which mandates countermeasures against threats such as side-channel attacks via techniques like differential power analysis resistance in cryptographic operations. The ensures certified implementations achieve high assurance levels (EAL4+ to EAL7+), addressing vulnerabilities in bytecode verification and memory access. Currently, Java Card 3.2 remains under active development by , with a strong emphasis on integration for devices and 5G cards to support secure cellular connectivity from 2G to 5G networks, enabling applications in , strong , and tamper-resistant ecosystems.

References

  1. [1]
    Oracle Java Card technology
    Java Card is the leading open, interoperable platform for secure elements, enabling smart cards and other tamper-resistant chips to host multiple applications ...Oracle India · Oracle United Kingdom · Oracle Europe · Oracle Israel
  2. [2]
    An Introduction to Java Card Technology - Part 1
    Java Card technology adapts Java for smart cards, using a subset of Java for applications on resource-constrained devices.
  3. [3]
    Writing a Java Card Applet - Oracle
    A Bit of Java Card History. Java Card 1.0 was initially proposed by engineers at Schlumberger. It consisted of a specification for APIs only. Later, other ...
  4. [4]
    About Java Cards | CardLogix Corporation
    History. The history of Java Card dates back to the mid-1990s when smart cards were gaining popularity as secure devices for various applications. Here is an ...
  5. [5]
    [PDF] Java Card is simple! - jCardSim
    May 13, 2013 · February 2, 1997, the first Java card was received from the factory. June, 2005. Sun Microsystems, Inc. announces that 1 billion Java Card cards.
  6. [6]
    Oracle's Stewardship of Java
    Oracle's Stewardship of Java. With its acquisition of Sun Microsystems in 2010, Oracle also acquired the ownership and stewardship of Java.
  7. [7]
    GlobalPlatform & Sun Microsystems Collaborate on Next Generation ...
    GlobalPlatform & Sun Microsystems Collaborate on Next Generation Java Card Technology. New GlobalPlatform Card and Java Card Specifications to Fuel Contactless ...
  8. [8]
    Release of the new Java Card Development Kit version 25.0
    Apr 28, 2025 · Oracle's Java Card team is excited to announce the release of the Java Card Development Kit (JCDK) v25.0, which consists of three components: Tools, Simulator, ...
  9. [9]
    Java Card Platform Specification Release Notes, Version 3.2
    Java Card technology combines a portion of the Java programming language with a runtime environment optimized for smart cards and related, small-memory ...
  10. [10]
    Java Card Platform Specification 2.2.2 - Oracle
    Java Card technology is the leading open, interoperable platform for smart cards and secure tokens. Providing the basis for cross-platform and cross-vendor ...
  11. [11]
    [PDF] Java Card™ Platform Security - Technical White Paper - Oracle
    For example, VISA. International initiated the Global Platform specifications, which are an example of the flexible loading mechanisms that may be deployed with ...
  12. [12]
    [PDF] JavaCard— From Hype to Reality - IBM
    The advantages of this are obvious: Instead of programming the card's code in hardware-specific assembler code, new applications can be developed in portable.
  13. [13]
    Java Card Frequently Asked Questions (FAQ) - Oracle
    Compared to native products, Java Card products embed similar core technologies, like cryptography and security countermeasures. Naturally, because Java Card ...
  14. [14]
    [PDF] Java Card Platform, Runtime Environment Specification, Version 3.1
    Feb 1, 2021 · This document specifies the Java Card RE functionality required by the Classic Edition of the Java Card ... ISO 7816-4 based I/O across the card ...
  15. [15]
    Understanding Java Card 2.0 | InfoWorld
    A Java Card is a smart card that is capable of running Java programs. The Java Card 2.0 specification was published at https://www.javasoft.com/javacard.
  16. [16]
    [PDF] JCOP4SECIDAPPA4.pdf
    ▻ Java Card v3.0.5 Classic Edition. ▻ GlobalPlatform®. • GP v2.2 ID ... ▻ ISO 7816-3 T=0, T=1. ▻ ISO 14443 (up to 848kbps). ▻ Dual-interface support.
  17. [17]
    [PDF] Runtime Environment Specification, Java Card Platform ... - RuimTools
    Classic Edition, specifies the Java Card RE functionality required by the Java Card ... ISO 7816 parts 1-4 specifications. □. A single contacted I/O ...
  18. [18]
    [PDF] Securing connected IoT with Java - Infineon Technologies
    Efficiency is realized by leveraging proven JavaCard and GlobalPlatform architecture that secures billions of SIM cards, ePassports and. EMV payment cards ...
  19. [19]
    Java Card Downloads - Oracle
    Always make sure to download the latest Java Card Development Kit Tools for up-to-date security. ... Java Card Development Kit Tools 25.0 (23-Apr-2025) ...
  20. [20]
    Deploying Servlets on Smart Cards: Portable Web Servers with Java ...
    The Java Card 3 platform includes ... Garbage collection of objects; TCP/IP networking; HTTP and HTTPS .class files .war deployment files; Dynamic class loading ...
  21. [21]
    Java Card Connected Platform Specification 3.0.1 - Oracle
    The Connected Edition features a significantly enhanced runtime environment and a new virtual machine. It targets less resource-constrained devices.
  22. [22]
    [PDF] Programming Notes- Connected Edition - Oracle
    This book contains tips and guidelines for developers using the Java Card™ 3. Platform, Connected Edition, to create applications and for developers of ...
  23. [23]
    Java Card and IOT - Oracle
    Java Card now includes dedicated features for the development of Internet of Things (IoT) Security applications at the edge of the network.Missing: targets USB tokens
  24. [24]
    [PDF] Java Card Platform, Virtual Machine Specification, Version 3.1
    Feb 1, 2021 · Dynamic class loading is not supported in the Java Card platform. ... A Java Card virtual machine will not necessarily garbage collect objects.
  25. [25]
    [PDF] Java Card Platform, Runtime Environment Specification, Version 3.2
    Jan 2, 2023 · The Java Card Virtual Machine conforms to the relevant subset of the Java Language Specification memory model. In particular, it provides a ...
  26. [26]
    [PDF] Java Card 2.2 Off-Card Verifier - Oracle
    This chapter describes the byte code verification algorithm in the Java Card. Off-Card Verifier. CAP File Format. As described in the Java Card 2.2 Virtual ...
  27. [27]
    Running the Converter - Java Card Platform - Oracle Help Center
    Optimization - Optimizes the byte code. Generates output - Builds and outputs one EXP export file for each package and one JCA file for each package, checks for ...
  28. [28]
    StringUtil (Java Card API, Classic Edition) - Oracle Help Center
    The encoded character sequences handled by this class are stored in byte arrays. Each string or character sequence is designated by a byte array, an offset in ...
  29. [29]
    javacard.framework (Java Card API, Classic Edition)
    Provides a framework of classes and interfaces for building, communicating with and working with Java Card technology-based applets.
  30. [30]
    javacard.security (Java Card API, Classic Edition)
    ### Summary of javacard.security Package: Basic Keys and Cryptographic Services
  31. [31]
    Util (Java Card API, Classic Edition)
    ### Summary of `javacard.framework.Util`
  32. [32]
    JCSystem (Java Card API, Classic Edition)
    ### Summary of Transaction Support in JCSystem
  33. [33]
    javacardx.crypto (Java Card API, Classic Edition)
    ### Summary of Optional Crypto Packages in `javacardx.crypto`
  34. [34]
    javacardx.biometry (Java Card API, Classic Edition)
    The javacardx.biometry package contains classes and interfaces which can be used to build a biometric server application. These classes also enable a client ...
  35. [35]
    javacardx.biometry1toN (Java Card API, Classic Edition)
    Extension package that contains functionality for implementing a 1:N biometric framework on the Java Card platform.
  36. [36]
    [PDF] Java Card - Development Kit User Guide - Oracle Help Center
    Jan 15, 2006 · Since the remote object is configured as a Java Card platform-specific object with a local connection to the smart card through the ...
  37. [37]
    [PDF] Java Card - Developer Kit Simulator User Guide - Oracle Help Center
    This guide covers setup, samples, tools, installation, running the simulator, debugging, and packaging/deploying applications.
  38. [38]
    [PDF] Java Card - Development Kit Tools User Guide - Oracle Help Center
    Feb 13, 2024 · This guide covers setup, installation, developing Java Card applications, converting Java class files, and working with CAP files.
  39. [39]
    Java Card Development Kit Components - Oracle Help Center
    Java Card Development Kit Tools - Used to convert and verify Java Card appliations. The Tools can be used with products based on version 3.0.4, 3.0.5, 3.1, and ...
  40. [40]
    Configuring the Java Card Development Kit Simulator
    The simulator is configured using the Configurator tool with a Secure Channel Protocol key set and a Global PIN, using the command line.
  41. [41]
    Getting started · martinpaljak/GlobalPlatformPro Wiki - GitHub
    Oct 2, 2024 · GlobalPlatformPro requires Java and a smart card reader (PC/SC). Tip ... JDK 11 LTS or later is required (for JavaCard development, see JavaCard ...
  42. [42]
    Java Card TCK - Oracle Help Center
    The Java Card Technology Compatibility Kit (Java Card TCK) is a configurable automated test suite for verifying the compliance of an implementation with the ...Missing: regression | Show results with:regression
  43. [43]
    [PDF] An Integrated Testing and Debugging Environment for Java Card
    Abstract: - This paper describes integrated testing and debugging environment for Java Card. An integrated testing and debugging environment is based on J ...
  44. [44]
    Developing a Java Card Applet - Oracle
    A Converter tool that converts a Java Card applet into a format required for masking or for installation. Off-card verification tools that check the integrity ...
  45. [45]
    [PDF] Java Card Applet Developer's Guide
    Class String itself is not supported within the Java Card platform, therefore string messages cannot be supported in exceptions either. As an alternate way to ...<|control11|><|separator|>
  46. [46]
    Java Card Applet Development - Oracle Help Center
    Install and setup the development environment. Using the Eclipse IDE and Java Card plug- ...Missing: documentation | Show results with:documentation
  47. [47]
    [PDF] Card Specification v2.3.1 - GlobalPlatform
    The changes relating specifically to the Java Card™ implementation of Open Platform were listed in the beginning of Appendix A, GlobalPlatform API. All the ...
  48. [48]
    Development Kit User Guide
    ### Summary of Java Card Applet Packaging and Deployment
  49. [49]
    [PDF] Stepping Stones for Java Card Applet Developers
    The latest version, Java Card 3.2, introduced in 2023, expands the horizon with support for advanced security algorithms, improved cryptographic operation ...Missing: adoption enterprise
  50. [50]
    [PDF] Java Card Platform, Virtual Machine Specification, Version 3.2
    Jan 2, 2023 · For a complete description of the Java Card CAP file format, see Chapter 6, The CAP File Format. 4.1.3 JAR File Container. The JAR file ...
  51. [51]
    Java Card Platform Specification Release Notes, Version 3.1
    This release notes describes the list of changes introduced in the Version 3.1 of the Java Card specifications.Missing: hardware | Show results with:hardware
  52. [52]
    [PDF] Open Configuration Protection Profile - Java Card System - Oracle
    Java Card™ technology was tailored in order to enable programs written in the Java™ programming language to run on smart cards and other resource–constrained ...Missing: multi- | Show results with:multi-
  53. [53]
    [PDF] Security Target - Java Card Platform on M7892 G12 V2.0 ... - Oracle
    It constitutes a secure generic platform that supports multi-application runtime environment and provides facilities for secure loading and interoperability ...
  54. [54]
  55. [55]
  56. [56]
  57. [57]
  58. [58]
    [PDF] Classic Edition Specifications, Java Card Platform, Version 3.0.5
    Also included are bug fixes and clarifications against the Java Card Classic Edition specifications, Version 3.0.4, and new security algorithms. CLASSIC EDITION.
  59. [59]
    14 Using Extended APDU - Oracle Help Center
    This chapter describes the Extended APDU and how it can be used to allow large amounts of data to be sent to the card, processed appropriately, and sent back ...
  60. [60]
    Extended APDU Format - Oracle Help Center
    Any APDU classified as extended must follow the format defined by ISO/IEC 7816-4:2013 for extended length APDU and summarized in Table 14-1.
  61. [61]
    Trusted Peripherals - Oracle Blogs
    Nov 1, 2022 · The new Java Card I/O framework can be used to create an API for applications to directly read and verify fingerprint data from the biometric ...
  62. [62]
  63. [63]
    12 Working with Logical Channels - Oracle Help Center
    The Java Card Platform, Version 3.1 can support up to twenty logical channels per active interface. Logical channels allow the concurrent execution of ...
  64. [64]
    Logical Channels - Oracle Help Center
    Logical channels are used when a card receives an APDU command with encoded channel information. The X nibble's least significant bits determine the channel, ...
  65. [65]
  66. [66]
    Java Card Protection Profile - Oracle
    The Java Card Protection Profile provides a modular set of security requirements designed specifically for the characteristics of the Java Card platform.
  67. [67]
    [PDF] Java Card System – Open Configuration Protection Profile
    These requirements should serve as a template for writing Common Criteria security targets of specific implementations of Java Card Systems.
  68. [68]
    Announcing Java Card 3.2 Release - Oracle Blogs
    Jan 30, 2023 · With the whole Java Card team, I am delighted to announce the new Java Card 3.2 release. It is now live and available on the portal of ...
  69. [69]
    [PDF] Java Card 2.0 API
    Java Card 2.0 API, copyright Sun Microsystems Inc. DRAFT. All Packages Index. Class Hierarchy class java.lang.Object class javacard.framework.AID class ...
  70. [70]
    [PDF] Java Card 2.1 Virtual Machine Specification
    In the description of the Java Card virtual machine instructions, the effect of an instruction's execution on the operand stack (§3.5) of the current frame ...
  71. [71]
    Unique Java Card verification and deployment model - Oracle Blogs
    Mar 15, 2022 · A verifier checks the structure of a Java Card Converted Applet (CAP) file - the file format for Java Card applications - and perform bytecode ...
  72. [72]
    [PDF] Java Card 3 Platform White paper - Oracle
    Java Card Platform, Connected Edition technology features a significantly enhanced execution environment and a new virtual machine. It includes new network- ...
  73. [73]
    Java Card 3: Classic Functionality Gets a Connectivity Boost - Oracle
    Java Card 3.0 enhances classic functionality with connected features that target less resource-constrained devices and include new network-oriented features.Missing: optional ECC
  74. [74]
    Application-Replay Attack on Java Cards: When the Garbage ... - HAL
    Apr 28, 2012 · Java Card 3.0 specifications: a true automatic garbage collection mechanism. This particular feature is one of the rare novelty to be ...
  75. [75]
    Java Card 3 Includes Java 6 Support and an Embedded Servlet ...
    Nov 4, 2009 · Java Card Version 3 consists of two editions, the Classic Edition ... Classic Edition VM include multiple packages and garbage collection.
  76. [76]
    [PDF] ECC programming in Java Card - Digital CSIC
    The latest release, Java Card 3.0, has incremented the support for ECC, offering a range of key lengths suitable for any commercial deployment. In this ...
  77. [77]
    Oracle Java Card Boosts Security for IoT Devices at the Edge
    Jan 16, 2019 · Oracle today announced the general availability of Java Card 3.1, the latest version of one of the world's most popular and open application ...
  78. [78]
    Provide an Implementation for Each Remote Method
    Remote objects are passed by reference. In the case of the Java Card Platform, Version 3.1, remote objects can only be passed as return values. A reference to a ...
  79. [79]
    Overview (Java Card API, Classic Edition) - Oracle Help Center
    This is the Application Programming Interface (API) for the Java Card™ Platform, Classic Edition, Version 3.2. The list of packages is divided into two ...