--- 1/draft-ietf-6man-stable-privacy-addresses-16.txt 2014-01-27 14:14:33.030499647 -0800 +++ 2/draft-ietf-6man-stable-privacy-addresses-17.txt 2014-01-27 14:14:33.070500720 -0800 @@ -1,19 +1,19 @@ IPv6 maintenance Working Group (6man) F. Gont Internet-Draft SI6 Networks / UTN-FRH -Intended status: Standards Track December 10, 2013 -Expires: June 13, 2014 +Intended status: Standards Track January 27, 2014 +Expires: July 31, 2014 A Method for Generating Semantically Opaque Interface Identifiers with IPv6 Stateless Address Autoconfiguration (SLAAC) - draft-ietf-6man-stable-privacy-addresses-16 + draft-ietf-6man-stable-privacy-addresses-17 Abstract This document specifies a method for generating IPv6 Interface Identifiers to be used with IPv6 Stateless Address Autoconfiguration (SLAAC), such that addresses configured using this method are stable within each subnet, but the Interface Identifier changes when hosts move from one network to another. This method is meant to be an alternative to generating Interface Identifiers based on hardware addresses (e.g., IEEE LAN MAC addresses), such that the benefits of @@ -30,57 +30,57 @@ Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet- Drafts is at http://datatracker.ietf.org/drafts/current/. Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress." - This Internet-Draft will expire on June 13, 2014. + This Internet-Draft will expire on July 31, 2014. Copyright Notice - Copyright (c) 2013 IETF Trust and the persons identified as the + Copyright (c) 2014 IETF Trust and the persons identified as the document authors. All rights reserved. This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License. Table of Contents 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 - 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 4 + 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 5 3. Relationship to Other standards . . . . . . . . . . . . . . . 5 4. Design goals . . . . . . . . . . . . . . . . . . . . . . . . 5 5. Algorithm specification . . . . . . . . . . . . . . . . . . . 6 6. Resolving Duplicate Address Detection (DAD) conflicts . . . . 11 7. Specified Constants . . . . . . . . . . . . . . . . . . . . . 12 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 12 9. Security Considerations . . . . . . . . . . . . . . . . . . . 12 10. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 14 11. References . . . . . . . . . . . . . . . . . . . . . . . . . 15 11.1. Normative References . . . . . . . . . . . . . . . . . . 15 11.2. Informative References . . . . . . . . . . . . . . . . . 16 - Appendix A. Possible sources for the Net_Iface parameter . . . . 17 - A.1. Interface Index . . . . . . . . . . . . . . . . . . . . . 17 + Appendix A. Possible sources for the Net_Iface parameter . . . . 18 + A.1. Interface Index . . . . . . . . . . . . . . . . . . . . . 18 A.2. Interface Name . . . . . . . . . . . . . . . . . . . . . 18 - A.3. Link-layer Addresses . . . . . . . . . . . . . . . . . . 18 - A.4. Logical Network Service Identity . . . . . . . . . . . . 18 + A.3. Link-layer Addresses . . . . . . . . . . . . . . . . . . 19 + A.4. Logical Network Service Identity . . . . . . . . . . . . 19 Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 19 1. Introduction [RFC4862] specifies Stateless Address Autoconfiguration (SLAAC) for IPv6 [RFC2460], which typically results in hosts configuring one or more "stable" addresses composed of a network prefix advertised by a local router, and an Interface Identifier (IID) that typically embeds a hardware address (e.g., an IEEE LAN MAC address) [RFC4291]. Cryptographically Generated Addresses (CGAs) [RFC3972] are yet @@ -129,21 +129,21 @@ the extent to which the method discussed in this document mitigates them. The "Privacy Extensions for Stateless Address Autoconfiguration in IPv6" [RFC4941] (henceforth referred to as "temporary addresses") were introduced to complicate the task of eavesdroppers and other information collectors (e.g., IPv6 addresses in web server logs or email headers, etc.) to correlate the activities of a node, and basically result in temporary (and random) Interface Identifiers. These temporary addresses are generated in addition to the - traditional IPv6 addresses based on IEEE LAC MAC addresses, with the + traditional IPv6 addresses based on IEEE LAN MAC addresses, with the "temporary addresses" being employed for "outgoing communications", and the traditional SLAAC addresses being employed for "server" functions (i.e., receiving incoming connections). It should be noted that temporary addresses can be challenging in a number of areas. For example, from a network-management point of view, they tend to increase the complexity of event logging, trouble- shooting, enforcement of access controls and quality of service, etc. As a result, some organizations disable the use of temporary addresses even at the expense of reduced privacy [Broersma]. @@ -211,27 +212,27 @@ While the method specified in this document is meant to be used with SLAAC, this does not preclude this algorithm from being used with other address configuration mechanisms, such as DHCPv6 [RFC3315] or manual address configuration. 4. Design goals This document specifies a method for generating Interface Identifiers to be used with IPv6 SLAAC, with the following goals: - o The resulting Interface Identifiers remain constant/stable for - each prefix used with SLAAC within each subnet. That is, the - algorithm generates the same Interface Identifier when configuring - an address (for the same interface) belonging to the same prefix - within the same subnet. + o The resulting Interface Identifiers remain stable for each prefix + used with SLAAC within each subnet for the same network interface. + That is, the algorithm generates the same Interface Identifier + when configuring an address (for the same interface) belonging to + the same prefix within the same subnet. - o The resulting Interface Identifiers do change when addresses are + o The resulting Interface Identifiers must change when addresses are configured for different prefixes. That is, if different autoconfiguration prefixes are used to configure addresses for the same network interface card, the resulting Interface Identifiers must be (statistically) different. This means that, given two addresses produced by the method specified in this document, it must be difficult for an attacker tell whether the addresses have been generated/used by the same node. o It must be difficult for an outsider to predict the Interface Identifiers that will be generated by the algorithm, even with @@ -300,63 +302,65 @@ Random (but stable) Identifier F(): A pseudorandom function (PRF) that MUST NOT be computable from the outside (without knowledge of the secret key). F() MUST also be difficult to reverse, such that it resists attempts to obtain the secret_key, even when given samples of the output of F() and knowledge or control of the other input parameters. F() SHOULD produce an output of at least 64 bits. F() could be implemented as a cryptographic hash of the concatenation of - each of the function parameters. MD5 [RFC1321] and SHA-1 - [FIPS-SHS] are two possible options for F(). + each of the function parameters. SHA-1 [FIPS-SHS] and SHA-256 + are two possible options for F(). Note: MD5 [RFC1321] is + considered unacceptable for F() [RFC6151]. Prefix: The prefix to be used for SLAAC, as learned from an ICMPv6 Router Advertisement message, or the link-local IPv6 unicast prefix [RFC4291]. Net_Iface: An implementation-dependent stable identifier associated with the network interface for which the RID is being generated. - An implementation MAY provide a configuration option to select the source of the identifier to be used for the Net_Iface parameter. A discussion of possible sources for this value (along with the corresponding trade-offs) can be found in Appendix A. Network_ID: + Some network specific data that identifies the subnet to which this interface is attached. For example the IEEE 802.11 Service Set Identifier (SSID) corresponding to the network to - which this interface is associated. This parameter is - OPTIONAL. + which this interface is associated. Additionally, Simple DNA + [RFC6059] describes ideas that could be leveraged to generate + a Network_ID parameter. This parameter is OPTIONAL. DAD_Counter: A counter that is employed to resolve Duplicate Address Detection (DAD) conflicts. It MUST be initialized to 0, and incremented by 1 for each new tentative address that is configured as a result of a DAD conflict. Implementations that record DAD_Counter in non-volatile memory for each {Prefix, Net_Iface, Network_ID} tuple MUST initialize DAD_Counter to the recorded value if such an entry exists in non-volatile memory. See Section 6 for additional details. secret_key: A secret key that is not known by the attacker. The secret key MUST be initialized to a pseudo-random number (see [RFC4086] for randomness requirements for security) at operating system installation time or when the IPv6 protocol stack is initialized for the first time. An implementation MAY provide the means for the the system administrator to - change or display the secret key. + display and change the secret key. 2. The Interface Identifier is finally obtained by taking as many bits from the RID value (computed in the previous step) as necessary, starting from the least significant bit. We note that [RFC4291] requires that, the Interface IDs of all unicast addresses (except those that start with the binary value 000) be 64-bit long. However, the method discussed in this document could be employed for generating Interface IDs of any arbitrary length, albeit at the expense of reduced @@ -370,34 +374,21 @@ identifier has been generated, this situation SHOULD be handled in the same way as the case of duplicate addresses (see Section 6). This document does not require the use of any specific PRF for the function F() above, since the choice of such PRF is usually a trade- off between a number of properties (processing requirements, ease of implementation, possible intellectual property rights, etc.), and since the best possible choice for F() might be different for different types of devices (e.g. embedded systems vs. regular - servers) and might possibly change over time. For informative - purposes, we note that MD5 [RFC1321] and SHA-1 [FIPS-SHS] are two - possible options for F(). - - Note that the result of F() in the algorithm above is no more secure - than the secret key. If an attacker is aware of the PRF that is - being used by the victim (which we should expect), and the attacker - can obtain enough material (i.e. addresses configured by the victim), - the attacker may simply search the entire secret-key space to find - matches. To protect against this, the secret key should be of a - reasonable length. Key lengths of at least 128 bits should be - adequate. The secret key is initialized at system installation time - to a pseudo-random number, thus allowing this mechanism to be enabled - /used automatically, without user intervention. + servers) and might possibly change over time. Including the SLAAC prefix in the PRF computation causes the Interface Identifier to vary across each prefix (link-local, global, etc.) employed by the node and, as consequently, also across networks. This mitigates the correlation of activities of multi- homed nodes (since each of the corresponding addresses will employ a different Interface ID), host-tracking (since the network prefix will change as the node moves from one network to another), and any other attacks that benefit from predictable Interface Identifiers (such as IPv6 address scanning attacks). @@ -414,74 +405,107 @@ Since the stability of the addresses generated with this method relies on the stability of all arguments of F(), it is key that the Net_Iface be constant across system bootstrap sequences and other network events. Additionally, the Net_Iface must uniquely identify an interface within the node, such that two interfaces connecting to the same network do not result in duplicate addresses. Different types of operating systems might benefit from different stability properties of the Net_Iface parameter. For example, a client- oriented operating system might want to employ Net_Iface identifiers - that are attached to the underlying network interface card (NIC), - such that a removable NIC always gets the same IPv6 address, - irrespective of the system communications port to which it is - attached. On the other hand, a server-oriented operating system - might prefer Net_Iface identifiers that are attached to system slots/ - ports, such that replacement of a network interface card does not - result in an IPv6 address change. Appendix A discusses possible - sources for the Net_Iface, along with their pros and cons. + that are attached to the NIC, such that a removable NIC always gets + the same IPv6 address, irrespective of the system communications port + to which it is attached. On the other hand, a server-oriented + operating system might prefer Net_Iface identifiers that are attached + to system slots/ports, such that replacement of a network interface + card does not result in an IPv6 address change. Appendix A discusses + possible sources for the Net_Iface, along with their pros and cons. Including the optional Network_ID parameter when computing the RID value above causes the algorithm to produce a different Interface Identifier when connecting to different networks, even when configuring addresses belonging to the same prefix. This means that a host would employ a different Interface Identifier as it moves from one network to another even for IPv6 link-local addresses or Unique - Local Addresses (ULAs). In those scenarios where the Network_ID is - unknown to the attacker, including this parameter might help mitigate - attacks where a victim node connects to the same subnet as the - attacker, and the attacker tries to learn the Interface Identifier - used by the victim node for a remote network (see Section 9 for - further details). + Local Addresses (ULAs) [RFC4193]. In those scenarios where the + Network_ID is unknown to the attacker, including this parameter might + help mitigate attacks where a victim node connects to the same subnet + as the attacker, and the attacker tries to learn the Interface + Identifier used by the victim node for a remote network (see + Section 9 for further details). The DAD_Counter parameter provides the means to intentionally cause this algorithm to produce a different IPv6 addresses (all other parameters being the same). This could be necessary to resolve Duplicate Address Detection (DAD) conflicts, as discussed in detail in Section 6. - Finally, we note that all of the bits in the resulting Interface IDs - are treated as "opaque" bits [I-D.ietf-6man-ug]. For example, the + Note that the result of F() in the algorithm above is no more secure + than the secret key. If an attacker is aware of the PRF that is + being used by the victim (which we should expect), and the attacker + can obtain enough material (i.e. addresses configured by the victim), + the attacker may simply search the entire secret-key space to find + matches. To protect against this, the secret key SHOULD be of at + least 128 bits. Key lengths of at least 128 bits should be adequate. + The secret key is initialized at system installation time to a + pseudo-random number, thus allowing this mechanism to be enabled/used + automatically, without user intervention. Providing a mechanism to + display and change the secret_key would allow and administrator to + cause a replaced system (with the same implementation of this + document) to generate the same IPv6 addresses as the system being + replaced. We note that since the privacy of the scheme specified in + this document relies on the secrecy of the secret_key parameter, + implementations should constrain access to the secret_key parameter + to the extent practicable (e.g., require superuser privileges to + access it). Furthermore, in order to prevent leakages of the + secret_key parameter, it should not be used for any other purposes + than being a parameter to the scheme specified in this document. + + We note that all of the bits in the resulting Interface IDs are + treated as "opaque" bits [I-D.ietf-6man-ug]. For example, the universal/local bit of Modified EUI-64 format identifiers is treated as any other bit of such identifier. In theory, this might result in - Duplicate Address Detection (DAD) failures that would otherwise not - be encountered. However, this is not deemed as a real issue, because - of the following considerations: + IPv6 address collisions and Duplicate Address Detection (DAD) + failures that would otherwise not be encountered. However, this is + not deemed as a likely issue, because of the following + considerations: o The interface IDs of all addresses (except those of addresses that that start with the binary value 000) are 64-bit long. Since the method specified in this document results in random Interface IDs, the probability of DAD failures is very small. o Real world data indicates that MAC address reuse is far more common than assumed [HDMoore]. This means that even IPv6 addresses that employ (allegedly) unique identifiers (such as IEEE LAN MAC addresses) might result in DAD failures, and hence implementations should be prepared to gracefully handle such - occurrences. + occurrences. Additionally, some virtualization technologies + already employ hardware addresses that are randomly selected, and + hence cannot be guaranteed to be unique + [I-D.ietf-opsec-ipv6-host-scanning]. o Since some popular and widely-deployed operating systems (such as - Microsoft Windows) do not employ unique hardware addresses for the + Microsoft Windows) do not embed hardware addresses in the Interface IDs of their stable addresses, reliance on such unique identifiers is more reduced in the deployed world (fewer deployed systems rely on them for the avoidance of address collisions). + Finally, that since different implementation are likely to use + different values for the secret_key parameter, and may also employ + different PRFs for F() and different sources for the Net_Iface + parameter, the addresses generated by this scheme should not expected + to be stable across different operating system installations. For + example, a host that is dual-boot or that is reinstalled may result + in different IPv6 addresses for each operating system and/or + installation. + 6. Resolving Duplicate Address Detection (DAD) conflicts If as a result of performing Duplicate Address Detection (DAD) [RFC4862] a host finds that the tentative address generated with the algorithm specified in Section 5 is a duplicate address, it SHOULD resolve the address conflict by trying a new tentative address as follows: o DAD_Counter is incremented by 1. @@ -538,25 +561,25 @@ 9. Security Considerations This document specifies an algorithm for generating Interface Identifiers to be used with IPv6 Stateless Address Autoconfiguration (SLAAC), as an alternative to e.g. Interface Identifiers that embed hardware addresses (such as those specified in [RFC2464], [RFC2467], and [RFC2470]). When compared to such identifiers, the identifiers specified in this document have a number of advantages: - o They prevent trivial host-tracking, since when a host moves from - one network to another the network prefix used for - autoconfiguration and/or the Network ID (e.g., IEEE 802.11 SSID) - will typically change, and hence the resulting Interface - Identifier will also change (see + o They prevent trivial host-tracking based on the IPv6 address, + since when a host moves from one network to another the network + prefix used for autoconfiguration and/or the Network ID (e.g., + IEEE 802.11 SSID) will typically change, and hence the resulting + Interface Identifier will also change (see [I-D.ietf-6man-ipv6-address-generation-privacy]). o They mitigate address-scanning techniques which leverage predictable Interface Identifiers (e.g., known Organizationally Unique Identifiers) [I-D.ietf-opsec-ipv6-host-scanning]. o They may result in IPv6 addresses that are independent of the underlying hardware (i.e. the resulting IPv6 addresses do not change if a network interface card is replaced) if an appropriate source for Net_Iface (Section 5) is employed. @@ -631,35 +654,37 @@ use of temporary addresses is not feasible. 10. Acknowledgements The algorithm specified in this document has been inspired by Steven Bellovin's work ([RFC1948]) in the area of TCP sequence numbers. The author would like to thank (in alphabetical order) Mikael Abrahamsson, Ran Atkinson, Karl Auer, Steven Bellovin, Matthias Bethke, Ben Campbell, Brian Carpenter, Tassos Chatzithomaoglou, Tim - Chown, Alissa Cooper, Dominik Elsbroek, Eric Gray, Brian Haberman, - Bob Hinden, Christian Huitema, Ray Hunter, Jouni Korhonen, Suresh - Krishnan, Eliot Lear, Jong-Hyouk Lee, Andrew McGregor, Tom Petch, - Michael Richardson, Mark Smith, Dave Thaler, Ole Troan, James - Woodyatt, and He Xuan, for providing valuable comments on earlier - versions of this document. + Chown, Alissa Cooper, Dominik Elsbroek, Stephen Farrell, Eric Gray, + Brian Haberman, Bob Hinden, Christian Huitema, Ray Hunter, Jouni + Korhonen, Suresh Krishnan, Eliot Lear, Jong-Hyouk Lee, Andrew + McGregor, Thomas Narten, Simon Perreault, Tom Petch, Michael + Richardson, Vincent Roca, Mark Smith, Hannes Frederic Sowa, Martin + Stiemerling, Dave Thaler, Ole Troan, Lloyd Wood, James Woodyatt, and + He Xuan, for providing valuable comments on earlier versions of this + document. + + Hannes Frederic Sowa produced a reference implementation of this + specification for the Linux kernel. This document is based on the technical report "Security Assessment of the Internet Protocol version 6 (IPv6)" [CPNI-IPv6] authored by Fernando Gont on behalf of the UK Centre for the Protection of National Infrastructure (CPNI). - The author would like to thank CPNI (http://www.cpni.gov.uk) for - their continued support. - 11. References 11.1. Normative References [RFC2460] Deering, S. and R. Hinden, "Internet Protocol, Version 6 (IPv6) Specification", RFC 2460, December 1998. [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997. @@ -673,41 +698,44 @@ [RFC3972] Aura, T., "Cryptographically Generated Addresses (CGA)", RFC 3972, March 2005. [RFC4086] Eastlake, D., Schiller, J., and S. Crocker, "Randomness Requirements for Security", BCP 106, RFC 4086, June 2005. [RFC4122] Leach, P., Mealling, M., and R. Salz, "A Universally Unique IDentifier (UUID) URN Namespace", RFC 4122, July 2005. + [RFC4193] Hinden, R. and B. Haberman, "Unique Local IPv6 Unicast + Addresses", RFC 4193, October 2005. + [RFC4291] Hinden, R. and S. Deering, "IP Version 6 Addressing Architecture", RFC 4291, February 2006. [RFC4861] Narten, T., Nordmark, E., Simpson, W., and H. Soliman, "Neighbor Discovery for IP version 6 (IPv6)", RFC 4861, September 2007. [RFC4862] Thomson, S., Narten, T., and T. Jinmei, "IPv6 Stateless Address Autoconfiguration", RFC 4862, September 2007. [RFC4941] Narten, T., Draves, R., and S. Krishnan, "Privacy Extensions for Stateless Address Autoconfiguration in IPv6", RFC 4941, September 2007. [RFC5453] Krishnan, S., "Reserved IPv6 Interface Identifiers", RFC 5453, February 2009. [I-D.ietf-6man-ug] Carpenter, B. and S. Jiang, "Significance of IPv6 - Interface Identifiers", draft-ietf-6man-ug-05 (work in - progress), November 2013. + Interface Identifiers", draft-ietf-6man-ug-06 (work in + progress), December 2013. 11.2. Informative References [RFC1321] Rivest, R., "The MD5 Message-Digest Algorithm", RFC 1321, April 1992. [RFC1948] Bellovin, S., "Defending Against Sequence Number Attacks", RFC 1948, May 1996. [RFC2464] Crawford, M., "Transmission of IPv6 Packets over Ethernet @@ -721,24 +749,32 @@ 1998. [RFC3493] Gilligan, R., Thomson, S., Bound, J., McCann, J., and W. Stevens, "Basic Socket Interface Extensions for IPv6", RFC 3493, February 2003. [RFC3542] Stevens, W., Thomas, M., Nordmark, E., and T. Jinmei, "Advanced Sockets Application Program Interface (API) for IPv6", RFC 3542, May 2003. + [RFC6059] Krishnan, S. and G. Daley, "Simple Procedures for + Detecting Network Attachment in IPv6", RFC 6059, November + 2010. + [RFC6105] Levy-Abegnoli, E., Van de Velde, G., Popoviciu, C., and J. Mohacsi, "IPv6 Router Advertisement Guard", RFC 6105, February 2011. + [RFC6151] Turner, S. and L. Chen, "Updated Security Considerations + for the MD5 Message-Digest and the HMAC-MD5 Algorithms", + RFC 6151, March 2011. + [I-D.ietf-opsec-ipv6-host-scanning] Gont, F. and T. Chown, "Network Reconnaissance in IPv6 Networks", draft-ietf-opsec-ipv6-host-scanning-02 (work in progress), July 2013. [I-D.ietf-v6ops-ra-guard-implementation] Gont, F., "Implementation Advice for IPv6 Router Advertisement Guard (RA-Guard)", draft-ietf-v6ops-ra- guard-implementation-07 (work in progress), November 2012.