Mac OS X代码签名和可执行验证

时间:2012-12-04 03:08:42

标签: xcode macos code-signing pki

我在使用USB加密狗的垂直市场Mac应用程序上工作,以确保用户已付费。它足够昂贵,并且在足够的需求下,“黑帽子”试图破解加密狗方案,因此应用程序在运行时检查可执行文件和关键资源文件,如果某些东西被篡改,程序将无法运行。

随着基于PKI(公钥基础设施)的代码签名在Mac世界中变得越来越普遍,我正在考虑转而使用它来进行运行时验证,这会产生很好的副作用,使Gatekeeper感到高兴。

然而,Apple的兴趣与我的非常不同。他们的重点是让用户满意,因此如果应用程序的签名不正确,Mac OS X只会询问用户是否要运行它。我的重点是阻止破解者,所以如果我的应用程序签名不正确,我根本不希望它做任何对最终用户有用的事情。

所以我希望我的应用程序能够在运行时使用Apple的签名验证自己的可执行文件和资源。

另外,根据我所读到的提供Mac OS X的库进行验证,他们只是对验证可执行文件的请求给出“是”或“否”的答案。令我感到震惊的是,它很容易受到“黑帽”攻击的影响 - 例如,人们可以简单地将Apple的工具替换为总是说“是的,这是有效的”,无论是在系统目录中还是通过更改这些工具的搜索路径。所以我认为在我的应用程序中构建完整的签名验证代码可能是一个好主意。

所以我有几个问题:

  1. 哪些PKI库/ API可用于让应用验证自己的可执行文件和使用Apple的代码签名系统签署的资源?
  2. 这些库是否有可用的源代码?
  3. 我的安全问题是关于使用Apple随Mac OS X提供的PKI库有效,还是比我想的更安全?
  4. 有没有人有这种他们愿意分享的东西的经验?还有其他问题或提示吗?
  5. 提前感谢您提供任何帮助。

1 个答案:

答案 0 :(得分:1)

为了回答上面的#1和#2,Apple已经开源了用于创建和验证数字签名的代码,如libsecurity_codesigning。因此,开发人员可以将其构建到他们的应用程序中,以便让它验证自己的签名。

或者,MacOS的这个库的版本可以被应用程序使用 - 但API是私有的,所以这是一个问题。有brief discussion at this link