使用AES进行文件完整性检查,替换MD5

Mak*_*kai 6 encryption hash md5 aes

首先:我知道AES是块密码而不是散列函数.但是,我坚持使用微控制器,RAM和闪存很少,并且已经在其上实现了AES-128并用于其预期目的 - 加密.

不幸的是,我还必须在同一个微控制器上实现文件完整性检查的散列函数.鉴于资源有限,我想知道是否可以使用现有的AES算法代替MD5进行散列.这样做的一种可能性是:

  1. 使用虚拟密钥加密文件的第一个块(例如全部为零)
  2. 使用先前的加密块作为密钥加密下一个块
  3. 继续这种方式,直到文件中的所有数据都已处理完毕
  4. 使用最后一个加密块作为哈希

从理论上讲,我认为这应该有效.如果文件中的任何位置存在损坏的数据,则会导致所有后续块中的差异.

现在,最大的问题是:这种方法在碰撞方面的表现如何?或者换句话说:最终的"哈希"的分布情况如何?

Jam*_*olk 5

听起来您好像想使用AES-CMAC,这是一种基于AES的身份验证算法。