【问题标题】:What is the meaning of the UNPREDICTABLE in random function?随机函数中的 UNPREDICTABLE 是什么意思?
【发布时间】:2020-09-08 17:56:49
【问题描述】:

从语言上我理解unpredictable的意思。但是,在这段时间里,我经常在某些情况下发现predictable这个词。如果我进入一个有多个主题的区域,我通常会找到这些词,例如:

  1. Math.random 与 Javascript 中的 crypto.getRandomValues
  2. 随机与安全随机数

那么 unpredictable 在随机函数中究竟是什么意思呢?那么随机函数被称为“不可预测随机函数”的条件是什么呢?

【问题讨论】:

  • 通俗地说,这意味着,给定算法和所有先前的输出,您无法预测下一个输出,而不仅仅是猜测。
  • 这个问题最好在 crypto.stackexchange.com 上问。
  • 您似乎发布了敏感/私人信息。请重置您的密码和/或撤销 API 密钥和令牌,因为它们在互联网上发布时被视为已泄露。如果发布了个人身份信息,请edit 删除信息,然后标记您的帖子以供版主编辑修订。

标签: random cryptography semantics random-seed


【解决方案1】:

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

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

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

作为差异的一个例子,pi 的数字被认为是随机的(我们实际上并不知道这一点,但它似乎是真的)。这意味着没有办法比机会更好地猜测圆周率的第 10,000 位。这是随机的。但这是完全可以预测的。任何人都可以轻松确定其价值。所以 pi 的数字是一个非常好的随机序列,甚至可以有效地用于驱动游戏在随机性足够的情况下的行为,但它不是一个安全随机序列,对密码学毫无用处目的。

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

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

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

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

【讨论】:

    【解决方案2】:

    Predictable 是指种子本身来自可以预测的事物,例如 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)
    

    这里的输出是一样的。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-19
      • 1970-01-01
      • 1970-01-01
      • 2018-08-27
      • 2018-02-16
      • 2015-09-25
      • 1970-01-01
      • 2011-05-09
      相关资源
      最近更新 更多