【问题标题】:Is `arc4random` family of functions thread safe?`arc4random` 系列函数是线程安全的吗?
【发布时间】:2015-06-28 02:58:13
【问题描述】:

我特别关心 iOS 和 OS X。

如果不是,那么随机性的加密质量有哪些可能的替代品?

【问题讨论】:

  • 您的线程安全问题是什么?那不是线程安全怎么会导致问题呢?字节可能会混合?这将如何导致结果的随机性降低?
  • @zaph:竞争条件导致未定义的行为,其中包括各种奇怪的魔法。我可以想象的一种情况是两个线程得到完全相同的随机数。如果这是 AES-CTR 的初始化向量,则完全违背了安全保证。
  • @zaph 如果它不是线程安全的,那么从多个线程同时调用非线程安全的 PRNG 不仅可能是未定义的行为,而且还可能严重破坏其内部状态并中断所有未来结果的随机性。此外,如果 PRNG 没有受到此影响,它可能仍会为同时调用返回相同的结果,这将完全搞乱任何类型的多线程蒙特卡罗近似,例如……(尽管在这种使用中它通常更好为每个线程创建一个单独的 PRNG 实例,每个实例的种子都不同,以避免需要同步。)
  • 例如,即使我们假设 PRNG 内部状态的读/写是原子的,典型的函数会首先读取内部状态,操作它以产生下一个状态,将其写入内部状态,然后根据状态返回结果。如果没有同步,如果第二个调用在第一个调用有时间写入下一个状态之前进入,则两个调用都可以读取相同的内部状态;它们会产生相同的结果,这会在频繁重复时产生非常非随机的模式。

标签: ios macos unix random cryptography


【解决方案1】:

是的,arc4randomarc4random_uniformarc4random_bufarc4random_stirarc4random_addrandom 是线程安全的。

你可以在source code看到这个,也得到了苹果开发者关系人员的确认(但我暂时找不到链接)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-13
    • 2013-05-24
    相关资源
    最近更新 更多