各种软件公司都通过硬件安全性分发他们的软件,通常必须安装一个加密狗才能使软件运行。

我没有经验,但是我想知道它们是否真的起作用?

加密狗实际上是做什么的?我认为,使用这种方法来增强安全性并防止硬件仿真的唯一方法是,硬件必须执行软件的某些重要功能,或者实现某些算法等。

评论

请编辑您的问题的标题以匹配问题的正文。我的提议被拒绝了。您的问题是关于复制保护软件狗,而不是智能卡或HSM。这些加密狗始终是关于复制保护的:即使隐藏了算法,关键是要使某人无法复制算法。这与隐藏加密密钥是一个非常不同的问题。

我删除了防复制标签;它应该拼写为“ copy-protection”,但是在“ copyprotection”消失之前,系统不允许我创建该标签(将其从所有问题中删除后大约一天后会发生)。

我认为此问题目前范围非常广泛,并决定关闭。

#1 楼

显然,彼得谈到了正确实施的要点。考虑到过去我曾经(没有发布结果)“破解”了两个不同的加密狗系统,所以我也想分享我的见解。 user276已经部分暗示了问题所在。

许多软件供应商认为,在为加密狗系统授予许可时,他们为其许可模型购买了某种安全性。他们离真相太远了。他们所做的只是获得使他们能够实施相对安全的系统的工具(在Peters答案中指出的范围之内)。

复制保护通常有什么问题?如果软件将数学上合理的加密用于其许可方案,则与复制保护本身的安全性无关。为什么?好吧,您最终陷入了困境22。您不信任用户(因为用户可以复制软件),因此您对内容进行加密或在复制保护方案中以某种方式使用加密。 las,您需要在产品中拥有私钥才能使用加密,这完全与不信任用户的概念相矛盾。加密狗试图将私钥(和/或算法和/或其他组成部分)放入硬件中,以使用户一开始就无法访问。

但是,由于许多供应商都认为他们开箱即用地购买了安全性,没有为正确的实施付出努力。这使我想到第一个例子。这是我母亲正在使用的CAD程序。由于了解到连接LPT的加密狗比最近的USB加密狗更容易失败的原因,我着手解决这个问题。那是2005年左右。

我花了很长时间。实际上,我使用了一个简单的DLL放置攻击(此方案后来被称为该名称)来注入我的代码。而且该代码并不太复杂。只有一个特定的函数返回了加密狗通常会读出的值(序列号),仅此而已。我将传递到原始DLL的其余功能,该原始DLL需要与加密狗供应商一起安装,并附带驱动程序。

另一个加密狗早于此。这里的问题是我正在为一个分包商工作,而我们只能访问我们应该为其开发的软件。确实,授权软件的公司与软件供应商之间的官僚主义是问题,但这给我们带来了很大的麻烦。在这种情况下,在加密狗周围工作要更具挑战性。首先,必须编写驱动程序来嗅探设备之间的IRP。然后必须找出用于加密的算法。幸运的是,并不是所有的事情都是在硬件上完成的,因为硬件为我们提供了漏洞。最终,我们有了一个小司机,将其作为加密狗。它的功能已扩展到可以读取一个真正的加密狗,保存数据(实际上将其传递给保存它的用户模式程序),然后将其加载回该加密狗的姿势。

结论:不管哪种加密狗,如果它们实现了它们所属程序的核心功能,就很难破解。对于其他所有事情,这主要取决于打算围绕加密狗工作的人的决心和时间。
我要说,加密狗构成了相当大的障碍-如果正确实施,但是如果某些软件供应商出于疏忽而试图保护他的创作,那也不过是蛇油。

请注意彼得回答中的最后一段。但是,我想再想一想。从某种意义上讲,它是独一无二的,因此真正值得保护的软件绝对不应该基于对客户的骚扰来保护(==大多数复制保护方案)。相反,请考虑IDA Pro的示例,它当然可以被认为是非常独特的软件。他们给软件加水印,以便能够追踪泄漏特定捆绑软件的人员。当然,正如我们在ESET泄漏中所看到的那样,这并不总是有帮助,但会产生威慑作用。例如,饼干集团获得副本的可能性较小。

#2 楼

问题描述

让我们做一些假设。软件分为功能组件。许可证适用于该软件包中的功能组件。许可可以基于时间,版本或多种用途,即,您可以在设定的时间点之前使用该功能,可以购买的版本的功能或该版本的一些次要衍生品,或者可以使用次数。您必须解决两种主要情况,攻击者无法访问许可证,而攻击者却可以访问。

没有许可证的攻击者

第一种情况是攻击者无法访问您产品的有效许可证的地方。这个问题很容易解决。只需为软件的每个功能许可部分分配一个单独的加密密钥。使用为每个功能部件设计的加密密钥对其进行加密。现在,您可以分发软件,而不必担心有人能够解密未授权的功能,因为您永远不会将其发送给密钥。

具有许可证的攻击者

第二个当您的攻击者拥有对您的软件的有效许可证但攻击者想要重新分发其许可功能或延长许可时间时,这种情况就很难解决。

现在您需要可靠的时间源,可以通过以下方法解决:


将公钥嵌入到加密狗中,并让加密狗发出随机挑战,必须转发到时间服务器。时间服务器通过签名当前时间和质询并将其返回给客户端进行响应,然后客户端将其发送给密钥,然后密钥更新其内部时钟并进行解锁。
根据时间更新内部时钟已插入计算机。 USB端口插入后始终为您的加密狗供电。
根据从其连接到的计算机上安装的驱动程序发送的时间戳更新内部时钟。仅允许时间戳向前。如果时间源是提供签名时间戳的远程受信任的时间服务器,则仅允许时间倒退。

如果许可证基于版本,则您实际上受到了攻击,由于无法访问许可证,因此您对功能部件的密钥派生功能将功能部件的标识符及其版本作为输入。

密钥分配

因此一旦每个密钥都有单独的密钥许可证的功能单元基本上成为分配对称密钥的问题,以便可以将它们发送到加密狗。通常,这是通过在加密狗中嵌入对称对称密钥,然后使用共享密钥对许可证解密密钥进行加密,然后对加密的密钥更新文件进行签名来完成的。然后将已签名的更新文件传递到加密狗,该加密狗会验证更新的签名,使用共享的对称密钥解密新密钥,并将其存储以供以后使用。

密钥存储

所有加密狗都必须有权访问安全存储,以便存储许可证解密密钥,到期时间戳等。通常,这不能在外部闪存或EEPROM上实现。如果是,则必须使用ASIC或FPGA内部的密钥对其进行加密,并对其进行签名,以使其无法更改。

纯文本漏洞

一旦用户获得了您的功能组件的许可证,即使他无法提取您的密钥,他也可以使用您的加密狗解密该功能组件。这导致他可能会提取您的所有纯文本并将解密调用替换为对提取的纯文本的直接调用的问题。一些加密狗通过将处理器嵌入到加密狗中来解决此问题。然后将功能组件加密发送到加密狗,加密狗解密该组件并在内部执行它。这意味着加密狗实际上变成了黑匣子,发送给加密狗的功能组件需要单独进行探测以发现其属性。

Oracles

很多加密狗都是加密和解密oracle会导致选择密文攻击的潜在问题,例如最近的填充oracle攻击。

侧面通道攻击

除了oracle问题外,您还有很多其他问题到目前为止所有众所周知的旁道攻击都值得关注。您还需要关注任何潜在但未发现的副渠道。

解封装

请注意,世界上有许多公司专门从事分拆和审核工作安全筹码。一些最知名的公司可能是flylogic的Chris Tarnovsky,现在是IOActive和chipworks的一部分。这种攻击的成本很高,但根据目标的价值可能是真正的威胁。如果今天只有少数(可能没有一种)加密狗能够承受这种高预算攻击者,这将令我感到惊讶。

他们工作吗

给定一个基于强加密的加密狗,它不是基于时间的,因为您不能基于时间使加密密钥失效,时间也不是绝对的,没有任何旁通道攻击并可以在芯片上执行代码,是的,它将使发现相当于探测黑匣子的基础代码。这些加密狗发生的大多数中断都是基于硬件许可系统的被许可者在实现方面的弱点,因为实施者通常不熟悉逆向工程和计算机安全性。

另外,请务必意识到,即使是大多数逻辑都在面向Internet的服务器上实现的软件也已被破坏,只需探测黑匣子并根据客户端代码期望推断出服务器端代码即可。始终为您的应用程序被破坏做好准备,并制定计划以应对发生的情况。

#3 楼

正如Peter指出的那样,查看加密狗如何用于安全性是识别攻击媒介的起点。在大多数情况下,实现加密狗安全性的软件开发人员是最薄弱的地方。

过去,当我使用软件狗测试软件时,我曾使用过诸如ProcessMonitor和RegShot之类的免费工具来识别可以克服的简单漏洞加密狗安全性的错误实现。

我看过一种软件,该软件在启动时会检查加密狗的存在,然后继续运行,而无需使用加密狗,直到重新启动为止。在这些情况下,只要未将加密狗插入系统中,使用OllyDbg修补应用程序就不难告诉应用程序具有完整功能。

我也看到了允许用户可以单击软件中的按钮,因此用户不必插入加密狗。该软件声称是一种额外的功能,例如“记住我”选项。 RegShot和ProcessMonitor向我展示了一个文件,其中包含一些信息,并且只要该文件存在于预期的文件夹中,我就可以在没有加密狗的情况下在多个系统上运行该软件。

因为有人在使用, AES或硬件加密狗或任何XYZ并不意味着它们是安全的。重要的是,假设安全措施中现在已知(或0天漏洞),他们是否以正确的方式实施这些安全措施。