理解公钥和私钥首先要区分加密和认证这两个概念!
加密和认证:
加密是将数据资料加密,使别人即使获取加密资料,也无法获取正确的资料内容,重点在于数据的安全性。
认证是确定数据的真实发送方,使别人无法伪造或冒充,重点在于用户的真实性。
公钥和私钥:
公钥和私钥就是俗称的不对称加密方式,是对称加密(使用用户名与密码)方式的提高。
使用公钥与私钥的目的是为了安全的数据传输,必须实现如下目的:
- 我发送给你的内容必须加密,在数据传输过程中不能被别人看到真实数据内容。
- 接收数据方能确定是我发送的数据,不是别人冒充我的。
首先解释公钥和私钥的意义和作用:
- 公钥:是公布出去的给别人用的,可以被很多人获取。用来加密和验章。
- 私钥:只能自己持有,并且不可以被其他人知道。用来解密和签章。
公钥与私钥的作用是:用公钥加密的内容只能用私钥解密,用私钥加密的内容只能用公钥解密。
公钥和私钥有以下原则:(注意:密钥包括公钥和私钥)
- 一个公钥对应一个私钥;
- 密钥对中,让大家都知道的是公钥,不告诉大家,只有自己知道的,是私钥;
- 如果用其中一个密钥加密数据,则只有对应的那个密钥才可以解密;
- 如果用其中一个密钥可以进行解密数据,则该数据必然是对应的那个密钥进行的加密;
要达到数据安全传输的目的,必须发送方和接收方都持有对方的公钥和自己的私钥,即任意一方持有自己的私钥和对方的公钥。
如 A 给 B 发送数据:
- 为了数据的安全性,A 需要使用 B 的公钥来给数据加密,这样只有 B 的私钥才可以解密数据,别人无法解密,这样保证了数据的安全性。这是数字签名。
- 为了保证数据发送方的真实性,A 需要使用自己的私钥来给数据加密,这样其他人用 A 的公钥进行解密,由于只有 A 的私钥加密的数据,A 的公钥才能解密,所以他人用 A 的公钥若能解密此数据,则证实了此数据是由 A 发送的,若不能解密,则证明此数据不是用 A 的私钥加密的,即不是 A 发送的,这样保证了发送方的真实性。
证书:
证书是为公钥做认证,为了使公钥真实可信,防止他人伪造公钥;证书颁发机构(证书中心CA)会用自己的私钥对用户的公钥和相关信息进行加密,生成”数字证书“,然后证书中心会公布自己的公钥给所有人,用来让用户使用此公钥验证”数字证书“是否由CA颁发,即是否真实可信,产生证书是因为如下场景:
A 给 B 发信息:
1. 首先 A 用 Hash 函数对要发送的数据实体生成摘要(digest),这个过程是不可逆的。
2. A 使用自己的私钥对这个摘要进行加密,生成数字签名(signature),并将此签名连同要发送的数据实体一起发送给 B 。
3. B 收到 A 发送过来的数据后,首先用 A 的公钥对数字签名进行解密,得到摘要,从而证明数据确实来自 A,因为只有 A 有私钥。
4. B 再对接收到的数据实体进行 Hash 函数,如果得到的结果和上一步摘要一致,则证明数据实体没有被篡改过。
如上,如果 C 偷偷将 B 持有的 A 公钥换成自己的公钥,而 B 不知道公钥已被替换,那么以后 C 就可以使用冒充 A 来给 B 信息,而 B 会相信此信息是来自 A。
为了解决这一问题,需要对 B 持有的 A 公钥做认证,从而确定此公钥确实是 A 的公钥,而不是其他人篡改过的!而这个认证机构必须是第三方可信赖的,就是CA!由此,发送过程变成如下:
A 发给 B 数据的时候,除了要发送签名和数据实体,还要发送CA颁发的证书。
B 接收到 A 发送过来的数据后,首先用 CA 的公钥去解密证书,如果能解,表明这个证书里的信息可信赖,从而得到证书里 A 的公钥,然后 B 再用得到的公钥去做下一步动作。
注意:
以上前提必须是 CA 是可信赖的,CA 证书是不可伪造的!
上边 A 给 B 发送数据只实现了身份确认,数据未被修改过,但是没有保证数据是安全的,即数据传输过程中可以被第三人看到数据内容,要想实现安全的数据传输,A 还要做一步工作,即用 B 的公钥给数据加密,这样只有 B才可以解密,从而保证了数据的安全性。
由上再次总结:
证书分为公钥证书和私钥证书,每个人的公钥、私钥证书是不一样的,但是肯定是一一对应的。
加密技术:公钥证书加密、私钥证书解密;
签名技术:私钥证书加密、公钥证书解密;
对于一方来说,持有对方公钥(即证书,因为公钥放在证书里),就可以验证对方身份,并且保证发给对方数据的安全性。对方对己方要也想做到这一点,则也要持有己方的公钥,即:
加密和签名技术相结合才能实现,机密性、完整性、不可否认性。
证书是为了保证密钥的真实性!没有证书,谈不上非对称加密。