--- title: "NanoROOT" source_url: https://dev.digicert.com/trustcore-sdk/nanoroot.html --- NanoROOT is DigiCert® hardware-anchored security solution for embedded devices, built on TrustCore SDK (FIPS-certified, hardened, and field-tested for over a decade). At its core, NanoROOT uses **Physical Unclonable Function** (*PUF*) technology to create immutable device identity. This root of trust underpins secure provisioning, counterfeit resistance, and long-term data protection. For federal compliance details, see [Compliance and regulations](https://dev.digicert.com/en/trustcore-sdk/compliance-and-regulations.html). ## Why NanoROOT? Connected devices face unique challenges, such as long lifespans, very few patching options, and exposure to hostile environments. NanoROOT addresses these by providing: - PUF-compatible immutable identity — Can utilize immutable hardware-derived identities. While NanoROOT does not implement PUF itself, it is designed to work with PUF-based or similar identity sources provided by the device - Secure data protection — encrypted storage, authenticated telemetry - Counterfeit resistance — tamper-proof fingerprinting - Interoperable APIs — consistent interface across hardware SKUs NanoROOT is available in two models: ## License This project is available under a **dual-license model**: - **Open Source License**: [GNU Affero General Public License v3 (AGPL v3)](https://github.com/digicert/trustcore/blob/main/LICENSE.md): This license allows you to use, modify, and distribute the code for free in accordance with AGPL terms. - **Commercial License**: If you wish to use TrustCore SDK in a proprietary or commercial product (e.g., embedded in closed-source firmware or commercial SaaS applications), a commercial license is available under DigiCert’s [Master Services Agreement](https://www.digicert.com/master-services-agreement/) (MSA). Contact us at [sales@digicert.com](mailto:sales@digicert.com) for commercial licensing details. ## Core capabilities - **PUF-compatible immutable identity**: NanoROOT is compatible with PUF-derived identities and other forms of immutable hardware identity. This flexibility allows it to integrate with a range of device-level identity mechanisms without requiring a specific implementation: - **Device fingerprinting** — uses entropy sources such as die-level randomness, fingerprint hashes, MAC addresses, serial numbers, and CPU UUIDs - **Security profile enforcement** — enables crypto operations, secure transport, and content protection bound to device identity - **Root of trust migration** — supports migration when hardware changes, for example, NIC or serial numbers, while maintaining identity through persistent fingerprints - **Data and file protection**: NanoROOT keeps sensitive data safe even in untrusted environments. It uses industry-standard algorithms for all on-device data. - **Integration and compatibility**: NanoROOT is implemented as an **SMP Provider module**, enabling applications that integrate with TrustCore SDK and TrustEdge to interface with the **NanoTAP** API layer for trusted service functionality. - Devices equipped with in-built physical secure elements, such as TPM2, SIM, and TEE - Devices relying solely on NanoROOT for secure operations ## NanoROOT SMP **Security context**: The cryptographic security context initialization/creation is based on a proprietary algorithm that leverages the device’s unique, immutable characteristics to generate: - A unique device identity - A corresponding cryptographic context, derived using a Key Derivation Function (KDF) This ensures that the cryptographic context is: - Unique per device - Bound to the device and cannot be replicated externally - Created only on the originating device **Service functionality**: NanoROOT SMP provides the following security services: - Data protection/secure storage - Seal/unseal data - Sign and verify - Key management - Ephemeral cryptographic keys ## NanoTAP application integration NanoTAP provides a set of TAP APIs that enable applications (TrustEdge or customer-defined) to perform trusted operations such as secure storage, key management, signing, and decryption. **Available TAP APIs**: - **Secure storage**: - `TAP_sealWithTrustedData` - `TAP_unsealWithTrustedData` - **Key management**: - `TAP_importKeyFromID` - `TAP_asymSign` - **Cleanup APIs**: - `TAP_unloadKey` - `TAP_freeKey` (for extended memory cleanup) **Supported asymmetric key algorithms**: | Algorithm | Key size | Index value | | --- | --- | --- | | RSA | 2k
3k
4k
8k | 0x100000002
0x100000003
0x100000004
0x100000005 | | ML-DSA | 44
65
87 | 0x200000001
0x200000002
0x200000003 | | ECDSA | 256
384
521 | 0x300000001
0x300000002
0x300000003 | ## Configuration A sample NanoROOT configuration file is available at (https://github.com/digicert/trustcore/blob/main/samples/nanoroot/config/nanoroot_smp.conf). ``` providertype=15 [module] modulenum=1 modulename=digi-nanoroot moduleidstr=FCDB4B423F4E5283AFA249D762EF6AEF150E91FCCD810D43E5E719D14512DEC7 credfile=default-fingerprint.json ``` Copy this sample NanoROOT configuration file and place it under `/etc/digicert/` Where: `providertype` - defines the NanoROOT SMP provider type. `credfile` - specifies the credential file name. **Credential file** (**default-fingerprint.json**): This credential file [default-fingerprint.json] defines device-specific immutable attributes. These attributes are used to generate a unique cryptographic context per device. A sample credential file is available at (https://github.com/digicert/trustcore/blob/main/samples/nanoroot/config/default-fingerprint.json). Copy this credential file and place it under `/etc/digicert/` ``` { "attributes": [ { "attribute_name": "INTERNATIONAL MOBILE IDENTITY", "attribute_value": { "type": "ENV", "variable_name": "INTERNATIONAL_MOBILE_IDENTITY" } }, { "attribute_name": "MOBILE EQUIPMENT IDENTIFIER", "attribute_value": { "type": "ENV", "variable_name": "MOBILE_EQUIPMENT_IDENTIFIER" } }, { "attribute_name": "ELECTRONIC SERIAL NUMBER", "attribute_value": { "type": "ENV", "variable_name": "ELECTRONIC_SERIAL_NUMBER" } }, { "attribute_name": "INTERNATIONAL MOBILE SUBSCRIBER IDENTITY", "attribute_value": { "type": "ENV", "variable_name": "INTERNATIONAL_MOBILE_SUBSCRIBER_IDENTITY" } }, { "attribute_name": "MAC ADDRESS", "attribute_value": { "type": "program", "path": "/etc/digicert/get_mac_address.sh", "argument": "eno1" } }, { "attribute_name": "SERIAL NUMBER", "attribute_value": { "type": "ENV", "variable_name": "SERIAL_NUMBER" } }, { "attribute_name": "SECURE ANDROID ID", "attribute_value": { "type": "ENV", "variable_name": "SECURE_ANDROID_ID" } }, { "attribute_name": "UUID", "attribute_value": { "type": "ENV", "variable_name": "UUID" } }, { "attribute_name": "CPUID", "attribute_value": { "type": "program", "path": "/etc/digicert/get_cpuid.sh" } } ] } ``` The credential file path can be specified in the configuration file as either an absolute or relative path: - **Absolute path**: The file is read directly from the specified location. - **Relative path**: The file is resolved relative to the default directory: ``` /etc/digicert/ ``` **Examples**: Absolute path: ``` /opt/device/creds/default-fingerprint.json ``` Relative path: ``` default-fingerprint.json ``` Interpreted as: `/etc/digicert/default-fingerprint.json` **Notes**: - Ensure all the required environment variables referenced in the credential file are properly set on the device - The credential file is critical for deriving device-unique cryptographic context ## Build and run For instructions on building and running the NanoROOT library and the sample program, see [BUILD_RUN.md](https://github.com/digicert/trustcore/blob/main/samples/nanoroot/BUILD_RUN.md).