“非对称加密”不能代替“对称加密”,另一个容易被忽略的原因
两大加密体系:对称加密和非对称加密(两者区别不做阐述,先假定读本文的朋友有一定的密码学基础),他们在应用上是在利弊互补的,并没有谁代替谁。
在谈述为什么非对称加密不能代替对称加密的时候,大多数说到的原因都是:效率原因,非对称加密比对称加密慢几百上千倍。
另一个容易被忽略的原因
偶翻一书,提到另一个原因:公开密钥密码系统对“选择明文攻击”是脆弱的。

(注:公开密钥密码系统即非对称加密系统,不同叫法)
读这段,为之一震,此前看其他密码学相关书籍没有阐述该问题,所以也没有想过,孤陋寡闻了,所以记录分享下。
选择明文攻击(chosen-plaintext attack),攻击者可以选择明文并且对其加密,并且得到密文。非对称加密系统对攻击者来说,这点是没问题的。
例子说明
如果不理解?我们用另一个例子来阐述这个解析。
Alice 通过加密信息向 Bob 买彩票(为什么买个彩票要通过加密信息?别问,否则故事无法讲),以双色球为例一共17721088种组合。
Alice 通过Bob的公钥加密购买的哪注,之后发送给Bob,Eve 窃听Alice 通讯的数据。

显然,对于窃听者Eve 来说,没有Bob 的私钥,他是解不开密文的。
但他可以如何做?只要他将每注编号枚举出来,用Bob 的公钥来加密,如果得到结果和截取到的数据相等,这注就是Alice 发送的明文了。

当然Eve 是用计算机来枚举的,而不是用笔。
for M in all—sample {
if Encrypt(M) == C {
echo "find it!"
break
}
}
样本空间一共17721088个,对计算机来说并不是个天文数字,在可观时间内是能找到明文的。
这就是非对称加密,对于明文样本空间太小情况下的脆弱性。
对称加密没这个问题
而对于对称加密来说,保密的是密钥,安全强度和密钥长度有关,和源信息长度无关,就算知道明文样本空间,也是无法进行“选择明文攻击”的。
在非对称加密和对称加密的配合应用上,非对称加密用于加密“对称加密的密钥”,对称加密加密后续的通讯数据。由于“对称加密的密钥”的长度(通常128、192、256 位)也是可知的,这样,是不是也可以对其进行“选择明文攻击”?
用128位为例,样本空间大小
2^128 = 340282366920938463463374607431768211456。
和前面样本空间 17721088 完全不是一个数量级的。想在可观时间跑一遍“选择明文攻击”,不如去绑架对方拷打出明文了。
总结一句话就是:非对称加密还需要(被加密数据的)样本空间足够大大大大大大,才是安全的。
后记:上面说的非对称对样本空间不大的情况存在的弱点,如果要解决该弱点也是较容易的,比如加盐啥的(约定好长度就可,解密方解密后扔掉盐字段),本质上就是增大样本空间。但这个是题外话了,文字说的是算法弱点,不是说应用上没有方法解决。
(全文完)
(欢迎转载本站文章,但请注明作者和出处 编程想法 – Yuccn )