公钥与私钥对的工作原理?5个场景告诉你答案
2023-9-28 15:9:49 Author: www.freebuf.com(查看原文) 阅读量:4 收藏

以下是关于公钥与私钥对如何在五种不同的公钥基础设施 (PKI) 场景中工作的详解指南。

我们知道,在IT环境中,公钥与私钥对在加密、认证、数字签名等方面发挥着重要作用,但它们的使用方式对于每个应用场景来说都有着很大不同。这让我们不禁产生疑问:这一切到底是如何在“幕后”运作的?

近日,SSL Store的内容经理凯西·克兰(Casey Crane)在Hashed Out上分享了公钥与私钥对在五种不同的公钥基础设施 (PKI) 场景中的应用方式。

以下为原文,经公钥密码开放社区编译。

首先提一个问题:公钥加密,私钥解密——对吗?

一个简短的答案:不总是这样。

是的,在大多数场景中,公钥用于加密数据,而其相应的私钥用于解密密钥。但是,某些流程也存在例外情况。我们将在以下部分中为您详细解释这一切,看一下五个非常常见的场景:

·SSL/TLS (HTTPS)

·代码签名

·文档签名

·电子邮件签名

·电子邮件加密

01 SSL/TLS连接期间公钥和私钥对的工作原理是什么?

当您通过HTTPS访问一个安全网站时,每个连接都会以一个称为TLS握手的过程开始。在此过程中,使用公钥加密(即非对称加密)来交换敏感信息,然后切换到对称加密来完成其余部分的会话。

为什么要费力去切换呢?因为对称加密比公钥加密需要更少的计算能力。尽管我们谈论的是极短的时间(即毫秒级),但它对于大规模数据加密(即对于具有较高网络流量的大型组织)来说更高效。

要加密您的网站连接,您需要在服务器上安装SSL/TLS证书。它还要求客户端和服务器进行自我介绍并交换基本信息以创建安全的加密会话。这种来回过程称为TLS握手,大多数浏览器支持两种版本,即TLS1.2(最常见)和TLS1.3。

以下是TLS1.2握手过程工作原理的概述:

当客户端(浏览器)连接到服务器(网站)时,双方会交换有关它们支持的加密过程的某些协议。客户端发送一个大的随机素数(称为“客户端随机数”)。

服务器发送其SSL/TLS证书和公钥给客户端(浏览器),同时还发送一个“服务器随机”值(与客户端随机值的概念相同),这个值可以与客户端随机值组合使用来创建对称会话密钥。

客户端检查服务器的证书,并使用服务器的公钥对其发送回服务器的对称密钥值进行加密。(具体细节根据使用的密钥交换算法而有所不同。)

双方使用其交换的数据来计算对称会话密钥(即共享会话密钥)。

客户端检查服务器的消息验证码 (MAC)以确保握手过程未被篡改。

双方使用共享会话密钥来创建安全的对称加密连接。

以下图片显示了私钥和公钥对在TLS1.2握手中扮演的角色作用。

1695884882_65152652c573fbdadcc69.png!small

当涉及TLS1.3握手时,过程有所不同,特别是在密钥交换过程方面。我们的想法是将一切简化为一次往返。

但基本概念保持不变:公钥和私钥对用于安全地交换用于实际数据加密的对称密钥。

02 代码签名如何使用私钥和公钥对来保护可执行文件和代码?

让我们考虑一下公钥和私钥对在软件安全中的使用。保护代码、软件、可执行文件等的过程涉及开发人员或发布者使用代码签名证书向其软件可执行文件添加数字签名

此过程使用加密密钥和函数(如哈希函数和加密)来验证创建资产的开发人员/发布者的身份,并验证文件或代码在签名后是否被修改。

还记得在本文章开头我们提到公钥加密和私钥解密的情况并不总是如此吗?这就是我们所指的情况。

但从每个密钥的使用方式和时间来看,这个过程是什么样的呢?

开发人员将哈希函数(即哈希算法)应用于他们的软件/代码。这将创建固定长度的哈希摘要(即哈希值)。

他们使用私钥来加密生成的哈希摘要。根据行业代码签名基准要求,此密钥必须存储在安全设备上,例如安全令牌或硬件安全模块 (HSM)。

然后,开发人员使用其代码签名证书创建数字签名并向软件应用时间戳(注意:时间戳是可选的,但建议使用)。

他们的数字签名软件在分发或发布时附有开发人员的公钥和证书。

下图显示了代码签名的工作原理以及一半的加密密钥对的作用。1695884860_6515263c75d7b5d65bb6f.png!small

那么,公钥在哪里发挥作用呢?在客户端发生的软件验证过程中:

最终用户下载该软件。他们的浏览器或操作系统(OS)检查数字签名,以确保其有效、可信且未被更改。

他们的系统会将开发人员的公钥应用于摘要以对其进行解密。然后,它将原始哈希摘要与系统创建的哈希摘要进行比较,看看是否匹配。

如果哈希值匹配,那就是一个有效的签名。如果不匹配,Windows操作系统和浏览器会警告用户表示您的软件不应被信任。

下图显示了当用户下载或尝试安装数字签名的软件或代码时,公钥在代码签名验证过程中的作用。1695884850_6515263273ec13d998eb1.png!small

03 如何使用公钥和私钥对对文档进行数字签名?

当我们谈论文档签名时,并不是指在电子文件上签署手写签名。(注意:这很容易被伪造!)相反,我们是指将可验证的数字身份标记在数字文件(Word文档、PDF等)上,以使人们知道它是真实且没有被篡改的。

下图显示了数字签名(中和右)和电子签名(左)之间的区别。1695884840_651526289bb612992e708.png!small

您现在可能已经猜到,要对文档进行数字签名,您必须拥有文档签名证书。那么,公钥和私钥对在这件事情中扮演什么角色呢?这与我们之前描述的代码签名过程中私钥的作用类似:

文档创建者对其Word或PDF文件应用哈希函数。这将创建一个哈希摘要或哈希值。

他们将私钥应用于加密文件的哈希摘要。就像代码签名过程一样,您的文档签名密钥也必须存储在安全设备(令牌、HSM等)或密钥保管库中。

然后,文件所有者使用其文档签名证书来创建数字签名。他们还可以选择向文件添加时间戳。

数字签名的文档现已可供使用。

下图显示了文档签名的工作原理,说明了如何使用文档签名私钥为Microsoft Office文档和PDF创建数字签名。1695884830_6515261e0822c67be46f1.png!small

当最终用户下载文件时,他们的设备将检查其数字签名。

他们的系统将应用开发人员的公钥来解密文件的摘要。然后,它将比较原始哈希摘要与系统创建的哈希摘要是否匹配。

04 公钥和私钥对如何使电子邮件签名成为可能?

电子邮件签名是一种使发件人能够证明自己发送了邮件并且该消息不是由冒名顶替者发送的过程。这个过程使用电子邮件签名证书(也称为客户端认证证书),发件人将其安装到设备上或导入到电子邮件客户端中。

下图为Windows证书管理器中安装的电子邮件签名和客户端身份验证证书的示例屏幕截图。1695884818_65152612f0a8a7ea77e68.png!small

那么,这个电子邮件签名过程是什么样的,公钥和私钥对又是如何参与其中呢?

对电子邮件进行数字签名时,发件人会对消息应用哈希函数/算法

发送者应用其私钥来加密该哈希摘要/值以创建数字签名

发件人将其电子邮件签名证书和公钥附加到出站电子邮件中。这共同创建了数字签名块。

下图为代码签名过程如何工作以及加密密钥在对电子邮件进行数字签名时发挥作用的屏幕截图。1695884806_651526062eabfebc3954a.png!small

收到消息后:

电子邮件收件人使用发件人的公钥来解密电子邮件的哈希摘要。

接收者会将其与他们生成的哈希值进行比较,以查看是否匹配。

如果匹配,则收件人可以确信电子邮件是真实的。

接收方会将其生成的哈希与之进行比较,以查看是否匹配。如果匹配,接收方就可以放心地确定该电子邮件是真实的。

05 公钥与私钥对如何实现安全、加密的电子邮件通信?

电子邮件加密是在用户点击“发送”按钮之前,将电子邮件内容(文字、图片/图形、附件等)随机混淆,将其转化为不可读形式的过程。但是,它不加密电子邮件标头信息。

加密电子邮件类似于将秘密、编码过的消息封存在安全的集装箱内;这样,在传输过程中或者在到达位置时(即在电子邮件服务器上)时就不会被查看。这就是为什么它有时被称为端到端加密,因为它从一个端点保护到另一个端点。

那么,在公钥与私钥对如何使用的方面,这个过程是什么样的?(注意:电子邮件的接收者和发送者都必须在其设备上安装电子邮件签名证书。

电子邮件的接收者必须将他们的公钥发送给电子邮件的发送者。

电子邮件的发送者将起草电子邮件并添加任何附件。

当电子邮件发送者对电子邮件进行加密时,他们会使用电子邮件接收者的公钥进行加密。

一旦电子邮件被加密,他们会将其发送给接收者。

当电子邮件接收者接收电子邮件时,他们的电子邮件客户端将使用接收者的私钥来解密消息。这将解开消息以便阅读。

下图显示电子邮件加密的工作原理以及在此过程中如何使用公钥和私钥。1695884793_651525f96aa0f9395bef1.png!small

06 写在最后

尽管您不需要了解加密密钥中如何使用公钥和私钥对的具体细节,但学习这方面的知识绝对有益。

因为加密密钥对于与互联网安全相关的一切都至关重要。无论是保护提交到您的网站的敏感数据,还是保护电子邮件、文档和文件的机密性和完整性,都离不开公钥和私钥对的安全性保障。

公钥和私钥对有助于实现以下功能:

身份验证

这可以归结为数字身份的验证和确认。它使得某个实体(例如网站、电子邮件发送者、软件发布方、文档创建者等)的合法性得以确认。

数据完整性

公钥和私钥对与哈希和加密等密码学过程结合使用,实现了证明消息和文件真实性的数字签名。

不可否认性

这意味着验证数据是否来自相关方,并且没有来自未经验证的源,只要保持私钥的安全性。

一言以蔽之,数字信任所基于的公钥密码学是互联网安全的核心。如果您不能确信网站、软件开发人员、文档创建者或电子邮件发送者的身份是合法的,那么您如何相信您发送或接收的任何数据是安全且可信的呢?您不能。这就是为什么保持加密密钥的安全至关重要。

我们希望本文能够强调安全地管理和存储私钥的重要性。通过保护这些关键资产的安全性,您可以防止所有敏感数据(包括您和客户的数据)不被泄露。


文章来源: https://www.freebuf.com/articles/neopoints/379570.html
如有侵权请联系:admin#unsafe.sh