问题标签 [rdrand]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
214 浏览

c++ - 正确使用 RDRAND(片上生成器)作为 std::random_device 与 Visual C++ 的随机库

我希望能够在可用时使用硬件随机数生成器,并且无论英特尔或 AMD 运行代码如何,都可以使用 C++ 随机库:

根据这篇文章entropy()应该在没有 RDRAND 的 cpu 上返回 0,例如 i7-2670qm ivy 桥(我在其上测试过 - RDRAND 第一次出现在其继任者 Sandy Bridge 中),但在 Visual Studio 中始终为 32如此处所述。有人建议缺少随机设备可能会导致operator()抛出异常,但这也不会发生。

例如,可以使用内在函数int _rdrand32_step (unsigned int* val),但只能从均匀分布中提取,我需要能够利用 C++ 随机库中可用的分布。

此外,代码应该使用 AMD cpu 上的硬件生成器。

random在 Visual Studio(2017、2019)中将硬件随机数生成器(RDRAND)与 C++ 库一起使用的正确方法是什么?

0 投票
1 回答
213 浏览

c++ - 不能将 uint64_t 与 rdrand 一起使用,因为它需要 unsigned long long,但 uint64_t 被定义为 unsigned long

在尝试使用 rdrand 内在函数时,我遇到了以下烦恼。

使用我当前的编译器unsigned long并且unsigned long long都是 64 位的。但是, uint64_t 被定义为unsigned longwhile_rdrand64_step需要一个指向unsigned long long.

在英特尔的网站上,该功能被定义为int _rdrand64_step (unsigned __int64* val). 我怎样才能以便携的方式处理这个问题?

铿锵 11.0 -march=ivybridge -O2( https://godbolt.org/z/55sjsG ):

0 投票
1 回答
147 浏览

delphi - 将 ASM 指令 RDRand 转换为 Win64

我有这个功能(RDRand - 由David Heffernan编写)在 32 位中可以正常工作,但在 64 位中失败:

该函数的文档在这里:https ://software.intel.com/en-us/articles/intel-digital-random-number-generator-drng-software-implementation-guide

尤其是这样写:

本质上,开发人员使用单个操作数调用此指令:将存储随机值的目标寄存器。请注意,此寄存器必须是通用寄存器,寄存器的大小(16、32 或 64 位)将决定返回的随机值的大小。

调用 RDRAND 指令后,调用者必须检查进位标志 (CF) 以确定在执行 RDRAND 指令时是否有可用的随机值。如表 3 所示,值 1 表示随机值可用并放置在调用中提供的目标寄存器中。值 0 表示随机值不可用。在当前架构中,目标寄存器也将作为这种情况的副作用归零。

我对 ASM 的了解很少,我错过了什么?

我也不太明白这个指令:

它到底是做什么的?

0 投票
0 回答
44 浏览

random - 是否可以直接在 M1 中使用安全飞地中的 TRNG?

所以过去我在英特尔中使用 RDRAND 直接访问真正的随机数生成器,但现在我正在考虑为 M1 重写我的应用程序 - 是否有一些类似的内在特性_rdseed16_step

或者是内核在此处使用getentropy或的唯一说明/dev/random- 我不想与其他熵源混合,而是直接访问安全飞地 TRNG。

0 投票
2 回答
234 浏览

gcc - Oracle Linux 中的 Valgrind 安装错误

我正在开发 Oracle Linux Server 6.5 版。

GCC 版本 4.4.7

我正在尝试安装 Valgrind valgrind-3.17.0 但最终出错。您能就以下问题提出建议吗?提前致谢。

以下是我遵循的步骤:

。/配置

当我在运行./configure后查看日志时,发现有一句话为:

checking if amd64 assembler knows the RDSEED instruction... no

进行安装

0 投票
0 回答
45 浏览

assembly - 将 rdrand 指令获取的 64 位数据加载到整个页面,并使用指令 vmovdqa64 将其写入 zmm0 寄存器

调用rdrand指令将给出 Ex: 的 64 位值8609 a544 8609 a544。我希望将相同的 64 位值写入大小为 512 的整个页面。并且此数据将使用 vmovdqa64 指令加载到 zmm0 寄存器。

例:所需数据如下

目前我正在获取以下数据