什么是代码签名
译自:https://www.encryptionconsulting.com/education-center/what-is-code-signing/
当从互联网下载软件时,消费者必须始终警惕第三方伪装成软件提供商。有了像代码签名这样的资源,软件就可以确保它来自正确的来源。代码签名是一种软件开发人员或分发者对发送的文件进行数字签名的操作,以确保用户收到的软件符合创建者的要求。签名可以证明代码没有被篡改或从原始形式修改。
代码签名的重要性
随着能够从互联网上下载如此多的软件,代码签名对于软件开发人员和分销商来说变得越来越重要。攻击者可以很容易地将自己伪装成合法来源,在受害者的计算机上植入恶意软件。只要用户只下载操作系统认为安全的软件,代码签名就可以确保这些类型的攻击不会发生。如今,当软件被下载到计算机上时,操作系统会检查通过代码签名创建的数字证书,以确保试图安装的软件的安全。如果找不到数字证书,则会提醒用户注意这一事实,并提示用户停止或继续安装。
代码签名是如何工作的?
代码签名有几个步骤,从创建一个唯一的密钥对开始。创建的密钥对是一个公私密钥对,因为代码签名使用公钥加密。一旦创建了密钥对,公钥就会被发送到受信任的证书颁发机构(CA),CA通过将公钥和数字签名的代码签名证书一起返回给软件开发人员来验证密钥是否属于所有者。CA是一个高度可信的实体,负责签署和生成数字证书。CA返回的带有附加公钥的证书确认了开发人员及其创建的任何软件的可信度。
现在已经返回了公钥和数字代码签名证书,软件的代码通过散列函数运行。散列函数是一种单向函数,它将放入函数中的文本转换为无法反转的任意值的混合。这提供了一个值,以便在将数据发送给消费者时进行比较。然后用私钥对输出或摘要进行加密。与公钥相比,私钥用于加密的原因是,开发人员希望任何人都能读取消息,但没有人能够篡改它。摘要、代码签名证书和哈希函数现在被组合成一个签名块,并放入软件中,然后发送给消费者。
当收到软件时,消费者的计算机首先检查代码签名证书的真实性。一旦确认了真实性,就用最初创建的密钥对的公钥对摘要进行解密。然后在软件的代码上使用散列函数,并将生成的摘要与开发人员发送的摘要进行比较。如果摘要匹配,则该软件可以安全安装。
代码签名的优点
代码签名提供了许多好处,包括下面列出的好处。
通过代码签名,用户可以信任他们正在下载的软件,不必担心将恶意软件下载到他们的计算机或移动设备上。这种身份验证起到了双向通道的作用,代码签名促进了交易所双方的信任。用户不仅可以信任发送者,而且开发人员也可以信任他们的软件到达了正确的位置,并且没有被滥用。
由于许多最大的值得信赖的移动和网络应用商店,如IOS应用商店或谷歌的Play商店,都需要代码签名,开发人员可以通过更多的平台分发他们的软件。
代码签名的弱点
代码签名也有几个弱点,包括:
在代码签名过程开始时创建的私钥管理不当可能会导致发送的软件不安全。如果合法的私钥被盗,那么攻击者可以用私钥对他们的恶意软件进行编码,这将告诉用户该软件可以安全使用,即使它不是。
威胁参与者可以获得可信证书,但阻止大多数攻击者的是需要提供身份信息才能获得证书。如果使用合法证书分发恶意软件,则可以识别并阻止开发人员。
如果用户允许安装软件,即使操作系统说它没有代码签名,代码签名也会变得毫无用处。
为了防止这些弱点,应该遵循一些最佳做法。
为了保护加密密钥,应使用硬件安全模块或HSM。HSM是一种专门的、高度可信的物理设备。它是一台执行所有主要加密操作的网络计算机,包括加密、解密、身份验证、密钥管理、密钥交换等。它们具有防篡改性,并使用极其安全的加密操作。
与HSM一样,最小权限原则也应用于密钥,以确保只有需要密钥的用户才能访问密钥。
最后,代码签名时应始终小心。仅下载并安装由受信任CA签名的代码软件。
谁使用代码签名?
代码签名用于任何商业包装和分布式软件。受信任的应用程序商店,如IOS应用商店或Google Play商店,需要对要在其平台上分发的软件进行代码签名。很多消费者不会下载软件,除非它使用代码签名,所以即使不是知名平台的开发者也会实现代码签名。有几种不同类型的证书可供使用,这取决于所分发的软件使用的系统。桌面证书包括Microsoft、Java、Microsoft Office、VBA和Adobe AI。移动证书的示例包括Windows Phone、Windows Phone Private Enterprise、Java Verified、Android和Brew。
代码签名软件的一些示例包括Windows应用程序、Windows软件更新、苹果软件、Microsoft Office VBA对象和宏、.jar、.air和.airi文件以及任何类型的可执行文件。对于IOS应用程序,代码签名使用Xcode。要将软件上传到Itunes商店,用户必须具有有效的Apple Developer ID和有效的证书或配置文件,然后Xcode才能对软件进行签名。要集成应用程序,开发人员需要使用开发证书。为了在任何设备上运行应用程序,必须使用分发证书发送应用程序并对其进行测试。其他平台,如Windows,只需要使用受信任的证书颁发机构。C#和Visual Studio也提供了自己的代码签名解决方案。Encryption Consulting提供自己的代码签名解决方案,称为CodeSign Secure。
原文始发于微信公众号(老烦的草根安全观):什么是代码签名
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论