ios – Keychain – 安全数据存储

ios – Keychain – 安全数据存储,第1张

概述我正在开发一个带钥匙串实现的应用程序.我能够创造&将数据保存到钥匙串中.我正在使用Apple提供的 Keychain Wrapper classes. 根据要求,我必须在KeyChain中实现最好的安全性(安全团队指出了失误,例如它在Jail-broken设备上的可访问性). 有人可以指点我吗? 我还在应用程序中实现了keychain long返回使用你引用的相同Wrapper,当然还有很多修改. 我正在开发一个带钥匙串实现的应用程序.我能够创造&将数据保存到钥匙串中.我正在使用Apple提供的 Keychain Wrapper classes.

根据要求,我必须在KeyChain中实现最好的安全性(安全团队指出了失误,例如它在Jail-broken设备上的可访问性).

有人可以指点我吗?

解决方法 我还在应用程序中实现了keychain long返回使用你引用的相同Wrapper,当然还有很多修改.

基本上Keychain非常安全.根据Apple的说法,它是一个加密容器,可以保存多个应用程序的安全信息,这意味着当钥匙串被锁定时,没有人可以访问其受保护的内容.

在iOS中,只有创建钥匙串的应用程序才能访问它.
根据Apple的文档,iOS可以选择内存缓存或磁盘缓存.

但是从iOS 4.xx开始,它只是磁盘缓存(不知道为什么),因此总是创建一个
sqlite DB,其中存储钥匙串中的所有数据,对应于特定的标识符.

sqlite DB可以在root或Jail-broken设备上被黑客攻击.

保护钥匙串

1在添加或添加安全关键字“kSecAttrAccessibleWhenUnlockedThisDeviceOnly”时
  更新方法“SecItemUpdate”&的钥匙串中的数据“SecItemAdd”.

就像是 :-

- (voID)writetoKeychain{    NSDictionary *attributes = NulL;    NSMutableDictionary *updateItem = NulL;    Osstatus result;    if (SecItemcopyMatching((CFDictionaryRef)genericPasswordquery,(CFTypeRef *)&attributes) == noErr)    {        updateItem = [NSMutableDictionary dictionaryWithDictionary:attributes];        [updateItem setobject:[genericPasswordquery objectForKey:(ID)kSecclass] forKey:(ID)kSecclass];        NSMutableDictionary *tempCheck = [self dictionaryToSecItemFormat:keychainItemData];        [tempCheck removeObjectForKey:(ID)kSecclass];#if TARGET_IPHONE_SIMulATOR        [tempCheck removeObjectForKey:(ID)kSecAttrAccessGroup];#endif        [updateItem setobject:(ID)kSecAttrAccessibleWhenUnlockedThisDeviceOnly forKey:(ID)kSecAttrAccessible];        result = SecItemUpdate((CFDictionaryRef)updateItem,(CFDictionaryRef)tempCheck);        NSAssert( result == noErr,@"Couldn't update the Keychain Item." );        CFRelease(attributes);    }    else    {        [keychainItemData setobject:(ID)kSecAttrAccessibleWhenUnlockedThisDeviceOnly forKey:(ID)kSecAttrAccessible];        result = SecItemAdd((CFDictionaryRef)[self dictionaryToSecItemFormat:keychainItemData],NulL);        NSAssert( result == noErr,@"Couldn't add the Keychain Item." );    }}

2在添加到Keychain之前加密数据.我使用AES-128加密.
   还要确保用于加密的密钥是RSA密钥.(由SSL Web服务发送).

注意: – 钥匙串数据存储在iPhone上的/private/var/Keychains/keychain-2.db文件中.

希望它能帮到你.

总结

以上是内存溢出为你收集整理的ios – Keychain – 安全数据存储全部内容,希望文章能够帮你解决ios – Keychain – 安全数据存储所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1014832.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-22
下一篇2022-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存