Skip to content

Commit d42b9a3

Browse files
committed
feat(docs): Enhance the catalyst rbac URI so it can be used as a general identifier as well as a key identifier
1 parent 0d155bf commit d42b9a3

File tree

2 files changed

+68
-29
lines changed

2 files changed

+68
-29
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
title: RBAC KID (Key Identifier) URI
22
arrange:
3-
- kiduri.md
3+
- catalyst-id-uri.md

docs/src/architecture/08_concepts/rbac_kid_uri/kiduri.md renamed to docs/src/architecture/08_concepts/rbac_id_uri/catalyst-id-uri.md

Lines changed: 67 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
Title: RBAC Key Identifier URI Specification
2+
Title: RBAC Catalyst Identifier URI Specification
33
Category: Catalyst
44
Status: Proposed
55
Authors:
@@ -20,8 +20,7 @@ License: CC-BY-4.0
2020
* [`authority` - `host`](#authority---host)
2121
* [List of defined hosts](#list-of-defined-hosts)
2222
* [`authority` - `userinfo`](#authority---userinfo)
23-
* [Lists of defined subnetwork `userinfo` values](#lists-of-defined-subnetwork-userinfo-values)
24-
* [Cardano](#cardano)
23+
* [Example `userinfo` with a `hostname`](#example-userinfo-with-a-hostname)
2524
* [`path`](#path)
2625
* [Reference Implementation](#reference-implementation)
2726
* [Test Vectors](#test-vectors)
@@ -38,34 +37,37 @@ unambiguously identified.
3837

3938
## Motivation: why is this CIP necessary?
4039

41-
There is a need to identify which Key from a RBAC registration was used to sign data.
40+
There is a need to identify which RBAC Registration is referenced,
41+
or which Key from a RBAC registration was used to sign data.
4242
RBAC defines a universal keychain of different keys that can be used for different purposes.
4343
They can be used not only for Signatures, but also Encryption.
4444

45-
Therefore, there needs to be an unambiguous and easy to lookup identifier to signify which key was
46-
used for a particular purpose.
45+
Sometimes all that is required is to identify the individual key chain.
46+
Other times a specific key on the chain needs to be referenced.
4747

48-
This document defines a [URI] scheme to unambiguously define a particular key with reference to a
49-
particular RBAC keychain.
48+
Therefore, there needs to be an unambiguous and easy to lookup identifier to signify which keychain,
49+
or key in a particular chain was used for a particular purpose.
50+
51+
This document defines a [URI] scheme to unambiguously define a keychain or a specific key within the keychain.
5052

5153
## Specification
5254

5355
### URI
5456

55-
The RBAC Kid is formatted using a [Universal Resource Identifier].
57+
The Catalyst RBAC Id is formatted using a [Universal Resource Identifier].
5658
Refer to [RFC3986] for the specification of the URI format.
5759

5860
### `scheme`
5961

60-
The [scheme](https://datatracker.ietf.org/doc/html/rfc3986#section-3.1) **MUST** be `kid.catalyst-rbac`;
62+
The [scheme](https://datatracker.ietf.org/doc/html/rfc3986#section-3.1) **MUST** be `id.catalyst`;
6163

6264
### `authority`
6365

6466
The [authority](https://datatracker.ietf.org/doc/html/rfc3986#section-3.2) references the blockchain or network
6567
the key was registered within.
6668

67-
It is perfectly valid for a Kid to reference a different network than the place where the Key is used.
68-
For example, a `cardano` KID can be used to post documents to `IPFS`.
69+
It is perfectly valid for a Kid to reference a different network than the place where the Id or Key is used.
70+
For example, a `cardano` ID can be used to post documents to `IPFS`.
6971
Its purpose is to define WHERE the key was registered, and nothing more.
7072

7173
The Authority will consist of a `host` and optional `userinfo`.
@@ -78,30 +80,43 @@ It **IS NOT** resolvable with **DNS**, and **IS NOT** a public host name.
7880
It is used as a decentralized network identifier.
7981
The consumer of the `KID` must be able to resolve these host names.
8082

83+
The hostname may have one or more subdomains which could specify side-chains of a particular network,
84+
or test networks.
85+
8186
##### List of defined hosts
8287

8388
| `host` | Description |
8489
| --- | --- |
8590
| `cardano` | Cardano Blockchain |
91+
| `preprod.cardano` | Preprod Cardano Blockchain test network |
92+
| `preview.cardano` | Preview Cardano Blockchain test network |
8693
| `midnight` | Midnight Blockchain |
8794
| `ethereum` | Ethereum Blockchain |
8895
| `cosmos` | Cosmos Blockchain |
8996

97+
This list is indicative of the host names that can be used, any hostname is valid provided it is
98+
capable of storing catalyst RBAC registration keychains.
99+
90100
#### `authority` - `userinfo`
91101

92-
The [userinfo](https://datatracker.ietf.org/doc/html/rfc3986#section-3.2.1)
93-
is used to distinguish a subnetwork from the primary main network.
94-
The absence of `userinfo` is used to indicate the primary main network.
102+
The [userinfo] is used to hold a user defined readable name that can be attached to the keychain.
103+
It may contain an optional `nonce` which is separated from the users name by a `:` and replaces a
104+
traditional password used for HTTP basic authentication.
95105

96-
##### Lists of defined subnetwork `userinfo` values
106+
Because the name is not unique, and is provided by the user, it is informational only.
107+
A URI is identical, provided the hostname and path are the same, the [userinfo] does not play
108+
a part in validating or finding the catalyst keychain being referenced.
97109

98-
###### Cardano
110+
The `nonce` part contained in the `password` component of the username *MUST* be an integer,
111+
and it is the number of seconds since 1970 UTC, when the nonce was generated.
99112

100-
| `userinfo` | Description |
101-
| --- | --- |
102-
| `preprod` | Cardano Pre-Production Network |
103-
| `preview` | Cardano Preview Network |
104-
| 0x<hex_number> | Cardano network identified by this magic number in hex |
113+
Applications which use the `nonce` will define its use, anything that does not use the `nonce` will ignore it.
114+
115+
##### Example `userinfo` with a `hostname`
116+
117+
* `anne@cardano` - username `anne` no nonce.
118+
* `blake:1737101079@midnight` - username `blake` with nonce 1737101079.
119+
* `:173710179#ethereum` - no username with nonce 173710179.
105120

106121
### `path`
107122

@@ -115,13 +130,16 @@ The overall `path` specification is: `<initial role0 key>/<role>/<rotation>#encr
115130
* This does not change, even if the Initial Role 0 key is revoked.
116131
* This allows for an unambiguous identifier for the RBAC keychain.
117132
* It is not necessarily the key being identified.
118-
* `<role>` - This is the Role number being used.
133+
* `<role>` - *Optional* This is the Role number being used.
119134
* It is a positive number, starting at 0, and no greater than 65535.
120-
* `<rotation>` - This is the rotation of the defined role key being identified.
135+
* If it is not defined, then its default value is 0.
136+
* If it is not defined, there can be no `<rotation>` part of the path following.
137+
* `<rotation>` - *Optional* This is the rotation of the defined role key being identified.
121138
* It starts at 0 for the first published key for the role, and increments by one for each subsequent published rotation.
122139
* This number refers to the published sequence of keys for the role in the RBAC registration keychain,
123140
not the index used in the key derivation.
124141
* It is positive and no greater than 65535.
142+
* If not present, it defaults to 0.
125143
* `#encrypt` - [Fragment](https://datatracker.ietf.org/doc/html/rfc3986#section-3.5)
126144
disambiguates Encryption Public Keys from signing public keys.
127145
* Roles can have 1 active public signing key, and 1 active public encryption key.
@@ -134,26 +152,46 @@ The first implementation will be Catalyst Voices.
134152

135153
## Test Vectors
136154

137-
* `kid.catalyst-rbac://cardano/<key>/0/0`
155+
* `id.catalyst://cardano/<key>`
138156
* A Signing key registered on the Cardano Main network.
139157
* Role 0 - Rotation 0.
158+
* `username` - undefined.
159+
* `nonce` - undefined.
140160
In this example, it is exactly the same as the `<key>`.
141-
* `kid.catalyst-rbac://preprod@cardano/<key>/7/3`
161+
* `id.catalyst://cardano/<key>/0`
162+
* A Signing key registered on the Cardano Main network.
163+
* Role 0 - Rotation 0.
164+
* `username` - undefined.
165+
* `nonce` - undefined.
166+
* `id.catalyst://gary@cardano/<key>/0/0`
167+
* A Signing key registered on the Cardano Main network.
168+
* Role 0 - Rotation 0.
169+
* `username` - `gary`.
170+
* `nonce` - undefined.
171+
* `id.catalyst://faith@preprod@cardano/<key>/7/3`
142172
* A Signing key registered on the Cardano pre-production network.
143173
* Role 7 - Rotation 3.
174+
* `username` - `faith`
175+
* `nonce` - undefined.
144176
The Key for Role 7, and its third published rotation
145177
(i.e., the fourth key published, the first is the initial key, plus 3 rotations following it).
146-
* `kid.catalyst-rbac://preprod@cardano/<key>/2/0#encrypt`
178+
* `id.catalyst://faith:173710179@preprod@cardano/<key>/2/0#encrypt`
147179
* A Public Encryption key registered on the Cardano pre-production network.
148180
* Role 2 - Rotation 0.
181+
* `username` - `faith`
182+
* `nonce` - 173710179.
149183
The initially published Public Encryption Key for Role 2.
150-
* `kid.catalyst-rbac://midnight/<key>/0/1`
184+
* `kid.catalyst-rbac://:173710179@midnight/<key>/0/1`
151185
* A Signing key registered on the Midnight Blockchain Main network
152186
* Role 0 - Rotation 1.
187+
* `username` - undefined.
188+
* `nonce` - 173710179.
153189
In this example, it is NOT the same as the `<key>`, as it identifies the first rotation after `<key>`.
154190
* `kid.catalyst-rbac://midnight/<key>/2/1#encrypt`
155191
* A public encryption key registered on the Midnight Blockchain Main network.
156192
* Role 2 - Rotation 1.
193+
* `username` - undefined.
194+
* `nonce` - 173710179.
157195

158196
## Rationale: how does this CIP achieve its goals?
159197

@@ -178,3 +216,4 @@ This document is licensed under [CC-BY-4.0](https://creativecommons.org/licenses
178216
[Universal Resource Identifier]: https://datatracker.ietf.org/doc/html/rfc3986
179217
[RFC3986]: https://datatracker.ietf.org/doc/html/rfc3986
180218
[Base64 URL]: https://datatracker.ietf.org/doc/html/rfc4648#section-5
219+
[userinfo]: (https://datatracker.ietf.org/doc/html/rfc3986#section-3.2.1)

0 commit comments

Comments
 (0)