使用updateApplicationContext发送keychain值是否安全

在watchOS 2中,没有更多的共享密钥链。

如果我想将iOS应用程序中的钥匙串值发送到Watch应用程序,是否可以通过WCSession updateApplicationContext发送它?

根据Apple安全指南: –

钥匙串数据保护许多应用程序需要处理密码和其他短而敏感的数据位,例如密钥和登录令牌。 iOS钥匙串提供了一种存储这些物品的安全方式。 钥匙串实现为存储在文件系统上的SQLite数据库。 只有一个数据库; securityd守护程序确定每个进程或应用程序可以访问的钥匙串项。 密钥链访问API导致对守护程序的调用,该守护程序查询应用程序的“钥匙串访问组”,“应用程序标识符”和“应用程序组”权利。 访问组允许在应用程序之间共享钥匙串项,而不是限制对单个进程的访问。 钥匙串项目只能在同一开发者的应用程序之间共享。 这是通过要求第三方应用程序使用通过iOS开发人员计划通过应用程序组分配前缀的访问组来管理的。 通过代码签名,供应配置文件和iOS开发人员计划强制执行前缀要求和应用程序组唯一性。

使用类似于文件数据保护中使用的类结构来保护钥匙串数据。 这些类具有与文件Data Protection类等效的行为,但使用不同的键并且是以不同方式命名的API的一部分。


Apple Watch它使用为iOS构建的安全function和技术来帮助保护设备上的数据,以及与配对的iPhone和Internet进行通信。 这包括数据保护和钥匙串访问控制等技术。 用户的密码也与设备UID纠缠在一起以创建加密密钥。 Apple Watch与iPhone的配对使用带外(OOB)流程来保护,以交换公钥,然后是BTLE链接共享密钥。 Apple Watch显示动画图案,由iPhone上的相机捕捉。 该模式包含用于BTLE 4.1带外配对的编码密钥。 如有必要,标准BTLE密钥输入用作后备配对方法。 一旦建立了BTLE会话,Apple Watch和iPhone就会使用从IDS改编的流程来交换密钥,如本文的iMessage部分所述。 交换密钥后,蓝牙会话密钥将被丢弃,Apple Watch和iPhone之间的所有通信都使用IDS加密,加密的BTLE和Wi-Fi链接提供辅助加密层。 如果流量受到影响,则以15分钟的间隔使用按键滚动来限制曝光窗口。 为了支持需要流数据的应用程序,使用配对iPhone提供的IDS服务,使用本文FaceTime部分中描述的方法提供加密。 Apple Watch实现了硬件加密存储和基于类的文件和钥匙串项保护,如本白皮书的数据保护部分所述。 还使用用于钥匙链物品的访问控制的钥匙包。 用于手表和iPhone之间通信的密钥也使用基于类的保护进行保护。 Apple Watch不在蓝牙范围内时,可以使用Wi-Fi。 Apple Watch不会加入Wi-Fi网络,除非配对的iPhone上有凭据,因为iPhone会自动为手表提供已知网络列表。 按住侧面按钮可以手动锁定Apple Watch。 此外,运动启发法用于尝试在将设备从手腕移除后立即自动锁定设备。 锁定后,Apple Pay无法使用。 如果在设置中关闭了手腕检测提供的自动锁定,Apple Pay将被禁用。 使用iPhone上的Apple Watch应用程序关闭手腕检测。 也可以使用移动设备管理强制执行此设置。 如果佩戴手表,配对的iPhone也可以解锁手表。 这是通过建立由配对期间建立的密钥validation的连接来实现的。 iPhone发送密钥,手表用它来解锁其数据保护密钥。 手表密码不为iPhone所知,也不会传输。 可以使用iPhone上的Apple Watch应用程序关闭此function。 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

是。

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

Apple工程师讨论使用Watch Connectivity在开发者论坛上发送钥匙串项目 :

如果手机上有您想要访问手表的数据,您的应用可以使用WatchConnectivity传输所需的特定数据和钥匙串项目。 Apple Watch上的钥匙串包含来自配对iPhone上的钥匙串的一组不同的条目,因此如果您在两个地方都需要一些东西,您可以为每个设备生成一次或使用WatchConnectivity在它们之间进行传输。

更新:

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

至于字典是否可以在内存中访问,或者在扩展程序收到之前它是如何保留的,我认为你必须依靠Apple来解决任何可能的漏洞。

可能有理由说信息不像钥匙串那样安全 ,直到您的分机醒来,接收更新,然后将值存储在钥匙串中。

来自Apple的回复:

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

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

对于在途部分,您应该查看“App Security”下的“Apple Watch”部分。 对于容器安全性的相关部分,您应该查看“加密和数据保护”下的“文件数据保护”部分。