我应该从哈希生成密钥加密吗?

时间:2012-06-27 14:58:41

标签: encryption rijndael

我目前正在CBC模式下使用Rijndael 256位来加密一些需要在其他地方发送的数据。为了增强安全性,我采用随机生成的SHA-256哈希并使用公式来切断不同的部分,使用加密密钥和初始化向量(当然,散列与数据一起发送)。生成密钥和IV的公式是相当基础的,因为代码是用PHP编写的,所以它被编码到用户可访问的页面中。我想知道的是:这比一个常数键和/或IV更安全吗?

2 个答案:

答案 0 :(得分:2)

这可能不是你想要的方式。从本质上讲,一个好的黑客不需要花很长时间来弄清楚你的数学公式来操纵HASH来生成你的密钥和IV。因此,你实际上是把钥匙和王国一起送到王国。

通常,此类操作的完成方式是生成会话密钥(可能与您现在执行的方式相同),但使用公钥加密方法来加密该会话密钥。然后使用公钥加密方法将会话密钥发送到要发送数据的位置。接收方具有公钥,可以加密通信。频道会话密钥。

现在双方都有通讯。通道会话密钥和您的REAL数据可以使用此密钥加密,因为会话密钥尚未以明文形式发送。

Rijindael是对称加密算法的一个例子,其中公钥加密算法是不对称的。公钥加密算法的例子是RSA,ECDSA(加密)等......

答案 1 :(得分:0)

生成短使用密钥。有一个长期的关键。与接收方同意日期格式。每天将您的长期密钥与当天的日期连接起来,并将其与SHA-256一起使用,以生成仅在该日期使用的日期密钥:

dayKey <- SHA256("my very secret long term key" + "2012-06-27")

接收者将拥有他们在最后生成完全相同的密钥所需的所有信息。任何攻击者都会知道日期,但不会知道长期密钥。

您需要在午夜左右和其他一些细节达成协议。

每月或每两个月更改一次长期密钥,具体取决于您传递的加密数据量。您传递的数据越多,您需要更改长期密钥的次数就越多。