一 安全信息公告
一些信息安全方面的组织会在其网站上发布一些关于安全漏洞的警告,那么这些警告信息是否真的是该组织发布的呢?我们如何确认发布这些信息的网站没有被第三方篡改呢?
在这样的情况下,就可以使用数字签名,即该组织可以对警告信息的文件施加数字签名,这样一来世界上所有人就都可以验证警告信息的发布者是否合法。
消息发布的目的是尽量让更多的人知道,因此我们没有必要对信息进行加密,但是必须排除有人恶意伪装成该组织来发布假消息的风险。因此,我们不加密消息,而只是对消息加上数字签名,这种对明文消息所施加的签名,一般称为明文签名。
例如:
二 软件下载
当我们从网上下载软件,我们需要判断所下载的软件是否可以安全运行,因为下载的软件有可能被主动攻击这Mallory篡改,从而执行一些恶意的操作。例如,明明是下载一个游戏软件,结果却可能是一个会删除硬盘上所有数据的程序,又或者可能是一个会将带有病毒邮件发送给所有联系人的程序。
为了防止出现这样的问题,软件的作者可以对软件加上数字签名,而我们只要在下载之后验证数字签名,就可以识别出软件是否遭到主动攻击者Mallory的篡改。
一种名为带签名的Applet的软件就是一个具体的例子。这种软件是用Java编写的,并加上了作者的签名,而浏览器会在下载之后对签名进行验证。
不过,数字签名只是能够检测软件是否被篡改过,而不能保证软件本身不会做出恶意的行为。如果软件作者本身具有恶意的话,那么再怎么加上数字签名也是无法防范这种风险的。
三 公钥证书
在验证数字签名时我们需要合法的公钥,那么怎么才知道自己得到的公钥是否合法呢?我们可以将公钥当做消息,对它加上数字签名。像这样对公钥施加数字签名所得到的就是公钥证书。
四 SSL/TLS
SSL/TLS在认证服务器身份是否合法时会使用服务器证书,它就是加上了数字签名的服务器公钥。相对地,服务器为了对客户端(用户)进行认证也会使用客户端证书。