random - 随机函数中不可预测的含义是什么?

标签 random cryptography semantics random-seed

从语言上来说,我理解不可预测的含义。但是,在这段时间里,我经常在某些情况下发现“可预测”这个词。如果我进入一个有多个主题的区域,我通常会找到这些词,例如:

  1. Math.random vs crypto.getRandomValues in Javascript
  2. Random vs Secure Random numbers
  3. Etc

那么随机函数中的不可预测究竟意味着什么?那么什么条件下随机函数才能被称为“不可预测随机函数”呢?

最佳答案

如果一个值是随机的,则意味着知道序列中的前一个值无法为您提供有关下一个值的信息。

如果一个值是不可预测的,那么就没有“实用”的方法来确定下一个值。它通常是比随机更强的主张。

(这里的“实用”一词是指做一些工作。它通常意味着“在关于攻击者可以做什么的一组规则内。”如果攻击者可以完全访问 CPU 和 RAM,那么没有什么是“不可预测的, “但我们通常对他们没有这个的情况感兴趣。)

作为差异的一个例子,pi 的数字被认为是随机的(我们实际上并不知道这一点,但它似乎是正确的)。这意味着除了偶然之外,没有其他方法可以更好地猜测 pi 的第 10,000 位数字。这是随机的。但这是完全可以预见的。任何人都可以轻松确定其值(value)。因此,pi 的数字是一个完美的随机序列,甚至可以有效地用于驱动随机性足够的游戏行为,但它不会是一个安全随机序列,并且对于密码学来说毫无用处目的。

如果我去random.org (它提供了非常好的随机数),并生成了一个值,但随后重复使用它,it would be a random value but also completely predictable .

在生成 PRNG 种子时,可能会出现这种可预测性。虽然 PRNG 可以生成出色的随机值,但如果其种子是可预测的,则整个序列将是已知的。 (这里的“可预测”并不意味着 100% 确定;任何比偶然性更好的确定性就足够了。)

作为此问题的一个示例,网络设备面临着重大挑战,即在首次启动时生成不可预测的种子,特别是在附近的网络设备同时重新启动的情况下。无论您使用什么过程来创建随机值,都可以轻松落入一小组可能值(与所有可能值相比“小”;它可能仍然有数百万,但这在密码学中并不是很多值)。在高安全性系统中,这个问题可能需要付出巨大的努力才能解决。

大多数加密系统没有定义如何生成这些初始的、不可预测的值。它们只是系统的假设输入。

关于random - 随机函数中不可预测的含义是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61945765/

相关文章:

javascript - 使用 JavaScript 进行基本的 HTML 布局

javascript - 如何将琐事测验的答案随机放置在按钮槽中

android - 不带逗号的拆分字符串

hash - 哈希算法 SHA-2 和 SHA-3 有什么区别?

c - Bison/Yacc 中的 For 循环语义

python - Gensim Doc2Vec 为模型生成大文件

在R中反复洗牌

java - 基本的随机掷骰子 Java

java - 在java中使用模式ctr解密aes加密字节

android - 错误填充异常 : Blocktype mismatch: 0