Cryptography
Every aspect of RADKit is designed with security in mind. Both RADKit Cloud and the RADKit endpoints (Client/Service and related applications) follow Cisco’s Secure Development Lifecycle (CSDL).
Database & secrets
The entire RADKit Service database is AES-128/SHA-256 encrypted with a strong unique random key.
RADKit Service handles three types of secrets:
- Private keys
For various certificates (Service identity, Service webserver, E2EE). Stored on disk as PKCS#8 files; each file is AES-256/SHA-256 encrypted with a strong unique random key.
- Device credentials
Including passwords and SSH private keys. Stored in the Service database. Doubly encrypted (stored in the database as ciphertext protected by a key derived from the
superadminpassword).- Local account credentials
All account passwords are salted and hashed with SHA-512. Service admin account password hashes are stored in the Service database, while the
superadminpassword hash is stored together with the vault (see below).
Master key
The encryption keys for the private keys and database are stored in a vault file which is in turn
AES-128/SHA-256 encrypted using a key derived from the superadmin password. In other words,
the superadmin password acts as the master key for all RADKit Service secrets. If it is lost,
the database and secrets cannot be recovered.
Exporting secrets
The database and vault contents can be exported and decrypted for inspection by using the following subcommands:
radkit-service export-db [--decrypt-secrets]radkit-service export-secrets
Warning
These two commands will output decrypted data. Do not use them in a production environment and exercise proper care so that plaintext data does not find its way on disk, in a session log, in a scrollback buffer, …
Importing secrets
Secrets that were exported using radkit-service export-secrets can be
imported again using radkit-service import-secrets. Use the --overwrite
flag when some secrets already exist in the vault, but have a different value
and need to be replaced. The superadmin password will be asked both when
exporting and when importing secrets. For the import, please ensure that
radkit-service is not running while doing the import, otherwise, the vault’s
content might be overwritten again.
# Export secrets first.
radkit-service export-secrets --output decrypted-secrets.json
# Import again.
radkit-service import-secrets --input decrypted-secrets.json
Importing database data
Database data can be exported as described in the Exporting section, and later on imported by using the following subcommands:
# Import the secrets encryption key for the content of the imported database JSON
radkit-service import-secrets --input imported-secrets.json
# Now import the data
radkit-service import-db --input database_export.json
TLS
- Versions
TLS 1.3 for all connections between RADKit components (Client to Cloud, Service to Cloud, direct RPC from Client to Service, E2EE between Client and Service, Control to Service);
TLS 1.2 or higher for all other connections.
- Trusted roots
RADKit ships with its own sets of trusted roots (see Truststores and Certificate Bundles). It does not rely on the trusted roots installed on the system for TLS server certificate validation.
- Ciphers
By default, only those TLS ciphers marked as Mandatory or Recommended by Cisco CSDL are enabled on TLS sockets in RADKit. For connections to managed devices, it is also possible to allow ciphers marked as Optional on a per-device basis. PSK ciphers are not supported.
- Revocation
All connections to RADKit Cloud and other cloud services are checked for certificate revocation using the Online Certificate Status Protocol (OCSP). OCSP queries are proxied through RADKit Cloud over HTTPS; all OCSP responses are verified and processed by RADKit Client/Service. See Certificate revocation below for details and related settings.
Identity certificates
Identity certificates are issued to RADKit Service and Client instances during the enrollment process. Those certificates are granted by RADKit Access (a component of RADKit Cloud) and signed by a domain-specific private CA. The current parameters for RADKit Access identity certificates are:
key type/size: RSA 4096-bit
signature: ECDSA with SHA512
revocation: CRL + OCSP