消息认证码 - CSDN
  • 消息认证码(message authentication code)MAC

    千次阅读 2018-10-30 22:00:43
    消息认证码,或者MAC,用于检测对消息的串改。加密使Eve不能够获取消息的内容,但不能防止Eve对消息进行操作,这是就需要消息认证码。与加密消息一样,MAC也使用一个秘钥K,Alice和Bob知道秘钥但Eve不知道。当Alice...

    消息认证码,或者MAC,用于检测对消息的篡改。加密使Eve不能够获取消息的内容,但不能防止Eve对消息进行操作,这是就需要消息认证码。

    "消息认证码 — 消息被正确传送了吗?

    与加密消息一样,MAC也使用一个秘钥K,Alice和Bob知道秘钥但Eve不知道。当Alice向Bob发送消息m时,不仅仅发送消息m,而且还发送一个由MAC函数计算得到的MAC值。Bob检验即接受到消息的MAC值与收到的MAC值是否相等,如果不匹配则丢失这个没能通过认证的消息。由于Eve不知道秘钥K,所以不能为篡改后的消息找得到正常的MAC值,从而保证Eve不能对消息进行操纵。

    在这里插入图片描述

    在消息认证码中,需要发送者和接收者之间共享密钥,而这个密钥不能被主动攻击者Mallory获取。如果这个密钥落入Mallory手中,则Mallory也可以计算出MAC值,从而就能够自由地进行篡改和伪装攻击,这样一来消息认证码就无法发挥作用了。

    发送者和接收者需要共享密钥,这一点和我们介绍的对称加密很相似。实际上,对称加密的密钥配送问题在消息认证码中也同样会发生。关于秘钥的配送后边章节会介绍如何使用非对称加密的方式进行解决。

    第三方证明
    假设Bob在接收了来自Alice的消息之后,想要向第三方验证者Victor证明这条消息的确是Alice发送的,但是用消息认证码无法进行这样的证明,这是为什么呢?
    首先,Victor要校验MAC值,就需要知道Alice和Bob之间共享的密钥。

    假设Bob相信Victor, 同意将密钥告诉Victor,即便如此,Victor也无法判断这条消息是由Alice发送的,因为Victor可
    以认为:“即使MAC值是正确的,发送这条消息的人也不一定是Alice,还有可能是Bob。"
    能够计算出正确MAC值的人只有Alice和Bob,在他们两个人之间进行通信时,可以断定是对方计算了MAC值,这是因为共享这个密钥的双方之中,有一方就是自己。然而,对于第三方Victor、Alice或Bob却无法证明是对方计算了MAC值,而不是自己。

    防止否认
    假设Bob收到了包含MAC值的消息,这个MAC值是用Alice和Bob共享的密钥计算出来的,因此Bob能够判断这条消息的确来自Alice。
    但是,上面我们讲过,Bob无法向验证者Victor证明这一点,也就是说,发送者Alice可以向Victor声称:“我没有向Bob发送过这条消息。”这样的行为就称为否认(repudiation)。
    Alice可以说“这条消息是Bob自己编的吧",“说不定Bob的密钥被主动攻击者Mallory给盗取了,我的密钥可是妥善保管着呢" 等。说白了,就是Alice和Bob吵起来了。
    即便Bob拿MAC值来举证,Victor也无法判断Alice和Bob谁的主张才是正确的,也就是说,用消息认证码无法防止否认(nonrepudiatlon)。

    消息认证码是对消息进行认证并确认其完整性的技术。通过使用发送者和接收者之间共享的密钥,就可以识别出是否存在伪装和篡改行为。
    消息认证码可以使用单向散列函数HMAC, 对称加密也可以实现, 这里不再进行介绍。
    消息认证码中,由于发送者和接收者共享相同的密钥,因此会产生无法对第三方证明以及无法防止否认等问题。在数字签名可以解决。

    展开全文
  • 消息认证码(MAC)解读

    千次阅读 2018-11-22 11:18:27
    MAC(消息认证码)解读 背景 在开放的计算和通信世界(例如Internet)中,我们会使用不可靠的媒介传输和存储信息。而对信息完整性(integrity)的校验在某些情景下就十分重要。基于密钥作完整性校验的方法常称为MAC...

    MAC(消息认证码)解读

    背景

    在开放的计算和通信世界(例如Internet)中,我们会使用不可靠的媒介传输和存储信息。而对信息完整性(integrity)的校验在某些情景下就十分重要。基于密钥作完整性校验的方法常称为MAC(Message Authentication Code)。通常MAC在共享密钥的双方之间,校验相互传递的信息。

    实现过程

    使用 MAC 验证消息完整性的具体过程是:假设通信双方 A 和 B 共享密钥 K,A用消息认证码算法将 K 和消息 M 计算出消息验证码 Mac,然后将 Mac 和 M 一起发送给 B。B 接收到 Mac 和 M 后,利用 M 和 K 计算出新的验证码 Mac*,若 Mac*和Mac 相等则验证成功,证明消息未被篡改。由于攻击者没有密钥 K,攻击者修改了消息内容后无法计算出相应的消息验证码,因此 B 就能够发现消息完整性遭到破坏。

    类别

    消息认证码(MAC),在加密的过程中有两种方法,一种是用单向散列函数的实现,另一种是分组密码的实现。

    单向hash函数实现

    MAC

    上图是MAC算法的的加密过程, 如上图所示,实现过程较为简单对要传输的消息加上一个通信双方共享的密钥,然后作一次hash运算,得到一个MAC值。传输消息时,连同MAC值一起发送给接收放,接收方收到信息后,自己再对信息作一次相同的hash运算得到另一个MAC值,与发送方传来的进行比对,若有差异则说明消息被篡改。

    而MAC函数用单项hash函数加密时,MAC被称为HMAC(Hash Message Authentication Code).

    这里对其进行简要介绍

    HMAC (k,m) = H ( (k XOR opad ) + H( (k XORipad ) + m ) )

    其中

    H 是一个Hash函数, 比如, MD5, SHA-1and SHA-256,

    k 是一个密钥,从左到右用0填充到hash函数规定的block的长度,如果密钥长度大于block的长度,就对先对输入key作hash。

    m 是需要认证的消息,

    + 代表“连接”运算,

    XOR 代表异或运算,

    opad 是外部的填充常数(0x5c5c5c…5c5c, 一个block长度的十六进制常数constant),

    ipad 是内部填充常数 (0x363636…3636,一个block长度的十六进制常数constant)。

    特定HMAC实现需要选择一个特定的hash函数。这些不同的HMAC实现通常标记为:HMAC-MD5,HMAC-SHA1, HMAC-SHA256等等. 论文 [Bellare+96]对HMAC的安全性作了全面的分析。

    分组密码实现(基于AES组)

    AES(Advanced Encryption Standard),高级加密标准,是一种十分常见的对成加密算法。(ps:微信小程序加密传输就是用的AES加密算法)

    分组加密的工作模式有ECB,CBC,CFB,OFB四种,其中CBC和ECB这两种模式比较常用。

    CBC-MAC

    当取AES作为MAC加密的分组密码时,一般采用CBC模式,所以通常称为基于AES的CBC-MAC,若需要产生认证码的消息为x,加密的AES密钥为k,则生成加解密的过程如下图所示

    image-20181107204036868

    FB8E2A6A3FBB60FDFED5004F2240B7FF

    上图分别为CBC(密文分组链接方式)的加密和解密过程。可以看出不同于EBC(电子密码本模式),他在加密过程中,报文的不同分组之间是有联系的,增加了其安全性。

    加密步骤如下:

    1)首先将数据按照8个字节一组进行分组得到D1D2…Dn(若数据不是8的整数倍,用指定的PADDING数据补位)

    2)第一组数据D1与初始化向量IV异或后的结果进行AES加密得到第一组密文C1(初始化向量I为全零)

    3)第二组数据D2与第一组的加密结果C1异或以后的结果进行DES加密,得到第二组密文C2

    4)之后的数据以此类推,得到Cn

    5)按顺序连为C1C2C3…Cn即为加密结果。

    解密是加密的逆过程,步骤如下:

    1)首先将数据按照8个字节一组进行分组得到C1C2C3…Cn

    2)将第一组数据进行解密后与初始化向量I进行异或得到第一组明文D1(注意:一定是先解密再异或)

    3)将第二组数据C2进行解密后与第一组密文数据进行异或得到第二组数据D2

    4)之后依此类推,得到Dn

    5)按顺序连为D1D2D3…Dn即为解密结果。

    这里注意一点,解密的结果并不一定是我们原来的加密数据,可能还含有补位数据,将其去掉才是最终的结果。

    特点:

    1.每个密文块依赖于所有的信息块,明文消息中一个改变会影响所有密文块,不容易主动攻击,安全性好于ECB,适合传输长报文

    2.发送方和接受方都需要知道初始化向量(IV)

    3.加密过程是串行的,无法被并行化(在解密时,从两个邻接的密文块可以得到一个平文块,因此解密过程可以并行执行)

    OMAC

    OMAC(One-key CBC-MAC),是从CBC-MAC改进而来,克服了CBC-MAC的一些缺陷。在2005年被NIST(美国国家标准与技术研究生院)列为推荐标准。

    omac算法的核心是cbc-mac的一种变种,是基于一种叫xcbc的算法改进的。xcbc算法有效的解决了cbc-mac的一些安全方面的缺陷,但是需要三个密钥。有人在此基础上,改进了xcbc算法,并把它命名为one-key cbc-mac(omac).之后提交了omac1,在omac的基础了做了精简,并做了一些安全性分析。

    omac1.jpg

    omac.jpeg

    上图是omac算法的执行过程,为了使用b比特块密码(E)和秘密密钥(k)生成消息(m)的l比特CMAC标签(t),首先生成两个b比特子密钥(k1和k2)使用以下算法(这相当于在有限域GF(2b)中乘以x和x2)设«表示标准左移运算符,⊕表示逐位排他或:

    1.计算临时值k0 = Ek(0)
    2.如果msb(k0)= 0,则k1 = k0 << 1,否则k1 =(k0 << 1)⊕C;其中C是一个仅取决于b的特定常数。 (具体来说,C是按字典顺序排列的第一个不可约度-b二元多项式的非前导系数,具有最小数量的1:64位为0x1B,128位为0x87,256位为0x425)
    3.如果msb(k1)= 0,则k2 = k1 << 1,否则k2 =(k1 << 1)⊕C
    4.返回MAC生成过程的密钥(k1,k2)

    作为一个小例子,假设 b = 4,C = 00112,并且k0 = Ek(0)= 01012。然后k1 = 10102并且k2 =0100⊕0011= 01112。

    CMAC标签生成过程如下:

    1.将消息分成b位块m =m1∥…∥mn-1∥mn,其中m1,…,mn-1是完整的块。(空消息被视为一个不完整的块。)
    2.如果mn是一个完整的块,则mn’=k1⊕mnmn’=k2⊕(mn∥10… 02)。
    3.设C0 = 00 … 02
    4.对于i = 1,…,n - 1,计算ci = Ek(ci-1⊕mi。
    5.Cn = Ek(Cn-1⊕mn’)
    6.输出t =msbℓ(cn)
    验证过程如下:

    1.使用上面的算法生成标记。
    2.检查生成的标记是否与接收的标记相同。

    Reference

    RFC2104关于HMAC的定义

    维基百科中关于mac等的介绍:

    mac wiki

    hmac wiki

    cbc-mac wiki

    cmac wiki

    展开全文
  • 消息认证码(MAC)

    千次阅读 2018-02-04 15:49:52
    消息认证码(MAC,Message Authentication Code) 在无线通信中,为了防止攻击者更改消息内容,需要验证消息的完整性。消息认证码(Message Authentication Code, MAC)就是用来验证消息是否完整的数值,也称为密码...

    消息认证码(MAC,Message Authentication Code)

    • 在无线通信中,为了防止攻击者更改消息内容,需要验证消息的完整性。消息认证码(Message Authentication Code, MAC)就是用来验证消息是否完整的数值,也称为密码校验和。因此,消息认证码在移动无线网络中应用广泛。
    • 使用 MAC 验证消息完整性的具体过程是:假设通信双方 A 和 B 共享密钥 K,A用消息认证码算法将 K 和消息 M 计算出消息验证码 Mac,然后将 Mac 和 M 一起发送给 B。B 接收到 Mac 和 M 后,利用 M 和 K 计算出新的验证码 Mac*,若 Mac*和Mac 相等则验证成功,证明消息未被篡改。由于攻击者没有密钥 K,攻击者修改了消息内容后无法计算出相应的消息验证码,因此 B 就能够发现消息完整性遭到破坏。
    • 在安全性方面,一个安全的 MAC 算法要满足三个条件:抗碰撞性;消息认证码在其空间内均匀分布;消息验证码的一个或一些比特不能弱于其他比特。满足以上三个条件的消息验证码能够防止穷举搜索攻击,攻击者也无法成功伪造一个消息验证码。由于哈希函数能够满足以上消息验证码算法的安全需要,并且计算开销较小,所以本文协议中的消息验证码采用的是带密钥的哈希函数算法。

    参考文献:
    陈圆. LTE 网络接入认证协议研究[D]. 西安电子科技大学, 2015.

    展开全文
  • 消息认证码

    2019-06-24 20:06:49
    消息认证码 保证完整性 消息认证码认证过程 消息认证码认证步骤例子 消息认证码问题 依然存在密钥分发问题 无法防止否认:(双发都有密钥,都可以否认自己发过某个消息) 无法进行第三方证明 所以引出了非对称...

    消息认证码

    保证完整性

    消息认证码认证过程

    在这里插入图片描述

    消息认证码认证步骤例子

    在这里插入图片描述

    消息认证码问题

    1. 依然存在密钥分发问题
    2. 无法防止否认:(双发都有密钥,都可以否认自己发过某个消息)
    3. 无法进行第三方证明
    • 所以引出了非对称加密的数字签名

    非对称加密的数字签名

    1. 不需要发送私钥
    2. 私钥自己持有,无法否认
    3. 可以进行第三方证明,使用公钥可以帮忙认证
    展开全文
  • 消息认证码的攻击

    千次阅读 2018-09-24 20:26:12
    一 重放攻击 1 故事 主动攻击者Mallory想到可以通过将事先保存的正确MAC值不断重放来发动攻击,如果这种攻击成功的话,就可以让100万元滚雪球般地变成1亿元。...于是Alice银行生成了下列汇款请求消息: “向...
  • 认证篇——消息认证码

    千次阅读 2019-01-15 11:30:13
    一、消息认证码介绍 1)消息认证码的使用步骤: 2)消息认证码的密钥配送问题: 3)消息认证码的实例: 4)消息认证码的实现: 二、HMAC(可忽略) 三、对消息认证码的攻击 四、消息认证码无法解决的问题...
  • 消息认证码的应用和实现

    千次阅读 2018-09-23 16:28:24
    一 消息认证码的应用 1 SWIFT ...而为了确保消息的完整性以及对消息进行验证,SWIFT中使用了消息认证码。 在使用公钥密钥进行密钥交换之前,消息认证码所使用的共享密钥都是由人来进行配送的。 ...
  • 什么是消息认证码 消息认证码是密码学家工具箱中6个重要的工具之一。回忆一下,这6个重要的工具分别是:对称密码、公钥密码、单向散列函数、消息认证码、数字签名和伪随机数生成器。 消息认证码(Message ...
  • 一 消息认证码的使用步骤 1 消息认证码的使用步骤图例 2 图解 a 发送者Alice与接收者Bob事先共享密钥。 b 发送者Alice根据汇款请求消息计算MAC值(使用共享密钥)。 c 发送者Alice将汇款请求和MAC值...
  • 消息认证码算法

    2017-03-29 21:43:29
    消息认证码算法的产生一定程度上是因为,处于安全考虑很多人已经开始在做消息摘要之前,先对原始的消息加上一个key之后,再做hash之类的处理,但是这样的处理方式仍然存在安全隐患,于是消息认证码算法应运而生。...
  • 消息认证码无法解决的问题

    千次阅读 2018-09-24 20:22:16
    假设发送者Alice要向接收者Bob发送消息,如果使用了消息认证码,接收者Bob就能够断定自己收到的消息与发送者Alice所发出的消息是一致的,这是因为消息中的MAC值只有用Alice和Bob之间共享的密钥才能够计算出来,即便...
  • 密码编码学初探——消息认证码

    千次阅读 2017-11-14 13:16:00
    对称密码在那些互相共享密钥的用户间提供认证消息认证码:一种需要使用密钥的算法,以可变程度的消息和密钥作为输入,产生一个认证码。拥有密钥的接收方能够计算验证码验证消息的完整性。消息认证函数: 1.Hash函数...
  • 消息认证码(message authentication code) 消息认证码(message authentication code)是一种确认完整性并进行认证的技术,简称为MAC 消息认证码的输入是任意长度的消息和一个发送者与接收者之间的共享的密码,它...
  • 六、消息认证码

    2019-04-12 19:38:10
    消息认证码 — 消息被正确传送了吗? 消息的完整性(integrity), 指的是“消息没有被篡改"这一性质,完整性也叫一致性。 消息的认证(authentication)指的是“消息来自正确的发送者"这一性质。 消息认证码(message ...
  • 哈希hash与消息认证码

    千次阅读 2019-06-24 23:49:24
    哈希hash与消息认证码 哈希hash 特点 不可逆(原像不可逆) 单向的,无法通过哈希值反推会原内容 抗碰撞 基数极大,无法给定义一个哈希,找到另外的内容,两者哈希值相同。 唯一性(算法固定时) 内容不变,...
  • 加密之消息认证码MAC和HMAC 消息认证码 什么是消息认证码??? 我们来举个例子 我们假设现在有两家银行 银行A和银行B 如果现在银行A给银行B发送了一条请求 张三给李四汇款1000元 银行B接收到这个请求就会执行 ...
  • 一 消息认证码中的密钥 在消息认证码中,发送者和接收者使用共享密钥来进行认证。消息认证码只能由持有合法密钥的人计算出来。将消息认证码附加在通信报文后面,就可以识别通信内容是否被篡改或伪装。由于“持有...
  • 09.消息认证码

    2018-10-20 08:44:50
    消息认证码(message authentication code)是一种确认完整性并进行认证的技术,取三个单词的首字母,简称为MAC。 1.2 消息认证码的使用步骤 前提条件 在消息认证码生成的一方和校验的一方, 必须有一个秘钥...
  • 消息认证码 hmac

    2017-10-24 12:03:53
    hmac 消息认证码
  • 但感觉消息认证码由于两端都有会话密钥并不能验证原发性。 MAC消息认证码:对原文hash产生摘要值后,用会话双方的对称会话密钥加密摘要,算法为现有的对称算法,如DES。获取MAC值。 HMAC消息认证码:特定的mac算法...
1 2 3 4 5 ... 20
收藏数 199,900
精华内容 79,960
热门标签
关键字:

消息认证码