感谢很多人.
就当打字不容易了了,供娱乐
参考文献 《计算机网络安全与加密技术》科学出版社2001北京
《数字签名原理及技术》机械工业出版社2004北京
《计算机网络安全基础》人民邮电出版社2002北京
一 密码学简介
1.加密的历史
作为保障数据安全的一种方式,数据加密起源于公元前2000年。埃及人是最先使用特别的象形文字作为信息编码的人。随着时间推移,巴比伦,希腊等都开始使用一些方法来保护他们的书面信息。对信息进行编码曾被Julias Caesar(恺撒大帝)使用,也曾用于历次战争中,包括美国独立战争,美国内战和两次世界大战。最广为人知的编码机器是German Enigma机,在第二次世界大战中德国人利用它创建了加密信息。此后,由于Alan Turing 和Ultra计划及其他人的努力,终于对德国人的密码进行了破解。当初,计算机的研究就是为了破解德国人的密码,当时人们并没有想到计算机给今天带来的信息革命。随着计算机的发展,运算能力的增强,过去的密码都变的十分简单了。于是人们又不断地研究出了新的数据加密方式,如私有密钥算法和公有密钥算法。可以说,是计算机推动了数据加密技术的发展。
2.密码学的发展
密码学的发展可以分为两个阶段。第一个阶段是计算机出现之前的四千年(早在四千年前,古埃及就开始使用密码传递消息),这是传统密码学阶段,基本上靠人工对消息加密、传输和防破译。第二阶段是计算机密码学阶段,包括:
①传统方法的计算机密码学阶段。解密是加密的简单逆过程,两者所用的密钥是可以简单地互相推导的,因此无论加密密钥还是解密密钥都必须严格保密。这种方案用于集中式系统是行之有效的。
②包括两个方向:一个方向是公用密钥密码(RSA),另一个方向是传统方法的计算机密码体制——数据加密标准(DES)。
3.什么是密码学?
密码学包括密码编码学和密码分析学。密码体制的设计是密码编码学的主要内容,密码体制的破译是密码分析学的主要内容。密码编码技术和密码分析技术是相互依存、相互支持、密不可分的两个方面。
数据加密的基本过程包括对称为明文的可读信息进行处理,形成称为密文或密码的代码形式。该过程的逆过程称为解密,即将该编码信息转化为其原来的形式的过程。
4.加密的重要性
为什么需要进行加密
因特网是危险的,而且这种危险是TCP/IP协议所固有的,一些基于TCP/IP的服务也是极不安全的,另一方面,因特网把全世界连在了一起,走向因特网就意味着走向了世界。为了使因特网变得安全和充分利用其商业价值,人们选择了数据加密和基于加密技术的身份认证。
二 密码学与电子邮件加密
1.加密方法简介及本地文本邮件加密
加密密钥
加密算法通常是公开的,现在只有少数几种加密算法,如 DES和 IDEA等。一般把受保护的原始信息称为明文,编码后的信息称为密文。尽管大家都知道使用加密方法,但对密文进行解码必须要有正确的密钥,而密钥是保密的。
(1)保密密钥和公用/私有密钥
在保密密钥中,加密者和解密者使用相同的密钥,也被称为对称密钥加密。这种加密算法的问题是,用户必须让接收人知道自己所使用的密钥,这个密钥需要双方共同保密,任何一方的失误都会导致机密的泄露,而且在告诉收件人密钥过程中,还需要防止任何人发现或偷听密钥,这个过程被称为密钥发布。
公用/私有密钥,与单独的密钥不同,它使用相互关联的一对密钥,一个是公用密钥,任何人都可以知道,另一个是私有密钥,只有拥有该对密钥的人知道。如果有人发信给这个人,他就用收信人的公用密钥对信件进行过加密,当收件人收到信后,他就可以用他的私有密钥进行解密,而且只有他持有的私有密钥可以解密。这种加密方式的好处显而易见。密钥只有一个人持有,也就更加容易进行保密,因为不需在网络上传送私人密钥,也就不用担心别人在认证会话初期截获密钥。
①公用密钥和私有密钥有两个相互关联的密钥;
②公用密钥加密的文件只有私有密钥能解开;
③私有密钥加密的文件只有公用密钥能解开 。
摘要函数
摘要是一种防止信息被改动的方法,其中用到的函数叫摘要函数。这些函数的输入可以是任意大小的消息,而输出是一个固定长度的摘要。摘要有这样一个性质,如果改变了输入消息中的任何东西,甚至只有一位,输出的摘要将会发生不可预测的改变,也就是说输入消息的每一位对输出摘要都有影响。总之,摘要算法从给定的文本块中产生一个数字签名(Fingerprint或Message Digest),数字签名可以用于防止有人从一个签名上获取文本信息或改变文本信息内容。
密钥的管理和分发
(1)使用同样密钥的时间范围
一般强调仅将一个对话密钥用于一条信息或一次对话中,或者建立一种按时更换密钥的机制以减小密钥暴露的可能性。
(2)保密密钥的分发
建立了一个安全的、可信任的密钥分发中心(Key Distribution Center,KDC),每个用户只要知道一个和KDC进行通信的密钥就可以了,而不需要知道成百上千个不同的密钥。
1.消息和加密
消息被称为明文。用某种方法伪装消息以隐藏它的内容的过程称为加密(Encryption),被加密的消息称为密文,而把密文转变为明文的过程称为解密(Decryption)。
使消息保密的技术和科学叫做密码编码学(Cryptography),从事此行的叫密码编码者(Cryptographer),密码分析者是从事密码分析的专业人员,密码分析学(Cryptanalysis)就是破译密文的科学和技术,即揭穿伪装。密码学(Cryptology)作为数学的一个分支,包括密码编码学和密码分析学两部分,精于此道的人称为密码学家(Cryptologist),现代的密码学家通常也是理论数学家。
加密函数E作用于明文 M得到密文C,可用数学公式表示:
E(M)=C
相反地,解密函数D作用于C产生M:
D(C)=M
先加密后再解密,原始的文明将恢复,故下面的等式必须成立:
D(E(M))=M
2.鉴别、完整性和抗抵赖
除了提供机密性外,密码学通常还有其它的作用。
(1)鉴别。消息的接收者应该能够确认消息的来源,入侵者不可能伪装成他人。
(2)完整性。消息的接收者应该能够验证在传送过程中消息没有被修改,入侵者不可能用假消息代替合法消息。
(3)抗抵赖。发送者事后不可能虚假地否认他发送的消息。
3.算法和密钥
密码算法(Algorithm)也叫密码(Cipher),是用于加密和解密的数学函数。通常情况下,有两个相关的函数,一个用作加密,另一个用作解密。
密钥用 K表示。K可以是很多数值里的任意值。密钥 K的可能值的范围叫做密钥空间。加密和解密运算都使用这个密钥(即运算都依赖于密钥,并用 K作为下标表示),这样,加/解密函数现在变成:
EK(M)=C DK(C)=M
这些函数具有的特性:DK(EK(M))=M
单钥加密解密
双钥加密解密
基于密钥的算法通常有两类:对称算法和公用密钥算法。
4.对称算法
对称算法有时又叫传统密码算法,就是加密密钥能够从解密密钥中推导出来,反过来也成立。
对称算法可分为两类。一次只对明文中的单个位(有时对字节)运算的算法称为序列算法或序列密码。另一类算法是对明文的一组位进行运算,这些位组称为分组,相应的算法称为分组算法或分组密码。
5.公用密钥算法
公用密钥算法(Public-Key Aalgorithm)也叫非对称算法,它是这样设计的:用作加密的密钥不同于用作解密的密钥,而且解密密钥不能根据加密密钥计算出来。
6.密码分析
密码分析学是在不知道密钥的情况下,恢复出明文的科学。成功的密码分析能恢复出消息的明文或密钥。密码分析也可以发现密码体制的弱点,最终得到上述结果。密钥通过非密码分析方式的丢失叫做泄露。常用的密码分析攻击有四类。
(1)唯密文攻击(Cipher Text-Only Attack)。密码分析者有一些消息的密文,这些消息都用同一加密算法加密。密码分析者的任务是恢复尽可能多的明文,或者最好是能推算出加密消息的密钥来,以便可采用相同的密钥解出其他被加密的消息。
(2)已知明文攻击(Known-Plaintext Attack)。密码分析者不仅可得到一些消息的密文,而且也知道这些消息的明文。分析者的任务就是用加密信息推出用来加密的密钥或推导出一个算法,此算法可以对用同一密钥加密的任何新的消息进行解密。
(3)选择明文攻击(Chosen-Plaintext Attack)。分析者不仅可得到一些消息的密文和相应的明文,而且他们也可选择被加密的明文。这比已知明文攻击更有效。因为密码分析者能选择特定的明文块去加密,那些块可能产生更多关于密钥的信息,分析者的任务是推出用来加密消息的密钥或导出一个算法,此算法可以对用同一密钥加密的任何新的消息进行解密。
(4)自适应选择明文攻击(Adaptive-Chosen-Plaintext Attack)。这是选择明文攻击的特殊情况。密码分析者不仅能选择被加密的明文,而且也能基于以前加密的结果修正这个选择。在选择明文攻击中,密码分析者还可以选择一大块被加密的明文,而在自适应选择密文攻击中,可选取较小的明文块,然后再基于第一块的结果选择另一明文块,依此类推。
(5)选择密文攻击(Chosen-Cipher Text Attack)。密码分析者能选择不同的被加密的密文,并可得到对应的解密的明文,例如密码分析者存取一个防窜改的自动解密盒,密码分析者的任务是推出密钥。
(6)选择密钥攻击(Chosen-Key Attack)。这种攻击并不表示密码分析者能够选择密钥,它只表示密码分析者具有不同密钥之间的关系的有关知识。
(7)软磨硬泡攻击(Rubber-Hose Cryptanalysis)。这种攻击是对密码分析者威胁、勒索,或者折磨某人,直到他给出密钥为止。行贿有时称为购买密钥攻击(purchase-key attack)。这些是非常有效的攻击,并且经常是破译算法的最好途径。
7.算法的安全性
不同的密码算法具有不同的安全等级。如果破译算法的代价大于加密数据的价值,破译算法所需的时间比加密数据保密的时间更长,用单密钥加密的数据量比破译算法需要的数据量少得多,那么这种算法可能是安全的。破译算法可分为不同的类别,安全性的递减顺序为:
全部破译。密码分析者找出密钥 K,这样 DK(C)=P。
全盘推导。密码分析者找到一个代替算法在不知道密钥 K的情况下,等价于DK(C)=P。
局部推导。密码分析者从截获的密文中找出明文。
信息推导。密码分析者获得一些有关密钥或明文的信息。这些信息可能是密钥的几个位、有关明文格式的信息等。。
电子邮件的加密
电子邮件加密的目的在于加大其安全性,进行秘密通信。
秘密通信的过程可用下面表格
来表示:
+--------+ 密文 +--------+
明文--->|加密变换|----->|解密变换|--->明文
+--------+ +--------+
^ ^
| |
密钥k 密钥k'
用文字可以表述为:若m是要传送的明文,在传送前,利用密钥k将m经加密变换为
密文c由通信通道发给接收者,接收者根据密钥k'利用解密变换将密文c变为明文m。
从以上过程可以看出,一个密码体制的安全性依赖于密钥k的个数和加密变换复杂
程度。密钥太少,敌方可以根据其截获的密文用不同的k逐个试译即可得到明文。也不
太多,太多则不利管理。加密变换太简单则容易找出解密变换,太复杂则导致解密过程
耗费时间太多,不利于通信。
加密算法介绍:
(1)古典密码:
世界上最早的一种密码产生于公元前两世纪。是由一位希腊人提出的,人们称之为
棋盘密码,原因为该密码将26个字母放在5×5的方格里,i,j放在一个格子里,具体情
况如下表所示
1 2 3 4 5
1 a b c d e
2 f g h i,j k
3 l m n o p
4 q r s t u
5 v w x y z
这样,每个字母就对应了由两个数构成的字符αβ,α是该字母所在行的标号,β是列
标号。如c对应13,s对应43等。如果接收到密文为
43 15 13 45 42 15 32 15 43 43 11 22 15
则对应的明文即为secure message。
另一种具有代表性的密码是凯撒密码。它是将英文字母向前推移k位。如k=5,则密
文字母与明文与如下对应关系
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 z
F G H I J K L M N O P Q R S T U V W X Y Z A B C D E
于是对应于明文secure message,可得密文为XJHZWJRJXXFLJ。此时,k就是密钥。为了
传送方便,可以将26个字母一一对应于从0到25的26个整数。如a对1,b对2,……,y对
25,z对0。这样凯撒加密变换实际就是一个同余式
c≡m+k mod 26
其中m是明文字母对应的数,c是与明文对应的密文的数。
随后,为了提高凯撒密码的安全性,人们对凯撒密码进行了改进。选取k,b作为两
个参数,其中要求k与26互素,明文与密文的对应规则为
c≡km+b mod 26
可以看出,k=1就是前面提到的凯撒密码。于是这种加密变换是凯撒野加密变换的
推广,并且其保密程度也比凯撒密码高。
以上介绍的密码体制都属于单表置换。意思是一个明文字母对应的密文字母是确定
的。根据这个特点,利用频率分析可以对这样的密码体制进行有效的攻击。方法是在大
量的书籍、报刊和文章中,统计各个字母出现的频率。例如,e出现的次数最多,其次
是t,a,o,I等等。破译者通过对密文中各字母出现频率的分析,结合自然语言的字母频
率特征,就可以将该密码体制破译。
鉴于单表置换密码体制具有这样的攻击弱点,人们自然就会想办法对其进行改进,
来弥补这个弱点,增加抗攻击能力。法国密码学家维吉尼亚于1586年提出一个种多表式
密码,即一个明文字母可以表示成多个密文字母。其原理是这样的:给出密钥
K=k[1]k[2]…k[n],若明文为M=m[1]m[2]…m[n],则对应的密文为C=c[1]c[2]…c[n]。
其中C[i]=(m[i]+k[i]) mod 26。例如,若明文M为data security,密钥k=best,将明
文分解为长为4的序列data security,对每4个字母,用k=best加密后得密文为
C=EELT TIUN SMLR
从中可以看出,当K为一个字母时,就是凯撒密码。而且容易看出,K越长,保密程
度就越高。显然这样的密码体制比单表置换密码体制具有更强的抗攻击能力,而且其加
密、解密均可用所谓的维吉尼亚方阵来进行,从而在操作上简单易行。该密码可用所谓
的维吉尼亚方阵来进行,从而在操作上简单易行。该密码曾被认为是三百年内破译不了
的密码,因而这种密码在今天仍被使用着。
古典密码的发展已有悠久的历史了。尽管这些密码大都比较简单,但它在今天仍有
其参考价值。
(2)近代密码
1834年,伦敦大家的实验物理学教授惠斯顿发明了电机,这是通信向机械化、电气
化跃进的开始,也是密码通信能够采用在线加密技术提供了前提条件。
前面已经讲过,密码技术的成果首先被用于战争,下面的例子就是一个明证。1914
年第一次世界大战爆发,德俄相互宣战。在交战过程中,德军破译了俄军第一军经给第
二军的电文,从中得知,第一军的给养已经中断。根据这一重要情报,德军在这次战役
中取得了全胜。这说明当时交战双方已开展了密码战,又说明战争刺激了密码的发展。
1920年,美国电报电话公司的弗纳姆发明了弗纳姆密码。共原理是利用电传打字机
的五单位码与密钥字母进行模2相加。如若信息码(明文)为11010,密钥码为11101,
则模2相加得00111即为密文码。接收时,将密文码再与密钥码模2相加得信息码(明文)
11010。
这种密码结构在今天看起来非常简单,但由于这种密码体制第一次使加密由原来的
手工操作进入到由电子电路来实现,而且加密和解密可以直接由机器来实现,因而在近
代密码学发展史上占有重要地位。随后,美国人摩波卡金在这种密码基础上设计出一种
一次一密体制。该体制当通信业务很大时,所需的密钥量太过庞大,给实际应用带来很
多困难。之后,这种一次一密制又有了进一步改进,但历史事实证明,这种密码体制是
不安全的,在太平洋战争中爱猫扑,爱生活使用的九七式机械密码就属于这一种。1940年,美国陆
军通信机关破译了这种密码。在中途岛海战中,爱猫扑,爱生活海军大将山本五十六因密码电报被
美国截获破译而被击毙在飞机上。
(3)现代密码学
古典密码和近代密码的研究还称不上是一门科学。直到1949
年香农发表了一篇题为“保密系统的通信理论”的著名论文,该文首先将信息论引入了
密码,从而把已有数千年历史的密码学推向了科学的轨道,奠定了密码学的理论基础。
该文利用数学方法对信息源、密钥源、接收和截获的密文进行了数学描述和定量分析,
提出了通用的秘密钥密码体制模型。
在密码学发展的进程中的另一件值得注意的事件是,在1976年,美国密码学家迪菲
和赫尔曼在一篇题为“密码学的新方向”一文中提出了一个崭新的思想,不仅加密算法
本身可以公开,甚至加密用的密钥也可以公开。但这前不意味着保密程度的降低。因为
如果加密密钥和解密密钥不一样。而将解密密钥保密就可以。这就是著名的公钥密码体
制。若存在这样的公钥体制,就可以将加密密钥象电话簿一样公开,任何用户当它想经
其它用户传送一加密信息时,就可以从这本密钥薄中查到该用户的公开密钥,用它来加
密,而接收者能用只有它所具有的解密密钥得到明文。任何第三者不能获得明文。
1978年,由美国麻省理工学院的里维斯特,沙米尔和阿德曼提出了RSA公钥密码体
制,它是第一个成熟的、迄今为止理论上最成功的公钥密码体制。它的安全性是基于数
论中的大整数因子分解。该问题是数论中的一个困难问题,至今没有有效的算法,这使
得该体制具有较高的保密性。
常用加密方法:
保密密钥对称加密算法之DES算法
美国国家标准局1973年开始研究除国防部外的其它部门的计算机系统的数据加密标准,于1973年5月15日和1974年8月27日先后两次向公众发出了征求加密算法的公告。加密算法要达到的目的(通常称为DES 密码算法要求)主要为以下四点:
☆提供高质量的数据保护,防止数据未经授权的泄露和未被察觉的修改;
☆具有相当高的复杂性,使得破译的开销超过可能获得的利益,同时又要便于理解和掌握;
☆DES密码体制的安全性应该不依赖于算法的保密,其安全性仅以加密密钥的保密为基础;
☆实现经济,运行有效,并且适用于多种完全不同的应用。
DES算法的入口参数有三个:Key、Data、Mode。其中Key为8个字节共64位,是DES算法的工作密钥;Data也为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密。
DES算法是这样工作的:如Mode为加密,则用Key 去把数据Data进行加密,生成Data的密码形式(64位)作为DES的输出结果;如Mode为解密,则用Key去把密码形式的数据Data解密,还原为Data的明码形式(64 位)作为DES的输出结果。在通信网络的两端,双方约定一致的Key,在通信的源点用Key对核心数据进行DES加密,然后以密码形式在公共通信网(如电话网)中传输到通信网络的终点,数据到达目的地后,用同样的Key对密码数据进行解密,便再现了明码形式的核心数据。这样,便保证了核心数据(如PIN、 MAC等)在公共通信网中传输的安全性和可靠性。
通过定期在通信网络的源端和目的端同时改用新的Key,便能更进一步提高数据的保密性,这正是现在金融交易网络的流行做法。
DES算法详述
DES算法把64位的明文输入块变为64位的密文输出块,它所使用的密钥也是64位,整个算法的主流程图如下:
其功能是把输入的64位数据块按位重新组合,并把输出分为L0、R0两部分,每部分各长32位,其置换规则见下表:
58,50,12,34,26,18,10,2,60,52,44,36,28,20,12,4,
62,54,46,38,30,22,14,6,64,56,48,40,32,24,16,8,
57,49,41,33,25,17, 9,1,59,51,43,35,27,19,11,3,
61,53,45,37,29,21,13,5,63,55,47,39,31,23,15,7,
即将输入的第58位换到第一位,第50位换到第2位,...,依此类推,最后一位是原来的第7位。L0、R0则是换位输出后的两部分,L0是输出的左 32位,R0 是右32位,例:设置换前的输入值为D1D2D3......D64,则经过初始置换后的结果为:L0=D58D50...D8;R0= D57D49...D7。
经过16次迭代运算后。得到L16、R16,将此作为输入,进行逆置换,即得到密文输出。逆置换正好是初始置的逆运算,例如,第1位经过初始置换后,处于第40位,而通过逆置换,又将第40位换回到第1位,其逆置换规则如下表所示:
40,8,48,16,56,24,64,32,39,7,47,15,55,23,63,31,
38,6,46,14,54,22,62,30,37,5,45,13,53,21,61,29,
36,4,44,12,52,20,60,28,35,3,43,11,51,19,59,27,
34,2,42,10,50,18,58 26,33,1,41, 9,49,17,57,25,
放大换位表
32, 1, 2, 3, 4, 5, 4, 5, 6, 7, 8, 9, 8, 9, 10,11,
12,13,12,13,14,15,16,17,16,17,18,19,20,21,20,21,
22,23,24,25,24,25,26,27,28,29,28,29,30,31,32, 1,
单纯换位表
16,7,20,21,29,12,28,17, 1,15,23,26, 5,18,31,10,
2,8,24,14,32,27, 3, 9,19,13,30, 6,22,11, 4,25,
在f(Ri,Ki)算法描述图中,S1,S2...S8为选择函数,其功能是把6bit数据变为4bit数据。下面给出选择函数Si(i=1,2......8)的功能表:
选择函数Si
S1:
14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,7,
0,15,7,4,14,2,13,1,10,6,12,11,9,5,3,8,
4,1,14,8,13,6,2,11,15,12,9,7,3,10,5,0,
15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13,
S2:
15,1,8,14,6,11,3,4,9,7,2,13,12,0,5,10,
3,13,4,7,15,2,8,14,12,0,1,10,6,9,11,5,
0,14,7,11,10,4,13,1,5,8,12,6,9,3,2,15,
13,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9,
S3:
10,0,9,14,6,3,15,5,1,13,12,7,11,4,2,8,
13,7,0,9,3,4,6,10,2,8,5,14,12,11,15,1,
13,6,4,9,8,15,3,0,11,1,2,12,5,10,14,7,
1,10,13,0,6,9,8,7,4,15,14,3,11,5,2,12,
S4:
7,13,14,3,0,6,9,10,1,2,8,5,11,12,4,15,
13,8,11,5,6,15,0,3,4,7,2,12,1,10,14,9,
10,6,9,0,12,11,7,13,15,1,3,14,5,2,8,4,
3,15,0,6,10,1,13,8,9,4,5,11,12,7,2,14,
S5:
2,12,4,1,7,10,11,6,8,5,3,15,13,0,14,9,
14,11,2,12,4,7,13,1,5,0,15,10,3,9,8,6,
4,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14,
11,8,12,7,1,14,2,13,6,15,0,9,10,4,5,3,
S6:
12,1,10,15,9,2,6,8,0,13,3,4,14,7,5,11,
10,15,4,2,7,12,9,5,6,1,13,14,0,11,3,8,
9,14,15,5,2,8,12,3,7,0,4,10,1,13,11,6,
4,3,2,12,9,5,15,10,11,14,1,7,6,0,8,13,
S7:
4,11,2,14,15,0,8,13,3,12,9,7,5,10,6,1,
13,0,11,7,4,9,1,10,14,3,5,12,2,15,8,6,
1,4,11,13,12,3,7,14,10,15,6,8,0,5,9,2,
6,11,13,8,1,4,10,7,9,5,0,15,14,2,3,12,
S8:
13,2,8,4,6,15,11,1,10,9,3,14,5,0,12,7,
1,15,13,8,10,3,7,4,12,5,6,11,0,14,9,2,
7,11,4,1,9,12,14,2,0,6,10,13,15,3,5,8,
2,1,14,7,4,10,8,13,15,12,9,0,3,5,6,11,
在此以S1为例说明其功能,我们可以看到:在S1中,共有4行数据,命名为0,1、2、3行;每行有16列,命名为0、1、2、3,......,14、15列。
现设输入为: D=D1D2D3D4D5D6
令:列=D2D3D4D5
行=D1D6
然后在S1表中查得对应的数,以4位二进制表示,此即为选择函数S1的输出。下面给出子密钥Ki(48bit)的生成算法
从子密钥Ki的生成算法描述图中我们可以看到:初始Key值为64位,但DES算法规定,其中第8、16、......64位是奇偶校验位,不参与 DES运算。故Key 实际可用位数便只有56位。即:经过缩小选择换位表1的变换后,Key 的位数由64 位变成了56位,此56位分为C0、D0两部分,各28位,然后分别进行第1次循环左移,得到C1、D1,将C1(28位)、D1(28位)合并得到56 位,再经过缩小选择换位2,从而便得到了密钥K0(48位)。依此类推,便可得到K1、K2、......、K15,不过需要注意的是,16次循环左移对应的左移位数要依据下述规则进行:
循环左移位数
1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1
以上介绍了DES算法的加密过程。DES算法的解密过程是一样的,区别仅仅在于第一次迭代时用子密钥K15,第二次K14、......,最后一次用K0,算法本身并没有任何变化。
由上述DES算法介绍我们可以看到:DES算法中只用到64位密钥中的其中56位,而第8、16、24、......64位8个位并未参与DES运算,这一点,向我们提出了一个应用上的要求,即DES的安全性是基于除了8,16,24,......64位外的其余56位的组合变化256才得以保证的。因此,在实际应用中,我们应避开使用第8,16, 24,......64位作为有效数据位,而使用其它的56位作为有效数据位,才能保证DES算法安全可靠地发挥作用。如果不了解这一点,把密钥Key的 8,16,24,..... .64位作为有效数据使用,将不能保证DES加密数据的安全性,对运用DES来达到保密作用的系统产生数据被破译的危险,这正是DES算法在应用上的误区,留下了被人攻击、被人破译的极大隐患。
DES使用56位密钥对64位的数据块进行加密,并对64位的数据块进行16轮编码。与每轮编码时,一个48位的“每轮”密钥值由56位的完整密钥得出来。DES用软件进行解码需要用很长时间,而用硬件解码速度非常快,但幸运的是当时大多数黑客并没有足够的设备制造出这种硬件设备。
在1977年,人们估计要耗资两千万美元才能建成一个专门计算机用于DES的解密,而且需要12个小时的破解才能得到结果。所以,当时DES被认为是一种十分强壮的加密方法。
但是,当今的计算机速度越来越快了,制造一台这样特殊的机器的花费已经降到了十万美元左右,所以用它来保护十亿美元的银行间线缆时,就会仔细考虑了。另一个方面,如果只用它来保护一台服务器,那么DES确实是一种好的办法,因为黑客绝不会仅仅为入侵一个服务器而花那么多的钱破解DES密文。由于现在已经能用二十万美元制造一台破译DES的特殊的计算机,所以现在再对要求“强壮”加密的场合已经不再适用了。
三重DES
因为确定一种新的加密法是否真的安全是极为困难的,而且DES的唯一密码学缺点,就是密钥长度相对比较短,所以人们并没有放弃使用DES,而是想出了一个解决其长度问题的方法,即采用三重DES。这种方法用两个密钥对明文进行三次加密,假设两个密钥是K1和K2,其算法的步骤如图5.9所示:
1. 用密钥K1进行DEA加密。
2. 用K2对步骤1的结果进行DES解密。
3. 用步骤2的结果使用密钥K1进行DES加密。
这种方法的缺点,是要花费原来三倍时间,从另一方面来看,三重DES的112位密钥长度是很“强壮”的加密方式了。
DES举例
已知明文m=computer,密钥k=program,用ASCII码表示为:
m=01100011 01101111 01101101 01110000 01110101 01110100 01100101 01110010
k=01110000 01110010 01101111 01100111 01110010 01100001 01101101
因为k只有56位,必须插入第8,16,24,32,40,48,56,64位奇偶校验位,合成64位。而这8位对加密过程没有影响。
m经过IP置换后得到
L0= 11111111 10111000 01110110 01010111
R0= 00000000 11111111 00000110 10000011
密钥k通过PC-1得到
C0= 11101100 10011001 00011011 1011
D0= 10110100 01011000 10001110 0110
再各自左移一位,通过PC-2得到48位
k1=00111101 10001111 11001101 00110111 00111111 00000110
R0(32位)经E作用膨胀为48位,
10000000 00010111 11111110 10000000 11010100 00000110
再和k1作异或运算得到(分成8组)
101111 011001 100000 110011 101101 111110 101101 001110
通过S盒后输出位32比特,
01110110 00110100 00100110 10100001
S盒的输出又经过P置换得到
01000100 00100000 10011110 10011111
这时 :
如此,迭代16次以后,得到密文:
01011000 10101000 01000001 10111000 01101001 11111110 10101110 00110011
明文或密钥每改变一位,都会对结果密文产生剧烈的影响。任意改变一位,其结果大致有将近一半的位发生了变化。
DES解密
在经过所有的代替、置换、异或和循环移动之后,获得了这样一个非常有用的性质:加密和解密可使用相同的算法。
DES使得用相同的函数来加密或解密每个分组成为可能,二者的唯一不同之处是密钥的次序相反。这就是说,如果各轮的加密密钥分别是K1,K2,K3…,K16那么解密密钥就是K16,K15,K14……,K1。为各轮产生密钥的算法也是循环的。密钥向右移动,每次移动个数为0,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1。
2.数字签名技术
由于越来越多的人通过电子邮件发送机密信息,因此如何识别收到电子邮件是否伪造、保证所发送的邮件不被除收件人以外的其他人阅读变得日趋重要。使用建立在公开密钥加密技术基础上的“数字签名”技术,可以在电子事务中证明用户的身份,就像兑付支票时要出示有效证件一样。用户也可以使用数字签名来加密邮件以保护个人隐私。
(1)发送方作数字签名。若要证明自己确实发出了某封电子邮件而且邮件的内容在发出以后没有被改变,用户可以使用数学家们研究的算法(一般称之为报文分解算法,用户只要有相应的软件就行,并不需要关心算法如何实现)对自己即将发出的邮件进行计算(分解或提炼),得到一个很大的(即很长的)、独一无二的数,然后再用自己的私有密钥对这个数加密,将加密后的数、自己的公钥和电子邮件一块发给他人。
(2)接收方鉴定数字签名。其他人得到用户的电子邮件后,一方面可使用数学家们研究的算法对收到的电子邮件进行计算,将得到一个数,假定为B;另一方面则使用用户的公开密钥将由用户用私有密钥加密的数解密还原,假定为A;如果A等于B,则说明电子邮件发出后没有被改变过。如果改变过,则A和B肯定不相等,因为数学家们的报文分解算法能保证世界上任何两个不同的信息经过其分解提炼后,得到的数实际上不可能一样(理论上推算应有非常多的相同,但经过几十年的实践,还没有谁找到过相同的例子,而且从理论上讲也很难找),哪怕二者只有微小的差别,例如多一个空格。其他人也不可能改变用户加密后的数,虽然任何人都能通过用户的公开密钥知道这个数是多少,也就是说,当只有用户一人掌握私有密钥时,其他人不可能对某个数加密后还能用用户的公开密钥解密。因此,若有人改变了邮件的内容并重新计算出了新的大数,但他无法制作(伪造)加密后的新的大数(因为他没有用户的私有密钥),因而收件人就可根据二者是否相等来判断所收邮件是否真的出自发件人之手(能解密就可证明)以及邮件发出后是否被他人篡改过(A和B是否相等)。这种技术就是数字签名技术,加密后的大数就是数字签名(在Microsoft系统中,为方便公钥的传播与散发,数字签名中通常还包括签名者的公钥)。
实践:
为了给他人发送有数字签名的电子邮件,用户应该使用Outlook Express或Microsoft Outlook。用户只要将自己的数字证书(在Outlook Express中,数字证书也称数字标识)安装完毕,并且在Outlook Express中为自己配置好相应的电子邮件账号,便可以根据需要对待发的电子邮件进行数字签名。
必须提请用户注意的是:用户电子邮件账号的发件人地址必须与数字证书中指定的电子邮件地址相同。如果用户拥有多个电子邮件账号(邮箱),用户必须为每个要用来发送安全邮件的账号准备一个单独的数字证书。在使用数字签名时,如果用户没有进行相应的设置,Outlook Express将在计算机上进行搜索,以找到一个带有相同电子邮件地址的有效数字证书,并将其添加到用户的电子邮件账号中。如果找到了多个有效的数字证书,用户必须从中选择一个添加到账号中。
用户也可直接指定或查看某个电子邮件帐号所使用的数字证书,而不需要Outlook Express进行搜索。
电子邮件数字签名的签发与鉴定
数字签名的操作相当简单,只需要在撰写电子邮件时,单击工具栏上的“签名”按钮,如图26所示。需要提醒用户注意的是,图26中的发件人应选择正确(若用户只在Outlook Express中添加了一个电子邮件账号,则不存在选择的问题)。
邮件撰写完毕,单击工具栏上的“发送”按钮即可。
电子邮件的加密与解密
电子邮件的加密操作非常简单,操作过程与数字签名类似,在图26中单击工具栏上的“加密”按钮即可完成。当然,用户对待发电子邮件即可数字签名,又可同时加密。与数字签名不同的是,加密不需要输入什么密码,因为加密过程中使用的是收件人的公钥证书。
解密过程也是由Outlook Express自动完成的,但Outlook Express可能会要求用户输入密码(因为解密过程需要使用用户的私钥)----前提是用户对自己的私钥设置了密码保护而且没有让Outlook Express记录密码,与进行数字签名所要求的一样,用户也千万不要选择选项“记录密码”。
必须说明的是:要想给某人发送加密邮件,用户必须有收件人的数字标识(公钥证书),并且该标识必须与它们在用户的通讯簿中的名称相关联。在用户接收带有数字签名的邮件的时候,OE自动将数字标识添加到用户的通讯簿。如果用户已关闭此选项,则需要手动添加联系人的数字标识。方法是:打开带有数字签名的邮件,在文件菜单上单击“属性”,单击“安全”选项卡,然后单击“将数字标识添加到通讯簿”。若联系人有数字标识,他们在通讯簿中的卡片将被添上一个红色的飘带。
用户也可以从某个证书管理机构的Web站点下载,从而得到某人的数字标识。再到通讯簿中为该联系人创建一个新项目,或双击通讯簿中已有的联系人,在“数字标识”选项卡上,单击“导入”,找到该数字标识文件,然后单击“打开”。
软件介绍:PGP加密软件的应用
软件版本是PGP International Freeware 5.0I,使用PGP能够加密保护信件正文以及作为附件的图形声音文件、文本文件和其他任意类型的数据文件。
(1)软件的安装与设置
安装后,WIN95的Exchange或者Outlook就增加了PGP软件及相应的菜单和按钮。如果你使用的电子邮件软件没有PGP的软件支持,不必担心,PGP还可以通过文件快捷菜单和剪贴板这两种手段与电子邮件软件交换加密数据,所以PGP可以直接或间接地支持所有电子邮件软件。
安装后,用户能够使用两个程序:PgpTrays.exe和PgpKeys.exe。PgpTray.exe是控制中心,提供对所有功能的操作界面,并且执行后在任务栏中供用户随时调用,建议将其添加到开始菜单的“启动”。而PgpKeys.exe可以对密钥进行生成、散发与废除、签名与信任等管理。
(2)密钥管理
PgpKeys管理着一个钥匙环(KeyRing),钥匙环文件保存着你收集到的所有公开密钥,由此可以进行密钥维护与管理。
①生成新的密钥对
每一个用户都必须生成自己的密钥对,这是使用PGP加密的第一步。在PgpKeys中选择菜单:Key-NewKey,弹出生成密钥窗口,填写用户名、电子信箱地址;然后要选择密钥长度,长度与抗解密攻击强度成正比,但与运算速度成反比,一般选择1024-2048bit较合适。确定密钥生存周期:你可以制定该密钥在一定天数后过期作废,通常选择NEVER(永不过期);最后要定义保护密钥的口令,口令可以防止别人使用你的密钥,较安全的口令长度要不少于8位,并且至少包含一个非字母的字符。生成密钥后,你可以选择是否立即将新的公开密钥发送到因特网的密钥服务器上,这样其他希望与你通信的用户可以直接到密钥服务器下载你的公开密钥。
②散发和获取公开密钥
散发和获取公开密钥有两种途径:
①通过网上公共的密钥服务器:在PgpKeys的密钥列表中选择某个公开密钥,点击鼠标右键,在弹出的快捷菜单中选择Key Server-Send Selected Keys(发送密钥至服务器),即可上载公开密钥。选择Get Selected Keys(获取指定人的密钥)或者主菜单Keys- Key Server-Find New Key(通过电子信箱地址和姓名查找新密钥),即可在密钥服务器上查询和下载密钥,并安装到你的钥匙环上。
②通过电子邮件:在PgpKeyS的密钥列表中选择某个公开密钥,点击鼠标右键,在弹出的快捷菜单中选择Export(导出),将选中的密钥保存为一个后缀名为ASC的文本文件,作为电子邮件的附件发送给对方;收到密钥文件后,对方在PgpKeys的菜单中选择Import(导入),或者在运行 PgpKeyS后,双击该密钥文件,即可将公开密钥挂在钥匙环上。
③签名与信任
密钥的安全是加密成功的关键,如果交换公开密钥的双方不能确定相互信任对方密钥的真实性,那么就谈不上密钥的安全。最可靠的交换密钥方式莫过于密钥所有者将密钥保存在一张磁盘上,然后亲手交给你。但这种理想条件在因特网上很难做到(如果能做到,干脆就直接传递正文了,还用得着交换密钥吗?),特别是当你通过电子邮件或者密钥服务器获取密钥时要如此。因此,获得他人的公开密钥并挂到钥匙环上以后,必须经过验证,再使用你自己的私人密钥对其签名以设定信任等级。
验证的方法有两种:
①验证密钥的指纹:每一个密钥在生成的时候都产生一个唯一对应的数字指纹,这是一串数字,最保险的办法是要求密钥所有者在电话里报出密钥指纹供你验证。
②通过可信认的介绍人来验证密钥的信任度:任何人都可以用自己的私人密钥对他人的公开密钥进行数字签名,表示相信该密钥属于其真正的主人,即确认其真实性。如果你信任签名的介绍人,就可以信任从他那里得到的被签名的公开密钥。你可以通过验证介绍人的数字签名进行确认。
验证一个密钥的真实性后,可以用你的私人密钥对其进行签名并设定其信任等级。在PgpKeys的密钥列表中选择该公开密钥,点击鼠标右键,在弹出的快捷菜单中选择Sign(签名),回答口令后即将该公开密钥签名;在右键快捷菜单中选择 Key Properties(密钥属性卿可修改信任等级。
④密钥的废除
假如你不再信任你的密钥对,你可以通过废除操作来取消它们,在PgpKeys的密钥列表中选择该公开密钥,在右键快捷菜单中选择Revoke(废除),然后将废除的密钥上载到公开密钥服务器,或者通过电子邮件发送给你的通讯伙伴。这时你必须在生成新的密钥对并散发。
(3)数字签名与验证签名
如果你想保证发出的信件不被冒名或篡改,可以用你的私人密钥对电子邮件签名,收信人可以使用你的公开密钥来验证你的签名。注意:经过签名的信件不能篡改,但仍然是明文,不经解密即可阅读,另外也不对收信人进行加密,不能限定只有指定的收信人收信读信。
对于有PGP软件支持的电子邮件软件,点击相应按钮即可实现数字签名。对于不能直接支持的软件,可以通过剪贴板来实现PGP与电子邮件软件的数据交换。将信件正文COPY到剪贴板,点击PgpTrays的Sign Clipboard(对剪贴板签名),然后用签名后的内容粘贴(Paste)替换原有正文,或者直接点击PgpTrays的Edit Clipboard Text(编辑剪贴板正文)写信,签名后粘贴到邮件中,签名时需要回答密钥口令。
收信人点击PgpTrays的Verify Clipboard(验证剪贴板)进行签名的验证。
以下为信件原文(只有一行文本):
PGP is Pretty Good Privacy.
以下为签名后的信件:
————BEGIN PGP SIGNED MESSAGE—————
HSSh: SHAI
PGP is Pretty Good Privacy
——BEGIN PGP SIGNATURE——————
Version: PGP freeware 5.0i for non-commercial use
Charset: noconv
bIZfVlllLSErX7woez95YkFIAnZUQ
pth7FosghHZXPfUqf1Ttn.--qqsq
——END PGP SIGNATURE——————
可以看到,正文仍然为明文,在正文后面,是一块签名信息。
(4)加密与解密
加密可以保证只有指定的收信人才能收信和读信,因为你使用对方的公开密钥对信件加密后,对方只有使用对应的私人密钥才能解密信件。
与数字签名动作类似,对于有PGP软件支持的电子邮件软件,点击相应按钮即可实现加密。对于不能直接支持的软件,邮件正文的加密可以通过剪贴板来实现PGP与电子邮件软件的数据交换。而附件文件的加密则可以在资源管理器中通过右键快捷菜单中的PGP选项来实现加密(这个选项是在安装PGP软件时增加的),然后添加到附件中,加密时需要选择钥匙环中的收信人并回答密钥口令。解密过程类似。
注意:加密可以保证只有加密才能保证只有指定的收信人才能收信和读信,但不能防止他人冒用你的名义,利用收信人的公开密钥加密发送冒名的信件。最安全的方式就是加密并且签名(Encrypt And Sign Clipboard),这样发信人和收信人都受保护。
以下为信件原文(只有一行文本):
PGP is Pretty Good Privacy.
以下为加密且签名后的信件(有删节):
———— BEGIN PGP MESSAGE———
Version:PGP freeware 5.0i for non-commercial use
MessageID:XSLSSXOOCIFtgoiPPVklWSUShaIVCE
KCpEQ iG+Iculcm[1:lunzgKr6z+YICA+
mp+6fB346j8FXOWV7
ubsbinlrsvb6tliK76M
————— END PGP MESSAGE—————
在BEGIN和END之间保存着密文,没有收信人的私人密钥是不可能解密阅读的。
使用PGP加密软件,可以有效地保证电子邮件的通信安全,从而使办公自动化网络更加可靠。同时用户也为此付出了额外的传输时间和密钥维护管理工作等成本,但为了安全,必要的代价是值得的。
1.电子邮件传输原理
当用户发送一封电子邮件时,他并不能直接将信件发送到对方邮件地址指定的服务器上,而是必须首先试图去寻找一个信件传输代理,把邮件提交给它;信件传输代理得到了邮件后,首先将它保存在自身的缓冲队列中,然后,根据邮件的目标地址,信件传输代理程序查询到应对这个目标地址负责的邮件传输代理服务器,并且通过网络将邮件传送给它。对方的服务器接收到邮件之后,将其缓冲存储在本地,直到电子邮件的接收者察看自己的电子信箱。显然,邮件传输是从服务器到服务器的,而且每个用户必须拥有服务器上存储信息的空间(称为信箱)才能接受邮件。(发送邮件不受这个限制)。
而投递代理则从信件传输代理取得信件传送至最终用户的邮箱。显然,最终用户只能看到用户投递代理。常见的投递代理包括procmail等。
用户代理接受用户输入的各种指令,将用户的邮件传送至信件传输代理或者通过pop、Imap将信件从传输代理服务器处取到本机上。常见的用户代理有“foxmail”,“outlook express”等邮件客户程序。
可以看到,一个邮件传输代理的主要工作是监视用户代理的请求,根据电子邮件的目标地址找出对应的邮件服务器,将信件在服务器之间传输并且将接收到的邮件缓冲或者提交给最终投递程序。
有许多的程序可以作为信件传输代理,包括qmail、sendmail、postfix等等。
无论什么产品,它们必须支持同样的规范,如传输信件的报文格式,监听的端口等等。一般来说,系统管理员并不需要了解信件传输的命令标准,用户代理会生成正确的命令。但是,了解一些相关信息是重要的。
信件传输代理默认监听25号端口接受请求,当接受用户的请求时,它不需要了解用户的真实身份,或者说不需要身份验证。因此用户不需要提交用户口令就可以发出电子邮件,这意味着任何用户都可以冒充成另外一个用户发出假的电子邮件,这是电子邮件原始设计时导致的一个特点,无法消除。(关于这一点目前有一点说明。许多基于UNIX的系统运行indentd,可以记录客户机器上的用户的登录名字。不过,这个功能实际上用处不大,毕竟大部分人不会用UNIX/Linux作为他的个人机器)。
当邮件服务器程序得到一封待发送的邮件时,它首先需要根据目标地址确定将信件投递给哪一个服务器,这是通过DNS服务实现的。例如,有一封邮件的目标地址是someone@yahoo.com,那么,sendmail首先确定这个地址是用户名(someone)+机器名(yahoo.com)的格式,然后,通过查询DNS来确定需要把信件投递给某个服务器
显然,在DNS中说明yahoo.com有两个信件交换(MX)服务器,于是,sendmail试图将邮件发送给两者之一。一般来说,排在前面的的MX服务器的优先级别比较高,因此服务器将试图连接mx1.mail.yahoo.com的25端口,试图将信件报文转发给它。如果成功,你的smtp服务器的任务就完成了,在这以后的任务,将由mx1.mail.yahoo.com来完成。在一般的情况下,mx交换器会自动把信件内容转交给目标主机,不过,也存在这样的情况,目标主机(比如yahoo.com)可能并不存在,或者不执行smtp服务,而是由其mx交换器来执行信件的管理,这时候,最终的信件将保存在mx机器上,直到用户来察看它。
电子邮件安全措施:
使用安全电子邮件-S/MIME (Secure/ Multipurpose Internet Mail Extensions)
安全电子邮件-S/MIME (Secure/ Multipurpose Internet Mail Extensions) 是 Internet 中用来发送安全电子邮件的协议。S/MIME为电子邮件提供了数字签名和加密功能。该标准允许不同的电子邮件客户程序彼此之间收发安全电子邮件。为了使用安全电子邮件-S/MIME,必须使用支持S/MIME功能的电子邮件程序。例如Outlook Express 4和Nectscape Messenger 4.0 等以上版本。
签名电子邮件和加密电子邮件:签名一个电子邮件意味着,将自己的数字证书附加到电子邮件中,接收方就可以确定是谁。签名提供了验证功能,但是无法保护信息内容的隐私,第三方有可能看到其中的内容。加密电子邮件意味着只有指定的收信人才能够看到信件的内容。为了发送签名邮件,必须有自己的数字证书。为了加密邮件,必须有收信人的数字证书。
就当打字不容易了了,供娱乐
参考文献 《计算机网络安全与加密技术》科学出版社2001北京
《数字签名原理及技术》机械工业出版社2004北京
《计算机网络安全基础》人民邮电出版社2002北京
一 密码学简介
1.加密的历史
作为保障数据安全的一种方式,数据加密起源于公元前2000年。埃及人是最先使用特别的象形文字作为信息编码的人。随着时间推移,巴比伦,希腊等都开始使用一些方法来保护他们的书面信息。对信息进行编码曾被Julias Caesar(恺撒大帝)使用,也曾用于历次战争中,包括美国独立战争,美国内战和两次世界大战。最广为人知的编码机器是German Enigma机,在第二次世界大战中德国人利用它创建了加密信息。此后,由于Alan Turing 和Ultra计划及其他人的努力,终于对德国人的密码进行了破解。当初,计算机的研究就是为了破解德国人的密码,当时人们并没有想到计算机给今天带来的信息革命。随着计算机的发展,运算能力的增强,过去的密码都变的十分简单了。于是人们又不断地研究出了新的数据加密方式,如私有密钥算法和公有密钥算法。可以说,是计算机推动了数据加密技术的发展。
2.密码学的发展
密码学的发展可以分为两个阶段。第一个阶段是计算机出现之前的四千年(早在四千年前,古埃及就开始使用密码传递消息),这是传统密码学阶段,基本上靠人工对消息加密、传输和防破译。第二阶段是计算机密码学阶段,包括:
①传统方法的计算机密码学阶段。解密是加密的简单逆过程,两者所用的密钥是可以简单地互相推导的,因此无论加密密钥还是解密密钥都必须严格保密。这种方案用于集中式系统是行之有效的。
②包括两个方向:一个方向是公用密钥密码(RSA),另一个方向是传统方法的计算机密码体制——数据加密标准(DES)。
3.什么是密码学?
密码学包括密码编码学和密码分析学。密码体制的设计是密码编码学的主要内容,密码体制的破译是密码分析学的主要内容。密码编码技术和密码分析技术是相互依存、相互支持、密不可分的两个方面。
数据加密的基本过程包括对称为明文的可读信息进行处理,形成称为密文或密码的代码形式。该过程的逆过程称为解密,即将该编码信息转化为其原来的形式的过程。
4.加密的重要性
为什么需要进行加密
因特网是危险的,而且这种危险是TCP/IP协议所固有的,一些基于TCP/IP的服务也是极不安全的,另一方面,因特网把全世界连在了一起,走向因特网就意味着走向了世界。为了使因特网变得安全和充分利用其商业价值,人们选择了数据加密和基于加密技术的身份认证。
二 密码学与电子邮件加密
1.加密方法简介及本地文本邮件加密
加密密钥
加密算法通常是公开的,现在只有少数几种加密算法,如 DES和 IDEA等。一般把受保护的原始信息称为明文,编码后的信息称为密文。尽管大家都知道使用加密方法,但对密文进行解码必须要有正确的密钥,而密钥是保密的。
(1)保密密钥和公用/私有密钥
在保密密钥中,加密者和解密者使用相同的密钥,也被称为对称密钥加密。这种加密算法的问题是,用户必须让接收人知道自己所使用的密钥,这个密钥需要双方共同保密,任何一方的失误都会导致机密的泄露,而且在告诉收件人密钥过程中,还需要防止任何人发现或偷听密钥,这个过程被称为密钥发布。
公用/私有密钥,与单独的密钥不同,它使用相互关联的一对密钥,一个是公用密钥,任何人都可以知道,另一个是私有密钥,只有拥有该对密钥的人知道。如果有人发信给这个人,他就用收信人的公用密钥对信件进行过加密,当收件人收到信后,他就可以用他的私有密钥进行解密,而且只有他持有的私有密钥可以解密。这种加密方式的好处显而易见。密钥只有一个人持有,也就更加容易进行保密,因为不需在网络上传送私人密钥,也就不用担心别人在认证会话初期截获密钥。
①公用密钥和私有密钥有两个相互关联的密钥;
②公用密钥加密的文件只有私有密钥能解开;
③私有密钥加密的文件只有公用密钥能解开 。
摘要函数
摘要是一种防止信息被改动的方法,其中用到的函数叫摘要函数。这些函数的输入可以是任意大小的消息,而输出是一个固定长度的摘要。摘要有这样一个性质,如果改变了输入消息中的任何东西,甚至只有一位,输出的摘要将会发生不可预测的改变,也就是说输入消息的每一位对输出摘要都有影响。总之,摘要算法从给定的文本块中产生一个数字签名(Fingerprint或Message Digest),数字签名可以用于防止有人从一个签名上获取文本信息或改变文本信息内容。
密钥的管理和分发
(1)使用同样密钥的时间范围
一般强调仅将一个对话密钥用于一条信息或一次对话中,或者建立一种按时更换密钥的机制以减小密钥暴露的可能性。
(2)保密密钥的分发
建立了一个安全的、可信任的密钥分发中心(Key Distribution Center,KDC),每个用户只要知道一个和KDC进行通信的密钥就可以了,而不需要知道成百上千个不同的密钥。
1.消息和加密
消息被称为明文。用某种方法伪装消息以隐藏它的内容的过程称为加密(Encryption),被加密的消息称为密文,而把密文转变为明文的过程称为解密(Decryption)。
使消息保密的技术和科学叫做密码编码学(Cryptography),从事此行的叫密码编码者(Cryptographer),密码分析者是从事密码分析的专业人员,密码分析学(Cryptanalysis)就是破译密文的科学和技术,即揭穿伪装。密码学(Cryptology)作为数学的一个分支,包括密码编码学和密码分析学两部分,精于此道的人称为密码学家(Cryptologist),现代的密码学家通常也是理论数学家。
加密函数E作用于明文 M得到密文C,可用数学公式表示:
E(M)=C
相反地,解密函数D作用于C产生M:
D(C)=M
先加密后再解密,原始的文明将恢复,故下面的等式必须成立:
D(E(M))=M
2.鉴别、完整性和抗抵赖
除了提供机密性外,密码学通常还有其它的作用。
(1)鉴别。消息的接收者应该能够确认消息的来源,入侵者不可能伪装成他人。
(2)完整性。消息的接收者应该能够验证在传送过程中消息没有被修改,入侵者不可能用假消息代替合法消息。
(3)抗抵赖。发送者事后不可能虚假地否认他发送的消息。
3.算法和密钥
密码算法(Algorithm)也叫密码(Cipher),是用于加密和解密的数学函数。通常情况下,有两个相关的函数,一个用作加密,另一个用作解密。
密钥用 K表示。K可以是很多数值里的任意值。密钥 K的可能值的范围叫做密钥空间。加密和解密运算都使用这个密钥(即运算都依赖于密钥,并用 K作为下标表示),这样,加/解密函数现在变成:
EK(M)=C DK(C)=M
这些函数具有的特性:DK(EK(M))=M
单钥加密解密
双钥加密解密
基于密钥的算法通常有两类:对称算法和公用密钥算法。
4.对称算法
对称算法有时又叫传统密码算法,就是加密密钥能够从解密密钥中推导出来,反过来也成立。
对称算法可分为两类。一次只对明文中的单个位(有时对字节)运算的算法称为序列算法或序列密码。另一类算法是对明文的一组位进行运算,这些位组称为分组,相应的算法称为分组算法或分组密码。
5.公用密钥算法
公用密钥算法(Public-Key Aalgorithm)也叫非对称算法,它是这样设计的:用作加密的密钥不同于用作解密的密钥,而且解密密钥不能根据加密密钥计算出来。
6.密码分析
密码分析学是在不知道密钥的情况下,恢复出明文的科学。成功的密码分析能恢复出消息的明文或密钥。密码分析也可以发现密码体制的弱点,最终得到上述结果。密钥通过非密码分析方式的丢失叫做泄露。常用的密码分析攻击有四类。
(1)唯密文攻击(Cipher Text-Only Attack)。密码分析者有一些消息的密文,这些消息都用同一加密算法加密。密码分析者的任务是恢复尽可能多的明文,或者最好是能推算出加密消息的密钥来,以便可采用相同的密钥解出其他被加密的消息。
(2)已知明文攻击(Known-Plaintext Attack)。密码分析者不仅可得到一些消息的密文,而且也知道这些消息的明文。分析者的任务就是用加密信息推出用来加密的密钥或推导出一个算法,此算法可以对用同一密钥加密的任何新的消息进行解密。
(3)选择明文攻击(Chosen-Plaintext Attack)。分析者不仅可得到一些消息的密文和相应的明文,而且他们也可选择被加密的明文。这比已知明文攻击更有效。因为密码分析者能选择特定的明文块去加密,那些块可能产生更多关于密钥的信息,分析者的任务是推出用来加密消息的密钥或导出一个算法,此算法可以对用同一密钥加密的任何新的消息进行解密。
(4)自适应选择明文攻击(Adaptive-Chosen-Plaintext Attack)。这是选择明文攻击的特殊情况。密码分析者不仅能选择被加密的明文,而且也能基于以前加密的结果修正这个选择。在选择明文攻击中,密码分析者还可以选择一大块被加密的明文,而在自适应选择密文攻击中,可选取较小的明文块,然后再基于第一块的结果选择另一明文块,依此类推。
(5)选择密文攻击(Chosen-Cipher Text Attack)。密码分析者能选择不同的被加密的密文,并可得到对应的解密的明文,例如密码分析者存取一个防窜改的自动解密盒,密码分析者的任务是推出密钥。
(6)选择密钥攻击(Chosen-Key Attack)。这种攻击并不表示密码分析者能够选择密钥,它只表示密码分析者具有不同密钥之间的关系的有关知识。
(7)软磨硬泡攻击(Rubber-Hose Cryptanalysis)。这种攻击是对密码分析者威胁、勒索,或者折磨某人,直到他给出密钥为止。行贿有时称为购买密钥攻击(purchase-key attack)。这些是非常有效的攻击,并且经常是破译算法的最好途径。
7.算法的安全性
不同的密码算法具有不同的安全等级。如果破译算法的代价大于加密数据的价值,破译算法所需的时间比加密数据保密的时间更长,用单密钥加密的数据量比破译算法需要的数据量少得多,那么这种算法可能是安全的。破译算法可分为不同的类别,安全性的递减顺序为:
全部破译。密码分析者找出密钥 K,这样 DK(C)=P。
全盘推导。密码分析者找到一个代替算法在不知道密钥 K的情况下,等价于DK(C)=P。
局部推导。密码分析者从截获的密文中找出明文。
信息推导。密码分析者获得一些有关密钥或明文的信息。这些信息可能是密钥的几个位、有关明文格式的信息等。。
电子邮件的加密
电子邮件加密的目的在于加大其安全性,进行秘密通信。
秘密通信的过程可用下面表格
来表示:
+--------+ 密文 +--------+
明文--->|加密变换|----->|解密变换|--->明文
+--------+ +--------+
^ ^
| |
密钥k 密钥k'
用文字可以表述为:若m是要传送的明文,在传送前,利用密钥k将m经加密变换为
密文c由通信通道发给接收者,接收者根据密钥k'利用解密变换将密文c变为明文m。
从以上过程可以看出,一个密码体制的安全性依赖于密钥k的个数和加密变换复杂
程度。密钥太少,敌方可以根据其截获的密文用不同的k逐个试译即可得到明文。也不
太多,太多则不利管理。加密变换太简单则容易找出解密变换,太复杂则导致解密过程
耗费时间太多,不利于通信。
加密算法介绍:
(1)古典密码:
世界上最早的一种密码产生于公元前两世纪。是由一位希腊人提出的,人们称之为
棋盘密码,原因为该密码将26个字母放在5×5的方格里,i,j放在一个格子里,具体情
况如下表所示
1 2 3 4 5
1 a b c d e
2 f g h i,j k
3 l m n o p
4 q r s t u
5 v w x y z
这样,每个字母就对应了由两个数构成的字符αβ,α是该字母所在行的标号,β是列
标号。如c对应13,s对应43等。如果接收到密文为
43 15 13 45 42 15 32 15 43 43 11 22 15
则对应的明文即为secure message。
另一种具有代表性的密码是凯撒密码。它是将英文字母向前推移k位。如k=5,则密
文字母与明文与如下对应关系
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 z
F G H I J K L M N O P Q R S T U V W X Y Z A B C D E
于是对应于明文secure message,可得密文为XJHZWJRJXXFLJ。此时,k就是密钥。为了
传送方便,可以将26个字母一一对应于从0到25的26个整数。如a对1,b对2,……,y对
25,z对0。这样凯撒加密变换实际就是一个同余式
c≡m+k mod 26
其中m是明文字母对应的数,c是与明文对应的密文的数。
随后,为了提高凯撒密码的安全性,人们对凯撒密码进行了改进。选取k,b作为两
个参数,其中要求k与26互素,明文与密文的对应规则为
c≡km+b mod 26
可以看出,k=1就是前面提到的凯撒密码。于是这种加密变换是凯撒野加密变换的
推广,并且其保密程度也比凯撒密码高。
以上介绍的密码体制都属于单表置换。意思是一个明文字母对应的密文字母是确定
的。根据这个特点,利用频率分析可以对这样的密码体制进行有效的攻击。方法是在大
量的书籍、报刊和文章中,统计各个字母出现的频率。例如,e出现的次数最多,其次
是t,a,o,I等等。破译者通过对密文中各字母出现频率的分析,结合自然语言的字母频
率特征,就可以将该密码体制破译。
鉴于单表置换密码体制具有这样的攻击弱点,人们自然就会想办法对其进行改进,
来弥补这个弱点,增加抗攻击能力。法国密码学家维吉尼亚于1586年提出一个种多表式
密码,即一个明文字母可以表示成多个密文字母。其原理是这样的:给出密钥
K=k[1]k[2]…k[n],若明文为M=m[1]m[2]…m[n],则对应的密文为C=c[1]c[2]…c[n]。
其中C[i]=(m[i]+k[i]) mod 26。例如,若明文M为data security,密钥k=best,将明
文分解为长为4的序列data security,对每4个字母,用k=best加密后得密文为
C=EELT TIUN SMLR
从中可以看出,当K为一个字母时,就是凯撒密码。而且容易看出,K越长,保密程
度就越高。显然这样的密码体制比单表置换密码体制具有更强的抗攻击能力,而且其加
密、解密均可用所谓的维吉尼亚方阵来进行,从而在操作上简单易行。该密码可用所谓
的维吉尼亚方阵来进行,从而在操作上简单易行。该密码曾被认为是三百年内破译不了
的密码,因而这种密码在今天仍被使用着。
古典密码的发展已有悠久的历史了。尽管这些密码大都比较简单,但它在今天仍有
其参考价值。
(2)近代密码
1834年,伦敦大家的实验物理学教授惠斯顿发明了电机,这是通信向机械化、电气
化跃进的开始,也是密码通信能够采用在线加密技术提供了前提条件。
前面已经讲过,密码技术的成果首先被用于战争,下面的例子就是一个明证。1914
年第一次世界大战爆发,德俄相互宣战。在交战过程中,德军破译了俄军第一军经给第
二军的电文,从中得知,第一军的给养已经中断。根据这一重要情报,德军在这次战役
中取得了全胜。这说明当时交战双方已开展了密码战,又说明战争刺激了密码的发展。
1920年,美国电报电话公司的弗纳姆发明了弗纳姆密码。共原理是利用电传打字机
的五单位码与密钥字母进行模2相加。如若信息码(明文)为11010,密钥码为11101,
则模2相加得00111即为密文码。接收时,将密文码再与密钥码模2相加得信息码(明文)
11010。
这种密码结构在今天看起来非常简单,但由于这种密码体制第一次使加密由原来的
手工操作进入到由电子电路来实现,而且加密和解密可以直接由机器来实现,因而在近
代密码学发展史上占有重要地位。随后,美国人摩波卡金在这种密码基础上设计出一种
一次一密体制。该体制当通信业务很大时,所需的密钥量太过庞大,给实际应用带来很
多困难。之后,这种一次一密制又有了进一步改进,但历史事实证明,这种密码体制是
不安全的,在太平洋战争中爱猫扑,爱生活使用的九七式机械密码就属于这一种。1940年,美国陆
军通信机关破译了这种密码。在中途岛海战中,爱猫扑,爱生活海军大将山本五十六因密码电报被
美国截获破译而被击毙在飞机上。
(3)现代密码学
古典密码和近代密码的研究还称不上是一门科学。直到1949
年香农发表了一篇题为“保密系统的通信理论”的著名论文,该文首先将信息论引入了
密码,从而把已有数千年历史的密码学推向了科学的轨道,奠定了密码学的理论基础。
该文利用数学方法对信息源、密钥源、接收和截获的密文进行了数学描述和定量分析,
提出了通用的秘密钥密码体制模型。
在密码学发展的进程中的另一件值得注意的事件是,在1976年,美国密码学家迪菲
和赫尔曼在一篇题为“密码学的新方向”一文中提出了一个崭新的思想,不仅加密算法
本身可以公开,甚至加密用的密钥也可以公开。但这前不意味着保密程度的降低。因为
如果加密密钥和解密密钥不一样。而将解密密钥保密就可以。这就是著名的公钥密码体
制。若存在这样的公钥体制,就可以将加密密钥象电话簿一样公开,任何用户当它想经
其它用户传送一加密信息时,就可以从这本密钥薄中查到该用户的公开密钥,用它来加
密,而接收者能用只有它所具有的解密密钥得到明文。任何第三者不能获得明文。
1978年,由美国麻省理工学院的里维斯特,沙米尔和阿德曼提出了RSA公钥密码体
制,它是第一个成熟的、迄今为止理论上最成功的公钥密码体制。它的安全性是基于数
论中的大整数因子分解。该问题是数论中的一个困难问题,至今没有有效的算法,这使
得该体制具有较高的保密性。
常用加密方法:
保密密钥对称加密算法之DES算法
美国国家标准局1973年开始研究除国防部外的其它部门的计算机系统的数据加密标准,于1973年5月15日和1974年8月27日先后两次向公众发出了征求加密算法的公告。加密算法要达到的目的(通常称为DES 密码算法要求)主要为以下四点:
☆提供高质量的数据保护,防止数据未经授权的泄露和未被察觉的修改;
☆具有相当高的复杂性,使得破译的开销超过可能获得的利益,同时又要便于理解和掌握;
☆DES密码体制的安全性应该不依赖于算法的保密,其安全性仅以加密密钥的保密为基础;
☆实现经济,运行有效,并且适用于多种完全不同的应用。
DES算法的入口参数有三个:Key、Data、Mode。其中Key为8个字节共64位,是DES算法的工作密钥;Data也为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密。
DES算法是这样工作的:如Mode为加密,则用Key 去把数据Data进行加密,生成Data的密码形式(64位)作为DES的输出结果;如Mode为解密,则用Key去把密码形式的数据Data解密,还原为Data的明码形式(64 位)作为DES的输出结果。在通信网络的两端,双方约定一致的Key,在通信的源点用Key对核心数据进行DES加密,然后以密码形式在公共通信网(如电话网)中传输到通信网络的终点,数据到达目的地后,用同样的Key对密码数据进行解密,便再现了明码形式的核心数据。这样,便保证了核心数据(如PIN、 MAC等)在公共通信网中传输的安全性和可靠性。
通过定期在通信网络的源端和目的端同时改用新的Key,便能更进一步提高数据的保密性,这正是现在金融交易网络的流行做法。
DES算法详述
DES算法把64位的明文输入块变为64位的密文输出块,它所使用的密钥也是64位,整个算法的主流程图如下:
其功能是把输入的64位数据块按位重新组合,并把输出分为L0、R0两部分,每部分各长32位,其置换规则见下表:
58,50,12,34,26,18,10,2,60,52,44,36,28,20,12,4,
62,54,46,38,30,22,14,6,64,56,48,40,32,24,16,8,
57,49,41,33,25,17, 9,1,59,51,43,35,27,19,11,3,
61,53,45,37,29,21,13,5,63,55,47,39,31,23,15,7,
即将输入的第58位换到第一位,第50位换到第2位,...,依此类推,最后一位是原来的第7位。L0、R0则是换位输出后的两部分,L0是输出的左 32位,R0 是右32位,例:设置换前的输入值为D1D2D3......D64,则经过初始置换后的结果为:L0=D58D50...D8;R0= D57D49...D7。
经过16次迭代运算后。得到L16、R16,将此作为输入,进行逆置换,即得到密文输出。逆置换正好是初始置的逆运算,例如,第1位经过初始置换后,处于第40位,而通过逆置换,又将第40位换回到第1位,其逆置换规则如下表所示:
40,8,48,16,56,24,64,32,39,7,47,15,55,23,63,31,
38,6,46,14,54,22,62,30,37,5,45,13,53,21,61,29,
36,4,44,12,52,20,60,28,35,3,43,11,51,19,59,27,
34,2,42,10,50,18,58 26,33,1,41, 9,49,17,57,25,
放大换位表
32, 1, 2, 3, 4, 5, 4, 5, 6, 7, 8, 9, 8, 9, 10,11,
12,13,12,13,14,15,16,17,16,17,18,19,20,21,20,21,
22,23,24,25,24,25,26,27,28,29,28,29,30,31,32, 1,
单纯换位表
16,7,20,21,29,12,28,17, 1,15,23,26, 5,18,31,10,
2,8,24,14,32,27, 3, 9,19,13,30, 6,22,11, 4,25,
在f(Ri,Ki)算法描述图中,S1,S2...S8为选择函数,其功能是把6bit数据变为4bit数据。下面给出选择函数Si(i=1,2......8)的功能表:
选择函数Si
S1:
14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,7,
0,15,7,4,14,2,13,1,10,6,12,11,9,5,3,8,
4,1,14,8,13,6,2,11,15,12,9,7,3,10,5,0,
15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13,
S2:
15,1,8,14,6,11,3,4,9,7,2,13,12,0,5,10,
3,13,4,7,15,2,8,14,12,0,1,10,6,9,11,5,
0,14,7,11,10,4,13,1,5,8,12,6,9,3,2,15,
13,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9,
S3:
10,0,9,14,6,3,15,5,1,13,12,7,11,4,2,8,
13,7,0,9,3,4,6,10,2,8,5,14,12,11,15,1,
13,6,4,9,8,15,3,0,11,1,2,12,5,10,14,7,
1,10,13,0,6,9,8,7,4,15,14,3,11,5,2,12,
S4:
7,13,14,3,0,6,9,10,1,2,8,5,11,12,4,15,
13,8,11,5,6,15,0,3,4,7,2,12,1,10,14,9,
10,6,9,0,12,11,7,13,15,1,3,14,5,2,8,4,
3,15,0,6,10,1,13,8,9,4,5,11,12,7,2,14,
S5:
2,12,4,1,7,10,11,6,8,5,3,15,13,0,14,9,
14,11,2,12,4,7,13,1,5,0,15,10,3,9,8,6,
4,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14,
11,8,12,7,1,14,2,13,6,15,0,9,10,4,5,3,
S6:
12,1,10,15,9,2,6,8,0,13,3,4,14,7,5,11,
10,15,4,2,7,12,9,5,6,1,13,14,0,11,3,8,
9,14,15,5,2,8,12,3,7,0,4,10,1,13,11,6,
4,3,2,12,9,5,15,10,11,14,1,7,6,0,8,13,
S7:
4,11,2,14,15,0,8,13,3,12,9,7,5,10,6,1,
13,0,11,7,4,9,1,10,14,3,5,12,2,15,8,6,
1,4,11,13,12,3,7,14,10,15,6,8,0,5,9,2,
6,11,13,8,1,4,10,7,9,5,0,15,14,2,3,12,
S8:
13,2,8,4,6,15,11,1,10,9,3,14,5,0,12,7,
1,15,13,8,10,3,7,4,12,5,6,11,0,14,9,2,
7,11,4,1,9,12,14,2,0,6,10,13,15,3,5,8,
2,1,14,7,4,10,8,13,15,12,9,0,3,5,6,11,
在此以S1为例说明其功能,我们可以看到:在S1中,共有4行数据,命名为0,1、2、3行;每行有16列,命名为0、1、2、3,......,14、15列。
现设输入为: D=D1D2D3D4D5D6
令:列=D2D3D4D5
行=D1D6
然后在S1表中查得对应的数,以4位二进制表示,此即为选择函数S1的输出。下面给出子密钥Ki(48bit)的生成算法
从子密钥Ki的生成算法描述图中我们可以看到:初始Key值为64位,但DES算法规定,其中第8、16、......64位是奇偶校验位,不参与 DES运算。故Key 实际可用位数便只有56位。即:经过缩小选择换位表1的变换后,Key 的位数由64 位变成了56位,此56位分为C0、D0两部分,各28位,然后分别进行第1次循环左移,得到C1、D1,将C1(28位)、D1(28位)合并得到56 位,再经过缩小选择换位2,从而便得到了密钥K0(48位)。依此类推,便可得到K1、K2、......、K15,不过需要注意的是,16次循环左移对应的左移位数要依据下述规则进行:
循环左移位数
1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1
以上介绍了DES算法的加密过程。DES算法的解密过程是一样的,区别仅仅在于第一次迭代时用子密钥K15,第二次K14、......,最后一次用K0,算法本身并没有任何变化。
由上述DES算法介绍我们可以看到:DES算法中只用到64位密钥中的其中56位,而第8、16、24、......64位8个位并未参与DES运算,这一点,向我们提出了一个应用上的要求,即DES的安全性是基于除了8,16,24,......64位外的其余56位的组合变化256才得以保证的。因此,在实际应用中,我们应避开使用第8,16, 24,......64位作为有效数据位,而使用其它的56位作为有效数据位,才能保证DES算法安全可靠地发挥作用。如果不了解这一点,把密钥Key的 8,16,24,..... .64位作为有效数据使用,将不能保证DES加密数据的安全性,对运用DES来达到保密作用的系统产生数据被破译的危险,这正是DES算法在应用上的误区,留下了被人攻击、被人破译的极大隐患。
DES使用56位密钥对64位的数据块进行加密,并对64位的数据块进行16轮编码。与每轮编码时,一个48位的“每轮”密钥值由56位的完整密钥得出来。DES用软件进行解码需要用很长时间,而用硬件解码速度非常快,但幸运的是当时大多数黑客并没有足够的设备制造出这种硬件设备。
在1977年,人们估计要耗资两千万美元才能建成一个专门计算机用于DES的解密,而且需要12个小时的破解才能得到结果。所以,当时DES被认为是一种十分强壮的加密方法。
但是,当今的计算机速度越来越快了,制造一台这样特殊的机器的花费已经降到了十万美元左右,所以用它来保护十亿美元的银行间线缆时,就会仔细考虑了。另一个方面,如果只用它来保护一台服务器,那么DES确实是一种好的办法,因为黑客绝不会仅仅为入侵一个服务器而花那么多的钱破解DES密文。由于现在已经能用二十万美元制造一台破译DES的特殊的计算机,所以现在再对要求“强壮”加密的场合已经不再适用了。
三重DES
因为确定一种新的加密法是否真的安全是极为困难的,而且DES的唯一密码学缺点,就是密钥长度相对比较短,所以人们并没有放弃使用DES,而是想出了一个解决其长度问题的方法,即采用三重DES。这种方法用两个密钥对明文进行三次加密,假设两个密钥是K1和K2,其算法的步骤如图5.9所示:
1. 用密钥K1进行DEA加密。
2. 用K2对步骤1的结果进行DES解密。
3. 用步骤2的结果使用密钥K1进行DES加密。
这种方法的缺点,是要花费原来三倍时间,从另一方面来看,三重DES的112位密钥长度是很“强壮”的加密方式了。
DES举例
已知明文m=computer,密钥k=program,用ASCII码表示为:
m=01100011 01101111 01101101 01110000 01110101 01110100 01100101 01110010
k=01110000 01110010 01101111 01100111 01110010 01100001 01101101
因为k只有56位,必须插入第8,16,24,32,40,48,56,64位奇偶校验位,合成64位。而这8位对加密过程没有影响。
m经过IP置换后得到
L0= 11111111 10111000 01110110 01010111
R0= 00000000 11111111 00000110 10000011
密钥k通过PC-1得到
C0= 11101100 10011001 00011011 1011
D0= 10110100 01011000 10001110 0110
再各自左移一位,通过PC-2得到48位
k1=00111101 10001111 11001101 00110111 00111111 00000110
R0(32位)经E作用膨胀为48位,
10000000 00010111 11111110 10000000 11010100 00000110
再和k1作异或运算得到(分成8组)
101111 011001 100000 110011 101101 111110 101101 001110
通过S盒后输出位32比特,
01110110 00110100 00100110 10100001
S盒的输出又经过P置换得到
01000100 00100000 10011110 10011111
这时 :
如此,迭代16次以后,得到密文:
01011000 10101000 01000001 10111000 01101001 11111110 10101110 00110011
明文或密钥每改变一位,都会对结果密文产生剧烈的影响。任意改变一位,其结果大致有将近一半的位发生了变化。
DES解密
在经过所有的代替、置换、异或和循环移动之后,获得了这样一个非常有用的性质:加密和解密可使用相同的算法。
DES使得用相同的函数来加密或解密每个分组成为可能,二者的唯一不同之处是密钥的次序相反。这就是说,如果各轮的加密密钥分别是K1,K2,K3…,K16那么解密密钥就是K16,K15,K14……,K1。为各轮产生密钥的算法也是循环的。密钥向右移动,每次移动个数为0,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1。
2.数字签名技术
由于越来越多的人通过电子邮件发送机密信息,因此如何识别收到电子邮件是否伪造、保证所发送的邮件不被除收件人以外的其他人阅读变得日趋重要。使用建立在公开密钥加密技术基础上的“数字签名”技术,可以在电子事务中证明用户的身份,就像兑付支票时要出示有效证件一样。用户也可以使用数字签名来加密邮件以保护个人隐私。
(1)发送方作数字签名。若要证明自己确实发出了某封电子邮件而且邮件的内容在发出以后没有被改变,用户可以使用数学家们研究的算法(一般称之为报文分解算法,用户只要有相应的软件就行,并不需要关心算法如何实现)对自己即将发出的邮件进行计算(分解或提炼),得到一个很大的(即很长的)、独一无二的数,然后再用自己的私有密钥对这个数加密,将加密后的数、自己的公钥和电子邮件一块发给他人。
(2)接收方鉴定数字签名。其他人得到用户的电子邮件后,一方面可使用数学家们研究的算法对收到的电子邮件进行计算,将得到一个数,假定为B;另一方面则使用用户的公开密钥将由用户用私有密钥加密的数解密还原,假定为A;如果A等于B,则说明电子邮件发出后没有被改变过。如果改变过,则A和B肯定不相等,因为数学家们的报文分解算法能保证世界上任何两个不同的信息经过其分解提炼后,得到的数实际上不可能一样(理论上推算应有非常多的相同,但经过几十年的实践,还没有谁找到过相同的例子,而且从理论上讲也很难找),哪怕二者只有微小的差别,例如多一个空格。其他人也不可能改变用户加密后的数,虽然任何人都能通过用户的公开密钥知道这个数是多少,也就是说,当只有用户一人掌握私有密钥时,其他人不可能对某个数加密后还能用用户的公开密钥解密。因此,若有人改变了邮件的内容并重新计算出了新的大数,但他无法制作(伪造)加密后的新的大数(因为他没有用户的私有密钥),因而收件人就可根据二者是否相等来判断所收邮件是否真的出自发件人之手(能解密就可证明)以及邮件发出后是否被他人篡改过(A和B是否相等)。这种技术就是数字签名技术,加密后的大数就是数字签名(在Microsoft系统中,为方便公钥的传播与散发,数字签名中通常还包括签名者的公钥)。
实践:
为了给他人发送有数字签名的电子邮件,用户应该使用Outlook Express或Microsoft Outlook。用户只要将自己的数字证书(在Outlook Express中,数字证书也称数字标识)安装完毕,并且在Outlook Express中为自己配置好相应的电子邮件账号,便可以根据需要对待发的电子邮件进行数字签名。
必须提请用户注意的是:用户电子邮件账号的发件人地址必须与数字证书中指定的电子邮件地址相同。如果用户拥有多个电子邮件账号(邮箱),用户必须为每个要用来发送安全邮件的账号准备一个单独的数字证书。在使用数字签名时,如果用户没有进行相应的设置,Outlook Express将在计算机上进行搜索,以找到一个带有相同电子邮件地址的有效数字证书,并将其添加到用户的电子邮件账号中。如果找到了多个有效的数字证书,用户必须从中选择一个添加到账号中。
用户也可直接指定或查看某个电子邮件帐号所使用的数字证书,而不需要Outlook Express进行搜索。
电子邮件数字签名的签发与鉴定
数字签名的操作相当简单,只需要在撰写电子邮件时,单击工具栏上的“签名”按钮,如图26所示。需要提醒用户注意的是,图26中的发件人应选择正确(若用户只在Outlook Express中添加了一个电子邮件账号,则不存在选择的问题)。
邮件撰写完毕,单击工具栏上的“发送”按钮即可。
电子邮件的加密与解密
电子邮件的加密操作非常简单,操作过程与数字签名类似,在图26中单击工具栏上的“加密”按钮即可完成。当然,用户对待发电子邮件即可数字签名,又可同时加密。与数字签名不同的是,加密不需要输入什么密码,因为加密过程中使用的是收件人的公钥证书。
解密过程也是由Outlook Express自动完成的,但Outlook Express可能会要求用户输入密码(因为解密过程需要使用用户的私钥)----前提是用户对自己的私钥设置了密码保护而且没有让Outlook Express记录密码,与进行数字签名所要求的一样,用户也千万不要选择选项“记录密码”。
必须说明的是:要想给某人发送加密邮件,用户必须有收件人的数字标识(公钥证书),并且该标识必须与它们在用户的通讯簿中的名称相关联。在用户接收带有数字签名的邮件的时候,OE自动将数字标识添加到用户的通讯簿。如果用户已关闭此选项,则需要手动添加联系人的数字标识。方法是:打开带有数字签名的邮件,在文件菜单上单击“属性”,单击“安全”选项卡,然后单击“将数字标识添加到通讯簿”。若联系人有数字标识,他们在通讯簿中的卡片将被添上一个红色的飘带。
用户也可以从某个证书管理机构的Web站点下载,从而得到某人的数字标识。再到通讯簿中为该联系人创建一个新项目,或双击通讯簿中已有的联系人,在“数字标识”选项卡上,单击“导入”,找到该数字标识文件,然后单击“打开”。
软件介绍:PGP加密软件的应用
软件版本是PGP International Freeware 5.0I,使用PGP能够加密保护信件正文以及作为附件的图形声音文件、文本文件和其他任意类型的数据文件。
(1)软件的安装与设置
安装后,WIN95的Exchange或者Outlook就增加了PGP软件及相应的菜单和按钮。如果你使用的电子邮件软件没有PGP的软件支持,不必担心,PGP还可以通过文件快捷菜单和剪贴板这两种手段与电子邮件软件交换加密数据,所以PGP可以直接或间接地支持所有电子邮件软件。
安装后,用户能够使用两个程序:PgpTrays.exe和PgpKeys.exe。PgpTray.exe是控制中心,提供对所有功能的操作界面,并且执行后在任务栏中供用户随时调用,建议将其添加到开始菜单的“启动”。而PgpKeys.exe可以对密钥进行生成、散发与废除、签名与信任等管理。
(2)密钥管理
PgpKeys管理着一个钥匙环(KeyRing),钥匙环文件保存着你收集到的所有公开密钥,由此可以进行密钥维护与管理。
①生成新的密钥对
每一个用户都必须生成自己的密钥对,这是使用PGP加密的第一步。在PgpKeys中选择菜单:Key-NewKey,弹出生成密钥窗口,填写用户名、电子信箱地址;然后要选择密钥长度,长度与抗解密攻击强度成正比,但与运算速度成反比,一般选择1024-2048bit较合适。确定密钥生存周期:你可以制定该密钥在一定天数后过期作废,通常选择NEVER(永不过期);最后要定义保护密钥的口令,口令可以防止别人使用你的密钥,较安全的口令长度要不少于8位,并且至少包含一个非字母的字符。生成密钥后,你可以选择是否立即将新的公开密钥发送到因特网的密钥服务器上,这样其他希望与你通信的用户可以直接到密钥服务器下载你的公开密钥。
②散发和获取公开密钥
散发和获取公开密钥有两种途径:
①通过网上公共的密钥服务器:在PgpKeys的密钥列表中选择某个公开密钥,点击鼠标右键,在弹出的快捷菜单中选择Key Server-Send Selected Keys(发送密钥至服务器),即可上载公开密钥。选择Get Selected Keys(获取指定人的密钥)或者主菜单Keys- Key Server-Find New Key(通过电子信箱地址和姓名查找新密钥),即可在密钥服务器上查询和下载密钥,并安装到你的钥匙环上。
②通过电子邮件:在PgpKeyS的密钥列表中选择某个公开密钥,点击鼠标右键,在弹出的快捷菜单中选择Export(导出),将选中的密钥保存为一个后缀名为ASC的文本文件,作为电子邮件的附件发送给对方;收到密钥文件后,对方在PgpKeys的菜单中选择Import(导入),或者在运行 PgpKeyS后,双击该密钥文件,即可将公开密钥挂在钥匙环上。
③签名与信任
密钥的安全是加密成功的关键,如果交换公开密钥的双方不能确定相互信任对方密钥的真实性,那么就谈不上密钥的安全。最可靠的交换密钥方式莫过于密钥所有者将密钥保存在一张磁盘上,然后亲手交给你。但这种理想条件在因特网上很难做到(如果能做到,干脆就直接传递正文了,还用得着交换密钥吗?),特别是当你通过电子邮件或者密钥服务器获取密钥时要如此。因此,获得他人的公开密钥并挂到钥匙环上以后,必须经过验证,再使用你自己的私人密钥对其签名以设定信任等级。
验证的方法有两种:
①验证密钥的指纹:每一个密钥在生成的时候都产生一个唯一对应的数字指纹,这是一串数字,最保险的办法是要求密钥所有者在电话里报出密钥指纹供你验证。
②通过可信认的介绍人来验证密钥的信任度:任何人都可以用自己的私人密钥对他人的公开密钥进行数字签名,表示相信该密钥属于其真正的主人,即确认其真实性。如果你信任签名的介绍人,就可以信任从他那里得到的被签名的公开密钥。你可以通过验证介绍人的数字签名进行确认。
验证一个密钥的真实性后,可以用你的私人密钥对其进行签名并设定其信任等级。在PgpKeys的密钥列表中选择该公开密钥,点击鼠标右键,在弹出的快捷菜单中选择Sign(签名),回答口令后即将该公开密钥签名;在右键快捷菜单中选择 Key Properties(密钥属性卿可修改信任等级。
④密钥的废除
假如你不再信任你的密钥对,你可以通过废除操作来取消它们,在PgpKeys的密钥列表中选择该公开密钥,在右键快捷菜单中选择Revoke(废除),然后将废除的密钥上载到公开密钥服务器,或者通过电子邮件发送给你的通讯伙伴。这时你必须在生成新的密钥对并散发。
(3)数字签名与验证签名
如果你想保证发出的信件不被冒名或篡改,可以用你的私人密钥对电子邮件签名,收信人可以使用你的公开密钥来验证你的签名。注意:经过签名的信件不能篡改,但仍然是明文,不经解密即可阅读,另外也不对收信人进行加密,不能限定只有指定的收信人收信读信。
对于有PGP软件支持的电子邮件软件,点击相应按钮即可实现数字签名。对于不能直接支持的软件,可以通过剪贴板来实现PGP与电子邮件软件的数据交换。将信件正文COPY到剪贴板,点击PgpTrays的Sign Clipboard(对剪贴板签名),然后用签名后的内容粘贴(Paste)替换原有正文,或者直接点击PgpTrays的Edit Clipboard Text(编辑剪贴板正文)写信,签名后粘贴到邮件中,签名时需要回答密钥口令。
收信人点击PgpTrays的Verify Clipboard(验证剪贴板)进行签名的验证。
以下为信件原文(只有一行文本):
PGP is Pretty Good Privacy.
以下为签名后的信件:
————BEGIN PGP SIGNED MESSAGE—————
HSSh: SHAI
PGP is Pretty Good Privacy
——BEGIN PGP SIGNATURE——————
Version: PGP freeware 5.0i for non-commercial use
Charset: noconv
bIZfVlllLSErX7woez95YkFIAnZUQ
pth7FosghHZXPfUqf1Ttn.--qqsq
——END PGP SIGNATURE——————
可以看到,正文仍然为明文,在正文后面,是一块签名信息。
(4)加密与解密
加密可以保证只有指定的收信人才能收信和读信,因为你使用对方的公开密钥对信件加密后,对方只有使用对应的私人密钥才能解密信件。
与数字签名动作类似,对于有PGP软件支持的电子邮件软件,点击相应按钮即可实现加密。对于不能直接支持的软件,邮件正文的加密可以通过剪贴板来实现PGP与电子邮件软件的数据交换。而附件文件的加密则可以在资源管理器中通过右键快捷菜单中的PGP选项来实现加密(这个选项是在安装PGP软件时增加的),然后添加到附件中,加密时需要选择钥匙环中的收信人并回答密钥口令。解密过程类似。
注意:加密可以保证只有加密才能保证只有指定的收信人才能收信和读信,但不能防止他人冒用你的名义,利用收信人的公开密钥加密发送冒名的信件。最安全的方式就是加密并且签名(Encrypt And Sign Clipboard),这样发信人和收信人都受保护。
以下为信件原文(只有一行文本):
PGP is Pretty Good Privacy.
以下为加密且签名后的信件(有删节):
———— BEGIN PGP MESSAGE———
Version:PGP freeware 5.0i for non-commercial use
MessageID:XSLSSXOOCIFtgoiPPVklWSUShaIVCE
KCpEQ iG+Iculcm[1:lunzgKr6z+YICA+
mp+6fB346j8FXOWV7
ubsbinlrsvb6tliK76M
————— END PGP MESSAGE—————
在BEGIN和END之间保存着密文,没有收信人的私人密钥是不可能解密阅读的。
使用PGP加密软件,可以有效地保证电子邮件的通信安全,从而使办公自动化网络更加可靠。同时用户也为此付出了额外的传输时间和密钥维护管理工作等成本,但为了安全,必要的代价是值得的。
1.电子邮件传输原理
当用户发送一封电子邮件时,他并不能直接将信件发送到对方邮件地址指定的服务器上,而是必须首先试图去寻找一个信件传输代理,把邮件提交给它;信件传输代理得到了邮件后,首先将它保存在自身的缓冲队列中,然后,根据邮件的目标地址,信件传输代理程序查询到应对这个目标地址负责的邮件传输代理服务器,并且通过网络将邮件传送给它。对方的服务器接收到邮件之后,将其缓冲存储在本地,直到电子邮件的接收者察看自己的电子信箱。显然,邮件传输是从服务器到服务器的,而且每个用户必须拥有服务器上存储信息的空间(称为信箱)才能接受邮件。(发送邮件不受这个限制)。
而投递代理则从信件传输代理取得信件传送至最终用户的邮箱。显然,最终用户只能看到用户投递代理。常见的投递代理包括procmail等。
用户代理接受用户输入的各种指令,将用户的邮件传送至信件传输代理或者通过pop、Imap将信件从传输代理服务器处取到本机上。常见的用户代理有“foxmail”,“outlook express”等邮件客户程序。
可以看到,一个邮件传输代理的主要工作是监视用户代理的请求,根据电子邮件的目标地址找出对应的邮件服务器,将信件在服务器之间传输并且将接收到的邮件缓冲或者提交给最终投递程序。
有许多的程序可以作为信件传输代理,包括qmail、sendmail、postfix等等。
无论什么产品,它们必须支持同样的规范,如传输信件的报文格式,监听的端口等等。一般来说,系统管理员并不需要了解信件传输的命令标准,用户代理会生成正确的命令。但是,了解一些相关信息是重要的。
信件传输代理默认监听25号端口接受请求,当接受用户的请求时,它不需要了解用户的真实身份,或者说不需要身份验证。因此用户不需要提交用户口令就可以发出电子邮件,这意味着任何用户都可以冒充成另外一个用户发出假的电子邮件,这是电子邮件原始设计时导致的一个特点,无法消除。(关于这一点目前有一点说明。许多基于UNIX的系统运行indentd,可以记录客户机器上的用户的登录名字。不过,这个功能实际上用处不大,毕竟大部分人不会用UNIX/Linux作为他的个人机器)。
当邮件服务器程序得到一封待发送的邮件时,它首先需要根据目标地址确定将信件投递给哪一个服务器,这是通过DNS服务实现的。例如,有一封邮件的目标地址是someone@yahoo.com,那么,sendmail首先确定这个地址是用户名(someone)+机器名(yahoo.com)的格式,然后,通过查询DNS来确定需要把信件投递给某个服务器
显然,在DNS中说明yahoo.com有两个信件交换(MX)服务器,于是,sendmail试图将邮件发送给两者之一。一般来说,排在前面的的MX服务器的优先级别比较高,因此服务器将试图连接mx1.mail.yahoo.com的25端口,试图将信件报文转发给它。如果成功,你的smtp服务器的任务就完成了,在这以后的任务,将由mx1.mail.yahoo.com来完成。在一般的情况下,mx交换器会自动把信件内容转交给目标主机,不过,也存在这样的情况,目标主机(比如yahoo.com)可能并不存在,或者不执行smtp服务,而是由其mx交换器来执行信件的管理,这时候,最终的信件将保存在mx机器上,直到用户来察看它。
电子邮件安全措施:
使用安全电子邮件-S/MIME (Secure/ Multipurpose Internet Mail Extensions)
安全电子邮件-S/MIME (Secure/ Multipurpose Internet Mail Extensions) 是 Internet 中用来发送安全电子邮件的协议。S/MIME为电子邮件提供了数字签名和加密功能。该标准允许不同的电子邮件客户程序彼此之间收发安全电子邮件。为了使用安全电子邮件-S/MIME,必须使用支持S/MIME功能的电子邮件程序。例如Outlook Express 4和Nectscape Messenger 4.0 等以上版本。
签名电子邮件和加密电子邮件:签名一个电子邮件意味着,将自己的数字证书附加到电子邮件中,接收方就可以确定是谁。签名提供了验证功能,但是无法保护信息内容的隐私,第三方有可能看到其中的内容。加密电子邮件意味着只有指定的收信人才能够看到信件的内容。为了发送签名邮件,必须有自己的数字证书。为了加密邮件,必须有收信人的数字证书。
- 2005-04-22 12:05:42
-
楼主(2) 达Q拉
-
晕,悲哀,可怜的帖子。以后做动画,不整加密了。
名字含义很深,不方便言名,我给你找找动画的下载啊。 -
2005-04-23 14:25:57
-
扑(3) PiPleR
-
顶一下!
-
2005-04-23 14:28:55
-
记号
-
2005-04-25 09:36:56
-
扑(5) 给莪①伎煙……
-
写的好啊!!!
太实用了!!!!
我们那个变态老师喊我们写5000字的论文~
辛苦 楼主了 -
2007-12-16 13:40:54
-
猫(6) Mrwait【四川Mopper联盟成员】
-
路过
-
2007-12-16 15:24:56
-
扑(7) 好大的太阳
-
火星今天啥天气/
-
2007-12-17 00:17:35
-
猫(8) 英俊有才华
-
ok
-
2007-12-17 01:24:06
-
扑(9) IAM_逆风飞【幼齿铲】
-
那美克星发洪水了吗?
-
2007-12-17 02:48:39
-
猫(10) 忘着天空的小鸡
-
恩....
-
2007-12-17 02:59:37
-
扑(11) zgsznb3620
-
无聊
-
2007-12-17 03:07:17
-
猫(12) 公墓员
-
第7种密码解密方法一般现在叫社会工程学
-
2007-12-17 04:37:43




