Skip to main content

Identifier Update for OSCORE
draft-ietf-core-oscore-id-update-00

Document Type Active Internet-Draft (core WG)
Authors Rikard Höglund , Marco Tiloca
Last updated 2024-03-05
RFC stream Internet Engineering Task Force (IETF)
Intended RFC status (None)
Formats
Additional resources Mailing list discussion
Stream WG state WG Document
Document shepherd (None)
IESG IESG state I-D Exists
Consensus boilerplate Unknown
Telechat date (None)
Responsible AD (None)
Send notices to (None)
draft-ietf-core-oscore-id-update-00
#x27; field of the OSCORE Option.  Then, the
   server decrypts and verifies the response by using CTX_B.  Finally,
   the server prepares a CoAP response, protects it with CTX_B, and
   sends it to the client as Response #3.

   Upon receiving the OSCORE message Response #3, the client decrypts
   and verifies it with the OSCORE Security Context CTX_B.  In case of
   successful verification, the client confirms that the server is
   aligned with the new OSCORE Sender/Recipient IDs, and thus discards
   the OSCORE Security Context CTX_A.

   After that, one further exchange occurs, where both the CoAP request
   and the CoAP response are protected with the OSCORE Security Context
   CTX_B.  In particular, upon receiving, decrypting, and successfully
   verifying the OSCORE message Request #4, the server confirms that the
   client is aligned with the new OSCORE Sender/Recipient IDs, and thus
   discards the OSCORE Security Context CTX_A.

2.1.3.  Additional Actions for Execution

   After having experienced a loss of state, a peer MUST NOT participate
   in a stand-alone OSCORE ID update procedure with another peer, until
   having performed a full-fledged establishment/renewal of an OSCORE
   Security Context with the other peer (e.g., by running KUDOS
   [I-D.ietf-core-oscore-key-update] or the authenticated key
   establishment protocol EDHOC [I-D.ietf-lake-edhoc]).

   More precisely, a peer has experienced a loss of state if it cannot
   access the latest snapshot of the latest OSCORE Security Context
   CTX_OLD or the whole set of OSCORE Sender/Recipient IDs that have
   been used with the triplet (Master Secret, Master Salt, ID Context)
   of CTX_OLD.  This can happen, for instance, after a device reboots.

Höglund & Tiloca        Expires 5 September 2024               [Page 15]
Internet-Draft        Identifier Update for OSCORE            March 2024

   Furthermore, when participating in a stand-alone OSCORE ID update
   procedure, a peer performs the following additional steps.

   *  When a peer sends an ID update message, the value of the
      Recipient-ID Option that the peer specifies as its new intended
      OSCORE Recipient ID MUST fulfill both the following conditions: it
      is currently available as Recipient ID to use for the peer (see
      Section 3.3 of [RFC8613]); and the peer has never used it as
      Recipient ID with the current triplet (Master Secret, Master Salt,
      ID Context).

   *  When receiving an ID update message, the peer MUST abort the
      procedure if it has already used the identifier specified in the
      Recipient-ID Option as its own Sender ID with the current triplet
      (Master Secret, Master Salt, ID Context).

   In order to fulfill the conditions above, a peer has to keep track of
   the OSCORE Sender/Recipient IDs that it has used with the current
   triplet (Master Secret, Master Salt, ID Context) since the latest
   update of the OSCORE Master Secret (e.g., performed by running
   KUDOS).

2.2.  Preserving Observations Across ID Updates

   When running the OSCORE ID update procedure stand-alone or integrated
   in an execution of KUDOS, the following holds if Observe [RFC7641] is
   supported, in order to preserve ongoing observations beyond a change
   of OSCORE identifiers.

   *  If a peer intends to keep active beyond an update of its Sender ID
      the observations where it is acting as CoAP client, then the peer:

      -  MUST store the value of the 'kid' parameter from the original
         Observe requests, and retain it for the whole duration of the
         observations, throughout which the client MUST NOT update the
         stored value associated with the corresponding Observe
         registration request; and

      -  MUST use the stored value of the 'kid' parameter from the
         original Observe registration request as value for the
         'request_kid' parameter in the external_aad structure (see
         Section 5.4 of [RFC8613]), when verifying notifications for
         that observation as per Section 8.4.2 of [RFC8613].

   *  If a peer is acting as CoAP server in an ongoing observation, then
      the peer:

Höglund & Tiloca        Expires 5 September 2024               [Page 16]
Internet-Draft        Identifier Update for OSCORE            March 2024

      -  MUST store the value of the 'kid' parameter from the original
         Observe registration request, and retain it for the whole
         duration of the observation, throughout which the peer MUST NOT
         update the stored value associated with the corresponding
         Observe registration request; and

      -  MUST use the stored value of the 'kid' parameter from the
         original Observe registration request as value for the
         'request_kid' parameter in the external_aad structure (see
         Section 5.4 of [RFC8613]), when protecting notifications for
         that observation as per Section 8.3.1 of [RFC8613].

3.  Security Considerations

   TODO Security

4.  IANA Considerations

   This document has the following actions for IANA.

   Note to RFC Editor: Please replace all occurrences of "[RFC-XXXX]"
   with the RFC number of this specification and delete this paragraph.

4.1.  CoAP Option Numbers Registry

   IANA is asked to enter the following option number to the "CoAP
   Option Numbers" registry within the "Constrained RESTful Environments
   (CoRE) Parameters" registry group.

                  +========+==============+============+
                  | Number | Name         | Reference  |
                  +========+==============+============+
                  | TBD24  | Recipient-ID | [RFC-XXXX] |
                  +--------+--------------+------------+

                     Table 1: New CoAP Option Number

   Note to RFC Editor: Following the registration of the CoAP Option
   Number 24, please replace "TBD24" with "24" in the table above.
   Then, please delete this paragraph.

5.  References

5.1.  Normative References

   [I-D.ietf-core-oscore-key-update]
              Höglund, R. and M. Tiloca, "Key Update for OSCORE
              (KUDOS)", Work in Progress, Internet-Draft, draft-ietf-

Höglund & Tiloca        Expires 5 September 2024               [Page 17]
Internet-Draft        Identifier Update for OSCORE            March 2024

              core-oscore-key-update-07, 4 March 2024,
              <https://datatracker.ietf.org/doc/html/draft-ietf-core-
              oscore-key-update-07>.

   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", BCP 14, RFC 2119,
              DOI 10.17487/RFC2119, March 1997,
              <https://www.rfc-editor.org/info/rfc2119>.

   [RFC7252]  Shelby, Z., Hartke, K., and C. Bormann, "The Constrained
              Application Protocol (CoAP)", RFC 7252,
              DOI 10.17487/RFC7252, June 2014,
              <https://www.rfc-editor.org/info/rfc7252>.

   [RFC7641]  Hartke, K., "Observing Resources in the Constrained
              Application Protocol (CoAP)", RFC 7641,
              DOI 10.17487/RFC7641, September 2015,
              <https://www.rfc-editor.org/info/rfc7641>.

   [RFC8174]  Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
              2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
              May 2017, <https://www.rfc-editor.org/info/rfc8174>.

   [RFC8613]  Selander, G., Mattsson, J., Palombini, F., and L. Seitz,
              "Object Security for Constrained RESTful Environments
              (OSCORE)", RFC 8613, DOI 10.17487/RFC8613, July 2019,
              <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>.

5.2.  Informative References

   [I-D.ietf-lake-edhoc]
              Selander, G., Mattsson, J. P., and F. Palombini,
              "Ephemeral Diffie-Hellman Over COSE (EDHOC)", Work in
              Progress, Internet-Draft, draft-ietf-lake-edhoc-23, 22
              January 2024, <https://datatracker.ietf.org/doc/html/
              draft-ietf-lake-edhoc-23>.

Appendix A.  Examples of OSCORE ID update procedure Integrated in KUDOS

   The following section shows two examples where the OSCORE ID update
   procedure is performed together with the KUDOS procedure for updating
   OSCORE keying material.

Höglund & Tiloca        Expires 5 September 2024               [Page 18]
Internet-Draft        Identifier Update for OSCORE            March 2024

A.1.  Forward Message Flow

   Figure 4 provides an example of the OSCORE ID update procedure, as
   run integrated in an execution of KUDOS and in the forward message
   flow (see Section 4.3.1 of [I-D.ietf-core-oscore-key-update]).  On
   each peer, SID and RID denote the OSCORE Sender ID and Recipient ID
   of that peer, respectively.

                      Client                  Server
                    (initiator)            (responder)
                         |                      |
 CTX_OLD {               |                      | CTX_OLD {
  SID = 0x01             |                      |  SID = 0x00
  RID = 0x00             |                      |  RID = 0x01
 }                       |                      | }
                         |                      |
 Generate N1             |                      |
                         |                      |
 CTX_1 = updateCtx(      |                      |
         X1,             |                      |
         N1,             |                      |
         CTX_OLD)        |                      |
                         |                      |
                         |      Request #1      |
 Protect with CTX_1      |--------------------->| /.well-known/kudos
                         | OSCORE {             |
                         |  ...                 |
                         |  d flag: 1           | CTX_1 = updateCtx(
                         |  x: X1               |         X1,
                         |  nonce: N1           |         N1,
                         |  ...                 |         CTX_OLD)
                         |  kid: 0x01           |
                         | }                    | Verify with CTX_1
                         | Encrypted Payload {  |
                         |  ...                 | Generate N2
                         |  Recipient-ID: 0x42  |
                         |  ...                 | CTX_NEW = updateCtx(
                         | }                    |           Comb(X1,X2),
                         |                      |           Comb(N1,N2),
                         |                      |           CTX_OLD)
                         |                      |
                         |      Response #1     |
                         |<---------------------| Protect with CTX_NEW
                         | OSCORE {             |
                         |  ...                 |
 CTX_NEW = updateCtx(    |  Partial IV: 0       |
           Comb(X1,X2),  |  ...                 |
           Comb(N1,N2),  |                      |

Höglund & Tiloca        Expires 5 September 2024               [Page 19]
Internet-Draft        Identifier Update for OSCORE            March 2024

           CTX_OLD)      |  d flag: 1           |
                         |  x: X2               |
 Verify with CTX_NEW     |  nonce: N2           |
                         |  ...                 |
 Discard CTX_OLD         | }                    |
                         | Encrypted Payload {  |
 Update SID and          |  ...                 | Update SID and
 RID in CTX_NEW          |  Recipient-ID: 0x78  | RID in CTX_NEW
                         |  ...                 |
 CTX_NEW {               | }                    | CTX_NEW {
  SID = 0x78             |                      |  SID = 0x42
  RID = 0x42             |                      |  RID = 0x78
 }                       |                      | }
                         |                      |

 // The actual key update process ends here.
 // The two peers can use the new Security Context CTX_NEW.

                         |                      |
                         |      Request #2      |
 Protect with CTX_NEW    |--------------------->| /temp
                         | OSCORE {             |
                         |  ...                 |
                         |  kid: 0x78           | Verify with CTX_NEW
                         | }                    |
                         | Encrypted Payload {  | Discard CTX_OLD
                         |  ...                 |
                         |  Application Payload |
                         | }                    |
                         |                      |
                         |      Response #2     |
                         |<---------------------| Protect with CTX_NEW
                         | OSCORE {             |
                         |  ...                 |
 Verify with CTX_NEW     | }                    |
                         | Encrypted Payload {  |
                         |  ...                 |
                         |  Application Payload |
                         | }                    |
                         |                      |

    Figure 4: Example of the OSCORE ID update procedure with Forward
           Message Flow and Integrated in a KUDOS Execution.

Höglund & Tiloca        Expires 5 September 2024               [Page 20]
Internet-Draft        Identifier Update for OSCORE            March 2024

A.2.  Reverse Message Flow

   Figure 5 provides an example of the OSCORE ID update procedure, as
   run integrated in an execution of KUDOS and in the reverse message
   flow (see Section 4.3.2 of [I-D.ietf-core-oscore-key-update]).  On
   each peer, SID and RID denote the OSCORE Sender ID and Recipient ID
   of that peer, respectively.

                       Client                 Server
                    (responder)            (initiator)
                         |                      |
 CTX_OLD {               |                      | CTX_OLD {
  SID = 0x01             |                      |  SID = 0x00
  RID = 0x00             |                      |  RID = 0x01
 }                       |                      | }
                         |                      |
                         |      Request #1      |
 Protect with CTX_OLD    |--------------------->| /temp
                         | OSCORE {             |
                         |  ...                 |
                         |  kid: 0x01           |
                         | }                    | Verify with CTX_OLD
                         | Encrypted Payload {  |
                         |  ...                 | Generate N1
                         |  Application Payload |
                         | }                    | CTX_1 = updateCtx(
                         |                      |         X1,
                         |                      |         N1,
                         |                      |         CTX_OLD)
                         |                      |
                         |      Response #1     |
                         |<---------------------| Protect with CTX_1
                         | OSCORE {             |
                         |  ...                 |
 CTX_1 = updateCtx(      |  Partial IV: 0       |
         X1,             |  ...                 |
         N1,             |  d flag: 1           |
         CTX_OLD)        |  x: X1               |
                         |  nonce: N1           |
 Verify with CTX_1       |  ...                 |
                         | }                    |
 Generate N2             | Encrypted Payload {  |
                         |  ...                 |
 CTX_NEW = updateCtx(    |  Recipient-ID: 0x78  |
           Comb(X1,X2),  |  ...                 |
           Comb(N1,N2),  | }                    |
           CTX_OLD)      |                      |
                         |                      |

Höglund & Tiloca        Expires 5 September 2024               [Page 21]
Internet-Draft        Identifier Update for OSCORE            March 2024

                         |      Request #2      |
 Protect with CTX_NEW    |--------------------->| /.well-known/kudos
                         | OSCORE {             |
                         |  ...                 |
                         |  d flag: 1           | CTX_NEW = updateCtx(
                         |  x: X2               |           Comb(X1,X2),
                         |  nonce: N2           |           Comb(N1,N2),
                         |  y: w                |           CTX_OLD)
                         |  old_nonce: N1       |
                         |  kid: 0x01           |
                         |  ...                 |
                         | }                    | Verify with CTX_NEW
                         | Encrypted Payload {  |
                         |  ...                 | Discard CTX_OLD
                         |  Recipient-ID: 0x42  |
                         |  ...                 |
                         |  Application Payload |
                         | }                    |
                         |                      |
 Update SID and          |                      | Update SID and
 RID in CTX_NEW          |                      | RID in CTX_NEW
                         |                      |
  CTX_NEW {              |                      | CTX_NEW {
   SID = 0x78            |                      |  SID = 0x42
   RID = 0x42            |                      |  RID = 0x78
  }                      |                      | }
                         |                      |

 // The actual key update process ends here.
 // The two peers can use the new Security Context CTX_NEW.

                         |                      |
                         |      Response #2     |
                         |<---------------------| Protect with CTX_NEW
                         | OSCORE {             |
                         |  ...                 |
 Verify with CTX_NEW     | }                    |
                         | Encrypted Payload {  |
 Discard CTX_OLD         |  ...                 |
                         |  Application Payload |
                         | }                    |
                         |                      |
                         |      Request #3      |
 Protect with CTX_NEW    |--------------------->| /temp
                         | OSCORE {             |
                         |  ...                 |
                         |  kid: 0x78           | Verify with CTX_NEW
                         | }                    |

Höglund & Tiloca        Expires 5 September 2024               [Page 22]
Internet-Draft        Identifier Update for OSCORE            March 2024

                         | Encrypted Payload {  |
                         |  ...                 |
                         |  Application Payload |
                         | }                    |
                         |                      |
                         |      Response #3     |
                         |<---------------------| Protect with CTX_NEW
                         | OSCORE {             |
                         |  ...                 |
 Verify with CTX_NEW     | }                    |
                         | Encrypted Payload {  |
                         |  ...                 |
                         |  Application Payload |
                         | }                    |
                         |                      |

    Figure 5: Example of the OSCORE ID update procedure with Reverse
           Message Flow and Integrated in a KUDOS Execution.

Appendix B.  Document Updates

   This section is to be removed before publishing as an RFC.

B.1.  Version -00

   *  Split out material from Key Update for OSCORE draft into this new
      document.

   *  Extended terminology

   *  Editorial improvements

Acknowledgments

   The authors sincerely thank Christian Amsüss, Carsten Bormann, John
   Preuß Mattsson, and Göran Selander for their feedback and comments.

   The work on this document has been partly supported by VINNOVA and
   the Celtic-Next project CRITISEC; and by the H2020 projects SIFIS-
   Home (Grant agreement 952652) and ARCADIAN-IoT (Grant agreement
   101020259).

Authors' Addresses

Höglund & Tiloca        Expires 5 September 2024               [Page 23]
Internet-Draft        Identifier Update for OSCORE            March 2024

   Rikard Höglund
   RISE AB
   Isafjordsgatan 22
   SE-16440 Stockholm Kista
   Sweden
   Email: rikard.hoglund@ri.se

   Marco Tiloca
   RISE AB
   Isafjordsgatan 22
   SE-16440 Stockholm Kista
   Sweden
   Email: marco.tiloca@ri.se

Höglund & Tiloca        Expires 5 September 2024               [Page 24]