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 superadmin password).

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 superadmin password 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