这是Coursera课程Cryptography的第六周的笔记。
本周讲的是关于Public Key Cryptography的概念,也就是公钥密码学,也称为非对称密码学。之前我只知道RSA算法。我知道RSA算法是怎么来的,它能够做什么,局限性是什么。然而把它放在一个大的概念里,将RSA只看做非对称加密算法中的一种,这还是第一次。如果数学家没有提出利用大质数难分解的性质制作密码,自然就不会有RSA算法了。那么还会有公钥密码吗?基本的密码体系会有变化吗?
生词本
chicken-and-egg problem
asymmetry 不对称
factor 因式分解
Indistinguishability 不可分辨
spoof 欺骗
discrete 离散的
logarthm 对数
subtlety 细微的差别
derivation 派生
disseminate 散布,传播
legitimate 合法的
The public-Key Revolution
Key distribution problem
如何在加密通信前交换密钥呢?
虽然可以通过物理方法交换,但物理交换通常价格很高,而且效率低下。
Key management problem
有N个人,如果允许他们跟其他人通信,他们就需要预先交换O(N2)的密钥,这是非常大量的工作。
Lack of support for open system
两个人预先没有关系,如何交换密钥呢?
例如一个顾客想要在网上使用信用卡购买物品,例如你想给老师发一封关于课程的邮件,你预先没有在这家网上商店购买过东西,也不认识老师,但是你仍然希望用安全的信道进行通信。
“经典”密码学无法解决这些问题
私钥密码不能够解决在信道不安全时私钥如何交换的问题。
1976 《New Directions in Cryptography》
新的方向
利用不对称的问题。例如因式分解:将两个质数相乘很容易,将相乘后的结果分开很难。
利用不对称性来让两方在公开讨论的情况下交换一个共享的不公开密钥。
也就是说,在一个全是人的房间,A和B在房间的两端喊话,却交换了一对除A与B以外无人知晓得密钥。
Formally(正式定义看ppt)
假设攻击者是个窃听者,可以听到信道,不可改变信息
攻击者得到传输数据的概率不大于1/2+e
注意
无法计算出密钥是个弱的保证
密钥从所选集合中完全无法辨认(indistinguishable)才是个强的保证
Modern key-exchange protocols
仅针对被动窃听者的安全是不够的
需要带验证的密钥交换,例如,两房预先知道对方的ID,并且这种ID不得被欺骗
Diffie Hellman Key Exchange
Key Exchange
安全目标:当窃听者获取所有通信文本后,密钥K仍然是不可辨认的。
Decisional Diffie-Hellman problem DDH问题
安全性
对窃听者无法计算出key
细微的差别
我们本需要的是某个长度的不可辨认的k1,但是我们却获得了某个组下的key2,于是就有了从key2到k1的映射问题。
解决方法:key derivation 密钥派生
用一个合适的hash函数做映射,将某个组下的密钥映射到指定的区段内。
公钥设置
一方生成了一对密钥:公钥和私钥。
公钥广泛传播,私钥自己保留,不向任何人传播
也被称为非对称加密
公钥分发
- 所有人将公钥放入同一个数据库,供其他人查询。
- 通信时,一方将公钥传送给对方。
在这两种情况下,我们都假设了攻击者是被动窃听者(至少在公钥交换阶段)
非对称加密解决的问题
- 公钥可以在公开的(容许窃听,不容许改变)信道中传播,而私钥加密法则无法在公开的信道中传播密码。
- 对私钥加密法,必须让每个用户存储其他N-1个用户的密钥。非对称则可以使用公钥数据库。
- 可以让预先没有关系的两个实体找到对方的公钥并通信。
为什么还要研究对称加密
- 更适合的应用场景:磁盘加密
- 通常对称加密的效率是非对称加密效率的两到三个数量级
Public-key encryption
包含3个多项式时间算法:
Gen keygen
Enc 加密
Dec 解密
CPA安全
注意
没有encryption oracle。
没有perfectly secure的公钥加密。
没有确定性的公钥加密体系是CPA-Secure的。
Chosen-ciphertext attack
攻击者是一个合法用户
攻击者更容易获得它所选定的明文和对应的密文
延展性问题:知道明文和对应的密文后,可能派生出另一对相关的明文和密文
Hybrid encryption
由于非对称加密效率低下,我们可以用非对称加密方法去加密一个对称加密密钥,然后用对称加密密钥去加密明文。
发送时,将加密的对称加密密钥和密文一起发送。
El Gamal encryption
gen The public key is (G, q, g, gx), the secret key is x
enc ciphertext is gy, hy·m
Dec c2/c1x
安全性
如果DDH是难的,那么El Gamal是CPA-Secure的。
离散对数难度的假设对公钥加密是不够的。
实际上
G, q, g是标准算法,并且与全世界共享
把消息作为组来对待并不方便,这就需要使用密钥派生。
使用混合算法
Chosen-ciphertext attacks
El Gamal Encryption不是CCA安全的
使用密钥派生可以使算法变成CCA安全
DHIES/ECIES
基于RSA的公钥加密
- 选择等长的随机质数p,q
- 计算N=pq
- 选择e,d,使得 e·d = 1 mod (p-1)(q-1)
- RSA假设:仅拥有N,e时,难以计算c的第e个根,其中C来自N。
安全性
这个体系是决定性的,所以不可能是CPA Secure的
RSA假设仅仅指算均匀的c得第e个根,只有当m是均匀的时候,c才是均匀的
RSA假设仅仅指完全计算的情况,事实上可以获得关于第e个根得一部分信息
PKCS#1 v1.5
RSA Labs, 1993
加密时,加入随机的padding
问题:
1. 无法证明是CPA-Secure的,除非m非常短
2. 当r很小的时候,已知已经有Chosen-plaintext attacks
3. 已知有Chosen-ciphertext attack
PKCS#1 v2.0
OAEP
引入冗余
安全性
当RSA假设成立时,RSA-OAEP是CCA-Secure的。
在实践中广泛使用。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。