2010-06-20 77 views
8

在我们的项目中,有几个地方可以通过散列获得。例如,我们在许可证和数据库中的许可对象之间存储加密引用以及未加密的引用。这是为了确保用户不能通过使用数据库来更改他们已获得许可的实体。加密和散列之间的区别

我们在任何地方使用加密的主要原因是我们已经有一个很好的加密库和一个系统密钥。除此之外,开发哈希库似乎并不值得。

我们使用加密而不是散列来创建安全风险吗?

+7

*开发*哈希库? :( – 2010-06-20 21:21:59

+1

哈哈,好,我的意思是整合一个哈希函数库,它可能不到一天的工作量,但我认为这是一个很好的机会来学习更多关于安全性的知识 – Pace 2010-06-21 01:22:45

回答

5

通过将纯文本和密文一起存储,您正在创建一个很好的测试字符串存储库,如果有人想要找出您的密钥。由于你显然使用说密钥加密一切我会说它一个风险。

请记住,中央数据库的好处是有一天有人会获取数据。如果历史至少是任何教训。

+0

关于允许测试字符串的明文的好处我没有 – Pace 2010-06-21 01:23:12

+0

因此,如果不是中央数据库,你会提出什么样的解决方案? – 2016-05-04 09:45:55

+0

基本上他们已经问过:散列而不是将明文和密文存储在同一个位置。他们已经注意到散列是可能的解决方案。 – Joey 2016-05-04 12:19:52

1

那么,加密是一个双向的过程。假设您正在使用基于密钥的加密,只要加密密钥是安全的并且您使用现代算法(如AES)就可以保证安全。相反,散列是一种单向过程,实际上不可能从散列值重构散列输入。所以,没有密钥,散列可能被认为是更安全的。它也可能不那么计算饥饿。

1

任何可以加密的数据也可以解密。

散列是一种单向过程,特别是如果您使用新的SHA2方法。

0

你已经将密钥的保密性作为一个弱点介绍了,我认为这是一种风险,虽然测量严重性需要更多的细节。

另一方面,散列将完全依赖于查找冲突的难度,这可能比保留关键秘密更安全。

1

根据我的理解,您希望实现数据的完整性(即您希望实现没有人会改变数据的未被注意的数据)。这可以通过使用数字签名(例如RSA,DSA)或MAC(消息认证码)来实现。 mac是数字签名的对称等价物,通常是不对称的方案。

所以在你的情况下,MAC(例如HMAC)应该是一个不错的选择!

4

如果它是一个对称密码,并且系统部署在“敌对”环境中,那么在激励的个人可以隔离密钥并签署他们自己的(或其他)许可证之前,这是一个时间问题。数据。

在这些情况下,您需要使用不对称密码来用您的私钥“签名”许可证,该密钥可以安全地存储在电脑中的保险库中,并且与外界无关。好的,只是在一个安全的环境中进行了一些小改变。

在这种情况下,纯哈希将无法帮助,因为它们可用于签署伪造的许可证。如果您想确保只有您可以批准许可证更改,那么使用不对称密码来加密许可证(或许可证的散列)是最直接的方法。

+0

我会多看看这个,谢谢! – Pace 2010-06-21 01:23:30