公钥和私钥
公钥和私钥是非对称加密(也称为公钥加密)中使用的一对密钥,它们在数据加密和数字签名等方面发挥着关键作用。简单来说,公钥的公开的,谁都能拿到;而私钥是绝对保密的,一般不允许别人知道。但这么说又显的太简单了,公钥和私钥的详细区别如下:
- 公钥(Public Key):公钥是用来加密的。当某人想要给你发送消息,而又不想让别人知道时,一般会用你的公钥对其信息进行加密,这样只有拥有对应私钥的你才能解密并阅读其中的加密信息。公钥还能用于验证数字签名。如果你想让别人确定这条信息是你发送的,那么可以用你自己的私钥对信息进行签名,别人可以用你的公钥对其验证,如果验证成功,那么就能确定这是你发送的消息。
- 私钥(Private Key):私钥是用来解密信息的。当别人用你的公钥对信息进行加密时,只有你能够对其解密,因为私钥是唯一的。此外,私钥还能用于数字签名,当使用私钥对一份信息进行签名时,其实是对这份信息的特定表示形式(如信息的哈希值)进行加密,这样接收者就可以使用公钥进行验证签名的有效性。
简单来说,公钥能对数据加密并验证数字签名;私钥能解密信息并创建数字签名。
加密解密
如果有人想要给你发送加密消息,那么他该怎么做呢?
- 首先,他需要拿到你的公钥,因为公钥是公开的,所以他很容易可以拿到
- 然后使用公钥对信息进行加密,得到加密后的密文
- 然后把密文发送给你
- 你再使用私钥对其解密,得到原文
因为私钥只有你自己才有,所有只有你才能够解密这段信息,所以务必保管好自己的私钥。
数字签名
当你收到这份消息的时候,如何判定就是他发送的呢?因为公钥是公开的,任何人都能拿到并加密信息发送给你。这个时候就需要用到数字签名了。
哈希函数
数字签名通常开始于哈希函数,例如MD5,SHA、RIPEMD-160等。哈希函数的特点是能够将任何大小的数据转换为固定长度(如32/64位)的字符串,这个字符串被称为哈希值或摘要。哈希函数的另一个特定是,无论原文发送再微小的改动都能生成一个完全不同的哈希值。
数字签名过程
一般来说,数字签名有以下几个步骤:
- 创建签名:对原文使用哈希函数进行哈希处理,得到哈希值;
- 加密:使用私钥对哈希值进行加密,生成的结果就是数字签名;
- 附加签名:将生成的数据签名附加到原始数据上,随着原文一起发生出去;
- 验证签名:接收方使用发送方的公钥对数字签名进行验证,并得到一个哈希值。如果能验证成功,则证明是发送方发送的消息;
- 验证消息:接着接收方也会对信息进行相同的哈希处理,如果得到的哈希值一致,则证明消息没有被篡改。
证书颁发机构(CA)
上一段讲了如何确定消息是发送方发送的,我们要使用到公钥对数字签名进行验证,那么我们如何确定我们获得的公钥就是对方的公钥呢?毕竟公钥很容易获得。
这个时候就要引入证书颁发机构了,证书颁发机构(Certificate Authority,简称CA)可以理解为网络安全中的"身份验证中心",类似与网络中的护照官。它的主要任务是为数字通信中的参与者(比如网站、应用程序等)提供数字证书,以确保其身份的真实性、数据传输的保密性和完整性。
证书颁发机构工作原理如下:
- 身份验证:当你想要获取一个数字证书时,你需要向CA申请。CA会通过一系列验证流程来确认你的身份。
- 证书生成:一旦身份得到验证,CA会创建一个数字证书,这个证书包含了你的公钥和一些身份信息,如你的名字、公司名或网站地址。
- 证书签名:为了让别人能够信任这个证书,CA会用自己的私钥对这个证书进行签名。
- 证书分发:你获得的数字证书安装在你的服务器或网站上。当用户访问你的网站时,他们的浏览器会检查这个证书。浏览器已经内置了信任的CA列表,所以它能够验证CA的签名。
- 安全通信:如果证书验证通过,用户的浏览器会相信你的网站是安全的,然后用户会使用网站的公钥对信息进行加密,然后安全的发送到服务器。只有服务器自己的私钥才能解密这些信息。
加密算法
一般来说,目前有两种通用加密算法,对称加密和非对称加密。
对称加密
对称加密,又称为私钥加密。是指加密和解密都使用相同秘钥的加密方法。这种加密方式效率较高,因为算法相对简单,计算速度快,适合大量数据的加密。
非对称加密
非对称加密,就是上面介绍的公钥加密,私钥解密的方式。加密算法复杂,速度较慢,只适合传输重要的数据。
但有时候我们会有传输大量重要数据的时候,这个时候不管是对称加密和非对称加密好像都不太行,要么安全性不高,要么效率太慢。最好是使用安全的对称加密,也就是使用安全的方法把一个密钥传输给对方,这样就能比较安全的使用对称加密了。
HTTPS
以上的办法,其实也需要用到CA颁发的证书。作用流程如下:
- 建立连接:当你在网站上输入一个使用HTTPS的网址时,客户端会向服务器发起一个连接请求。
- 返回数字证书:服务器收到请求后,会返回CA颁发的数字证书,其中包含公钥等信息。
- 证书验证:客户端会验证证书的合法性,包括检查证书颁发机构、有效期等,确认服务器的身份没问题后,获取服务器的公钥。
- 发送对称密钥:客户端会生成对称加密所需的对称密钥(session key),然后用服务器的公钥加密,发送给服务器。
- 解密信息:服务器收到加密的对称密钥后,会用自己的私钥来解密,这样服务器就获得了对称密钥。
- 建立安全通道:一旦服务器获得对称密钥后,客户端和服务器之间的“安全通道”就建立起来了,之后的所有通信都会 通过这个通道进行对称加密传输,保证传输过程的安全性。
HTTPS通过使用非对称加密来传递对称加密所需的对称密钥,一旦服务器拿到对称密钥之后,接下来的所有通信都会使用对称加密传输,确保了网站和用户之间的信息传输是加密的、安全的。这样,即使信息在传输中被截获,黑客也无法阅读这些信息,因为他们没有用来解密的秘钥。