小马网站建设,网站维护更新费用,北京网页设计学校,品牌建设规划方案在前面的章节中#xff0c;介绍了对通信消息的加密#xff0c;可以保证保密性(机密性)。虽说中间人无法解密通信消息的内容#xff0c;但是可以篡改通信的消息。在接受者视角来看#xff0c;是无法识别通信消息是否被篡改。因此#xff0c;必须引入一种机制#xff0c;保…在前面的章节中介绍了对通信消息的加密可以保证保密性(机密性)。虽说中间人无法解密通信消息的内容但是可以篡改通信的消息。在接受者视角来看是无法识别通信消息是否被篡改。因此必须引入一种机制保证消息的完整性。
单向散列函数
单向散列函数将任意长度的数据通过一个hash散列函数转换成具有固定长度的值即为hash值。单向散列函数有多个别称比如Hash算法消息摘要算法(Message Digest Algorithms)。 特点
相同的数据计算的hash摘要值相等。整个hash过程是一个单向的很难从hash值逆向推导出数据的内容摘要值是不可逆的。原始数据中只要有1个bit变化两份数据计算的hash值也不同。
应用场景 文件比较比如在网站上下载文件时与该文件对应的有其摘要值。为了避免文件在传输过程中被篡改客户端文件下载完成后可以通过hash算法计算该文件的hash值是否与网站提供的相等即可确定文件是否被篡改。再比如平时软件调试时为了确认运行环境的二进制文件是否升级成功可以计算编译环境和运行环境中的同名文件的hash值来判定。 通信消息摘要在通信过程中为了确定消息是否被中间人篡改也需要对通信的内容计算摘要。 身份校验大家所熟知使用的微信QQ和支付宝以及我们的PC登录密码在系统中存储的是用户密码的hash值而非用户的原始密码。如果存储的是用户的原始密码系统一旦出现漏洞黑客就可能获取到所有用户的原始密码这是相当严重的网络安全问题。
常见的Hash算法
MD5MD5是一种比较常见的Hash算法摘要值长度固定是128bits。目前已经被证实不安全了。通过彩虹表对不同的消息组合进行迭代运算如果运算的Hash值匹配那么就猜出原文数据了。SHA1SHA1算法的摘要值长度是160bits在安全性上已经受到质疑。因此不建议继续使用SHA1算法计算摘要。SHA2SHA2算法目前来说是安全的且也是目前推荐的Hash算法。主要有四种SHA-256, SHA-224, SHA-384, SHA-512分别输出256bits, 224bit, 384bits, 512bits。SHA3SHA3算法并不是为了取代SHA2而是完全不同的算法。主要有四种SHA3-256, SHA3-224, SHA3-384, SHA3-512分别输出256bits, 224bit, 384bits, 512bits。
消息验证码(Message Authentication Code, MAC)
单向散列函数(Hash算法)只能避免消息被篡改如果摘要值也被篡改那么就无法保证数据的完整性了。 因此需要新引入带秘钥的消息验证码的机制。在对消息计算消息摘要时连同秘钥一起作为MAC运算的输入计算得到的MAC值与消息一并发给接受者。接受者接收到的消息与秘钥输入到MAC运算算法将计算后的MAC值与接收的MAC进行比较即可确定消息的完整性。 特点
证明消息没有被篡改保证完整性。证明消息是秘钥拥有者发送。
应用场景
在通信内容无敏感信息时只是为了保证信息的完整性防止被篡改可以使用MAC算法来保证。在加密通信中可以先基于明文计算MAC值也可以基于密文计算MAC值保证消息的完整性。
即便在通信过程中MAC值同样被修改了那么接收方就无法比较成功。如果需要修改成匹配的MAC值必须还要获取到通信双方中所使用的秘钥。 常见的MAC算法
CBC-MAC 由块密码算法的CBC模式演化而来最后一个密文的分组的值就是MAC值。在OPENSSL中未直接提供该算法。HMAC 使用Hash算法作为加密基元。常见的有HMAC-SHA-1、HMAC-SHA256、HMAC-SHA512。