什么是数字签名?
从根本上来说,数字签名是一种确保电子文档(电子邮件、电子表格、文本文件等)真实可靠的方法。“真实可靠”的含义是:您知道文档是谁创建的,并且知道在作者创建该文档之后,没有人对其进行过任何形式的修改。
数字签名依靠某些类型的加密技术来验证身份。加密是指获得一台计算机要发送给另一台计算机的所有数据,然后将其编码为只有后者才能解码的形式的过程。身份验证是指验证相关信息是来自可信来源的过程。这两个过程共同实现数字签名的功能。
要对人员或计算机上的信息进行身份验证,有多种方法:
- 密码——用户名和密码的使用是最常见的身份验证方式。您在计算机提示下输入用户名和密码。计算机根据安全文件对二者进行核对并确认。如果用户名或密码中有一个不匹配,计算机就不允许您进行进一步访问。
- 校验和——校验和也许是确保数据正确的最古老的方法之一,它也提供了一种身份验证方式,因为无效的校验和表明数据受到了某种形式的损坏。有两种方法可以用来确定校验和。假设数据包的校验和为1个字节长,意味着校验和可以包含的最大值为255。如果该数据包中其他字节的和是255或更小,则校验和将包含那个具体的值。但如果其他字节的和大于255,则校验和为总值除以256后得到的余数。请看以下示例:
字节 1 |
字节 2 |
字节 3 |
字节 4 |
字节 5 |
字节 6 |
字节 7 |
字节 8 |
总值 |
校验和 |
212 |
232 |
54 |
135 |
244 |
15 |
179 |
80 |
1151 |
127 |
1151÷256=4.496(四舍五入为4) 4x256=1024 1151-1024=127
- CRC(循环冗余码校验)——CRC在概念上与校验和类似,但它使用多项式除法来确定CRC的值,其长度通常为16或32位。CRC的优势在于它非常精确。如果有一个位不正确,CRC值就不匹配。在防止传输过程中发生随机错误方面,校验和与CRC都比较有效,但在防止针对数据的有意攻击方面,则几乎没有提供任何保护。下面讲到的加密技术则安全得多。
- 私钥加密——私钥的含义,是指每台计算机都有一个密钥(代码),在它通过网络向另一台计算机发送信息包之前,可以使用该密钥对信息包进行加密。私钥要求您知道哪些计算机将互相通信,并在每台计算机上安装相应的密钥。私钥加密的原理与密码相同,即两台计算机必须互相认识,才能对信息进行解码。密码提供了对消息进行解码的密钥。可以这样理解:您创建了一条要发送给朋友的编码消息,其中每个字母都用它之后的第二个字母来代替。这样“A”变成了“C”,“B”变成了“D”。您告诉自己信任的朋友,代码是“后移两位”。这样您的朋友在收到消息时就可以进行解码,从而得知消息的内容。任何其他获得该消息的人看到的只是无意义的内容。
- 公钥加密——公钥加密使用公钥和私钥相结合的方法。私钥只有您的计算机知道,而公钥由您的计算机告诉将要进行安全通信的所有计算机。要对加密消息进行解码时,计算机必须使用发送消息的计算机所提供的公钥和它自己的私钥。
密钥基于散列值。这个值是使用散列算法,根据一个基本输入数字计算出来的。关于散列值的重要一点是,如果不知道用于创建散列值的数据,则几乎不可能推导出原始输入数字。下面是一个简单示例:
输入数字 |
散列算法 |
散列值 |
10667 |
输入数字乘以143 |
1525381 |
毫无疑问,要判断出值1525381是10667和143相乘的结果会是多么困难。但如果知道乘数是143,那么便可以很轻松地计算出值10667。公钥加密远比这个示例复杂得多,但基本概念是一样的。公钥通常使用复杂的算法和非常大的散列值来进行加密,例如使用40位甚至128位的数字。128位的数字可能有2128种不同组合,这个组合数相当于270万个奥运会标准泳池中水分子的数量。即便是您能够想像出的最小的水滴,其中也包含数十亿个水分子!
- 数字证书——要大规模(例如一个安全的Web服务器所需的规模)实施公钥加密,就需要另外的方法,而这正是数字证书的用途所在。从根本上说,数字证书是一小段信息,它声明Web服务器受到名为证书颁发机构的独立来源的信任。证书颁发机构扮演两台计算机都信任的中间人的角色。它确认每台计算机都确实具有所表明的身份,然后为每台计算机提供另一台计算机的公钥。
数字签名标准(DSS)是基于一种使用数字签名算法(DSA)的公钥加密方法。DSS是经过美国政府批准的数字签名格式。DSA算法由一个私钥和一个公钥组成,该私钥只有文档的发送者(签名者)知道。公钥包括四个部分,您可在此页上了解其相关信息。 |