有趣的数学 对称/非对称加密简史及数学原理一览

news2024/12/23 8:27:18

一、非对称加密简史

1、算法建立

        对于任何想发送加密信息的人,另一个问题是如何让接收人知道这条信息一开始是如何加密的。对于像字母替换式密码这样的密码,问题在于,一旦窃听者知道了加密方案,后续的信息都可以轻松获取。

        公钥加密(public-key encryption,简称PKE)系统可以解决这个问题。它使用了两个密钥,一个是公开的,另一个是保密的。两个密钥均由受信任的认证机构办法。公钥以电子证书的形式保存,任何想与其持有者进行通信的人都可以访问。

        公钥和私钥本质上都是数学上相关的多位数。这意味着二者任意之一都可以用来加密信息,只要解密它的时候使用的是另外一个密钥。

        20世纪70年代英国政府通信总部就开始了这项工作。与此同时,美国斯坦福大学的惠特菲尔迪・迪非和马丁・赫尔曼也独立构思出来,所以有时候这种算法也被成为迪非-赫尔曼加密。

        对于像破解的人来说,知道这两个密钥在数学上相关并没有太大帮助,从一个密钥推导另一个十分困难的。

        这种加密算法的优势之一是,不需要中央数据库来验证密钥,从而减少了密钥在验证过程中被窃听你的通信渠道的窃听者截获密钥。

2、应用于现实世界

        英国政府通信总部和斯坦福大学的研究工作为公钥加密奠定了基础,而麻省理工学院的三名研究人员罗纳德·李维斯特(Rona1d Rivest)、阿迪·沙米尔(AdiShamir)和伦纳德·阿德尔曼(Leonard Adleman)的突破性进展让它能够应用于实践。这三人发现了一种可以轻松地将公钥与私钥相关联的数学方法,而且它还能实现数字签名的交换,一种确认发送方身份的电子方法。他们的方法涉及因数和质数。

        对于任何给定数字,它的因数是指那些能够整除该数字(即不产生余数)的整数。例如,数字6的因数是1、2、3和6,因为6可以这些数字中的每一个整数而不产生余数。数字4不是6的因数,因为6除它本身和数以4,商为1,余数为2。质数是只有两个因数的数字,它本身和数字1。我们可以很明显地看出数字6不是质数,因为它有4个因数。相比之下,数字5仅能被自身和1整除,因此是质数。

        牢记这个定义,我们可以列出最前面的一批质数,2、3、5、7、13、17、19、23、29和31。数字1不被视为质数,因为它只有一个因数。将上述清单中最大的两个质数相乘,即29×31,是个很快的过程。在计算器上,这是一件微不足道的小事,只需几秒即可完成。你大概还能用铅笔和纸较快地完成这件事,甚至可以在不太长的时间内心算出结果,只要你选择捷径,先计算30×31,再减去31即可得到899这个数字。

        但是如果想反向解决这个问题,难度就大多了。如果给你899这个数字,并询问它的两个因数是什么,用计算器解决可能需要1个小时,用铅笔和纸需要1天,心算的话需要1周。

        随着质数变得更大,解决该问题所花费的时间会越来越长。2018年发现的最大的质数,其位数超过2400万。虽然这意味着将两个这样的数字相乘不是你的普通台式计算机能够做到的事情,但是只需少量的运算容量,你还是能够把它算出来。相反过程耗费的时间简直难以想象。然而,正如任何挑战一样,总是有人愿意尝试。最近破解232位密钥的一次成功尝试花费了相当于超过2000年的计算时间。

        质数的这种数学特性是李维斯特、沙米尔和阿德尔曼提出的办法的基础。三人成立的RSA安全公司估计,如今的应用软件一共使用了超过10亿份RSA加密标准。RSA的一种热门产品是名为SecurID的硬件令牌,它可以帮助识别想要远程访问公司IT系统的用户。用户使用虚拟专用网络(一种电子安全隧道)登陆他们的企业系统。每个用户都配备一个载有液品显示屏的钥匙扣状小型终端。显示屏上会出现一个6位数字,并且每60秒改变一次。要想访问系统,用户需要调用一个登录页面,并输人一个说明其身份的数字代码,加上当时显示在终端屏幕上的6位数字,然后输人预先设置的密码。他们所知道的东西(密码)和他们所拥有的东西(钥匙扣状终端)的这种结合正逐渐成为识别身份的常用方法。这种方法被通称为双因素身份认证(two-factor authentication),很熟悉有没有,有些银行就会让我们花钱买这种东西,现在可能比较少了。

二、高级加密标准

        20世纪70年代中期,美国国家标准局(National Bureau of Standards,简称NBS)邀请有关方面就如何加密未经审查但敏感的政府数据提供想法。IBM计算机公司提出了使用一种对称分组加密算法(symmetric block cipher)的想法,这种密码用于固定长度的数据块,并使用相同的密钥进行加密和解密。也是很熟悉有没有,对称加密算法出现了。

        1977年,该密码的升级版本一一名为数据加密标准(Data Encryption Standard,简称DES)被迅速发布和采用。DES使用64位的数据块大小和同样大小的密钥,不过密钥中只有56位直接用于密码,其余部分用于减少传输过程中出错的可能性。RSA安全公司向能够破解DES密码的组织和个人悬赏,作为回应,电子前沿基金会(Electronic Frontier Foundation,简称EFF)专门建造了一台名为“深度解密"(Deep Crack)的机器,它可以使用暴力破解快速检查所有256种可能的密钥。1999年,EFF的演示表明它可以在不到一天的时间里完成这个过程。

        DES密码的一个升级版本一一一名为3DES(TripIed ES),在那一年被采用,但是随着计算机处理能力的增加,DES最终被证明是不安全的,并在2002年被高级加密标准(Advanced Encryption Standard,简称AES)取代。

        高级加密标准是两名比利时密码学家设计的,使用128位、192位或256位密钥(名为AES一128、AES一192、AES一256)加密长度为128位的数据块。这种加密涉及信息中移列和交换数位的各种循环,并且要对数位执行异或运算。

        目前从未出现让窃听者能够读取AES加密信息的公开已知攻击。话虽如此,但如今有很多已经发表的对AES的理论攻击,与完全的暴力破解攻击相比,它们能够以更快的速度解密信息。然而,完成这种攻击所需的时间实际上是不可行的。例如,在所谓的biclique攻击后面是数学图论的一个分支。人们在2011年发现这种攻击方法比暴力破解攻击快4倍。吹哨人爱德华.斯诺登(EdwardSnowden)的爆料表明,美国国家安全局曾经一直在寻找破解AES的新方法。

        由于用于公钥加密(PKE)的密钥极长,而且找到这些密钥所需的数学方法越来越复杂,现代密码破译如今基本上超出了感兴趣的业余爱好者的能力范围,而是数学家们的专门活动。但是,利用大数字因数分解的难度的加密系统中可能存在漏洞,这种诱人的可能性仍然存在。尽管到目前为止发现的因数分解方法在数学上都很复杂,但仍然可能存在某种更简单的方法。

三、打造安全的互联网

        虽然我们通过电子邮件发动的许多信息都是琐碎小事,但有时候我们还是想要确保没有人可以窥探到我们所说的话。例如,如果你在申请一份新工作,那么你最不想发生的事情就是你的现雇主发现这件事。

        加密电子邮件的一种方式是使用名为“优良保密协议"(Pretty Good Privacy,PGP)的软件包,它结合了传统密码体系和公钥加密的元素。PGP由菲利普,R.齐默尔曼创造,并于1991年
免费发布。PGP软件根据你的鼠标移动和键入方式生成随机密钥。然后这种随机密钥用于加密你的消息。

        在之后的发展阶段是使用公钥加密,但是用公钥加密的不是信息本身,而是上一阶段使用的随机密钥,然后将公钥加密后的随机密钥与使用随机密钥加密过的信息一起发送。当收件人收到你的消息时,他们不会用私钥解密信息,而是先解密随机密钥,然后用它解密附带信息。

        当你访问“https"网站时也会使用加密。可以通过浏览器窗口中出现的小挂锁标识来识别这种网站,而且它们的网址开头是https而不是http这样的网站使用的是名为传输层安全协议(security,简称TLS)的技术以及它的上一代技术安全套接层(secure sockets Layer,简称SSL)实际上,TLS和SSL使用如前所述的公钥加密来保护你和你与之对话的计算机之间的连接。例如'想要侵人你的银行账户详细信息的密码破译者,与试图破解使用相同加密方案发送的信息的密码破译者一样,都面临着同样的挑战。

四、公钥加密的数学示例

        下面是公钥加密一个简化的示例,首先选择两个质数P和Q。为了便于说明,P取11,Q为17。首先令P与Q相乘,得到181。这个数字称为模数(modulus)。然后我们在1和模数之间选择一个随机数字,该数字称为E,在这个例子里它是3。

        接下来,我们需要找到任意数字E,(D*E)-1可被(P-1)*(Q-1)整除。在本例中,(P-1)*(Q-1)=160。320可以被160整除,于是我们可以找到这样一个D值:

        如果(D*E)-1=320,因为我们已经选择E为3,那么D=107

        在这个非常简化的例子中,D的值是一个整数,使得计算尽可能容易。需要注意的是,这并不是唯一可能的值,因为我们可以选择某个不同的E值,或者选择使用480或640或者无数其它数字代替320。

        虽然看上去像是某种数学换算的小把戏,但是除非你知道P和Q各自的值,否则几乎无法根据E计算D的值,反之亦然。 

        现在让我们返回到公钥和私钥的问题上。我们与每个人分享的公钥实际上是两个数字模数(P×Q)和数字E,在我们的例子里就是181和3。私钥是数字D,在我们的例子里是107。

        我们不想泄露P和0各自的值,却将模数(PXQ)告诉所有人,这看似令人吃惊,但其实是这种技术的核心所在。如果P和Q的值足够大,通过对模数进行因式分解将它们找出需要花费的时间几乎是等于坐飞船飞到宇宙尽头一样。

        然后我们使用这些密钥对信息中的字符进行加密和解密。让我们对字母表中的字母进行编号。令A=1,z=26。要加密任何特定字符,我们会对它进行更多计算。假设我们要加密字母G,第7个字母,于是我们会从数字7开始。

        首先,我们计算7的E次幂。将同一个数字相乘E次,所以7的2次幂是7×7=49,等于7的平方;7的3次幂是7×7×7=343,等于7的立方。

        然后,我们使用一种名为模运算(modular arithmetic)的方法,这意味着你在达到一个固定值(称为模数)之后就会绕回来。模运算的一个很好的例子是看时间,它实际上是基于模数12的模运算(例如,10点再过5个小时不是15点,而是3点,因为抵达12点时,你会将时间重置到零)。

        我们已经计算出了模数P×Q的值,即181。数字343在使用模数181的模运算中等于162。这个数字就是我们的字母G加密后的形式。

        于是,我们将数字162和我们的私钥D(在本例中为107)发送给接收人,后者将执行类似的操作以解密信息。接收人计算162的107次幂,再次使用同样的模运算。可以想象,用162乘107次会得到一个绝对巨大的数字。实际上,它近似2后面加236个零。但是我们使用了模运算,如果我们每次到181时都将总数重置为零,最后会得到数字7。解密后的字符是7,也就是字母G。于是我们的接收人收到了信息的第一个字母,而我们可以按照相同的方式继续,直到整条信息都被秘密发送。

        如上,就连这个大大简化的例子也难以捉摸,而且它当然需要一台强大的计算机完成数学运算。如果我们使用了现代加密软件使用的那类数字,那么如果不用上一些世上最强大的计算机,就不可能完成相应的数学运算。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/649478.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【北邮国院大三下】Intellectual Property Law 知识产权基础 Week4

北邮国院大三电商在读,随课程进行整理知识点。仅整理PPT和相关法条中相对重要的知识点,个人认为相对不重要的细小的知识点不列在其中。如有错误请指出。转载请注明出处,祝您学习愉快。 如需要pdf格式的文件请私信联系或微信联系 PRC是否inf…

Android Framework分析Launcher启动过程

简介: Launcher是Android系统中默认的桌面应用程序,负责管理设备的屏幕和应用程序图标。本文将详细介绍Launcher的启动过程,并使用源代码示例进行说明。 Launcher的启动过程: 下面是Launcher的启动过程的详细步骤: …

开源软件介绍——开源基金会和开源许可证

我是荔园微风,作为一名在IT界整整25年的老兵,今天我们来看一看世界范围内知名的开源基金会和开源许可证。 开源基金会 基金会是开源生态中的一个重要组成部分,用于资金的筹集与开源项目的前期资助与后期的发展。这里将介绍部分重要基金会&am…

嵌入式Linux时间同步 gpsd+chrony+pps

硬件设计 GNSS模块输出pps到CPU,1PPS_1.8V用于V2X的pps,GPIO35_1.8V用于pps-gpio。这里做了pps一分二,由于距离太近不影响功能,焊接R35 0欧电阻。 驱动配置 gps_pps_pins:ublox_gps2 {leadcore,pins "gpio34";leadcore…

echarts几个公司内部数据可视化图表必

目录 折线图 日负荷折线图最大需求表柱状图 日电量柱状图分时电量功率因数三相温度水球图 年月日负荷率图散点图 三相平衡 最近公司有一个需求,要做一个数据可视化的页面,所有的图表都在下面,做这些都是本人自己写的,全部都是真…

【笔记】Fastapi 服务器部署无法访问接口

主要原因: # 主函数 if __name__ "__main__":uvicorn.run(appmain:app, host127.0.0.1, port8181, reloadFalse)以上都是测试环境,可以使用127.0.0.1,但是服务器上不能用这个地址,要改为0.0.0.0。 参考:服…

Qt_C++读写NXP、富士通15693标签支持windows国产linux操作系统

常用15693标签NXP ICODE存储结构说明 片内含1024位E2PROM,共分为32 Block,每个Block 32bit。其中64位为唯一序列号,32位用作特殊功能(EAS、AFI、DSFID等),32位用于Block锁定,其余为用户使用区。…

mock测试(挡板测试)

https://www.cnblogs.com/lc-blogs/p/17027617.html mock测试(挡板测试)就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。 比如:测试天气这个接口,最…

RIP协议路由配置(Cisco Packet Tracer)

实验环境: windows10操作系统、思科模拟器、网络正常; 实验内容: 新建packettracer拓扑图;设置PC机的网络配置信息;配置路由器的接口IP;为路由器的RIP添加地址;为路由器添加静态路由。测试PC…

由于找不到wpcap.dll导致软件无法运行的解决办法,特此记录

由于找不到wpcap.dll导致软件无法运行的解决办法,特此记录提示 目录 前言 一、解决找不到wpcap.dll错误的办法 前言 今天在运行一个软件时弹出,找不到wpcap.dll,无法运行的弹出,目前已解决此问题,特此记录&#xff…

MQTT服务等级

1.QoS含义 Quality of Service,服务质量 很多时候,使用 MQTT 协议的设备都运行在网络受限的环境下,而只依靠底层的 TCP传输协议,并不能完全保证消息的可靠到达。因此,MQTT 提供了 QoS机制,其核心是设计了多种消息交互…

什么是electron?

Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 嵌入 Chromium 和 Node.js 到 二进制的 Electron 允许您保持一个 JavaScript 代码代码库并创建 在Windows上运行的跨平台应用 macOS和Linux——不需要本地开发 经验 election的主要组成部分:…

5、共享模型之内存

目录 5.1 Java的内存模型5.2 可见性1、退不出的循环2、解决办法:3、可见性 vs 原子性 5.3 有序性1、为什么会有指令重排2、如何禁止指令重排3、原理之volatile4、happens-before 5.1 Java的内存模型 JMM 即 Java Memory Model(Java内存模型)…

如何学习Java“高并发”,并在项目中实际应用?

前几天收到一位粉丝私信,说的是他才一年半经验,去面试却被各种问到分布式,高并发,多线程之间的问题。基础层面上的是可以答上来,但是面试官深问的话就不会了!被问得都怀疑现在Java招聘初级岗位到底招的是初…

DMHS同步原理介绍以及DM8同步到DM8

一、DMHS原理介绍 1.DMHS介绍 达梦数据实时同步软件 DMHS 是达梦公司推出的新一代支持异构环境的高性能、高可靠和高可扩展的数据库实时同步系统。该产品基于成熟的关系数据模型和标准接口,跨越多种软硬件平台实现秒级数据实时同步。该产品可广泛应用于应急系统、…

什么是产品经理 | 文末赠书

目录 一. 产品经理是什么?二. 产品经理需要具备的技能三. 产品经理的职责四. 产品经理在软件开发过程中如何平衡不同利益方的需求?五. 入门建议六. 发展前景七. 总结🦁文末福利图书介绍作者简介 一. 产品经理是什么? 产品经理是指…

使用阿里巴巴开源神器Arthas进行性能分析

目录 前言: Arthas介绍 启动 分析命令 Profiler工具 前言: Arthas是一款由阿里巴巴开源的Java诊断工具,它可以在生产环境中帮助开发人员快速地定位问题,并进行高效的性能分析。通过在命令行中输入简单的命令,开发人员…

Win10开机后自动显示右键菜单怎么办?

Win10开机后自动显示右键菜单怎么办?用户打开Win10电脑后发现电脑自动显示右键菜单,如果是使用联想电脑的用户,需要打开联想管家,关掉联想锁屏即可,若是系统不兼容导致的,这时候用户就需要恢复Win10系统来解…

前端性能优化:高在性能,大在范围,必要前置知识一网打尽!(上)

前言 前端性能优化 又是个听起来很高大上的词,确实是的,因为它需要 高在性能,大在范围 ,所幸很多大佬都已经输出了很多高质量的内容供大家参考,作者最近也在学习和了解这方面的内容,对如下文中的一些理解若…

死磕测试 10 余年,呕心整理出了核心知识点已经做成PDF,无私奉献

前言: 想在面试、工作中脱颖而出?想在最短的时间内快速掌握 软件测试 的核心基础知识点?想要成为一位优秀的测试工程师?本篇文章能助你一臂之力! 目前正值招聘求职旺季,很多同学对一些新技术名词都能侃侃…