RFC 8981:IPv6 无状态地址自动配置的临时地址扩展 原文标题:RFC 8981: Temporary Address Extensions for Stateless Address Autoconfiguration in IPv6
内容概要总结
IETF 标准轨道 RFC 8981(2021 年 2 月,Gont 著),废止 RFC 4941,规定 IPv6 SLAAC 的临时地址扩展。核心结论:主机应为每个启用自动配置的前缀生成带随机化接口标识符(IID)的临时地址,并随时间更换,从而限制窃听者/信息收集者基于地址进行网络活动关联的时间窗口,并缩小主机因主动通信而暴露地址的窗口。文档定义了临时地址的设计准则(短期使用、有限生存期、统计上不同、语义不透明、外部不可预测)、两类生成算法(简单 PRNG 取位;基于 RFC 7217 的伪随机函数 RID = F(Prefix, Net_Iface, Network_ID, Time, DAD_Counter, secret_key),推荐 BLAKE3 或 HMAC-SHA-256,明确禁用 HMAC-MD5)、临时地址的生成/过期/重新生成流程,以及协议参数 TEMP_VALID_LIFETIME(默认 2 天)、TEMP_PREFERRED_LIFETIME(默认 1 天)、REGEN_ADVANCE、MAX_DESYNC_FACTOR、DESYNC_FACTOR 等。相对 RFC 4941 的关键变化:修复 MD5 缺陷与多前缀复用同一 IID、允许仅用临时地址、取消默认禁用、TEMP_VALID_LIFETIME 由 1 周降为 2 天使并发地址数由 7 降为 3。
翻译内容
原文内容(English)
IPv6 中无状态地址自动配置的临时地址扩展(Temporary Address Extensions for Stateless Address Autoconfiguration in IPv6)
2021 年 2 月
Gont 等
标准轨道(Standards Track)
Internet Engineering Task Force (IETF)
摘要
本文档描述了 IPv6 无状态地址自动配置(SLAAC)的一个扩展,它使主机为每个启用了自动配置的前缀生成带随机化接口标识符(interface identifier)的临时地址。随着时间推移更换地址,可以限制窃听者和其他信息收集者在对同一主机使用同一地址进行多次事务处理时、轻易执行基于地址的网络活动关联(address-based network-activity correlation)的时间窗口。此外,它还缩小了主机暴露的窗口——即主机通过某个因主动通信而被暴露出来的地址可被访问的时间窗口。本文档废止(obsoletes)RFC 4941。
本文档状态(Status of This Memo)
这是一份 Internet Standards Track 文档。
本文档是 Internet Engineering Task Force (IETF) 的产物。它代表 IETF 社区的共识。它已经过公开审查,并已获 Internet Engineering Steering Group (IESG) 批准发布。关于 Internet Standards 的更多信息见 RFC 7841 第 2 节。
关于本文档当前状态、任何勘误(errata)以及如何提供反馈的信息,可从 https://www.rfc-editor.org/info/rfc8981 获取。
版权声明(Copyright Notice)
Copyright (c) 2021 IETF Trust 及被标识为本文档作者的人员。保留所有权利。
本文档受 BCP 78 以及本文档发布之日生效的 IETF Trust《与 IETF 文档相关的法律条款》(https://trustee.ietf.org/license-info)约束。请仔细阅读这些文档,因为它们描述了您对本文档的权利和限制。从本文档中提取的代码组件必须包含《Trust 法律条款》第 4.e 节所述的精简 BSD 许可证(Simplified BSD License)文本,并按精简 BSD 许可证所述不提供任何担保。
1. 引言
[RFC4862] 规定了 IPv6 的无状态地址自动配置(SLAAC),它通常使主机配置一个或多个"稳定(stable)"IPv6 地址,这些地址由一个本地路由器通告的网络前缀和一个本地生成的接口标识符(IID)组成。此类地址的安全与隐私影响已在 [RFC7721]、[RFC7217] 和 [RFC7707] 中详细讨论。本文档为 SLAAC 规定了一个扩展,用于生成临时地址,以帮助缓解上述部分问题。本文档是 RFC 4941 的修订版,并正式废止它。第 5 节描述了相对于 [RFC4941] 的变更。
IPv6 的默认地址选择已在 [RFC6724] 中规定。在某些情况下,是使用稳定地址还是临时地址,只能由应用程序来决定。例如,一些应用程序可能总是希望使用临时地址,而另一些可能只在某些情况下使用它们,或者根本不用。[RFC5014] 所规定的那种应用程序编程接口(API)可以使各个应用程序表达对使用临时地址的偏好。
第 2 节提供背景信息。第 3 节描述生成临时地址的过程。第 4 节讨论更改 IID 的影响。第 5 节描述相对于 [RFC4941] 的变更。
1.1. 术语
本文档中的关键词 "MUST"、"MUST NOT"、"REQUIRED"、"SHALL"、"SHALL NOT"、"SHOULD"、"SHOULD NOT"、"RECOMMENDED"、"NOT RECOMMENDED"、"MAY" 和 "OPTIONAL",当且仅当它们如这里所示以全大写形式出现时,应按 BCP 14 [RFC2119] [RFC8174] 所述进行解释。
术语 "public address"(公共地址)、"stable address"(稳定地址)、"temporary address"(临时地址)、"constant IID"(恒定 IID)、"stable IID"(稳定 IID)和 "temporary IID"(临时 IID)应按 [RFC7721] 中的规定解释。
本文档中使用术语 "global-scope addresses"(全局范围地址)来统称 [RFC4291] 定义的 "Global unicast addresses"(全局单播地址)和 [RFC4193] 定义的 "Unique local addresses"(唯一本地地址),而不是指 [RFC8190] 定义的 "globally reachable addresses"(全球可达地址)。
1.2. 问题陈述
使用 SLAAC [RFC4862] 生成的地址包含一个内嵌的接口标识符,它可能随时间保持稳定。任何时候只要在多个上下文中使用一个固定标识符,就可能利用该标识符来关联看似无关的活动。
关联可由以下主体执行:
- 位于所涉主机与其通信对端之间路径上的攻击者,其能够查看到数据报中出现的 IPv6 地址。
- 能够访问该主机曾通信过的对端通信日志的攻击者。
由于该标识符内嵌于 IPv6 地址中,它无法被隐藏。本文档提出通过生成随时间变化的接口标识符来解决该问题。
请注意,位于路径上的攻击者可能能够基于以下内容执行有意义的关联:
- 线路上未加密数据包的载荷内容。
- 数据包的特征,例如数据包大小和时序。
使用临时地址不会阻止此类关联,也不会阻止链路上观察者(例如主机的默认路由器)跟踪主机的所有地址。
2. 背景
本节更详细地讨论该问题,为评估特定环境中这些关切的重要性提供背景,并与现有实践进行比较。
2.1. 同一标识符的扩展使用
使用一个不变的 IID 来构成地址,是"在较长时间段内、在多个独立活动中重复使用一个恒定标识符"这一更一般情况的一个具体实例。任何时候只要同一标识符在多个上下文中被使用,就可能利用该标识符来关联看似无关的活动。例如,战略性地放置在某一链路上、能穿越往返于特定主机的所有流量的网络嗅探器,可以跟踪该主机与哪些目的地通信以及在什么时间通信。在某些情况下,此类信息可被用来推断一些事情,例如某员工在哪些时段活跃、某人何时在家等。尽管在此类环境中定期更改地址看似有助于减轻隐私关切,但应注意:地址的网络前缀部分也充当一个恒定标识符。例如,一个家庭中的所有主机都会拥有相同的网络前缀,该前缀标识这些主机的拓扑位置。这对隐私有影响,尽管其粒度不如本文档所处理的关切那么细。具体而言,一个家庭内的所有主机可能为了收集信息的目的而被归为一组。如果网络包含的主机数量非常少——比如只有一台——那么仅更改 IID 并不会增强隐私,因为前缀充当了恒定标识符。
关联看似无关活动的一项要求是:使用(并重复使用)一个在不同上下文中随时间可被识别的标识符。IP 地址提供了一个明显的例子,但还有更多。例如:
- 许多主机还拥有与其地址关联的 DNS 名称,在这种情况下,DNS 名称充当一个类似的标识符。虽然获取与地址关联的 DNS 名称需要更多工作(可能需要一次 DNS 查询),但该信息通常很容易获得。在此类情况下,除非同时更改 DNS 名称,否则随时间更改主机上的地址对解决本文档提出的关切几乎没有帮助(见第 4 节)。
- Web 浏览器和服务器通常会彼此交换 "cookie" [RFC6265]。Cookie 使 Web 服务器能够将当前活动与先前活动关联起来。一种常见用法是,利用浏览器提供的 cookie 来识别此前进行过哪些查询(例如查询哪类信息),从而向用户投放定向广告。基于先前的查询,广告可以被定向以匹配(推测的)终端用户兴趣。
在地址内使用恒定标识符尤其令人担忧,因为地址是通信的一项基本要求,无法轻易对窃听者和其他方隐藏。即使更高层加密了其载荷,数据包头中的地址仍以明文出现。因此,如果一台移动主机(例如笔记本电脑)从多个不同位置接入网络,窃听者或许能够跟踪该移动主机从一处到另一处的移动,即使上层载荷已加密。
随时间更改地址,限制了窃听者和其他信息收集者在同一主机对同一地址进行多次事务处理时、轻易关联网络活动的时间窗口。此外,它还缩小了主机暴露的窗口——即主机通过某个因主动通信而被暴露出来的地址可被访问的窗口。
IPv6 地址的安全与隐私影响在 [RFC7721]、[RFC7707] 和 [RFC7217] 中有详细讨论。
2.2. 可能的方法
一种与 SLAAC 架构兼容的方法是:随时间更改地址的 IID 部分。更改 IID 可以使在独立事务中查看 IP 地址、并识别哪些地址实际上对应同一主机变得更加困难——无论是在地址的路由前缀部分发生变化时,还是在它不发生变化时。
许多主机同时充当客户端和服务器。在此类情况下,主机需要为其作为服务器的用途准备一个名称(例如 DNS 域名)。无论地址是保持固定还是变化,对隐私影响都很小,因为该名称保持恒定并充当一个恒定标识符。然而,当作为客户端(例如发起通信)时,此类主机可能希望变换其使用的地址。在此类环境中,可能需要多个地址:一个与名称关联的稳定地址,用于接受来自其他主机的入站连接请求;以及一个用于在客户端发起通信时掩护其身份的临时地址。
另一方面,仅作为客户端运行的主机可能希望仅使用临时地址进行公共通信。
为使外部实体难以猜测两个不同的 IID 是否属于同一主机,生成备用标识符的算法必须包含从收集信息的外部实体视角看具有不可预测成分的输入。
3. 协议描述
以下各小节定义了生成 IPv6 临时地址的过程。
3.1. 设计准则
临时地址遵循以下属性:
- 临时地址通常用于发起出站会话。
- 临时地址在短时间内使用(通常为几小时到几天),随后被弃用(deprecated)。被弃用的地址可继续用于已建立的连接,但不用于发起新连接。
- 随时间生成新的临时地址,以替换过期(即被弃用并最终失效)的临时地址。
- 临时地址必须有有限的生命周期([RFC4862] 中的有限 "valid lifetime"(有效生存期)和 "preferred lifetime"(首选生存期))。当发生隐私相关事件(例如主机接入不同网络,或重新生成一个新的随机化媒体访问控制(MAC)地址)时,地址的生存期应进一步缩短。不同临时地址的生存期必须在统计上不同,以至于很难预测或推断何时生成了新的临时地址,或把新生成的地址与已有的地址关联起来。
- 默认情况下,为 SLAAC 通告的每个前缀生成一个地址。当为不同前缀或不同网络接口配置地址时,所得到的接口标识符必须在统计上不同。这意味着,给定两个地址,外部实体必须难以推断这些地址是否对应同一主机或网络接口。
- 外部实体必须难以预测将用于临时地址的接口标识符,即使其了解用于生成这些地址的算法/方法,和/或了解此前用于其他临时地址的 IID。这些 IID 必须是语义不透明的(semantically opaque)[RFC7136],且不得遵循任何特定模式。
3.2. 假设
以下算法假设:对于给定的临时地址,实现能够确定它是从哪个前缀生成的。当临时地址被弃用时,会生成一个新的临时地址。新地址的具体有效生存期和首选生存期取决于为其所生成前缀所设置的相应生存期值。
最后,本文档假设:当主机发起出站通信时,在设备被配置为如此的情况下,临时地址可以被优先于稳定地址(若可用)。[RFC6724] 要求实现提供一种机制,使应用程序能够配置其对临时地址优先于稳定地址的偏好。它还允许实现默认优先使用临时地址,从而使主机发起的连接可以使用临时地址而无需应用程序特定的启用。本文档还假设存在一个 API,使各个应用程序能够表明它们是偏好使用临时地址还是稳定地址,并覆盖系统默认值(例如见 [RFC5014])。
3.3. 随机化 IID 的生成
以下各小节规定了用于生成遵循本文档第 3.1 节准则的临时 IID 的示例算法。第 3.3.1 节规定的算法假设系统上有一个伪随机数生成器(PRNG)可用。第 3.3.2 节规定的算法允许实现 [RFC7217] 的主机复用代码。
3.3.1. 简单随机化 IID
一种方法是选择一个适当长度的伪随机数。采用该算法的主机应按如下方式生成 IID:
- 从一个 PRNG 获取一个随机数,该 PRNG 能产生的随机数的位数至少与 IID 所需的位数一样多(请见下一步)。[RFC4086] 规定了安全性所需的随机性要求。
- IID 通过从上一步获得的随机数中取所需数量的比特得到。所需位数(即 IID 的长度)见 [RFC7136]。IID 长度对隐私的影响的讨论另见 [RFC7421]。注意:IID 中没有特殊比特 [RFC7136]。
- 所得到的 IID 必须与保留的 IPv6 IID [RFC5453] [IANA-RESERVED-IID] 进行比较,并与同一网络接口、同一网络前缀的地址中已使用的 IID 进行比较。若生成了不可接受的标识符,则应从第一步重复该算法以生成新的 IID。
3.3.2. 使用伪随机函数生成 IID
[RFC7217] 中的算法可以为生成临时地址而加以扩展。其好处是:主机可以通过采用适当的参数,使用单一算法来生成稳定地址和临时地址。
主机将采用以下算法生成临时 IID:
- 用以下表达式计算一个随机标识符:
RID = F(Prefix, Net_Iface, Network_ID, Time, DAD_Counter, secret_key)
- F():一个伪随机函数(PRF),必须不能从外部计算(在不了解密钥的情况下)。F() 还必须难以逆转,从而即使给定 F() 输出的样本、并了解或控制其他输入参数,也能抵抗获取 secret_key 的尝试。F() 应当产生位数至少与 IID 所需位数一样多的输出。BLAKE3(256 位密钥,任意长度输出)[BLAKE3] 是 F() 的一种可能选择。或者,F() 可以用带密钥的哈希消息认证码(HMAC)[RFC2104] 来实现。HMAC-SHA-256 [FIPS-SHS] 是这种实现替代方案的一种可能选择。注意:使用 HMAC-MD5 [RFC1321] 被认为不可接受用于 F() [RFC6151]。
- Prefix(前缀):从 ICMPv6 路由器通告(Router Advertisement)消息中获知的、用于 SLAAC 的前缀。
- Net_Iface(网络接口):对应底层网卡的 MAC 地址,在链路使用 IEEE 802 链路层标识符的情况下。为该参数采用 MAC 地址(而非 [RFC7217] 中建议的其他选项)意味着,重新生成随机化 MAC 地址将导致产生不同的临时地址。
- Network_ID(网络 ID):一些网络特定数据,用于标识该接口所接入的子网——例如,与该接口所关联网络对应的 IEEE 802.11 服务集标识符(SSID)。此外,"Simple Procedures for Detecting Network Attachment in IPv6"("Simple DNA")[RFC6059] 描述了可用于生成 Network_ID 参数的一些思路。如果某种形式的 "Network_ID" 可用,则应当采用该参数。
- Time(时间):一种与实现相关的时间表示。一个可能的示例是类 UNIX 系统 [OPEN-GROUP] 中的表示,其以自纪元(Epoch,协调世界时 (UTC) 1970 年 1 月 1 日 00:00:00)以来经过的秒数来计量时间。加入 "Time" 参数会随时间产生(统计上)不同的 IID。
- DAD_Counter(DAD 计数器):一个用于解决"生成了不可接受标识符"这一冲突的计数器。这可能是重复地址检测(DAD)或下面第 3 步的结果。
- secret_key(密钥):一个攻击者不知道的密钥。密钥应当至少为 128 位。在操作系统"引导(bootstrapped)"时,必须将其初始化为一个伪随机数(随机性要求见 [RFC4086])。secret_key 不得用于本节所讨论之外的任何其他用途。例如,实现不得将同一 secret_key 用于生成稳定地址 [RFC7217] 和通过本算法生成临时地址。
- IID 最终通过从上一步计算的 RID 值中,从最低有效位开始取所需数量的比特得到。所需位数(即 IID 的长度)见 [RFC7136]。IID 长度对隐私影响的讨论另见 [RFC7421]。注意:IID 中没有特殊比特 [RFC7136]。
- 所得到的 IID 必须与保留的 IPv6 IID [RFC5453] [IANA-RESERVED-IID] 进行比较,并与同一网络接口、同一网络前缀的地址中已使用的 IID 进行比较。若生成了不可接受的标识符,应将 DAD_Counter 加 1,并从第一步重新开始该算法。
3.4. 生成临时地址
[RFC4862] 描述了当接口启用时生成链路本地地址的步骤,以及为其他范围生成地址的步骤。本文档按如下方式扩展 [RFC4862]。当处理一个携带用于地址自动配置目的的前缀(即 A 位被置位)的、带前缀信息选项(Prefix Information option)的路由器通告时,主机必须执行以下步骤:
- 按 [RFC4862] 的规定处理前缀信息选项,调整已有临时地址的生存期,整体约束为:任何临时地址保持 "valid"(有效)或 "preferred"(首选)的时间都不得超过(TEMP_VALID_LIFETIME)或(TEMP_PREFERRED_LIFETIME - DESYNC_FACTOR)。配置变量 TEMP_VALID_LIFETIME 和 TEMP_PREFERRED_LIFETIME 分别对应临时地址的最大有效生存期和最大首选生存期。
DESYNC_FACTOR 是创建该地址时计算出的值(见下面第 4 步)。
实现可以满足上述约束的一种方式是:为每个临时地址关联一个创建时间(称为 CREATION_TIME),表示该地址被创建的时间。在更新已有临时地址的首选生存期时,应将其设为在以下两个时间中较早的那个过期:所收到生存期指示的时间,或(CREATION_TIME + TEMP_PREFERRED_LIFETIME - DESYNC_FACTOR)。对有效生存期可以采用类似的方法。
DESYNC_FACTOR 是创建该地址时计算出的值(见下面第 4 步)。
- 如果主机尚未为相应前缀配置任何临时地址,主机应当为该前缀创建一个新的临时地址。
例如,主机可以实现前缀特定策略,例如不为唯一本地 IPv6 单播地址(ULA)[RFC4193] 前缀配置临时地址。
- 创建临时地址时,必须计算 DESYNC_FACTOR 并将其与新创建的地址关联,且地址生存期值必须如下从相应前缀推导:
- 其有效生存期是前缀的有效生存期与 TEMP_VALID_LIFETIME 中较小者。
- 其首选生存期是前缀的首选生存期与 TEMP_PREFERRED_LIFETIME - DESYNC_FACTOR 中较小者。
只有当这样计算出的首选生存期大于 REGEN_ADVANCE 个时间单位时,才创建临时地址。特别是,实现不得创建首选生存期为零的临时地址。
- 新的临时地址必须通过将随机化 IID 追加到所收到前缀来创建。本文档第 3.3 节规定了生成随机化 IID 的一些示例算法。
- 主机必须对所生成的临时地址执行 DAD。如果 DAD 表明该地址已被使用,主机必须生成一个新的随机化 IID,并酌情重复前面的步骤(从第 4 步开始),最多重复 TEMP_IDGEN_RETRIES 次。如果在连续 TEMP_IDGEN_RETRIES 次尝试后,主机仍无法生成唯一的临时地址,主机必须记录一个系统错误,并且在该主机通过此接口接入网络的整个期间,不应当尝试为该前缀生成临时地址。这使主机能够从偶发的 DAD 失败中恢复,或以其他方式记录反复出现的地址冲突。
3.5. 临时地址的过期
当临时地址被弃用时,必须生成一个新的临时地址。这通过重复第 3.4 节所述动作(从第 4 步开始)来完成。注意,在正常运行中,除了临时地址正在被重新生成的过渡期外,在给定接口上,任一时刻每个前缀至多应有一个处于非弃用状态的临时地址。注意,如果临时地址因处理一个首选生存期为零的前缀信息选项而被弃用,则不得(针对同一前缀信息选项)生成新的临时地址。为确保始终有首选的临时地址可用,应当在其前身被弃用之前稍早重新生成一个新的临时地址。这是为了留出足够时间,以避免在生成新临时地址并非瞬时完成(例如必须执行 DAD)的情况下出现竞争条件。主机应当在临时地址被弃用之前 REGEN_ADVANCE 个时间单位启动地址重新生成过程。
作为一种可选的优化,实现可以移除应用程序或上层未使用的被弃用临时地址,详见第 6 节。
3.6. 临时地址的重新生成
临时地址变化的频率取决于设备的使用方式(例如它发起新通信的频率)以及终端用户的关切。
最严重的隐私关切似乎涉及长时间(从数周到数年)使用的地址。地址变化越频繁,以 IID 为键收集或协调信息就越不可行。此外,只有当足够多的地址包含不变的标识符从而值得这样做时,收集信息并尝试基于 IID 进行关联的成本才具有正当性。因此,让大量客户端每天或每周更改其地址,很可能就足以缓解大多数隐私关切。
让一台主机关联大量地址也存在客户端成本(例如在进行地址查找时、需要加入多个多播组等)。因此,频繁更改地址(例如每隔几分钟)可能有性能影响。
遵循本规范的主机应当随时间生成新的临时地址。这可以通过在临时地址被弃用之前 REGEN_ADVANCE 个时间单位生成一个新的临时地址来实现。如上所述,这会产生首选生存期不超过 TEMP_PREFERRED_LIFETIME 的地址。DESYNC_FACTOR 值是生成临时地址时计算的一个随机值;它确保客户端不会以固定频率生成新地址,且客户端之间不会相互同步而在完全相同的时间生成新地址。当首选生存期过期时,必须使用第 3.4 节规定的算法(从第 4 步开始)生成一个新的临时地址。
由于适合生成新地址的频率因环境而异,实现应当为终端用户提供更改地址重新生成频率的能力。默认值在 TEMP_PREFERRED_LIFETIME 中给出,为一天。此外,使临时地址失效的确切时间取决于终端用户如何使用应用程序。因此,建议的默认值两天(TEMP_VALID_LIFETIME)可能并非在所有环境中都合适。实现应当为终端用户提供覆盖这两个默认值的能力。
最后,当接口连接到一条新的(不同的)链路时,必须移除该接口已有的临时地址,并且必须使用第 3.4 节的算法生成新的临时地址以在新链路上使用。如果设备从一条链路移动到另一条链路,生成新的临时地址可确保设备为与两条链路关联的临时地址使用不同的随机化 IID,从而使把来自两条不同链路的地址关联为来自同一主机变得更加困难。主机可以采用任何可用过程来判断发生了链路变化。其中一个此类过程由 "Simple DNA" [RFC6059] 描述。检测链路变化将防止链路 down/up 事件(不必要地)导致临时地址被重新生成。
3.7. 实现考量
实现本规范的设备必须为终端用户提供一种显式启用或禁用临时地址使用的方式。此外,站点可能希望禁用临时地址的使用,以简化网络调试和运维。因此,实现应当为受信任的系统管理员提供一种启用或禁用临时地址使用的方式。
此外,站点可能希望对某些前缀选择性地启用或禁用临时地址的使用。例如,一个站点可能希望禁用 ULA [RFC4193] 前缀的临时地址生成,同时仍为通过 PIO 通告用于地址配置的所有其他前缀生成临时地址。另一个站点可能希望仅为前缀 2001:db8:1::/48 和 2001:db8:2::/48 启用临时地址生成,而对所有其他前缀禁用。为支持此行为,实现应当提供一种为特定前缀子范围启用和禁用临时地址生成的方式。这种按前缀设置应当就指定的前缀子范围覆盖主机上的全局设置。注意,按前缀设置可以在任意粒度上应用,而不必按子网。
3.8. 已定义的协议参数与配置变量
本文档定义的协议参数与配置变量包括:
- TEMP_VALID_LIFETIME:默认值 2 天。用户应能覆盖该默认值。
- TEMP_PREFERRED_LIFETIME:默认值 1 天。用户应能覆盖该默认值。注意:TEMP_PREFERRED_LIFETIME 值必须小于 TEMP_VALID_LIFETIME 值,以避免病态情况——即地址被用于新通信但在不到 1 秒内变得无效,从而中断这些通信。
- REGEN_ADVANCE:2 + (TEMP_IDGEN_RETRIES * DupAddrDetectTransmits * RetransTimer / 1000)
- MAX_DESYNC_FACTOR:0.4 * TEMP_PREFERRED_LIFETIME。DESYNC_FACTOR 的上界。
- DESYNC_FACTOR:0 - MAX_DESYNC_FACTOR 范围内的一个随机值。它在每次生成临时地址时计算,并与相应地址关联。它必须小于 (TEMP_PREFERRED_LIFETIME - REGEN_ADVANCE)。
4. 更改 IID 的影响
保护个人隐私的意愿可能与有效维护和调试网络的意愿相冲突。让客户端使用随时间变化的地址,会使追踪和隔离运维问题变得更加困难。例如,在查看数据包踪迹时,可能更难判断所看到的行为是由单台出错主机还是由多台主机引起的。
目前建议网络部署为通用主机从每个前缀提供多个 IPv6 地址 [RFC7934]。然而,在某些场景中,使用大量 IPv6 地址可能对需要在某些数据结构中为每个 IPv6 地址维护条目的网络设备(例如 SAVI [RFC7039])产生负面影响。例如,如果网络设备中的邻居缓存(Neighbor Cache)不足以存储链路上的所有地址,那么并发活跃使用多个 IPv6 地址将增加邻居发现(Neighbor Discovery)流量。这可能对多播开销高昂的网络的性能和能效产生影响(例如见 [MCAST-PROBLEMS])。此外,如果临时地址以高频率重新生成,某些网络安全设备可能会错误地推断存在 IPv6 地址伪造。
使用临时地址可能会给某些应用程序带来意想不到的困难。例如,某些服务器拒绝接受来自它们无法将 IP 地址映射为 DNS 名称的客户端的通信。也就是说,它们执行一次 DNS PTR 查询以确定对应于某个 IPv6 地址的 DNS 名称,然后可能对返回的名称再执行一次 AAAA 查询,以验证它映射回同一地址。因此,未在 DNS 中正确注册的客户端可能无法访问某些服务。然而,主机的 DNS 名称(如果不变化)会充当一个恒定标识符。本文档所述扩展的广泛部署可能会挑战基于反向 DNS 的"验证"实践——这种验证几乎没有有效性,尽管它被广泛实现。为应对服务器挑战,主机可以用随机名称(例如随机地址本身的字符串形式)在 DNS 中注册临时地址,尽管代价是增加了复杂性。
此外,如果地址在仍被应用程序使用时就变得无效,或者应用程序打开多个会话并期望它们都使用同一地址,某些应用程序可能无法稳健运行。
[RFC4941] 采用随机化的临时 IID 来生成一组临时地址,使得在给定时间为多个 SLAAC 前缀配置的临时地址会采用同一 IID。在多个地址之间共享同一 IID 使主机能够为每个临时地址集只加入一个被请求节点(solicited-node)多播组。
本文档要求主机上所有临时地址的 IID 彼此在统计上不同。这意味着当一个网络采用多个前缀时,一组中的每个临时地址将对应一个不同的被请求节点多播地址,因此主机必须加入的多播组数量成为用于生成临时地址的 SLAAC 前缀数量的函数。
因此,采用多个前缀的网络可能要求主机加入比 RFC 4941 实现情况下更多的多播组。如果多播组数量足够大,主机可能需要将网卡设置为混杂模式(promiscuous mode)。这可能导致主机处理超出严格必要的更多数据包,并可能对电池寿命和整体系统性能产生负面影响。
我们注意到,由于本文档将默认 TEMP_VALID_LIFETIME 从 7 天([RFC4941] 中)缩短为 2 天,每个 SLAAC 前缀的并发临时地址数量将少于 RFC 4941 实现;因此,对于一个采用比如 1 到 3 个前缀的网络,其多播组数量将与 RFC 4941 实现的数量相近。
关心因配置地址而需要加入的最大多播组数量、或已配置地址总数量的实现,应考虑对以下项施加实现特定的限制:例如已配置地址的最大数量、用于自动配置的 SLAAC 前缀的最大数量、和/或 TEMP_VALID_LIFETIME/TEMP_PREFERRED_LIFETIME 的最大比值(后者最终控制每个 SLAAC 前缀并发临时地址的近似数量)。其中许多配置限制在 SLAAC 和 RFC 4941 实现中已经现成可用。我们注意到,这些可配置限制意在防止病态行为(而非仅仅是限制 IPv6 地址的使用),因为 IPv6 实现被期望充分利用多地址 [RFC7934]。
5. 相对 RFC 4941 的重大变更
本节总结本文档相对于 RFC 4941 的实质性变更。
概括而言,本文档引入了以下变更:
- 修复了生成临时地址算法中的若干缺陷。上述缺陷包括使用 MD5 计算临时 IID,以及为多个前缀复用同一 IID(进一步细节见 [RAID2015] 和 [RFC7721])。
- 允许主机仅使用临时地址。[RFC4941] 假设临时地址是在稳定地址之外额外配置的。本文档不暗示或要求配置稳定地址;因此,实现现在可以既配置稳定地址又配置临时地址,或仅配置临时地址。
- 移除了"临时地址默认禁用"的建议。这与 BCP 188 ([RFC7258]) 以及 BCP 204 ([RFC7934]) 一致。
- 缩短了临时地址的默认最大有效生存期(TEMP_VALID_LIFETIME)。TEMP_VALID_LIFETIME 已从 1 周缩短为 2 天,将并发临时地址的典型数量从 7 个减少到 3 个。这减轻了网络元素的可能压力(进一步细节见第 4 节)。
- DESYNC_FACTOR 在每次生成临时地址时计算,并与相应的临时地址关联,使每个临时地址具有统计上不同的首选生存期,因此临时地址不会以任何特定频率生成。
- 将"在连续 TEMP_IDGEN_RETRIES 次 DAD 失败后不得尝试重新生成临时地址"这一要求从 "MUST NOT"(不得)改为 "SHOULD NOT"(不应当)。
- 关于不同地址生成技术的安全与隐私影响的讨论,已替换为对该领域近期工作的引用([RFC7707]、[RFC7721] 和 [RFC7217])。
- 本文档纳入了(撰写时)由 Jiri Bohac 和 Alfred Hoenes 为 [RFC4941] 提交的勘误。
6. 未来工作
实现可能希望跟踪哪些地址正被上层使用,以便在没有任何上层协议使用某个被弃用的临时地址之后(但不得在此之前)将其从内部数据结构中移除。这与当前做法相反——当前做法是在地址变得无效时将其从接口移除 [RFC4862],而不论上层协议是否仍在使用它们。对于 TCP 连接,此类信息可在控制块中获得。对于基于 UDP 的应用程序,可能只有应用程序才知道哪些地址实际在用。因此,实现通常需要采用启发式方法来判断一个地址何时不再被使用。
7. IANA 考量
本文档没有 IANA 行动。
8. 安全考量
如果极少数主机(比如只有一台)长时间使用给定前缀,那么仅更改地址的接口标识符部分可能不足以缓解基于地址的网络活动关联,因为前缀充当恒定标识符。本文档所述过程在前缀相当不固定、或被相当多主机使用时最为有效。此外,如果临时地址被用于一个用户进行身份验证的会话中,那么对于接收该身份验证信息的一方或多方而言,该地址的任何"隐私"概念都已被破坏。
尽管本文档讨论了限制接口标识符生存期以减少攻击者执行基于地址的网络活动关联能力的方法,但所述方法被认为对复杂的流量分析形式无效。为提高有效性,可能需要考虑使用更先进的技术,例如洋葱路由(onion routing)[ONION]。
入口过滤(ingress filtering)一直被并正在被部署,作为防止在分布式拒绝服务(DDoS)攻击中使用伪造源地址的一种手段。在拥有大量主机的网络中,新的临时地址以相当高的频率被创建。这可能使入口/出口过滤机制难以区分合法的临时地址变化与伪造源地址——后者是"前缀内"的(使用拓扑正确的前缀和不存在的接口标识符)。这可以通过在网络入口点基于每个地址使用访问控制机制来解决——不过,如第 4 节所述,这样做有相应的成本。
9. 参考文献
(按规范,本节参考文献条目保留原文著录信息,不做中译。)
9.1. 规范性引用(Normative References)
- 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>.
- 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>.
- 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>.
- 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>.
- 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>.
- 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>.
- Krishnan, S., "Reserved IPv6 Interface Identifiers", RFC 5453, DOI 10.17487/RFC5453, February 2009, <https://www.rfc-editor.org/info/rfc5453>.
- 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>.
- 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>.
- 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)
- O'Connor, J., Aumasson, J. P., Neves, S., and Z. Wilcox-O'Hearn, "BLAKE3: one function, fast everywhere", 2020, <https://blake3.io/>.
- 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 IPv6 Interface Identifiers", <https://www.iana.org/assignments/ipv6-interface-ids>.
- 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>.
- 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>.
- 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>.
- 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>.
- Rivest, R., "The MD5 Message-Digest Algorithm", RFC 1321, DOI 10.17487/RFC1321, April 1992, <https://www.rfc-editor.org/info/rfc1321>.
- 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>.
- 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>.
- 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>.
- 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>.
- 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>.
- Barth, A., "HTTP State Management Mechanism", RFC 6265, DOI 10.17487/RFC6265, April 2011, <https://www.rfc-editor.org/info/rfc6265>.
- 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>.
- 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>.
- 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>.
- 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>.
- 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>.
- 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>.
- 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>.
- 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 是本文档(RFC 4941 的修订版)的唯一作者。他要感谢(按字母顺序)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 和 Christopher Wood 对本文档早期草案版本提供的宝贵意见。
本文档纳入了 Jiri Bohac 和 Alfred Hoenes(在撰写时)为 RFC 4941 提交的勘误。
Suresh Krishnan 是 RFC 4941(RFC 3041 的修订版)的唯一作者。他要感谢 IPv6 工作组的贡献,特别是 Jari Arkko、Pekka Nikander、Pekka Savola、Francis Dupont、Brian Haberman、Tatuya Jinmei 和 Margaret Wasserman 的详细意见。
Rich Draves 和 Thomas Narten 是 RFC 3041 的作者。他们要感谢 IPv6 工作组的贡献,特别是 Ran Atkinson、Matt Crawford、Steve Deering、Allison Mankin 和 Peter Bieringer。
作者地址(Authors' Addresses)
Fernando Gont
Segurola y Habana 4310, 7mo Piso
Ciudad Autonoma de Buenos Aires
Email: fgont@si6networks.com
URI: https://www.si6networks.com
Thomas Narten
Email: narten@cs.duke.edu
Richard Draves
Email: richdr@microsoft.com
RFC 8981
Temporary Address Extensions to Autoconf
February 2021
Gont, et al.
Standards Track
[Page]
Internet Engineering Task Force (IETF)
RFC 8981
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.¶
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:¶
- Temporary addresses are typically employed for initiating outgoing sessions.¶
- 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.¶
- New temporary addresses are generated over time to replace temporary addresses that expire (i.e., become deprecated and eventually invalidated).¶
- 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.¶
- 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.¶
- 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:¶
- 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.¶
- 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].¶
- 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:¶
Compute a random identifier with the expression:¶
RID = F(Prefix, Net_Iface, Network_ID, Time, DAD_Counter,
secret_key)¶
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].¶
The prefix to be used for SLAAC, as learned from an ICMPv6 Router Advertisement message.¶
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.¶
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.¶
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.¶
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.¶
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.¶
- 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].¶
- 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:¶
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.¶
DESYNC_FACTOR is the value computed when the address was created (see step 4 below).¶
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.¶
DESYNC_FACTOR is the value computed when the address was created (see step 4 below).¶
If the host has not configured any temporary address for the corresponding prefix, the host SHOULD create
a new temporary address for such prefix.¶
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.¶
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.¶
- 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.¶
- 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.¶
- 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:¶
Default value: 2 days. Users should
be able to override the default value.¶
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.¶
2 + (TEMP_IDGEN_RETRIES * DupAddrDetectTransmits * RetransTimer / 1000)¶
0.4 * TEMP_PREFERRED_LIFETIME. Upper bound on 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).¶
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
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>.
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>.
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>.
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>.
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>.
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>.
Krishnan, S., "Reserved IPv6 Interface Identifiers", RFC 5453, DOI 10.17487/RFC5453, February 2009, <https://www.rfc-editor.org/info/rfc5453>.
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>.
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>.
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
O'Connor, J., Aumasson, J. P., Neves, S., and Z. Wilcox-O'Hearn, "BLAKE3: one function, fast everywhere", 2020, <https://blake3.io/>.
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 IPv6 Interface Identifiers", <https://www.iana.org/assignments/ipv6-interface-ids>.
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>.
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>.
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>.
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>.
Rivest, R., "The MD5 Message-Digest Algorithm", RFC 1321, DOI 10.17487/RFC1321, April 1992, <https://www.rfc-editor.org/info/rfc1321>.
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>.
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>.
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>.
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>.
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>.
Barth, A., "HTTP State Management Mechanism", RFC 6265, DOI 10.17487/RFC6265, April 2011, <https://www.rfc-editor.org/info/rfc6265>.
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>.
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>.
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>.
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>.
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>.
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>.
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>.
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
Segurola y Habana 4310, 7mo Piso
Ciudad Autonoma de Buenos Aires
Email:
fgont@si6networks.com
URI:
https://www.si6networks.com
Email:
narten@cs.duke.edu
Email:
richdr@microsoft.com