有可能从iPhone的安全飞地获得真正的随机数字吗?我读到安全飞地包括一个TRNG.我不确定是否有可能使用它来获取随机数字,或者它是否仅用于安全飞地的内部使用.有什么主意吗?

我读了一些关于这个安全飞地的苹果官方文档,上面说它确实有一个TRNG,但还没有找到任何代码样本或任何关于如何使用它的信息,如果可能的话.

推荐答案

通过CryptoKit模块直接访问安全飞地,但这只能用于通过SecureEnclave.P256命名空间的NIST P-256签名操作. 没有通过安全飞地expose 的direct TRNG功能.

在SWIFT中,使用SystemRandomNumberGenerator by default生成随机值(例如当您呼叫Bool.random()时). 文档指出,这些数据的实际来源取决于平台,但在Apple平台上,内部使用的是arc4random_buf(3),而arc4random_buf(3)本身就是种子.

这意味着从SystemRandomNumberGenerator生成的任何随机数据最终都来自getentropy(2),getentropy(2)从内核的CPRNG获取数据. 这个CPRNG是来自安全飞地的硬件TRNG(以及其他来源)的seeded,取决于可用性.

尽管TRNG是内核的实现细节,但您可以将内核的CPRNG视为随机数据的安全来源. 由于这一随机数据来源在Apple平台上的SWIFT中默认expose 于.random()个API,因此默认情况下可以期待高质量的随机数据.

Swift相关问答推荐

TabView中的视频播放器意外播放

数据不会被ARC删除在swift'

SWIFT Vapor控制台应用程序-操作无法完成.权限被拒绝

为什么要在SWIFT RandomAccessCollection协议中重新定义元素类型?

Swift 运算符中 inout 的行为

是否可以限制 ExpressibleByIntegerLiteral struct 的初始值?

使用`JSONSerialiser`时,省略通用可选项

在SwiftUI中使用ForEach循环来显示字典项的键和值在Form视图中

如何为等待函数调用添加超时

为什么 String.contains 在我导入 Foundation 时表现不同?

自定义 DispatchQueue 服务质量

Swift 中的Combine和didSet有什么区别?

为什么 SwiftUI 不在工具栏菜单中反映 @State 属性值?

SwiftUI:异步网络请求后@State 值不更新

类型 '()' 不能符合 View (除非它肯定是 View,这次没有恶作剧)

调用从 SwiftUI 视图传递到 PageViewController.Coordinator 的函数

不支持用作符合协议 AnyObject 的具体类型

将强制向下转换视为可选将永远不会产生零

使用 Swift 以编程方式自定义 UITableViewCell

如何在 SwiftUI Segmented Picker 中更改选定的段 colored颜色