SecRandomCopyBytes有多好?

时间:2011-04-29 13:52:15

标签: ios security entropy

如果它与OS X实现不同,我主要对 iOS SecRandomCopyBytes的实现感兴趣。 (我认为它确实存在,因为移动设备拥有的熵源比台式计算机越来越多。)

有没有人有关于的信息:

  1. SecRandomCopyBytes从哪里获得熵?
  2. 它可以产生多少好的随机数?
  3. 如果没有足够的熵,它会阻塞还是立即失败?
  4. 符合FIPS 140-2标准,还是已包含在任何其他官方认证中?
  5. 文档未涵盖这些要点。

    我只能找到听到的评论,说它使用来自无线电,指南针,加速度计和其他来源的信息,但实际上代表Apple的人没有引用。

3 个答案:

答案 0 :(得分:19)

/ dev / random由SecurityServer的熵提供。 SecurityServer从内核事件跟踪(kdebug)收集熵。该方法在“Mac OS X Internals.A Systems Approach”一书中有所描述。您可以在线阅读相关信息,例如http://flylib.com/books/en/3.126.1.73/1/

熵收集的源代码在这里:http://www.opensource.apple.com/source/securityd/securityd-40600/src/entropy.cpp

在xnu-1504.9.37(OS X编写时的最新版本)中,仅使用定时信息在kernel_debug_internal()中填充内核熵缓冲区。这是熵缓冲区写入的唯一位置。

if (entropy_flag && (kdebug_enable & KDEBUG_ENABLE_ENTROPY)) {
    if (kd_entropy_indx < kd_entropy_count) {
        kd_entropy_buffer [ kd_entropy_indx] = mach_absolute_time();
        kd_entropy_indx++;
    }

    if (kd_entropy_indx == kd_entropy_count) {
        /*
         * Disable entropy collection
         */
        kdebug_enable &= ~KDEBUG_ENABLE_ENTROPY;
        kdebug_slowcheck &= ~SLOW_ENTROPY;
    }
}

答案 1 :(得分:4)

  1. 根据iOS documentationSecRandomCopyBytes只是/dev/random PRNG的包装器。在大多数Unix的实现中,这个文件是阻塞的PRNG;但是,根据this pagethe documentation,OSX / iOS上的/dev/random实际上在大多数其他Unix实现中的功能类似/dev/urandom,因为它不会阻止。

  2. 由于它没有阻止,您应该能够使用简单的测试快速确定它生成随机数的速率。

  3. /dev/random应该尝试从尽可能多的来源获取熵。因此,完全有理由相信在iOS上它使用无线电和加速度计作为熵的来源;但是,我找不到任何这方面的资料,documentation仅表明它来自“内核的随机抖动测量”

  4. 目前看来iPhone正在in the process进行FIPS 140-2验证。

答案 2 :(得分:1)

iOS SDK明确指出此函数使用/dev/random的输出来检索安全随机数据。由于iOS是OSX的移植版本,它本身就是Free-BSD的核心。

如果您搜索/dev/random和OSX,您会发现有几个帖子(我的存在)是关于OSX中熵收集的问题:

http://www.mail-archive.com/cryptography@metzdowd.com/msg00620.html

因此我希望/dev/random的效果不会好于OSX中的那个。

相关问题