计算机网络安全:数据加密与签名


随着网络的普及,大量敏感数据在网络中存储和传输,网络安全已成为一门至关重要的专业学科。

网络安全问题

安全性威胁

网络通信面临被动攻击和主动攻击两大类威胁。被动攻击中攻击者不干扰信息,而是通过窃听或截获通信内容,其特点是难以检测。主要形式是使用内容截获的方式直接获取通信数据,并对其进行流量分析。此时即使数据被加密,攻击者仍可通过分析协议控制信息、数据包长度、传输频度等,推断出通信实体的身份、位置及通信的某些性质(如在军事中用于定位指挥中心)。
image

攻击者主动干扰、篡改或伪造信息流的方式为主动攻击,主要有篡改、恶意程序、拒绝服务这几种方式。篡改通过故意修改、中断或完全伪造网络上传送的报文,有是也被称为更改报文流。常见的恶意程序有如下种类:

恶意程序 简介
计算机病毒 通过修改其他程序进行传染和复制的程序
计算机蠕虫 通过网络自我复制和传播并独立运行的程序,如 Morris 蠕虫)
特洛伊木马 伪装成有用程序,实际执行恶意功能,如窃取数据
逻辑炸弹 在特定条件(如特定日期)触发破坏功能的程序
后门入侵 利用系统漏洞非法侵入系统
流氓软件 未经用户允许强制安装,损害用户利益,如强制弹窗、劫持浏览器

拒绝服务 DoS 指向特定服务器发送海量请求的攻击方式,使其瘫痪无法提供服务。若从互联网上成百上千的站点(“僵尸网络”)同时发动 DoS 攻击,该方式被称为分布式拒绝服务 DDoS,威力极大。还有一些其他形式例如用伪造 MAC 地址填满以太网交换机表,导致交换机中毒无法工作。
d33a037a90b931fc29cb6c1577039588

根据上述威胁,网络安全通信需要追求三大安全目标:防止被动攻击,防止报文内容被析出和流量分析;防止恶意程序;检测主动攻击,检测更改报文流和拒绝服务等攻击。这两类的攻击的基本应对策略是:主要采用各种数据加密技术对付被动攻击,对付主动攻击则需要将加密技术与适当的鉴别技术相结合。

安全的计算机网络

尽管人们期望设计出绝对安全的网络,但网络的安全性在一般意义上是不可判定的,因此当前安全协议的设计主要是针对特定类型的攻击。目前保证协议的安全性有两种基本方法,但都存在局限:

  1. 形式化证明:对简单的协议,通过限制攻击者的能力(假设其不会进行某种攻击),可以对特定情况进行证明。但对复杂的协议,这种方法极为困难。
  2. 经验分析:即通过人工分析来寻找协议中的漏洞,这是目前分析复杂协议安全性的主要方法。

一个安全的网络应力求达成以下四个核心目标,保密性是这些目标的基础,用于保护内容。端点鉴别和信息完整性是这些目标中的核心,它确保通信对象的真实性和信息的可靠。运行安全是它们保障,确保承载服务的系统本身健壮。缺少其中任何一项,网络都存在严重的安全缺陷。

目标 核心要求 主要对抗的攻击类型 说明与重要性
保密性 只有发送方和合法接收方能理解信息内容,截获者无法解读。 被动攻击(截获、窃听) 网络安全最基本的要求。通常通过密码技术(加密)实现。无法提供保密性的网络必然不安全。
端点鉴别 能够确认通信对方的真实身份。 主动攻击(假冒、重放) 确认信息源,防止网络诈骗、确保交易对象真实性的基础。
信息的完整性 确保收到的信息在传输过程中未被篡改、删除或插入。 主动攻击(篡改) 确认信息是否被改动过,通常与端点鉴别合称为鉴别,即同时验证身份和信息完整性。
运行的安全性 确保网络和计算机系统本身能够持续、可靠地运行。 主动攻击(恶意程序、DoS/DDoS) 通过访问控制(规定用户权限)和系统防护(防火墙、入侵检测)等措施来保障。

加密与解密

数据加密模型

数据加密模型是密码学的基础。假设用户 A 要向用户 B 安全地发送消息,发送方 A 作为加密端输入原始可读的 明文 X。接着将明文 X 与密钥 K 一同输入加密算法 E 进行运算,输出不可读的 密文 Y,此过程表示为 Y = Eₖ(X)。密文 Y 通过不安全的公共网络(如互联网)传输,此时可能存在攻击者试图窃听或篡改密文。接收方 B 作为解密端输入接收到的密文 Y,将密文 Y 与密钥 K' 一同输入解密算法 D进行运算,还原出原始的明文 X,此过程表示为 X = Dₖ'(Y)。
image

加密/解密算法 (E, D) 是公开的、固定的数学计算过程,密钥 (K, K')一串秘密的比特串,是安全的核心。可以说算法是锁,密钥是开锁的秘密。为简化模型,密钥在最初假设中常假定加密密钥 K 与解密密钥 K' 相同,即对称密钥。现在在实践中它们可以不同,即使用非对称/公钥体制,此时二者之间必须存在确定的数学关联。密钥通常需要由可信的密钥中心生成并通过另一个安全信道分发给通信双方,该过程本身也是一个关键的安全问题。
加密/解密算法本身可以公开,只要密钥是保密的,通信就是安全的,这是现代密码学的基本原则。合法接收方使用正确的密钥和逆算法,可以唯一地还原明文。没有正确密钥的截取者,无法从密文 Y 中有效地恢复出明文 X。

数据解密

根据攻击者在不同信息条件下的破解能力,解密可分为三种典型的攻击场景,强度依次递增。
| 攻击类型 | 攻击者掌握的信息 | 攻击难度与说明 |
| :--- | :--- | :--- | :--- |
| 唯密文攻击 | 仅有截获的密文,不知道任何明文内容 | 最难,但并非不可能。攻击者可利用统计分析法(如字母频率分析)进行尝试,一个安全的密码体制应至少能抵抗此种攻击。 |
| 已知明文攻击 | 拥有一些(明文,密文)对,即知道部分密文对应的确切原文 | 较为常见和现实,攻击者利用已知的对应关系来推导密钥或破解加密模式,许多历史密码在此攻击下非常脆弱。 |
| 选择明文攻击 | 可以选择任意明文,并获取其对应的密文 | 攻击能力极强,如果加密算法设计有缺陷,攻击者可能通过精心选择明文(如全零、特定模式)来快速破解整个系统。 |

古典密码(如凯撒密码、简单替换密码)在已知明文攻击甚至唯密文攻击下都可能被破解。一个现代、安全的加密算法(如 AES、3DES)的设计目标是能够抵抗选择明文攻击,甚至更强的攻击模型(如选择密文攻击)。
搜狗高速浏览器截图20260215225404

根据被破译的难度,密码体制可分为两类:

  1. 无条件安全(理论上不可破):即使攻击者获得了无限量的密文和无限的计算资源与时间,也无法从密文中唯一地确定出对应的明文。这是一种理想化的、极高的安全标准,但是目前几乎所有实用的密码体制都无法达到无条件安全。
  2. 计算上安全(实际上不可破):指一个密码体制的密码不能被现有、可用的计算资源在合理的时间内破译。其核心思想将破译所需的时间或计算成本(如计算步骤、能耗)提高到攻击者无法承受或得不偿失程度,基于计算复杂性理论中的数学难题(如大数分解、离散对数),使得破解在计算上不可行。这是所有现代实用密码体制(如 AES、RSA)所追求和依赖的安全目标。

作为一个重要的领域,密码学学科构成如下:

密码学学科 说明
密码编码学 研究如何设计安全有效的密码算法和协议。
密码分析学 研究在未知密钥的情况下,如何从密文破译出明文或密钥。
密码学 是上述两者的总和,即关于保密通信的科学。

对称密钥密码体制

对称密钥密码体制指加密密钥与解密密钥相同的密码体制(即 \(K = K'\)),通信双方必须共享并共同保守密钥。DES 是早期最重要的对称密钥密码算法,其设计深刻影响了密码学发展。
image

分组密码

在现代对称密钥加密中,主要分为流密码分组密码两大类。其中,分组密码将待加密的报文分割为固定长度的 k 比特块。例如,若 $k = 64 $,则报文被分成多个 64 比特的块,每个块被独立加密。对每个块,密码采用一种一对一映射,将 k 比特的明文块转换为 k 比特的密文块。假设 \(k = 3\),则每个明文块为 3 比特,共有 \(2^3 = 8\) 种可能的输入。
一种可能的映射关系如下表所示,此时报文 010110001111 被分为 4 个 3 比特块:010、110、001、111,分别加密为 101、001、111、000,最终密文为 101000111001。

输入(明文) 输出(密文)
000 110
001 111
010 101
011 100
100 011
101 010
110 001
111 000

这种映射本质上是所有可能输入的一个排列,对于 \(k=3\),共有 \(8! = 40320\) 种可能的映射,每种映射可视为一个密钥。如果发送方和接收方共享同一映射(密钥),即可进行加解密。但是对 \(k=3\) 的情况,仅尝试 40320 种映射即可破解,在现代计算机上可瞬间完成。为了抵抗暴力破解,实际分组密码的块长度通常为 64 比特或更长(如 AES 使用128比特)。对于 \(k = 64\),可能的映射数量为 \((2^{64})!\),这是一个天文数字,理论上可提供极大安全性。

但直接实现这种全表映射是不现实的,因此维护 \(2^{64}\) 个表项的存储需求巨大,同时每次更换密钥需重新生成整个映射表,很不方便。因此,实际分组密码不预先存储完整的映射表,而是通过多轮循环的复杂函数来模拟随机置换。通过多轮迭代,使得每个输入比特都能充分影响最终输出的多个比特,从而增强混淆与扩散效果,提高安全性。对于 \(k=64\),该设计的常见流程为:

  1. 分割:将 64 比特块分割为 8 个 8 比特子块。
  2. 查表置换:每个 8 比特子块通过一个“8比特到8比特”的置换表(共 8 张表,每张 256 项)进行处理,这些表即构成算法的密钥。
  3. 重组与迭代:将 8 个子块的输出重新组合为 64 比特块,再作为下一轮输入,通常经过 n 轮(如 16 轮)循环。

image

DES

DES 一种分组密码,加密前先将明文按 64 位为一组进行划分,然后对每组独立加密,最后拼接成密文。DES 使用 64 位密钥,其中实际有效长度仅为 56 位,剩余 8 位用于奇偶校验。DES 算法是完全公开的,安全性完全依赖于密钥的保密。DES 算法本身的设计极为优秀,历经全球密码学家的深入分析未发现结构性缺陷。
DES 的主要局限在于密钥长度过短,随着计算能力的飞速提升,暴力破解(穷举搜索所有 \(2^{56}\) 种密钥)已成为可能。尽管密钥长度不足,但 为应对 DES 密钥过短的问题,提出了三重 DES(3DES)方案,其本质是通过多次 DES 操作来增加有效密钥长度。
image
其加密过程使用两个或三个不同的密钥,公式表示为:

\[Y = DES_{K1}(DES^{-1}_{K2}(DES_{K1}(X))) \]

其中,\(K1\)\(K2\) 为两个 56 位密钥。3DES 的优点在于兼容现有 DES 硬件与软件,并将有效密钥长度提升至 112 位(使用两个密钥时),极大地增强了抗暴力破解能力。
为彻底替代 DES,NIST 于 1997 年公开征集高级加密标准 AES。经过全球范围的算法提交、评估、测试和竞争,最后由比利时密码学家 Joan Daemen、Vincent Rijmen 设计的 Rijndael 算法 被选定为 AES。该算法支持多种密钥长度(128, 192, 256 位),可根据安全需求灵活选择,目前已成为全球公认的、最主流的对称加密标准。

公钥密码体制

在大型网络中,通信双方如何安全、高效地共享同一把秘密密钥是非常困难的,主要原因有:事先约定不便、密钥分配中心 KDC 成本高等因素。因此需要一种技术能够对电子信息进行“签名”,以证明其来源的真实性和不可否认性。针对该问题,公钥密码体制(又称公开密钥密码体制)被 Diffie 和 Hellman 提出,它基于一对数学上相关但不同的密钥,即公钥和私钥进行工作。公钥可以像电话号码一样完全公开给任何人,私钥必须由所有者严格保密,加密算法 E 和解密算法 D 都是公开的,安全性完全依赖于密钥。
image

在公钥体制中,计算机上可以容易地生成配对的公钥 PK 和私钥 SK。私钥具有单向性(计算不可行性),从公开的公钥 PK 在计算上不可能推导出对应的私钥 SK。公钥只能用于加密,不能用于解密 \(D_{PK_B}(E_{PK_B}(X)) \neq X\),私钥只能用于解密或用于签名。加密和解密运算的先后顺序可以交换,其结果相同:

\[E_{PK_B}(D_{SK_B}(X)) = D_{SK_B}(E_{PK_B}(X)) = X \]

公钥密码体制的加密与解密过程如下,假设用户 B 生成了自己的密钥对 \((PK_B, SK_B)\)

  1. 加密:发送者 A 使用 B 的公钥 \(PK_B\) 对明文 \(X\) 加密:\(Y = E_{PK_B}(X)\),然后将密文 Y 发送给 B。
  2. 解密:接收者 B 使用自己的私钥 \(SK_B\) 对密文解密 \(D_{SK_B}(Y) = D_{SK_B}(E_{PK_B}(X)) = X\),该阶段只有 B 可以进行解密。

对称密钥仅限于一对一的双向保密通信,公钥体制彻底改变了保密通信的模式,它支持多对一单向保密通信。例如众多客户(持有网站公钥)向同一个网站服务器加密发送自己的信用卡信息,只有持有对应私钥的网站才能解密所有信息。该过程的反向过程是不可行的,公钥体制本身不支持用公钥解密或实现反向的一对多保密广播。

需要注意的是,任何密码体制的安全性最终取决于密钥长度和攻破所需的计算量,而非简单地由体制类型(对称或非对称)决定。公钥体制并未取代对称密钥体制,由于公钥加密算法计算开销大、速度慢,在实际系统中(如 SSL/TLS),通常结合使用两者:用公钥体制安全地分发一个临时的对称会话密钥,然后用该对称密钥来加密实际传输的大量数据。

数字签名

数字签名是传统手写签名或盖章在数字世界的对应物,用于在计算机网络中验证信息的真实性、完整性和不可否认性。数字签名必须实现的三项功能如下:

数字签名功能 说明
报文鉴别 接收者能够核实并确信报文确实来自声称的发送者,他人无法伪造
报文完整性 接收者能够确信报文在传输过程中未被篡改
不可否认性 发送者事后无法抵赖其已发送并签名该报文的事实

基于公钥密码体制是实现数字签名最直接的方法,其过程本质上是使用私钥签名然后用公钥验证。签名的流程如下:

  1. 签名生成:发送者 A 使用自己的私钥 \(SK_A\) 对原始报文 \(X\) 进行解密运算:\(签名 = D_{SK_A}(X)\),此处的解密运算并非为了解密,而是利用私钥生成一个唯一绑定于报文和发送者的签名。
  2. 签名验证:接收者 B 收到报文 \(X\) 和签名后,使用 A 的公钥 \(PK_A\) 对签名进行加密运算:\(还原结果 = E_{PK_A}(签名) = E_{PK_A}(D_{SK_A}(X))\)。根据公钥密码的运算可交换性,如果还原结果等于原始报文 \(X\),则签名验证成功。

image

该策略能实现签名的三项功能,它们都依赖于只有 A 持有其私钥 \(SK_A\) 这一前提:

  • 报文鉴别:由于只有 A 持有其私钥 \(SK_A\),因此只有 A 能生成有效的 \(D_{SK_A}(X)\)。B 用 A 的公钥成功还原 \(X\),即可证明签名确系 A 所为。
  • 报文完整性:任何对报文 \(X\) 或签名 \(D_{SK_A}(X)\) 的篡改,都会导致 \(E_{PK_A}(签名)\) 的结果与 \(X\) 不符,从而被 B 发现。
  • 不可否认性:B 可以将 \(X\)\(D_{SK_A}(X)\) 提交给第三方仲裁机构,第三方使用公开的 \(PK_A\) 进行验证,成功则可证明 A 无法抵赖。

签名与加密的区别在于,纯数字签名过程的目的是认证与防抵赖,不提供保密性。因为签名 \(D_{SK_A}(X)\) 和报文 \(X\) 本身都是明文传输的,任何截获者都可以用A的公钥 \(PK_A\) 验证签名并读取 \(X\)。为同时实现保密通信,需要结合发送方和接收方的两对密钥进行嵌套操作。通过 A 的签名保证了报文的真实性、完整性和不可否认性,只有 B 能用其私钥解密又保证了保密性。其流程如下:

  1. A 方:先用自己的私钥 \(SK_A\) 签名,再用 B 的公钥 \(PK_B\) 加密。
  2. B 方:先用自己的私钥 \(SK_B\) 解密,再用 A 的公钥 \(PK_A\) 验签。

image

参考资料

《计算机网络(第七版)》 谢希仁 著,电子工业出版社
《计算机网络 自顶向下方法》 [美] James F.Kurose,Keith W.Ross 著,陈鸣 译,机械工业出版社

posted @ 2026-02-15 23:15  乌漆WhiteMoon  阅读(58)  评论(0)    收藏  举报