Microsoft Authenticode 技术
Microsoft 公司
最终用户需要代码验证的必要性
今日的Web站点提供给用户的不仅是丰富的体验,而且还有可能包括被无意下载的恶意代码。随着Internet上的不断增长的活跃性内容,用户必须经常确定是否从Internet上下载代码。但是,在将代码下载到他们的计算机之前,最终用户无法知道这部分程序的功能。
与实际的零售环境不同,Internet上的软件不会做标记或者被简缩包装。因此,最终用户无法确认Internet一段程序的发布者。而且如果代码已经被篡改他们也无法知道。因此,最终用户在通过Internet下载Java applets、插件(plug-ins)程序、Microsoft® ActiveX™ 控件以及其它可执行代码时都将要冒一定的风险。
Internet Explorer 3.0以后使用代码验证™(Authenticode™)技术帮助最终用户处理这个问题。在用户将软件下载到他们的个人电脑之前,代码验证技术将确认签名软件的发布者并检验该软件是否已被篡改。这样,最终用户可以对是否下载代码作出一个更为全面的决定。
怎样为我的代码签名
要使用代码验证技术,需要下载ActiveX SDK得到有关工具,并需要下载所需要的更深层次的技术信息。"The Six Steps to Signing Your Code"(对代码设置签名的六个步骤)一文说明了如何从VeriSign等认证授权机构得到你的软件发布者认证,以及如何使用ActiveX SDK中提供的工具对你的代码设置签名并进行测试。下面的内容从更高层次对代码签名过程进行了说明。
申请和得到软件发布认证
你需要从一个支持代码验证™技术的CA(Certificate Authority,认证授权)组织申请和得到一个个人或商业软件发布者(Individual /Commercial Software Publisher)认证。 "Digital Certificates for Authenticode"一文提供了有关软件发布者认证登记过程的更为详细的信息。VeriSign现在已能够提供用于软件发布者的数字IDsSM技术(Digital IDsSM for Software Publishers)。
你必须在该申请过程中生成一对密钥并向CA提供有关的必要信息。这些信息应包括你的姓名、地址、公共密钥以及其它相关信息。相关信息取决于你申请的是个人还是商业软件发布者认证。CA将根据材料检验你的信任度等指标。
当确定你满足其认证标准后,CA将生成一个满足工业标准X.509认证格式3.0扩展版本的软件发布者认证书(Software Publisher Certificate)。该认证书确定了你的身份并包含着你的公共密钥。它将保存在CA以便查看并被复制一份通过电子邮件返回给你。你应该回顾一下认证书的内容。在接收认证后,你要在所有带有私人密钥签名的发布软件中包含一份认证书的拷贝。
商业开发人员预计两周内就可以得到对他们申请的回复。商业软件发布者所能得到的认证数目是没有限制的,它帮助你确定能够得到认证的用户以及如何对代码进行签名和分发。
签名和分发你的软件
现在你可以开始对软件设置签名并在Internet上进行分发。对代码签名包括下面的几个步骤:
对可执行代码进行一个单向散列(one-way hash)函数并生成一个定长摘要
使用一个私人密钥对摘要进行加密
将加密的摘要与ISV(独立软件开发商)的认证和信用度合成为一个“签名块(signature block)”结构
将该签名块嵌入到可执行代码的文件格式中
当用户从Internet上下载代码时,浏览器或客户端应用程序将使用一个名为WinVerifyTrust的Win32®函数。该函数调用将解开签名块,验证认证书,并使用ISV 的公共密钥(已由CA验证)对摘要进行解密。然后它对可执行代码重新执行相同的散列函数(在签名块中说明)生成第二个摘要。如果得到的散列摘要不匹配,则或者代码已被更改,或者密钥不是一对匹配密钥。
根据用户所选择的选项,如果下载代码没有签名或在下载过程中已被篡改,Microsoft Internet Explorer 将会通知用户。这样的结果是用户会对将下载的软件作出更好的决定。"How to Use Authenticode"一文中对最终用户如何使用Internet Explorer处理签名代码提供了更为详细的说明。