Ruby on rails 与Heroku和Rails一起使用pgcrypto PGP加密的最佳实践

Ruby on rails 与Heroku和Rails一起使用pgcrypto PGP加密的最佳实践,ruby-on-rails,postgresql,encryption,heroku,Ruby On Rails,Postgresql,Encryption,Heroku,在pgcrypto的公钥PGP中使用Rails和Heroku Postgres是否有任何安全最佳实践 简单而直接的方法似乎是使用Heroku的ENV变量存储私钥和密码。然而,这似乎并没有增加多少安全性,因为现在任何有权访问环境的人都可以轻松访问这两个值 这样做的目的是适当地加密任何与隐私有关的信息,如SIN号码 情景: 假设您有一些字段,对于某些通用的监管隐私要求,需要或建议对其进行加密存储,例如政府ID(例如SIN编号)。使用pgcrypto加密此信息的适当或常见过程是什么 如果有人对某个场景

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

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

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

情景:

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


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

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

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

  • 仅将数据存储为哈希值,如密码。如果您实际上不需要这些数据,但只需要验证使用您的站点的人是否拥有这些数据,这将非常有用。这是密码和其他“秘密”的通用解决方案,但对其他数据无效

  • 使用公共/私有加密存储数据,并且根本不在服务器上保留私钥。例如,如果服务器在其环境中有公钥,可以使用公钥将数据保存到表中,但管理员必须下载加密的数据并在本地解密才能使用它,则这可能会起作用。同样,这也有严重的限制,所以只有当您对如何处理数据的要求是兼容的时,才可以使用它

  • 使用客户端对称加密存储数据,仅使用客户端密钥进行加密和解密。例如,LastPass就是这样工作的。这意味着服务器管理员除了将数据返回给提交数据的用户外,不能对数据执行任何操作。同样,只有在您的需求非常狭窄的情况下,这才有效

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

    这里没有一刀切的“最佳实践”,因为在处理攻击者有权访问环境的威胁模型时所涉及的权衡是如此之大,以至于只有具有非常特定、有限需求的应用程序才能防范它。如果服务器可以读取数据,那么攻击者也可以。

    Heroku Env 将密钥存储在Heroku env中并在数据库中加密会带来一些好处,因为这样一来,攻击者就无法通过直接入侵或SQL注入从数据库中获取信息

    你仍然容易受到任何人的攻击,这些人可以侵入你的应用服务器、你的Heroku帐户或任何Heroku或Amazon员工的服务器访问权限

    独立安全服务器 如果你有一个大型团队和/或分包商可以访问你的Heroku帐户,你可以在一个单独的帐户上有一个单独的服务器,甚至是单独的更安全的主机,负责保存和加载机密,只有少数高度信任的人可以访问它。它可以保持小而简单,只接受来自应用程序服务器的请求,以最小化攻击面。服务器的设计可以限制它从数据库中提供机密数据的速率,以防止即使在主应用程序服务器被入侵的情况下也会快速进行完全转储。它可以在上访问相同的DB或不同的DB,并在返回结果之前对来自应用服务器的每个加载/保存请求执行加密/解密


    这样做会增加延迟和复杂性,但这是权衡安全收益的权衡。要批量获取机密信息,攻击者必须侵入/访问app server,并在不触发入侵检测系统的情况下从安全服务器缓慢提取机密数据,或者以某种方式直接访问安全服务器(这应该比主服务器更难,因为社会工程、密码猜测和直接攻击的目标帐户更少。).

    加密不应该是目标。它应该是一种手段。你想保护什么/谁?你担心Heroku员工窥探吗?你担心有人入侵你的应用程序吗?Heroku是否将数据库备份与可能备份的任何文件分开存储。实际上,我并不“担心”关于Heroku员工的窥探,但理想情况下,我希望确保绝对保密的数据有合理的保留机会