使用updateApplicationContext发送钥匙串值是否安全?

16

在watchOS 2中,不再存在共享的钥匙串。

如果我想将一个钥匙串值从iOS应用发送到Watch应用,通过WCSession updateApplicationContext发送它是否安全?


“safe”是什么意思? - ccjensen
我所说的“安全”,是指黑客无法获取密码等信息。 - david72
基于@ccjensen的此评论,OP对此方面存在疑虑 - user4151918
@PetahChristian 这很有道理,不过可能只有苹果公司才能回答这个问题。 - ccjensen
@david72 根据上述情况,你最好的机会是联系苹果。也许可以提交一个错误报告? - ccjensen
3个回答

7

是的。

如果您的钥匙串值不变,而您反复更新应用程序上下文,则可能希望安排仅发送一次该值(以便手表添加到其钥匙串),而不是重复发送钥匙串值。

一位苹果工程师在开发者论坛上讨论了使用手表连接发送钥匙串项:

如果您在手机上拥有要在手表上访问的数据,则您的应用程序可以使用WatchConnectivity传输所需的特定数据和钥匙串项。 Apple Watch上的钥匙串包含与配对iPhone上的钥匙串不同的条目集,因此,如果您需要在两个位置都需要某些内容,则可以为每个设备生成一次或使用WatchConnectivity在它们之间传输它。

更新:

在watchOS 2中,Watch Connectivity是在配对的手机和手表之间传输数据的机制。根据iOS安全指南,设备之间的通信是加密的。

关于字典是否可以在内存中访问,或者在您的扩展程序接收到它之前如何持久化,我认为您必须依赖于苹果公司来解决可能存在的漏洞。
可以合理地说,在您的扩展程序唤醒、接收更新并将值存储在钥匙串之前,该信息的安全性可能不如钥匙串。

1
值可能会发生变化,这就是为什么我更喜欢使用updateApplicationContext。但是这个字典 - 它存储在一个安全的地方,黑客无法获取数据吗? - david72

6
根据苹果安全准则:
密码数据保护 许多应用程序需要处理密码和其他短但敏感的数据,例如密钥和登录令牌。iOS钥匙串提供了一种安全存储这些项目的方式。钥匙串被实现为存储在文件系统上的SQLite数据库。只有一个数据库;securityd守护进程确定每个进程或应用程序可以访问哪些钥匙串项。使用密钥串访问API会导致调用守护程序,该程序查询应用程序的“keychain-access-groups”,“application-identifier”和“applicationgroup”授权。与将访问限制为单个进程不同,访问组允许在应用程序之间共享钥匙串项。只能在相同开发者的应用程序之间共享钥匙串项。这通过要求第三方应用程序使用由iOS开发人员计划通过应用程序组分配给它们的前缀来管理。通过代码签名、配置文件和iOS开发人员计划来执行前缀要求和应用程序组的唯一性。
使用类结构保护键盘数据,类似于文件数据保护中使用的结构。这些类具有与文件数据保护类等效的行为,但使用不同的密钥,并且是命名不同的API的一部分。
Apple Watch使用iOS中内置的安全功能和技术来保护设备上的数据以及与配对的iPhone和互联网之间的通信。这包括数据保护和钥匙串访问控制等技术。用户的密码也与设备UID相结合,创建加密密钥。使用带外(OOB)过程将Apple Watch与iPhone配对是安全的,以交换公共密钥为开始,然后是BTLE链路共享密钥。 Apple Watch显示一个动画图案,由iPhone上的摄像头捕获。该图案包含用于BTLE 4.1带外配对的编码密钥。如果需要,将使用标准的BTLE Passkey Entry作为备用配对方法。一旦建立了BTLE会话,Apple Watch和iPhone使用从IDS适应的过程交换密钥,如本文iMessage部分所述。一旦交换了密钥,Bluetooth会话密钥被丢弃,并且Apple Watch和iPhone之间的所有通信都使用IDS进行加密,加密的BTLE和Wi-Fi链接提供第二层加密。密钥滚动每隔15分钟一次,以限制暴露窗口,如果流量受到威胁。为支持需要流数据的应用程序,使用本文FaceTime部分描述的方法提供加密,利用配对的iPhone提供的IDS服务。Apple Watch实现硬件加密存储和基于类别的文件和钥匙串项保护,如本文数据保护部分所述。还使用访问控制的密钥包来控制钥匙串项。用于手表和iPhone之间通信的密钥也使用基于类别的保护进行了保护。当Apple Watch不在蓝牙范围内时,可以使用Wi-Fi。除非配对的iPhone具有连接凭据,否则Apple Watch将无法加入Wi-Fi网络,配对的iPhone会自动向手表提供已知网络列表。通过按住侧面按钮可以手动锁定Apple Watch。此外,使用运动启发式尝试在设备从手腕上取下后不久自动锁定设备。锁定时,无法使用Apple Pay。如果在设置中关闭了手腕检测提供的自动锁定,则禁用Apple Pay。可以使用iPhone上的Apple Watch应用程序关闭手腕检测。此设置也可以使用移动设备管理强制执行。配对的iPhone也可以解锁手表,前提是戴着手表。这是通过建立由配对期间建立的密钥进行身份验证的连接实现的。iPhone发送密钥,手表使用它来解锁其数据保护密钥。 iPhone不知道手表密码,也不会传输。可以使用iPhone上的Apple Watch应用程序关闭此功能。Apple Watch一次只能与一个iPhone配对。与新iPhone配对会自动删除Apple Watch上的所有内容和数据。在配对的iPhone上启用查找我的手机也会在Apple Watch上启用激活锁定。激活锁定使失去或被盗的Apple Watch更难以使用或出售。激活锁定需要用户的Apple ID和密码才能取消配对、擦除或重新激活Apple Watch。

钥匙串服务使用便利性 https://developer.apple.com/library/ios/documentation/Security/Conceptual/keychainServConcepts/02concepts/concepts.html


钥匙串服务是苹果公司提供的一种安全存储机制,可用于存储敏感信息,例如密码和证书。此外,它还可以自动管理密码,并允许与其他应用程序共享密码。
通过钥匙串服务,用户可以轻松地在设备之间同步密码,并且不需要记忆多个密码。这极大地方便了用户,并增强了他们对应用程序的信任。

4

苹果的回复:

应用程序的内容在传输过程中是加密的。否则,内容存储在应用程序的容器中,这提供了容器固有的安全性。

这里是安全白皮书的链接。 https://www.apple.com/business/docs/iOS_Security_Guide.pdf

关于传输部分,您应该查看“应用程序安全”下的“Apple Watch”部分。关于容器安全的相关部分,您应该查看“加密和数据保护”下的“文件数据保护”部分。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接