【问题标题】:How to get truly random data, not random data fed into a PRNG seed like CSRNG's do?如何获得真正的随机数据,而不是像 CSRNG 那样输入 PRNG 种子的随机数据?
【发布时间】:2020-06-14 16:12:52
【问题描述】:

据我了解,像RNGCryptoServiceProvider 这样的 CSRNG 仍然通过 PRNG 传递真正随机的用户数据,如鼠标移动等,以对输出进行排序并使其均匀分布。这些位需要完全独立。

(这是针对理论上无限计算能力的攻击者) 如果 CSRNG 获取 1KB 真正的随机数据并将其扩展为 1MB,那么攻击者所要做的就是生成 1KB 数据的每个组合,然后对其进行扩展,然后查看哪个 1MB 数据生成一个一次性填充,返回合理的英文输出.我在某处读到,如果一次性键盘在 RNG 中的任何地方都有 PRNG,它只是一种美化的流密码。我想知道真正随机的起始数据是否足够大,可以直接使用而不是加密扩展。我需要真正的随机输出来进行一次性填充,而不仅仅是加密安全的 RNG。或者也许有其他方法可以以某种方式获得真正的随机数据,以便所有位相互独立。我想用鼠标坐标异或几秒钟,然后可能是 Environment.TickCount 的最后一个数字,然后可能是麦克风输入(1234)为好。但是,正如一些人在 stackoverflow 上指出的那样,我真的应该让操作系统来处理这一切。不幸的是,这是不可能的,因为使用了 PSRNG。我想避免使用硬件解决方案,因为这是一个易于使用的程序,并且也不使用 RDRAND,因为它也使用 PRNG(除非 RDRAND 可以在通过 PRNG 之前返回真正的随机数据??) .如果这样的事情是可能的,将不胜感激;我已经为此工作了数周,我的印象是 RNGCryptoServiceProvider 足以满足一次性使用的需求。谢谢。

(旁注:有人说对于大多数加密函数,您不需要真正的熵,只需要不可预测性。对于一次性填充,它必须是随机的,否则它不是一次性填充。)

【问题讨论】:

  • 你想多了。据任何人所知,RNGCryptoServiceProvider 足以满足一次性使用的需求。你的论点真正表明一次性垫是一种效率极低的设计,这就是为什么不再使用它们的原因。相反,请使用经过充分研究的加密算法,例如 AES。
  • RNGCryptoServiceProvider 对于大多数事情来说已经足够了,但它仍然有一个使用随机数据作为种子的 PRNG。目前,只要您亲自交付密钥文件,我的一次性便笺实现就很好;它还包括一个 HMAC 以确保真实性。但是,对于一次性填充,所有位都必须是独立的,否则它“只是一个美化的流密码”。我正在寻找一种可以保证在未来十年、50 年或更长时间内安全的实施。没有人会使用它,但我喜欢制作任何人都无法打破的挑战。
  • 好吧,我一点也不想让你气馁,请继续思考和尝试。安全性很复杂,加密可能会以微妙的方式失败。例如,您说您包含一个 HMAC。除非您小心 HMAC 可能会使您希望通过一次性便笺实现的“完美安全”保证失效。
  • HMAC 具有内置于 c# 的功能,因此确保正确完成并不难。只要确保键输入正确完成。谢谢鼓励!

标签: random cryptography entropy


【解决方案1】:

如您所知,“真正随机”意味着每个位独立于其他所有内容,并且是均匀分布的。然而,这个理想在实践中很难实现,如果不是不可能的话。一般来说,在实践中获得“真正随机数据”的最接近的方法是从nondeterministic sources 中收集难以猜测的位,然后将这些位压缩成一个随机数据块。

要使这种接近“真正随机的数据”涉及到许多问题,包括:

  1. 源必须是不确定的,也就是说,它们的输出不能由它们的输入确定。非确定性来源的例子包括输入设备的时序;热噪声;以及麦克风和摄像头输出记录的噪音。
  2. 来源的输出一定很难猜到。这更正式地称为,例如每 64 位输出有 32 位熵。然而,测量熵绝非易事。如果您需要 1 MB(800 万位)的真正随机数据,则需要具有至少 800 万位熵的数据(实际上根据来源的不同,其长度会超过 1 MB),然后将数据以某种方式转换为 1 MB 的数据,同时保留该熵。
  3. 来源必须相互独立。
  4. 应该有两个或多个独立的来源。这是因为不可能仅从一个来源中提取完全随机性(参见 McInnes 和 Pinkas 1990)。另一方面,从三个或更多独立来源中提取随机性相对来说是微不足道的,但仍然存在选择合适的随机性提取器的问题,并且对随机性提取器的调查超出了此答案的范围。

一般来说,出于随机数生成的目的,可用的资源越多越好。

参考:

  • McInnes, J. L. 和 Pinkas, B.(1990 年 8 月)。关于弱随机密钥的私钥密码学的不可能性。在密码学理论与应用会议上(第 421-435 页)。

【讨论】:

  • 组合多个来源(如鼠标位置数据、键盘按下延迟、热信息等)是否仍能满足一次性键盘的要求?例如,所有字节真的彼此不相关吗?
猜你喜欢
  • 2023-03-15
  • 1970-01-01
  • 2021-10-28
  • 1970-01-01
  • 2020-12-15
  • 1970-01-01
  • 2011-07-02
  • 2017-06-24
  • 2012-04-24
相关资源
最近更新 更多