SecRandomCopyBytes有多好?
如果它与OS X实现不同,我主要对在iOS上实现SecRandomCopyBytes
感兴趣。 (我认为它确实存在,因为移动设备比台式计算机拥有越来越多的现成熵源。)
有没有人有关于的信息:
- SecRandomCopyBytes从哪里获得熵?
- 什么率它可以产生好的随机数?
- 如果没有足够的熵,它会阻塞还是立即失败?
- 它符合FIPS 140-2标准,还是已包含在任何其他官方认证中?
文档没有涵盖这些要点。
我只能找到听到的评论,说它使用来自无线电,指南针,加速度计和其他来源的信息,但实际上代表Apple的人没有引用。
/ dev / random由SecurityServer的entropy提供。 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; } }
-
根据iOS文档 ,
SecRandomCopyBytes
只是/dev/random
PRNG的包装器。 在大多数Unix的实现中,这个文件是一个阻塞的PRNG; 但是,根据这个页面和文档 ,OSX / iOS上的/dev/random
在大多数其他Unix实现中的实际function类似于/dev/urandom
,因为它不会阻塞。 -
由于它不会阻塞,您应该能够使用简单的测试快速确定它生成随机数的速率。
-
/dev/random
应该尝试从尽可能多的源中获取熵。 因此,完全有理由相信在iOS上它使用无线电和加速度计作为熵的来源; 但是,我找不到任何这方面的资料, 文档只说它来自“内核的随机抖动测量” 。 -
看来iPhone目前正在通过FIPS 140-2validation。
iOS SDK明确指出此函数使用/dev/random
的输出来检索安全随机数据。 由于iOS是OSX的移植版本,它本身就是Free-BSD的核心。
如果您搜索/dev/random
和OSX,您会发现有几个post(我的存在)是关于OSX中的熵收集的问题:
http://www.mail-archive.com/cryptography@metzdowd.com/msg00620.html
因此我希望/dev/random
效果不会好于OSX中的那个。
- 如何获取viewController的managedObjectContext,而不是从appDelegate获取?
- AudioKit:我可以在不调用AudioKit.stop()的情况下禁用AKMicrophone吗?
- 我们如何告诉CFStream使用一组锚证书?
- 如何在Core Data中使用fetchRequest谓词
- 学习Swift和iOS开发:一系列。 – devslopes
- 如何在iOS中的特定时间触发每日本地通知
- 当应用程序启动时,Qt for iOSlocking正面。 (qiosscreen.mm断言)
- NSLayoutManager:调用setLocation(_:forStartOfGlyphRange :)将禁用整个string中的字距?
- UIWebView – 使用链接的资源加载本地.html文件