产品密钥的实现

我正在用C实现一个小应用程序,我希望以后以合理的价格出售它作为共享软件。 它将开始为期30天的试用,我已经非常确定如何实施它。

但问题是,我不太确定如何实施产品密钥validation。 我的想法是,客户可以在我的网页上注册(在尝试产品一段时间后),支付产品费用,并通过eaaabbbb-ccccc-ddddd-eeeee获取产品密钥邮件(或者可以通过我在我网站上的个人资料获得)。 到目前为止没问题。 然后他/她将密钥放在我的应用程序中的相应关键字段中,并且应用程序已注册。

从目前为止我可以收集到的,人们要么推荐AES或RSA。 说实话,我在大学的另一个方向(不是密码学)和我之前的一个密码学课程。 但根据我的记忆,AES是一种对称加密算法,这意味着我只有一个加密和解密密钥,对吗? 我怎么能生成数以千计的产品密钥,仍然在我的应用程序中validation它们(顺便说一下,不需要互联网访问….所以不用服务器检查)?

所以我猜RSA会是要走的路? 但是RSA不能生成相当长的密钥(至少比上面要求的25个字符长)吗?

在另一个线程中,我读到有些产品甚至不会使用加密产品密钥生成/validation,而是只使用一些检查,如“添加2.和17.字符,这应该总计为x”。

什么是最快,最简单,最安全的方式? :-)代码样本将是糖!

问候,

塞巴斯蒂安

PS:哦……请不要告诉我我的钥匙怎么能在某个时候破解…..我知道这一点,这主要是为什么我不想花很多时间在这个问题,但同时不会让偶尔的cookies太容易。

对称算法是有限的,因为任何带有反汇编程序的新手破解者都可以找到你的密钥(或用于生成密钥的算法)并制作“keygen”。

因此,非对称密码学是可行的方法。 基本前提是这样的:

  • 当用户从您那里购买许可证时,您会收集有关用户和/或其环境的某些识别详细信息(通常,这只是一个全名;有时也是一个公司)。
  • 您对此信息进行128位MD5哈希。
  • 使用128位椭圆曲线加密,使用服务器上的私钥加密此哈希。
  • 128位密文可以作为25个字符的字符串表示给用户,该字符串由字母和数字组成(加上分隔符号以便于阅读)。 请注意,26个字母+10个数字= 36个离散值,而36 ^ 25> 2 ^ 128。
  • 用户在注册对话框中键入此产品密钥。 客户端软件将其转换回128位数字(16字节),使用EC加密的公钥对其进行解密,并将结果与​​用户个人信息的MD5哈希值进行比较,该哈希值必须与用于注册的内容相匹配。

当然,这只是基本的想法。 有关更多详细信息和源代码,请参阅基于椭圆曲线加密的产品密钥 。

如果您只是购买解决方案,生活会更简单。

http://www.kagi.com/kagisolutions/index.php

Kagi允许您收取付款,并帮助您管理密钥。

一个人在博客上写了他如何处理注册号码的问题。 他的一篇博客文章是Generating Unique Registration Numbers 。

是的,RSA和AES是两个非常不同的东西:

  • RSA是公钥加密,涉及公钥和私钥,速度相当慢。 主要用途是建立对称加密会话密钥的安全交换。
  • AES是对称加密,快速且安全。

由于您的应用不通过公共频道进行通信,并且加密的使用仅限于产品激活/注册,因此您需要使用对称密码。 公钥密码的好处在于密钥管理,您将在您的网站或电子邮件中处理这些密钥。

请注意,您不必为每个客户分配相同的密钥。 您可以生成一些注册信息的哈希值,并将其与其他内容进行异或(也许是固定的会话密钥)。 将其发送给客户,程序可以生成相同的散列,并且您发送的密钥将生成原始固定密钥。

处理密码术不是轻易做到的事情。 正如你所提到的,你希望这会被破解。 如果你自己做,这几乎肯定会发生。 你仍然可以使用你自己的实现来“保持诚实的人诚实”,但你会意识到这是你所能得到的。 如果您需要更强大的东西,那么您应该在对解决方案进行彻底研究后购买解决方案。

您可以查看此代码项目文章。 它描述了基于执行软件的机器的MAC地址的软件密钥的实现。 这个方法并不理想,正如导演自己承认的那样,它与你所寻找的有点不同,但也许它可以帮到你。