这种散列技术有多强?

时间:2010-12-16 00:45:50

标签: hash cryptography encryption-symmetric

  1. 使用AES / Rijndael或任何对称加密。

  2. 使用自身作为密钥和随机IV加密隐藏值。

  3. 存储密文+ IV。放弃其他一切。

  4. 检查哈希:尝试使用提供的明文解密。如果提供==解密,那就没关系。

  5. 忽略密文长度问题。

  6. 这安全吗?

2 个答案:

答案 0 :(得分:3)

存在使用像AES这样的分组密码生成散列或MAC的现有方法。它被称为CBC-MAC。它的操作非常简单。只需在CBC模式下使用AES加密要散列的数据,然后输出密文的最后一个块,丢弃密文的所有先前块。 CBC的IV通常保留为零,AES密钥可用于生成MAC。

CBC-MAC确实有一些限制。不要使用相同的密钥和IV加密和MAC数据,否则MAC将简单地等于密文的最后一个块。此外,散列/ MAC的大小限制为分组密码的大小。使用带有CBC-MAC的AES可产生128位MAC,并且通常预计MAC至少为此大小。

值得注意的是,CBC-MAC是一种非常低效的MAC生成方式。更好的方法是在HMAC中使用SHA2-256或SHA2-512。在我最近的测试中,在HMAC中使用SHA256产生的结果大约与CBC-MAC中的AES一样快,并且在这种情况下HMAC的宽度是其两倍。但是,将使用AES的硬件加速生成新的CPU,允许使用CBC-MAC模式的AES来非常快速地生成128位MAC。

答案 1 :(得分:2)

如上所述,它的问题在于它揭示了被散列数据长度的信息。这本身就是某种弱点。

其次......目前尚不清楚您是否可以检查哈希值。有必要使用哈希值存储随机生成的IV。

我在骑自行车回家时正在考虑这个问题,另一个可能的问题浮现在脑海中。使用典型的散列方案来存储密码,最好运行散列一堆迭代(例如,PBKDF2)。这使得进行暴力攻击的成本更高。将该想法引入您的方案的一种可能性可能是重复循环加密数据(例如,将加密块反馈回自身)。