安全性和保密性设计---数字签名与数字水印

数字签名与数字水印 

    散列函数是一种公开的数学函数。散列函数运算的输入信息也可叫作报文。散列函数运算后所得到的结果叫作散列码或者叫作消息摘要。散列函数具有如下一些特点:

    (1)不同内容的报文具有不同的散列码,而一旦原始报文有任何改变,哪怕改变一位信息,则通过散列函数计算后得到的散列码也将完全不同。这样,这个散列码就好比是这个报文所特有的“指纹”。

    (2)散列函数是单向的,即求解某一个报文的散列码非常容易,但是根据散列码来倒推原始报文是非常困难的。

    (3)对于任何一个报文,无法预知它的散列码。

    (4)散列码具有固定的长度,不管原始报文的长度如何,通过散列函数运算后的散列码都具有一样的长度。例如,MD5(Message Digest Algorithm 5,消息摘要算法第 5 个版本)散列算法的散列码长度为 128 位,并且不管是对一部百科全书,还是对某个人的工资进行 MD5 散列运算,得到的散列码长度都是 128 位。

    由于散列函数具有这些特征,因此散列函数可以用来检测报文的可靠性。接收者对收到的报文用与发送者相同的散列函数进行运算,如果得到与发送者相同的散列码,则可以认为报文没有被篡改,否则,报文就是不可信的。

    常见的散列函数有 MD5、SHA、HMAC 等。MD5 是一种非常著名的散列算法,已经成为国际标准,具有很好的安全性能。MD5 算法在对输入的报文进行计算时,是以 512 位为单位进行处理的,结果生成一个 128 位长的消息摘要;SHA、HMAC 等算法都是对任意长度的报文以 512 位为单位进行处理,最后得出一个 160 位的消息摘要。

数字签名

    对于计算机系统中传送、存储的重要文件、数据、信息等,一般需要有某种方式来确认其真实性,即接收者能够确认自己得到的信息确实是由该信息所声称的发送者发出的,而不是由非法入侵者伪造、冒充发出的,并且还要能够保证信息在传送、存储中没有被恶意篡改,这样这份信息才能真实地反映发送方的意图。另外,对于发送方来说,如果发出一份信息,还必须有一定的措施阻止其否认自己发出信息的行为,即不可否认性。

    只有做到以上几点,一个信息传送、存储系统才能够安全、可靠,其上所传送、存储的信息才是真实的、值得相信的。

    举例来说,互有贸易往来的买卖双方之间通过计算机系统进行贸易,卖方通过计算机系统给买方发出一张电子报价单,买方收到后,擅自更改了收到的单价,并声称是卖方发出的,而且据此下订单,这就是篡改信息。显然安全的系统应该能够阻止这种行为。

   要实现上述安全的系统,就离不开数字签名技术。

    数字签名主要由两个算法组成:签名算法和验证算法。通过使用签名算法签名一个消息,所得到的签名能够通过一个验证算法来验证签名的真实性和有效性。

    所以数字签名技术的大致过程就是:信息的发送方对信息利用自己的私钥进行签名,接着发送方把这个签名和信息一起发送给接收方。接收方收到信息后利用发送方的公钥来对其中的数字签名进行验证,确认其合法性。

   目前已经有大量的数字签名算法,例如,RSA 数字签名算法、EI Gamal、Fiat-Shamir、 Guillon-Oucsquerrter、DSS(Digital Signature Standard,数字签名标准)、DSA(Digital Signature Algorithm,数字签名算法)、椭圆曲线等。

    1.RSA 结合 MD5 数字签名

    前面讲过,RSA 公钥加密技术本身就可以用来实现数字签名。但是仅仅使用公钥加密算法进行数字签名的运算量比较大,尤其是要传送的信息量比较大时,速度会更加慢。显然,直接用这种方法进行数字签名并不是很好的选择。

    而散列算法(例如,MD5 算法)就有很好的特性,它能对每一个不同长度的信息产生相互不同的、独特的、简短的消息摘要。这个消息摘要可以看作这个信息特有的“指纹”,因而非常适合用作数字签名。

    通过散列算法对原始数据进行散列,再对散列码进行公钥加密就可以很好地实现数字签名。它的特点是:它代表了文件的特征,具有唯一性。只要文件发生哪怕一位数据的改变,或者签名者有任何差别,数字签名的值也将随之而发生改变;不同的文件和签名者得到的是不同的数字签名。

    RSA 结合 MD5 数字签名的主要过程是:信息的发送方通过对信息进行散列运算生成一个消息摘要,接着发送方用自己的私钥对这个消息摘要进行加密,就形成发送方的数字签名。然后,把这个数字签名作为信息的附件和信息一起发送给信息的接收方。接收方收到信息后,首先对收到的信息进行与发送者相同的散列运算得到一个消息摘要,接着再用发送方的公钥来对信息中附加的数字签名进行解密得到发送方计算出的散列码。如果两个散列码相同,那么接收方就能确认该信息和数字签名是由发送方发出的。通过数字签名能够实现对原始信息完整性的鉴别和发送方发送信息的不可抵赖性。

    下面结合一个例子,看一看 RSA 结合 MD5 数字签名的具体步骤:

    (1)信息发送者 A 要向 B 发送一份信息,A 先按双方约定的散列算法对该信息进行散列运算,得到一个该信息特有的消息摘要 H,从前面所述可以知道,只要改动信息中任何一位,重新计算出的消息摘要值就会与原先的值不相符。这样就保证了信息的不可更改性。

    (2)接着把该消息摘要用 A 自己的私钥加密,得到 A 对该信息的数字签名 S。

    (3)然后 A 把信息原文与数字签名 S 一起发送给 B。

    (4)当 B 收到后,先用 A 的公钥对数字签名 S 解密得到 A 的消息摘要 H。

    (5)再用同样的散列算法对收到的信息进行散列运算,得到消息摘要 H'。

    (6)比较 H 与 H',如相等则说明信息确实来自它所声称的发送者 A。

    在传输过程中,如有攻击者对文件进行了篡改,但他并不知道发送方的私人密钥,因此,接收方解密得到的数字签名 H 与经过计算后的数字签名 H'必然不同。这就提供了一个安全的确认发送方身份的办法。

    当然,以上例子中,对传送的信息是以明文出现的,不具有保密意义。实际应用中,还需要对信息本身运用适当的保密措施。

    RSA 用于数字签名的一个重要的特点是能够证实信息发送方的身份及电子文件的可靠性和完整性,它对于发送方和被发送的信息都是独一无二的,具有可验证性和不可否认的权威性特点;另一个重要的特点是它通过在计算机之间交换数字证书就可以确定当事者就是他们所宣称的人。 

    2.数字签名标准

    DSS 是美国国家标准与技术学会的数字签名标准,自 1991 年提出以来又经过广泛的修改。DSS 为计算和验证数字签名指定了一个数字签名算法——DSA。DSA 是 El Gamal 数字签名算法的一个改进版本,它通过选择较小规格的参数减少数字签名的数据量,从而减少了存储空间和传输带宽。

    DSS 中指定 SHA 作为其散列算法,它对原始信息进行运算后产生 160 位的消息摘要,然后 DSS  把这一消息摘要与一个用作这个特殊签名的随机数作为输入送到数字签名算法中,经过运算生成数字签名。

    该数字签名函数还依赖于发送方的私钥 SK 和一个对许多通信方都公开的由重要的公钥集合组成的全局公钥。

    接收方在收到消息摘要和签名后将其作为验证函数的输入。验证函数还依赖于全局公钥和与发送方的私钥相匹配的公钥 PK,这样只有发送方用其自己的私钥才能产生有效的签名。

    数字签名作为一项重要的鉴别技术,近年来越来越受到人们的重视,在政府、军事、金融、安全等领域得到广泛的运用。通过数字签名可以有效地保证数据的完整性,防止第三方伪造或发送方的抵赖。

    2004 年 8 月 28 日,十届全国人大常委会第十一次会议表决通过了电子签名法。这部

法律规定,可靠的电子签名与手写签名或者盖章具有同等的法律效力,并于 2005 年 4 月 1 日起施行。这部法律将对我国电子商务、电子政务等计算机信息系统的发展起到极其重要的促进作用。

数字信封

    数字信封是公钥密码体制在实际中的一个应用,是用加密技术来保证只有规定的特定收信人才能阅读通信的内容。

    在数字信封中,信息发送方采用对称密钥来加密信息内容,然后将此对称密钥用接收方的公开密钥来加密(这部分称数字信封),之后,将它和加密后的信息一起发送给接收方,接收方先用相应的私有密钥打开数字信封,得到对称密钥,然后使用对称密钥解开加密信息。这种技术的安全性相当高。

你可能感兴趣的:(计算机组成原理,安全)