有趣的数学 对称/非对称加密简史及数学原理一览
一、非对称加密简史
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,可被
整除。在本例中,
。320可以被160整除,于是我们可以找到这样一个D值:
如果,因为我们已经选择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。于是我们的接收人收到了信息的第一个字母,而我们可以按照相同的方式继续,直到整条信息都被秘密发送。
如上,就连这个大大简化的例子也难以捉摸,而且它当然需要一台强大的计算机完成数学运算。如果我们使用了现代加密软件使用的那类数字,那么如果不用上一些世上最强大的计算机,就不可能完成相应的数学运算。
相关文章:
有趣的数学 对称/非对称加密简史及数学原理一览
一、非对称加密简史 1、算法建立 对于任何想发送加密信息的人,另一个问题是如何让接收人知道这条信息一开始是如何加密的。对于像字母替换式密码这样的密码,问题在于,一旦窃听者知道了加密方案,后续的信息都可以轻松获取。 公钥加…...
AI大模型落地不远了!首个全量化Vision Transformer的方法FQ-ViT(附源代码)
点击蓝字 关注我们 关注并星标 从此不迷路 计算机视觉研究院 公众号ID|计算机视觉研究院 学习群|扫码在主页获取加入方式 论文地址:https://arxiv.org/pdf/2111.13824.pdf 项目代码:https://github.com/megvii-research/FQ-ViT 计…...
YouTubeDNN
这个youTubeDNN主要是工程导向,对于推荐方向的业界人士真的是必须读的一篇文章。它从召回到排序整个流程都做了描述,真正是在工业界应用的经典介绍。 作者首先说了在工业上YouTube视频推荐系统主要面临的三大挑战: 1.Scale(规模)࿱…...
面向对象的介绍和内存
学习面向对象内容的三条主线 • Java 类及类的成员:(重点)属性、方法、构造器;(熟悉)代码块、内部类 • 面向对象的特征:封装、继承、多态、(抽象) • 其他关键字的使用…...
【数据可视化】Plotly Express绘图库使用
Plotly Express是一个基于Plotly库的高级Python可视化库。它旨在使绘图变得简单且直观,无需繁琐的设置和配置。通过使用Plotly Express,您可以使用少量的代码创建具有丰富交互性和专业外观的各种图表。以下是Plotly Express的一些主要特点和优势…...
小红书企业号限流原因有哪些,限流因素
作为企业、品牌在小红书都有官方账号,很多人将注册小红书企业号看作是获取品牌宣推“特权”的必行之举。事实真的如此吗,那为什么小红书企业号限流频发,小红书企业号限流原因有哪些,限流因素。 一、小红书企业号限流真的存在吗 首…...
1.6C++双目运算符重载
C双目运算符重载 C中的双目运算符重载指的是重载二元运算符,即有两个操作数的运算符,如加减乘除运算符“”、“-”、“*”和“/”等。 通过重载双目运算符,可以实现自定义类型的运算符操作。 比如可以通过重载加减运算符实现自定义类型的向…...
CDD诊断数据库的简单介绍
1. 什么是数据库? 数据库是以结构化方式组织的一个数据集合。 比如DBC数据库: Network nodes Display Rx Messages EngineState(0x123) 通过结构化的方式把网络节点Display里Rx报文EngineState(0x123)层层展开。这种方 式的好处是:层次清晰,结构分明,易于查找。 2. 什么…...
【笔试强训选择题】Day25.习题(错题)解析
作者简介:大家好,我是未央; 博客首页:未央.303 系列专栏:笔试强训选择题 每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!!!ÿ…...
Python心经(6)
目录 callable super type()获取对应类型 isinstance判断对象是否是某个类或者子类的实例 issubclass,判断对象是不是类的子孙类 python3的异常处理 反射: 心经第三节和第五节都写了些面向对象的,这一节补充一…...
MMPose安装记录
参考:GitHub - open-mmlab/mmpose: OpenMMLab Pose Estimation Toolbox and Benchmark. 一、依赖环境 MMPose 适用于 Linux、Windows 和 macOS。它需要 Python 3.7、CUDA 9.2 和 PyTorch 1.6。我的环境: Windows 11 Python 3.9 CUDA 11.6 PyTorch 1.13 …...
梯度下降优化
二阶梯度优化 1.无约束优化算法1.1最小二乘法1.2梯度下降法1.3牛顿法/拟牛顿法 2.一阶梯度优化2.1梯度的数学原理2.2梯度下降算法 3.二阶梯度优化梯度优化3.1 牛顿法3.2 拟牛顿法 1.无约束优化算法 在机器学习中的无约束优化算法中,除了梯度下降以外,还…...
一起看 I/O | 将 Kotlin 引入 Web
作者 / 产品经理 Vivek Sekhar 我们将在本文为您介绍 JetBrains 和 Google 的早期实验性工作。您可以观看今年 Google I/O 大会中的 WebAssembly 相关演讲,了解更多详情: https://youtu.be/RcHER-3gFXI?t604 应用开发者想要尽可能地在更多平台上最大限度地吸引用户…...
极致呈现系列之:Echarts地图的浩瀚视野(一)
目录 Echarts中的地图组件地图组件初体验下载地图数据准备Echarts的基本结构导入地图数据并注册展示地图数据结合visualMap展示地图数据 Echarts中的地图组件 Echarts中的地图组件是一种用于展示地理数据的可视化组件。它可以显示全国、各省市和各城市的地图,并支持…...
第四章 模型篇:模型训练与示例
文章目录 SummaryAutogradFunctions ()GradientBackward() OptimizationOptimization loopOptimizerLearning Rate SchedulesTime-dependent schedulesPerformance-dependent schedulesTraining with MomentumAdaptive learning rates optim.lr_scheluder Summary 在pytorch_t…...
利用人工智能模型学习Python爬虫
爬虫是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。 网络爬虫(又称为网页蜘蛛,网络机器人)是其中一种类型。 爬虫可以自动化浏览网络中的信息,当然浏览信息的时候需要按照我们制定的规则进行,这些规则我们称之为网络…...
.Net泛型详解
引言 在我们使用.Net进行编程的过程中经常遇到这样的场景:对于几乎相同的处理,由于入参的不同,我们需要写N多个重载,而执行过程几乎是相同的。更或者,对于几乎完成相同功能的类,由于其内部元素类型的不同&…...
C++ 教程(10)——存储类
存储类定义 C 程序中变量/函数的范围(可见性)和生命周期。这些说明符放置在它们所修饰的类型之前。下面列出 C 程序中可用的存储类: autoregisterstaticexternmutablethread_local (C11) 从 C 17 开始,auto 关键字不再是 C 存储…...
vue3+vite+element-plus创建项目,修改主题色
element-plus按需引入,修改项目的主题色 根据官方文档安装依赖 npm install -D unplugin-vue-components unplugin-auto-import vite.config.js配置 // vite.config.ts import { defineConfig } from vite import AutoImport from unplugin-auto-import/vite …...
mysql select是如何一步步执行的呢?
mysql select执行流程如图所示 server侧 在8.0之前server存在查询语句对应数据的缓存,不过在实际使用中比较鸡肋,对于更新比较频繁、稍微改点查询语句都会导致缓存无法用到 解析 解析sql语句为mysql能够直接执行的形式。通过词法分析识别表名、字段名等…...
(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
