Documentation Index
Fetch the complete documentation index at: https://cantonfoundation-issue-565-splice-daml-nav.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
Using an external KMS for managing participant keys
By default, Canton participants use cryptographic keys that are generated by the participant itself and stored in the regular database used by the participant. To improve key security, participants can be configured to use an external Key Management System (KMS) to generate and store keys. Please consult the official Canton documentation on KMS support for additional details and a list of supported KMS providers. Participants deployed as part of a Splice deployment support the External Key Storage mode of KMS usage. In the following, we describe how to configure an SV so that its participant keys are managed by an external KMS. This guide assumes that you are followingsv-helm for deploying your SV.
Official support for the KMS-based operation of sequencers and mediators that are part of an SV deployment is planned for a future release.
Migrating an existing SV to use an external KMS for participant keys
It is not supported to migrate an existing participant from “non-KMS-based” to “KMS-based” operation, or to migrate from one KMS provider to another. The main reason for this is that a participant’s root namespace key cannot be rotated, and importing it from a potentially unsafe location into a KMS would diminish the security gain of using the KMS. Moreover, some KMS providers do not support importing existing keys at all and can only be used for managing keys generated by the KMS itself. One approach for switching to use KMS for SV participant keys while minimizing the risk of losing rewards is to:- Set up a fresh SV from scratch with the desired KMS configuration. (Rest of this guide.) Coordinate with the other SV operators to onboard it with weight 0.
- Coordinate with the other SV operators to move your SV weight to the new SV, setting the weight of the older SV to 0.
- Transfer all relevant assets from the older SV to a validator or the new KMS-enabled SV.
- Coordinate with the other SV operators to offboard the older SV.
- Retire the older SV.
Configuring a fresh SV to use an external KMS
In addition to configuration changes to the participant Helm chart itself, you will also need to change the way in which your CometBFT governance key is managed compared to the default setup.External management of CometBFT governance key
By default, the CometBFT governance key is managed transparently by the SV app, using the participant for key generation and storage. The specific way in which this is realized is not supported for KMS-enabled participants. Therefore, SV operators that wish to use an external KMS for managing their participant keys must manage the CometBFT governance key of their SV externally. This involves the following steps:- Generate a new CometBFT governance key.
- Configure your SV app to use this externally generated key.
Generating a CometBFT governance key
Use the following shell commands to generate a keypair in the expected format:cometbft-governance-keys.json.
Configuring SV app to use the externally generated CometBFT governance key
You inject the externally generated CometBFT governance key into the SV app via storing it in a k8s secret namedsplice-app-sv-cometbft-governance-key.
Assuming that your SV deployment resides in the sv namespace, use the following command to create the secret from the JSON file generated above:
cometBFT.externalGovernanceKey value in the splice-sv-node Helm chart to true. (You can comment out the respective line in splice-node/examples/sv-helm/sv-values.yaml.)
Configuring participant to use an external KMS
Beyond the changes to the SV app deployment described above, the setup of an SV participant to use an external KMS is identical to the setup of a validator participant with KMS. It involves configuration changes to thesplice-participant Helm chart that depend on the KMS provider you choose.
Please refer to the Canton documentation on configuring KMS support for determining the right configuration options to match your desired KMS provider and setup. We provide minimal Helm configuration examples for Google Cloud (GCP) KMS and Amazon Web Services (AWS) KMS below.
Whatever KMS provider you choose, please note:
- Values in the
kmssection of the participant Helm chart are implicitly mapped to the Canton participantcrypto.kmsconfig. This implies that all configuration keys supported by Canton are supported, not only the ones shown in the examples above. Key names in camelCase are automatically converted to kebab-case. - For setting extra environment variables and mounting files to configure authentication to the KMS, you can use the
.additionalEnvVars,.extraVolumeMounts, and.extraVolumesfields of the Splice participant Helm chart (see the examples). - Make sure that your KMS configuration is always included in the values files you pass to
helm install participant ...orhelm upgrade participant .... - Canton participants use session keys to reduce the number of asymmetric cryptographic operations during protocol execution, improving performance and reducing (KMS) costs. By default, Splice participants use session encryption keys with a lifetime of one hour. The security implication for KMS-enabled participants is that an adversary with access to a memory snapshot might be able to obtain symmetric keys that allow decrypting up to one hour of encrypted messages. The default session key parameters can be overridden via configuration overrides. Please refer to the Canton documentation for an overview of the relevant parameters. The use of session signing keys is not yet supported for Splice participants.
Google Cloud KMS
The mock configuration below for GCP KMS is included insplice-node/examples/sv-helm/kms-participant-gcp-values.yaml:
cloudkms.cryptoKeyVersions.createcloudkms.cryptoKeyVersions.useToDecryptcloudkms.cryptoKeyVersions.useToSigncloudkms.cryptoKeyVersions.getcloudkms.cryptoKeyVersions.viewPublicKey
Cloud KMS Admin and Cloud KMS Crypto Operator roles to the validator KMS service account.
Amazon Web Services KMS
The mock configuration below for AWS KMS is included insplice-node/examples/sv-helm/kms-participant-aws-values.yaml:
kms:CreateKeykms:TagResourcekms:Decryptkms:Signkms:DescribeKeykms:GetPublicKey