On IBM Z, the choice of distribution determines the cryptographic strategy. IBM Semeru Runtimes utilize the OpenJCEPlus provider, which acts as a bridge to a native OpenSSL engine that is bundled in OCKC. This allows Java applications to benefit from a common, FIPS-validated cryptographic library shared across the enterprise. IBM Semeru Runtimes also offer two other primary providers, SunJCE and IBMJCECCA, that bring extensive flexibility to the users for different cryptographic contexts and key types. In contrast, HotSpot-based runtimes (such as Red Hat OpenJDK) use JIT Intrinsics, where the JVM compiles CPACF opcodes directly into the application's machine code. While JIT intrinsics offer a self-contained "no-dependency" path, the IBM Semeru Runtimes approach provides superior flexibility through its diverse ecosystem of security providers, catering to organizations that require enterprise-grade cryptography, regulatory compliance, and high-performance hardware offloading. Table G in the Appendix shows the CPACF code path and cryptographic context comparison between IBM Semeru Runtimes and HotSpot Distributions such as Red Hat OpenJDK.
References
[1] https://www.ibm.com/docs/en/linux-on-systems?topic=hw-cpacf
[2] https://en.wikipedia.org/wiki/IBM_Z
[3] https://www.ibm.com/docs/en/linux-on-systems?topic=support-cp-assist-cryptographic-function-cpacf
[4] https://www.ibm.com/docs/en/zos/3.2.0?topic=icsf-cp-assist-cryptographic-functions-cpacf
[5] https://www.ibm.com/docs/en/linux-on-systems?topic=concepts-crypto-hw-categories
[6] https://www.ibm.com/docs/en/linux-on-systems?topic=statistics-monitoring-cpacf-activity
[7] https://www.ibm.com/support/pages/java-sdk-products-zos
[8] https://developer.ibm.com/languages/java/semeru-runtimes/downloads/
[9] https://community.ibm.com/community/user/blogs/farshad-rahimi-asl/2025/11/14/complete-guide-to-openjceplus
[10] https://github.com/IBM/OpenJCEPlus
[11] https://github.com/ibmruntimes/openj9-openjdk-jdk25
[12] https://www.ibm.com/docs/en/linux-on-systems?topic=linuxone-openssl-ibmz
[13] https://www.ibm.com/docs/en/semeru-runtime-ce-z/21.0.0?topic=guide-ibmjcecca
[14] https://www.ibm.com/docs/en/zos/3.2.0?topic=management-protected-key-cpacf
[15] https://www.ibm.com/docs/en/SSLTBW_3.1.0/pdf/csfb400_icsf_apg_hcr77e0.pdf
[16] https://github.com/openjdk/jdk/blob/master/src/hotspot/cpu/s390/assembler_s390.hpp
[17] https://www.ibm.com/support/pages/how-installconfigure-openssl-ibmca-red-hat-enterprise-linux-ibm-z
[18] https://docs.redhat.com/en/documentation/red_hat_build_of_openjdk/11/html-single/configuring_red_hat_build_of_openjdk_11_on_rhel_with_fips/index
Appendix
Table A. CPACF Evolution on the IBM Z Platform: This table outlines the history of CPACF evolution on the IBM Z platform.
|
Model Name (Year)
|
MSA Level
|
Key Hardware Cryptography Additions
|
|
z990 / z890 (2003)
|
MSA 1
|
Initial CPACF introduction. Supported DES, TDES, and SHA-1 hashing.
|
|
z9 EC / z9 BC (2005)
|
MSA 2
|
Added AES-128 and SHA-256.
|
|
z10 EC / z10 BC (2008)
|
MSA 3
|
Added AES-192, AES-256, SHA-384, and SHA-512.
|
|
z196 / z114 (2010)
|
MSA 4
|
Introduced Protected Key support; added AES-CTR, OFB, and CFB modes.
|
|
zEC12 / zBC12 (2012)
|
MSA 5
|
Introduced PRNO instruction for Pseudorandom Number Generation.
|
|
z13 / z13s (2015)
|
MSA 6/7
|
Optimized for SIMD architecture; added SHA-512 variants and improved performance.
|
|
z14 / z14 ZR1 (2017)
|
MSA 8
|
Added SHA-3 (224-512), SHAKE, AES-GCM via the KMA instruction, and a hardware-integrated True Random Number Generator (TRNG)
|
|
z15 T01 / T02 (2019)
|
MSA 9
|
Added KDSA instruction for Elliptic Curve (ECC), supporting NIST curves (P-256, P-384, P-521), Edwards curves (Ed25519, Ed448), and Montgomery curves (X25519, X448)
|
|
z16 A01 / Rack (2022)
|
MSA 10
|
Quantum-Safe focus: Hardware acceleration for Dilithium (ML-DSA) and lattice-based signatures.
|
|
z17 (2025)
|
MSA 11
|
Introduced HMAC hardware acceleration and enhanced AES-XTS for disk encryption.
|
Table B. CPACF Instructions: This table shows the list of native CPU mnemonics and their functions.
|
Mnemonic
|
Official Name
|
Supported Algorithms / Functions
|
Triggering Example Code Path
|
|
KM
|
Cipher Message
|
AES-128, AES-192, AES-256, DES, TDES.
|
Cipher.getInstance(
"AES/ECB/NoPadding");
…
cipher.doFinal();
|
|
KMC
|
Cipher Message with Chaining
|
Same as KM, but supports CBC (Chaining) mode.
|
Cipher.getInstance(
"AES/CBC/PKCS5Padding");
…
cipher.doFinal();
|
|
KMA
|
Cipher Message with Authentication
|
AES-GCM
|
Cipher.getInstance(
"AES/GCM/NoPadding");
…
cipher.doFinal();
|
|
KIMD
|
Compute Intermediate Message Digest
|
SHA-1, SHA-2 (224, 256, 384, 512), SHA-3, SHAKE.
|
MessageDigest.getInstance(
"SHA-256");
…
digest.update(input);
|
|
KLMD
|
Compute Last Message Digest
|
Finalizes hashes for all KIMD algorithms.
|
MessageDigest.digest();
|
|
KMAC
|
Compute Message Authentication Code
|
HMAC and standard MAC functions.
|
Mac.getInstance(
"HmacSHA256");
…
mac.doFinal();
|
|
KMF
|
Cipher Message with CFB
|
Cipher Feedback (CFB) mode for AES/DES.
|
Cipher.getInstance(
"AES/CFB/NoPadding");
…
cipher.doFinal();
|
|
KMO
|
Cipher Message with OFB
|
Output Feedback (OFB) mode for AES/DES.
|
Cipher.getInstance(
"AES/OFB/NoPadding");
…
cipher.doFinal();
|
|
KMCTR
|
Cipher Message with Counter
|
AES-CTR mode (used heavily in modern TLS).
|
Cipher.getInstance(
"AES/CTR/NoPadding");
…
cipher.doFinal();
|
|
KDSA
|
Key Digital Signature Assist
|
ECDSA, EdDSA (Ed25519, Ed448) signing/verification.
|
Signature.getInstance(
"SHA256withECDSA");
…
signature.doFinal();
|
|
PRNO
|
Perform Random Number Operation
|
TRNG (True Random) and Deterministic (DRNG).
|
SecureRandom.
getInstanceStrong();
random.nextBytes(array);
|
Table C. SunJCE Native Cryptographic Acceleration Control Properties: This table shows the list of properties to control SunJCE native mode operation in IBM Semeru Runtime on Linux on IBM Z.
The default value for these flags is true in IBM Semeru Open Edition on Linux on IBM Z.
To verify hardware usage, set -Djdk.nativeCryptoTrace=true. If it's working, you will see messages like NativeCrypto: OpenSSL library loaded.
|
Category
|
Flag
|
Valid Values
|
Description
|
|
Master Toggle
|
jdk.nativeCrypto
|
true/false
|
Global switch to enable or disable the entire OpenSSL native bridge.
|
|
Symmetric Cipher
|
jdk.nativeGCM
|
true/false
|
Toggles native acceleration for AES-GCM (used heavily in TLS 1.2/1.3).
|
|
Symmetric Cipher
|
jdk.nativeCBC
|
true/false
|
Toggles native acceleration for Cipher Block Chaining (CBC) modes.
|
|
Hashing
|
jdk.nativeDigest
|
true/false
|
Toggles native acceleration for Message Digests (SHA-256, SHA-512, etc.).
|
|
Asymmetric
|
jdk.nativeRSA
|
true/false
|
Toggles native offloading for RSA operations (Sign/Verify/Encrypt).
|
|
Asymmetric
|
jdk.nativeEC
|
true/false
|
Toggles native offloading for Elliptic Curve (ECDSA/ECDH).
|
|
Library Management
|
jdk.native.openssl.lib
|
[Path to .so]
|
Specifies a custom path to a specific libcrypto.so file.
|
|
Library Management
|
jdk.native.openssl.skipBundled
|
true/false
|
Forces the JVM to use the OS system OpenSSL instead of one bundled with the JDK.
|
|
Diagnostic
|
jdk.nativeCryptoTrace
|
true/false
|
Prints a trace to stdout confirming when native libraries are loaded and used.
|
Table D. CPACF Instructions used in OpenSSL: This table shows the list of CPACF instructions that are used in OpenSSL, which are called by OpenJCEPlus and SunJCE native layers.
|
OpenSSL Functionality
|
Instruction Used
|
Benefit
|
|
AES (ECB, CBC, CTR, OFB, CFB)
|
KM, KMC, KMCTR, KMO, KMF
|
High-speed bulk data encryption.
|
|
AES-GCM (Most web traffic)
|
KMA
|
Modern authenticated encryption (z14+).
|
|
SHA-2 / SHA-3 / SHAKE
|
KIMD, KLMD
|
Massive speedup for hashing and data integrity.
|
|
HMAC
|
KMAC
|
Accelerated message authentication (z17+).
|
|
ECDSA / EdDSA (Sign/Verify)
|
KDSA
|
Accelerates TLS handshakes (z15+).
|
|
Random Number Generation
|
PRNO (as an entropy source to seed)
|
High-entropy hardware-seeded random numbers.
|
Table E. Comparison of IBM Z Cryptographic Processing Paths: This table shows a comparison of IBM Z cryptographic processing paths for CPACF and Crypto Express.
|
Feature
|
CPACF (On-Chip)
|
Crypto Express (PCIe Card)
|
|
Physical Location
|
Integrated into every CPU core.
|
Dedicated PCIe adapter (HSM).
|
|
Supported Keys
|
Clear, Protected
|
Clear, Secure, Protected (via re-wrap)
|
|
Execution Mode
|
Synchronous (CPU waits for the result).
|
Asynchronous (CPU hands off the task).
|
|
Best For
|
Bulk Encryption (AES, SHA), TLS data.
|
Asymmetric (RSA), PINs, Master Keys.
|
|
Latency
|
Extremely Low (Instruction speed).
|
Higher (Requires PCI bus travel).
|
|
Security Level
|
High (Keys not in clear RAM).
|
Highest (FIPS 140-2 Level 4).
|
Table F. Red Hat OpenJDK Cryptographic Acceleration Modes on RHEL for IBM Z: This table shows different modes of cryptographic acceleration for Red Hat OpenJDK on RHEL for IBM Z.
|
Mode
|
Technology Path
|
Hardware Used
|
Primary Benefit
|
|
Standard
|
JIT Intrinsics (Built-in)
|
CPACF (On-CPU)
|
Maximum Throughput
|
|
FIPS
|
SunPKCS11 → OpenSSL → ibmca
|
CPACF & Crypto Express
|
Regulatory Compliance
|
Table G. CPACF Code Path & Cryptographic Context Comparison: This table compares the CPACF code path execution and cryptographic context between IBM Semeru Runtimes and HostSpot OpenJDK distributions that support the CPACF, such as Red Hat OpenJDK.
|
Feature
|
IBM Semeru Runtimes
|
HotSpot Distributions
|
|
CPACF Path Diversity
|
Multi-Path Optimization: Uses FastJNI/OCKC/OpenSSL for OpenJCEPlus and SunJCE, and ICSF for IBMJCECCA.
|
Single-Path Only: Relies almost exclusively on JIT Intrinsics for clear keys.
|
|
Provider Selection
|
Dynamic Choice: Includes OpenJCEPlus (Performance), SunJCE (Standard), and IBMJCECCA (High Security).
|
Fixed: Primarily limited to the standard SunJCE provider.
|
|
Key Protection
|
Multi-Key Support: Handles Clear and Protected Keys (via CPACF) and Secure Keys (via ICSF/Crypto Express cards).
|
Clear Key Only: Lacks native integration for hardware-protected Secure Keys (HSM).
|
|
Extended Offloading
|
Full MSA Support: Offloads complex operations such as KMAC and KDSA via the native OCKC/OpenSSL layer.
|
Subset Offloading: Only offloads ciphers/hashes that have been specifically "intrinsified" in the JVM source code.
|
|
Compliance Layer
|
Bundled OCKC: Includes a FIPS-certified native module that guarantees CPACF usage for all certified algorithms.
|
External Reliance: Requires the user to configure the OS-level libraries to achieve similar hardware offloading.
|