ISCC-ID#
| IEP: | 0011 |
|---|---|
| Title: | ISCC-ID |
| Author: | Titusz Pan tp@iscc.io |
| Comments: | https://github.com/iscc/iscc-ieps/issues/16 |
| Status: | Draft |
| Type: | Core |
| Standard: | IEP |
| License: | CC-BY-4.0 |
| Created: | 2022-09-28 |
| Updated: | 2026-07-03 |
Note
This document is a DRAFT intended as input to ISO TC 46/SC 9/WG 18 for a future revision or extension of ISO 24138.
1. Introduction#
This proposal defines the ISCC-ID, a short, globally unique, and owned identifier for declared digital assets.
An ISCC-CODE is derived algorithmically from digital content and identifies the content itself. An ISCC-ID is issued by an ISCC-HUB when a declarer submits a cryptographically signed declaration of an ISCC-CODE. The ISCC-ID identifies that declaration and is bound to the declarer's public key.
The ISCC-ID addresses applications that require:
- a short, stable, and resolvable identifier for declared digital content;
- verifiable attribution of an identifier to its issuing ISCC-HUB and declaring party;
- chronological ordering of identifiers by time of issuance.
The rules by which ISCC-IDs are declared, verified, and resolved are defined by the ISCC Discovery Protocol (IDP) and are out of scope for this document. This document specifies the structure, encoding, generation, and decoding of the identifier.
2. MainType ID#
The MainType ID is a MainType that represents an ISCC-ID, a timestamp-based identifier issued by an ISCC-HUB.
The MainType ID shall be assigned the value 6 (0110 in binary) within the MainType enumeration.
Table 1 – Additional reserved ISCC MainType
| ID | Symbol | Bits | Definition |
|---|---|---|---|
| 6 | ID | 0110 | A timestamp-based identifier issued by an ISCC-HUB |
2.1 SubTypes#
The SubType of MainType ID shall designate the REALM in which the ISCC-ID was issued.
Table 2 – Reserved SubTypes for MainType ID
| ID | Symbol | Bits | Definition |
|---|---|---|---|
| 0 | REALM_0 | 0000 | Sandbox realm for testing and development |
| 1 | REALM_1 | 0001 | Operational realm for production use |
An ISCC-ID with SubType REALM_0 shall not be used in production systems. Global uniqueness is not guaranteed for ISCC-IDs with SubType REALM_0.
NOTE: Additional realms can be reserved in future revisions to extend the identifier space.
2.2 Version#
The Version of MainType ID shall be 1 (0001 in binary) for ISCC-IDs conforming to this document.
2.3 Length#
The ISCC-BODY of an ISCC-ID shall have a length of exactly 64 bits, encoded as the length field value 0 (0000 in binary).
3. Format#
An ISCC-ID shall consist of:
- An ISCC-HEADER with MainType ID, SubType REALM, Version 1, and Length 64 bits.
- A 64-bit ISCC-BODY composed of, in order:
- a 52-bit TIMESTAMP: an unsigned integer counting microseconds elapsed since 1970-01-01T00:00:00Z (Unix epoch);
- a 12-bit HUB-ID: an unsigned integer in the range 0 to 4095 identifying the issuing ISCC-HUB within the realm.
The integer value of the ISCC-BODY shall be TIMESTAMP × 4096 + HUB-ID. The ISCC-BODY shall be
serialized as 8 bytes in big-endian byte order.
NOTE: With this structure a single ISCC-HUB can issue up to 1 000 000 ISCC-IDs per second, each realm supports up to 4 096 ISCC-HUBs, and the timestamp range lasts until the year 2112.
ISCC-ID example
An ISCC-ID of the operational realm, issued by the ISCC-HUB with HUB-ID 1 at timestamp 1782836079523119 (2026-06-30T16:14:39.523119Z).
3.1 Inputs#
The inputs for generating an ISCC-ID shall be:
timestamp: an unsigned integer counting microseconds elapsed since 1970-01-01T00:00:00Z.hub_id: an unsigned integer identifying the issuing ISCC-HUB.realm_id: an unsigned integer identifying the realm.
3.2 Outputs#
Processing shall produce the following output element:
iscc: the ISCC-ID in canonical form.
3.3 Generation#
An ISCC processor shall generate an ISCC-ID as follows:
- Verify that
timestampis less than 252 (4503599627370496). - Verify that
hub_idis less than 4096. - Verify that
realm_idis a reserved SubType value (0 or 1). - Compute the ISCC-BODY integer value as
timestamp × 4096 + hub_id. - Serialize the ISCC-BODY as 8 bytes in big-endian byte order.
- Construct the ISCC-HEADER with MainType set to ID (value 6), SubType set to
realm_id, Version set to 1, and Length set to the value 0 (64 bits). - Prefix the ISCC-BODY with the ISCC-HEADER and encode to canonical form.
If any verification step fails, the processor shall not generate an ISCC-ID and shall report an error.
3.4 Decoding#
An ISCC processor shall decode an ISCC-ID as follows:
- Decode the ISCC-ID and extract the ISCC-HEADER.
- Verify that the MainType is ID, the Version is 1, and the ISCC-BODY length is 64 bits.
- Extract the realm from the SubType.
- Compute the TIMESTAMP as the ISCC-BODY integer value divided by 4096, discarding the remainder.
- Compute the HUB-ID as the ISCC-BODY integer value modulo 4096.
If any verification step fails, the processor shall not decode the ISCC-ID and shall report an error.
4. Issuance#
ISCC-IDs shall be issued by ISCC-HUBs. An issuing ISCC-HUB shall:
- Use a time source with at least microsecond precision.
- Assign strictly monotonically increasing timestamps to successive ISCC-IDs.
- Implement measures that prevent issuing timestamps that deviate from the actual time.
A HUB-ID shall identify exactly one ISCC-HUB within a realm.
NOTE: Strict timestamp monotonicity per ISCC-HUB and per-realm HUB-ID uniqueness together guarantee that every ISCC-ID is globally unique within its realm.
5. Ordering#
ISCC-IDs of the same realm sort chronologically by the integer value of their ISCC-BODY. ISCC-IDs issued by the same ISCC-HUB sort in order of issuance.
NOTE: The canonical Base32 form is not order-preserving. Applications that require lexicographically sortable strings can encode the ISCC-BODY with the base32hex alphabet (RFC 4648 section 7).
6. Test Vectors#
Conforming implementations shall reproduce the following ISCC-IDs:
Table 3 – ISCC-ID test vectors
| timestamp | hub_id | realm_id | ISCC-ID | Decoded |
|---|---|---|---|---|
0 |
0 |
0 |
ISCC:MAIAAAAAAAAAAAAA |
ID-REALM_0-V1-64-0-0 |
0 |
0 |
1 |
ISCC:MEIAAAAAAAAAAAAA |
ID-REALM_1-V1-64-0-0 |
1 |
1 |
0 |
ISCC:MAIAAAAAAAAAAEAB |
ID-REALM_0-V1-64-1-1 |
1782836079523119 |
1 |
1 |
ISCC:MEIGKV5N6NTVF4AB |
ID-REALM_1-V1-64-1782836079523119-1 |
4503599627370495 |
4095 |
1 |
ISCC:MEIP777777777777 |
ID-REALM_1-V1-64-4503599627370495-4095 |
7. References#
7.1 Normative#
7.2 Informative#
- ISO 24138:2024 - International Standard Content Code
- IEP-0015 - ISCC DID Method
- IEP-0013 - ISCC Discovery Protocol (IDP Declaration Profile)
- Reference implementation: https://github.com/iscc/iscc-core/blob/main/iscc_core/iscc_id.py