公钥密码学简介

一口Linux 2021-10-07 09:56

击上方“一口Linux”,选择“星标公众号

干货福利,第一时间送达!

作为工程师应学习的非对称密码学概念

> Enigma machine by School of Mathematics — University of Manchester on flickr (CC BY 2.0)


如果您从事软件开发,则可能已经以一种或另一种方式向您介绍了加密技术。签名消息,加密有效载荷,验证签名以及使用证书;这些都是我们每天都使用的功能,即使我们不知道也是如此。

公钥密码学或非对称密码学是70年代中期开始的广泛科学研究的主题,也是当今众多书籍和研究论文的目标。

这绝不是试图以任何水平的科学或学术细节介绍密码技术。

相反,我将尝试展示非对称密码技术背后的关键功能概念,并提供示例说明如何使用它(同时尽量避免使用专业术语)。

在以下各节中,我们将讨论:

· 对称加密与非对称加密。

· 密钥生成。

· 非对称加密,或如何发送加密的消息。

· 签署有效载荷。

· 证书。

对称加密与非对称加密

对称加密与非对称加密的区别在于使用密钥来交付基础加密功能的方式:

> With symmetric encryption, one key is shared with one or more parties (image by author)


在对称加密中,同一密钥既用于加密又用于解密。密钥成为参与者之间共享的共享秘密。

显然,随着参与者数量的增加,泄露密钥的风险也随之增加。

在上图中,如果 史蒂夫(Steve)的PC受到了威胁,任何获得密钥的人都可以解密发送给爱丽丝(Alice),约翰(John)和伊丽莎白(Elizabeth)的所有消息。

因此,一旦共享秘密在任何单个位置受到破坏,整个系统的安全性就会受到损害。对称加密的主要缺点是使用单个共享密钥以及找到安全的传播方式的要求。

对称加密是直到70年代中期之前使用的主要加密机制,当时研究人员开始建议使用另一种方法来创建和传播密钥,更重要的是。

这是非对称加密诞生的时候:

> With asymmetric encryption, parties maintain key-pairs and exchange public keys (image by author)


在非对称加密中,每一方都是一对密钥(公共密钥和私有密钥)的所有者。

最大的突破是,公开密钥不是一个共享的秘密,应该由两个或多个参与者小心地隐藏起来。相反,参与者可以通过不受信任的网络交换公用密钥,甚至可以与其他任何人共享公用密钥。

对称加密彻底改变了密码学领域,如今它已成为大多数大规模加密方案的基础。例如,互联网。

密钥生成

非对称加密中公钥和私钥的创建取决于数学问题,尤其是单向函数。

单向函数的特征在于易于以一种方式解决(即生成密钥),但是反计算(即在具有加密的有效载荷时找到密钥)在计算上非常昂贵。

就像我在本文开头所承诺的那样,我不会不必要地使用与密码学有关的技术术语。但是,请记住这一点:并非所有键都是相同的。

密钥的质量和强度取决于生成密钥的算法以及密钥的位数。

当前使用Diffie-Hellman算法生成的密钥的密钥大小建议为2048位或更大,约为使用椭圆曲线算法生成的密钥的1/10。

因此,是时候使用瑞士的加密工具LibreSSL(v2.8.3,如果您使用的是OpenSSL,下面的大多数命令也应如此)来创建我们的第一个非对称加密密钥对。

创建一个加密的私钥

openssl genrsa -des3 -out alice-privatekey.pem 2048openssl genrsa -des3 -out bob-privatekey.pem 2048

您现在已经成功为Alice和Bob生成了私钥。LibreSSL和OpenSSL中都有指定密钥属性的其他选项,包括在生成过程中使用椭圆曲线算法。

私钥应该保持,好…私密,切勿与其他任何人共享。

从私钥中提取公钥

openssl rsa -in alice-privatekey.pem -outform PEM -pubout -out alice-publickey.pemopenssl rsa -in bob-privatekey.pem -outform PEM -pubout -out bob-publickey.pem

现在,由于没有嵌入任何敏感信息,因此可以提取Alice和Bob的公钥并将其发送给任何感兴趣的方。

非对称加密,或如何发送加密的消息

非对称加密适用于公钥和私钥。要发送加密的消息,在加密过程中使用接收者的公钥,在解密过程中使用接收者的私钥,如下所示:

> Public-key encryption/decryption (image by author)


以下是上述场景中涉及的步骤,其中Alice希望将加密的消息发送给Bob:

· 爱丽丝获得鲍勃的公钥。

· 爱丽丝存储鲍勃的公钥以备将来使用。

· 爱丽丝将鲍勃的公钥与有效载荷一起使用,然后将其通过她的加密软件进行加密。

· 加密的有效负载将发送到Bob。

· 鲍勃将自己的私钥和爱丽丝发送给他的解密软件的加密消息传递。

· Bob获得了Alice发送的原始有效负载。

因此,让我们进入实际部分,并使用Bob的公钥向他发送加密文件。哦,等等…我们不能!

混合加密

上面介绍的理论部分没有任何问题,因为它的工作原理与广告宣传完全一样。但是,有一个不对称加密的"陷阱":要加密的有效负载的大小必须(几乎)与用于加密的公钥的大小匹配。

因此,要向Bob发送大约1MB的照片,您需要Bob拥有至少800万比特的公共密钥。那是八百万个1和0,一个接一个。生成这样的密钥可能不太实际-即使可以实现。

尽管您可以创建一种结构,在该结构中以块模式使用非对称加密来加密大型有效负载,但是通过以接近可用公共密钥大小的较小比特来加密有效负载,实际上,这是没人在使用的东西。就所用空间而言,效率低下,而且速度将非常缓慢。

为了减轻非对称加密的密钥大小限制,当前的做法是使用混合加密:

> Hybrid encryption (image by author)


在混合加密中,将创建一个随机对称密钥来加密有效负载,并使用公共密钥来加密随机对称密钥。让我们看看它是如何工作的:

· 鲍勃将他的公钥发送给爱丽丝。

· 爱丽丝生成共享的对称密钥。

· 爱丽丝用鲍勃的公钥加密对称密钥。

· 爱丽丝使用(2)中创建的共享密钥对消息进行加密。

· 爱丽丝将加密的消息和加密的共享密钥发送给鲍勃。

· 鲍勃使用他的私钥解密共享密钥。

· 鲍勃使用共享密钥解密加密的消息。

如果手动执行,上述情况将是冗长而乏味的。但是,有完善的工具和标准可以自动安全地交换消息和文件,例如OpenPGP及其在PGP和GPG中的化身。

使用GPG加密(GNU Privacy Guard)

GnuPG是RFC4880(也称为PGP)定义的OpenPGP标准的完整和免费实现。

GnuPG允许您对数据和通信进行加密和签名,并具有通用的密钥管理系统以及用于各种公钥目录的访问模块。

现在,让我们尝试使用GPG将加密的文件从爱丽丝发送到鲍勃:

· 爱丽丝和鲍勃都需要创建GPG密钥对:gpg –gen-key

· 鲍勃应导出其公钥并将其发送给Alice:gpg –output bob.gpg –export bob@bob.com

· 爱丽丝收到鲍勃的公钥后,应将其导入到本地密钥数据库中:gpg –import bob.gpg

· 爱丽丝创建未加密的消息:echo" Hello Bob"> bob.msg

· 爱丽丝对邮件进行加密,然后将加密的邮件与加密的共享密钥一起发送到Bob:gpg-输出bob.msg.gpg –encrypt-收件人bob@bob.com bob.msg

· 鲍勃(Bob)接收加密的消息,并通过解密共享密钥并解密加密的消息来解密它:gpg –output bob.msg –decrypt bob.msg.pgp

GPG和PGP都已被广泛使用,并且已经包含在我们日常使用的许多产品中,例如电子邮件客户端,因此您几乎不必手动执行上述顺序。

签署有效载荷

有时,不一定需要加密消息的内容,但是,我们可能仍要确保发送者的身份。其他时候,内容需要加密,发件人的身份也需要验证。在两种情况下,这都是我们使用数字签名的地方。

在我们看到如何生成数字签名以及如何对内容进行验证以及验证发件人的身份之前,让我们在这里进行重要的区分-我经常看到人们可以互换使用:数字签名不是电子签名 。

电子签名

数字签名只是用于验证数字消息真实性的数学证明。

它使邮件的接收者具有很高的确定性,可以相信特定的邮件是由已知的发件人创建的,并且该邮件在传输过程中没有被更改。

电子签名

电子签名带有物理签名的意图,通常使用数字签名来实现。

在许多国家/地区,电子签名只要符合其所依据的特定法规的要求,就可以提供与手写签名相同的法律地位。

发送者使用私钥产生数字签名,接收者使用发送者的公钥验证数字签名:

> Verifying a message with a digital signature (image by author)


· 爱丽丝将她的公钥发送给鲍勃。

· 爱丽丝创建一条消息,并使用她的公钥产生数字签名。通常,在消息的计算出的哈希值上,例如在所得的SHA-256上,产生数字签名。

· Bob收到了原始的未加密消息以及该消息的Alice的数字签名。

· Bob使用Alice的公钥重新计算了原始未加密邮件的数字签名,并将其与Alice发送的签名进行了比较。

· 如果两个签名都匹配,则鲍勃知道是爱丽丝发送了原始邮件,并且邮件的内容没有更改。

接下来,让我们看看如何创建数字签名以及收件人如何验证收到的邮件是否未被篡改。

签发签名

openssl dgst -sha256 -sign alice-privatekey.pem -out bob.msg.sign bob.msg

上面的命令使用Alice的私钥在bob.msg文件的SHA-256输出上计算数字签名。然后,爱丽丝将bob.msg以及bob.msg.sign文件发送给Bob。

验证签名

openssl dgst -sha256 -verify alice-publickey.pem -signature bob.msg.sign bob.msg

鲍勃从爱丽丝那里收到了两个文件,然后继续使用爱丽丝的公钥来验证签名。上面的命令根据数字签名验证结果返回" Verified OK"或" Verification Failure"。

证明书

证书,也称为数字证书,身份证书或公钥证书,是证明公钥所有权的电子文档。

证书的最常见格式由X.509定义,从根本上讲,它包含一个公共密钥,该公共密钥的数字签名以及有关公共密钥所有者身份的信息。

证书可用于多种目的,因此,存在不同的证书配置文件。

公钥对应于证书的所有者。但是,要使其他任何人都能够验证所有者的身份,则需要一个受信任的第三方实体。

这就是证书颁发机构的用处。证书颁发机构是负责签署证书的一方,通常是受信任的知名公司或组织。

为了有效地执行此角色,证书颁发机构需要拥有自己的根证书,该证书由尽可能多的用户信任。但是,证书颁发机构也可以提供交叉签名,从而对其他证书颁发机构的根证书进行签名。

刚开始时听起来可能会令人困惑,所以让我们尝试通过一个示例进行说明:

> A certificate validation chain of trust (image by author)


· 在上面的示例中,鲍勃连接到爱丽丝的网站,并希望验证是由爱丽丝经营的。

· Bob在访问爱丽丝的网站时获得了证书。该证书包含Alice的公钥以及来自证书颁发机构CA1的数字签名。

· 由于Bob不了解也不信任CA1,因此他检查了嵌入证书中的证书链。

· 通过追溯可用的交叉签名,Bob到达了他信任的证书颁发机构CA3。现在,他知道爱丽丝的网站可以信任由爱丽丝运营。

当然,所有这些过程都是由Internet浏览器在幕后在HTTPS协议的传输层安全性(TLS)下进行的。

证书身份验证是基于共同受信任的父证书颁发机构的事实,这也是对证书的主要批评之一。

如果该父证书颁发机构被破坏或流氓怎么办?

尽管证书主要用于网站隐私,标识和内容可靠性,但它们也可以用于客户端标识。

如果您对自己的证书颁发机构感兴趣,可以尝试使用各种可用的开源实现之一,例如OpenCA,EJBCA或OpenXKPI。

> Screenshot of the web administration console of EJBCA (David CARELLA, Wikipedia, CC BY-SA 4.0)


当然,请考虑到由于您自己的证书颁发机构的根证书不会被您的Internet浏览器或其他任何人信任,因此您需要按照操作系统的说明将其手动插入到受信任的证书存储中。

使用您自己的证书颁发机构颁发的证书的所有用户的计算机也是如此。

不,不是一种选择是让一个知名的大型根证书颁发机构对您自己的证书颁发机构的根证书进行交叉签名。

结论

公钥密码术或非对称加密是一种基于密钥对,公钥和私钥的密码系统。非对称加密的主要用例是加密通信,提供消息验证和真实性。

在本文中,我试图介绍非对称加密背后的基本概念,尽管只是从头开始讨论了这样一个复杂的话题。密码学是一个引人入胜的领域,迄今为止,它一直在进行积极的研究,并为好奇的人们提供了大量的信息。

离开之前,如果您需要在项目中进行加密,请牢记加密的黄金法则:不要投放自己的加密货币。

那里有许多库以及已经实施的强大,安全,经过考验的算法。做研究并选择已经满足项目需求的研究。

(本文翻译自Nassos Michas的文章《An Introduction to Public Key Cryptography》,参考:
https://medium.com/better-programming/an-introduction-to-public-key-cryptography-3ea0cf7bf4ba)

-----END-----

来源:头条 闻数起舞

版权归原作者所有,如有侵权,请联系删除。

关注,回复【1024】海量Linux资料赠送

精彩文章合集

linux入门

C语言
Linux驱动
ARM
计算机网络
粉丝问答
所有原创
点击“阅读原文”查看更多分享,欢迎点分享、收藏、点赞、在看
一口Linux 写点代码,写点人生!
评论
  • 嘿,咱来聊聊RISC-V MCU技术哈。 这RISC-V MCU技术呢,简单来说就是基于一个叫RISC-V的指令集架构做出的微控制器技术。RISC-V这个啊,2010年的时候,是加州大学伯克利分校的研究团队弄出来的,目的就是想搞个新的、开放的指令集架构,能跟上现代计算的需要。到了2015年,专门成立了个RISC-V基金会,让这个架构更标准,也更好地推广开了。这几年啊,这个RISC-V的生态系统发展得可快了,好多公司和机构都加入了RISC-V International,还推出了不少RISC-V
    丙丁先生 2025-01-21 12:10 1229浏览
  • 项目展示①正面、反面②左侧、右侧项目源码:https://mbb.eet-china.com/download/316656.html前言为什么想到要做这个小玩意呢,作为一个死宅,懒得看手机,但又想要抬头就能看见时间和天气信息,于是就做个这么个小东西,放在示波器上面正好(示波器外壳有个小槽,刚好可以卡住)功能主要有,获取国家气象局的天气信息,还有实时的温湿度,主控采用ESP32,所以后续还可以开放更多奇奇怪怪的功能,比如油价信息、股票信息之类的,反正能联网可操作性就大多了原理图、PCB、面板设计
    小恶魔owo 2025-01-25 22:09 615浏览
  • 临近春节,各方社交及应酬也变得多起来了,甚至一月份就排满了各式约见。有的是关系好的专业朋友的周末“恳谈会”,基本是关于2025年经济预判的话题,以及如何稳定工作等话题;但更多的预约是来自几个客户老板及副总裁们的见面,他们为今年的经济预判与企业发展焦虑而来。在聊天过程中,我发现今年的聊天有个很有意思的“点”,挺多人尤其关心我到底是怎么成长成现在的多领域风格的,还能掌握一些经济趋势的分析能力,到底学过哪些专业、在企业管过哪些具体事情?单单就这个一个月内,我就重复了数次“为什么”,再辅以我上次写的:《
    牛言喵语 2025-01-22 17:10 494浏览
  • 随着AI大模型训练和推理对计算能力的需求呈指数级增长,AI数据中心的网络带宽需求大幅提升,推动了高速光模块的发展。光模块作为数据中心和高性能计算系统中的关键器件,主要用于提供高速和大容量的数据传输服务。 光模块提升带宽的方法有两种:1)提高每个通道的比特速率,如直接提升波特率,或者保持波特率不变,使用复杂的调制解调方式(如PAM4);2)增加通道数,如提升并行光纤数量,或采用波分复用(CWDM、LWDM)。按照传输模式,光模块可分为并行和波分两种类型,其中并行方案主要应用在中短距传输场景中成本
    hycsystembella 2025-01-25 17:24 473浏览
  • 高速先生成员--黄刚这不马上就要过年了嘛,高速先生就不打算给大家上难度了,整一篇简单但很实用的文章给大伙瞧瞧好了。相信这个标题一出来,尤其对于PCB设计工程师来说,心就立马凉了半截。他们辛辛苦苦进行PCB的过孔设计,高速先生居然说设计多大的过孔他们不关心!另外估计这时候就跳出很多“挑刺”的粉丝了哈,因为翻看很多以往的文章,高速先生都表达了过孔孔径对高速性能的影响是很大的哦!咋滴,今天居然说孔径不关心了?别,别急哈,听高速先生在这篇文章中娓娓道来。首先还是要对各位设计工程师的设计表示肯定,毕竟像我
    一博科技 2025-01-21 16:17 241浏览
  • 书接上回:【2022年终总结】阳光总在风雨后,启航2023-面包板社区  https://mbb.eet-china.com/blog/468701-438244.html 总结2019,松山湖有个欧洲小镇-面包板社区  https://mbb.eet-china.com/blog/468701-413397.html        2025年该是总结下2024年的喜怒哀乐,有个好的开始,才能更好的面对2025年即将
    liweicheng 2025-01-24 23:18 350浏览
  • 不让汽车专美于前,近年来哈雷(Harley-Davidson)和本田(Honda)等大型重型机车大厂的旗下车款皆已陆续配备车载娱乐系统与语音助理,在路上也有越来越多的普通机车车主开始使用安全帽麦克风,在骑车时透过蓝牙连线执行语音搜寻地点导航、音乐播放控制或免持拨打接听电话等各种「机车语音助理」功能。客户背景与面临的挑战以本次分享的客户个案为例,该客户是一个跨国车用语音软件供货商,过往是与车厂合作开发前装车机为主,且有着多年的「汽车语音助理」产品经验。由于客户这次是首度跨足「机车语音助理」产品,因
    百佳泰测试实验室 2025-01-24 17:00 194浏览
  • 前篇文章中『服务器散热效能不佳有解吗?』提到气冷式的服务器其散热效能对于系统稳定度是非常重要的关键因素,同时也说明了百佳泰对于散热效能能提供的协助与服务。本篇将为您延伸说明我们如何进行评估,同时也会举例在测试过程中发现的问题及改善后的数据。AI服务器的散热架构三大重点:GPU导风罩:尝试不同的GPU导风罩架构,用以集中服务器进风量,加强对GPU的降温效果。GPU托盘:改动GPU托盘架构,验证出风面积大小对GPU散热的影想程度。CPU导风罩:尝试封闭CPU导风罩间隙,集中风流,验证CPU降温效果。
    百佳泰测试实验室 2025-01-24 16:58 189浏览
  •     IPC-2581是基于ODB++标准、结合PCB行业特点而指定的PCB加工文件规范。    IPC-2581旨在替代CAM350格式,成为PCB加工行业的新的工业规范。    有一些免费软件,可以查看(不可修改)IPC-2581数据文件。这些软件典型用途是工艺校核。    1. Vu2581        出品:Downstream     
    电子知识打边炉 2025-01-22 11:12 465浏览
  •  万万没想到!科幻电影中的人形机器人,正在一步步走进我们人类的日常生活中来了。1月17日,乐聚将第100台全尺寸人形机器人交付北汽越野车,再次吹响了人形机器人疯狂进厂打工的号角。无独有尔,银河通用机器人作为一家成立不到两年时间的创业公司,在短短一年多时间内推出革命性的第一代产品Galbot G1,这是一款轮式、双臂、身体可折叠的人形机器人,得到了美团战投、经纬创投、IDG资本等众多投资方的认可。作为一家成立仅仅只有两年多时间的企业,智元机器人也把机器人从梦想带进了现实。2024年8月1
    刘旷 2025-01-21 11:15 995浏览
  • 故障现象 一辆2007款日产天籁车,搭载VQ23发动机(气缸编号如图1所示,点火顺序为1-2-3-4-5-6),累计行驶里程约为21万km。车主反映,该车起步加速时偶尔抖动,且行驶中加速无力。 图1 VQ23发动机的气缸编号 故障诊断接车后试车,发动机怠速运转平稳,但只要换挡起步,稍微踩下一点加速踏板,就能感觉到车身明显抖动。用故障检测仪检测,发动机控制模块(ECM)无故障代码存储,且无失火数据流。用虹科Pico汽车示波器测量气缸1点火信号(COP点火信号)和曲轴位置传感器信
    虹科Pico汽车示波器 2025-01-23 10:46 323浏览
  • 飞凌嵌入式基于瑞芯微RK3562系列处理器打造的FET3562J-C全国产核心板,是一款专为工业自动化及消费类电子设备设计的产品,凭借其强大的功能和灵活性,自上市以来得到了各行业客户的广泛关注。本文将详细介绍如何启动并测试RK3562J处理器的MCU,通过实际操作步骤,帮助各位工程师朋友更好地了解这款芯片。1、RK3562J处理器概述RK3562J处理器采用了4*Cortex-A53@1.8GHz+Cortex-M0@200MHz架构。其中,4个Cortex-A53核心作为主要核心,负责处理复杂
    飞凌嵌入式 2025-01-24 11:21 293浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦