首页 > 解决方案 > .NET 密码学中 MACTripleDES 和 HMAC 的区别

问题描述

正如标题所说,我并不真正理解键控哈希算法的两种实现之间的区别(或者,准确地说,是MACTripleDES和 的实现HMAC)。

都可以ComputeHash()HashCore()。我看到的唯一区别是,MACTripleDES您可以指定要使用哪种类型的哈希函数,并且:

HashCore()HMAC:

将写入对象的数据路由到用于计算哈希值的默认 HMAC 哈希算法。

HashCore()MACTripleDES:

将写入对象的数据路由到 TripleDES 加密器以计算消息验证码 (MAC)

根据我对 MAC 的了解,您可以使用键控哈希算法来消化消息以生成 MAC。因此,在 中MACTripleDES,您使用某种散列算法对消息进行散列,然后使用 TripleDES 对其进行加密以生成 MAC,而在HMAC您只是直接对原始消息使用一些键控散列算法?

标签: c#.netcryptography

解决方案


MACTripleDES不使用哈希函数来计算 MAC。它使用TripleDES哪种加密算法。

HMAC是一个abstract类,意味着您不能实例化该类本身。你必须从中获得。

HMAC从内部调用派生的类HashCoreHashCore被覆盖以对每个派生类执行特定的哈希函数:

  • 用于 HMACMD5 的MD5
  • RIPEMD-160用于 HMACRIPEMD160
  • HMACSHA1的 SHA-1
  • HMACSHA256的 SHA-256
  • HMACSHA384的 SHA-386
  • HMACSHA512的 SHA-512

MACTripleDES,派生自KeyedHashAlgorithm,也有一个HashCore方法,但它与 中的方法不同HMAC。此HashCore方法被定义为专门用于TripleDES计算 MAC。因此,您不能“指定要使用哪种类型的哈希函数”。

由于TripleDES不是散列函数,它不应该也不应该从HMAC.

附录:

根据现已撤回的 FIPS 113 文件:

3 DAC 的产生

数据验证算法 (DAA) 使用 FIPS PUB 46 中指定的数据加密标准 (DES) 加密算法。DES 算法使用加密密钥将 64 位输入向量转换(或加密)为 64 位输出向量。令 D 为任何 64 位输入向量并假设已选择一个键。使用加密操作将 DES 应用于 D 时,作为 DES 算法的输出的 64 位向量 O 表示如下。

O = e(D)

要验证的数据(例如,记录、文件、消息或程序)被分组为连续的 64 位块:D1、D2、.... Dn。如果数据位数不是 64 的倍数,则最终输入块将是部分数据块,左对齐。附加零以形成完整的 64 位块。DAC 的计算由以下等式给出,其中 + 表示两个向量的异或。

01 = e(D1)
02 = e(D2 + 01)
03 = e(D3 + 02)
开 = e(Dn + 0n-1)

DAC 从 On 中选择。实现 DAA 的设备应能够选择 On 的最左边 M 位作为 DAC,其中 16 < M < 64 且 M 是 8 的倍数。附录 1 中给出了 DAC 生成的框图,示例如下附录 2 中给出。初始化向量 (IV) = 0 的密码块链接模式 (CBC) 和 IV = D1 且数据等于 D2、D3、...、Dn 的 64 位密码反馈模式(参见 FIPS PUB 81) 两者都产生所需的 DAC 计算

在此处输入图像描述

如您所见,它是使用 CBC 模式加密的数据(以 64 位块形式)。MAC 是最后一个被截断为 24 到 56 位(含)的加密数据块。

尽管 FIPS 113DES将算法指定为同样适用于TripleDES.

注意:因为DESTripleDES被认为是不安全的,所以MACTripleDES. 这就是 FIPS 113 被撤销的原因。


推荐阅读