我知道在WASM中包含一个秘密/密码是个坏主意,因为二进制文件可以解密,但是否有安全生成盐的概念/技巧,用于在WASM内创建主机无法读取的秘密,因此只存在于单个WASM执行时?
否。这又是一个不可能的DRM问题。
让我们来了解一下:
- 你写的wasm做一些任务,它需要在我的电脑上运行。我从头开始建造我的电脑,自己设计硅片,这样它们就能记录电脑的工作。我有你的";一次性";秘密但这对我来说很贵,定制硅片并不便宜
- 你写的wasm做一些任务,它需要在我的网络浏览器上运行。我从chrome源代码编译了自己的浏览器,并添加了一个补丁,将任何wasm复制到磁盘,包括该wasm的任何输入和输出。我知道你的废物做了什么,可以复制它
- 你写的wasm可以完成一些任务,你的计划是让第三方网站包含你的wasm。你并没有试图对用户/CPU/浏览器隐藏它,你只是试图对加载你的wasm的网页隐藏秘密。最重要的是,每次从服务器加载wasm时,嵌入的秘密都是不同的。我的网页不是正常加载你的wasm,而是用javascript实现了自己的wasm解释器,并做你的wasm所做的一切,查看它的秘密数据,并记录它的操作
当然,与所有DRM系统一样,你可以试图炮制任何复杂的方案,让人类很难弄清楚这些录音,但最终你试图向某人提供信息(秘密或盐(,同时拒绝向他们提供相同的信息。你可以从时间或困难的角度提高一个人打破你的DRM的成本。
现在,为了完整起见,有一种基于全同态加密的方法还不实用,在这种方法中,你可以生成一个程序,让其他人在他们不理解程序做了什么的地方运行(这在计算上是"不可区分的"(,但目前的实现需要接近千兆字节大小的密钥,并将几毫秒的计算变成几分钟或几小时,其次,这与Wasm无关,如果你可以使用Wasm,你也可以使用python代码或x86-64可执行文件。据我所知,目前最好的方法是https://tfhe.github.io/tfhe/。