Internet DRAFT - draft-lucas-dtls-multicast
draft-lucas-dtls-multicast
tls R. Lucas
Internet Draft Cisco International Limited
Intended status: Standards Track September 13, 2017
Expires: March 17, 2018
DTLS Multicast
draft-lucas-dtls-multicast-00.txt
Abstract
This proposal to provide a secure multicast 1-to-N or M-to-N device
capability, with the same level of reliability as the underlying
multicast network, also aims to be light-weight and supported
by a very constrained device. Guaranteed reliability would be
provided by an additional protocol working in co-operation with it.
The aim is to support end to end secure communications in the edge
device world of IoT where the transport methods will vary or at
least change once the IP realm is left. Hence there is no
dependence on Ipv6 or IP or CoAP and no restrictions that might be
introduced if too specific an end node application was implied. It
is network independent, it just must be possible to transmit and
receive frames in multicast.
This can be achieved with simply a minimal change to the DTLS
behavior and using current DTLS libraries. DTLS headers are not
changed, additional headers are used in the packets before the DTLS
traffic.
DTLS Multicast keeps the layer concept pure and independent, hence
it can be used for routing something that is not CoAP.
Status of This Memo
This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet-
Drafts is at http://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six
months and may be updated, replaced, or obsoleted by other documents
at any time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
This Internet-Draft will expire on March 17, 2018.
Copyright Notice
Copyright (c) 2017 IETF Trust and the persons identified as the
document authors. All rights reserved.
Lucas Expires March 17, 2018 [Page 1]
Internet-Draft DTLS Multicast September 2017
This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with
respect to this document.
Code Components extracted from this document must include Simplified
BSD License text as described in Section 4.e of the Trust Legal
Provisions and are provided without warranty as described in the
Simplified BSD License.
Contents
1. Introduction 3
2. Background 4
3. Restrictions / Assumptions 4
4. Terminology 4
5. DTLS Multicast Proposal 5
6. Significant differences between DTLS Multicast and DTLS Unicast 7
7. Logical Traffic Types become Channels 7
7.1 CLIENT channel format 8
7.2 ELECTION channel format 8
7.3 CONTROL channel format 8
7.4 SUBGROUP channel format 9
7.5 SENDER channel format 9
8. Message definitions 9
9. How to use the DTLSMulticast structures 12
9.1 DTLSMulticastRADIUS 12
9.2 DTLSMulticastJoin 13
9.2.1 sender_channel 13
9.2.2 max_subgroups 13
9.2.3 Group controller election flags NE and EL 14
9.2.4 Member send ability flags TX and RX. 14
9.3 DTLSMulticastAddSA 14
9.4 DTLSMulticastDropSA 15
9.5 DTLSMulticastReconnect 15
10. Joining a DTLS multicast group 16
11. Notes on cipher suites 17
12. Receiving DTLS multicast data 17
13. Sending DTLS multicast data 19
Lucas Expires March 17, 2018 [Page 2]
Internet-Draft DTLS Multicast September 2017
14. Leaving a DTLS multicast group 20
15. DTLS multicast group key rotation 20
16. Use of CONTROL, SUBGROUP and CLIENT channels for key rotation 21
17. DTLS multicast controller failure detection and election protocol
24
18. Acknowledgements 26
19. Security Considerations 26
20. IANA Considerations 26
21. References 27
21.1 Normative References 27
21.2 Informative References 27
Author's Address 27
1. Introduction
This proposal provides a secure multicast M-to-N device (or 1-to-N)
capability with the same level of reliability as the underlying
multicast network. This proposal does not provide guaranteed
reliability by itself, this would be provided by an additional
protocol working in co-operation with it.
There is no assumption that the DTLS will be transported over IPv6
or IPv4 or even IP at all. This allows the method to be used both
inside and outside the IP realm making it very useful for end to end
security in the world of IoT and edge field devices that may use
other transport methods.
Machines from the most powerful servers to very constrained edge
devices may be connecting via several different indirect methods
hence all communication must take place inside the multicast domain
and a DTLS multicast group must handle additional messaging between
the machines in that group. Importantly, to do this, the proposal
maintains close compatibility with the existing DTLS protocol with
the simple exception of using additional headers in the packets
before the DTLS traffic.
The header structures and message definitions are defined herein
followed by descriptions of how to use them. (There is no actual
implementation code.)
This proposal provides solutions to assure the following and
explains them in more detail in chapter five:-
o Establishment of a GSA (Group Security Association, see RFC 3740)
where all group members use the same multicast data security
Lucas Expires March 17, 2018 [Page 3]
Internet-Draft DTLS Multicast September 2017
ciphersuite.
o Forward security. Ex-members can no longer decrypt group messages
nor send new encrypted messages
o Backward confidentiality. A new members cannot decrypt messages
sent before it became a member.
o Support for both 1-to-N and M-to-N topologies.
o Group size is limited only by RAM constraints.
o Multicast data confidentiality.
o Multicast data replays are protected. Can be detected and
ignored.
o Multicast data group authentication. Only guarantee data
integrity if all members are trusted.
Note that this proposal does not provide a solution for source
authentication and data integrity. Authentication knows which group
sent a message, not which member sent it.
2. Background
DTLS is currently a point-to-point communications protocol. In the
past there have been draft proposals to expand this to be multicast
and to deal with security. Notably, and listed under informative
references, keoh-tls-multicast-security and
keoh-dice-multicast-security which have both expired. They are in
the author's opinion interesting proposals but they assume DTLS over
IPv6 (see keoh-dice-multicast-security-08 sec 4.4) which may not
always be true. DTLS cannot be assumed to be transported over IPv6
(or even IP for that matter). KEOH-DICE also breaks compatibility
with the existing DTLS header.
This DTLS-Multicast draft proposal seeks to be network independent
and to use existing headers.
3. Restrictions / Assumptions
Any machine may be connecting to a DTLS multicast group via a
gateway (NAT, firewall or even protocol translator) so all
communication must take place within the multicast domain only.
A DTLS multicast group must therefore handle any additional
messaging to allow for the agreement of any keys, configuration data
and behaviours between the machines in the group.
4. Terminology
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in RFC 2119 [RFC2119].
In this document, these words will appear with that interpretation
Lucas Expires March 17, 2018 [Page 4]
Internet-Draft DTLS Multicast September 2017
only when in ALL CAPS. Lower case uses of these words are not to be
interpreted as carrying significance described in RFC 2119.
In this document, the characters ">>" preceding an indented line(s)
indicates a statement using the key words listed above. This
convention aids reviewers in quickly identifying or finding the
portions of this RFC covered by these keywords.
This specification also uses the following terminology:
o Group Controller (or just Controller): The entity that is
responsible for creating a multicast group, establishing security
associations among authorized group members and renewing/updating
the security associations.
Note that a controller (or member capable of being a controller)
must also be a sender.
o Sender: The Sender is an entity that sends data to the multicast
group. In a 1-to-N multicast group only a single sender transmits
data to the group. In an M-to-N multicast group (where M <= N),
M group members are senders. All senders must also be listeners.
o Listener: A Listener is an entity that receives multicast
messages from a multicast group. All listeners must be Members.
o Member: An entity that has joined the group.
o (SA) Security Association: A set of policy and cryptographic
keys that provide security services to network traffic that
matches that policy.
Note that different types of traffic in the multicast group may
be protected by different security associations.
o Group Security Association (GSA): A set of Security Associations
(SAs) that together define how a group communicates securely
[RFC3740].
O Keying material: Data that is specified as part of the SA which
is needed to establish and maintain a cryptographic security
association, such as keys, key pairs, and IVs [RFC4949].
5. DTLS Multicast Proposal
This proposal provides a secure multicast M-to-N device capability
with the same level of reliability as the underlying multicast
network.
This proposal does not provide guaranteed reliability by itself,
this would be provided by an additional protocol working in
co-operation with it.
Lucas Expires March 17, 2018 [Page 5]
Internet-Draft DTLS Multicast September 2017
This proposal aims to be as light-weight as possible so that it can
be supported (in its minimal form) by a very constrained device.
This proposal maintains compatibility with the existing DTLS
protocol with the exception of additional headers in the packets
before the DTLS traffic.
This proposal provides a solution for:
a. Establishment of a GSA: A secure mechanism to distribute
keying materials, multicast security policies and security
parameters to members of the multicast group.
b. Multicast data security ciphersuite: All group members use the
same ciphersuite to protect the authenticity, integrity and
confidentiality of multicast messages. The ciphersuite is part
of the GSA.
c. Forward security: Devices that leave the group will not have
access to any future GSAs. This ensures that a past member
device cannot continue to decrypt confidential data that is
sent in the group. It also ensures that this device cannot
send encrypted and/or integrity protected data after it leaves
the group.
The GSA update mechanism is part of the key management scheme.
Note that the controller can weaken this as part of the
key management policy for performance reasons and/or to reduce
network traffic overhead.
d. Backward confidentiality: A new device joining the group will
not have access to any old GSAs. This ensures that a new member
device cannot decrypt data sent before it joins the group. The
key management scheme should ensure that the GSA is updated to
ensure backward confidentiality. Note that the controller can
weaken this as part of the key management policy for
performance reasons and/or to reduce network traffic overhead.
e. Multicast communication topology: Both 1-to-N (one sender with
multiple listeners) and M-to-N (multiple senders with multiple
listeners) communication topologies are supported
f. Multicast group size: The number of listeners is limited by the
RAM on the group controller. The protocol allows for up to
2^128 unique listeners.
The number of senders is limited by the RAM on the listeners.
The protocol allows for up to 2^31 unique senders.
Note that all Senders must also be Listeners.
g. Multicast data confidentiality: Multicast messages can be
encrypted according to the cipher suite selected by the
Lucas Expires March 17, 2018 [Page 6]
Internet-Draft DTLS Multicast September 2017
controller.
h. Multicast data replay protection: Replayed messages can be
detected and ignored.
i. Multicast data group authentication: Multicast messages can be
authenticated according to the cipher suite selected by the
Group Controller. The multicast group key (which is known to
all group members) is used to provide authenticity to the
multicast messages. It does not guarantee data integrity unless
all group members are trusted.
This proposal does not provide a solution for:
a. Source authentication and data integrity: Messages can be
authenticated to have come from a member of the group, but
cannot be tracked to a specific member within the group.
6. Significant differences between DTLS Multicast and DTLS Unicast
Additional headers are added before the DTLS and other encrypted
traffic to allow the traffic types to be identified.
The existing DTLS (unicast) standard allows either party to trigger
a key rotate and associated epoch change. DTLS Multicast allows this
on the CLIENT channel but key rotation and epoch change on all other
channels are managed by the group controller.
Message acknowledgement and retry is not supported by any channel
apart from the CLIENT channels. If the network is lossy then the
listeners may not receive all the control or data messages. Any
protocol using DTLS multicast must be designed to expect this and
act appropriately.
7. Logical Traffic Types become Channels
To allow both control and data traffic to be carried on the same
multicast group, this proposal inserts an additional header at the
start of the data frame to allow the different logical traffic types
to be separated into "channels".
This header is defined as:
struct {
unit32 channel;
} DTLSMulticast;
Channels are assigned as follows:
Channel range Name Description
0 CLIENT Client traffic channels
Lucas Expires March 17, 2018 [Page 7]
Internet-Draft DTLS Multicast September 2017
1 ELECTION Controller election channel
2 CONTROL Controller management channel
3 .. 0xFFFF_FFFF SUBGROUP/SENDER Data channels
7.1 CLIENT channel format
The CLIENT channel is used by members to connect to the multicast
group and communicate with the group controller.
Messages on the CLIENT channel start with a
DTLSMulticastClientPrefix header to allow individual client's
connections to be identified.
This is defined as:
struct {
uint8 client[16];
} DTLSMulticastClientPrefix;
The "client" value should be chosen randomly each time an entity
attempts to join the multicast group.
Normal DTLS traffic follows the DTLSMulticastClientPrefix header.
The encrypted data frames are DTLSMulticastClient messages.
Apart from the additional DTLSMulticast and
DTLSMulticastClientPrefix headers, the CLIENT channel is a normal
DTLS connection.
7.2 ELECTION channel format
The ELECTION channel is used to handle election of controllers when
the Active controller fails and controller election has been
permitted for the group.
Messages on the ELECTION channel are sent as a DTLSCiphertext using
The Election security association. The election security
association is provided to the member in a DTLSMulticastAddSA
message over the CLIENT, CONTROL or SUBGROUP channels.
The encrypted data frames are DTLSMulticastElection messages.
7.3 CONTROL channel format
The CONTROL channel is used for key distribution and other
Management actions by the controller.
Messages on the CONTROL channel are sent as a DTLSCiphertext using
the Group security association. The group security association is
initially provided to the member in a DTLSMulticastAddSA message
over the CLIENT channel. The controller may update the group
Lucas Expires March 17, 2018 [Page 8]
Internet-Draft DTLS Multicast September 2017
security association using a DTLSMulticastAddSA message over the
CLIENT, CONTROL or SUBGROUP channels.
The encrypted data frames are DTLSMulticastControl messages.
7.4 SUBGROUP channel format
The SUBGROUP channels are used by the controller to restrict key
distribution and other management actions to the members of the
sub-group.
Messages on the SUBGROUP channel are sent as a DTLSCiphertext using
the Specific sub-group security association. The sub-group security
association is initially provided to the member in a
DTLSMulticastAddSA message over the CLIENT channel. The controller
may update the group security association using a DTLSMulticastAddSA
message over the CLIENT, CONTROL or SUBGROUP channels.
The encrypted data frames are DTLSMulticastControl messages.
7.5 SENDER channel format
The SENDER channels are used to carry the application data. A member
with transmit privileges will only be allowed to transmit on a
singleSENDER channel and will be the only member allowed to send on
that channel.
Messages on the SENDER channel are sent as a DTLSCiphertext using
the group security association. The group security association is
initially provided to the member in a DTLSMulticastAddSA message
over the CLIENT channel. The controller may update the group
security association using a DTLSMulticastAddSA message over the
CLIENT, CONTROL or SUBGROUP channels.
Note: The encrypted data frames are application data - their format
is NOT defined in this standard and varies according to the
application.
8. Message definitions
enum {
radius(0), joinReq(1), joinRsp(2), leave(3), acknack(4),
addsa(5), dropsa(6), reconnect(7), heartbeatReq(8),
heartbeatRsp(9), reqsa(10),
(255)
} DTLSMulticastType;
struct {
uint8 code;
uint8 identifier;
uint16 length;
Lucas Expires March 17, 2018 [Page 9]
Internet-Draft DTLS Multicast September 2017
uint8 data[length - 4];
} DTLSMulticastRADIUS;
struct {
uint32 sender_channel; // Current sender channel (0 if
// listener only)
uint32 max_subgroups; // Maximum number of subgroups
// supported
uint8 flags; // Mode and capability flags
// xxxx xxx0 "NE": Member cannot
// take part in controller elections
// xxxx xxx1 "EL": Member can take
// part in controller elections
// xxxx xx0x "RX": Member wishes to
// listen only
// xxxx xx1x "TX": Member wishes to
// be a sender
// 0000 00xx "ZZ": For future
// expansion
} DTLSMulticastJoinReq;
struct {
uint32 firstSenderChannel; // First sender channel (inclusive)
uint32 lastSenderChannel; // Last sender channel (inclusive)
} DTLSMulticastJoinRsp;
struct {
// Empty structure
} DTLSMulticastLeave;
enum {
noError (0),
unknown (1),
unauthorised (2),
resourcesExceeded (3),
notJoined (4),
(255)
} DTLSMulticastErrorCodes;
struct {
DTLSMulticastErrorCodes error;
uint8 subcode;
} DTLSMulticastAckNack;
struct {
uint16 epoch; // DTLS multicast epoch for the key
uint8 flags; // Mode and capability flags
// xxxx x000 "EL": SA is for the
// election channel
// xxxx x001 "GP": SA is the group
// SA
Lucas Expires March 17, 2018 [Page 10]
Internet-Draft DTLS Multicast September 2017
// xxxx x010 "SG": SA is for a
// subgroup channel
// xxxx x011 : Reserved for
// future expansion
// ... ...
// xxxx x111 : Reserved for
// future expansion
>> // xxxx 0xxx "RX": Member MUST NOT
// send on the channel
>> // xxxx 1xxx "TX": Member MAY send
// on the channel
// 0000 xxxx "ZZ": For future
// expansion, must be zero
uint8 timeout; // Channel timeout period (sec)
uint32 channel; // Channel number
SecurityParameters key; // Encryption/MAC parameters, see
// RFC5246:A.6
} DTLSMulticastAddSA;
struct {
uint32 channel;
} DTLSMulticastDropSA;
struct {
uint32 controller_magic;
} DTLSMulticastReconnect;
struct {
uint32 magic; // Random number to match Req/Rsp
} DTLSMulticastHeartbeatReq;
struct {
uint32 magic; // Echo of
DTLSMulticastHeartbeatReq.magic
} DTLSMulticastHeartbeatRsp;
struct {
uint32 channel;
} DTLSMulticastReqSA;
//----------------------------------------------------------------
enum {
addsa, dropsa, reconnect, (255)
} DTLSMulticastControlType;
struct {
DTLSMulticastControlType type;
select (type) {
case addsa: DTLSMulticastAddSA;
Lucas Expires March 17, 2018 [Page 11]
Internet-Draft DTLS Multicast September 2017
case dropsa: DTLSMulticastDropSA;
case reconnect: DTLSMulticastReconnect;
} content;
} DTLSMulticastControl;
//-----------------------------------------------------------------
enum {
radius, addsa, dropsa, join, leave, heartbeatReq, heartbeatRsp,
acknack, reqsa, (255)
} DTLSMulticastClientType;
struct {
DTLSMulticastClientType type;
select (type) {
case radius: DTLSMulticastRADIUS;
case addsa: DTLSMulticastAddSA;
case dropsa: DTLSMulticastDropSA;
case join: DTLSMulticastJoin;
case leave: DTLSMulticastLeave;
case heartbeatReq: DTLSMulticastHeartbeatReq;
case heartbeatRsp: DTLSMulticastHeartbeatRsp;
case acknack: DTLSMulticastAckNack;
case reqsa: DTLSMulticastReqSA;
} content;
} DTLSMulticastClient;
// ----------------------------------------------------------------
struct {
uint32 age;
uint8 uuid[16];
} DTLSMulticastElectionVote;
enum {
vote(0), (255)
} MulticastElectionType;
struct {
MulticastElectionType type;
select (type) {
case vote: DTLSMulticastElectionVote;
} content;
} DTLSMulticastElection;
9. How to use the DTLSMulticast structures
9.1 DTLSMulticastRADIUS
>> The multicast group MAY choose to authenticate clients before they
are authorised to become members of the multicast group. If this is
Lucas Expires March 17, 2018 [Page 12]
Internet-Draft DTLS Multicast September 2017
required, the RADIUS protocol may be used with encapsulation in
DTLSMulticastRADIUS messages. Once the RADIUS handshake has
completed and the client has been authorised to join the group, the
client proceeds with a DTLSMulticastJoin message.
>> If the group requires authorisation of clients, the controller MUST
respond to all messages apart from DTLSMulticastRADIUS messages with
an "unauthorised" DTLSMulticastAckNack message until the client is
authorised.
If the group does not require authorisation of clients, the
>> controller MUST consider the client as authorised as soon as the
DTLS CLIENT channel is established and the client can immediately
send a DTLSMulticastJoin message.
Note that the controller is not required to use RADIUS to
authenticate the client. The controller may instead use any
information from the client DTLS connection to authenticate the
client using some other protocol. Alternatively, the controller may
simply allow all clients to join the group.
9.2 DTLSMulticastJoin
The DTLSMulticastJoin is sent by a client to the controller on
CLIENT Channels to indicate a client's wish to become a member of
the group. The controller must respond with a DTLSMulticastAckNack
to indicate if the request was successful.
>> The controller MUST respond to all messages apart from
DTLSMulticastRADIUS and DTLSMulticastJoin messages with a
"notJoined" DTLSMulticastAckNack message until the client has
successfully joined the group.
The parameters in the DTLSMulticastJoin message are described below.
9.2.1 sender_channel
If the sender is sending a join message as a result of receiving a
DTLSMulticastReconnect, it should indicate its previously assigned
sender channel in this field so that the same channel can be
reassigned by the new controller (as the new controller may not have
the channel assignment list from the previous controller).
This field should be set to 0 if the listener had no sender channel
assigned.
9.2.2 max_subgroups
This is used to indicate the capabilities of the member. Constrained
devices may have limited memory and may only be able to support a
Lucas Expires March 17, 2018 [Page 13]
Internet-Draft DTLS Multicast September 2017
small number of subgroups and possibly none at all. Devices with
larger memory and processing capabilities may be able to support
many sub-groups. A member should try to set this as large as
possible so that the controller is not constrained in how it assigns
and manages the subgroups.
9.2.3 Group controller election flags NE and EL
A group may or may not support group controller elections. If a
group does not support elections, the sysadmin must ensure that an
alternative solution is in place to ensure the availability of a
group controller. Alternative solutions are beyond the scope of this
document.
If any member wishes to take part in group controller elections, it
should set the DTLSMulticastJoin.flags.EL otherwise it should set
DTLSMulticastJoin.flags.NE.
9.2.4 Member send ability flags TX and RX.
Some members may only be listeners to the group. These members do
Not need to be able to send and do not need a SENDER channel
assigned. Theyshould set the DTLSMulticastJoin.flags.RX flag.
Some members may wish to take be able to send data to the group.
They should set the DTLSMulticastJoin.flags.TX flag.
>> The group controller MUST track the assigned sender channels so that
the same sender channel is never simultaneously assigned to multiple
entities.
The controller should respond to the "join" with an "ack" or "nack".
If the controller requires the client to authenticate before it is
allowed to join the group, the controller should return an
"unauthorised" error. The client should then begin a RADIUS
authentication using DTLSMulticastRADIUS messages (which simply
encapsulate standard RADIUS frames). If the RADIUS authentication is
successful then the client should re-send its DTLSMulticastJoin
message to join the group.
If the client join is successful, the controller will then send one
or more DTLSMulticastAddSA messages to provide the appropriate
security keys to the client.
9.3 DTLSMulticastAddSA
This message is sent by a controller to provide a security
association to one or more members. This allows access to a channel
and allows new security associations to be provided for a channel
(e.g. during epoch change).
The group security association is sent with the GP flag set. The
Lucas Expires March 17, 2018 [Page 14]
Internet-Draft DTLS Multicast September 2017
same security association is used for the CONTROL channel and all
SENDER channels. If the member is only allowed to listen then the RX
flag is set. If the member is allowed to send data then the TX flag
is set and the assigned SENDER channel is indicated in the "param"
field.
The SUBGROUP channel security associations are sent with flags
ZZ, RX and SG.
The SUBGROUP channel is indicated in the "channel" field. Only the
active controller is allowed to send traffic on a SUBGROUP channel.
The ELECTION channel security association is sent with flags ZZ, EL
and TX.
>> The controller SHOULD set the "channel" field to the unix timestamp
>> when the member joined the group. The member MUST store this value
and use it as the "age" field in later ***JS
The timeout field is used to indicate the timeout/repeat value in
seconds for that channel.
The DTLSMulticastAddSA message can be sent by the controller on a
CLIENT channel, in which case it must be acknowledged with an "ack"
Or Rejected with a "nack".
The DTLSMulticastAddSA message can also be sent by the controller on
A CONTROL or SUBGROUP channel, in which case it is not acknowledged.
9.4 DTLSMulticastDropSA
This message is sent by a controller used to tell one or more
listeners that a security association is no longer required. It
should not be used as part of the group security because the
controller has no guarantee that the listener has complied with the
request. It is instead provided to allow the controller to help the
listener maintain a minimal memory footprint.
The message can be sent by the controller on a CLIENT channel, in
which case it must be acknowledged with an "ack" or rejected with a
"nack".
The message can be sent by the controller on a CONTROL or SUBGROUP
channel, in which case it is not acknowledged.
9.5 DTLSMulticastReconnect
This message is by a group controller used to tell listeners on the
sub-channel to reconnect. This message is only sent by a new group
controller after a group controller election has completed and is
used to ensure that the listeners establish new CLIENT connections
Lucas Expires March 17, 2018 [Page 15]
Internet-Draft DTLS Multicast September 2017
to the new group controller.
Each time a controller wants clients to reconnect, it generates a
new "controller_magic" value. The controller then sends as many
reconnect messages as necessary on the CONTROL or SUBGROUP channels
until it is confident that all listeners have reconnected. If a
listener receives multiple "reconnect" messages (e.g. due to
retransmission on a single channel or received on multiple
channels), the listener can use the "controller_magic" field to
determine if this is a new reconnect request or simply a repeat of
an earlier reconnect message.
The message can be sent by the controller on the CONTROL or SUBGROUP
channels and is not acknowledged.
When a listener receives a reconnect message with a new
"controller_magic" value, it should discard its CLIENT connection
and repeat the JOIN process.
The listener does not need to discard any other security association
information so can continue to receive (and send) messages on the
SENDER channels. This ensures that the multicast group continues to
operate normally during the controller election and recovery
process.
10. Joining a DTLS multicast group
This takes place after the standard IGMP Multicast JOIN for IPv4
and/or appropriate other actions for other protocols.
>> An entity MUST use the following sequence to join a DTLS multicast
group and obtain the multicast key material.
When an entity wishes to JOIN a DTLS multicast group, it generates a
new random 16 byte client ID then connects to the group controller
on the CLIENT channel as defined above. Note that the CLIENT channel
has DTLSMulticast and DTLSMulticastClientPrefix headers before the
DTLS traffic.
The DTLS handshake takes place in the usual way and the CLIENT
channel is established.
The joining entity has now become a member of the group. It then
sends a DTLSMulticastJoin message on the CLIENT channel. The
controller will reply with an "ack" or "nack". If the controller
responds with a "nack" then the client will not be given the
decryption keys for the group's traffic and the controller will
close the DTLS connection.
If the controller responded with an "ack" then the controller
follows up with one or more "addsa" messages on the CLIENT channel
Lucas Expires March 17, 2018 [Page 16]
Internet-Draft DTLS Multicast September 2017
to allow the member to become a listener (and possibly a sender) on
the appropriate channels.
11. Notes on cipher suites
Equivalent cipher suites must be used for all security associations
including the CLIENT channels. Clients may need to authenticate to
the group controller using different identity keys, but must use
equivalent encryption and hash modes.
For example, the following are considered equivalent cipher suites
because all use AES-128 in CBC mode with a SHA-256 hash even though
they use different identity keys.
TLS_RSA_WITH_AES_128_CBC_SHA256 = {0x00,0x3C};
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 = {0xC0,0x23};
TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 = {0xC0,0x25};
TLS_PSK_WITH_AES_128_CBC_SHA256 = {0x00,0xAE};
A cipher suite that used AES-256, a different mode (such as CTR or
GCM) or a different hash (such as SHA-1 or SHA-384) would not be
considered equivalent.
All security associations apart from the CLIENT channel have
explicitly shared security parameters and should indicate the
equivalent TLS_PSK_xxx cipher suite.
12. Receiving DTLS multicast data
A listener should apply the following rules in the order below when
deciding whether to accept a message:
>> The active group controller MUST listen to all messages on the
CLIENT channel so that it can communicate with all the members and
handle join requests from new entities.
>> All standby group controllers MUST listen to messages on the CLIENT
channel to detect a failure of the active group controller to
respond to new join requests.
A listener
>> MUST ignore all messages on the CLIENT channel apart from those
identified with its own client ID.
>> MUST ignore all messages on any SUBGROUP channels for which it
does not have a security association.
>>- MUST ignore all messages that are not on the last known good
epoch for that channel, the "current" epoch or the "next" epoch.
>> MUST ignore CONTROL, SUBGROUP and SENDER messages on the last
Lucas Expires March 17, 2018 [Page 17]
Internet-Draft DTLS Multicast September 2017
known good epoch for that channel and with an earlier or equal
sequence number to the last known good sequence number for that
channel.
A listener
>> SHOULD accept all remaining messages.
>> SHOULD attempt to decrypt and authenticate all accepted
messages.
If the message is valid, the client should update its values for
last known good epoch and sequence number for that channel then
process the message content.
There is no retry mechanism for DTLS multicast traffic so the
listener must take this into account when handling lost or
fragmented packets. Fragmentation *is* supported for DTLS multicast
but the listener must be able to discard incomplete fragmented
packets.
A client should only ever need to store a maximum of two security
associations for a channel (remember that all SENDER channels share
the same group security association).
These are either:
"last" + "current"
This is the situation after a key rotation where not all
senders have switched to the "current" epoch
or
"current" + "next"
This is the situation during a key rotation when no senders
have switched to the "next" epoch.
>> A client SHOULD track the following information for all channels
that it is listening on:
channel_id 4 bytes
epoch 2 bytes
sequence_number 6 bytes
where "epoch" and "sequence_number" are the epoch and
sequence_number from the last good packet received on that channel.
If a key rotation takes place and the client is still tracking
senders on the "last" epoch, the client can discard its security
association for the "last" epoch. Note that a client may choose to
keep the "last" security association for a short period of time (a
few seconds) to allow for any delayed packets on the "last" security
association to be received and decrypted.
When the listener receives a message on the "next" epoch security
association but has no security association for that epoch, it
should send a "reqsa" message to the controller to request the
Lucas Expires March 17, 2018 [Page 18]
Internet-Draft DTLS Multicast September 2017
necessary security association data. The controller will respond
with an "ack" or "nack". If the controller responds with an "ack",
it will then send the listener an "addsa" message with the security
association which the listener should "ack" in the usual way. If the
controller responded with a "nack" then the the listener is not
permitted to access data in the new epoch.
13. Sending DTLS multicast data
>> A sender MUST NOT send messages on a channel unless it has been
granted the right to transmit on that channel by the controller in
the security association.
>> A sender MUST send messages in the normal DTLS manner with
incrementing sequence numbers starting from zero.
When sending encrypted packets, the sender MUST ensure that the
packets do not have duplicate IV with any other packets sent with
the same security association including packets sent by other
devices. Two possible ways to ensure this are:
1) Ensure that the packet's IV is truly random, so a collision is
not likely given the size of the IV compared to the maximum
number of packets sent on that security association
or
2) Use the channel ID for the top 32 bits of the IV and use any
other suitable method to derive the remaining bits. For some
cipher modes, this may allow a sequential number assignment
(which is lower overhead than random number generation). For
other cipher modes, a pseudo-random number with suitable
entropy gathering may be sufficient.
>> A sender MUST use the security association of the "current"
multicast epoch.
If this would cause the sequence number would wrap, the sender MUST
NOT send any more messages on its channel. The sender must instead
LEAVE then JOIN the TLS multicast group indicating a sender_channel
value of zero so that it obtains a new channel and can safely
restart its sequence number from zero.
Note that the group controller should have performed a key rotation
on the channel before any sequence counters were due to wrap, so
this scenario indicates either a fault in the group controller or a
network with very high packet loss.
All changes of epoch are co-ordinated by the group controller as
part of the key rotation.
When the sender receives a valid message on the "next" epoch
security association, it should:
Lucas Expires March 17, 2018 [Page 19]
Internet-Draft DTLS Multicast September 2017
discard the security association information for the "last"
epoch
copy the security association information from the "current"
epoch to the "last" epoch
copy the security association information from the "next" epoch
to the "current" epoch
clear the security association information for the "next" epoch
set the "next" epoch to the "current" epoch + 1
reset its sender sequence number for the "current" epoch to zero
14. Leaving a DTLS multicast group
>> All members SHOULD indicate their wish to leave a DTLS multicast
group
The member sends a DTLSMulticastLeave message to the controller on
its CLIENT channel. The controller will acknowledge this message.
The listener has now left the group.
>> When a listener leaves the group, the controller SHOULD perform a
key rotation on all channels that the listener had access to so that
the listener can no longer send or receive messages on the multicast
group.
A controller can consider the listener as having left the group if
its CLIENT channel connection is lost (e.g. explicit close or no
response to heartbeats from the controller).
15. DTLS multicast group key rotation
The group controller must maintain the integrity and correct
operation of the group.
This requires the group controller to:
o Update the necessary security associations if listeners leave the
group
o Update a security association before any sender's sequence number
wraps
The group controller may also choose to update security associations
at other times depending on policy that is outside the scope of this
document.
Group key rotation takes place for a security association as
follows:
Lucas Expires March 17, 2018 [Page 20]
Internet-Draft DTLS Multicast September 2017
o The controller generates a new random key
o The controller calculates the "next" epoch by adding 1 to the
"current" epoch
o The controller sends DTLSMulticastSA messages containing the new
security association to the appropriate listeners using the
SUBGROUP and/or CLIENT channels
o The controller sends one or more an empty messages on the CONTROL
channel using the new security association and a sequence number
of zero.
If no multicast messages are lost, all senders will see the empty
message on the CONTROL channel and all subsequent messages will be
sent using the "next" epoch.
If multicast messages are unreliable, some senders may not see the
empty message on the MASTER channel and may continue to send
messages on what they think is the "current" epoch. As soon as they
see a message on the "next" epoch from one of the other senders,
however, they will switch to the "next" epoch.
If a controller sees multiple messages from a sender on what the
controller considers to be the "last" epoch (and what the sender
>> considers to be the "current" epoch), the controller MAY repeat one
or more empty messages on the CONTROL channel so that the sender
sees them and switches to the "next" epoch.
16. Use of CONTROL, SUBGROUP and CLIENT channels for key rotation
For groups with few members, it is feasible to use the CLIENT
channels for key rotation as this is a reliable mechanism. The
group controller can simply update each listener's security
association individually.
The group controller can therefore easily ensure that:
1) The new security association is only delivered to the
appropriate listeners
and
2) The listener has received the new security association
This is a simple approach, but does not scale well as the number of
members of the group increases. Although the approach is still
technically possible, the time required to provide the key to each
listener is an O(N) problem and will therefore cause an increasingly
large delay between when the key rotation starts and when the key is
available for use by the group. This approach also generates an
O(N)amount of traffic on the network.
To allow for faster key distribution, the controller may choose to
distribute the key using the CONTROL or SUBGROUP channels. This is
not a reliable distribution mechanism as these messages are not
Lucas Expires March 17, 2018 [Page 21]
Internet-Draft DTLS Multicast September 2017
acknowledged, but it does take advantage of the multicast nature of
the group. The controller may choose to send the same "addsa"
message multiple times to reduce the impact of message loss before
considering the key rotation complete.
The CONTROL group uses the Group Security Association so all
listeners can receive messages on this channel. If a listener
"leaves" the group, if it does not discard its group security
association information, it can continue to receive and decrypt
messages on this channel. If the CONTROL channel is used to provide
the new security association, such a listener could decrypt the
information for the new security association and therefore continue
to decrypt the messages on the channel.
This does not provide "Forward security" so an alternative solution
must be available for the controller to rotate keys after a listener
has left without forcing the controller to update each remaining
listener individually on its CLIENT channel.
When the controller accepts a member into the group, the controller
>> MAY add the member to one or more SUBGROUP channels. Each SUBGROUP
Channel has its their own security association so any traffic to a
SUBGROUP cannot be decrypted by listeners that are not members of
the sub-group.
When a key rotation is required and a listener must be excluded from
receiving the new security association, the controller can use the
SUBGROUP channels to send the "addsa" messages to the sub-groups
that the listener is *not* a member of.
The controller may add listeners to multiple SUBGROUPs (e.g. using a
binary tree) so that the number of messages required to update the
security association can be significantly reduced.
To see the advantage of the subgroup approach, consider the
situation when a member leaves a group:
For a group with 10 remaining listeners, a simple key rotation using
the CLIENT channels would require a minimum of
{listeners * (addsa + ack)} = 20 messages to distribute the new
security association.
For a larger group with 1,000 remaining listeners, the minimum
number of messages required is now {listeners * (addsa + ack)}=
2,000 messages to distribute the new security association over the
CLIENT channels.
If, however, the controller had organised the listeners into a
binary tree and assigned a SUBGROUP channel to each branch, the
original 1,000 listeners would require a binary tree with a depth of
10. Each branch on the tree would be assigned a subgroup to allow
Lucas Expires March 17, 2018 [Page 22]
Internet-Draft DTLS Multicast September 2017
multicast communication with all members below that branch.
After a member leaves the group, the controller can update the group
security association for all the other members by sending an "addsa"
message to the SUBGROUP channels on the branches that do not include
the member that has just left, recursing down the branch as
necessary to ensure all remaining members have received the message.
This would require 9 "addsa" messages to be sent to SUBGROUP
channels and one "addsa" + "ack" handshake on the remaining
listener, a total of 11 messages.
The controller would also need to perform a key rotation on the
subgroups that the departing member was part of so that future
messages to that subgroup could not be eavesdropped. The member
would have been part of 9 groups so following the same approach, the
number of additional messages required would be:
Group branch depth # members # messages
1 512 8 + 2
2 256 7 + 2
3 128 6 + 2
4 64 5 + 2
5 32 4 + 2
6 16 3 + 2
7 8 2 + 2
8 4 1 + 2
9 2 0 + 2
-----
Total messages: 54
With a simple binary tree approach, the number of messages required
to rotate the keys after a listener leaves is reduced from 2,000 to
a minimum of 65. The tree would require 1024 SUBGROUP channels.
With a larger number of branches at each level of the tree, the
depth of the tree could be reduced. This would in turn reduce both
the number of SUBGROUP channels required and the number of messages
required for key rotation after a member leaves the group.
Note that constrained listeners that are not able to join a
sufficient number of subgroups may still need to be individually
updated by the controller in some circumstances.
If a listener has not received the new security association but
>> receives messages on the new epoch, the listener SHOULD request the
information using the "reqsa" message on its CLIENT channel. If the
listener is unable to buffer the messages on the new security
association whilst waiting for the controller to provide the
security association details, the listener will be forced to drop
Lucas Expires March 17, 2018 [Page 23]
Internet-Draft DTLS Multicast September 2017
the packets and data loss will occur.
17. DTLS multicast controller failure detection and election protocol
>> All DTLS multicast groups MUST have a controller. Some groups may
allow controller election whereas others may have a fixed controller
(which should be highly available if the group is to be reliable).
>> Groups that allow controller election MUST implement the DTLS
multicast controller election protocol.
>> A member MUST NOT take part in the election unless it has been
provided with the security association for the ELECTION channel and
has been granted permission to send on that channel.
>> A member SHOULD NOT attempt to monitor the controller for failure
unless it has been allowed to take part in the election.
>> Members allowed to take part in the election SHOULD monitor the
controller for failure.
>> A member monitoring the controller MUST consider it to have failed
if the following occurs:
o The member has lost its CLIENT channel connection AND the
controller has not responded to at least 3 subsequent JOIN
messages from the member
OR
o No group key rotation has occurred but the sequence number on any
SENDER channel has both MSBs set
OR
o No subgroup key rotation has occurred but the sequence number on
a valid packet on a SUBGROUP channel has both MSBs set
>> A member MAY consider the controller to have failed if the following
occurs:
o At least 2 JOIN messages have been seen from a 3rd party on the
JOIN channel but no controller response has been seen.
>> A member MUST trigger an election if it considers the controller to
Have failed.
The election uses the DTLSMulticastElection messages. These are
always sent as a DTLSCiphertext content on the ELECTION channel and
protected by the election security association.
If a member wishes to trigger an election or join an active
election, it first generates a random UUID if it does not have one
already. It then sends a DTLSMulticastElectionVote message on the
Lucas Expires March 17, 2018 [Page 24]
Internet-Draft DTLS Multicast September 2017
ELECTION channel with the "current" epoch and sequence number zero,
setting the "age" field to the "channel" value from the
DTLSMulticastAddSA it received for the ELECTION channel and "uuid"
field with its UUID.
>> If the current controller has not failed, it MUST join the election
and send a DTLSMulticastElectionVote with age of 0 and its UUID.
If any member of the election sees a DTLSMulticastElectionVote
message with a LOWER age than its own, it should withdraw from the
election.
If any member of the election sees a DTLSMulticastElectionVote
message with the SAME age as its own AND with a lower UUID, it
should withdraw from the election.
All members of the election should retransmit their
DTLSMulticastElectionVote message after the ELECTION timeout period
(as defined in the DTLSMulticastSA message for the ELECTION
channel).
A member of the election can consider itself the elected master if
it is still a member of the election after two timeout periods have
expired with no DTLSMulticastElection messages seen from other
members.
The above election process is not intended to be fair. It is instead
deliberately designed to prioritise the election as follows:
HIGHEST
The existing controller (if it is still running)
The oldest member in the election group
...
The newest member in the election group
LOWEST
If the controller has changed as a result of the election, the new
controller must trigger all members of the group to re-connect to it
so it can reconstruct the details of the group and hence be able to
handle JOIN, LEAVE and key rotation as necessary.
The controller triggers all members to reconnect as follows:
1) It generates a random 32-bit number as the "controller_magic"
2) It sets its next sequence number to 0x8000_0000 for the
CONTROL channel.
3) It sends a DTLSMulticastReconnect on the CONTROL channel.
4) It waits for DTLSMulticastSA[CONTROL].timeout seconds.
5) It repeats DTLSMulticastReconnect on the CONTROL channel.
6) It waits for DTLSMulticastSA[CONTROL].timeout seconds.
7) It repeats DTLSMulticastReconnect on the CONTROL channel.
Lucas Expires March 17, 2018 [Page 25]
Internet-Draft DTLS Multicast September 2017
8) It waits for DTLSMulticastSA[CONTROL].timeout seconds.
9) It continues to wait if any clients are still joining the
group.
10) It performs a key rotation for the CONTROL channel in the
usual way.
All listeners will receive the DTLSMulticastReconnect messages on
the CONTROL channel in the usual way. Each listener inspects the
"controller_magic" value and if it is new, drops its current MEMBER
connection (which is no longer valid) and reconnects to the new
group in the usual way.
>> A listener MUST ignore DTLSMulticastReconnect messages if they have
the same "controller_magic" value as a previous
DTLSMulticastReconnect message and the listener has already
reconnected (or is in the process of reconnecting) to the group as a
result of the earlier message.
>> The new controller SHOULD attempt to preserve the SENDER channel
assigned to each sender when it reconnects to the group unless there
is a conflict.
Even if a controller fails, normal application traffic can continue
to flow on the SENDER channels while the detection, election,
reconnect and key rotation actions are taking place. If these
actions all complete before any of the sender sequence numbers would
need to wrap, there will be no impact on the flow of application
data.
New clients will not be able to connect to the group after a
controller has failed until the election process has completed.
18. Acknowledgements
Parts of this document are a byproduct of the "aSSURE" project,
partially funded by Innovate UK. It is provided "as is" and without
any express or implied warranties,including, without limitation, the
implied warranties of fitness for a particular purpose. The views
and conclusion contained herein are those of the author and should
not be interpreted as necessarily representing the official
policies or endorsements, either expressed or implied, of the aSSURE
project or Innovate UK.
19. Security Considerations
DTLS Multicast is all about security. Minor changes, for example
adding headers in the frame before the traffic data helps
establishes secure channels between 1 to N or M to N end nodes.
20. IANA Considerations
Lucas Expires March 17, 2018 [Page 26]
Internet-Draft DTLS Multicast September 2017
None
21. References
21.1 Normative References
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, March 1997.
[RFC4279] Eronen, P., Ed., and H. Tschofenig, Ed., "Pre-Shared Key
Ciphersuites for Transport Layer Security (TLS)", RFC
4279, DOI 10.17487/RFC4279, December 2005,
<http://www.rfc-editor.org/info/rfc4279>.
[RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security
(TLS)
Protocol Version 1.2", RFC 5246, DOI 10.17487/RFC5246,
August 2008,
<http://www.rfc-editor.org/info/rfc5246>.
[RFC5847] Badra, M., "Pre-Shared Key Cipher Suites for TLS with
SHA-256/384 and AES Galois Counter Mode", RFC 5487,
DOI 10.17487/RFC5487, March 2009,
<http://www.rfc-editor.org/info/rfc5487>.
21.2 Informative References
[RFC3740] Hardjono, T. and B. Weis, "The Multicast Group Security
Architecture", RFC 3740, DOI 10.17487/RFC3740, March 2004,
<http://www.rfc-editor.org/info/rfc3740>.
[I-D. keoh-dice-multicast-security]
Keoh, S., Kumar, S., Garcia-Morchon, O., Dijk, E., and A.
Rahman, "DTLS-based Multicast Security in Constrained
Environments", expired, draft-keoh-dice-
multicast-security-08, July 2014,
https://datatracker.ietf.org/doc/draft-keoh-dice-
multicast-security/
https://www.ietf.org/archive/id/draft-keoh-dice-
multicast-security-08.txt
[I-D. keoh-tls-multicast-security]
Keoh, S., Kumar, S., Garcia-Morchon, O., Dijk, E.,
"DTLS-based Multicast Security for Low-Power and
Lossy Networks (LLNs), expired, draft-keoh-tls-multicast-
security-00, October 2012,
https://tools.ietf.org/html/draft-keoh-tls-multicast-00,
https://www.ietf.org/proceedings/85/slides/slides-85-tls-
.pdf
Author's Address
Lucas Expires March 17, 2018 [Page 27]
Internet-Draft DTLS Multicast September 2017
Roger Lucas
c/o Cisco International Limited
10, New Square Park
Bedfont Lakes
Feltham
TW14 8HA
United Kingdom
Email: iot@hiddenengine.co.uk
Lucas Expires March 17, 2018 [Page 28]