AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 704737
Accepted
user528206
user528206
Asked: 2022-06-03 06:16:05 +0800 CST2022-06-03 06:16:05 +0800 CST 2022-06-03 06:16:05 +0800 CST

内核 5.10.119 导致 /proc/sys/kernel/random/entropy_avail 和 poolsize 的值为 256

  • 772

更新到内核 5.10.119 后,/proc/sys/kernel/random/entropy_avail 卡在 256 并且在移动鼠标时不会改变。它曾经超过3000。

# cat /proc/sys/kernel/random/entropy_avail  
256

此外,/proc/sys/kernel/random/poolsize 下降到 256。它曾经是 4096。

这是一个错误吗?你能相信这个只有 256 个可用熵的内核的新随机数生成器吗?

linux-kernel random
  • 2 2 个回答
  • 2078 Views

2 个回答

  • Voted
  1. Best Answer
    MC68020
    2022-06-03T06:53:03+08:002022-06-03T06:53:03+08:00

    无意与马库斯的完整答案竞争。只是为了解释发生了什么并证明您注意到的不是错误。

    默认池大小是硬编码的,drivers/char/random.c但实际上在 5.10.119 中发生了一些变化:

    高达 5.10.118:

    #define INPUT_POOL_SHIFT    12
    #define INPUT_POOL_WORDS    (1 << (INPUT_POOL_SHIFT-5))
    ...
    static int sysctl_poolsize = INPUT_POOL_WORDS * 32;
    

    (2^7)x32=4096

    在 5.10.119 下,poolsize 的计算方式有所不同:

    POOL_BITS = BLAKE2S_HASH_SIZE * 8
    ...
    static int sysctl_poolsize = POOL_BITS;
    

    BLAKE2S_HASH_SIZE = 32 定义在 include/crypto/blake2s.h

    8x32=256您注意到的不是错误……它:一个功能!

    顺便说一句,这只是一个默认值,如果您知道它不符合您的需求,请随时更改它。


    注意:此更改涉及主线,因为 5.17-rc1 从 119 向后移植到 5.10,但也到最近的 LTS:从 44 到 5.15。5.4 似乎并不关心(还?),当然,5.16 永远不会。


    正如@TooTea 在评论中所建议的那样,移动的原因可以作为初始提交的一部分阅读,简而言之:

    • 提高安全性(如果池的状态泄漏,其内容可以被控制并完全归零。)
    • 更好的性能(在高端 CPU 上高达 225%)

    这是通过直接调用 BLAKE2 替换 4096 LFSR 来实现的。

    BLAKE2s 输出 256 位,这应该给我们适当的最小熵累积量,以及对主动攻击的足够宽的抗碰撞余量。

    • 14
  2. Marcus Müller
    2022-06-03T06:21:50+08:002022-06-03T06:21:50+08:00

    我们可以。

    您之前也可以,当显示相同的值时——“熵”只是一个疯狂的猜测,有多少随机源可用于修改伪随机数生成器的状态。即使没有新的熵,那个生成器仍然是值得信赖的——除非有人弄清楚了状态(这应该是不可能的)。

    因此,即使对于像私钥生成这样的事情,使用 /dev/urandom (即使它无法从外部熵源修改其状态也使用 PRNG)和使用 /dev/random (如果没有什么可以修改状态的),除非您假设攻击者可能已经通过某种奇妙的措施知道了内核内部 PRNG 的状态(或者因为您在非常有限的设备上提前启动了 linux,没有熵源, 并且状态是确定性的, 但是你只是有 0 熵. 一旦你有几百位的熵, 任何加密安全的 PRNG 都说没有人从随机生成器获取数据可以成功猜测它的内部状态).

    唯一的区别实际上是,如果熵为零,则已经加密安全的 PRNG 不会被重新播种。“存储”有 3000 或 256 个熵根本不重要。唯一不同的是您是否可以重新播种。(如前所述,除非您做一些我不会涵盖为“加密通常”的事情,否则即使这也无关紧要:您真正需要多久创建一次没有攻击者完全了解您的攻击者计算机在生成之前某个时间点的状态无法破解?因为“攻击者无所不知,足以在某个时间推断您的加密 PRNG 状态”是您要防范的,而不是“NSA 试图破解 RSA”或其他东西。)

    老实说,

    这是一个错误吗?你能相信这个只有 256 个可用熵的内核的新随机数生成器吗?

    您需要假设您的内核不会削弱安全措施。否则,您的随机源中的理论熵不是您的问题,而是内核故意以某种方式使该确定性具有确定性,而没有告诉您:)

    如果你不相信你的内核没有安全回归,那么你已经输了,因为你不能相信你的计算机能够提供你认为应该的数字。太好了……是的,您可以,或者您很久以前就需要开始构建自己的操作系统,而不仅仅是这个更新改变了显示的熵。

    TL;DR:只要您的计算机从未遭受过足够的熵,您就可以生成安全数字。即使在开始获取随机数之前只有一次 256 熵,然后在系统的剩余生命周期中为 0 也可以!随时拥有 256 比以往任何时候都更加必要。

    • 7

相关问题

  • 如何让我的帧缓冲控制台工作?

  • 阻止挂载系统调用

  • 为什么无线工具版本 30 成为永久测试版?

  • 程序堆栈大小

  • 哪些 802.11ac(或更高版本)WiFi 加密狗适用于 Linux 4.13 内核

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve