\chapter{理论基础}

\section{代理重加密}

代理重加密是一种特殊的公钥加密技术，允许代理为第三方重加密消息，
而不需要知道消息的具体内容。
这项技术使得原始加密数据的所有者可以授权代理为第三方重新加密其数据，
而不必将原始数据或解密密钥透露给代理，从而保证了数据安全性和保密性。

\subsection{基本原理}

在代理重加密系统中，通常涉及三个角色：数据拥有者(Alice)、数据接收者(Bob)和代理服务器。
其工作流程如下：

\begin{enumerate}
	\item Alice首先使用自己的公钥对数据M进行加密，产生密文C
	\item 当Alice希望Bob能够访问其加密数据时，她会创建一个重加密密钥rk，并将其提供给代理服务器
	\item 代理服务器使用重加密密钥rk将Alice的加密数据C转化为重加密密文C'
	\item Bob使用自己的私钥对重加密密文C'进行解密，得到原始数据M
\end{enumerate}

在这个过程中，代理服务器既不能访问原始数据，也不能访问解密密钥，从而保证了数据的安全性。

\section{Shamir密码共享方案}

Shamir密码共享方案其核心思想是通过多项式插值来达到一个目的，由Adi Shamir
\upcite{Shamir1979How}
在1979年提出。其定义如下：

$(t,n)$-Shamir是一种方法，使得一个秘密$S$可以被分割为$n$个片段$\{s_1,\ldots,s_n\}$，
这样只有当至少$t$个片段（其中$t \leq n$）集合在一起时，才能恢复原始的秘密$S$。
如果只有$t-1$个或更少的片段，则无法获得任何关于秘密的信息。
这种属性称为$(t,n)$阈值方案，其中$t$（也即$threshold$）是必要的片段数量，
$n$是总片段数量。Shamir密码共享方案的原理基于数学中的多项式插值，
尤其是Lagrange插值。以下是其工作原理：

\begin{enumerate}
	\item 选择一个整数$t$，表示需要的最少片段数来恢复秘密。
	\item 为秘密构造一个$t-1$次多项式$f(x)$，其中$f(0)=S$是要分享的秘密：
	      \[f(x) = a_0 + a_1x + a_2x^2 + \cdots + a_{t-1}x^{t-1}\]
	      其中$a_0 = S$，其他系数$a_1,\ldots,a_{t-1}$随机选择。
	\item 为每个参与者选择一个不同的$x$值，并计算相应的$f(x)$。每个$(x,f(x))$对都是一个秘密片段。
	\item 当要恢复秘密时，只需要任意$t$个$(x,f(x))$对，并使用Lagrange插值来恢复$f(0)$，即原始的秘密$S$。
\end{enumerate}

举例说明：假设我们有一个秘密数字$S=89$，我们希望将其分割成4个片段，
但只需要2个片段就可以恢复它（即$t=2,n=4$）：
选择一个1次多项式（因为$t-1=1$）:
\[f(x) = a_0 + a_1x^1\]
假设我们选择$a_1=23$，那么多项式就是：
\[f(x) = 89 + 23x\]
为每个参与者选择一个$x$值并计算$f(x)$：
\[f(1) = 89 + 23\cdot1^1 = 112\]
\[f(2) = 89 + 23\cdot2^1 = 135\]
\[f(3) = 89 + 23\cdot3^1 = 158\]
\[f(4) = 89 + 23\cdot4^1 = 181\]
每个参与者分别得到一个片段：$(1,112)$, $(2,135)$, $(3,158)$, $(4,181)$。
要恢复秘密，我们可以选择其中任意2个片段。
假设我们选择$(1,112)$和$(2,135)$，使用Lagrange插值可以计算出$f(0)=89$，从而恢复秘密。
具体的Lagrange插值公式为：
\[f(x) = \sum_{i=1}^t y_i \prod_{j=1,j\neq i}^t \frac{x-x_j}{x_i-x_j}\]
在这个例子中，使用$(1,112)$和$(2,135)$进行插值：
\[f(0) = 112\cdot\frac{0-2}{1-2} + 135\cdot\frac{0-1}{2-1} = 224 + -135 = 89\]
这就恢复出了原始的秘密值89。

这个例子展示了Shamir密码共享方案的基本原理和实际应用。

该方案的安全性建立在几个关键密码学原理之上，这些原理共同构成了一个坚实的安全理论基础。
首先，从数学角度来看，Shamir秘密共享方案利用了多项式插值的基本特性：
任意$t-1$个或更少的点无法唯一确定一个$t-1$次多项式。这一特性源自代数学中的基本定理，
即确定一个$t-1$次多项式需要且仅需要$t$个不同点的信息。当攻击者仅掌握少于阈值$t$的份额时，
根据插值理论，存在无穷多个不同的$t-1$次多项式通过这些已知点，每个多项式在$x=0$处的值
（即截距$a_0$）可能各不相同。因此，即使攻击者具备无限的计算能力，
在纯数学层面上也面临着本质的信息不足，无法从已知份额中推导出原始秘密。
这种不确定性不是源于计算复杂度，
而是来自数学原理本身，提供了信息论意义上的安全保证。

其次，方案中多项式系数（除表示秘密的$a_0$外）的随机选择机制进一步增强了系统安全性。
在实际部署中，这些系数通过密码学安全的随机数生成器产生，确保了足够的熵值和不可预测性。
随机选择的多项式系数使得每次秘密共享过程产生的份额分布呈现出完全随机的特性，
任何特定份额集合与原始秘密之间不存在统计相关性。这意味着，
即使攻击者获取了多次共享同一秘密所产生的不同份额集合，
也无法通过统计分析或概率推断获得关于原始秘密的任何有用信息。
随机性作为密码学的核心要素，在此方案中有效地消除了可能的模式和规律，防止了基于历史数据的推断攻击。

此外，在有限域上进行多项式计算为方案提供了额外的安全保障。
通过选择合适大小的素数域$GF(p)$或扩展域$GF(2^m)$，
系统可以确保计算过程中的所有中间值和最终份额都限制在有限范围内，
便于表示和存储。有限域的代数结构使得所有运算都具有模运算特性，
产生的份额在数学上表现为离散且均匀分布，没有特殊值或模式可供攻击者利用。
特别是当使用足够大的域（如256位或更大的素数域）时，穷举搜索变得完全不可行，
即使使用最先进的计算设备也无法在可接受的时间内枚举所有可能的秘密值。
有限域算术还提供了精确计算的保证，避免了浮点运算可能带来的精度问题和信息泄漏，
确保方案在理论和实现层面都保持高度安全。

这三个核心原理相互补充，形成了一个多层次的安全体系。
信息论安全性确保了在数学原理层面的不可破解性；随机系数选择提供了统计学意义上的安全保证；
而有限域运算则在实现层面上消除了可能的安全漏洞。
这种多维度的安全设计使得该方案能够在各种实际应用场景中提供可靠的秘密保护，
即使在面对具备强大计算能力的对手时依然保持其安全特性。

\section{非对称/公钥密码算法}

公开密钥密码学（英语：Public-key cryptography），
也叫非对称密码学（英语：Asymmetric cryptography），
是一种使用两个不同密钥的加密方法。一个是可以公开分享的公钥，用来加密信息；
另一个是需要保密的私钥，用来解密信息。使用公钥加密后的信息，
只能用对应的私钥才能解开，而加密用的公钥本身不能用来解密。
因为加密和解密需要用到两个不同的密钥，所以称为"非对称"加密。
这类加密技术通常基于某些数学难题来保证其安全性。

常见的非对称密码算法基于以下几种数学难题：


\subsection{基于大因数分解}
代表算法：RSA

这类算法的安全性基于大整数分解问题的难度。
RSA算法的安全性依赖于将两个大质数的乘积进行因式分解的计算复杂度。
目前已知的最高效算法仍需要超多项式时间\upcite{Lenstra1990GNFS}，这保证了在足够大的密钥长度下的安全性。
RSA广泛应用于数字签名、密钥交换和数据加密等场景。

\subsection{基于离散对数}
代表算法：DSA、Diffie-Hellman

这类算法的安全性基于在有限域中计算离散对数的难度。
DSA（数字签名算法）主要用于生成数字签名，而Diffie-Hellman则是一种密钥交换协议，
允许通信双方在不安全的通信信道上建立共享密钥。这些算法在安全通信和身份验证中扮演重要角色。

\subsection{基于椭圆曲线}
代表算法：ECDSA、ECDH、SM2

椭圆曲线密码学利用定义在有限域上的椭圆曲线数学性质
。与传统公钥密码相比，椭圆曲线密码在相同安全水平下需要更短的密钥长度，
提供了更高的计算效率和带宽节约。SM2是中国国家密码算法标准，
是基于椭圆曲线的公钥密码算法，支持数字签名、密钥交换和数据加密功能。

\section{杂凑算法}
杂凑算法（也称散列算法或哈希算法）是现代密码学中的核心基础构件，
其本质是一种数学变换过程，能够将任意长度的输入数据映射转换为固定长度输出的单向函数。
这种变换过程具有确定性特征，即相同的输入始终产生相同的输出结果。
杂凑算法的设计理念源于信息压缩理论和随机映射原理，旨在创建一种高效且安全的数据处理机制。
从密码学角度而言，杂凑函数作为原始数据的"数字指纹"，提供了一种验证信息完整性的有效手段，
无需保留或传输完整的原始数据。
杂凑算法的数学模型可表示为一个函数$H: \{0,1\}^* \rightarrow \{0,1\}^n$，
其中$\{0,1\}^*$代表任意长度的二进制串，而$\{0,1\}^n$表示固定长度为$n$比特的输出集合。
这种映射关系决定了输入空间远大于输出空间的基本特性，从而导致理论上必然存在碰撞
（不同输入产生相同输出）。但优秀的杂凑算法设计使得在实际应用中寻找这些碰撞变得极其困难，
即使使用最先进的计算设备也难以实现。

理想的杂凑算法应当满足多项严格的安全特性，这些特性共同构成了评判杂凑算法安全性的基本标准。
首先，单向性（不可逆性）是最为基础的要求，其密码学定义为：对于给定的杂凑值$h$，
在计算上不可行找到任何消息$m$使得$H(m) = h$。这种特性确保了即使杂凑函数本身是公开的，
攻击者也无法从杂凑值反向推导出原始数据。
单向性的实现通常依赖于复杂的非线性变换和不可恢复的信息丢失过程，
使得任何逆向计算尝试都面临组合爆炸的困境。其次，抗碰撞性包含两个层次的安全要求：
弱抗碰撞性（又称第二原像抵抗性）指的是给定消息$m_1$，
在计算上不可行找到不同的消息$m_2 \neq m_1$使得$H(m_1) = H(m_2)$；强抗碰撞性则更为严格，
要求在计算上不可行找到任意两个不同消息$m_1$和$m_2$，使得$H(m_1) = H(m_2)$。
强抗碰撞性一般通过生日攻击方法进行理论测试，为应对此类攻击，
现代杂凑算法的输出长度通常需要达到至少160位以上。
最后，雪崩效应（又称扩散特性）要求输入数据的微小变化（如单个比特的改变）
应当导致输出杂凑值的大规模随机化变化（理想情况下约有一半的输出比特发生改变）。
这一特性确保了杂凑函数对输入的高度敏感性，使得任何有针对性的微调攻击变得极其困难。

现代密码学领域中存在多种被广泛应用的杂凑算法，它们在安全性、性能和设计理念上各有特点。
MD5（消息摘要算法第5版）由Ron Rivest于1991年设计，输出128位杂凑值，
曾经被广泛应用于软件完整性验证和密码存储。然而，随着计算能力的提升和密码分析技术的发展，
MD5已被证明存在严重的安全缺陷。2004年王小云教授等研究人员成功构造了MD5的碰撞攻击方法，
证明了其抗碰撞性的彻底失效\upcite{Wang2004Collisions}。
该研究不仅在密码学理论研究领域产生了重大影响，还促使各大安全系统加速淘汰MD5算法。
SHA（安全杂凑算法）家族由美国国家安全局设计并由美国国家标准与技术研究院（NIST）标准化，
包括多个演进版本。SHA-1输出160位杂凑值，设计于1995年，但目前已被证明不安全；
SHA-2系列包括SHA-224、SHA-256、SHA-384和SHA-512，分别产生相应位数的输出，
目前仍被认为是安全的；SHA-3（原名Keccak）采用了与前代算法完全不同的海绵结构设计，
于2015年正式标准化，提供了更高级别的安全性保证和设计多样性。
而SM3算法是中国商用密码杂凑算法标准，由国家密码管理局于2010年发布，
输出256位杂凑值，其内部结构与SHA-256相似但具有针对性的安全增强，
目前在中国的金融、电子政务等领域得到广泛应用。

杂凑算法作为密码学工具箱中的多功能组件，在信息安全领域有着广泛而重要的应用场景。
在数字签名系统中，杂凑算法被用于生成待签名数据的固定长度摘要，
这不仅提高了签名过程的效率（签名算法只需处理短小的杂凑值而非可能庞大的原始数据），
还增强了系统安全性。消息认证码（MAC）技术则将杂凑函数与密钥结合，
创建了一种能够同时验证数据完整性和来源真实性的机制，
如广泛使用的HMAC（基于杂凑的消息认证码）结构。在数据完整性校验领域，
杂凑算法提供了高效可靠的验证手段，被应用于文件传输验证、软件分发和区块链交易确认等场景。
特别值得一提的是密码存储应用，现代系统普遍采用杂凑函数对用户密码进行单向变换后再存储，
通常还会结合随机盐值和多轮迭代等技术（如PBKDF2、Bcrypt等算法）以增强抵抗彩虹表和暴力破解的能力。
此外，杂凑算法还在伪随机数生成、承诺方案、
密钥派生函数和内容寻址存储等多个前沿技术领域发挥着关键作用，持续推动信息安全技术的发展与创新。

\section{对称密码算法}
对称密码算法（英语：Symmetric-key algorithm）是密码学的核心基础技术，
其本质特征在于加密与解密过程使用完全相同的密钥。这种对称性使得算法在数学设计上相对简洁，
在计算效率方面具有显著优势。从历史发展来看，对称密码可追溯至最早的加密系统，
如古典的凯撒密码、维吉尼亚密码等，但现代对称密码算法在设计理念、
安全强度和应用范围上已有质的飞跃。现代对称密码通过复杂的置换、替代和扩散操作，
将明文信息转换为在数学上难以区分于随机数据的密文，确保在不知道密钥的情况下，
即使拥有完整的密文和算法细节，攻击者也无法恢复原始信息。

对称密码与非对称（公钥）密码相比，其主要优势在于计算效率显著更高，通常快100至1000倍。
这种效率优势源于对称算法多采用简单位操作（如异或、循环移位等）和查表操作，
这些操作在通用处理器和专用硬件上均能高效执行。然而，对称密码也面临着固有的限制，
最突出的是密钥分发和管理问题。由于加密方和解密方必须共享完全相同的密钥，
如何在不安全信道上安全地传递初始密钥成为一个根本性挑战，
这一问题通常需要引入公钥密码技术或预共享密钥机制来解决。此外，在多用户环境中，
对称密码还面临密钥数量随用户数平方级增长的可扩展性问题，
以及密钥泄露影响范围较广的风险控制问题。基于应用特点和技术实现方式，
现代对称密码主要分为分组密码和流密码两大类，各自针对不同应用场景进行了优化设计。

\subsection{分组密码算法}
分组密码是对称密码的主要分支，其基本工作原理是将需要加密的明文数据分割成固定长度的数据块
（称为分组），然后对每个块应用相同的变换函数进行加密处理。
分组密码的安全性通常建立在香农提出的混淆与扩散原则之上，
通过多轮迭代的非线性变换实现对密文的高度随机化。分组密码的主要特点在于其结构化的数据处理方式，
首先，这类算法严格以固定大小的块为单位进行加密，常见的分组大小包括64位和128位，
这种规则的结构有助于设计整体安全性分析和实现优化。其次，在相同密钥控制下，
相同的明文块必然产生相同的密文块，这种确定性特征决定了分组密码本身缺乏状态记忆，
需要额外的机制防止相同模式的泄露。为解决这一问题，分组密码通常需要配合多种工作模式使用，
如最简单的电子密码本模式（ECB）、密码块链接模式（CBC）、计数器模式（CTR）
以及认证加密模式（如GCM、CCM）等，这些模式通过不同的链接和反馈机制，实现对长数据的安全处理，
同时增强了算法的随机性和安全性。

现代密码学史上涌现了多种重要的分组密码算法，
它们在设计理念和安全强度上代表了不同时期的技术发展水平。数据加密标准（DES）
是最早被广泛采用的现代分组密码，由IBM设计并于1977年成为美国联邦标准，
采用56位密钥和64位分组大小。DES的核心是Feistel网络结构，通过16轮的置换和替代操作实现加密。
尽管DES在设计上具有开创性，但由于其密钥长度限制，现已不再被认为是安全的，
现代计算设备可通过暴力搜索在数小时内破解DES加密。为延长DES的使用寿命，
三重DES（3DES）通过级联三个DES操作（加密-解密-加密）实现了更高的安全性，
有效密钥长度可达112位或168位，但其运算速度明显低于单重DES，且结构复杂度增加了实现难度。

高级加密标准（AES，原名Rijndael）作为DES的官方后继者，由NIST于2001年标准化，
已成为当今最广泛使用的分组密码。AES采用了128位分组大小，支持128/192/256位密钥长度，
基于代换-置换网络（SPN）结构而非Feistel网络。AES的每轮操作包括字节替代（SubBytes）、
行移位（ShiftRows）、列混合（MixColumns）和轮密钥加（AddRoundKey）四个步骤，
密钥长度决定了迭代轮数（10/12/14轮）。AES凭借其卓越的安全性、性能和实现灵活性，
在全球密码应用中占据主导地位，并已获得包括硬件指令集（如Intel的AES-NI）在内的广泛优化支持。
SM4作为中国商用分组密码标准，具有128位分组和密钥长度，采用32轮非线性迭代结构，
在设计上兼顾了安全性和实现效率，已在中国金融、电子政务等领域广泛应用。

\subsection{流密码算法}
流密码算法代表了对称密码的另一种重要范式，其核心理念是生成一个与明文等长的伪随机密钥流
（keystream），通过与明文进行简单的逐位或逐字节组合操作（通常是按位异或）来实现加密。
从理论上讲，流密码可以视为一种实现维纳密码（one-time pad）的近似方法，
通过密码学安全的伪随机数生成器代替理想但不实用的真随机序列。
流密码的主要技术特点首先体现在其处理单位的灵活性上，这类算法能够逐位或逐字节处理数据，
无需如分组密码那样等待积累完整的数据块，极大地降低了加密延迟。
其次，流密码的加密和解密操作通常完全相同，都是将密钥流与数据进行异或操作，
这种对称性简化了算法实现。由于无需复杂的分组处理和大量的非线性变换，
流密码特别适合实时性要求高或硬件资源受限的应用场景，如移动通信、物联网设备和高速网络加密。

在流密码发展历程中，多种算法因其独特的设计和应用价值获得了广泛关注。
RC4作为最早被广泛应用的软件流密码之一，由Ron Rivest于1987年设计，
曾在SSL/TLS、WEP（无线加密协议）等多个安全协议中扮演重要角色。
RC4的核心是一个基于256字节状态表的密钥调度算法和伪随机生成算法，
其设计极其简洁，使其在软件实现上效率极高。然而，随着密码分析技术的进步，
RC4被发现存在多种统计偏差和相关性弱点，目前已不再被认为是安全的，
多数现代安全协议已禁用RC4。ChaCha20作为Salsa20家族的改进版本，
由Daniel J. Bernstein设计，是现代高性能流密码的代表。
ChaCha20采用了ARX（加法-循环移位-异或）设计原则，结合了简单指令和复杂状态混合，
在现代处理器上表现出色，同时保持了较高的抗差分密码分析能力。
ChaCha20已被纳入TLS 1.3标准中，成为Web安全的重要组成部分，尤其在移动和嵌入式环境中日益流行。
ZUC（祖冲之算法）作为中国商用流密码标准，专为4G/5G移动通信安全设计
，结合了线性反馈移位寄存器（LFSR）和非线性函数F，平衡了硬件实现效率与安全强度，
已在全球移动通信网络中得到广泛应用。

总体而言，流密码算法因其固有的高效性特征，在特定应用场景中具有显著优势。
与分组密码相比，流密码通常能够实现更高的加密速度，
这主要归功于其简化的运算过程和流水线友好的结构设计。在实际应用中，
流密码每秒可处理的数据量通常是同等安全级别分组密码的数倍甚至数十倍。
同时，流密码通常具有更低的实现复杂度，尤其适合资源受限环境，如设计高效的硬件实现时，
流密码往往需要更少的硅面积和更低的功耗。这些特性使流密码成为无线通信、卫星链路、
视频流加密等对吞吐量要求高的应用场景的首选，同时也是智能卡、RFID标签、
传感器网络等资源严重受限的嵌入式系统的理想选择。然而，
流密码在使用时也需特别注意初始化向量（IV）的管理和密钥重用问题，
不当的实现可能导致严重的安全漏洞，如WEP协议中的RC4应用就因IV重用问题导致了完全破解。

\section{国密算法}

国密算法是我国自主研发的一系列密码算法标准，主要包括SM2、SM3和SM4等。

\subsection{SM2公钥密码算法}

SM2算法是我国基于椭圆曲线密码体制自主研发的公钥密码算法。
相比于传统RSA签名算法，SM2的主要优势在于：
\begin{itemize}
	\item 安全性基础：SM2基于椭圆曲线上的离散对数问题(ECDLP)，而RSA基于整数分解问题(IFP)
	\item 密钥长度：SM2可以用更短的密钥实现与RSA相同的安全强度\upcite{nist800-57r5}
	\item 计算效率：在同等安全级别下，SM2的椭圆曲线运算比RSA的大整数模幂运算更高效\upcite{hankerson2006guide}
\end{itemize}

% 或者也可以将两个引用合并成一个：
这些优势已在多项研究中得到证实\upcite{nist800-57r5,hankerson2006guide}。

\subsection{SM3密码杂凑算法}

SM3密码杂凑算法是我国自主研发的密码学标准，作为密码体系的重要组成部分，
其核心功能是将任意长度的消息$M$映射为固定长度为256比特的字符串$H(M)$，
这一字符串被称为消息$M$的摘要或杂凑值。SM3算法源于对SHA-256算法压缩函数的深入研究和创新改进，
通过引入新的设计理念，在保持高效性的同时提升了安全强度。与国际主流的SHA-256算法相比，
SM3在抗碰撞性和抗差分分析能力方面具有一定优势，这使得SM3成为我国商用密码应用的首选哈希算法。
根据国家密码管理局的规定，SM2公钥密码算法中默认采用SM3作为标准哈希函数。

SM3算法的应用范围广泛，主要用于数字签名中的消息摘要生成、消息认证码的构造、
伪随机数生成器的设计以及完整性校验等多种密码应用场景。此外，在电子政务、金融交易、
云计算安全等领域，SM3也发挥着不可替代的作用。该算法通过精心设计的填充机制和迭代压缩结构，
确保了即使输入消息发生微小变化，输出的杂凑值也会呈现出显著差异，
体现了优秀哈希函数应具备的雪崩效应特性。

\subsubsection{填充过程}

SM3算法的填充过程是确保输入消息长度标准化的关键步骤。对于任意长度为$l$比特的原始消息$M$，
首先在其末尾添加一个"1"比特，这一步骤标记了原始消息的结束位置，为后续处理奠定基础。
接着，算法会在"1"比特之后添加$k$个"0"比特，
其中$k$的值需满足等式$(l + 1 + k) \bmod 512 \equiv 448$，且为满足该等式的最小非负整数。
这种设计确保填充后的消息长度在模512的意义下恰好比448多1比特，
为存储消息长度信息预留了64比特空间。

填充的最后一步是添加一个64位的比特串，该比特串是原始消息长度$l$的二进制表示。
将消息长度作为填充的一部分，可以有效防止长度扩展攻击，增强算法的安全性。
经过完整的填充过程后，消息$M$的总比特长度成为512的整数倍，这样设计的目的是便于后续的分组处理，
使每个分组大小统一为512比特，符合压缩函数的输入要求。填充机制的设计兼顾了安全性与实现效率，
是SM3算法整体结构的重要组成部分。

\subsubsection{迭代压缩过程}

SM3算法的核心在于其迭代压缩过程，该过程可分为消息分块与扩展、压缩与输出两个主要阶段。
在消息分块与扩展阶段，首先将经过填充处理的消息$M$按每512比特划分为$n$个分组，
表示为$M = M^{(1)} \parallel M^{(2)} \parallel \ldots \parallel M^{(n)}$，
其中$\parallel$表示消息连接操作。对于每个512比特的分组$M^{(i)}$，
SM3采用精心设计的消息扩展算法将其扩展为132个32位消息字$W_j$（其中$j=0,1,\ldots,131$）。
这些扩展后的消息字分为两部分：$W_0$至$W_{67}$用于主要的压缩计算，
而$W'_0$至$W'_{63}$（即$W_{68}$至$W_{131}$）作为辅助变量参与运算，共同构成压缩函数$CF$的输入。

在压缩与输出阶段，SM3算法对分组后的消息进行$n$次迭代压缩操作。迭代过程始于初始值$V_0$，
该值为SM3算法预定义的常量。对于每个分组$M^{(i)}$，执行压缩函数$V_i = CF(V_{i-1}, M^{(i)})$，
其中$i = 1,2,\ldots,n$。压缩函数$CF$内部实现了复杂的非线性变换、逻辑运算和位移操作，
通过多轮迭代增强了算法的混淆性和扩散性。经过$n$次迭代后，
最终的$V_n$即为原始消息$M$的256比特杂凑值。
这种基于迭代结构的设计使SM3算法能够高效处理任意长度的输入消息，同时保证输出杂凑值的密码学强度，
为各类应用提供了可靠的数据完整性和认证服务。

\subsection{SM4分组密码算法}

SM4是一种对称密钥分组密码算法，是中国商用密码标准的核心组成部分。该算法由中国密码学家设计开发，
于2012年正式由国家密码管理局颁布为国家标准（GB/T 32907-2016），并逐渐获得国际认可。
SM4算法是SMS4算法的标准化版本，最初设计用于无线局域网产品中提供数据保密性服务，
后来广泛应用于国内金融、政务和商业领域的信息安全保障。

\subsubsection{基本参数}

SM4算法采用固定的分组大小和密钥长度，具有较高的安全性。其分组大小为128位（16字节），
这意味着每次加密操作处理128位的明文数据，生成相同长度的密文输出。
算法使用的密钥长度同样为128位，在当前计算能力下提供足够的密钥空间抵抗暴力破解攻击。
SM4采用32轮迭代结构进行加密，每轮使用由主密钥派生的不同轮密钥，确保充分的混淆和扩散效果。
这些参数设计使SM4算法在安全性与性能之间达到良好平衡，既能抵抗已知的密码分析攻击，
又能保证在各种硬件平台上的高效实现。

\subsubsection{算法结构}

SM4算法采用"置换-置换"(SP, Substitution-Permutation)网络结构，
这是一种区别于传统"置换-替代"(SPN, Substitution-Permutation Network)结构的设计。
在传统SPN结构中，通常先进行非线性替代（S盒），然后进行线性变换；
而SM4的SP结构则采用了两次不同类型的置换操作组合，使其具有独特的密码学特性。
SM4算法包含一个重要的非线性变换函数（S盒），该S盒将4字节（32位）输入转换为4字节输出，
是算法安全性的关键组成部分。S盒设计具有高度非线性，以抵抗差分和线性密码分析攻击。

除非线性变换外，SM4还包含线性变换操作，通过位移和异或等运算实现比特位的扩散，增强加密强度。
这种线性变换确保单一比特的变化能迅速扩散到整个数据块中，提高算法抵抗统计分析的能力。
SM4的轮函数是其核心组成部分，每轮使用$F$函数处理数据块和轮密钥。
$F$函数结合了非线性S盒变换和线性变换，通过异或运算将轮密钥引入计算过程，
实现了良好的混淆和扩散效果。轮函数的迭代应用确保了即使明文中的微小变化也会导致密文的显著不同，
体现了雪崩效应的密码学特性。

\subsubsection{密钥处理}

SM4算法的密钥处理包括两个主要方面：密钥扩展和轮密钥加。
密钥扩展是一个从128位主密钥生成32个轮密钥的过程，每个轮密钥用于一个加密轮。
这一过程采用递归方式进行，通过固定的系统参数（FK）和常量（CK）与主密钥进行复杂运算，
生成互不相同的轮密钥序列。密钥扩展算法确保生成的轮密钥具有足够的随机性和复杂性，
防止通过分析轮密钥间关系推导出主密钥。

轮密钥加是将轮密钥与数据块结合的过程，SM4通过异或（XOR）运算实现这一操作。
在每轮加密中，当前轮的密钥与经过非线性变换的数据进行异或，产生新的中间值用于下一轮计算。
这种设计使得密钥信息充分融入加密过程，确保即使攻击者获得部分轮中的数据，也难以推导出密钥信息。
SM4的密钥处理机制简洁而高效，既保证了算法的安全性，又便于硬件实现和优化。

\subsubsection{工作模式}

SM4作为分组密码算法，支持多种标准工作模式，以适应不同应用场景的安全需求。
ECB（Electronic CodeBook，电子密码本模式）是最简单的工作模式，直接对每个数据块独立加密，
适用于加密随机数据或短消息，但不推荐用于长文本或有规律数据的加密。
CBC（Cipher Block Chaining，密码分组链接模式）通过引入前一密文块与当前明文块异或的机制，
实现数据块间的关联，增强安全性，适合加密需要完整性保护的大量数据。

CTR（Counter，计数器模式）将分组密码转变为流密码使用，通过加密递增的计数器值生成密钥流，
与明文异或得到密文，具有并行处理能力和随机访问特性，适合高吞吐量应用场景。除上述主要模式外，
SM4还支持CFB（Cipher Feedback，密码反馈模式）、OFB（Output Feedback，输出反馈模式）和
GCM（Galois/Counter Mode，伽罗瓦/计数器模式）等其他标准分组密码工作模式。
这些多样化的工作模式使SM4算法能够灵活应对不同应用场景的安全需求，
从而在国家密码体系中发挥重要作用。

\subsection{混合加密机制}
\subsubsection{基本原理}
公钥密码算法作为非对称密码体系的核心组成部分，其安全性建立在数学难题之上，
如离散对数问题、整数分解问题或格问题等。这类算法在提供高强度安全保障的同时，
由于涉及复杂的代数运算和高阶数学计算，导致其计算效率显著低于对称密码算法。
在密码学的实际应用场景中，尤其是需要加密大量数据的环境下，
若直接采用公钥密码体制进行全程加密，将会引发严重的性能瓶颈问题，
导致系统处理能力大幅下降，无法满足现代信息系统对高效率处理的需求。
例如，RSA 算法的加解密操作涉及大整数幂模运算，
其计算复杂度远高于 AES 等对称加密算法中的简单位操作和替代变换。
实验数据表明，在相同硬件环境下，公钥密码算法的加解密速度通常比对称密码算法慢数百至数千倍，
这种效率差异在资源受限的环境（如物联网设备、移动终端等）中尤为明显。

为了克服这一根本性局限并充分发挥两类密码算法的各自优势，
现代密码学在实际应用中采用了一种优化的混合架构，
即 KEM/DEM (Key-Encapsulation Mechanism/Data-Encapsulation Mechanism) 混合加密机制。
该机制将密码系统划分为两个功能互补的组件：
密钥封装机制（KEM）负责安全地传输或建立加密所需的对称密钥，
而数据封装机制（DEM）则利用该对称密钥高效地加密实际数据。
这种设计理念源于密码学中的"分而治之"策略，通过功能分离和专门化处理，
实现了安全性与效率的最优平衡。在 KEM 组件中，虽然公钥算法的计算开销较大，
但由于其仅处理长度有限的密钥材料（通常为 128 至 256 比特），
因此性能影响得到有效控制；而在 DEM 组件中，
对称算法的高效特性使得大量数据的加密处理能够快速完成，从而确保了整体系统的性能表现。

\subsubsection{工作机制}
KEM/DEM 混合加密方案在实际应用中遵循一套精心设计的工作流程，
其详细步骤可分为加密和解密两个关键阶段。在数据加密阶段，
系统首先通过密码学安全的随机数生成器产生一个高质量的随机会话密钥，
该密钥通常具有足够的熵值以抵抗暴力攻击，长度根据后续使用的对称加密算法而定，
如 AES-256 则需要 256 比特的密钥长度。这一随机生成的会话密钥仅用于当前通信会话，
确保了密钥材料的新鲜性和唯一性，有效防止重放攻击和密钥重用带来的安全风险。

随后，系统将 DEM 组件与刚生成的会话密钥结合，
选择适当的对称加密算法（如 AES、SM4 或 ChaCha20 等）对原始明文数据进行加密处理。
在此过程中，可以配合适当的工作模式（如 GCM、CCM 或 EAX 等认证加密模式）
同时保障数据的机密性和完整性。对称加密操作完成后，产生的密文将等待传输，
而用于生成该密文的会话密钥则需要安全传递给接收方。此时，KEM 组件发挥作用，
系统使用接收方的公钥通过非对称加密算法（如 RSA、椭圆曲线或后量子算法如 Kyber）
对会话密钥进行加密封装，形成密钥密文。最终，数据密文和密钥密文共同组成完整的加密消息，
通过不安全信道传输给接收方。

在数据解密阶段，接收方首先使用自己的私钥对接收到的密钥密文进行解密操作，
从而恢复出发送方使用的会话密钥。这一步骤体现了 KEM 的核心价值：安全地实现密钥交换。
获取会话密钥后，接收方再使用该密钥和相同的对称算法及参数设置，
对数据密文进行解密操作，最终恢复出原始明文信息。整个解密过程严格遵循加密的逆向顺序，
确保密码系统的正确性和一致性。

\subsubsection{优势特点}
KEM/DEM 混合加密机制通过巧妙结合公钥密码与对称密码的特性，展现出多方面的技术优势，
使其成为现代安全通信的基石。在效率方面，该机制实现了计算资源的最优分配，
将计算密集型的公钥密码操作限制在短小的会话密钥处理上，
而将高速高效的对称密码算法用于大量数据的加密，从而显著提升了整体系统的处理能力。
实际性能测试表明，与纯公钥加密相比，混合加密方案能够提供数百倍甚至千倍的速度提升，
特别是在处理大型文件或高带宽通信时，这种优势尤为明显。例如，在加密 1GB 数据时，
纯 RSA 加密可能需要数小时完成，而采用 AES 对称加密仅需几秒钟，
混合方案的总耗时仅比纯对称加密略长，但安全性得到显著提升。

在安全性保障方面，混合加密机制在理论上继承了两种密码体制的安全优势，
形成了防护层次更深的安全架构。一方面，公钥密码算法确保了会话密钥交换过程的安全性，
有效解决了密钥分发这一传统密码学的核心难题；另一方面，
对称密码算法通过高强度的数据变换保障了明文信息的机密性。
更为重要的是，由于每次通信会话均使用新生成的随机会话密钥，
即使某次通信的密钥被攻击者获取，也不会危及其他通信场景的安全，
实现了会话隔离。若系统配置得当，还可支持前向安全性，
确保当前密钥泄露不会危及先前通信的安全性。

在通信优化层面，混合加密机制通过精细化的加密处理策略，
有效降低了加密数据的冗余度和传输量。由于公钥加密算法通常会导致密文膨胀
（如 RSA 加密会使输出长度等于密钥模数长度），若直接用于大量数据将造成显著的传输开销；
而混合方案中，这种膨胀仅限于会话密钥的加密结果，数据本身在对称加密下几乎不产生额外膨胀。
这一特性在带宽受限的网络环境中尤为重要，能够有效降低网络资源占用，
提高通信效率，减少传输延迟，从而增强用户体验和系统响应能力。

\subsubsection{应用场景}
混合加密机制凭借其卓越的安全性和效率特性，已在现代信息安全体系中获得广泛应用。
在安全通信协议领域，如 TLS/SSL 协议族中，混合加密是核心安全机制。
当用户浏览器与网站建立安全连接时，首先通过非对称密码完成身份认证和会话密钥协商，
随后的数据传输则采用协商好的会话密钥和对称算法进行加密。
这一机制使得 HTTPS 能够在保障安全的同时，提供接近 HTTP 的性能体验，
支撑了全球范围内的安全电子商务和敏感信息交换。

在数据加密传输场景中，混合加密为点对点通信提供了理想的安全框架。
现代即时通讯应用如 Signal、WhatsApp 等均采用类似机制实现端到端加密，
确保消息内容仅对通信双方可见。在这类应用中，长期身份密钥用于验证通信方身份并安全地协商临时会话密钥，而实际消息内容则使用高效的对称加密进行保护。这种设计不仅保障了通信安全，还支持高频率的消息收发和多媒体内容传输。

在文件加密存储方面，混合加密同样发挥着不可替代的作用。
当用户使用 PGP 或 GPG 等工具加密敏感文件时，系统会自动生成随机会话密钥，
用对称算法加密文件内容，再用接收方的公钥加密会话密钥。
这种机制使得大型文件的加密处理变得高效可行，同时保持了公钥体系的安全特性，
如支持多接收方和身份验证等。类似地，在云存储平台的客户端加密方案中，
混合加密被广泛采用，确保数据在离开用户设备前已被加密，仅持有正确密钥的授权用户能够访问原始内容。

在密钥交换协议领域，混合加密思想同样得到了应用和发展。例如，
在基于 Diffie-Hellman 的密钥交换协议中，通信双方通过公开交换信息导出共享的会话密钥，
随后使用该密钥和对称算法进行数据加密。这一过程从本质上看，
仍然遵循着 KEM/DEM 的基本思路：利用非对称机制安全地建立共享密钥，
再利用对称机制高效地保护数据。现代密钥管理基础设施也普遍采用类似架构，
以平衡安全需求与性能要求。

\subsubsection{具体实现}
在实际系统部署中，KEM/DEM 混合加密机制可通过多种算法组合实现，
根据具体应用场景的安全需求和性能约束进行灵活选择。
密钥封装机制（KEM）负责安全地传递会话密钥，其实现通常基于成熟的公钥密码算法。
在传统密码学范畴内，基于椭圆曲线的算法如 SM2、ECIES 和 ECDH
等因其较短的密钥长度和较高的运算效率而受到广泛青睐。
这类算法基于椭圆曲线离散对数问题的难解性，在提供同等安全强度的情况下，
相比基于整数分解问题的算法拥有更小的计算和存储开销。
例如，160 比特的椭圆曲线密钥安全性约等同于 1024 比特的 RSA 密钥，
这一特性使其特别适合资源受限环境。

基于整数分解的算法如 RSA-OAEP 和 RSA-KEM 等，虽然计算开销相对较大，
但因其广泛部署的基础设施和成熟的安全分析，仍在多种系统中扮演重要角色。
RSA-OAEP（最优非对称加密填充）在传统 RSA 加密基础上增加了随机填充机制，
有效抵抗了多种已知攻击。随着量子计算技术的发展，后量子密码学日益受到关注，
基于格的算法如 CRYSTALS-Kyber 和 NTRU 等被设计为能够抵抗量子计算机攻击的替代方案。
美国国家标准与技术研究院（NIST）正在推进后量子密码标准化进程，
以应对未来可能出现的量子威胁。此外，基于配对的算法如基于身份的加密（IBE-KEM）
在特定应用场景中提供了密钥管理的简化方案，使用户身份信息直接作为公钥，
省去了复杂的证书管理过程。

数据封装机制（DEM）侧重于高效处理大量数据，通常选择性能卓越的对称密码算法。
分组密码及其工作模式是当前最主流的选择，如 SM4-GCM、AES-GCM 和 ChaCha20-Poly1305 等。
这些算法组合不仅提供了高强度的保密性，还通过 AEAD（认证加密与关联数据）
模式集成了数据完整性和真实性保护。GCM（伽罗瓦计数器模式）作为一种高效的认证加密模式，
支持数据加密的同时生成认证标签，可有效防止密文篡改攻击，已成为现代安全协议的标准配置。
在高性能计算环境下，系统可能优先选择经过硬件加速的算法，如采用 AES-NI 指令集的 AES 实现；
而在内存和计算资源有限的嵌入式系统中，轻量级算法如 PRESENT、SIMON 或 SPECK 等可能更为适合。
对于对延迟特别敏感的应用，如高频交易或实时通信，
流密码或优化的 AEGIS 等算法族可提供极低的处理延迟和高吞吐量，
满足严格的时间约束要求。

\section{本章小结}

本章介绍了分布式环境下基于国密的代理重加密系统所需的核心理论基础，
包括代理重加密技术、门限密码学和国密算法。
这些理论为系统的设计和实现提供了必要的技术支撑，
确保了系统的安全性、可靠性和高效性。
