2023年7月27日发(作者:)
消息验证码-MAC算法总结密⽂截获篡改如果使⽤的是对称加密,即通常⼀个算法和⼀个密钥的情况下,接收⽅只有使⽤与加密相同的密钥,才能解出正确的密⽂,如果使⽤了不同的密钥,解密出来的明⽂可能就是⼀串乱码。假如在确定密钥是与明⽂加密密钥同⼀个的情况下,解密出来的明⽂如果是可读的,明⽩的,看似就可以确定密⽂是安全的,完整的,来⾃发送者发送过来的,其实不然,如果密⽂信息在发送过程中被别⼈截获了,然后修改密⽂信息,再发送给接收⽅,那么接收⽅即使使⽤正确的密钥,解密出来的明⽂也不是发送⽅原来的明⽂。接收⽅可能在解密后发现明⽂是杂乱⽆章的信息,会发现密⽂被篡改,这种情况还不是最糟糕的,密⽂在途中被截获后,中间⼈可以⽤暴⼒破解等⽅式破解密⽂,导致信息泄露,假设连密钥都被破解了,那么中间⼈可以使⽤密钥任意修改密⽂,重新加密后发送“错误”的密⽂给接收⽅。来具体看个例⼦:左上⾓⾸先⽤命令对⽂件进⾏加密,并将加密密⽂和salt,初始化向量iv⼀起保存到⽂件中。从命令中可以看到,使⽤的是对称加密的标准算法AES算法(AES加密算法中,密钥由⼝令pass和salt⼀起⽣成),密钥长度为256⽐特,使⽤的分组⽅式是CBC密⽂分组连接⽅式,所以才会使⽤到初始化向量iv,CBC模式加密时先和iv进⾏异或运算,再和密钥进⾏运算得到密⽂。 加密后得到的保存着密⽂的⽂件发送给接收⽅,接收⽅进⾏解密,由上图看到,使⽤两次相同解密指令,初始化向量iv,密钥和⼝令都相同的情况下,解密出来的内容不相同,这个例⼦模拟出来⼀个场景,第⼀次解密得到的消息是正确的原⽂,但如果在发送中间消息就被截获和修改,那么使⽤相同的解密命令,解密出的明⽂就是第⼆个,它并不是正确的原⽂。问题在于,它们都不是⼀串乱码或意义不明的语句,对于接收⽅来说,他可能并不知道,解密后的明⽂,是不是来⾃发送者,还是来⾃被中间⼈截获后修改篡改的消息。为了校验出消息是否被篡改,需要⽤到消息验证码。
消息验证-MAC值MAC就是消息验证码(Message Authentication Code)的简称,是⼀种与密钥相关的单向散列函数,它能够做到验证消息是来⾃发送者发送的,正确的没有被篡改过的。具体做法是:1. 发送⽅和接收⽅事先共享同⼀个密钥。2. 发送⽅将发送消息和密钥进⾏MAC运算,得到MAC值,并把MAC值与消息⼀同发送给接收⽅。3. 接收⽅接收到消息后,将消息部分与事先共享的密钥进⾏MAC运算,得到MAC值,将MAC值与发送⽅发送的MAC值进⾏⽐较,如果⼀致,证明消息是来⾃发送⽅。在发送⽅处,将消息和MAC值⼀起发送给接收⽅,接收⽅将收到的密⽂消息与事先共享的密钥进⾏MAC运算,最后和发送⽅发来的MAC值⽐对,如果⼀致,证明消息没有被篡改,是来⾃发送⽅的。因为MAC值来⾃于消息与密钥的运算得到,如果消息⼀旦有修改,那么MAC值也会不同,且由于密钥是通信双⽅事先共享的,没有密钥也就没有办法解出MAC值,MAC算法是与密钥相关的单向散列算法,根据消息和密钥得到MAC值,由于单向性,在知道散列值(MAC值)的情况下,也没办法解出原始信息,因为单向散列函数产⽣的散列值是和原始信息完全不同的⽐特序列,它并不是⼀种加密,所以⽆法逆向根据散列值得到原始信息,消息验证码MAC算法就是通过这样保证消息没有被篡改的。
CBC-MAC和HMAC消息验证码MAC算法有两种,CBC-MAC和HMAC,CBC-MAC从名称上看就知道使⽤到了块密码算法的密⽂分组连接模式,简单回顾下CBC模式,就是先将密⽂等分成多个分组数据块,从第⼀块数据块开始先与⼀个随机⽣成的初始化向量IV进⾏异或运算,运算结果再和密钥进⾏加密运算,得到第⼀块分组密⽂。第⼆块数据块把前⼀块数据块的分组密⽂当作IV,先与其进⾏异或运算,再和密钥进⾏加密得到第⼆块分组密⽂,这样下去,第n个分组数据块会与第n-1个密⽂分组进⾏异或运算,然后和密钥进⾏加密,得到第n个分组密⽂,最后将所有分组密⽂按顺序组合在⼀起,得到完整的密⽂。CBC-MAC算法就是将最后⼀个密⽂分组的值作为MAC值。HMAC算法,哈希消息验证码,很复杂,不过是最常⽤的,HMAC使⽤Hash算法做加密基元,加密基元就是指⼀些基础的加密算法,如Hash,⼀些复杂的加密算法是根据基础的Hash算法构建出来的,如最上⾯例⼦中,对称加密⾥,使⽤⼝令pass和salt加Hash运算得到密钥,Hash算法作为加密基元,每次salt都不同,保证相同的⼝令可以⽣成不同的密钥。与HMAC配合使⽤的散列函数有SHA-1,SHA256和SHA512等,通过Hash函数和密钥得到MAC值,将其与密⽂⼀起发送给接收⽅,待接收⽅进⾏验证。消息验证码MAC算法计算得到MAC值(摘要值),上图举例了使⽤SHA-1散列函数直接对明⽂计算MAC值,然后输出到外部⽂件,和使⽤SHA-1散列函数加密钥计算MAC值两种⽅式。
消息验证码的不⾜加密算法对消息进⾏加密处理,即使消息被中间截获了,如果没有密钥,也很难破解出明⽂,也就⽆法篡改,如果直接篡改密⽂,那么接收⽅解密出来的明⽂很可能就是⼀串乱码或者意义不明的语句,以发现消息被篡改。为了验证消息来⾃发送者,且是正确的没有被篡改过的,就要配合使⽤MAC算法。消息验证码也有⽆法解决的问题,例如⽆法向其他⼈证明该消息是来⾃对⽅的,还是⾃⼰的。假设A和B双⽅进⾏通信,他们之间事先共享密钥,使⽤消息验证码的⽅式计算MAC值。对于不在通信⽅的C来说,假设A收到来⾃B的消息,计算MAC值正确,可以证明消息正确来⾃B,但是A⽆法向C证明该消息是来⾃B的,因为密钥在A和B之间共享,C可以认为这个消息是来⾃A⾃⼰的,因为A也有密钥,也可以计算出正确的MAC值,所以,消息验证码的⽅式,⽆法向第三⽅证明消息的发送⽅。
发布者:admin,转转请注明出处:http://www.yc00.com/news/1690463371a352983.html
评论列表(0条)