Ank*_*ava 4 encryption cryptography objective-c entropy ios
我一直使用UUIDString作为存储在我的iPAD上的文件的加密密钥,但第三方在我的应用程序上完成的安全审查提示如下.
随着应用程序的启动,生成全局数据库密钥并将其存储在密钥链中.在生成期间,使用由iOS提供的类NSUUID的方法UUIDString.此函数生成由字母A到F,数字和连字符组成的随机字符串,并且不必要地限制密钥空间,从而导致熵减弱.由于密钥仅由应用程序逻辑使用,并且不必由个人读取,理解或处理,因此不需要将密钥空间限制为可读字符.因此,SecRandomCopyBytes应使用via ()生成的随机256位密钥作为主密钥.
现在我已经搜索了很多并尝试了一些代码实现,但还没找到确切的东西.我尝试过的:
NSMutableData* data = [NSMutableData dataWithLength:32];
int result = SecRandomCopyBytes(kSecRandomDefault, 32, data.mutableBytes);
NSLog(@"Description %d",result);
Run Code Online (Sandbox Code Playgroud)
我的理解是,这应该给我一个整数,我应该将它转换为NSString并使用它作为我的键,但我很确定这不是这里所需要的,并且上述方法总是将结果给出为0.我完全迷失在这里,任何帮助表示赞赏.
谢谢.
该结果的SecRandomCopyBytes应该始终为0,除非有一些错误(我不能想象为什么这可能发生的),然后结果将是-1.你不会要转换的是成的NSString.
你想要得到的东西是写入可变字节部分的随机字节,这就是你将用作"主密钥"而不是UUID字符串的东西.
我这样做的方式是:
uint8_t randomBytes[16];
int result = SecRandomCopyBytes(kSecRandomDefault, 16, randomBytes);
if(result == 0) {
NSMutableString *uuidStringReplacement = [[NSMutableString alloc] initWithCapacity:16*2];
for(NSInteger index = 0; index < 16; index++)
{
[uuidStringReplacement appendFormat: @"%02x", randomBytes[index]];
}
NSLog(@"uuidStringReplacement is %@", uuidStringReplacement);
} else {
NSLog(@"SecRandomCopyBytes failed for some reason");
}
Run Code Online (Sandbox Code Playgroud)
使用UUIDString对我来说足够安全,但听起来你的第三方安全审计公司正在努力证明他们的费用是合理的.
编辑:因为我现在开始收集downvotes因为Vlad的替代答案我不能删除我的(因为它仍然有可接受的复选标记),这是我的代码的另一个版本.我正在用16个随机字节(在转换为Hex时加倍).
| 归档时间: |
|
| 查看次数: |
8258 次 |
| 最近记录: |