前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >只用10分钟,一次性搞懂公钥和私钥

只用10分钟,一次性搞懂公钥和私钥

作者头像
zhanyd
发布2024-05-17 18:00:55
1680
发布2024-05-17 18:00:55
举报
文章被收录于专栏:编程我也会编程我也会

关于什么是公钥和私钥,网上有一篇很经典的文章:http://www.youdzone.com/signature.html

我参考了这篇文章的主要内容,向你介绍下公钥和私钥的工作原理。

公钥和私钥

Bob有两把钥匙,一把是公钥,另一把是私钥。

Bob的公钥是公开的,谁都可以拿到,但是私钥只有Bob自己知道,是要绝对保密的。

我们先来看下公钥和私钥的区别:

  • 公钥:公钥是用来加密信息的。当某人想要给你发送一条加密的信息时,他们会使用你的公钥进行加密,这样只有拥有对应私钥的你才能解密并阅读信息。公钥还可以用于验证数字签名。如果有人使用他的私钥对信息进行了签名,并声称这个签名是他创建的,你可以使用他的公钥来验证签名,如果验证成功,那么这个签名确实是用对应的私钥创建的。
  • 私钥:私钥是用来解密信息的。当某人使用你的公钥加密了一条信息并发送给你时,只有你的私钥能够解密这条信息,因为它是唯一的,只有你知道。此外,私钥还可以用来创建数字签名。当你对一份文件或一条信息进行签名时,你实际上是使用私钥对信息的特定表示形式(如信息的哈希值)进行加密,这样接收者就可以使用你的公钥来验证签名的有效性,从而确认信息确实来自于你,并且未被篡改。

简单来说,公钥是用来加密信息和验证数字签名的,而私钥是用来解密接收到的加密信息和创建数字签名的。

加密解密

Susan如果想给Bob发一条加密的该如何做呢?

  • 首先,Susan要先拿到Bob的公钥,因为公钥是公开的,所以Susan和其他任何人都可以轻易拿到;
  • 然后,Susan用Bob的公钥把要发的信息加密,得到一段加密后的密文;
  • 接着,Susan把加密后密文发给Bob;
  • 最后,Bob用自己的私钥解密密文,得到原文。

其他人就算获取到了密文也无法破解,因为用Bob的公钥加密的密文只能用Bob的私钥才能解开,而Bob的私钥只有Bob自己才有。

数字签名

不知道你有没有发现一个问题?

Bob收到Susan发给他的信息的时候,如何知道这个信息就是Susan发给他的原信息呢?

会不会有人篡改了原来的信息?

会不会有人冒充Susan发信息?

因为Bob的公钥是公开的,谁都可以用Bob的公钥来加密信息。

也就是说Susan如何证明,这条信息就是她发的呢?

这就需要用到数字签名了。

哈希函数

数字签名的过程通常开始于哈希函数,例如MD5、SHA、RIPEMD-160等。哈希函数的特点是能将任何大小的数据转换成固定长度(比如32位、64位)的字符串,这个字符串被称为哈希值或摘要。哈希函数的一个重要特性是,即使是微小的数据变化也会导致生成一个完全不同的哈希值。

即使只改动了一个字符,哈希函数生成的摘要也会有很大的不同。

数字签名主要步骤如下:

  1. 创建签名:Susan首先使用哈希函数对原始数据(如文档或消息)进行哈希处理,生成哈希值。
  1. 然后,Susan使用自己的私钥对这个哈希值进行加密,生成的结果就是数字签名。
  1. 附加签名:数字签名随后被附加到原始数据上,两者一起发送给Bob。
  1. 验证签名:Bob收到带有数字签名的数据后,会使用Susan的公钥对数字签名进行验证(Susan的公钥也是公开的,很容易获得),并得到一个哈希值。 Bob用Susan的公钥可以验证成功,证明这条信息的确是Susan发的,因为只有用Susan的私钥生成的数字签名才能用Susan的公钥验证成功,而Susan的私钥只有Susan自己才有。 同时,Bob也会对原始数据执行相同的哈希处理,生成另一个哈希值。如果两个哈希值相同,则证明数据在传输过程中未被篡改。如果两个哈希值不同,那么意味着数据在传输过程中被篡改。

Susan通过数字签名,就能证明文档是自己发的,并且在传输的过程中没有被篡改。

证书颁发机构(CA)

最后,还有个重要的问题,不知道你有没有发现?

既然公钥都是公开的,谁都可以轻易获取, 那么如何保证公钥没有被动手脚呢?

Bob和Susan如何确定手上的公钥就是对方的呢?

如果一个坏蛋冒充Bob,给Susan发送自己的公钥,让Susan以为自己一直在和Bob聊天,这该如何破解?

这时候就要引入证书颁发机构 了。

证书颁发机构(Certificate Authority,简称CA)可以理解为网络安全中的“身份验证中心”,类似于网络世界的护照官。它的主要任务是为数字通信中的参与者(比如网站、应用程序等)提供数字证书,以确保其身份的真实性、数据传输的保密性和完整性。

证书颁发机构工作原理如下:

  1. 身份验证:当你想要获得一个数字证书时,你需要向CA申请。CA会通过一系列验证流程来确认你的身份。例如,如果你是一个公司,CA可能会要求看你的营业执照和其他法律文件。
  2. 证书生成:一旦身份得到验证,CA会为你创建一个数字证书。这个证书包含了你的公钥(用来加密信息的密钥)和一些身份信息,比如你的名字、公司名或网站地址。
  3. 证书签名:为了让其他人能够信任这个证书,CA会用自己的私钥对这个证书进行签名。这个签名就像是CA对这个证书真实性的担保。
  4. 证书分发:你将获得的数字证书安装在你的服务器或网站上。当用户访问你的网站时,他们的浏览器会检查这个证书。浏览器已经内置了信任的CA列表,所以它能够验证CA的签名。
  5. 安全通信:如果证书验证通过,用户的浏览器就会相信你的网站是安全的,然后就可以开始安全的通信了。比如,用户输入的信息会被用户的电脑使用网站的公钥加密,然后安全地发送到服务器。只有服务器用自己的私钥才能解密这些信息。

有了证书颁发机构,Bob和Susan就可以从证书颁发机构那里获取对方的公钥了,这样就能保证能够获得公钥是可信任的。

非对称加密算法的应用

对称加密和非对称加密

对称加密

对称加密,又称为私钥加密,是指加密和解密使用相同密钥的加密方法。这种加密方式的特点是效率较高,因为算法相对简单,计算速度快,适合大量数据的加密。

非对称加密

非对称加密,就是本文介绍的公钥和私钥加密,是指加密和解密使用一对密钥的加密方法。公钥可以公开,任何人都可以使用它来加密信息;私钥必须保密,只有私钥的拥有者才能用它来解密信息。

对称加密算法简单,速度很快,适合传输大量的数据,而非对称加密算法复杂,速度比较慢,只适合传输重要的数据。

比如我们平时上网,需要传输大量的数据,很适合使用对称加密算法,但是对称加密算法中加密和解密使用的秘钥是同一个,这里有个难点,就是如何把秘钥安全地传送给对方?

其实这个问题已经被完美解决了,这就是HTTPS协议,我们来看下,HTTPS协议是怎么做的。

HTTPS的工作原理

  1. 建立连接:当你在浏览器中输入一个使用HTTPS的网址时,客户端会向服务器发起一个连接请求。
  2. 返回数字证书:服务器收到请求后,会返回CA颁发的数字证书,其中包含公钥等信息。
  3. 证书验证:客户端会验证服务器的证书合法性,包括检查证书颁发机构、有效期等,确认服务器的身份没问题之后,就会获取服务器的公钥。
  4. 发送对称密钥:客户端会生成对称加密所需的对称密钥(session key),然后用服务的公钥加密,发送给服务器。
  5. 解密信息:服务器收到加密的对称密钥后,会用自己的私钥来解密,这样服务器就获得了对称密钥。
  6. 建立安全通道:一旦服务器获得对称秘钥,客户端和服务器之间的“安全通道”就建立起来了,之后的所有通信都会通过这个通道进行对称加密传输,保证传输过程的安全性。

(图片来源: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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-05-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 编程我也会 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 公钥和私钥
    • 加密解密
    • 数字签名
      • 哈希函数
        • 数字签名主要步骤如下:
        • 证书颁发机构(CA)
        • 非对称加密算法的应用
          • 对称加密和非对称加密
            • 对称加密
            • 非对称加密
          • HTTPS的工作原理
          相关产品与服务
          多因子身份认证
          多因子身份认证(Multi-factor Authentication Service,MFAS)的目的是建立一个多层次的防御体系,通过结合两种或三种认证因子(基于记忆的/基于持有物的/基于生物特征的认证因子)验证访问者的身份,使系统或资源更加安全。攻击者即使破解单一因子(如口令、人脸),应用的安全依然可以得到保障。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档