14 数字签名.ppt
第十四章 数字签名 前述章节讲解了数据的加密保护,其目的是将要保护的信息变成伪装信息,只有合法的接收者才能从中得到真实的信息。加密保护实际上防止的是被动攻击。在这这种攻击模式下,攻击者并不干预通信流量,只是尝试从中提取有用的信息。最简单的例子就是敌方通过窃听来获取代理程序中存储并传递的敏感信息。 实际上,网络上的安全问题不仅仅只限于被动攻击,大量的主动攻击也是网络安全上需要考虑的重要问题。在公共网络环境下,这类攻击模式的普遍方法就是将原数据报删除,或用伪造的数据取代。另外,身份伪装也可看作一种主动攻击,攻击者伪装成系统中的一个合法参与者A,截取并处理发给A的数据。 因此,除了加密解密外,还需要对对信息来源的鉴别、保证信息的完整和不可否认等功能进行保障,而这些功能通常都是可以通过数字签名实现。 本章首先讲解了数字签名的原理。不同的语言对于数字签名的实现原理基本相同,本章以Java语言为例,实现了数字签名算法算法。对于其他语言实现数字签名,读者可以参考其他文献。 本章最后通过一些案例,解释了数字签名能够解决篡改和抵赖问题的原理。 14.1 数字签名概述 14.1.1 数字签名的应用 数字签名主要也应用于数据安全。通过前几章的学习,我们首先就几种常见的信息安全问题作一些描述: 1:窃听:特指交易内容被敌方截获,使敌方得知一些不应该传播出去的秘密。属于被动攻击。 由于网络环境的特殊性,敌方的窃听一般不能防止,唯一的方法就是让敌方窃听之后无法得知原来的内容,一般的解决方法是加密。关于加密解密算法,在前述章节中已经叙述。 2:篡改:指内容被人恶意修改或者删除之后用恶意内容伪装,使得收方得到的内容不是来自发方的初衷。 3:抵赖:指以下两种情况,一是收方收到信息,然后否认收到发过来的信息;另一种是发方发送有害信息,然后否认发送过该信息。 后面说的第2种和第3种以上两种攻击属于主动攻击。篡改和抵赖问题主要用数字签名来解决。 数字签名是指使用密码算法,对待发的数据(报文或票证等)进行加密处理,生成一段数据摘要信息附在原文上一起发送。这种信息类似于现实中的签名或印章;接收方对其进行验证,判断原文真伪。 数字签名可以提供完整性保护和不可否认服务。其中,完整性保护主要针对解决篡改问题,不可否认服务主要针对解决抵赖性问题。 一般说来,传统数字签名的过程中,主要先采用单向散列算法(如前面章节所说的MD5算法),对原文信息进行加密压缩形成消息摘要,原文的任何变化都会使消息摘要发生改变;然后,对消息摘要用非对称加密算法(如前文所述的RSA算法)进行加密。在验证阶段,收方将信息用单向加密算法计算出消息摘要,然后将收到的消息摘要进行解密,比较两个消息摘要是否相同,来判断信息是否可靠。详细过程,下一节将有叙述。 14.1.2 数字签名的过程 在数字签名方面,传统情况下,应用比较广泛的是: 利用RSA算法计算签名; 数字签名标准DSS。 两种方法实现原理类似。其中,利用RSA方法进行数字签名,得到了广泛的应用。该方法的过程如下: 1:利用一定的算法(如MD5),将要签名的报文作为一个散列函数的输入,产生一个定长的安全散列码,即消息摘要。 2:使用发送方的私有密钥对这个消息摘要进行加密,形成签名。 3:将报文和签名传送出去。 4:接收方接收报文,并根据报文产生一个消息摘要,同时使用发方的公开密钥对签名进行解密。 5:如果接收方计算得出的消息摘要,和它解密后的签名互相匹配,那么签名就是有效的。 6:因为只有发送方知道私有密钥,并对签名进行了加密,因此只有发方才能产生有效的签名。 具体过程如下图所示: 如前所述,数字签名算法一般分为两个步骤: 产生消息摘要; 生成数字签名。 首先,系统根据一定的单向加密算法计算出消息的消息摘要。注意,此处的“单向加密算法”也称“单向散列函数”,单项加密算法在前面的章节进行了基本,本章中将对其进行原理上的介绍。 使用单向散列函数的目的,是将任意长度的消息压缩成为某一固定长度的消息摘要。单向散列函数又称为单向Hash函数,它不是加密算法,却在密码学中有着广泛的应用,与各种加密算法有着密切的关系。它的模型为: h=H(M) 其中,M是待加工的消息,可以为任意长度;H为单向散列算法,h作为生成的消息摘要,具有固定的长度,并且和M的长度无关。一个好的单向散列算法需要H具有以下的单向性质: 给定H和M,很容易计算h; 给定h和H,很难计算M,甚至得不到M的任何消息; 给定H,要找两个不同的M1和M2,使得H(M1)= H(M2)在计算上是不可行的。 在实际应用中还要求单向散列函数具有如下特点: 单向散列函数能够处理任意长度的消息(至少是在实际应用中可能碰到的长度的消息),其生成的消息摘要长度具有固定的大小;
原创力文档

文档评论(0)