钥匙串 - 安全数据存储

2023-12-07

我正在开发一个带有钥匙串实现的应用程序。我能够创建数据并将其保存到钥匙串中。我正在使用钥匙串包装类由苹果公司提供。

根据要求,我必须在钥匙串中实现尽可能好的安全性(安全团队指出了一些缺陷,例如在越狱设备上的可访问性)。

有人可以给我指导吗?


我还使用您引用的相同包装器在应用程序长 Back 中实现了钥匙串,但是,当然进行了很多修改。

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

在 iOS 中,只有创建钥匙串的应用程序才能访问它。 根据Apple的文档,iOS可以选择Memory-Cache或Disk Cache。

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

Sqlite DB 可以在 root 或越狱设备上被黑客攻击。

确保钥匙串安全

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 在添加到钥匙串之前对数据进行加密。我使用了 AES-128 加密。 还要确保用于加密的密钥是 RSA 密钥。(由 SSL Web 服务发送)。

注意:-钥匙串数据存储在/private/var/Keychains/keychain-2.dbiPhone 上的文件。

希望对您有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

钥匙串 - 安全数据存储 的相关文章

  • Crashlytics dSYM 错误

    我已经在我的 mac 上安装了 crashlytics 并想用它来设置我的项目 xcode 我通过复制代码创建运行脚本构建阶段 第一次构建的结果是 PhaseScriptExecution Run Script Users danielbo
  • NSString – 静态还是内联?有性能提升吗?

    如果我写的话会有任何性能提升吗 NSString helloStringWithName NSString name static NSString formatString Hello return NSString stringWith
  • 打乱 NSMutableArray 而不重复并显示在 UIButton 中

    在我看来 我有 12 个按钮 一个数组包含 6 个名称 我想在其中打印数组名称UIButton标题 这是我的代码 texts NSMutableArray alloc initWithObjects 1 2 3 4 5 6 nil UIBu
  • 网站在 iPhone 屏幕右侧显示空白区域

    我遇到问题http eiglaw com http eiglaw com iPhone 屏幕右侧显示约 25 像素宽的空白 边框 我在 stackoverflow 上研究了这个问题 这些帖子是相关的 但是当我尝试提供的各种解决方案时 我无法
  • 如何在 Firebase 控制台中使用 Apple 新的 APN .p8 证书

    随着最近 Apple 开发者帐户的升级 我面临着一个困难 在尝试创建推送通知证书时 它为我提供了 p8 证书 而不是可以导出到 p12 的 APNs 证书 Firebase 控制台仅接受 p12 证书 那么我如何从这些新的 p8 证书中获取
  • 如何使用 NSUserDefaults 在 Swift 中存储自定义类的数组?

    我有一个名为的自定义类Person当某人输入信息时 它会存储有关某人的各种属性 class Person Person dictionary variable var name String var age String var html
  • 带操作按钮的颤动本地通知

    我在我的 flutter 项目中尝试了 flutter 本地通知插件 它在简单通知上工作正常 但我需要带有操作按钮的通知功能 请帮助我或建议我实现此功能 不幸的是 flutter local notifications 插件尚不支持操作按钮
  • 如何使用AudioKit保存音频文件?

    我有音频文件 我给它做了一些效果 let pitchshifter AKPitchShifter self audioPlayer pitchshifter shift 10 AudioKit output pitchshifter 如果我
  • 覆盖层不与 UITableView 一起滚动 - iOS

    我有一个 UITableView 类 它使用以下方法在转到下一个屏幕时调用加载覆盖 问题是这个加载屏幕不随列表滚动 所以如果你滚动一点并单击某些东西 加载屏幕不会显示 因为它位于顶部 如何让加载屏幕始终保持在 UITableView 的顶部
  • 如何使用 Swift 使用 TouchID?

    Apple 为 iOS 8 的 TouchID 实现提供的文档采用 Objective C 语言 有 Swift 版本吗 Objective C IBAction touchIDAvailable UIButton touchIDAvail
  • Firebase 身份验证问题 - 通过电子邮件地址检查用户是否存在

    我在 Firebase 上创建了一个帐户 它有效 但现在我想阻止人们使用已存在的电子邮件地址创建帐户 这是代码 DatabaseManager shared userExists with email completion weak sel
  • 在 Objective C 的类方法中引用类本身

    我希望我没有跳过 ObjC 手册中的这一部分 但是是否可以从类的一个类方法中引用该类 就像在 PHP 中一样 您将使用 this 来引用当前实例 而 self 引用实例的类 this 的 ObjC 等价物将是 self 那么 PHP 的 s
  • 升级到 Xcode 4.3.1 后,自动设备配置选项消失了?

    自从升级到 Xcode 4 3 1 以来 这是我第一次发布版本 在查看我的配置文件是否是最新的时 我还注意到不再显示自动更新设备配置 即 它应该出现在该屏幕截图中的位置对我来说没有出现 如何将新设备添加到团队配置文件中 https stac
  • 推送动画,没有阴影和停电

    我有一个简单的iOS NavigationController基于应用程序 二UICollectionViews 相继 如果元素打开 第一个合集 被点击时 第二集 将被打开 非常简单 重要的提示 Both UICollectionViews
  • AVAssetExportSession 为零 iPhone 7 - Plus 模拟器

    AVAssetExportSession在 iPhone 6 及以下版本上运行良好 但在 iPhone 7 iPhone 7 Plus 模拟器上运行不佳 Xcode 8 0 这段代码return nil在exportSession中 当在i
  • insertNewObjectForEntityForName:

    我使用 Xcode xcdatamodel 文件编辑器设置了一个实体 我创建了一个名为 Person 的实体 添加了一些属性 然后生成了一个 m 文件来表示它 一切都很好 现在 当我去编写一行代码时 例如 Person person Per
  • UIImageJPEGRepresentation 在视网膜显示屏上提供 2x 图像

    我有这段代码 它创建一个图像 然后向其添加一些效果并缩小其大小以使其largeThumbnail UIImage originalImage UIImage imageWithData self originalImage thumbnai
  • PFQueryTableViewController 错误

    我正在遵循在线教程 使用 Parse 作为后端创建照片共享应用程序 我已经运行了两次教程 两次都从头开始创建应用程序 但在同一位置仍然出现相同的错误 我到处寻找解决方案 但仍然没有运气 我正在使用 PFQueryTableViewContr
  • Xcode 8 / Swift 3:“UIViewController 类型的表达式?未使用”警告

    我有以下函数 它之前编译得很干净 但在 Xcode 8 中生成警告 func exitViewController navigationController popViewController animated true UIViewCon
  • iOS - UITableViewCell 使文本加粗

    我有一个字符串 NSString userInfo James Johnson james 我想做的就是大胆James Johnson并保留 james正常字体 所以我尝试过的是使用NSAttributedString但为了完成这个过程 我

随机推荐

  • 根据文化显示正确的日期格式

    我正在使用弹出日历日期选择器的控件 这使用 JavaScript 函数 SetText 将文本框设置为给定日期 我无法更改日历控件本身的任何内容 但我可以覆盖 SetText 函数 SetText javascript 仅采用字符串格式的
  • 使用 jQuery 计算直接子 div 元素的数量

    我有以下 HTML 节点结构 div div div div div div div span span div 如何计算直系子女的数量foo 属于类型div 在上面的示例中 结果应该是两个 bar and baz foo gt div l
  • Collections.synchronizedList 和同步

    List
  • 我可以在 Android 中的 Viewpager 中使用水平滚动视图吗?

    能不能做一个横向的scrollviewAndroid 中的 viewpager 内部 The HorizontalScrollView应该滚动直到到达边缘 然后在下一次滚动时 应该加载下一个 viewpager 视图 您可以使自定义 xxV
  • 如何使用 CSV MIME 类型?

    在我正在开发的 Web 应用程序中 用户可以单击 CSV 文件的链接 没有为 mime type 设置标头 因此浏览器只是将其呈现为文本 我希望将此文件作为 csv 文件发送 以便用户可以直接使用 calc excel gnumeric 等
  • 我的 jar 文件无法加载图像

    我目前正在编写一个程序 需要将其作为 jar 发送给朋友 该程序需要加载图像才能正常工作 我希望将其全部包含在一个 jar 中 目前 它无法从可执行 jar 或当我通过命令行运行时运行 但它在 netbeans 中有效 这是我正在使用的代码
  • 构建 .net 程序集时可以指定模块版本 ID (MVID) 吗?

    我们有一些每天晚上自动构建的共享程序集 当没有对源代码进行任何更改时 我希望程序集二进制文件与以前的版本完全相同 然而 程序集之间似乎存在细微差别 我做了一些努力来确定两个版本之间的差异 我用了ildasm生成 il 版本 并比较生成的文本
  • jquery 下拉菜单不适用于悬停

    我的 jQuery 滑动功能不起作用这是 jquery 代码 和html div ul class drop li li ul div
  • 自动添加标签

    使用 MS Word 文档作为我们的源文件 是否有一种方法可以在上传的文档中包含特殊标记字符或 MS Word 字段 以便 Dousing 可以读取特殊标记或字段并将其替换为适当的标签和签名数据 这将允许我调整我们的文档创建软件 在我们需要
  • oracle内部加密

    在 dot net 中 我可以使用 dll 文件 这样我的代码就不会受到其他人的攻击 但是有什么方法可以让任何人都看不到我的一些程序和触发器的代码 You can 包装过程代码使其不可读 您无法包装触发器代码 但可以将触发器代码移动到存储过
  • 未捕获的类型错误:无法读取未定义的属性“顶部”

    如果这个问题已经得到解答 我深表歉意 我尝试寻找解决方案 但找不到适合我的代码的解决方案 我对 jQuery 还是个新手 我有两个不同类型的粘性菜单用于两个不同的页面 这是两者的代码 document ready function var
  • 未捕获的类型错误:对象 [object Object] 没有方法“覆盖”

    为什么我的覆盖 jquery 代码会出现此错误 这是代码 jQuery document ready function if the function argument is given to overlay it is assumed t
  • Azure B2C - 添加/更新身份验证联系信息

    我们正在使用 Azure B2C使用 MFA 重置密码策略 ADAL 用于身份验证和 Graph API 来创建 更新用户 当用户调用重置密码策略 通过应用程序上的链接 时 他首先需要提供发送验证码的电子邮件地址 然后 因为启用了 MFA
  • 有没有办法在 Android 中找到 HTTP 请求和响应的完整大小(用于数据使用跟踪)?

    我想跟踪我的应用程序的数据使用情况 但要做到这一点 我需要能够获取一个应用程序的完整大小HttpUriRequest and HttpResponse 简单地获取尺寸HttpEntity还不够 因为请求和响应都传输更多数据 标头 参数 传输
  • 数组值应该排序(字母、数字和特殊字符)

    我尝试像数组一样排序 如下所示 let students Set 23412334 234 fwv Kofi Abena Peter Kweku Akosua let sortedStudents students sorted print
  • Java 模块指令如何影响对模块的反射访问?

    根据https www oracle com corporate features understanding java 9 modules html Java Module系统引入了以下指令 出口 出口 到 uses 提供 与 打开 打开
  • 使用 jquery 替换页面加载时 DIV 的内容

    使用 jquery 有没有一种方法可以在页面加载时获取 DIV 的内容并用其他内容替换它 div class content Before div to div class content After div Use text conten
  • 如何知道 Jupyter Notebook 中正在运行哪个 Python?

    我在浏览器中使用 Jupyter Notebook 进行 Python 编程 我已经安装了 Anaconda Python 3 5 但我很确定 Jupyter 正在使用本机 python 解释器而不是 anaconda 运行我的 pytho
  • 如何让 ms-access 以其他用户身份连接到 ms-sql?

    如何让 ms access 以与其 Active Directory ID 不同的用户身份连接 通过 ODBC 到 ms sql 数据库 我不想在 ODBC 连接中指定帐户 我想在 ms access 端执行此操作以对用户隐藏它 在 ODB
  • 钥匙串 - 安全数据存储

    我正在开发一个带有钥匙串实现的应用程序 我能够创建数据并将其保存到钥匙串中 我正在使用钥匙串包装类由苹果公司提供 根据要求 我必须在钥匙串中实现尽可能好的安全性 安全团队指出了一些缺陷 例如在越狱设备上的可访问性 有人可以给我指导吗 我还使