在Heroku和Rails中使用pgcrypto PGP加密的最佳实践

Chr*_*ola 8 encryption postgresql ruby-on-rails heroku

是否有任何使用Rails和Heroku Postgres与pgcrypto的公钥PGP的安全性最佳实践.

天真和直接的方式似乎是使用Heroku的ENV变量存储私钥和密码.然而,这似乎并没有增加太多安全性,因为现在任何有权访问环境的人都可以轻松访问这两个值.

这样做的目的是适当地加密任何与隐私有关的信息,例如SIN号码.

场景:

假设您有一些字段,对于某些通用的监管隐私要求,需要或建议加密存储,例如政府ID(例如SIN号).使用pgcrypto加密此信息的适当或甚至常见的过程是什么.

如果某人对某个场景有其他建议,我也很乐意将其包括在内.

And*_*ter 4

在定义威胁模型之前,这个问题没有答案,但是您的问题表明您希望以一种即使有权访问服务器环境的人也无法读取信息的方式存储信息,在这种情况下,实际上只有这些选项:

  1. 根本不存储数据。 根据您的需要,您可能能够避免出于任何原因将其存储在您自己的服务器上。例如,您可以要求用户输入他们的信用卡号,然后立即将其转发给信用卡处理机构而不保存(这意味着您下次需要再次向他们询问该号码,除非信用卡处理机构挂起电话) )一些支付处理方案甚至将支付数据直接发送到处理器,这样您的网站就根本不需要接触这些数据。根据您的要求,这可能适合也可能不适合您的需求。

  2. 仅将数据存储为哈希值,例如密码。如果您实际上不需要这些数据,而只需要验证使用您网站的人是否拥有这些数据,那么这非常有用。这通常是密码和其他“秘密”的解决方案,但对于其他数据来说毫无用处。

  3. 使用公/私加密存储数据,并且根本不将私钥保留在服务器上。例如,如果服务器在其环境中具有公钥,并使用该公钥将数据保存到表中,则这种方法可能有效,但管理员必须下载加密数据并在本地解密才能使用它。同样,这有严格的限制,因此只有在您对数据处理方式的要求兼容的情况下才能使用它。

  4. 使用客户端对称加密存储数据,仅使用客户端密钥进行加密和解密。LastPass 就是这样工作的。这意味着您(服务器管理员)除了将数据返回给提交数据的用户之外无法对数据执行任何操作。再说一遍,只有当您的要求非常狭窄时,这才有效。

如果您对数据处理的要求与上述任何一项都不兼容,那么您就没有追索权。您可以使用对称加密对数据进行加密,并将密钥保存在服务器环境中,以防止备份或访问数据库,但不能防止应用程序落入坏人之手,但这与攻击者的威胁模型不匹配访问操作环境。

这里不存在放之四海而皆准的“最佳实践”,因为处理攻击者有权访问环境的威胁模型所涉及的权衡是如此之大,以至于只有具有非常具体、有限要求的应用程序才能完全防范它。如果服务器可以读取数据,那么攻击者也可以。