这种散列技术有多强?
Posted
技术标签:
【中文标题】这种散列技术有多强?【英文标题】:How strong is this hashing technique? 【发布时间】:2010-12-16 00:45:49 【问题描述】:使用 AES/Rijndael 或任何对称加密。
使用自己作为密钥和随机 IV 加密隐藏值。
存储密文 + IV。丢弃其他所有内容。
检查哈希:尝试使用提供的明文解密。如果提供 == 解密就可以了。
忽略密文长度问题。
这样安全吗?
【问题讨论】:
首先,散列 != 加密并从可逆加密开始不会给您带来任何好处。安全哈希和加密都是非常困难的问题™,您最好使用经过验证的算法的现有实现。 对。但在这里,加密是用来散列的。据我所知,除了暴力破解之外没有其他可能的方法,再加上“哈希”比明文长,因此哈希 文本。无论如何谢谢(+1) 当有非常好的哈希算法可以按原样使用时,为什么要这样做? @Nick 为了好玩。当然,我不会在现实世界的应用程序中使用它。 @Stephen:我必须为一个真实世界的嵌入式系统编写一些代码,该系统在一个小型微控制器上运行,其中我已经有一个分组密码实现;我现在需要添加一个散列函数来将任意数据流转换为 56 位散列。简单比速度更重要。类似于这种通用方法的东西似乎很有用,尽管我会采取不同的做法(见我的回答)。 【参考方案1】:有一种使用像 AES 这样的分组密码生成哈希或 MAC 的现有方法。它被称为CBC-MAC。它的操作非常简单。只需在 CBC 模式下使用 AES 加密要散列的数据并输出密文的最后一个块,丢弃所有先前的密文块。 CBC 的 IV 通常会保留为零,而 AES 密钥可用于生成 MAC。
CBC-MAC 确实有一些限制。不要使用相同的密钥和 IV 对您的数据进行加密和 MAC,否则 MAC 将简单地等于密文的最后一个块。此外,散列/MAC 的大小受限于分组密码的大小。将 AES 与 CBC-MAC 结合使用会产生 128 位 MAC,而 MAC 通常预计至少是这个大小。
值得注意的是,CBC-MAC 是一种非常低效的 MAC 生成方式。更好的方法是在 HMAC 中使用 SHA2-256 或 SHA2-512。在我最近的测试中,在 HMAC 中使用 SHA256 产生的结果大约与 CBC-MAC 中的 AES 一样快,并且在这种情况下,HMAC 的宽度是其两倍。但是,新的 CPU 将使用 AES 硬件加速来生产,从而可以使用 CBC-MAC 模式下的 AES 快速生成 128 位 MAC。
【讨论】:
【参考方案2】:如前所述,它有一个问题,即它揭示了关于被散列的数据长度的信息。这本身就是某种弱点。
其次...尚不清楚您是否能够检查哈希。有必要将随机生成的 IV 与哈希一起存储。
我在骑自行车回家时正在考虑这个问题,然后想到了另一个可能的问题。使用典型的散列方案来存储密码,最好运行散列一系列迭代(例如,PBKDF2)。这使得进行蛮力攻击变得更加昂贵。将这种想法引入您的方案的一种可能性可能是重复循环加密数据(例如,将加密块反馈回自身)。
【讨论】:
对于长度......我明白你的意思,虽然如果我限制明文长度并填充它,这个弱点就会消失。只有这两点吗? @passcod:我想到了另一个潜在问题和可能的解决方案,并在编辑中添加了它。尽管如此,这是一个有趣的问题。 确实如此。但是实现重复是微不足道的。我更多地关注一个论点,即使用某种东西来加密自身并不安全......我对密码学的内部工作并没有那么深入。 我无法从这个角度回答这个问题。我还没有对这样的“真实”算法进行任何密码分析。我目前的方法是阅读“专家”所说的并做到这一点。可能存在一些奇怪的数学相关性,可以通过使用自身加密密码而不是散列来利用这些相关性。基于此,我的意见是使用真正的哈希函数。我的“直觉”感觉是您的提议还可以……但我不建议您根据我对如此复杂事物的直觉做出任何决定。以上是关于这种散列技术有多强?的主要内容,如果未能解决你的问题,请参考以下文章
美国Gartner权威报告揭露华为技术(18个)实力有多强?