公钥、私钥、数字签名和数字证书简介
加密方式
加密方式一共分为两种对称加密
和非对称加密
对称加密
加密和解密使用的是同一种密钥。
这类加密算法的优点是计算量小,加密速度快,加密效率高
缺点也明显,在传输数据前,双方必须商定并且保存好密钥,任何一方泄露了密钥,加密信息就不再安全了。另外,每次使用对称加密算法时,都需要使用其他人不知道的唯一密钥,这样会使得双方会拥有大量的密钥,让管理密钥称为一种负担
非对称加密(RSA)
非对称加密需要两个密钥来进行加密和解密,这两个密钥分别称为公有密钥
和私有密钥
这两份钥匙的使用是相互对应的。如果使用了公有密钥加密文件,那么解密就只能用对应的私密钥匙才能解密,同理,如果用私密钥匙加密了文件,那么解密也只能使用对应的公有。
工作流程(如下图)
- 首先乙生成一对公钥和私钥。自己保存私钥,让后让公钥向其他人公开
- 然后甲使用乙的的公钥对原始数据进行加密,并将生成的密文发送给乙
- 乙接收到消息后用自己的私钥对密文进行解密,得到原始数据
这里有一个缺点:因为乙的公钥是公开的,所以有被人冒充甲方使用乙的公钥发送请求。
解决方案:首先甲用自己的私钥对消息进行加密,生成另一个密文,然后将密文发送给乙,乙收到消息之后,如果能用乙的公钥解密,就说明这个消息确实是甲方发送的。
数字签名
虽然上面的方法解决了身份认证的问题,但是由于所有人都有甲的公钥,所以只要消息发送中途被截获就一定能被解密;而且对文件加密可能是个耗时的过程,比如文件足够大,那么用私钥加密整个文件以及拿到文件后解密的开销无疑是巨大的。为了解决这两个问题,于是有了数字签名。
数字签名的发送流程如下:
- 甲用hash函数对消息进行运算,得到hash值(h1),然后用甲的私钥对hash值进行加密,生成的密文我们叫他为数字签名
- 之后用乙的公钥对发送消息进行加密,生成密文叫secret
- 最后把密文和数字签名一起发给乙
- 乙收到后,首先用甲的公钥对数字签名进行解密,能解开说明消息确实是甲发送的,反之则不是
-
然后乙用自己的密钥解读secret,并且用相同的hash函数对解密后的消息进行运算,得到一个hash值(h2),如果h1=h2,则说明消息没有被篡改,如果不等,则说明消息被篡改了。
有了数字签名,我们就可以验证来源和消息的完整性。但是仍然还存在缺陷。假如存在第三人丙,偷偷在乙的电脑用自己的公钥替换了甲的公钥,然后用自己的私钥给乙发送信息,这时乙收到的消息会以为是甲发送的。
为了解决这个问题,于是有了数字证书
数字证书
数字证书,就是为了解决,无法区分电脑中的密钥归属的问题,其实就是给公钥做个身份证,以便让别人搞清楚公钥到底是谁的.。
-
首先甲去找"证书中心"(certificate authority,简称CA),为自己公钥做认证(就好比去公安局办身份证一样)。CA用自己的私钥对甲的公钥和一些其他信息进行加密,生成的东西就叫"数字证书"(Digital Certificate)
-
甲给乙发送消息
乙接收到消息后用CA的公钥解开甲的数字证书,从里面拿到信息,然后进一步处理(流程和上面的一样)
但仍然存在问题:假设有一万个人,他们每个人都有CA的证书,那么乙就要报关一万份不同的CA公钥来验证这些人的身份。这是不可能的。
所以就有了"根证书"。根证书里面存储着CA公钥来验证所有CA颁发的数字证书,乙只需要保管一份根证书就可以验证所有人的身份了。
以上