我正在尝试使用“ applicationPassword”来保护用户存储在钥匙串中的数据。
一切都可以在真实设备上完美运行,但不幸的是,模拟器上的所有功能都无法正常工作。
为了入门,我有一个非常基本的代码来设置applicationPassword。
let authenticationContext = LAContext()
let applicationPassword = "123".data(using: .utf8)
let result = authenticationContext.setCredential(applicationPassword, type: .applicationPassword)
print(result)
对setCredential
的调用在真实设备上返回true
,在模拟器上返回false
。
请帮助:-)
如果Simulator不支持此功能,则它实际上不是可行的解决方案。
这是Apple的文档,供参考:
https://developer.apple.com/documentation/localauthentication/lacontext/1514168-setcredential
答案 0 :(得分:0)
似乎applicationPassword
与设备的系统密码一起使用。
因此applicationPassword
不适用于:
我已经从以下来源确定了这些信息:
WWDC 2015 - Session 706 - Security & Your Apps(请参见视频的43:23左右)
解说词:https://asciiwwdc.com/2015/sessions/706?q=applicationpassword
现在,让我们看一个受ApplicationPassword保护的项目。
仅设备密码不再足够。
您的应用程序还必须提供自己的密码。
同样,我们从中派生一个加密密钥,只有当 设备密码和应用密码都存在,表示访问权限为 授予钥匙串项目。
https://nabla-c0d3.github.io/blog/2015/06/16/ios9-security-privacy/
钥匙串项目现在可以使用设备的密码进行加密 和“应用密码”;然后需要两个值来解密 并检索该项目。这使Apps可以控制何时将数据 可访问/解密,而不是尽快将数据解密 设备已解锁。
https://macbirdie.net/2016/03/app-pwd
另一个有趣的新功能是使用 应用程序提供的密码,这是 设备解锁PIN或密码。
密码可以来自用户,也可以来自会话706 主持人建议,可以是 服务器或与手机相连的设备中保存的机密信息。
此安全方案要求至少存在一个设备密码, 因为它与它协同工作。因此,这不是 可以在iOS模拟器上对其进行测试,这使得开发 支持它有点困难,因为添加钥匙串项时 以这种方式进行保护,甚至不需要实际密码即可检索 它。
可惜的是,苹果自己的文件似乎都没有提到这一点: