售前咨询
技术支持
渠道合作

重新哈希:对代码签名另一种认识(上)

互联网已经深深代入人类的生活,与我们的日常生活(衣、食、住、行)息息相关。互联网已经成为了不可缺失的一部分。同理,代码在互联网组成的重要部分,互联网在客户端呈现的一切,都是依赖来代码开发的。如用户的界面、所有的应用程序、网络实现的功能类似智能家居……而且这些程序还不定期的更新,更新的工作也离不开代码。

但这些代码来源于哪里?是谁编写的?代码是否正确完整的?代码是否安全?……带着多个问题来认识代码签名证书。

代码签名证书是帮助客户端用户正确认识代码的一种解决方案。通过神奇的数学原理,代码签名将标识添加到应用程序开发的代码。用户就可以通过代码签名了解开发的代码信息,给用户提供一个安全保证,如:代码是由谁开发的,是否被非法篡改过。本文将围绕代码签名证书展开,介绍代码签名证书的工作原理,为什么需要签署代码,以及如何使用代码签名。

代码开发普遍存在的问题

作为一名网络分发软件的开发人员,终端用户遍布全球各地。但在互联网的大千世界里,客户端用户下载的软件代码是否与开发者的原始代码一致呢?这是一个值得深入探究的问题。

当开发者对外发布一个未签名的软件代码,一旦发生下载站点获取该软件代码副本,就可捆绑广告软件再对外发布。或恶意者将该软件植入恶意软件,然后以免费的形式发布。当该软件是一个常用的软件,拥有大量的客户群体,恶意软件商可能会伪造一个诱惑以及切换文件名来隐藏恶意软件。

其实以上的事件在日常客户端都有遇到过。如大量用户常用到的软件Photoshop,Microsoft Office和Adobe Acrobat,经常因为“免费版”、“破解版”这些词诱导终端用户下载。结果这些版本常常是附带一些推广软件,甚至是恶意软件导致客户端中毒。

为了保护用户的安全,维护开发者自主的权益,软件开发者应考虑如何避免这些情况。而代码签名证书通过将代码与身份相关联来解决此问题。当开发运行签名代码时,用户可清晰的看到开发者对应信息。如果开发者是可信的,用户就可以放心的运行该程序。

代码签名是做什么的?

代码签名证书不签署任何代码,包括.PHP文件或IF语句。代码签名证书签署可执行文件和脚本。如:.exe、.app、.msi、.cab、.dll、.jar……通过签署这些文件,提供加密保护防止修改,让用户正确识别软件开发者。

签名意味着什么?代码签名证书与SSL证书一样,采用公钥加密,提供可靠身份验证。即:

1、每个代码签名证书都有唯一的一个私钥,仅为代码签名证书的拥有者保存,当代码“签名”时,使用唯一的私钥将数字签名附加到可执行脚本。

2、私钥为每个可执行文件生成唯一的签名,因为密钥签署的是一个“哈希”的可执行文件。哈希是一种数学工具,用于指定的数据字符串中,获得唯一的值,本案例是一个文件。防止他人将有效签名附加到一个可执行文件,并应用于非法软件。当计算机检查签名时,可以通过哈希值不同,检测出签名不是用于相同的代码。

注意:签名和加密两者是不同的,两者是同等重要,并且都广泛应用与网络安全,常被捆绑使用。加密是另一种数学原理,涉及修改数据,除目标接收者之外的任何人都不能读取其内容。同时代码签名证书并没有加密功能。

3、当用户运行可执行文件时,其使用的系统(Windows,iOS,Java等)将对签名进行检测,并将结果显示给用户。用户就可以了解软件的来源,以及做出正确的决定。

无论是开发者还是终端用户,都必须正确认识代码签名的功能:提供身份认证。当用户运行程序前必须做出是否信任该开发者身份的决定。代码签名并不能确保该程序正常工作,或该软件是否是恶意软件(也有恶意软件开发者选择代码签名,骗取用户对恶意软件开发者的信任)。代码签名只能保证客户端软件代码与开发者发布的代码是完全一致的。

上一篇:

下一篇:

相关文章