Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios SecRandomCopyBytes有多好?_Ios_Security_Entropy - Fatal编程技术网

Ios SecRandomCopyBytes有多好?

Ios SecRandomCopyBytes有多好?,ios,security,entropy,Ios,Security,Entropy,我主要对SecRandomCopyBytes在iOS上的实现感兴趣,如果它与OSX实现不同的话。(我认为确实如此,因为移动设备比台式计算机拥有越来越多的可用熵源。) 是否有人拥有以下信息: SecRandomCopyBytes从哪里获得熵 它能产生好的随机数的速率是多少 如果没有足够的熵可用,它会阻塞还是立即失效 是否符合FIPS 140-2标准,或是否已包含在任何其他官方认证中 本文件未涵盖这些要点 我只能找到Heard-say评论,它使用来自收音机、指南针、加速度计和其他来源的信息,但没有来

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

是否有人拥有以下信息:

  • SecRandomCopyBytes从哪里获得熵
  • 它能产生好的随机数的速率是多少
  • 如果没有足够的熵可用,它会阻塞还是立即失效
  • 是否符合FIPS 140-2标准,或是否已包含在任何其他官方认证中
  • 本文件未涵盖这些要点


    我只能找到Heard-say评论,它使用来自收音机、指南针、加速度计和其他来源的信息,但没有来自实际代表苹果的人的引用。

    iOS SDK明确指出,该函数使用
    /dev/random
    的输出来检索安全的随机数据。因为iOS是OSX的一个移植版本,它本身就是一个免费的BSD

    如果您搜索
    /dev/random
    和OSX,您会发现有几篇文章指出OSX中的熵收集存在问题(我的答案是):

    因此,我认为
    /dev/random
    的效果并不比OSX中的好

  • 根据,
    SecRandomCopyBytes
    只是
    /dev/random
    PRNG的包装器。在大多数Unix实现中,此文件是阻塞PRNG;然而,根据和,OSX/iOS上的/dev/random实际上在大多数其他Unix实现中的功能与/dev/urandom类似,因为它从不阻塞

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

  • /dev/random
    应该尝试从尽可能多的来源获取熵。因此,完全有理由相信,在iOS上,它使用无线电和加速计作为熵源;然而,我找不到这方面的任何来源,唯一的说法是它来自“内核的随机抖动测量”

  • 看来iPhone目前正在进行FIPS 140-2验证


  • /dev/random由SecurityServer的熵提供。SecurityServer从内核事件跟踪(kdebug)收集熵。该方法在《MacOSX内部结构:系统方法》一书中有描述。你可以在线阅读,例如

    熵收集的源代码如下:

    在xnu-1504.9.37(编写时OS X的最新版本)中,内核熵缓冲区仅使用计时信息填充在
    kernel\u debug\u 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;
        }
    }
    
    if(熵标志&(kdebug启用&kdebug启用熵)){
    if(kd_熵indx
    在OS X上阅读/dev/random很有趣,但确实增加了一些疑问!谢谢我正在努力寻找在iOS上实际收集熵的内核
    syscall
    实现:我有最新OS X的xnu内核版本(1504.9.37),但找不到iOS使用的版本(如果它是开源的?--但可能是开源的)?我编辑了您的答案,添加了我在xnu-1504.9.37中的发现:)