问题标签 [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 投票
2 回答
426 浏览

python - 在 Python 2.7 中使用英特尔 RDRAND

我想在 Windows 上使用英特尔的 RDRAND 功能并生成真正的随机数(因为 Python 的随机模块不是那么随机)。Python中是否有任何API可以访问此功能?

我已经尝试安装下面评论中提到的 rdrand 模块,但我一直收到错误消息。日志: http: //pastebin.com/A2Vqsqec

rdrand.c 中的这些行似乎引发了错误:

为什么会这样?

更新:我已经检查并确保定义了 __GNUC__

0 投票
1 回答
267 浏览

multithreading - 具有多个线程的 rdseed 指令

我想使用rdseed多核指令为自定义 PRNG 生成种子。

到目前为止,这是我使用 OpenMP 所做的。

这是为每个线程生成种子的正确/理想方式吗? 当我调用rdseed. _rdseed32_step如果生成随机值,则内部函数返回 1,否则返回 0 。

英特尔 DRNP 手册

4.3.1 重试建议

与 RDRAND 指令不同,种子值直接来自熵调节器,调用者调用 RDSEED 的速度可能比生成这些值的速度更快。这意味着应用程序必须设计稳健,并为调用 RDSEED 失败做好准备,因为种子不可用 (CF=0)。

如果只有一个线程不经常调用 RDSEED,那么随机种子不太可能不可用。只有在需求量大的时期,例如一个线程快速连续调用 RDSEED 或多个线程同时调用 RDSEED 时,才可能发生下溢。但是,由于 RDSEED 指令没有内置公平机制,因此无法保证线程应该多久重试一次指令,或者可能需要重试多少次才能获得随机种子。实际上,这取决于 CPU 上的硬件线程数以及它们调用 RDSEED 的积极程度。

据我了解,每个处理器只有一个种子生成器,因此无法并行生成种子,并且由于生成种子需要时间,因此对我来说正确的解决方案似乎是让每个核心/超线程请求一个一次一个线程,并让正在调用的线程rdseed等待,直到它获得种子。

因为我每个线程只需要一个种子然后

对我来说似乎是正确的方法。

0 投票
1 回答
3204 浏览

c - C 语言的工作示例英特尔 RdRand。如何生成 -100.001 到 +100.001 范围内的浮点类型数

有一个英特尔 DRNG 库,可让您使用基于处理器晶体熵效应的随机数生成器。

库本身及其使用说明:https ://software.intel.com/en-us/articles/intel-digital-random-number-generator-drng-library-implementation-and-uses

库中有一个示例,它只打印随机生成的数组的内容。

请分享 C 中的工作示例,它允许使用此库生成 -100.001 到 +100.001 范围内的浮点类型数

我只能找到一个基于伪随机数生成器的代码,但这不是我需要的:

提前致谢。

0 投票
1 回答
1978 浏览

c# - 如何通过.Net 使用内联汇编来使用英特尔的 RDRAND

我正在使用 Intel Ivy Bridge CPU 并想使用 RDRAND 操作码(https://software.intel.com/en-us/articles/intel-digital-random-number-generator-drng-software-implementation-guide ) 在 C# 中。

如何通过 C# 调用此 CPU 指令?我在这里看到了从 c# 执行汇编代码的示例:x86/x64 CPUID in C#

但我不确定如何将它用于 RDRAND。代码不需要检查执行代码的 CPU 是否支持该指令。

我已经看到了这个执行来自Intel 的drng_samples的汇编字节码的 C++ 示例:

在 C# 中执行汇编代码的示例如何与来自 Inteldrng示例代码的 C++ 代码相结合?

0 投票
0 回答
537 浏览

c++ - 检查内联汇编中的 RDRAND 或 RDSEED 故障

我正在尝试使用 MSVC 样式的内联汇编测试 RDRAND 和 RDSEED 中的错误。如果我没记错的话,一个失败的标志存储在一个寄存器中,但我不记得是哪一个。我在英特尔的网站上看到了一个例子

其中“=qm”和“ok”如果不等于1则表示失败,但是我对GCC风格的内联汇编比较陌生,所以不知道“=qm”是什么意思,一直想不通出来。如何确定 MSVC 样式的内联汇编中的成功或失败?

提前致谢。

0 投票
1 回答
207 浏览

random - 使用硬件(真)随机数生成器的 Linux 脚本

我想在我的 RPI3 中使用内置的硬件随机数生成器进行项目。目前我只能使用 /dev/hwrng 来保存二进制转储

dd if=/dev/hwrng of=data.bin bs=25 count=1

我的项目需要的是从随机源 (/dev/hwrng) 以 1 次读取/秒的频率读取 200 位长的数据块,并计算其中的 1 并将结果以十进制形式写入带有时间戳,像这样:

datetime, value 11/20/2018 12:48:09, 105 11/20/2018 12:48:10, 103 11/20/2018 12:48:11, 97

十进制数应始终接近 100,因为它是一个随机数据源,并且预期的 1 和 0 的数量应该相同。任何帮助表示赞赏....

我确实想出了一个接近我不想要的 perl 脚本,所以让我分享一下。我相信它可以以更清洁的方式完成......

0 投票
0 回答
153 浏览

random - 英特尔安全密钥 (RDRAND) 可能是奇怪的行为

一段时间以来,我一直在使用 Intel 提供的 RNG 功能,通过我自己编写的 C++/CLI 程序为自己提供一些随机性。

然而,一段时间后,有件事让我觉得特别可疑。在其他用途​​中,我要求一个介于 1 和 4 之间的随机数,并且每次都将结果写在纸上。以下是结果:

2, 3, 3, 2, 1, 3, 4, 2, 3, 2, 3, 1, 3, 2, 3, 1, 2, 4, 2, 2, 1, 2, 1, 3, 1, 3、3、3、3。

1 的数量:6 2 的数量:9 3 的数量:12 4 的数量:2 总计:29

我实际上想知道英特尔的 RNG、我的算法、方法或其他问题是否存在问题?还是您认为偏见还不够显着?

我使用的是 Windows 10 Pro,我的 CPU 是 Intel Core i7-4710MQ。用VS2017编译。

方法 :

  1. 启动 Powershell 命令提示符
  2. 加载我的程序集Add-Type -Path <mydll>
  3. 调用[rdrw.Random]::Next(4)
  4. 在结果中加一

一个可能很重要的细节:我不经常要求这个数字,所以抽签之间有一段时间,通常是在一段时间没有使用 RNG 时(至少一小时)。

是的,这是一个惰性算法,我不想用例外来打扰自己。

算法如下:

感谢您的见解!

0 投票
1 回答
2262 浏览

c - 错误:无效的“asm”:%-字母后缺少操作数编号

我正在尝试编写这个内联程序集,它使用rdrand指令返回一个随机数。该数字存储在eax寄存器中,然后移动到rng_num变量中。但我得到了标题中的错误。

这是原始的 x86 Intel 语法代码:

0 投票
1 回答
147 浏览

random - AMD FX 8350 上是否有 rdrand 指令?

我正在评估将模拟转移到 FX 8350 的可行性。是否有关于 AMD FX 8350 上英特尔 BullMountain 的 rdrand 指令可用性的文档(如果没有,一种解决方法)?

提前致谢

0 投票
1 回答
118 浏览

x86 - 生成一个随机的 32 位数字以存储在 64 位寄存器中

我想生成一个随机的 32 位数字。我正在使用rdrand这个。但是,我遇到了一些问题。由于这个数字不能超过 32 位,所以我正在做rdrand eax. 这是问题出现的地方:

  • 我需要能够在 64 位寄存器中引用这个 32 位数字,因为我的代码库的其余部分使用 64 位寄存器。我想我可以rax用 axor自己清除,然后只用rdrand eax. 然后我可以看一下rax,一半最多是32位数字,另一半被清除。

  • 当我rax与最大 32 位数字大小2147483647进行比较时,我得到的结果非常不一致。有一半的时候,退出码是 1,这意味着实际上里面的数字rax小于 32 位。但另一半时间我得到 0。几乎就像结果eax并不总是小于或等于2147483647 ,考虑到文档所说的内容,这是出乎意料的。

有谁知道我的思维过程出了什么问题?我很想知道。(注意:我在 macOS 上使用 Clang 进行组装。)