这是Coursera课程Cryptography的第六周的笔记。
本周讲的是关于Public Key Cryptography的概念,也就是公钥密码学,也称为非对称密码学。以前我只知道RSA算法。我知道RSA算法是怎么来的,它可以作什么,局限性是什么。然而把它放在一个大的概念里,将RSA只看作非对称加密算法中的一种,这仍是第一次。若是数学家没有提出利用大质数难分解的性质制做密码,天然就不会有RSA算法了。那么还会有公钥密码吗?基本的密码体系会有变化吗?git
生词本算法
chicken-and-egg problem
asymmetry 不对称
factor 因式分解
Indistinguishability 不可分辨
spoof 欺骗
discrete 离散的
logarthm 对数
subtlety 细微的差异
derivation 派生
disseminate 散布,传播
legitimate 合法的数据库
如何在加密通讯前交换密钥呢?
虽然能够经过物理方法交换,但物理交换一般价格很高,并且效率低下。安全
有N我的,若是容许他们跟其余人通讯,他们就须要预先交换O(N2)的密钥,这是很是大量的工做。oracle
两我的预先没有关系,如何交换密钥呢?
例如一个顾客想要在网上使用信用卡购买物品,例如你想给老师发一封关于课程的邮件,你预先没有在这家网上商店购买过东西,也不认识老师,可是你仍然但愿用安全的信道进行通讯。函数
私钥密码不可以解决在信道不安全时私钥如何交换的问题。
1976 《New Directions in Cryptography》ui
利用不对称的问题。例如因式分解:将两个质数相乘很容易,将相乘后的结果分开很难。
利用不对称性来让两方在公开讨论的状况下交换一个共享的不公开密钥。
也就是说,在一个全是人的房间,A和B在房间的两端喊话,却交换了一对除A与B之外无人知晓得密钥。加密
假设攻击者是个窃听者,能够听到信道,不可改变信息
攻击者获得传输数据的几率不大于1/2+eorm
没法计算出密钥是个弱的保证
密钥从所选集合中彻底没法辨认(indistinguishable)才是个强的保证ip
仅针对被动窃听者的安全是不够的
须要带验证的密钥交换,例如,两房预先知道对方的ID,而且这种ID不得被欺骗
安全目标:当窃听者获取全部通讯文本后,密钥K仍然是不可辨认的。
对窃听者没法计算出key
咱们本须要的是某个长度的不可辨认的k1,可是咱们却得到了某个组下的key2,因而就有了从key2到k1的映射问题。
解决方法:key derivation 密钥派生
用一个合适的hash函数作映射,将某个组下的密钥映射到指定的区段内。
一方生成了一对密钥:公钥和私钥。
公钥普遍传播,私钥本身保留,不向任何人传播
也被称为非对称加密
Gen keygen
Enc 加密
Dec 解密
没有encryption oracle。
没有perfectly secure的公钥加密。
没有肯定性的公钥加密体系是CPA-Secure的。
攻击者是一个合法用户
攻击者更容易得到它所选定的明文和对应的密文
延展性问题:知道明文和对应的密文后,可能派生出另外一对相关的明文和密文
因为非对称加密效率低下,咱们能够用非对称加密方法去加密一个对称加密密钥,而后用对称加密密钥去加密明文。
发送时,将加密的对称加密密钥和密文一块儿发送。
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是标准算法,而且与全世界共享
把消息做为组来对待并不方便,这就须要使用密钥派生。
使用混合算法
El Gamal Encryption不是CCA安全的
使用密钥派生可使算法变成CCA安全
DHIES/ECIES
这个体系是决定性的,因此不多是CPA Secure的
RSA假设仅仅指算均匀的c得第e个根,只有当m是均匀的时候,c才是均匀的
RSA假设仅仅指彻底计算的状况,事实上能够得到关于第e个根得一部分信息
RSA Labs, 1993
加密时,加入随机的padding
问题:
1. 没法证实是CPA-Secure的,除非m很是短
2. 当r很小的时候,已知已经有Chosen-plaintext attacks
3. 已知有Chosen-ciphertext attack
OAEP
引入冗余
当RSA假设成立时,RSA-OAEP是CCA-Secure的。 在实践中普遍使用。