随机函数中的UNPREDICTABLE是什么意思?

时间:2020-05-22 00:07:16

标签: random cryptography semantics random-seed

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

    Java中的
  1. Math.randomcrypto.getRandomValues
  2. 随机数与安全随机数
  3. 等等

那么不可预测在随机函数中到底意味着什么?那么将随机函数称为“ 不可预测 随机函数”的条件是什么?

2 个答案:

答案 0 :(得分:2)

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

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

(这里的“实用”一词正在做一些工作。它通常表示“在有关攻击者可能做什么的一组规则中。”如果攻击者拥有对CPU和RAM的完全访问权限,则没有什么是“不可预测的, “但我们通常对他们没有的情况感兴趣。)

作为区别的一个例子,pi的数字被认为是随机的(我们实际上并不知道,但是看起来是正确的)。这意味着,没有办法比机会更好地猜测pi的第10,000位数字。这是随机的。但这是完全可以预测的。任何人都可以轻松确定其价值。因此pi的数字是一个很好的随机序列,甚至可以有效地用于驱动随机性足够的游戏行为,但它不会是 secure 随机序列,并且对于密码学来说是无用的目的。

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

当产生PRNG的种子时,可能会发生这种可预测性。尽管PRNG可以生成出色的随机值,但如果其种子是可预测的,则整个序列将是已知的。 (这里的“可预测”并不意味着具有100%的确定性;任何确定性要好于机会就足够了。)

作为此问题的一个示例,联网设备在首次启动时会产生巨大的挑战,尤其是如果附近的联网设备同时重新启动时,会生成无法预测的种子。无论您使用什么过程来创建随机值,都可以轻易地将其归为一小部分可能的值(与所有可能的值相比为“小”;它可能仍在数百万之内,但是在密码学中并不是很多值)。这个问题可能需要付出很大的努力才能在高安全性系统中解决。

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

答案 1 :(得分:0)

可预测是种子本身来自可以预测的对象,例如python random 库中的时间:

import random, time

random.seed(time.time())
r1 = random.randrange(1e49, 1e50-1)

random.seed(time.time())
r2 = random.randrange(1e49, 1e50-1)

print(r1)
print(r2)

此处的输出将相同。

不可预测是指随机数具有很高的熵,因此没有人能真正找到初始种子并跟踪所使用的随机算法。