第3篇信息认证技术文档格式.docx
《第3篇信息认证技术文档格式.docx》由会员分享,可在线阅读,更多相关《第3篇信息认证技术文档格式.docx(27页珍藏版)》请在冰点文库上搜索。
![第3篇信息认证技术文档格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/7/ab25146d-e2ab-4419-81f1-f26e181fb4bb/ab25146d-e2ab-4419-81f1-f26e181fb4bb1.gif)
数字签名是由公钥密码发展而来,在身份认证、数据完整性、不可否认性以及匿名性等方面有重要应用,特别是在大型网络安全通信中的密钥分配、认证及电子商务系统中具有重要作用。
数字签名是实现认证的重要工具。
3.2.1数字签名基本概念
政治、军事、外交等的文件、命令和条约,商业中的契约以及个人之间的书信等,传统上采用亲笔签名或印章,以便在法律上能认证、核准和生效。
随着计算机网络的发展,人们更希望通过电子设备实现快速、远距离的交易,数字(或电子)签名便应运而生,并开始用于商业通信系统。
1.什么是数字签名
数字签名就是一种防止源点和终点否认的认证技术,一个数字签名必须保证以下3点:
(1)接收者能够核实发送者对报文的签名;
(2)发送者事后不能抵赖对报文的签名;
(3)接收者不能伪造发送者对报文的签名。
一般数字签名的格式为:
用户A向B用明文送去消息m,为了让B确信消息m是A送来的,没有篡改,可在m的后面附上固定长度(比如60bit或128bit)的数码。
B收到后,可通过一系列的步骤验证,然后予以确认或拒绝消息m。
图3-2是数字签名的一个基本过程。
在公钥体制下,数字签名是通过一个单向函数对要传送的报文进行处理,得到用以核实报文是否发生变化的一个字母数字串。
该字母数字串成为该消息的消息摘要,用户用自己的私钥对消息摘要进行加密,然后信息接收者使用信息发送者的公钥对附在原始信息后的数字签名进行解密后获得哈希摘要,并通过与用自己收到的原始数据产生的哈希摘要对照,便可确信原始信息是否被篡改,同时也保证了数据传输的不可否认性。
图3-2数字签名过程
2.数字签名的特性
类似于手写签名,数字签名有如下特性:
(1)签名是可信的:
任何人都可以方便地验证签名的有效性。
(2)签名是不可伪造的:
除了合法的签名者之外,任何其他人伪造其签名是困难的。
这种困难性指实现时计算上是不可行的。
(3)签名是不可复制的:
对一个消息的签名不能通过复制变为另一个消息的签名。
如果一个消息的签名是从别处复制的,则任何人都可以发现消息与签名之间的不一致性,从而可以拒绝签名的消息。
(4)签名的消息是不可改变的:
经签名的消息不能被篡改。
一旦签名的消息被篡改,则任何人都可以发现消息与签名之间的不一致。
(5)签名是不可否认的:
签名者不能否认自己的签名。
3.数字签名的实现方法
(1)基于对称密钥加密算法的数字签名方法
这种方法的本质是共享密钥的验证。
这种算法的签名通常称为Hash签名。
该签名不属于强计算密集型算法,应用较广泛。
很多少量现金付款系统,如DEC的Millicent和CyberCash的CyberCoin等都使用Hash签名。
使用这种较快的Hash算法,可以降低服务器资源的消耗,减轻中央服务器的负荷。
Hash的主要局限是接收方必须持有用户密钥的副本以检验签名,因为双方都知道生成签名的密钥,较容易攻破,存在伪造签名的可能。
如果中央或用户计算机中有一个被攻破,那么其安全性就受到了威胁。
因此,这种签名机制适合安全性要求不是很高的系统。
(2)基于公钥密码算法的数字签名方法
基于公钥密钥算法的数字签名方法本质上是公钥密码加密算法的逆应用。
此时发送方用自己的私钥对消息进行加密,接收方收到消息后用发送方的公钥进行解密,由于私钥由发送方自己保管且只有他本人知道,入侵者只知道发送者的公钥,不可能伪造签名,从而起到签名的效果。
实际使用的数字签名通常是基于公钥密码体制,且是只对消息的摘要而不是对消息本身进行签名。
3.2.2常用的数字签名体制介绍
美国国家标准技术研究所(NIST)于1994年12月通过了一个签名方案作为数字签名标准(DigitalSignatureStandard,DSS),这就是众所周知的数字签名算法DSA(DigitalSignatureAlgorithm)。
DSS规范说明书于1998年做了修改,并于1998年12月15日公布为FIPSPUB186-1[NIST98]。
FIPSPUB186-1规定DSA或者RSA签名方案都可以用于美国各机构生成数字签名。
2000年2月15日,NIST又给DSS颁布了一个新标准FIPSPUB186-2,规定除了DSA和RSA之外,椭圆曲线数字签名算法(ECDSA)也可以用于美国各机构生成数字签名。
下面分别介绍这3种签名方案。
1.RSA签名
RSA是最流行的一种加密标准,许多产品的内核中都有RSA的软件和类库。
RSA与Microsoft、IBM、Sun和Digital都签订了许可协议,使在其生产线上加入了类似的签名特性。
RSA既可用来加密数据,也可以用于身份认证。
作为结果而产生的数字签名的过程如图3-3所示。
图3-3利用散列函数的RSA数字签名方案
为了解决处理和通信的开销,依据要签署报文的内容,散列函数被用于产生称为报文摘要的固定长度数据项(即把来自大域的数值映射进一个较小的范围内)。
摘要具有这样的特性,即一般来说报文的任何变动都会产生不同的摘要。
下面详细介绍该签名体制的内容。
(1)参数
令n﹦p×
q,其中p和q是大素数,φ(n)=(p﹣1)(q﹣1),选e并计算出满足(e×
d)modφ(n)﹦1的d,这里,公开n和e,将p,q和d保密。
(2)签名
对于消息m∈Zn,签名s为
s﹦Sig(m)﹦(h(m))dmodn
其中h(m)为生成信息摘要,它由消息m通过单向散列或杂凑函数(如SHA或MD5)得到。
(3)验证
对给定的m,s∈Zn,如果
ver(m,s)为真⇔m=semodn
由于只有签名者知道自己的私钥d,由RSA体制知道,其他人不能伪造签名,同时,验证算法使用了签名者的公钥,所以对于所给任意m,s对,易于验证其是否为消息m和相应签名构成的合法对。
任何公钥密码体制,当用私钥签名时,接收方可认证签名人的身份;
当用接收方的公钥加密时,只有接收方能够解密。
也就是说,公钥密钥体制既可用在数字签名,也可用作加密。
2.DSA签名
DSA是在ElGamal和SchnorI两个签名方案的基础上设计的,是由美国国家标准化研究院和国家安全局共同开发的。
DSA虽然是一种公开密钥技术,但它与RSA不同,只能用于数字签名,不能用作加密或密钥交换。
DSA的安全性基于求离散对数的困难性。
算法描述如下:
(1)DSA的参数
①全局公开密钥分量p,q,g,可以为一组用户公用。
p是满足2L-1<
p<
2L的大素数,其中512≤L≤1024,并且L是64的倍数,即比特长度在512到1024之间,长度增量为64位。
q是p-1的素因子,2159<
q<
2160,即q的长度为160比特。
g=h(p-1)/qmodp,其中h是一个整数,满足1<
h<
p﹣1并且g=h(p-1)/qmodp>
1。
②用户私有密钥x
x是满足0<
x<
q的随机或伪随机整数。
③用户的公开密钥y
y=gxmodp
④用户为待签消息选取的秘密数k
k是满足0<
k<
每次签名都要重新生成k。
(2)签名过程
对待签消息M,设0<
M<
q。
签名过程如下:
①生成一随机整数k;
②计算r=gkmodp(modq);
③计算s=k-1(h(M)+xr)(modq)。
(r,s)为签名人对m的签名。
(3)验证过程
①检查r和s是否属于[0,q],若不是,则(r,s)不是签名;
②计算t=s-1(modq),r′=gh(M)t(modq)yrt(modq)modp(modq);
③比较r′=r是否成立。
若成立,则(r,s)为合法签名。
3.ECDSA体制
一种崭新的技术叫做椭圆曲线密码体制,该体制正日益被认为是数字签名系统的基础。
基于椭圆曲线的数字签名系统可以实现同RSA和DSA基本相同的功能,但实现效率更高。
利用椭圆曲线,可以比使用RSA和DSA更快地产生和核验数字签名。
同时,椭圆曲线数字签名也较容易在小型、资源有限的设施中使用,例如智能卡。
椭圆曲线数字签名算法ECDSA是使用椭圆曲线对数字签名算法DSA的模拟。
ECDSA首先由Scott和Vanstone在1992年为了响应NIST对数字签名标准(DSS)的要求而提出。
ECDSA于1998年作为ISO标准被采纳,在1999年作为ANSI标准被采纳,并于2000年成为IEEE和FIPS标准。
与大数分解问题(IntegerFactorizationProblem
,IFP)和普通的离散对数问题(DiscreteLogarithmProblem,DLP)不同,椭圆曲线离散对数问题(EllipticCurveDiscreteLogarithmProblem
,ECDLP)没有亚指数时间的解决方法。
因此,椭圆曲线密码的单位比特强度要高于其他公钥体制。
3.2.3盲签名和群签名
1.盲签名
一般数字签名中,总是要先知道文件内容后才签署,这正是通常所需要的。
但有时我们需要某人对一个文件签名,但又不让他知道文件内容,这就叫做盲签名(BlindSignature),它是由Chaum最先提出的。
在选举投票和数字货币协议中将会碰到这类要求。
利用盲变换可以实现盲签名,这类签名的过程如图3-4所示。
图3-4盲签名
(1)完全盲签名
现假设B是一位仲裁者,A要求B签署一个文件,但不想让他知道所签的是什么内容,而B并不关心所签的内容,他只是要确保在需要时可以对此进行公正的仲裁。
实现这个签名的过程可通过下述协议实现。
1)盲变换。
A将要签名的文件与一个随机数相乘,该随机数称为盲因子(BlindingFactor)。
这实际上完成了对原文件的隐藏,隐藏完的文件被称为盲文件。
2)A将此盲文件送给B。
3)签名。
B对该盲文件签名。
4)解盲变换。
A对签过字的盲文件除以所用的盲因子,就得到B对原文件的签名。
若签名算法和乘法是可交换的,则上述的过程就可以真正实现,否则,要采用其他方法(而不是乘法)对原文件进行盲变换。
安全性讨论:
如何保证B不能进行欺诈?
这要求盲因子是真正的随机因子,这样B不能对任何人证明对原文件的签名,而只是知道对其签过名,并能验证该签名。
完全盲签名具有如下特点;
1)B对文件的签名合法,它证明B签了文件,且具有以前介绍过的普通签名的属性。
2)B不能将所签文件与实际文件联系起来,即使他保存所有曾签过的文件,也不能获得所签文件的真实内容。
(2)盲签名
完全盲签名使A可以让B签任何他所想要的文件,这对B显然是很危险的。
例如,“B欠A1000万”这样的内容赋予完全盲签名显然是十分危险的,因此完全盲签名并不可能真正实用。
为了避免这种恶意的使用,采用“分割一选择(Cut-and-Choose)”技术,能使B知道他所签的为何物,但仍可保留完全盲签名有意义的特征,即B能知道所签为何物,但因为协议规定的限制条件,无法进行对他有利的欺诈,或者说进行欺诈所需代价超过其获利。
反间谍组织的成员身份必须保密,甚至连反间谍机构也不知道他是谁。
机构组织要给每个成员一个签名文件,文件可能会注明:
持此签署文件的人将享有充分的外交豁免权,并在其中写入该成员的化名。
每个成员有自己的不止一个的化名名单,使反间谍机构不仅要提供签名文件,还要能验证提供签署文件的人是不是真正的合法组织成员。
特工们不想把他们的化名名单送给所属机构,因为敌方可能已经破坏了该机构的计算机。
另一个方面,反间谍机构也不会盲目地对特工送来的文件都进行签名。
否则,一个聪明的特工可能会送来这样的文件请求签名:
“该成员已退休,每年发给100万退休金”,若对这样内容的文件进行签署将带来不必要的麻烦。
先假定成员B有5个化名,他可以自行选用,别人是不知道的。
假定成员B并不关心在哪个化名下得到了豁免权,并假定机构的计算机为A。
其签名过程为:
①B准备了5份文件,每一个使用不同的化名,给予那个特工外交豁免权。
②B用不同的盲因子隐藏每个文件。
③B把这5份隐藏好的文件给A。
④A随机选择4份文件向A索要每份文件的盲因子。
⑤B向A发送适当的盲因子。
⑥A打开(即去掉盲因子)4份文件,并确认它们是正确的。
⑦A在剩下的文件上签名并把它送给B。
⑧B去掉盲因子,将读出他的新化名。
以上的例子体现了盲签名的思想。
通常人们把盲变换看做是信封,盲化文件就是对文件加个信封,而去掉因子的过程就是打开信封。
文件在信封中时无人能读它,而在盲文件上签名相当于在复写纸信封上签名,从而得到了对真文件(信封内)的签名。
2.群签名
群体密码学是研究面向一个团体的所有成员需要的密码体制。
在群体密码中,有一个公用的公钥,群体外面的人可以用它向群体发送加密消息,密文收到后要由群体内部成员的子集共同进行解密。
群签名(GroupSignature)是面向群体密码学中的一个课题分支,在1991年有Chaum和vanHeyst提出的。
所谓群签名就是满足这样要求的签名:
在一个群签名方案中,一个群体中的任意一个成员可以以匿名的方式代表整个群体对消息进行签名。
与其他数字签名一样,群签名是可以公开验证的,而且可以只用单个群公钥来验证。
群签名有以下几个特点:
1)只有群体中的成员能代表群体签名;
2)接收到签名的人可以用公钥验证群签名,但不可能知道由群体中哪个成员所签;
3)发生争议时可由群体中的成员或可信赖机构识别群签名的签名者。
这类签名可用于投标商务活动中。
例如所有公司应邀参加投标,这些公司组成一个群体,且每个公司匿名地采用群签名对自己的标书签名。
事后当选中了一个满意的标书,就可以识别出签名的公司,而其他标书仍保持匿名。
中标者想反悔已无济于事,因为在没有他参加下仍可以识别出他的签名。
群签名在管理、军事、政治及经济等多个方面有着广泛的应用。
比如在公共资源的管理,重要军事情报的签发,重要领导人的选举,电子商务重要新闻的发布,金融合同的签署等事务中,群签名都可以发挥重要作用。
3.3哈希函数和消息完整性
3.3.1哈希函数基本概念
哈希(Hash)函数(也称为“散列函数”或“杂凑函数”)是可接受变长数据输入,并生成定长数据输出的函数。
这个定长输出是输入数据的哈希值或称消息摘要。
由于哈希函数具有单向性的属性,有时也称单向散列函数。
有时把哈希值(消息摘要、散列码)称为输入数据的数字指纹。
消息完整性要求对接收的数据的任何改动都能被发现,而哈希函数的一个主要功能就是实现数据完整性的安全。
哈希值以函数h=H(M)表示。
其中,M是变长的消息,H是一个将任意长度的消息M映射为一个较短定长的哈希值h的哈希函数。
其效果如图3-5所示。
图3-5哈希函数示例
Hash函数具备以下的性质:
①H可应用于任意长度的输入数据块,产生固定长度的散列值;
②对于每一个给定输入数据m,计算出它的哈希值H(m)很容易;
③反过来,给定哈希值h,倒推出输入数据m在计算上不可行,即单向性;
④对于给定的消息m1和其哈希值H(m1),找到满足m2≠m1,且H(m2)=H(m1)的m2在计算上不可行,即抗弱碰撞(Collision)性;
⑤找到任何满足H(m1)=H(m2)且m1≠m2的消息对(m1,m2)在计算上是不可行的,即抗强碰撞性。
碰撞性是指对于两个不同的消息,如果它们的摘要值相同,则发生了碰撞。
性质①是将哈希函数应用于消息认证的实际需求。
性质②和③是单向性,由给定消息产生哈希值很简单,而给定哈希值则不可能产生对应的消息。
性质④保证无法找到一个替代消息,使它的哈希值与给定消息产生的哈希值相同,能防止伪造。
性质⑤指的是哈希函数对已知的生日攻击方法的防御能力。
哈希函数并不提供机密性,并且它们不使用密钥以生成摘要。
哈希函数非常适合于认证和确保数据的完整性。
3.3.2常见的哈希函数
现在常用的几种优秀的哈希算法有MD5,SHA等。
1.MD5
消息摘要(MessageDigest,MD)算法基于RFC1321,MD5是第5个版本。
MD5以一个任意长度的消息作为输入,以512位分组来处理输入文本,输出是4个32位分组级联形成的一个128位(16字节)的哈希值。
MD5是4轮运算,各轮逻辑函数不同。
每轮又要进行16步迭代运算,4轮共需64步完成。
2.SHA
安全哈希算法(SecureHashAlgorithm,SHA)由美国国家标准与技术学会(NIST)和NSA开发的,于1993年作为联邦信息处理标准(FIPSPUB180)公布,1995年修订为FIPSPUB181,后来更名为SHA-1。
另外还有四种变体曾经发布,以提升输出的范围和变更一些细微设计:
SHA-224、SHA-256、SHA-384和SHA-512(以它们的摘要长度加在原名后面来命名)。
SHA基于MD4算法,SHA的设计很近似于MD4模型。
SHA用于数字签名的标准算法DSS中,也是安全性很高的一个杂凑算法。
该算法的输入为小于264位长的任意消息,分为512位长的分组,输出为160位长的消息摘要。
因为它能产生160位哈希值,因此,抗穷举攻击能力要更强。
3.Hash函数的攻击分析
Hash函数必须满足,然而,抗强碰撞性对于Hash函数的安全性要求是非常高的。
例如,MD5算法输出的Hash函数值总数为2128,SHA-1算法输出的Hash函数值总数为2160,这说明可能Hash函数值是有限的,而输入的消息是无限的,因此,函数的碰撞性是可能存在的。
评价Hash函数的一个最好的方法是看攻击者找到一对碰撞消息所花的代价有多大。
目前已有一些攻击Hash函数的方案和计算碰撞消息的方法,这些方法中的生日攻击方法可用于攻击任何类型的Hash函数方案。
生日攻击的思想来源于生日问题。
问题的描述:
当一个班级中有多少学生时,才使得这个班中有两个学生的生日在同一天的概率超过1/2?
大多数学生都认为答案将会超过100,实际上,根据概率论答案是23。
如果不给出严密的分析,我们可以看到,23个学生可以组成(23×
22)/2=253对不同的组合,每一对组合有1/365的命中概率,照这样看来,这个答案实际上也就不那么令人惊奇了。
生日攻击方法只依赖于消息摘要的长度,即Hash函数值的长度。
有人可能会认为,为了攻击一个m位的消息摘要,将需要2m数量级的操作次数。
实际上,GideonYuval于1979年在他的论文中提出了一种生日攻击方法,用这种方法通常只需要2m/2量级的操作次数。
也就是说,如果攻击者希望伪造消息M的签名来进行欺骗,则他需要找到满足H(M′)=H(M)的M′来替代M。
对于生成64位哈希值的哈希函数,平均需要尝试232次就可能找到M′。
为了抵抗生日攻击,通常建议消息摘要的长度至少要达到128bit。
除生日攻击法外,对一些类型的Hash函数还有一些特殊的攻击方法,例如,中间相遇攻击法、修正分组攻击法和差分分析法等。
值得一提的是,我国山东大学王小云教授等人在2004年8月在美国加州召开的国际密码大会(Crypto’2004)上所做的Hash函数研究报告中指出,他们已成功破译了MD4、MD5、HAVAL-128、RIPEMD-128等Hash算法。
他们找到的碰撞基本上宣布了MD5算法的终结,这一成就或许是近年来密码学界最具实质性的研究进展。
最近国际密码学家Lenstra利用王小云等人提供的MD5碰撞,伪造了符合X.509标准的数字证书,这就说明MD5算法的破译已经不仅仅是理论破译,而是可以导致实际的攻击。
在MD5算法被以王小云为代表的中国专家攻破后,世界密码学界仍然认为SHA-1算法是安全的。
然而,2005年2月,王小云就宣布攻破SHA-1算法的消息。
因为SHA-1在美国等国家有更加广泛的应用,密码被破的消息一出,在国际上的反响可谓石破天惊。
换句话说,王小云的研究成果表明了电子签名从理论上讲是可以伪造的,必须及时添加限制条件,或者重新选用更为安全的密码标准,以保证电子商务的安全。
3.3.3消息认证和消息完整性
1.消息完整性检验的一般方法
消息完整性检验的一般机制如图3-6所示。
无论是存储文件还是传输文件,都需要同时存储或发送该文件的数字指纹;
验证时,对于实际得到的文件重新产生其数字指纹,再与原数字指纹进行对比,如果一致,则说明文件是完整的,即未被篡改、删除或插入,否则,是不完整的。
图3-6消息完整性检验的一般机制
消息完整性检验只能检验消息是否是完整的,不能说明消息是否是伪造的。
因为一个伪造的消息与其对应的数字指纹也是匹配的。
2.消息认证
消息认证是指使意定的接收者能够检验收到的消息是否真实的方法。
消息认证具有两层含义:
一是检验消息的来源是真实的,即对消息的发送者的身份进行认证;
二是检验消息的完整性,即验证消息在传送或存储过程中未被篡改、删除或插入等。
产生消息的数字指纹的方法很多。
当需要进行消息认证时,仅有消息作为输入是不够的,需要加入密钥K,这就是消息认证的原理。
消息认证码(MessageAuthenticationCode,MAC)是与密钥相关的单向杂凑函数。
MAC与单向杂凑函数不同的是,但它还包括一个密钥,不同的密钥会产生不同的杂凑函数,这样就能在验证发送者的消息是否被篡改的同时,验证是由谁发送的。
MAC通常表示为
MAC=CK(M)
其中:
M是长度可变的消息;
K是收、发双方共享的密钥;
函数值CK(M)是定长的认证码,也称密码校验和。
MAC是带密钥的消息摘要函数,即一种带密钥的数字指纹,它与不带密钥的数字指纹是有本质区别的。
(1)消息认证
认证码被附加到消息后以M||MAC方式一并发送,接收方通过重新计算MAC以实现对M