关于什么是公钥和私钥,网上有一篇很经典的文章:http://www.youdzone.com/signature.html
我参考了这篇文章的主要内容,向你介绍下公钥和私钥的工作原理。
Bob有两把钥匙,一把是公钥,另一把是私钥。
Bob的公钥是公开的,谁都可以拿到,但是私钥只有Bob自己知道,是要绝对保密的。
我们先来看下公钥和私钥的区别:
简单来说,公钥是用来加密信息和验证数字签名的,而私钥是用来解密接收到的加密信息和创建数字签名的。
Susan如果想给Bob发一条加密的该如何做呢?
其他人就算获取到了密文也无法破解,因为用Bob的公钥加密的密文只能用Bob的私钥才能解开,而Bob的私钥只有Bob自己才有。
不知道你有没有发现一个问题?
Bob收到Susan发给他的信息的时候,如何知道这个信息就是Susan发给他的原信息呢?
会不会有人篡改了原来的信息?
会不会有人冒充Susan发信息?
因为Bob的公钥是公开的,谁都可以用Bob的公钥来加密信息。
也就是说Susan如何证明,这条信息就是她发的呢?
这就需要用到数字签名了。
数字签名的过程通常开始于哈希函数,例如MD5、SHA、RIPEMD-160等。哈希函数的特点是能将任何大小的数据转换成固定长度(比如32位、64位)的字符串,这个字符串被称为哈希值或摘要。哈希函数的一个重要特性是,即使是微小的数据变化也会导致生成一个完全不同的哈希值。
即使只改动了一个字符,哈希函数生成的摘要也会有很大的不同。
Susan通过数字签名,就能证明文档是自己发的,并且在传输的过程中没有被篡改。
最后,还有个重要的问题,不知道你有没有发现?
既然公钥都是公开的,谁都可以轻易获取, 那么如何保证公钥没有被动手脚呢?
Bob和Susan如何确定手上的公钥就是对方的呢?
如果一个坏蛋冒充Bob,给Susan发送自己的公钥,让Susan以为自己一直在和Bob聊天,这该如何破解?
这时候就要引入证书颁发机构 了。
证书颁发机构(Certificate Authority,简称CA)可以理解为网络安全中的“身份验证中心”,类似于网络世界的护照官。它的主要任务是为数字通信中的参与者(比如网站、应用程序等)提供数字证书,以确保其身份的真实性、数据传输的保密性和完整性。
证书颁发机构工作原理如下:
有了证书颁发机构,Bob和Susan就可以从证书颁发机构那里获取对方的公钥了,这样就能保证能够获得公钥是可信任的。
对称加密,又称为私钥加密,是指加密和解密使用相同密钥的加密方法。这种加密方式的特点是效率较高,因为算法相对简单,计算速度快,适合大量数据的加密。
非对称加密,就是本文介绍的公钥和私钥加密,是指加密和解密使用一对密钥的加密方法。公钥可以公开,任何人都可以使用它来加密信息;私钥必须保密,只有私钥的拥有者才能用它来解密信息。
对称加密算法简单,速度很快,适合传输大量的数据,而非对称加密算法复杂,速度比较慢,只适合传输重要的数据。
比如我们平时上网,需要传输大量的数据,很适合使用对称加密算法,但是对称加密算法中加密和解密使用的秘钥是同一个,这里有个难点,就是如何把秘钥安全地传送给对方?
其实这个问题已经被完美解决了,这就是HTTPS协议,我们来看下,HTTPS协议是怎么做的。
(图片来源:https://github.com/ByteByteGoHq/system-design-101)
HTTPS通过使用非对称加密(公钥和私钥)来传递对称加密所需的对称秘钥(session key),一旦服务器拿到对称秘钥之后,接下来的所有通信都会使用对称加密传输,确保了网站和用户之间的信息传输是加密的、安全的。这样,即使信息在传输过程中被截获,黑客也无法阅读这些信息,因为他们没有用来解密的秘钥。
HTTPS网站加密传输完美结合了对称加密和非对称加密算法的优点,在HTTPS协议中,非对称加密用于初始的密钥交换和身份验证,而对称加密用于后续的数据传输,以此来兼顾效率和安全性。
如此设计,令人赞叹~
参考资料:
http://www.youdzone.com/signature.html
https://time.geekbang.org/column/article/99636?utm_source=u_nav_web&utm_medium=u_nav_web&utm_term=pc_interstitial_1413
https://github.com/ByteByteGoHq/system-design-101