Note:
This improved remote key distribute support is only
available on the z9 EC, z9 BC, z10 EC and z10 BC servers.
New methods have been added for securely transferring symmetric
encryption keys to remote devices, such as Automated Teller Machines
(ATMs), PIN-entry devices, and point of sale terminals. These methods
can also be used to transfer symmetric keys to another cryptographic
system of any type, such as a different kind of Hardware Security
Module (HSM) in an IBM or non-IBM computer server. This change is
especially important to banks, since it replaces expensive human operations
with network transactions that can be processed quickly and inexpensively.
This method supports a variety of requirements, fulfilling the new
needs of the banking community while simultaneously making significant
interoperability improvements to related cryptographic key-management
functions.
For the purposes of this description, the ATM scenario will be
used to illustrate operation of the new methods. Other uses of this
method are also valuable.
Remote Key Loading
Remote key loading refers to the process of installing symmetric
encryption keys into a remotely located device from a central administrative
site. This encompasses two phases of key distributions.
- Distribution of initial key encrypting keys (KEKs) to a newly
installed device. A KEK is a type of symmetric encryption key that
is used to encrypt other keys so they can be securely transmitted
over unprotected paths.
- Distribution of operational keys or replacement KEKs, enciphered
under a KEK currently installed in the device.
Old remote key loading example
Use an ATM as an example of the remote key loading process. A new
ATM has none of the bank's keys installed when it is delivered from
the manufacturer. The process of getting the first key securely loaded
is difficult. This has typically been done by loading the first KEK
into each ATM manually, in multiple cleartext key parts. Using dual
control for key parts, two separate people must carry key part values
to the ATM, then load each key part manually. Once inside the ATM,
the key parts are combined to form the actual KEK. In this manner,
neither of the two people has the entire key, protecting the key value
from disclosure or misuse. This method is labor-intensive and error-prone,
making it expensive for the banks.
New remote key loading methods
New remote key loading methods have been developed to overcome
some of the shortcomings of the old manual key loading methods. These
new methods define acceptable techniques using public key cryptography
to load keys remotely. Using these new methods, banks will be able
to load the initial KEKs without sending people to the remote device.
This will reduce labor costs, be more reliable, and be much less expensive
to install and change keys. The new cryptographic features added provide
new methods for the creation and use of the special key forms needed
for remote key distribution of this type. In addition, they provide
ways to solve long-standing barriers to secure key exchange with non-IBM
cryptographic systems.
Once an ATM is in operation, the bank can install new keys as needed
by sending them enciphered under a KEK installed previously. This
is straightforward in concept, but the cryptographic architecture
in ATMs is often different from that of the host system sending the
keys, and it is difficult to export the keys in a form understood
by the ATM. For example, cryptographic architectures often enforce
key-usage restrictions in which a key is bound to data describing
limitations on how it can be used - for encrypting data, for
encrypting keys, for operating on message authentication codes (MACs),
and so forth. The encoding of these restrictions and the method used
to bind them to the key itself differs among cryptographic architectures,
and it is often necessary to translate the format to that understood
by the target device prior to a key being transmitted. It is difficult
to do this without reducing security in the system; typically it is
done by making it possible to arbitrarily change key-usage restrictions.
The methods described here provide a mechanism through which the system
owner can securely control these translations, preventing the majority
of attacks that could be mounted by modifying usage restrictions.
A new data structure called a trusted block is
defined to facilitate the remote key loading methods. The trusted
block is the primary vehicle supporting these new methods.
Trusted block
The trusted block is the central data structure to support all
remote key loading functions. It provides great power and flexibility,
but this means that it must be designed and used with care in order
to have a secure system. This security is provided through several
features of the design.
- A two step process is used to create a trusted block.
- The trusted block includes cryptographic protection that prevents
any modification when it is created.
- A number of fields in the rules of a trusted block offer the ability
to limit how the block is used, reducing the risk of it being used
in unintended ways or with unintended keys.
The trusted block is the enabler which requires secure approval
for its creation, then enables the export or generation of DES and
TDES keys in a wide variety of forms as approved by the administrators
who created the trusted block. For added security, the trusted blocks
themselves can be created on a separate system, such as an xSeries
server with an IBM 4764 Cryptographic Coprocessor, locked in a secure
room. The trusted block can subsequently be imported into the zSeries
server where they will be used to support applications.
There are two CCA callable services to manage and use trusted blocks:
Trusted Block Create (CSNDTBC and CSNETBC) and Remote Key Export (CSNDRKX
and CSNFRKX). The Trusted Block Create service creates a trusted
block, and the Remote Key Export service uses a trusted block to generate
or export DES keys according to the parameters in the trusted block.
The trusted block consists of a header followed by several sections.
Some elements are required, while others are optional.
Figure 1 shows the contents of a trusted block. The
elements shown in the table give an overview of the structure and
do not provide all of the details of a trusted block.
Here is a brief description of the elements that are depicted.
Structure version information - This
identifies the version of the trusted block structure. It is included
so that code can differentiate between this trusted block layout and
others that may be developed in the future.
Public key - This contains the RSA
public key and its attributes. For distribution of keys to a remote
ATM, this will be the root certification key for the ATM vendor, and
it will be used to verify the signature on public-key certificates
for specific individual ATMs. In this case, the Trusted Block will
also contain Rules that will be used to generate or export symmetric
keys for the ATMs. It is also possible for the Trusted Block to be
used simply as a trusted public key container, and in this case the
Public Key in the block will be used in general-purpose cryptographic
functions such as digital signature verification. The public key attributes
contain information on key usage restrictions. This is used to securely
control what operations will be permitted to use the public key. If
desired, the public key can be restricted to use for only digital
signature operations, or for only key management operations.
Trusted block protection information -
This topic contains information that is used to protect the Trusted
Block contents against modification. According to the method in ISO
16609, a CBC-mode MAC is calculated over the Trusted Block using a
randomly-generated triple-DES (TDES) key, and the MAC key itself is
encrypted and embedded in the block. For the internal form of the
block, the MAC key is encrypted with a randomly chosen fixed-value
variant of the PKA master key. For the external form, the MAC key
is encrypted with a fixed variant of a key-encrypting key. The MKVP
field contains the master key verification pattern for the PKA master
key that was used, and is filled with binary zeros if the trusted
block is in external format. Various flag fields contain these boolean
flags.
- Active flag - Contained within
the flags field of the required trusted block information section,
this flag indicates whether the trusted block is active and ready
for use by other callable services. Combined with the use of two separate
access control points, the active flag is used to enforce dual control
over creation of the block. A person whose active role is authorized
to create a trusted block in inactive form creates the block and defines
its parameters. An inactive trusted block can only be used to make
it active. A person whose active role is authorized to activate an
inactive trusted block must approve the block by changing its status
to active. See Figure 3. The Remote_Key_Export callable
service can only use an internal active trusted block to generate
or export DES keys according to the parameters defined in the trusted
block.
- Date checking flag - Contained
within the optional activation and expiration date subsection of the
required trusted block information subsection, this flag indicates
whether the coprocessor checks the activation and expiration dates
for the trusted block. If the date checking flag is on, the coprocessor
compares the activation and expiration dates in the optional subsection
to the coprocessor internal real time clock, and processing terminates
if either date is out of range. If this flag is off or the activation
and expiration dates subsection is not defined, the device does no
date checking. If this flag is off and the activation and expiration
dates subsection is defined, date checking can still be performed
outside of the device if required. The date checking flag enables
use of the trusted block in systems where the coprocessor clock is
not set.
Trusted block name - This field
optionally contains a text string that is a name (key label) for the
trusted block. It is included in the block for use by an external
system such as a host computer, and not by the card itself. In the
zSeries system, the label can be checked by RACF to determine if use
of the block is authorized. It is possible to disable use of trusted
blocks that have been compromised or need to be removed from use for
other reasons by publishing a revocation list containing the key names
for the blocks that must not be used. Code in the host system could
check each trusted block prior to it being used in the cryptographic
coprocessor, to ensure that the name from that block is not in the
revocation list.
Expiration date and activation dates -
The trusted block can optionally contain an expiration date and an
activation date. The activation date is the first day on which the
block can be used, and the expiration date is the last day when the
block can be used. If these dates are present, the date checking flag
in the trusted block will indicate whether the coprocessor should
check the dates using its internal real-time clock. In the case of
a system that does set the coprocessor clock, checking would have
to be performed by an application program prior to using the trusted
block. This is not quite as secure, but it is still valuable, and
storing the dates in the block itself is preferable to making the
application store it somewhere else and maintain the association between
the separate trusted block and activation and expiration dates.
Application-defined data -
The trusted block can hold data defined and understood only by the
host application program. This data is included in the protected contents
of the trusted block, but it is not used or examined in any way by
the coprocessor. By including its own data in the trusted block, an
application can guarantee that the data is not changed in any way,
since it is protected in the same way as the other trusted block contents.
Rules - A
variable number of rules can be included in the block. Each rule contains
information on how to generate or export a symmetric key, including
values for variants to be used in order to provide keys in the formats
expected by systems with differing cryptographic architectures. Use
of the rules are described in the topics covering key generation and
export using the RKX function. This table summarizes the required
and optional values of each rule.
| Field name | Required field | Description |
|---|
| Rule ID | Yes | Specifies the 8-character name of the rule | | Operation | Yes | Indicates whether this rule generates a new
key or exports an existing key | | Generated key length | Yes | Specifies the length of the key to be generated | | Key-check algorithm ID | Yes | Specifies which algorithm to use to compute
the optional key-check value (KCV). Options are
- No KCV
- Encrypt zeros with the key
- Compute MDC-2 hash of the key
| | Symmetric-encrypted output format | Yes | Specifies the format of the required symmetric-encrypted
key output. Options are:
- CCA key token
- RKX key token
| | Asymmetric-encrypted output format | Yes | Specifies the format of the optional asymmetric-encrypted
key output (key is encrypted with RSA). Options are:
- No asymmetric-encrypted key output
- Encrypt in PKCS1.2 format
- Encrypt in RSAOAEP format
| | Transport-key variant | No | Specifies the variant to apply to the transport
key prior to it being used to encrypt the key being generated or exported | | Export key CV | No | Specifies the CCA CV to apply to the transport
key prior to it being used to encrypt the key being generated or exported.
The CV defines permitted uses for the exported key. | | Export key length limits | No | Defines the minimum and maximum lengths of the
key that can be exported with this rule. | | Output key variant | No | Specifies the variant to apply to the generated
or exported key prior to it being encrypted. | | Export-key rule reference | No | Specifies the rule ID for the rule that must
have been used to generate the key being exported, if that key is
an RKX key token. | | Export-key CV restrictions | No | Defines masks and templates to use to restrict
the possible CV values that a source key can have when being exported
with RKX. Only applies if the key is a CCA key token. This can control
the types of CCA keys that can be processed using the rule. | | Export-key label template | No | Specifies the key label of
the key token that contains the source key to be exported. A key
label is a name used to identify a key. The rule can optionally contain
a key label template, which will be matched against the host-supplied
key label, using a wildcard (*) so that the template can match a set
of related key labels. The operation will only be accepted if the
supplied label matches the wildcard template in the rule. |
Changes to the CCA API
These changes have been made to the CCA API to support remote key
loading using trusted blocks:
- A new Trusted Block Create (CSNDTBC and CSNETBC) callable service
has been developed to securely create trusted blocks under dual control.
- A new Remote Key Export (CSNDRKX and CSNFRKX) callable service
has been developed to generate or export DES and TDES keys under control
of the rules contained in a trusted block.
- The Digital Signature Verify (CSNDDSV) callable service has been
enhanced so that, in addition to verifying ordinary CCA RSA keys,
it can use the RSA public key contained in a trusted block to verify
digital signatures.
- The PKA Key Import (CSNDPKI) callable service has been enhanced
so it can import an RSA key into the CCA domain. In addition, the
verb can import an external format trusted block into an internal
format trusted block, ready to be used in the local system.
- The PKA Key Token Change (CSNDKTC and CSNFKTC) callable service
has been enhanced so that it can update trusted blocks to the current
PKA master key when the master key is changed. A trusted block contains
an embedded MAC key enciphered under the PKA master key. When the
PKA master key is changed, the outdated MAC key and the trusted block
itself need to be updated to reflect the current PKA master key.
- The MAC Generate (CSNBMGN) and MAC Verify (CSNBMVR) callable services
have been enhanced to add ISO 16609 TDES MAC support in which the
text will be CBC-TDES encrypted using a double-length key and the
MAC will be extracted from the last block.
- The PKA key storage callable services support trusted blocks.
The RKX key token
CCA normally uses key tokens that are designed solely for the purposes
of protecting the key value and carrying metadata associated with
the key to control its use by CCA cryptographic functions. The remote
key loading design introduces a new type of key token called an RKX
key token. The purpose of this token is somewhat different, and its
use is connected directly with the Remote Key Export callable service
added to CCA of the remote key loading design.
The RKX key token uses a special structure that binds the token
to a specific trusted block, and allows sequences of Remote Key Export
calls to be bound together as if they were an atomic operation. This
allows a series of related key-management operations to be performed
using the Remote Key Export callable service. These capabilities
are made possible by incorporating these three features into the RKX
key token structure:
- The key is enciphered using a variant of the MAC key that is in
the trusted block. A fixed, randomly-derived variant is applied to
the key prior to it being used. As a result, the enciphered key is
protected against disclosure since the trusted block MAC key is itself
protected at all times.
- The structure includes the rule ID contained in the trusted block
rule that was used to create the key. A subsequent call to the Remote
Key Export callable service can use this key with a trusted block
rule that references this rule ID, effectively chaining use of the
two rules together securely.
- A MAC is computed over the encrypted key and the rule ID, using
the same MAC key that is used to protect the trusted block itself.
This MAC guarantees that the key and the rule ID cannot be modified
without detection, providing integrity and binding the rule ID to
the key itself. In addition, the MAC will only verify if the RKX key
token is used with the same trusted block that created the token,
thus binding the key to that specific trusted block.
This figure shows a simplified conceptual view of the RKX key token
structure.
Using trusted blocks
These examples illustrate how trusted blocks are used with the
new and enhanced CCA callable services.
Creating a trusted block
This figure illustrates the steps used to create a trusted block.
A two step process is used to create a trusted block. Trusted blocks
are structures that could be abused to circumvent security if an attacker
could create them with undesirable settings, and the requirement for
two separate and properly authorized people makes it impossible for
a single dishonest employee to create such a block. A trusted block
cannot be used for any operations until it is in the active state.
Any number of trusted blocks can be created in order to meet different
needs of application programs.
Exporting keys with Remote_Key_Export
This figure shows the process for using a trusted block in order
to export a DES or TDES key. This representation is at a very high
level in order to illustrate the basic flow.
The Remote Key Export callable service is called with these main
parameters:
- A trusted block, in the active state, defines how the export operation
is to be processed, including values to be used for things such as
variants to apply to the keys.
- The key to be exported, shown previously as the source key. The
source key takes one of two forms:
- A CCA DES key token
- An RKX key token
- A key-encrypting key, shown in the figure as the importer key.
This is only used if the source key is an external CCA DES key token,
encrypted under a KEK. In this case, the KEK is the key needed to
obtain the cleartext value of the source key.
- A transport key, either an exporter KEK or an RKX key token, used
to encrypt the key being exported.
- An optional public key certificate which, if included, contains
the certified public key for a specific ATM. The certificate is signed
with the ATM vendor's private key, and its corresponding public key
must be contained in the trusted block so that this certificate can
be validated. The public key contained in the certificate can be
used to encrypt the exported key.
The processing steps are simple at a high level, but there are
many options and significant complexity in the details.
- The trusted block itself is validated. This includes several
types of validation.
- Cryptographic validation using the MAC that is embedded in the
block, in which the MAC key is decrypted using the coprocessor's master
key, and the MAC is then verified using that key. This verifies the
block has not been corrupted or tampered with, and it also verifies
that the block is for use with this coprocessor since it will only
succeed if the master key is correct.
- Consistency checking and field validation, in which the validity
of the structure itself is checked, and all values are verified to
be within defined ranges.
- Fields in the trusted block are checked to see if all requirements
are met for use of this trusted block. One check which is always required
is to ensure that the trusted block is in the active state prior to
continuing. Another check, which is optional based on the contents
of the trusted block, is to ensure the operation is currently allowed
by comparing the date of the coprocessor real-time clock to the activation
and expiration dates defined in the trusted block.
- Input parameters to the Remote Key Export callable service are
validated against rules defined for them within the trusted block.
For example:
- The rule can restrict the length of the key to be exported.
- The rule can restrict the control vector values for the key to
be exported, so only certain key types can be exported with that rule.
- When the export key is decrypted, the rules embedded in the trusted
block are then used to modify that key to produce the desired output
key value. For example, the trusted block can contain a variant to
be exclusive-ORed with the source key prior to when that key is encrypted.
Many non-IBM cryptographic systems use variants to provide key separation
to restrict a key from improper use.
- A key check value (KCV) can be optionally computed for the source
key. If the KCV is computed, the trusted block allows for one of
two key check algorithms to be used: (1) encrypting binary zeros
with the key, or (2) computing an MDC-2 hash of the key. The
KCV is returned as output from the Remote Key Export function.
- The export key, which could possibly be modified with a variant
according to the rules in the trusted block, is enciphered with the
transport key. The rules can specify that the key be created in one
of two formats: (1) a CCA key token, or (2) the new RKX key token,
described previously. With proper selection of rule options, the CCA
key token can create keys that can be used in non-CCA systems. The
key value can be extracted from the CCA key token resulting in a generic
encrypted key, with variants and other options as defined in the rule.
Two
optional fields in the trusted block may modify the transport key
prior to it being used to encrypt the source key:
- The trusted block can contain a CCA control vector (CV) to be
exclusive-ORed with the transport key prior to it being used to encrypt
the export key. This exclusive-OR process is the standard way CCA
applies a CV to a key.
- In addition to the CV described previously, the trusted block
can also contain a variant to be exclusive-ORed with the transport
key prior to its use.
If a variant and CV are both present in the trusted block, the
variant is applied first, then the CV.
- The export key can optionally be encrypted with the RSA public
key identified by the certificate parameter of the Remote Key Export
callable service, in addition to encrypting it with the transport
key as described previously. These two encrypted versions of the
export key are provided as separate outputs of the Remote Key Export
callable service. The trusted block allows a choice of encrypting
the key in either PKCS1.2 format or PKCSOAEP format.
Generating keys with Remote_Key_Export
This figure shows the process for using a trusted block to generate
a new DES or TDES key. This representation is at a very high level
in order to illustrate the basic flow.
For key generation, the Remote Key Export callable service is
called with these main parameters:
- A trusted block, in the internal active state, which defines how
the key generation operation is to be processed, including values
to be used for things such as variants to apply to the keys. The generated
key is encrypted by a variant of the MAC key contained in a trusted
block.
- An optional public key certificate which, if included, contains
the certified public key for a specific ATM. The certificate is signed
with the ATM vendor's private key, and its corresponding public key
must be contained in the trusted block so that this certificate can
be validated. The public key contained in the certificate can be
used to encrypt the generated key.
The processing steps are simple at a high level, but there are
many options and significant complexity in the details. Most of the
processing steps are the same as those described previously for key
export. Therefore, only those processing steps that differ are described
here in detail.
- Validation of the trusted block and input parameters is done as
described for export previously.
- The DES or TDES key to be returned by the Remote Key Export callable
service is randomly generated. The trusted block indicates the length
for the generated key.
- The output key value is optionally modified by a variant as described
previously for export, and then encrypted in the same way as for export
using the Transport key and optionally the public key in the certificate
parameter.
- The key check value (KCV) is optionally computed for the generated
key using the same method as for an exported key.
Remote key distribution scenario
The new and modified CCA functions for remote key loading are used
together to create trusted blocks, and then generate or export keys
under the control of those trusted blocks. This figure summarizes
the flow of the CCA functions to show how they are used:
Usage example
The scenario described shows how these functions might be combined
in a real-life application to distribute a key to an ATM and keep
a copy for local use. Some of the terminology used reflects typical
terms used in ATM networks. The example illustrates a fairly complex
real-world key distribution scenario, in which these values are produced.
- A TMK (Terminal Master Key), which is the root KEK used by the
ATM to exchange other keys, is produced in two forms: (1) encrypted
under the ATM public key, so it can be sent to the ATM, and (2) as
an RKX key token that will be used in subsequent calls to the Remote
Key Export callable service to produce other keys.
- A key-encrypting key KEK1 that is encrypted under the TMK in a
form that can be understood by the ATM.
- A PIN-encrypting key PINKEY be used by the ATM to encrypt customer-entered
PINs and by the host to verify those PINs. The PINKEY is produced
in two forms: (1) encrypted under KEK1 in a form that can be understood
by the ATM, and (2) as a CCA internal DES key token with the proper
PIN-key CV, encrypted under the CCA DES master key and suitable for
use with the coprocessor.
It takes seven steps to produce these keys using the Remote Key
Export callable service. These steps use a combination of five rules
contained in a single trusted block. The rules in this example are
referred to as GENERAT1, GENERAT2, EXPORT1, EXPORT2, and EXPORT3.
- Use the Remote Key Export callable service with rule ID "GENERAT1"
to generate a TMK for use with the ATM. The key will be output in
two forms:
- ePu(TMK): Encrypted under the ATM
public key, supplied in the certificate parameter, CERT
- RKX(TMK): As an RKX key token, suitable for subsequent input
to the CSNDRKX callable service
- Use the Remote Key Export callable service with rule ID "GENERAT2"
to generate a key-encrypting key (KEK1) as an RKX key token, RKX(KEK1)
- Use the Remote Key Export callable service with rule ID "GENERAT2"
to generate a PIN key (PINKEY) as an RKX key token: RKX(PINKEY).
- Use the Remote Key Export callable service with rule ID "EXPORT1
" to export KEK1 encrypted under the TMK as a CCA DES key token using
a variant of zeros applied to the TMK. This produces eTMK(KEK1).
- Use the Remote Key Export callable service with rule ID "EXPORT2
" to export PINKEY encrypted under KEK1 as a CCA token using a variant
of zeros applied to KEK1. This produces eKEK1(PINKEY).
- Use the Remote Key Export callable service with rule ID "EXPORT3
" to export PINKEY under KEK2, an existing CCA key-encrypting key
on the local server. This produces eKEK2(PINKEY),
with the CCA control vector for a PIN key.
- Use the Key Import callable service to import the PINKEY produced
in step 6 into the local system as an operational key. This produces
eMK(PINKEY), a copy of the key encrypted
under the local DES master key (MK) and ready for use by CCA PIN API
functions.
Remote key distribution benefits
CCA support for remote key loading solves one new problem, and
one long-standing problem. This support allows the distribution of
initial keys to ATMs and other remote devices securely using public-key
techniques, in a flexible way that can support a wide variety of different
cryptographic architectures. They also make it far easier and far
more secure to send keys to non-CCA systems when those keys are encrypted
with a triple-DES key-encrypting key. These changes make it easier
for customers to develop more secure systems.
|