【问题标题】:Should I generate a key from a hash for encryption?我应该从散列生成密钥进行加密吗?
【发布时间】:2012-06-27 14:58:41
【问题描述】:

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

【问题讨论】:

  • 如果密钥与数据一起发送,则不是加密,只是混淆。
  • 密码学的一个基本规则是永远不要重复使用相同的密钥+IV 组合。这意味着每条消息都应该有不同的 IV。
  • 这真的不是基本规则,否则不会有由非常优秀的密码学家设计的会话密钥的想法。但是,如果您确实可以做到,这是一个“好”的规则!!!

标签: encryption rijndael


【解决方案1】:

这可能不是您想要的方式。从本质上讲,一个好的黑客很快就会找出你的数学公式来操纵 HASH 来生成你的密钥和 IV。因此,您实际上是在将钥匙连同王国本身一起发送到王国。

这种操作的完成方式通常是生成一个会话密钥(可能与您现在所做的相同),但使用公钥加密方法来加密该会话密钥。然后您使用公钥加密方法将会话密钥发送到您的数据要发送的位置。接收者拥有公钥并且可以加密通信。频道会话密钥。

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

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

【讨论】:

  • 感谢您的信息。由于获取会话密钥的困难,我决定在整个过程中使用单个加密密钥。有什么方法可以让它更安全?
  • 你真的不能,如果你只有一个密钥,那么在某个时间点,足够的数据会通过链接来尝试加密攻击。
  • 还有一件事。与仅加密数据本身的公钥相比,非对称加密和发送会话 ID 以用作对称加密密钥来解密我的数据有什么优势吗?
  • 非对称本质上是公钥加密!!!这个想法是公钥是非对称的,因为解密的密钥与加密的密钥不同。您(秘密持有者)将使用您的私有非对称密钥加密对称算法密钥。除了你之外,没有人知道这个私有的非对称密钥。您想知道的每个人都可以拥有您的公共解密密钥。现在,这可以保护对称会话密钥,因为只有您想知道的人才会真正知道它,甚至他们也永远不会获得您的私有非对称密钥,因此您可以随时更改对称密钥。
  • 我知道这一点。我的意思是我不明白为什么我应该在非对称加密我的数据(至少从我对密码学的有限理解来看)同样有效时,我应该非对称加密一个密钥来对称加密我的数据,因为非对称加密更难一点打破。毕竟,如果他们可以破解我的非对称加密数据,他们就可以破解我的非对称加密密钥,然后用它来窃取我的数据。
【解决方案2】:

关于生成短期使用密钥。有一个长期密钥。与接收方商定日期格式。每天将您的长期密钥与当天的日期连接起来,并使用 SHA-256 对其进行散列以生成仅在该日期使用的日期密钥:

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

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

您需要就午夜前后的协议和其他一些细节达成一致。

根据您传递的加密数据量,每两个月更改一次长期密钥。您传递的数据越多,您需要更改长期密钥的频率就越高。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-31
    • 1970-01-01
    • 1970-01-01
    • 2013-01-08
    • 2010-12-02
    • 1970-01-01
    • 2011-10-06
    相关资源
    最近更新 更多