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