通缉:用于复制保护目的的加密方案

时间:2013-01-25 20:20:15

标签: encryption copy-protection

我的任务是为应用程序实现基于加密狗的复制保护方案。我意识到无论我做什么,都会有人破解它,但我想至少比使用if语句检查加密狗是否存在更困难。

我的方法是加密应用程序正确执行所需的关键数据。在运行时,从加密狗检索解密密钥(我们选择的模型有一些合适的API函数),数据被解密,应用程序很满意。

当然,确定的攻击者可以拦截该解密密钥并获得解密数据。没关系。但应该更难的是替换他们自己的数据。所以我正在寻找一种加密方案,在这种方案中,了解解密密钥并不能使某人加密自己的数据。

这显然是非对称加密。但是对于我到目前为止发现的每个这样的算法,加密(或公共)密钥可以从解密(或私有)密钥生成,这正是我想要避免的。

注意:简单地签署数据不会有太大帮助,因为(除非我完全误解了这些签名)验证签名只是另一个if语句,很容易被规避。

所以...任何想法?

3 个答案:

答案 0 :(得分:3)

攻击者知道私钥的那一刻,您将无法获得任何秘密信息,以区别于其他人。 使攻击者更难:您可能希望在应用程序特定时间T之后使每对(公钥,私钥)到期,并在加密狗和您自己的计算机上独立生成基于前一对的新对。这样,攻击者需要持续访问加密狗,以便能够使用新私钥加密他的数据,或者像T一样经常运行他的private_key_detection算法。

答案 1 :(得分:2)

您可能希望在加密狗上运行解密。有几个硬件可以帮助解决这个问题(I just googled this one, for example.)。可能有很多其他......达拉斯半导体曾经有一个Java按钮,允许你在类似设备的小型加密狗上运行代码,但我不认为他们已经拥有它了。

其中一些允许您在加密狗中执行代码。那么也许一个难以重现而又不需要高性能的关键功能可能有用吗?也许是许可证密钥验证算法。

也许你可以在加密狗中包含必须放入内存的代码,以便程序运行。这将有点难以打破,但可能很难实现,具体取决于您使用什么工具来制作程序。

您可能还想研究一些反调试主题。我记得有一段时间后看到一些出版物but here is at least one。这是另一层会让它更难破解。

互联网连接的依赖性也可能是一种选择。如果他们无法在没有Internet连接的情况下运行您的代码,那么您必须小心谨慎。

您还可以查看FlexLM(或者这些天所称的任何内容)。它有效,但它是一头野兽。如果我没记错的话,他们还会尝试协商贵公司毛利的一定百分比(这已经是几年......我想我们告诉他们在他们要求的时候填写它。)

祝你好运!

答案 2 :(得分:0)

为了回答我自己的问题(有点),可以用RSA做到这一点,但是大多数API(包括OpenSSL的加密库之一)都需要被“欺骗”去做。在给定私钥的情况下,您可以生成公钥的原因是

  1. RSA的实现通常可以在私钥数据结构中保存p和q(那些大素数)。

  2. 由于公钥(由模数N和一些指数e组成)无论如何都是公共的,所以选择一个模糊的e(通常)是没有意义的。因此,有一些常用的标准值,如3或65537.因此,即使p和q未知,您也可以“猜测”公共指数。

  3. 但是,RSA是对称的,因为使用私钥加密的任何内容都可以使用私钥解密,反之亦然。所以我所做的(我是一个怪物)就是让加密库生成一个RSA密钥。您可以在那里选择自己的公共指数,稍后将用于解密(与正常方式相反)。然后,我在关键数据结构中切换公共和私有指数。

    任何尝试使用加密库执行类似操作的人的一些提示:

    1. 在RSA数据结构中,清除除n和e / d之外的所有内容,具体取决于您是要使用该特定密钥加密还是解密。

    2. 使用RSA_blind_off关闭致盲。它甚至在解密时也需要加密指数,这不是我们想要的。请注意,这可能会让您受到一些攻击。

    3. 如果有人需要更多帮助,请发表评论,我会在此帖子中提供更多信息。