.NET MAC算法并实现ISO 9797 MAC算法1

时间:2018-08-23 13:32:24

标签: c# .net cryptography

我需要在.NET中实现ISO 9797 MAC算法1。在编写代码之前,我想了解这些概念,以免造成误解(如果某些问题只是“正确”,请原谅我)。

首先,在Wikipedia page中说:

  

算法1通常称为CBC-MAC

问题1:我的参考文献在两点提到了MAC算法-一方面提到了ISO 9797 MAC算法1(DES),另一方面提到了CBC-MAC(AES)。据我了解,这些应该是相同的CBC-MAC,一个是DES,另一个是AES,对吗?在我的参考文献中这些术语是否可以互换使用?

问题2: CBC-MAC与CBC操作模式相同是否正确?从我所看到的算法是相同的-您输入,您进行异或,然后用密钥加密它。

问题3 :如果我使用DES并且我的上述推理正确,那么这与ANSI X9.9是否相同?我对此的参考不是很清楚,但这是我看过之后收集到的。

1 个答案:

答案 0 :(得分:1)

Q1:是的,这些应该相同。这也意味着对于DES,仅单个DES用于保护MAC。由于使用的密钥大小,这是不安全的。

Q2:是的,这就是为什么它被称为CBC-MAC的原因,区别在于输出仅包含最后一个“密文”块或最后一个块的一部分。反过来,这意味着将其与使用相同密钥的密码模式结合使用是不安全的,并且如果使用动态大小的消息,则MAC容易受到攻击。请注意,CBC-MAC通常使用位填充或ISO填充(DES的值为0x80字节,后跟0-7的0-7字节),而不是PKCS#5或PKCS#7填充。

Q3:ANSI X9.9似乎描述了CBC-MAC,其中输出大小仅为4个字节。可以在here中找到说明和图片。


对于AES,已经编写了一种更好的MAC模式,以允许动态调整大小的消息称为AES-CMAC或OMAC。它由初始和最终计算组成,中间使用标准CBC-MAC。