“非对称加密”不能代替“对称加密”,另一个容易被忽略的原因

“非对称加密”不能代替“对称加密”,另一个容易被忽略的原因

两大加密体系:对称加密和非对称加密(两者区别不做阐述,先假定读本文的朋友有一定的密码学基础),他们在应用上是在利弊互补的,并没有谁代替谁。

在谈述为什么非对称加密不能代替对称加密的时候,大多数说到的原因都是:效率原因,非对称加密比对称加密慢几百上千倍。

另一个容易被忽略的原因

偶翻一书,提到另一个原因:公开密钥密码系统对“选择明文攻击”是脆弱的。

(注:公开密钥密码系统即非对称加密系统,不同叫法)

读这段,为之一震,此前看其他密码学相关书籍没有阐述该问题,所以也没有想过,孤陋寡闻了,所以记录分享下。

选择明文攻击(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

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注