2013-05-07 119 views
1

我的可可应用程序将具有以下功能: 1.密码保护登录。用户将不得不输入密码才能使用应用程序 2.登录后,用户可以创建一些个人配置文件,该配置文件可以存储一些安全信息,如密码。SSKeyChain:如何锁定这个钥匙串?

经过一番研究,我被告知我应该使用KeyChain来保存安全信息(所以在我的情况下,登录密码和每个个人配置文件中的安全信息)。

似乎有一个很好的KeyChain包装,SSKeyChain,可以用来实现我的目标(因为我不太熟悉c朗,所以使用苹果的钥匙串对我来说很难),我也发现了一些使用SSKeyChain iOS: How to store username/password within an app?样本:

To save a password: 

[SSKeychain setPassword:@"AnyPassword" forService:@"AnyService" account:@"AnyUser"] 
To retrieve a password: 

NSString *password = [SSKeychain passwordForService:@"AnyService" account:@"AnyUser"]; 

但是我不知道我是否需要“保护”我的钥匙串: 1.打电话时setPassword:forService:账号:我应该包括明文密码?或者我需要先加密我的密码?也设置服务名称时,我应该只是简单地包含我的应用程序名称 2.如果密码可以通过使用passwordForService检索:容易,那么它似乎不安全?因为其他应用程序也可以调用相同的方法来检索钥匙串? (前提是他们知道的服务名称和账号)

我已经阅读了苹果文件建立:https://developer.apple.com/library/mac/#documentation/security/conceptual/keychainServConcepts/02concepts/concepts.html#//apple_ref/doc/uid/TP30000897-CH204-TP9

和好像你有“锁定”和“解锁”这个钥匙串。我检查了SSKeyChain doc http://docs.samsoff.es/SSKeychain/Classes/SSKeychain.html,但找不到任何方法来“锁定”和“解锁”这样的钥匙串。那么我该如何保护它呢?

回答

1

系统中的钥匙串服务将每个应用程序限制为仅默认访问其自己的钥匙串项目。锁定和解锁都是在钥匙串服务的幕后处理的。

当您使用Xcode创建应用程序时,Xcode将应用程序标识符权利添加到应用程序包。钥匙串服务使用此权利授予应用程序访问其自己的钥匙串项目的权限。

http://developer.apple.com/library/mac/#documentation/Security/Reference/keychainservices/Reference/reference.html

+0

谢谢,我已经加入SSKeyChain到我的项目和工作正常。但是,我的问题来了。使用KeyChain或SSKeyChain似乎不是保护应用程序的好方法,因为钥匙串可以轻松地从钥匙串访问中删除。如果它被删除,那么密码将不再适用。 – Josh 2013-05-07 20:03:34

+0

@Josh“保护应用程序”是什么意思?钥匙串是一个安全的地方,您可以存储您的应用程序所需的数据。 – 2013-05-07 20:06:24

+0

嗨,正如我所说我的应用程序将实现密码保护功能,这意味着用户将首先必须输入密码才能使用该应用程序(这个想法非常类似于您的iphone的密码,如果你没有进入正确的代码/密码,你将无法使用该应用程序)。所以正如我所说,仅仅为了这个目的而使用钥匙串并不是一个好主意。 – Josh 2013-05-07 20:16:28