计算机网络安全技术第5章.ppt_第1页
计算机网络安全技术第5章.ppt_第2页
计算机网络安全技术第5章.ppt_第3页
计算机网络安全技术第5章.ppt_第4页
计算机网络安全技术第5章.ppt_第5页
已阅读5页,还剩66页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第五章 数字签名与认证 5.1 数字签名的基本概念 1 数字签名及其特点 在信息化社会,签名盖章和识别签名是一个重要的环节,例如,银行业务、电子资金传送、股票、证券交易、合同、协议的签字等,都需要签名。在计算机广泛应用的时代,应用密码学的方法实现数字签名,具有重要的理论意义,更具有重要实际意义。 假设发送方sender发送了一个签了名的信息message给收方receiver,那么sender的数字签名必须满足以下条件: 1) receiver能够证实sender对信息message的签名; 2) 任何人包括receiver在内,都不能伪造sender对message的签名; 3)假设sender否认对信息message的签名,可以通过仲裁解决sender和receiver之间的争议。,假定sender向receiver发送一则消息message ,采用公开密码系统的签名过程描述如下: 1)sender计算:c = Da(message)对message签名。Da 是加密变换,所使用的秘密密钥为sender所私有,任何人,包括receiver在内,由于不知道sender的秘密钥,所以不能伪造sender的签名。 2)receiver通过检查Ea( c )是否恢复message来验证sender的签名,Ea是Da 的逆变换,Ea变换中所使用的密钥是sender的公开钥。 3)如果sender和receiver之间发生争议,仲裁者可以用2)中的方法鉴定sender的签名。 例:sender表示一个银行电子支付系统的客户,receiver代表sender所在的银行。Receiver收到sender要求取款1000万日元的信息后,必须确定这个信息确实是由sender签名发出的。如果以后sender否认这一笔取款,receiver能够向仲裁者证实,这个取款单确实是由sender签署的。如果采用公开钥密码系统签名,密秘钥仅为sender所拥有,公开钥大家都知道,sender无法否认自己的签名。别人由于不知道秘密钥也无法冒名顶替sender的签名。,在上例中,由于银行和客户之间的业务信息往来应秘密进行,所以这个签名系统除要求生成签名和验证外,还要求加密。当然,和纸上签名一样,并非所有的数字签名系统都要求保密性。 以上介绍的数字签名方案属于所谓的“常规数字签名方案”这类方案具有如下特点: 1)签名者知道他签署的报文的内容。 2)任何人只要知道签名者的公开密钥,就可以在任何时候验证签名的真实性,不需要签名者的“同意”信号或来自其他方面的信号。 3)具有基于某种单向函数运算的安全性。 但在电子货币、电子商业和其他的网络安全通信的实用中,可能要放宽或加强上列特征中的一个或几个,或添加上其他安全性特征,以适应各种不同的需要。例如,在因特网上购买商品或服务,要向供应商或银行付款,顾客发出包含有他的银行账号或别的重要信息的付款报文,由收款者作出(电子)签名才能有效,但账号之类的信息又不宜泄露给签名者,以保证安全。这种情况,就要使用盲签名方案(Blind Signature Scheme)。,盲签名方案的工作原理是这样的:用户A有报文要求用户B签署,但不能让B知道关于报文m的任何信息。设(n,e)是B的公开密钥,(n,d)是他的秘密密钥。A用专用通信软件生成一个与n互质的随机数r,将m = re m mod n发送给B,这样,B收到的是被r“遮蔽”的m值,即m,它不能从m 获取有关m的信息。接着,B发回签名值 s = ( m ) d mod n = ( re m) d mod n = re md mod n,A对收到的s 计算 s(re)-1 mod n = md mod n,就得到了真正的来自于B的对m的签名 s = md mod n 可见,运用盲签名方案,A无法代替或冒充B的签名,而B则不知道他自己所签署的报文的真实内容。除了盲签名方案之外,还有其它几种专用数字签名方案:,“小组签名方案”(Group Signature Scheme):一个小组的任一成员可以签署文件,验证者可以确认签名来自该小组,但不知道是小组的哪一个成员签署了文件。 “一次性签名方案”(One time Signature Scheme):仅能签署单个报文的签名方案。 “不可抵赖签名方案”(Undeniable Signature Scheme):在签名和验证的常规成分之外添上“抵赖协议” (Disavowal Protocol),则仅在得到签名者许可信息后才能进行验证。 “带有数字时间标记系统 (Digital Timestamping System)的签名方案”:将不可篡改的时间信息纳入数字签名方案。 “多重签名”:使任意n个签名人产生的n个签名组成一个单一的签名。,2 数字指纹 仅用上述的数字签名是不够的,也是不实用的。因为数字签名不像纸上签名那样,签名和被签署的内容紧密联系在一起,因而不易被篡改。在数字签名中,如果sender的签名未与被签署的文件本身(message)相联系,就留下了篡改、冒充或抵赖的可能性。为了把那些千差万别报文(文件)和数字签名不可分割的结合在一起,即签名与其发送的信息紧密结合起来,需要设法从报文中提取一种确定格式的、符号性的摘要,称为“报文摘要”(message digest),更形象的一种说法是“数字指纹”(digital fingerprint),然后对它进行签名并发出。 可以说,真正的数字签名是信息发送者用其秘密密钥对从所传送的报文中提出的特征数据(或称数字指纹)进行RSA算法操作,以保证发信人无法抵赖曾发过该信息(即不可抵赖性),同时,也确保信息报文在传递过程中未被篡改(即完整性)。当信息接受者受到报文后,就可以用发送者的公开密钥对数字签名进行验证。,如果实体A要发送一个需要签署的报文给实体B,通信软件会调用某种报文摘要算法处理报文内容,得出一个数字指纹,然后用自己的秘密密钥将它加密,这才是真正的数字签名,将它同报文一并发送给B。B 接到报文和数字签名后,用A的公开密钥将数字签名解密,恢复出数字指纹。接着用A所用的一样的报文摘要算法处理报文内容,将算出的数字指纹和接受到的经解密的数字指纹比较,如果两者完全相同,则A的数字签名被B 验证成功,可以相信该报文是真实的,确实是发自于A。否则,报文可能来自别处,或被篡改过,有理由拒绝该报文。 用上述方法,别人也不难读取报文并验证数字签名,这在使用中是不妥当的。为使报文本身的内容不泄露给别人,A只要再添加一个操作步骤:用B 的公开密钥现将待发的报文加密,当然,B在验证数字签名无误后,要用其自己的秘密密钥解密,才能得到原始机密信息。,总之,“报文摘要”是一种防止信息被篡改的方法,在数字签名中有重要作用的摘要算法,即生成报文“数字指纹”的方法,近年来倍受关注,构成了现代密码学的一个重要侧面。它是通过一类特殊的散列函数(Hash)生成的,这些函数的输入可以是任意大小的信息,而输出是一个固定长度的摘要。这些摘要有这样一个性质,如果改变了信息中的任何内容,甚至只改变了一位,输出摘要也将会发生不可预测的改变,即输入信息的每一位都影响输出的摘要。对这些Hash函数的特殊要求是: 1) 接受的输入报文数据没有长度限制。 2) 对任何输入报文数据生成固定长度的摘要(数字指纹)输出。 3) 从报文能方便的算出摘要。 4) 难以对指定的摘要生成一个报文,而由该报文可以算出该指定的摘要,即不可逆性。 5) 两个不同的报文难以生成相同的摘要,即唯一性。,显然,上面前三点是实用性的要求,保证对长短不一的报文易于生成同样大小的“数字指纹”;后两点则是安全性的要求,是建立在某种单向函数的基础之上的。这样摘要算法从给定的文本块中产生的数字签名,可以有效地防止从一个签名中获取文本信息或改变文本信息内容的行为。显然,客户机和服务器必须使用相同的算法。 数字签名不同于手写签名:数字签名随文本的变化而变化,手写签名反映某个人个人特征,是不变的,数字签名与文本信息是不可分割的,而手写签名是附加在文本之后的,与文本信息是分离的。,5.2 数字签名算法DSA DSA(digital signature algorithm)算法是美国国家标准与技术学会(National Institute of Standards and Technology, NIST)于1994年公布的一个数字签名标准。DSA是一个公开钥数字签名算法,用于检验数据的完整性和一致性,第三方可以使用它来确认数字签名的合法性。 1DSA算法描述 DSA是Schnorr和ELG amal数字签名算法的变体,DSA算法使用的参数含义如下: p:L比特长的素数,其中L范围是从512比特到1024比特,并且要求是64的整数倍(在原始标准中p的尺寸固定的512比特,后来p的尺寸由NIST作了改变)。 q:160比特的数,并且要求是p-1的因子。 g:g h(p-1)/q mod p ,其中h是小于p-1的任意数,并且 h(p-1)/q mod p1 x:小于q的数 y:y gx mod p,前三个参数p、q、g是公开的,可以由一组网络用户共享。秘密密钥为x,公开密钥为y 。DSA算法还利用了单项哈希函数H(m),该标准还规定了安全哈希算法。 对信息m进行签名过程可以描述如下: 1) 发送方sender生成一个随机数k,并且kq 2) 发送方sender生成签名: r = (gk mod p) mod q s = ( k-1 ( H (m) + xr ) ) mod q 参数r和s是sender的签名,sender把这些信息发送给接收方receiver。 3) receiver通过计算验证这些签名: w = s-1 mod q u1 = ( H (m) w ) mod q u2 = ( r w ) mod q v = ( mod p )mod q 如果v = r,那么签名被证实。,1使用预先计算来加快速度 DSA的实现经常是通过预先计算来加快速度的。注意到r的值不取决于信息(由随机数k确定)。可以生成一串k值,然后再计算对应的r值,也可以计算k 对应的k-1。于是,当对消息签名时,可以用给定的r和k-1进行计算。 表 5.1给出了DSA样本软件速度。 表5.1 对于不同的模长度带有160比特指数的DSA速度 模长度 签名 验证 512比特 0.20秒 0.35秒 768比特 0.43秒 0.80秒 1024比特 0.57秒 1.27秒 如果p取512比特,DSA算法对长期安全强度是不够的,如果取1024比特,DSA算法对长期安全强度是足够的。,3DSA素数生成 密码学家Lentra和Haber指出DSA的一些模是容易攻破的。如果一些网络用户使用这样的模,那么他的签名就会被伪造。但是这些模很容易被检测,而且数目很少,以至于选择这样的模的概率很小。 NIST学会推荐生成两个素数p、q的一个特别的方法,其中q能整除p-1,p 长度为L比特,L范围是512比特到1024比特之间,并且是64的整数倍。素数q长度是160比特。令L-1 =160n + b,其中L是p的长度,n和b是两个数,b160。DSA素数生成步骤如下: 1) 选择至少有160比特的任意序列,称之为S。令g是S的比特长度; 2) 计算U = SHA(S)SHA(S+1) mod 2g,其中,SHA是安全哈希算法; 3) 设置U的最高有效位和最低有效位为1,形成q; 4) 检查q是否是素数; 5) 如果q不是素数,则转会步骤1; 6) 令C = 0且N = 2;,7) 对应k = 0,1,2,n,令Vk = SHA( ( S + N + k ) mod 2g ); 8) 令W是一个整数 W = V0 + 2160V1 + +2160(n-1)Vn-1 + 2160nVn( mod 2b) 并且令X = W + 2L+1; 9) 令p = X (X mod 2q) 1),要求p mod 2q = 1; 10) 如果p2L-1则转到步骤13; 11)检查p是否是素数; 12)如果p是素数,则转到步骤15; 13)令C = C +1且N = N +n +1; 14)如果C = 4096,则转到步骤1,否则转到步骤7; 15)存储S和C的值,用于生成p和q。 上式中,变量S称作“种子”,C称作“计数器”,N称作“偏移量”。,4用DSA的RSA加密 假设DSA算法由一个单独的函数调用实现: DSAsign(p,q,g,k,x,h,r,s) 给函数提供参数p,q,g,k,x,h,函数返回签名r,s。 使用RSA加密是比较容易的,设模为n,消息为m,公开密钥为e,调用 DSAsign(n,n,m,e,0,0,r,s) 那么返回的r值就是密文,令c = r。 相应的,用RSA实现解密也是比较容易的,如果c为密文,d为秘密密钥,调用 DSAsign(n,n,c,d,0,0,r,s) 那么返回的r值就是明文。,5DSA变体 为了突出不同方面的实现特性,下面介绍几种变体。 第一种变体使签名容易实现,它是通过使用户不去计算k-1来实现的,DSA变体的所有参数与DSA中参数相同。为了对信息m签名,发送方生成两个随机数k和d,且kq,d q。签名: r (gk mod p) mod q s ( ( H ( m ) + x r) d ) mod q t ( kd ) mod q receiver通过计算验证这些签名: w ( t/s ) mod q u1 ( H ( m ) w) mod q u2 (rw) mod q 如果,r ( mod p ) mod q那么签名被证实。,第三种DSA变体允许成批地验证。接收方成批地验证签名。如果都是有效的,则结束;如果某一个无效,接收方还得去找到这个签名。遗憾的是,这种方法不安全。签名者和验证者很容易生成一组伪造的签名来满足验证的标准。 第四种变体是DSA素数生成的变体,即 1) 选择至少有160比特的任意序列,称之为S。令g是S的比特长度; 2) 计算U = SHA( S ) SHA( S+1 ) mod 2g ),其中SHA是安全哈希算法; 3) 设置U的最高有效位及最低有效位均为1,形成q;,4) 检查q是否是素数; 5) 令p是q、S、C和SHA( S )的并置链接,C被设置成32比特,并且全为0; 6) p = p (p mod q )+1; 7) p = p + q; 8) 如果p中的C是0X7fffffff,那么转到步骤1; 9) 检查p是否是素数; 10)如果是合数,则转到步骤7。 关于这个变体,可以不必存储用于生成p和q的S和C的值,他们与p嵌在一起。对于应用,不需要大量的存储器,这一点很可贵。但这种模式是否降低了DSA的安全性,目前还不十分清楚。,4使用DSA生成、验证签名的实例 这里介绍使用Java语言实现使用DSA生成、验证签名的一个例子。 1) Java简介 谈论Internet和Intranet或网络设备而不谈论Java是不可能的。似乎一夜之间Java成为建立网络化应用的标准平台,Java是一种通用的、并发的、基于类的、面向对象的程序设计语言,它被设计得足够简单以便许多程序员很容易使用它。Java是一种生产性语言而不是研究性语言,Java使用垃圾收集器技术自动地进行内存管理,避免不安全因素。Java程序设计语言和历史上任何其他程序设计语言相比被采用得最快,并且Java技术被大部分公司认作一个关键技术来支持平台独立存取广泛的协作资源,无疑,Java在软件开发者中越来越受欢迎。它对Internet和Intranet应用的开发和使用起到了革新的作用。它提供了一种新的、令人兴奋的面向对象的网络设计模型。这种模型易于理解,使用这种模型很容易地进行程序设计。Java取得了巨大的成功的另一个方原因是:用Java写一次程序,测试一次,然后可以到处运行(write a program once, test it once, and then run it anywhere)而不需要考虑所用的硬件和操作系统。这可以实现在网络上软件、信息的共享和再利用。这个事实也蕴含一个潜在的优势:软件开发时间和成本的巨大节省。 Java.math.BigInteger提供了任意精度的大数的模代数运算,如最大公约数计算gcd(BigInteger),素数生成测试BigInteger(int bitLength,int certainty,Random rnd),余数计算,指数运算modPow(BigInteger),乘法逆元素运算modInverse(BigInteger)。使用这些方法进行程序设计是很方便的,这就是使用Java的优点之一。如果使用其他的程序设计语言,这些都要自己编程。 Java安全API提供加密、信息融合、密钥管理、认证、存取控制和数字签名功能,允许开发者进行底层和高层的安全应用。,2)使用DSA生成、验证签名的例子 使用Java安全API(应用程序接口)为数据生成一个签名,并验证签名是真实的。 步骤1 准备初始化程序结构 数字签名的方法是包括在java.security的软件包中的,所以要输入来自于这个软件包的一切。还要输入java.io软件包,因为它包括了输入文件数据所需要的方法。 import java.io *; import java.security.* 步骤2 生成公开密钥和秘密密钥 为能生成签名,必须做的第一件事就是生成密钥对:秘密密钥和对应的公开密钥。密钥由随机数生成器生成。秘密钥用于生成数字签名,对应的公开钥用于验证签名。密钥对是通过使用KeyPairGenerator类来生成的。 在这个例子中,为“DSA”算法生成一个公开的和秘密的密钥对。生成的密钥具有1024bit长度。,生成一个密钥对步骤如下: (1)创建一个密钥对生成器 为DSA签名算法生成密钥的第一步是获得一个密钥对对象。 KeyPairGenerator KeyGen = KeyPairGenerator.getInstance(“DSA”) (2)初始化密钥对生成器 所有的密钥对生成器都共享“强度”(strength)和“随机数源”(source of randomness)的概念。KeyPairGenerator类中的方法initialize有两个类型变量。对DSA密钥对生成器强度Srength设置为1024,随机数源必须是java中的Secure Random类的一个实例。简单的说,可使用Secure Random的空的构造函数,这将自动的生成一个随机数生成器所需要的一个“种子”(seed)值. KeyGen.initialize(1024,new SecureRandom ( );,(3)生成密钥对,并在KeyPair类的实例中存储密钥 KeyPair Pair = KeyGen.GenerateKeyPair( ) 步骤3 对数据进行签名 在生成秘密钥和公开钥之后,准备对数据进行签名。在这个实例中,将对文件中包括的数据进行签名,可以从命令行得到文件名。使用签名Signature类的例子生成数字签名。 其签名步骤描述如下: (1)得到一个签名对象(object) 通过使用下面的语句可以得到一个使用DSA算法生成和验证签名的签名对象。 Signature dsa = Signature.getInstance(“SHA/DSA”); 一般地,说明签名算法名称时,也应说明这个签名算法所使用的信息融合算法名称。DSA算法被定义使用SHA-1信息融合算法。SHA经常被参考成SHA-1算法。,(2)对签名对象进行初始化 在签名对象能用于签名(或验证)之前,必须将它进行初始化。签名的初始化方法需要秘密密钥,可以从前一步生成的密钥对中抽取和使用秘密钥。 PrivateKey Priv = Priv.getPrivate( ); Dsa.initSign(priv); (3)给签名对象提供要签名的数据 使用来自于文件的数据,对文件中的数据一次读一个byte。文件名是在第一个命令行中说明的。通过调用Updata方法把数据提供给签名对象。 FileInputStream fis = new FileInputStream(arg0); Byte b; While(fis,available( ) ! = 0) b = (byte)fis,read( ); dsa,updata(b); fis.close ( );,(4)生成签名 一旦把所有的数据提供给签名对象,就可以对数据生成数字签名: byte sig = dsa.sign( ); 步骤4 验证签名 如果已经具有了经过数字签名的数据,通过使用Java中的Secuity就可以验证这个签名的真实性。验证签名需要以下三项内容:数据、签名和对应签名所使用的秘密钥的公开钥。 使用签名Signature类的一个实例: Signature = Signature.GetInstance(“DSA”); (1)为了验证,首先对签名对象进行初始化 签名对象在签名时进行过初始化。现在,为了验证,必须将它进行初始化。用于验证的初始化方法需要一个公开钥,可以从步骤2产生的密钥对中抽取和使用公开钥。 PublicKey Pub = pair.getPublic( ); dsa.initVerify(pub);,(2)给签名对象提供要验证的数据 必须给签名对象提供要验证的数据。这个数据包括在文件中,文件名应是在第一个命令行变量中说明的。像步骤3一样,使用FileInputStream变量fis及byte变量b。 FileInputStream fis = new FileInputStream(args0); While(fis,available( )! = 0) b = (byte)fis.read( ); dsa,updata(b); fis.close( ); (3)验证签名 一旦给出了签了名的对象,就可以正是这个签名的正确性。 boolean verifies = dsa.verify(sig); System.out.println(“Signature verifies:”+verifies);,7. 报文摘要算法MD5简介 在数字签名中,报文摘要或数字指纹是保证信息不被篡改的重要技术。从上世纪80年代到90年代,Rivest开发了好几种专有的报文摘要算法,包括MD、MD2、MD5等。以1991年发表的MD5为例,是克服了MD4算法的安全缺陷的产物,“数字指纹”的大小是128比特。1994年发表的一个研究报告称,可以花费1000万美元去制造一套专门的机器,针对MD5搜索两个不同的报文具有相同的摘要,即“碰撞”现象,平均用24天才能找到一次碰撞。目前,MD5被认为仍是一个安全和最常用的报文摘要算法,它可由任意长度的数据计算出一个128比特的MD5值。 MD5是一种在加密软件中被用来单向变换用户口令和对信息签名的单向散列算法。一种单向散列的强度体现在他能把任意的输入随机化到什么程度并且能产生唯一的输出。对单向散列的直接攻击可以分为普通直接攻击和“生日”攻击。,对MD5的普通直接攻击。所谓直接攻击又叫野蛮攻击。攻击者为了找到一份和原始明文m散列结果相同的明文m,就是H ( m ) = H ( m )。普通直接攻击,顾名思义就是穷举可能的明文去产生一个和H (m)相同的散列结果。对MD5来说散列结果为128比特,就是说如果攻击者有一台每秒尝试1000000000条明文的机器需要计算约1022年。 对MD5的生日攻击。生日攻击实际上只是为了找到两条能产生同样散列结果的明文。记得那个有名的概率生日问题吗,在N 个人中至少有两个人的生日相同的概率是多少?所谓生日攻击实际上只是用概率来指导散列冲突的发现,对于MD5来说如果尝试264条明文,那么它们之间至少有一对发生冲突的概率是50%。仅此而已,对当今的科技能力来说,它是不可能的。,5.3 DSA算法的改进 1改进算法 DSA算法的安全性依赖于整数有限域上的离散对数问题的困难性,安全强度和速度均低于RSA算法,因此不少人对DSA算法提出了改进,下面介绍其中一种新的改进方案(NDSA)。 NDSA签名方案中的参数选取同DSA,即: p:L比特长的素数,其中L范围是从512比特到1024比特,并且要求是64的整数倍(在原始标准中p的尺寸固定的512比特,后来p的尺寸由NIST作了改变)。 q:160比特的数,并且要求是p-1的因子。 g:g h(p-1)/q mod p ,其中h是小于p-1的任意数, 并且h(p-1)/q mod p1 x:小于q的数 y:y gx mod p,前三个参数p、q、g是公开的,可以由一组网络用户共享。秘密密钥为x,公开密钥为y 。签名时,先产生一个随机数k,(kq) 签名方程:r = ( gk mod p) mod q s = (k- r H(m) x ) mod q 签名: (r,s)或(m;(r,s) 签名验证:为了验证(r,s)的正确性,验证者先计算 u1 = s mod q u2 = r H (m) mod q, 然后验证方程:r = 是否成立。成立则正确,否则不正确。,2改进算法(NDSA)的性能 NDSA具有以下性能: 1)无逆签名 由一上签名和签名验证过程可见,使用NDSA无论是进行签名还是进行签名验证都无需求逆,是一个真正的无逆签名算法。该算法既提高了签名速度,又提高了验证速度,这一特点是DSA和以有些其他算法所不及的。 2)多重签名 由于DSA的特殊结果,利用它无法建立多重签名方案,而在DSA算法基础上能过实现多重签名方案,它可使任意n个签名人产生的n个签名组合成一个单一的签名。叙述如下: 签名产生 设共有n个签名人Ui (i = 1,2,n)。每个签名人Ui计算 并将ci对所有签名人公开,因此每个签名人Ui可计算,并将ci对所有签名人公开,因此每个签名人Ui可计算 和 si = (ki rH(m)xi) mod q 即Ui关于m的签名为(ci,si) 多重签名 设某人为n个签名人和签名收方之间的中间人,称其为组合者C,每个签名人Ui (i = 1,2,n)都将其关于m的签名送给组合者C,当C 收到(ci,si)(i = 1,2,n)后,先计算: 和 在验证每个(ci,si)是否满足 (i = 1,2,n) 若对于所有的i 上式成立,则(r,s)便是Ui (i = 1,2,n)关于消息m的多重签名,C将(r,s)发送给接收方。,签名验证 签名接收方受到(r,s)后,先验证0 r q和0 s q是否成立,若成立,则计算: (其中yi为Ui的公钥) u1 = s mod q u2 = r H (m) mod q 然后验证方程: 若方程成立,则签名验证通过。,4)盲签名 签名产生 设签名人为A,签名验证者和消息拥有者为B。A任选随机密钥k,计算: 然后将 发送给B。 B选随机数a,bZq。计算: B将盲消息送签名人A。 A利用签名方程 求得部分盲签名后送B。 B再计算 完成签名: 为A关于盲消息的签名, 为B 给出的为消息m的签名。 签名验证 签名接收方得到签名 、 后,只有它们都满足验证方程 才被通过验证。,5)分批验证 对签名进行分批验证就是签名验证人将某个签名人签名方程产生的关于n个不同消息的n个签名进行一次性验证,而不是逐个验证,从而提高其验证速度。在NDSA上可建立两种分批验证方案,它们可以防止除签名者以外的任何人对签名的伪造,也就是说,在假定签名人可信的情况下,NDSA分批验证方案是安全的。这两个分批签名验证方案介绍如下: 方案1: 签名方程: 得到签名为: 或 (i = 1,2,) 分批验证方程: 如果方程成立,则n个签名验证通过。,方案2: 签名方程: (i = 1,2,n) (i = 1,2,n) 得到n个签名:(i,si) (i = 1,2,n) 分批验证方程: 或 如果验证方程成立,则签名验证通过。,6)NDSA安全性分析 伪造者要想从公钥y = g x mod p求得x或先任选r再从 r = (g sy r H ( m)mod p)mod q求部分签名s均等于求离散对数或比求离散对数还难。如果将y看作是n个签名人之公钥在模p下的乘积,则说明对于多重签名的伪造也是不可能的。,54 基于离散对数的若干新型代理签名方案 代理签名是一种新型签名方案,由于这种签名机制在许多领域都有重要的应用,因此引起了人们的极大兴趣。代理签名的目的是当某签名人(这里称为原始签名人)因公务或身体健康等原因不能行使签名权力时,将签名权委派给其他人替自己行使签名权。目前,一些代理签名方案存在以下问题::(1)代理签名方案在验证方程中仅含代理签名者的公钥,从而实际签名权和代理签名权没有实现有效地分离;(2)授权方程的建立都是采用交互式传递数据的方法,而且不包含代理签名者的身份码。因此,授权方程的建立既烦琐,又使签名收方不易验证代理签名人的真实性。(3)对代理签名而言,如何实现一个人同时受多人之托,进行代理多重签名。针对以上三点下面介绍一个新型代理签名方案和一个代理多重签名方案,1 代理签名方案的基本要求 在一个代理签名方案中,如果假设委托进行代理签名,则此签名方案应满足以下三个最基本的条件: 签名收方能够象验证的签名那样验证的签名 的签名和的签名应当完全不同,并且容易区分 和对签名事实不可否认 2 新型代理签名方案 安全参数:为大素数, ()为本原元,是单向函数,原始签名人的公钥为 ,代理签名人的公钥为 ,xB(1,-1),且gcd(xB,-1)=1。,授权方程: 当打算将签名权委托给时,选取随机数 (1,-1),并利用的身份码IDB计算= gk mod 和 =xA+IDBmod ,然后将(IDB,)送。收到(IDB,)后,先验证 ,以确认受委托数据源的可靠性。确认数据可靠性之后再做如下计算: ,则(IDB,)满足 。上式成立的原因是: 。在这里 为授权方程,它建立了和两者公钥之间的内在联系,而这种联系只有在同意转让自己的权力时才可建立。其中的签名密钥只有自己知道,其他人包括也无法知道。,代理签名:利用签名密钥(严格地说是利用代理签名密钥)的签名过程是: 设为待签名消息,为单向函数。 计算 及 其中参数(1,-1)为随机数,签名数据为cA,B = (,)。 签名验收:收方收到cA,B = (,)后,利用原始签名人和代理签名人的公钥计算: 若=成,则收方接受关于信息的代理签名。 容易证明:如果是合法代理人,则上述=必定成立。,因为 尽管签名收方在验证签名时同时使用了两种公钥,可以明确原始签名和代理签名的关系,但当收方仍不放心是否是真正的代理人时,可再采用如下交互式方法确认是否知道授权方程 中的: (,yB,IDB) 收方 选(1,-1),且gcd(,-1) = 1 = w s 签名收方可以确定代理签名人的合法身份及签名的有效性。,性能分析:以前的代理签名方案在验证方程中仅含代理签名者的公钥,使得签名收方不易理解所收到的签名究竟是某人自己的真实签名,还是受人之托的代理签名。本方案克服了这一缺点,因为签名协议使得签名收方在验证时必须同时使用原签名人和代理签名人的公钥,即实际签名权和代理签名权实现了有效地分离。 验证一个代理签名人是否具有签名权,主要是依靠原始签名人和代理签名人之间所建立的授权方程,而以前的授权方程的建立都是采用交互式传递数据的方法,而且不包含代理者的身份码。本方案对此进行了改进,授权方程包含代理签名人的身份码,而且在建立授权方程时,原签名人只需将有关数据直接传给自己所选定的代理人即可,这与人们日常委托他人办事的习惯十分相符。 在确认签名有效性方面,本方案使签名收方可根据实际情况实施一次或两次验证,实现了双重安全保护机制。,原始签名人在给授权时,可将关于的身份码IDB的签名(IDB,)公开地送给.如果除了之外还有通过某种渠道也获得了(IDB,),当想冒充当代理签名人时,可能会计算 ,这时得到的授权方程是 ,而不是 。若想将授权方程中的IDB改成IDG以得到合法的授权方程时,则会碰到求离散对数的难题。因此上述方案可抗击假冒代理人事件的发生。,3代理多重签名方案 代理多重签名就是多个原始签名人将自己的签名权同时委托给实施代理多重签名。其实现方案简述如下: 有关安全参数的选取与上相同,这里不再赘述。设i (=1,2,)是若干原始签名人,每个人的密钥、公钥和秘密参数为(xi,yi,ki) (=1,2,)。 授权和签名过程为: 每个i计算ri=gk mod p,并将ri在所有i中公开,从而每个i可计算 , 和 (=1,2,)., Ai将 (IDB,ri,) 送 (=1,2,)。 将采用 变成si得(IDB,ri,si),它满足方程 (=1,2,)。 令 , (yG被看成个原始签名人的群公钥),则代理签名的授权方程为 ,其中 为的代理多重签名密钥。 既然已经获得,其余的签名和验证过程与上述方案相同。,55 信息认证 1 信息的完整性 目前对于动态传输的信息,许多协议确保信息的完整性的方法大多是收错重传、丢弃后续包的办法,但黑客的攻击可以改变信息包的内容,所以应采用有效的措施来进行完整性控制。涉及到数据完整性认证的主要技术有: 报文认证:与数据连路层的CRC控制类似,将报文名字段(或域)使用一定的操作组成一个约束值,称为报文的完整性检测向量ICV(Integrated Check Vector)。然后将它和数据封装在一起进行加密,传输过程中由于侵入者不能对报文解密,所以也就不能同时修改数据并计算新的ICV,这样接收方受到数据后解密并计算ICV,若与明文中的ICV不同,则认为此报文无效。 校验和: 一个最简单易行的完整性控制方法是使用校验和,计算出该文件的校验和值并与上次计算出的值比较。若相等,说明文件没有改变;若不相等,则说明文件可能被未察觉的行为改变了。校验和方式可以查错,但不能改错。, 加密校验和: 将文件分成小块,对每一块计算CRC校验值,然后再将这些CRC值加起来作为校验和。只要运用恰当的算法,这种完整性控制机制几乎无法攻破。但这种机制运算量大,并且昂贵,只适用于那些完整性保护极高的情况。 消息完整性编码MIC(Message Integrity Code):使用简单单向散列函数计算消息的摘要,连同消息发送给接收方,接收方重新计算摘要,并进行比较验证信息在传输过程中的完整性。这种散列函数的特点是任何两个不同的输入不可能产生两个相同的输出。因此,一个被修改的文件不可能有相同的散列值。单向散列函数能够在不同的系统中高效实现。 防抵赖技术: 它包括对源和目的地双方的证明,常用方法是数字签名,数字签名采用一定的数据交换协议,使得通信双方能够满足两个条件:接收方能过鉴别发送方所宣称的身份,发送方不能否认他发送过这一数据的事实。另外,实现防抵赖的途径还有:采用可信第三方的权标、使用时戳、采用一个在线的第三方、数字签名与时戳相结合等。,2 报文认证 信息认证的目的是防止信息被篡改、伪造、或信息接收方事后否认。特别对于某些开放环境中的信息系统来说,确保其认证十分重要。认证技术是现代各种计算机通信网络、办公自动化、电子资金转帐系统、自动零售服务网络等系统设计中的重要组成部分。今后,在IC卡应用系统中必将广使用。 防止信息被篡改,保证信息的完整性,使得有意或无意的篡改了信息后接受者可以发现,其中最简单的为纯认证系统。它主要是针对来自进行信息验证双方以外因素的有意或无意的破坏、干扰等,而且必须建立在双方互相信赖的基础上。采用认证系统的关键在于防止认证码的破译,必须有良好的认证算法和密钥。它将信息通过密钥和某一特定算法进行加密后压缩成一个“报文摘要”,附在信息之后,接受方收到信息和“报文摘要”后,用相同的密钥和算法对信息进行验证,如果信息被篡改,必然与所附“报文摘要”不符,可以及时发现。例如可用DSA算法做信息验证,如果信息过长,可用Hash算法先进行压缩,在进行验证运算。,3 身份认证 身份认证是网络中的主体进行验证的过程,用户必须提供他是谁的证明,他是某个雇员,某个组织的代理,某个软件过程,如股票交易系统或Web订货系统的软件过程。认证的标准方法就是弄清楚他是谁,他具有什么特征,他知道什么可用于识别他的东西。比如说,系统中存储了他的指纹,他接入网络时,就必须连接到网络的电子指纹机上提供他的指纹,这就防止他以假的指纹或其它电子信息欺骗系统,只有指纹相符才允许他访问系统。更普遍的是通过视网膜血管分布图来识别,原理与指纹识别相同,声波纹识别也是商业系统采用的一种识别方式。 通常有三种方法验证主体身份:一是只有该主体了解的秘密,如口令、密钥;二是主体携带的物品,如智能卡和令牌卡;三是只有该主体具有的独一无二的特征和能力,如指纹、声音、视网膜或签字等。,网络通过用户拥有的东西来识别的方法,一般是智能卡或其它特殊形式的标志,这类标志可以从连接到计算机上的读出器读出来。至于说到“他知道什么”,最普遍的就是口令,口令具有共享秘密的属性。例如要是服务器操作系统识别要入网的用户,那么用户必须把他的用户名和口令送服务器。服务器就将它与数据库里的用户名和口令进行比较,如果相符,就通过了认证,可以上网访问。这个口令就由服务器和用户共享。更保密的认证可以十几种方法组合而成。例如用ATM卡和PIN卡。用于身份认证的主要方法有: 主体特征认证:利用个人特征进行认证的方式极有很高的安全性。目前已有的设备包括:视网膜扫描仪、声音验证设备、手型识别器。这些识别系统能够检测如指印,签名,声音,零售图案这样的物理特征。但大多数这样的系统极具试验性,价格昂贵而且不是百分之百的可靠。任何一个送数据到远程系统去核实的系统有被搭线窃听的危险,非法入侵者只需记录下送去系统的校验信息,以后再重现这些信息,就能窃密。当然这也是标记识别系统的一个问题。, 口令机制: 口令是相互约定的代码,假设只有用户和系统知道。口令有时由用户选择,有时由系统分配。通常情况下,用户先输入某种标志信息,比如用户名和ID号,然后系统询问用户口令,若口令与文件中的相匹配,用户即可进入访问。口令有多种,如一次性口令,系统生成一次性口令清单,第一次时必须使用X,第二次时必须使用Y,等等;还有基于时间的口令,即访问使用的正确口令随时间变化,变化基于时间和一个秘密的用户钥匙。这样的口令每分钟都在变化,使其更加难以猜测。 智能卡: 访问不但需要口令,也需要使用物理智能卡。在允许其进入系统之前检查是否允许其物理接触系统。智能卡大小如信用卡,一般有微处理器、存储器及输入、输出设施构成。微处理器可计算该卡的一个唯一数(ID)和其它数据的加密形式。ID保证卡的真实性,持卡人就可以访问系统。为防止智能卡遗失或被窃,许多系统需要卡和身份识别码(PIN)同时使用。若仅有卡而不知PIN码,则不能进入系统。智能卡比传统的口令方法进行认证更好,但其携带不方便,且开户费用较高。, 拨号回呼(Call Back Modem):它是维护系统有效用户表及其相应电话号码的设备。当用户拨号进入系统时,系统得到用户的登录账户号后,挂起,再根据电话号码表向用户的设备拨入以验证其合法性。这种方法的优点是,限制只有电话号码存于系统中的人才是系统的用户,从而使非法侵入者不能从其家里拨入系统并登录,这一方法的缺点是限制了用户的灵活性,并仍需要使用口令,因为MODEM不能仅从用户固定发出拨号的地方,唯一地标识用户。, 一次性口令:即“询问应答系统”。一次性口令系统允许用户每次登录时使用不同的口令。它是用一种称作口令发生器的设备,设备是手携式的,并有一个加密程序和一个唯一的内部加密密钥。系统在用户登录时给用户提供一个随机数,用户将这个随机数送入口令发生器,口令发生器用用户的密钥对随机数加密,然后用户再将口令发生器输出的加密口令送入系统,系统将用户输入的口令,与它用相同的加密程序,密钥和随机数产生的口令比较,如果二者相同,允许用户访问系统。其优点是:用户可每次敲入不同的口令,因此不需要口令保密,只有口令发生器需要安全保护。为了增加安全性,有些系统甚至不需要联机保存密钥,实际的密钥可保存在有线连接于系统的一个特殊加密计算机中。在用户登录期间,加密计算机将为用户产生随机数和加密口令。这样一种系统的优点是,口令实际不许用户输入,系统中也不保存密钥。其不足之处类似于标记识别方法,每个用户必须携带口令发生器,如果要脱机保存密钥,还需要有一个特殊的硬件。,4 远程用户访问资格确认 装备了功能强大的便携机,远程工作的雇员可以访问到公司的所有东西,从电子邮件到公司日常运作的重要事务,包括销售人员的自动化工具和专用的客户和公司记录。信息系统(IS)的专业人员支持远程接入的安全性是至关重要的,主要是确保远程用户说谁就是谁。加强远程接入的安全性的最简单但效能最低的手段是使用静态口令可以长时间内连续使用的单一口令。可惜,很多用户不是把口令写在明处,就是把口令编入通信软件中。 防止非法侵入企业/组织机构网络的第一步便是识别进网用户,并确认只有合法用户可以进入受保护的系统。在ISDN网络中识别进网用户可通过ISDN C

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论