如果它与OS X实现不同,我主要对 iOS 上SecRandomCopyBytes
的实现感兴趣。 (我认为它确实存在,因为移动设备拥有的熵源比台式计算机越来越多。)
有没有人有关于的信息:
文档未涵盖这些要点。
我只能找到听到的评论,说它使用来自无线电,指南针,加速度计和其他来源的信息,但实际上代表Apple的人没有引用。
答案 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)
根据iOS documentation,SecRandomCopyBytes
只是/dev/random
PRNG的包装器。在大多数Unix的实现中,这个文件是阻塞的PRNG;但是,根据this page和the documentation,OSX / iOS上的/dev/random
实际上在大多数其他Unix实现中的功能类似/dev/urandom
,因为它不会阻止。
由于它没有阻止,您应该能够使用简单的测试快速确定它生成随机数的速率。
/dev/random
应该尝试从尽可能多的来源获取熵。因此,完全有理由相信在iOS上它使用无线电和加速度计作为熵的来源;但是,我找不到任何这方面的资料,documentation仅表明它来自“内核的随机抖动测量”。
目前看来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中的那个。