数字签名算法和攻击
2026/9/3 6:11:09 网站建设 项目流程

密码系统分类
一是按照密码系统对明文的处理方法分为分组密码 VS 序列密码(流密码)

①分组密码

把明文切成固定大小一块块,一块一块整体加密。

  • 代表算法:AES、SM4、DES

  • AES/SM4:128 位为一块,整块混淆扩散加工,产生雪崩(雪崩 = 雪崩效应)。

好比把蛋糕切成大小相同方块,一块一块加工。

②序列密码(流密码)

不切大块;产生一串密钥流,和明文按位逐个异或,一位一位加密。

  • 代表:RC4

明文:ABCDERC4 拿你的密钥,生成一串和明文一样长的 “随机密码流水”:#$%@&明文 和 密钥流 一对一做异或,得到密文。 解密:密文再和同一串密钥流异或一遍,直接还原明文。

流密码特点:不用等凑够一整块数据,来一个字节加密一个字节,速度很快。



二是按将明文转化为密文的操作类型分为替换 (代换) 密码 VS 位移 (置换) 密码

①替换密码(代换):换字母,顺序不变

把原字母替换成另一个字母,文字先后顺序不动。

  • 单表代换:凯撒(加法密码)、仿射密码,一个明文固定对应同一个密文,字母频率分析法可以破解

  • 多表代换:维吉尼亚密码,同一个明文可以变成不同密文。

②位移密码(置换 / 换位密码):字母不变,只打乱顺序

字符本身不改变,只调换字符先后排队顺序。

  • 代表:倒序密码、栅栏密码。

字母频率和明文一模一样,频率分析法无效。

口诀:替换 = 换字不换位置;位移(置换)= 换位置不换字


三是按密钥的使用个数分为对称密码体制 VS 非对称密码体制

①对称密码:只有 1 个密钥

加密、解密共用同一把密钥。速度快,适合加密大量数据。

  • 代表:AES、SM4、DES、RC4 公式:\(D(E(M))=M\),加密解密同一密钥。

问题:密钥怎么安全传给对方是难题 →DH 密钥交换协议解决。

②非对称密码:一对密钥:公钥 + 私钥(2 个密钥)

  • 公钥:公开,用来加密、验签名

  • 私钥:自己保管,用来解密、生成签名

  • 代表:RSA、SM2

公钥加密的内容,只有私钥可以解开。

现实混合加密:非对称只传小会话密钥;真实业务数据交给对称密码加密。


衡量密码体制安全性的基本准则有以下三种:
(1)计算安全的:如果破译加密算法所需要的计算能力和计算时间是现实条件所不具备的,那么就认为相应的密码体制是满足计算安全性的。这意味着强力破解证明是安全的,即实际安全。
(2)可证明安全的:如果对一个密码体制的破译依赖于对某一个经过深入研究的数学难题的解决,就认为相应的密码体制是满足可证明安全性的。这意味着理论保证是安全的。
(3)无条件安全的:如果假设攻击者在用于无限计算能力和计算时间的前提下,也无法破译加密算法,就认为相应的密码体制是无条件安全性的。这意味着在极限状态上是安全的。

1. 无条件安全:神仙都打不开

定义:就算黑客拥有无穷无尽的时间、无穷强的超级电脑,也打不开

比喻: 箱子里放纸条,同时给你一张完全一模一样长度的随机纸条,两张纸条做特殊混合。 黑客就算拿到混合后的纸条,不管多厉害,看不出里面写的啥。 👉现实叫:一次一密

缺点:钥匙纸条要和消息一样长,用完就要扔掉,日常没法用。

重点:能力无限也搞不定

2. 可证明安全:想开锁,先要解开一道世界级数学难题

定义:破解密码 = 解开一道全世界数学家都解不开的数学题。

比喻: 箱子锁设计很巧妙。想要撬开箱子,你必须先解开一道全世界没人算得出来的超级数学题。 只要这道数学题没人搞定,箱子就安全。 万一未来数学家把难题解开了,锁直接报废。

例子:RSA、SM2、DH 密钥交换。

重点:安全靠【数学难题】做后盾。不是永远不破,难题被攻破就完蛋。

3. 计算安全:理论上能撬开,但代价大到傻子才会干

定义:理论上暴力尝试所有钥匙可以打开,但是现实中时间、钱、电脑根本扛不住。

比喻: 箱子有无数把钥匙,理论上一把一把试总能试出来。 但是钥匙数量多到,集合全世界所有电脑,要算几十亿年才能试完。 不是打不开,现实没有人耗得起这个成本

例子:AES、SM4。

重点:能破解,但是现实算不起

一、古典密码(古代保密,全部很弱)

1. 移位密码(凯撒密码)

  • 是什么:字母整体挪几位。向后挪 3 位就是凯撒密码。

  • 密钥:移动多少位这个数字。一共只有 25 种可能性。

  • 弱点:直接挨个试就能破解。

  • 用途:古代打仗写信保密,现在只用来考试。例子:A 往后挪 3 位→D;B→E

2.维吉利亚密码(Vigenère 密码)

前面学的移位密码(凯撒):所有字母统一挪同样位数。同一个字母,加密出来永远是同一个字母。

比如密钥 k=3,全部字母都往后挪 3 格。

维吉利亚密码:移位位数是变化的,不是固定一个数字,用一个密钥单词来控制移位。密钥单词每个字母,分别代表移位多少位。

A = 移 0 位,B = 移 1 位,C = 移 2 位 …… Z = 移 25 位。

维吉尼亚密码 = 用好几个不同的凯撒密码,轮流上班!

密钥不再是数字,而是一个英文单词。 单词里每一个字母,代表一套凯撒移位。单词用完了,就从头再循环一遍这个单词。

举个最简单例子:

明文:HELLO(我要加密这句话) 密钥单词:ABA 代表移位 0 位(不动),B 代表移位 1 位。

密钥单词只有 2 个字母 A B。明文有 5 个字母,密钥不够长,就循环重复:A B A B A

把明文和循环后的密钥上下对齐: 明文:H E L L O 密钥:A B A B A 移位:0 1 0 1 0

逐个字母移位: H +0 → H E +1 → F L +0 → L L +1 → M O +0 → O

最后密文:HFLMO

✅重点现象!看明文里两个 L: 第一个 L 碰到密钥 A →不变 L 第二个 L 碰到密钥 B →变成 M 👉原文一模一样的字母,加密之后,可以变成不一样的字母!这就是它和凯撒最大区别。

3.仿射密码

凯撒密码(加法密码)是仿射密码的特殊情况。比凯撒多一步乘法。

公式:密文 = (a × 明文 + b) mod 26

  • a、b:两个密钥数字

  • a 不能随便取,a 要和 26 互质(考试记住就行)

  • a=1 的时候,仿射密码就退化成凯撒加法密码。

凯撒:只有 1 个密钥 b;仿射有 2 个密钥 a、b。

举简单例子

a=3,b=2 A 对应数字 0: 密文 = (3×0 +2) mod26 =2 →数字 2 对应字母 C 👉明文 A →密文 C

明文 B(数字 1): 密文 =(3×1+2)=5 →字母 F 👉明文 B →密文 F

明文:AB→密文:CF

文字顺序 A、B 保持不变,只是每个字母被替换成别的字母。

单表代换特点:同一个明文,永远变成同一个密文。 A 永远变成 C,不会变别的。 所以字母频率分析法可以破解仿射密码

4.栅栏密码

字母一点都不换,只打乱字母排队的先后顺序

明文:HELLOH E L L O 密钥 = 2,意思分成上下两行书写

第1行:H L O 第2行:E L

书写规则:顺着明文,一个字写第一行,下一个字写第二行,交替写。

加密读密文:先读完第一行全部,再读第二行全部第一行 H L O,第二行 E L 密文:HLOEL

你看:H E L L O 这几个字母全部还在,没有变成别的字母。只是排队顺序被打乱。

解密:拿到密文HLOEL,重新拆回两行,横着读就恢复 HELLO。

5.倒序密码

最简单的置换密码:把明文全部字符从头到尾直接颠倒过来

二、非对称密码(两把钥匙:公钥 + 私钥)

公钥对外公开;私钥自己死死保存。 公钥锁,私钥开;私钥签名,公钥验证签名

RSA(大素数分解)

  • 安全根基:大整数因子分解问题

  • 人话:把两个大质数相乘很简单;拿到乘积,反推原来的两个质数极其困难。

  • 巨大限制:RSA不适合加密大段文字、大文件!速度很慢,能加密的数据长度很短。 现实用法:RSA 不去加密聊天内容,只加密 AES 的会话密钥。 流程:随机生成 AES 密钥,用 RSA 把这个小密钥加密传给对方;真正聊天内容交给 AES 加密。(混合加密)

设在RSA的公钥密码体制中,公钥为(e,n)=(13,35),则私钥为()

A,11 B,13 C,15 D,17

第 1 步:把 n 拆成两个质数 p、q

n = 35 哪两个质数相乘等于 35?

5,7

第 2 步:算 φ(n)(欧拉函数,考试固定公式)

公式:

\(φ(n)=(p-1)×(q-1)\) 代入 p=5,q=7,得到数字 24。

第 3 步:私钥 d 满足什么条件(最重要)

\(e × d\) 除以 φ(n),余数必须等于 1本题:\(e=13,φ(n)=24\) 也就是:

\(13 × d \quad \div 24,余数=1\)

四个选项:A11 B13 C15 D17,挨个试。

  • A:13×11 =143。143÷24 =5,余 23 →不是 1 ❌

  • B:13×13 =169。169÷24 =7,余1✔满足条件

  • C:13×15 =195。195÷24 =8,余 3 →不是 1 ❌

  • D:13×17 =221。221÷24 =9,余 5 →不是 1 ❌

所以 d=13,答案 B。

SM2(椭圆曲线离散对数

  • SM =商密(商用密码),2 是编号。

  • 安全根基:椭圆曲线问题(椭圆曲线离散对数)

  • 能干:数字签名、加密、双方协商密钥

  • 优点:同等安全下,密钥比 RSA 短很多,手机、小设备运行快。

考试坑:不要和普通离散对数搞混,DSA 才是普通离散对数。

DSA数字签名算法(Digital Signature Algorithm)

DSA 的安全性基于:离散对数问题人话: 已知gx,算 \(y=g^x\) 很简单。 但是已知gy,反推算出 x,非常难。 这个数学难题叫离散对数问题

只做数字签名,不能加密数据

依旧两把钥匙:私钥(自己保管)、公钥(公开)

签名(我发消息):拿自己的私钥,对消息的哈希指纹运算,生成签名。

验签(别人收到消息):拿我的公钥,校验签名。 校验通过 = 消息确实是我发的,中途没有被篡改。 校验失败 = 消息被篡改,或者不是我发的。

RSA 像一把多功能瑞士军刀:既有盖章的模块(签名),又有锁箱子的模块(加密)。两个功能都给你做好了。

DSA 像一把专门的印章:只能用来盖章(签名证明身份),没有锁箱子的结构,不能拿来锁东西(加密)。 你可以拿印章证明文件是你的,但你不能用这个印章把文件锁起来不让别人看。


三、哈希摘要算法

不能用来加密,不能还原原文;只能用来检查文件有没有被篡改。 你给文件,它吐出一串固定长度乱码 = 指纹。文件改一个字,指纹完全大变样。

SM3(国密 3 号)哈希算法

国产哈希算法,输出 256 位指纹,对标国外 SHA‑256。

哈希算法是干什么的?

输入任意长度的文字、文件,输出固定长度一串乱码(叫摘要 / 指纹)。

  1. 不可逆:不能通过指纹反推出原始文件。只能算指纹,不能解密回原文。

  2. 雪崩效应极强:原文哪怕只改 1 个字符,输出的 SM3 指纹会完全大变样。

  3. 用途:校验数据有没有被篡改;数字签名的时候先要算摘要。

SM2 做签名的时候,内部要调用 SM3 算摘要。

SM3 核心参数(考试背)

  1. 输出摘要固定:256 位(32 字节)

  2. 不管你的输入是 1 个字,还是 1GB 大文件,输出永远都是 256 比特指纹。

  3. 内部多轮混淆扩散运算,具备雪崩效应

SM3 两个最主要用途

①完整性校验(检查文件有没有被篡改)

例子:下载官方文件,官网给出 SM3 指纹。 你本地把下载好的文件算一遍 SM3 指纹。

  • 如果两个指纹一模一样:文件没被篡改、没损坏。

  • 如果指纹不一样:文件被修改过、传输损坏。

②配合 SM2 做数字签名(高频考点!)

SM2 签名不对原始大文件直接签名。 流程:

  1. 原始大文件 →交给SM3 算出 256 位摘要指纹

  2. 对这个短小的指纹,使用 SM2 私钥做签名。

为什么不直接签大文件?大文件运算慢。只签摘要,速度快。 👉SM2 签名内部依赖 SM3。

验签的时候:接收方收到文件,自己重新 SM3 算摘要,再拿公钥校验签名里的摘要。确认文件没改动。

MD5、SHA‑1

一句话:给任意一段文字 / 文件,算出一串固定长度指纹(摘要)只能正向算出指纹,不能把指纹还原回原始内容。单向,不可解密。

MD5

  1. 不管输入多长(1 个字、100 万字、整个视频文件),输出永远128 位,32 个十六进制字符。 示例: 原文123456的 MD5:e10adc3949ba59abbe56e057f20f883e

  2. 问题:MD5 已经不安全,存在哈希碰撞

可以人为造出两份完全不同文件,MD5 指纹一模一样。 现在不建议用来做安全校验,考试只需要记住:单向哈希算法。

⚠️网上 MD5 解密网站不是解密!只是提前存好大量字符串和对应 MD5 的字典,碰运气查表,复杂随机字符串查不到。

SHA 系列(SHA‑1、SHA‑256、SHA‑512)

SHA 是安全哈希算法,是 MD5 的升级版:

  • SHA‑1:输出 160 位,现在也不安全,有碰撞风险

  • SHA‑256:输出 256 位(64 位十六进制),现在常用,安全可靠

  • SHA‑512:输出更长 512 位,安全性更高

特点:输入一点点改动,输出指纹完全大变(雪崩效应

原文:abcabd只差最后一个字母,SHA256 结果完全不一样。

MD5/SHA 能干什么(3 个主要用途)

  1. 完整性校验下载软件,官网给出 SHA256 指纹。你本地算一遍,如果指纹一样 = 文件没被篡改、没损坏;指纹不一样 = 文件被改了。

  2. 网站存储用户密码网站不保存你的明文密码。 你密码123456,网站只存它的 MD5/SHA 指纹。登录时把你输入的密码算出指纹和数据库对比。 就算数据库泄露,黑客拿到的只是一堆指纹,看不到真实密码。

  3. 数字签名辅助先对大文件算哈希摘要,再对摘要做签名,效率更高。

❗重要区分:哈希 ≠加密

  • 加密(AES/SM4/RSA):明文→密文,可以解密恢复原文,目的是隐藏内容。

  • 哈希 MD5/SHA:明文→摘要指纹,无法还原原文,目的是校验完整性、比对,不是保密内容。


四、对称加密

速度飞快,适合加密大量真实数据;问题:密钥怎么安全传给对方是难点。

SM4(国密 4 号)

国产对称加密,对标 AES。加密、解密用同一把密钥,速度飞快,适合加密大量文字、文件、业务数据。

  1. 分组长度:固定 128 位(16 字节):把大文件切成一块块 16 字节小块,一块一块加密。
  2. 密钥长度:固定只有 128 位,不像 AES 有 128/192/256 三种选择腾讯云开发...。
  3. 一共 32 轮迭代运算:一轮一轮做替换、打乱、和密钥混合。
  4. 解密和加密结构一样,只是轮密钥顺序反过来

AES(高级加密标准 Advanced Encryption Standard)

定位:国际主流的对称加密算法,对标咱们国家的SM4(国密对称加密)对称加密:加密、解密使用同一个密钥,速度非常快,适合加密大块数据。

以前老标准是 DES,密钥太短,被暴力破解了。 全世界公开比赛征集新算法,最终比利时两个人设计的Rijndael 算法被选中,改名叫AES,成为全球官方标准。 现在电脑、手机、硬盘加密、WiFi、HTTPS,到处都在用 AES。

密钥长度三个版本(考试考点)

  • AES‑128:密钥 128 位(最常用)

  • AES‑192:密钥 192 位

  • AES‑256:密钥 256 位,安全等级最高

密钥越长越安全,计算会稍微慢一点点。

什么是分组密码(AES 属于分组密码),AES 不会一大段文字一次性处理。 把明文切成固定大小的小块,每块 128 比特(16 字节),一块一块单独加密。 如果最后一段不够 128 位,就做填充补齐。

🧩国密全家桶一句话串起来(高频考点)

  1. SM2(两把钥匙):签名、身份、密钥协商。(非对称)

  2. SM3(指纹):校验文件有没有被篡改。(哈希)

  3. SM4(一把钥匙):加密大批量业务数据。(对称)

工作流程场景: 两个人网上通信

  1. SM2安全协商出一个临时密钥

  2. 用这个密钥交给SM4加密聊天内容

  3. SM3生成指纹,确认消息中途没被篡改。


加密算法攻击

背景:黑客想要破解密码,拿到密钥。四种攻击,区别就是:黑客手上手里有什么材料

我们举个现实场景: 对方用同一个密钥加密消息。黑客想破解这个密钥。

1️⃣唯密文攻击

黑客手里:只有一堆密文(乱码),除此之外啥都没有。 黑客截获网上传输的一堆加密后的乱码,完全不知道原文是什么,只知道加密算法。 只有密文,猜密钥。

例子:截获一堆维吉尼亚加密出来的乱码,不知道原文写的啥,硬猜。 👉难度:最难破解,手里信息最少。

2️⃣已知明文攻击

黑客手里: ①待破解的密文;②已经拿到几组:明文 + 对应的密文(是同一个密钥加密出来的)

大白话: 黑客碰巧知道了几段消息的原文,同时也拿到了这几段原文加密后的乱码。 明文和密文是现成得来的,不是黑客自己造出来的。 拿着这一组一组 “原文‑乱码配对”,反推密钥;拿到密钥之后,再去破解剩下不知道的密文。

举例子: 黑客知道:明文CAT加密之后密文是FDW(同一把密钥)。黑客利用这组配对,算出密钥。然后拿这个密钥,去解密另外一段不知道内容的密文。

3️⃣选择明文攻击

黑客可以自己随便挑选明文(自己写原文),欺骗加密机器,机器用目标密钥加密,返回密文给黑客。 黑客主动构造明文!不是碰巧得到,是我指定内容让你加密。

例子:黑客可以哄骗服务器:“帮我把AAAAA加密一下发给我”,服务器傻乎乎用正在使用的密钥加密返回密文。黑客拿到大量自己选的明文和密文,破解密钥。

关键点:黑客主动选明文

4️⃣选择密文攻击

黑客自己挑选密文(乱码),欺骗解密机器,机器解密返回对应的明文。 黑客主动拿乱码,骗机器解密出原文。多用于非对称密码(RSA/SM2)攻击。

关键点:黑客主动选密文,骗对方解密

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询