需要找本好书看,数学基础当然不能少
推荐《密码学引论》by 冯登国,裴定一
如果是英文教材先看《Handbook of Applied Cryptography》by A. Menezes, P. van Oorschot, and S. Vanstone, CRC Press, 1996.
都是好书,入门很好!
1、至少有一对生日相同的概率即为1-C(365,n)/365^n。可以使用Excel公式计算如下【=1-PERMUT(365,A2)/365^A2】:当人数为1时,很显然概率为0;当人数为23时,概率已经达到50%;当人数达到50时,概率已达到97%;当人数为100时,概率已经接近100%。
2、确保消息的机密性,同时减少通讯量,可以先压缩后加密
3、数字证书(Digital Certificate) 证书是对公钥生成的数字签名
4、任何散列函数,其散列值发生碰撞是不可避免的
5、SHA-1已经不再视为可抵御有充足资金、充足计算资源的攻击者。2005年,密码分析人员发现了对SHA-1的有效攻击方法,这表明该算法可能不够安全,不能继续使用,自2010年以来,许多组织建议用SHA-2或SHA-3来替换SHA-1。
6、中间人攻击:对数字签名的中间人攻击,具体来说就是主动攻击者Mallory介入发送者和接收者的中间,对发送者伪装成接受者,对接收者伪装成发送者,从而能够在无需破解数字签名算法的前提下完成攻击。
7、取模运算
8、异或求密钥:
secrettext='08181b17061e'
plaintext="attack"
secret=[]
plain=[]
key=[]
answer=''
for j in plaintext:
plain.append(hex(ord(j)))
for i in range(0,len(secrettext),2):
sl=(str('0x'+secrettext[i]+secrettext[i+1]))
s=int(sl.upper(),16)
secret.append(sl)
for n in range(len(plain)):
key.append(hex(int(secret[n],16)^int(plain[n],16)))
print(key)
print([chr(int(m,16)).upper() for m in key])
9、网页链接HMAC计算
10、网页链接DES加解密
11、网页链接二进制转文本(注:开头要多加一个0)
12、网页链接进制转换网站
13、异或代码:
def dec2bin(dec):
result = ''
if dec:
result = dec2bin(dec // 2)
return result + str(dec % 2)
else:
return result
def xor(x, y):
return int(x, 2) ^ int(y, 2)
x = xor('011000010111010001110100011000010110001101101011','000010000001100000011011000101110000011000011110')
print(dec2bin(x))
#第1章#
古典密码概述:
密码学
๏ Cryptography 密码编码学 ๏ Cryptology 密码学 ๏ Cryptologist 密码学家
明文和密文
๏ 明⽂:plaintext(message)
๏ 未被加密的消息。
๏ 密⽂:ciphertext
๏ 经过某种⽅法伪装后的消息。
加密和解密
๏ 加密:encryption
๏ 将明⽂转换成密⽂的⽅法及过程
๏ 解密:decryption
๏ 将密⽂还原出明⽂的⽅法及过程
算法
๏ 密码算法(Algorithm):⽤于加密E() 和解密D()的数学函数。
๏ 加密过程:E(m) ➝ c
๏ 解密过程:D(c) ➝ m
算法是否要保密
๏ 如果算法的安全性是依赖于保持该算法的秘密,这种算法被称为“受限算法”
๏ 这种保密机制有很严重的缺陷,即使⽬前还有不少⼩企业和组织在采⽤这种机制。
密钥
๏ 密钥(Key):是⼀串任意的数值。加密和解密时都要使⽤密钥作为参数参与运算。
๏ 加密过程:Ek(m) ➝ c
๏ 解密过程:Dk(c) ➝ m
柯克霍夫原则(1883)
๏ 柯克霍夫原则(Kerckhoffs's principle):即使密码系统的任何细节已为⼈悉知,只要密钥未泄漏,它也应是安全的。
๏ 即使⾮数学上不可破解,系统也应在实质程度上⽆法破解。
๏ 系统内不应含任何机密物,即使落⼊敌⼈⼿中也不会造成困扰。
๏ 密钥必须易于沟通和记忆,⽽不须写下。
๏ 系统应可以⽤于电讯。
๏ 系统应可以携带,不应需要两个⼈或以上才能使⽤。
๏ 系统应容易使⽤,不致让⽤户的脑⼒过分操劳。
密码系统
评估密码系统
๏ 正确性
Dk(Ek(m)) = m
๏ 安全性
密⽂中⽆法看到明⽂或密钥
密码技术
对称和非对称密码算法
๏ 对称密码算法
๏ 加解密函数所需密钥要完全⼀样
๏ ⾮对称密码算法
๏ 加密所需的密钥与⽤作解密的密钥不⼀样
๏ 解密密钥也不能通过加密密钥计算出来
๏ 密码算法保证的是机密性
单向散列函数
๏ ⽤单向散列函数计算出来的数值称为散列值
๏ 散列函数保证的是完整性:即数据是正牌的⽽不是伪造(或被篡改过)的。
消息认证码
๏ 消息认证码(Message Authentication Code)
๏ 不但能够确认消息是否被篡改,⽽且能够确认消息是否来⾃所期待的通信对象
๏ 除了完整性,它还提供认证机制
数字签名
๏ Bob收到⼀封来⾃Alice的邮件,内容是“以
100万元的价格购买⼀件商品”
๏ 伪装
๏ 篡改
๏ 否认
๏ 能够防⽌上述风险的技术:数字签名
(Digital Signature)
๏ 保证完整性、提供认证以及抗抵赖
伪随机数
๏ 伪随机数(Pseudo Random Number) ๏ PRN Generator:伪随机数⽣成器
๏ 承担着密钥⽣成的重要职责
密码学家的工具箱
消息认证码
单向散列函数
抗抵赖
数字签名
隐写术与数字水印
๏ 隐写术:Steganography
๏ ⽬的不是让消息内容不可读,⽽是能够隐藏消息本⾝我们先准备⼀段话,很容易看懂的就好,喜闻乐见的当然更好。
欢迎你尝试将另⼀句嵌⼊其中,你就会发现这就是⼀种隐写术。
密码与信息安全常识
๏ 不要使⽤保密的密码算法 ๏ 使⽤低强度的密码⽐不进⾏任何加密更危险 ๏ 任何密码总有⼀天都会被破解 ๏ 密码只是信息安全的⼀部分
古典密码
代替密码系统
๏ 明⽂中每⼀个字符被替换成另⼀个字符。
๏ 简单代替:凯撒密码
๏ 多名码代替:Duchy Mantua, 1401
๏ 多字母代替:Playfair(1854,WWI)
๏ 多表代替:维吉尼亚密码
凯撒密码
一个例子
๏ 码表
ABCDEFGHIJKLMNOPQRSTUVWXYZ
XYZABCDEFGHIJKLMNOPQRSTUVW
๏ 明⽂
THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
๏ 密⽂
QEB NRFZH YOLTK CLU GRJMP LSBO QEB IXWV ALD
数学描述
我们把26个字母按顺序编号A=0, B=1,……,x 记为要加密的字母,n则为码表字母所对应的数字。
En(x) = (x+n) mod 26 Dn(x) = (x-n) mod 26
维吉尼亚密码
转轮机
(Hebern rotor machine,1908)
恩尼格玛Enigma
๏恩尼格玛是对⼆战时期纳粹德国使⽤的⼀系列相似的转⼦机械加解密机器的统称,它包括了许多不同的型号,为密码学对称加密算法的流加密。
๏恩尼格玛密码机在1920年代早期开始被⽤于商业,⼀些国家的军队与政府也曾使⽤过它,其中的主要使⽤者是第⼆次世界⼤战时的纳粹德国。
๏ 1932年,波兰密码学家马⾥安·雷耶夫斯基、杰尔兹·罗佐基和亨⾥克· 佐加尔斯基根据恩尼格玛机的原理破译了它。
๏ 1939年中期,波兰政府将此破译⽅法告知了英国和法国,但直到
1941年英国海军捕获德国U-110潜艇,得到密码机和密码本才成功破译。密码的破译使得纳粹海军对英美商船补给船的⼤量攻击失效。
异或操作
๏ 异或是⼀种逻辑运算,记为XOR或⊕ ๏ 运算规则
๏ ⽐特相同结果为0
๏ ⽐特相异结果为1
๏ XOR可以⽤作加密和解密函数
练习
0100 0011 0111
1011 1010 0100 ⊕ 1111 1001 0011
用异或来加解密
๏ 记M为明⽂,K为密钥,C为密⽂若E和D均为XOR操作,则有:
EK(M) = M ⊕ K = C
DK(C) = C ⊕ K = M
๏ 证明
DK(C)=DK(EK(M))= M ⊕ K ⊕ K
= M ⊕ 0 = M
异或的其他应用
๏ RAID冗余磁盘阵列
๏ 我们可以⽤3块磁盘来组成⼀个阵列,其中A和B分别存储1个字节的前4⽐特和后4
⽐特,C盘⽤来存储A和B的异或值。
๏ 当任何⼀块盘损坏时,可以通过将其他两块盘数据按位异或运算即可恢复出数据。
One Time Pad
๏ OPT:⼀次⼀密乱码本
๏ 每个密钥仅对⼀个消息使⽤⼀次。
๏ 发送者和接收者使⽤同样的乱码本,依次使⽤乱码本上的每个密钥加解密字符。
๏ 与代替密码不同的是,该⽅法使⽤的密钥序列是⽆迹可循的(即每个密钥序列出现的概率是均等的)
离散概率
概率分布
๏ U是⼀个有限集合,如 U ={0,1}n ๏ P在集合U上的概率分布记作:
P : U ! [0,1] U集合中每个元素的出现概率不⼀定相同,但所有元素 出现概率之和⼀定等于1.
均匀分布
๏ 均匀分布是指U中的所有元素中出现的概率是相同的。
事件Event
๏称A为⼀个事件,Pr[A]为事件概率 ๏ U是全集,该事件的概率Pr[U]=1 ๏ A是U的⼦集,Pr[A]介于0和1之间
例子
if U ={0,1}8
A = {all x in U such that lsb2(x) = 11}✓ U
then Pr[A] =?
๏ lsb2(x):x的最低2位⽐特
๏ 答案:1/4
联合边界
for events A1 and A2
Pr[A1[A2] ? Pr[A1] + Pr[A2]
๏ A1和A2是两个事件(U的⼦集) ๏ 答案:
when A1\A2 = ?
Pr[A1[A2] = Pr[A1] + Pr[A2]
例子
if U ={0,1}8
A1 = {all x in U such that lsb2(x) = 11}✓ U
A2 = {all x in U such that msb2(x) = 11}✓ U
then Pr[A1[A2]
๏ lsb2(x):x的最低2位⽐特
๏ msb2(x):x的最⾼2位⽐特
๏ 答案:≤ 1/2
随机变量
๏ 随机变量X是⼀个函数 X:U→V U是其定义域,V是其值域假设在{0,1}n→{0,1}上有⼀个随机变量
X(i) = lsb(i) ( i⊆{0,1}n )
则Pr[X=0] = ? Pr[X=1] = ?
๏ 答案:都是1/2
均匀随机变量
๏ 若r是U集合上的⼀个均匀随机变量,则有
for all a
记作: r R U
例子
๏ r是{0,1}2上的均匀随机变量 r1是r的第1位,r1是r的第2位另⼀个随机变量X = r1 + r2
则 P[X=2] = ?
๏ 答案:1/4
随机化算法
๏ 确定性算法A:y ⟵A(m)
输⼊ 输出
๏ 随机化算法A:
y ⟵A(m, r) 其中 r ⟵R {0,1}n 输出y是⼀个随机变量,即
y ⟵R A(m, r)
加密算法
m∈M, k∈K, c∈C
E(k, m) 是⼀个随机化算法 M×K→C 输出c是⼀个随机变量 ๏ 明⽂空间M ๏ 密⽂空间C ๏ 密钥空间K
#第2章# 流密码
应用密码学
Applied Cryptography
主讲:杨⼀涛
第2章 流密码
异或操作
๏ 异或是⼀种逻辑运算,记为XOR或⊕
๏ 运算规则
๏ ⽐特相同结果为0
๏ ⽐特相异结果为1
๏ XOR可以⽤作加密和解密函数
用异或来加解密
EK(M) = M ⊕ K = C
DK(C) = C ⊕ K = M
๏ 证明
DK(C)=DK(EK(M))= M ⊕ K ⊕ K
= M ⊕ 0 = M
异或的其他应用
๏ RAID冗余磁盘阵列
๏ 我们可以⽤3块磁盘来组成⼀个阵列,其中A和B分别存储1个字节的前4⽐特和后4
⽐特,C盘⽤来存储A和B的异或值。
๏ 当任何⼀块盘损坏时,可以通过将其他两块盘数据按位异或运算即可恢复出数据。
One Time Pad
๏ OPT:⼀次⼀密乱码本
๏ 每个密钥仅对⼀个消息使⽤⼀次。
๏ 发送者和接收者使⽤同样的乱码本,依次使⽤乱码本上的每个密钥加解密字符。
๏ 与代替密码不同的是,该⽅法使⽤的密钥序列是⽆迹可循的(即每个密钥序列出现的概率是均等的)
密码算法
๏ ⼀个密码系统(cihper)是定义在三元组
(M, K, C)上的⼀对算法(E, D)
E: M×K→C D: C×K→M
8m 2 M,k 2 K
D(k,E(k,m)) = m
๏ E应该是随机化算法,D总是确定性算法
The One Time Pad
๏ 定义
(K, M, C)= {0,1}n
k 是K的⼀个均匀随机变量(如何产⽣?),且长度和明⽂m相等
c = E(k, m) = k ⨁ m
D(k, c) = k ⨁ c
完全保密性
A cipher(E,D) over (K,M,C) has perfect secrecy if
8m0,m1 2 M (len(m0) = len(m1)) 8c 2 C
Pr[E(k,m0) = c] = Pr[E(k,m1) = c] where k
๏ Perfect Secrecy by Shannon in 1949(video)
OTP具备完全保密性
Pr[E(k,m) = c] = How many keys in K: E(k,m)=c|K|
๏ 对于OTP中给定的m和c,有多少k可以满⾜等式E(k,m)=c?
坏消息 perfect secrecy ) |K| 》=|M|
๏ 如果⼀个密码算法具备完全保密性,那么密钥空间的⼤⼩⼀定⼤于或等于明⽂空间⼤⼩。
๏ 这么看来,OTP的密钥长度是在满⾜该特性前提下算法的最短长度。
流密码
๏ 流密码(Stream Cipher)让OTP变得更实⽤
๏ ⽅法:使⽤伪随机数Pseudorandom代替随机数Random
๏ PRG: PseudoRandom Generator
随机数和伪随机数
๏ 随机数:不可预计的数列
๏ 伪随机数:使⽤⼀个确定性的算法计算出来的似乎是随机的数序,因此伪随机数实际上并不随机。
๏ 如何产⽣随机数和伪随机数?
PRG:伪随机数生成器
๏ PRG是⼀个函数
G: {0,1}s → {0,1}n (n≫s)
种⼦Seed空间
seed 输出的伪随机数空间
G
⨁
Q: 流加密具备完全保密性吗?
PRG必须是不可预测
๏ 如果PRG是可被预测的,则有
9i : G(k)|(1,2,...,i) ! G(k)|(i + 1,...)
๏ 给出⼀串数字的前i位,可以计算出后续的⽐特。
针对OTP和流密码的攻击
Two Time Pad
๏ 在流密码中,绝对不要重复使⽤你的密钥,因为:
c1 = m1⊕ PRG(k)
c2 = m2⊕ PRG(k)
๏ 通过将两个密⽂进⾏XOR运算会得到:
c1 ⊕c2 =m1⊕ m2
两个明文的异或里有什么
MS PPTP
๏ 客户端和服务器使⽤了相同的密钥
๏ 每⼀⽅应该持有2个密钥,⼀个⽤于加密,⼀个⽤解密
802.11b WEP
๏ m:原始消息
๏ crc(m):校验值
๏ IV:⼀个24bits的数字,每⽤⼀次⾃增1 ๏ k:预共享的密钥
OTP完整性攻击示范
m2 =c‘⊕ k =c ⊕p ⊕k =m1⊕ k⊕ p⊕ k
=》p=m1⊕m2
#第3章# 分组密码
分组密码
分组位数 密钥位数
DES 64bits 56bits
3DES 64bits 168bits
AES 128bits 128,192,256bits
迭代
mi ci
๏ 每⼀个分组都要经过n轮的迭代加密后产⽣⼀个分组密⽂
๏ 密钥k会被扩展成n个新密钥
๏ F(k,*)是⼀个迭代函数,第⼆个参数总是上⼀次函数运⾏的结果
๏ DES:16轮;3DES:48轮;AES:10轮
算法效率
AMD Opteron, 2.2 GHz ( Linux)
算法 分组/密钥 长度 加解密速度 (MB/秒)
RC4 126
Salsa20/12 643
Sosemanuk 727
3DES 64/168 13
AES-128 128/128 109
Data Encryption Standard
(DES)
背景
๏ 19世纪70年代初,⾮军⽤密码学的研究处在混乱不堪的状态。美国国家安全局NSA 不肯公开他们对信息编码的技术。
๏ 1972年,美国国家标准局NBS拟定了⼀个旨在保护计算机和通信数据的计划,于
1973年5⽉15⽇发布了公开征集标准密码算法的请求。
设计标准
๏ 算法必须提供较⾼的安全性
๏ 算法必须完全确定且易于理解
๏ 算法安全性必须依赖密钥,⽽不是算法
๏ 算法必须对所有⽤户都有效
๏ 算法必须适⽤于各种应⽤
๏ ⽤以实现算法的硬件必须经济
๏ 算法必须有效使⽤
๏ 算法必须能够验证
๏ 算法必须能够出⼜
第二次征集
๏ 虽然公众很感兴趣,但是满⾜条件的
⼏乎没有……
๏ 1974年8⽉27⽇,NBS进⾏了第⼆次征集
在20世纪60年代后期,IBM公司成⽴了⼀个由Horst Feistel负责的计算机密码学研究项⽬。
๏ 1971年设计出密码算法Lucifer,分组长度为
128位、密钥长度为128位
๏ 设计出以他名字命名的迭代结构:Feistel⽹
๏ 他们将Lucifer的⼀个变种提交给了NBS
数据加密标准
๏ 1976年,NBS宣布采纳IBM的算法作为联邦数据加密标准,即DES。其密钥长度为56bits,分组长度为64bits。
故事还没有完
๏ 1997年,DES被暴⼒破解
๏ 2000年,NIST宣布采⽤Advanced
Encryption Standard(AES)替换DES
Feistel网
Ri = fi(ki,Ri 1) Li 1
Li =Ri 1
DES实现原理 密钥:56bits
IP置换 密钥:56bits
๏ 初始置换(IP, Initial permutation)
๏ 最终置换(IP-1)
16轮Feistel网 密钥:56bits
S盒
Si : {0,1}6 !{0,1}4
๏ S盒的作⽤:将6⽐特缩减为4⽐特
๏ 6个⽐特的头尾2⽐特为纵
๏ 6个⽐特的中间4⽐特为横
๏ 例如:011001经该S盒置换后的结果是?
三重DES
๏ 若E()为DES加密过程,D()为解密过程
๏ ⽣成3个56bits的密钥:k1, k2, k3
๏ 假设明⽂为m,则
E(k3 , D(k2 , E(k1 , m)))
DES的弱点
算法设计上的缺陷
๏ S-boxes
๏ IP和IP-1
弱密钥缺陷
๏ 在DES算法中存在12个半弱密钥和4个弱密钥。由于在⼦密钥的产⽣过程中,密钥被分成了2个部分,如果这2个部分分成了全0或全l,那么每轮产⽣的⼦密钥都是相同的,当密钥是全0或全l,或者⼀半是l或0时,就会产⽣弱密钥或半弱密钥,DES 算法的安全性就会变弱。在设定密钥时应避免弱密钥或半弱密钥的出现。
ECB(Electronic Code Book)
ECB缺陷
实施攻击1
๏ 对于上⾯3个明⽂分组的数字进⾏ECB 模式的DES加密,请问如何实施攻击?
实施攻击2
CBC(Cipher Block Chaining)
CTS(CipherText Stealing)
CFB(Cipher FeedBack)
三种模式比较
ECB:简单快速,但不
应使⽤
CBC:推荐使⽤,需要
额外的⼀个初始
化向量IV,且最
后分组需要填充
CFB:推荐使⽤,需要
额外的⼀个初始
化向量IV,且最
后分组⽆须填充
Advanced Encryption Standard
(AES)
第三次征集
๏ 1997:NIST发布新⼀轮密码算法征集
๏ 1998:收到15份算法
๏ 1999:NIST选择了5份作为候选
๏ 2000:Rijndael被选中作为AES,该算法为⽐利时密码学家Joan Daemen和Vincent Rijmen 所设计
๏ AES 分组长度:128bits
๏ 密钥长度:128,192,256bits
分组加密模式
轮数:10轮
分组:128bits 密钥:128bits
置换过程 置换过程(后⼀次)
1. SubBytes字节替换 1. SubBytes字节替换
2. ShiftRows⾏移位 2. ShiftRows⾏移位
3. MixColumns列混淆
SubBytes字节替换
ShiftRow行移位
MixColumns列混淆
AES加密模式 分组:128bi(轮数:10轮 )ts
密钥:128bits
1. SubBytes字节替换 1. SubBytes字节替换
2. ShiftRows⾏移位 2. ShiftRows⾏移位
3. MixColumns列混淆
#第4章#