You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否从iPhone安全隔区(Secure Enclave)获取真随机数?

iPhone Secure Enclave的TRNG是否可调用生成真随机数?
  • Secure Enclave内置的硬件TRNG不提供直接的公开调用接口,开发者无法直接访问这个TRNG生成随机数。
  • 苹果推荐使用系统提供的SecRandomCopyBytes API来生成密码学安全的真随机数,这个API底层会自动利用Secure Enclave的TRNG(以及其他硬件随机源)生成高质量随机数,是官方认可的安全方案。

Swift 代码示例

import Security

func generateSecureRandomData(length: Int) -> Data? {
    var data = Data(count: length)
    let result = data.withUnsafeMutableBytes { buffer in
        guard let baseAddr = buffer.baseAddress else { return errSecInvalidPtr }
        return SecRandomCopyBytes(kSecRandomDefault, length, baseAddr)
    }
    return result == errSecSuccess ? data : nil
}

// 使用示例
if let randomData = generateSecureRandomData(length: 32) {
    print("生成的安全随机数(Base64):\(randomData.base64EncodedString())")
} else {
    print("随机数生成失败")
}

Objective-C 代码示例

#import <Security/Security.h>

NSData *generateSecureRandomData(NSUInteger length) {
    NSMutableData *data = [NSMutableData dataWithLength:length];
    OSStatus status = SecRandomCopyBytes(kSecRandomDefault, length, data.mutableBytes);
    return (status == errSecSuccess) ? data : nil;
}

// 使用示例
NSData *randomData = generateSecureRandomData(32);
if (randomData) {
    NSLog(@"生成的安全随机数(Base64):%@", [randomData base64EncodedStringWithOptions:0]);
} else {
    NSLog(@"随机数生成失败");
}

补充说明

SecRandomCopyBytes的kSecRandomDefault参数会自动选择系统中最安全的随机源,在支持Secure Enclave的设备上,会优先使用其内置的TRNG,无需开发者额外配置。这个API生成的随机数符合FIPS 140-2标准,适用于密码学相关场景(如密钥生成、加密初始化向量等)。

内容的提问来源于stack exchange,提问作者irrbloss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 19:45:32