Skip to content

Commit a251748

Browse files
authored
Merge pull request #18 from namib-project/rework_intro
Rewrite parts of the introduction, comment out old PoP section, add some TODOs
2 parents ad7904e + 82d5c4c commit a251748

File tree

1 file changed

+94
-50
lines changed

1 file changed

+94
-50
lines changed

draft-romann-mud-constrained.md

Lines changed: 94 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -99,14 +99,16 @@ constrained environment can be seen in {{arch1-fig}}.
9999
Here, we can see that both the Thing and the MUD Receiver (as the recipient of
100100
the MUD URLs) may initiate the MUD discovery process:
101101
The Thing can contact and register with MUD URL recipients, e.g. by sending a
102-
CoAP POST request via Multicast, addressing a well-known registration endpoint.
103-
Conversely, MUD recipients can initiate the discovery process, e.g. by sending a
102+
CoAP POST request via Multicast and/or addressing a well-known registration endpoint.
103+
Conversely, a MUD Receiver can initiate the discovery process, e.g. by sending a
104104
COAP GET request to a well-known URI via multicast.
105105

106106
Note that the protocol used for communication between the MUD Receiver and
107-
MUD Manager is not specified in this document and implementation-specific.
107+
MUD Manager is considered out of scope for this document and is considered
108+
implementation-specific.
108109

109110
<!-- TODO: Refine diagram -->
111+
<!-- TODO: We might also need to mention the CoRE RD here, either in prose or as part of the diagram -->
110112

111113
<!--
112114
TODO: Fix once plantuml is included in the GitHub Actions Docker image.
@@ -127,7 +129,7 @@ package "MUD Architecture" {
127129
...................................................
128130
. __________ Forward valid ____________ .
129131
. + + MUD URLs + + .
130-
. | MUD +------------>+ MUD | .
132+
. | CoAP MUD +------------>+ MUD | .
131133
. | Receiver | | Manager | .
132134
. +__________+ +____________+ .
133135
. ^ . .
@@ -149,32 +151,44 @@ authenticity of the MUD URL associated with them.
149151
For this purpose, this document specifies how to use CBOR Web Tokens {{!RFC8392}}
150152
to include MUD URLs as part of a signed and therefore authenticable token.
151153

152-
# General Considerations
154+
## Methods of MUD URL Distribution {#general_methods}
153155

154-
For this document, we focus on two mechanisms for exposing MUD URLs in a
155-
constrained network:
156-
On the one hand, Things can expose MUD URLs as a dedicated CoAP resource.
157-
This allows them to further secure the payload and provide additional
158-
authentication, e.g., by embedding the URL in a CBOR Web Token.
159-
On the other hand, Things can include a MUD URL in a list of links, using, for
160-
example, the CoRE Link-Format.
161-
This Web Linking approach also allows Things to submit MUD URLs to a Directory
162-
Service.
156+
In general, we consider two mechanisms for exposing MUD URLs in a
157+
constrained network: Using dedicated resources and embedding into existing
158+
self description formats.
163159

160+
Things can expose MUD URLs as a dedicated resource, which may ease discovery of MUD-capable
161+
Things through said resource and enables the transmission of arbitrary
162+
payload types, including ones that provide authentication (e.g., CWTs {{!RFC8392}}).
163+
164+
Alternatively, MUD URLs can also be referenced through other self description formats
165+
such as SUIT manifests {{!I-D.ietf-suit-mud}}.
166+
Including MUD URLs with other self descriptions can be advantageous with regard to the
167+
availability of said information (e.g., by making the MUD URL available through a central directory).
168+
If the other self description format or its method of distribution provides means for authentication, they may also be used for validating MUD URLs.
169+
170+
In this specification, we will describe how to embed a MUD URL into a CoRE Link
171+
Format {{!RFC6690}} resource, which may itself be retrieved directly from the device or through
172+
a CoRE Resource Directory {{!RFC9176}}.
173+
Additionally, we will define dedicated COAP resources both for providing and receiving MUD URLs.
174+
175+
<!--
176+
TODO embed the chapter numbers into the previous paragraph once these chapters are properly refactored
164177
The first part of this section describes the mechanisms that use a dedicated
165178
MUD URL CoAP resource.
166179
In the later parts of this section, discovery methods for this MUD URL resource
167180
are specified.
168181
As part of the discovery method description, a method of providing MUD URLs directly
169-
using the CoRE link format is also described.
182+
using the CoRE Link-Format is also described.
183+
-->
170184

171185
## MUD URL CoAP Submission Flows {#general_submission-flows}
172-
In general, this specification provides two ways by which a MUD URL transmission can be performed using an explicit MUD URL resource.
186+
In general, this specification provides two ways by which a MUD URL transmission can be performed using a dedicated CoAP resource.
173187

174-
In environments where many Things need to be managed over several subnets and where multicast usage is not desirable, it can be advantageous if the MUD Receiver provides a CoAP resource to perform submissions to and the Things initiate the MUD URL submission.
188+
In environments where many Things need to be managed over several subnets and where multicast usage is not desirable, it may be advantageous if MUD URLs are submitted by the Thing through a CoAP resource provided by the MUD Receiver.
175189
This will be referred to as the "Thing-initiated" submission flow for the remainder of this specification.
176190

177-
Conversely, in environments where multicast is not an issue and things might be limited in their capabilities, it can be advantageous if MUD Receivers retrieve the MUD URL from a CoAP resource provided by the Things.
191+
Conversely, in environments where multicast is not an issue and things might be limited in their capabilities, it may be easier for the MUD Receiver to retrieve the MUD URL from a CoAP resource provided by the Thing.
178192
In this specification, this will be referred to as the "Receiver-initiated" submission flow.
179193

180194
### Using the MUD URL Resource (Receiver-initiated)
@@ -189,8 +203,7 @@ In general, the Receiver-initiated MUD URL flow can be divided into these steps:
189203
This resource should provide the MUD URL in one of the formats specified in {{general_payloads}}.
190204
It also makes this resource discoverable for MUD Receivers using the methods specified in {{general_discovery}}.
191205

192-
2. The MUD Receiver discovers the resource using the aforementioned methods.
193-
Depending on the method of discovery, this could for example happen using a periodic scan for devices, e.g., by periodically requesting a well-known URI using multicast.
206+
2. The MUD Receiver discovers the resource using the aforementioned methods, e.g., by periodically requesting a well-known URI using multicast.
194207

195208
3. The MUD Receiver retrieves the discovered resource for devices for which the MUD Controller does not have a current MUD URL.
196209
To do so, it performs a CoAP request for the discovered MUD URL resource URI using the GET method, which is responded to with the appropriate payload.
@@ -214,8 +227,9 @@ This flow can be divided into these general steps:
214227
3. The Thing submits the MUD URL to the previously discovered URI.
215228
To do so, it performs a CoAP request to the discovered URI with the POST method.
216229
The MUD URL is contained as the message payload in this request using one of the content formats defined in {{general_payloads}}.
217-
Receivers MAY be configured to limit the accepted Content-Formats to ones that provide some level of authenticity for the MUD URL based on policy.
218-
However, receiver implementations MUST also support unauthenticated MUD URL transmissions if no policy forbids it.
230+
Receivers MAY be configured by the network administrator to limit the accepted Content-Formats to ones that provide some level of authenticity for the MUD URL.
231+
However, receiver implementations MUST also support unauthenticated MUD URL transmissions unless said policy forbids it.
232+
<!-- TODO s/MUST/SHOULD/g ? -->
219233
<!-- TODO message response/response code indicating success? -->
220234

221235
<!-- TODO advantages/disadvantages? -->
@@ -233,45 +247,27 @@ CoAP requests and responses that use this format MUST use the Content-Format opt
233247
### MUD URLs inside of CBOR Web Tokens
234248
Previous methods of transmitting MUD URLs do not allow for authentication of supplied MUD URLs.
235249
To accomodate for environments where authentication of MUD URLs is desired, it is also possible to include the MUD URL as a claim inside of a CBOR Web Token {{!RFC8392}}.
236-
This allows for MUD Receivers or MUD Controllers to verify the authenticity of the provided MUD URL.
250+
This allows for MUD Receivers or MUD Controllers to verify the authenticity of the provided MUD URL, given that the key used for signing the CWT is known to belong to the Thing's manufacturer.
237251

238252
CBOR Web Tokens that contain MUD URL information have the following properties:
239253

240-
- The MUD URL is contained as an ASCII-encoded string in the "mud-url" claim.
254+
- The MUD URL is contained as an ASCII-encoded string in the `mud-url` claim.
241255
- The Token MAY contain proof-of-possession claims {{!RFC8747}}.
242-
If it does, the MUD Receiver MUST verify that the device is in possession of the key specified in the cnf claim.
243-
Proof-of-Possession claims that are transmitted over CoAP without DTLS/TLS MUST represent public keys, Receivers MUST treat any symmetric keys sent over insecure channels as invalid/compromised.
256+
If it does, the MUD Receiver MUST verify that the Thing is in possession of the key specified in the `cnf` claim (see {{general_pop}}).
244257
- The Token MAY contain an expiry time.
245258
If an expiry time is specified, the MUD URL should be resubmitted or requested again shortly before the original CWT expires.
246259
Note that using an expiry time could cause problems if the device is unable to perform a refresh, e.g., due to a power outage.
247260

248-
CoAP requests and responses that use this format MUST use the Content-Format option with the value corresponding to the "application/mud-url+cwt" media type.
261+
CoAP requests and responses that use this format MUST use the Content-Format option with the value corresponding to the `application/mud-url+cwt` media type.
249262

250263
## Proof-of-Possession for CBOR Web Tokens with MUD URLs {#general_pop}
251-
If the MUD URL is transmitted as a CBOR Web Token that includes proof-of-possession claims, the proof-of-possession claim SHOULD be verified.
252-
To do so, the following procedures SHOULD be used.
253-
Both of the following procedures use the establishment of a DTLS session using the PoP key in order to prove the possession of the key, similarly to the procedures defined in {{!RFC9202}}.
264+
If the MUD URL is transmitted as a CBOR Web Token that includes proof-of-possession claims, that claim MUST be verified.
265+
In general, most already specified PoP methods aim to reduce overhead by combining proof-of-possession with the authenticity-, integrity-, and replay-protection of the underlying CoAP session.
266+
Some examples of this approach may be found in the specifications for ACE-OAuth profiles found in {{!RFC9202}}, {{!RFC9203}}, and {{!RFC9431}}.
254267

255-
<!-- TODO required ciphers? -->
268+
This specification provides two different methods for performing proof-of-possession in {{behavior_pop}}, which are adapted from the ACE-OAuth DTLS profile {{!RFC9202}} and OSCORE profile {{!RFC9203}}, respectively.
269+
Additionally, we will describe the necessary steps required for defining additional proof-of-possession methods in TODO.
256270

257-
### For the Thing-initiated Flow
258-
259-
1. After submitting the MUD URL, the MUD Receiver parses the token.
260-
If it detects proof-of-possession claims, the receiver MUST reply with a 4.01 (Unauthorized) CoAP response code and reject the token for now.
261-
If the original submission request was not performed using CoAPS, the Receiver MUST also return a set of key information that can be used to establish a CoAP+DTLS session with it, as well as a CoAPS URI indicating the location of the secured submission resource.
262-
<!-- TODO key format? -->
263-
2. The Thing then repeats the submission request using its own key information, the Receiver's key information, and the provided URI.
264-
3. During the DTLS handshake, the Receiver MUST require the Thing to use the proof-of-possession key included in the originally submitted token in order to successfully establish a DTLS session.
265-
4. After the DTLS handshake, the Thing has proven possession of the key included in the CWT to the MUD Receiver, which can then treat the CWT as valid.
266-
<!-- TODO do we still want to re-send the CWT? -->
267-
268-
### For the Receiver-initiated Flow
269-
1. After receiving the MUD URL from a request (e.g., a multicast request), the MUD Receiver parses the token.
270-
If it detects proof-of-possession claims, the receiver MUST continue with the following procedure before treating the CWT as valid.
271-
2. The receiver repeats the MUD URL request, this time using DTLS.
272-
During the DTLS handshake, the Receiver must require the Thing to use the proof-of-possession key included in the originally received token in order to successfully establish the DTLS session.
273-
3. After the DTLS handshake, the Thing has proven possession of the key included in the CWT to the MUD Receiver, which can then treat the CWT as valid.
274-
<!-- TODO Unsure if DTLS even works without mutual auth, but i dont see why it shouldn't -->
275271

276272
## Resource Discovery {#general_discovery}
277273

@@ -307,7 +303,7 @@ By using CoRE Resource Directories {{?RFC9176}}, devices can register a MUD file
307303
A MUD manager itself MAY also act as a Resource Directory, directly applying the policies from registered MUD files to the network.
308304
In addition to the registration endpoint defined in {{?RFC9176}}, MUD managers MAY define a separate registration interface when acting as a CoRE RD.
309305

310-
# Obtaining a MUD URL in Constrained Environments
306+
# Obtaining a MUD URL via dedicated CoAP Resources
311307

312308
With the additional mechanisms for finding MUD URLs introduced in this document, MUD managers can be configured to play a more active role in discovering MUD-enabled devices.
313309
Furthermore, IoT devices could identify their peers based on a MUD URL associated with these devices or perform a configuration process based on the linked MUD file's contents.
@@ -329,6 +325,8 @@ using the Accept option, if provided.
329325
If the Thing supports resource discovery using a `/.well-known/core` resource,
330326
MUD URL resources SHOULD be advertised there using the CoRE Link-Format
331327
{{!RFC6690}}, indicating the available Content-Formats using the `ct` parameter.
328+
<!-- TODO should there also be a method of not only referencing the dedicated MUD URL resource,
329+
but also the actual MUD URL inside the CoRE Link Format resource directly? -->
332330

333331
### Registering MUD URLs with MUD Receivers
334332

@@ -428,6 +426,52 @@ Regarding the actual MUD URL payload transmitted using CoAP, the following consi
428426
- Signature Verification
429427
-->
430428

429+
## Proof-of-Possession Methods {#behavior_pop}
430+
431+
TODO
432+
433+
<!-- TODO mention here that the CWT must be signed by the manufacturer, while the PoP key must be owned and specific to the device -->
434+
435+
### Requirements for Proof-of-Possession
436+
<!-- TODO this may also be an appendix (cf. RFC 9200, Appendix C) -->
437+
438+
TODO
439+
440+
### Proof-of-Possession using DTLS
441+
442+
TODO
443+
444+
<!-- TODO: This is the old, original text, maybe we can reuse parts of this
445+
446+
Proof-of-Possession claims that are transmitted over CoAP without (D)TLS MUST represent public keys, Receivers MUST treat any symmetric keys sent over insecure channels as invalid/compromised.
447+
To do so, the following procedures SHOULD be used.
448+
Both of the following procedures use the establishment of a DTLS session using the PoP key in order to prove the possession of the key, similarly to the procedures defined in {{!RFC9202}}.
449+
450+
### For the Thing-initiated Flow
451+
452+
1. After submitting the MUD URL, the MUD Receiver parses the token.
453+
If it detects proof-of-possession claims, the receiver MUST reply with a 4.01 (Unauthorized) CoAP response code and reject the token for now.
454+
If the original submission request was not performed using CoAPS, the Receiver MUST also return a set of key information that can be used to establish a CoAP+DTLS session with it, as well as a CoAPS URI indicating the location of the secured submission resource.
455+
TODO key format?
456+
2. The Thing then repeats the submission request using its own key information, the Receiver's key information, and the provided URI.
457+
3. During the DTLS handshake, the Receiver MUST require the Thing to use the proof-of-possession key included in the originally submitted token in order to successfully establish a DTLS session.
458+
4. After the DTLS handshake, the Thing has proven possession of the key included in the CWT to the MUD Receiver, which can then treat the CWT as valid.
459+
TODO do we still want to re-send the CWT?
460+
461+
### For the Receiver-initiated Flow
462+
1. After receiving the MUD URL from a request (e.g., a multicast request), the MUD Receiver parses the token.
463+
If it detects proof-of-possession claims, the receiver MUST continue with the following procedure before treating the CWT as valid.
464+
2. The receiver repeats the MUD URL request, this time using DTLS.
465+
During the DTLS handshake, the Receiver must require the Thing to use the proof-of-possession key included in the originally received token in order to successfully establish the DTLS session.
466+
3. After the DTLS handshake, the Thing has proven possession of the key included in the CWT to the MUD Receiver, which can then treat the CWT as valid.
467+
TODO Unsure if DTLS even works without mutual auth, but i dont see why it shouldn't
468+
469+
-->
470+
471+
### Proof-of-Possession using OSCORE
472+
473+
TODO
474+
431475
# Security Considerations
432476
(Very WIP for now)
433477

0 commit comments

Comments
 (0)