11---
2- Title : RBAC Key Identifier URI Specification
2+ Title : RBAC Catalyst Identifier URI Specification
33Category : Catalyst
44Status : Proposed
55Authors :
@@ -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.
4242RBAC defines a universal keychain of different keys that can be used for different purposes.
4343They 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] .
5658Refer 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
6466The [ authority] ( https://datatracker.ietf.org/doc/html/rfc3986#section-3.2 ) references the blockchain or network
6567the 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 ` .
6971Its purpose is to define WHERE the key was registered, and nothing more.
7072
7173The 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.
7880It is used as a decentralized network identifier.
7981The 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