Key Management Service (KMS)
Learn how to manage and use cryptographic keys with Infisical.
Concept
Infisical can be used as a Key Management System (KMS), referred to as Infisical KMS, to centralize management of keys to be used for cryptographic operations like encryption/decryption.
By default your Infisical data such as projects and the data within them are encrypted at rest using Infisical’s own KMS. This ensures that your data is secure and protected from unauthorized access.
If you are on-premise, your KMS root key will be created at random with the ROOT_ENCRYPTION_KEY
environment variable. You can also use a Hardware Security Module (HSM), to create the root key. Read more about HSM.
Keys managed in KMS are not extractable from the platform. Additionally, data is never stored when performing cryptographic operations.
Workflow
The typical workflow for using Infisical KMS consists of the following steps:
- Creating a KMS key. As part of this step, you specify a name for the key and the encryption algorithm meant to be used for it (e.g.
AES-GCM-128
,AES-GCM-256
). - Encryption: To encrypt data, you would make a request to the Infisical KMS API endpoint, specifying the base64-encoded plaintext and the intended key to use for encryption; the API would return the base64-encoded ciphertext.
- Decryption: To decrypt data, you would make a request to the Infisical KMS API endpoint, specifying the base64-encoded ciphertext and the intended key to use for decryption; the API would return the base64-encoded plaintext.
Note that this workflow can be executed via the Infisical UI or manually such as via API.
Encryption
Guide to Encrypting Data
In the following steps, we explore how to generate a key and use it to encrypt data.
Creating a KMS key
Navigate to Project > Key Management and tap on the Add Key button.
Specify your key details. Here’s some guidance on each field:
- Name: A slug-friendly name for the key.
- Key Usage: The type of key to create (e.g
Encrypt/Decrypt
for encryption, andSign/Verify
for signing). - Algorithm: The encryption algorithm associated with the key (e.g.
AES-GCM-256
). - Description: An optional description of what the intended usage is for the key.
Encrypting data with the KMS key
Once your key is generated, open the options menu for the newly created key and select encrypt data.
Populate the text area with your data and tap on the Encrypt button.
If your data is already Base64 encoded make sure to toggle the respective switch on to avoid redundant encoding.
Copy and store the encrypted data.
Creating a KMS key
Navigate to Project > Key Management and tap on the Add Key button.
Specify your key details. Here’s some guidance on each field:
- Name: A slug-friendly name for the key.
- Key Usage: The type of key to create (e.g
Encrypt/Decrypt
for encryption, andSign/Verify
for signing). - Algorithm: The encryption algorithm associated with the key (e.g.
AES-GCM-256
). - Description: An optional description of what the intended usage is for the key.
Encrypting data with the KMS key
Once your key is generated, open the options menu for the newly created key and select encrypt data.
Populate the text area with your data and tap on the Encrypt button.
If your data is already Base64 encoded make sure to toggle the respective switch on to avoid redundant encoding.
Copy and store the encrypted data.
Creating a KMS key
To create a cryptographic key, make an API request to the Create KMS Key API endpoint.
Sample request
Sample response
Encrypting data with the KMS key
To encrypt data, make an API request to the Encrypt Data API endpoint, specifying the key to use.
Make sure your data is Base64 encoded
Sample request
Sample response
Guide to Decrypting Data
In the following steps, we explore how to use decrypt data using an existing key in Infisical KMS.
Accessing your key
Navigate to Project > Key Management and open the options menu for the key used to encrypt the data you want to decrypt.
Decrypting your data
Paste your encrypted data into the text area and tap on the Decrypt button. Optionally, if your data was originally plain text, enable the decode Base64 switch.
Your decrypted data will be displayed and can be copied for use.
Accessing your key
Navigate to Project > Key Management and open the options menu for the key used to encrypt the data you want to decrypt.
Decrypting your data
Paste your encrypted data into the text area and tap on the Decrypt button. Optionally, if your data was originally plain text, enable the decode Base64 switch.
Your decrypted data will be displayed and can be copied for use.
Decrypting data
To decrypt data, make an API request to the Decrypt Data API endpoint, specifying the key to use.
Sample request
Sample response
Signing
Guide to Signing Data
In the following steps, we explore how to generate a key and use it to sign data.
Creating a KMS key
Navigate to Project > Key Management and tap on the Add Key button.
Specify your key details. Here’s some guidance on each field:
- Name: A slug-friendly name for the key.
- Key Usage: The type of key to create (e.g
Encrypt/Decrypt
for encryption, andSign/Verify
for signing). - Algorithm: The signing algorithm associated with the key (e.g.
RSA_4096
). - Description: An optional description of what the intended usage is for the key.
Signing data with the KMS key
Once your key is generated, open the options menu for the newly created key and select sign data.
Populate the text area with your data and tap on the Sign button.
Make sure to select the appropriate signing algorithm that will be used to sign the data. Supported signing algorithms are:
For RSA keys:
RSASSA PSS SHA 512
: Not deterministic, and includes random salt.RSASSA PSS SHA 384
: Not deterministic, and includes random salt.RSASSA PSS SHA 256
: Not deterministic, and includes random salt.RSASSA PKCS1 V1.5 SHA 512
: Deterministic, and does not include randomness.RSASSA PKCS1 V1.5 SHA 384
: Deterministic, and does not include randomness.RSASSA PKCS1 V1.5 SHA 256
: Deterministic, and does not include randomness.
For ECC keys:
ECDSA SHA 512
: Not deterministic, and includes randomness.ECDSA SHA 384
: Not deterministic, and includes randomness.ECDSA SHA 256
: Not deterministic, and includes randomness.
In this example, we’ll use the RSASSA PSS SHA 512
signing algorithm.
If your data is already Base64 encoded make sure to toggle the respective switch on to avoid redundant encoding.
Copy and store the signature of your data.
Creating a KMS key
Navigate to Project > Key Management and tap on the Add Key button.
Specify your key details. Here’s some guidance on each field:
- Name: A slug-friendly name for the key.
- Key Usage: The type of key to create (e.g
Encrypt/Decrypt
for encryption, andSign/Verify
for signing). - Algorithm: The signing algorithm associated with the key (e.g.
RSA_4096
). - Description: An optional description of what the intended usage is for the key.
Signing data with the KMS key
Once your key is generated, open the options menu for the newly created key and select sign data.
Populate the text area with your data and tap on the Sign button.
Make sure to select the appropriate signing algorithm that will be used to sign the data. Supported signing algorithms are:
For RSA keys:
RSASSA PSS SHA 512
: Not deterministic, and includes random salt.RSASSA PSS SHA 384
: Not deterministic, and includes random salt.RSASSA PSS SHA 256
: Not deterministic, and includes random salt.RSASSA PKCS1 V1.5 SHA 512
: Deterministic, and does not include randomness.RSASSA PKCS1 V1.5 SHA 384
: Deterministic, and does not include randomness.RSASSA PKCS1 V1.5 SHA 256
: Deterministic, and does not include randomness.
For ECC keys:
ECDSA SHA 512
: Not deterministic, and includes randomness.ECDSA SHA 384
: Not deterministic, and includes randomness.ECDSA SHA 256
: Not deterministic, and includes randomness.
In this example, we’ll use the RSASSA PSS SHA 512
signing algorithm.
If your data is already Base64 encoded make sure to toggle the respective switch on to avoid redundant encoding.
Copy and store the signature of your data.
Signing data
To sign data, make an API request to the Sign Data API endpoint, specifying the key to use.
Sample request
Sample response
To sign predigested data, you can pass "isDigest": true
in the request body. This requires the data to be a base64 encoded digest of the data you wish to sign.
It’s important that the digest is created using the same hashing algorithm as the signing algorithm. As an example, you would create the digest with SHA512
if you are using the RSASSA_PKCS1_V1_5_SHA_512
signing algorithm.
Guide to Verifying Data
In the following steps, we explore how to verify data using an existing key in Infisical KMS.
Accessing your key
Navigate to Project > Key Management and open the options menu for the key used to sign the data you want to verify.
Verifying data with the KMS key
Paste your signature and data into the text areas and tap on the Verify button.
Your verification result will be displayed and can be copied for use.
If the signature is invalid, you’ll see an error message indicating that the signature is invalid, and the “Signature Status” field will be Invalid
.
Accessing your key
Navigate to Project > Key Management and open the options menu for the key used to sign the data you want to verify.
Verifying data with the KMS key
Paste your signature and data into the text areas and tap on the Verify button.
Your verification result will be displayed and can be copied for use.
If the signature is invalid, you’ll see an error message indicating that the signature is invalid, and the “Signature Status” field will be Invalid
.
Verifying data
To verify data, make an API request to the Verify Data API endpoint, specifying the key to use.
Sample request
Sample response
To verify predigested data, you can pass "isDigest": true
in the request body. This requires the data to be a base64 encoded digest of the data you wish to verify.
It’s important that the digest is created using the same hashing algorithm as the signing algorithm. As an example, you would create the digest with SHA512
if you are using the RSASSA_PKCS1_V1_5_SHA_512
signing algorithm.
FAQ
Was this page helpful?