许可证文件的静态或随机IV

时间:2010-07-05 09:20:29

标签: encryption encryption-symmetric

我制作了一个小程序,允许我以加密形式向用户发送许可证。

目前我有

  • 加密我的AES密钥的RSA私钥
  • 加密数据的单个AES / CBC密钥
  • RSA公钥

AES和公钥都硬编码到设备上。

在请求许可时我应该如何处理IV,我应该在设备上创建一个静态版本,还是在我创建的每个新许可证上发送一个新版本?

2 个答案:

答案 0 :(得分:2)

这个提议不完全是愚蠢的吗?

您应该使用RSA公钥加密,而不是使用私钥。如果您按照建议使用私钥进行加密,那么每个有权访问公钥的人都将学习AES密钥,并能够解密或伪造任何内容。当然,出于同样的原因,您也不应该为不同的接收器使用相同的AES密钥。

要回答这个问题,您应该为每个AES / CBC加密使用新的随机IV。

答案 1 :(得分:2)

如果我理解你要做什么,那么就像大多数许可方案一样,它基本上是一个DRM方案。我只会解决加密问题,但当然还有黑客玩捉迷藏的问题。您应该知道 no DRM方案在加密意义上提供了任何可测量的安全性(除非可能涉及安全硬件),但它们仍然很常见,并且一些开发人员对它们背后的逻辑感到满意。

您要做的是生成许可证数据并包含一些信息,以防止用户只是从合法用户复制有效的许可证文件。示例可能是mac地址,电话号码等。然后您sign这些数据。然后,许可证由未加密的许可证和签名字节组成。在用户方面,您的安装软件将使用硬编码的公钥验证签名,并执行任何其他检查(mac地址匹配,电话号码匹配等)。

这将是您的计划的核心,对大多数开发人员来说已经足够了。您可以使用此核心并使用ad-hoc(包括加密,拆分等)对其进行进一步混淆,具体取决于您想要使用隐藏游戏的距离。

编辑:

如果我可以提出建议,我认为这本书Beginning Cryptography With Java将是一项明智的投资。它包括使用Bouncycastle库的示例。您可以从同一个网站免费下载这些示例。