Encryption 我应该从散列生成密钥进行加密吗?

Encryption 我应该从散列生成密钥进行加密吗?,encryption,rijndael,Encryption,Rijndael,我目前正在CBC模式下使用Rijndael 256位加密一些需要发送到其他地方的数据。为了增强安全性,我使用随机生成的SHA-256散列并使用公式切掉它的不同部分,以使用加密密钥和初始化向量(当然,散列与数据一起发送)。生成key和IV的公式相当基本,因为代码是用PHP编写的,所以它被编码到用户可访问的页面中。我想知道的是:这比一把固定的钥匙和/或IV更安全还是更不安全?这可能不是你想要的方式。本质上,一个好的黑客需要很短的时间才能找到你的数学公式来操纵散列来生成你的密钥和IV。因此,你基本上是

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

这可能不是你想要的方式。本质上,一个好的黑客需要很短的时间才能找到你的数学公式来操纵散列来生成你的密钥和IV。因此,你基本上是将密钥和王国本身一起发送到王国

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

现在,双方都有通信通道会话密钥,您的真实数据可以使用该密钥加密,因为会话密钥尚未以明文形式发送


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

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

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

dayKey如果密钥与数据一起发送,那么它不是加密,只是混淆。密码学的一个基本规则是永远不要重复使用同一个密钥+IV组合。这意味着每条消息都应该有一个不同的IV。这并不是一个基本规则,否则就不会有一个由非常优秀的密码学家设计的会话密钥的想法。然而,如果你真的能做到,这是一个“好”的规则!!!谢谢你的信息。由于很难获得会话密钥,我决定在整个过程中使用单个加密密钥。我有什么方法可以让它更安全呢?你真的不能,如果你只有一个密钥,那么在某个时间点,足够的数据将通过链接来尝试加密攻击。还有一件事。非对称加密和发送会话ID作为对称加密密钥解密我的数据有什么好处,而不仅仅是公钥加密数据本身吗?非对称本质上是公钥加密!!!其思想是公钥是不对称的,因为解密的密钥与加密的密钥不同。您(秘密持有者)将使用您的私有非对称密钥加密对称算法密钥。只有您知道这个非对称私钥。你想知道的每个人都可以拥有你的公开解密密钥。这就保护了对称会话密钥,因为只有你想知道的人才会真正知道它,甚至他们也永远不会得到你的私有非对称密钥,所以你可以随时更改对称密钥。我知道这一点。我的意思是,我不明白为什么我应该对密钥进行非对称加密来对称加密我的数据,而对我的数据进行非对称加密(至少从我对密码学的有限理解来看)同样有效,因为非对称加密更难破解。毕竟,如果他们可以破解我的非对称加密数据,他们就可以破解我的非对称加密密钥,然后用它来窃取我的数据。