LWN:RDSEED 引入的危机!

如何利用CPU生成随机数 最近碰到一个问题,就是在没有函数库或者API支持的情况下怎么生成随机数。 请教了一下别人,发现对于X86处理器来说,处理器的指令集里面就有生成随机数的指令--RDRAND,该指令利用的是x86 CPU上自带的随机数生成器,对于Intel x86处理器来说,该指令从Ivy Bridge开始支持,而AMD则从2015年起也添加了对这个指令的支持,所以老一点的处理器可能没法支持这个指令。 因为没有A 阅读详情

关注了就能看到更多这么棒的文章哦~

Pitchforks for RDSEED

By Jonathan Corbet
February 8, 2024
Gemini translation
https://lwn.net/Articles/961121/

随机数(或者说是不可预测的数字序列)的生成是很多安全技术的关键。因此,这些年来,CPU 要能够提供随机数据这一个特性,引起了很多关注。一个合适的基于硬件的随机数生成器可以解决某些系统难以获得随机性的问题,但前提是相信制造商没有以某种方式损害该生成器。然而,最近的讨论揭示出另一个问题:如果一个硬件随机数生成器能够被简单地消耗殆尽,会发生什么?

作为背景,有必要了解 x86 系统上提供的两个相关指令:

  • RDSEED 是一个真正随机数生成器;它从环境中收集熵,并将随机 bit 序列存储到 CPU 寄存器中。它主要用于伪随机数生成器的种子或需要最高质量随机性的其他应用程序。

  • RDRAND 从内置于硬件中的确定性随机数生成器获取随机的数字序列,并将该模式存储到寄存器中。 RDRAND 所使用的生成器会定期从 RDSEED 所使用的来源重新获取种子。

RDRAND 被推荐用于大多数用途;它更快,并且可以显著增加可用于系统的熵量。在内核中, RDSEED 用于给内核的随机数生成器提供种子,但很少用在其他用途。值得注意的一点是,这两个指令都不是特权指令;用户空间代码同样可以使用。另一个重要的事实是,如果可用熵不足,这两个指令都可能会失败。(有关这些指令工作原理的更多详细信息,请参见 本页)。

在 x86 架构上,内核具有两个函数,rdseed_long() 和 rdrand_long(),它们会使用上述指令。Kirill Shutemov 最近观察到,虽然在 RDRAND 失败时 rdrand_long() 会重试十次,但 rdseed_long() 却会在相同的情况下立即放弃。他发布了一个 补丁,在 rdseed_long() 中添加了一个重试循环,另一个补丁 则是在即使十次尝试都没能获得成功结果时发出警告。这就是因出了后续的讨论。

它们能失败吗(我们关心它们失败的情况吗)?

最初,对于这些指令是否会失败,人们有点不确定。 RDSEED 能够以很高的速率产生熵,而 RDRAND 大大提高了该熵,所以似乎不太可能耗尽。内核随机数生成器的维护者 Jason Donenfeld 担心,如果 CPU 的随机数生成器可以被驱动到出现失败,就可能会导致拒绝服务问题。然而,Dave Hansen 认为这种担忧是多余的;他 权威地发言:

尽管 SDM 允许这样做,但我们(软件)需要在设计上保证 RDRAND/RDSEED 故障极其罕见。如果并非如此,我们将拿起我们可以信赖的火把和干草叉,追究那些制造了有问题的硬件的人的责任。

重复一下我说的:
常规 RDRAND/RDSEED 故障只会在损坏的硬件上发生

然而,似乎现在就可能为那些干草叉找到用武之地了。Donenfeld 编写了一个小程序 来通过反复执行 RDRAND 和 RDSEED 指令对硬件进行压力测试;他观察到,在单线程测试中, RDSEED 几乎有 30% 的时间会失败。然而,硬件随机数生成器由所有处理器共享这同一个 CPU,所以多线程测试应该会出现更糟糕的结果。实际上,Daniel P. Berrangé 报告 说,在多线程测试中, RDSEED 只有 3% 的时间成功了。没有人能够证明 RDRAND 会失败,但是正如 Berrangé 稍后在讨论中指出的那样,随着线程数量的增加,这种情况可能会发生变化。Elena Reshetova 也 承认,可能会有办法迫使 RDRAND 失败。

显然已经很明确了,通过锲而不舍的努力,可以使 RDSEED 失败,而 RDRAND 的可靠性也不能得到保证。下一个合乎逻辑的问题是:这有多大的影响?对于大多数用例来说,几乎没有什么值得担忧的。如果硬件随机数生成器偶尔失败,内核随机数生成器将继续产生不可预测的输出,即使在没有其他熵源的情况下也是如此。正如 Ted Ts'o 指出的那样,内核使用它能够找到的任何可能的其他熵源(例如中断时间的变化),并且即使 RDRAND 完全被破坏了,内核的方案也应该健壮了。由于大多数应用程序从内核获取随机数据,即使 RDRAND 不可靠也不应该成为问题。

但是,有一个值得注意的例外:众所周知的称为 机密计算(Confidential Computing, 有时也称为“可可 (CoCo)”)的场景,它需要保证虚拟机的安全性和机密性,哪怕是在受损或敌对的 host 计算机上运行。安全飞地(secure enclaves)和加密内存(encrypted memory)等技术已被开发出来,以保护虚拟机免受 host 的窥探侵害;这些技术有一天可能按照预期工作,但它们绝对依赖于可信的随机数据。如果在已经知道随机种子的情况下启动“机密”虚拟机,那么游戏可能在还没开始之前就已经注定 game over 了。

启动时熵的可用性长期以来一直是 Linux 系统的问题,所以已经开发了许多机制来尽可能快地为随机数生成器确定种子。这些机制包括使用引导加载程序注入的随机数据以及从环境中收集熵。然而,机密计算系统无法信任这种类型的输入信息。引导加载程序受主机控制,环境熵也是如此。正如 Reshetova 解释 的那样,主机能够控制诸如计时器到期和中断传递之类的事件。唯一不在主机控制之下的熵源是硬件随机数生成器(至少在理论上)。如果这也遭到破坏,那么整个机密计算的愿景就会化为泡影。

该怎么办?

从一开始,这个梦想就在内核圈子里就引起了不少争议,这次也一上来就有这方面的观点,Donenfeld 直接询问:“这个 CoCo VM 的东西是不是真的需求?最终保护客户机免受主机攻击是否真的可行?”然而,接下来的大部分讨论都集中在合适的应对措施应该是什么。

在机密计算用例之外,人们普遍认为什么都不需要做。打算在 RDSEED 或 RDRAND 失败时添加一个 warning(如 Shutemov 在讨论一开始提出的),但这似乎也不是正确的做法。许多系统运行时启用了panic_on_warn;在这样的系统上,warning 将导致系统 panic。这将把随机数生成器失败转变为拒绝服务问题。即使在这种情况下,如果早期引导期间发生失败,发出 warning 似乎也是值得的;如果发生这种情况,要么是随机数生成器坏了,要么显然有某种攻击正在进行。

当系统在保密计算模式下运行时,情况就有些复杂了。毕竟这不是内核整体公认的一个运行模式;Ts'o 建议为此目的添加一个全局标志,因为内核的其他部分最终很可能也需要它。但即使有了这个 flag,也有许多备选方案需要选择;Donenfeld 对这些方案进行了详细说明。可以归结为内核是否应该在失败时发出 warning(或 panic),是否应该在任何时候都这样做,以及这种措施是否应该在“保密计算模式”中改变。

显而易见的共识似乎是,先要直接对失败的操作进行重试,正如已经为 RDRAND 所做的那样。即使单个 RDRAND 可以被迫失败,让它连续十次都失败也是一个更难出现的情况。然而,应该记住,正如 Reshetova指出的,host 控制了 guest 的调度,并且理论上来说可以影响这个 retry 循环。如果确保每次 retry 都是在随机数生成器被耗尽的那时来运行,它们将永远不会成功。

至少,如果这些指令在早期引导期间失败,应该发出 warning,因为这是表明事情不太对的一个明显的迹象。对于保密计算案例来说,随机数失败意味着系统无法提供整个架构所依赖的保障,因此系统应该直接拒绝运行。这可以通过 panic 来实现,或者对 RDRAND 指令进行无限循环调用,如果指令永远不成功,就相当于把虚拟机锁住了。

除此之外,真的没有太多需要做的事情。

不过,有一部分讨论隐藏在背后,那就是这个担忧似乎已经在 CPU 供应商内部引起了一场慌乱,他们在确定问题的严重程度以及需要做些什么(如果有的话)。为了避免大家认为这是一个 Intel 特有的问题,Berrangé报告了在一些 AMD 处理器上强制出现高失败率的做法。这些讨论的结果可能会产生一些文档、或者 microcode 升级,以及未来处理器中的设计方案变更。

与此同时,随机数生成器耗尽的前景对大多数用户来说都不太用担心;看来不太可能用来威胁到现实世界中的系统。对于保密计算人群来说,这只是必须缓解的潜在威胁中肯定存在的无尽列表中的又一项而已。人们会采取措施来解决问题,我们都可以收起干草叉,回去继续观察有关保密计算是否可以真正实现的争论。

全文完
LWN 文章遵循 CC BY-SA 4.0 许可协议。

欢迎分享、转载及基于现有协议再创作~

长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~

e6e71553b3b2bf07246b9b48297e669d.jpeg

rdseedv5.2:全面地震数据处理与分析工具包 rdseed是地震学研究中的重要工具之一,它主要用于处理和分析地震数据。该工具包能够读取、解码、显示和转换SEED数据格式,同时还提供了其它多种功能,比如数据提取、格式转换和质量检查等。 阅读详情

相关推荐

rdseed v5.2详解:SEED格式解析与地震仪器响应提取实战

SEED(Standard for the Exchange of Earthquake Data)是地震台网元数据交换的核心标准,其结构复杂、时间敏感、响应耦合度高。rdseed 作为IRIS官方维护的底层C语言解析器,通过精确解码dataless.seed中的卷头、通道索引与仪器响应段,实现对FDSN StationXML、SAC PZ、RESP等关键格式的可靠导出。其技术价值在于离线可用性、浮点精度可控性及与传统地震处理链(如SAC、ObsPy反褶积)的深度兼容。典型应用场景包括区域台网多年数据批量校

weixin_29186249的博客 269

地震专业软件rdseed安装教程

本教程是楼主入坑后总结的经验,也是刚刚学习使用Linux系统,很多代码命令不知道什么意思,所以也是自己闷头摸索才安装成功,其实非常简单,但是总觉得网上解释的不够清楚,所以自己写个安装过程。 1.到这个地址找到最新版本的rdseed:http://ds.iris.edu/pub/programs/。 目前最新的是rdseedv5.3.1.tar.gz。 2.下载后解压,然后cd到解压后的文件夹 $ tar -zxvf rdseedv5.3.1.tar.gz $ cd rdseedv5.3.1 3..

weixin_39691594的博客 3304

易语言中使用汇编实现高效随机数生成

CPU指令集是计算机硬件架构的核心组成部分,它定义了计算机处理器所能理解和执行的一系列基本指令。这些指令包括数据处理、逻辑运算、内存管理、输入输出等操作。CPU指令集的设计对于计算机的性能、功耗、编程模型和兼容性等方面都有重要影响。在随机数生成的上下文中,CPU指令集中的特定指令能够影响到随机数生成的质量和效率。例如,RDRAND指令就是专门设计用来高效生成高质量随机数的指令。理解CPU指令集的作用和意义对于编写高效且安全的随机数生成代码至关重要。

weixin_42613360的博客 942

安装rdseed

参考博客:https://blog.seisman.info/rdseed-install/ 则表示该二进制文件在当前系统可以直接使用,将其重命名,并放置到 PATH 中即可: 1 mv rdseed.rh6.linux_64 ~/bin/rdseed 若你的 Linux 系统为 32 位,或者其他一些特殊的原因,该二进...

qq_39590773的博客 1729

rdseedv5.1

地震数据格式转换工具,把SEED格式的波形数据转换成其它格式,SAC (binary or ascii), AH, SEGY, CSS, miniSEED 或fullSEED

e语言-汇编RdRand/RdSeed指令生成随机数

Intel在IVB架构的第三代CPU酷睿处理器(2012年开始生产)内置了一个利用电阻热噪声取得硬件真随机数的功能。如果打算用来作为其它伪随机数生成器的种子的时候那么就可以考虑RDSEED,不然就使用RNRAND。简单来说:RDRAND适用三代以后的Intel处理器及2015年以后的AMD处理器RDSEED适用五代以后Intel处理器及AMD Zen架构以后的处理器判断方法CPUID.01H:ECX.RDRAND[bit 30] = 1CPUID.(EAX=07H, ECX=0H):EBX.RDSEED[bit 18] = 1我重新整理并把RdSeed指令和CPU是否支持RdRand/RdSeed指令的判断程序写全了可以说比较完善,大家来进行测试新: 我对判断程序重新写了,目前可以正常判断CPU是否支持RdRand/RdSeed这两个指令了??可以测试下判断得是否正确,欢迎大家提问题???,回复时请说明CPU型号

(二)随机性与伪随机数发生器

RNG、PRNG、随机数发生器、伪随机数发生器

qq_32076957的博客 2103

汇编RdRand/RdSeed指令生成随机数-易语言

引用RDRAND is available in Ivy Bridge processorsand is part of the Intel 64 and IA-32 instruction set architectures.AMD added support for the instruction in June 2015.RDSEED is similar to RDRAND and provides higher level access to the entropy hardware.The RDSEED generator and processor instruction rdseed are available with Intel Broadwell CPUs and AMD Zen CPUs. Intel在IVB架构的第三代CPU酷睿处理器(2012年开始生产)内置了一个利用电阻热噪声取得硬件真随机数的功能。如果打算用来作为其它伪随机数生成器的种子的时候那么就可以考虑RDSEED,不然就使用RNRAND。简单来说:RDRAND适用三代以后的Intel处理器及2015年以后的AMD处理器RDSEED适用五代 以后 Intel处理器及AMD Zen架构以后的处理器 判断方法CPUID.01H:ECX.RDRAND[bit 30] = 1CPUID.(EAX=07H, ECX=0H):EBX.RDSEED[bit 18] = 1我重新整理并把RdSeed指令和CPU是否支持RdRand/RdSeed指令的判断程序写全了可以说比较完善,大家来进行测试新: 我对判断程序重新写了,目前可以正常判断CPU是否支持RdRand/RdSeed这两个指令了

ERROR: This system does not support “RDRAND“ 问题解决

DPDK程序运行报错

分享空间 2394

易语言-汇编RdRand/RdSeed指令生成随机数

Intel在IVB架构的第三代CPU酷睿处理器(2012年开始生产)内置了一个利用电阻热噪声取得硬件真随机数的功能。 如果打算用来作为其它伪随机数生成器的种子的时候那么就可以考虑RDSEED,不然就使用RNRAND。 简单来说: RDRAND适用三代以后的Intel处理器及2015年以后的AMD处理器 RDSEED适用五代以后Intel处理器及AMD Zen架构以后的处理器 判断方法 CPUID.01H:ECX.RDRAND[bit 30] = 1 CPUID.(EAX=07H, ECX=0H):EBX.RDSEED[bit 18] = 1 我重新整理并把RdSeed指令和CPU是否支持RdRand/RdSeed指令的判断程序写全了 可以说比较完善,大家来进行测试 新: 我对判断程序重新写了,目前可以正常判断CPU是否支持RdRand/RdSeed这两个指令了?? 可以测试下判断得是否正确,欢迎大家提问题???,回复时请说明CPU型号

rdseed_win.zip_SEED读取_rdseed_rdseed_win_seed地震数据_地震seed

读取seed格式的地震数据,并转化为其他格式。

LWN:RDRAND的后续进展!

关注了就能看到更多这么棒的文章哦~A RDRAND followupBy Jonathan CorbetFebruary 26, 2024Zhipu translationhttps://lwn.net/Articles/963281/在最近的一篇文章《Pitchforks for RDSEED》中,我们了解到关于 x86 CPU 上的基于硬件的随机数生成器是否可能失败,是存在一些不确定性的。由于...

Linux News搬运工 350

汇编RdRand/RdSeed指令生成随机数

Intel在IVB架构的第三代CPU酷睿处理器(2012年开始生产)内置了一个利用电阻热噪声取得硬件真随机数的功能。如果打算用来作为其它伪随机数生成器的种子的时候那么就可以考虑RDSEED,不然就使用RNRAND。简单来说:。RDRAND适用三代以后的Intel处理器及2015年以后的AMD处理器。RDSEED适用五代以后Intel处理器及AMD Zen架构以后的处理器。判断方法。CPUID.01H:ECX.RDRAND[bit 30] = 1。CPUID.(EAX=07H, ECX=0H):EBX.RDSEED[bit 18] = 1。我重新整理并把RdSeed指令和CPU是否支持RdRand/RdSeed指令的判断程序写全了。可以说比较完善,大家来进行测试。新: 我对判断程序重新写了,目前可以正常判断CPU是否支持RdRand/RdSeed这两个指令了??。可以测试下判断得是否正确,欢迎大家提问题???,回复时请说明CPU型号。@abc2330292。Tags:汇编RdRand。

史上最全C/C++ 真随机数生成方法详述

如果现有的方法无法满足特定需求,可以考虑自定义真随机数生成器。例如,可以利用环境噪声、摄像头和麦克风等物理过程生成随机数。

极客代码 5317

汽车电子电气架构诊断功能开发全流程解析

文章作者是一位在魔都工作的汽车电子工程师,坚持长期主义,并分享了一段关于“钝感力”的文字,强调面对困境的韧劲和耐力,以及不被外界噪音干扰的重要性。文章详细介绍了汽车电子电气架构(EEA)的诊断功能开发流程,涵盖设计、实现、生产、运维及售后五大环节。作者从技术实现维度展开,详细描述了诊断系统架构设计、供应商功能实现、产线集成与标定、云端数据交互以及售后诊断应用场景。文章还总结了技术演进趋势,包括AI融合、OTA 2.0和区块链应用等,强调了标准化协议与工具链在全链路诊断能力中的重要性。最后,作者鼓励读者相信时

Soly_kun的博客 1219

R爬虫RSelenium环境搭建及简单应用

这是鄙人自己实践的一种可行的环境搭建,我会尽量详细的写下大家步骤。

weixin_44349986的博客 2013

性能测试-CPU性能分析,上下文切换

top:系统负载非常高,load average比较大,负载高,且上升比较快,us,sy有数据,sy态尤其偏高,进程列表中CPU使用率也比较高,累计达100%vmstat 1:proc 的r队列有CPU竞争,memory内存有变化其中空闲内存有消耗,in,cs有明显变化,cs的数据比较大,cs比in的值要高。vmstat 1:proc 的r队列有CPU竞争,memory free有轻微变化,in,cs有明显变化,cs特别高。综合上述数据得出:系统负载偏高,是由于自愿上下文切换数据偏高,反映CPU资源不足;

测试工程师 1678

认知网络分析实战:用Python复现课堂对话研究(含LSA代码)

本文通过Python实战,详细演示了如何运用认知网络分析(ENA)和滞后序列分析(LSA)两种方法,对课堂对话数据进行深度挖掘。文章提供了从数据清洗、行为编码到网络构建、序列统计及可视化的完整代码流程,帮助教育研究者和数据分析师量化分析对话中的认知结构与动态互动模式,从而获得超越文本表面的研究洞见。

weixin_28559803的博客 155

软件调试基础(二【CPU基础】2.1-2.2)

现代融合趋势:x86内部将CISC指令转为RISC微操作(μops);动态调度指令池中的μops → 分发到执行单元(ALU/FPU等)→ 结果写回指令池。内存控制器入片(Nehalem)→ GPU 单晶片集成(Sandy Bridge)检查指令状态 → 将临时结果永久化(写寄存器/内存)→ 保证逻辑正确性。:16位(8086)→32位(386)→64位(P4 EM64T)多核设计:Core 2 Duo(双核)/Quad(四核):系统编程指南(保护模式/虚拟化/APIC/缓存管理)

stupid的博客 1037

Python爬虫教程:抓取Android或iOS应用中的数据

随着智能手机的普及,移动应用程序已经成为我们生活中不可或缺的一部分。从社交媒体、在线购物到金融服务和健康管理,几乎所有领域都有相应的手机应用程序(App)服务用户。而这些应用程序通常会存储大量的数据,例如用户行为、产品信息、订单记录等。如果我们能有效地抓取这些数据,可以为数据分析、商业智能、用户行为分析等提供有力支持。本文将重点介绍如何使用Python爬虫技术抓取Android或iOS应用中的数据,尤其是如何从这些应用的后端接口、存储、或网页中提取数据。我们将探讨如何通过反向工程技术访问移动应用中的API接

2201_76125261的博客 801

mediasoup源码分析(二十)服务端架构设计

目录 简介 信令服务(房间服务) 调度服务 媒体服务 简介 流媒体服务器大的方向上可以分为上述三个模块。目前行业内都是分布式服务,独立部署。mediasoup信令与媒体之间虽然可以管道通信。但在行业内,服务之间通过管道通信用的少。 一般是rpc、mq,或者传统的tcp。这块licode架构比较不错,licode是信令和媒体服务通过MQ消息队列解耦。 下面介绍一下这三个服务主要功能,当然文中所说也是一家之言。 信令服务(房间服务) 信令服务也称为房间服务。有的企业把信令和房间分开,信..

lcalqf的专栏 1545

C/C++中产生随机数

C/C++中产生随机数 可以使用srand()函数和rand()函数来产生随机数,其中srand()用来初始化随机数种子,rand()用来产生随机数。因为默认情况下随机数种子为1,而相同的随机数种子产生的随机数是一样的,失去了随机性的意义,所以为使每次得到的随机数不...

dichuangheng8094的博客 898

MFC实现图书管理系统(附完整源码)

MFC实现图书管理系统(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 800

海光服务器因CPU模式不一致导致虚拟化场景下无法热迁移虚拟机问题

本文主要介绍因服务器CPU模式不一致导致虚拟化场景下无法热迁移虚拟机问题的原因及解决方法

qq_27815483的博客 2105

Python 爬虫实战:模拟登录网易云音乐(加密接口逆向与自动化登录实现)

网易云音乐作为国内主流的音乐流媒体平台,其丰富的音乐资源和个性化推荐算法吸引了大量用户。对于开发者而言,模拟登录网易云音乐并实现自动化操作,可以用于数据分析、歌单同步、歌词抓取等场景。然而,网易云音乐采用了多重加密机制和反爬策略,直接模拟登录存在较大挑战。

yansideyucsdn的博客 2590

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

上一篇: LWN:看一下动态链接过程!
下一篇: LWN:又一次从runc 容器中逃脱!
LinuxNews搬运工
博客等级 码龄7年 438粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值