密钥、消息认证码、单向散列函数、数字签名的介绍和在openssl当中的使用


前言

本文简单介绍了常见的网络攻击方式和一些防御手段,包括密钥、消息认证码、单向散列函数、数字签名。其中只涉及到一些基础知识,没有涉及一些复杂的数学运算,因为作为开发人员只需要了解原理,调用openssl之类封装的算法接口即可,而不需要进行发开具体的算法。

一、常见网络攻击方式及应对方法

在这里插入图片描述
窃听: A给B发送信息,信息以明文传输,在途中c可以截获A发送的信息,c就窃听了A发送给B的数据。破坏了数据的机密性,可以对数据加密传输,加密方法有对称加密、非对称加密。
假冒: A给B发送消息,C在途中截获消息,同时C将自己的消息以A的名义发送给B,B收到消息以为是A发送的,其实是C假冒A进行发送的。解决这种攻击就需要对消息进行认证,常见的认证方式有消息认证码、数字签名。
篡改: A给B发送消息,C在途中截获消息,将截获的消息进行修改然后再发送给B,这时B收到的是C进行篡改后的消息。这破坏了消息的完整性,对数据进行完整性保护的方式有:消息认证码、单向散列函数、数字签名。
否认: A给B发送消息,B收到消息后认定是A发送的消息,但是A否认自己发送过消息,这时B并没有证据证明这条消息是A发送的。为了避免这种情况就要是消息具有不可否认性,实现手段为:数字签名。数字签名用私钥进行签名,私钥只有A保存,所以进行签名后就就有证据表明是A发送的数据。

二、防御方法简介

对称密钥

在这里插入图片描述
对称密钥:
1.加密和解密都是用的同一密钥。
2.密码算法分为分组密码和流密码,常用的为分组密码。
3.密钥是固定长度的比特序列,长度与不同的加密方法相关,如DES、三重DES为64比特密钥,AES为128比特密钥。加密过程可以简单理解成:将明文与密钥经过不同的加密方法进行运算,使得明文被打乱这就是加密过程;打乱的过程是可逆的,也可以通过密码将密文进行还原,这就是解密。
4.每一次只能加密和密钥长度一致的明文,当明文长度超过密钥长度,这时就需要对分组密码算法进行迭代,以便将一串很长的明文全部加密,迭代的方法称为分组密码的模式。当明文长度小于密钥长度时,就需要对明文进行填充加密,解密后再删除填充的部分。
5.对称密钥国际算法有DES、3DES、AES;国密算法:sm1、sm4、sm7、zuc,常用sm4。
6.主要分组模式有5种:ECB、CBC、CFB、OFB、CTR。其中CBC、CFB、OFB、CTR还需要一个随机数IV作为初始化向量,IV长度和密钥长度一致,这时密钥表示为(key,iv)。常用的为CBC模式。
在这里插入图片描述
ECB模式中明文分组和密文分组是一一对应关系,因此,如果明文中存在多个相同的明文分组,则这些明文分组最终都将被转换为相同的密文分组。这样一来只要观察一下密文,就可以知道明文中存在怎样的重复组合,并可以以此为线索来破译密码,因此ECB模式有一定风险。
在这里插入图片描述
CBC模式是将前一个密文分组和当前明文分组的内容混合起来加密,这样就可以避免ECB模式的弱点。
更多分组内容可以参考:《图解密码技术》

非对称密钥加密

在这里插入图片描述
非对称密钥:
1.密钥对分为公钥和私钥,公钥加密,私钥解密。公钥是公开的,私钥自己私密保存的。
2.对称密钥的加密速度要比非对称密钥快,所以非对称密钥一般不用来加密大量的数据。
3.对称密钥会遇到密钥配送问题,非对称密钥则不存在。可以将两者进行结合如下:
在这里插入图片描述
4.非对称密钥的公钥在配送过程中容易遭到中间人攻击,所以公钥一般被封装成数字证书进行传递。
5.非对称算法的国际算法有:RSA,国密算法SM2
RSA:数学原理是一个大整数很难分解成两个质因数,如果找到高效的分解方法则密钥会被破解。
SM2:是椭圆曲线上的离散对数问题。已知椭圆曲线E,E上的一点G,以及G的x倍点xG,求x是很困难的。其中G是公开参数,xG是公钥,x是私钥。
椭圆曲线密码与RSA相比密钥短但强度高,所以商密算法都是基于椭圆曲线。

数字签名

在这里插入图片描述
1.密钥对分为公钥和私钥,私钥签名,公钥验签。因为私钥只能有固定的某人保存,所以用私钥签名就能确定是谁发送的数据。
2.进行数字签名时,一般会把明文进行摘要后签名,这样签名的速度要快一点。摘要时分两种情况:一种是直接将明文数据进行摘要,另一张情况是在摘要时加入userid和公钥信息进行摘要。
3.进行验签时,用公钥对签名数据进行解密后得到摘要值,然后再将该摘要值与签名之前的摘要值进行对比,一致则验签通过,不一致则验签不过,表明数据被进行了篡改。

数字签名为什么能防止否认

私钥只能由一个人A保存,相当于这个私钥就是这个人的标志,公钥可以明文发送给任何人。也就是说A签名后的数据是独一份的,其他人都不能做出相同的签名数据,发送给其他人进行验签,如果验签通过就表明这个数据一定来自A。

消息认证码

消息认证码(Message Authentication Code)是一种确认完整性并进行认证的技术,他可以输出固定长度的数据,这个数据称为MAC值。消息认证码的输入包括任意长度的消息和一个发送者与接受者之间共享的密钥,他可以输出固定长度的数据,这个数据称为MAC值。
单向散列函数和共享密钥共同加入计算,称为HMAC。
在这里插入图片描述
GCM是一种认证加密方式。GCM中使用AES等128比特分组密码的CTR模式,并使用一个反复进行加法和乘法运算的散列函数来计算MAC值,称为GMAC。
在这里插入图片描述
使用分组密码加密消息后的最后一个分组作为MAC值,如AES-CMAC,使用AEC-CBC对消息进行加密,将加密后的最后一个分组作为MAC值。因为CBC模式的最后一个分组会受到整个消息和密钥的双重影响,所以可以将它作为消息认证码。
在这里插入图片描述

消息认证码为什么有认证功能?

消息认证码加入了共享密钥信息,如A,B之间共享密钥,A发送消息认证码给B,B会对数据进行MAC计算后然后比较A发送的MAC值是否一致,假如只有A和B两人共享密钥,B收到MAC值就能断定是A发送的数据。但是如果C也和他们一起共享密钥,B收到MAC值就不能确定是谁发送的。也就是有有共享密钥都能够计算MAC值,但是不能具体确定到底是谁计算的MAC值,所以消息认证码不能防止否认。

对消息认证码的重放攻击

A发送数据给B,C截获数据从中获取消息认证码,C不破解消息认证码而是重复利用消息认证码发送相同的数据给B,B就会多次解读A的信息。
解决方法:
1.序号:约定每次发送的消息增加一个递增的编号。
2.时间戳:约定在发送消息时包含当前的时间。

单向散列函数

在这里插入图片描述
单向散列函数:
1.通过单向散列函数获取消息的“指纹”,单向散列函数将任意长度的消息变成固定长度的散列值,不同的消息拥有不同的散列值。
2.国际算法:SHA、MD5;国密算法SM3。

随机数

1.随机数的三个性质:随机性、不可预测性、不可重现性。
2.随机数在密码技术中的应用:
生成密钥:用于生成对称密钥和消息认证码。
生成密钥对:用于公钥密码和数字签名。
生成初始化向量IV:用于分组密码的CBC、CFB和OFB模式。
生成nonce:用于防御重放攻击以及分组密码的CTR模式等。
生成盐:用于基于口令的密码(PBE)等。

三 、SSL协议当中对各种防御方法的应用

下图将openssl握手流程中需要运用到的加密算法的报文单独表示出来。
在这里插入图片描述

签名算法

1.server key exchange 中密钥交换算法用ECC,服务端进行签名,客户端进行验签。
2.certificate verify 双向认证时才有这个包,客户端进行签名,服务端进行验签。

非对称加密算法

1.server key exchange 和client key exchange中密钥交换算法使用ECDHE会生成一对临时公私钥。
2.client key exchange 中密钥交换算法用ECC、RSA客户端会用公钥对预主密钥进行加密,服务端用私钥进行解密。

摘要算法

1.在对所有数据进行签名、验签时都要用摘要算法。
2.encrypt handshak message 需要对所有的数据进行摘要计算。摘要算法在openssl当中运用最多。

对称算法和HMAC

1.密钥协商完成后会生成对称密钥和HMAC密钥。对称密钥为握手时算法套件指定的对称密钥,如国密算法对称密钥为SM4-CBC。
2.密钥协商完成后对所有的应用数据都会进行HMAC和ENC,这样能够达到加密认证的作用。
加密认证的方式有两种:一种是MAC THEN ENC 和ENC THEN MAC。
在这里插入图片描述
在这里插入图片描述


总结

本文主要梳理了常见的网络攻击方式,和各种密码学中的常用算法。其中openssl将基本的算法都朗阔其中,在握手流程当中都对各种算法进行了合理的运用。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值