小白程序员入门网络安全:收藏版,从零开始学密码学
本文带领读者进入网络安全的世界,从密码学的发展历史、古典密码、分组密码、流密码、杂凑函数到公钥密码,全面介绍了密码学的基础知识和应用。文章涵盖了凯撒密码、维吉尼亚密码、DES、SM4、AES等经典算法,以及RSA、ECC等非对称加密技术。通过学习本文,读者可以了解密码学的基本原理,掌握常见密码算法的加密解密方法,为进一步深入学习网络安全打下坚实基础。
目录
第一章 概论
第二章 古典密码
第三章 分组密码
第四章 流密码
第五章 杂凑函数
第六章 公钥密码
第一章 概论
- 密码学发展历史:
经历了五个发展阶段。
(1)从远古到二战之前为第一阶段,以手工和简单器械密码为主;
(2)二战到1949年为第二阶段,以机械和机电密码为主;
(3)1949到1976为第三阶段,从机电密码发展到电子密码;
(4)第四阶段从1976年到1997 年,进入现代密码阶段,出现了公钥密码;
(5)1997年至今是第五阶段,密码进入网络时代。
中国古代的密码:藏头诗、滚桶密码、掩格密码、棋盘密码。
第二次世界大战的著名的密码:德国的Enigma密码机,日本的紫密机和美军的M-209密码机。
紫密机是Enigma的改进,M-209是瑞典人海格林设计的密码机的改进。
密码学分为密码编码学和密码分析学。
密码编码学分为非对称密码和对称密码。对称密码分为序列密码和分组密码。
密码分析学分为数学分析和物理分析。
具体关系如下图:
信息安全的需求:机密性、完整性、真实性、不可否认性、可用性。
密钥相关处理过程:密钥的产生、分配、存储、保护、销毁。
1949年,香农发表了论文《保密通信信息理论》。
祖冲之算法ZUC是基于流密码(又称作序列密码)的对称算法。
SM4是一种基于分组密码的对称算法。
SM3是一种密码杂凑的哈希算法。
SM2(公钥密码)和SM9(标识密码)是两种非对称算法,SM2和SM9在2017首次正式进入ISO/IEC国际标准发布阶段。
ZUC:4G移动通信标准。用于信息加密和完整性保护。
密码学相关知识体系
| 优点/缺点 | 对称密码 | 公钥密码 |
|---|---|---|
| 优点 | 1.算法运算速度较快 2.密钥相对较短 3.密文明文长度相同 | 1.密钥分发管理比较简单 2.支持数字签名(解决了不可否认问题) |
| 缺点 | 1.密钥分发需要安全的通道 2.密钥量大,密钥难于管理 3.难以解决不可否认问题 | 1.算法复杂,处理速度慢 |
第二章 古典密码
- 古典密码分为替代密码(分为单表代替密码和多表替换密码)和换位密码。
2.单表密码的概念:明文和密码一一代换的密码。
3.典型的单表密码有加法密码、乘法密码、仿射密码、随机代替密码、秘钥词组密码。
4.加法密码加解密:
乘法密码加密:Ci=PiKi(modm)。*
仿射密码加密:Ci=K1Pi+K2(modm)。*
- 凯撒密码(单表代替密码):
加密:Ci=Pi+3(mod 26) 解密:Pi=Ci-3(mod 26)
- 维吉尼亚密码(多表替换密码):
加密:Ci=Pi+Ki(mod 26) 解密:Pi=Ci-Ki(mod 26)
带余除法:a=bq+r。
整除性质:a=bx(b|a,则称b能整除a)。
最大公因子和辗转相除法(欧几里得算法):
实例如下:
- 同余:给定一个正整数m,若同余分别去除两个整数a,b所得的余数相同,则称a与b模m同余,记作a≡b(mod m),其充要条件为m|a-b。
同余公式:
| (1) 若a1 ≡b1 (modm),a2 ≡b2 (modm),则 ①a1 +a2 ≡b1 +b2 (modm),a1 –a2 ≡b1 –b2 (modm); ②a1a2 ≡b1b2 (modm); (2) 若a≡b(modm),n为正整数,则an≡bn(modm);进一步,有f(a) ≡f(b) (modm) ,其中f(x)为一个整系数多项式 (3) 设ad≡bd(modm),若(d,m) = 1,则a≡b(modm); (4) 设a≡b(modm),若d |
- 完全剩余系:
欧拉函数:Ф(m)表示Zm中与m互素的数的个数。
欧拉定理:
单表代替密码的统计分析→穷举搜索和线性分析破解。
多表代替密码的统计分析→流动密码体制(来源:密钥、明文、密文)
多表密码核心:密钥词组+流动密钥
代换密码分类:
单表代换实例:移位密码、仿射密码、凯撒密码
多表代换实例:playfair密码(密钥字构成密钥方阵,2个字母为一组,分组加密)、Vigenere密码(维吉尼亚密码,26*26)、Vernam密码( Vernam加密法也称一次一密)、博福特密码(字母顺序和维吉尼亚密码相反)
- 单表代替密码代表:凯撒密码加密和解密的方式如下图所示:
20.多表代替密码的代表:维吉尼亚密码的加密和解密方式如下图所示:
密码攻击分类:唯密文攻击、已知明文攻击、选择明文攻击、选择明文攻击。
攻击难度比较:选择密文攻击>选择明文攻击>已知明文攻击>唯密文攻击。
唯密文攻击对于密码分析者来说实现最难。
理论安全:无论拥有多少资源都不能破译/计算不可行。
实际安全:破译代价/时间超过信息自身价值/有效期。
密码分析分类:
(1)唯密文攻击(Ciphertext only)
破译者已知:加密算法、待破译的密文
(2)已知明文攻击(Known plaintext)
破译者已知:加密算法、一定数量的明文和对应的密文
(3)选择明文攻击(Chosen plaintext)
破译者已知:加密算法、选定的明文和对应的密文
(4)选择密文攻击(Chosen ciphertext)
破译者已知:加密算法、选定的密文和对应的明文
(5)选择文本攻击(Chosen text)
破译者已知:加密算法、选定的明文和对应的密文、选定的密文和对应的明文
- 密码学的五元组及其各自的含义:
明文——原始信息
密文——加密后的信息
密钥——加密解密时使用的参数
加密算法——将明文转化为密文的算法
解密算法——加密算法的逆
- 几种密码算法的对比:
对称密码算法:分为分组密码算法(Block cipher) 和 流密码算法(Stream cipher)。
分组密码算法又称块加密算法
加密步骤一:将明文拆分为 N 个固定长度的明文块
加密步骤二:用相同的秘钥和算法对每个明文块加密得到 N 个等长的密文块
加密步骤三:然后将 N 个密文块按照顺序组合起来得到密文
流密码算法又称序列密码算法
加密:每次只加密一位或一字节明文
解密:每次只解密一位或一字节密文
常见的分组密码算法包括 AES、SM1(国密)、SM4(国密)、DES、3DES、IDEA、RC2 等;常见的流密码算法包括 RC4 等。
AES:目前安全强度较高、应用范围较广的对称加密算法,数据加密标准,速度较快,适用于加密大量数据的场合
SM1:国密,采用硬件实现
SM4:国密,可使用软件实现
DES:数据加密标准,速度较快,适用于加密大量数据的场合
3DES:已被淘汰或逐步淘汰的常用对称加密算法
非对称密码算法(Asymmetric-key Algorithm)
加密秘钥可以公开,又称为 公钥
解密秘钥必须保密,又称为 私钥
常见非对称算法包括
RSA:是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的;
DSA:数字签名算法,是一种标准的 DSS(数字签名标准)
SM2(国密)、DH、ECDSA、ECC 等。
第三章 分组密码
Kerckhoff原则:系统的保密性不依赖于对加密体制或算法的保密,而依赖于密钥。
香农提出的混淆原则和扩散原则
混淆:所设计的密码应使得密钥和明文以及密文之间的依赖关系相当复杂,以至于这种依赖性对密码分析者来说是无法利用的。(代换:Substitution)
扩散:所设计的密码应使得密钥的每一位数字影响密文的许多位数字,以防止对密钥进行逐段破译,而且明文的每一位数字也应影响密文的许多位数字以便隐蔽明文数字统计特性。(置换:Permutation)
- 子密钥扩展:每一轮都给不同的子密钥,但子密钥都是由种子密钥产生的。
- DES算法
DES密钥长度=密文长度=分组长度=64bits;(有效密钥是56比特,其他用作奇偶校验)
DES加密过程:加密包括16轮编码,每轮编码中产生48位的临时密钥,并用这个密钥进行这一轮加密。
- 线性分析攻击方式:针对DES算法的一种已知明文攻击。
差分分析攻击:一种选择明文攻击方式。
- SM4算法
分组128bits,密钥128bits,迭代32轮
加解密相同,差别是密钥顺序相反
解/加:采用32轮非线性迭代←密钥扩展算法
组成:初始变量算法(32轮非线性F函数+一轮反序列变换)和密钥扩展算法
F函数:
T(A)=*τ(*A)=L(B)
τ(A)是四个S盒,查表得到输出结果;
L(B)为循环左移0,2,10,18,24位后的异或结果;
密钥扩展算法:
最后:1轮反序变换:R(A(0),A(1),A(2),A(3))=(A(3),A(2),A(1),A(0))
- AES算法
分组长度:128比特
密钥长度:128/192/256比特可变
基本结构:SPN替代-置换网络结构
迭代轮数:10/12/14轮可选,分别对应128/192/256比特密钥长度
轮变换步骤:字节代换、行移位、列混合、轮密钥加
组成:轮变换(128比特明文转换为128比特密文)
密钥扩展(128/192/256比特的主密钥通过密钥扩展算法后每轮产生128比特的轮密钥)
| AES算法密钥长度与轮数对应关系 |
- 字节代换(砖匠置换)
有限域GF(2^8)上的乘法逆:
- 行移位
按行移位,按列读(第i行循环左移i字节)
- 列混合(AES-128)
- 轮密钥加
128比特的轮变换输出结果和128比特的轮密钥异或
- 有限域:
GF(p)里面的加法和乘法都是平时用的加法和乘法,GF(p)的加法和乘法单位元分别是0和1。
有限域GF()中的运算
- GF(
)中的元素表示:
将∈GF(
)看作系数在{0,1}中的多项式
例如,GF()中元素11000111对应的多项式为x7 +x6 +x2 +x+ 1。
- GF(28)中的加法运算
GF(28)中两个元素之和为相应的比特位模2相加;或者说在多项式表示中,对应的多项式之和,相应的系数模2相加。
例如,11000111 ⊕ 01101011= 10101100。
相应的多项式加法为:
=。
- GF(
)中的减法运算
由于GF()中每个元素的加法逆元等于自身,因此减法与加法相同。
- GF(
)中的乘法运算
GF()中两个元素a=
与b=
相乘,它们对应的多项式模m(x)相乘。
即c=a×b=,其中,c(x) =
=a(x)b(x) (modm(x))
例: 设GF()中两个元素a= 11000111,b= 01101011,求a×b。
解a与b相应的多项式乘法为:
=
所以,a×b= 11000111 × 01101011= 10011110。
- 分组密码的工作模式
电子码本(ECB)、密码分组链接(CBC) 、计数器模式(CTR)、输出反馈(OFB)、密码反馈(CFB)
第四章 流密码
流密码的核心问题是密钥生成器的设计问题。
香农观点:“一次一密”是理想的密码体制。
线性反馈移位寄存器:LFSR的触发器个数成为级数,n级LFSR有n个触发器和一个触发
用种子密钥/主密钥产生周期很长的伪随机序列流的时序组合电路。
当LFSR级数增大时,序列周期可呈幂指数增长,周期比明文还长时,一次加密用不完,就有“一次一密”的效果。
一个n级移位寄存器由n个存储器、一个反馈函数f(an-1, …,a1,a0)组成T=(tn,tn-1,…,t2,t1)是抽头序列,或反序列周期,对于n级LFSR,反馈函数为:
例1:下图是一个5级线性反馈移位寄存器,其递归关系式为,t= 0, 1, 2, …,
若初始状态为(a4,a3,a2,a1,a0) = (1, 1, 0, 1, 0),表4.2给出其状态变化情况及输出序列。
则该5级LFSR的输出序列为
0101100001110011011111010001001, 010110…
是周期为31的循环序列。
例2:(反推)已知流密码的密文串 101011 和相应的明文串 010101,若密钥流是使用三级线性反馈移位寄存器产生的.
求解出密钥流?
建立方程求出三级 LFSR 的抽头值c1c2c3
写出密钥流的递推关系式;
画出该线性反馈移位寄存器的示意图;
设初始状态为(a1,a2,a3)=(0,0,1),写出输出序列,周期是多少?
求解过程:
Ki=Pi⊕Ci100111⊕010101=110010**
明文串=抽头值·(密钥流)
(010)=(c1c2c3)
抽头值(c1c2c3)=(110)
- 密钥流相关推导公式:
(i>1)
带入(2)中的ci值,该公式
(4)
(5)如下图,可得出输出序列周期是1001011…,周期为7,满足3级线性反馈序列的周期2n-1
游程:数字序列中连续出现的相同数字串。
Golomb随机性公设:
- G1:在序列的一个周期内,0与1的个数相等或至多相差1个;
- G2:在序列的一个周期内,长为l的游程占游程总数的 1/2l,且0的游程与1的游程个数相等或至多相差1个
- G3:异自相关函数是一个常数。
- 触发器:
Geffe序列生成器,设三个LFSR的输出分别为ai,bi,ci,输出函数为:
J-K触发器,触发器的两个输入ai,bi分别用J和K表示,其输出ci不仅依赖输入,还依赖于前一个输出ck-1,其输出函数为:
如果一个n级LFSR能够产生周期为最大值2n-1的输出序列,则称该序列为m(读作小m)序列。
祖冲之序列密码
| ZUC算法层次框架 |
ZUC分为初始化状态和工作状态。ZUC密钥长度128bits
- RC4算法
RC4算法是流密钥算法簇中的一类,使用最广泛。
RC4主要包括两个算法:密钥调度算法KSA(Key Scheduling Algorithm)和伪随机生成算法PRGA(Pseudo Random Generating Algorithm)
第五章 杂凑函数
- 杂凑函数值
称为杂凑值、散列值或哈希值,又称为数字摘要、报文摘要或消息摘要。主要用于消息完整性认真、数字签名。
将任意长度数字序列压缩成定长数字串的函数。
杂凑函数的安全性要求:
保证杂凑函数的单向性(h=H(m),已知m可以推到h,反推出消息m在计算上不可行)
弱无碰撞性(已知m和杂凑值h,找不到其他的m’,使得H(m)=H(m’)成立)
强无碰撞性(已知m和m’,使得H(m)=H(m’)在计算上不可行)
- SHA-1的工作流程:
消息最大长度,分组长度512比特,杂凑长度160比特。
消息填充(l+k+1=448(mod512))
消息扩展
迭代压缩(主循环共80步,分4轮完成,每轮迭代20步)
输出结果
基于分组密码的杂凑函数
杂凑中间值作为动态密钥
消息作为动态密钥
杂凑中间值和消息共同作为动态密钥
HMAC算法:也称为消息鉴别码或密码校验和。
只进行消息认证的MAC,保证完整性
- 提供消息认证和加密的MAC,保证完整性和机密性
- 基于杂凑函数的消息认证码
基于杂凑函数设计的MAC算法。IP和SSL协议中使用的MAC,其中的杂凑函数可替换。
第六章 公钥密码
- 1. 公钥密码概念于上世纪70年代由美国学者Diffie & Hellman等分别提出。其中标志性论文是《密码学的新方向》。
公钥密码应用的非对称密码体制,其安全是指的计算上是安全的。
- 1. 公钥密码算法应满足的要求
(1)秘密性:D(E(M))=M (保密条件,加解密变换是一对互逆变换)
(2)实用性:(高效)
接收方B产生密钥对在计算上是容易的
发方A用B公钥对消息M加密成C在计算上是容易的
收方B用自己的私钥对C解密成M在计算上是容易的
(3)安全条件
敌人由B的公钥求B的私钥计算上不可行(加密变换是单向函数)
敌人由B的公钥和C求明文M,计算上不可行
(4)保真条件:E(D(M))=M (数字签名)
- 1. 数论基本知识:
- 1. 欧拉函数:φ(n)= (p-1)·(q-1)(p和q是两个素数)
- 1. 孙子定理:
- 1. RSA公钥密码体制
- 1. 椭圆曲线密码体制:
素域GF§上的椭圆曲线Weierstrass方程:
求解椭圆曲线上的点:
椭圆曲线基本概念及运算规则:
ElGamal体制:
Alice要发送消息m给Bob ,通信过程如下:
分组密码
| 结构 | 分组 | 密钥 | 轮次 | 加解密 | |
| DES | FESITEL | 64 | 56 | 16 | 结构相同,密钥反序 |
| SM4 | 128 | 128 | 32 | 结构相同,密钥反序 | |
| AES | SPN | 128 | 128/192/256 | 10/12/14 | 解密逆变换,密钥反序 |
流密码
| 算法 | ZUC | RC4 |
| 流程 | 初始化前32步,工作阶段34步始 | 密钥调度算法(KSA)和随机数生成算法(PRGA) |
| 密钥长度 | 128 | 1-256 |
各个杂凑算法
| 算法 | MD5 | SHA-1 | SM3 |
| 摘要长度 | 128位 | 160位 | 256位 |
| 基本处理单位 | 512位 | 512位 | 512位 |
| 迭代轮数 | 80 | 64 |
《网络安全从零到精通全套学习大礼包》
96节从入门到精通的全套视频教程免费领取
如果你也想通过学网络安全技术去帮助就业和转行,我可以把我自己亲自录制的96节 从零基础到精通的视频教程以及配套学习资料无偿分享给你。
网络安全学习路线图
想要学习 网络安全,作为新手一定要先按照路线图学习,方向不对,努力白费。对于从来没有接触过网络安全的同学,我帮大家准备了从零基础到精通学习成长路线图以及学习规划。可以说是最科学最系统的学习路线,大家跟着这个路线图学习准没错。
配套实战项目/源码
所有视频教程所涉及的实战项目和项目源码
学习电子书籍
学习网络安全必看的书籍和文章的PDF,市面上网络安全书籍确实太多了,这些是我精选出来的
面试真题/经验
以上资料如何领取?
础到精通学习成长路线图以及学习规划。可以说是最科学最系统的学习路线,大家跟着这个路线图学习准没错。
配套实战项目/源码
所有视频教程所涉及的实战项目和项目源码
学习电子书籍
学习网络安全必看的书籍和文章的PDF,市面上网络安全书籍确实太多了,这些是我精选出来的