SSL简介
two main parts
1.HandShakeProtocal:Establish shared secret key using public-key cryptography
2.RecordLayer:Transmit data using shared secret key.
在week1介绍RecordLayer
共享密钥K,攻击者不知道K是什么
E加密算法 D是解密算法 K是密钥(e.g. 128bits)C是密文
E D是公开的 都是经过多年检验的算法
K可以一次使用,也可以多次使用
一次使用:电子邮件
多次使用:系统中加密文件
密码学的更多用处
- 数字签名:是对现实世界签名的模拟,但是为不同文件的签名是不同的
-
匿名数字现金:1美元,没人能阻止拷贝;花同一枚硬币一次,没人知道是谁。但是超过1次,就会暴露身份
- 匿名通信:标准方法-mixnet 一系列代理,是一个双向通道,虽然不知道对方是谁,仍然可以向对方做出回答
-
Zero knowledge
Alice knows N=p*q p,q is prime and large(e.g. 1000digits)
Bob only knows N
Alick可以向Bob证明她知道的N的因子,Bob也可以做一些验证,证实Alick没有骗他
Alice证明解决了数独,Bob不知道,却坚信Alice会
- private outsourcing computation:私下外包计算,你有一串关键词想要查询,加密查询,谷歌基于加过密的搜索,无需知道,发送加密的结果给你,你再解密(谷歌不知道你想搜索什么!虽然没有实现 但是可行的事实)
密码学历史
Substitution cipher
共有26!次组合方案,利用词频可以轻易破解
"E"是出现频率最高的12.7%,然后是"t" 9.1% 接着是"q" 8.1%
再利用pair 如he in th or
Vigener cipher
k | C | R | Y | P | T | O | C | R | Y | P | T | O | C | R | Y | P | T | O |
m | W | H | A | T | A | N | I | C | E | D | A | Y | T | O | D | A | Y | A |
c | Z | Z | Z | J | U | C | L | U | D | T | U | N | W | G | C | Q | S | P |
现在不知道长度,那加假设len(k)=1,不断尝试,直到正确
Rotor Machines
每次按下一个字母,key都会转一下,但还是根据语法频率词法被破解
之后有著名的Enigma,二战中德军使用,有3/4/5个rotors,4个rotors,就有26^4的key,约等于2^18,在今天暴力破解很快
Data Encryption Standard
1974 DES keys=2^56 一次加密64bits 今天已经过时,被暴力破解
2001 AES 128bits
2008 Salsa20
One Time Pad
E(k,m) = k⊕m
D(k,E(k,m)) = D(k,k⊕m) = k⊕(k⊕m) = (k⊕k) ⊕m = 0⊕m = m
m 0110111
k 1011001
c 1101110
缺点:k要和明文一样长,不过有perfect secrety
香农证明要有perfect secrety,len(key)>=len(m)
Stream Cipher
基本思想: 不使用 total random key 而使用 pseudo-random key
利用G()将k拓展到len(m),再进行加密
但是G的选择要好,要无法被预测
glibc里面的随机是这样实现的
random():
r[i] <- (r[i-3]+r[i-31]) % 2^32
output r[i] >> 1
这是很容易被预测的
Attacks on stream cipher and one time pad
two time pad is insecure
not integrity
Real-world stream ciphers
- RC4
- CSS:DVD加密
- Salsa 20