代码之家  ›  专栏  ›  技术社区  ›  user2233125

部分密钥验证

  •  10
  • user2233125  · 技术社区  · 10 年前

    这个问题是针对那些有软件保护部分密钥验证技术经验的人提出的。我试图了解PKV是如何优于其他密钥生成方案的,在阅读了大量参考文献之后

    http://47hats.com/2007/07/26/implementing-a-partial-serial-number-verification-system/

    我有几个问题。

    基本上,如果我理解正确的话,PKV背后的想法是,并不是在客户端检查整个密钥,所以如果有人(即黑客)提出了一个密钥生成器,你只需要重新编译软件,并对密钥进行不同的检查,瞧,假密钥生成器将不再工作。

    但我不明白的是,如果在某个时刻有一个密钥生成器,它显然可以至少解锁 该软件的版本仍然可以在网上找到。所以基本上,你根本没有避免使用假密钥,你只是有一个版本的软件可以使用假密钥生成器,而另一个版本则不能。

    那么,这到底是如何优于其他密钥生成保护技术的呢?

    1 回复  |  直到 10 年前
        1
  •  11
  •   Iridium    10 年前

    这里的想法是这样的-如果我们首先假设您的应用程序包含验证 整体 许可证密钥,如果有人创建了密钥生成器,那么为下一个版本重新保护许可证过程的唯一真正选择是完全更改密钥生成算法,使密钥生成器不再生成有效密钥。

    这有一个显著的缺点——合法用户需要获得使用新密钥算法创建的新许可密钥,才能使用更新的版本。这可能是您的支持噩梦,也可能是您客户的烦恼,可能会导致他们转向竞争对手的产品。

    仅通过验证 部分 对于产品的任何一个版本中的密钥,攻击者几乎不可能通过分解二进制文件来确定整个密钥是如何生成的。因此,要在下一版本中锁定非法生成的密钥,您只需开始检查在上一版本中未检查的密钥的不同部分。由于密钥生成机制没有改变,合法用户的密钥仍然可以正常工作,但非法密钥(以及创建它们的密钥族)不再有效。当然,旧的密钥生成器仍然适用于旧版本,但您对此无能为力。

    当然,由于您的密钥是有限长度的,在检查整个密钥之前,您只能重复此过程太多次,或者在所有先前版本中的检查中有足够的信息来重建整个密钥生成过程,但也许这将持续足够长的时间,以便您能够合理地期望用户为您的产品的下一个主要版本购买新的许可证,在那里您可以完全更改生成机制并重新开始。