参考书本:杨波 —《现代密码学》;结城浩 — 《图解密码技术》
参考网站: CTF Wiki
整理了常用的加密算法,算是比较全的密码学内容。
一、基本概念
-
香农理论:香农首次将密码学研究置于坚实的数学基础上
-
密码学新方向提出了公(双钥)密码的概念:Diffie和Hellman 1976年提出
-
数据加密标准DES是由IBM公司设计的分组长度64bit,密码长度为56bit适合芯片实现的商用产品。标志着密码学从艺术走向科学
-
现代密码学由密码编码学和密码分析学构成
- 密码编码学(Cryptography):密码由五元组(P, C, K, E, D)构成,即明文空间、密文空间、密钥、加密算法、解密算法
- 密码分析学(Cryptanalytics):攻击强度 — 唯密文攻击 < 已知明文攻击 < 选择明文击 < 选择密文攻击。Shannon在1949年开创的信息论理论第一次透彻地阐明了密码分析的基本问题。
-
密码体制分类
- 单钥体制 —— 加密密钥和解密密钥相同(对称密码体制)
- 流密码:明文消息按字符逐位地加密,依赖于密钥流产生器所生成序列的随机性和不可预测性,核心问题是密钥流生成器的设计
- 分组密码:将明文消息分组(含有多个字符),逐组进行加密,是很多系统安全的一个重要组成部分
- 双钥(公钥)体制 —— 加密和解密密钥不同(非对称密码体制)
- 公钥加密
- 数字签名:签名是可信的、不可伪造的、不可复制的、不可改变的、不可抵赖的
- 密钥交换
- 密钥封装
- 单钥体制 —— 加密密钥和解密密钥相同(对称密码体制)
-
古典密码
- 代换密码:单字母代换和多字母代换密码
- 单表代换密码:移位代换密码、凯撒密码、仿射变换、多项式代换密码、乘数密码
- 多表代换密码:维吉尼亚密码、博福特密码、滚动密钥密码、弗纳姆密码、转轮密码、希尔密码(Hill)
- 置换密码
- 代换密码:单字母代换和多字母代换密码
-
破译或攻击密码方法
- 穷举破译法
- 分析法(确定性和统计性两类)
二、流密码
-
基本概念
- 同步流密码:如果密钥流产生算法和明文(密文)无关,则所产生的密钥序列也与明文(密文)无关
- 自同步流密码:如果密钥流产生算法和明文(密文)相关,则所产生的密钥序列也与明文(密文)相关
-
移位寄存器是流密码产生密钥流的一个主要组成部分,GF(2)上一个n级反馈移位寄存器由n个二元存储器与一个反馈函数f(a1, a2, …, an)组成。每一个状态对应于GF(2)上的一个n维向量,共有2^n中可能的状态
-
线性反馈移位寄存器,总是假定Ci中至少有一个≠0,否则f(a1,a2,…,an)恒等于0
-
m序列的伪随机性:如果密钥流是周期的,要完全做到随机性是困难的,严格来说这样的序列不可能做到随机,只能要求截获比周期短的一段时不会泄露更多的信息。
- 伪随机周期序列要求
- 伪随机周期序列要求
-
非线性序列
- 二元序列的线性复杂度:指生成该序列的最短LFSR的级
- 二元序列的极小特征多项式:最短LFSR的特征多项
- Geffe序列生成器:由三个LFSR组成,LFSR2做为控制生成器使用
- J-K触发器
- Pless生成器由8个LFSR、4个J-K触发器和1个循环计数器构成
三、分组密码
-
性质:混淆性、扩散性
-
加密模式
-
Feistel网络:在第i+1轮中,把输入分成长度一样的左右分组,分别记为Li和Ri,则有
其中F函数通常是非线性且不可逆的。加解密使用的密钥Ki的次序相反。DES轮数取16 -
DES
-
F函数
-
第i轮子密钥的生成
-
安全性:互补性、弱密钥和半弱密钥
-
二重DES,密钥的长度为112(128-2x8),可用中途相遇攻击法
-
三重DES:分组长度64,密钥112;三个DES模块的级联;第一个密钥和第三个密钥相同;第二个DES模块是DES的逆模块
-
-
AES
- RIJNDAEL,系数在有限域GF(2^8)上的多项式
- 字节代替 (ByteSub)
- 行移位(ShiftRow)
- 列混合(MixColumn)
- 加密钥(AddRoundKey)
- 字节代替 (ByteSub)
- 迭代的轮数Nr与明文阵列的列数Nb和密钥种子阵列的列数Nk有关
- RIJNDAEL,系数在有限域GF(2^8)上的多项式
四、公钥密码
- 公钥体制的基本原理是陷门单向函数
- RSA:基于大数分解的困难性
- Rabin:基于大数分解的困难性
- ElGamal:基于离散对数的困难性
- ECC(椭圆曲线公钥密码):基于离散对数的困难性
五、数字签名
-
性质
- 完整性
- 身份唯一性(不可伪造性)
- 不可否认性(公开课可验证性)
-
公钥密码的签名思想:以公钥密码为基础的数字签名算法
-
RSA数字签名算法
-
ElGamal数字签名
-
Schnorr数字签名
-
DSA数字签名:不能用于加密或密钥分配,算法中可能设有陷门
-
特殊用途的数字签名
- 盲签名:签名的人不知道签名文件的内容
- 群签名:
五、消息认证和哈希函数
-
消息认证码是指消息被一个密钥控制的公开函数作用后产生的、用作认证符的、固定长度的数值,也称为密码校验和。消息认证码在输入包括任意长度的消息和一个发送者与接收者之间的共享密钥后,输出固定长度的数据,该数据称为MAC值。
-
哈希函数:把消息或数据缩成摘要,使得数据量变小
-
基本需求
-
目前的Hash函数主要有以下这几种
-
-
MD5
-
输入:任意长的消息,512比特长的分组 输入:128比特的消息摘要
-
补充
-
-
SHA1
- 过程参考:https://www.cnblogs.com/block2016/p/5632234.html 建议看书,太多就不贴图了
- 输入:任意长的消息,分为 512 比特长的分组。首先在消息右侧补比特 1,然后再补若干个比特 0,直到消息的比特长度满足对 512 取模后余数是 448,使其与 448 模 512 同余;输出:160 比特的消息摘要。
- 补充
-
MD5和SHA1差异
- 安全性:SHA1所产生的摘要比MD5长32位。若两种散列函数在结构上没有任何问题的话,SHA1比MD5更安全。
- 速度:两种方法都是主要考虑以32位处理器为基础的系统结构。但SHA1的运算步骤比MD5多了16步,而且SHA1记录单元的长度比MD5多了32位。因此若是以硬件来实现SHA1,其速度大约比MD5慢了25%。
- 简易性:两种方法都是相当的简单,在实现上不需要很复杂的程序或是大量存储空间。然而总体上来讲,SHA1对每一步骤的操作描述比MD5简单。
-
HMAC:主要应用于身份验证中
-
CBC-HMAC:CBC-MAC是最为广泛使用的消息认证算法之一,同时它也是一个ANSI标准(X9.17)。CBC-MAC实际上就是对消息使用CBC模式进行加密,取密文的最后一块作为认证码。