加密与哈希的区别

10
在我们的项目中,有几个地方可以使用哈希算法来代替加密。例如,在数据库中,我们存储了一个许可证和已许可对象之间的加密引用以及未加密的引用,这是为了确保用户无法通过更改数据库来更改已许可实体。
我们之所以在所有位置都使用加密,主要是因为我们已经有了一个很好的加密库和系统密钥。此外,开发哈希库并不值得花费额外的时间。
使用加密而不是哈希会创建任何安全风险吗?

7
开发一个哈希库?:((将英文句子翻译成中文,且尽可能保留原意,但不添加解释或其他额外内容。) - user166390
1
哈哈,发现得好。我是指加入一个哈希库。这可能不到一天的工作量,但我觉得这是学习更多关于安全性的好机会。 - Pace
6个回答

7
通过将明文与密文一起存储,您正在创建一个漂亮的测试字符串库,如果有人想要找到您的密钥,就会很方便。既然您显然将该密钥用于加密所有内容,我认为这是一个风险。

请记住,中央数据库的好处在于总有一天会有人获取到数据。如果历史教训能有所启示的话。


关于明文允许测试字符串的观点很好。我之前没有想到过。 - Pace
如果不是中央数据库,你提出了什么解决方案? - Surya Teja Karra
基本上就是他们已经问过的问题:使用哈希而不是将明文和密文存储在同一位置。他们已经注意到哈希是一种可能的解决方案。 - Joey

4
如果您正在使用对称加密算法,并且系统部署在“敌对”环境中,那么一个有动机的个人很快就可以隔离密钥并签署他们自己(或其他人的)许可数据。在这种情况下,您需要使用非对称加密算法用您的私钥“签署”许可证,该私钥安全地存储在一个没有与外界连接的保险库中。一个普通的哈希值在这种情况下无济于事,因为它们可以用于签署伪造的许可证。如果您想确保只有您批准许可更改,那么使用非对称加密算法加密许可证(或许可证的哈希值)是最直接的方式。

1

嗯,加密是一个双向过程。假设您正在使用基于密钥的加密,只要加密密钥安全并且您正在使用现代算法(例如AES),则您是安全的。 相反,哈希是一种单向过程,从哈希值重构哈希输入应该是实际上不可能的。因此,如果没有密钥,哈希可能被认为更安全。它也可能需要更少的计算资源。


1
任何可以加密的数据也都可以被解密。
哈希是一种单向过程,特别是如果您使用新的SHA2方法。

1
从我理解的来看,你想要确保数据的完整性(即确保没有人能够在不被察觉的情况下更改你的数据)。 这可以通过使用数字签名(如RSA、DSA)或消息认证码(MAC)来实现。MAC是对称加密体制中与数字签名相等效的机制。
所以在你的情况下,选择一个MAC(例如HMAC)应该是一个不错的选择!

0

你提到密钥保密性是一个弱点,我认为这是一种风险,但要评估其严重程度需要更多细节。

另一方面,哈希则完全依赖于查找碰撞的难度,这可能比保持密钥机密更安全。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接