密码学
概述
- 密码学是研究编制密码和破译密码的技术科学
- 使信息保密的技术和科学学叫密码编码学
- 破译密文的科学与技术叫密码分析学
信息安全的基本模型
密码学基本概念
-
明文:没有加密的文字or字符串
-
密文:对明文加密之后的报文
-
加密算法:
-
解密算法
-
加密密钥
-
解密密钥
-
单钥密码体系
-
双钥密码体系
密码学的历史与发展
第一阶段(1949年前) 古典密码发展阶段
-
隐写术,暗语,隐语,藏头诗等
-
采用手工或机械变换的方式实现
-
单表代换密码:Caesar密码、仿射密码
-
多表代换密码:Vigenere,Hill密码等
-
转轮密码:Enigma,Red密码等
第二阶段:近代密码阶段(1949~1976)
- 1949,Shannon发表了《保密系统的通信理论》,用信息论的观点分析了密码学的基本原理,奠定了密码学的基本理论。
- 1967年David Kahn出版了《破译者》一书
现代密码学阶段(1976~至今)
- 1976年,Diffie、Hellman发表了《密码学新方向》,开辟了公钥密码学的新领域
- 1976年,美国建立了DES为联邦标准
现代密码学的主要发展方向
-
混沌密码学:混沌加密的基本原理是利用混沌系统产生混沌系列作为密钥序列,接收方用混沌同步的方法将明文信号提取出来实现解密
-
量子密码学:量子密码学利用量子力学的特性来加密的科学。任何试图尝试读取量子态的行动都会改变量子态本身。
密码体制分类
-
受限制的(restricted)算法:算法的保密性基于保密算法的秘密。
-
基于密钥(key-based)的算法:算法的保密性基于对密钥的保密。
一个加密系统S可以用数学符号描述如下:
S={P,C,K,E,D}
P --- 明文空间,表示全体可能出现的明文集合
C --- 密文空间,表示全体可能出现的密文集合
K --- 密钥空间,密钥是加密算法中的可变参数
E --- 加密算法,由一些公式,法则或程序构成
D --- 解密算法,E的逆
当给定密钥k时,各符号的关系
C = Ek(P), 对明文P加密后得到密文C
P = Dk(C) = Dk(Ek(P)), 对密文C解密后得明文P
加密设计主要是确定E,D,K
优秀密码算法应该是基于密钥的保密,而非算法的保密
现代密码学用密钥解决问题,密钥用K表示
密钥K的可能值的范围叫做密钥空间(keyspace)
单钥体制,对称加密
流密码
分组密码
双钥体制
1976年,Diffie和Hellman首先引入
一对密钥:公钥和密钥
密码攻击
攻击类型 | 攻击者掌握的内容 |
---|---|
唯密文攻击 | 加密算法 截获的部分密文 |
已知明文攻击 | 加密算法 截获的部分密文 一个或多个明文密文对 |
选择明文攻击 | 加密算法 截获的部分密文 自己选择的明文消息,以及由密钥产生的相对密文 |
选择密文攻击 | 加密算法 截获的部分密文 自己选择的密文消息,以及相应的被解密的明文 |
算法的安全性
如果破译算法的代价大于加密数据价值,那么加密算法是安全的
如果破译算法所需要的时间比加密数据保密的时间长,那么你可能是安全的
编码与密码
编码基础
ASCII
标准ASCII码,使用 7 位二进制数(剩下的一位二进制为0)来表示所有的大小写字母,数字,标点符号。
后128个称为扩展ASCII码,许多基于x86的系统都支持使用扩展ASCII。扩展ASCII码允许将每个字符的第八位用于确定附加的128个特殊符号字符,外来语字母和图形符号
扩展ASCII表
unicode
因为ASCII只有8位,只能表达256种字符。所以出现unicode,unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。使用16位的编码空间(每个字符占用2个字节)
UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode 的可变长度字符编码。
UTF-8使用1~6个字节为每个字符编码
BASE64
Base64是一种基于64个可打印字符来表示二进制数据的表示方法。
每6个比特位一个单元,对应某个可打印字符除了A-Z,a-z,0-9共62个字符还有“+”,“/”,最后用“=”填充不能被3整除的空位。
古典密码学
古典密码的加密是将明文的每一个字母代换为字母表中的另一个字母。
单表代换密码
凯撒密码
凯撒密码加密时将明文中的每个字母按字母表顺序向前或向后移动固定数目作为密文
移位密码
与凯撒密码类似,最早的凯撒密码是固定左移3位。
移位密码可以任意移动,后期不仅处理26个字母,还会处理数字和特殊字符。参照ASCII表进行位移
仿射密码
例子:
加密
解密:
多表代换密码
查找矩阵替换:
若两个字母同行,则用右方字母替换
若两个字母同列,则用下方字母替换
若既不同行也不同列,则用矩阵对角字母替换
polybius密码(棋盘密码)
vigenere密码
使用26个字母构成字母矩阵横行为明文列,纵向为密钥列
其他类型密码
培根密码
二进制思想:粗体字为B,正常字为A
栅栏密码
将明文分成N个一组,然后每组的第一个连起来
摩斯密码
用.和_表示,以前用于发电报
CTF中奇怪密码
倒序加密
电脑键盘密码
键盘密码
手机键盘加密
当铺密码
用汉子来表示数字,进行编码。汉子特点是出头数量
猪圈密码
对称加密
基本概念
特征:加密解密使用相同的密钥(单密钥加密)
根据加密对象分为
-
流加密:每次加密都通过密钥生成一个密钥流,解密也是使用同一个密钥流,明文与同样长度的密钥流进行异或运算得到密文,密文与同样的密钥流进行异或运算得到明文。典型算法RC4。
- RC4:
RC4是典型的流加密算法,常用于SSL/TSL,及802.11和WAP中。
流加密会逐字节加密数据,RC4本质是以密钥为种子产生的随机数来对明文进行逐字节异或。
分组密码与流密码的区别就在于有无记忆性
加密过程
1.初始化S表
(1)对S表进行线性填充,一般为256个字节
(2)用种子密钥填充另一个256字节的K表
(3)用K表对S表进行初始置换
2.密钥流的生成(为每一个待加密的字节生成一个伪随机数,用来异或,S表一旦完成初始化,种子密钥就不再被使用)。
RC4加密实现
# RC4加密算法实现
# 初始化S表
def ini_S(K):
S = [a for a in range(256)]
j = 0
for i in range(256):
j = (j + S[i] + K[i]) % 256
S[i],S[j] = S[j],S