在我们的项目中,有几个地方我们可以通过哈希来消除。例如,我们在许可证和数据库中的许可对象之间存储加密引用以及未加密的引用。这是为了确保用户无法通过破坏数据库来更改他们已获得许可的实体。
我们在任何地方使用加密的主要原因是我们已经有了一个很好的加密库和一个系统密钥。此外,开发散列库并不值得花时间。
我们使用加密而不是哈希来创建安全风险吗?
答案 0 :(得分:7)
通过将纯文本与密文一起存储,如果有人想要找到你的密钥,你就会创建一个很好的测试字符串存储库。由于您显然使用所述密钥加密所有内容,我认为 是一种风险。
请记住,关于中央数据库的好处是有一天会有人获得数据。如果历史是任何教训,至少。
答案 1 :(得分:4)
如果它是您正在使用的对称密码,并且系统部署在“恶意”环境中,那么在有动力的个人可以隔离密钥并签署他们自己(或其他)许可证数据之前,这是一个时间问题
在这些情况下,您需要一个不对称的密码,用您的私钥“签署”许可证,该私钥安全地存放在保险库中的计算机上,并且与外界无关。好的,轻微的夸大,但在安全的环境中。
在这种情况下,普通哈希不会有用,因为它们可用于签署伪造许可证。如果您想确保只有您可以批准许可证更改,那么使用不对称密码来加密许可证(或许可证的哈希值)是最直接的方法。
答案 2 :(得分:1)
好吧,加密是一个双向过程。假设您使用的是基于密钥的加密,只要加密密钥是安全的并且您使用的是现代算法(例如,AES),您就是安全的。 相反,散列是单向过程,实际上不可能从散列值重构散列输入。因此,没有密钥,哈希可能被认为更安全。它的计算量也可能较少。
答案 3 :(得分:1)
任何可以加密的数据也可以解密。
哈希是一种单向过程,特别是如果你使用新的SHA2方法。
答案 4 :(得分:1)
根据我的理解,您希望实现数据的完整性(即您希望实现没有人可以改变您的数据未被注意)。 这可以通过使用数字签名(例如RSA,DSA)或MAC(消息认证码)来实现。 mac是数字签名的对称等价物,通常是非对称方案。
因此,在您的情况下,MAC(例如HMAC)应该是一个不错的选择!
答案 5 :(得分:0)
你已经将密钥的保密性作为一个弱点引入,我认为这是一个风险,尽管衡量严重性会带来更多细节。
另一方面,Hashing将完全依赖于发现冲突的难度,这可能比保持密钥秘密更安全。