有什么理论上安全的白盒概念吗?
最近我一直在读关于白盒[1,2,3.]的文章.似乎白盒处理代码混淆,它不知道是否存在一个完美的白盒。
我对这背后的理论概念很好奇。对于流密码,理论上的概念是PRF。对于分组密码,它是PRP。对于散列函数,它是单向函数.有比白盒子更好的东西吗?
我正在寻找一些不一定实用的东西,但我们实际上可以证明这实现了完美的白盒,比如一个真正的置乱代码或什么的。
最新消息。我隐约记得在网上读到了一些东西
如果一个超级大内存存在,白盒是可能的。内存可以作为查找表加载,明文作为查找键,密文作为查找值。由于加密密钥不涉及查找表(以前曾用于创建查找表),因此无法恢复加密,但加密仍然是可能的。
但我找不到消息来源。有人知道这件事吗?
发布于 2020-10-02 06:53:43
注意:白盒密码技术已经超出了我的舒适范围,而且我还没有关注这一领域的最新发展。以下是我目前的观点,我希望看到它受到挑战,并在这个过程中学习。
在我看来,白盒密码学的传统目标(也是业界最想要的)是设计软件,用嵌入在软件中的秘密密钥的特定实例计算标准公钥加密转换(如键控PRP,理想的AES),这样软件泄漏就不会泄漏密钥。
我不知道有任何严肃的说法说,这甚至是接近实现的。相反,以AES为PRP的WBC竞赛集中在上述目标上,AFAIK都以快速密钥提取结束。
关于这一目标,我们似乎甚至没有实际安全的WBC,因此理论上更没有安全的WBC。与对称密码中的更好的情况相比,我们有实际的安全PRPs和PRF,但从理论上说,从基本原理上来说没有安全的构造。
但是,如果我们允许使用WBC构造带WBC的键式转换,那么上面定义的WBC的一个变体实际上是可行的:例如,将AES-256相似的WES-256的实际安全WBC实现是很简单的,定义为:
如果采用这种不同的定义,那么WBC的安全性就来自于更传统的构造。
我的结论是,我对WBC的理论目标没有很好的定义,因此无法回答这个问题!
发布于 2020-10-02 07:28:15
因为我想我们把这当作一个密码问题,而不是逆向工程,所以我会给出一个正式的答案。
众所周知,白盒密码的目的是隐藏用于执行某些加密操作的密钥。这种系统的问题是,算法本身必须知道密钥;用不知道的密钥成功地加密或解密某些东西是非常困难的。
在算法知道用于执行加密操作的密钥的任何情况下,反向工程师可以从算法的内存中获取密钥。你可以试着阻止逆向工程师这样做,但是逆向工程不是NP-完全问题;对于一个拥有必要技能的人来说,这其实是相当容易的。
也许你没有加载钥匙,但是一些基于钥匙的单向操作.祝贺你!您只是使用了不同的密钥,并且没有更改任何安全属性。
假设您使用了一些输入,对其执行了一些难以理解的计算,并使用结果值作为键.祝贺你!你也什么也没做,因为反向工程师的全部工作是破译看似“无法破解”的代码,而且他们往往很擅长。
而且,没有什么能阻止他们简单地运行计算本身。他们不需要理解代码就能运行它。你可以尝试各种技术来阻止他们这样做,这就是所谓的反逆向工程。但无论在理论上还是实践上,它都无法阻止任何像样的逆向工程。
就在几天前,我受命逆向工程一个恶意软件样本,试图使用这样一个白盒系统来阻止我理解它的作用。我解密了示例中的每一个加密字符串,目前正在等待将反向工程示例上传到我的公共GitHub的审批。
总之,白盒密码不起作用。
发布于 2020-10-04 13:50:28
不是主要的答案,而是有用的东西。
有一个不可压缩性的概念,它要求很难有意义地压缩有意大的白盒实现。虽然对于现有的密码器很难实现,但是设计具有不可压缩实现的新对称密码是很容易的。
为什么?其主要思想可能是防止代码提升攻击:比如说,从手机中提取1GB比128位密钥难得多。尤其是在一次大规模的攻击中,比如说,恶意软件。当然,在实践中,业界不愿意使用这样的实现,因为没有人愿意白白吃1GB的存储。
多么?例如,考虑一个Feistel网络,其中Feistel函数是截断的AES实例(使用主键,或者更好地从中派生)。在不可压缩的实现中,我们将把这个函数作为一个查找表(我们将其截断以具有任何所需的大小)。不难证明,压缩方案隐含着AES的非随机性,因此不可压缩性降低到AES的安全性。
一些参考资料:
https://crypto.stackexchange.com/questions/84303
复制相似问题