我有一个付费插件的程序,它会经常更新。用户必须购买订阅才能使用某些插件(即每月免费支付)。
我为插件选择基于订阅的模式的主要原因很简单,更新确实是卖点,因为插件必须经常更新。长话短说,这些插件在没有更新的情况下基本上是无用的,因为它所使用的软件也会经常更新,并且会出现问题。
现在到文件下载。我基本上只想允许付费用户使用这些插件。
通常使用中央服务器和数据库,这是相当微不足道的,但当您不能拥有带有数据库的中央服务器时,情况并非如此。(我对此没有影响。)
这是我想出的最有效的解决方案:
- 用户获得一个随机的 AES256 密钥。
- 我们使用随机的 AES256 密钥加密付费插件。
- 然后我们用用户密钥加密插件的密钥。
- 冲洗并对所有用户和插件重复上述操作,并创建一个整体密钥文件。
- 将加密的插件文件和整体密钥文件上传到文件共享服务。
上述解决方案具有以下特点:
- 能够在后续版本中撤销密钥。(很重要)
- 默默无闻没有安全感。任何人都可以下载插件或密钥文件,但除非他们有自己的密钥,否则对他们没有用处,因为暴力破解 AES256 在计算上是不可行的。
这个解决方案没问题,但是当用户和插件数量增加时就会出现问题。
例子:
- 我们有 10,000 个用户和 100 个插件。
- 10,000 个用户 * 100 个插件 = 1,000,000 个密钥
- 1,000,000 个密钥 * 每个密钥 300 字节** = 300MB
** 密钥 (64) + 初始化向量 (32) + 每个密钥的文件格式开销,以便软件可以找到正确的密钥进行解密。
即使在最好的情况下(不可能),它也是一个 96 MB 的密钥文件。
这个(未知)已知问题还有其他解决方案吗?它们叫什么,它们在哪里使用?