【问题标题】:Different between MACTripleDES and HMAC in .NET cryptography.NET 密码学中 MACTripleDES 和 HMAC 的区别
【发布时间】:2018-07-18 20:12:05
【问题描述】:

正如标题所说,我不太了解键控哈希算法的两种实现之间的区别(或者,准确地说,MACTripleDESHMAC 的实现之间的区别)。

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

HMAC 的HashCore()

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

MACTripleDES 的HashCore()

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

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

【问题讨论】:

    标签: c# .net cryptography


    【解决方案1】:

    MACTripleDES 不使用哈希函数来计算 MAC。它使用TripleDES,这是一种加密算法。

    HMAC 是一个abstract 类,这意味着您不能实例化该类本身。你必须从中派生出来。

    来自HMAC 的派生类在内部调用HashCoreHashCore 被覆盖为每个派生类执行特定的哈希函数:

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

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

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

    附录:

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

    3 代 DAC

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

    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

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-29
      • 2011-05-23
      • 2016-07-13
      • 2020-07-30
      • 2010-09-24
      相关资源
      最近更新 更多