正如标题所述,我不太了解键控哈希算法的两种实现之间的区别(或更确切地说,MACTripleDES
与HMAC
的实现之间的区别)。
ComputeHash()
和HashCore()
都可以。我看到的唯一区别是,在MACTripleDES
中,您可以指定要使用的哈希函数类型以及:
HMAC的HashCore()
:
将写入对象的数据路由到默认的HMAC哈希算法中,以计算哈希值。
MACTripleDES的HashCore()
:
将写入对象的数据路由到TripleDES加密器中,以计算消息验证码(MAC)
根据我对MAC的了解,您使用键控哈希算法来消化消息以产生MAC。因此,在MACTripleDES
中,您可以使用某种哈希算法对消息进行哈希处理,然后使用TripleDES对其进行加密以生成MAC,而在HMAC
中,您只是在原始消息上直接使用某种密钥哈希算法?
答案 0 :(得分:4)
MACTripleDES
不使用哈希函数来计算MAC。它使用TripleDES
这是一种加密算法。
HMAC
是abstract
类,这意味着您无法实例化该类本身。您必须从中得出。
从HMAC
派生的类在内部调用HashCore
。 HashCore
被重写以为每个派生类执行特定的哈希函数:
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计算
您可以看到使用CBC模式加密的数据(以64位块为单位)。 MAC是最后一个被截断为24到56位(含)之间的加密数据块。
尽管FIPS 113将DES
指定为算法,但同样适用于TripleDES
。
注意:由于DES
和TripleDES
被认为是不安全的,因此MACTripleDES
也是如此。这就是撤销FIPS 113的原因。