网络通信安全
背景:
网络通信过程中所传输的任何数据,都是可以被中间人劫持的,所以必须进行加密和认证,保证数据来源的正确性,数据的完整性和正确性,防止密钥被盗取而造成泄密。
本文假定读者已了解非对称加密。
角色设定
A-B:通信者,C:攻击者,D:权威机构
没有数字证书的通信过程
-
消息发送者A:
使用摘要算法计算出消息的摘要(长度固定),然后使用私钥对摘要进行加密,就得到了数字签名。 -
消息接收者B:
先使用发送者的公钥对数字签名进行解密,得到消息摘要1,消息摘要1的长度需符合约定的算法该有的长度,否则认为消息已泄密。然后使用同样的摘要算法计算消息的摘要2,再比较摘要1和摘要2,如果相同,则证明消息内容未被篡改过,并且消息的确是A发送的。
以上通信为安全的前提是,B确定自己手中拿到的是A的公钥。
然而,公钥是存在被伪造的可能的,C有可能通过手段将A的公钥替换成自己的,然后发送给A,这时候A会误以为自己拿到的是A的公钥。这时候C就可以在A、B之间进行中间人攻击。
所以,必须有一个权威机构D来证明,A的公钥是真实有效的。
权威机构D:
它是权威的,所有人都知道它的存在并且信任它,它对外公布自己的公钥,它是被保存在电脑操作系统里的,它是无法被伪造的(暂且这么认为,实际上还是有过被伪造的案例)。
有数字证书的通信过程
-
消息发送者A:
- A向权威机构D申请证书。
- D生成一对公钥K1和私钥K2。
- D有自己的公钥K3和私钥K4。
- D把公钥K1等信息以明文的形式写到证书里面,然后用一个摘要算法(SHA1或者MD5 )计算出这些数字证书内容的一个摘要,并把摘要和摘要算法用自己的私钥K4进行加密,然后和证书的内容一起发给A。
- D把私钥KB给A。
-
消息接收者B:
- B的电脑上操作系统里受信任的证书机构里早已有了D,并且有D的证书,里面包含了D的公钥。
- B给A发送了一条消息,要求和A进行通信
- A把从D那里获得的证书发给B
- B发现证书颁发机构是D,然后会在操作系统中受信任的发布机构的证书中去找D的证书,如果找不到,那说明证书的发布机构是假的,或者不是被权威机构认证的,证书可能有问题。
- 如果在系统中找到了D的证书,那么B就会从D的证书中取出D的公钥K3,然后对A发来的证书里面的摘要和摘要算法用这个公钥K3进行解密,然后使用这个摘要算法计算A证书的摘要,将这个计算的摘要与放在证书中的摘要对比,如果一致,说明A的证书肯定没有被修改过并且证书是D发布的,证书中的公钥肯定是A的公钥K1。
- B就开始用这个公钥K1和A进行通信,而A使用D给他的私钥K2进行解密。
以上,就是数字证书的认证过程。
思考:
中间人C在这个过程中能干什么?
- A的公钥已经被权威机构D认证了,自己已经无法像原来那样,伪造A的公钥。
- 那么C能不能伪造证书?C会不会想自己也跟权威机构D申请一个证书,在A将证书发送给B的时候,把证书替换成自己的?这看起来也可行啊?因为都是D颁发的证书,那么B那边就能受信任,那最后取出来的就会是C的公钥,C不是又达到目的了?
- 如果真有这么容易,那证书岂不是无效。看来还有更多需要去了解的,未完待续。。。
Reference:
消息摘要
数字签名是什么
如何应对伪造的SSL证书?
程序员之网络安全系列(五):数字证书以及12306的证书问题
网友评论