快速安全地保存敏感数据

时间:2018-09-11 13:00:06

标签: ios swift

我正在制作一个需要保存[Card]类型的数组的应用,其中card是结构:

struct Card : {
    var image : UIImage? = nil
    var name : String = ""
    var titles : [String] = []
    var data : [String] = []
}

考虑到数组包含信用卡号之类的数据,保留该数组的最佳方法是什么?

在XCode的Data Protection标签下启用Capabilities是否足够?目前,我正在使用Codable进行保存。

4 个答案:

答案 0 :(得分:1)

敏感数据在云中不一定比在设备上更安全。设备可能会丢失,但是大多数数据泄露都是通过存储在云中的数据发生的。大型的信用卡号数据库比存储在设备上的单人信用卡信息更具吸引力。此外,从安全可靠的iOS设备(至少根据FBI)恢复数据非常困难。

也就是说,任何存储敏感信息的iOS应用程序都应拥有自己的安全层,高于设备提供的安全层,包括其自己的用户身份验证过程。

答案 1 :(得分:0)

不管造成这种情况的原因有很多,通过钥匙串来安全地在iOS上存储本地数据是一个很好的方法。设备会使用您的密码对其进行加密,即使未安装该应用程序也会将其保留下来,并在设备之间同步。对于初学者来说,API有点难以理解,因此https://github.com/kishikawakatsumi/KeychainAccess这样的包装器是入门的好工具。

答案 2 :(得分:0)

为了保存我们的应用程序敏感数据,我们应该使用 Apple 提供的安全服务

钥匙串服务API 通过为您的应用提供一种将少量用户数据存储在称为钥匙串的加密数据库中的方法,可以帮助您解决这些问题。 在钥匙串中,您可以自由保存用户明确关心的密码和其他机密信息,例如信用卡信息,甚至是简短的敏感笔记。

您可以参考this link以获得有关使用Keychain Services API的详细说明。

答案 3 :(得分:0)

对此没有正确的答案,但是这是查看一个人对iOS安全性研究的好方法。如果您正在与一家银行进行面试,那么我几乎肯定会期望有人对此有所了解,但是所有公司都必须认真对待安全性,因此,这是我希望在答复中听到的理想话题清单:

  • 如果数据非常敏感,则绝不要将其离线存储在设备上,因为所有设备都是可破解的。
  • 钥匙串是安全存储数据的一种选择。但是,它的加密基于设备的个人识别码。用户不必强制设置引脚,因此在某些情况下,数据甚至可能不会被加密。此外,用户的密码很容易被黑客入侵。
  • 更好的解决方案是使用像 SQLCipher 这样的东西,它是完全加密的SQLite数据库。加密密钥可由应用程序强制执行,并与用户的个人识别码分开。 其他安全最佳做法是:
  • 仅通过SSL / HTTPS与远程服务器通信。
  • 如果可能,请在应用程序中实施证书固定,以防止对公共WiFi进行中间人攻击。
  • 通过覆盖敏感数据清除内存中的数据。
  • 确保对提交数据的所有验证也都在服务器端运行。