Applet Pre-Personalisation
1 Contents
2 Overview
OpenFIPS201 is intended to be highly flexible to support a variety of usage scenarios whilst being capable of fully complying with the PIV card application standard.
To support this:
It has a dynamic file system, which can describe any number of data objects, including access permissions
It has a dynamic key store, which permits any combination of keys and mechanisms (algorithms), with flexible access permissions, key roles and attributes.
The applet has a number of configuration parameters which drive behaviour of the applet. These can be dynamically configured during issuance, post-issuance or even left untouched to make use of NIST-compliant default values.
All of the above can be managed securely using a GlobalPlatform Secure Channel either locally or over a network.
Â
3 Personalisation Steps
Apply any Configuration changes required (this should be done first as it may effect subsequent steps)
Define which Data Objects and Keys are required on the card.
Populate data objects using standard PIV interoperable commands.
Generate or Inject Key values using either standard PIV interoperable commands or the Secure Messaging interface.
Â
4 Configuration
OpenFIPS201 configuration parameters can be applied at any time during the card life-cycle, so long as it is done under a GlobalPlatform Secure Channel or using Delegated Administrative Commands.
Configuration is broken down into the following groups:
Applet options that effect general behaviour
Policies relating to usage of the Cardholder PINs
Policies relating to usage of the Security Officer PUK
Policies relating to Secure Messaging and the Virtual Contact Interface
Policies relating to Biometric On-Card Comparison
All commands are sent via the PUT DATA ADMIN command and constructed using BER-TLV encoded ASN.1. The schema for this command can be found on the Appendix - ASN.1 Schema | 5 Command PUT DATA ADMIN page, which includes encoding examples.
All configuration parameters are marked as OPTIONAL
, which means you can update all configuration parameters or only a single one.
If you do not update configuration at all, the Default values described in the tables below will apply. These values have been chosen to comply with the NIST PIV interoperability requirements.
4.1 Applet Options
Element | Description | Effect | Default Value |
---|---|---|---|
Options.restrictContactlessGlobal Type: BOOLEAN | Possible Values:
If this parameter is set to True, the applet will no longer be selectable on the contactless interface. | Next applet selection | False |
Options.restrictContactlessAdmin Type: BOOLEAN |
| Next authentication | False |
Options.restrictEnumeration Type: BOOLEAN | Possible Values:
| Immediate | False |
Options.restrictSingleKey Type: BOOLEAN | Possible Values:
| Immediate | False |
Options.ignoreContactlessAcl Type: BOOLEAN | This option can be used to treat both the Contact and the Contactless interface the same for the purposes of checking file permissions. This is useful for environments where the standard operating environment uses contactless readers. Possible Values:
| Next applet selection | False |
Options.readEmptyDataObject Type: BOOLEAN | Possible Values:
| Immediate | False |
Options.useRSACRT Type: BOOLEAN | Possible Values:
| Immediate | False |
4.2 PIN Policy
Element | Description | Effect | Default Value |
---|---|---|---|
PinPolicy.enableLocal Type: BOOLEAN | Possible Values:
| Immediate | True |
PinPolicy.enableGlobal Type: BOOLEAN | Possible Values:
| Immediate | False |
PinPolicy.preferGlobal Type: BOOLEAN | Possible Values:
| Immediate | False |
PinPolicy.permitContactless Type: BOOLEAN | Possible Values:
| Immediate | False |
PinPolicy.minLength Type: INTEGER (4 to 16) | Indicates the minimum permitted length of the cardholder PIN verification value. | Immediate | 6 |
PinPolicy.maxLength Type: INTEGER (4 to 16) | Indicates the maximum permitted length of the cardholder PIN verification value. | Immediate | 8 |
PinPolicy.MaxRetriesContact Type: INTEGER (1 to 15) | Indicates how many failed PIN verification attempts may be made over the Contact interface before the PIN object is locked and requires privileged intervention. | Immediate | 6 |
PinPolicy.MaxRetriesContactless Type: INTEGER (1 to 15) | Indicates how many failed PIN verification attempts may be made over the Contactless interface before the PIN object is locked and requires privileged intervention. | Immediate | 5 |
PinPolicy.Charset Type: Enumeration | Possible Values:
| Immediate | 0 - Numeric |
PinPolicy.History Type: INTEGER (0 to 8) | Possible Values:
| Immediate | 0 (Disabled) |
PinPolicy.RuleSequence Type: INTEGER (0 to 16) | This value is used to prevent common weak PIN values whereby consecutive sequences of numbers are used, for example Possible Values:
| Next PIN change | 0 (Disabled) |
PinPolicy.RuleDistinct Type: INTEGER (0 to 16) | This value is used to prevent common weak PIN values, whereby the same digit is used too many times, for example Possible Values:
| Next PIN change | 0 (Disabled) |
4.3 PUK Policy
Element | Description | Effect | Default Value |
---|---|---|---|
PukPolicy.Enabled Type: BOOLEAN | Possible Values:
| Immediate | True |
PukPolicy.Length Type: INTEGER (4 to 16) | Sets the permissible length of the PUK value. Unlike the PIN value there is no minimum and maximum for PUK’s, since they are typically generated by systems, not people. | Immediate | True |
PukPolicy.PermitContactless Type: BOOLEAN | Possible Values:
| Immediate | False |
PukPolicy.MaxRetriesContact Type: INTEGER (1 to 15) | Indicates how many failed PIN verification attempts may be made over the Contact interface before the PUK object is locked and requires privileged intervention. | Immediate | 8 |
PukPolicy.MaxRetriesContactless Type: INTEGER (1 to 15) | Indicates how many failed PIN verification attempts may be made over the Contactless interface before the PUK object is locked and requires privileged intervention. | Immediate | 10 Â |
PukPolicy.Updateable TYPE: BOOLEAN | Possible Values:
| Immediate | 9 |
4.4 VCI Policy
Element | Description | Effect | Default |
---|---|---|---|
VCIPolicy.Mode Type: BOOLEAN | N/A | 0 (Disabled) |
4.5 OCC Policy
Element | Description | Effect | Default |
---|---|---|---|
OCCPolicy.Mode Type: INTEGER (0 to n) | N/A | 0 (Disabled) |
Â
5 Data and Key Objects
All data and key in OpenFIPS201 can be dynamically managed at any point in the card life cycle, providing a great deal of flexibility. Each object has a number of common parameters that govern basic attributes such as identifiers and conditions of access.
OpenFIPS201 allows a number of additional capabilities which can be controlled through these parameters.
5.1 Common Parameters
Common parameters are used for all objects. These are described below.
Element | Description |
---|---|
Id TYPE: OCTET STRING (1 to 3 bytes for data objects, 1 byte for keys) | The unique identifier for this object on the card. |
Mode Contact Type: Enumeration | Provides access control restrictions and permissions for this object when connecting over the Contact interface. |
Mode Contactless Type: Enumeration | Provides access control restrictions and permissions for this object when connecting over the Contactless interface. |
Admin Key Type: OCTET STRING (1 byte) OPTIONAL | Specifies which symmetric key can be used for managing this object using the This is useful where a particular implementation wishes to define specific Data or Key objects that are managed by a third party, where it is desirable to compartmentalise access to only those objects. |
Key Mechanism Type: Enumeration | Describes which cryptographic primitive (mechanism) will be associated with this key. |
Key Role Type: Enumeration | Specifies what role(s) this key may perform for |
Key Attribute Type: Enumeration | Specifies what special attributes / options are flagged against this key. |
Element | Description |
---|---|
Id TYPE: OCTET STRING (1 to 3 bytes for data objects, 1 byte for keys) | The unique identifier for this object on the card. |
Mode Contact Type: Enumeration | Provides access control restrictions and permissions for this object when connecting over the Contact interface. |
Mode Contactless Type: Enumeration | Provides access control restrictions and permissions for this object when connecting over the Contactless interface. |
Admin Key Type: OCTET STRING (1 byte) OPTIONAL | Specifies which symmetric key can be used for managing this object using the This is useful where a particular implementation wishes to define specific Data or Key objects that are managed by a third party, where it is desirable to compartmentalise access to only those objects. |
5.1.1 Enumeration - Access Mode
Element | Description |
---|---|
Never | The object may not be read or used under any circumstances. |
Pin | The object may be accessed only after PIN authentication. |
Pin Always | The object may be accessed only IMMEDIATELY after PIN authentication in the current session. |
Occ | The object may be accessed only after a successful Biometric On-Card Comparison in the current session. |
User Admin | The object may be managed after the access conditions have been successfully met. |
Always | The object may be read or used without any authentication. |
Â
5.2 Key Object Parameters
Element | Description |
---|---|
Key Mechanism Type: Enumeration | Describes which cryptographic primitive (mechanism) will be associated with this key. |
Key Role Type: Enumeration | Specifies what role(s) this key may perform for |
Key Attribute Type: Enumeration | Specifies what special attributes / options are flagged against this key. |
5.2.1 Enumeration - Key Mechanism
This defines the supported cryptographic primitives as specified by NIST SP 800-78-4.
Element | Description |
---|---|
TDEA192 | Triple-DES-ECB using 3-key length (192 bits) |
RSA1024 | RSA Asymmetric Keypair, 1024-bit key length |
RSA2048 | RSA Asymmetric Keypair, 2048-bit key length |
AES128 | Advanced Encryption Standard, 128-bit key length |
AES192 | Advanced Encryption Standard, 192-bit key length |
AES256 | Advanced Encryption Standard, 256-bit key length |
ECC256 | Elliptic Curve using curve NIST P-256 |
ECC384 | Elliptic Curve using curve NIST P-384 |
SMCS2 | Cipher Suite 2 - Used for Secure Messaging (PIV Opacity ZKM) based on curve NIST P256, SHA-256 and AES 128-bit |
SMCS7 | Cipher Suite 7 - Used for Secure Messaging (PIV Opacity ZKM) based on curve NIST P384, SHA-384 and AES 256-bit |
5.2.2 Enumeration - Key Role
Element | Description |
---|---|
Authenticate | This key can be used for card (internal), host (external) or card/host (mutual) authentication.
|
Key Establish | This key can be used for key establishment schemes.
|
Sign | This key can be used for digital signature mechanisms.
|
Verify | Reserved for future use |
Encrypt | Reserved for future use |
Decrypt | Reserved for future use |
5.2.3 Enumeration - Key Attributes
Element | Description |
---|---|
Permit Internal | Symmetric Keys Only - Permits the PIV General Authenticate command to used to request an INTERNAL authentication. |
Permit External | Symmetric Keys Only - Permits the PIV General Authenticate command to used to request an INTERNAL authentication. |
Importable | Permits the key value to be injected instead of generated on the card. If this is set to False, only the |
Â
6 NIST-Compliant Pre-Personalisation Scripts
A set of APDU scripts to provide NIST compliance with the full range of mandatory and optional configuration, data objects, and keys has been created here: Appendix - NIST Compliant Profile
Â