Security 什么';这是隐藏长寿命加密密钥的最佳位置

Security 什么';这是隐藏长寿命加密密钥的最佳位置,security,encryption,Security,Encryption,我正在考虑一个新的Sybase项目的加密选项。我认为Sybase加密是错误的策略,因为a)dba可以加入,b)如果我们迁移到SQL Server或Oracle,我不想处理不同的加密策略 因此,我考虑在将敏感数据存储到数据库之前,对Java代码中的敏感数据进行加密(对称加密) 现在,加密字段最好永远不要更改其加密密钥,除非是在非常受控的环境中,这对我来说实际上意味着永远不会更改。所以它将是一个永久密码 问题是,我应该在哪里保存这个密码,使它可以从程序中访问,但其他人无法访问。如果它在属性文件中,任

我正在考虑一个新的Sybase项目的加密选项。我认为Sybase加密是错误的策略,因为a)dba可以加入,b)如果我们迁移到SQL Server或Oracle,我不想处理不同的加密策略

因此,我考虑在将敏感数据存储到数据库之前,对Java代码中的敏感数据进行加密(对称加密)

现在,加密字段最好永远不要更改其加密密钥,除非是在非常受控的环境中,这对我来说实际上意味着永远不会更改。所以它将是一个永久密码

问题是,我应该在哪里保存这个密码,使它可以从程序中访问,但其他人无法访问。如果它在属性文件中,任何有权访问我们的Git repo的开发人员都可以看到它

我们可以在源代码中硬编码,但好的法律,这是一个糟糕的做法

我们可以在源代码中生成它,比如第10个斐波那契或第3个+8.那将很难定位,但它仍然相当暴露

我们可以让sa在环境中维护它,但他们在哪里存档以供将来参考


这么多糟糕的选择。有好的吗

简单地使用一些密码来动态创建密钥是一种不安全的方法,而且生成的密钥也很差。DB keep需要是一个随机字节数组。请记住,密钥在使用时需要在内存中,这将是数据库的大部分时间

WRT使用DB加密,仔细检查算法是否完全指定,是否与另一个DB兼容。还有一种可能性是,整个数据库需要运行,然后添加到新的数据库中,在这种情况下,使用内部数据库加密将是透明的

<>你真的需要考虑将来需要修改加密密钥,如果它被破坏了,你会怎么做?这一困境有解决办法。在DB之外执行加密可能会有很大的性能损失,每个新的加密操作都有很大的设置时间。此外,由于并非所有列都将被加密(这是一个很好的猜测),数据库和外部加密代码不共享信息,因此这种耦合对设计和维护都不好

请勿将DB服务器连接到Internet,将其分离并使用非网络连接(如直接以太网)连接。这也限制了包含加密密钥的唯一系统的管理员用户数量

解决方案的另一个重要部分是限制管理员对服务器的访问。这包括要求双因素身份验证以及严格限制管理员数量。您需要控制组织拥有的物理序列号设备的第二个因素,以便在人员变更时可以积极检索这些设备,而不是复制它们。就我个人而言,我喜欢RSA SecureID(或类似的)硬件设备,有积极的控制


最后,在回答这个问题时,将密钥保存在DB服务器上的一个文件中,如上所述,即没有Internet访问和受限制的管理员访问。

简单地使用一些密码动态创建密钥是一种不安全的方法,而且生成的密钥也很差。DB keep需要是一个随机字节数组。请记住,密钥在使用时需要在内存中,这将是数据库的大部分时间

WRT使用DB加密,仔细检查算法是否完全指定,是否与另一个DB兼容。还有一种可能性是,整个数据库需要运行,然后添加到新的数据库中,在这种情况下,使用内部数据库加密将是透明的

<>你真的需要考虑将来需要修改加密密钥,如果它被破坏了,你会怎么做?这一困境有解决办法。在DB之外执行加密可能会有很大的性能损失,每个新的加密操作都有很大的设置时间。此外,由于并非所有列都将被加密(这是一个很好的猜测),数据库和外部加密代码不共享信息,因此这种耦合对设计和维护都不好

请勿将DB服务器连接到Internet,将其分离并使用非网络连接(如直接以太网)连接。这也限制了包含加密密钥的唯一系统的管理员用户数量

解决方案的另一个重要部分是限制管理员对服务器的访问。这包括要求双因素身份验证以及严格限制管理员数量。您需要控制组织拥有的物理序列号设备的第二个因素,以便在人员变更时可以积极检索这些设备,而不是复制它们。就我个人而言,我喜欢RSA SecureID(或类似的)硬件设备,有积极的控制


最后,在回答问题时,请将密钥保存在DB服务器上的一个文件中,如上所述,即没有Internet访问和受限的管理员访问。

我投票将此问题作为离题回答,因为它不是直接的编程问题。这更像是一个安全性设计问题,我相信这在Stack Exchange站点上更合适。@TobySpeight这确实是一个编程问题。我会改写它,但我的主要问题是“你在哪里安全地存储这些密码,以便程序可以访问它们,但没有人可以”你不讨厌人们投票否决你而不留下评论吗?我投票结束这个问题,因为它不是直接的编程问题。这更像是一个安全性设计问题,我相信这在Stack Exchange站点上更合适。@TobySpeight这确实是一个编程问题。我将改写它,但我的主要问题是“你在哪里安全地存储这些密码,以便程序c