无法读取 sysctl 中的密钥“net.ipv6.conf.all.stable_secret”?

无法读取 sysctl 中的密钥“net.ipv6.conf.all.stable_secret”?

我在 Arch Linux 计算机上运行的内核版本如下:

[root@router ~ ]$ uname -a
Linux router 4.2.5-1-ARCH #1 SMP PREEMPT Tue Oct 27 08:13:28 CET 2015 

我注意到每次我通过sysctl -a管道输入 grep 命令时我都会收到以下消息

[root@router ~ ]$ sysctl -a | grep no_meaning
sysctl: reading key "net.ipv6.conf.all.stable_secret"
sysctl: reading key "net.ipv6.conf.default.stable_secret"
...

对这些文件运行 cat:

[root@router ~ ]$ cat /proc/sys/net/ipv6/conf/all/stable_secret 
cat: /proc/sys/net/ipv6/conf/all/stable_secret: Input/output error
[root@router ~ ]$ ls -hl /proc/sys/net/ipv6/conf/all/stable_secret 
-rw------- 1 root root 0 Dec 24 14:57 /proc/sys/net/ipv6/conf/all/stable_secret

到目前为止我还没有看到任何不良影响,但我想知道这是否正常,特别是这些stable_secret键的功能是什么?提前致谢。

答案1

这是为了支持 RFC 7217 地址

sysctl 变量stable_secret包含生成稳定接口标识符(通常是 IPv6 地址中的低 64 位)的秘密,如RFC 7217, “一种使用 IPv6 无状态地址自动配置 (SLAAC) 生成语义不透明接口标识符的方法。”

RFC 描述了一种在不包含 MAC 地址的 IPv6 网络中定义接口标识符 (IID) 的方法,如下所示RFC 4862SLAAC 地址确实如此,但不会像这样及时更改RFC 4941隐私地址也可以。应使用密钥和其他信息(包括网络前缀)生成此 IID。因此,IID 在一个子网中将是稳定的,但在具有另一个前缀(可能还有另一个密钥和其他成分)的另一个子网中会有所不同。这应该可以防止在漫游不同网络时跟踪节点,从而提高隐私性,但可以更轻松地在每个网络中对其进行管理。

来自 RFC:

      密钥:
          攻击者不知道的秘密密钥。秘密
          密钥应至少为 128 位。它必须被初始化为
          伪随机数(有关随机性,请参阅 [RFC4086]
          安全要求)当操作系统
          安装或当 IPv6 协议栈“引导”时
          首次。实现可以提供方法
          供系统管理员显示和更改秘密
          钥匙。

变量已解释在内核文档中:

stable_secret - IPv6 地址
    该 IPv6 地址将用作生成 IPv6 的秘密
    链路本地地址和自动配置的地址
    那些。设置此秘密后生成的所有地址都将
    默认是稳定的隐私。这可以通过以下方式更改
    addrgenmode ip-link。 conf/default/stable_secret 用作
    命名空间的秘密,接口特定的可以
    覆盖那个。对 conf/all/stable_secret 的写入被拒绝。

    建议在安装时生成此密钥
    系统并在此后保持稳定。

    默认情况下,稳定秘密未设置。

这篇文章发布到 Linux 内核邮件列表这个 git 提交消息显示 RFC 7217 是由 Hannes Frederic Sowa 于 2015 年 3 月在 Linux 内核中实现的。不幸的是,我无法确定相应的已发布内核版本。

stable_secret读取但未设置时可能会发生 I/O 错误

提交文本表明读取stable_secret变量将返回 I/O 错误,直到设置:

该秘密的格式为 ipv6 地址,并将按接口和命名空间存储。我们跟踪初始化标志并返回 EIO 错误,直到设置密码为止。

[强调我的]

相关内容