| < draft-ietf-core-oscore-groupcomm-10.txt | draft-ietf-core-oscore-groupcomm-11.txt > | |||
|---|---|---|---|---|
| CoRE Working Group M. Tiloca | CoRE Working Group M. Tiloca | |||
| Internet-Draft RISE AB | Internet-Draft RISE AB | |||
| Intended status: Standards Track G. Selander | Intended status: Standards Track G. Selander | |||
| Expires: May 6, 2021 F. Palombini | Expires: August 26, 2021 F. Palombini | |||
| J. Mattsson | ||||
| Ericsson AB | Ericsson AB | |||
| J. Park | J. Park | |||
| Universitaet Duisburg-Essen | Universitaet Duisburg-Essen | |||
| November 02, 2020 | February 22, 2021 | |||
| Group OSCORE - Secure Group Communication for CoAP | Group OSCORE - Secure Group Communication for CoAP | |||
| draft-ietf-core-oscore-groupcomm-10 | draft-ietf-core-oscore-groupcomm-11 | |||
| Abstract | Abstract | |||
| This document defines Group Object Security for Constrained RESTful | This document defines Group Object Security for Constrained RESTful | |||
| Environments (Group OSCORE), providing end-to-end security of CoAP | Environments (Group OSCORE), providing end-to-end security of CoAP | |||
| messages exchanged between members of a group, e.g. sent over IP | messages exchanged between members of a group, e.g. sent over IP | |||
| multicast. In particular, the described approach defines how OSCORE | multicast. In particular, the described approach defines how OSCORE | |||
| is used in a group communication setting to provide source | is used in a group communication setting to provide source | |||
| authentication for CoAP group requests, sent by a client to multiple | authentication for CoAP group requests, sent by a client to multiple | |||
| servers, and for protection of the corresponding CoAP responses. | servers, and for protection of the corresponding CoAP responses. | |||
| skipping to change at page 1, line 40 ¶ | skipping to change at page 1, line 41 ¶ | |||
| 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 May 6, 2021. | This Internet-Draft will expire on August 26, 2021. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2020 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 | Provisions Relating to IETF Documents | |||
| (https://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
| to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
| include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
| the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
| skipping to change at page 2, line 21 ¶ | skipping to change at page 2, line 22 ¶ | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 6 | 1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 2. Security Context . . . . . . . . . . . . . . . . . . . . . . 7 | 2. Security Context . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 2.1. Common Context . . . . . . . . . . . . . . . . . . . . . 9 | 2.1. Common Context . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 2.1.1. ID Context . . . . . . . . . . . . . . . . . . . . . 9 | 2.1.1. ID Context . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 2.1.2. Counter Signature Algorithm . . . . . . . . . . . . . 9 | 2.1.2. Counter Signature Algorithm . . . . . . . . . . . . . 9 | |||
| 2.1.3. Counter Signature Parameters . . . . . . . . . . . . 9 | 2.1.3. Counter Signature Parameters . . . . . . . . . . . . 9 | |||
| 2.1.4. Secret Derivation Algorithm . . . . . . . . . . . . . 10 | 2.1.4. Secret Derivation Algorithm . . . . . . . . . . . . . 10 | |||
| 2.1.5. Secret Derivation Parameters . . . . . . . . . . . . 10 | 2.1.5. Secret Derivation Parameters . . . . . . . . . . . . 11 | |||
| 2.2. Sender Context and Recipient Context . . . . . . . . . . 11 | 2.2. Sender Context and Recipient Context . . . . . . . . . . 11 | |||
| 2.3. Pairwise Keys . . . . . . . . . . . . . . . . . . . . . . 12 | 2.3. Pairwise Keys . . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 2.3.1. Derivation of Pairwise Keys . . . . . . . . . . . . . 12 | 2.3.1. Derivation of Pairwise Keys . . . . . . . . . . . . . 12 | |||
| 2.3.2. Usage of Sequence Numbers . . . . . . . . . . . . . . 13 | 2.3.2. Usage of Sequence Numbers . . . . . . . . . . . . . . 13 | |||
| 2.3.3. Security Context for Pairwise Mode . . . . . . . . . 13 | 2.3.3. Security Context for Pairwise Mode . . . . . . . . . 14 | |||
| 2.4. Update of Security Context . . . . . . . . . . . . . . . 14 | 2.4. Update of Security Context . . . . . . . . . . . . . . . 14 | |||
| 2.4.1. Loss of Mutable Security Context . . . . . . . . . . 14 | 2.4.1. Loss of Mutable Security Context . . . . . . . . . . 15 | |||
| 2.4.2. Exhaustion of Sender Sequence Number . . . . . . . . 15 | 2.4.2. Exhaustion of Sender Sequence Number . . . . . . . . 16 | |||
| 2.4.3. Retrieving New Security Context Parameters . . . . . 16 | 2.4.3. Retrieving New Security Context Parameters . . . . . 17 | |||
| 3. The Group Manager . . . . . . . . . . . . . . . . . . . . . . 18 | 3. The Group Manager . . . . . . . . . . . . . . . . . . . . . . 19 | |||
| 3.1. Management of Group Keying Material . . . . . . . . . . . 19 | 3.1. Management of Group Keying Material . . . . . . . . . . . 20 | |||
| 3.2. Responsibilities of the Group Manager . . . . . . . . . . 20 | 3.2. Responsibilities of the Group Manager . . . . . . . . . . 21 | |||
| 4. The COSE Object . . . . . . . . . . . . . . . . . . . . . . . 21 | 4. The COSE Object . . . . . . . . . . . . . . . . . . . . . . . 23 | |||
| 4.1. Counter Signature . . . . . . . . . . . . . . . . . . . . 21 | 4.1. Counter Signature . . . . . . . . . . . . . . . . . . . . 23 | |||
| 4.2. The 'kid' and 'kid context' parameters . . . . . . . . . 21 | 4.2. The 'kid' and 'kid context' parameters . . . . . . . . . 23 | |||
| 4.3. external_aad . . . . . . . . . . . . . . . . . . . . . . 22 | 4.3. external_aad . . . . . . . . . . . . . . . . . . . . . . 23 | |||
| 4.3.1. external_aad for Encryption . . . . . . . . . . . . . 22 | 5. OSCORE Header Compression . . . . . . . . . . . . . . . . . . 25 | |||
| 4.3.2. external_aad for Signing . . . . . . . . . . . . . . 23 | 5.1. Examples of Compressed COSE Objects . . . . . . . . . . . 26 | |||
| 5. OSCORE Header Compression . . . . . . . . . . . . . . . . . . 24 | 5.1.1. Examples in Group Mode . . . . . . . . . . . . . . . 26 | |||
| 5.1. Examples of Compressed COSE Objects . . . . . . . . . . . 25 | 5.1.2. Examples in Pairwise Mode . . . . . . . . . . . . . . 27 | |||
| 5.1.1. Examples in Group Mode . . . . . . . . . . . . . . . 25 | ||||
| 5.1.2. Examples in Pairwise Mode . . . . . . . . . . . . . . 26 | ||||
| 6. Message Binding, Sequence Numbers, Freshness and Replay | 6. Message Binding, Sequence Numbers, Freshness and Replay | |||
| Protection . . . . . . . . . . . . . . . . . . . . . . . . . 27 | Protection . . . . . . . . . . . . . . . . . . . . . . . . . 28 | |||
| 6.1. Update of Replay Window . . . . . . . . . . . . . . . . . 27 | 6.1. Update of Replay Window . . . . . . . . . . . . . . . . . 28 | |||
| 7. Message Reception . . . . . . . . . . . . . . . . . . . . . . 28 | 6.2. Message Freshness . . . . . . . . . . . . . . . . . . . . 29 | |||
| 8. Message Processing in Group Mode . . . . . . . . . . . . . . 29 | 7. Message Reception . . . . . . . . . . . . . . . . . . . . . . 29 | |||
| 8.1. Protecting the Request . . . . . . . . . . . . . . . . . 29 | 8. Message Processing in Group Mode . . . . . . . . . . . . . . 30 | |||
| 8.1.1. Supporting Observe . . . . . . . . . . . . . . . . . 30 | 8.1. Protecting the Request . . . . . . . . . . . . . . . . . 31 | |||
| 8.2. Verifying the Request . . . . . . . . . . . . . . . . . . 31 | 8.1.1. Supporting Observe . . . . . . . . . . . . . . . . . 31 | |||
| 8.2.1. Supporting Observe . . . . . . . . . . . . . . . . . 32 | 8.2. Verifying the Request . . . . . . . . . . . . . . . . . . 32 | |||
| 8.3. Protecting the Response . . . . . . . . . . . . . . . . . 32 | 8.2.1. Supporting Observe . . . . . . . . . . . . . . . . . 34 | |||
| 8.3.1. Supporting Observe . . . . . . . . . . . . . . . . . 33 | 8.3. Protecting the Response . . . . . . . . . . . . . . . . . 34 | |||
| 8.4. Verifying the Response . . . . . . . . . . . . . . . . . 34 | 8.3.1. Supporting Observe . . . . . . . . . . . . . . . . . 35 | |||
| 8.4.1. Supporting Observe . . . . . . . . . . . . . . . . . 34 | 8.4. Verifying the Response . . . . . . . . . . . . . . . . . 35 | |||
| 9. Message Processing in Pairwise Mode . . . . . . . . . . . . . 35 | 8.4.1. Supporting Observe . . . . . . . . . . . . . . . . . 36 | |||
| 9.1. Pre-Conditions . . . . . . . . . . . . . . . . . . . . . 36 | 9. Message Processing in Pairwise Mode . . . . . . . . . . . . . 37 | |||
| 9.2. Protecting the Request . . . . . . . . . . . . . . . . . 36 | 9.1. Pre-Conditions . . . . . . . . . . . . . . . . . . . . . 38 | |||
| 9.3. Verifying the Request . . . . . . . . . . . . . . . . . . 37 | 9.2. Main Differences from OSCORE . . . . . . . . . . . . . . 38 | |||
| 9.4. Protecting the Response . . . . . . . . . . . . . . . . . 37 | 9.3. Protecting the Request . . . . . . . . . . . . . . . . . 39 | |||
| 9.5. Verifying the Response . . . . . . . . . . . . . . . . . 38 | 9.4. Verifying the Request . . . . . . . . . . . . . . . . . . 39 | |||
| 10. Security Considerations . . . . . . . . . . . . . . . . . . . 38 | 9.5. Protecting the Response . . . . . . . . . . . . . . . . . 39 | |||
| 10.1. Group-level Security . . . . . . . . . . . . . . . . . . 39 | 9.6. Verifying the Response . . . . . . . . . . . . . . . . . 40 | |||
| 10.2. Uniqueness of (key, nonce) . . . . . . . . . . . . . . . 40 | 10. Security Considerations . . . . . . . . . . . . . . . . . . . 40 | |||
| 10.3. Management of Group Keying Material . . . . . . . . . . 40 | 10.1. Group-level Security . . . . . . . . . . . . . . . . . . 41 | |||
| 10.4. Update of Security Context and Key Rotation . . . . . . 41 | 10.2. Uniqueness of (key, nonce) . . . . . . . . . . . . . . . 42 | |||
| 10.4.1. Late Update on the Sender . . . . . . . . . . . . . 41 | 10.3. Management of Group Keying Material . . . . . . . . . . 42 | |||
| 10.4.2. Late Update on the Recipient . . . . . . . . . . . . 42 | 10.4. Update of Security Context and Key Rotation . . . . . . 43 | |||
| 10.5. Collision of Group Identifiers . . . . . . . . . . . . . 42 | 10.4.1. Late Update on the Sender . . . . . . . . . . . . . 43 | |||
| 10.6. Cross-group Message Injection . . . . . . . . . . . . . 43 | 10.4.2. Late Update on the Recipient . . . . . . . . . . . . 44 | |||
| 10.6.1. Attack Description . . . . . . . . . . . . . . . . . 43 | 10.5. Collision of Group Identifiers . . . . . . . . . . . . . 44 | |||
| 10.6.2. Attack Prevention in Group Mode . . . . . . . . . . 44 | 10.6. Cross-group Message Injection . . . . . . . . . . . . . 45 | |||
| 10.7. Group OSCORE for Unicast Requests . . . . . . . . . . . 45 | 10.6.1. Attack Description . . . . . . . . . . . . . . . . . 45 | |||
| 10.8. End-to-end Protection . . . . . . . . . . . . . . . . . 46 | 10.6.2. Attack Prevention in Group Mode . . . . . . . . . . 46 | |||
| 10.9. Master Secret . . . . . . . . . . . . . . . . . . . . . 46 | 10.7. Group OSCORE for Unicast Requests . . . . . . . . . . . 47 | |||
| 10.10. Replay Protection . . . . . . . . . . . . . . . . . . . 47 | 10.8. End-to-end Protection . . . . . . . . . . . . . . . . . 48 | |||
| 10.11. Client Aliveness . . . . . . . . . . . . . . . . . . . . 48 | 10.9. Master Secret . . . . . . . . . . . . . . . . . . . . . 48 | |||
| 10.12. Cryptographic Considerations . . . . . . . . . . . . . . 48 | 10.10. Replay Protection . . . . . . . . . . . . . . . . . . . 49 | |||
| 10.13. Message Segmentation . . . . . . . . . . . . . . . . . . 49 | 10.11. Message Freshness . . . . . . . . . . . . . . . . . . . 49 | |||
| 10.14. Privacy Considerations . . . . . . . . . . . . . . . . . 49 | 10.12. Client Aliveness . . . . . . . . . . . . . . . . . . . . 50 | |||
| 11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 50 | 10.13. Cryptographic Considerations . . . . . . . . . . . . . . 50 | |||
| 11.1. OSCORE Flag Bits Registry . . . . . . . . . . . . . . . 50 | 10.14. Message Segmentation . . . . . . . . . . . . . . . . . . 51 | |||
| 12. References . . . . . . . . . . . . . . . . . . . . . . . . . 50 | 10.15. Privacy Considerations . . . . . . . . . . . . . . . . . 51 | |||
| 12.1. Normative References . . . . . . . . . . . . . . . . . . 50 | 11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 52 | |||
| 12.2. Informative References . . . . . . . . . . . . . . . . . 52 | 11.1. OSCORE Flag Bits Registry . . . . . . . . . . . . . . . 52 | |||
| Appendix A. Assumptions and Security Objectives . . . . . . . . 54 | 12. References . . . . . . . . . . . . . . . . . . . . . . . . . 52 | |||
| A.1. Assumptions . . . . . . . . . . . . . . . . . . . . . . . 55 | 12.1. Normative References . . . . . . . . . . . . . . . . . . 52 | |||
| A.2. Security Objectives . . . . . . . . . . . . . . . . . . . 56 | 12.2. Informative References . . . . . . . . . . . . . . . . . 54 | |||
| Appendix B. List of Use Cases . . . . . . . . . . . . . . . . . 57 | Appendix A. Assumptions and Security Objectives . . . . . . . . 56 | |||
| Appendix C. Example of Group Identifier Format . . . . . . . . . 60 | A.1. Assumptions . . . . . . . . . . . . . . . . . . . . . . . 57 | |||
| Appendix D. Set-up of New Endpoints . . . . . . . . . . . . . . 60 | A.2. Security Objectives . . . . . . . . . . . . . . . . . . . 58 | |||
| Appendix E. Examples of Synchronization Approaches . . . . . . . 61 | Appendix B. List of Use Cases . . . . . . . . . . . . . . . . . 59 | |||
| E.1. Best-Effort Synchronization . . . . . . . . . . . . . . . 61 | Appendix C. Example of Group Identifier Format . . . . . . . . . 61 | |||
| E.2. Baseline Synchronization . . . . . . . . . . . . . . . . 62 | Appendix D. Set-up of New Endpoints . . . . . . . . . . . . . . 62 | |||
| E.3. Challenge-Response Synchronization . . . . . . . . . . . 62 | Appendix E. Challenge-Response Synchronization . . . . . . . . . 63 | |||
| Appendix F. No Verification of Signatures in Group Mode . . . . 65 | Appendix F. No Verification of Signatures in Group Mode . . . . 66 | |||
| Appendix G. Example Values with COSE Capabilities . . . . . . . 66 | Appendix G. Example Values with COSE Capabilities . . . . . . . 67 | |||
| Appendix H. Document Updates . . . . . . . . . . . . . . . . . . 67 | Appendix H. Parameter Extensibility for Future COSE Algorithms . 68 | |||
| H.1. Version -09 to -10 . . . . . . . . . . . . . . . . . . . 67 | H.1. Counter Signature Parameters . . . . . . . . . . . . . . 68 | |||
| H.2. Version -08 to -09 . . . . . . . . . . . . . . . . . . . 68 | H.2. Secret Derivation Parameters . . . . . . . . . . . . . . 69 | |||
| H.3. Version -07 to -08 . . . . . . . . . . . . . . . . . . . 69 | H.3. 'par_countersign' in the external_aad . . . . . . . . . . 69 | |||
| H.4. Version -06 to -07 . . . . . . . . . . . . . . . . . . . 70 | Appendix I. Document Updates . . . . . . . . . . . . . . . . . . 71 | |||
| H.5. Version -05 to -06 . . . . . . . . . . . . . . . . . . . 71 | I.1. Version -10 to -11 . . . . . . . . . . . . . . . . . . . 71 | |||
| H.6. Version -04 to -05 . . . . . . . . . . . . . . . . . . . 72 | I.2. Version -09 to -10 . . . . . . . . . . . . . . . . . . . 72 | |||
| H.7. Version -03 to -04 . . . . . . . . . . . . . . . . . . . 72 | I.3. Version -08 to -09 . . . . . . . . . . . . . . . . . . . 72 | |||
| H.8. Version -02 to -03 . . . . . . . . . . . . . . . . . . . 73 | I.4. Version -07 to -08 . . . . . . . . . . . . . . . . . . . 73 | |||
| H.9. Version -01 to -02 . . . . . . . . . . . . . . . . . . . 74 | I.5. Version -06 to -07 . . . . . . . . . . . . . . . . . . . 75 | |||
| H.10. Version -00 to -01 . . . . . . . . . . . . . . . . . . . 74 | I.6. Version -05 to -06 . . . . . . . . . . . . . . . . . . . 75 | |||
| Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . 75 | I.7. Version -04 to -05 . . . . . . . . . . . . . . . . . . . 76 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 75 | I.8. Version -03 to -04 . . . . . . . . . . . . . . . . . . . 76 | |||
| I.9. Version -02 to -03 . . . . . . . . . . . . . . . . . . . 77 | ||||
| I.10. Version -01 to -02 . . . . . . . . . . . . . . . . . . . 78 | ||||
| I.11. Version -00 to -01 . . . . . . . . . . . . . . . . . . . 79 | ||||
| Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . 79 | ||||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 80 | ||||
| 1. Introduction | 1. Introduction | |||
| The Constrained Application Protocol (CoAP) [RFC7252] is a web | The Constrained Application Protocol (CoAP) [RFC7252] is a web | |||
| transfer protocol specifically designed for constrained devices and | transfer protocol specifically designed for constrained devices and | |||
| networks [RFC7228]. Group communication for CoAP | networks [RFC7228]. Group communication for CoAP | |||
| [I-D.ietf-core-groupcomm-bis] addresses use cases where deployed | [I-D.ietf-core-groupcomm-bis] addresses use cases where deployed | |||
| devices benefit from a group communication model, for example to | devices benefit from a group communication model, for example to | |||
| reduce latencies, improve performance and reduce bandwidth | reduce latencies, improve performance and reduce bandwidth | |||
| utilization. Use cases include lighting control, integrated building | utilization. Use cases include lighting control, integrated building | |||
| skipping to change at page 4, line 39 ¶ | skipping to change at page 4, line 43 ¶ | |||
| protocol for Group communication for CoAP | protocol for Group communication for CoAP | |||
| [I-D.ietf-core-groupcomm-bis]. | [I-D.ietf-core-groupcomm-bis]. | |||
| Object Security for Constrained RESTful Environments (OSCORE) | Object Security for Constrained RESTful Environments (OSCORE) | |||
| [RFC8613] describes a security protocol based on the exchange of | [RFC8613] describes a security protocol based on the exchange of | |||
| protected CoAP messages. OSCORE builds on CBOR Object Signing and | protected CoAP messages. OSCORE builds on CBOR Object Signing and | |||
| Encryption (COSE) | Encryption (COSE) | |||
| [I-D.ietf-cose-rfc8152bis-struct][I-D.ietf-cose-rfc8152bis-algs] and | [I-D.ietf-cose-rfc8152bis-struct][I-D.ietf-cose-rfc8152bis-algs] and | |||
| provides end-to-end encryption, integrity, replay protection and | provides end-to-end encryption, integrity, replay protection and | |||
| binding of response to request between a sender and a recipient, | binding of response to request between a sender and a recipient, | |||
| independent of transport also in the presence of intermediaries. To | independent of the transport layer also in the presence of | |||
| this end, a CoAP message is protected by including its payload (if | intermediaries. To this end, a CoAP message is protected by | |||
| any), certain options, and header fields in a COSE object, which | including its payload (if any), certain options, and header fields in | |||
| replaces the authenticated and encrypted fields in the protected | a COSE object, which replaces the authenticated and encrypted fields | |||
| message. | in the protected message. | |||
| This document defines Group OSCORE, providing the same end-to-end | This document defines Group OSCORE, providing the same end-to-end | |||
| security properties as OSCORE in the case where CoAP requests have | security properties as OSCORE in the case where CoAP requests have | |||
| multiple recipients. In particular, the described approach defines | multiple recipients. In particular, the described approach defines | |||
| how OSCORE is used in a group communication setting to provide source | how OSCORE is used in a group communication setting to provide source | |||
| authentication for CoAP group requests, sent by a client to multiple | authentication for CoAP group requests, sent by a client to multiple | |||
| servers, and for protection of the corresponding CoAP responses. | servers, and for protection of the corresponding CoAP responses. | |||
| Just like OSCORE, Group OSCORE is independent of transport layer and | Just like OSCORE, Group OSCORE is independent of the transport layer | |||
| works wherever CoAP does. Group communication for CoAP | and works wherever CoAP does. Group communication for CoAP | |||
| [I-D.ietf-core-groupcomm-bis] uses UDP/IP multicast as the underlying | [I-D.ietf-core-groupcomm-bis] uses UDP/IP multicast as the underlying | |||
| data transport. | data transport. | |||
| As with OSCORE, it is possible to combine Group OSCORE with | As with OSCORE, it is possible to combine Group OSCORE with | |||
| communication security on other layers. One example is the use of | communication security on other layers. One example is the use of | |||
| transport layer security, such as DTLS | transport layer security, such as DTLS | |||
| [RFC6347][I-D.ietf-tls-dtls13], between one client and one proxy (and | [RFC6347][I-D.ietf-tls-dtls13], between one client and one proxy (and | |||
| vice versa), or between one proxy and one server (and vice versa), in | vice versa), or between one proxy and one server (and vice versa), in | |||
| order to protect the routing information of packets from observers. | order to protect the routing information of packets from observers. | |||
| Note that DTLS does not define how to secure messages sent over IP | Note that DTLS does not define how to secure messages sent over IP | |||
| skipping to change at page 6, line 26 ¶ | skipping to change at page 6, line 30 ¶ | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
| "OPTIONAL" in this document are to be interpreted as described in BCP | "OPTIONAL" in this document are to be interpreted as described in BCP | |||
| 14 [RFC2119] [RFC8174] when, and only when, they appear in all | 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
| capitals, as shown here. | capitals, as shown here. | |||
| Readers are expected to be familiar with the terms and concepts | Readers are expected to be familiar with the terms and concepts | |||
| described in CoAP [RFC7252] including "endpoint", "client", "server", | described in CoAP [RFC7252] including "endpoint", "client", "server", | |||
| "sender" and "recipient"; group communication for CoAP | "sender" and "recipient"; group communication for CoAP | |||
| [I-D.ietf-core-groupcomm-bis]; CBOR [I-D.ietf-cbor-7049bis]; COSE | [I-D.ietf-core-groupcomm-bis]; CBOR [RFC8949]; COSE | |||
| [I-D.ietf-cose-rfc8152bis-struct][I-D.ietf-cose-rfc8152bis-algs] and | [I-D.ietf-cose-rfc8152bis-struct][I-D.ietf-cose-rfc8152bis-algs] and | |||
| related counter signatures [I-D.ietf-cose-countersign]. | related counter signatures [I-D.ietf-cose-countersign]. | |||
| Readers are also expected to be familiar with the terms and concepts | Readers are also expected to be familiar with the terms and concepts | |||
| for protection and processing of CoAP messages through OSCORE, such | for protection and processing of CoAP messages through OSCORE, such | |||
| as "Security Context" and "Master Secret", defined in [RFC8613]. | as "Security Context" and "Master Secret", defined in [RFC8613]. | |||
| Terminology for constrained environments, such as "constrained | Terminology for constrained environments, such as "constrained | |||
| device" and "constrained-node network", is defined in [RFC7228]. | device" and "constrained-node network", is defined in [RFC7228]. | |||
| This document refers also to the following terminology. | This document refers also to the following terminology. | |||
| o Keying material: data that is necessary to establish and maintain | o Keying material: data that is necessary to establish and maintain | |||
| secure communication among endpoints. This includes, for | secure communication among endpoints. This includes, for | |||
| instance, keys and IVs [RFC4949]. | instance, keys and IVs [RFC4949]. | |||
| o Group: a set of endpoints that share group keying material and | o Group: a set of endpoints that share group keying material and | |||
| security parameters (Common Context, see Section 2). Unless | security parameters (Common Context, see Section 2). That is, | |||
| specified otherwise, the term group used in this specification | unless otherwise specified, the term group used in this | |||
| refers thus to a "security group" (see Section 2.1 of | specification refers to a "security group" (see Section 2.1 of | |||
| [I-D.ietf-core-groupcomm-bis]), not to be confused with "CoAP | [I-D.ietf-core-groupcomm-bis]), not to be confused with "CoAP | |||
| group" or "application group". | group" or "application group". | |||
| o Group Manager: entity responsible for a group. Each endpoint in a | o Group Manager: entity responsible for a group. Each endpoint in a | |||
| group communicates securely with the respective Group Manager, | group communicates securely with the respective Group Manager, | |||
| which is neither required to be an actual group member nor to take | which is neither required to be an actual group member nor to take | |||
| part in the group communication. The full list of | part in the group communication. The full list of | |||
| responsibilities of the Group Manager is provided in Section 3.2. | responsibilities of the Group Manager is provided in Section 3.2. | |||
| o Silent server: member of a group that never sends protected | o Silent server: member of a group that never sends protected | |||
| skipping to change at page 10, line 19 ¶ | skipping to change at page 10, line 23 ¶ | |||
| [I-D.ietf-cose-rfc8152bis-algs]). | [I-D.ietf-cose-rfc8152bis-algs]). | |||
| o The second element is the array of COSE capabilities for the COSE | o The second element is the array of COSE capabilities for the COSE | |||
| key type associated to Counter Signature Algorithm, as specified | key type associated to Counter Signature Algorithm, as specified | |||
| for that key type in the "Capabilities" column of the "COSE Key | for that key type in the "Capabilities" column of the "COSE Key | |||
| Types" Registry [COSE.Key.Types] (see Section 8.2 of | Types" Registry [COSE.Key.Types] (see Section 8.2 of | |||
| [I-D.ietf-cose-rfc8152bis-algs]). | [I-D.ietf-cose-rfc8152bis-algs]). | |||
| Examples of Counter Signature Parameters are in Appendix G. | Examples of Counter Signature Parameters are in Appendix G. | |||
| This format is consistent with every counter signature algorithm | ||||
| currently considered in [I-D.ietf-cose-rfc8152bis-algs], i.e. with | ||||
| algorithms that have only the COSE key type as their COSE capability. | ||||
| Appendix H describes how Counter Signature Parameters can be | ||||
| generalized for possible future registered algorithms having a | ||||
| different set of COSE capabilities. | ||||
| 2.1.4. Secret Derivation Algorithm | 2.1.4. Secret Derivation Algorithm | |||
| Secret Derivation Algorithm identifies the elliptic curve Diffie- | Secret Derivation Algorithm identifies the elliptic curve Diffie- | |||
| Hellman algorithm used to derive a static-static Diffie-Hellman | Hellman algorithm used to derive a static-static Diffie-Hellman | |||
| shared secret, from which pairwise keys are derived (see | shared secret, from which pairwise keys are derived (see | |||
| Section 2.3.1) to protect messages with the pairwise mode (see | Section 2.3.1) to protect messages with the pairwise mode (see | |||
| Section 9). | Section 9). | |||
| This parameter is immutable once the Common Context is established. | This parameter is immutable once the Common Context is established. | |||
| Secret Derivation Algorithm MUST take value from the "Value" column | Secret Derivation Algorithm MUST take value from the "Value" column | |||
| skipping to change at page 11, line 16 ¶ | skipping to change at page 11, line 30 ¶ | |||
| [I-D.ietf-cose-rfc8152bis-algs]). | [I-D.ietf-cose-rfc8152bis-algs]). | |||
| o The second element is the array of COSE capabilities for the COSE | o The second element is the array of COSE capabilities for the COSE | |||
| key type associated to Secret Derivation Algorithm, as specified | key type associated to Secret Derivation Algorithm, as specified | |||
| for that key type in the "Capabilities" column of the "COSE Key | for that key type in the "Capabilities" column of the "COSE Key | |||
| Types" Registry [COSE.Key.Types] (see Section 8.2 of | Types" Registry [COSE.Key.Types] (see Section 8.2 of | |||
| [I-D.ietf-cose-rfc8152bis-algs]). | [I-D.ietf-cose-rfc8152bis-algs]). | |||
| Examples of Secret Derivation Parameters are in Appendix G. | Examples of Secret Derivation Parameters are in Appendix G. | |||
| This format is consistent with every elliptic curve Diffie-Hellman | ||||
| algorithm currently considered in [I-D.ietf-cose-rfc8152bis-algs], | ||||
| i.e. with algorithms that have only the COSE key type as their COSE | ||||
| capability. Appendix H describes how Secret Derivation Parameters | ||||
| can be generalized for possible future registered algorithms having a | ||||
| different set of COSE capabilities. | ||||
| 2.2. Sender Context and Recipient Context | 2.2. Sender Context and Recipient Context | |||
| OSCORE specifies the derivation of Sender Context and Recipient | OSCORE specifies the derivation of Sender Context and Recipient | |||
| Context, specifically of Sender/Recipient Keys and Common IV, from a | Context, specifically of Sender/Recipient Keys and Common IV, from a | |||
| set of input parameters (see Section 3.2 of [RFC8613]). This | set of input parameters (see Section 3.2 of [RFC8613]). This | |||
| derivation applies also to Group OSCORE, and the mandatory-to- | derivation applies also to Group OSCORE, and the mandatory-to- | |||
| implement HKDF and AEAD algorithms are the same as in [RFC8613]. The | implement HKDF and AEAD algorithms are the same as in [RFC8613]. The | |||
| Sender ID SHALL be unique for each endpoint in a group with a fixed | Sender ID SHALL be unique for each endpoint in a group with a fixed | |||
| Master Secret, Master Salt and Group Identifier (see Section 3.3 of | Master Secret, Master Salt and Group Identifier (see Section 3.3 of | |||
| [RFC8613]). | [RFC8613]). | |||
| For Group OSCORE, the Sender Context and Recipient Context | For Group OSCORE, the Sender Context and Recipient Context | |||
| additionally contain asymmetric keys, as described previously in | additionally contain asymmetric keys, as described previously in | |||
| Section 2. The private/public key pair of the sender can, for | Section 2. The private/public key pair of the sender can, for | |||
| example, be generated by the endpoint or provisioned during | example, be generated by the endpoint or provisioned during | |||
| manufacturing. | manufacturing. | |||
| With the exception of the public key of the sender endpoint, a | With the exception of the public key of the sender endpoint and the | |||
| receiver endpoint can derive a complete Security Context from a | possibly associated pairwise keys, a receiver endpoint can derive a | |||
| received Group OSCORE message and the Common Context. The public | complete Security Context from a received Group OSCORE message and | |||
| keys in the Recipient Contexts can be retrieved from the Group | the Common Context. The public keys in the Recipient Contexts can be | |||
| Manager (see Section 3) upon joining the group. A public key can | retrieved from the Group Manager (see Section 3) upon joining the | |||
| alternatively be acquired from the Group Manager at a later time, for | group. A public key can alternatively be acquired from the Group | |||
| example the first time a message is received from a particular | Manager at a later time, for example the first time a message is | |||
| endpoint in the group (see Section 8.2 and Section 8.4). | received from a particular endpoint in the group (see Section 8.2 and | |||
| Section 8.4). | ||||
| For severely constrained devices, it may be not feasible to | For severely constrained devices, it may be not feasible to | |||
| simultaneously handle the ongoing processing of a recently received | simultaneously handle the ongoing processing of a recently received | |||
| message in parallel with the retrieval of the sender endpoint's | message in parallel with the retrieval of the sender endpoint's | |||
| public key. Such devices can be configured to drop a received | public key. Such devices can be configured to drop a received | |||
| message for which there is no (complete) Recipient Context, and | message for which there is no (complete) Recipient Context, and | |||
| retrieve the sender endpoint's public key in order to have it | retrieve the sender endpoint's public key in order to have it | |||
| available to verify subsequent messages from that endpoint. | available to verify subsequent messages from that endpoint. | |||
| Furthermore, sufficiently large replay windows should be considered, | An endpoint admits a maximum amount of Recipient Contexts for a same | |||
| to handle Partial IV values moving forward fast. This can happen | Security Context, e.g. due to memory limitations. After reaching | |||
| when a client engages in frequent or long sequences of one-to-one | that limit, the creation of a new Recipient Context results in an | |||
| exchanges with servers in the group, such as a large number of block- | overflow. When this happens, the endpoint has to delete a current | |||
| wise transfers to a single server. When receiving following group | Recipient Context to install the new one. It is up to the | |||
| requests from that client, other servers in the group may believe to | application to define policies for selecting the current Recipient | |||
| have lost synchronization with the client's Sender Sequence Number. | Context to delete. A newly installed Recipient Context that has | |||
| If these servers use an Echo exchange to re-gain synchronization (see | required to delete another Recipient Context is initialized with an | |||
| Appendix E.3), this in itself may consume a considerable amount of | invalid Replay Window, and accordingly requires the endpoint to take | |||
| client's Sender Sequence Numbers, hence later resulting in the | appropriate actions (see Section 2.4.1.2). | |||
| servers possibly performing a new Echo exchange. | ||||
| 2.3. Pairwise Keys | 2.3. Pairwise Keys | |||
| Certain signature schemes, such as EdDSA and ECDSA, support a secure | Certain signature schemes, such as EdDSA and ECDSA, support a secure | |||
| combined signature and encryption scheme. This section specifies the | combined signature and encryption scheme. This section specifies the | |||
| derivation of "pairwise keys", for use in the pairwise mode of Group | derivation of "pairwise keys", for use in the pairwise mode defined | |||
| OSCORE defined in Section 9. | in Section 9. | |||
| 2.3.1. Derivation of Pairwise Keys | 2.3.1. Derivation of Pairwise Keys | |||
| Using the Group OSCORE Security Context (see Section 2), a group | Using the Group OSCORE Security Context (see Section 2), a group | |||
| member can derive AEAD keys to protect point-to-point communication | member can derive AEAD keys to protect point-to-point communication | |||
| between itself and any other endpoint in the group. The same AEAD | between itself and any other endpoint in the group. The same AEAD | |||
| algorithm as in the group mode is used. The key derivation of these | algorithm as in the group mode is used. The key derivation of these | |||
| so-called pairwise keys follows the same construction as in | so-called pairwise keys follows the same construction as in | |||
| Section 3.2.1 of [RFC8613]: | Section 3.2.1 of [RFC8613]: | |||
| Pairwise Recipient Key = HKDF(Recipient Key, Shared Secret, info, L) | ||||
| Pairwise Sender Key = HKDF(Sender Key, Shared Secret, info, L) | Pairwise Sender Key = HKDF(Sender Key, Shared Secret, info, L) | |||
| Pairwise Recipient Key = HKDF(Recipient Key, Shared Secret, info, L) | ||||
| where: | where: | |||
| o The Pairwise Recipient Key is the AEAD key for processing incoming | ||||
| messages from endpoint X. | ||||
| o The Pairwise Sender Key is the AEAD key for processing outgoing | o The Pairwise Sender Key is the AEAD key for processing outgoing | |||
| messages addressed to endpoint X. | messages addressed to endpoint X. | |||
| o The Pairwise Recipient Key is the AEAD key for processing incoming | ||||
| messages from endpoint X. | ||||
| o HKDF is the HKDF algorithm specified by Secret Derivation | o HKDF is the HKDF algorithm specified by Secret Derivation | |||
| Algorithm from the Common Context (see Section 2.1.4). | Algorithm from the Common Context (see Section 2.1.4). | |||
| o The Shared Secret is computed as a static-static Diffie-Hellman | o The Sender Key and private key are from the Sender Context. The | |||
| shared secret [NIST-800-56A], where the endpoint uses its private | Sender Key is used as salt in the HKDF, when deriving the Pairwise | |||
| key and the public key of the other endpoint X. | Sender Key. | |||
| o The Recipient Key and the public key are from the Recipient | o The Recipient Key and the public key are from the Recipient | |||
| Context associated to endpoint X. | Context associated to endpoint X. The Recipient Key is used as | |||
| salt in the HKDF, when deriving the Pairwise Recipient Key. | ||||
| o The Sender Key and private key are from the Sender Context. | o The Shared Secret is computed as a static-static Diffie-Hellman | |||
| shared secret [NIST-800-56A], where the endpoint uses its private | ||||
| key and the public key of the other endpoint X. The Shared Secret | ||||
| is used as Input Keying Material (IKM) in the HKDF. | ||||
| o info and L are defined as in Section 3.2.1 of [RFC8613]. | o info and L are as defined in Section 3.2.1 of [RFC8613]. | |||
| If EdDSA asymmetric keys are used, the Edward coordinates are mapped | If EdDSA asymmetric keys are used, the Edward coordinates are mapped | |||
| to Montgomery coordinates using the maps defined in Sections 4.1 and | to Montgomery coordinates using the maps defined in Sections 4.1 and | |||
| 4.2 of [RFC7748], before using the X25519 and X448 functions defined | 4.2 of [RFC7748], before using the X25519 and X448 functions defined | |||
| in Section 5 of [RFC7748]. | in Section 5 of [RFC7748]. | |||
| After establishing a partially or completely new Security Context | After establishing a partially or completely new Security Context | |||
| (see Section 3.1 and Section 2.4), the old pairwise keys MUST be | (see Section 2.4 and Section 3.1), the old pairwise keys MUST be | |||
| deleted. Since new Sender/Recipient Keys are derived from the new | deleted. Since new Sender/Recipient Keys are derived from the new | |||
| group keying material (see Section 2.2), every group member MUST use | group keying material (see Section 2.2), every group member MUST use | |||
| the new Sender/Recipient Keys when deriving new pairwise keys. | the new Sender/Recipient Keys when deriving new pairwise keys. | |||
| As long as any two group members preserve the same asymmetric keys, | As long as any two group members preserve the same asymmetric keys, | |||
| their Diffie-Hellman shared secret does not change across updates of | their Diffie-Hellman shared secret does not change across updates of | |||
| the group keying material. | the group keying material. | |||
| 2.3.2. Usage of Sequence Numbers | 2.3.2. Usage of Sequence Numbers | |||
| skipping to change at page 14, line 34 ¶ | skipping to change at page 15, line 10 ¶ | |||
| On the other hand, the mutable parts of the Security Context are | On the other hand, the mutable parts of the Security Context are | |||
| updated by the endpoint when executing the security protocol, but may | updated by the endpoint when executing the security protocol, but may | |||
| nevertheless become outdated, e.g. due to loss of the mutable | nevertheless become outdated, e.g. due to loss of the mutable | |||
| Security Context (see Section 2.4.1) or exhaustion of Sender Sequence | Security Context (see Section 2.4.1) or exhaustion of Sender Sequence | |||
| Numbers (see Section 2.4.2). | Numbers (see Section 2.4.2). | |||
| If it is not feasible or practically possible to store and maintain | If it is not feasible or practically possible to store and maintain | |||
| up-to-date the mutable part in non-volatile memory (e.g., due to | up-to-date the mutable part in non-volatile memory (e.g., due to | |||
| limited number of write operations), the endpoint MUST be able to | limited number of write operations), the endpoint MUST be able to | |||
| detect a loss of the mutable Security Context. | detect a loss of the mutable Security Context and MUST accordingly | |||
| take the actions defined in Section 2.4.1. | ||||
| When a loss of mutable Security Context is detected (e.g., following | ||||
| a reboot), the endpoint MUST NOT protect further messages using this | ||||
| Security Context to avoid reusing a nonce with the same AEAD key, and | ||||
| SHOULD instead retrieve new security parameters from the Group | ||||
| Manager (see Section 2.4.1). | ||||
| 2.4.1. Loss of Mutable Security Context | 2.4.1. Loss of Mutable Security Context | |||
| An endpoint that has lost its mutable Security Context, e.g. due to a | An endpoint may lose its mutable Security Context, e.g. due to a | |||
| reboot, needs to prevent the re-use of a nonce with the same AEAD | reboot (see Section 2.4.1.1) or to an overflow of Recipient Contexts | |||
| key, and to handle incoming replayed messages. | (see Section 2.4.1.2). | |||
| To this end, after a loss of mutable Security Context, the endpoint | In such a case, the endpoint needs to prevent the re-use of a nonce | |||
| SHOULD inform the Group Manager, retrieve new Security Context | with the same AEAD key, and to handle incoming replayed messages. | |||
| parameters from the Group Manager (see Section 2.4.3), and use them | ||||
| to derive a new Sender Context (see Section 2.2). In particular, | ||||
| regardless the exact actions taken by the Group Manager, the endpoint | ||||
| resets its Sender Sequence Number to 0, and derives a new Sender Key. | ||||
| This is in turn used to possibly derive new Pairwise Sender Keys. | ||||
| From then on, the endpoint MUST use its latest installed Sender | 2.4.1.1. Reboot and Total Loss | |||
| Context to protect outgoing messages. | ||||
| If an endpoint is not able to establish an updated Sender Context, | In case a loss of the Sender Context and/or of the Recipient Contexts | |||
| e.g. because of lack of connectivity with the Group Manager, the | is detected (e.g. following a reboot), the endpoint MUST NOT protect | |||
| endpoint MUST NOT protect further messages using the current Security | further messages using this Security Context to avoid reusing an AEAD | |||
| Context. | nonce with the same AEAD key. | |||
| In order to handle the update of Replay Window in Recipient Contexts, | In particular, before resuming its operations in the group, the | |||
| three approaches are discussed in Appendix E. In particular, the | endpoint MUST retrieve new Security Context parameters from the Group | |||
| approach specified in Appendix E.3 and based on the Echo Option | Manager (see Section 2.4.3) and use them to derive a new Sender | |||
| [I-D.ietf-core-echo-request-tag] is a variant of the approach defined | Context (see Section 2.2). Since this includes a newly derived | |||
| in Appendix B.1.2 of [RFC8613] as applicable to Group OSCORE. | Sender Key, the server will not reuse the same pair (key, nonce), | |||
| even when using the Partial IV of (old re-injected) requests to build | ||||
| the AEAD nonce for protecting the corresponding responses. | ||||
| From then on, the endpoint MUST use the latest installed Sender | ||||
| Context to protect outgoing messages. Also, newly created Recipient | ||||
| Contexts will have a Replay Window which is initialized as valid. | ||||
| If not able to establish an updated Sender Context, e.g. because of | ||||
| lack of connectivity with the Group Manager, the endpoint MUST NOT | ||||
| protect further messages using the current Security Context and MUST | ||||
| NOT accept incoming messages from other group members, as currently | ||||
| unable to detect possible replays. | ||||
| 2.4.1.2. Overflow of Recipient Contexts | ||||
| After reaching the maximum amount of Recipient Contexts, an endpoint | ||||
| will experience an overflow when installing a new Recipient Context, | ||||
| as it requires to first delete an existing one (see Section 2.2). | ||||
| Every time this happens, the Replay Window of the new Recipient | ||||
| Context is initialized as not valid. Therefore, the endpoint MUST | ||||
| take the following actions, before accepting request messages from | ||||
| the client associated to the new Recipient Context. | ||||
| If it is not configured as silent server, the endpoint MUST either: | ||||
| o Retrieve new Security Context parameters from the Group Manager | ||||
| and derive a new Sender Context, as defined in Section 2.4.1.1; or | ||||
| o When receiving a first request to process with the new Recipient | ||||
| Context, use the approach specified in Appendix E and based on the | ||||
| Echo Option for CoAP [I-D.ietf-core-echo-request-tag], if | ||||
| supported. In particular, the endpoint MUST use its Partial IV | ||||
| when generating the AEAD nonce and MUST include the Partial IV in | ||||
| the response message conveying the Echo Option. If the endpoint | ||||
| supports the CoAP Echo Option, it is RECOMMENDED to take this | ||||
| approach. | ||||
| If it is configured exclusively as silent server, the endpoint MUST | ||||
| wait for the next group rekeying to occur, in order to derive a new | ||||
| Security Context and re-initialize the Replay Window of each | ||||
| Recipient Contexts as valid. | ||||
| 2.4.2. Exhaustion of Sender Sequence Number | 2.4.2. Exhaustion of Sender Sequence Number | |||
| An endpoint can eventually exhaust the Sender Sequence Number, which | An endpoint can eventually exhaust the Sender Sequence Number, which | |||
| is incremented for each new outgoing message including a Partial IV. | is incremented for each new outgoing message including a Partial IV. | |||
| This is the case for group requests, Observe notifications [RFC7641] | This is the case for group requests, Observe notifications [RFC7641] | |||
| and, optionally, any other response. | and, optionally, any other response. | |||
| Implementations MUST be able to detect an exhaustion of Sender | Implementations MUST be able to detect an exhaustion of Sender | |||
| Sequence Number, after the endpoint has consumed the largest usable | Sequence Number, after the endpoint has consumed the largest usable | |||
| value. If an implementation's integers support wrapping addition, | value. If an implementation's integers support wrapping addition, | |||
| the implementation MUST treat Sender Sequence Number as exhausted | the implementation MUST treat Sender Sequence Number as exhausted | |||
| when a wrap-around is detected. | when a wrap-around is detected. | |||
| Upon exhausting the Sender Sequence Numbers, the endpoint MUST NOT | Upon exhausting the Sender Sequence Numbers, the endpoint MUST NOT | |||
| use this Security Context to protect further messages including a | use this Security Context to protect further messages including a | |||
| Partial IV. | Partial IV. | |||
| The endpoint SHOULD inform the Group Manager, retrieve new Security | The endpoint SHOULD inform the Group Manager, retrieve new Security | |||
| Context parameters from the Group Manager (see Section 2.4.3), and | Context parameters from the Group Manager (see Section 2.4.3), and | |||
| use them to derive a new Sender Context (see Section 2.2). In | use them to derive a new Sender Context (see Section 2.2). | |||
| particular, regardless the exact actions taken by the Group Manager, | ||||
| the endpoint resets its Sender Sequence Number to 0, and derives a | ||||
| new Sender Key. This is in turn used to possibly derive new Pairwise | ||||
| Sender Keys. | ||||
| From then on, the endpoint MUST use its latest installed Sender | From then on, the endpoint MUST use its latest installed Sender | |||
| Context to protect outgoing messages. | Context to protect outgoing messages. | |||
| 2.4.3. Retrieving New Security Context Parameters | 2.4.3. Retrieving New Security Context Parameters | |||
| The Group Manager can assist an endpoint with an incomplete Sender | The Group Manager can assist an endpoint with an incomplete Sender | |||
| Context to retrieve missing data of the Security Context and thereby | Context to retrieve missing data of the Security Context and thereby | |||
| become fully operational in the group again. The two main options | become fully operational in the group again. The two main options | |||
| for the Group Manager are described in this section: i) assignment of | for the Group Manager are described in this section: i) assignment of | |||
| a new Sender ID to the endpoint (see Section 2.4.3.1); and ii) | a new Sender ID to the endpoint (see Section 2.4.3.1); and ii) | |||
| establishment of a new Security Context for the group (see | establishment of a new Security Context for the group (see | |||
| Section 2.4.3.2). Update of Replay Window in Recipient Contexts is | Section 2.4.3.2). The update of the Replay Window in each of the | |||
| discussed in Section 6.1. | Recipient Contexts is discussed in Section 6.1. | |||
| As group membership changes, or as group members get new Sender IDs | As group membership changes, or as group members get new Sender IDs | |||
| (see Section 2.4.3.1) so do the relevant Recipient IDs that the other | (see Section 2.4.3.1) so do the relevant Recipient IDs that the other | |||
| endpoints need to keep track of. As a consequence, group members may | endpoints need to keep track of. As a consequence, group members may | |||
| end up retaining stale Recipient Contexts, that are no longer useful | end up retaining stale Recipient Contexts, that are no longer useful | |||
| to verify incoming secure messages. | to verify incoming secure messages. | |||
| The Recipient ID ('kid') SHOULD NOT be considered as a persistent and | The Recipient ID ('kid') SHOULD NOT be considered as a persistent and | |||
| reliable indicator of a group member. Such an indication can be | reliable indicator of a group member. Such an indication can be | |||
| achieved only by using that member's public key, when verifying | achieved only by using that member's public key, when verifying | |||
| skipping to change at page 16, line 40 ¶ | skipping to change at page 17, line 40 ¶ | |||
| (long-)unused Recipient Contexts and reduce the impact on storage | (long-)unused Recipient Contexts and reduce the impact on storage | |||
| space; as well as ii) check with the Group Manager that a public key | space; as well as ii) check with the Group Manager that a public key | |||
| is currently the one associated to a 'kid' value, after a number of | is currently the one associated to a 'kid' value, after a number of | |||
| consecutive failed verifications. | consecutive failed verifications. | |||
| 2.4.3.1. New Sender ID for the Endpoint | 2.4.3.1. New Sender ID for the Endpoint | |||
| The Group Manager may assign a new Sender ID to an endpoint, while | The Group Manager may assign a new Sender ID to an endpoint, while | |||
| leaving the Gid, Master Secret and Master Salt unchanged in the | leaving the Gid, Master Secret and Master Salt unchanged in the | |||
| group. In this case, the Group Manager MUST assign a Sender ID that | group. In this case, the Group Manager MUST assign a Sender ID that | |||
| has never been assigned before in the group. | has never been assigned before in the group under the current Gid | |||
| value. | ||||
| Having retrieved the new Sender ID, and potentially other missing | Having retrieved the new Sender ID, and potentially other missing | |||
| data of the immutable Security Context, the endpoint can derive a new | data of the immutable Security Context, the endpoint can derive a new | |||
| Sender Context (see Section 2.2). When doing so, the endpoint re- | Sender Context (see Section 2.2). When doing so, the endpoint resets | |||
| initilizes the Sender Sequence Number in its Sender Context to 0. | the Sender Sequence Number in its Sender Context to 0, and derives a | |||
| new Sender Key. This is in turn used to possibly derive new Pairwise | ||||
| Sender Keys. | ||||
| From then on, the endpoint MUST use its latest installed Sender | From then on, the endpoint MUST use its latest installed Sender | |||
| Context to protect outgoing messages. | Context to protect outgoing messages. | |||
| The assignment of a new Sender ID may be the result of different | The assignment of a new Sender ID may be the result of different | |||
| processes. The endpoint may request a new Sender ID, e.g. because of | processes. The endpoint may request a new Sender ID, e.g. because of | |||
| exhaustion of Sender Sequence Numbers (see Section 2.4.2). An | exhaustion of Sender Sequence Numbers (see Section 2.4.2). An | |||
| endpoint may request to re-join the group, e.g. because of losing its | endpoint may request to re-join the group, e.g. because of losing its | |||
| mutable Security Context (see Section 2.4.1), and receive as response | mutable Security Context (see Section 2.4.1), and is provided with a | |||
| a new Sender ID together with the latest immutable Security Context. | new Sender ID together with the latest immutable Security Context. | |||
| For the other group members, the Recipient Context corresponding to | For the other group members, the Recipient Context corresponding to | |||
| the old Sender ID becomes stale (see Section 3.1). | the old Sender ID becomes stale (see Section 3.1). | |||
| 2.4.3.2. New Security Context for the Group | 2.4.3.2. New Security Context for the Group | |||
| The Group Manager may establish a new Security Context for the group | The Group Manager may establish a new Security Context for the group | |||
| (see Section 3.1). The Group Manager does not necessarily establish | (see Section 3.1). The Group Manager does not necessarily establish | |||
| a new Security Context for the group if one member has an outdated | a new Security Context for the group if one member has an outdated | |||
| Security Context (see Section 2.4.3.1), unless that was already | Security Context (see Section 2.4.3.1), unless that was already | |||
| skipping to change at page 18, line 36 ¶ | skipping to change at page 19, line 39 ¶ | |||
| interacts with the group members. The responsibilities of the Group | interacts with the group members. The responsibilities of the Group | |||
| Manager are compiled in Section 3.2. | Manager are compiled in Section 3.2. | |||
| It is RECOMMENDED to use a Group Manager as described in | It is RECOMMENDED to use a Group Manager as described in | |||
| [I-D.ietf-ace-key-groupcomm-oscore], where the join process is based | [I-D.ietf-ace-key-groupcomm-oscore], where the join process is based | |||
| on the ACE framework for authentication and authorization in | on the ACE framework for authentication and authorization in | |||
| constrained environments [I-D.ietf-ace-oauth-authz]. | constrained environments [I-D.ietf-ace-oauth-authz]. | |||
| The Group Manager assigns unique Group Identifiers (Gids) to | The Group Manager assigns unique Group Identifiers (Gids) to | |||
| different groups under its control, as well as unique Sender IDs (and | different groups under its control, as well as unique Sender IDs (and | |||
| thereby Recipient IDs) to the members of those groups. The Group | thereby Recipient IDs) to the members of those groups. According to | |||
| Manager MUST NOT reassign a Sender ID within the same group, and MUST | a hierarchical approach, the Gid value assigned to a group is | |||
| NOT reassign a Gid value to the same group. According to a | ||||
| hierarchical approach, the Gid value assigned to a group is | ||||
| associated to a dedicated space for the values of Sender ID and | associated to a dedicated space for the values of Sender ID and | |||
| Recipient ID of the members of that group. | Recipient ID of the members of that group. | |||
| The Group Manager MUST NOT reassign a Gid value to the same group, | ||||
| and MUST NOT reassign a Sender ID within the same group under the | ||||
| same Gid value. | ||||
| In addition, the Group Manager maintains records of the public keys | In addition, the Group Manager maintains records of the public keys | |||
| of endpoints in a group, and provides information about the group and | of endpoints in a group, and provides information about the group and | |||
| its members to other members and selected roles. Upon nodes' | its members to other group members and selected roles. Upon nodes' | |||
| joining, the Group Manager collects such public keys and MUST verify | joining, the Group Manager collects such public keys and MUST verify | |||
| proof-of-possession of the respective private key. | proof-of-possession of the respective private key. | |||
| An endpoint acquires group data such as the Gid and OSCORE input | An endpoint acquires group data such as the Gid and OSCORE input | |||
| parameters including its own Sender ID from the Group Manager, and | parameters including its own Sender ID from the Group Manager, and | |||
| provides information about its public key to the Group Manager, for | provides information about its public key to the Group Manager, for | |||
| example upon joining the group. | example upon joining the group. | |||
| A group member can retrieve from the Group Manager the public key and | A group member can retrieve from the Group Manager the public key and | |||
| other information associated to another group member, with which it | other information associated to another member of the group, with | |||
| can generate the corresponding Recipient Context. An application can | which it can generate the corresponding Recipient Context. In | |||
| particular, the requested public key is provided together with the | ||||
| Sender ID of the associated group member. An application can | ||||
| configure a group member to asynchronously retrieve information about | configure a group member to asynchronously retrieve information about | |||
| Recipient Contexts, e.g. by Observing [RFC7641] a resource at the | Recipient Contexts, e.g. by Observing [RFC7641] a resource at the | |||
| Group Manager to get updates on the group membership. | Group Manager to get updates on the group membership. | |||
| The Group Manager MAY serve additional entities acting as signature | The Group Manager MAY serve additional entities acting as signature | |||
| checkers, e.g. intermediary gateways. These entities do not join a | checkers, e.g. intermediary gateways. These entities do not join a | |||
| group as members, but can retrieve public keys of group members from | group as members, but can retrieve public keys of group members from | |||
| the Group Manager, in order to verify counter signatures of group | the Group Manager, in order to verify counter signatures of group | |||
| messages. A signature checker MUST be authorized for retrieving | messages. A signature checker MUST be authorized for retrieving | |||
| public keys of members in a specific group from the Group Manager. | public keys of members in a specific group from the Group Manager. | |||
| To this end, the same method mentioned above based on the ACE | To this end, the same method mentioned above based on the ACE | |||
| framework [I-D.ietf-ace-oauth-authz] can be used. | framework [I-D.ietf-ace-oauth-authz] can be used. | |||
| 3.1. Management of Group Keying Material | 3.1. Management of Group Keying Material | |||
| In order to establish a new Security Context for a group, a new Group | In order to establish a new Security Context for a group, a new Group | |||
| Identifier (Gid) for that group and a new value for the Master Secret | Identifier (Gid) for that group and a new value for the Master Secret | |||
| parameter MUST be generated. When distributing the new Gid and | parameter MUST be generated. When distributing the new Gid and | |||
| Master Secret, the Group Manager MAY distribute also a new value for | Master Secret, the Group Manager MAY distribute also a new value for | |||
| the Master Salt parameter, and SHOULD preserve the current value of | the Master Salt parameter, and should preserve the current value of | |||
| the Sender ID of each group member. | the Sender ID of each group member. | |||
| The Group Manager MUST NOT reassign a Gid value to the same group. | The Group Manager MUST NOT reassign a Gid value to the same group. | |||
| That is, each group can have a given Gid at most once during its | That is, every group can have a given Gid at most once during its | |||
| lifetime. An example of Gid format supporting this operation is | lifetime. An example of Gid format supporting this operation is | |||
| provided in Appendix C. | provided in Appendix C. | |||
| The Group Manager MUST NOT reassign a previously used Sender ID | The Group Manager MUST NOT reassign a previously used Sender ID | |||
| ('kid') with the same Gid, Master Secret and Master Salt. Even if | ('kid') with the same Gid, Master Secret and Master Salt. That is, | |||
| Gid and Master Secret are renewed as described in this section, the | the Group Manager MUST NOT reassign a Sender ID value within a same | |||
| Group Manager MUST NOT reassign an endpoint's Sender ID ('kid') | group under the same Gid value (see Section 2.4.3.1). Within this | |||
| within a same group (see Section 2.4.3.1). | restriction, the Group Manager can assign a Sender ID used under an | |||
| old Gid value, thus avoiding Sender ID values to irrecoverably grow | ||||
| in size. | ||||
| Even when an endpoint joining a group is recognized as a current | ||||
| member of that group, e.g. through the ongoing secure communication | ||||
| association, the Group Manager MUST assign a new Sender ID different | ||||
| than the one currently used by the endpoint in the group, unless the | ||||
| group is rekeyed first and a new Gid value is established. | ||||
| Figure 2 overviews the different keying material components, | ||||
| considering their relation and possible reuse across group rekeying. | ||||
| Components changed in lockstep * Changing a kid does not | ||||
| upon a group rekeying need changing the Group ID | ||||
| +----------------------------+ | ||||
| | | * A kid is not reassigned | ||||
| | Master Group |<--> kid1 under the same Group ID | ||||
| | Secret <---> o <---> ID | | ||||
| | ^ |<--> kid2 * Upon changing the Group ID, | ||||
| | | | every current kid should | ||||
| | | |<--> kid3 be preserved for efficient | ||||
| | v | key rollover | ||||
| | Master Salt | ... ... | ||||
| | (optional) | * After changing Group ID, an | ||||
| | | unused kid can be assigned | ||||
| +----------------------------+ | ||||
| Figure 2: Relations among keying material components. | ||||
| If required by the application (see Appendix A.1), it is RECOMMENDED | If required by the application (see Appendix A.1), it is RECOMMENDED | |||
| to adopt a group key management scheme, and securely distribute a new | to adopt a group key management scheme, and securely distribute a new | |||
| value for the Gid and for the Master Secret parameter of the group's | value for the Gid and for the Master Secret parameter of the group's | |||
| Security Context, before a new joining endpoint is added to the group | Security Context, before a new joining endpoint is added to the group | |||
| or after a currently present endpoint leaves the group. This is | or after a currently present endpoint leaves the group. This is | |||
| necessary to preserve backward security and forward security in the | necessary to preserve backward security and forward security in the | |||
| group, if the application requires it. | group, if the application requires it. | |||
| The specific approach used to distribute new group data is out of the | The specific approach used to distribute new group data is out of the | |||
| skipping to change at page 20, line 24 ¶ | skipping to change at page 22, line 11 ¶ | |||
| 2. Defining policies for authorizing the joining of its OSCORE | 2. Defining policies for authorizing the joining of its OSCORE | |||
| groups. | groups. | |||
| 3. Handling the join process to add new endpoints as group members. | 3. Handling the join process to add new endpoints as group members. | |||
| 4. Establishing the Common Context part of the Security Context, | 4. Establishing the Common Context part of the Security Context, | |||
| and providing it to authorized group members during the join | and providing it to authorized group members during the join | |||
| process, together with the corresponding Sender Context. | process, together with the corresponding Sender Context. | |||
| 5. Generating and managing Sender IDs within its OSCORE groups, as | 5. Updating the Gid of its OSCORE groups, upon renewing the | |||
| respective Security Context. This includes ensuring that the | ||||
| same Gid value is not reassigned to the same group. | ||||
| 6. Generating and managing Sender IDs within its OSCORE groups, as | ||||
| well as assigning and providing them to new endpoints during the | well as assigning and providing them to new endpoints during the | |||
| join process, or to current group members upon request of | join process, or to current group members upon request of | |||
| renewal. This includes ensuring that each Sender ID is unique | renewal or re-joining. | |||
| within each of the OSCORE groups, and that it is not reassigned | ||||
| within the same group. | ||||
| 6. Defining communication policies for each of its OSCORE groups, | This includes ensuring that each Sender ID: is unique within | |||
| and signalling them to new endpoints during the join process. | each of the OSCORE groups; and is not reassigned within the same | |||
| group under the same Gid value, i.e. not even to a current group | ||||
| member re-joining the same group without a rekeying happening | ||||
| first. | ||||
| 7. Renewing the Security Context of an OSCORE group upon membership | 7. Defining communication policies for each of its OSCORE groups, | |||
| and signaling them to new endpoints during the join process. | ||||
| 8. Renewing the Security Context of an OSCORE group upon membership | ||||
| change, by revoking and renewing common security parameters and | change, by revoking and renewing common security parameters and | |||
| keying material (rekeying). | keying material (rekeying). | |||
| 8. Providing the management keying material that a new endpoint | 9. Providing the management keying material that a new endpoint | |||
| requires to participate in the rekeying process, consistently | requires to participate in the rekeying process, consistently | |||
| with the key management scheme used in the group joined by the | with the key management scheme used in the group joined by the | |||
| new endpoint. | new endpoint. | |||
| 9. Updating the Gid of its OSCORE groups, upon renewing the | ||||
| respective Security Context. This includes ensuring that the | ||||
| same Gid value is not reassigned to the same group. | ||||
| 10. Acting as key repository, in order to handle the public keys of | 10. Acting as key repository, in order to handle the public keys of | |||
| the members of its OSCORE groups, and providing such public keys | the members of its OSCORE groups, and providing such public keys | |||
| to other members of the same group upon request. The actual | to other members of the same group upon request. The actual | |||
| storage of public keys may be entrusted to a separate secure | storage of public keys may be entrusted to a separate secure | |||
| storage device or service. | storage device or service. | |||
| 11. Validating that the format and parameters of public keys of | 11. Validating that the format and parameters of public keys of | |||
| group members are consistent with the countersignature algorithm | group members are consistent with the countersignature algorithm | |||
| and related parameters used in the respective OSCORE group. | and related parameters used in the respective OSCORE group. | |||
| skipping to change at page 21, line 24 ¶ | skipping to change at page 23, line 17 ¶ | |||
| Building on Section 5 of [RFC8613], this section defines how to use | Building on Section 5 of [RFC8613], this section defines how to use | |||
| COSE [I-D.ietf-cose-rfc8152bis-struct] to wrap and protect data in | COSE [I-D.ietf-cose-rfc8152bis-struct] to wrap and protect data in | |||
| the original message. OSCORE uses the untagged COSE_Encrypt0 | the original message. OSCORE uses the untagged COSE_Encrypt0 | |||
| structure with an Authenticated Encryption with Associated Data | structure with an Authenticated Encryption with Associated Data | |||
| (AEAD) algorithm. Unless otherwise specified, the following | (AEAD) algorithm. Unless otherwise specified, the following | |||
| modifications apply for both the group mode and the pairwise mode of | modifications apply for both the group mode and the pairwise mode of | |||
| Group OSCORE. | Group OSCORE. | |||
| 4.1. Counter Signature | 4.1. Counter Signature | |||
| For the group mode only, the 'unprotected' field MUST additionally | When protecting a message in group mode, the 'unprotected' field MUST | |||
| include the following parameter: | additionally include the following parameter: | |||
| o COSE_CounterSignature0: its value is set to the counter signature | o COSE_CounterSignature0: its value is set to the counter signature | |||
| of the COSE object, computed by the sender as described in | of the COSE object, computed by the sender as described in | |||
| Sections 3.2 and 3.3 of [I-D.ietf-cose-countersign], by using its | Sections 3.2 and 3.3 of [I-D.ietf-cose-countersign], by using its | |||
| private key and according to the Counter Signature Algorithm and | private key and according to the Counter Signature Algorithm and | |||
| Counter Signature Parameters in the Security Context. | Counter Signature Parameters in the Security Context. | |||
| In particular, the Countersign_structure contains the context text | In particular, the Countersign_structure contains the context text | |||
| string "CounterSignature0", the external_aad as defined in | string "CounterSignature0", the external_aad as defined in | |||
| Section 4.3.2 of this specification, and the ciphertext of the | Section 4.3 of this specification, and the ciphertext of the COSE | |||
| COSE object as payload. | object as payload. | |||
| 4.2. The 'kid' and 'kid context' parameters | 4.2. The 'kid' and 'kid context' parameters | |||
| The value of the 'kid' parameter in the 'unprotected' field of | The value of the 'kid' parameter in the 'unprotected' field of | |||
| response messages MUST be set to the Sender ID of the endpoint | response messages MUST be set to the Sender ID of the endpoint | |||
| transmitting the message. That is, unlike in [RFC8613], the 'kid' | transmitting the message, if the request was protected in group mode. | |||
| parameter is always present in all messages, both requests and | That is, unlike in [RFC8613], the 'kid' parameter is always present | |||
| responses. | in responses to a request that was protected in group mode. | |||
| The value of the 'kid context' parameter in the 'unprotected' field | The value of the 'kid context' parameter in the 'unprotected' field | |||
| of requests messages MUST be set to the ID Context, i.e. the Group | of requests messages MUST be set to the ID Context, i.e. the Group | |||
| Identifier value (Gid) of the group. That is, unlike in [RFC8613], | Identifier value (Gid) of the group. That is, unlike in [RFC8613], | |||
| the 'kid context' parameter is always present in requests. | the 'kid context' parameter is always present in requests. | |||
| 4.3. external_aad | 4.3. external_aad | |||
| The external_aad of the Additional Authenticated Data (AAD) is | The external_aad of the Additional Authenticated Data (AAD) is | |||
| different compared to OSCORE. In particular, there is one | different compared to OSCORE, and is defined in this section. | |||
| external_aad used for encryption (both in group mode and pairwise | ||||
| mode), and another external_aad used for signing (only in group | ||||
| mode). | ||||
| 4.3.1. external_aad for Encryption | The same external_aad structure is used in group mode and pairwise | |||
| mode for encryption (see Section 5.3 of | ||||
| [I-D.ietf-cose-rfc8152bis-struct]), as well as in group mode for | ||||
| signing (see Section 4.4 of [I-D.ietf-cose-rfc8152bis-struct]). | ||||
| The external_aad for encryption (see Section 4.3 of | In particular, the external_aad includes also the counter signature | |||
| [I-D.ietf-cose-rfc8152bis-struct]), used both in group mode and | algorithm and related signature parameters, the value of the 'kid | |||
| pairwise mode, includes also the counter signature algorithm and | context' in the COSE object of the request, and the OSCORE option of | |||
| related signature parameters, as well as the value of the 'kid | the protected message. | |||
| context' in the COSE object of the request (see Figure 2). | ||||
| external_aad = bstr .cbor aad_array | external_aad = bstr .cbor aad_array | |||
| aad_array = [ | aad_array = [ | |||
| oscore_version : uint, | oscore_version : uint, | |||
| algorithms : [alg_aead : int / tstr, | algorithms : [alg_aead : int / tstr, | |||
| alg_countersign : int / tstr, | alg_countersign : int / tstr, | |||
| par_countersign : [countersign_alg_capab, | par_countersign : [countersign_alg_capab, | |||
| countersign_key_type_capab], | countersign_key_type_capab]], | |||
| par_countersign_key : countersign_key_type_capab], | request_kid : bstr, | |||
| request_kid : bstr, | request_piv : bstr, | |||
| request_piv : bstr, | options : bstr, | |||
| options : bstr, | request_kid_context : bstr, | |||
| request_kid_context : bstr | OSCORE_option: bstr | |||
| ] | ] | |||
| Figure 2: external_aad for Encryption | Figure 3: external_aad | |||
| Compared with Section 5.4 of [RFC8613], the aad_array has the | Compared with Section 5.4 of [RFC8613], the aad_array has the | |||
| following differences. | following differences. | |||
| o The 'algorithms' array in the aad_array additionally includes: | o The 'algorithms' array additionally includes: | |||
| * 'alg_countersign', which specifies Counter Signature Algorithm | * 'alg_countersign', which specifies Counter Signature Algorithm | |||
| from the Common Context (see Section 2.1.2). This parameter | from the Common Context (see Section 2.1.2). This parameter | |||
| MUST encode the value of Counter Signature Algorithm as a CBOR | MUST encode the value of Counter Signature Algorithm as a CBOR | |||
| integer or text string, consistently with the "Value" field in | integer or text string, consistently with the "Value" field in | |||
| the "COSE Algorithms" Registry for this counter signature | the "COSE Algorithms" Registry for this counter signature | |||
| algorithm. | algorithm. | |||
| * 'par_countersign', which specifies the CBOR array Counter | * 'par_countersign', which specifies the CBOR array Counter | |||
| Signature Parameters from the Common Context (see | Signature Parameters from the Common Context (see | |||
| skipping to change at page 23, line 16 ¶ | skipping to change at page 25, line 5 ¶ | |||
| for the countersignature algorithm indicated in | for the countersignature algorithm indicated in | |||
| 'alg_countersign'. This is the first element of the CBOR | 'alg_countersign'. This is the first element of the CBOR | |||
| array Counter Signature Parameters from the Common Context. | array Counter Signature Parameters from the Common Context. | |||
| + 'countersign_key_type_capab' is the array of COSE | + 'countersign_key_type_capab' is the array of COSE | |||
| capabilities for the COSE key type used by the | capabilities for the COSE key type used by the | |||
| countersignature algorithm indicated in 'alg_countersign'. | countersignature algorithm indicated in 'alg_countersign'. | |||
| This is the second element of the CBOR array Counter | This is the second element of the CBOR array Counter | |||
| Signature Parameters from the Common Context. | Signature Parameters from the Common Context. | |||
| * 'par_countersign_key', which specifies the parameters | This format is consistent with every counter signature | |||
| associated to the keys used with the countersignature algorithm | algorithm currently considered in | |||
| indicated in 'alg_countersign'. These parameters are encoded | [I-D.ietf-cose-rfc8152bis-algs], i.e. with algorithms that have | |||
| as a CBOR array 'countersign_key_type_capab', whose exact | only the COSE key type as their COSE capability. Appendix H | |||
| structure and value depend on the value of 'alg_countersign'. | describes how 'par_countersign' can be generalized for possible | |||
| future registered algorithms having a different set of COSE | ||||
| In particular, 'countersign_key_type_capab' is the array of | capabilities. | |||
| COSE capabilities for the COSE key type of the keys used with | ||||
| the countersignature algorithm. This is the second element of | ||||
| the CBOR array Counter Signature Parameters from the Common | ||||
| Context. | ||||
| Examples of 'par_countersign_key' are in Appendix G. | ||||
| o The new element 'request_kid_context' contains the value of the | o The new element 'request_kid_context' contains the value of the | |||
| 'kid context' in the COSE object of the request (see Section 4.2). | 'kid context' in the COSE object of the request (see Section 4.2). | |||
| 4.3.2. external_aad for Signing | In case Observe [RFC7641] is used, this enables endpoints to | |||
| safely keep an observation active beyond a possible change of Gid, | ||||
| The external_aad for signing (see Section 4.3 of | i.e. of ID Context, following a group rekeying (see Section 3.1). | |||
| [I-D.ietf-cose-rfc8152bis-struct]) used in group mode is identical to | In fact, it ensures that every notification cryptographically | |||
| the external_aad for encryption (see Section 4.3.1) with the addition | matches with only one observation request, rather than with | |||
| of the OSCORE option (see Figure 3). | multiple ones that were protected with different keying material | |||
| but share the same 'request_kid' and 'request_piv' values. | ||||
| external_aad = bstr .cbor aad_array | ||||
| aad_array = [ | ||||
| oscore_version : uint, | ||||
| algorithms : [alg_aead : int / tstr, | ||||
| alg_countersign : int / tstr, | ||||
| par_countersign : [countersign_alg_capab, | ||||
| countersign_key_type_capab], | ||||
| par_countersign_key : countersign_key_type_capab], | ||||
| request_kid : bstr, | ||||
| request_piv : bstr, | ||||
| options : bstr, | ||||
| request_kid_context : bstr, | ||||
| OSCORE_option: bstr | ||||
| ] | ||||
| Figure 3: external_aad for Signing | ||||
| Compared with Section 5.4 of [RFC8613] the aad_array additionally | ||||
| includes: | ||||
| o the 'algorithms' array, as defined in the external_aad for | ||||
| encryption (see Section 4.3.1); | ||||
| o the 'request_kid_context' element, as defined in the external_aad | ||||
| for encryption (see Section 4.3.1); | ||||
| o the value of the OSCORE Option present in the protected message, | o The new element 'OSCORE_option', containing the value of the | |||
| encoded as a binary string. | OSCORE Option present in the protected message, encoded as a | |||
| binary string. This prevents the attack described in Section 10.6 | ||||
| when using the group mode, as further explained in Section 10.6.2. | ||||
| Note for implementation: this construction requires the OSCORE option | Note for implementation: this construction requires the OSCORE | |||
| of the message to be generated before calculating the signature. | option of the message to be generated and finalized before | |||
| Also, the aad_array needs to be large enough to contain the largest | computing the ciphertext of the COSE_Encrypt0 object (when using | |||
| possible OSCORE option. | the group mode or the pairwise mode) and before calculating the | |||
| counter signature (when using the group mode). Also, the | ||||
| aad_array needs to be large enough to contain the largest possible | ||||
| OSCORE option. | ||||
| 5. OSCORE Header Compression | 5. OSCORE Header Compression | |||
| The OSCORE header compression defined in Section 6 of [RFC8613] is | The OSCORE header compression defined in Section 6 of [RFC8613] is | |||
| used, with the following differences. | used, with the following differences. | |||
| o The payload of the OSCORE message SHALL encode the ciphertext of | o The payload of the OSCORE message SHALL encode the ciphertext of | |||
| the COSE_Encrypt0 object. In the group mode, the ciphertext above | the COSE_Encrypt0 object. In the group mode, the ciphertext above | |||
| is concatenated with the value of the COSE_CounterSignature0 of | is concatenated with the value of the COSE_CounterSignature0 of | |||
| the COSE object, computed as described in Section 4.1. | the COSE object, computed as described in Section 4.1. | |||
| o This specification defines the usage of the sixth least | o This specification defines the usage of the sixth least | |||
| significant bit, called the "Group Flag", in the first byte of the | significant bit, called "Group Flag", in the first byte of the | |||
| OSCORE option containing the OSCORE flag bits. This flag bit is | OSCORE option containing the OSCORE flag bits. This flag bit is | |||
| specified in Section 11.1. | specified in Section 11.1. | |||
| o The Group Flag MUST be set to 1 if the OSCORE message is protected | o The Group Flag MUST be set to 1 if the OSCORE message is protected | |||
| using the group mode (see Section 8). | using the group mode (see Section 8). | |||
| o The Group Flag MUST be set to 0 if the OSCORE message is protected | o The Group Flag MUST be set to 0 if the OSCORE message is protected | |||
| using the pairwise mode (see Section 9). The Group Flag MUST also | using the pairwise mode (see Section 9). The Group Flag MUST also | |||
| be set to 0 for ordinary OSCORE messages processed according to | be set to 0 for ordinary OSCORE messages processed according to | |||
| [RFC8613]. | [RFC8613]. | |||
| skipping to change at page 25, line 33 ¶ | skipping to change at page 26, line 31 ¶ | |||
| examples do not include the full CoAP unprotected message or the full | examples do not include the full CoAP unprotected message or the full | |||
| Security Context, but only the input necessary to the compression | Security Context, but only the input necessary to the compression | |||
| mechanism, i.e. the COSE_Encrypt0 object. The output is the | mechanism, i.e. the COSE_Encrypt0 object. The output is the | |||
| compressed COSE object as defined in Section 5 and divided into two | compressed COSE object as defined in Section 5 and divided into two | |||
| parts, since the object is transported in two CoAP fields: OSCORE | parts, since the object is transported in two CoAP fields: OSCORE | |||
| option and payload. | option and payload. | |||
| The examples assume that the plaintext (see Section 5.3 of [RFC8613]) | The examples assume that the plaintext (see Section 5.3 of [RFC8613]) | |||
| is 6 bytes long, and that the AEAD tag is 8 bytes long, hence | is 6 bytes long, and that the AEAD tag is 8 bytes long, hence | |||
| resulting in a ciphertext which is 14 bytes long. When using the | resulting in a ciphertext which is 14 bytes long. When using the | |||
| group mode, COUNTERSIGN denotes the COSE_CounterSignature0 byte | group mode, the COSE_CounterSignature0 byte string as described in | |||
| string as described in Section 4, and is 64 bytes long. | Section 4 is assumed to be 64 bytes long. | |||
| 5.1.1. Examples in Group Mode | 5.1.1. Examples in Group Mode | |||
| o Request with ciphertext = 0xaea0155667924dff8a24e4cb35b9, kid = | o Request with ciphertext = 0xaea0155667924dff8a24e4cb35b9, kid = | |||
| 0x25, Partial IV = 5 and kid context = 0x44616c | 0x25, Partial IV = 5 and kid context = 0x44616c. | |||
| Before compression (96 bytes): | * Before compression (96 bytes): | |||
| [ | [ | |||
| h'', | h'', | |||
| { 4:h'25', 6:h'05', 10:h'44616c', 11:COUNTERSIGN }, | { 4:h'25', 6:h'05', 10:h'44616c', 11:h'de9e ... f1' }, | |||
| h'aea0155667924dff8a24e4cb35b9' | h'aea0155667924dff8a24e4cb35b9' | |||
| ] | ] | |||
| After compression (85 bytes): | ||||
| Flag byte: 0b00111001 = 0x39 | * After compression (85 bytes): | |||
| Option Value: 39 05 03 44 61 6c 25 (7 bytes) | Flag byte: 0b00111001 = 0x39 (1 byte) | |||
| Payload: ae a0 15 56 67 92 4d ff 8a 24 e4 cb 35 b9 COUNTERSIGN | Option Value: 0x39 05 03 44 61 6c 25 (7 bytes) | |||
| (14 bytes + size of COUNTERSIGN) | ||||
| Payload: 0xaea0155667924dff8a24e4cb35b9 de9e ... f1 | ||||
| (14 bytes + size of the counter signature) | ||||
| o Response with ciphertext = 0x60b035059d9ef5667c5a0710823b, kid = | o Response with ciphertext = 0x60b035059d9ef5667c5a0710823b, kid = | |||
| 0x52 and no Partial IV. | 0x52 and no Partial IV. | |||
| Before compression (88 bytes): | * Before compression (88 bytes): | |||
| [ | [ | |||
| h'', | h'', | |||
| { 4:h'52', 11:COUNTERSIGN }, | { 4:h'52', 11:h'ca1e ... b3' }, | |||
| h'60b035059d9ef5667c5a0710823b' | h'60b035059d9ef5667c5a0710823b' | |||
| ] | ] | |||
| After compression (80 bytes): | * After compression (80 bytes): | |||
| Flag byte: 0b00101000 = 0x28 | Flag byte: 0b00101000 = 0x28 (1 byte) | |||
| Option Value: 28 52 (2 bytes) | Option Value: 0x28 52 (2 bytes) | |||
| Payload: 60 b0 35 05 9d 9e f5 66 7c 5a 07 10 82 3b COUNTERSIGN | Payload: 0x60b035059d9ef5667c5a0710823b ca1e ... b3 | |||
| (14 bytes + size of COUNTERSIGN) | (14 bytes + size of the counter signature) | |||
| 5.1.2. Examples in Pairwise Mode | 5.1.2. Examples in Pairwise Mode | |||
| o Request with ciphertext = 0xaea0155667924dff8a24e4cb35b9, kid = | o Request with ciphertext = 0xaea0155667924dff8a24e4cb35b9, kid = | |||
| 0x25, Partial IV = 5 and kid context = 0x44616c | 0x25, Partial IV = 5 and kid context = 0x44616c. | |||
| Before compression (32 bytes): | * Before compression (29 bytes): | |||
| [ | [ | |||
| h'', | h'', | |||
| { 4:h'25', 6:h'05', 10:h'44616c' }, | { 4:h'25', 6:h'05', 10:h'44616c' }, | |||
| h'aea0155667924dff8a24e4cb35b9' | h'aea0155667924dff8a24e4cb35b9' | |||
| ] | ] | |||
| After compression (21 bytes): | ||||
| Flag byte: 0b00011001 = 0x19 | * After compression (21 bytes): | |||
| Option Value: 19 05 03 44 61 6c 25 (7 bytes) | Flag byte: 0b00011001 = 0x19 (1 byte) | |||
| Payload: ae a0 15 56 67 92 4d ff 8a 24 e4 cb 35 b9 (14 bytes) | Option Value: 0x19 05 03 44 61 6c 25 (7 bytes) | |||
| o Response with ciphertext = 0x60b035059d9ef5667c5a0710823b, kid = | Payload: 0xaea0155667924dff8a24e4cb35b9 (14 bytes) | |||
| 0x52 and no Partial IV. | ||||
| Before compression (24 bytes): | o Response with ciphertext = 0x60b035059d9ef5667c5a0710823b and no | |||
| Partial IV. | ||||
| [ | * Before compression (18 bytes): | |||
| h'', | ||||
| { 4:h'52'}, | ||||
| h'60b035059d9ef5667c5a0710823b' | ||||
| ] | ||||
| After compression (16 bytes): | [ | |||
| h'', | ||||
| {}, | ||||
| h'60b035059d9ef5667c5a0710823b' | ||||
| ] | ||||
| Flag byte: 0b00001000 = 0x08 | * After compression (14 bytes): | |||
| Option Value: 08 52 (2 bytes) | Flag byte: 0b00000000 = 0x00 (1 byte) | |||
| Payload: 60 b0 35 05 9d 9e f5 66 7c 5a 07 10 82 3b (14 bytes) | Option Value: 0x (0 bytes) | |||
| Payload: 0x60b035059d9ef5667c5a0710823b (14 bytes) | ||||
| 6. Message Binding, Sequence Numbers, Freshness and Replay Protection | 6. Message Binding, Sequence Numbers, Freshness and Replay Protection | |||
| The requirements and properties described in Section 7 of [RFC8613] | The requirements and properties described in Section 7 of [RFC8613] | |||
| also apply to OSCORE used in group communication. In particular, | also apply to Group OSCORE. In particular, Group OSCORE provides | |||
| Group OSCORE provides message binding of responses to requests, which | message binding of responses to requests, which enables absolute | |||
| enables absolute freshness of responses that are not notifications, | freshness of responses that are not notifications, relative freshness | |||
| relative freshness of requests and notification responses, and replay | of requests and notification responses, and replay protection of | |||
| protection of requests. | requests. In addition, the following holds for Group OSCORE. | |||
| 6.1. Update of Replay Window | 6.1. Update of Replay Window | |||
| A new server joining a group may not be aware of the current Partial | Sender Sequence Numbers seen by a server as Partial IV values in | |||
| IVs (Sender Sequence Numbers of the clients). Hence, when receiving | request messages can spontaneously increase at a fast pace, for | |||
| a request from a particular client for the first time, the new server | example when a client exchanges unicast messages with other servers | |||
| is not able to verify if that request is a replay. The same holds | using the Group OSCORE Security Context. As in OSCORE [RFC8613], a | |||
| when a server loses its mutable Security Context (see Section 2.4.1), | server always needs to accept such increases and accordingly updates | |||
| for instance after a device reboot. | the Replay Window in each of its Recipient Contexts. | |||
| The exact way to address this issue is application specific, and | As discussed in Section 2.4.1, a newly created Recipient Context | |||
| depends on the particular use case and its replay requirements. The | would have an invalid Replay Window, if its installation has required | |||
| list of methods to handle the update of a Replay Window is part of | to delete another Recipient Context. Hence, the server is not able | |||
| the group communication policy, and different servers can use | to verify if a request from the client associated to the new | |||
| different methods. Appendix E describes three possible approaches | Recipient Context is a replay. When this happens, the server MUST | |||
| that can be considered to address the issue discussed above. | validate the Replay Window of the new Recipient Context, before | |||
| accepting messages from the associated client (see Section 2.4.1). | ||||
| Furthermore, when the Group Manager establishes a new Security | Furthermore, when the Group Manager establishes a new Security | |||
| Context for the group (see Section 2.4.3.2), every server re- | Context for the group (see Section 2.4.3.2), every server re- | |||
| initializes the Replay Window in each of its Recipient Contexts. | initializes the Replay Window in each of its Recipient Contexts. | |||
| 6.2. Message Freshness | ||||
| When receiving a request from a client for the first time, the server | ||||
| is not synchronized with the client's Sender Sequence Number, i.e. it | ||||
| is not able to verify if that request is fresh. This applies to a | ||||
| server that has just joined the group, with respect to already | ||||
| present clients, and recurs as new clients are added as group | ||||
| members. | ||||
| During its operations in the group, the server may also lose | ||||
| synchronization with a client's Sender Sequence Number. This can | ||||
| happen, for instance, if the server has rebooted or has deleted its | ||||
| previously synchronized version of the Recipient Context for that | ||||
| client (see Section 2.4.1). | ||||
| If the application requires message freshness, e.g. according to | ||||
| time- or event-based policies, the server has to (re-)synchronize | ||||
| with a client's Sender Sequence Number before delivering request | ||||
| messages from that client to the application. To this end, the | ||||
| server can use the approach in Appendix E based on the Echo Option | ||||
| for CoAP [I-D.ietf-core-echo-request-tag], as a variant of the | ||||
| approach defined in Appendix B.1.2 of [RFC8613] applicable to Group | ||||
| OSCORE. | ||||
| 7. Message Reception | 7. Message Reception | |||
| Upon receiving a protected message, a recipient endpoint retrieves a | Upon receiving a protected message, a recipient endpoint retrieves a | |||
| Security Context as in [RFC8613]. An endpoint MUST be able to | Security Context as in [RFC8613]. An endpoint MUST be able to | |||
| distinguish between a Security Context to process OSCORE messages as | distinguish between a Security Context to process OSCORE messages as | |||
| in [RFC8613] and a Security Context to process Group OSCORE messages | in [RFC8613] and a Group OSCORE Security Context to process Group | |||
| as defined in this specification. | OSCORE messages as defined in this specification. | |||
| To this end, an endpoint can take into account the different | To this end, an endpoint can take into account the different | |||
| structure of the Security Context defined in Section 2, for example | structure of the Security Context defined in Section 2, for example | |||
| based on the presence of Counter Signature Algorithm in the Common | based on the presence of Counter Signature Algorithm in the Common | |||
| Context. Alternatively implementations can use an additional | Context. Alternatively implementations can use an additional | |||
| parameter in the Security Context, to explicitly signal that it is | parameter in the Security Context, to explicitly signal that it is | |||
| intended for processing Group OSCORE messages. | intended for processing Group OSCORE messages. | |||
| If either of the following two conditions holds, a recipient endpoint | If either of the following two conditions holds, a recipient endpoint | |||
| MUST discard the incoming protected message: | MUST discard the incoming protected message: | |||
| o The Group Flag is set to 1, and the recipient endpoint can not | ||||
| retrieve a Security Context which is both valid to process the | ||||
| message and also associated to an OSCORE group. | ||||
| o The Group Flag is set to 0, and the recipient endpoint retrieves a | o The Group Flag is set to 0, and the recipient endpoint retrieves a | |||
| Security Context which is both valid to process the message and | Security Context which is both valid to process the message and | |||
| also associated to an OSCORE group, but the endpoint does not | also associated to an OSCORE group, but the endpoint does not | |||
| support the pairwise mode. | support the pairwise mode. | |||
| o The Group Flag is set to 1, and the recipient endpoint can not | ||||
| retrieve a Security Context which is both valid to process the | ||||
| message and also associated to an OSCORE group. | ||||
| As per Section 6.1 of [RFC8613], this holds also when retrieving a | ||||
| Security Context which is valid but not associated to an OSCORE | ||||
| group. Future specifications may define how to process incoming | ||||
| messages protected with a Security Contexts as in [RFC8613], when | ||||
| the Group Flag bit is set to 1. | ||||
| Otherwise, if a Security Context associated to an OSCORE group and | Otherwise, if a Security Context associated to an OSCORE group and | |||
| valid to process the message is retrieved, the recipient endpoint | valid to process the message is retrieved, the recipient endpoint | |||
| processes the message with Group OSCORE, using the group mode (see | processes the message with Group OSCORE, using the group mode (see | |||
| Section 8) if the Group Flag is set to 1, or the pairwise mode (see | Section 8) if the Group Flag is set to 1, or the pairwise mode (see | |||
| Section 9) if the Group Flag is set to 0. | Section 9) if the Group Flag is set to 0. | |||
| Note that, if the Group Flag is set to 0, and the recipient endpoint | Note that, if the Group Flag is set to 0, and the recipient endpoint | |||
| retrieves a Security Context which is valid to process the message | retrieves a Security Context which is valid to process the message | |||
| but is not associated to an OSCORE group, then the message is | but is not associated to an OSCORE group, then the message is | |||
| processed according to [RFC8613]. | processed according to [RFC8613]. | |||
| skipping to change at page 29, line 27 ¶ | skipping to change at page 31, line 8 ¶ | |||
| The group mode MUST be used to protect group requests intended for | The group mode MUST be used to protect group requests intended for | |||
| multiple recipients or for the whole group. This includes both | multiple recipients or for the whole group. This includes both | |||
| requests directly addressed to multiple recipients, e.g. sent by the | requests directly addressed to multiple recipients, e.g. sent by the | |||
| client over multicast, as well as requests sent by the client over | client over multicast, as well as requests sent by the client over | |||
| unicast to a proxy, that forwards them to the intended recipients | unicast to a proxy, that forwards them to the intended recipients | |||
| over multicast [I-D.ietf-core-groupcomm-bis]. | over multicast [I-D.ietf-core-groupcomm-bis]. | |||
| As per [RFC7252][I-D.ietf-core-groupcomm-bis], group requests sent | As per [RFC7252][I-D.ietf-core-groupcomm-bis], group requests sent | |||
| over multicast MUST be Non-Confirmable, and thus are not | over multicast MUST be Non-Confirmable, and thus are not | |||
| retransmitted by the CoAP messaging layer. Instead, applications | retransmitted by the CoAP messaging layer. Instead, applications | |||
| should store such outgoing messages for a pre-defined, sufficient | should store such outgoing messages for a predefined, sufficient | |||
| amount of time, in order to correctly perform possible | amount of time, in order to correctly perform possible | |||
| retransmissions at the application layer. According to Section 5.2.3 | retransmissions at the application layer. According to Section 5.2.3 | |||
| of [RFC7252], responses to Non-Confirmable group requests SHOULD also | of [RFC7252], responses to Non-Confirmable group requests SHOULD also | |||
| be Non-Confirmable, but endpoints MUST be prepared to receive | be Non-Confirmable, but endpoints MUST be prepared to receive | |||
| Confirmable responses in reply to a Non-Confirmable group request. | Confirmable responses in reply to a Non-Confirmable group request. | |||
| Confirmable group requests are acknowledged in non-multicast | Confirmable group requests are acknowledged in non-multicast | |||
| environments, as specified in [RFC7252]. | environments, as specified in [RFC7252]. | |||
| Furthermore, endpoints in the group locally perform error handling | Furthermore, endpoints in the group locally perform error handling | |||
| and processing of invalid messages according to the same principles | and processing of invalid messages according to the same principles | |||
| adopted in [RFC8613]. However, a recipient MUST stop processing and | adopted in [RFC8613]. However, a recipient MUST stop processing and | |||
| silently reject any message which is malformed and does not follow | silently reject any message which is malformed and does not follow | |||
| the format specified in Section 4, or which is not cryptographically | the format specified in Section 4 of this specification, or which is | |||
| validated in a successful way. In either case, it is RECOMMENDED | not cryptographically validated in a successful way. In either case, | |||
| that the recipient does not send back any error message. This | it is RECOMMENDED that the recipient does not send back any error | |||
| prevents servers from replying with multiple error messages to a | message. This prevents servers from replying with multiple error | |||
| client sending a group request, so avoiding the risk of flooding and | messages to a client sending a group request, so avoiding the risk of | |||
| possibly congesting the network. | flooding and possibly congesting the network. | |||
| 8.1. Protecting the Request | 8.1. Protecting the Request | |||
| A client transmits a secure group request as described in Section 8.1 | A client transmits a secure group request as described in Section 8.1 | |||
| of [RFC8613], with the following modifications. | of [RFC8613], with the following modifications. | |||
| o In step 2, the Additional Authenticated Data is modified as | o In step 2, the Additional Authenticated Data is modified as | |||
| described in Section 4 of this document. | described in Section 4 of this document. | |||
| o In step 4, the encryption of the COSE object is modified as | o In step 4, the encryption of the COSE object is modified as | |||
| skipping to change at page 30, line 39 ¶ | skipping to change at page 32, line 18 ¶ | |||
| update the stored value associated to a particular Observe | update the stored value associated to a particular Observe | |||
| request. | request. | |||
| o If the client intends to keep the observation active beyond a | o If the client intends to keep the observation active beyond a | |||
| possible change of ID Context following a group rekeying (see | possible change of ID Context following a group rekeying (see | |||
| Section 3.1), then the following applies. | Section 3.1), then the following applies. | |||
| * The client MUST store the value of the 'kid context' parameter | * The client MUST store the value of the 'kid context' parameter | |||
| from the original Observe request, and retain it for the whole | from the original Observe request, and retain it for the whole | |||
| duration of the observation. Upon establishing a new Security | duration of the observation. Upon establishing a new Security | |||
| Context with a new ID Context as Gid (see Section 2.4.3.2), the | Context with a new Gid as ID Context (see Section 2.4.3.2), the | |||
| client MUST NOT update the stored value associated to a | client MUST NOT update the stored value associated to a | |||
| particular Observe request. | particular Observe request. | |||
| * The client MUST store an invariant identifier of the group, | * The client MUST store an invariant identifier of the group, | |||
| which is immutable even in case the Security Context of the | which is immutable even in case the Security Context of the | |||
| group is re-established. For example, this invariant | group is re-established. For example, this invariant | |||
| identifier can be the "group name" in | identifier can be the "group name" in | |||
| [I-D.ietf-ace-key-groupcomm-oscore], where it is used for | [I-D.ietf-ace-key-groupcomm-oscore], where it is used for | |||
| joining the group and retrieving the current group keying | joining the group and retrieving the current group keying | |||
| material from the Group Manager. | material from the Group Manager. | |||
| skipping to change at page 31, line 20 ¶ | skipping to change at page 32, line 48 ¶ | |||
| Upon receiving a secure group request with the Group Flag set to 1, | Upon receiving a secure group request with the Group Flag set to 1, | |||
| following the procedure in Section 7, a server proceeds as described | following the procedure in Section 7, a server proceeds as described | |||
| in Section 8.2 of [RFC8613], with the following modifications. | in Section 8.2 of [RFC8613], with the following modifications. | |||
| o In step 2, the decoding of the compressed COSE object follows | o In step 2, the decoding of the compressed COSE object follows | |||
| Section 5 of this document. In particular: | Section 5 of this document. In particular: | |||
| * If the server discards the request due to not retrieving a | * If the server discards the request due to not retrieving a | |||
| Security Context associated to the OSCORE group, the server MAY | Security Context associated to the OSCORE group, the server MAY | |||
| respond with a 4.02 (Bad Option) error. When doing so, the | respond with a 4.01 (Unauthorized) error message. When doing | |||
| server MAY set an Outer Max-Age option with value zero, and MAY | so, the server MAY set an Outer Max-Age option with value zero, | |||
| include a descriptive string as diagnostic payload. | and MAY include a descriptive string as diagnostic payload. | |||
| * If the received 'kid context' matches an existing ID Context | * If the received 'kid context' matches an existing ID Context | |||
| (Gid) but the received 'kid' does not match any Recipient ID in | (Gid) but the received 'kid' does not match any Recipient ID in | |||
| this Security Context, then the server MAY create a new | this Security Context, then the server MAY create a new | |||
| Recipient Context for this Recipient ID and initialize it | Recipient Context for this Recipient ID and initialize it | |||
| according to Section 3 of [RFC8613], and also retrieve the | according to Section 3 of [RFC8613], and also retrieve the | |||
| associated public key. Such a configuration is application | associated public key. Such a configuration is application | |||
| specific. If the application does not specify dynamic | specific. If the application does not specify dynamic | |||
| derivation of new Recipient Contexts, then the server SHALL | derivation of new Recipient Contexts, then the server SHALL | |||
| stop processing the request. | stop processing the request. | |||
| skipping to change at page 32, line 4 ¶ | skipping to change at page 33, line 33 ¶ | |||
| the server MUST stop processing the request and MAY respond | the server MUST stop processing the request and MAY respond | |||
| with a 5.03 (Service Unavailable) response. The response MAY | with a 5.03 (Service Unavailable) response. The response MAY | |||
| include a Max-Age Option, indicating to the client the number | include a Max-Age Option, indicating to the client the number | |||
| of seconds after which to retry. If the Max-Age Option is not | of seconds after which to retry. If the Max-Age Option is not | |||
| present, a retry time of 60 seconds will be assumed by the | present, a retry time of 60 seconds will be assumed by the | |||
| client, as default value defined in Section 5.10.5 of | client, as default value defined in Section 5.10.5 of | |||
| [RFC7252]. | [RFC7252]. | |||
| * If the signature verification fails, the server SHALL stop | * If the signature verification fails, the server SHALL stop | |||
| processing the request and MAY respond with a 4.00 (Bad | processing the request and MAY respond with a 4.00 (Bad | |||
| Request) response. If the verification fails, the same steps | Request) response. The server MAY set an Outer Max-Age option | |||
| are taken as if the decryption had failed. In particular, the | with value zero. The diagnostic payload MAY contain a string, | |||
| Replay Window is only updated if both the signature | which, if present, MUST be "Decryption failed" as if the | |||
| verification and the decryption succeed. | decryption had failed. Furthermore, the Replay Window MUST be | |||
| updated only if both the signature verification and the | ||||
| decryption succeed. | ||||
| o Additionally, if the used Recipient Context was created upon | o Additionally, if the used Recipient Context was created upon | |||
| receiving this group request and the message is not verified | receiving this group request and the message is not verified | |||
| successfully, the server MAY delete that Recipient Context. Such | successfully, the server MAY delete that Recipient Context. Such | |||
| a configuration, which is specified by the application, mitigates | a configuration, which is specified by the application, mitigates | |||
| attacks that aim at overloading the server's storage. | attacks that aim at overloading the server's storage. | |||
| A server SHOULD NOT process a request if the received Recipient ID | A server SHOULD NOT process a request if the received Recipient ID | |||
| ('kid') is equal to its own Sender ID in its own Sender Context. For | ('kid') is equal to its own Sender ID in its own Sender Context. For | |||
| an example where this is not fulfilled, see Section 6.2.1 in | an example where this is not fulfilled, see Section 7.2.1 in | |||
| [I-D.tiloca-core-observe-multicast-notifications]. | [I-D.tiloca-core-observe-multicast-notifications]. | |||
| 8.2.1. Supporting Observe | 8.2.1. Supporting Observe | |||
| If Observe [RFC7641] is supported, the following holds for each newly | If Observe [RFC7641] is supported, the following holds for each newly | |||
| started observation. | started observation. | |||
| o The server MUST store the value of the 'kid' parameter from the | o The server MUST store the value of the 'kid' parameter from the | |||
| original Observe request, and retain it for the whole duration of | original Observe request, and retain it for the whole duration of | |||
| the observation. The server MUST NOT update the stored value of a | the observation. The server MUST NOT update the stored value of a | |||
| 'kid' parameter associated to a particular Observe request, even | 'kid' parameter associated to a particular Observe request, even | |||
| in case the observer client is individually rekeyed and starts | in case the observer client is individually rekeyed and starts | |||
| using a new Sender ID received from the Group Manager (see | using a new Sender ID received from the Group Manager (see | |||
| Section 2.4.3.1). | Section 2.4.3.1). | |||
| o The server MUST store the value of the 'kid context' parameter | o The server MUST store the value of the 'kid context' parameter | |||
| from the original Observe request, and retain it for the whole | from the original Observe request, and retain it for the whole | |||
| duration of the observation, beyond a possible change of ID | duration of the observation, beyond a possible change of ID | |||
| Context following a group rekeying (see Section 3.1). That is, | Context following a group rekeying (see Section 3.1). That is, | |||
| upon establishing a new Security Context with a new ID Context as | upon establishing a new Security Context with a new Gid as ID | |||
| Gid (see Section 2.4.3.2), the server MUST NOT update the stored | Context (see Section 2.4.3.2), the server MUST NOT update the | |||
| value associated to the ongoing observation. | stored value associated to the ongoing observation. | |||
| 8.3. Protecting the Response | 8.3. Protecting the Response | |||
| If a server generates a CoAP message in response to a Group OSCORE | If a server generates a CoAP message in response to a Group OSCORE | |||
| request, then the server SHALL follow the description in Section 8.3 | request, then the server SHALL follow the description in Section 8.3 | |||
| of [RFC8613], with the modifications described in this section. | of [RFC8613], with the modifications described in this section. | |||
| Note that the server always protects a response with the Sender | Note that the server always protects a response with the Sender | |||
| Context from its latest Security Context, and that establishing a new | Context from its latest Security Context, and that establishing a new | |||
| Security Context resets the Sender Sequence Number to 0 (see | Security Context resets the Sender Sequence Number to 0 (see | |||
| skipping to change at page 33, line 36 ¶ | skipping to change at page 35, line 19 ¶ | |||
| document. In particular, the payload of the OSCORE message | document. In particular, the payload of the OSCORE message | |||
| includes also the counter signature. | includes also the counter signature. | |||
| 8.3.1. Supporting Observe | 8.3.1. Supporting Observe | |||
| If Observe [RFC7641] is supported, the following holds when | If Observe [RFC7641] is supported, the following holds when | |||
| protecting notifications for an ongoing observation. | protecting notifications for an ongoing observation. | |||
| o The server MUST use the stored value of the 'kid' parameter from | o The server MUST use the stored value of the 'kid' parameter from | |||
| the original Observe request (see Section 8.2.1), as value for the | the original Observe request (see Section 8.2.1), as value for the | |||
| 'request_kid' parameter in the two external_aad structures (see | 'request_kid' parameter in the external_aad structure (see | |||
| Section 4.3.1 and Section 4.3.2). | Section 4.3). | |||
| o The server MUST use the stored value of the 'kid context' | o The server MUST use the stored value of the 'kid context' | |||
| parameter from the original Observe request (see Section 8.2.1), | parameter from the original Observe request (see Section 8.2.1), | |||
| as value for the 'request_kid_context' parameter in the two | as value for the 'request_kid_context' parameter in the | |||
| external_aad structures (see Section 4.3.1 and Section 4.3.2). | external_aad structure (see Section 4.3). | |||
| Furthermore, the server may have ongoing observations started by | Furthermore, the server may have ongoing observations started by | |||
| Observe requests protected with an old Security Context. After | Observe requests protected with an old Security Context. After | |||
| completing the establishment of a new Security Context, the server | completing the establishment of a new Security Context, the server | |||
| MUST protect the following notifications with the Sender Context of | MUST protect the following notifications with the Sender Context of | |||
| the new Security Context. | the new Security Context. | |||
| For each ongoing observation, the server MUST include in the first | For each ongoing observation, the server can help the client to | |||
| notification protected with the new Security Context also the 'kid | synchronize, by including also the 'kid context' parameter in | |||
| context' parameter, which is set to the ID Context (Gid) of the new | notifications following a group rekeying, with value set to the ID | |||
| Security Context. It is OPTIONAL for the server to include the ID | Context (Gid) of the new Security Context. | |||
| Context (Gid) in the 'kid context' parameter also in further | ||||
| following notifications for those observations. | If there is a known upper limit to the duration of a group rekeying, | |||
| the server SHOULD include the 'kid context' parameter during that | ||||
| time. Otherwise, the server SHOULD include it until the Max-Age has | ||||
| expired for the last notification sent before the installation of the | ||||
| new Security Context. | ||||
| 8.4. Verifying the Response | 8.4. Verifying the Response | |||
| Upon receiving a secure response message with the Group Flag set to | Upon receiving a secure response message with the Group Flag set to | |||
| 1, following the procedure in Section 7, the client proceeds as | 1, following the procedure in Section 7, the client proceeds as | |||
| described in Section 8.4 of [RFC8613], with the following | described in Section 8.4 of [RFC8613], with the following | |||
| modifications. | modifications. | |||
| Note that a client may receive a response protected with a Security | Note that a client may receive a response protected with a Security | |||
| Context different from the one used to protect the corresponding | Context different from the one used to protect the corresponding | |||
| group request, and that, upon the establishment of a new Security | group request, and that, upon the establishment of a new Security | |||
| Context, the client re-initializes its replay windows in its | Context, the client re-initializes its Replay Windows in its | |||
| Recipient Contexts (see Section 3.1). | Recipient Contexts (see Section 3.1). | |||
| o In step 2, the decoding of the compressed COSE object is modified | o In step 2, the decoding of the compressed COSE object is modified | |||
| as described in Section 5 of this document. If the received 'kid | as described in Section 5 of this document. In particular, a | |||
| context' matches an existing ID Context (Gid) but the received | 'kid' may not be present, if the response is a reply to a request | |||
| 'kid' does not match any Recipient ID in this Security Context, | protected in pairwise mode. In such a case, the client assumes | |||
| then the client MAY create a new Recipient Context for this | the response 'kid' to be exactly the one of the server to which | |||
| Recipient ID and initialize it according to Section 3 of | the request protected in pairwise mode was intended for. | |||
| [RFC8613], and also retrieve the associated public key. If the | ||||
| application does not specify dynamic derivation of new Recipient | If the response 'kid context' matches an existing ID Context (Gid) | |||
| Contexts, then the client SHALL stop processing the response. | but the received/assumed 'kid' does not match any Recipient ID in | |||
| this Security Context, then the client MAY create a new Recipient | ||||
| Context for this Recipient ID and initialize it according to | ||||
| Section 3 of [RFC8613], and also retrieve the associated public | ||||
| key. If the application does not specify dynamic derivation of | ||||
| new Recipient Contexts, then the client SHALL stop processing the | ||||
| response. | ||||
| o In step 3, the Additional Authenticated Data is modified as | o In step 3, the Additional Authenticated Data is modified as | |||
| described in Section 4 of this document. | described in Section 4 of this document. | |||
| o In step 5, the client also verifies the counter signature using | o In step 5, the client also verifies the counter signature using | |||
| the public key of the server from the associated Recipient | the public key of the server from the associated Recipient | |||
| Context. If the verification fails, the same steps are taken as | Context. If the verification fails, the same steps are taken as | |||
| if the decryption had failed. | if the decryption had failed. | |||
| o Additionally, if the used Recipient Context was created upon | o Additionally, if the used Recipient Context was created upon | |||
| skipping to change at page 35, line 4 ¶ | skipping to change at page 36, line 48 ¶ | |||
| a configuration, which is specified by the application, mitigates | a configuration, which is specified by the application, mitigates | |||
| attacks that aim at overloading the client's storage. | attacks that aim at overloading the client's storage. | |||
| 8.4.1. Supporting Observe | 8.4.1. Supporting Observe | |||
| If Observe [RFC7641] is supported, the following holds when verifying | If Observe [RFC7641] is supported, the following holds when verifying | |||
| notifications for an ongoing observation. | notifications for an ongoing observation. | |||
| o The client MUST use the stored value of the 'kid' parameter from | o The client MUST use the stored value of the 'kid' parameter from | |||
| the original Observe request (see Section 8.1.1), as value for the | the original Observe request (see Section 8.1.1), as value for the | |||
| 'request_kid' parameter in the two external_aad structures (see | 'request_kid' parameter in the external_aad structure (see | |||
| Section 4.3.1 and Section 4.3.2). | Section 4.3). | |||
| o The client MUST use the stored value of the 'kid context' | o The client MUST use the stored value of the 'kid context' | |||
| parameter from the original Observe request (see Section 8.1.1), | parameter from the original Observe request (see Section 8.1.1), | |||
| as value for the 'request_kid_context' parameter in the two | as value for the 'request_kid_context' parameter in the | |||
| external_aad structures (see Section 4.3.1 and Section 4.3.2). | external_aad structure (see Section 4.3). | |||
| This ensures that the client can correctly verify notifications, even | This ensures that the client can correctly verify notifications, even | |||
| in case it is individually rekeyed and starts using a new Sender ID | in case it is individually rekeyed and starts using a new Sender ID | |||
| received from the Group Manager (see Section 2.4.3.1), as well as | received from the Group Manager (see Section 2.4.3.1), as well as | |||
| when it establishes a new Security Context with a new ID Context | when it installs a new Security Context with a new ID Context (Gid) | |||
| (Gid) following a group rekeying (see Section 3.1). | following a group rekeying (see Section 3.1). | |||
| 9. Message Processing in Pairwise Mode | 9. Message Processing in Pairwise Mode | |||
| When using the pairwise mode of Group OSCORE, messages are protected | When using the pairwise mode of Group OSCORE, messages are protected | |||
| and processed as in Section 8, with the modifications described in | and processed as in [RFC8613], with the modifications described in | |||
| this section. The security objectives of the pairwise mode are | this section. The security objectives of the pairwise mode are | |||
| discussed in Appendix A.2. | discussed in Appendix A.2. | |||
| The pairwise mode takes advantage of an existing Security Context for | The pairwise mode takes advantage of an existing Security Context for | |||
| the group mode to establish a Security Context shared exclusively | the group mode to establish a Security Context shared exclusively | |||
| with any other member. In order to use the pairwise mode, the | with any other member. In order to use the pairwise mode, the | |||
| signature scheme of the group mode MUST support a combined signature | signature scheme of the group mode MUST support a combined signature | |||
| and encryption scheme. This can be, for example, signature using | and encryption scheme. This can be, for example, signature using | |||
| ECDSA, and encryption using AES-CCM with a key derived with ECDH. | ECDSA, and encryption using AES-CCM with a key derived with ECDH. | |||
| skipping to change at page 35, line 44 ¶ | skipping to change at page 37, line 39 ¶ | |||
| messages, such as intermediary gateways (see Section 3). | messages, such as intermediary gateways (see Section 3). | |||
| The pairwise mode MAY be supported. An endpoint implementing only a | The pairwise mode MAY be supported. An endpoint implementing only a | |||
| silent server does not support the pairwise mode. | silent server does not support the pairwise mode. | |||
| If the signature algorithm used in the group supports ECDH (e.g., | If the signature algorithm used in the group supports ECDH (e.g., | |||
| ECDSA, EdDSA), the pairwise mode MUST be supported by endpoints that | ECDSA, EdDSA), the pairwise mode MUST be supported by endpoints that | |||
| use the CoAP Echo Option [I-D.ietf-core-echo-request-tag] and/or | use the CoAP Echo Option [I-D.ietf-core-echo-request-tag] and/or | |||
| block-wise transfers [RFC7959], for instance for responses after the | block-wise transfers [RFC7959], for instance for responses after the | |||
| first block-wise request, which possibly targets all servers in the | first block-wise request, which possibly targets all servers in the | |||
| group and includes the CoAP Block2 option (see Section 2.3.6 of | group and includes the CoAP Block2 option (see Section 3.7 of | |||
| [I-D.ietf-core-groupcomm-bis]). This prevents the attack described | [I-D.ietf-core-groupcomm-bis]). This prevents the attack described | |||
| in Section 10.7, which leverages requests sent over unicast to a | in Section 10.7, which leverages requests sent over unicast to a | |||
| single group member and protected with the group mode. | single group member and protected with the group mode. | |||
| The pairwise mode protects messages between two members of a group, | Senders cannot use the pairwise mode to protect a message intended | |||
| essentially following [RFC8613], but with the following notable | for multiple recipients. In fact, the pairwise mode is defined only | |||
| differences: | between two endpoints and the keying material is thus only available | |||
| to one recipient. | ||||
| o The 'kid' and 'kid context' parameters of the COSE object are used | ||||
| as defined in Section 4.2 of this document. | ||||
| o The external_aad defined in Section 4.3.1 of this document is used | ||||
| for the encryption process. | ||||
| o The Pairwise Sender/Recipient Keys used as Sender/Recipient keys | ||||
| are derived as defined in Section 2.3 of this document. | ||||
| Senders MUST NOT use the pairwise mode to protect a message intended | However, a sender can use the pairwise mode to protect a message sent | |||
| for multiple recipients. The pairwise mode is defined only between | to (but not intended for) multiple recipients, if interested in a | |||
| two endpoints and the keying material is thus only available to one | response from only one of them. For instance, this is useful to | |||
| recipient. | support the address discovery service defined in Section 9.1, when a | |||
| single 'kid' value is indicated in the payload of a request sent to | ||||
| multiple recipients, e.g. over multicast. | ||||
| The Group Manager MAY indicate that the group uses also the pairwise | The Group Manager MAY indicate that the group uses also the pairwise | |||
| mode, as part of the group data provided to candidate group members | mode, as part of the group data provided to candidate group members | |||
| when joining the group. | when joining the group. | |||
| 9.1. Pre-Conditions | 9.1. Pre-Conditions | |||
| In order to protect an outgoing message in pairwise mode, the sender | In order to protect an outgoing message in pairwise mode, the sender | |||
| needs to know the public key and the Recipient ID for the recipient | needs to know the public key and the Recipient ID for the recipient | |||
| endpoint, as stored in the Recipient Context associated to that | endpoint, as stored in the Recipient Context associated to that | |||
| endpoint (see Pairwise Sender Context of Section 2.3.3). | endpoint (see Section 2.3.3). | |||
| Furthermore, the sender needs to know the individual address of the | Furthermore, the sender needs to know the individual address of the | |||
| recipient endpoint. This information may not be known at any given | recipient endpoint. This information may not be known at any given | |||
| point in time. For instance, right after having joined the group, a | point in time. For instance, right after having joined the group, a | |||
| client may know the public key and Recipient ID for a given server, | client may know the public key and Recipient ID for a given server, | |||
| but not the addressing information required to reach it with an | but not the addressing information required to reach it with an | |||
| individual, one-to-one request. | individual, one-to-one request. | |||
| To make addressing information of individual endpoints available, | To make addressing information of individual endpoints available, | |||
| servers in the group MAY expose a resource to which a client can send | servers in the group MAY expose a resource to which a client can send | |||
| a group request targeting a server or a set of servers, identified by | a group request targeting a set of servers, identified by their 'kid' | |||
| their 'kid' value(s). The specified set may be empty, hence | values specified in the request payload. The specified set may be | |||
| identifying all the servers in the group. Further details of such an | empty, hence identifying all the servers in the group. Further | |||
| interface are out of scope for this document. | details of such an interface are out of scope for this document. | |||
| 9.2. Protecting the Request | 9.2. Main Differences from OSCORE | |||
| When using the pairwise mode, the request is protected as defined in | The pairwise mode protects messages between two members of a group, | |||
| Section 8.1, with the following differences. | essentially following [RFC8613], but with the following notable | |||
| differences. | ||||
| o The Group Flag MUST be set to 0. | o The 'kid' and 'kid context' parameters of the COSE object are used | |||
| as defined in Section 4.2 of this document. | ||||
| o The used Sender Key is the Pairwise Sender Key (see Section 2.3). | o The external_aad defined in Section 4.3 of this document is used | |||
| for the encryption process. | ||||
| o The counter signature is not computed and therefore not included | o The Pairwise Sender/Recipient Keys used as Sender/Recipient keys | |||
| in the message. The payload of the protected request thus | are derived as defined in Section 2.3 of this document. | |||
| terminates with the encoded ciphertext of the COSE object, just | ||||
| like in [RFC8613]. | ||||
| Note that, like in the group mode, the external_aad for encryption is | 9.3. Protecting the Request | |||
| generated as in Section 4.3.1, and the Partial IV is the current | ||||
| fresh value of the client's Sender Sequence Number (see | ||||
| Section 2.3.2). | ||||
| 9.3. Verifying the Request | When using the pairwise mode, the request is protected as defined in | |||
| Section 8.1 of [RFC8613], with the differences summarized in | ||||
| Section 9.2 of this document. The following difference also applies. | ||||
| o If Observe [RFC7641] is supported, what defined in Section 8.1.1 | ||||
| of this document holds. | ||||
| 9.4. Verifying the Request | ||||
| Upon receiving a request with the Group Flag set to 0, following the | Upon receiving a request with the Group Flag set to 0, following the | |||
| procedure in Section 7, the server MUST process it as defined in | procedure in Section 7, the server MUST process it as defined in | |||
| Section 8.2, with the following differences. | Section 8.2 of [RFC8613], with the differences summarized in | |||
| Section 9.2 of this document. The following differences also apply. | ||||
| o If the server discards the request due to not retrieving a | o If the server discards the request due to not retrieving a | |||
| Security Context associated to the OSCORE group or to not | Security Context associated to the OSCORE group or to not | |||
| supporting the pairwise mode, the server MAY respond with a 4.02 | supporting the pairwise mode, the server MAY respond with a 4.01 | |||
| (Bad Option) error. When doing so, the server MAY set an Outer | (Unauthorized) error message or a 4.02 (Bad Option) error message, | |||
| Max-Age option with value zero, and MAY include a descriptive | respectively. When doing so, the server MAY set an Outer Max-Age | |||
| string as diagnostic payload. | option with value zero, and MAY include a descriptive string as | |||
| diagnostic payload. | ||||
| o If a new Recipient Context is created for this Recipient ID, new | o If a new Recipient Context is created for this Recipient ID, new | |||
| Pairwise Sender/Recipient Keys are also derived (see | Pairwise Sender/Recipient Keys are also derived (see | |||
| Section 2.3.1). The new Pairwise Sender/Recipient Keys are | Section 2.3.1). The new Pairwise Sender/Recipient Keys are | |||
| deleted if the Recipient Context is deleted as a result of the | deleted if the Recipient Context is deleted as a result of the | |||
| message not being successfully verified. | message not being successfully verified. | |||
| o The used Recipient Key is the Pairwise Recipient Key (see | o If Observe [RFC7641] is supported, what defined in Section 8.2.1 | |||
| Section 2.3). | of this document holds. | |||
| o No verification of counter signature occurs, as there is none | ||||
| included in the message. | ||||
| 9.4. Protecting the Response | 9.5. Protecting the Response | |||
| When using the pairwise mode, a response is protected as defined in | When using the pairwise mode, a response is protected as defined in | |||
| Section 8.3, with the following differences. | Section 8.3 of [RFC8613], with the differences summarized in | |||
| Section 9.2 of this document. The following differences also apply. | ||||
| o The Group Flag MUST be set to 0. | o As discussed in Section 2.4.3.1, the server can obtain a new | |||
| Sender ID from the Group Manager. In such a case, the server can | ||||
| help the client to synchronize, by including the 'kid' parameter | ||||
| in a response protected in pairwise mode, even when the request | ||||
| was also protected in pairwise mode. | ||||
| o The used Sender Key is the Pairwise Sender Key (see Section 2.3). | That is, when responding to a request protected in pairwise mode, | |||
| the server SHOULD include the 'kid' parameter in a response | ||||
| protected in pairwise mode, if it is replying to that client for | ||||
| the first time since the assignment of its new Sender ID. | ||||
| o The counter signature is not computed and therefore not included | o If Observe [RFC7641] is supported, what defined in Section 8.3.1 | |||
| in the message. The payload of the protected response thus | of this document holds. | |||
| terminates with the encoded ciphertext of the COSE object, just | ||||
| like in [RFC8613]. | ||||
| 9.5. Verifying the Response | 9.6. Verifying the Response | |||
| Upon receiving a response with the Group Flag set to 0, following the | Upon receiving a response with the Group Flag set to 0, following the | |||
| procedure in Section 7, the client MUST process it as defined in | procedure in Section 7, the client MUST process it as defined in | |||
| Section 8.4, with the following differences. | Section 8.4 of [RFC8613], with the differences summarized in | |||
| Section 9.2 of this document. The following differences also apply. | ||||
| o If a new Recipient Context is created for this Recipient ID, new | o If a new Recipient Context is created for this Recipient ID, new | |||
| Pairwise Sender/Recipient Keys are also derived (see | Pairwise Sender/Recipient Keys are also derived (see | |||
| Section 2.3.1). The new Pairwise Sender/Recipient Keys are | Section 2.3.1). The new Pairwise Sender/Recipient Keys are | |||
| deleted if the Recipient Context is deleted as a result of the | deleted if the Recipient Context is deleted as a result of the | |||
| message not being successfully verified. | message not being successfully verified. | |||
| o The used Recipient Key is the Pairwise Recipient Key (see | o If Observe [RFC7641] is supported, what defined in Section 8.4.1 | |||
| Section 2.3). | of this document holds. | |||
| o No verification of counter signature occurs, as there is none | ||||
| included in the message. | ||||
| 10. Security Considerations | 10. Security Considerations | |||
| The same threat model discussed for OSCORE in Appendix D.1 of | The same threat model discussed for OSCORE in Appendix D.1 of | |||
| [RFC8613] holds for Group OSCORE. In addition, when using the group | [RFC8613] holds for Group OSCORE. In addition, when using the group | |||
| mode, source authentication of messages is explicitly ensured by | mode, source authentication of messages is explicitly ensured by | |||
| means of counter signatures, as discussed in Section 10.1. | means of counter signatures, as discussed in Section 10.1. | |||
| The same considerations on supporting Proxy operations discussed for | The same considerations on supporting Proxy operations discussed for | |||
| OSCORE in Appendix D.2 of [RFC8613] hold for Group OSCORE. | OSCORE in Appendix D.2 of [RFC8613] hold for Group OSCORE. | |||
| The same considerations on protected message fields for OSCORE | The same considerations on protected message fields for OSCORE | |||
| discussed in Appendix D.3 of [RFC8613] hold for Group OSCORE. | discussed in Appendix D.3 of [RFC8613] hold for Group OSCORE. | |||
| The same considerations on uniqueness of (key, nonce) pairs for | The same considerations on uniqueness of (key, nonce) pairs for | |||
| OSCORE discussed in Appendix D.4 of [RFC8613] hold for Group OSCORE. | OSCORE discussed in Appendix D.4 of [RFC8613] hold for Group OSCORE. | |||
| This is further discussed in Section 10.2 of this document. | This is further discussed in Section 10.2 of this document. | |||
| The same considerations on unprotected message fields for OSCORE | The same considerations on unprotected message fields for OSCORE | |||
| discussed in Appendix D.5 of [RFC8613] hold for Group OSCORE, with | discussed in Appendix D.5 of [RFC8613] hold for Group OSCORE, with | |||
| the following difference. The counter signature included in a Group | the following differences. First, the 'kid context' of request | |||
| OSCORE message protected in group mode is computed also over the | messages is part of the Additional Authenticated Data, thus safely | |||
| value of the OSCORE option, which is part of the Additional | enabling to keep observations active beyond a possible change of ID | |||
| Authenticated Data used in the signing process. This is further | Context (Gid), following a group rekeying (see Section 4.3). Second, | |||
| discussed in Section 10.6 of this document. | the counter signature included in a Group OSCORE message protected in | |||
| group mode is computed also over the value of the OSCORE option, | ||||
| which is also part of the Additional Authenticated Data used in the | ||||
| signing process. This is further discussed in Section 10.6 of this | ||||
| document. | ||||
| As discussed in Section 6.2.3 of [I-D.ietf-core-groupcomm-bis], Group | As discussed in Section 6.2.3 of [I-D.ietf-core-groupcomm-bis], Group | |||
| OSCORE addresses security attacks against CoAP listed in Sections | OSCORE addresses security attacks against CoAP listed in Sections | |||
| 11.2-11.6 of [RFC7252], especially when run over IP multicast. | 11.2-11.6 of [RFC7252], especially when run over IP multicast. | |||
| The rest of this section first discusses security aspects to be taken | The rest of this section first discusses security aspects to be taken | |||
| into account when using Group OSCORE. Then it goes through aspects | into account when using Group OSCORE. Then it goes through aspects | |||
| covered in the security considerations of OSCORE (see Section 12 of | covered in the security considerations of OSCORE (see Section 12 of | |||
| [RFC8613]), and discusses how they hold when Group OSCORE is used. | [RFC8613]), and discusses how they hold when Group OSCORE is used. | |||
| skipping to change at page 39, line 32 ¶ | skipping to change at page 41, line 38 ¶ | |||
| ensures that a message sent to a group has been sent by a member | ensures that a message sent to a group has been sent by a member | |||
| of that group, but not necessarily by the alleged sender. This is | of that group, but not necessarily by the alleged sender. This is | |||
| why source authentication of messages sent to a group is ensured | why source authentication of messages sent to a group is ensured | |||
| through a counter signature, which is computed by the sender using | through a counter signature, which is computed by the sender using | |||
| its own private key and then appended to the message payload. | its own private key and then appended to the message payload. | |||
| Instead, the pairwise mode described in Section 9 protects messages | Instead, the pairwise mode described in Section 9 protects messages | |||
| by using pairwise symmetric keys, derived from the static-static | by using pairwise symmetric keys, derived from the static-static | |||
| Diffie-Hellman shared secret computed from the asymmetric keys of the | Diffie-Hellman shared secret computed from the asymmetric keys of the | |||
| sender and recipient endpoint (see Section 2.3). Therefore, in the | sender and recipient endpoint (see Section 2.3). Therefore, in the | |||
| parwise mode, the AEAD algorithm provides both pairwise data- | pairwise mode, the AEAD algorithm provides both pairwise data- | |||
| confidentiality and source authentication of messages, without using | confidentiality and source authentication of messages, without using | |||
| counter signatures. | counter signatures. | |||
| The long-term storing of the Diffie-Hellman shared secret is a | The long-term storing of the Diffie-Hellman shared secret is a | |||
| potential security issue. In fact, if the shared secret of two group | potential security issue. In fact, if the shared secret of two group | |||
| members is leaked, a third group member can exploit it to impersonate | members is leaked, a third group member can exploit it to impersonate | |||
| any of those two group members, by deriving and using their pairwise | any of those two group members, by deriving and using their pairwise | |||
| key. The possibility of such leakage should be contemplated, as more | key. The possibility of such leakage should be contemplated, as more | |||
| likely to happen than the leakage of a private key, which could be | likely to happen than the leakage of a private key, which could be | |||
| rather protected at a significantly higher level than generic memory, | rather protected at a significantly higher level than generic memory, | |||
| skipping to change at page 40, line 15 ¶ | skipping to change at page 42, line 22 ¶ | |||
| case of misbehaving. | case of misbehaving. | |||
| 10.2. Uniqueness of (key, nonce) | 10.2. Uniqueness of (key, nonce) | |||
| The proof for uniqueness of (key, nonce) pairs in Appendix D.4 of | The proof for uniqueness of (key, nonce) pairs in Appendix D.4 of | |||
| [RFC8613] is also valid in group communication scenarios. That is, | [RFC8613] is also valid in group communication scenarios. That is, | |||
| given an OSCORE group: | given an OSCORE group: | |||
| o Uniqueness of Sender IDs within the group is enforced by the Group | o Uniqueness of Sender IDs within the group is enforced by the Group | |||
| Manager, which never reassigns the same Sender ID within the same | Manager, which never reassigns the same Sender ID within the same | |||
| group. | group under the same Gid value. | |||
| o The case A in Appendix D.4 of [RFC8613] concerns all group | o The case A in Appendix D.4 of [RFC8613] concerns all group | |||
| requests and responses including a Partial IV (e.g. Observe | requests and responses including a Partial IV (e.g. Observe | |||
| notifications). In this case, same considerations from [RFC8613] | notifications). In this case, same considerations from [RFC8613] | |||
| apply here as well. | apply here as well. | |||
| o The case B in Appendix D.4 of [RFC8613] concerns responses not | o The case B in Appendix D.4 of [RFC8613] concerns responses not | |||
| including a Partial IV (e.g. single response to a group request). | including a Partial IV (e.g. single response to a group request). | |||
| In this case, same considerations from [RFC8613] apply here as | In this case, same considerations from [RFC8613] apply here as | |||
| well. | well. | |||
| skipping to change at page 41, line 12 ¶ | skipping to change at page 43, line 14 ¶ | |||
| join and leave at any time, in order to limit the impact on | join and leave at any time, in order to limit the impact on | |||
| performance due to the Security Context and keying material update. | performance due to the Security Context and keying material update. | |||
| 10.4. Update of Security Context and Key Rotation | 10.4. Update of Security Context and Key Rotation | |||
| A group member can receive a message shortly after the group has been | A group member can receive a message shortly after the group has been | |||
| rekeyed, and new security parameters and keying material have been | rekeyed, and new security parameters and keying material have been | |||
| distributed by the Group Manager. | distributed by the Group Manager. | |||
| This may result in a client using an old Security Context to protect | This may result in a client using an old Security Context to protect | |||
| a group request, and a server using a different new Security Context | a request, and a server using a different new Security Context to | |||
| to protect a corresponding response. As a consequence, clients may | protect a corresponding response. As a consequence, clients may | |||
| receive a response protected with a Security Context different from | receive a response protected with a Security Context different from | |||
| the one used to protect the corresponding group request. | the one used to protect the corresponding request. | |||
| In particular, a server may first get a group request protected with | In particular, a server may first get a request protected with the | |||
| the old Security Context, then install the new Security Context, and | old Security Context, then install the new Security Context, and only | |||
| only after that produce a response to send back to the client. In | after that produce a response to send back to the client. In such a | |||
| such a case, as specified in Section 8.3, the server MUST protect the | case, as specified in Section 8.3, the server MUST protect the | |||
| potential response using the new Security Context. Specifically, the | potential response using the new Security Context. Specifically, the | |||
| server MUST include its Sender Sequence Number as Partial IV in the | server MUST include its Sender Sequence Number as Partial IV in the | |||
| response and use it to build the AEAD nonce to protect the response. | response and use it to build the AEAD nonce to protect the response. | |||
| This prevents the AEAD nonce from the request from being reused with | This prevents the AEAD nonce from the request from being reused with | |||
| the new Security Context. | the new Security Context. | |||
| The client will process that response using the new Security Context, | The client will process that response using the new Security Context, | |||
| provided that it has installed the new security parameters and keying | provided that it has installed the new security parameters and keying | |||
| material before the message processing. | material before the message processing. | |||
| skipping to change at page 41, line 48 ¶ | skipping to change at page 43, line 50 ¶ | |||
| 10.4.1. Late Update on the Sender | 10.4.1. Late Update on the Sender | |||
| In this case, the sender protects a message using the old Security | In this case, the sender protects a message using the old Security | |||
| Context, i.e. before having installed the new Security Context. | Context, i.e. before having installed the new Security Context. | |||
| However, the recipient receives the message after having installed | However, the recipient receives the message after having installed | |||
| the new Security Context, and is thus unable to correctly process it. | the new Security Context, and is thus unable to correctly process it. | |||
| A possible way to ameliorate this issue is to preserve the old, | A possible way to ameliorate this issue is to preserve the old, | |||
| recent, Security Context for a maximum amount of time defined by the | recent, Security Context for a maximum amount of time defined by the | |||
| application. By doing so, the recipient can still try to process the | application. By doing so, the recipient can still try to process the | |||
| received message using the old retained Security Context as second | received message using the old retained Security Context as a second | |||
| attempt. This makes particular sense when the recipient is a client, | attempt. This makes particular sense when the recipient is a client, | |||
| that would hence be able to process incoming responses protected with | that would hence be able to process incoming responses protected with | |||
| the old, recent, Security Context used to protect the associated | the old, recent, Security Context used to protect the associated | |||
| group request. Instead, a recipient server would better and more | group request. Instead, a recipient server would better and more | |||
| simply discard an incoming group request which is not successfully | simply discard an incoming group request which is not successfully | |||
| processed with the new Security Context. | processed with the new Security Context. | |||
| This tolerance preserves the processing of secure messages throughout | This tolerance preserves the processing of secure messages throughout | |||
| a long-lasting key rotation, as group rekeying processes may likely | a long-lasting key rotation, as group rekeying processes may likely | |||
| take a long time to complete, especially in large scale groups. On | take a long time to complete, especially in large scale groups. On | |||
| skipping to change at page 43, line 21 ¶ | skipping to change at page 45, line 21 ¶ | |||
| When a sender endpoint sends a message protected in pairwise mode to | When a sender endpoint sends a message protected in pairwise mode to | |||
| a recipient endpoint in an OSCORE group, a malicious group member may | a recipient endpoint in an OSCORE group, a malicious group member may | |||
| attempt to inject the message to a different OSCORE group also | attempt to inject the message to a different OSCORE group also | |||
| including the same endpoints (see Section 10.6.1). | including the same endpoints (see Section 10.6.1). | |||
| This practically relies on altering the content of the OSCORE option, | This practically relies on altering the content of the OSCORE option, | |||
| and having the same MAC in the ciphertext still correctly validating, | and having the same MAC in the ciphertext still correctly validating, | |||
| which has a success probability depending on the size of the MAC. | which has a success probability depending on the size of the MAC. | |||
| As discussed in Section 10.6.2, the attack is practically infeasible | As discussed in Section 10.6.2, the attack is practically infeasible | |||
| if the message is protected in group mode, since the counter | if the message is protected in group mode, thanks to the counter | |||
| signature is bound also to the OSCORE option, through the Additional | signature also bound to the OSCORE option through the Additional | |||
| Authenticated Data used in the signing process (see Section 4.3.2). | Authenticated Data used in the signing process (see Section 4.3). | |||
| 10.6.1. Attack Description | 10.6.1. Attack Description | |||
| Let us consider: | Let us consider: | |||
| o Two OSCORE groups G1 and G2, with ID Context (Group ID) Gid1 and | o Two OSCORE groups G1 and G2, with ID Context (Group ID) Gid1 and | |||
| Gid2, respectively. Both G1 and G2 use the AEAD cipher AES-CCM- | Gid2, respectively. Both G1 and G2 use the AEAD cipher AES-CCM- | |||
| 16-64-128, i.e. the MAC of the ciphertext is 8 bytes in size. | 16-64-128, i.e. the MAC of the ciphertext is 8 bytes in size. | |||
| o A sender endpoint X which is member of both G1 and G2, and uses | o A sender endpoint X which is member of both G1 and G2, and uses | |||
| skipping to change at page 43, line 46 ¶ | skipping to change at page 45, line 46 ¶ | |||
| (Sid1, Gid1) and (Sid2, Gid2) identify the same public key of X in | (Sid1, Gid1) and (Sid2, Gid2) identify the same public key of X in | |||
| G1 and G2, respectively. | G1 and G2, respectively. | |||
| o A recipient endpoint Y which is member of both G1 and G2, and uses | o A recipient endpoint Y which is member of both G1 and G2, and uses | |||
| the same public/private key pair in both groups. The endpoint Y | the same public/private key pair in both groups. The endpoint Y | |||
| has Sender ID Sid3 in G1 and Sender ID Sid4 in G2. The pairs | has Sender ID Sid3 in G1 and Sender ID Sid4 in G2. The pairs | |||
| (Sid3, Gid1) and (Sid4, Gid2) identify the same public key of Y in | (Sid3, Gid1) and (Sid4, Gid2) identify the same public key of Y in | |||
| G1 and G2, respectively. | G1 and G2, respectively. | |||
| o A malicious endpoint Z is also member of both G1 and G2. Hence, Z | o A malicious endpoint Z is also member of both G1 and G2. Hence, Z | |||
| is able to derive the symmetric keys associated to X in G1 and G2. | is able to derive the Sender Keys used by X in G1 and G2. | |||
| When X sends a message M1 addressed to Y in G1 and protected in | When X sends a message M1 addressed to Y in G1 and protected in | |||
| pairwise mode, Z can intercept M1, and forge a valid message M2 to be | pairwise mode, Z can intercept M1, and attempt to forge a valid | |||
| injected in G2, making it appear as still sent by X to Y and valid to | message M2 to be injected in G2, making it appear as still sent by X | |||
| be accepted. | to Y and valid to be accepted. | |||
| More in detail, Z intercepts and stops message M1, and forges a | More in detail, Z intercepts and stops message M1, and forges a | |||
| message M2 by changing the value of the OSCORE option from M1 as | message M2 by changing the value of the OSCORE option from M1 as | |||
| follows: the 'kid context' is changed from G1 to G2; and the 'kid' is | follows: the 'kid context' is set to G2 (rather than G1); and the | |||
| changed from Sid1 to Sid2. Then, Z injects message M2 as addressed | 'kid' is set to Sid2 (rather than Sid1). Then, Z injects message M2 | |||
| to Y in G2. | as addressed to Y in G2. | |||
| Upon receiving M2, there is a probability equal to 2^-64 that Y | Upon receiving M2, there is a probability equal to 2^-64 that Y | |||
| successfully verifies the same unchanged MAC by using Sid2 as | successfully verifies the same unchanged MAC by using the Pairwise | |||
| 'request_kid' and using the Pairwise Recipient Key associated to X in | Recipient Key associated to X in G2. | |||
| G2. | ||||
| Note that Z does not know the pairwise keys of X and Y, since it does | Note that Z does not know the pairwise keys of X and Y, since it does | |||
| not know and is not able to compute their shared Diffie-Hellman | not know and is not able to compute their shared Diffie-Hellman | |||
| secret. Therefore, Z is not able to check offline if a performed | secret. Therefore, Z is not able to check offline if a performed | |||
| forgery is actually valid, before sending the forged message to G2. | forgery is actually valid, before sending the forged message to G2. | |||
| 10.6.2. Attack Prevention in Group Mode | 10.6.2. Attack Prevention in Group Mode | |||
| When a Group OSCORE message is protected with the group mode, the | When a Group OSCORE message is protected with the group mode, the | |||
| counter signature is computed also over the value of the OSCORE | counter signature is computed also over the value of the OSCORE | |||
| option, which is part of the Additional Authenticated Data used in | option, which is part of the Additional Authenticated Data used in | |||
| the signing process (see Section 4.3.2). | the signing process (see Section 4.3). | |||
| That is, the countersignature is computed also over: the ID Context | That is, other than over the ciphertext, the countersignature is | |||
| (Group ID) and the Partial IV, which are always present in group | computed over: the ID Context (Gid) and the Partial IV, which are | |||
| requests; as well as the Sender ID of the message originator, which | always present in group requests; as well as the Sender ID of the | |||
| is always present in all group requests and responses. | message originator, which is always present in group requests as well | |||
| as in responses to requests protected in group mode. | ||||
| Since the signing process takes as input also the ciphertext of the | Since the signing process takes as input also the ciphertext of the | |||
| COSE_Encrypt0 object, the countersignature is bound not only to the | COSE_Encrypt0 object, the countersignature is bound not only to the | |||
| intended OSCORE group, hence to the triplet (Master Secret, Master | intended OSCORE group, hence to the triplet (Master Secret, Master | |||
| Salt, ID Context), but also to a specific Sender ID in that group and | Salt, ID Context), but also to a specific Sender ID in that group and | |||
| to its specific symmetric key used for AEAD encryption, hence to the | to its specific symmetric key used for AEAD encryption, hence to the | |||
| quartet (Master Secret, Master Salt, ID Context, Sender ID). | quartet (Master Secret, Master Salt, ID Context, Sender ID). | |||
| This makes it practically infeasible to perform the attack described | This makes it practically infeasible to perform the attack described | |||
| in Section 10.6.1, since it would require the adversary to | in Section 10.6.1, since it would require the adversary to | |||
| additionally forge a valid countersignature that replaces the | additionally forge a valid countersignature that replaces the | |||
| original one in the forged message M2. | original one in the forged message M2. | |||
| If the countersignature did not cover the OSCORE option, the attack | If the countersignature did not cover the OSCORE option, the attack | |||
| would be possible also in group mode, since the same unchanged | would still be possible against response messages protected in group | |||
| countersignature from messsage M1 would be also valid in message M2. | mode, since the same unchanged countersignature from message M1 would | |||
| be also valid in message M2. | ||||
| Also, the following attack simplifications would hold, since Z is | Also, the following attack simplifications would hold, since Z is | |||
| able to derive the Sender/Recipient Keys of X and Y in G1 and G2. | able to derive the Sender/Recipient Keys of X and Y in G1 and G2. | |||
| That is, Z can also set a convenient Partial IV in the response, | ||||
| until the same unchanged MAC is successfully verified by using G2 as | ||||
| 'request_kid_context', Sid2 as 'request_kid', and the symmetric key | ||||
| associated to X in G2. | ||||
| o If M2 is used as a request, Z can check offline if a performed | Since the Partial IV is 5 bytes in size, this requires 2^40 | |||
| forgery is actually valid before sending the forged message to G2. | operations to test all the Partial IVs, which can be done in real- | |||
| time. The probability that a single given message M1 can be used to | ||||
| That is, this attack would have a complexity of 2^64 offline | forge a response M2 for a given request would be equal to 2^-24, | |||
| calculations. | since there are more MAC values (8 bytes in size) than Partial IV | |||
| values (5 bytes in size). | ||||
| o If M2 is used as a response, Z can also change the response | ||||
| Partial IV, until the same unchanged MAC is successfully verified | ||||
| by using Sid2 as 'request_kid' and the symmetric key associated to | ||||
| X in G2. Since the Partial IV is 5 bytes in size, this requires | ||||
| 2^40 operations to test all the Partial IVs, which can be done in | ||||
| real-time. Also, the probability that a single given message M1 | ||||
| can be used to forge a response M2 for a given request would be | ||||
| equal to 2^-24, since there are more MAC values (8 bytes in size) | ||||
| than Partial IV values (5 bytes in size). | ||||
| Note that, by changing the Partial IV as discussed above, any | Note that, by changing the Partial IV as discussed above, any member | |||
| member of G1 would also be able to forge a valid signed response | of G1 would also be able to forge a valid signed response message M2 | |||
| message M2 to be injected in G1. | to be injected in the same group G1. | |||
| 10.7. Group OSCORE for Unicast Requests | 10.7. Group OSCORE for Unicast Requests | |||
| If a request is intended to be sent over unicast as addressed to a | If a request is intended to be sent over unicast as addressed to a | |||
| single group member, it is NOT RECOMMENDED for the client to protect | single group member, it is NOT RECOMMENDED for the client to protect | |||
| the request by using the group mode as defined in Section 8.1. | the request by using the group mode as defined in Section 8.1. | |||
| This does not include the case where the client sends a request over | This does not include the case where the client sends a request over | |||
| unicast to a proxy, to be forwarded to multiple intended recipients | unicast to a proxy, to be forwarded to multiple intended recipients | |||
| over multicast [I-D.ietf-core-groupcomm-bis]. In this case, the | over multicast [I-D.ietf-core-groupcomm-bis]. In this case, the | |||
| skipping to change at page 46, line 15 ¶ | skipping to change at page 48, line 11 ¶ | |||
| The impact of such an attack depends especially on the REST method of | The impact of such an attack depends especially on the REST method of | |||
| the request, i.e. the Inner CoAP Code of the OSCORE request message. | the request, i.e. the Inner CoAP Code of the OSCORE request message. | |||
| In particular, safe methods such as GET and FETCH would trigger | In particular, safe methods such as GET and FETCH would trigger | |||
| (several) unintended responses from the targeted server(s), while not | (several) unintended responses from the targeted server(s), while not | |||
| resulting in destructive behavior. On the other hand, non safe | resulting in destructive behavior. On the other hand, non safe | |||
| methods such as PUT, POST and PATCH/iPATCH would result in the target | methods such as PUT, POST and PATCH/iPATCH would result in the target | |||
| server(s) taking active actions on their resources and possible | server(s) taking active actions on their resources and possible | |||
| cyber-physical environment, with the risk of destructive consequences | cyber-physical environment, with the risk of destructive consequences | |||
| and possible implications for safety. | and possible implications for safety. | |||
| A client can instead use the pairwise mode as defined in Section 9.2, | A client can instead use the pairwise mode as defined in Section 9.3, | |||
| in order to protect a request sent to a single group member by using | in order to protect a request sent to a single group member by using | |||
| pairwise keying material (see Section 2.3). This prevents the attack | pairwise keying material (see Section 2.3). This prevents the attack | |||
| discussed above by construction, as only the intended server is able | discussed above by construction, as only the intended server is able | |||
| to derive the pairwise keying material used by the client to protect | to derive the pairwise keying material used by the client to protect | |||
| the request. A client supporting the pairwise mode SHOULD use it to | the request. A client supporting the pairwise mode SHOULD use it to | |||
| protect requests sent to a single group member over unicast, instead | protect requests sent to a single group member over unicast, instead | |||
| of using the group mode. For an example where this is not fulfilled, | of using the group mode. For an example where this is not fulfilled, | |||
| see Section 6.2.1 in | see Section 7.2.1 in | |||
| [I-D.tiloca-core-observe-multicast-notifications]. | [I-D.tiloca-core-observe-multicast-notifications]. | |||
| With particular reference to block-wise transfers [RFC7959], | With particular reference to block-wise transfers [RFC7959], | |||
| Section 2.3.6 of [I-D.ietf-core-groupcomm-bis] points out that, while | Section 3.7 of [I-D.ietf-core-groupcomm-bis] points out that, while | |||
| an initial request including the CoAP Block2 option can be sent over | an initial request including the CoAP Block2 option can be sent over | |||
| multicast, any other request in a transfer has to occur over unicast, | multicast, any other request in a transfer has to occur over unicast, | |||
| individually addressing the servers in the group. | individually addressing the servers in the group. | |||
| Additional considerations are discussed in Appendix E.3, with respect | Additional considerations are discussed in Appendix E, with respect | |||
| to requests including a CoAP Echo Option | to requests including a CoAP Echo Option | |||
| [I-D.ietf-core-echo-request-tag] that has to be sent over unicast, as | [I-D.ietf-core-echo-request-tag] that has to be sent over unicast, as | |||
| a challenge-response method for servers to achieve synchronization of | a challenge-response method for servers to achieve synchronization of | |||
| clients' Sender Sequence Number. | clients' Sender Sequence Number. | |||
| 10.8. End-to-end Protection | 10.8. End-to-end Protection | |||
| The same considerations from Section 12.1 of [RFC8613] hold for Group | The same considerations from Section 12.1 of [RFC8613] hold for Group | |||
| OSCORE. | OSCORE. | |||
| skipping to change at page 47, line 18 ¶ | skipping to change at page 49, line 16 ¶ | |||
| kept secret among the members of the respective OSCORE group and the | kept secret among the members of the respective OSCORE group and the | |||
| Group Manager responsible for that group. Also, the Master Secret | Group Manager responsible for that group. Also, the Master Secret | |||
| must have a good amount of randomness, and the Group Manager can | must have a good amount of randomness, and the Group Manager can | |||
| generate it offline using a good random number generator. This | generate it offline using a good random number generator. This | |||
| includes the case where the Group Manager rekeys the group by | includes the case where the Group Manager rekeys the group by | |||
| generating and distributing a new Master Secret. Randomness | generating and distributing a new Master Secret. Randomness | |||
| requirements for security are described in [RFC4086]. | requirements for security are described in [RFC4086]. | |||
| 10.10. Replay Protection | 10.10. Replay Protection | |||
| As in OSCORE, also Group OSCORE relies on sender sequence numbers | As in OSCORE [RFC8613], also Group OSCORE relies on Sender Sequence | |||
| included in the COSE message field 'Partial IV' and used to build | Numbers included in the COSE message field 'Partial IV' and used to | |||
| AEAD nonces. | build AEAD nonces. | |||
| Note that the Partial IV of an endpoint does not necessarily grow | Note that the Partial IV of an endpoint does not necessarily grow | |||
| monotonically. For instance, upon exhaustion of the endpoint Sender | monotonically. For instance, upon exhaustion of the endpoint Sender | |||
| Sequence Number, the Partial IV also gets exhausted. As discussed in | Sequence Number, the Partial IV also gets exhausted. As discussed in | |||
| Section 2.4.3, this results either in the endpoint being individually | Section 2.4.3, this results either in the endpoint being individually | |||
| rekeyed and getting a new Sender ID, or in the establishment of a new | rekeyed and getting a new Sender ID, or in the establishment of a new | |||
| Security Context in the group. Therefore, uniqueness of (key, nonce) | Security Context in the group. Therefore, uniqueness of (key, nonce) | |||
| pairs (see Section 10.2) is preserved also when a new Security | pairs (see Section 10.2) is preserved also when a new Security | |||
| Context is established. | Context is established. | |||
| As discussed in Section 6.1, an endpoint that has just joined a group | Since one-to-many communication such as multicast usually involves | |||
| is exposed to replay attack, as it is not aware of the Sender | unreliable transports, the simplification of the Replay Window to a | |||
| Sequence Numbers currently used by other group members. Appendix E | size of 1 suggested in Section 7.4 of [RFC8613] is not viable with | |||
| describes how endpoints can synchronize with others' Sender Sequence | Group OSCORE, unless exchanges in the group rely only on unicast | |||
| Number. | messages. | |||
| Unless exchanges in a group rely only on unicast messages, Group | As discussed in Section 6.1, a Replay Window may be initialized as | |||
| OSCORE cannot be used with reliable transport. Thus, unless only | not valid, following the loss of mutable Security Context | |||
| unicast messages are sent in the group, it cannot be defined that | Section 2.4.1. In particular, Section 2.4.1.1 and Section 2.4.1.2 | |||
| only messages with sequence numbers that are equal to the previous | define measures that endpoints need to take in such a situation, | |||
| sequence number + 1 are accepted. | before resuming to accept incoming messages from other group members. | |||
| The processing of response messages described in Section 2.3.1 of | 10.11. Message Freshness | |||
| [I-D.ietf-core-groupcomm-bis] also ensures that a client accepts a | ||||
| single valid response to a given request from each replying server, | ||||
| unless CoAP observation is used. | ||||
| 10.11. Client Aliveness | As discussed in Section 6.2, a server may not be able to assert | |||
| whether an incoming request is fresh, in case it does not have or has | ||||
| lost synchronization with the client's Sender Sequence Number. | ||||
| As discussed in Section 12.5 of [RFC8613], a server may use the CoAP | If freshness is relevant for the application, the server may | |||
| Echo Option [I-D.ietf-core-echo-request-tag] to verify the aliveness | (re-)synchronize with the client's Sender Sequence Number at any | |||
| of the client that originated a received request. This would also | time, by using the approach described in Appendix E and based on the | |||
| allow the server to (re-)synchronize with the client's Sender | CoAP Echo Option [I-D.ietf-core-echo-request-tag], as a variant of | |||
| Sequence Number, as well as to ensure that the request is fresh and | the approach defined in Appendix B.1.2 of [RFC8613] applicable to | |||
| has not been replayed or (purposely) delayed, if it is the first one | Group OSCORE. | |||
| received from that client after having joined the group or rebooted | ||||
| (see Appendix E.3). | ||||
| 10.12. Cryptographic Considerations | 10.12. Client Aliveness | |||
| Building on Section 12.5 of [RFC8613], a server may use the CoAP Echo | ||||
| Option [I-D.ietf-core-echo-request-tag] to verify the aliveness of | ||||
| the client that originated a received request, by using the approach | ||||
| described in Appendix E of this specification. | ||||
| 10.13. Cryptographic Considerations | ||||
| The same considerations from Section 12.6 of [RFC8613] about the | The same considerations from Section 12.6 of [RFC8613] about the | |||
| maximum Sender Sequence Number hold for Group OSCORE. | maximum Sender Sequence Number hold for Group OSCORE. | |||
| As discussed in Section 2.4.2, an endpoint that experiences an | As discussed in Section 2.4.2, an endpoint that experiences an | |||
| exhaustion of its own Sender Sequence Numbers MUST NOT protect | exhaustion of its own Sender Sequence Numbers MUST NOT protect | |||
| further messages including a Partial IV, until it has derived a new | further messages including a Partial IV, until it has derived a new | |||
| Sender Context. This prevents the endpoint to reuse the same AEAD | Sender Context. This prevents the endpoint to reuse the same AEAD | |||
| nonces with the same Sender Key. | nonces with the same Sender Key. | |||
| skipping to change at page 49, line 13 ¶ | skipping to change at page 51, line 8 ¶ | |||
| consequence, some deployments using, for instance, ECDSA with NIST | consequence, some deployments using, for instance, ECDSA with NIST | |||
| P-256 may not support the mandatory signature algorithm but that | P-256 may not support the mandatory signature algorithm but that | |||
| should not be an issue for local deployments. | should not be an issue for local deployments. | |||
| The derivation of pairwise keys defined in Section 2.3.1 is | The derivation of pairwise keys defined in Section 2.3.1 is | |||
| compatible with ECDSA and EdDSA asymmetric keys, but is not | compatible with ECDSA and EdDSA asymmetric keys, but is not | |||
| compatible with RSA asymmetric keys. The security of using the same | compatible with RSA asymmetric keys. The security of using the same | |||
| key pair for Diffie-Hellman and for signing is demonstrated in | key pair for Diffie-Hellman and for signing is demonstrated in | |||
| [Degabriele]. | [Degabriele]. | |||
| 10.13. Message Segmentation | 10.14. Message Segmentation | |||
| The same considerations from Section 12.7 of [RFC8613] hold for Group | The same considerations from Section 12.7 of [RFC8613] hold for Group | |||
| OSCORE. | OSCORE. | |||
| 10.14. Privacy Considerations | 10.15. Privacy Considerations | |||
| Group OSCORE ensures end-to-end integrity protection and encryption | Group OSCORE ensures end-to-end integrity protection and encryption | |||
| of the message payload and all options that are not used for proxy | of the message payload and all options that are not used for proxy | |||
| operations. In particular, options are processed according to the | operations. In particular, options are processed according to the | |||
| same class U/I/E that they have for OSCORE. Therefore, the same | same class U/I/E that they have for OSCORE. Therefore, the same | |||
| privacy considerations from Section 12.8 of [RFC8613] hold for Group | privacy considerations from Section 12.8 of [RFC8613] hold for Group | |||
| OSCORE. | OSCORE. | |||
| Furthermore, the following privacy considerations hold, about the | Furthermore, the following privacy considerations hold about the | |||
| OSCORE option that may reveal information on the communicating | OSCORE option, which may reveal information on the communicating | |||
| endpoints. | endpoints. | |||
| o The 'kid' parameter, which is intended to help a recipient | o The 'kid' parameter, which is intended to help a recipient | |||
| endpoint to find the right Recipient Context, may reveal | endpoint to find the right Recipient Context, may reveal | |||
| information about the Sender Endpoint. Since both requests and | information about the Sender Endpoint. When both a request and | |||
| responses always include the 'kid' parameter, this may reveal | the corresponding responses include the 'kid' parameter, this may | |||
| information about both a client sending a group request and all | reveal information about both a client sending a request and all | |||
| the possibly replying servers sending their own individual | the possibly replying servers sending their own individual | |||
| response. | response. | |||
| o The 'kid context' parameter, which is intended to help a recipient | o The 'kid context' parameter, which is intended to help a recipient | |||
| endpoint to find the right Security Context, reveals information | endpoint to find the right Security Context, reveals information | |||
| about the sender endpoint. In particular, it reveals that the | about the sender endpoint. In particular, it reveals that the | |||
| sender endpoint is a member of a particular OSCORE group, whose | sender endpoint is a member of a particular OSCORE group, whose | |||
| current Group ID is indicated in the 'kid context' parameter. | current Group ID is indicated in the 'kid context' parameter. | |||
| When receiving a group request, each of the recipient endpoints can | When receiving a group request, each of the recipient endpoints can | |||
| reply with a response that includes its Sender ID as 'kid' parameter. | reply with a response that includes its Sender ID as 'kid' parameter. | |||
| All these responses will be matchable with the request through the | All these responses will be matchable with the request through the | |||
| Token. Thus, even if these responses do not include a 'kid context' | Token. Thus, even if these responses do not include a 'kid context' | |||
| parameter, it becomes possible to understand that the responder | parameter, it becomes possible to understand that the responder | |||
| endpoints are in the same group of the requester endpoint. | endpoints are in the same group of the requester endpoint. | |||
| Furthermore, using the mechanisms described in Appendix E.3 to | Furthermore, using the mechanisms described in Appendix E to achieve | |||
| achieve sequence number synchronization with a client may reveal when | Sender Sequence Number synchronization with a client may reveal when | |||
| a server device goes through a reboot. This can be mitigated by the | a server device goes through a reboot. This can be mitigated by the | |||
| server device storing the precise state of the replay window of each | server device storing the precise state of the Replay Window of each | |||
| known client on a clean shutdown. | known client on a clean shutdown. | |||
| Finally, the mechanism described in Section 10.5 to prevent | Finally, the mechanism described in Section 10.5 to prevent | |||
| collisions of Group Identifiers from different Group Managers may | collisions of Group Identifiers from different Group Managers may | |||
| reveal information about events in the respective OSCORE groups. In | reveal information about events in the respective OSCORE groups. In | |||
| particular, a Group Identifier changes when the corresponding group | particular, a Group Identifier changes when the corresponding group | |||
| is rekeyed. Thus, Group Managers might use the shared list of Group | is rekeyed. Thus, Group Managers might use the shared list of Group | |||
| Identifiers to infer the rate and patterns of group membership | Identifiers to infer the rate and patterns of group membership | |||
| changes triggering a group rekeying, e.g. due to newly joined members | changes triggering a group rekeying, e.g. due to newly joined members | |||
| or evicted (compromised) members. In order to alleviate this privacy | or evicted (compromised) members. In order to alleviate this privacy | |||
| concern, it should be hidden from the Group Managers which exact | concern, it should be hidden from the Group Managers which exact | |||
| Group Manager has currently assigned which Group Identifiers in its | Group Manager has currently assigned which Group Identifiers in its | |||
| OSCORE groups. | OSCORE groups. | |||
| 11. IANA Considerations | 11. IANA Considerations | |||
| Note to RFC Editor: Please replace all occurrences of "[This | Note to RFC Editor: Please replace "[This Document]" with the RFC | |||
| Document]" with the RFC number of this specification and delete this | number of this specification and delete this paragraph. | |||
| paragraph. | ||||
| This document has the following actions for IANA. | This document has the following actions for IANA. | |||
| 11.1. OSCORE Flag Bits Registry | 11.1. OSCORE Flag Bits Registry | |||
| IANA is asked to add the following value entry to the "OSCORE Flag | IANA is asked to add the following value entry to the "OSCORE Flag | |||
| Bits" subregistry defined in Section 13.7 of [RFC8613] as part of the | Bits" subregistry defined in Section 13.7 of [RFC8613] as part of the | |||
| "CoRE Parameters" registry. | "CoRE Parameters" registry. | |||
| +--------------+------------+----------------------------+-----------+ | +--------------+------------+-----------------------------+-----------+ | |||
| | Bit Position | Name | Description | Reference | | | Bit Position | Name | Description | Reference | | |||
| +--------------+------------+----------------------------+-----------+ | +--------------+------------+-----------------------------+-----------+ | |||
| | 2 | Group Flag | Set to 1 if the message is | [This | | | 2 | Group Flag | For using a Group OSCORE | [This | | |||
| | | | protected with the group | Document] | | | | | Security Context, set to 1 | Document] | | |||
| | | | mode of Group OSCORE | | | | | | if the message is protected | | | |||
| +--------------+------------+----------------------------+-----------+ | | | | with the group mode | | | |||
| +--------------+------------+-----------------------------+-----------+ | ||||
| 12. References | 12. References | |||
| 12.1. Normative References | 12.1. Normative References | |||
| [COSE.Algorithms] | [COSE.Algorithms] | |||
| IANA, "COSE Algorithms", | IANA, "COSE Algorithms", | |||
| <https://www.iana.org/assignments/cose/ | <https://www.iana.org/assignments/cose/ | |||
| cose.xhtml#algorithms>. | cose.xhtml#algorithms>. | |||
| [COSE.Key.Types] | [COSE.Key.Types] | |||
| IANA, "COSE Key Types", | IANA, "COSE Key Types", | |||
| <https://www.iana.org/assignments/cose/cose.xhtml#key- | <https://www.iana.org/assignments/cose/cose.xhtml#key- | |||
| type>. | type>. | |||
| [I-D.ietf-cbor-7049bis] | ||||
| Bormann, C. and P. Hoffman, "Concise Binary Object | ||||
| Representation (CBOR)", draft-ietf-cbor-7049bis-16 (work | ||||
| in progress), September 2020. | ||||
| [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)", draft- | for the Constrained Application Protocol (CoAP)", draft- | |||
| ietf-core-groupcomm-bis-02 (work in progress), November | ietf-core-groupcomm-bis-03 (work in progress), February | |||
| 2020. | 2021. | |||
| [I-D.ietf-cose-countersign] | [I-D.ietf-cose-countersign] | |||
| Schaad, J. and R. Housley, "CBOR Object Signing and | Schaad, J. and R. Housley, "CBOR Object Signing and | |||
| Encryption (COSE): Countersignatures", draft-ietf-cose- | Encryption (COSE): Countersignatures", draft-ietf-cose- | |||
| countersign-01 (work in progress), October 2020. | countersign-02 (work in progress), December 2020. | |||
| [I-D.ietf-cose-rfc8152bis-algs] | [I-D.ietf-cose-rfc8152bis-algs] | |||
| Schaad, J., "CBOR Object Signing and Encryption (COSE): | Schaad, J., "CBOR Object Signing and Encryption (COSE): | |||
| Initial Algorithms", draft-ietf-cose-rfc8152bis-algs-12 | Initial Algorithms", draft-ietf-cose-rfc8152bis-algs-12 | |||
| (work in progress), September 2020. | (work in progress), September 2020. | |||
| [I-D.ietf-cose-rfc8152bis-struct] | [I-D.ietf-cose-rfc8152bis-struct] | |||
| Schaad, J., "CBOR Object Signing and Encryption (COSE): | Schaad, J., "CBOR Object Signing and Encryption (COSE): | |||
| Structures and Process", draft-ietf-cose-rfc8152bis- | Structures and Process", draft-ietf-cose-rfc8152bis- | |||
| struct-14 (work in progress), September 2020. | struct-15 (work in progress), February 2021. | |||
| [NIST-800-56A] | [NIST-800-56A] | |||
| Barker, E., Chen, L., Roginsky, A., Vassilev, A., and R. | Barker, E., Chen, L., Roginsky, A., Vassilev, A., and R. | |||
| Davis, "Recommendation for Pair-Wise Key-Establishment | Davis, "Recommendation for Pair-Wise Key-Establishment | |||
| Schemes Using Discrete Logarithm Cryptography - NIST | Schemes Using Discrete Logarithm Cryptography - NIST | |||
| Special Publication 800-56A, Revision 3", April 2018, | Special Publication 800-56A, Revision 3", April 2018, | |||
| <https://nvlpubs.nist.gov/nistpubs/SpecialPublications/ | <https://nvlpubs.nist.gov/nistpubs/SpecialPublications/ | |||
| NIST.SP.800-56Ar3.pdf>. | NIST.SP.800-56Ar3.pdf>. | |||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| skipping to change at page 52, line 28 ¶ | skipping to change at page 54, line 19 ¶ | |||
| [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
| 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
| May 2017, <https://www.rfc-editor.org/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
| [RFC8613] Selander, G., Mattsson, J., Palombini, F., and L. Seitz, | [RFC8613] Selander, G., Mattsson, J., Palombini, F., and L. Seitz, | |||
| "Object Security for Constrained RESTful Environments | "Object Security for Constrained RESTful Environments | |||
| (OSCORE)", RFC 8613, DOI 10.17487/RFC8613, July 2019, | (OSCORE)", RFC 8613, DOI 10.17487/RFC8613, July 2019, | |||
| <https://www.rfc-editor.org/info/rfc8613>. | <https://www.rfc-editor.org/info/rfc8613>. | |||
| [RFC8949] Bormann, C. and P. Hoffman, "Concise Binary Object | ||||
| Representation (CBOR)", STD 94, RFC 8949, | ||||
| DOI 10.17487/RFC8949, December 2020, | ||||
| <https://www.rfc-editor.org/info/rfc8949>. | ||||
| 12.2. Informative References | 12.2. Informative References | |||
| [Degabriele] | [Degabriele] | |||
| Degabriele, J., Lehmann, A., Paterson, K., Smart, N., and | Degabriele, J., Lehmann, A., Paterson, K., Smart, N., and | |||
| M. Strefler, "On the Joint Security of Encryption and | M. Strefler, "On the Joint Security of Encryption and | |||
| Signature in EMV", December 2011, | Signature in EMV", December 2011, | |||
| <https://eprint.iacr.org/2011/615>. | <https://eprint.iacr.org/2011/615>. | |||
| [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", draft-ietf-ace-key-groupcomm-10 | Communication using ACE", draft-ietf-ace-key-groupcomm-11 | |||
| (work in progress), November 2020. | (work in progress), February 2021. | |||
| [I-D.ietf-ace-key-groupcomm-oscore] | [I-D.ietf-ace-key-groupcomm-oscore] | |||
| Tiloca, M., Park, J., and F. Palombini, "Key Management | Tiloca, M., Park, J., and F. Palombini, "Key Management | |||
| for OSCORE Groups in ACE", draft-ietf-ace-key-groupcomm- | for OSCORE Groups in ACE", draft-ietf-ace-key-groupcomm- | |||
| oscore-09 (work in progress), November 2020. | oscore-10 (work in progress), February 2021. | |||
| [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)", draft-ietf-ace-oauth-authz-35 | Framework (ACE-OAuth)", draft-ietf-ace-oauth-authz-37 | |||
| (work in progress), June 2020. | (work in progress), February 2021. | |||
| [I-D.ietf-core-echo-request-tag] | [I-D.ietf-core-echo-request-tag] | |||
| Amsuess, C., Mattsson, J., and G. Selander, "CoAP: Echo, | Amsuess, C., Mattsson, J., and G. Selander, "CoAP: Echo, | |||
| Request-Tag, and Token Processing", draft-ietf-core-echo- | Request-Tag, and Token Processing", draft-ietf-core-echo- | |||
| request-tag-10 (work in progress), July 2020. | request-tag-12 (work in progress), January 2021. | |||
| [I-D.ietf-lwig-curve-representations] | [I-D.ietf-lwig-curve-representations] | |||
| Struik, R., "Alternative Elliptic Curve Representations", | Struik, R., "Alternative Elliptic Curve Representations", | |||
| draft-ietf-lwig-curve-representations-12 (work in | draft-ietf-lwig-curve-representations-20 (work in | |||
| progress), August 2020. | progress), February 2021. | |||
| [I-D.ietf-lwig-security-protocol-comparison] | [I-D.ietf-lwig-security-protocol-comparison] | |||
| Mattsson, J., Palombini, F., and M. Vucinic, "Comparison | Mattsson, J., Palombini, F., and M. Vucinic, "Comparison | |||
| of CoAP Security Protocols", draft-ietf-lwig-security- | of CoAP Security Protocols", draft-ietf-lwig-security- | |||
| protocol-comparison-04 (work in progress), March 2020. | protocol-comparison-05 (work in progress), November 2020. | |||
| [I-D.ietf-tls-dtls13] | [I-D.ietf-tls-dtls13] | |||
| Rescorla, E., Tschofenig, H., and N. Modadugu, "The | Rescorla, E., Tschofenig, H., and N. Modadugu, "The | |||
| Datagram Transport Layer Security (DTLS) Protocol Version | Datagram Transport Layer Security (DTLS) Protocol Version | |||
| 1.3", draft-ietf-tls-dtls13-38 (work in progress), May | 1.3", draft-ietf-tls-dtls13-41 (work in progress), | |||
| 2020. | February 2021. | |||
| [I-D.mattsson-cfrg-det-sigs-with-noise] | [I-D.mattsson-cfrg-det-sigs-with-noise] | |||
| Mattsson, J., Thormarker, E., and S. Ruohomaa, | Mattsson, J., Thormarker, E., and S. Ruohomaa, | |||
| "Deterministic ECDSA and EdDSA Signatures with Additional | "Deterministic ECDSA and EdDSA Signatures with Additional | |||
| Randomness", draft-mattsson-cfrg-det-sigs-with-noise-02 | Randomness", draft-mattsson-cfrg-det-sigs-with-noise-02 | |||
| (work in progress), March 2020. | (work in progress), March 2020. | |||
| [I-D.somaraju-ace-multicast] | [I-D.somaraju-ace-multicast] | |||
| Somaraju, A., Kumar, S., Tschofenig, H., and W. Werner, | Somaraju, A., Kumar, S., Tschofenig, H., and W. Werner, | |||
| "Security for Low-Latency Group Communication", draft- | "Security for Low-Latency Group Communication", draft- | |||
| somaraju-ace-multicast-02 (work in progress), October | somaraju-ace-multicast-02 (work in progress), October | |||
| 2016. | 2016. | |||
| [I-D.tiloca-core-observe-multicast-notifications] | [I-D.tiloca-core-observe-multicast-notifications] | |||
| Tiloca, M., Hoeglund, R., Amsuess, C., and F. Palombini, | Tiloca, M., Hoeglund, R., Amsuess, C., and F. Palombini, | |||
| "Observe Notifications as CoAP Multicast Responses", | "Observe Notifications as CoAP Multicast Responses", | |||
| draft-tiloca-core-observe-multicast-notifications-04 (work | draft-tiloca-core-observe-multicast-notifications-05 (work | |||
| in progress), November 2020. | in progress), February 2021. | |||
| [RFC4944] Montenegro, G., Kushalnagar, N., Hui, J., and D. Culler, | [RFC4944] Montenegro, G., Kushalnagar, N., Hui, J., and D. Culler, | |||
| "Transmission of IPv6 Packets over IEEE 802.15.4 | "Transmission of IPv6 Packets over IEEE 802.15.4 | |||
| Networks", RFC 4944, DOI 10.17487/RFC4944, September 2007, | Networks", RFC 4944, DOI 10.17487/RFC4944, September 2007, | |||
| <https://www.rfc-editor.org/info/rfc4944>. | <https://www.rfc-editor.org/info/rfc4944>. | |||
| [RFC4949] Shirey, R., "Internet Security Glossary, Version 2", | [RFC4949] Shirey, R., "Internet Security Glossary, Version 2", | |||
| FYI 36, RFC 4949, DOI 10.17487/RFC4949, August 2007, | FYI 36, RFC 4949, DOI 10.17487/RFC4949, August 2007, | |||
| <https://www.rfc-editor.org/info/rfc4949>. | <https://www.rfc-editor.org/info/rfc4949>. | |||
| skipping to change at page 54, line 42 ¶ | skipping to change at page 56, line 37 ¶ | |||
| for the approach described in this document. The rest of this | for the approach described in this document. The rest of this | |||
| section refers to three types of groups: | section refers to three types of groups: | |||
| o Application group, i.e. a set of CoAP endpoints that share a | o Application group, i.e. a set of CoAP endpoints that share a | |||
| common pool of resources. | common pool of resources. | |||
| o Security group, as defined in Section 1.1 of this specification. | o Security group, as defined in Section 1.1 of this specification. | |||
| There can be a one-to-one or a one-to-many relation between | There can be a one-to-one or a one-to-many relation between | |||
| security groups and application groups, and vice versa. | security groups and application groups, and vice versa. | |||
| o CoAP group, as defined in [I-D.ietf-core-groupcomm-bis] i.e. a set | o CoAP group, i.e. a set of CoAP endpoints where each endpoint is | |||
| of CoAP endpoints, where each endpoint is configured to receive | configured to receive one-to-many CoAP requests, e.g. sent to the | |||
| CoAP multicast requests that are sent to the group's associated IP | group's associated IP multicast address and UDP port as defined in | |||
| multicast address and UDP port. An endpoint may be a member of | [I-D.ietf-core-groupcomm-bis]. An endpoint may be a member of | |||
| multiple CoAP groups. There can be a one-to-one or a one-to-many | multiple CoAP groups. There can be a one-to-one or a one-to-many | |||
| relation between application groups and CoAP groups. Note that a | relation between application groups and CoAP groups. Note that a | |||
| device sending a CoAP request to a CoAP group is not necessarily | device sending a CoAP request to a CoAP group is not necessarily | |||
| itself a member of that group: it is a member only if it also has | itself a member of that group: it is a member only if it also has | |||
| a CoAP server endpoint listening to requests for this CoAP group, | a CoAP server endpoint listening to requests for this CoAP group, | |||
| sent to the associated IP multicast address and port. In order to | sent to the associated IP multicast address and port. In order to | |||
| provide secure group communication, all members of a CoAP group as | provide secure group communication, all members of a CoAP group as | |||
| well as all further endpoints configured only as clients sending | well as all further endpoints configured only as clients sending | |||
| CoAP (multicast) requests to the CoAP group have to be member of a | CoAP (multicast) requests to the CoAP group have to be member of a | |||
| security group. There can be a one-to-one or a one-to-many | security group. There can be a one-to-one or a one-to-many | |||
| relation between security groups and CoAP groups, and vice versa. | relation between security groups and CoAP groups, and vice versa. | |||
| A.1. Assumptions | A.1. Assumptions | |||
| The following assumptions are assumed to be already addressed and are | The following points are assumed to be already addressed and are out | |||
| out of the scope of this document. | of the scope of this document. | |||
| o Multicast communication topology: this document considers both | o Multicast communication topology: this document considers both | |||
| 1-to-N (one sender and multiple recipients) and M-to-N (multiple | 1-to-N (one sender and multiple recipients) and M-to-N (multiple | |||
| senders and multiple recipients) communication topologies. The | senders and multiple recipients) communication topologies. The | |||
| 1-to-N communication topology is the simplest group communication | 1-to-N communication topology is the simplest group communication | |||
| scenario that would serve the needs of a typical Low-power and | scenario that would serve the needs of a typical Low-power and | |||
| Lossy Network (LLN). Examples of use cases that benefit from | Lossy Network (LLN). Examples of use cases that benefit from | |||
| secure group communication are provided in Appendix B. | secure group communication are provided in Appendix B. | |||
| In a 1-to-N communication model, only a single client transmits | In a 1-to-N communication model, only a single client transmits | |||
| data to the CoAP group, in the form of request messages; in an | data to the CoAP group, in the form of request messages; in an | |||
| M-to-N communication model (where M and N do not necessarily have | M-to-N communication model (where M and N do not necessarily have | |||
| the same value), M clients transmit data to the CoAP group. | the same value), M clients transmit data to the CoAP group. | |||
| According to [I-D.ietf-core-groupcomm-bis], any possible proxy | According to [I-D.ietf-core-groupcomm-bis], any possible proxy | |||
| entity is supposed to know about the clients and to not perform | entity is supposed to know about the clients. Also, every client | |||
| aggregation of response messages from multiple servers. Also, | expects and is able to handle multiple response messages | |||
| every client expects and is able to handle multiple response | associated to a same request sent to the CoAP group. | |||
| messages associated to a same request sent to the CoAP group. | ||||
| o Group size: security solutions for group communication should be | o Group size: security solutions for group communication should be | |||
| able to adequately support different and possibly large security | able to adequately support different and possibly large security | |||
| groups. The group size is the current number of members in a | groups. The group size is the current number of members in a | |||
| security group. In the use cases mentioned in this document, the | security group. In the use cases mentioned in this document, the | |||
| number of clients (normally the controlling devices) is expected | number of clients (normally the controlling devices) is expected | |||
| to be much smaller than the number of servers (i.e. the controlled | to be much smaller than the number of servers (i.e. the controlled | |||
| devices). A security solution for group communication that | devices). A security solution for group communication that | |||
| supports 1 to 50 clients would be able to properly cover the group | supports 1 to 50 clients would be able to properly cover the group | |||
| sizes required for most use cases that are relevant for this | sizes required for most use cases that are relevant for this | |||
| skipping to change at page 57, line 50 ¶ | skipping to change at page 59, line 44 ¶ | |||
| use cases that benefit from secure group communication, and refers to | use cases that benefit from secure group communication, and refers to | |||
| the three types of groups from Appendix A. Specific security | the three types of groups from Appendix A. Specific security | |||
| requirements for these use cases are discussed in Appendix A. | requirements for these use cases are discussed in Appendix A. | |||
| o Lighting control: consider a building equipped with IP-connected | o Lighting control: consider a building equipped with IP-connected | |||
| lighting devices, switches, and border routers. The lighting | lighting devices, switches, and border routers. The lighting | |||
| devices acting as servers are organized into application groups | devices acting as servers are organized into application groups | |||
| and CoAP groups, according to their physical location in the | and CoAP groups, according to their physical location in the | |||
| building. For instance, lighting devices in a room or corridor | building. For instance, lighting devices in a room or corridor | |||
| can be configured as members of a single application group and | can be configured as members of a single application group and | |||
| corresponding CoAP group. Those ligthing devices together with | corresponding CoAP group. Those lighting devices together with | |||
| the switches acting as clients in the same room or corridor can be | the switches acting as clients in the same room or corridor can be | |||
| configured as members of the corresponding security group. | configured as members of the corresponding security group. | |||
| Switches are then used to control the lighting devices by sending | Switches are then used to control the lighting devices by sending | |||
| on/off/dimming commands to all lighting devices in the CoAP group, | on/off/dimming commands to all lighting devices in the CoAP group, | |||
| while border routers connected to an IP network backbone (which is | while border routers connected to an IP network backbone (which is | |||
| also multicast-enabled) can be used to interconnect routers in the | also multicast-enabled) can be used to interconnect routers in the | |||
| building. Consequently, this would also enable logical groups to | building. Consequently, this would also enable logical groups to | |||
| be formed even if devices with a role in the lighting application | be formed even if devices with a role in the lighting application | |||
| may be physically in different subnets (e.g. on wired and wireless | may be physically in different subnets (e.g. on wired and wireless | |||
| networks). Connectivity between lighting devices may be realized, | networks). Connectivity between lighting devices may be realized, | |||
| skipping to change at page 58, line 36 ¶ | skipping to change at page 60, line 30 ¶ | |||
| responsible for sending commands to a set of lighting devices. In | responsible for sending commands to a set of lighting devices. In | |||
| more advanced lighting control use cases, a M-to-N communication | more advanced lighting control use cases, a M-to-N communication | |||
| topology would be required, for instance in case multiple sensors | topology would be required, for instance in case multiple sensors | |||
| (presence or day-light) are responsible to trigger events to a set | (presence or day-light) are responsible to trigger events to a set | |||
| of lighting devices. Especially in professional lighting | of lighting devices. Especially in professional lighting | |||
| scenarios, the roles of client and server are configured by the | scenarios, the roles of client and server are configured by the | |||
| lighting commissioner, and devices strictly follow those roles. | lighting commissioner, and devices strictly follow those roles. | |||
| o Integrated building control: enabling Building Automation and | o Integrated building control: enabling Building Automation and | |||
| Control Systems (BACSs) to control multiple heating, ventilation | Control Systems (BACSs) to control multiple heating, ventilation | |||
| and air-conditioning units to pre-defined presets. Controlled | and air-conditioning units to predefined presets. Controlled | |||
| units can be organized into application groups and CoAP groups in | units can be organized into application groups and CoAP groups in | |||
| order to reflect their physical position in the building, e.g. | order to reflect their physical position in the building, e.g. | |||
| devices in the same room can be configured as members of a single | devices in the same room can be configured as members of a single | |||
| application group and corresponding CoAP group. As a practical | application group and corresponding CoAP group. As a practical | |||
| guideline, events within intervals of seconds are typically | guideline, events within intervals of seconds are typically | |||
| acceptable. Controlled units are expected to possibly reply back | acceptable. Controlled units are expected to possibly reply back | |||
| to the BACS issuing control commands, in order to report about the | to the BACS issuing control commands, in order to report about the | |||
| execution of the requested operation (e.g. OK, failure, error) | execution of the requested operation (e.g. OK, failure, error) | |||
| and their current operational status. | and their current operational status. | |||
| skipping to change at page 60, line 31 ¶ | skipping to change at page 62, line 21 ¶ | |||
| Context (see Section 3.1). | Context (see Section 3.1). | |||
| As an example, a 3-byte Gid can be composed of: i) a 1-byte Group | As an example, a 3-byte Gid can be composed of: i) a 1-byte Group | |||
| Prefix '0xb1' interpreted as a raw byte string; and ii) a 2-byte | Prefix '0xb1' interpreted as a raw byte string; and ii) a 2-byte | |||
| Group Epoch interpreted as an unsigned integer ranging from 0 to | Group Epoch interpreted as an unsigned integer ranging from 0 to | |||
| 65535. Then, after having established the Common Context 61532 times | 65535. Then, after having established the Common Context 61532 times | |||
| in the group, its Gid will assume value '0xb1f05c'. | in the group, its Gid will assume value '0xb1f05c'. | |||
| Using an immutable Group Prefix for a group assumes that enough time | Using an immutable Group Prefix for a group assumes that enough time | |||
| elapses before all possible Group Epoch values are used, since the | elapses before all possible Group Epoch values are used, since the | |||
| Group Manager does not reassign the same Gid to the same group. | Group Manager never reassigns the same Gid to the same group. Thus, | |||
| Thus, the expected highest rate for addition/removal of group members | the expected highest rate for addition/removal of group members and | |||
| and consequent group rekeying should be taken into account for a | consequent group rekeying should be taken into account for a proper | |||
| proper dimensioning of the Group Epoch size. | dimensioning of the Group Epoch size. | |||
| As discussed in Section 10.5, if endpoints are deployed in multiple | As discussed in Section 10.5, if endpoints are deployed in multiple | |||
| groups managed by different non-synchronized Group Managers, it is | groups managed by different non-synchronized Group Managers, it is | |||
| possible that Group Identifiers of different groups coincide at some | possible that Group Identifiers of different groups coincide at some | |||
| point in time. In this case, a recipient has to handle coinciding | point in time. In this case, a recipient has to handle coinciding | |||
| Group Identifiers, and has to try using different Security Contexts | Group Identifiers, and has to try using different Security Contexts | |||
| to process an incoming message, until the right one is found and the | to process an incoming message, until the right one is found and the | |||
| message is correctly verified. Therefore, it is favourable that | message is correctly verified. Therefore, it is favorable that Group | |||
| Group Identifiers from different Group Managers have a size that | Identifiers from different Group Managers have a size that result in | |||
| result in a small probability of collision. How small this | a small probability of collision. How small this probability should | |||
| probability should be is up to system designers. | be is up to system designers. | |||
| Appendix D. Set-up of New Endpoints | Appendix D. Set-up of New Endpoints | |||
| An endpoint joins a group by explicitly interacting with the | An endpoint joins a group by explicitly interacting with the | |||
| responsible Group Manager. When becoming members of a group, | responsible Group Manager. When becoming members of a group, | |||
| endpoints are not required to know how many and what endpoints are in | endpoints are not required to know how many and what endpoints are in | |||
| the same group. | the same group. | |||
| Communications between a joining endpoint and the Group Manager rely | Communications between a joining endpoint and the Group Manager rely | |||
| on the CoAP protocol and must be secured. Specific details on how to | on the CoAP protocol and must be secured. Specific details on how to | |||
| skipping to change at page 61, line 29 ¶ | skipping to change at page 63, line 20 ¶ | |||
| Manager provides the joining endpoint with the keying material and | Manager provides the joining endpoint with the keying material and | |||
| parameters to initialize the Security Context (see Section 2). The | parameters to initialize the Security Context (see Section 2). The | |||
| actual provisioning of keying material and parameters to the joining | actual provisioning of keying material and parameters to the joining | |||
| endpoint is out of the scope of this document. | endpoint is out of the scope of this document. | |||
| It is RECOMMENDED that the join process adopts the approach described | It is RECOMMENDED that the join process adopts the approach described | |||
| in [I-D.ietf-ace-key-groupcomm-oscore] and based on the ACE framework | in [I-D.ietf-ace-key-groupcomm-oscore] and based on the ACE framework | |||
| for Authentication and Authorization in constrained environments | for Authentication and Authorization in constrained environments | |||
| [I-D.ietf-ace-oauth-authz]. | [I-D.ietf-ace-oauth-authz]. | |||
| Appendix E. Examples of Synchronization Approaches | Appendix E. Challenge-Response Synchronization | |||
| This section describes three possible approaches that can be | ||||
| considered by server endpoints to synchronize with Sender Sequence | ||||
| Numbers of client endpoints sending group requests. | ||||
| The Group Manager MAY indicate which of such approaches are used in | ||||
| the group, as part of the group communication policies signalled to | ||||
| candidate group members upon their group joining. | ||||
| If a server has recently lost the mutable Security Context, e.g. due | ||||
| to a reboot, the server has also to establish an updated Security | ||||
| Context before resuming to send protected messages to the group (see | ||||
| Section 2.4.1). Since this results in deriving a new Sender Key for | ||||
| its Sender Context, the server does not reuse the same pair (key, | ||||
| nonce), even when using the Partial IV of (old re-injected) requests | ||||
| to build the AEAD nonce for protecting the corresponding responses. | ||||
| E.1. Best-Effort Synchronization | ||||
| Upon receiving a group request from a client, a server does not take | ||||
| any action to synchronize with the Sender Sequence Number of that | ||||
| client. This provides no assurance at all as to message freshness, | ||||
| which can be acceptable in non-critical use cases. | ||||
| With the notable exception of Observe notifications and responses | ||||
| following a group rekeying, it is optional for the server to use its | ||||
| Sender Sequence Number as Partial IV when protecting a response. | ||||
| Instead, for efficiency reasons, the server may rather use the | ||||
| request's Partial IV when protecting a response to that request. | ||||
| E.2. Baseline Synchronization | ||||
| Upon receiving a group request from a given client for the first | ||||
| time, a server initializes the last-seen Sender Sequence Number | ||||
| associated to that client in its corresponding Recipient Context. | ||||
| The server may also drop the group request without delivering it to | ||||
| the application. This method provides a reference point to identify | ||||
| if future group requests from the same client are fresher than the | ||||
| last one received. | ||||
| A replay time interval exists, between when a possibly replayed or | ||||
| delayed message is originally transmitted by a given client and the | ||||
| first authentic fresh message from that same client is received. | ||||
| This can be acceptable for use cases where servers admit such a | ||||
| trade-off between performance and assurance of message freshness. | ||||
| With the notable exception of Observe notifications and responses | ||||
| following a group rekeying, it is optional for the server to use its | ||||
| Sender Sequence Number as Partial IV when protecting a response. | ||||
| Instead, for efficiency reasons, the server may rather use the | ||||
| request's Partial IV when protecting a response to that request. | ||||
| E.3. Challenge-Response Synchronization | ||||
| A server performs a challenge-response exchange with a client, by | This section describes a possible approach that a server endpoint can | |||
| using the Echo Option for CoAP described in Section 2 of | use to synchronize with Sender Sequence Numbers of client endpoints | |||
| [I-D.ietf-core-echo-request-tag] and according to Appendix B.1.2 of | in the group. In particular, the server performs a challenge- | |||
| [RFC8613]. | response exchange with a client, by using the Echo Option for CoAP | |||
| described in Section 2 of [I-D.ietf-core-echo-request-tag] and | ||||
| according to Appendix B.1.2 of [RFC8613]. | ||||
| That is, upon receiving a group request from a particular client for | That is, upon receiving a request from a particular client for the | |||
| the first time, the server processes the message as described in this | first time, the server processes the message as described in this | |||
| specification, but, even if valid, does not deliver it to the | specification, but, even if valid, does not deliver it to the | |||
| application. Instead, the server replies to the client with an | application. Instead, the server replies to the client with an | |||
| OSCORE protected 4.01 (Unauthorized) response message, including only | OSCORE protected 4.01 (Unauthorized) response message, including only | |||
| the Echo Option and no diagnostic payload. The server MUST NOT set | the Echo Option and no diagnostic payload. The Echo option value | |||
| the Echo Option to a value which is both predictable and reusable. | SHOULD NOT be reused; when it is reused, it MUST be highly unlikely | |||
| Since this response is protected with the Security Context used in | to have been used with this client recently. Since this response is | |||
| the group, the client will consider the response valid upon | protected with the Security Context used in the group, the client | |||
| successfully decrypting and verifying it. | will consider the response valid upon successfully decrypting and | |||
| verifying it. | ||||
| The server stores the Echo Option value included therein, together | The server stores the Echo Option value included therein, together | |||
| with the pair (gid,kid), where 'gid' is the Group Identifier of the | with the pair (gid,kid), where 'gid' is the Group Identifier of the | |||
| OSCORE group and 'kid' is the Sender ID of the client in the group, | OSCORE group and 'kid' is the Sender ID of the client in the group, | |||
| as specified in the 'kid context' and 'kid' fields of the OSCORE | as specified in the 'kid context' and 'kid' fields of the OSCORE | |||
| Option of the group request, respectively. After a group rekeying | Option of the request, respectively. After a group rekeying has been | |||
| has been completed and a new Security Context has been established in | completed and a new Security Context has been established in the | |||
| the group, which results also in a new Group Identifier (see | group, which results also in a new Group Identifier (see | |||
| Section 3.1), the server MUST delete all the stored Echo values | Section 3.1), the server MUST delete all the stored Echo values | |||
| associated to members of that group. | associated to members of that group. | |||
| Upon receiving a 4.01 (Unauthorized) response that includes an Echo | Upon receiving a 4.01 (Unauthorized) response that includes an Echo | |||
| Option and originates from a verified group member, a client sends a | Option and originates from a verified group member, the client sends | |||
| request as a unicast message addressed to the same server, echoing | a request as a unicast message addressed to the same server, echoing | |||
| the Echo Option value. The client MUST NOT send the request | the Echo Option value. The client MUST NOT send the request | |||
| including the Echo Option over multicast. | including the Echo Option over multicast. | |||
| In particular, the client does not necessarily resend the same group | If the signature algorithm used in the group supports ECDH (e.g. | |||
| request, but can instead send a more recent one, if the application | ECDSA, EdDSA), the client MUST use the pairwise mode of Group OSCORE | |||
| permits it. This makes it possible for the client to not retain | to protect the request, as described in Section 9.3. Note that, as | |||
| previously sent group requests for full retransmission, unless the | defined in Section 9, members of such a group and that use the Echo | |||
| application explicitly requires otherwise. In either case, the | Option MUST support the pairwise mode. | |||
| client uses a fresh Sender Sequence Number value from its own Sender | ||||
| Context. If the client stores group requests for possible | The client does not necessarily resend the same group request, but | |||
| retransmission with the Echo Option, it should not store a given | can instead send a more recent one, if the application permits it. | |||
| request for longer than a pre-configured time interval. Note that | This makes it possible for the client to not retain previously sent | |||
| the unicast request echoing the Echo Option is correctly treated and | group requests for full retransmission, unless the application | |||
| processed as a message, since the 'kid context' field including the | explicitly requires otherwise. In either case, the client uses a | |||
| Group Identifier of the OSCORE group is still present in the OSCORE | fresh Sender Sequence Number value from its own Sender Context. If | |||
| Option as part of the COSE object (see Section 4). | the client stores group requests for possible retransmission with the | |||
| Echo Option, it should not store a given request for longer than a | ||||
| preconfigured time interval. Note that the unicast request echoing | ||||
| the Echo Option is correctly treated and processed as a message, | ||||
| since the 'kid context' field including the Group Identifier of the | ||||
| OSCORE group is still present in the OSCORE Option as part of the | ||||
| COSE object (see Section 4). | ||||
| Upon receiving the unicast request including the Echo Option, the | Upon receiving the unicast request including the Echo Option, the | |||
| server performs the following verifications. | server performs the following verifications. | |||
| o If the server does not store an Echo Option value for the pair | o If the server does not store an Echo Option value for the pair | |||
| (gid,kid), it considers: i) the time t1 when it has established | (gid,kid), it considers: i) the time t1 when it has established | |||
| the Security Context used to protect the received request; and ii) | the Security Context used to protect the received request; and ii) | |||
| the time t2 when the request has been received. Since a valid | the time t2 when the request has been received. Since a valid | |||
| request cannot be older than the Security Context used to protect | request cannot be older than the Security Context used to protect | |||
| it, the server verifies that (t2 - t1) is less than the largest | it, the server verifies that (t2 - t1) is less than the largest | |||
| skipping to change at page 64, line 5 ¶ | skipping to change at page 64, line 51 ¶ | |||
| o If the server stores an Echo Option value for the pair (gid,kid) | o If the server stores an Echo Option value for the pair (gid,kid) | |||
| associated to that same client in the same group, the server | associated to that same client in the same group, the server | |||
| verifies that the option value equals that same stored value | verifies that the option value equals that same stored value | |||
| previously sent to that client. | previously sent to that client. | |||
| If the verifications above fail, the server MUST NOT process the | If the verifications above fail, the server MUST NOT process the | |||
| request further and MAY send a 4.01 (Unauthorized) response including | request further and MAY send a 4.01 (Unauthorized) response including | |||
| an Echo Option. | an Echo Option. | |||
| In case of positive verification, the request is further processed | If the verifications above are successful and the Replay Window has | |||
| and verified. Finally, the server updates the Recipient Context | not been set yet, the server updates its Replay Window to mark the | |||
| associated to that client, by setting the Replay Window according to | current Sender Sequence Number from the latest received request as | |||
| the Sender Sequence Number from the unicast request conveying the | seen (but all newer ones as new), and delivers the message as fresh | |||
| Echo Option. The server either delivers the request to the | to the application. Otherwise, it discards the verification result | |||
| application if it is an actual retransmission of the original one, or | and treats the message as fresh or as a replay, according to the | |||
| discards it otherwise. Mechanisms to signal whether the resent | existing Replay Window. | |||
| request is a full retransmission of the original one are out of the | ||||
| scope of this specification. | ||||
| A server should not deliver group requests from a given client to the | A server should not deliver requests from a given client to the | |||
| application until one valid request from that same client has been | application until one valid request from that same client has been | |||
| verified as fresh, as conveying an echoed Echo Option | verified as fresh, as conveying an echoed Echo Option | |||
| [I-D.ietf-core-echo-request-tag]. Also, a server may perform the | [I-D.ietf-core-echo-request-tag]. Also, a server may perform the | |||
| challenge-response described above at any time, if synchronization | challenge-response described above at any time, if synchronization | |||
| with Sender Sequence Numbers of clients is (believed to be) lost, for | with Sender Sequence Numbers of clients is lost, for instance after a | |||
| instance after a device reboot. A client has to be always ready to | device reboot. A client has to be always ready to perform the | |||
| perform the challenge-response based on the Echo Option in case a | challenge-response based on the Echo Option in case a server starts | |||
| server starts it. | it. | |||
| It is the role of the server application to define under what | It is the role of the server application to define under what | |||
| circumstances Sender Sequence Numbers lose synchronization. This can | circumstances Sender Sequence Numbers lose synchronization. This can | |||
| include experiencing a "large enough" gap D = (SN2 - SN1), between | include experiencing a "large enough" gap D = (SN2 - SN1), between | |||
| the Sender Sequence Number SN1 of the latest accepted group request | the Sender Sequence Number SN1 of the latest accepted group request | |||
| from a client and the Sender Sequence Number SN2 of a group request | from a client and the Sender Sequence Number SN2 of a group request | |||
| just received from that client. However, a client may send several | just received from that client. However, a client may send several | |||
| unicast requests to different group members as protected with the | unicast requests to different group members as protected with the | |||
| pairwise mode (see Section 9.2), which may result in the server | pairwise mode (see Section 9.3), which may result in the server | |||
| experiencing the gap D in a relatively short time. This would induce | experiencing the gap D in a relatively short time. This would induce | |||
| the server to perform more challenge-response exchanges than actually | the server to perform more challenge-response exchanges than actually | |||
| needed. | needed. | |||
| To ameliorate this, the server may rather rely on a trade-off between | To ameliorate this, the server may rather rely on a trade-off between | |||
| the Sender Sequence Number gap D and a time gap T = (t2 - t1), where | the Sender Sequence Number gap D and a time gap T = (t2 - t1), where | |||
| t1 is the time when the latest group request from a client was | t1 is the time when the latest group request from a client was | |||
| accepted and t2 is the time when the latest group request from that | accepted and t2 is the time when the latest group request from that | |||
| client has been received, respectively. Then, the server can start a | client has been received, respectively. Then, the server can start a | |||
| challenge-response when experiencing a time gap T larger than a | challenge-response when experiencing a time gap T larger than a | |||
| given, pre-configured threshold. Also, the server can start a | given, preconfigured threshold. Also, the server can start a | |||
| challenge-response when experiencing a Sender Sequence Number gap D | challenge-response when experiencing a Sender Sequence Number gap D | |||
| greater than a different threshold, computed as a monotonically | greater than a different threshold, computed as a monotonically | |||
| increasing function of the currently experienced time gap T. | increasing function of the currently experienced time gap T. | |||
| The challenge-response approach described in this appendix provides | The challenge-response approach described in this appendix provides | |||
| an assurance of absolute message freshness. However, it can result | an assurance of absolute message freshness. However, it can result | |||
| in an impact on performance which is undesirable or unbearable, | in an impact on performance which is undesirable or unbearable, | |||
| especially in large groups where many endpoints at the same time | especially in large groups where many endpoints at the same time | |||
| might join as new members or lose synchronization. | might join as new members or lose synchronization. | |||
| skipping to change at page 65, line 18 ¶ | skipping to change at page 66, line 14 ¶ | |||
| client. Therefore, silent servers should adopt alternative | client. Therefore, silent servers should adopt alternative | |||
| approaches to achieve and maintain synchronization with sender | approaches to achieve and maintain synchronization with sender | |||
| sequence numbers of clients. | sequence numbers of clients. | |||
| Since requests including the Echo Option are sent over unicast, a | Since requests including the Echo Option are sent over unicast, a | |||
| server can be a victim of the attack discussed in Section 10.7, when | server can be a victim of the attack discussed in Section 10.7, when | |||
| such requests are protected with the group mode of Group OSCORE, as | such requests are protected with the group mode of Group OSCORE, as | |||
| described in Section 8.1. | described in Section 8.1. | |||
| Instead, protecting requests with the Echo Option by using the | Instead, protecting requests with the Echo Option by using the | |||
| pairwise mode of Group OSCORE as described in Section 9.2 prevents | pairwise mode of Group OSCORE as described in Section 9.3 prevents | |||
| the attack in Section 10.7. In fact, only the exact server involved | the attack in Section 10.7. In fact, only the exact server involved | |||
| in the Echo exchange is able to derive the correct pairwise key used | in the Echo exchange is able to derive the correct pairwise key used | |||
| by the client to protect the request including the Echo Option. | by the client to protect the request including the Echo Option. | |||
| In either case, an internal on-path adversary would not be able to | In either case, an internal on-path adversary would not be able to | |||
| mix up the Echo Option value of two different unicast requests, sent | mix up the Echo Option value of two different unicast requests, sent | |||
| by a same client to any two different servers in the group. In fact, | by a same client to any two different servers in the group. In fact, | |||
| if the group mode was used, this would require the adversary to forge | if the group mode was used, this would require the adversary to forge | |||
| the client's counter signature in both such requests. As a | the client's countersignature in both such requests. As a | |||
| consequence, each of the two servers remains able to selectively | consequence, each of the two servers remains able to selectively | |||
| accept a request with the Echo Option only if it is waiting for that | accept a request with the Echo Option only if it is waiting for that | |||
| exact integrity-protected Echo Option value, and is thus the intended | exact integrity-protected Echo Option value, and is thus the intended | |||
| recipient. | recipient. | |||
| Appendix F. No Verification of Signatures in Group Mode | Appendix F. No Verification of Signatures in Group Mode | |||
| There are some application scenarios using group communication that | There are some application scenarios using group communication that | |||
| have particularly strict requirements. One example of this is the | have particularly strict requirements. One example of this is the | |||
| requirement of low message latency in non-emergency lighting | requirement of low message latency in non-emergency lighting | |||
| skipping to change at page 66, line 31 ¶ | skipping to change at page 67, line 28 ¶ | |||
| The table below provides examples of values for Counter Signature | The table below provides examples of values for Counter Signature | |||
| Parameters in the Common Context (see Section 2.1.3), for different | Parameters in the Common Context (see Section 2.1.3), for different | |||
| values of Counter Signature Algorithm. | values of Counter Signature Algorithm. | |||
| +-------------------+---------------------------------------------+ | +-------------------+---------------------------------------------+ | |||
| | Counter Signature | Example Values for Counter | | | Counter Signature | Example Values for Counter | | |||
| | Algorithm | Signature Parameters | | | Algorithm | Signature Parameters | | |||
| +-------------------+---------------------------------------------+ | +-------------------+---------------------------------------------+ | |||
| | (-8) // EdDSA | [1], [1, 6] // 1: OKP ; 1: OKP, 6: Ed25519 | | | (-8) // EdDSA | [1], [1, 6] // 1: OKP ; 1: OKP, 6: Ed25519 | | |||
| | (-8) // EdDSA | [1], [1, 6] // 1: OKP ; 1: OKP, 7: Ed448 | | | (-8) // EdDSA | [1], [1, 7] // 1: OKP ; 1: OKP, 7: Ed448 | | |||
| | (-7) // ES256 | [2], [2, 1] // 2: EC2 ; 2: EC2, 1: P-256 | | | (-7) // ES256 | [2], [2, 1] // 2: EC2 ; 2: EC2, 1: P-256 | | |||
| | (-35) // ES384 | [2], [2, 2] // 2: EC2 ; 2: EC2, 2: P-384 | | | (-35) // ES384 | [2], [2, 2] // 2: EC2 ; 2: EC2, 2: P-384 | | |||
| | (-36) // ES512 | [2], [2, 3] // 2: EC2 ; 2: EC2, 3: P-512 | | | (-36) // ES512 | [2], [2, 3] // 2: EC2 ; 2: EC2, 3: P-521 | | |||
| | (-37) // PS256 | [], [3] // empty ; 3: RSA | | | (-37) // PS256 | [3], [3] // 3: RSA ; 3: RSA | | |||
| | (-38) // PS384 | [], [3] // empty ; 3: RSA | | | (-38) // PS384 | [3], [3] // 3: RSA ; 3: RSA | | |||
| | (-39) // PS512 | [], [3] // empty ; 3: RSA | | | (-39) // PS512 | [3], [3] // 3: RSA ; 3: RSA | | |||
| +-------------------+---------------------------------------------+ | +-------------------+---------------------------------------------+ | |||
| Figure 4: Examples of Counter Signature Parameters | Figure 4: Examples of Counter Signature Parameters | |||
| The table below provides examples of values for Secret Derivation | The table below provides examples of values for Secret Derivation | |||
| Parameters in the Common Context (see Section 2.1.5), for different | Parameters in the Common Context (see Section 2.1.5), for different | |||
| values of Secret Derivation Algorithm. | values of Secret Derivation Algorithm. | |||
| +-----------------------+--------------------------------------------+ | +-----------------------+--------------------------------------------+ | |||
| | Secret Derivation | Example Values for Secret | | | Secret Derivation | Example Values for Secret | | |||
| | Algorithm | Derivation Parameters | | | Algorithm | Derivation Parameters | | |||
| +-----------------------+--------------------------------------------+ | +-----------------------+--------------------------------------------+ | |||
| | (-27) // ECDH-SS | [1], [1, 6] // 1: OKP ; 1: OKP, 4: X25519 | | | (-27) // ECDH-SS | [1], [1, 4] // 1: OKP ; 1: OKP, 4: X25519 | | |||
| | // + HKDF-256 | | | | // + HKDF-256 | | | |||
| | (-27) // ECDH-SS | [1], [1, 6] // 1: OKP ; 1: OKP, 5: X448 | | | (-27) // ECDH-SS | [1], [1, 5] // 1: OKP ; 1: OKP, 5: X448 | | |||
| | // + HKDF-256 | | | | // + HKDF-256 | | | |||
| | (-27) // ECDH-SS | [2], [2, 1] // 2: EC2 ; 2: EC2, 1: P-256 | | | (-27) // ECDH-SS | [2], [2, 1] // 2: EC2 ; 2: EC2, 1: P-256 | | |||
| | // + HKDF-256 | | | | // + HKDF-256 | | | |||
| | (-27) // ECDH-SS | [2], [2, 2] // 2: EC2 ; 2: EC2, 2: P-384 | | | (-27) // ECDH-SS | [2], [2, 2] // 2: EC2 ; 2: EC2, 2: P-384 | | |||
| | // + HKDF-256 | | | | // + HKDF-256 | | | |||
| | (-27) // ECDH-SS | [2], [2, 3] // 2: EC2 ; 2: EC2, 3: P-512 | | | (-27) // ECDH-SS | [2], [2, 3] // 2: EC2 ; 2: EC2, 3: P-512 | | |||
| | // + HKDF-256 | | | | // + HKDF-256 | | | |||
| +-----------------------+--------------------------------------------+ | +-----------------------+--------------------------------------------+ | |||
| Figure 5: Examples of Secret Derivation Parameters | Figure 5: Examples of Secret Derivation Parameters | |||
| The table below provides examples of values for the | Appendix H. Parameter Extensibility for Future COSE Algorithms | |||
| 'par_countersign_key' element of the 'algorithms' array used in the | ||||
| two external_aad structures (see Section 4.3.1 and Section 4.3.2), | ||||
| for different values of Counter Signature Algorithm. | ||||
| +-------------------+---------------------------------+ | As defined in Section 8.1 of [I-D.ietf-cose-rfc8152bis-algs], future | |||
| | Counter Signature | Example Values for | | algorithms can be registered in the "COSE Algorithms" Registry | |||
| | Algorithm | 'par_countersign_key' | | [COSE.Algorithms] as specifying none or multiple COSE capabilities. | |||
| +-------------------+---------------------------------+ | ||||
| | (-8) // EdDSA | [1, 6] // 1: OKP , 6: Ed25519 | | ||||
| | (-8) // EdDSA | [1, 6] // 1: OKP , 7: Ed448 | | ||||
| | (-7) // ES256 | [2, 1] // 2: EC2 , 1: P-256 | | ||||
| | (-35) // ES384 | [2, 2] // 2: EC2 , 2: P-384 | | ||||
| | (-36) // ES512 | [2, 3] // 2: EC2 , 3: P-512 | | ||||
| | (-37) // PS256 | [3] // 3: RSA | | ||||
| | (-38) // PS384 | [3] // 3: RSA | | ||||
| | (-39) // PS512 | [3] // 3: RSA | | ||||
| +-------------------+---------------------------------+ | ||||
| Figure 6: Examples of 'par_countersign_key' | To enable the seamless use of such future registered algorithms, this | |||
| section defines a general, agile format for parameters of the | ||||
| Security Context (see Section 2.1.3 and Section 2.1.5) and for | ||||
| related elements of the external_aad structure (see Section 4.3). | ||||
| Appendix H. Document Updates | If any of the currently registered COSE algorithms is considered, | |||
| using this general format yields the same structure defined in this | ||||
| document for the items above, thus ensuring retro-compatibility. | ||||
| H.1. Counter Signature Parameters | ||||
| The definition of Counter Signature Parameters in the Common Context | ||||
| (see Section 2.1.3) is generalized as follows. | ||||
| Counter Signature Parameters is a CBOR array CS_PARAMS including N+1 | ||||
| elements, whose exact structure and value depend on the value of | ||||
| Counter Signature Algorithm. | ||||
| o The first element, i.e. CS_PARAMS[0], is the array of the N COSE | ||||
| capabilities for Counter Signature Algorithm, as specified for | ||||
| that algorithm in the "Capabilities" column of the "COSE | ||||
| Algorithms" Registry [COSE.Algorithms] (see Section 8.1 of | ||||
| [I-D.ietf-cose-rfc8152bis-algs]). | ||||
| o Each following element CS_PARAMS[i], i.e. with index i > 0, is the | ||||
| array of COSE capabilities for the algorithm capability specified | ||||
| in CS_PARAMS[0][i-1]. | ||||
| For example, if CS_PARAMS[0][0] specifies the key type as | ||||
| capability of the algorithm, then CS_PARAMS[1] is the array of | ||||
| COSE capabilities for the COSE key type associated to Counter | ||||
| Signature Algorithm, as specified for that key type in the | ||||
| "Capabilities" column of the "COSE Key Types" Registry | ||||
| [COSE.Key.Types] (see Section 8.2 of | ||||
| [I-D.ietf-cose-rfc8152bis-algs]). | ||||
| H.2. Secret Derivation Parameters | ||||
| The definition of Secret Derivation Parameters in the Common Context | ||||
| (see Section 2.1.5) is generalized as follows. | ||||
| Secret Derivation Parameters is a CBOR array SD_PARAMS including N+1 | ||||
| elements, whose exact structure and value depend on the value of | ||||
| Secret Derivation Algorithm. | ||||
| o The first element, i.e. SD_PARAMS[0], is the array of the N COSE | ||||
| capabilities for Secret Derivation Algorithm, as specified for | ||||
| that algorithm in the "Capabilities" column of the "COSE | ||||
| Algorithms" Registry [COSE.Algorithms] (see Section 8.1 of | ||||
| [I-D.ietf-cose-rfc8152bis-algs]). | ||||
| o Each following element SD_PARAMS[i], i.e. with index i > 0, is the | ||||
| array of COSE capabilities for the algorithm capability specified | ||||
| in SD_PARAMS[0][i-1]. | ||||
| For example, if SD_PARAMS[0][0] specifies the key type as | ||||
| capability of the algorithm, then SD_PARAMS[1] is the array of | ||||
| COSE capabilities for the COSE key type associated to Secret | ||||
| Derivation Algorithm, as specified for that key type in the | ||||
| "Capabilities" column of the "COSE Key Types" Registry | ||||
| [COSE.Key.Types] (see Section 8.2 of | ||||
| [I-D.ietf-cose-rfc8152bis-algs]). | ||||
| H.3. 'par_countersign' in the external_aad | ||||
| The definition of the 'par_countersign' element in the 'algorithms' | ||||
| array of the external_aad structure (see Section 4.3) is generalized | ||||
| as follows. | ||||
| The 'par_countersign' element takes the CBOR array CS_PARAMS | ||||
| specified by Counter Signature Parameters in the Common Context (see | ||||
| Section 2.1.3), considering the format generalization in Appendix H. | ||||
| In particular: | ||||
| o The first element 'countersign_alg_capab' is the array of COSE | ||||
| capabilities for the countersignature algorithm indicated in | ||||
| 'alg_countersign'. This is CS_PARAMS[0], i.e. the first element | ||||
| of the CBOR array CS_PARAMS specified by Counter Signature | ||||
| Parameters in the Common Context. | ||||
| o Each following element 'countersign_capab_i' (i = 1, ..., N) is | ||||
| the array of COSE capabilities for the algorithm capability | ||||
| specified in 'countersign_alg_capab'[i-1]. This algorithm | ||||
| capability is the element CS_PARAMS[0][i-1] of the CBOR array | ||||
| CS_PARAMS specified by Counter Signature Parameters in the Common | ||||
| Context. | ||||
| For example, if 'countersign_alg_capab'[i-1] specifies the key | ||||
| type as capability of the algorithm, then 'countersign_capab_i' is | ||||
| the array of COSE capabilities for the COSE key type associated to | ||||
| Counter Signature Algorithm, as specified for that key type in the | ||||
| "Capabilities" column of the "COSE Key Types" Registry | ||||
| [COSE.Key.Types] (see Section 8.2 of | ||||
| [I-D.ietf-cose-rfc8152bis-algs]). | ||||
| external_aad = bstr .cbor aad_array | ||||
| aad_array = [ | ||||
| oscore_version : uint, | ||||
| algorithms : [alg_aead : int / tstr, | ||||
| alg_countersign : int / tstr, | ||||
| par_countersign : [countersign_alg_capab, | ||||
| countersign_capab_1, | ||||
| countersign_capab_2, | ||||
| ..., | ||||
| countersign__capab_N]], | ||||
| request_kid : bstr, | ||||
| request_piv : bstr, | ||||
| options : bstr, | ||||
| request_kid_context : bstr, | ||||
| OSCORE_option: bstr | ||||
| ] | ||||
| countersign_alg_capab : [c_1 : any, c_2 : any, ..., c_N : any] | ||||
| Figure 6: external_aad with general 'par_countersign' | ||||
| Appendix I. Document Updates | ||||
| RFC EDITOR: PLEASE REMOVE THIS SECTION. | RFC EDITOR: PLEASE REMOVE THIS SECTION. | |||
| H.1. Version -09 to -10 | I.1. Version -10 to -11 | |||
| o Loss of Recipient Contexts due to their overflow. | ||||
| o Added diagram on keying material components and their relation. | ||||
| o Distinction between anti-replay and freshness. | ||||
| o Preservation of Sender IDs over rekeying. | ||||
| o Clearer cause-effect about reset of SSN. | ||||
| o The GM provides public keys of group members with associated | ||||
| Sender IDs. | ||||
| o Removed 'par_countersign_key' from the external_aad. | ||||
| o One single format for the external_aad, both for encryption and | ||||
| signing. | ||||
| o Presence of 'kid' in responses to requests protected with the | ||||
| pairwise mode. | ||||
| o Inclusion of 'kid_context' in notifications following a group | ||||
| rekeying. | ||||
| o Pairwise mode presented with OSCORE as baseline. | ||||
| o Revised examples with signature values. | ||||
| o Decoupled growth of clients' Sender Sequence Numbers and loss of | ||||
| synchronization for server. | ||||
| o Sender IDs not recycled in the group under the same Gid. | ||||
| o Processing and description of the Group Flag bit in the OSCORE | ||||
| option. | ||||
| o Usage of the pairwise mode for multicast requests. | ||||
| o Clarifications on synchronization using the Echo option. | ||||
| o General format of context parameters and external_aad elements, | ||||
| supporting future registered COSE algorithms (new Appendix). | ||||
| o Fixes and editorial improvements. | ||||
| I.2. Version -09 to -10 | ||||
| o Removed 'Counter Signature Key Parameters' from the Common | o Removed 'Counter Signature Key Parameters' from the Common | |||
| Context. | Context. | |||
| o New parameters in the Common Context covering the DH secret | o New parameters in the Common Context covering the DH secret | |||
| derivation. | derivation. | |||
| o New counter signature header parameter from draft-ietf-cose- | o New counter signature header parameter from draft-ietf-cose- | |||
| countersign. | countersign. | |||
| skipping to change at page 68, line 38 ¶ | skipping to change at page 72, line 45 ¶ | |||
| o The server uses a fresh PIV if protecting the response with a | o The server uses a fresh PIV if protecting the response with a | |||
| Security Context different from the one used to protect the | Security Context different from the one used to protect the | |||
| request. | request. | |||
| o Clarifications on MTI algorithms and curves. | o Clarifications on MTI algorithms and curves. | |||
| o Removed optimized requests. | o Removed optimized requests. | |||
| o Overall clarifications and editorial revision. | o Overall clarifications and editorial revision. | |||
| H.2. Version -08 to -09 | I.3. Version -08 to -09 | |||
| o Pairwise keys are discarded after group rekeying. | o Pairwise keys are discarded after group rekeying. | |||
| o Signature mode renamed to group mode. | o Signature mode renamed to group mode. | |||
| o The parameters for countersignatures use the updated COSE | o The parameters for countersignatures use the updated COSE | |||
| registries. Newly defined IANA registries have been removed. | registries. Newly defined IANA registries have been removed. | |||
| o Pairwise Flag bit renamed as Group Flag bit, set to 1 in group | o Pairwise Flag bit renamed as Group Flag bit, set to 1 in group | |||
| mode and set to 0 in pairwise mode. | mode and set to 0 in pairwise mode. | |||
| skipping to change at page 69, line 29 ¶ | skipping to change at page 73, line 34 ¶ | |||
| o Normative support for the signature and pairwise mode. | o Normative support for the signature and pairwise mode. | |||
| o Revised methods for synchronization with clients' sender sequence | o Revised methods for synchronization with clients' sender sequence | |||
| number. | number. | |||
| o Appendix with example values of parameters for countersignatures. | o Appendix with example values of parameters for countersignatures. | |||
| o Clarifications and editorial improvements. | o Clarifications and editorial improvements. | |||
| H.3. Version -07 to -08 | I.4. Version -07 to -08 | |||
| o Clarified relation between pairwise mode and group communication | o Clarified relation between pairwise mode and group communication | |||
| (Section 1). | (Section 1). | |||
| o Improved definition of "silent server" (Section 1.1). | o Improved definition of "silent server" (Section 1.1). | |||
| o Clarified when a Recipient Context is needed (Section 2). | o Clarified when a Recipient Context is needed (Section 2). | |||
| o Signature checkers as entities supported by the Group Manager | o Signature checkers as entities supported by the Group Manager | |||
| (Section 2.3). | (Section 2.3). | |||
| skipping to change at page 70, line 44 ¶ | skipping to change at page 75, line 5 ¶ | |||
| (Section 10.15). | (Section 10.15). | |||
| o Updates to the methods for synchronizing with clients' sequence | o Updates to the methods for synchronizing with clients' sequence | |||
| number (Appendix E). | number (Appendix E). | |||
| o Simplified text on discovery services supporting the pairwise mode | o Simplified text on discovery services supporting the pairwise mode | |||
| (Appendix G.1). | (Appendix G.1). | |||
| o Editorial improvements. | o Editorial improvements. | |||
| H.4. Version -06 to -07 | I.5. Version -06 to -07 | |||
| o Updated abstract and introduction. | o Updated abstract and introduction. | |||
| o Clarifications of what pertains a group rekeying. | o Clarifications of what pertains a group rekeying. | |||
| o Derivation of pairwise keying material. | o Derivation of pairwise keying material. | |||
| o Content re-organization for COSE Object and OSCORE header | o Content re-organization for COSE Object and OSCORE header | |||
| compression. | compression. | |||
| skipping to change at page 71, line 29 ¶ | skipping to change at page 75, line 37 ¶ | |||
| o Security considerations on Group OSCORE for unicast requests, also | o Security considerations on Group OSCORE for unicast requests, also | |||
| as affecting the usage of the Echo option. | as affecting the usage of the Echo option. | |||
| o Clarification on different types of groups considered | o Clarification on different types of groups considered | |||
| (application/security/CoAP). | (application/security/CoAP). | |||
| o New pairwise mode, using pairwise keying material for both | o New pairwise mode, using pairwise keying material for both | |||
| requests and responses. | requests and responses. | |||
| H.5. Version -05 to -06 | I.6. Version -05 to -06 | |||
| o Group IDs mandated to be unique under the same Group Manager. | o Group IDs mandated to be unique under the same Group Manager. | |||
| o Clarifications on parameter update upon group rekeying. | o Clarifications on parameter update upon group rekeying. | |||
| o Updated external_aad structures. | o Updated external_aad structures. | |||
| o Dynamic derivation of Recipient Contexts made optional and | o Dynamic derivation of Recipient Contexts made optional and | |||
| application specific. | application specific. | |||
| skipping to change at page 72, line 9 ¶ | skipping to change at page 76, line 16 ¶ | |||
| rekeying. | rekeying. | |||
| o Added Group Manager responsibility on validating public keys. | o Added Group Manager responsibility on validating public keys. | |||
| o Updates IANA registries. | o Updates IANA registries. | |||
| o Reference to RFC 8613. | o Reference to RFC 8613. | |||
| o Editorial improvements. | o Editorial improvements. | |||
| H.6. Version -04 to -05 | I.7. Version -04 to -05 | |||
| o Added references to draft-dijk-core-groupcomm-bis. | o Added references to draft-dijk-core-groupcomm-bis. | |||
| o New parameter Counter Signature Key Parameters (Section 2). | o New parameter Counter Signature Key Parameters (Section 2). | |||
| o Clarification about Recipient Contexts (Section 2). | o Clarification about Recipient Contexts (Section 2). | |||
| o Two different external_aad for encrypting and signing | o Two different external_aad for encrypting and signing | |||
| (Section 3.1). | (Section 3.1). | |||
| o Updated response verification to handle Observe notifications | o Updated response verification to handle Observe notifications | |||
| (Section 6.4). | (Section 6.4). | |||
| o Extended Security Considerations (Section 8). | o Extended Security Considerations (Section 8). | |||
| o New "Counter Signature Key Parameters" IANA Registry | o New "Counter Signature Key Parameters" IANA Registry | |||
| (Section 9.2). | (Section 9.2). | |||
| H.7. Version -03 to -04 | I.8. Version -03 to -04 | |||
| o Added the new "Counter Signature Parameters" in the Common Context | o Added the new "Counter Signature Parameters" in the Common Context | |||
| (see Section 2). | (see Section 2). | |||
| o Added recommendation on using "deterministic ECDSA" if ECDSA is | o Added recommendation on using "deterministic ECDSA" if ECDSA is | |||
| used as counter signature algorithm (see Section 2). | used as counter signature algorithm (see Section 2). | |||
| o Clarified possible asynchronous retrieval of keying material from | o Clarified possible asynchronous retrieval of keying material from | |||
| the Group Manager, in order to process incoming messages (see | the Group Manager, in order to process incoming messages (see | |||
| Section 2). | Section 2). | |||
| skipping to change at page 73, line 12 ¶ | skipping to change at page 77, line 21 ¶ | |||
| o The former signature bit in the Flag Byte of the OSCORE option | o The former signature bit in the Flag Byte of the OSCORE option | |||
| value is reverted to reserved (see Section 4.1). | value is reverted to reserved (see Section 4.1). | |||
| o Updated examples of compressed COSE object, now with the sixth | o Updated examples of compressed COSE object, now with the sixth | |||
| less significant bit in the Flag Byte of the OSCORE option value | less significant bit in the Flag Byte of the OSCORE option value | |||
| set to 0 (see Section 4.3). | set to 0 (see Section 4.3). | |||
| o Relaxed statements on sending error messages (see Section 6). | o Relaxed statements on sending error messages (see Section 6). | |||
| o Added explicit step on computing the counter signature for | o Added explicit step on computing the counter signature for | |||
| outgoing messages (see Setions 6.1 and 6.3). | outgoing messages (see Sections 6.1 and 6.3). | |||
| o Handling of just created Recipient Contexts in case of | o Handling of just created Recipient Contexts in case of | |||
| unsuccessful message verification (see Sections 6.2 and 6.4). | unsuccessful message verification (see Sections 6.2 and 6.4). | |||
| o Handling of replied/repeated responses on the client (see | o Handling of replied/repeated responses on the client (see | |||
| Section 6.4). | Section 6.4). | |||
| o New IANA Registry "Counter Signature Parameters" (see | o New IANA Registry "Counter Signature Parameters" (see | |||
| Section 9.1). | Section 9.1). | |||
| H.8. Version -02 to -03 | I.9. Version -02 to -03 | |||
| o Revised structure and phrasing for improved readability and better | o Revised structure and phrasing for improved readability and better | |||
| alignment with draft-ietf-core-object-security. | alignment with draft-ietf-core-object-security. | |||
| o Added discussion on wrap-Around of Partial IVs (see Section 2.2). | o Added discussion on wrap-Around of Partial IVs (see Section 2.2). | |||
| o Separate sections for the COSE Object (Section 3) and the OSCORE | o Separate sections for the COSE Object (Section 3) and the OSCORE | |||
| Header Compression (Section 4). | Header Compression (Section 4). | |||
| o The countersignature is now appended to the encrypted payload of | o The countersignature is now appended to the encrypted payload of | |||
| skipping to change at page 74, line 8 ¶ | skipping to change at page 78, line 19 ¶ | |||
| Section 7. | Section 7. | |||
| o Revised and extended security considerations in Section 8. | o Revised and extended security considerations in Section 8. | |||
| o Added IANA considerations for the OSCORE Flag Bits Registry in | o Added IANA considerations for the OSCORE Flag Bits Registry in | |||
| Section 9. | Section 9. | |||
| o Revised Appendix D, now giving a short high-level description of a | o Revised Appendix D, now giving a short high-level description of a | |||
| new endpoint set-up. | new endpoint set-up. | |||
| H.9. Version -01 to -02 | I.10. Version -01 to -02 | |||
| o Terminology has been made more aligned with RFC7252 and draft- | o Terminology has been made more aligned with RFC7252 and draft- | |||
| ietf-core-object-security: i) "client" and "server" replace the | ietf-core-object-security: i) "client" and "server" replace the | |||
| old "multicaster" and "listener", respectively; ii) "silent | old "multicaster" and "listener", respectively; ii) "silent | |||
| server" replaces the old "pure listener". | server" replaces the old "pure listener". | |||
| o Section 2 has been updated to have the Group Identifier stored in | o Section 2 has been updated to have the Group Identifier stored in | |||
| the 'ID Context' parameter defined in draft-ietf-core-object- | the 'ID Context' parameter defined in draft-ietf-core-object- | |||
| security. | security. | |||
| skipping to change at page 74, line 43 ¶ | skipping to change at page 79, line 5 ¶ | |||
| implications of possible collisions of group identifiers. | implications of possible collisions of group identifiers. | |||
| o Updated Appendix D.2, adding a pointer to draft-palombini-ace-key- | o Updated Appendix D.2, adding a pointer to draft-palombini-ace-key- | |||
| groupcomm about retrieval of nodes' public keys through the Group | groupcomm about retrieval of nodes' public keys through the Group | |||
| Manager. | Manager. | |||
| o Minor updates to Appendix E.3 about Challenge-Response | o Minor updates to Appendix E.3 about Challenge-Response | |||
| synchronization of sequence numbers based on the Echo option from | synchronization of sequence numbers based on the Echo option from | |||
| draft-ietf-core-echo-request-tag. | draft-ietf-core-echo-request-tag. | |||
| H.10. Version -00 to -01 | I.11. Version -00 to -01 | |||
| o Section 1.1 has been updated with the definition of group as | o Section 1.1 has been updated with the definition of group as | |||
| "security group". | "security group". | |||
| o Section 2 has been updated with: | o Section 2 has been updated with: | |||
| * Clarifications on etablishment/derivation of Security Contexts. | * Clarifications on establishment/derivation of Security | |||
| Contexts. | ||||
| * A table summarizing the the additional context elements | * A table summarizing the the additional context elements | |||
| compared to OSCORE. | compared to OSCORE. | |||
| o Section 3 has been updated with: | o Section 3 has been updated with: | |||
| * Examples of request and response messages. | * Examples of request and response messages. | |||
| * Use of CounterSignature0 rather than CounterSignature. | * Use of CounterSignature0 rather than CounterSignature. | |||
| skipping to change at page 75, line 34 ¶ | skipping to change at page 79, line 44 ¶ | |||
| o Added Appendix C, providing an example of Group Identifier format. | o Added Appendix C, providing an example of Group Identifier format. | |||
| o Appendix D has been updated to be aligned with draft-palombini- | o Appendix D has been updated to be aligned with draft-palombini- | |||
| ace-key-groupcomm. | ace-key-groupcomm. | |||
| Acknowledgments | Acknowledgments | |||
| The authors sincerely thank Christian Amsuess, Stefan Beck, Rolf | The authors sincerely thank Christian Amsuess, Stefan Beck, Rolf | |||
| Blom, Carsten Bormann, Esko Dijk, Klaus Hartke, Rikard Hoeglund, | Blom, Carsten Bormann, Esko Dijk, Klaus Hartke, Rikard Hoeglund, | |||
| Richard Kelsey, John Mattsson, Dave Robin, Jim Schaad, Ludwig Seitz, | Richard Kelsey, Dave Robin, Jim Schaad, Ludwig Seitz, Peter van der | |||
| Peter van der Stok and Erik Thormarker for their feedback and | Stok and Erik Thormarker for their feedback and comments. | |||
| comments. | ||||
| The work on this document has been partly supported by VINNOVA and | The work on this document has been partly supported by VINNOVA and | |||
| the Celtic-Next project CRITISEC; the H2020 project SIFIS-Home (Grant | the Celtic-Next project CRITISEC; the H2020 project SIFIS-Home (Grant | |||
| agreement 952652); the SSF project SEC4Factory under the grant | agreement 952652); the SSF project SEC4Factory under the grant | |||
| RIT17-0032; and the EIT-Digital High Impact Initiative ACTIVE. | RIT17-0032; and the EIT-Digital High Impact Initiative ACTIVE. | |||
| Authors' Addresses | Authors' Addresses | |||
| Marco Tiloca | Marco Tiloca | |||
| RISE AB | RISE AB | |||
| skipping to change at page 76, line 4 ¶ | skipping to change at page 80, line 14 ¶ | |||
| Authors' Addresses | Authors' Addresses | |||
| Marco Tiloca | Marco Tiloca | |||
| RISE AB | RISE AB | |||
| Isafjordsgatan 22 | Isafjordsgatan 22 | |||
| Kista SE-16440 Stockholm | Kista SE-16440 Stockholm | |||
| Sweden | Sweden | |||
| Email: marco.tiloca@ri.se | Email: marco.tiloca@ri.se | |||
| Goeran Selander | Goeran Selander | |||
| Ericsson AB | Ericsson AB | |||
| Torshamnsgatan 23 | Torshamnsgatan 23 | |||
| Kista SE-16440 Stockholm | Kista SE-16440 Stockholm | |||
| Sweden | Sweden | |||
| Email: goran.selander@ericsson.com | Email: goran.selander@ericsson.com | |||
| Francesca Palombini | Francesca Palombini | |||
| Ericsson AB | Ericsson AB | |||
| Torshamnsgatan 23 | Torshamnsgatan 23 | |||
| Kista SE-16440 Stockholm | Kista SE-16440 Stockholm | |||
| Sweden | Sweden | |||
| Email: francesca.palombini@ericsson.com | Email: francesca.palombini@ericsson.com | |||
| John Preuss Mattsson | ||||
| Ericsson AB | ||||
| Torshamnsgatan 23 | ||||
| Kista SE-16440 Stockholm | ||||
| Sweden | ||||
| Email: john.mattsson@ericsson.com | ||||
| Jiye Park | Jiye Park | |||
| Universitaet Duisburg-Essen | Universitaet Duisburg-Essen | |||
| Schuetzenbahn 70 | Schuetzenbahn 70 | |||
| Essen 45127 | Essen 45127 | |||
| Germany | Germany | |||
| Email: ji-ye.park@uni-due.de | Email: ji-ye.park@uni-due.de | |||
| End of changes. 232 change blocks. | ||||
| 749 lines changed or deleted | 972 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/ | ||||