在 iOS 应用程序中正确实施 HIPAA 有几个因素

信息安全 加密 IOS 希帕
2021-08-14 04:53:10

我们正在开发一款 iOS 应用程序,允许用户存储/修改受保护的健康信息 (PHI),并且该应用程序需要允许用户在大部分过程中无需互联网连接即可执行此操作。我们将需要加密数据,但很难想出如何正确执行此操作的解决方案,因为我们不想将密钥存储在代码中,并且仍然需要能够在没有数据的情况下访问数据与服务器的连接。

我们的工作理念是使用用户的密码(不会存储在设备上)加密数据,但我们遇到了一个问题,即其他用户可能需要通过自己的登录名修改/访问该设备上的数据。(如果一台 iPad 坏了)

我们尝试解决但似乎不安全的想法是:
- 在代码中存储静态密钥
- 将服务器提供的动态密钥存储在本地 sql 数据库中
- 将服务器提供的动态密钥存储在 iOS 中钥匙链

我们正在考虑让两个用户在数据检索时登录并使用两个密码对其进行加密,但我们遇到了与用户相关的问题,如果一个用户不在值班或不在附近,数据可能会被锁定。

问题:我们如何正确保护 iOS 上的 PHI,以便允许访问它的人(可能离线)仍然可以访问它,并且不限制数据只能由一个人查看 - 最好不存储登录信息(如我们不希望存储用户凭据)

跟进:如果这不可行,那么满足上述大多数需求的最佳行动方案是什么?

编辑:澄清
身份验证最初是在下拉/提交数据时进行的,我们需要对下拉的数据进行加密,同时保持以前经过身份验证的用户可以访问它而不存储密钥。

4个回答

免责声明:我的公司制作符合 HIPAA 标准的 iPod 应用程序。我负责合规...

iPhone 实际上满足了许多开箱即用的 HIPAA 要求。一旦在设备上设置了密码,内容就会被加密——这可以满足许多 HIPAA 要求,尤其是静态加密。

要下载数据,您必须使用 TLS 或其他加密连接来确保数据在传输过程中被加密。

您必须配置您的应用程序以下载安全策略并将其推送到 .mobileconfig 文件中的网站,该文件强制用户在设备上设置密码以使用该应用程序。如果设置了密码,则设备被加密。因此, .mobileconfig 将强制执行此操作。

您还应该利用钥匙串来存储用户提供的任何类型的令牌或凭证。为简化起见,您可以让您的应用需要 4 位密码才能从钥匙串中解锁这些凭据,而不是让他们在手机上重新输入密码。

如果应用程序没有经常与服务器建立网络连接,您可以创建一个同步按钮。这会将相关数据同步到本地文件系统。进行更改后,它会将其保存在本地,直到应用程序被告知再次同步,在这种情况下,它会与主 Web 应用程序数据库协调更改。

最后,这并不是对 iOS HIPAA 合规性的详尽描述,我建议您咨询律师以制定您的安全政策和其他文件,这些文件是 HIPAA 所要求的。

我知道这是一个相当古老的问题,但我在另一次搜索中遇到了它,并认为我会在这里再提出一个想法,以防其他人面临类似的挑战。

您可能想查看信封加密。

您可以使用的一种示例策略如下:

假设:

您有 PHI,有用户 A 和用户 B,每个用户都有不同的密码。您希望两个用户在输入各自的密码后都拥有对 PHI 的完全访问权限。用户登录由用户名和密码组成。

战略:

您使用密钥(我们称其为 K)对 PHI 进行加密。您将数据表发送到设备,其中包含每个用户的:用户名的散列(例如 md5),以及由用户密码加密的 K 版本(我们称其为加密密钥 eK)。

因此,为了获得对 PHI 的访问权限,用户 A 输入他的用户名和密码,然后按顺序发生以下情况:

  • 从用户名计算哈希
  • 该哈希用于查找表中的相关条目
  • 使用用户输入的密码对加密的密钥 eK 进行解密,得到一个可用的密钥 K
  • PHI 使用 K 解密并加载到内存中
  • (用户可以根据需要修改数据)
  • PHI 使用 K 重新加密并存储到设备中

现在,用户 A 可以注销,用户 B 可以使用她的用户名和密码登录,这会产生相同 K 的解密版本,然后可以根据需要对 PHI 进行解密和重新加密。

注意事项

通过对用户名进行哈希处理,我们可以避免在数据表中泄露任何实际用户名。

使用此策略,您可以存储加密密钥本身,但没有适当的用户名/密码的用户将无法访问密钥,也无法解密 PHI。

虽然我很快就要开始处理 HIPAA 的职业,因此一直在复习,但到目前为止,我只有 PCI 合规方面的经验。话虽如此,我对到目前为止所调查的内容的理解似乎表明 ePHI 本身和该 ePHI 的元数据(创建日期/时间、文件名、最后一个 mod 日期 --- ref. http://www.hipaasecurenow .com/index.php/dropbox-is-not-hipaa-compliant/)必须加密。

在存储要保护的数据的位置存储密钥似乎是一个冒险的举动。就像将汽车钥匙放在遮阳板上一样。

此外,HIPAA 合规性的一部分是物理安全。您对该移动用户的手机有什么物理控制权?对于我的两分钱来说,最好的方法是忘记离线功能,专注于可能总是需要互联网连接但安全的应用程序。

我认为您的问题是“如何在不受信任的设备上执行离线身份验证和授权?”。

对这个问题的简短回答是:你不能。

长答案是:有些人试图解决这个问题,用于蓝光播放器和视频游戏机。为了解决这个问题,他们试图通过阻止用户永久控制他们的设备来使不受信任的设备成为受信任的设备。新的蓝光将需要更新的播放器才能播放,存在漏洞的播放器会被蓝光联盟列入黑名单。控制台使用防回火加密组件来保护其机密(与其他机制结合使用)。有关这两个示例的详细信息,您可以从 wikipedia 开始查找有关 DRM 管理的部分。然而、视频游戏和蓝光不是受保护的健康信息。他们可以容忍他们的保护机制不时地被打破,他们已经计划好了并且可以恢复。此外,您对设备没有任何控制权,也无法实现与它们类似的安全机制。

我建议您首先忘记为许多用户进行身份验证以简化您的需求。您只需验证 iOS 应用程序用户,然后将 PHI 的责任转移给他。然后他可以分享他的数据,但由此产生的任何问题都将完全是他的错。用户必须采取措施保持符合 HIPAA(您的应用程序可能会帮助他)。其次,忘记离线身份验证。在检索数据和相关权利之前,在线对他进行身份验证。但是,由于您无法控制设备,因此您将无法强有力地执行这些权利。再说一次,您的应用程序可以尝试强制执行它们,并且您可以将更改或反向工程应用程序设为非法。第三,用密钥存储加密数据以解密它们是没有意义的。它只会增加开发和维护成本,而不会增加应用程序的价值。如果 HIPAA 要求加密,让 iOS 管理它:使用它的 API 并让它使用用户密码或安全令牌或其他任何东西对其进行加密。

可能还有其他更适合您需求的解决方案。