diff options
| author | Thomas Voss <mail@thomasvoss.com> | 2024-11-27 20:54:24 +0100 | 
|---|---|---|
| committer | Thomas Voss <mail@thomasvoss.com> | 2024-11-27 20:54:24 +0100 | 
| commit | 4bfd864f10b68b71482b35c818559068ef8d5797 (patch) | |
| tree | e3989f47a7994642eb325063d46e8f08ffa681dc /doc/rfc/rfc8981.txt | |
| parent | ea76e11061bda059ae9f9ad130a9895cc85607db (diff) | |
doc: Add RFC documents
Diffstat (limited to 'doc/rfc/rfc8981.txt')
| -rw-r--r-- | doc/rfc/rfc8981.txt | 1121 | 
1 files changed, 1121 insertions, 0 deletions
diff --git a/doc/rfc/rfc8981.txt b/doc/rfc/rfc8981.txt new file mode 100644 index 0000000..ad01a87 --- /dev/null +++ b/doc/rfc/rfc8981.txt @@ -0,0 +1,1121 @@ + + + + +Internet Engineering Task Force (IETF)                           F. Gont +Request for Comments: 8981                                  SI6 Networks +Obsoletes: 4941                                              S. Krishnan +Category: Standards Track                                         Kaloom +ISSN: 2070-1721                                                T. Narten +                                                                         +                                                               R. Draves +                                                      Microsoft Research +                                                           February 2021 + + +Temporary Address Extensions for Stateless Address Autoconfiguration in +                                  IPv6 + +Abstract + +   This document describes an extension to IPv6 Stateless Address +   Autoconfiguration that causes hosts to generate temporary addresses +   with randomized interface identifiers for each prefix advertised with +   autoconfiguration enabled.  Changing addresses over time limits the +   window of time during which eavesdroppers and other information +   collectors may trivially perform address-based network-activity +   correlation when the same address is employed for multiple +   transactions by the same host.  Additionally, it reduces the window +   of exposure of a host as being accessible via an address that becomes +   revealed as a result of active communication.  This document +   obsoletes RFC 4941. + +Status of This Memo + +   This is an Internet Standards Track document. + +   This document is a product of the Internet Engineering Task Force +   (IETF).  It represents the consensus of the IETF community.  It has +   received public review and has been approved for publication by the +   Internet Engineering Steering Group (IESG).  Further information on +   Internet Standards is available in Section 2 of RFC 7841. + +   Information about the current status of this document, any errata, +   and how to provide feedback on it may be obtained at +   https://www.rfc-editor.org/info/rfc8981. + +Copyright Notice + +   Copyright (c) 2021 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 +   (https://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 +     1.1.  Terminology +     1.2.  Problem Statement +   2.  Background +     2.1.  Extended Use of the Same Identifier +     2.2.  Possible Approaches +   3.  Protocol Description +     3.1.  Design Guidelines +     3.2.  Assumptions +     3.3.  Generation of Randomized IIDs +       3.3.1.  Simple Randomized IIDs +       3.3.2.  Generation of IIDs with Pseudorandom Functions +     3.4.  Generating Temporary Addresses +     3.5.  Expiration of Temporary Addresses +     3.6.  Regeneration of Temporary Addresses +     3.7.  Implementation Considerations +     3.8.  Defined Protocol Parameters and Configuration Variables +   4.  Implications of Changing IIDs +   5.  Significant Changes from RFC 4941 +   6.  Future Work +   7.  IANA Considerations +   8.  Security Considerations +   9.  References +     9.1.  Normative References +     9.2.  Informative References +   Acknowledgments +   Authors' Addresses + +1.  Introduction + +   [RFC4862] specifies Stateless Address Autoconfiguration (SLAAC) for +   IPv6, which typically results in hosts configuring one or more +   "stable" IPv6 addresses composed of a network prefix advertised by a +   local router and a locally generated interface identifier (IID).  The +   security and privacy implications of such addresses have been +   discussed in detail in [RFC7721], [RFC7217], and [RFC7707].  This +   document specifies an extension to SLAAC for generating temporary +   addresses that can help mitigate some of the aforementioned issues. +   This document is a revision of RFC 4941 and formally obsoletes it. +   Section 5 describes the changes from [RFC4941]. + +   The default address selection for IPv6 has been specified in +   [RFC6724].  In some cases, the determination as to whether to use +   stable versus temporary addresses can only be made by an application. +   For example, some applications may always want to use temporary +   addresses, while others may want to use them only in some +   circumstances or not at all.  An Application Programming Interface +   (API) such as that specified in [RFC5014] can enable individual +   applications to indicate a preference for the use of temporary +   addresses. + +   Section 2 provides background information.  Section 3 describes a +   procedure for generating temporary addresses.  Section 4 discusses +   implications of changing IIDs.  Section 5 describes the changes from +   [RFC4941]. + +1.1.  Terminology + +   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", +   "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and +   "OPTIONAL" in this document are to be interpreted as described in +   BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all +   capitals, as shown here. + +   The terms "public address", "stable address", "temporary address", +   "constant IID", "stable IID", and "temporary IID" are to be +   interpreted as specified in [RFC7721]. + +   The term "global-scope addresses" is used in this document to +   collectively refer to "Global unicast addresses" as defined in +   [RFC4291] and "Unique local addresses" as defined in [RFC4193], and +   not to "globally reachable addresses" as defined in [RFC8190]. + +1.2.  Problem Statement + +   Addresses generated using SLAAC [RFC4862] contain an embedded +   interface identifier, which may remain stable over time.  Anytime a +   fixed identifier is used in multiple contexts, it becomes possible to +   correlate seemingly unrelated activity using this identifier. + +   The correlation can be performed by: + +   *  An attacker who is in the path between the host in question and +      the peer(s) to which it is communicating, who can view the IPv6 +      addresses present in the datagrams. + +   *  An attacker who can access the communication logs of the peers +      with which the host has communicated. + +   Since the identifier is embedded within the IPv6 address, it cannot +   be hidden.  This document proposes a solution to this issue by +   generating interface identifiers that vary over time. + +   Note that an attacker, who is on path, may be able to perform +   significant correlation based on: + +   *  The payload contents of unencrypted packets on the wire. + +   *  The characteristics of the packets, such as packet size and +      timing. + +   Use of temporary addresses will not prevent such correlation, nor +   will it prevent an on-link observer (e.g., the host's default router) +   from tracking all the host's addresses. + +2.  Background + +   This section discusses the problem in more detail, provides context +   for evaluating the significance of the concerns in specific +   environments, and makes comparisons with existing practices. + +2.1.  Extended Use of the Same Identifier + +   The use of a non-changing IID to form addresses is a specific +   instance of the more general case where a constant identifier is +   reused over an extended period of time and in multiple independent +   activities.  Anytime the same identifier is used in multiple +   contexts, it becomes possible for that identifier to be used to +   correlate seemingly unrelated activity.  For example, a network +   sniffer placed strategically on a link traversed by all traffic to/ +   from a particular host could keep track of which destinations a host +   communicated with and at what times.  In some cases, such information +   can be used to infer things, such as what hours an employee was +   active, when someone is at home, etc.  Although it might appear that +   changing an address regularly in such environments would be desirable +   to lessen privacy concerns, it should be noted that the network- +   prefix portion of an address also serves as a constant identifier. +   All hosts at, say, a home would have the same network prefix, which +   identifies the topological location of those hosts.  This has +   implications for privacy, though not at the same granularity as the +   concern that this document addresses.  Specifically, all hosts within +   a home could be grouped together for the purposes of collecting +   information.  If the network contains a very small number of hosts -- +   say, just one -- changing just the IID will not enhance privacy, +   since the prefix serves as a constant identifier. + +   One of the requirements for correlating seemingly unrelated +   activities is the use (and reuse) of an identifier that is +   recognizable over time within different contexts.  IP addresses +   provide one obvious example, but there are more.  For example: + +   *  Many hosts also have DNS names associated with their addresses, in +      which case, the DNS name serves as a similar identifier.  Although +      the DNS name associated with an address is more work to obtain (it +      may require a DNS query), the information is often readily +      available.  In such cases, changing the address on a host over +      time would do little to address the concerns raised in this +      document, unless the DNS name is also changed at the same time +      (see Section 4). + +   *  Web browsers and servers typically exchange "cookies" with each +      other [RFC6265].  Cookies allow web servers to correlate a current +      activity with a previous activity.  One common usage is to send +      back targeted advertising to a user by using the cookie supplied +      by the browser to identify what earlier queries had been made +      (e.g., for what type of information).  Based on the earlier +      queries, advertisements can be targeted to match the (assumed) +      interests of the end user. + +   The use of a constant identifier within an address is of special +   concern, because addresses are a fundamental requirement of +   communication and cannot easily be hidden from eavesdroppers and +   other parties.  Even when higher layers encrypt their payloads, +   addresses in packet headers appear in the clear.  Consequently, if a +   mobile host (e.g., laptop) accessed the network from several +   different locations, an eavesdropper might be able to track the +   movement of that mobile host from place to place, even if the upper- +   layer payloads were encrypted. + +   Changing addresses over time limits the time window over which +   eavesdroppers and other information collectors may trivially +   correlate network activity when the same address is employed for +   multiple transactions by the same host.  Additionally, it reduces the +   window of exposure during which a host is accessible via an address +   that becomes revealed as a result of active communication. + +   The security and privacy implications of IPv6 addresses are discussed +   in detail in [RFC7721], [RFC7707], and [RFC7217]. + +2.2.  Possible Approaches + +   One approach, compatible with the SLAAC architecture, would be to +   change the IID portion of an address over time.  Changing the IID can +   make it more difficult to look at the IP addresses in independent +   transactions and identify which ones actually correspond to the same +   host, both in the case where the routing-prefix portion of an address +   changes and when it does not. + +   Many hosts function as both clients and servers.  In such cases, the +   host would need a name (e.g., a DNS domain name) for its use as a +   server.  Whether the address stays fixed or changes has little impact +   on privacy, since the name remains constant and serves as a constant +   identifier.  However, when acting as a client (e.g., initiating +   communication), such a host may want to vary the addresses it uses. +   In such environments, one may need multiple addresses: a stable +   address associated with the name, which is used to accept incoming +   connection requests from other hosts, and a temporary address used to +   shield the identity of the client when it initiates communication. + +   On the other hand, a host that functions only as a client may want to +   employ only temporary addresses for public communication. + +   To make it difficult to make educated guesses as to whether two +   different IIDs belong to the same host, the algorithm for generating +   alternate identifiers must include input that has an unpredictable +   component from the perspective of the outside entities that are +   collecting information. + +3.  Protocol Description + +   The following subsections define the procedures for the generation of +   IPv6 temporary addresses. + +3.1.  Design Guidelines + +   Temporary addresses observe the following properties: + +   1.  Temporary addresses are typically employed for initiating +       outgoing sessions. + +   2.  Temporary addresses are used for a short period of time +       (typically hours to days) and are subsequently deprecated. +       Deprecated addresses can continue to be used for established +       connections but are not used to initiate new connections. + +   3.  New temporary addresses are generated over time to replace +       temporary addresses that expire (i.e., become deprecated and +       eventually invalidated). + +   4.  Temporary addresses must have a limited lifetime (limited "valid +       lifetime" and "preferred lifetime" from [RFC4862]).  The lifetime +       of an address should be further reduced when privacy-meaningful +       events (such as a host attaching to a different network, or the +       regeneration of a new randomized Media Access Control (MAC) +       address) take place.  The lifetime of temporary addresses must be +       statistically different for different addresses, such that it is +       hard to predict or infer when a new temporary address is +       generated or correlate a newly generated address with an existing +       one. + +   5.  By default, one address is generated for each prefix advertised +       by SLAAC.  The resulting interface identifiers must be +       statistically different when addresses are configured for +       different prefixes or different network interfaces.  This means +       that, given two addresses, it must be difficult for an outside +       entity to infer whether the addresses correspond to the same host +       or network interface. + +   6.  It must be difficult for an outside entity to predict the +       interface identifiers that will be employed for temporary +       addresses, even with knowledge of the algorithm/method employed +       to generate them and/or knowledge of the IIDs previously employed +       for other temporary addresses.  These IIDs must be semantically +       opaque [RFC7136] and must not follow any specific patterns. + +3.2.  Assumptions + +   The following algorithm assumes that, for a given temporary address, +   an implementation can determine the prefix from which it was +   generated.  When a temporary address is deprecated, a new temporary +   address is generated.  The specific valid and preferred lifetimes for +   the new address are dependent on the corresponding lifetime values +   set for the prefix from which it was generated. + +   Finally, this document assumes that, when a host initiates outgoing +   communications, temporary addresses can be given preference over +   stable addresses (if available), when the device is configured to do +   so.  [RFC6724] mandates that implementations provide a mechanism that +   allows an application to configure its preference for temporary +   addresses over stable addresses.  It also allows an implementation to +   prefer temporary addresses by default, so that the connections +   initiated by the host can use temporary addresses without requiring +   application-specific enablement.  This document also assumes that an +   API will exist that allows individual applications to indicate +   whether they prefer to use temporary or stable addresses and override +   the system defaults (see, for example, [RFC5014]). + +3.3.  Generation of Randomized IIDs + +   The following subsections specify example algorithms for generating +   temporary IIDs that follow the guidelines in Section 3.1 of this +   document.  The algorithm specified in Section 3.3.1 assumes a +   pseudorandom number generator (PRNG) is available on the system.  The +   algorithm specified in Section 3.3.2 allows for code reuse by hosts +   that implement [RFC7217]. + +3.3.1.  Simple Randomized IIDs + +   One approach is to select a pseudorandom number of the appropriate +   length.  A host employing this algorithm should generate IIDs as +   follows: + +   1.  Obtain a random number from a PRNG that can produce random +       numbers of at least as many bits as required for the IID (please +       see the next step).  [RFC4086] specifies randomness requirements +       for security. + +   2.  The IID is obtained by taking as many bits from the random number +       obtained in the previous step as necessary.  See [RFC7136] for +       the necessary number of bits (i.e., the length of the IID).  See +       also [RFC7421] for a discussion of the privacy implications of +       the IID length.  Note: there are no special bits in an IID +       [RFC7136]. + +   3.  The resulting IID MUST be compared against the reserved IPv6 IIDs +       [RFC5453] [IANA-RESERVED-IID] and against those IIDs already +       employed in an address of the same network interface and the same +       network prefix.  In the event that an unacceptable identifier has +       been generated, a new IID should be generated by repeating the +       algorithm from the first step. + +3.3.2.  Generation of IIDs with Pseudorandom Functions + +   The algorithm in [RFC7217] can be augmented for the generation of +   temporary addresses.  The benefit of this is that a host could employ +   a single algorithm for generating stable and temporary addresses by +   employing appropriate parameters. + +   Hosts would employ the following algorithm for generating the +   temporary IID: + +   1.  Compute a random identifier with the expression: + +       RID = F(Prefix, Net_Iface, Network_ID, Time, DAD_Counter, +       secret_key) + +       Where: + +       RID: +          Random 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 as many bits as +          required for the IID.  BLAKE3 (256-bit key, arbitrary-length +          output) [BLAKE3] is one possible option for F(). +          Alternatively, F() could be implemented with a keyed-hash +          message authentication code (HMAC) [RFC2104].  HMAC-SHA-256 +          [FIPS-SHS] is one possible option for such an implementation +          alternative.  Note: use of HMAC-MD5 [RFC1321] is considered +          unacceptable for F() [RFC6151]. + +       Prefix: +          The prefix to be used for SLAAC, as learned from an ICMPv6 +          Router Advertisement message. + +       Net_Iface: +          The MAC address corresponding to the underlying network- +          interface card, in the case the link uses IEEE 802 link-layer +          identifiers.  Employing the MAC address for this parameter +          (over the other suggested options in [RFC7217]) means that the +          regeneration of a randomized MAC address will result in a +          different temporary address. + +       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.  Additionally, "Simple +          Procedures for Detecting Network Attachment in IPv6" ("Simple +          DNA") [RFC6059] describes ideas that could be leveraged to +          generate a Network_ID parameter.  This parameter SHOULD be +          employed if some form of "Network_ID" is available. + +       Time: +          An implementation-dependent representation of time.  One +          possible example is the representation in UNIX-like systems +          [OPEN-GROUP], which measure time in terms of the number of +          seconds elapsed since the Epoch (00:00:00 Coordinated +          Universal Time (UTC), 1 January 1970).  The addition of the +          "Time" argument results in (statistically) different IIDs over +          time. + +       DAD_Counter: +          A counter that is employed to resolve the conflict where an +          unacceptable identifier has been generated.  This can be +          result of Duplicate Address Detection (DAD), or step 3 below. + +       secret_key: +          A secret key that is not known by the attacker.  The secret +          key SHOULD be of at least 128 bits.  It MUST be initialized to +          a pseudorandom number (see [RFC4086] for randomness +          requirements for security) when the operating system is +          "bootstrapped".  The secret_key MUST NOT be employed for any +          other purpose than the one discussed in this section.  For +          example, implementations MUST NOT employ the same secret_key +          for the generation of stable addresses [RFC7217] and the +          generation of temporary addresses via this algorithm. + +   2.  The IID 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.  See [RFC7136] for the necessary +       number of bits (i.e., the length of the IID).  See also [RFC7421] +       for a discussion of the privacy implications of the IID length. +       Note: there are no special bits in an IID [RFC7136]. + +   3.  The resulting IID MUST be compared against the reserved IPv6 IIDs +       [RFC5453] [IANA-RESERVED-IID] and against those IIDs already +       employed in an address of the same network interface and the same +       network prefix.  In the event that an unacceptable identifier has +       been generated, the DAD_Counter should be incremented by 1, and +       the algorithm should be restarted from the first step. + +3.4.  Generating Temporary Addresses + +   [RFC4862] describes the steps for generating a link-local address +   when an interface becomes enabled, as well as the steps for +   generating addresses for other scopes.  This document extends +   [RFC4862] as follows.  When processing a Router Advertisement with a +   Prefix Information option carrying a prefix for the purposes of +   address autoconfiguration (i.e., the A bit is set), the host MUST +   perform the following steps: + + +   1.  Process the Prefix Information option as specified in [RFC4862], +       adjusting the lifetimes of existing temporary addresses, with the +       overall constraint that no temporary addresses should ever remain +       "valid" or "preferred" for a time longer than +       (TEMP_VALID_LIFETIME) or (TEMP_PREFERRED_LIFETIME - +       DESYNC_FACTOR), respectively.  The configuration variables +       TEMP_VALID_LIFETIME and TEMP_PREFERRED_LIFETIME correspond to the +       maximum valid lifetime and the maximum preferred lifetime of +       temporary addresses, respectively. + +       Note: +          DESYNC_FACTOR is the value computed when the address was +          created (see step 4 below). + +   2.  One way an implementation can satisfy the above constraints is to +       associate with each temporary address a creation time (called +       CREATION_TIME) that indicates the time at which the address was +       created.  When updating the preferred lifetime of an existing +       temporary address, it would be set to expire at whichever time is +       earlier: the time indicated by the received lifetime or +       (CREATION_TIME + TEMP_PREFERRED_LIFETIME - DESYNC_FACTOR).  A +       similar approach can be used with the valid lifetime. + +       Note: +          DESYNC_FACTOR is the value computed when the address was +          created (see step 4 below). + +   3.  If the host has not configured any temporary address for the +       corresponding prefix, the host SHOULD create a new temporary +       address for such prefix. + +       Note: +          For example, a host might implement prefix-specific policies +          such as not configuring temporary addresses for the Unique +          Local IPv6 Unicast Addresses (ULAs) [RFC4193] prefix. + +   4.  When creating a temporary address, DESYNC_FACTOR MUST be computed +       and associated with the newly created address, and the address +       lifetime values MUST be derived from the corresponding prefix as +       follows: + +       *  Its valid lifetime is the lower of the Valid Lifetime of the +          prefix and TEMP_VALID_LIFETIME. + +       *  Its preferred lifetime is the lower of the Preferred Lifetime +          of the prefix and TEMP_PREFERRED_LIFETIME - DESYNC_FACTOR. + +   5.  A temporary address is created only if this calculated preferred +       lifetime is greater than REGEN_ADVANCE time units.  In +       particular, an implementation MUST NOT create a temporary address +       with a zero preferred lifetime. + +   6.  New temporary addresses MUST be created by appending a randomized +       IID to the prefix that was received.  Section 3.3 of this +       document specifies some sample algorithms for generating the +       randomized IID. + +   7.  The host MUST perform DAD on the generated temporary address.  If +       DAD indicates the address is already in use, the host MUST +       generate a new randomized IID and repeat the previous steps as +       appropriate (starting from step 4), up to TEMP_IDGEN_RETRIES +       times.  If, after TEMP_IDGEN_RETRIES consecutive attempts, the +       host is unable to generate a unique temporary address, the host +       MUST log a system error and SHOULD NOT attempt to generate a +       temporary address for the given prefix for the duration of the +       host's attachment to the network via this interface.  This allows +       hosts to recover from occasional DAD failures or otherwise log +       the recurrent address collisions. + +3.5.  Expiration of Temporary Addresses + +   When a temporary address becomes deprecated, a new one MUST be +   generated.  This is done by repeating the actions described in +   Section 3.4, starting at step 4).  Note that, in normal operation, +   except for the transient period when a temporary address is being +   regenerated, at most one temporary address per prefix should be in a +   nondeprecated state at any given time on a given interface.  Note +   that if a temporary address becomes deprecated as result of +   processing a Prefix Information option with a zero preferred +   lifetime, then a new temporary address MUST NOT be generated (in +   response to the same Prefix Information option).  To ensure that a +   preferred temporary address is always available, a new temporary +   address SHOULD be regenerated slightly before its predecessor is +   deprecated.  This is to allow sufficient time to avoid race +   conditions in the case where generating a new temporary address is +   not instantaneous, such as when DAD must be performed.  The host +   SHOULD start the process of address regeneration REGEN_ADVANCE time +   units before a temporary address is deprecated. + +   As an optional optimization, an implementation MAY remove a +   deprecated temporary address that is not in use by applications or +   upper layers, as detailed in Section 6. + +3.6.  Regeneration of Temporary Addresses + +   The frequency at which temporary addresses change depends on how a +   device is being used (e.g., how frequently it initiates new +   communication) and the concerns of the end user.  The most egregious +   privacy concerns appear to involve addresses used for long periods of +   time (from weeks to years).  The more frequently an address changes, +   the less feasible collecting or coordinating information keyed on +   IIDs becomes.  Moreover, the cost of collecting information and +   attempting to correlate it based on IIDs will only be justified if +   enough addresses contain non-changing identifiers to make it +   worthwhile.  Thus, having large numbers of clients change their +   address on a daily or weekly basis is likely to be sufficient to +   alleviate most privacy concerns. + +   There are also client costs associated with having a large number of +   addresses associated with a host (e.g., in doing address lookups, the +   need to join many multicast groups, etc.).  Thus, changing addresses +   frequently (e.g., every few minutes) may have performance +   implications. + +   Hosts following this specification SHOULD generate new temporary +   addresses over time.  This can be achieved by generating a new +   temporary address REGEN_ADVANCE time units before a temporary address +   becomes deprecated.  As described above, this produces addresses with +   a preferred lifetime no larger than TEMP_PREFERRED_LIFETIME.  The +   value DESYNC_FACTOR is a random value computed when a temporary +   address is generated; it ensures that clients do not generate new +   addresses at a fixed frequency and that clients do not synchronize +   with each other and generate new addresses at exactly the same time. +   When the preferred lifetime expires, a new temporary address MUST be +   generated using the algorithm specified in Section 3.4 (starting at +   step 4). + +   Because the frequency at which it is appropriate to generate new +   addresses varies from one environment to another, implementations +   SHOULD provide end users with the ability to change the frequency at +   which addresses are regenerated.  The default value is given in +   TEMP_PREFERRED_LIFETIME and is one day.  In addition, the exact time +   at which to invalidate a temporary address depends on how +   applications are used by end users.  Thus, the suggested default +   value of two days (TEMP_VALID_LIFETIME) may not be appropriate in all +   environments.  Implementations SHOULD provide end users with the +   ability to override both of these default values. + +   Finally, when an interface connects to a new (different) link, +   existing temporary addresses for the corresponding interface MUST be +   removed, and new temporary addresses MUST be generated for use on the +   new link, using the algorithm in Section 3.4.  If a device moves from +   one link to another, generating new temporary addresses ensures that +   the device uses different randomized IIDs for the temporary addresses +   associated with the two links, making it more difficult to correlate +   addresses from the two different links as being from the same host. +   The host MAY follow any process available to it to determine that the +   link change has occurred.  One such process is described by "Simple +   DNA" [RFC6059].  Detecting link changes would prevent link down/up +   events from causing temporary addresses to be (unnecessarily) +   regenerated. + +3.7.  Implementation Considerations + +   Devices implementing this specification MUST provide a way for the +   end user to explicitly enable or disable the use of temporary +   addresses.  In addition, a site might wish to disable the use of +   temporary addresses in order to simplify network debugging and +   operations.  Consequently, implementations SHOULD provide a way for +   trusted system administrators to enable or disable the use of +   temporary addresses. + +   Additionally, sites might wish to selectively enable or disable the +   use of temporary addresses for some prefixes.  For example, a site +   might wish to disable temporary-address generation for ULA [RFC4193] +   prefixes while still generating temporary addresses for all other +   prefixes advertised via PIOs for address configuration.  Another site +   might wish to enable temporary-address generation only for the +   prefixes 2001:db8:1::/48 and 2001:db8:2::/48 while disabling it for +   all other prefixes.  To support this behavior, implementations SHOULD +   provide a way to enable and disable generation of temporary addresses +   for specific prefix subranges.  This per-prefix setting SHOULD +   override the global settings on the host with respect to the +   specified prefix subranges.  Note that the per-prefix setting can be +   applied at any granularity, and not necessarily on a per-subnet +   basis. + +3.8.  Defined Protocol Parameters and Configuration Variables + +   Protocol parameters and configuration variables defined in this +   document include: + +   TEMP_VALID_LIFETIME +      Default value: 2 days.  Users should be able to override the +      default value. + +   TEMP_PREFERRED_LIFETIME +      Default value: 1 day.  Users should be able to override the +      default value.  Note: The TEMP_PREFERRED_LIFETIME value MUST be +      smaller than the TEMP_VALID_LIFETIME value, to avoid the +      pathological case where an address is employed for new +      communications but becomes invalid in less than 1 second, +      disrupting those communications. + +   REGEN_ADVANCE +      2 + (TEMP_IDGEN_RETRIES * DupAddrDetectTransmits * RetransTimer / +      1000) + +      |  Rationale: This parameter is specified as a function of other +      |  protocol parameters, to account for the time possibly spent in +      |  DAD in the worst-case scenario of TEMP_IDGEN_RETRIES.  This +      |  prevents the pathological case where the generation of a new +      |  temporary address is not started with enough anticipation, such +      |  that a new preferred address is generated before the currently +      |  preferred temporary address becomes deprecated. +      |   +      |  RetransTimer is specified in [RFC4861], while +      |  DupAddrDetectTransmits is specified in [RFC4862].  Since +      |  RetransTimer is specified in units of milliseconds, this +      |  expression employs the constant "1000", such that REGEN_ADVANCE +      |  is expressed in seconds. + +   MAX_DESYNC_FACTOR +      0.4 * TEMP_PREFERRED_LIFETIME.  Upper bound on DESYNC_FACTOR. + +      |  Rationale: Setting MAX_DESYNC_FACTOR to 0.4 +      |  TEMP_PREFERRED_LIFETIME results in addresses that have +      |  statistically different lifetimes, and a maximum of three +      |  concurrent temporary addresses when the default values +      |  specified in this section are employed. + +   DESYNC_FACTOR +      A random value within the range 0 - MAX_DESYNC_FACTOR.  It is +      computed each time a temporary address is generated, and is +      associated with the corresponding address.  It MUST be smaller +      than (TEMP_PREFERRED_LIFETIME - REGEN_ADVANCE). + +   TEMP_IDGEN_RETRIES +      Default value: 3 + +4.  Implications of Changing IIDs + +   The desire to protect individual privacy can conflict with the desire +   to effectively maintain and debug a network.  Having clients use +   addresses that change over time will make it more difficult to track +   down and isolate operational problems.  For example, when looking at +   packet traces, it could become more difficult to determine whether +   one is seeing behavior caused by a single errant host or a number of +   them. + +   It is currently recommended that network deployments provide multiple +   IPv6 addresses from each prefix to general-purpose hosts [RFC7934]. +   However, in some scenarios, use of a large number of IPv6 addresses +   may have negative implications on network devices that need to +   maintain entries for each IPv6 address in some data structures (e.g., +   SAVI [RFC7039]).  For example, concurrent active use of multiple IPv6 +   addresses will increase Neighbor Discovery traffic if Neighbor Caches +   in network devices are not large enough to store all addresses on the +   link.  This can impact performance and energy efficiency on networks +   on which multicast is expensive (see e.g., [MCAST-PROBLEMS]). +   Additionally, some network-security devices might incorrectly infer +   IPv6 address forging if temporary addresses are regenerated at a high +   rate. + +   The use of temporary addresses may cause unexpected difficulties with +   some applications.  For example, some servers refuse to accept +   communications from clients for which they cannot map the IP address +   into a DNS name.  That is, they perform a DNS PTR query to determine +   the DNS name corresponding to an IPv6 address, and may then also +   perform a AAAA query on the returned name to verify it maps back into +   the same address.  Consequently, clients not properly registered in +   the DNS may be unable to access some services.  However, a host's DNS +   name (if non-changing) would serve as a constant identifier.  The +   wide deployment of the extension described in this document could +   challenge the practice of inverse-DNS-based "validation", which has +   little validity, though it is widely implemented.  In order to meet +   server challenges, hosts could register temporary addresses in the +   DNS using random names (for example, a string version of the random +   address itself), albeit at the expense of increased complexity. + +   In addition, some applications may not behave robustly if an address +   becomes invalid while it is still in use by the application or if the +   application opens multiple sessions and expects them to all use the +   same address. + +   [RFC4941] employed a randomized temporary IID for generating a set of +   temporary addresses, such that temporary addresses configured at a +   given time for multiple SLAAC prefixes would employ the same IID. +   Sharing the same IID among multiple addresses allowed a host to join +   only one solicited-node multicast group per temporary address set. + +   This document requires that the IIDs of all temporary addresses on a +   host are statistically different from each other.  This means that +   when a network employs multiple prefixes, each temporary address of a +   set will result in a different solicited-node multicast address, and, +   thus, the number of multicast groups that a host must join becomes a +   function of the number of SLAAC prefixes employed for generating +   temporary addresses. + +   Thus, a network that employs multiple prefixes may require hosts to +   join more multicast groups than in the case of implementations of RFC +   4941.  If the number of multicast groups were large enough, a host +   might need to resort to setting the network interface card to +   promiscuous mode.  This could cause the host to process more packets +   than strictly necessary and might have a negative impact on battery +   life and system performance in general. + +   We note that since this document reduces the default +   TEMP_VALID_LIFETIME from 7 days (in [RFC4941]) to 2 days, the number +   of concurrent temporary addresses per SLAAC prefix will be smaller +   than for RFC 4941 implementations; thus, the number of multicast +   groups for a network that employs, say, between 1 and 3 prefixes, +   will be similar to the number of such groups for RFC 4941 +   implementations. + +   Implementations concerned with the maximum number of multicast groups +   that would be required to join as a result of configured addresses, +   or the overall number of configured addresses, should consider +   enforcing implementation-specific limits on, e.g., the maximum number +   of configured addresses, the maximum number of SLAAC prefixes that +   are employed for autoconfiguration, and/or the maximum ratio for +   TEMP_VALID_LIFETIME/TEMP_PREFERRED_LIFETIME (which ultimately +   controls the approximate number of concurrent temporary addresses per +   SLAAC prefix).  Many of these configuration limits are readily +   available in SLAAC and RFC 4941 implementations.  We note that these +   configurable limits are meant to prevent pathological behaviors (as +   opposed to simply limiting the usage of IPv6 addresses), since IPv6 +   implementations are expected to leverage the usage of multiple +   addresses [RFC7934]. + +5.  Significant Changes from RFC 4941 + +   This section summarizes the substantive changes in this document +   relative to RFC 4941. + +   Broadly speaking, this document introduces the following changes: + +   *  Addresses a number of flaws in the algorithm for generating +      temporary addresses.  The aforementioned flaws include the use of +      MD5 for computing the temporary IIDs, and reusing the same IID for +      multiple prefixes (see [RAID2015] and [RFC7721] for further +      details). + +   *  Allows hosts to employ only temporary addresses.  [RFC4941] +      assumed that temporary addresses were configured in addition to +      stable addresses.  This document does not imply or require the +      configuration of stable addresses; thus, implementations can now +      configure both stable and temporary addresses or temporary +      addresses only. + +   *  Removes the recommendation that temporary addresses be disabled by +      default.  This is in line with BCP 188 ([RFC7258]) and also with +      BCP 204 ([RFC7934]). + +   *  Reduces the default maximum valid lifetime for temporary addresses +      (TEMP_VALID_LIFETIME).  TEMP_VALID_LIFETIME has been reduced from +      1 week to 2 days, decreasing the typical number of concurrent +      temporary addresses from 7 to 3.  This reduces the possible stress +      on network elements (see Section 4 for further details). + +   *  DESYNC_FACTOR is computed each time a temporary address is +      generated and is associated with the corresponding temporary +      address, such that each temporary address has a statistically +      different preferred lifetime, and thus temporary addresses are not +      generated at any specific frequency. + +   *  Changes the requirement to not try to regenerate temporary +      addresses upon TEMP_IDGEN_RETRIES consecutive DAD failures from +      "MUST NOT" to "SHOULD NOT". + +   *  The discussion about the security and privacy implications of +      different address generation techniques has been replaced with +      references to recent work in this area ([RFC7707], [RFC7721], and +      [RFC7217]). + +   *  This document incorporates errata submitted (at the time of +      writing) for [RFC4941] by Jiri Bohac and Alfred Hoenes. + +6.  Future Work + +   An implementation might want to keep track of which addresses are +   being used by upper layers so as to be able to remove a deprecated +   temporary address from internal data structures once no upper-layer +   protocols are using it (but not before).  This is in contrast to +   current approaches, where addresses are removed from an interface +   when they become invalid [RFC4862], independent of whether or not +   upper-layer protocols are still using them.  For TCP connections, +   such information is available in control blocks.  For UDP-based +   applications, it may be the case that only the applications have +   knowledge about what addresses are actually in use.  Consequently, an +   implementation generally will need to use heuristics in deciding when +   an address is no longer in use. + +7.  IANA Considerations + +   This document has no IANA actions. + +8.  Security Considerations + +   If a very small number of hosts (say, only one) use a given prefix +   for extended periods of time, just changing the interface-identifier +   part of the address may not be sufficient to mitigate address-based +   network-activity correlation, since the prefix acts as a constant +   identifier.  The procedures described in this document are most +   effective when the prefix is reasonably nonstatic or used by a fairly +   large number of hosts.  Additionally, if a temporary address is used +   in a session where the user authenticates, any notion of "privacy" +   for that address is compromised for the party or parties that receive +   the authentication information. + +   While this document discusses ways to limit the lifetime of interface +   identifiers to reduce the ability of attackers to perform address- +   based network-activity correlation, the method described is believed +   to be ineffective against sophisticated forms of traffic analysis. +   To increase effectiveness, one may need to consider the use of more +   advanced techniques, such as onion routing [ONION]. + +   Ingress filtering has been and is being deployed as a means of +   preventing the use of spoofed source addresses in Distributed Denial +   of Service (DDoS) attacks.  In a network with a large number of +   hosts, new temporary addresses are created at a fairly high rate. +   This might make it difficult for ingress-/egress-filtering mechanisms +   to distinguish between legitimately changing temporary addresses and +   spoofed source addresses, which are "in-prefix" (using a +   topologically correct prefix and nonexistent interface identifier). +   This can be addressed by using access-control mechanisms on a per- +   address basis on the network ingress point -- though, as noted in +   Section 4, there are corresponding costs for doing so. + +9.  References + +9.1.  Normative References + +   [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>. + +   [RFC4086]  Eastlake 3rd, D., Schiller, J., and S. Crocker, +              "Randomness Requirements for Security", BCP 106, RFC 4086, +              DOI 10.17487/RFC4086, June 2005, +              <https://www.rfc-editor.org/info/rfc4086>. + +   [RFC4193]  Hinden, R. and B. Haberman, "Unique Local IPv6 Unicast +              Addresses", RFC 4193, DOI 10.17487/RFC4193, October 2005, +              <https://www.rfc-editor.org/info/rfc4193>. + +   [RFC4291]  Hinden, R. and S. Deering, "IP Version 6 Addressing +              Architecture", RFC 4291, DOI 10.17487/RFC4291, February +              2006, <https://www.rfc-editor.org/info/rfc4291>. + +   [RFC4861]  Narten, T., Nordmark, E., Simpson, W., and H. Soliman, +              "Neighbor Discovery for IP version 6 (IPv6)", RFC 4861, +              DOI 10.17487/RFC4861, September 2007, +              <https://www.rfc-editor.org/info/rfc4861>. + +   [RFC4862]  Thomson, S., Narten, T., and T. Jinmei, "IPv6 Stateless +              Address Autoconfiguration", RFC 4862, +              DOI 10.17487/RFC4862, September 2007, +              <https://www.rfc-editor.org/info/rfc4862>. + +   [RFC5453]  Krishnan, S., "Reserved IPv6 Interface Identifiers", +              RFC 5453, DOI 10.17487/RFC5453, February 2009, +              <https://www.rfc-editor.org/info/rfc5453>. + +   [RFC6724]  Thaler, D., Ed., Draves, R., Matsumoto, A., and T. Chown, +              "Default Address Selection for Internet Protocol Version 6 +              (IPv6)", RFC 6724, DOI 10.17487/RFC6724, September 2012, +              <https://www.rfc-editor.org/info/rfc6724>. + +   [RFC7136]  Carpenter, B. and S. Jiang, "Significance of IPv6 +              Interface Identifiers", RFC 7136, DOI 10.17487/RFC7136, +              February 2014, <https://www.rfc-editor.org/info/rfc7136>. + +   [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>. + +9.2.  Informative References + +   [BLAKE3]   O'Connor, J., Aumasson, J. P., Neves, S., and Z. Wilcox- +              O'Hearn, "BLAKE3: one function, fast everywhere", 2020, +              <https://blake3.io/>. + +   [FIPS-SHS] NIST, "Secure Hash Standard (SHS)", FIPS PUB 180-4, +              DOI 10.6028/NIST.FIPS.180-4, August 2015, +              <https://nvlpubs.nist.gov/nistpubs/FIPS/ +              NIST.FIPS.180-4.pdf>. + +   [IANA-RESERVED-IID] +              IANA, "Reserved IPv6 Interface Identifiers", +              <https://www.iana.org/assignments/ipv6-interface-ids>. + +   [MCAST-PROBLEMS] +              Perkins, C. E., McBride, M., Stanley, D., Kumari, W., and +              J. C. Zuniga, "Multicast Considerations over IEEE 802 +              Wireless Media", Work in Progress, Internet-Draft, draft- +              ietf-mboned-ieee802-mcast-problems-13, 4 February 2021, +              <https://tools.ietf.org/html/draft-ietf-mboned-ieee802- +              mcast-problems-13>. + +   [ONION]    Reed, M.G., Syverson, P.F., and D.M. Goldschlag, "Proxies +              for Anonymous Routing", Proceedings of the 12th Annual +              Computer Security Applications Conference, +              DOI 10.1109/CSAC.1996.569678, December 1996, +              <https://doi.org/10.1109/CSAC.1996.569678>. + +   [OPEN-GROUP] +              The Open Group, "The Open Group Base Specifications Issue +              7", Section 4.16 Seconds Since the Epoch, IEEE Std 1003.1, +              2016, +              <http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/ +              contents.html>. + +   [RAID2015] Ullrich, J. and E.R. Weippl, "Privacy is Not an Option: +              Attacking the IPv6 Privacy Extension",  International +              Symposium on Recent Advances in Intrusion Detection +              (RAID), 2015, <https://publications.sba- +              research.org/publications/Ullrich2015Privacy.pdf>. + +   [RFC1321]  Rivest, R., "The MD5 Message-Digest Algorithm", RFC 1321, +              DOI 10.17487/RFC1321, April 1992, +              <https://www.rfc-editor.org/info/rfc1321>. + +   [RFC2104]  Krawczyk, H., Bellare, M., and R. Canetti, "HMAC: Keyed- +              Hashing for Message Authentication", RFC 2104, +              DOI 10.17487/RFC2104, February 1997, +              <https://www.rfc-editor.org/info/rfc2104>. + +   [RFC4941]  Narten, T., Draves, R., and S. Krishnan, "Privacy +              Extensions for Stateless Address Autoconfiguration in +              IPv6", RFC 4941, DOI 10.17487/RFC4941, September 2007, +              <https://www.rfc-editor.org/info/rfc4941>. + +   [RFC5014]  Nordmark, E., Chakrabarti, S., and J. Laganier, "IPv6 +              Socket API for Source Address Selection", RFC 5014, +              DOI 10.17487/RFC5014, September 2007, +              <https://www.rfc-editor.org/info/rfc5014>. + +   [RFC6059]  Krishnan, S. and G. Daley, "Simple Procedures for +              Detecting Network Attachment in IPv6", RFC 6059, +              DOI 10.17487/RFC6059, November 2010, +              <https://www.rfc-editor.org/info/rfc6059>. + +   [RFC6151]  Turner, S. and L. Chen, "Updated Security Considerations +              for the MD5 Message-Digest and the HMAC-MD5 Algorithms", +              RFC 6151, DOI 10.17487/RFC6151, March 2011, +              <https://www.rfc-editor.org/info/rfc6151>. + +   [RFC6265]  Barth, A., "HTTP State Management Mechanism", RFC 6265, +              DOI 10.17487/RFC6265, April 2011, +              <https://www.rfc-editor.org/info/rfc6265>. + +   [RFC7039]  Wu, J., Bi, J., Bagnulo, M., Baker, F., and C. Vogt, Ed., +              "Source Address Validation Improvement (SAVI) Framework", +              RFC 7039, DOI 10.17487/RFC7039, October 2013, +              <https://www.rfc-editor.org/info/rfc7039>. + +   [RFC7217]  Gont, F., "A Method for Generating Semantically Opaque +              Interface Identifiers with IPv6 Stateless Address +              Autoconfiguration (SLAAC)", RFC 7217, +              DOI 10.17487/RFC7217, April 2014, +              <https://www.rfc-editor.org/info/rfc7217>. + +   [RFC7258]  Farrell, S. and H. Tschofenig, "Pervasive Monitoring Is an +              Attack", BCP 188, RFC 7258, DOI 10.17487/RFC7258, May +              2014, <https://www.rfc-editor.org/info/rfc7258>. + +   [RFC7421]  Carpenter, B., Ed., Chown, T., Gont, F., Jiang, S., +              Petrescu, A., and A. Yourtchenko, "Analysis of the 64-bit +              Boundary in IPv6 Addressing", RFC 7421, +              DOI 10.17487/RFC7421, January 2015, +              <https://www.rfc-editor.org/info/rfc7421>. + +   [RFC7707]  Gont, F. and T. Chown, "Network Reconnaissance in IPv6 +              Networks", RFC 7707, DOI 10.17487/RFC7707, March 2016, +              <https://www.rfc-editor.org/info/rfc7707>. + +   [RFC7721]  Cooper, A., Gont, F., and D. Thaler, "Security and Privacy +              Considerations for IPv6 Address Generation Mechanisms", +              RFC 7721, DOI 10.17487/RFC7721, March 2016, +              <https://www.rfc-editor.org/info/rfc7721>. + +   [RFC7934]  Colitti, L., Cerf, V., Cheshire, S., and D. Schinazi, +              "Host Address Availability Recommendations", BCP 204, +              RFC 7934, DOI 10.17487/RFC7934, July 2016, +              <https://www.rfc-editor.org/info/rfc7934>. + +   [RFC8190]  Bonica, R., Cotton, M., Haberman, B., and L. Vegoda, +              "Updates to the Special-Purpose IP Address Registries", +              BCP 153, RFC 8190, DOI 10.17487/RFC8190, June 2017, +              <https://www.rfc-editor.org/info/rfc8190>. + +Acknowledgments + +   Fernando Gont was the sole author of this document (a revision of RFC +   4941).  He would like to thank (in alphabetical order) Fred Baker, +   Brian Carpenter, Tim Chown, Lorenzo Colitti, Roman Danyliw, David +   Farmer, Tom Herbert, Bob Hinden, Christian Huitema, Benjamin Kaduk, +   Erik Kline, Gyan Mishra, Dave Plonka, Alvaro Retana, Michael +   Richardson, Mark Smith, Dave Thaler, Pascal Thubert, Ole Troan, +   Johanna Ullrich, Eric Vyncke, Timothy Winters, and Christopher Wood +   for providing valuable comments on earlier draft versions of this +   document. + +   This document incorporates errata submitted for RFC 4941 by Jiri +   Bohac and Alfred Hoenes (at the time of writing). + +   Suresh Krishnan was the sole author of RFC 4941 (a revision of RFC +   3041).  He would like to acknowledge the contributions of the IPv6 +   Working Group and, in particular, Jari Arkko, Pekka Nikander, Pekka +   Savola, Francis Dupont, Brian Haberman, Tatuya Jinmei, and Margaret +   Wasserman for their detailed comments. + +   Rich Draves and Thomas Narten were the authors of RFC 3041.  They +   would like to acknowledge the contributions of the IPv6 Working Group +   and, in particular, Ran Atkinson, Matt Crawford, Steve Deering, +   Allison Mankin, and Peter Bieringer. + +Authors' Addresses + +   Fernando Gont +   SI6 Networks +   Segurola y Habana 4310, 7mo Piso +   Villa Devoto +   Ciudad Autonoma de Buenos Aires +   Argentina + +   Email: fgont@si6networks.com +   URI:   https://www.si6networks.com + + +   Suresh Krishnan +   Kaloom + +   Email: suresh@kaloom.com + + +   Thomas Narten + +   Email: narten@cs.duke.edu + + +   Richard Draves +   Microsoft Research +   One Microsoft Way +   Redmond, WA +   United States of America + +   Email: richdr@microsoft.com  |