几十年来,计算机科学家一直想验证是否有绝对安全的方法来加密计算机程序,这样人们在使用计算机时就无法解决它们的程序。
2020年底,几位学者成功地找到了一种加密方法,使计算机用户无法通过获取代码来破解程序。
加密程序代码
首先要混淆
混能区分混淆(indistinguishability obfuscation,简称IO)它不仅可以隐藏数据集,还可以隐藏程序本身,从而实现几乎所有的加密协议。
如果我们想知道什么是混乱,我们不妨先看看什么是混乱。
对于程序员来说,最有价值的自然是代码。一旦获得了源代码,它基本上等于程序员努力编写代码,并涉及知识产权纠纷。为了保护代码,一些程序员会在导出程序之前采取一些方法来混淆程序。
有两种方法可以混淆当前的程序。第一种是全文替换关键字,并将整个代码中的所有关键字都放在一起“命名”全部替换成数字(例如ui_controller替代为a0123456);二是直接输出编译代码,将人们能理解的源代码转换为计算机能理解的机器代码,使其他人无法直接打开文件看到原始代码。
这两种方法的目的是在导出程序时删除标记符号。从而达到不暴露源代码信息的效果。
但这两种方法并不是真正的混淆,因为虽然人类很难理解代码做什么,但如果这样的代码进入编译器,让编译器分析整个编程语言的语法结构,总结每一行指令,那么很容易看到一些线索。
真正的混淆被称为虚拟黑盒(Virtual Black Box Obfuscation,VBB),相当于一个程序C嵌入黑盒,我们可以在黑盒的一端输入x,另一端输出C(x)。因为整个程序都藏在黑盒子里,我们根本不知道C构造信息不能从输出反向输入。
如果实现虚拟黑盒,用户可以使用程序,但无法理解程序本身,那么开发的程序将永远不会被破解,加密程序的过程将非常有效。
然而,虚拟黑盒的概念提出后不久,很快就被泼了一盆冷水。2001年,7名研究人员联合提出了一个特殊的结构程序,并证明了它是通用的VBB绝对不可能混淆。
然而,在这七位研究人员的成就中,提出了混淆的新定义——假如一对程序A和B它具有相同的功能。第三方能否通过新的混淆算法区分两个程序?我们称之为这种混淆IO。
使用的原理是:如果输入相同值的程序A和B,计算得到O(A)=P和O(B)=P,无法进入程序A或B在计算上进行分辨P来自于A还是B不可行。
有了强大的不可分割的混淆,我们可以完美地加密现有的程序,使其永远不会被破解。
IO证实了存在
但量子计算仍难以抵抗
2013加州大学洛杉矶分校阿米特·沙海教授和其他五位学者提出了一个IO协议,将一个程序分成几部分,就像拼图游戏一样,单个碎片看起来毫无意义,但如果使用多线性匹配方法正确地将碎片组合在一起,程序就可以正常工作。
多线性配对本质上是一种利用多项式计算的方法。多项式是由不同变量和数字组成的数学表达式,如3xy 2yz2。用户无法在整个过程中知道任何参数,以确保其安全。
在多线配对方法中,有一个重要的概念叫做“层数”,它可以理解为运算公式中的变量阶数3xy 2yz2二阶多项式,即其层数为2;3xy 2yz4多项式为4阶,层数为4。层数越多,多线性配对的安全性越差。
20162000年,华盛顿大学副教授林惠嘉开始探索是否可以通过减少多线性配对的层数来实现IO。起初,她想出了如何用30层多线性配对构建IO。接下来,她和其他研究人员逐渐意识到,只有三层多线性配对才能构建IO。
从表面上看,这是一个巨大的进步。但是有一个问题——从安全的角度来看,三层多线性配对和其他三层以上多线性配对一样不安全。
此前,研究人员只知道两层及以下的线性配对是绝对安全的。林惠嘉和阿米特·沙海联手,试图找出如何用两层线性配对构建IO,但长期以来,研究没有取得突破。最后,他们想出了一个妥协:既然实现了IO需要3层线性配对,但为了安全,需要减少到2层,中间是否存在2.5层呢?
研究人员想象了一个系统,用户可以看到部分变量的值,这使得整个机制不需要加密太多变量。但是,多项式隐藏的变量不得超过2级,例如3x2y 2yz4公式中,z用户可以看到变量值x、y由于阶数不超过2级,因此被隐藏。因此,在保证线性配对安全的前提下,研究人员成功实现了IO。
尽管几位科学家共同证明了这一点IO然而,量子计算机的超级计算能力将使大多数加密算法无法抗拒,这意味着所有的加密信息都将暴露在量子计算机面前。现在研究人员正试图开发一种新的通信方式IO希望抵抗量子攻击的潜在途径。