数据传输中的安全算法
本文主要介绍了常见的加密方式及CA在认证种扮演的角色。加密可以解决窃听问题,认证码可以解决篡改问题,数字签名可以解决事后否认,数字证书可以解决假冒问题。
数据传输过程面临的安全问题
窃听
假冒
篡改
事后否认
常见的加密方式
共享密钥加密
共享密钥加密一般使用对称加密,加密和当双方需要进行通讯时,通过如下步骤进行:
1. 先进行共享密钥的传输
2. 后续发送者发送消息前先对消息进行加密,接收者在收到密钥信息后先用密钥进行解密
方法的缺点:
共享密钥的传输过程不安全,如果有第三方在密钥传输时就进行监听会导致密钥泄露。
公开密钥加密
公开密钥加密一般使用非对称加密,加密用的密钥叫‘公钥’,解密用的密钥叫‘私钥’。常用的算法为:RAS算法、椭圆曲线加密算法。一般通过如下步骤进行通讯:
假如有A、B两个用户,A需要给B发送数据,那么:
B先生产公钥和私钥,将公钥发送给A
A收到公钥后,将消息进行加密,然后发送给B
B收到消息,使用私钥进行解密,即可获得消息。
存在的问题:
解密时速度较慢
如果通讯时消息被第三方C监听,那么C可以对数据进行篡改,发起中间人攻击。中间人的攻击方式如下:
在B给A发送公钥时,C也生成一对公钥和私钥,将B的公钥替换为自己的公钥。
在A给B发送消息时,A使用了C的公钥,此时C截取到A的消息,可以使用自己的私钥进行解密,解密完后,(修改消息或者直接将原文)再使用B的密钥对消息加密,发送给B
此时,B接受到的消息已经时被C篡改或者窃听过的消息。
tip:
公开密钥加密最主要的问题是,A收到公钥后,无法确认收到的是否为B的公钥。
混合加密
混合加密是为了解决公开密钥加密时,如果通讯数据较多导致速度较慢的问题。在混合加密中,先使用公开密钥加密的方式来传输共享密钥,然后使用共享密钥来通讯,主要步骤如下:
如果A准备给B发送消息,那么:
B先生成公开密钥加密的密钥对,将公钥发送给A
A生成共享密钥,使用B的公钥对共享密钥进行加密,然后发送给B
B使用私钥对含有共享密钥的信息进行解密,获取到共享密钥
A、B直接使用共享密钥进行加密
tip:
混合加密提高了安全与速度,但由于使用了公开密钥,仍然存在中间人攻击的问题。
迪菲赫尔曼密钥交换
迪菲赫尔曼密钥交换主要使用了 离散对数问题这个数学难题来进行。内容如下:
假如存在这么一种算法,满足以下条件:
密钥之间可以合成,并且合成的结果可以继续合成
最后的结果与合成的顺序无关,只与参与合成的内容有关
合成之后的密钥无法分解出来合成的元素
即:
如果存在 A,B,C 三个元素,如果先用A,B合成密钥,将结果再与C合成,得到结果 A-B-C
如果先用B,C合成密钥,将结果再与A合成,得到结果 B-C-A
A-B-C 与 B-C-A的结果相同
A-B-C分解不成 A-B,C两个元素
那么,我们可以使用这种算法来进行密钥的交换。
假设A要给B发送消息,那么:
A生成一个密钥P,发送给B,
B生成一个密钥B1,与P进行合成,生成P-B1,将P-B1发送给A
A生成一个密钥A1,与P进行合成,生成P-A1,将P-A1发送给B
A将收到的P-B1与A1进行合成,得到 P-B1-A1
B将收到的P-A1与B1进行合成,得到 P-A1-B1
P-B1-A1与P-A1-B1结果相同,后续消息通过该密钥进行加密即可。
该方案的好处:如果存在第三方窃听,那么即使获取到传输种的信息也无法生成密钥P-B1-A1和P-A1-B1。
问题:如果出现中间人攻击,来对数据进行伪造,还是会出现问题。
待补充:迪菲赫尔曼密钥交换的算法内容
消息认证码
消息认证码主要用来解决消息在传输过程中被篡改的问题,假设我们的密钥在交换过程中并没有发生中间人攻击的情况,后续在消息传递过程中使用密文传输信息,第三方虽然虽然没有破解密文消息,但是通过修改密文的一些字符,会导致接收方解密出来的非发送方的消息。这些解析出来的有可能是没有任何意义的文字,也可能刚好修改了消息的意思,此时,我们可以使用消息认证码来防止消息在传递过程中被篡改。使用消息认证码的方式如下:
如果A要给B发送一条消息:
A和B先通过密钥交换的方式来交互密钥
A在发消息时,使用密钥对消息加密,获得密文,同时通过哈希方式,来计算出密文和密钥的哈希值mac,然后将密文和mac一块发送给B
B接受到消息后,将密文和自己的密钥通过哈希的方式计算mac是否与A发送过来的一样,如果一样则代表信息内容未被修改。否则,丢弃该消息。
存在的问题:
中间人攻击
A和B都可以对消息生成mac,如果A发了消息,但说不是自己发的。那么无法判断消息是否为A所发
数字签名
数字签名可以解决消息认证码中不能判断消息发送方身份的问题,数字签名在签名时使用了公开密钥加密的方式,但其将公钥与私钥进行了调换,即数字签名的私钥可以用来加密,而公钥可以用来解密。其步骤如下:
假如A要给B发送消息,并已经交换过共享密钥,那么:
A将消息体使用共享密钥进行加密,并生成mac值,A通过非对称加密的方式,生成一对密钥,使用私钥对mac进行加密,然后将消息发送给B
B收到消息后,通过A的公钥解密mac,然后再对比消息,
存在的问题:
A有可能会是冒充的,生成的公钥是第三方仿冒生成的,而非A发出的。
数字证书
数字证书可以解决,公钥被冒充的第三方伪造的问题,同时也解决了公开密钥加密中的不安全的问题。流程如下:
假如A要给B发送消息:
A先自己生成一份公钥或者私钥,将自己的信息(比如:网址或者邮件,公钥)发送给认证机构。
认证机构提前准备好的公钥和私钥,用私钥将用户的信息加密生成签名,然后将签名发送给A
A将自己的公钥及签名信息发送给B
B通过认证机构的公钥判断签名是否为A的真实签名,如果是,则接受。
tip:
认证机构的证书由更高级的认证机构签名,最高级的认证机构的证书(其内含公钥)一般已经内置在操作系统中。
想到的一些问题
根认证中心如何验证自身?
微软会将经过组织认证的根认证中心的证书内置在操作系统种,需要再去请求。
什么时候需要消息认证码或者数字签名
当需要保证信息的安全或者防止事后否认时使用,比如:在区块链的转账中,就用到了签名。
为什么不使用赫尔曼密钥交换技术而使用ssl
容易受到中间人攻击
https属于混合加密,还是?
属于混合加密
md5,sha-1,sha-2的区别
效率比较:md5 < sha-1 < sha-2
安全性比较:md5 > sha-1 > sha-2
md5有撞库的风险,且有被破解的风险
sha1 为160位,谷歌在2017年通过不同的文件生成了两个相同的sha-1
sha2 有多种位数,常用的是256位。目前的ssl证书采用的即为sha2