议从加密到数字签名2004年3月24日,《中华人民共和国电子签名法(草案)》(下简称草案)经国务院原则通过,即将提请人大审议,这标志着我国首部信息化法律走出了立法第一步。
由于该草案明确了合同双方和认证机构在电子签名活动中的权利和义务,其技术细节受到了各方人士广泛关注。
笔者一直关注数字签名的发展,在此结合自已在学习加密、证书技术中的心得体会,试图就电子签名问题梳理出一个脉络,向广大网管朋友作一个浅显的介绍。
基本概念“电子签名”是广义的提法,是以保障基于网络交易平台下交易各方的合法权益为目的,满足和替代传统签名功能的各种电子技术手段,并不是手工签字或印章的图像化,其中“交易”是指个人信息交换、电子商务和电子政务等基于网络平台的活动;“交易各方”指从事这些活动的各方当事人;“网络”一般是针对互联网而言。
“数字签名”是通过密码技术实现电子交易安全的形象说法,是电子签名的主要实现形式。
它力图解决互联网交易面临的几个根本问题:数据保密;数据不被篡改;交易方能互相验证身份;交易发起方对自己的数据不能否认。
在密码学中,密码的本质是某种算法,由密码算法算出一个密钥(Key),然后使用该密钥对交易双方传送的数据加密。
该数据通称“报文”,加密前叫“明文报文”,即明文;加密后叫“密文报文”,即密文,密文没有密钥是不可读的。
所有加密算法本身都是公开的,属于纯数学的范畴,本文不作过多讨论;密码学只关注密钥管理的问题,因为加密通信的安全性只与密钥有关,这是本文关注的重点。
加密通信方式主要有对称加密和非对称加密两种。
在开始讨论之前,我们假定:在不安全的网络中(比如互联网),Alice是通信发起人;Bob是通信接收人;Alice与Bob相互信任;而Eve监听通信并伺机破坏:这是John Wiley 和Sons在经典教程《Applied Cryptography》(《应用密码学》)中提出的部分人物,这些人物和环境属性现已成为描述密码学技术的标准。
对称加密——解决数据本身加密问题顾名思义,对称加密就是“一把锁对应一把钥匙”,加锁开锁都是它。
有传统和现代的区别,以下用古老的替换加密法为例作一简单说明。
明文:HiIamAlice 密文:ZEECGCFEIP密钥(密码):A B C D E F G H I J K L M N O P Q R S T U V W X Y ZC H I M P A N Z E BD F G J K L O Q R S T X Y W U V密钥第一排是常规26个字母,而第二排则是约定的字母顺序,用来替换对应的字母。
除了字母,还可用其它约定符号起到同样的作用,都是异曲同工。
现代的对称加密方式多用繁复的数学算法进行,当前优秀的对称加密算法有DES、3DES、DEA、IDEA等,它们的运算速度快,加密性能优异。
我们以Alice和Bob的通信为例演示通信过程大致如下:1、由Alice通过某种对称加密算法算出一把密钥并传送给Bob;2、Alice用该密钥加密明文,得到密文;3、Alice将该密文传送给Bob;4、Bob用该密钥解密密文,得到明文。
Eve如果只在第3步截获密文,由于不知道密钥,将一无所获。
但当Eve监听到第1步,他和Bob得到的信息就一样多,到第4步,Eve的工作就是解密。
并且Eve还能在第3步开始之前中断Alice与Bob的通信线路,然后冒充Bob接受Alice的信息,解密、修改后再冒充Alice加密发送给Bob,Alice和Bob始终蒙在鼓中。
如果Bob受到利益损害,则Alice 可以指责说这是Bob自已泄露密钥导致。
可见对称加密的问题在于:1、必须事先传递密钥,造成密钥传递过程中(叫带内传输)极易被窃。
常规手段无法解决这种高风险。
2、密钥管理困难:假设有n方两两通信,如采用一把密钥,则密钥一旦被盗,整个加密系统崩溃;如采用不同密钥,则密钥数等于n*(n-1)/2,意味着100个人两两通信,则每人要保管4950把密钥!密钥管理成为不可能。
3、由于密钥共享,无法实现不可否认。
虽然对称加密对数据本身的加密能力足够强大,而且已经在政府机关和商业机构内部得到了广泛应用,但不解决上述问题,面向互联网的电子商务和电子政务就无从谈起。
公匙加密——解决密钥带内传输问题1975年下半年,斯坦福大学的教授狄菲和赫尔曼向全美计算机会议提交了名为《多用户加密技术》的论文,总结了正在探索中的公匙加密技术,但没有提出新的解决方案。
1976年5月,两人在全美计算机会议上又公布了离散指数密码算法,并在IEEE发表了著名的《密码学研究新方向》论文,提出了基于离散指数加密算法的新方案:交易双方仍然需要协商密钥,但离散指数算法的妙处在于:双方可以公开提交某些用于运算的数据,而密钥却在各自计算机上产生,并不在网上传递。
EVE如果只监听而不参加运算,他是不可能从窃得的信息推导出密钥的。
从而保证了密钥的安全。
这是公匙加密的雏形。
遗憾的是,这一类似于打电话状态的加密方法,要求交易方必须同时在线,且同样以相互信任为前提,所以仍然无法满足现代电子交易的需要。
1978年,麻省理工学院的三名教授瑞斯特(Rivest)、沙米尔(Shamir)和艾德曼(Adleman)人从这篇论文得到启发,开发了非对称RSA公共密钥算法。
由于这一算法既解决了密钥的带内传输问题,又不必交易双方同时在线,也不要求交易方必须信任,终于为现代电子商务的蓬勃发展铺平了道路。
非对称加密是对称加密“逆向思维”的结果,即“一把锁对应两把钥匙”,任意一把加锁,但必须由另一把开锁。
公匙加密体制的通信过程大致如下:1、Bob公开发布他的公匙;2、Alice用Bob的公匙加密明文得到密文并传送给Bob;3、Bob用它从不公开的私匙对该密文解密。
尽管这次Eve可以合法得到Bob的公匙,却无法对第2步截获的密文加以解密,因为他没有Bob的私匙。
Bob的公匙和私匙从何而来?为什么公匙加密的文件只有私匙才能解密?要搞清这两个问题,必须回过头来认识公匙加密的数学基础:大数不可能质因数分解假说。
只能被1和本身整除的数叫质数,例如13,质数是无穷多的。
得到两个巨大质数的乘积是简单的事,但想从该乘积反推出这两个巨大质数却没有任何有效的办法,这种不可逆的单向数学关系,是国际数学界公认的质因数分解难题。
R、S、A三人巧妙利用这一假说,设计出RSA公匙加密算法的基本原理:1、让计算机随机生成两个大质数p和q,得出乘积n;2、利用p和q有条件的生成加密密钥e;3、通过一系列计算,得到与n互为质数的解密密钥d,置于操作系统才知道的地方;4、操作系统将n和e共同作为公匙对外发布,将私匙d秘密保存,把初始质数p和q秘密丢弃。
国际数学和密码学界已证明,企图利用公匙和密文推断出明文——或者企图利用公匙推断出私匙的难度等同于分解两个巨大质数的积。
这就是Eve不可能对Alice的密文解密以及公匙可以在网上公布的原因。
至于“巨大质数”要多大才能保证安全的问题不用担心:利用当前可预测的计算能力,在十进制下,分解两个250位质数的积要用数十万年的时间;并且质数用尽或两台计算机偶然使用相同质数的概率小到可以被忽略。
公匙加密最大和惟一的问题是运算速度缓慢,理论上,对称加密算法的速度要比它快上了数百倍。
形象的说,公匙就是写有Bob名字、绝对坚固但特别笨重的邮箱,它可以放在任何地方,任何人都知道那是Bob的,所有人都能从邮箱的缝隙中塞进纸条。
但只有Bob才有惟一的开锁匙匙(私匙)。
所以在上面的通信过程中,Eve即使得到装有Alice纸条的Bob的笨重邮箱,也没有任何意义。
至此,密钥的“带内传输”问题解决了,也就解决了四个根本问题中的“保密”这一问题,但“不可否认”、“身份确认” 和“不被篡改”的问题又接踵而至:既然谁都能塞进纸条,Alice 不承认有他落款的纸条是他写的怎么办?单向Hash函数——实现身份验证的幕后英雄在公匙加密体系中,剩下三大任务任务都由“单向Hash函数算法”(下称Hash)来完成,由它配合公匙加密算法,最终完成身份确认、不可否认和不被篡改工作。
和公匙加密不同,Hash不是加密,只是函数;其作用不是生成密钥,而是生成报文的“数字指纹”。
正是这种数字指纹实现了“验证”、“不可否认” 和“不被篡改”。
Hash函数的工作原理并不复杂:1、通过数学算法,把未做处理的报文(不论是明文还是密文)转换为不定长的待输入字符串,称为预映射值;2、将预映射值再次转换为定长(一般更短)的输出字串,称Hash值,又叫消息摘要(Message Digest),预映射值可任意长,但Hash值总是定长;报文或预映射值有丝毫改动,则Hash值完全不同。
所谓“单向”,是指不可能由Hash值反推出预映射值或报文,但又不是加密,因为不存在解密的问题。
正由于其单向,也就没有了运算速度的障碍。
举个例子,就像一片玻璃(预映射值)很轻易就被打碎,但破碎的玻璃渣(Hash值)却不可能恢复到破碎前的状态。
这样我们就可以综合运用公匙算法和Hash算法,对上述加密通信过程重新设计一个完整的解决方案:1、Alice首先以对称算法生成密钥K,并用K将明文D生成密文DC;2、Alice用Bob 的公匙将对称密钥K加密为KB,将DC和KB封装;3、将封装后的DC和KB 用Hash算出Hash值H,用Alice的私匙加密为HA;4、将DC、KB和HA封装为一个数据块发送给Bob。
这时的Eve有公匙算法,有Hash算法,有Alice与Bob的公匙,惟独没有二人的私匙,所以在截获数据块后,可以分析出DC、KB和HA三个部份,其中DC是密文,没有密钥K 无法读取;K又被Bob的公匙加密成KB,没有Bob的私匙同样无法读取;虽然HA 可以由Alice的公匙还原为H,但从H不可能反推出预映射值,所以对Eve毫无意义。
Bob收信后,只需简单的对DC和KB再次用Hash算法算出Hash值HB,并将它与HA 比较,相同该数据块真,不同则该数据块假。
如果为真,则Bob用自己的私匙解密KB, 得到对称密钥K,再用K解密DC,得到D。
可见,只要Eve对D、KB、H和HA中任意一项有丝毫改动,那么Bob收信后都会认定该数据块无效,进而确认该数据块是否真的是Alice发来——就算Eve伪造了新的数据块DE、KE和HE,问题是他没有Alice的私匙,也就不可对HE加密,而他如果复制H值,又会因为DE、KE用Hash计算后值与H肯定不同而失败——这一番巧妙周旋,彻底斩断了Eve的黑手!以上在对Bob实现“身份验证”的同时对Eve实现“不可篡改”!而H之所以用Alice的私匙加密为HA的深意在于——由于公匙加密体系保证了只有Alice自己才有私匙,所以简单反推一下,我们不难看出一旦Bob的验证通过,Alice就已经绝对“不可否认”这整个数据块都是他自己的大作了。