2010-09-21 44 views
1

用户已经在我的iphone应用上请求了“锁定”,这很有意义,因为它包含私人信息。我相信数据的加密超出了人们对手机的期望,所以我的目标仅仅是防止对应用程序的无意访问。我的计划是使用钥匙串来存储使用我的应用程序名称作为ServiceName的密码。有助于在iphone应用上实现钥匙串

我关心的是用户,如果他们失去个究竟/忘记他们输入的密码。有什么我可以做编程以允许用户重新设置?删除应用程序是否会删除该应用程序的钥匙串?

我不想收集用户电子邮件。 (好吧,但我不希望这是理由。)如果用户丢失了密码,他们不希望用户被永久锁定在应用程序之外。

回答

1

在iPhone上只有一个钥匙串数据库,并且不可能添加一个自定义的,特定于应用程序的钥匙串(就像你可以在Mac上做的那样)。默认情况下,您添加到应用程序中钥匙串的钥匙串项目仅适用于您的应用程序。没有文档(据我所知)说明用户删除应用程序时发生的行为:可能是iOS 4.1删除应用程序钥匙串项目,可能是它将它们留在钥匙串中。

取决于你如何存储在用户的密码,你可以找回它。举例来说,如果你存储的与用户的kSecAttrApplicationTag密码一起涉及您的应用程序代码,那么你可以使用

OSStatus SecItemCopyMatching (
    CFDictionaryRef query, 
    CFTypeRef *result 
); 

功能搜索您的确切标签在钥匙串。如果搜索成功,那么你可以使用kSecValueData键检索返回的字典中的密码,或者,如果你愿意,你可以使用

OSStatus SecItemUpdate (
    CFDictionaryRef query, 
    CFDictionaryRef attributesToUpdate 
); 

有关其他信息,甚至改变它,请参阅the keychain referenceKeychain Services Tasks for iOS文档。

+0

同意,我的应用程序可以从钥匙串中检索密码。我想要什么条件?我可以制作一些隐藏的关键笔划组合,我会在与用户联系时告诉用户。我可以让应用程序通过电子邮件发送密码,但除了我的判断之外,没有任何安全措施。我迷失在如何合理地阻止用户被永久锁定在应用程序之外。 – user216661 2010-09-22 14:34:37

+0

您应该验证的唯一条件是用户询问密码实际上是应用程序的合法所有者。一个可能的解决方案是允许用户输入密码最多3次。在输入3次错误密码后,您将锁定应用程序并要求用户通过In App Purchase解锁。要购买解锁功能,用户必须证明他/她知道绑定到AppStore帐户的密码。这提供了证据表明用户是您应用程序的合法所有者(有人可能会偷走他/她的帐户凭据,但无法应对所有可能的情况)。 – 2010-09-22 16:40:12

+0

购买解锁功能后,可能会显示用户清除您从钥匙串中恢复的密码或要求他/她更改密码的对话框:在这种情况下,您只需使用新密码更新钥匙串项目。支付这项服务,比如0级,对我来说似乎是合理的。 – 2010-09-22 16:45:56

1

这里通常的做法是收集一组安全问题和答案,除了(更短,更快的)密码或PIN。如果用户忘记了自己的密码,她应该希望记住她的更长,更多助记符安全问题的答案。

您可以在应用程序的钥匙链都存储。

+0

我不相信这是适合我的情况的模型,因为典型的易于记忆的查询/响应与访问某人的电话的人可能已经知道的相同(因为他们很可能是父母,孩子,兄弟姐妹,配偶等)。例如,至少我现在不能想到一个容易,适当的问题来阻止我兄弟的访问。 – user216661 2010-09-22 14:31:01

0

回想起来,我看到我从来没有更新我的实际执行这个问题。

我的问题的核心是,我没有联系信息,我的用户,我不以任何方式复制他们的数据。也就是说,我让他们的数据保持私密,部分原因是不允许使用互联网或电子邮件功能。

因此,我使用SecItemUpdate如上所述,同时也为应用程序编码默认密码(即无密码等效)。然后,如果用户丢失了密码,他们可以告诉应用程序密码已丢失,此时应用程序将密码重置为默认密码,并删除数据库中的所有私人数据。所以,丢失密码是有代价的,但是在任何时候都不能有人进入并看到私人数据。

我已经使用了这种方法几年了,它似乎很好地满足了我的用户。