iOS相关 | keychain服务

在iOS系统中,Keychain提供了安全的存储服务,用来存储一些敏感信息。但是在日常开发中,我们经常会忽视这个苹果自荐的功能,本文的目的就是引起开发者的重视,敏感信息尽量使用Keychain服务。

NSUserDefaults不安全

NSUserDefaults其实是plist文件中键值存储,并且最大的问题是存在与沙盒中,这就对安全性埋下了隐患。如果攻击者破解app,拿到了沙盒中的数据,就会造成数据泄漏,后果不堪设想。

当然,一般也不会有把密码直接使用NSUserDefaults存储的,都会进行加密、或者是多重加密后再进行NSUserDefaults存储。这么做其实是可行的,前提是加密算法不能泄漏。有个小问题就是,如果用户删掉app重装的话,之前所有存储的敏感信息都会消失。比如,一个用户误删了使用NSUserDefaults存储密码的app,当重新安装之后,由于以前是记住密码免登录,只因为自己操作不当,接下来要进入找回密码功能,重新修改密码才能再次使用app。这对用户来说是一种相当不友好的体验。

所以,正确的姿势是使用Keychain服务来存储。Keychain保存的数据不仅仅是加密过的,而且由于Keychain是存在与沙盒之外的,当应用删除之后,app存储的数据并没有被删掉,第二次安装时只要读取Keychain里的数据,即可得到以前存储的信息。

Keychain使用场景

存储隐私信息

在iOS系统中,最常用的keychain服务就是存储用户密码了。使用keychain保存用户密码最大的好处已经在上面说过,个人极力推荐这么做。

数据共享

如果我们有多个app,它们之间需要共享一些数据,以提供更好的用户体验,那么使用Keychain群组可以实现。但前提是同一个公司的产品才能共享,比如com.hyyy.test1和com.hyyy.test2两个同一公司下的不同产品之前可以实现数据共享。

设备唯一标示存储

在iOS中,为了在苹果的打压下获取唯一标示符,开发者们也是想尽了办法,目前最好的方式就是获取IDFV,并将其存储到keychain中。IDFV是设备区别应用提供商的,一般来说可以作为应用唯一标示符。但是IDFV缺陷就是当设备删除了该所有应用提供商的app之后,IDFV值会发生变化,所以IDFV+Keychain的组合目前被经常用到,来替代UDID的作用。特别是加上Keychain的共享服务,可以使应用提供商下的所有app下获取的IDFV都不会发生变化。这一服务可以说是目前最佳的识别用户的办法。

其他用处

当然,不同app的需求是不一样的,如果你需要存储一些信息,即使app删掉后也不会丢失,那么使用Keychain服务可以完美地实现这点。

这里给出一个第三方库:keychain

给出了范例demo,使用非常方便

你可能感兴趣的:(iOS相关 | keychain服务)