draft-ietf-ace-pubsub-profile-03.txt | draft-ietf-ace-pubsub-profile-04.txt | |||
---|---|---|---|---|
ACE Working Group F. Palombini | ACE Working Group F. Palombini | |||
Internet-Draft Ericsson | Internet-Draft Ericsson | |||
Intended status: Standards Track C. Sengul | Intended status: Standards Track C. Sengul | |||
Expires: 1 January 2022 Brunel University | Expires: 2 July 2022 Brunel University | |||
30 June 2021 | 29 December 2021 | |||
Pub-Sub Profile for Authentication and Authorization for Constrained | Pub-Sub Profile for Authentication and Authorization for Constrained | |||
Environments (ACE) | Environments (ACE) | |||
draft-ietf-ace-pubsub-profile-03 | draft-ietf-ace-pubsub-profile-04 | |||
Abstract | Abstract | |||
This specification defines an application profile for authentication | This specification defines an application profile for authentication | |||
and authorization for publishers and subscribers in a constrained | and authorization for Publishers and Subscribers in a constrained | |||
pub-sub scenario, using the ACE framework. This profile relies on | pub-sub scenario, using the ACE framework. This profile relies on | |||
transport layer or application layer security to authorize the pub- | transport layer or application layer security to authorize the pub- | |||
sub clients to the broker. Moreover, it describes application layer | sub clients to the broker. Moreover, it describes the use of | |||
security for publisher-subscriber communication going through the | application layer security to protect the content of the pub-sub | |||
broker. | client message exchange through the broker. The profile covers pub- | |||
sub scenarios using either the Constrained Application Protocol | ||||
(CoAP) [I-D.ietf-core-coap-pubsub] or the Message Queue Telemetry | ||||
Transport (MQTT) [MQTT-OASIS-Standard-v5] protocol. | ||||
Note to Readers | Note to Readers | |||
Source for this draft and an issue tracker can be found at | Source for this draft and an issue tracker can be found at | |||
https://github.com/ace-wg/pubsub-profile (https://github.com/ace-wg/ | https://github.com/ace-wg/pubsub-profile (https://github.com/ace-wg/ | |||
pubsub-profile). | pubsub-profile). | |||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
skipping to change at page 1, line 44 ¶ | skipping to change at page 1, line 47 ¶ | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
This Internet-Draft will expire on 1 January 2022. | This Internet-Draft will expire on 2 July 2022. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2021 IETF Trust and the persons identified as the | Copyright (c) 2021 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents (https://trustee.ietf.org/ | |||
license-info) in effect on the date of publication of this document. | license-info) in effect on the date of publication of this document. | |||
Please review these documents carefully, as they describe your rights | Please review these documents carefully, as they describe your rights | |||
and restrictions with respect to this document. Code Components | and restrictions with respect to this document. Code Components | |||
extracted from this document must include Simplified BSD License text | extracted from this document must include Revised BSD License text as | |||
as described in Section 4.e of the Trust Legal Provisions and are | described in Section 4.e of the Trust Legal Provisions and are | |||
provided without warranty as described in the Simplified BSD License. | provided without warranty as described in the Revised BSD License. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 3 | 1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
2. Application Profile Overview . . . . . . . . . . . . . . . . 3 | 2. Application Profile Overview . . . . . . . . . . . . . . . . 3 | |||
3. PubSub Authorisation . . . . . . . . . . . . . . . . . . . . 5 | 3. PubSub Authorisation . . . . . . . . . . . . . . . . . . . . 5 | |||
3.1. AS Discovery (Optional) . . . . . . . . . . . . . . . . . 6 | 3.1. AS Discovery (Optional) . . . . . . . . . . . . . . . . . 6 | |||
3.2. Authorising to the Broker . . . . . . . . . . . . . . . . 6 | 3.2. Authorising to the KDC and the Broker . . . . . . . . . . 6 | |||
4. Key Distribution for PubSub Content Protection . . . . . . . 7 | 4. Key Distribution for PubSub Content Protection . . . . . . . 8 | |||
4.1. Token POST . . . . . . . . . . . . . . . . . . . . . . . 7 | 4.1. Token POST . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
4.2. Join Request . . . . . . . . . . . . . . . . . . . . . . 8 | 4.2. Join Request and Join Response . . . . . . . . . . . . . 8 | |||
5. PubSub Protected Communication . . . . . . . . . . . . . . . 11 | 5. PubSub Protected Communication . . . . . . . . . . . . . . . 12 | |||
5.1. Using COSE Objects To Protect The Resource | 5.1. Using COSE Objects To Protect The Resource | |||
Representation . . . . . . . . . . . . . . . . . . . . . 12 | Representation . . . . . . . . . . . . . . . . . . . . . 13 | |||
6. Profile-specific Considerations . . . . . . . . . . . . . . . 13 | 6. Profile-specific Considerations . . . . . . . . . . . . . . . 15 | |||
6.1. CoAP PubSub Application Profile . . . . . . . . . . . . . 13 | 6.1. CoAP PubSub Application Profile . . . . . . . . . . . . . 15 | |||
6.2. MQTT PubSub Application Profile . . . . . . . . . . . . . 14 | 6.2. MQTT PubSub Application Profile . . . . . . . . . . . . . 15 | |||
7. Security Considerations . . . . . . . . . . . . . . . . . . . 15 | 7. Security Considerations . . . . . . . . . . . . . . . . . . . 16 | |||
8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 16 | 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 17 | |||
8.1. ACE Groupcomm Profile Registry . . . . . . . . . . . . . 16 | 8.1. ACE Groupcomm Profile Registry . . . . . . . . . . . . . 17 | |||
8.1.1. CoAP Profile Registration . . . . . . . . . . . . . . 16 | 8.1.1. CoAP Profile Registration . . . . . . . . . . . . . . 17 | |||
8.1.2. MQTT Profile Registration . . . . . . . . . . . . . . 17 | 8.1.2. MQTT Profile Registration . . . . . . . . . . . . . . 17 | |||
8.2. ACE Groupcomm Key Registry . . . . . . . . . . . . . . . 17 | 8.2. ACE Groupcomm Key Registry . . . . . . . . . . . . . . . 18 | |||
9. References . . . . . . . . . . . . . . . . . . . . . . . . . 17 | 9. References . . . . . . . . . . . . . . . . . . . . . . . . . 18 | |||
9.1. Normative References . . . . . . . . . . . . . . . . . . 17 | 9.1. Normative References . . . . . . . . . . . . . . . . . . 18 | |||
9.2. Informative References . . . . . . . . . . . . . . . . . 18 | 9.2. Informative References . . . . . . . . . . . . . . . . . 20 | |||
Appendix A. Requirements on Application Profiles . . . . . . . . 19 | Appendix A. Requirements on Application Profiles . . . . . . . . 21 | |||
Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . 21 | Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . 23 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 21 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 23 | |||
1. Introduction | 1. Introduction | |||
In the publish-subscribe (pub-sub) scenario, devices with limited | In the publish-subscribe (pub-sub) scenario, devices with limited | |||
reachability communicate via a broker, which enables store-and- | reachability communicate via a broker, which enables store-and- | |||
forward messaging between the devices. This document defines a way | forward messaging between the devices. This document defines a way | |||
to authorize pub-sub clients using the ACE framework | to authorize pub-sub clients using the ACE framework | |||
[I-D.ietf-ace-oauth-authz], and to provide the keys for protecting | [I-D.ietf-ace-oauth-authz] to obtain the keys for protecting the | |||
the communication between them. The pub-sub communication using the | content of their pub-sub messages when communicating through the | |||
Constrained Application Protocol (CoAP) is specified in | broker. The pub-sub communication using the Constrained Application | |||
Protocol (CoAP) [RFC7252] is specified in | ||||
[I-D.ietf-core-coap-pubsub], while the one using MQTT is specified in | [I-D.ietf-core-coap-pubsub], while the one using MQTT is specified in | |||
[MQTT-OASIS-Standard-v5]. This document gives detailed | [MQTT-OASIS-Standard-v5]. This document gives detailed | |||
specifications for MQTT and CoAP pub-sub, but can easily be adapted | specifications for MQTT and CoAP pub-sub, but can easily be adapted | |||
for other transport protocols as well. | for other transport protocols as well. | |||
1.1. Terminology | 1.1. Terminology | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
document are to be interpreted as described in RFC 2119 [RFC2119]. | document are to be interpreted as described in RFC 2119 [RFC2119]. | |||
skipping to change at page 3, line 40 ¶ | skipping to change at page 3, line 50 ¶ | |||
2. Application Profile Overview | 2. Application Profile Overview | |||
The objective of this document is to specify how to authorize nodes, | The objective of this document is to specify how to authorize nodes, | |||
provide keys, and protect a pub-sub communication, using | provide keys, and protect a pub-sub communication, using | |||
[I-D.ietf-ace-key-groupcomm], which expands from the ACE framework | [I-D.ietf-ace-key-groupcomm], which expands from the ACE framework | |||
([I-D.ietf-ace-oauth-authz]), and transport profiles | ([I-D.ietf-ace-oauth-authz]), and transport profiles | |||
([I-D.ietf-ace-dtls-authorize], [I-D.ietf-ace-oscore-profile], | ([I-D.ietf-ace-dtls-authorize], [I-D.ietf-ace-oscore-profile], | |||
[I-D.ietf-ace-mqtt-tls-profile]). The pub-sub communication protocol | [I-D.ietf-ace-mqtt-tls-profile]). The pub-sub communication protocol | |||
can be based on CoAP, as described in [I-D.ietf-core-coap-pubsub], | can be based on CoAP, as described in [I-D.ietf-core-coap-pubsub], | |||
MQTT [MQTT-OASIS-Standard-v5] , or other transport. Note that both | MQTT [MQTT-OASIS-Standard-v5] , or other transport. Note that both | |||
publishers and subscribers use the same profiles. | Publishers and Subscribers use the same pub-sub communication | |||
protocol and the same transport profile of ACE in their interaction | ||||
with the broker. However, all clients need to use CoAP when | ||||
communicating to the KDC. | ||||
The architecture of the scenario is shown in Figure 1. | The architecture of the scenario is shown in Figure 1. | |||
+----------------+ +----------------+ | +----------------+ +----------------+ | |||
| | | Key | | | | | Key | | |||
| Authorization | | Distribution | | | Authorization | | Distribution | | |||
| Server | | Center | | | Server | | Center | | |||
| (AS) | | (KDC) | | | (AS) | | (KDC) | | |||
+----------------+ +----------------+ | +----------------+ +----------------+ | |||
^ ^ | ^ ^ | |||
skipping to change at page 4, line 23 ¶ | skipping to change at page 4, line 26 ¶ | |||
+---------(A)----+ | | +---------(A)----+ | | |||
| +--------------------(B)--------+ | | +--------------------(B)--------+ | |||
v v | v v | |||
+------------+ +------------+ | +------------+ +------------+ | |||
| | | | | | | | | | |||
| Pub-Sub | <-- (C)---> | Broker | | | Pub-Sub | <-- (C)---> | Broker | | |||
| Client | | | | | Client | | | | |||
| | | | | | | | | | |||
+------------+ +------------+ | +------------+ +------------+ | |||
Figure 1: Architecture for Pub-Sub with Authorization Servers | Figure 1: Architecture for Pub-Sub with Authorization Server and Key | |||
Distribution Center | ||||
Publisher or Subscriber Clients is referred to as Client in short. A | ||||
Client can act both as a publisher and a subscriber, publishing to | ||||
some topics, and subscribing to others. However, for the simplicity | ||||
of presentation, this profile describes Publisher and Subscriber | ||||
clients separately. The Broker acts as the ACE RS, and also | ||||
corresponds to the Dispatcher in [I-D.ietf-ace-key-groupcomm]). | ||||
Publisher or Subscriber Clients is referred to as Client in short. | ||||
This profile specifies: | This profile specifies: | |||
1. The establishment of a secure connection between a Client and | 1. The establishment of a secure connection between a Client and | |||
Broker, using an ACE transport profile such as DTLS | Broker, using an ACE transport profile such as DTLS | |||
[I-D.ietf-ace-dtls-authorize], OSCORE | [I-D.ietf-ace-dtls-authorize], OSCORE | |||
[I-D.ietf-ace-oscore-profile], or MQTT-TLS | [I-D.ietf-ace-oscore-profile], or MQTT-TLS | |||
[I-D.ietf-ace-mqtt-tls-profile] (A and C). | [I-D.ietf-ace-mqtt-tls-profile] (A and C). | |||
2. The Clients retrieval of keying material for the Publisher Client | 2. The Clients retrieval of keying material for the Publisher Client | |||
to publish protected publications to the Broker, and for the | to publish protected publications to the Broker, and for the | |||
Subscriber Client to read protected publications (B). | Subscriber Client to read protected publications (B). | |||
These exchanges aim at setting up two different security | These exchanges aim at setting up two different security | |||
associations. On the one hand, the Publisher and the Subscriber | associations. On the one hand, the Publisher and the Subscriber | |||
clients have a security association with the Broker (i.e. RS), so | clients have a security association with the Broker, so that, as the | |||
that RS can authorize the Clients (Security Association 1). On the | ACE RS, it can verify that the Clients are authorized (Security | |||
other hand, the Publisher has a security association with the | Association 1). On the other hand, the Publisher has a security | |||
Subscriber, to protect the publication content (Security Association | association with the Subscriber, to protect the publication content | |||
2) while sending it through the broker (i.e. here, the broker | (Security Association 2) while sending it through the broker. The | |||
corresponds to the Dispatcher in [I-D.ietf-ace-key-groupcomm]). The | ||||
Security Association 1 is set up using AS and a transport profile of | Security Association 1 is set up using AS and a transport profile of | |||
[I-D.ietf-ace-oauth-authz], the Security Association 2 is set up | [I-D.ietf-ace-oauth-authz], the Security Association 2 is set up | |||
using AS, KDC and [I-D.ietf-ace-key-groupcomm]. Note that, given | using AS, KDC and [I-D.ietf-ace-key-groupcomm]. Note that, given | |||
that the publication content is protected, the Broker MAY accept | that the publication content is protected, the Broker MAY accept | |||
unauthorised Subscribers. In this case, the Subscriber client can | unauthorised Subscribers. In this case, the Subscriber client can | |||
skip setting up Security Association 1 with the Broker. | skip setting up Security Association 1 with the Broker and connect to | |||
it as an anonymous client to subscribe to topics of interest at the | ||||
Broker. | ||||
+------------+ +------------+ +------------+ | +------------+ +------------+ +------------+ | |||
| | | | | | | | | | | | | | |||
| Publisher | | Broker | | Subscriber | | | Publisher | | Broker | | Subscriber | | |||
| | | | | | | | | | | | | | |||
| | | | | | | | | | | | | | |||
+------------+ +------------+ +------------+ | +------------+ +------------+ +------------+ | |||
: : : : : : | : : : : : : | |||
: '------ Security -------' '-----------------------' : | : '------ Security -------' '-----------------------' : | |||
: Association 1 : | : Association 1 : | |||
skipping to change at page 6, line 13 ¶ | skipping to change at page 6, line 30 ¶ | |||
Figure 3: Authorisation Flow | Figure 3: Authorisation Flow | |||
3.1. AS Discovery (Optional) | 3.1. AS Discovery (Optional) | |||
Complementary to what is defined in [I-D.ietf-ace-oauth-authz] | Complementary to what is defined in [I-D.ietf-ace-oauth-authz] | |||
(Section 5.1) for AS discovery, the Broker MAY send the address of | (Section 5.1) for AS discovery, the Broker MAY send the address of | |||
the AS to the Client in the 'AS' parameter in the AS Information as a | the AS to the Client in the 'AS' parameter in the AS Information as a | |||
response to an Unauthorized Resource Request (Section 5.2). An | response to an Unauthorized Resource Request (Section 5.2). An | |||
example using CBOR diagnostic notation and CoAP is given below: | example using CBOR diagnostic notation and CoAP is given below: | |||
4.01 Unauthorized | 4.01 Unauthorized | |||
Content-Format: application/ace+cbor | Content-Format: application/ace-groupcomm+cbor | |||
{"AS": "coaps://as.example.com/token"} | {"AS": "coaps://as.example.com/token"} | |||
Figure 4: AS Information example | Figure 4: AS Information example | |||
Authorisation Server (AS) Discovery is also defined in | Authorisation Server (AS) Discovery is also defined in | |||
Section 2.2.6.1 of [I-D.ietf-ace-mqtt-tls-profile] for MQTT v5 | Section 2.2.6.1 of [I-D.ietf-ace-mqtt-tls-profile] for MQTT v5 | |||
clients (and not supported for MQTT v3 clients). | clients (and not supported for MQTT v3 clients). | |||
3.2. Authorising to the Broker | 3.2. Authorising to the KDC and the Broker | |||
After retrieving the AS address, the Client sends an Authorisation | ||||
Request to the AS for the KDC and the Broker. Note that the AS | ||||
authorises: | ||||
1. What endpoints are allowed to Publish or Subscribe to the Broker. | After retrieving the AS address, the Client sends two Authorisation | |||
Requests to the AS for the KDC and the Broker, respectively. | ||||
2. What endpoints are allowed to access to which topic(s). | Note that the AS authorises what topics a Client is allowed to | |||
Publish or Subscribe to the Broker, which means authorising which | ||||
application and security groups a Client can join. This is because | ||||
being able to publish or subscribe to a topic at the Broker is | ||||
considered as being part of an application group. As this profile | ||||
secures the message contents, an application group may be a part of a | ||||
security group, or can be associated to multiple security groups. | ||||
Therefore, a Client MUST send Authorization Requests for both. | ||||
The request includes the following fields from the Authorization | Both requests include the following fields from the Authorization | |||
Request (Section 3.1 of [I-D.ietf-ace-key-groupcomm]): | Request (Section 3.1 of [I-D.ietf-ace-key-groupcomm]): | |||
* 'scope', containing the topic identifier, that the Client wishes | * 'scope', containing the group identifiers, that the Client wishes | |||
to access | to access | |||
* 'audience', an array with identifiers of the KDC and the Broker. | * 'audience', an identifier, corresponding to either the KDC or the | |||
Broker. Other additional parameters can be included if necessary, | ||||
as defined in [I-D.ietf-ace-oauth-authz]. | ||||
Other additional parameters can be included if necessary, as defined | It must be noted that for pub-sub brokers, the scope represents pub- | |||
in [I-D.ietf-ace-oauth-authz]. | sub topics i.e., the application group. On the other hand, for the | |||
KDC, the scope represents the security group. If there is a one-to- | ||||
one mapping between the application group and the security group, the | ||||
client uses the same scope for both requests. If there is not a one- | ||||
to-one mapping, the correct policies regarding both sets of scopes | ||||
MUST be available to the AS. To be able to join the right security | ||||
group associated with requested application groups (i.e., pub-sub | ||||
topics), the client The client MUST ask for the correct scopes in its | ||||
Authorization Requests. How the client discovers the (application | ||||
group, security group) association is out of scope of this document. | ||||
ToDo: Check OSCORE Groups with the CoRE Resource Directory to see if | ||||
it applies. | ||||
The 'scope' parameter is encoded as follows, where 'gname' is treated | The 'scope' parameter is encoded as follows, where 'gname' is treated | |||
as topic identifier or filter. | as topic identifier or filter. | |||
gname = tstr | gname = tstr | |||
role = tstr | role = tstr | |||
scope_entry = [ gname , ? ( role / [ 2*role ] ) ] | scope_entry = [ gname , ? ( role / [ 2*role ] ) ] | |||
scope = << [ + scope_entry ] >> | scope = << [ + scope_entry ] >> | |||
Figure 5: CDLL definition of scope, using as example group name | Figure 5: CDLL definition of scope, using as example group name | |||
encoded as tstr and role as tstr. | encoded as tstr and role as tstr. | |||
Other scope representations are also possible and are described in | Other scope representations are also possible and are described in | |||
(Section 3.1 of [I-D.ietf-ace-key-groupcomm]). Note that in the AIF- | (Section 3.1 of [I-D.ietf-ace-key-groupcomm]). Note that in the AIF- | |||
MQTT data model is described in Section 3 of the | MQTT data model described in Section 3 of the | |||
[I-D.ietf-ace-mqtt-tls-profile], the role values have been further | [I-D.ietf-ace-mqtt-tls-profile], the role values have been further | |||
constrained to "pub" and "sub". | constrained to "pub" and "sub". | |||
The AS responds with an Authorization Response as defined in | The AS responds with an Authorization Response to each request as | |||
Section 5.8.2 of [I-D.ietf-ace-oauth-authz] and Section 3.2 of | defined in Section 5.8.2 of [I-D.ietf-ace-oauth-authz] and | |||
[I-D.ietf-ace-key-groupcomm]. If a token is returned, then the | Section 3.2 of [I-D.ietf-ace-key-groupcomm]. The client needs to | |||
audience of this token are the KDC and the Broker, and the client | keep track of which response corresponds to which entity to use the | |||
uses the same token for both. In case CoAP PubSub is used as | right token for the right audience, i.e., the KDC or the Broker. In | |||
communication protocol, 'profile' is set to "coap_pubsub_app" as | case CoAP PubSub is used as communication protocol, 'profile' claim | |||
defined in Section 8.1.1. In case MQTT PubSub is used as | is set to "coap_pubsub_app" as defined in Section 8.1.1. In case | |||
communication protocol, 'profile' is set to "mqtt_pubsub_app" as | MQTT PubSub is used as communication protocol, 'profile' claim is set | |||
defined in Section 8.1.2. | to "mqtt_pubsub_app" as defined in Section 8.1.2. | |||
4. Key Distribution for PubSub Content Protection | 4. Key Distribution for PubSub Content Protection | |||
4.1. Token POST | 4.1. Token POST | |||
After receiving a token from the AS, the Client posts the token to | After receiving a token from the AS, the Client posts the token to | |||
the KDC (Section 3.3 [I-D.ietf-ace-key-groupcomm]). In addition to | the KDC (Section 3.3 [I-D.ietf-ace-key-groupcomm]). In addition to | |||
the token post, a Subscriber Client MAY ask for the public keys in | the token post, a Subscriber Client MAY ask for the format of the | |||
the group, used for source authentication, as well as any other group | public keys in the group, used for source authentication, as well as | |||
parameters. In this case, the message MUST have Content-Format set | any other group parameters. In this case, the message MUST have | |||
to "application/ace+cbor" defined in Section 8.16 of | Content-Format set to "application/ace+cbor" defined in Section 8.16 | |||
[I-D.ietf-ace-oauth-authz]. The message payload MUST be formatted as | of [I-D.ietf-ace-oauth-authz]. The message payload MUST be formatted | |||
a CBOR map, which MUST include the access token and the 'sign_info' | as a CBOR map, which MUST include the access token and the | |||
parameter. The details for the 'sign_info' parameter can be found in | 'sign_info' parameter. The details for the 'sign_info' parameter can | |||
Section 3.3 of [I-D.ietf-ace-key-groupcomm]. Alternatively, the | be found in Section 3.3 of [I-D.ietf-ace-key-groupcomm]. | |||
joining node may retrieve this information by other means as | Alternatively, the joining node may retrieve this information by | |||
described in [I-D.ietf-ace-key-groupcomm]. | other means as described in [I-D.ietf-ace-key-groupcomm]. | |||
The KDC verifies that the Client is authorized to access the topic | The KDC verifies the token to check of the Client is authorized to | |||
with the requested role. After successful verification, the Client | access the topic with the requested role. After successful | |||
is authorized to receive the group keying material from the KDC and | verification, the Client is authorized to receive the group keying | |||
join the group. The KDC replies to the Client with a 2.01 (Created) | material from the KDC and join the group. The KDC replies to the | |||
response, using Content-Format "application/ace+cbor". The payload | Client with a 2.01 (Created) response, using Content-Format | |||
of the 2.01 response is a CBOR map. | "application/ace+cbor". The payload of the 2.01 response is a CBOR | |||
map. | ||||
A Publisher Client MUST send its own public key to the KDC when | A Publisher Client MUST send its own public key to the KDC when | |||
joining the group. Since the access token from a Publisher Client | joining the group. Since the access token from a Publisher Client | |||
will have "pub" role, the KDC MUST include 'kdcchallenge' in the CBOR | will have "pub" role, the KDC MUST include 'kdcchallenge' in the CBOR | |||
map, specifying a dedicated challenge N_S generated by the KDC. The | map, specifying a dedicated challenge N_S generated by the KDC. The | |||
Client uses this challenge to prove possession of its own private key | Client uses this challenge to prove possession of its own private key | |||
(see [I-D.ietf-ace-key-groupcomm] for details). | (see [I-D.ietf-ace-key-groupcomm] for details). | |||
4.2. Join Request | 4.2. Join Request and Join Response | |||
In the next step, a joining node MUST have a secure communication | In the next step, a joining node MUST have a secure communication | |||
association established with the KDC, before starting to join a group | association established with the KDC, before starting to join a group | |||
under that KDC. Possible ways to provide a secure communication | under that KDC. Possible ways to provide a secure communication | |||
association are described in the DTLS transport profile | association are described in the DTLS transport profile | |||
[I-D.ietf-ace-dtls-authorize] and OSCORE transport profile | [I-D.ietf-ace-dtls-authorize] and OSCORE transport profile | |||
[I-D.ietf-ace-oscore-profile] of ACE. | [I-D.ietf-ace-oscore-profile] of ACE. | |||
After establishing a secure communication, the Client sends a Joining | After establishing a secure communication, the Client sends a Joining | |||
Request to the KDC as described in Section 4.3 of | Request to the KDC as described in Section 4.3 of | |||
[I-D.ietf-ace-key-groupcomm]. More specifically, the Client sends a | [I-D.ietf-ace-key-groupcomm]. More specifically, the Client sends a | |||
POST request to the /ace-group/GROUPNAME endpoint on KDC, with | POST request to the /ace-group/GROUPNAME endpoint on KDC, with | |||
Content-Format = "application/ace+cbor" that MUST contain in the | Content-Format "application/ace-groupcomm+cbor" that MUST contain in | |||
payload (formatted as a CBOR map, Section 4.1.2.1 of | the payload (formatted as a CBOR map, Section 4.1.2.1 of | |||
[I-D.ietf-ace-key-groupcomm]): | [I-D.ietf-ace-key-groupcomm]): | |||
* 'scope' parameter as defined earlier | * 'scope' parameter set to the specific group that the Client is | |||
attempting to join, i.e., the group name, and the roles it wishes | ||||
to have in the group. This value corresponds to one scope entry, | ||||
as defined in Section 3.2. | ||||
* 'get_pub_keys' parameter set to the empty array if the Client | * 'get_pub_keys' parameter set to the empty array if the Client | |||
needs to retrieve the public keys of the other pubsub members, | needs to retrieve the public keys of the other pubsub members, | |||
* 'client_cred' parameter containing the Client's public key | * 'client_cred' parameter containing the Client's public key | |||
formatted as a COSE_Key (as defined in Section 8.2), if the Client | formatted according to the encoding of the public keys used in the | |||
is a Publisher, | group, if the Client is a Publisher, | |||
* 'cnonce', encoded as a CBOR byte string, and including a dedicated | * 'cnonce', encoded as a CBOR byte string, and including a dedicated | |||
nonce N_C generated by the Client, if 'client_cred' is present, | nonce N_C generated by the Client, if 'client_cred' is present, | |||
* 'client_cred_verify', set to a singature computed over the | * 'client_cred_verify', set to a signature computed over the | |||
'rsnonce' concatenated with cnonce, if 'client_cred' is present, | 'rsnonce' concatenated with cnonce, if 'client_cred' is present, | |||
* OPTIONALLY, if needed, the 'pub_keys_repos' parameter | * OPTIONALLY, if needed, the 'pub_keys_repos' parameter | |||
TODO: Check 'cnonce' | TODO: Check 'cnonce' | |||
Note that for a Subscriber-only Client, the Joining Request MUST NOT | Note that for a Subscriber-only Client, the Joining Request MUST NOT | |||
contain the 'client_cred parameter', the role element in the 'scope' | contain the 'client_cred parameter', the role element in the 'scope' | |||
parameter MUST be set to "sub". The Subscriber MUST have access to | parameter MUST be set to "sub". The Subscriber MUST have access to | |||
the public keys of all the Publishers; this MAY be achieved in the | the public keys of all the Publishers; this MAY be achieved in the | |||
Joining Request by using the parameter 'get_pub_keys' set to receive | Joining Request by using the parameter 'get_pub_keys' encoding the | |||
the public key of all Publishers using "pub" as the 'role_filter' (as | CBOR simple value 'null' (0xf6) (as described in Section 4.3.1 of | |||
described in Section 4.1.2.1 of [I-D.ietf-ace-key-groupcomm]). | [I-D.ietf-ace-key-groupcomm]) to retrieve the public keys of all the | |||
Publishers. | ||||
If the 'client_cred' parameter is present, KDC stores the public key | If the 'client_cred' parameter is present, KDC stores the public key | |||
of the Client. Note that the alg parameter in the 'client_cred' | of the Client. Note that the alg parameter in the 'client_cred' | |||
COSE_Key MUST be a signing algorithm, as defined in section 8 of | COSE_Key MUST be a signing algorithm, as defined in | |||
[RFC8152], and that it is the same algorithm used to compute the | [I-D.ietf-cose-rfc8152bis-algs] [I-D.ietf-cose-rfc8152bis-struct], | |||
signature sent in 'client_cred_verify'. | and that it is the same algorithm used to compute the signature sent | |||
in 'client_cred_verify'. | ||||
The KDC response to Joining Response has the Content-Format = | The KDC responds with a Joining Response, which has the Content- | |||
"application/ace+cbor". The payload (formatted as a CBOR map) MUST | Format "application/ace-groupcomm+cbor". The payload (formatted as a | |||
contain the following fields from the Joining Response (Section 4.2 | CBOR map) MUST contain the following fields from the Joining Response | |||
of [I-D.ietf-ace-key-groupcomm]): | (Section 4.3.1 of [I-D.ietf-ace-key-groupcomm]): | |||
* 'kty' identifies a key type "COSE_Key". | * 'gkty' identifies a key type for the 'key' parameter. | |||
* 'key', which contains a "COSE_Key" object (defined in [RFC8152], | * 'key', which contains a "COSE_Key" object (defined in | |||
[I-D.ietf-cose-rfc8152bis-algs][I-D.ietf-cose-rfc8152bis-struct], | ||||
containing: | containing: | |||
- 'kty' with value 4 (symmetric) | - 'kty' with value 4 (symmetric) | |||
- 'alg' with value defined by the AS2 (Content Encryption | - 'alg' with value defined by the AS (Content Encryption | |||
Algorithm) | Algorithm) | |||
- 'Base IV' with value defined by the AS2 | - 'Base IV' with value defined by the AS | |||
- 'k' with value the symmetric key value | - 'k' with value the symmetric key value | |||
- OPTIONALLY, 'kid' with an identifier for the key value | - OPTIONALLY, 'kid' with an identifier for the key value | |||
* OPTIONALLY, 'exp' with the expiration time of the key | * OPTIONALLY, 'exp' with the expiration time of the key | |||
* 'pub_keys', containing the public keys of all authorized signing | * 'pub_keys', containing the public keys of all Publisher Clients, | |||
members formatted as COSE_Keys, if the 'get_pub_keys' parameter | formatted according to the public key encoding for the group, if | |||
was present and set to the empty array in the Key Distribution | the 'get_pub_keys' parameter was present and set to the empty | |||
Request. For Subscriber Clients, the Joining Response MUST | array in the Key Distribution Request. For Subscriber Clients, | |||
contain the 'pub_keys' parameter. | the Joining Response MUST contain the 'pub_keys' parameter. The | |||
encoding accepted for this document is UCCS (Unprotectec CWT | ||||
Claims Set) [I-D.draft-ietf-rats-uccs-01]. ToDo: Consider | ||||
allowing other public key formats with the following text. If | ||||
CBOR Web Tokens (CWTs) or CWT Claims Sets (CCSs) [RFC8392] are | ||||
used as public key format, the public key algorithm is fully | ||||
described by a COSE key type and its "kty" and "crv" parameters. | ||||
If X.509 certificates [RFC7925] or C509 certificates | ||||
[I-D.ietf-cose-cbor-encoded-cert] are used as public key format, | ||||
the public key algorithm is fully described by the "algorithm" | ||||
field of the "SubjectPublicKeyInfo" structure, and by the | ||||
"subjectPublicKeyAlgorithm" element, respectively. | ||||
An example of the Joining Request and corresponding Response for a | An example of the Joining Request and corresponding Response for a | |||
CoAP Publisher using CoAP and CBOR is specified in Figure 6 and | CoAP Publisher using CoAP and CBOR is specified in Figure 6 and | |||
Figure 7, where SIG is a signature computed using the private key | Figure 7, where SIG is a signature computed using the private key | |||
associated to the public key and the algorithm in 'client_cred'. | associated to the public key and the algorithm in 'client_cred'. | |||
{ | { | |||
"scope" : ["Broker1/Temp", "pub"], | "scope" : ["Broker1/Temp", "pub"], | |||
"client_cred" : | "client_cred" : | |||
{ / COSE_Key / | { / COSE_Key / | |||
skipping to change at page 10, line 30 ¶ | skipping to change at page 11, line 25 ¶ | |||
/ y /-3 : h'1e52ed75701163f7f9e40ddf9f341b3dc9ba860af7e0ca7ca7e | / y /-3 : h'1e52ed75701163f7f9e40ddf9f341b3dc9ba860af7e0ca7ca7e | |||
9eecd0084d19c', | 9eecd0084d19c', | |||
"cnonce" : h'd36b581d1eef9c7c, | "cnonce" : h'd36b581d1eef9c7c, | |||
"client_cred_verify" : SIG | "client_cred_verify" : SIG | |||
} | } | |||
} | } | |||
Figure 6: Joining Request payload for a Publisher | Figure 6: Joining Request payload for a Publisher | |||
{ | { | |||
"kty" : "COSE_Key", | "gkty" : "COSE_Key", | |||
"key" : {1: 4, 2: h'1234', 3: 12, 5: h'1f389d14d17dc7', | "key" : {1: 4, 2: h'1234', 3: 12, 5: h'1f389d14d17dc7', | |||
-1: h'02e2cc3a9b92855220f255fff1c615bc'} | -1: h'02e2cc3a9b92855220f255fff1c615bc'} | |||
} | } | |||
Figure 7: Joining Response payload for a Publisher | Figure 7: Joining Response payload for a Publisher | |||
An example of the payload of a Joining Request and corresponding | An example of the payload of a Joining Request and corresponding | |||
Response for a Subscriber using CoAP and CBOR is specified in | Response for a Subscriber using CoAP and CBOR is specified in | |||
Figure 8 and Figure 9. | Figure 8 and Figure 9. | |||
{ | { | |||
"scope" : ["Broker1/Temp", "sub"], | "scope" : ["Broker1/Temp", "sub"], | |||
"get_pub_keys" : [true, ["pub"], []] | "get_pub_keys" : null | |||
} | } | |||
Figure 8: Joining Request payload for a Subscriber | Figure 8: Joining Request payload for a Subscriber | |||
{ | { | |||
"scope" : ["Broker1/Temp", "sub"], | "scope" : ["Broker1/Temp", "sub"], | |||
"kty" : "COSE_Key" | "gkty" : "COSE_Key" | |||
"key" : {1: 4, 2: h'1234', 3: 12, 5: h'1f389d14d17dc7', | "key" : {1: 4, 2: h'1234', 3: 12, 5: h'1f389d14d17dc7', | |||
-1: h'02e2cc3a9b92855220f255fff1c615bc'}, | -1: h'02e2cc3a9b92855220f255fff1c615bc'}, | |||
"pub_keys" : [ | "pub_keys" : [ | |||
{ | {/UCCS/ | |||
1 : 2, / type EC2 / | 2: "42-50-31-FF-EF-37-32-39", /sub/ | |||
2 : h'11', / kid / | 8: {/cnf/ | |||
3 : -7, / alg ECDSA with SHA-256 / | 1: {/COSE_Key/ | |||
-1 : 1 , / crv P-256 / | 1 : 1, /alg/ | |||
-2 : h'65eda5a12577c2bae829437fe338701a10aaa375e1bb5b5de108de43 | 3 : -8 /kty/ | |||
9c08551d', / x / | -1 : 6 , /crv/ | |||
-3 : h'1e52ed75701163f7f9e40ddf9f341b3dc9ba860af7e0ca7ca7e9eecd | -2 : h'C6EC665E817BD064340E7C24BB93A11E /x/ | |||
0084d19c' / y / | 8EC0735CE48790F9C458F7FA340B8CA3', / x / | |||
} | } | |||
] | } | |||
} | } | |||
] | ||||
} | ||||
Figure 9: Joining Response payload for a Subscriber | Figure 9: Joining Response payload for a Subscriber | |||
ToDO: Fix Example for COSE_Key for public key | ||||
5. PubSub Protected Communication | 5. PubSub Protected Communication | |||
+------------+ +------------+ +------------+ | +------------+ +------------+ +------------+ | |||
| | | | | | | | | | | | | | |||
| Publisher | ----(D)---> | Broker | | Subscriber | | | Publisher | ----(D)---> | Broker | | Subscriber | | |||
| | | | <----(E)---- | | | | | | | <----(E)---- | | | |||
| | | | -----(F)---> | | | | | | | -----(F)---> | | | |||
+------------+ +------------+ +------------+ | +------------+ +------------+ +------------+ | |||
Figure 10: Secure communication between Publisher and Subscriber | Figure 10: Secure communication between Publisher and Subscriber | |||
(D) corresponds to the publication of a topic on the Broker. The | (D) corresponds to the publication of a topic on the Broker. The | |||
publication (the resource representation) is protected with COSE | publication (the resource representation) is protected with COSE | |||
([RFC8152]). The (E) message is the subscription of the Subscriber. | ([I-D.ietf-cose-rfc8152bis-algs] [I-D.ietf-cose-rfc8152bis-struct]) | |||
The subscription MAY be unprotected. The (F) message is the response | by the Publisher. The (E) message is the subscription of the | |||
from the Broker, where the publication is protected with COSE. | Subscriber. The subscription MAY be unprotected. The (F) message is | |||
the response from the Broker, where the publication is protected with | ||||
COSE by the Publisher. | ||||
Publisher Broker Subscriber | Publisher Broker Subscriber | |||
| --- PUT /topic ----> | | | | --- PUT /topic ----> | | | |||
| protected with COSE | | | | protected with COSE | | | |||
| | <--- GET /topic ----- | | | | <--- GET /topic ----- | | |||
| | | | | | | | |||
| | ---- response ------> | | | | ---- response ------> | | |||
| | protected with COSE | | | | protected with COSE | | |||
Figure 11: (E), (F), (G): Example of protected communication for CoAP | Figure 11: (E), (F), (G): Example of protected communication for CoAP | |||
skipping to change at page 12, line 15 ¶ | skipping to change at page 13, line 26 ¶ | |||
similar for MQTT, where PUT corresponds to a PUBLISH message, and GET | similar for MQTT, where PUT corresponds to a PUBLISH message, and GET | |||
corresponds to a SUBSCRIBE message. Whenever a Client publishes a | corresponds to a SUBSCRIBE message. Whenever a Client publishes a | |||
new message, the Broker sends this message to all valid subscribers. | new message, the Broker sends this message to all valid subscribers. | |||
5.1. Using COSE Objects To Protect The Resource Representation | 5.1. Using COSE Objects To Protect The Resource Representation | |||
The Publisher uses the symmetric COSE Key received from the KDC | The Publisher uses the symmetric COSE Key received from the KDC | |||
(Section 4) to protect the payload of the PUBLISH operation | (Section 4) to protect the payload of the PUBLISH operation | |||
(Section 4.3 of [I-D.ietf-core-coap-pubsub] and | (Section 4.3 of [I-D.ietf-core-coap-pubsub] and | |||
[MQTT-OASIS-Standard-v5]). Specifically, the COSE Key is used to | [MQTT-OASIS-Standard-v5]). Specifically, the COSE Key is used to | |||
create a COSE_Encrypt0 with algorithm specified by KDC. The | create a COSE_Encrypt0 object with algorithm specified by KDC. The | |||
Publisher uses the private key corresponding to the public key sent | Publisher uses the private key corresponding to the public key sent | |||
to the KDC in exchange B (Section 4) to countersign the COSE Object | to the KDC in exchange B (Section 4) to countersign the COSE Object | |||
as specified in Section 4.5 of [RFC8152]. The payload is replaced by | as specified in [I-D.ietf-cose-rfc8152bis-algs] | |||
the COSE object before the publication is sent to the Broker. | [I-D.ietf-cose-rfc8152bis-struct]. The payload is replaced by the | |||
COSE object before the publication is sent to the Broker. | ||||
The Subscriber uses the 'kid' in the 'countersignature' field in the | The Subscriber uses the 'kid' in the 'countersignature' field in the | |||
COSE object to retrieve the right public key to verify the | COSE object to retrieve the right public key to verify the | |||
countersignature. It then uses the symmetric key received from KDC | countersignature. It then uses the symmetric key received from KDC | |||
to verify and decrypt the publication received in the payload from | to verify and decrypt the publication received in the payload from | |||
the Broker (in the case of CoAP the publication is received by the | the Broker (in the case of CoAP the publication is received by the | |||
CoAP Notification and for MQTT, it is received as a PUBLISH message | CoAP Notification and for MQTT, it is received as a PUBLISH message | |||
from the Broker to the subscribing client). | from the Broker to the subscribing client). | |||
The COSE object is constructed in the following way: | The COSE object is constructed in the following way: | |||
* The protected Headers (as described in Section 3 of [RFC8152]) MAY | * The protected Headers (as described in | |||
contain the kid parameter, with value the kid of the symmetric | [I-D.ietf-cose-rfc8152bis-algs] [I-D.ietf-cose-rfc8152bis-struct]) | |||
COSE Key received in Section 4 and MUST contain the content | MUST contain the kid parameter if it was provided in the Joining | |||
encryption algorithm. | Response, with value the kid of the symmetric COSE Key received in | |||
Section 4 and MUST contain the content encryption algorithm. | ||||
* The unprotected Headers MUST contain the Partial IV, with value a | * The unprotected Headers MUST contain the Partial IV, with value a | |||
sequence number that is incremented for every message sent, and | sequence number that is incremented for every message sent, and | |||
the counter signature that includes: | the counter signature that includes: | |||
- the algorithm (same value as in the asymmetric COSE Key | - the algorithm (same value as in the asymmetric COSE Key | |||
received in (B)) in the protected header; | received in (B)) in the protected header; | |||
- the kid (same value as the kid of the asymmetric COSE Key | - the kid (same value as the kid of the asymmetric COSE Key | |||
received in (B)) in the unprotected header; | received in (B)) in the unprotected header; | |||
- the signature computed as specified in Section 4.5 of | - the signature computed as specified in | |||
[RFC8152]. | [I-D.ietf-cose-rfc8152bis-algs] | |||
[I-D.ietf-cose-rfc8152bis-struct]. | ||||
* The ciphertext, computed over the plaintext that MUST contain the | * The ciphertext, computed over the plaintext that MUST contain the | |||
message payload. | message payload. | |||
The 'external_aad' is an empty string. | The 'external_aad' is an empty string. | |||
An example is given in Figure 12: | An example is given in Figure 12: | |||
16( | 16( | |||
[ | [ | |||
skipping to change at page 13, line 34 ¶ | skipping to change at page 14, line 47 ¶ | |||
/ signature / SIG / 64 bytes signature / | / signature / SIG / 64 bytes signature / | |||
] | ] | |||
}, | }, | |||
/ ciphertext / h'8df0a3b62fccff37aa313c8020e971f8aC8d' | / ciphertext / h'8df0a3b62fccff37aa313c8020e971f8aC8d' | |||
] | ] | |||
) | ) | |||
Figure 12: Example of COSE Object sent in the payload of a | Figure 12: Example of COSE Object sent in the payload of a | |||
PUBLISH operation | PUBLISH operation | |||
The encryption and decryption operations are described in sections | The encryption and decryption operations are described in | |||
5.3 and 5.4 of [RFC8152]. | [I-D.ietf-cose-rfc8152bis-algs] [I-D.ietf-cose-rfc8152bis-struct]. | |||
6. Profile-specific Considerations | 6. Profile-specific Considerations | |||
This section summarises the CoAP and MQTT specific pub-sub | This section summarises the CoAP and MQTT specific pub-sub | |||
communications, and considerations respectively. | communications, and considerations respectively. | |||
6.1. CoAP PubSub Application Profile | 6.1. CoAP PubSub Application Profile | |||
A CoAP Pub-Sub Client and Broker use an ACE transport profile such as | A CoAP Pub-Sub Client and Broker use an ACE transport profile such as | |||
DTLS [I-D.ietf-ace-dtls-authorize], OSCORE | DTLS [I-D.ietf-ace-dtls-authorize], OSCORE | |||
skipping to change at page 14, line 18 ¶ | skipping to change at page 15, line 35 ¶ | |||
(C) corresponds to the exchange between the Client and the Broker, | (C) corresponds to the exchange between the Client and the Broker, | |||
where the Client sends its access token to the Broker and establishes | where the Client sends its access token to the Broker and establishes | |||
a secure connection with the Broker. Depending on the Information | a secure connection with the Broker. Depending on the Information | |||
received in (A), this can be for example DTLS handshake, or other | received in (A), this can be for example DTLS handshake, or other | |||
protocols. Depending on the application, there may not be the need | protocols. Depending on the application, there may not be the need | |||
for this set up phase: for example, if OSCORE is used directly. Note | for this set up phase: for example, if OSCORE is used directly. Note | |||
that, in line with what defined in the ACE transport profile used, | that, in line with what defined in the ACE transport profile used, | |||
the access token includes the scope (i.e. pubsub topics on the | the access token includes the scope (i.e. pubsub topics on the | |||
Broker) the Publisher is allowed to publish to. For implementation | Broker) the Publisher is allowed to publish to. For implementation | |||
simplicity, it is RECOMMENDED that the ACE transport profile used and | simplicity, it is RECOMMENDED that the ACE transport profile used. | |||
this specification use the same format of "scope". | ||||
After the previous phases have taken place, the pub-sub communication | After the previous phases have taken place, the pub-sub communication | |||
can commence. The operations of publishing and subscribing are | can commence. The operations of publishing and subscribing are | |||
defined in [I-D.ietf-core-coap-pubsub]. | defined in [I-D.ietf-core-coap-pubsub]. | |||
6.2. MQTT PubSub Application Profile | 6.2. MQTT PubSub Application Profile | |||
The steps MQTT clients go through are similar to the CoAP clients as | The steps MQTT clients go through are similar to the CoAP clients as | |||
described in Section 6.1. The payload that is carried in MQTT | described in Section 6.1. The payload that is carried in MQTT | |||
messages will be protected using COSE. | messages will be protected using COSE. | |||
skipping to change at page 14, line 43 ¶ | skipping to change at page 16, line 10 ¶ | |||
a single topic but a topic filter. Therefore, topic names (i.e., | a single topic but a topic filter. Therefore, topic names (i.e., | |||
group names) may include wildcards spanning several levels of the | group names) may include wildcards spanning several levels of the | |||
topic tree. Hence, it is important to distinguish application groups | topic tree. Hence, it is important to distinguish application groups | |||
and security groups defined in [I-D.ietf-core-groupcomm-bis]. An | and security groups defined in [I-D.ietf-core-groupcomm-bis]. An | |||
application group has relevance at the application level - for | application group has relevance at the application level - for | |||
example, in MQTT an application group could denote all topics stored | example, in MQTT an application group could denote all topics stored | |||
under ""home/lights/". On the other hand, a security group is a | under ""home/lights/". On the other hand, a security group is a | |||
group of endpoints that each store group security material to | group of endpoints that each store group security material to | |||
exchange secure communication within the group. The group | exchange secure communication within the group. The group | |||
communication in [I-D.ietf-ace-key-groupcomm] refers to security | communication in [I-D.ietf-ace-key-groupcomm] refers to security | |||
groups. | groups. ToDo: Give a more complete example | |||
To be able join the right security group associated with requested | ||||
topics (application groups), the client needs to discover the | ||||
(application group, security group) association. In MQTT, $SYS/ has | ||||
been widely adopted as a prefix to topics that contain broker- | ||||
specific information, and hence, can be used by the broker for this | ||||
purpose. In typical implementations, Clients that subscribe to one | ||||
or more SYS-Topics receive the current value on the SYS topics as | ||||
soon as they subscribe, and then after periodically. | ||||
For an MQTT client we envision the following steps to take place: | For an MQTT client we envision the following steps to take place: | |||
1. Client learns the (application group, security group) | 1. Client sends a token request to AS for the requested topics | |||
associations from the $SYS topic (this topic is RECOMMENDED to be | (application groups) using the broker as the audience. | |||
a protected topic). These associations MAY be published under | ||||
another topic. | ||||
2. Client computes the corresponding security groups for its | 2. Client sends a token request to AS for the corresponding security | |||
application groups, and sends token requests for the security | groups for its application groups using the KDC as the audience. | |||
groups to AS. | ||||
3. Client sends join requests to KDC to gets the keys for these | 3. Client sends join requests to KDC to gets the keys for these | |||
security groups. | security groups. | |||
4. Client authorises to the Broker with the token (described in | 4. Client authorises to the Broker with the token (described in | |||
[I-D.ietf-ace-mqtt-tls-profile]). | [I-D.ietf-ace-mqtt-tls-profile]). | |||
5. A Publisher Client sends PUBLISH messages for a given topic and | 5. A Publisher Client sends PUBLISH messages for a given topic and | |||
protects the payload with the corresponding key for the | protects the payload with the corresponding key for the | |||
associated security group. RS validates the PUBLISH message by | associated security group. RS validates the PUBLISH message by | |||
checking the topic's security group association and the stored | checking the topic stored token. | |||
token. | ||||
6. A Subscriber Client may send SUBSCRIBE messages with one or | 6. A Subscriber Client may send SUBSCRIBE messages with one or | |||
multiple topic filters. A topic filter may correspond to | multiple topic filters. A topic filter may correspond to | |||
multiple topics but MUST belong to a single security group. If | multiple topics. RS validates the SUBSCRIBE message by checking | |||
requested topics are in multiple security groups, then these | the stored token for the Client. | |||
topics SHOULD be separated into the corresponding topic filters | ||||
in the SUBSCRIBE message. | ||||
7. Security Considerations | 7. Security Considerations | |||
In the profile described above, the Publisher and Subscriber use | In the profile described above, the Publisher and Subscriber use | |||
asymmetric crypto, which would make the message exchange quite heavy | asymmetric crypto, which would make the message exchange quite heavy | |||
for small constrained devices. Moreover, all Subscribers must be | for small constrained devices. Moreover, all Subscribers must be | |||
able to access the public keys of all the Publishers to a specific | able to access the public keys of all the Publishers to a specific | |||
topic to be able to verify the publications. Such a database could | topic to be able to verify the publications. Such a database could | |||
be set up and managed by the same entity having control of the topic, | be set up and managed by the same entity having control of the key | |||
i.e. KDC. | material for that topic, i.e. KDC. | |||
An application where it is not critical that only authorized | An application where it is not critical that only authorized | |||
Publishers can publish on a topic may decide not to make use of the | Publishers can publish on a topic may decide not to make use of the | |||
asymmetric crypto and only use symmetric encryption/MAC to | asymmetric crypto and only use symmetric encryption/MAC to | |||
confidentiality and integrity protection of the publication. | confidentiality and integrity protection of the publication. | |||
However, this is not recommended since, as a result, any authorized | However, this is not recommended since, as a result, any authorized | |||
Subscribers with access to the Broker may forge unauthorized | Subscribers with access to the Broker may forge unauthorized | |||
publications without being detected. In this symmetric case the | publications without being detected. In this symmetric case the | |||
Subscribers would only need one symmetric key per topic, and would | Subscribers would only need one symmetric key per topic, and would | |||
not need to know any information about the Publishers, that can be | not need to know any information about the Publishers, that can be | |||
skipping to change at page 17, line 31 ¶ | skipping to change at page 18, line 23 ¶ | |||
[I-D.ietf-ace-key-groupcomm]. | [I-D.ietf-ace-key-groupcomm]. | |||
Note to RFC Editor: Please replace all occurrences of "[[This | Note to RFC Editor: Please replace all occurrences of "[[This | |||
document]]" with the RFC number of this specification and delete this | document]]" with the RFC number of this specification and delete this | |||
paragraph. | paragraph. | |||
Name: COSE_Key | Name: COSE_Key | |||
Key Type Value: TBD | Key Type Value: TBD | |||
Profile: coap_pubsub_app | Profile: coap_pubsub_app, mqtt_pubsub_app | |||
Description: COSE_Key object | Description: COSE_Key object | |||
References: [RFC8152], [[This document]] | References: [I-D.ietf-cose-rfc8152bis-algs] | |||
[I-D.ietf-cose-rfc8152bis-struct], [[This document]] | ||||
9. References | 9. References | |||
9.1. Normative References | 9.1. Normative References | |||
[I-D.draft-ietf-rats-uccs-01] | ||||
Birkholz, H., O'Donoghue, J., Cam-Winget, N., and C. | ||||
Bormann, "A CBOR Tag for Unprotected CWT Claims Sets", | ||||
Work in Progress, Internet-Draft, draft-ietf-rats-uccs-01, | ||||
12 July 2021, <https://www.ietf.org/archive/id/draft-ietf- | ||||
rats-uccs-01.txt>. | ||||
[I-D.ietf-ace-key-groupcomm] | [I-D.ietf-ace-key-groupcomm] | |||
Palombini, F. and M. Tiloca, "Key Provisioning for Group | Palombini, F. and M. Tiloca, "Key Provisioning for Group | |||
Communication using ACE", Work in Progress, Internet- | Communication using ACE", Work in Progress, Internet- | |||
Draft, draft-ietf-ace-key-groupcomm-11, 22 February 2021, | Draft, draft-ietf-ace-key-groupcomm-15, 23 December 2021, | |||
<https://www.ietf.org/archive/id/draft-ietf-ace-key- | <https://www.ietf.org/archive/id/draft-ietf-ace-key- | |||
groupcomm-11.txt>. | groupcomm-15.txt>. | |||
[I-D.ietf-ace-oauth-authz] | [I-D.ietf-ace-oauth-authz] | |||
Seitz, L., Selander, G., Wahlstroem, E., Erdtman, S., and | Seitz, L., Selander, G., Wahlstroem, E., Erdtman, S., and | |||
H. Tschofenig, "Authentication and Authorization for | H. Tschofenig, "Authentication and Authorization for | |||
Constrained Environments (ACE) using the OAuth 2.0 | Constrained Environments (ACE) using the OAuth 2.0 | |||
Framework (ACE-OAuth)", Work in Progress, Internet-Draft, | Framework (ACE-OAuth)", Work in Progress, Internet-Draft, | |||
draft-ietf-ace-oauth-authz-40, 26 April 2021, | draft-ietf-ace-oauth-authz-46, 8 November 2021, | |||
<https://www.ietf.org/archive/id/draft-ietf-ace-oauth- | <https://www.ietf.org/archive/id/draft-ietf-ace-oauth- | |||
authz-40.txt>. | authz-46.txt>. | |||
[I-D.ietf-core-coap-pubsub] | [I-D.ietf-core-coap-pubsub] | |||
Koster, M., Keranen, A., and J. Jimenez, "Publish- | Koster, M., Keranen, A., and J. Jimenez, "Publish- | |||
Subscribe Broker for the Constrained Application Protocol | Subscribe Broker for the Constrained Application Protocol | |||
(CoAP)", Work in Progress, Internet-Draft, draft-ietf- | (CoAP)", Work in Progress, Internet-Draft, draft-ietf- | |||
core-coap-pubsub-09, 30 September 2019, | core-coap-pubsub-09, 30 September 2019, | |||
<https://www.ietf.org/archive/id/draft-ietf-core-coap- | <https://www.ietf.org/archive/id/draft-ietf-core-coap- | |||
pubsub-09.txt>. | pubsub-09.txt>. | |||
[I-D.ietf-core-groupcomm-bis] | [I-D.ietf-core-groupcomm-bis] | |||
Dijk, E., Wang, C., and M. Tiloca, "Group Communication | Dijk, E., Wang, C., and M. Tiloca, "Group Communication | |||
for the Constrained Application Protocol (CoAP)", Work in | for the Constrained Application Protocol (CoAP)", Work in | |||
Progress, Internet-Draft, draft-ietf-core-groupcomm-bis- | Progress, Internet-Draft, draft-ietf-core-groupcomm-bis- | |||
03, 22 February 2021, <https://www.ietf.org/archive/id/ | 05, 25 October 2021, <https://www.ietf.org/archive/id/ | |||
draft-ietf-core-groupcomm-bis-03.txt>. | draft-ietf-core-groupcomm-bis-05.txt>. | |||
[I-D.ietf-cose-cbor-encoded-cert] | ||||
Mattsson, J. P., Selander, G., Raza, S., Höglund, J., and | ||||
M. Furuhed, "CBOR Encoded X.509 Certificates (C509 | ||||
Certificates)", Work in Progress, Internet-Draft, draft- | ||||
ietf-cose-cbor-encoded-cert-02, 12 July 2021, | ||||
<https://www.ietf.org/archive/id/draft-ietf-cose-cbor- | ||||
encoded-cert-02.txt>. | ||||
[I-D.ietf-cose-rfc8152bis-algs] | ||||
Schaad, J., "CBOR Object Signing and Encryption (COSE): | ||||
Initial Algorithms", Work in Progress, Internet-Draft, | ||||
draft-ietf-cose-rfc8152bis-algs-12, 24 September 2020, | ||||
<https://www.ietf.org/archive/id/draft-ietf-cose- | ||||
rfc8152bis-algs-12.txt>. | ||||
[I-D.ietf-cose-rfc8152bis-struct] | ||||
Schaad, J., "CBOR Object Signing and Encryption (COSE): | ||||
Structures and Process", Work in Progress, Internet-Draft, | ||||
draft-ietf-cose-rfc8152bis-struct-15, 1 February 2021, | ||||
<https://www.ietf.org/archive/id/draft-ietf-cose- | ||||
rfc8152bis-struct-15.txt>. | ||||
[MQTT-OASIS-Standard-v5] | [MQTT-OASIS-Standard-v5] | |||
Banks, A., Briggs, E., Borgendale, K., and R. Gupta, | Banks, A., Briggs, E., Borgendale, K., and R. Gupta, | |||
"OASIS Standard MQTT Version 5.0", 2017, | "OASIS Standard MQTT Version 5.0", 2017, | |||
<http://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt- | <http://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt- | |||
v5.0-os.html>. | v5.0-os.html>. | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
[RFC6749] Hardt, D., Ed., "The OAuth 2.0 Authorization Framework", | [RFC6749] Hardt, D., Ed., "The OAuth 2.0 Authorization Framework", | |||
RFC 6749, DOI 10.17487/RFC6749, October 2012, | RFC 6749, DOI 10.17487/RFC6749, October 2012, | |||
<https://www.rfc-editor.org/info/rfc6749>. | <https://www.rfc-editor.org/info/rfc6749>. | |||
[RFC8152] Schaad, J., "CBOR Object Signing and Encryption (COSE)", | [RFC7252] Shelby, Z., Hartke, K., and C. Bormann, "The Constrained | |||
RFC 8152, DOI 10.17487/RFC8152, July 2017, | Application Protocol (CoAP)", RFC 7252, | |||
<https://www.rfc-editor.org/info/rfc8152>. | DOI 10.17487/RFC7252, June 2014, | |||
<https://www.rfc-editor.org/info/rfc7252>. | ||||
[RFC7925] Tschofenig, H., Ed. and T. Fossati, "Transport Layer | ||||
Security (TLS) / Datagram Transport Layer Security (DTLS) | ||||
Profiles for the Internet of Things", RFC 7925, | ||||
DOI 10.17487/RFC7925, July 2016, | ||||
<https://www.rfc-editor.org/info/rfc7925>. | ||||
[RFC8392] Jones, M., Wahlstroem, E., Erdtman, S., and H. Tschofenig, | ||||
"CBOR Web Token (CWT)", RFC 8392, DOI 10.17487/RFC8392, | ||||
May 2018, <https://www.rfc-editor.org/info/rfc8392>. | ||||
[RFC8949] Bormann, C. and P. Hoffman, "Concise Binary Object | [RFC8949] Bormann, C. and P. Hoffman, "Concise Binary Object | |||
Representation (CBOR)", STD 94, RFC 8949, | Representation (CBOR)", STD 94, RFC 8949, | |||
DOI 10.17487/RFC8949, December 2020, | DOI 10.17487/RFC8949, December 2020, | |||
<https://www.rfc-editor.org/info/rfc8949>. | <https://www.rfc-editor.org/info/rfc8949>. | |||
9.2. Informative References | 9.2. Informative References | |||
[I-D.ietf-ace-actors] | [I-D.ietf-ace-actors] | |||
Gerdes, S., Seitz, L., Selander, G., and C. Bormann, "An | Gerdes, S., Seitz, L., Selander, G., and C. Bormann, "An | |||
skipping to change at page 19, line 14 ¶ | skipping to change at page 20, line 49 ¶ | |||
environments", Work in Progress, Internet-Draft, draft- | environments", Work in Progress, Internet-Draft, draft- | |||
ietf-ace-actors-07, 22 October 2018, | ietf-ace-actors-07, 22 October 2018, | |||
<https://www.ietf.org/archive/id/draft-ietf-ace-actors- | <https://www.ietf.org/archive/id/draft-ietf-ace-actors- | |||
07.txt>. | 07.txt>. | |||
[I-D.ietf-ace-dtls-authorize] | [I-D.ietf-ace-dtls-authorize] | |||
Gerdes, S., Bergmann, O., Bormann, C., Selander, G., and | Gerdes, S., Bergmann, O., Bormann, C., Selander, G., and | |||
L. Seitz, "Datagram Transport Layer Security (DTLS) | L. Seitz, "Datagram Transport Layer Security (DTLS) | |||
Profile for Authentication and Authorization for | Profile for Authentication and Authorization for | |||
Constrained Environments (ACE)", Work in Progress, | Constrained Environments (ACE)", Work in Progress, | |||
Internet-Draft, draft-ietf-ace-dtls-authorize-16, 8 March | Internet-Draft, draft-ietf-ace-dtls-authorize-18, 4 June | |||
2021, <https://www.ietf.org/archive/id/draft-ietf-ace- | 2021, <https://www.ietf.org/archive/id/draft-ietf-ace- | |||
dtls-authorize-16.txt>. | dtls-authorize-18.txt>. | |||
[I-D.ietf-ace-mqtt-tls-profile] | [I-D.ietf-ace-mqtt-tls-profile] | |||
Sengul, C. and A. Kirby, "Message Queuing Telemetry | Sengul, C. and A. Kirby, "Message Queuing Telemetry | |||
Transport (MQTT)-TLS profile of Authentication and | Transport (MQTT)-TLS profile of Authentication and | |||
Authorization for Constrained Environments (ACE) | Authorization for Constrained Environments (ACE) | |||
Framework", Work in Progress, Internet-Draft, draft-ietf- | Framework", Work in Progress, Internet-Draft, draft-ietf- | |||
ace-mqtt-tls-profile-11, 14 April 2021, | ace-mqtt-tls-profile-13, 23 October 2021, | |||
<https://www.ietf.org/archive/id/draft-ietf-ace-mqtt-tls- | <https://www.ietf.org/archive/id/draft-ietf-ace-mqtt-tls- | |||
profile-11.txt>. | profile-13.txt>. | |||
[I-D.ietf-ace-oscore-profile] | [I-D.ietf-ace-oscore-profile] | |||
Palombini, F., Seitz, L., Selander, G., and M. Gunnarsson, | Palombini, F., Seitz, L., Selander, G., and M. Gunnarsson, | |||
"OSCORE Profile of the Authentication and Authorization | "OSCORE Profile of the Authentication and Authorization | |||
for Constrained Environments Framework", Work in Progress, | for Constrained Environments Framework", Work in Progress, | |||
Internet-Draft, draft-ietf-ace-oscore-profile-18, 14 April | Internet-Draft, draft-ietf-ace-oscore-profile-19, 6 May | |||
2021, <https://www.ietf.org/archive/id/draft-ietf-ace- | 2021, <https://www.ietf.org/archive/id/draft-ietf-ace- | |||
oscore-profile-18.txt>. | oscore-profile-19.txt>. | |||
[RFC8259] Bray, T., Ed., "The JavaScript Object Notation (JSON) Data | [RFC8259] Bray, T., Ed., "The JavaScript Object Notation (JSON) Data | |||
Interchange Format", STD 90, RFC 8259, | Interchange Format", STD 90, RFC 8259, | |||
DOI 10.17487/RFC8259, December 2017, | DOI 10.17487/RFC8259, December 2017, | |||
<https://www.rfc-editor.org/info/rfc8259>. | <https://www.rfc-editor.org/info/rfc8259>. | |||
Appendix A. Requirements on Application Profiles | Appendix A. Requirements on Application Profiles | |||
This section lists the specifications on this profile based on the | This section lists the specifications on this profile based on the | |||
requirements defined in Appendix A of [I-D.ietf-ace-key-groupcomm] | requirements defined in Appendix A of [I-D.ietf-ace-key-groupcomm] | |||
skipping to change at page 20, line 23 ¶ | skipping to change at page 22, line 8 ¶ | |||
* REQ6: Optionally, specify the acceptable values for 'pub_key_enc': | * REQ6: Optionally, specify the acceptable values for 'pub_key_enc': | |||
TODO | TODO | |||
* REQ7: Specify the exact format of the 'key' value: COSE_Key, see | * REQ7: Specify the exact format of the 'key' value: COSE_Key, see | |||
Section 4. | Section 4. | |||
* REQ8: Specify the acceptable values of 'kty' : "COSE_Key", see | * REQ8: Specify the acceptable values of 'kty' : "COSE_Key", see | |||
Section 4. | Section 4. | |||
* REQ9: Specity the format of the identifiers of group members: TODO | * REQ9: Specify the format of the identifiers of group members: TODO | |||
* REQ10: Optionally, specify the format and content of | * REQ10: Optionally, specify the format and content of | |||
'group_policies' entries: not defined | 'group_policies' entries: not defined | |||
* REQ11: Specify the communication protocol the members of the group | * REQ11: Specify the communication protocol the members of the group | |||
must use: CoAP pub/sub. | must use: CoAP pub/sub. | |||
* REQ12: Specify the security protocol the group members must use to | * REQ12: Specify the security protocol the group members must use to | |||
protect their communication. This must provide encryption, | protect their communication. This must provide encryption, | |||
integrity and replay protection: Object Security of Content using | integrity and replay protection: Object Security of Content using | |||
skipping to change at page 21, line 6 ¶ | skipping to change at page 22, line 37 ¶ | |||
* REQ15: Specify policies at the KDC to handle id that are not | * REQ15: Specify policies at the KDC to handle id that are not | |||
included in get_pub_keys: TODO | included in get_pub_keys: TODO | |||
* REQ16: Specify the format and content of 'group_policies': TODO | * REQ16: Specify the format and content of 'group_policies': TODO | |||
* REQ17: Specify the format of newly-generated individual keying | * REQ17: Specify the format of newly-generated individual keying | |||
material for group members, or of the information to derive it, | material for group members, or of the information to derive it, | |||
and corresponding CBOR label : not defined | and corresponding CBOR label : not defined | |||
* REQ18: Specify how the communication is secured between Client and | * REQ18: Specify how the communication is secured between Client and | |||
KDC. Optionally, specify tranport profile of ACE | KDC. Optionally, specify transport profile of ACE | |||
[I-D.ietf-ace-oauth-authz] to use between Client and KDC: pre-set, | [I-D.ietf-ace-oauth-authz] to use between Client and KDC: pre-set, | |||
as KDC is AS. | as KDC is AS. | |||
* OPT1: Optionally, specify the encoding of public keys, of | * OPT1: Optionally, specify the encoding of public keys, of | |||
'client_cred', and of 'pub_keys' if COSE_Keys are not used: NA | 'client_cred', and of 'pub_keys' if COSE_Keys are not used: NA | |||
* OPT2: Optionally, specify the negotiation of parameter values for | * OPT2: Optionally, specify the negotiation of parameter values for | |||
signature algorithm and signature keys, if 'sign_info' and | signature algorithm and signature keys, if 'sign_info' and | |||
'pub_key_enc' are not used: NA | 'pub_key_enc' are not used: NA | |||
End of changes. 76 change blocks. | ||||
196 lines changed or deleted | 280 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |