Initial Provisioning and Deployment Guide

This topic covers operations pertaining to the initial provisioning and deployment of YubiHSM 2 devices.

Familiarity with the device, its features and capabilities is assumed.

Important

The YubiHSM 2 ships with a default Authentication Key with a well-known password. It is imperative that it is removed (single use case) or changed prior to production deployment.

Known Usage Cases

When only a single application needs to be provisioned, Yubico recommends that all Authentication Keys and material be provisioned only with Capabilities specific to that use case.

Note

This type of deployment requires devices to be physically reset and re-provisioned (single use case) or changed should a new use case arise.

HMAC

Step 1:

Establish a session with the default Authentication Key.

yubihsm> connect
         Session keepalive set up to run every 15 seconds
yubihsm> session open 1 password
         Created session 0
Step 2:

Create an Authentication Key for Auditing.

yubihsm> put authkey 0 0 "Audit auth key" all get-log-entries none
         $AUDIT_PASS
         Stored Authentication key 0xd054
Step 3:

Create a Wrap Key for importing application Authentication Keys and secrets.

yubihsm> get random 0 16
         5b61e89468cc8f2a274715c78c3d4753
yubihsm> put wrapkey 0 0 "HMAC wrap Key" all import-wrapped
         sign-hmac:verify-hmac 5b61e89468cc8f2a274715c78c3d4753
         Stored Wrap key 0xf09a
Step 4:

Create an Authentication Key for use with the above Wrap Key.

yubihsm> put authkey 0 0 "Provisioning HMAC wrap auth key" all
         import-wrapped none $WRAP_PASS
         Stored Authentication key 0xf10f
Step 5:

Delete the default Authentication Key.

yubihsm> delete 0 1 authentication-key
Step 6:

Create a wrapped Authentication Key and HMAC Key for the application.

echo -ne '\x5b\x61\xe8\x94\x68\xcc\x8f\x2a\x27\x47\x15\xc7\x8c\x3d
    \x47\x53' > wrap.key
echo $HMAC_PASS | yubihsm-wrap -a aes128-yubico-authentication
   -c sign-hmac,verify-hmac -d 1 -l "HMAC auth key" -k wrap.key --in
   --out auth.out -e none
echo -ne '\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b
   \x0b\x0b\x0b\x0b\x0b\x0b\x0b' > hmac.key
yubihsm-wrap -a hmac-sha256 -c sign-hmac,verify-hmac -d 1 -l "HMAC key"
    -k wrap.key --in hmac.key --out hmac.out
Step 7:

Open a Session with the wrap Authentication Key.

yubihsm> session open 0xf10f $WRAP_PASS
         Created session 1
Step 8:

Import the two wrapped keys in the new Session.

yubihsm> put wrapped 1 0xf09a auth.out
         Object imported as 0x2a74 of type authentication-key
yubihsm> put wrapped 1 0xf09a hmac.out
         Object imported as 0xd1a2 of type hmac-key
Step 9:

Open a session with the new application Authentication Key.

yubihsm> session open 0x2a74 $HMAC_PASS
         Created session 2
Step 10:

Run HMAC-SHA256 Test vector #1 and get expected output.

yubihsm> hmac 2 0xd1a2b0344c61d8db38535ca8afceaf0bf12b881dc200c9833
         da726e9376c2e32cff7
echo -ne '\x48\x69\x20\x54\x68\x65\x72\x65' | openssl dgst -hex -mac
    hmac -macopt hexkey:0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
    -sha256 (stdin)= b0344c61d8db38535ca8afceaf0bf12b881dc200c
    9833da726e9376c2e32cff7

PKCS11 / RSA

This example assumes that only RSA operations will be performed and that RSA keys will be generated on device over PKCS#11. For using the PKCS#11 with YubiHSM 2 a yubihsm\_pkcs11.conf file needs to exist and point at the desired connector.

Step 1:

Establish a Session with the default Authentication Key.

yubihsm> connect
         Session keepalive set up to run every 15 seconds
yubihsm> session open 1 password
         Created session 0
Step 2:

Create an Authentication Key for Auditing.

yubihsm> put authkey 0 0 "Audit auth key" all audit none $AUDIT_PASS
         Stored Authentication key 0xd054
Step 3:

Optionally enable forced audits.

yubihsm> put option 0 force-audit 01
Step 4:

Create an Authentication Key for usage with the PKCS11 module.

yubihsm> put authkey 0 0 "PKCS11 RSA" 1 delete-asymmetric-key:
         generate-asymmetric-key:sign-pkcs:sign-pss sign-pkcs:sign-pss
         $PKCS11_PASS
         Stored Authentication key 0xf10f
Step 5:

Delete the default Authentication Key.

yubihsm> delete 0 1 authentication-key
Step 6:

Use pkcs11-tool to generate an RSA key.

pkcs11-tool --module /path/to/yubihsm_pkcs11.so -l --pin
     f10f${PKCS11_PASS} -k --key-type rsa:2048 --usage-sign
     --label "RSA key"
Using slot 0 with a present token (0x0)
Key pair generated:
Private Key Object; RSA
  label:      RSA key
  ID:         e77d
  Usage:      sign
Public Key Object; RSA 2048 bits
  label:      RSA key
  ID:         e77d
  Usage:      none