Skip to main content

Key storage

The private keys for the self-signed certificates must be protected well. They hold significant power over the ISD, as they are used to sign the TRC updates (voting keys) or sign the CA certificate (root key). With the scion-pki tool, the private keys can be stored in one of multiple secure key-storage backends.

TypeDescription
Cloud based KMSSafely store the private key in a cloud-based KMS (e.g., AWS KMS, Google Cloud KMS, Azure Key Vault)
PKCS #11 HSMSafely store the private key in a PKCS #11 compatible HSM.
YubiKey PIVSafely store the private key in a YubiKey PIV.

There are tradeoffs between the different key-storage backends. The cloud-based KMS is more convenient and easier to set up. Access can be protected with the familiar IAM policies. We think it is a good choice in most cases, when configured properly.

The cloud-based KMS commonly also support different tiers of key storage: from the very basic software-protected private key to a more advanced HSM-protected private key.

Regardless of the key-storage backend, we leverage the step-kms-plugin in our scion-pki tool to use the private keys for signing certificates.

The following table shows the parameters that are required for the three most common cloud-based KMS. The parameters are passed to the scion-pki tool via the --kms and --key parameters, e.g., when creating a new certificate using scion-pki certificate create or creating a signature on a TRC using scion-pki trc sign.

TypeKMS parameterKey parameter
AWS KMSawskms:region=<region>awskms:key-id=<key-uuid>
Azure Key Vaultazurekmsazurekms:vault=<vault-name>;name=<key-name>
Google Cloud KMScloudkms:projects/<p>/locations/<l>/keyRings/<r>/cryptoKeys/<k>/cryptoKeyVersions/1

Check out the following guides for more information on how to set up your KMS of choice with the scion-pki tool.