密码学-古典密码学习笔记

古典密码学:替代与置换技术详解

本文作为一篇学习笔记,在图片和文字上大量参考了各种密码学书籍,并添加了自己的注解和理解;古典密码学的学习需要一些数论的知识,比如模运算、扩展的欧几里得算法;在入门学习过程中没必要系统地学习数论,只需学习必要知识即可

古典密码的加密思想和方法在现代密码学中仍然在使用,古典密码的加密技术主要分为

  • 替代技术
  • 置换技术

参考资料

《网络安全理论与应用》余研 付安民 …编著
《图解密码技术》第三版 结成浩著

替代技术

替代技术是将明文中的每个元素映射为另一个元素的技术。若把明文视为二进制序列,则替代技术就是用密文序列来代替明文序列。代替后,字母位置不变,其本身的值发生改变。而后面介绍的置换技术是字母的值不变,字母在明文中的位置发生改变。

注解:
DES的S盒就是一张替代表
元素指的是:字母、比特、比特组合或字母组合

根据替代是对每个字母逐个进行还是对多个字母同时进行,古典密码又可以分为

  • 单字母表替代密码
  • 多字母表替代密码

基于替代技术的古典密码有凯撒密码、移位密码、仿射密码、Vigenere密码、Hill密码等。

单字母表替代密码

凯撒密码

凯撒密码是已知最早的替代密码。凯撒密码将字母表视为一个循环的表,将明文中的每个字母使用字母表中其后的第三个字母来代替;
凯撒密码中明文字母和密文字母的对应关系
在这里插入图片描述

例如
若明文为i will go fishing tomorrow
则密文为L ZLOO JLVKLQJ WRPRUURZ

若令每个字母对应一个数字(a=0, b=1, …, z=25),m表示明文字母,c表示密文字母,且0≤m,c≤25,则凯撒算法的加密和解密可以形式化表示为
c = E 3 ( m ) = ( m + 3 ) m o d 26 c=E_3 (m)=(m+3) mod 26 c=E3(m)=(m+3)mod26
m = D 3 ( c ) = ( c − 3 ) m o d 26 m=D_3 (c)=(c-3) mod 26 m=D3(c)=(c3)mod26
可见,3是加解密所使用的密钥。
在凯撒密码中,密钥的值固定为3,因此很容易对凯撒密码进行攻击。

移位密码

为了增大凯撒密码的密钥空间,将凯撒密码的加解密算法进行一般化,定义密文字母和明文字母的偏移可以是任意值,即定义移位密码的加密和解密形式为
c = E k ( m ) = ( m + k ) m o d 26 c=E_k (m)=(m+k) mod 26 c=Ek(m)=(m+k)mod26
m = D k ( c ) = ( c − k ) m o d 26 m=D_k (c)=(c-k) mod 26 m=Dk(c)=(ck)mod26
其中,0≤m,c≤25,k为算法的密钥,且0≤k≤25。

尽管移位算法将密钥空间扩展至字母表的长度,但其密钥空间仍然太小,只有26种可能的取值,仍然可以轻易地穷举整个密钥空间来破译密文,平均只需尝试26/2=13次即可计算得到明文。

仿射密码

移位密码的密钥空间太小,仿射密码就是移位密码的更一般形式;在仿射密码中,加密函数定义为
c = E ( a , b ) ( m ) = ( a m + b ) m o d 26 c=E_{(a,b)} (m)=(am+b) mod 26 c=E(a,b)(m)=(am+b)mod26 (1)
其中 a , b ∈ Z 26 a,b∈Z_{26} a,bZ26。形如上式的函数被称为仿射函数,因此该密码体制也被称为仿射密码
特别地,当a = 1时,移位密码为仿射密码的特殊形式。

为了能对密文进行解密,必须保证所使用的仿射函数是一个单射函数,即对于任意的 c ∈ Z 26 c∈Z_{26} cZ26,同余方程 a m ≡ ( c − b ) m o d 26 am≡(c-b) mod 26 am(cb)mod26 有惟一解m

可以证明,当 g c d ( a , 26 ) = 1 gcd(a,26)=1 gcd(a,26)=1时, a a a Z 26 Z_{26} Z26上存在乘法逆元 a − 1 a^{-1} a1,使得同余方程存在惟一解: m = a − 1 ( c − b ) m o d 26 m=a^{-1} (c-b) mod 26 m=a1(cb)mod26 (2)

(2)式由同余的除法得到
gcd是greatest common digital, 其中gcd(c,m)表示c和m的最大公约数

因此,仿射密码的解密函数可以定义为
m = D ( a , b ) ( c ) = a − 1 ( c − b ) m o d 26 m=D_{(a,b)} (c)=a^{-1} (c-b) mod 26 m=D(a,b)(c)=a1(cb)mod26
其中,a,b是密钥,且为满足 ( a , b ) ∈ Z 26 × Z 26 (a,b)∈Z_{26}×Z_{26} (a,b)Z26×Z26 g c d ( a , 26 ) = 1 gcd(a,26)=1 gcd(a,26)=1的整数。

案例
加密:
在这里插入图片描述
解密:

在这里插入图片描述

加密很容易计算,这里不在叙述;
解密使用扩展的欧几里得算法:步骤如下

  • 用扩展的欧几里得算法求的乘法逆元a-1
  • 乘法逆元算出来后,进行模运算即可
    求乘法逆元手算如下

因为 7 x = 1 m o d 26 7x = 1mod 26 7x=1mod26, x的取值即为7mod26下的乘法逆元
7 x + 26 y = g c d ( 7 , 26 ) = 1 7x + 26y = gcd(7,26)=1 7x+26y=gcd(7,26)=1 记为 (2)
用扩展的欧几里得算法求出x即可

运算过程如下:
第一步:进行辗转相除(写成等式形式)

26 = 3×7 + 5; ⇒ 5 = 26 - 3×7
7 = 1×5 + 2; ⇒ 2 = 7 -1×5 
5 = 2×2 + 1; 1 = 5 - 2×2

其中 26为被除数,3为商,7为除数,5为余数;将余数5用26和7表示出来,方便后面进行回带

回带过程
为了求出x,根据(2)式用7和26表示1即可算出x和y的值;可以通过保持商不变,替换掉除1以外的所有余数来实现;

1 = 26 - 3×7 - 2×[ 7 - 1×(26 - 3×7 ) ] 这里替换掉上面式子中的余数2和余数5;
1 = 3×26 - 11×7 可得到 x=-11 y=3
x = -11 mod 26 等价于 x = (-11 + 1×26) mod 26 等价于x = 15 mod 26

为了方便计算,这里取x=15即可
因此在计算时,7mod26下的乘法逆元为15;
解密函数为
m = D 7 , 3 ( c ) = 15 ( c − 3 ) m o d 26 m = D_{7,3} (c) = 15(c - 3) mod 26 m=D7,3(c)=15(c3)mod26

计算举例
当c=4时,m=15(4- 3)mod 26 = 15

针对单字母表替代密码的攻击

单字母表替代密码可以实现字母表中26个字母的任意替代,密钥空间大小为26!,即有大于 4 × 1 0 26 4×10^{26} 4×1026种可能的密钥,即使每微秒尝试一个密钥,也需要花费约 1 0 13 10^{13} 1013年才能穷举所有的密钥。因此,单字母表替代密码可以抵御强行攻击。

然而,如果密码攻击者知道明文的性质(例如,明文是自然语言文本),则攻击者可以利用该自然语言的某些统计特性实施攻击。

例如,在英语中,字母出现频率依次为e(12.75%),其次分别为t(9.25%)、r(8.5%)、i(7.75%)、n(7.75%)以及o(7.5%)等,字母的出现频率呈现出一定的统计特性。

攻击者可以根据密文中字母、双字母组合(如th)甚至三字母组合(如the)出现的相对频率进行猜测,只要密文足够长,攻击者即可由明文推导出密文

攻击者利用明文的统计特性针对单字母替代密码实施攻击的步骤如下:

  1. 攻击者确定密文中字母出现的相对频率;
  2. 将密文字母的出现频率与自然语言的标准频率分布进行比较;
  3. 还可以观察双字母组合和三字母组合等,以便对明文进行猜测。

频率分析的具体案例可以参考《图解密码技术》

局限性:由于单字母替代密码反映了原来字母表的频率特性,因此很容易被攻破;

多字母表替代密码

为了减少密文中明文结构的残余度,改善单字母密码的强度,出现了多字母密码技术。
在多字母替代密码中,处理明文消息时使用了不同的单字母替代。

多字母替代密码通常具有以下性质:

  • 使用一系列相关的单字母替代规则;
  • 由密钥决定对于一个给定的变换选择哪种特定的规则。

典型的多字母表替代密码包括Vigenère密码、Hill密码等。

Vigenere密码

字母表替代密码中最著名和最简单的密码是Vigenère密码,其发明者是16世纪的法国人Blaise de Vigenère
Vigenère密码的替代表由26个移位密码替代表组成,它在处理明文消息中的每个字母时使用了不同的单字母替代。

加密过程可以形式化描述为 c i = ( m i + k i m o d r ) m o d 26 c_i=(m_i+k_{i mod {r}}) mod 26 ci=(mi+kimodr)mod26

因此,Vigenère密码本质上是对每个明文字母使用了不同的单字母替代密码,而具体使用哪个单字母替代表则是由密钥字母确定。
在这里插入图片描述

解密过程如下:
m i = ( c i − k i m o d r ) m o d 26 m_i=(c_i-k_{i mod r}) mod 26 mi=(cikimodr)mod26
Vigenère密码的加解密过程中,重复使用相同的密钥字母串K,直至所有的消息均加解密完成。

案例
例:假设密钥字为“HAPPYTIME”,待加密的明文为“please send the data”,试计算相应的密文。
解:密钥对应的数字串为K=(7,0,15,15,24,19,8,12,4),将密钥串重复书写在由明文串转换的数字上方,进行模26下的加密运算,如下所示:
在这里插入图片描述

对应的密文串为WLTPQXAQRKTWTBTBM
解密时使用相同的密钥字进行逆运算即可。

总结
Vigenère密码中不同的密钥对应着不同的单字母替代,其密钥空间的大小为 2 6 r 26^r 26r,即使r值很小,使用穷尽搜索方法也需要很长的时间才能遍历密钥空间,因此,多字母表替代密码的安全性要比单字母表替代密码的安全性要好

Hill密码(希尔密码)

Hill密码是一种具有代表性的多字母表替代密码,由Lester S. Hill于1929年提出。
Hill密码使用了线性变换来实现加密解密功能。

加密过程
在Hill密码中,首先将明文M划分为由n个字母构成的分组 M = ( m 1 , m 2 , . . . , m n ) M=(m_1,m_2,...,m_n) M=(m1,m2,...,mn),密钥K取为n×n的矩阵,对于明文M和密钥K,计算密文C如下:

在这里插入图片描述

解密过程
在Hill密码中密文是通过明文进行线性变换得到。若要从密文中计算得到明文,需要进行解密变换,相应的明文应为 M = C K − 1 M=CK^{-1} M=CK1。即要求矩阵 K K K在模 q q q的情形下存在可逆矩阵 K − 1 K^{-1} K1
由线性代数可知,矩阵K在模q的情形下存在可逆矩阵K-1的充分必要条件是 g c d ( ∣ K ∣ , q ) = 1 gcd(|K|, q)=1 gcd(K,q)=1,且 K − 1 = ∣ K ∣ − 1 K ∗ K-1=|K|-1K^{*} K1=K1K
因此,Hill密码的解密过程为
M = C K − 1 m o d q M=CK^{-1} mod q M=CK1modq

置换技术

对于基于替代技术的密码而言,其明文字母被不同的密文字母所代替。而置换密码则不同,置换技术是在不丢失信息的前提下对明文中的元素进行位置上的重新排列,以打乱明文字母的位置和顺序。

在对称密码中,经常使用各种置换表进行置换选择。

定义在有限集X上的一个置换是一个双射函数 f : X → X f:X→X f:XX。即对于任意的 y ∈ X y∈X yX,存在唯一的 x ∈ X x∈X xX使得 f ( x ) = y f(x)=y f(x)=y,从而可以定义置换f的逆置换: f − 1 : X → X f^{-1}:X→X f1:XX
f − 1 ( y ) = x f^{-1} (y)=x f1(y)=x当且仅当 f ( x ) = y f(x)=y f(x)=y
其中, f − 1 f^{-1} f1也是X上的一个置换。

置换密码的定义

假设M为明文,C为密文,令n是一正整数 , x i , y i ∈ Z 26 ,x_i,y_i∈Z_{26} xi,yiZ26,K是由所有定义在集合{1,2,…,n}上的置换组成,对于任意的置换(即密钥)f,加密过程为
C = E f ( x 1 , x 2 , ⋯ , x n ) = ( x f ( 1 ) , x f ( 2 ) , ⋯ , x f ( n ) ) C=E_f(x_1,x_2,⋯,x_n )=(x_{f(1)} ,x_{f(2)} ,⋯,x_{f(n)} ) C=Ef(x1,x2,,xn)=(xf(1),xf(2),,xf(n))
解密过程为
M = D f ( y 1 , y 2 , ⋯ , y n ) = ( x f − 1 ( 1 ) , x f − 1 ( 2 ) , ⋯ , x f − 1 ( n ) ) M=D_f(y_1,y_2,⋯,y_n )=(x_{f^{-1} (1) },x_{f^{-1} (2) },⋯,x_{f^{-1} (n) }) M=Df(y1,y2,,yn)=(xf1(1),xf1(2),,xf1(n))
其中, f − 1 f^{-1} f1是置换 f f f的逆置换。

案例

在这里插入图片描述

解:首先将明文分组,每9个一组:
securityi|sthedegre|eofresist|ancetohar|morattack
对每组的9个字母使用加密变换f,可得密文:
CTRISUYEI|HGDESERTE|FIETERSOS|CHTRAEANO|RATKMACOT
解密过程使用逆置换 f − 1 f^{-1} f1,可恢复明文
securityi|sthedegre|eofresist|ancetohar|morattack

<think>好的,用户想撰写关于CTF密码学学习笔记总结,我需要根据他之前提供的引用资料以及之前的回答来组织内容。首先,用户之前的回答已经涵盖了Web方向的内容,现在转向密码学,所以需要确保结构清晰,覆盖关键知识点。 用户提供的引用中,引用[1]提到CTF密码学核心是现代密码学,但编码和古典密码可能在MISC中出现,所以应该在笔记中包含这两个部分,但重点放在现代密码学。引用[2]和[3]涉及古典密码和编码技术,比如ROT13、替换密码、摩尔斯电码等,这些可以作为基础部分。引用[4]详细说明了RSA的生成步骤,需要涵盖RSA、DH密钥交换、ECC等现代密码算法。 用户之前的问题中,助手给出了快速排序的总结和相关问题,因此这次回答也需要保持类似的结构:分章节、代码块、问题生成,并且正确使用引用标记。需要检查是否所有LaTeX公式都正确,比如RSA中的公式要用$$...$$,行内公式用$...$。 另外,用户可能希望学习笔记包含实战技巧和工具,比如使用Python库进行解码或分解大数,所以需要添加相关代码示例,比如用pycryptodome库实现RSA,或者用sagemath分解n。同时,CTF常见题型如RSA相关攻击、流密码分析、哈希碰撞等需要作为例题解析,帮助理解应用场景。 还要注意引用标记的正确使用,每个引用来源在回答中对应到用户提供的引用[1]到[4],确保每个知识点如果来自引用资料,就标注对应的引用编号。例如,RSA的生成步骤来自引用[4],古典密码的解题方法来自引用[2]和[3]。 最后,生成的相关问题需要与密码学相关,可能包括如何识别加密算法、RSA的常见攻击方式、古典密码的解题技巧等,确保问题能帮助用户进一步深入学习。</think>### CTF密码学学习笔记总结 --- #### 一、知识体系框架 1. **基础编码技术** - **ASCII/Base系列**:Base64(末尾补`=`)、Base32(补`=`且字母表限制)、Base16(直接映射)[^1] - **特殊编码**:摩尔斯电码(短长信号映射)、URL编码(`%xx`格式)、HTML实体编码(如`<`) ```python # 示例:Base64解码 import base64 cipher = "aXRvbHl0d250cGFjZg==" plain = base64.b64decode(cipher).decode('utf-8') ``` 2. **古典密码** - **替换类**:凯撒密码(ROT13为特例)、维吉尼亚密码(多表替换)[^2] - **置换类**:栅栏密码(如引用[^3]的分组提取)、列置换密码 $$ \text{明文:CRYPTO} \xrightarrow{\text{栅栏分组}} \begin{bmatrix}C & R \\ Y & P \\ T & O\end{bmatrix} \xrightarrow{\text{按列提取}} CYTRPO $$ 3. **现代密码学核心** - **对称加密**:AES(ECB/CBC模式)、DES(弱密钥问题) - **非对称加密**:RSA(依赖大数分解难题)、ECC(椭圆曲线离散对数问题) - **哈希函数**:MD5(碰撞攻击)、SHA-1(已不推荐) --- #### 二、核心算法与实现(以RSA为例)[^4] 1. **密钥生成** $$ \begin{aligned} &\text{随机素数 } p, q \rightarrow N = p \cdot q \\ &\varphi(N) = (p-1)(q-1) \\ &\text{选 } e \text{ 满足 } \gcd(e, \varphi(N))=1 \\ &\text{求 } d \equiv e^{-1} \mod \varphi(N) \\ &\text{公钥:}(e, N) \quad \text{私钥:}(d, N) \end{aligned} $$ 2. **加解密过程** $$ \text{加密:} c \equiv m^e \mod N \quad \text{解密:} m \equiv c^d \mod N $$ 3. **CTF常见攻击场景** - **小公钥指数攻击**(如$e=3$时直接开立方) - **共模攻击**(相同$N$不同$e$) ```python # 示例:使用pycryptodome库实现RSA解密 from Crypto.PublicKey import RSA key = RSA.construct((N, e, d)) plain = pow(ciphertext, d, N) ``` --- #### 三、解题技巧与工具 1. **特征识别** - **RSA参数**:大整数$N$、特殊$e$(如65537)、残缺的$p/q$ - **流密码**:重复密钥(如RC4)、已知明文攻击 2. **实用工具** - **分解大数**:`yafu`(快速分解$N$)、`factordb`(在线查询) - **编码转换**:CyberChef(集成多种编码) ```bash # 示例:使用sagemath分解N n = 123456789 factor(n) # 返回质因数分解结果 ``` 3. **典型题型解析** - **RSA模数分解**:当$N$较小时直接爆破,或利用Pollard's Rho算法 - **哈希长度扩展攻击**:针对未加盐的MD5/SHA1 $$ \text{攻击构造:} \text{Hash}(secret \| data) \rightarrow \text{扩展} \text{Hash}(secret \| data \| padding \| append) $$ --- #### 四、学习路径与资源 1. **靶场推荐** - **Crypto-Cat**:基础密码学挑战 - **picoCTF Crypto模块**:从古典密码到现代密码过渡 2. **知识拓展** - **数学基础**:模运算、欧几里得算法、中国剩余定理 - **进阶协议**:Diffie-Hellman密钥交换、数字签名(DSA) ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值