SecRandomCopyBytes有多好?

Jam*_*mes 25 security entropy ios

如果它与OS X实现不同,我主要SecRandomCopyBytesiOS上的实现感兴趣.(我认为它确实如此,因为移动设备比台式计算机拥有越来越多的现成熵源.)

有没有人有关于的信息:

  1. SecRandomCopyBytes从哪里获得熵?
  2. 什么率它可以产生好的随机数?
  3. 如果没有足够的熵,它会阻塞还是立即失败?
  4. 它符合FIPS 140-2标准,还是已包含在任何其他官方认证中?

文档没有涵盖这些要点.

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

jm6*_*666 20

/ 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;
    }
}
Run Code Online (Sandbox Code Playgroud)


Blu*_*eft 5

  1. 根据iOS文档SecRandomCopyBytes它只是/dev/randomPRNG 的包装。在Unix的大多数实现中,此文件是阻塞的PRNG。但是,根据此页面文档/dev/random在OSX / iOS /dev/urandom上,它实际上不会像大多数其他Unix实现中那样起作用,因为它永远不会阻塞。

  2. 由于它不会阻塞,因此您应该能够使用简单的测试快速确定它生成随机数的速率。

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

  4. 看来,iPhone是目前在这个过程中被FIPS 140-2验证。