2

我正在编写一个需要符合 HIPAA 标准的 iOS 应用程序。该应用程序最好离线运行,因此需要将数据存储在手机上。

所以这就是我想做的事情:

  • 在首次启动时,用户输入用户名、密码和密码。服务器使用设备的用户名、密码和 UDID(广告 ID)对用户进行身份验证。与服务器的通信将使用 HTTPS 完成。

如果认证成功:

  • 用户名存储在钥匙串中。
  • 密码短语+UDID 使用 OpenSSL 库中提供的“PBKDF2”进行散列。这也存储在 Key Chain 中。此操作的盐存储在密钥链中。对于后续验证,盐是从钥匙链中获得的。

  • Username+Pass-phrase+UDID+Static-Key 用于使用“PBKDF2”生成密钥,并且盐再次存储在 Key Chain 中,并从 Key Chain 中检索以供后续使用。生成的密钥存储在内存中,并且在生成密钥后忘记密码。静态键存在于代码中。

  • 当应用程序进入后台时,Key 被遗忘,即变量设置为 nil。

  • 在恢复或重新启动应用程序时,会向用户呈现一个屏幕以输入密码短语。如果输入的密码正确,应用程序将再次生成密钥。否则,在大约连续五次尝试时,应用程序将擦除数据并将用户带回登录屏幕(如果可能,还向服务器发送有关事件的消息以及必要的信息)。

现在这是我的两个问题:

  • 我想知道project-imax/EncryptedCoreData有多稳定?我知道他们不支持多对多关系。但是,我通过创建一个实体来表示关系来解决这个问题(类似于在实际 SQL DB 中使用第三个表完成的方式)。我想听听任何有加密核心数据经验的人讲述他们的经历和面临的问题。特别是,这与加密单个属性的性能相比如何?

  • 其次,你们是否看到我计划实施的安全措施有任何问题。您想提及的任何建议或改进。

4

1 回答 1

1

塔哈,

回答你的第二个问题:

您是否考虑过 iOS 数据安全已经加密了您的磁盘文件,并且您可以在您的应用程序上声明此全局策略?

虽然只有您的律师可以回答这个问题,但您需要确切地询问他们法律需要什么。我怀疑您会发现,通过钥匙串中的适当密码管理并排除将数据备份到云或桌面计算机,Apple 的安全性已准备好 HIPAA。

Apple 最近发表了关于 iOS 安全性的强烈讨论(2014 年 2 月)。这是非常有启发性的阅读。如果 Apple 现有的安全性不够,我怀疑加密的 Core Data 项目是否足够。如果您仍然需要实现自己的安全性,那么阅读和理解 Schneier 和 Ferguson 的“实用密码学”是开始的地方。

匿名,安德鲁

PS 您选择在密钥管理中添加大量复杂性以复制 Apple 钥匙串的功能。我会建议你缩减你的代码。如果“失败;” 教会我们什么,它是:每一行代码都是一个安全漏洞。您正在实现大量代码来复制钥匙串的功能。

于 2014-03-15T13:56:32.393 回答