.NET加密中的MACTripleDES和HMAC之间的区别

时间:2018-07-18 10:09:12

标签: c# .net cryptography

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

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

HMAC的HashCore()

  

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

MACTripleDES的HashCore()

  

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

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

1 个答案:

答案 0 :(得分:4)

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

HMACabstract类,这意味着您无法实例化该类本身。您必须从中得出。

HMAC派生的类在内部调用HashCoreHashCore被重写以为每个派生类执行特定的哈希函数:

  • MD5 for 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。实施DAA的设备应为   能够选择On的最左边的M位作为DAC,其中16 <   M <64,M为8的倍数。DAC生成框图   附录1中给出了示例,附录2中给出了示例。   初始化向量(IV)= 0的密码块链接模式(CBC)   以及IV = D1和数据等于D2的64位密码反馈模式,   D3,...,Dn(请参阅FIPS PUB 81)均产生所需的DAC计算

enter image description here

您可以看到使用CBC模式加密的数据(以64位块为单位)。 MAC是最后一个被截断为24到56位(含)之间的加密数据块。

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

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