为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

14 数字签名

2012-10-20 1页 ppt 760KB 47阅读

用户头像

is_592957

暂无简介

举报
14 数字签名null第十四章第十四章数字签名 null前述章节讲解了数据的加密保护,其目的是将要保护的信息变成伪装信息,只有合法的接收者才能从中得到真实的信息。加密保护实际上防止的是被动攻击。在这这种攻击模式下,攻击者并不干预通信流量,只是尝试从中提取有用的信息。最简单的例子就是敌方通过窃听来获取代理程序中存储并传递的敏感信息。 实际上,网络上的安全问题不仅仅只限于被动攻击,大量的主动攻击也是网络安全上需要考虑的重要问题。在公共网络环境下,这类攻击模式的普遍方法就是将原数据报删除,或用伪造的数据取代。另外,身份伪装也可看作一种主动攻击,攻...
14 数字签名
null第十四章第十四章数字签名 null前述章节讲解了数据的加密保护,其目的是将要保护的信息变成伪装信息,只有合法的接收者才能从中得到真实的信息。加密保护实际上防止的是被动攻击。在这这种攻击模式下,攻击者并不干预通信流量,只是尝试从中提取有用的信息。最简单的例子就是敌方通过窃听来获取代理程序中存储并传递的敏感信息。 实际上,网络上的安全问题不仅仅只限于被动攻击,大量的主动攻击也是网络安全上需要考虑的重要问题。在公共网络环境下,这类攻击模式的普遍方法就是将原数据报删除,或用伪造的数据取代。另外,身份伪装也可看作一种主动攻击,攻击者伪装成系统中的一个合法参与者A,截取并处理发给A的数据。null因此,除了加密解密外,还需要对对信息来源的鉴别、保证信息的完整和不可否认等功能进行保障,而这些功能通常都是可以通过数字签名实现。 本章首先讲解了数字签名的原理。不同的语言对于数字签名的实现原理基本相同,本章以Java语言为例,实现了数字签名算法算法。对于其他语言实现数字签名,读者可以参考其他文献。 本章最后通过一些案例,解释了数字签名能够解决篡改和抵赖问题的原理。 14.1 数字签名概述14.1 数字签名概述14.1.1 数字签名的应用14.1.1 数字签名的应用数字签名主要也应用于数据安全。通过前几章的学习,我们首先就几种常见的信息安全问题作一些描述: 1:窃听:特指交易内容被敌方截获,使敌方得知一些不应该传播出去的秘密。属于被动攻击。 由于网络环境的特殊性,敌方的窃听一般不能防止,唯一的方法就是让敌方窃听之后无法得知原来的内容,一般的解决方法是加密。关于加密解密算法,在前述章节中已经叙述。 2:篡改:指内容被人恶意修改或者删除之后用恶意内容伪装,使得收方得到的内容不是来自发方的初衷。 3:抵赖:指以下两种情况,一是收方收到信息,然后否认收到发过来的信息;另一种是发方发送有害信息,然后否认发送过该信息。 后面说的第2种和第3种以上两种攻击属于主动攻击。篡改和抵赖问题主要用数字签名来解决。null数字签名是指使用密码算法,对待发的数据(报文或票证等)进行加密处理,生成一段数据摘要信息附在原文上一起发送。这种信息类似于现实中的签名或印章;接收方对其进行验证,判断原文真伪。 数字签名可以提供完整性保护和不可否认服务。其中,完整性保护主要针对解决篡改问题,不可否认服务主要针对解决抵赖性问题。 一般说来,传统数字签名的过程中,主要先采用单向散列算法(如前面章节所说的MD5算法),对原文信息进行加密压缩形成消息摘要,原文的任何变化都会使消息摘要发生改变;然后,对消息摘要用非对称加密算法(如前文所述的RSA算法)进行加密。在验证阶段,收方将信息用单向加密算法计算出消息摘要,然后将收到的消息摘要进行解密,比较两个消息摘要是否相同,来判断信息是否可靠。详细过程,下一节将有叙述。14.1.2 数字签名的过程14.1.2 数字签名的过程在数字签名方面,传统情况下,应用比较广泛的是: 利用RSA算法计算签名; 数字签名DSS。 null两种方法实现原理类似。其中,利用RSA方法进行数字签名,得到了广泛的应用。该方法的过程如下: 1:利用一定的算法(如MD5),将要签名的报文作为一个散列函数的输入,产生一个定长的安全散列码,即消息摘要。 2:使用发送方的私有密钥对这个消息摘要进行加密,形成签名。 3:将报文和签名传送出去。 4:接收方接收报文,并根据报文产生一个消息摘要,同时使用发方的公开密钥对签名进行解密。 5:如果接收方计算得出的消息摘要,和它解密后的签名互相匹配,那么签名就是有效的。 6:因为只有发送方知道私有密钥,并对签名进行了加密,因此只有发方才能产生有效的签名。null具体过程如下图所示: null如前所述,数字签名算法一般分为两个步骤: 产生消息摘要; 生成数字签名。 null首先,系统根据一定的单向加密算法计算出消息的消息摘要。注意,此处的“单向加密算法”也称“单向散列函数”,单项加密算法在前面的章节进行了基本,本章中将对其进行原理上的介绍。 使用单向散列函数的目的,是将任意长度的消息压缩成为某一固定长度的消息摘要。单向散列函数又称为单向Hash函数,它不是加密算法,却在密码学中有着广泛的应用,与各种加密算法有着密切的关系。它的模型为: h=H(M) 其中,M是待加工的消息,可以为任意长度;H为单向散列算法,h作为生成的消息摘要,具有固定的长度,并且和M的长度无关。一个好的单向散列算法需要H具有以下的单向性质: 给定H和M,很容易计算h; 给定h和H,很难计算M,甚至得不到M的任何消息; 给定H,要找两个不同的M1和M2,使得H(M1)= H(M2)在计算上是不可行的。 null在实际应用中还要求单向散列函数具有如下特点: 单向散列函数能够处理任意长度的消息(至少是在实际应用中可能碰到的长度的消息),其生成的消息摘要长度具有固定的大小; 对同一个消息反复执行该函数总得到相同的消息摘要单向散列函数生成的消息摘要是不可预见的,消息摘要看起来和原始数据没有任何关系; 原始数据的任何微小变化都会对生成的消息摘要产生很大的影响; 具有不可逆性,即通过生成的消息摘要得到原始数据的任何信息在计算上是完全不可行的。 null目前在密码学上已经设计出了大量的单向散列函数,如:RabinHash、MerkleHash方案、NHash算法、MD2算法、MD4算法、MD5算法和SHA等。通过考察发现,实际系统中用得最多的单向散列函数是消息摘要算法MD5(Message Digest5)和安全散列算法SHA(Security Hash Algorithm)。它们具有相似的原理和实现方法,关于它们在单向加密中的应用,前述章节已经叙述。14.2 实现数字签名14.2 实现数字签名null如前所述,数字签名过程中,在产生签名阶段,发送方至少要进行以下的计算: 由消息M利用单向散列函数产生消息摘要H(M); 将产生的消息摘要H(M)用发方的私有密钥进行加密。 在验证签名阶段,接收方也要进行以下的计算: 由消息M利用单向散列函数产生消息摘要H(M); 将收到的消息摘要H(M)用发送方公开密钥进行解密; 两者进行比较,不一致则发出否决消息,否则接受信息。 14.2.1 用RSA实现数字签名14.2.1 用RSA实现数字签名P14_01.java是用Java语言实现将一个字符串“郭克华_安全编程技术”,利用RSA和SHA算法进行数字签名并且验证的过程,同样,由于本书不是讲解某种语言本身,所以在这里略过Java加密体系的讲解,在代码中如果出现新的API,读者可以参考Java文档。 运行,界面如下: 在不同的情况下,签名的内容是不一样的,因为生成的密钥不一样。 14.2.2 用DSA实现数字签名14.2.2 用DSA实现数字签名在第12章我们介绍了DSA,数字签名算法(Digital Signature Algorithm ,DSA),它也是一种非对称加密算法,被美国NIST作为数字签名标准(DigitalSignature Standard, DSS)。但是应用于数字签名中。DSA算法比RSA产生密钥的速度要快一些,且安全性与RSA差不多。DSA的理论基础,主要依赖于整数有限域离散对数难题。关于其实现过程,读者可以参考相关文献。 P12_02.java是用Java语言实现将一个字符串“郭克华_安全编程技术”,利用DSA算法进行数字签名并且验证的过程,同样,由于本书不是讲解某种语言本身,所以在这里略过Java加密体系的讲解,在代码中如果出现新的API,读者可以参考Java文档。null运行,效果如下: 14.3 利用数字签名解决实际问题14.3 利用数字签名解决实际问题null本节用一些简单的案例来阐述数字签名的作用。在该案例中,用到了数据加密和数字签名。值得一提的是,本节为了描述方便,已经将问题进行了简化。实际操作的过程中,比较复杂。14.3.1 解决篡改问题14.3.1 解决篡改问题篡改指内容被敌方人恶意修改或者删除之后用恶意内容伪装,使得收方得到的内容不是来自发方的原有内容。信息篡改属于主动攻击的一种。在用户发出信息的过程之中,敌方可能会对用户发出的信息进行修改或者删除,让对方得到的不是原有的信息。比如在发送方给接收方发出某个命令的时候敌方可能会将命令进行修改,改成其他的命令,让接收方做出一些对双方交易有害的事情。 篡改无法完全避免,但为安全起见,我们必须能够判断一段消息是否被篡改。当得知信息被篡改时,能够作出丢弃的决定。null可以通过数字签名方法来避免篡改。一般思路如下: 1:将信息生成数字签名,并将数字签名用接收方的公钥加密。 2:接收方用自己的私钥解密数字签名,然后将消息再生成一次签名,将两个签名作比较,得出结论。null本节利用Java语言模拟这个过程。首先,发送方生成一个公钥一个私钥,分别保存为文件:public.key和private.key;任给一个信息文件info.txt,发送方用自己的private.key生成数字签名(已加密),将签名存放于signature.sgn;接收方用发送方的public.key验证数字签名。 本例使用DSA算法。首先,发送方生成一个公钥一个私钥,分别保存为文件:public.key和private.key。 代码如P14_03_Sender_KeyGen.java。null运行,生成两个文件:private.key和public.key。 然后,对信息文件info.txt,发送方用自己的private.key生成数字签名,将签名存放于signature.sgn;代码如P14_03_Sender_SgnGen.java。 运行,生成签名文件:signature.sgn。 最后接收方用发送方的public.key验证数字签名,代码如P14_03_Receiver_Verify.javanull如果文件info.txt没有被篡改,运行,显示: 如果将info.txt稍加改动(如增加一个回车),再运行,则显示: 14.3.2 解决抵赖问题14.3.2 解决抵赖问题抵赖指以下两种情况: 收方收到信息,然后否认收到发过来的信息; 发方发送有害信息,然后否认发送过该信息。 抵赖问题也是网络安全中的一个重要问题。此活动属于主动攻击的一种,它的特点主要体现在发送方和接收方中有一方充当敌方的角色。这个活动和篡改活动的区别就在于,焦点集中在知道敌方身份的情况下,怎样用证据证明它曾经对网络安全进行过攻击。这种活动的危害主要表现在: null当发送方充当敌方时,发送方传输给接收方一个信息,然后否认传送过此信息,如某恶意发送方向另一方传输一个消息,该消息中包含了一些重大举措,当接收方执行这些举措之后,对自己造成了巨大的伤害,追究发送方的责任,但发送方否认发过此信息; 当接收方充当敌方的时候,收到了发送方法送过来的信息,但否认此消息来自于发送方,如发送方向接收方发送了网上银行的一些转账手续,接收方接受了转账之后,却声称自己从来没有收到这个信息。使得发送方的利益受到损害。null传统网络安全协议中的抵赖问题一般就是通过数字签名解决的。下面阐述其解决方法: 1:发送方为敌方的情况。 当发送方给接收方发送了消息,造成接收方的损害,发送方对消息发送的事实进行抵赖的时候,接收方可以通过如下手段进行利益保护: 接收方向公正机构提交发送方发送过的消息和附加的数字签名; 公正机构用消息的内容生成单向的消息摘要,然后将数字签名用发送方的公开密钥进行解密,与其进行核对; 如果消息果真是发送方发送的话,两者应该一样; 由于数字签名是利用发送方的私有密钥,对消息摘要进行加密之后得到的结果,而私有密钥值在理论上讲,只有发送方自己知道,发送方就不能对此问题进行抵赖了。 提示提示如果此时发送方还要抵赖,他就必须证明: 对于同一条消息,他人用别的密钥加密之后的值,为什么和用它自己的密钥加密之后的值会一样。即:对于同一段内容,用不同的密钥加密之后的密文是相同的。或者证明: 他人用别的密钥加密的内容,用自己的密钥解密为什么会一样。即:相同的一段加密消息,用不同的密钥匙解密之后的内容会一样。 以上两件事情的证明本身就是和密码体制的初衷相违背的,因此也是无法证明的,发送方就根本无法抵赖曾经发送过有害的内容。null2:接收方为敌方的情况。 当接收方收到了发送方发送的消息,这个消息对接收方有利,接收方用这个消息进行一些有利活动之后,声称此消息不是来自于发送方,继续要求发送方发送消息给他,目的是为了自己的利益,造成发送方的损害。接收方对消息接受的事实进行抵赖的时候,发送方可以用如下方法保护自己的利益: 向公证机构提交接收方接收到的消息和附加的数字签名; 与第一种情况一样,公证机构用消息的内容生成单向的消息摘要,然后将数字签名用发送方的公开密钥进行解密,与其进行核对; 如果消息果真是发方发送的话,两者应该一样。 提示提示同样,数字签名是利用发送方的私有密钥对消息摘要进行加密之后得到的结果,而私有密钥值只有发送方自己知道。如果公正机构算出来的消息摘要和将数字签名解密之后的消息摘要相等的话,接收方就不能对此问题进行抵赖了。如果它要抵赖,它也就要必须证明上一种情况中提到的两个问题,和密码体制的初衷相违背的,实际上也是不可能的。null如果接收方属于敌方,还有一种情况,当接收方为了陷害某个特定的发送方,伪造一个有害的消息,造成一定的危害之后,声称这个消息来自于这个特定的发送方,造成发送方的损害。此时,发送方可以通过如下方法维护自己的利益: 向公正机构提交接收方接收到的消息和附加的数字签名; 与第一种情况一样,公正机构用消息的内容生成单向的消息摘要,然后将数字签名用发送方的公开密钥进行解密,与其进行核对; 如果消息果真不是发方发送的,那么两者应该不一样。 提示提示这样,接收方就无法陷害发送方了,否则,它就必须证明: 一段消息,用某个人的私有密钥加密之后,然后用它的公开密钥解密得到的数据无法还原成明文。这个问题当然也是不可能得到证明的。小结小结本章结合数据的加密保护,针对信息安全中的另一种攻击:主动攻击进行了讲解,详细阐述了数字签名的作用。 首先讲解了数字签名的原理,由于不同的语言对于数字签名的实现原理基本相同,本章以Java语言为例,实现了数字签名算法算法。最后,本章最后通过一些案例,解释了数字签名能够解决篡改和抵赖问题的原理。练习练习1:许多语言都支持数字签名算法,本章主要用Java语言进行了讲解。 (1) 选择Java语言以外的任意一种语言,实现基于DES的数字签名。 (2) 用C语言进行底层的签名。 2:抵赖问题是网络上的一种比较常见的问题。 (1) 用数字签名方法解决发送方抵赖问题。 (2) 用数字签名方法解决接收方抵赖问题。 3:数字签名是目前一个比较活跃的研究领域。查找相关文献: (1) 传统的数字签名有何缺陷? (2) 了解目前关于数字签名的研究现状。null4:真实网络上,如果发生纠纷,数字签名必须经过仲裁。 (1) 数字签名由谁来仲裁? (2) 仲裁的过程是怎样的? 5:数字证书也是在网络上用得较多的一种认证方法。 (1) 查阅相关文献,了解数字证书。 (2) 数字签名和数字证书有何关系?
/
本文档为【14 数字签名】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索