draft-ietf-cbor-network-addresses-04.txt | draft-ietf-cbor-network-addresses-05.txt | |||
---|---|---|---|---|
CBOR Working Group M. Richardson | CBOR Working Group M. Richardson | |||
Internet-Draft Sandelman Software Works | Internet-Draft Sandelman Software Works | |||
Intended status: Standards Track 21 April 2021 | Intended status: Standards Track C. Bormann | |||
Expires: 23 October 2021 | Expires: 13 January 2022 Universität Bremen TZI | |||
12 July 2021 | ||||
CBOR tags for IPv4 and IPv6 addresses and prefixes | CBOR tags for IPv4 and IPv6 addresses and prefixes | |||
draft-ietf-cbor-network-addresses-04 | draft-ietf-cbor-network-addresses-05 | |||
Abstract | Abstract | |||
This document describes two CBOR Tags to be used with IPv4 and IPv6 | This document describes two CBOR Tags to be used with IPv4 and IPv6 | |||
addresses and prefixes. | addresses and prefixes. | |||
RFC-EDITOR-please remove: This work is tracked at https://github.com/ | RFC-EDITOR-please remove: This work is tracked at https://github.com/ | |||
cbor-wg/cbor-network-address | cbor-wg/cbor-network-address | |||
Status of This Memo | Status of This Memo | |||
skipping to change at page 1, line 34 ¶ | skipping to change at page 1, line 35 ¶ | |||
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 23 October 2021. | This Internet-Draft will expire on 13 January 2022. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2021 IETF Trust and the persons identified as the | Copyright (c) 2021 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents (https://trustee.ietf.org/ | |||
license-info) in effect on the date of publication of this document. | license-info) in effect on the date of publication of this document. | |||
Please review these documents carefully, as they describe your rights | Please review these documents carefully, as they describe your rights | |||
and restrictions with respect to this document. Code Components | and restrictions with respect to this document. Code Components | |||
extracted from this document must include Simplified BSD License text | extracted from this document must include Simplified BSD License text | |||
as described in Section 4.e of the Trust Legal Provisions and are | as described in Section 4.e of the Trust Legal Provisions and are | |||
provided without warranty as described in the Simplified BSD License. | provided without warranty as described in the Simplified BSD License. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 2 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
3. Protocol . . . . . . . . . . . . . . . . . . . . . . . . . . 2 | 3. Protocol . . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
3.1. IPv6 . . . . . . . . . . . . . . . . . . . . . . . . . . 2 | 3.1. IPv6 . . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
3.2. IPv4 . . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 3.2. IPv4 . . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
4. Encoder Consideration for prefixes . . . . . . . . . . . . . 3 | 4. Encoder Consideration for prefixes . . . . . . . . . . . . . 4 | |||
5. Decoder Considerations for prefixes . . . . . . . . . . . . . 4 | 5. Decoder Considerations for prefixes . . . . . . . . . . . . . 5 | |||
6. Security Considerations . . . . . . . . . . . . . . . . . . . 4 | 6. CDDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 5 | 7. Security Considerations . . . . . . . . . . . . . . . . . . . 6 | |||
7.1. Tag 54 - IPv6 . . . . . . . . . . . . . . . . . . . . . . 5 | 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 7 | |||
7.2. Tag 52 - IPv4 . . . . . . . . . . . . . . . . . . . . . . 5 | 8.1. Tag 54 - IPv6 . . . . . . . . . . . . . . . . . . . . . . 7 | |||
8. Normative References . . . . . . . . . . . . . . . . . . . . 5 | 8.2. Tag 52 - IPv4 . . . . . . . . . . . . . . . . . . . . . . 7 | |||
Appendix A. Changelog . . . . . . . . . . . . . . . . . . . . . 5 | 9. Normative References . . . . . . . . . . . . . . . . . . . . 7 | |||
Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . 6 | Appendix A. Changelog . . . . . . . . . . . . . . . . . . . . . 7 | |||
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 6 | Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 8 | ||||
1. Introduction | 1. Introduction | |||
[RFC8949] defines a number of CBOR Tags for common items. | [RFC8949] defines a number of CBOR Tags for common items. | |||
Not included are ones to indicate if the item is an IPv4 or IPv6 | Tag 260 and tag 261 was later defined through IANA. These tags cover | |||
address, or if it is an address plus prefix length. This document | addresses (260), and prefixes (261). Tag 260 distinguishes between | |||
defines them. | IPv4, IPv6 and Ethernet through the length of the byte string only. | |||
Tag 261 was not documented well enough to be used. | ||||
The present specification achieves an explicit indication of IPv4 or | ||||
IPv6, and the possibility to omit trailing zeroes. | ||||
This document provides a format for IPv6 and IPv4 addresses, | ||||
prefixes, and addresses with prefixes. Prefixes MUST omit trailing | ||||
zeroes in the address. Due to the complexity of testing the value of | ||||
omitting trailing zeros for addresses was considered non-essential | ||||
and support for that was removed in this specification. | ||||
This document does not deal with 6 or 8-byte Ethernet addressees. | ||||
2. Terminology | 2. Terminology | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
"OPTIONAL" in this document are to be interpreted as described in | "OPTIONAL" in this document are to be interpreted as described in | |||
BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
capitals, as shown here. | capitals, as shown here. | |||
3. Protocol | 3. Protocol | |||
These tags can applied to byte strings to represent a single address. | These tags can applied to byte strings to represent a single address. | |||
When applied to an array, the represent a CIDR-style prefix. When a | When applied to an array that starts with a number, they represent a | |||
byte string (without prefix) appears in a context where a prefix is | CIDR-style prefix of that length. When a byte string (without | |||
expected, then it is to be assumed that all bits are relevant. That | prefix) appears in a context where a prefix is expected, then it is | |||
is, for IPv4, a /32 is implied, and for IPv6, a /128 is implied. | to be assumed that all bits are relevant. That is, for IPv4, a /32 | |||
is implied, and for IPv6, a /128 is implied. | ||||
When applied to an array that starts with a byte string, that stands | ||||
for an IP address, followed by the bit length of a prefix built out | ||||
of the first "length" bits of the address. | ||||
3.1. IPv6 | 3.1. IPv6 | |||
IANA has allocated tag 54 for IPv6 uses. (Note that this is the | IANA has allocated tag 54 for IPv6 uses. (Note that this is the | |||
ASCII code for '6'.) | ASCII code for '6'.) | |||
An IPv6 address is to be encoded as a sixteen-byte byte string | An IPv6 address is to be encoded as a sixteen-byte byte string | |||
([RFC8949] section, 3.1, major type 2), prefixed with Tag(54). | (Section 3.1 of [RFC8949], major type 2), enclosed in Tag number 54. | |||
An IPv6 prefix, such as 2001:db8:1234::/48 is to be encoded as a two | An IPv6 prefix, such as 2001:db8:1234::/48 is to be encoded as a two | |||
element array, with the length of the prefix first. Trailing zero | element array, with the length of the prefix first. Trailing zero | |||
bytes MUST be omitted. | bytes MUST be omitted. | |||
For example: | For example: | |||
54([ 48, h'20010db81234']) | 54([ 48, h'20010db81234']) | |||
An IPv6 address combined with a prefix length, such as being used for | ||||
configuring an interface, is to be encoded as a two element array, | ||||
with the (full-length) IPv6 address first and the length of the | ||||
associated network the prefix next. | ||||
For example: | ||||
54([h'20010db81234DEEDBEEFCAFEFACEFEED', 56]) | ||||
Note that the address-with-prefix form can be reliably distinguished | ||||
from the prefix form only in the sequence of the array elements. | ||||
3.2. IPv4 | 3.2. IPv4 | |||
IANA has allocated tag 54 for IPv4 uses. (Note that this is the | IANA has allocated tag 52 for IPv4 uses. (Note that this is the | |||
ASCII code for '4'.) | ASCII code for '4'.) | |||
An IPv4 address is to be encoded as a four-byte byte string | An IPv4 address is to be encoded as a four-byte byte string | |||
([RFC8949] section, 3.1, major type 2), prefixed with Tag(52). | (Section 3.1 of [RFC8949], major type 2), enclosed in Tag number 52. | |||
An IPv4 prefix, such as 192.0.2.1/24 is to be encoded as a two | An IPv4 prefix, such as 192.0.2.0/24 is to be encoded as a two | |||
element array, with the length of the prefix first. Trailing zero | element array, with the length of the prefix first. Trailing zero | |||
bytes MUST be omitted. | bytes MUST be omitted. | |||
For example: | For example: | |||
52([ 24, h'C00002']) | 52([ 24, h'C00002']) | |||
An IPv4 address combined with a prefix length, such as being used for | ||||
configuring an interface, is to be encoded as a two element array, | ||||
with the (full-length) IPv4 address first and the length of the | ||||
associated network the prefix next. | ||||
For example, 192.0.2.1/24 is to be encoded as a two element array, | ||||
with the length of the prefix (implied 192.0.2.0/24) last. | ||||
52([ h'C0000201', 24]) | ||||
Note that the address-with-prefix form can be reliably distinguished | ||||
from the prefix form only in the sequence of the array elements. | ||||
4. Encoder Consideration for prefixes | 4. Encoder Consideration for prefixes | |||
An encoder may omit as many right-hand (trailing) bytes which are all | An encoder may omit as many right-hand (trailing) bytes which are all | |||
zero as it wishes. | zero as it wishes. | |||
There is no relationship between the number of bytes omitted and the | There is no relationship between the number of bytes omitted and the | |||
prefix length. For instance, the prefix 2001:db8::/64 is optimally | prefix length. For instance, the prefix 2001:db8::/64 is optimally | |||
encoded as: | encoded as: | |||
54([64, h'20010db8']) | 54([64, h'20010db8']) | |||
skipping to change at page 4, line 39 ¶ | skipping to change at page 5, line 35 ¶ | |||
the array. | the array. | |||
Finally, looking at the last three bits of the prefix-length (that | Finally, looking at the last three bits of the prefix-length (that | |||
is, the prefix-length modulo 8), use a static array of 8 values to | is, the prefix-length modulo 8), use a static array of 8 values to | |||
force the lower bits, non-relevant bits to zero. | force the lower bits, non-relevant bits to zero. | |||
A particularly paranoid decoder could examine the lower non-relevant | A particularly paranoid decoder could examine the lower non-relevant | |||
bits to determine if they are non-zero, and reject the prefix. This | bits to determine if they are non-zero, and reject the prefix. This | |||
would detect non-compliant encoders, or a possible covert channel. | would detect non-compliant encoders, or a possible covert channel. | |||
6. Security Considerations | 6. CDDL | |||
For use with CDDL [RFC8610], the typenames defined in Figure 1 are | ||||
recommended: | ||||
ip-address-or-prefix = ipv6-address-or-prefix / | ||||
ipv4-address-or-prefix | ||||
ipv6-address-or-prefix = #6.54(ipv6-address / | ||||
ipv6-address-with-prefix / | ||||
ipv6-prefix) | ||||
ipv4-address-or-prefix = #6.52(ipv4-address / | ||||
ipv4-address-with-prefix / | ||||
ipv4-prefix) | ||||
ipv6-address = bytes .size 16 | ||||
ipv4-address = bytes .size 4 | ||||
ipv6-address-with-prefix = [ipv6-address, ipv6-prefix-length] | ||||
ipv4-address-with-prefix = [ipv4-address, ipv4-prefix-length] | ||||
ipv6-prefix-length = 0..128 | ||||
ipv4-prefix-length = 0..32 | ||||
ipv6-prefix = [ipv6-prefix-length, ipv6-prefix-bytes] | ||||
ipv4-prefix = [ipv4-prefix-length, ipv4-prefix-bytes] | ||||
ipv6-prefix-bytes = bytes .size (uint .le 16) | ||||
ipv4-prefix-bytes = bytes .size (uint .le 4) | ||||
Figure 1 | ||||
7. Security Considerations | ||||
Identifying which byte sequences in a protocol are addresses may | Identifying which byte sequences in a protocol are addresses may | |||
allow an attacker or eavesdropper to better understand what parts of | allow an attacker or eavesdropper to better understand what parts of | |||
a packet to attack. | a packet to attack. | |||
Reading the relevant RFC may provide more information, so it would | Reading the relevant RFC may provide more information, so it would | |||
seem that any additional security that was provided by not being able | seem that any additional security that was provided by not being able | |||
to identify what are IP addresses falls into the security by | to identify what are IP addresses falls into the security by | |||
obscurity category. | obscurity category. | |||
The right-hand bits of the prefix, after the prefix-length, are | The right-hand bits of the prefix, after the prefix-length, are | |||
ignored by this protocol. A malicious party could use them to | ignored by this protocol. A malicious party could use them to | |||
transmit covert data in a way that would not affect the primary use | transmit covert data in a way that would not affect the primary use | |||
of this encoding. Such abuse would be detected by examination of the | of this encoding. Such abuse would be detected by examination of the | |||
raw protocol bytes. Users of this encoding should be aware of this | raw protocol bytes. Users of this encoding should be aware of this | |||
possibility. | possibility. | |||
7. IANA Considerations | 8. IANA Considerations | |||
IANA has allocated two tags from the Specification Required area of | IANA has allocated two tags from the Specification Required area of | |||
the Concise Binary Object Representation (CBOR) Tags: | the Concise Binary Object Representation (CBOR) Tags: | |||
7.1. Tag 54 - IPv6 | 8.1. Tag 54 - IPv6 | |||
Data Item: byte string or array | Data Item: byte string or array | |||
Semantics: IPv6 or [prefixlen,IPv6] | Semantics: IPv6, [prefixlen,IPv6], [IPv6,prefixpart] | |||
7.2. Tag 52 - IPv4 | 8.2. Tag 52 - IPv4 | |||
Data Item: byte string or array | Data Item: byte string or array | |||
Semantics: IPv4 or [prefixlen,IPv4] | Semantics: IPv4, [prefixlen,IPv4], [IPv4,prefixpart] | |||
8. Normative References | 9. Normative References | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
[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>. | |||
[RFC8610] Birkholz, H., Vigano, C., and C. Bormann, "Concise Data | ||||
Definition Language (CDDL): A Notational Convention to | ||||
Express Concise Binary Object Representation (CBOR) and | ||||
JSON Data Structures", RFC 8610, DOI 10.17487/RFC8610, | ||||
June 2019, <https://www.rfc-editor.org/info/rfc8610>. | ||||
[RFC8949] Bormann, C. and P. Hoffman, "Concise Binary Object | [RFC8949] Bormann, C. and P. Hoffman, "Concise Binary Object | |||
Representation (CBOR)", STD 94, RFC 8949, | Representation (CBOR)", STD 94, RFC 8949, | |||
DOI 10.17487/RFC8949, December 2020, | DOI 10.17487/RFC8949, December 2020, | |||
<https://www.rfc-editor.org/info/rfc8949>. | <https://www.rfc-editor.org/info/rfc8949>. | |||
Appendix A. Changelog | Appendix A. Changelog | |||
This section is to be removed before publishing as an RFC. | This section is to be removed before publishing as an RFC. | |||
* 03 | * 03 | |||
* 02 | * 02 | |||
* 01 added security considerations about covert channel | * 01 added security considerations about covert channel | |||
Acknowledgements | Acknowledgements | |||
none yet | none yet | |||
Author's Address | Authors' Addresses | |||
Michael Richardson | Michael Richardson | |||
Sandelman Software Works | Sandelman Software Works | |||
Email: mcr+ietf@sandelman.ca | Email: mcr+ietf@sandelman.ca | |||
Carsten Bormann | ||||
Universität Bremen TZI | ||||
Germany | ||||
Email: cabo@tzi.org | ||||
End of changes. 25 change blocks. | ||||
36 lines changed or deleted | 118 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/ |