Cisco IOx Secure Storage Service
Introduction
Secure Storage Service (SSS) offers a secure way of storing certificates, keys, and
confidential user data in a device. It uses data encryption with a key stored within Cisco's Anti Counterfeit Technology v2 (ACT2) chip, which is part of Cisco's Hardware-Anchored Secure Boot and Trust Anchor module (TAm) to Verify Hardware and Software Integrity.

IOx applications can only access the Secure Storage Service (SSS) running in the host through REST based APIs, and the encrypted content will be placed in the application disk space.
There is no way for the running application, or even the gateway operating system, at any level of privilege, to retrieve the encryption key. This function is offloaded to the hardware ACT2 chip.
Warning: If the IOx application is deleted, so is the allocated disk space and with it all the secure storage content. The IOx 'upgrade' function will preserve the secure storage content.
Availability
Secure Storage Service (SSS) is a Cisco IOx core service available on the following Cisco platforms:
- Cisco IR809 and IR829
- Cisco IC3000
Using SSS is particularly recommended when removable disks such as mSATA is being used, as the media can be removed physically and unencrypted content can be easily accessed without any difficulty.
Note: This service is not supported on USB storage. It only supported on internal flash disk, or Cisco's removable media such as IR829's mSATA hard disk.
Accessing Secure Storage API
IOx Secure Storage requires an application to communicate with the host system by using a HTTP REST API to the Secure Storage Service.
The API's IP address and port number that an application requires to access the SSS is available:
- in the
/data/.env
file for LXC-based platforms such as IR8x9. Load those environement variables first in sh
by running source /data/env
- in Docker's environment variable for native Docker platforms such as IC3000. In this case no action is required, the environment variables are directly available.
${CAF_SS_IP_ADDR}
is an IPv4 or IPv6 address through which the application can access the SSS.
${CAF_SS_PORT}
is the port through which the SSS can be accessed.
The base URL to access Secure Storage API is therefore going to be:
A KVM application must have a shared mount of the disk
volume, so the Cisco application-hosting framework can inject the above variables.
Secure Storage Services
SSS offers two of the following key functionalities to applications:
- Secure storage
- Media encryption
SSS supports only managed mode. In this mode, the keys
that an application uses for encryption and decryption come from the host system hardware trust anchor.
Functionality
The SSS feature allows you to upload and download user objects.
The objects are stored in a software-based trust anchor module (SW-TAM) repository.
Supported SSS Operations
- Upload operation: Uploads an object to the SW-TAM repository.
- Retrieve operation: Retrieves an object from the SW-TAM repository.
- List operation: Lists objects that are contained in the SW-TAM repository.
- Delete operation: Permanently removes an object from the SW-TAM repository.
The CC feature offers a set of REST based APIs through which an application can carve out encrypted disk/media.
Supported CC Operations
- CC create: Encrypted disk file that contains application objects.
- Upload operation: Uploads an object to the CC.
- Retrieve operation: Downloads an object from the CC.
- List operation: Lists objects that are contained in the CC.
- Delete operation: Removes an object contained from in the CC.
Supported SSS REST APIs With curl-based API Usage
This section provides a sample of the externally visible REST based APIs that are available to IOx applications.
In the sample usage:
- APPID refers to the CAF_APP_ID environment variable.
- App-UUID refers to the CAF_SYSTEM_UUID environment variable.
- IP address refers to the CAF_SS_IP_ADDR environment variable.
- PORT refers to CAF_SS_PORT environment variable.
- $OBJNAME is the object file name.
- $OBJCONTENT is the payload (contents to be stored in an object file).
- $TOKEN= is the response obtained for the token request REST API.
The following response classifier variables are used in the examples:
- $RETCODE: numerical code 2xX or 4yY
- $RETSTR: response text
Example
REST API Set
[GET] /TOKEN/${APPID}/${APP-UUID}
Obtain a token for an application.
IN: AppId, App-UUID
OUT: JSON response with token# data | 4yY Failure
An app should be able to get the token any time and any number of times.
Returns $TOKEN: You must preserve and use the token in subsequent REST API calls.
See the "Application Workflow To Make Use of Any SSS" section.
[POST] /${APPID}/Object
Create a secure object or create a crypt-container.
IN: token#, Object-type [Crypt-Container(CC) | SS-Object], object-name, object-file/content
CC: size, Object-Attrit-Type
OUT: 2xX ok | 4yY Failure
If the Object-type is CC, CC size is mandatory.
Object-Attrit-Type: (optional) By default, objects are treated as RAW objects.
Object attribute list (N = 1 to 9; 7 alone is not supported)
[1] Upload object from file to file
[2] Upload object payload to file
For To specifying object-attribute. one need to make use of -F object-attribute=,
where N=1 (object attribute Raw) to 9 (object attribute ECC PEM KeyPair)
[3] Crypt C-container creation
/AppId/Object [GET]
Access secure object.
IN: token#, object-name
OUT: json JSON response with object-file/content
/AppId/list [GET]
Get secure object list.
IN: token#
OUT: json JSON response with object-name-list
/AppId/Object [DELETE]
Delete secure object
IN: token#, object-name
OUT: 2xX ok | 4yY Failure
/AppId/CC/file [PUT]
Create files in encrypted container
IN: token#, file-body
OUT: 2xX ok | 4yY Failure
[1] Upload object from file to CC
[2] Upload Object content to CC
/AppId/CC/list [GET]
Get file list from encrypted container.
IN: token#
OUT: json JSON response with file- list
/AppId/CC/file [GET]
Access file from encrypted container.
IN: token#
OUT: 2xX ok | 4yY Failure
/AppId/CC/file [DELETE]
Delete file from encrypted container.
IN: token#
OUT: 2xX ok | 4yY Failure
/AppId/CC [DELETE]
Delete the encrypted container carved out.
IN: token#
OUT: 2xX ok | 4yY Failure
Application Workflow To Make Use of Any SSS
GET SSS Token
POST SSS Object
//from File
Or
//contents to file
GET SSS Object
GET CC Token
Create CC Container
PUT Container File
//from file
OR
//contents to file
GET Container File
DELETE Container File
Curl Usage Samples Show Case SSS and CC Usages From an Application
SSS Usage
CC Usage