FAQ Hero
代码签名信任

什么是
代码签名?

什么是代码签名?

代码签名是将数字签名应用于软件二进制文件或文件的流程。此数字签名验证软件作者或发布者的身份,并验证文件自签名以来是否未被更改或篡改。代码签名向软件接收者表明代码可以受到信任,而且代码签名在打击入侵系统或数据的恶意企图方面发挥着重要作用。

代码签名的用例包括内部或外部使用的软件、补丁或修复程序、测试、IoT设备产品开发、计算环境和移动应用程序。除了代码和软件之外,代码签名还适用于应用程序、固件、文件、消息、XML、脚本、容器和图像。

代码签名如何发挥作用?

与其他PKI技术一样,代码签名涉及公钥/私钥对、证书颁发机构和数字证书。在发布者对软件进行签名时,他们会创建一个绑定包,其中包含发布者的软件、代码签名证书和数字签名。代码签名证书包含发布者的身份和公钥,以及CA的签名,用于确认CA已验证此身份。数字签名是使用发布者私钥的软件的已签名哈希。在交付软件时,用户代理将检查证书的有效性和完整性(确定自签名以来软件是否被更改)。它使用证书中的公钥来显示数字签名中的哈希。然后,它将数字签名哈希与最近计算的软件哈希进行比较。如果哈希匹配,那么客户或用户就得以确认软件没有被篡改。私钥管理是代码签名中的一个重要安全要素。如果密钥被盗或管理不当,那么网络犯罪分子可以使用密钥来签署恶意代码,并将其作为更新传送给开发人员或客户系统。

为什么我们需要代码签名?

Java和Microsoft等主要软件平台要求代码签名,以防止恶意软件传播。对代码进行签名也是安全方面的最佳实践,这样客户或用户就不会下载被篡改的代码或来自未知来源的代码。它将来自贵组织的代码或软件与被包装为看似来自贵组织的代码区分开来。此外,如果没有为软件签名,那么软件被提供给公众之后,用户就可能会遇到安全警告标签。如果代码是为内部使用而构建并开发,代码签名可促进问责制和控制。

您可以签署哪些类型的软件?

可以对任何类型的二进制文件或文件进行签名,包括:

• 可从网站下载的软件应用程序

• 内部的IT应用程序

• 移动应用程序

• XML文件

• 脚本

• 软件图像

• 容器

• 驱动程序和实用程序

• 固件

代码签名涉及哪些步骤?

首先,软件发布者生成一个公钥/私钥对。然后,他们通过向证书颁发机构(CA)提交证书签名请求(CSR)及其公钥来获得代码签名证书。CA验证发布者的身份并对证书申请进行验证。如果验证成功,CA将颁发代码签名证书。证书包括发布者的身份、公钥和CA的签名。CA的签名很重要,因为它作为受信任的第三方证明了证书持有者的身份。代码签名证书不仅确认发布者的身份,还确认软件的完整性。在发布者对软件进行签名时,他们会创建一个绑定包,其中包含软件、代码签名证书和数字签名。

数字签名还需要以下步骤: 

  1. 使用哈希算法生成软件的哈希或加密唯一表示。
  2. 使用发布者的私钥和签名算法对哈希进行签名。

代码签名可以手动进行,或将其作为持续集成/持续交付(CI/CD)流程等软件开发生命周期的一部分来自动执行。