
分组密码AI通用破译探讨
可否找到某种破译手段,它能同时破译包括AES、DES、IDEA、3DES、CAST、Blowfish和Camellia等所有现在和未来的分组密码呢[1]?在大模型以前根本不可能!但随着以GPT为代表的AI大模型的突飞猛进,分组密码的通用破译将变得越来越有希望了。下面就是我们的一些初步思考,欢迎同行批评指正。
(一)分组密码的误区
分组密码是学术界研究最多的密码,也是民用领域的主流密码。但关于分组密码的加密和解密,过去一直存在多个较隐蔽的误区,这些误区从根本上否定了通用密码破译法的存在性。一旦躲过这些误区后,若再结合GPT大模型训练的最新成果,就很有可能在通用密码破译方面取得重大进展。
我们必须认识到:密文也是一种语言,一种非常接近人类自然语言的语言,一种时间序列语言。具体说来,作为自然语言的明文,在被顺序切割成分组块X1,X2,…,Xn后,若被相应地加密成密文分组块C1,C2,…,Cn,那么,相应的密文也是一段自然语言,其中的每个密文分组Ci便可看成是某种特殊自然语言的“字”,或某种特殊的时间序列语言的“字”。为了方便描述,本文将这类密文语言称为Y-语言。形象地说,分组密码的加密就是从自然语言到Y-语言的某种翻译,反过来,分组密码的破译或解密就是从Y-语言到自然语言的翻译。于是,密码的加解密过程就变成了语言的翻译问题。既然GPT大模型能同时翻译以中英德法等自然语言和电脑C语言等机器语言为代表的所有时间序列语言,难道就能否认GPT能翻译分组密码这样的Y-语言吗?
若从语言翻译角度来重新审视学术界对分组密码的研究,不难发现:我们过去确实陷入了一些误区中,这就使得我们只能针对特定的分组密码去研究相应的破译方法,毕竟DES和AES等不同密码的加密解密算法实在大不相同。
具体说来,破坏通用破译可能性的误区主要有三:
误区1,解密必须是加密的逆变换。
既然只是语言翻译,当然没必要再去追求明文和密文之间的一一对应。实际上,若将原来的明文“你好!”破译成了“你吃了吗?”,这当然不能算错。只要破译结果与原来的明文表达了相同意思,破译结果就算正确,而每一种意思本来就有若干种表达方式。其实,任何两种语言之间压根儿就没有绝对标准的翻译。比如,四川话中的“龟儿子”就很难翻译成普通话,贵州方言中的“鬼火撮”也没有对应的川普。
当然,抛弃了逆变换破译思路后的代价也很大。比如,密码学曾经的数学美将不复存在,以往破译密码的所有数学手段都将失效,这在GPT大模型出来之前是根本不敢想象的。
误区二,密文分组之间彼此是无关的。
过去既然把解密算法认定为加密算法的逆变换,那么,不同密文分组之间的相关性就无助于密码破译,也就可以认为不同密文分组之间干脆互不相关。但是,时间序列语言的最大特点之一便是前后文的彼此相关性!实际上,这种相关性不但有助于语言的翻译,还有助于对翻译结果进行拾遗补缺。哪怕是一段文中出现了几个错别字或遗漏,有时也能借助前后文的关联来加以纠正。
若从语言翻译角度躲过误区二后,分组密码通用破译的可行性又会大增。实际上,密文分组之间的关联性将在随后Y-语言翻译GPT模型的训练过程中扮演关键角色,毕竟我们需要的是整个Y-语言的翻译,而不只是其中某部分的翻译。
误区三,明文密文分组与等长的比特分组是一回事
从耗费加密和解密资源的角度看,这是学术界曾经陷入的最大误区。实际上,虽然每个N比特长的明文和密文分组都以01分组的形式出现,但在所有2N组01分组中,真正具有语言含义的分组(以下称为有效分组)所占的比例(记为δ)小之又小,小到几乎为0(当然,δ的精确值无法计算)。比如,并非每个16比特长的01串都对应一个汉字,也并非任意N/16个汉字排成串后都是一句人话。即使是几句人话顺序排列后,也不一定能得到有含义的连贯文章等。
从加密角度看,虽然误区三不会增加实操加密工作量,但在密码算法的设计阶段,设计者将被误区三强行逼入优美的数学公式中。这就限制了加密思路的扩展,因此国际上已开始用GAN思路来重新考虑加密问题[2]。
从破译角度看,破译者本该只是考虑有效密文分组的破译问题。换句话说,跳出误区三后,破译者的工作量将大幅度缩减为原来工作量的δ倍,至少理论上看应是这样的。但是,即使面临这极小比例(δ倍)的有效密文分组,过去的破译法也根本找不到适用于所有分组密码的通用破译法。幸好,AI带来了希望。
(二)基于选择明文攻击的通用破译思路
任何一本现代密码学教材都告诉我们:判断某个分组密码算法是否安全的核心指标,就是看看它能否经受得起“选择明文攻击”。即,对任何一个可能的明文分组,破译者都有权知道与该明文分组对应的密文分组。形象地说,即使破译者偷走了某用户的加密机,若他仍然不能完成后续的破译任务,那么相应的分组密码算法才算得上合格。
若从AI大模型训练的角度来看,“选择明文攻击”意味着什么呢?它其实意味着破译者可以获得足够的精准训练数据集!具体说来,假设X是任意一段自然语言,它们当然能被事先分割为长度N的明文分组。根据“选择明文攻击”提供的权利,破译者便能得到这些明文分组所对应的密文分组。这些明文和密文的配对,便是随后即将描述的有监督强化训练所需的数据集。
若从语言翻译的角度来看,上述明文分组与密文分组的已知对应,意味着一个重要事实:破译者可获得一本内容无所不包的从中文(或任何一种自然语言)到密文Y-语言的“大典”。而破译者的任务就是要灵活应用这部“大典”来完成从Y-语言到中文的翻译。或者说,破译者必须再建一本从Y-语言到中文的“大典”。若不借助对任何时间序列语言翻译都有效的大模型(比如,GPT模型),中文和Y-语言的互译任务就肯定无法完成。
但大模型使之有了希望。实际上,设待破译的分组密码为E。破译思路如下:
第一步,选择一个较大的中文自然语言集,记为Q。比如,Q可以是阿里云当年训练其Qwen模型时的语言集。Q其实只是上述“大典”的极小部分。
第二步,选择某个开源的GPT大模型,记为Y-模型。比如,该模型可以是语言翻译表现最好的大模型,或是当初李飞飞花50美元来训练Qwen的那个模型。
第三步,对Y-模型进行如下专业的有监督强化训练(其实是蒸溜):对集合Q中的任何一段自然语言Q1,以Q1所对应的密文E(Q1)为Y-模型的输入,同时以Q1为输出进行有监督的强化训练。换句话说,当向Y-模型输入E(Q1)后,便对Y-模型中的神经网络权重系数进行微调,直到本次输出等于Q1为止。接着,再对Q中的另一段自然语言Q2进行类似的训练。即,再输入E(Q2)并对神经网络的权重进行微调,直到输出为Q2为止。重复上述有监督的强化训练过程,直到遍历Q中的所有语句后才结束整个训练并获得最终的训练模型,记为Y-破译。
这个模型Y-破译便能完成从Y-语言到中文的翻译任务,它实际上就是密码E的一个破译器。
最后,关于该破译模型,我们有如下几点注记:
1)在上述破译过程中,破译者不必事先知道待破译的是DES或AES或任何具体密码,这便是“通用破译”的含义。
2)如果有充足的算力,上述训练的工作量其实并不很大(不该超过李飞飞当初训练Qwen的工作量),所需时间也该有限(大约相当于李飞飞用掉的26分钟),费用也该能承受,毕竟李飞飞当初只花了区区50美元而已。
3)上述破译法很难用于实操,毕竟被攻击者不可能配合破译者来创建“大典”。但从理论上看,本文至少揭示了一个重要结果:所有分组密码都经不起选择明文攻击。看来,分组密码的所有教材都得修改了!另外,用类似的方法也可以知道:所有分组密码可能也经不起选择密文攻击,国内外教材也得相应修改。
4)上述破译对公钥密码无效,因为公钥密码并未陷入前述的三个误区。实际上,公钥密码的明文和密文并不限于任何时间序列语言。
5)上述破译对序列密码也无效,因为本来就不曾要求序列密码承受选择明文的攻击。
参考文献
[1]杨义先,钮心忻,密码简史,北京:电子工业出版社,2020年。
[2]陈玉玲,AI赋能密码的一点考虑,2025年2月11日的公众号“密码头条”文章。
转载本文请联系原作者获取授权,同时请注明本文来自陈玉玲科学网博客。
链接地址:https://wap.sciencenet.cn/blog-3630458-1474806.html?mobile=1
收藏