0

嗨,我正在开发一个存储敏感医疗记录的 Rails 应用程序,因此我一直在寻找加密存储数据的最佳实践方法。我决定使用 gem 保险箱,它通过生成随机密钥和 IVs 来提供对称加密,然后用公钥加密那些。该应用程序需要向用户和一系列特殊用户(注册医生)提供对加密数据的访问。

我的问题与我需要工作流具有两个我不太确定如何实现的属性有关:

第一个问题是我想使用登录并提交数据的用户的密码作为公钥,但我使用的是存储加密密码的 gem Devise。我不想使用加密密码,因为如果有人能够访问数据库,它可能会破坏加密工作流程。

第二个问题是加密信息不仅需要创建信息的用户访问,还需要一系列特殊用户(医疗用户)访问。我知道 PHP 有一个函数 openssl_seal 可以接受一组公钥,但我不确定实现:

我需要加密和存储每个收件人公钥的对称密钥吗?或者我可以只提供所有的公钥和我们来加密和存储一次吗

第三个问题是第一个和第二个问题的组合,我如何访问多个收件人的公钥而不在服务器上存储任何可能危及工作流安全的内容?

我正在寻找的是关于架构概述而不是实际(代码)实现的一些建议和讨论。

4

1 回答 1

0

使用密码甚至加密密码作为公钥是一个坏主意,因为如果他们的密码更改,那么您的“公钥”也会更改。api_key相反,我会为用户或public_key(你明白了)建立一个额外的字段。创建用户时,生成公钥。

 before_create :new_user_settings
 def new_user_settings
    begin
      self.api_key = SecureRandom.hex
    end while self.class.exists?(api_key: api_key)
  end

这种回答您的第二个和第三个问题,因为您在用户模型中有一个可以解密数据的公钥。您可以做的一件事就是将用户的公钥与另一个公钥结合起来,以帮助防止可能访问您的数据库的人。这样用户的公钥只是部分公钥,另一半永远不会存储在数据库中,而是作为全局变量(或其他东西)。这两部分结合起来将是用于解密数据的实际公钥。

于 2013-10-08T15:32:30.223 回答