SFTPGo stores sensitive data such as Cloud account credentials or passphrases to derive per-object encryption keys. These data are stored as ciphertext and only loaded to RAM in plaintext when needed.
The secrets section of the kms configuration allows to configure how to encrypt and decrypt sensitive data. The following configuration parameters are available:
url defines the URI to the KMS servicemaster_key_path defines the absolute path to a file containing the master encryption key. This could be, for example, a docker secrets or a file protected with filesystem level permissions.If the url is empty SFTPGo uses local encryption for keeping secrets. Internally, it uses the NaCl secret box algorithm to perform encryption and authentication.
We first generate a random key, then the per-object encryption key is derived from this random key in the following way:
For compatibility with SFTPGo versions 1.2.x and before we also support encryption based on AES-256-GCM. The data encrypted with this algorithm will never use the master key to keep backward compatibility.
Several cloud providers are supported using the sftpgo-plugin-kms.