代码签名证书为软件开发商提供了一个理想的解决方案,使得软件开发商能对其
软件代码进行
数字签名。
名词解释
要想实现代码签名必须首先获得
数字证书才能使用这些功能。并且代码签名证书针对不同的平台,其代码证书品种也不尽相同,因此使用者最好事先咨询正规的代码签名证书的颁发机构,可以针对不同平台的
代码签名应用,提供不同的代码签名证书产品及应用解决方案。
从用户角度,可以通过代码签名服务鉴别软件的发布者及软件在传输过程中是否被篡改。如果某软件在用户计算机上执行后造成恶性后果,由于代码签名服务的可审计性,用户可依法向软件发布者索取赔偿,将很好的制止软件开发者发布攻击性代码的行为。
从软件开发者和Web管理者的角度,利用代码签名的抗伪造性,可为其商标和产品建立一定信誉。利用可信代码服务,一方面开发者可借助代码签名获取更高级别权限的API,设计各种功能强大的控件和
桌面应用程序来创建出丰富多彩的页面,另一方面用户也可以理性地选择所需下载的软件包。并且利用
代码签名技术,还可以大大减少客户端防护软件误报病毒或恶意程序的可能性,使用户在多次成功下载并运行具有代码签名的软件后,和开发者间的信任关系得到巩固。
从客户端安全防护的角度,经过代码签名认证过的程序能够获得更高的系统API授权。一些硬件驱动文件或
64位操作系统内核驱动文件也要求必须首先经过代码签名才能够在客户端上正确的加载执行。
防护白名单
代码签名证书的安全防护软件白名单
相信很多软件开发者都会面临一些困扰,那就是刚开发好的程序或为程序升级新版本后,发布到网上提供用户下载的时候却被第三方安全防护软件误报拦截了。对于第三方安全防护软件的误报拦截问题,代码签名证书也可以起到一定作用,避免误报情况的产生。
各大安全防护软件厂商也会基于证书颁发机构的认证结果,为已经添加有效数字签名的代码提升运行等级。代码签名证书用户在获取到签名证书后,还可以与安全防护软件厂商协商,依据其代码签名证书获取安全防护软件厂商的白名单免查杀特权。但安全防护软件的白名单并不是万能的。如果一旦发现并核实白名单中的数字证书被用于签名恶意代码,数字证书即会被列入到黑名单当中。使用该证书签名的所有程序都不再受第三方安全防护软件信任。同时,安全防护软件厂商可以配合公安机关进行举证,由证书颁发机构提供颁发证书时获取的
第三方认证的证书持有人信息,追查到代码签名证书的真实持有者,使得通过法律途径追究恶意软件发布者的刑事责任成为可能。
功能实现原理
代码签名的基础是
PKI安全体系。代码签名证书由签名证书
私钥和
公钥证书两部分组成。私钥用于代码的签名,
公钥用于私钥签名的验证和证书持有者的身份识别。
申请数字证书
发布者开发出代码
2. 发布者开发出代码;借助
代码签名工具,发布者将使用MD5或SHA算法产生代码的
哈希值,然后用代码签名证书
私钥对该哈希值签名,从而产生一个包含代码签名和软件发布者的签名证书的软件包;
运行环境访问到该软件包
3. 用户的运行环境访问到该软件包,并检验软件发布者的
代码签名数字证书的有效性。操作系统或浏览器通过可信根证书列表验证代码签名证书的有效性,确认发布者身份可信,软件未被篡改。
使用代码签名
4. 用户的运行环境使用
代码签名数字证书中含有的公钥解密被签名的
哈希值;
新产生一个原代码的哈希值
5. 用户的运行环境使用同样的算法新产生一个原代码的
哈希值;
用户的运行环境比较两个哈希值
6. 用户的运行环境比较两个
哈希值。如果相同,将发出通知声明代码已验证通过。所以用户可以相信该代码确实由证书拥有者发布,并且未经篡改。
整个过程对用户完全透明,用户将可以看到软件发布者提示信息,并可以选择是否信任该软件发布者。在选择信任软件发布者之后,运行所有该软件发布者签名的程序时将可以不再收到任何提示信息。
证书种类
不同
数字认证公司提供的
代码签名分类不同,以下分类按照代码签名证书产品类型划分。
(1) 代码签名数字 ID(Code Signing Digital IDs): 主要包括:微软代码签名证书 (Microsoft Authenticode Digital ID) :
数字签名.exe, .dll, .cab, .msi, .
ocx, .sys, .cat, .
vbs;
火狐控件(FireFox Extension)签名证书:数字签名 .xpi; Java 代码签名证书 (Sun Java Signing Digital ID) :数字签名 Sun J2SE/J2EE 的 Java Applet 文件,以及数字签名 J2ME MIDlet Suite 文件,支持业界最多型号和最多品牌的手机。
Office宏代码签名证书 (Microsoft® Office and VBA):数字签名Office VBA 及宏代码;Adobe AIR代码签名证书 (Adobe® AIR™);
数字签名 .AIR
桌面应用程序;Shockwave代码签名证书 (Macromedia Shockwave®);数字签名使用Macromedia® Director® 8 Shockwave Studio创建的应用程序。
驱动程序等,提交已经签名的软件给微软测试认证,还包括微软 Windows Hardware Quality Labs (
WHQL) testing programs(Windows 硬件质量实验室
测试计划) 认证。用户在向微软提交注册申请前,必须首先获取一张微软代码签名证书 (Microsoft Authenticode Digital ID)。从Windows Vista开始,微软在x64位的系统上强制推行
数字签名,没有经过WHDL和RDS认证并数字签名的硬件
驱动程序将无法在Vista x64版本上成功安装。在后续的Vista版本上,微软会逐步加强对数字签名的要求,最终要求所有的应用程序必须经过签名才能在Windows系统上运行。
(3)微软移动代码签名证书 (Authenticated Content Signing for Microsoft Windows Mobile)(简称ACS,现已更名为Code Signing Account for Microsoft® Mobile2Market):支持使用微软 Windows Mobile 的 SmartPhone 和 Pocket PC 的
移动终端操作系统的移动应用软件的非特权签名和特权签名,以确保移动下载的
软件代码在移动终端 ( 如智能手机和 PDA) 的安全。
(4) Brew代码签名证书 (Authentic Document IDs for BREW) :用于
数字签名高通公司推出的无线
二进制无线互联网(5) Symbian代码签名证书 (Symbian Siged) :用于数字签名 Symbian S60 操作系统的智能手机下的 sis、sisx 格式文件。
(6) Adobe PDF代码签名证书 (True Credentials® for Adobe) :用于数字签名 Adobe PDF 文档。
(7) Apple 代码签名证书
Code Signing Certificate for Apple
可以让软件开发商使用此签名证书在证书有效期内不限数量的对 Apple操作系统上运行的代码进行
数字签名。
VeriSign 作为国际顶级的认证机构(CA),支持以上所有产品并且
兼容性最好。其中微软徽标认证证书、微软移动代码签名证书、
Brew代码签名证书是 VeriSign 专有的产品。 VeriSign 国内的代理机构是
天威诚信。
其他代码签名证书产品则可以有更多的选择余地。
支持代码
类型的代码签名证书,支持的签名代码有所不同,这里以单位代码签名证书(多用途版)为例,列出其支持的代码签名;
1、Windows内核代码 .sys, .cat 和其他代码 .exe, .dll, .cab, .ocx( ActiveX )等文件数字签名
2、XML 文件数字签名
3、Adobe AIR的打包文件 .air,.airi等文件数字签名
4、Silverlight应用加密签名(.xap)
5、.js文件(JavaScript)数字签名
6、微软Office VBA宏数字签名
7、火狐浏览器插件.XPI文件数字签名
8、Apple Mac 应用程序数字签名
算法升级
微软自2016年1月1日起更新代码签名证书验签策略(Windows Enforcement of Authenticode Code Signing and Timestamping),取消对SHA1算法证书在软件数字签名验签中的支持,并在2017年1月1日起在Windows 10中取消对sha1算法时间戳摘要的支持。
任何在2016年1月1日之前使用SHA1算法证书签名的文件(签名需含时间戳),在Windows 7及以上版本操作系统中的验签可正常支持到2020年1月1号。
2016年1月1号之后,使用SHA1算法证书签名的应用模式文件,在Windows 7及以上版本操作系统中不被支持。
2017年1月1日之后,使用sha1时间戳摘要的签名(/td sha1),在Windows 10操作系统应用模式文件中不被支持。因RFC3161新版sha256时间戳在Windows 7 以下版本系统中不受支持,2017年1月1日前的单签名文件,仍推荐使用旧版时间戳及sha1算法时间戳摘要(/t)。
软件开发者应充分了解微软对代码签名证书算法的最新要求,根据应用情况灵活使用sha1证书单签名、sha256证书单签名或双签名方式,确保文件数字签名的的兼容性不受影响。
使用好处
开发商所发行的代码程序或内容若通过
代码签名验证可提升软件的下载、采用率和发行率。
减少代码程序及内容出现错误讯息和安全性警告,建立品牌的信任关系。
防止使用者下载到含有恶意档案的代码程序及内容。
终端使用者透过互联网和行动网络下载、安装代码程序和内容时,由系统跳出开发者的信息,大幅提高安全性。
确保
终端用户知道该软件是合法的,且该代码自发行以来没有被篡改过。
代码签名证书可消除 Internet Explorer 以及 Windows 操作系统中弹出的「不明发行商」。