(问题7-1:用一个例子说明置换密码的加密和解密过程。假定密钥为CIPHER,而明文为attackbeginsatfour,加密时明文中的空格去除。
答:在英文26个字母中,密钥CIPHER这6个字母在26个英文字母中出现的位置用红色大写加下划线来表示,然后将这6个字母按照字母表中的先后顺序加上编号1~6:
abCdEfgHIjklmnoPqRstuvwxyz
123456
然后在下表中,先写下密钥CIPHER,在密钥的每一个字母下面写下顺序号码。
然后按行写下明文(从左到右、从上到下)。如图中的红箭头表示的先后顺序①、②和③。请注意,到现在为止,密钥起作用只是确定了明文每行是6个字母。
密钥起作用的地方就是在生成密文时。
在生成密文时,按照密钥给出的字母顺序,按列读出,如下图所示。
第一次读出aba,第二次读出cnu,第三次读出aio,第四次读出tet,第五次读出tgf,第六次读出ksr。将所有读出的结果连起来,得出密文为:
abacnuaiotettgfksr
收到密文后,先按照密钥的字母顺序,按列写入(根据密钥含有的字母数就知道应当写成多少列),再按行自上而下读出,就可得出明文来。
问题7-2:拒绝服务DOS(DenialOfService)和分布式拒绝服务DDOS(DistributedDOS)这两种攻击是怎样产生的?
答:拒绝服务DOS可以由以下几种方式产生(往往使用虚假的IP地址):
向一个特定服务器非常快地发送大量任意的分组,使得该服务器过负荷因而无法正常工作。
向一个特定服务器发送大量的TCPSYN报文段(即建立TCP连接的三次握手中的第一个报文段)。服务器还误以为是正常的因特网用户的请求,于是就响应这个请求,并分配了数据结构和状态。但攻击者不再发送后面的报文段,因而永远不能够完成TCP连接的建立。这样可以浪费和耗尽服务器的大量资源。这种攻击方式又称为SYNflooding(意思是使用同步标志进行洪泛)。
重复地和一个特定服务器建立TCP连接,然后发送大量无用的报文段。
将IP数据报分片后向特定服务器发送,但留一些数据报片不发送。这就使得目的主机永远无法组装成完整的数据报,一直等待着,浪费了资源。
向许多网络发送ICMP回送请求报文(就是使用应用层的PING程序),结果使许多主机都向攻击者返回ICMP回送回答报文。无用的、过量的ICMP报文使网络的通信量急剧增加,甚至使网络瘫痪。这种攻击方式被称为smurf攻击。Smurf就是能够对网络自动发送这种ICMP报文攻击的程序名字。
分布式拒绝服务DDOS的特点就是攻击者先设法得到因特网上的大量主机的用户账号。然后攻击者设法秘密地在这些主机上安装从属程序(slaveprogram),如图所示。
当攻击者发起攻击时,所有从属程序在攻击者的主程序(masterprogram)的控制下,在同一时刻向被攻击主机发起拒绝服务攻击DOS。这种经过协调的攻击攻击具有很大的破坏性,可以使被攻击的主机迅速瘫痪。
在2000年2月美国的一些著名网站(如eBay,Yahoo,和CNN等)就是遭受到这种分布式拒绝服务的攻击。
拒绝服务和分布式拒绝服务都是很难防止的。使用分组过滤器并不能阻止这种攻击,因为攻击者的IP地址是事先不知道的。当主机收到许多攻击的数据报时,很难区分开哪些是好的数据报,而哪些是坏的数据报。例如,当服务器收到请求建立TCP连接的SYN报文时,很难区分这是真的请求建立TCP连接,还是恶意消耗服务器资源的连接请求。当攻击者使用IP地址欺骗时,要确定攻击者真正的IP地址也是很难的。
(问题7-3:报文的保密性和报文的完整性有何不同?保密性和完整性能否只要其中的一个而不要另一个?
答:报文的保密性和完整性是完全不同的概念。
保密性的特点是:即使加密后的报文被攻击者截获了,攻击者也无法了解报文的内容。
完整性的特点是:接收者收到报文后,知道报文没有被篡改。
保密性和完整性都很重要。
有保密性而没有完整性的例子:收到一份加密的报文“明日6时发起进攻”。攻击者破译不了被截获的报文,但随意更改了一些比特(攻击者也不知道更改后的密文将会使解码后得出的明文变成什么样子)。接收者收到的还是密文。他认为别人不会知道密文的内容,于是用密钥将收到的密文进行解码,但得到的明文已经不再是原来的明文了。假定原来的明文是“明日8时发起进攻”,现在却变成了“明日6时发起进攻”,提前了2小时。当然也可能将被篡改的密文解码后变得看不懂意思的明文,在这种情况下也许还不致产生有危害的后果。
有完整性而没有保密性的例子是对明文加上保证其完整性的措施。接收者收到明文后,就可以相信这就是发送者发送的、没有被篡改的报文。这个报文可以让所有的人都知道(不保密),但必须肯定这个报文没有被人篡改过。
可见保密性并不是永远都需要的,但完整性往往总是需要的。这样的例子很多。大家都知道,人民日报所登载的新闻对全世界的所有人都是公开的,没有什么秘密可言。但报纸上的新闻必须保证其完整性(读者不会怀疑报纸的印刷单位擅自改动了新闻的内容)。如果新闻被恶意地篡改了就会产生极其严重的后果。现在有些情况不允许使用电子邮件(例如导师给某个学校发送为某学生写的正式推荐信),并不是因为推荐信有多大的机密,而是因为没有使用数字签名的普通电子邮件,不能证明对方收到的电子邮件的确是某个导师写的并且没有被篡改过。而从邮局寄送的、写在纸上(特别是有水印的、只供单位使用的信纸上)有导师亲笔签名的推荐信,则一般都认为是可信赖的。
以上这些都说明了保密性和完整性不是一个概念。
总之,保密性是防止报文被攻击者窃取,而完整性是防止报文被篡改。
(问题7-4:常规密钥体制与公钥体制最主要的区别是什么?
答:常规密钥体制的密钥是对称的。发送方使用的加密密钥和接收方使用的解密密钥是一样的,也都必须是秘密的。
公钥体制的密钥是不对称的。发送方使用的加密密钥是公开的(向全世界公开),但接收方的解密密钥是秘密的,只有接收者才知道。
(问题7-5:能否举一个实际的RSA加密和解密的例子?
答:不行。我们知道,在RSA公钥密码体制中,加密密钥和解密密钥中都有一个大整数n,而n为两个大素数p和q的乘积(素数p和q一般为100位以上的十进数)。因此加密和解密的运算需要非常大的运算量。
我们可以用一个能说明RSA工作原理的小例子使读者体会一下RSA计算量有多大。
假定选择p(5,q(7。(显然这样小的素数是根本不能用于实用的RSA的加密计算中。)
这时,计算出n(pq(5(7(35。
算出((n)((p(1)(q(1)(24。
从[0,23]中选择一个与24互素的数e。现在我们选e(5。
然后根据公式ed(1mod((n),得出
ed(5d(1mod24
找出d(29,因为ed(5(29(145(6(24(1(1mod24。
这样,公钥PK((e,n)({5,35},而秘钥SK({29,35}。
明文必须能够用小于n的数来表示。现在n(35。因此每一个英文字母可以用1至26的数字来表示。
假定明文是英文字母o,它是第15个字母。因此明文X=15。
加密后得到的密文Y(Xemodn=155mod35=759375mod35
=(21696(35(15)mod35=15。
以上的计算还是很简单的。现在看一下解密的过程。
在用秘钥SK({29,35}进行解密时,先计算Yd(1529。这个数的计算已经需要不少时间了。它等于12783403948858939111232757568359375。进行模35运算,得出1529mod35=15,而第15个英文字母就是o。原来发送的明文就是这个字母。
从以上例子可以体会到使用的RSA加密算法的计算量是很大的。
(问题7-6:要进一步理解RSA密码体制的原理,需要知道哪一些数论的基本知识?
答:数论研究的重点是素数。下面是与进一步理解RSA密码体制原理有关的一些基本概念。有了以下的一些基本知识,我们就能够进一步理解RSA密码体制的原理。
?整除和a=mb,其中a、b、m为整数,则当b(0时,可以说b能整除a。换句话说,a除以b余数为0。符号b|a常用作表示b能整除a。当b|a时,b是a的一个因子。
?素数:
素数p是大于1且因子仅为(1和(p的整数。为简单起见,下面仅涉及非负整数。
?互为?模运算a=qn+r0(r 其中(x(表示小于或等于x的最大整数。
如果a是一个整数,而n是一个正整数,则定义amodn为a除以n的余数。
amodn也可记为“a(模n)”。
例如,30除以7的余数是2(30=4(7+2),可记为30mod7=2。
注意:如果amodn=0,则n是的a一个因子。
因为在模n运算下,余数一定在0到(n(1)之间。因此,模n运算将所有整数映射到整数集合{0,1.…,(n–1)}。这个整数集合又称为模n的余数集合Zn。因此余数集合
Zn={0,1.…,(n–1)}(1)
如果(amodn)=(bmodn),则称整数a和b模n同余,记为a(b(modn)。但通常modn不必用括号括起来,也就是说,可以记为a(bmodn。
显然,a(bmodn等价于b(amodn。
例如,73(4mod23。显然,这里mod23一定不能省略不写。
模运算有一个性质很有用,即:
如果n|(a–b)(即n能够整除(a–b)),则a(bmodn。
反之,如果a(bmodn,则n能够整除(a–b),即n|(a–b)。
例如:23–8=15,而15能够被5整除,因此23(8mod5,即23和8是模5同余的。
?模运算的一些性质[(amodn)+(bmodn)]modn=(a+b)modn(2)
2.[(amodn)((bmodn)]modn=(a(b)modn(3)
3.[(amodn)((bmodn)]modn=(a(b)modn(4)
以上的这些性质的证明都很简单,这里从略。下面举出一些例子。
例如:11mod8=3;15mod8=7
[(11mod8)+(15mod8)]mod8=[3+7]mod8=10mod8=2
(11+15)mod8=26mod8=2
[(11mod8)((15mod8)]mod8=[3–7]mod8=(4mod8=4
(11(15)mod8=(4mod8=4
[(11mod8)((15mod8)]mod8=[3(7]mod8=21mod8=5
(11(15)mod8=165mod8=5
指数运算可看作是多次重复乘法。
例如,计算1723mod55=1716+4+2+1mod55
=(1716(174(172(17)mod55
=[(1716mod55)((174mod55)((172mod55)((17mod55)]mod55
172mod55=289mod55=14
174mod55=[(172mod55)((172mod55)]mod55
=[14(14]mod55=196mod55=31
1716mod55=[(174mod55)((174mod55)((174mod55)((174mod55)]mod55
=[31(31(31(31]mod55
=[923521]mod55
=[16791(55+16]mod55
=16
因此1723mod55=[16(31(14(17]mod55
=[118048]mod55
=[2146(55+18]mod55
=18
??下面的一个公式也很有用,读者可自行证明。
??如果(a(b)modn=(a(c)modn,则bmodn=cmodn如果a与n互素。(5)
例如,(5(3)mod8=15mod8=7mod8
(5(11)mod8=55mod8(7mod8
则3mod8=11mod8
但如果a与n不互素,则上述结论不能成立。
例如,6(3=18(2mod8
6(7=42(2mod8
但3和7并不是模8同余。
?费马定理:
如果p是素数,a是不能被p整除的正整数,则
ap–1(1modp(6)
证明:这里要用到公式(1)给出的余数集合的概念。我们应当注意到,余数集合Zp中共有p个数。如果把0除外,则剩下的(p–1)个数是:
{1,2,...,(p–1)}(7)
将(7)式中的(p–1)个数分别乘以a模p,就得出如下的集合:
{amodp,2amodp,...,(p–1)amodp}(8)
公式(8)中的(p–1)个数恰好是某种次序的{1,2,...,(p–1)}。例如,a=5,p=8,则公式(8)是:
{5mod8,10mod8,15mod8,20mod8,25mod8,30mod8,35mod8}
也就是{5,2,7,4,1,6,3}。(要从一般意义上证明这一点也很容易。这只需要证明公式(8)中的任意两个数的模p都是不同的数即可,读者可自行证明。)
将公式(8)中的(p–1)个数相乘应当等于公式(7)中的(p–1)个数相乘:
(amodp)((2amodp)(...(((p–1)amodp)=(p–1)!
两端取模p:
[(amodp)((2amodp)(...(((p–1)amodp)]modp=(p–1)!modp
利用公式(4),可得出:
[(ap–1)((p–1)!]modp=(p–1)!modp=[1((p–1)!]modp
利用公式(5),因为(p–1)!与p互素,因此可以从等式两端消去(p–1)!,即
ap–1modp=1modp
或
ap–1(1modp
这样就证明了费马定理。
?’stotientfunction)记为((n),((n)表示小于n且与n互素的正整数个数。((1)被定义为1,但没有实际意义。
很显然,对于任一素数p,有
((p)=p–1(9)
例如,p=11时,((p)=10,表示小于11且与11互素的正整数个数是10。
??下面要证明一个有用的公式,就是
((n)=((pq)=((p)(((q)=(p–1)((q–1)(10)
这个公式就是教材上的公式(9-9)。在证明公式(10)之前可先看一个例子。
假定p=7,q=11,则n=77。要找出((77)就要先找出小于77的正整数,它是76个(从1到76)。下一步就要将这76个整数中与77有大于1的公因子正整数去除。也就是说,将7,14,21,…,11,22,33,…,等都去除。因此下面就按照这样的思路证明公式(10)。
((n)=(pq–1)–(p–1)–(q–1)=pq–p–q+1=(p–1)((q–1)=((p)(((q)
用上面的例子看一下,小于77且与77互素的正整数个数是((77)=((7)(((11)=6(10=60,而这60个小于77并且与77互素的数是:
{1,2,3,4,5,6,8,9.10,12,13,15,16,17,18,19,20,23,24,25,26,27,29,30,31,32,34,36,37,38,39,40,41,43,45,46,47,48,50,51,52,53,54,57,58,59,60,61,62,64,65,67,68,69,71,72,73,74,75,76}。
?欧拉定理:
对于任何互素的整数a和n有:
a((n)(1modn(11)
可以代入一些数值看一下。
a=3,n=10,得出((n)=((10)=4,算出34=81(1mod10。
a=2,n=11,得出((n)=((11)=10,算出210=1024(1mod11。
证明:
如果n为素数,则此时((n)=(n–1),根据费马定理,公式(11)为真。
如果n为任意整数,则我们也能够证明公式(11)为真。这时((n)表示小于n且与n互素的正整数个数。设这样的整数集合为R:
R={x1,x2,…,x((n)}
现在对该集合中的每个整数乘以a模n:
S={ax1modn,ax2modn,…,ax((n)modn}
集合S是集合R的一个置换,原因如下:
1.因为a与n互素,xi也与n互素,则axi一定与n互素。因此,S中的所有数均小于n且与n互素。
2.S中不存在重复的整数。因为根据公式(5),如果aximodn=axjmodn,则xi=xj。
因此,集合S中所有的数的乘积应当等于集合R中所有的数的乘积:
(ax1modn)((ax2modn)(…((ax((n)modn)=(x1)((x2)(…((x((n))
两端都取模n,得
[(ax1modn)((ax2modn)(…((ax((n)modn)]modn=[(x1)((x2)(…((x((n))]modn
利用公式(4),得出:
[(ax1)((ax2)(…((ax((n))]modn=[(x1)((x2)(…((x((n))]modn
[(a((n))([(x1)((x2)(…((x((n))]]modn=[(x1)((x2)(…((x((n))]modn
因为[(x1)((x2)(…((x((n))]与n互素,因此可以消去[(x1)((x2)(…((x((n))]:
(a((n))modn=1modn
这样就证明了欧拉定理。
因为a与n互素,因此将上式两端都乘以a,这样就得出欧拉定理的另一种等价形式:
(a((n)+1)modn=amodn(12)
或写为:
a((n)+1(amodn(13)
ruoftasnigebkcatta623541REHPIC密钥顺序明文①②③④⑤⑥ruoftasnigebkcatta623541REHPIC密钥顺序明文①②③攻击者(主程序)被攻击主机从属程序从属程序从属程序从属程序从属程序从属程序 |
|