怎样保护信息的安全,本文主要内容关键词为:信息论文,此文献不代表本站观点,内容供学术参考,文章仅供参考阅读下载。
关键词:信息 信息安全 通信 密码
随着现代科技的发展,利用计算机网络通信,已成为现代信息系统的一个特点。它大大提高了信息的储存、处理和传输能力,给人们带来极大便利。但另一方面,储存在计算机数据库中的数据和在公用信道上传输的信息,有些是需要保密的,如有关国家机密的信息、敏感的金融和商业信息及个人的隐私信息等,因而必须对这些信息加密后再储存和传输。只有被授权的人才能将加密的信息解密,任何非经授权的人可能截获加密后的信息,但很难得到原来的信息。这就是信息的保密性,它是信息安全考虑的一个方面。信息安全要考虑的另一个方面,就是防止假冒伪造消息,防止消息被非法纂改,即信息的完整性问题。
信息安全还包括其他方面的一些内容,如信息和信息系统的可用性和可控性等。本文限于介绍为达到信息的保密性和完整性所常用的一些方法。
传统密码
古代战争中,人们已知道对信件加密,以保护军事机密。例如,古罗马人使用的凯撒密码,就是一个简单的加密方法。该方法若以英文为例,即是将26个字母依次排成一圈,首尾相接,然后选定一个数,譬如是3,将每个字母用从它出发在圆圈上依次移动3位后所得到的字母作为它的替换,由此得到一个加密方法。这时a用d代替,b用e代替,……,z用c代替。于是We study cryptology(我们研究密码学)这句话就加密成为zhvwxgbfubswrorjb。收信人在收到加密信件后,将每个字母在圆圈上倒退3位,即得到信件的原文。只要收信人知道写件人所选用的移动位数(3),就能将密件解密。所以写信人和收信人必须在通信前就约定移动位数,该数即称为密码的密钥。密钥必须保密,不能泄露给第三者。在这个密码中,密钥总共可有26种选择,即可为1,2,3,……,26中的任一数。当然,选用26时实际没有加密。
凯撒密码并不安全,任何第三者见到密件后,虽然不知道密钥,但只要依次用1,2,3……作为密钥去尝试解密,不难破译。造成不安全的原因在于这个密码所用的密钥变化总量(26)太小,攻击者可以穷尽所有可能的密钥。
凯撒密码实际上是利用26个英文字母的一个较简单的轮换。人们自然会想到可以改用较复杂的置换,因而设计出了其他一些密码,这类密码都已过时。
现代数字信号通信中,消息是如何加密的呢?所有输入计算机的信息都应变为由0和1组成的序列。仍以英文为例,我们可以将每个英文字母和标点符号都对应一个由五位0和1组成的数字串:a对应00001,b对应00010,……,这样,一段文字就变成一串由0和1组成的数字信号。这种把需要加密的消息变成由0和1组成的数字串称为明文。将文字变为数字串的方法是公开的,还没有对消息加密。假设一个明文m=(m[,1],m[,2],……m[,N])是长度为N的0-1串,即每个m[,i]或为0或为1。一个很容易想到的加密办法,就是在每个m[,i]上加上一个0或一个1,这时规定1+1=0,当然0+0=0,0+1=1,如此规定的加法称为模2加。经过这样处理后仍得到一个长度为N的0-1串就可以生成同样的序列e,发方用它加密,收方用它解密。实际应用中,所用的递推公式固定不变,而初态是变化的,这个初态就成了这个密码的密钥。这种由递推算法生成序列的方法在工程上利用线性反馈移位寄存器是很容易实现的。
用掷钱币的方法生成序列e,每个e[,i]取0或1的可能性都是二分之一,用递推算法生成的序列e,就不一定有这样好的随机性。但这时可以通过选择所用的递推公式,使生成的序列e有尽可能好的随机性。
上述密码称为序列密码,这是至今仍广泛应用的一类密码。实际使用时,不能直接利用递推算法生成的序列e去加密,否则很不安全,序列e还需加以复杂的变化后才能使用。
设计一个密码要考虑两方面的问题。一是要设计出一个加密和解密的算法,使之在工程上易于实现,且计算速度要快;二是要考虑这个密码安全与否,当今技术条件下是否可能找到破译方法。前者为密码编码学,后者为密码分析学。这两方面是相辅相成,对立统一的。
公钥密码
在每个密码中,除了有加密和解密的算法之外,还有一个在一定范围内可供任意挑选的参数。凯撒密码中的参数就是字母移动的位数;序列密码中的参数就是初态(在实际应用中还可能有其他的参数)。该参数即为密码的密钥。选用不同的密钥可以使同一明文对应不同的密文。如果没有这种变化,一个明文始终对应固定的密文,敌方就可能掌握这个对应关系。所以应该经常变换所使用的密钥。通常都假定敌方已掌握了加密算法,就是不知道每一时刻使用的密钥。密钥需要严加保密。
凯撒密码和序列密码还有一个特点,就是发方在加密时和收方在解密时使用同一个密钥。这类密码称为单钥密码,发方利用这个密钥向收方发消息,收方也可以利用这个密钥向发方发消息,所以我们又称之为对称密码。
在利用单钥密码时,必须在通信前经由一个安全渠道将密钥分发给发方和收方。实际上是派专门信使定期发送密钥本,在密钥本上规定一段时间内每天应变化使用的密钥。这种密钥分发方式极耗费人力物力,且有风险。
现在,密码的应用已超出政府和军事部门,进入了金融和商业等民用部门。在一个计算机通信网上通常有很多用户,他们之间需要进行敏感信息的保密通信。如果仍采用单钥密码,密钥的分发就成了问题。假定在一个通信网上有n个用户,就要为任意两个用户之间都建立一个密钥本,总共要有n(n-1)/2个密钥本,这样做显然很不方便。
正是在商用密码需求的推动下,1976年迪菲(Diffie)和赫尔曼(Hellman)发表了题为“密码学的新方向”的论文,开辟了密码学新纪元。他们提出一类新的密码系统,发方使用的加密密钥与收方使用的解密密钥不再相同,当然两者之间有密切关系。只要收方将解密密钥保密,加密密钥可以公开。但从加密密钥很难推算出解密密钥来。任何人都可利用公开的加密密钥向收方发出加密的消息,而只有收方能用他的秘密的解密密钥解密。任何第三者,不知道解密密钥,很难从截获的密文解出明文来。收方也不能利用这一对密钥向发方发消息,如要发消息,还需利用另一对密钥。这类密码称为双钥密码或不对称密码。因为加密密钥是公开的,这是与传统密码的根本区别,所以又称这类密码为公钥密码。公钥密码解决了在计算机网络上进行保密通信时密钥分发的困难,同时也解决了数字签名的困难。
这里简单介绍由里夫斯特(Rivest)、沙米尔(Shamir)和阿德勒曼(Adleman)在1978年发表的一个公钥密码(RSA公钥密码),它是迄今影响最大的一个公钥密码。
管理密钥的机构称为密钥分发中心,一个用户如要使用密码,就去该中心登记领取密钥。密钥分发中心选定一个正整数n=pq(p和q是两个不同的素数),p和q通常要取得足够大。n是公开的,而p和q则是保密的。当用户A来中心登记领取密钥时,中心选一个数e,作为他公开的加密密钥,另有一个数d,是他的秘密的解密密钥。e和d的关系为,其乘积ed除以(p-1)(q-1)的余数为1。中心由于知道p和q,可以由e算出相应的d。而不知道p和q的人,当n很大时,很难由e算出d。只要知道用户A的加密密钥e,任何人B都可向A发送加密报文。设明文为m=(m[,0],m[,1],…,m[,k]),它是一个0-1串,利用二进制表示,m可以决定一个整数m[,0]+2m[,1]+4m[,2]+…2[k]m[,k],仍将该整数记为m。利用此法,每个明文都可用一个整数来表示。发方B利用A的公开钥e,计算乘幂m[e]除以n的余数c(0≤c<n),c就是加密后的密文。B将c发送给A,A收到c后利用他的秘密的解密密钥d,计算乘幂c[d]除以n的余数,可以证明该余数就是明文m,即A完成了解密。
提出一个密码体制后,就要分析它的安全性,研究可能存在的攻击破译方法。如上所述,如果知道了n的因子分解n=pq,就能从公开钥e算出秘密钥d,于是可以攻破RSA密码体制。为此要选用足够大的n,使得在当今技术条件下要分解它非常困难。大整数因子分解是一个数学难题,这里我们看到了将一个密码体制的安全性建立在一个数学难题基础上的例子。自从RSA公钥密码问世后,大大刺激了整数因子分解方法的研究,应用了很多深奥的数学理论,结合电子计算机,提出了不少新的因子分解方法。据报道,1990年有几百名研究人员合作,动用了联网的1000多台计算机,连续运行六个星期,将第九个费尔马数2[2[9]]+1分解为三个素数之积,该数长度有十进制的155位。这是至今见报道的被分解的最大整数。大整数因子分解至今仍是一个热门的研究课题。
继RSA体制之后,又提出了其他一些公钥密码体制,如椭圆曲线公钥密码、背包体制、Lucas公钥密码、基于纠错码的公钥体制等。经分析,有些公钥密码体制被认为是不安全的。
鉴别伪造消息
保护保息的完整性也是信息安全的一个重要方面。收方在收到一个消息后,希望知道发方的确切身份,以防有人假冒某人的身份给他发消息;他也关心此消息在传输过程中是否可能被人纂改或替换了。对于计算机中存贮的数据,也同样有防止非法纂改的问题。这就是消息认证理论所研究的问题。
这里介绍一个消息认证的方法。先简单介绍分组密码概念。分组密码也是一类经常使用的重要密码。在使用序列密码时,明文的长度不受限制。但在使用分组密码时,必须首先将明文分成固定长度的组,例如分成64比特(通常我们把一位0或1称为一个比特)长的组,然后对每组分别加密。以64比特长为例,一个分组密码的加密运算就是一个64比特序列到64比特序列的一对一变换Y=E[,K](X),其中X为明文,Y为密文,K为密钥。这个变换随密钥K的变化而变化。解密运算也是64比特序列到64比特序列的变换X=D[,K](Y),且是加密运算的逆运算,即X=D[,K](E[,k](X))。分组密码是一个单钥密码,密钥K必须保密。
我们可以利用分组密码进行消息认证。将消息m分成一定长度(譬如64比特)的组m=m[,0],m[,1],…,m[,n],每个m[,i]都是长为64的0-方。收方收到m和M[,n+1]后,由于他也知道c和K,可用同样方法计算消息认证字M[,n+1],如果计算结果与他接收到的消息认证字一致,即认为该消息是合法的发方所发,接受该消息。否则就拒收。任何不知道c和K的第三者,如果选择一个感兴趣的消息m′,想发给收方进行欺骗,他要正确计算m′所对应的消息认证字很困难。如果他截获一个报文,得到一对m和M[,n+1],为了找到发方使用的c和K,他可以穷尽尝试所有的c和K,在选定一对c和K后,由m计算M[,n+1](假定他知道了分组密码的加密算法),看计算结果是否一致。但这样计算量很大,无法完成。可见,任何第三者想伪造消息欺骗收方是困难的。
身份验证
身份验证在日常生活中经常遇到。旅客进出海关,需要检查护照;军事行动中,有关的部队需要确定使用的口令,都是为了识别身份。以上两个例子中,身份验证都是由人来完成的。银行的自动提款机,在付款前必须确定取款人的身份,则由机器来完成身份验证。一般想要进入计算机系统的用户,都要由机器来进行身份验证。
最常用的身份验证方法是给每个用户一个通行字(password),通行字可由数字、字母或特定的符号组成,只有用户本人和机器知道。通常,通行字与用户的一些个人资料如姓名、帐号等配合使用。例如,银行系统通常采用十进制4位数作为通行字,每个用户随机取一个4位数作为他的通行字,而银行里保存一个用户的姓名、帐号等个人资料与通行字对照表,利用这个对照表核对取款人所提供的通行字是否正确。对照表应严加保密。
每个自动提款机的用户都有一个塑料卡片,卡片上有一条记录用户姓名、帐号等个人资料的磁带。假设自动提款机是“在线”事务处理,即自动提款机与发卡银行的计算机系统相联,当用户的磁卡插入提款机后,机器首先检查磁卡是否合法、有效,然后,机器要求用户输入通行字,这时用户的通行字和他的个人资料进入银行的主机系统,与系统内存贮的对照表核对,就可以判断通行字是否正确。
如果自动提款机是“离线”事务处理,即不与主机系统相联,就不能利用存贮在主机中的对照表。此时磁卡上不但要有用户的个人资料,还必须要有通行字,不过必须是加密后放在上面。当磁卡插入提款机后,机器首先通过解密得到通行字,然后与用户输入的通行字对照,看它们是否一致。
磁条卡有一些严重缺陷,很容易被仿制,因而防止伪卡成为一个严重问题。磁条的信息存储量也很有限,给使用带来很大局限。因此,现在已推广使用一种更先进的智能卡。智能卡难于复制,它将微处理器芯片嵌在塑料卡上代替磁条,因而有一定的计算能力。可以利用它设计一些更安全的身份验证方案。
数字签名
手书签名在日常生活中经常采用,如签订一个合同,签发一张私人支票等等。手书签名特点是:不易被他人伪造;一旦签了名后,也就不能抵赖;经过签名的文件不易被更改,在纸面上作改动很容易被发现。在数字通信中,有时也需要签名,发方的签名也只能是用一串0或1的数字表示,称之为数字签名,它与手书签名有很大的不同,但要求它具有手书签名的特点,此外,还要求生成签名和验证签名都很容易。
公钥密码不仅为解决计算机通信网络的密钥管理问题提供了手段,也为数字签名提供了一个可行方法。以RSA公钥密码为例,若x是一个需要签名的消息,发方利用秘密钥d做签名,计算乘幂x[,d]除以n的余数,记为y,y就是发方对消息x的签名。任何人收到y后,只要他知道n和发方的公开钥e,计算乘幂y[,e]除以n的余数,该余数就是x,从而知道发方所签的消息x。因为只有发方才知道秘密钥d,可以肯定消息x是发方所签。若有人想伪造发方的签名,他必须选择一个y,使y[,e]除以n的余数是一个有意义的消息。譬如,消息是英文,则y[,e]除以n的余数必须代表一段有意义的英文,要做到这一点并非易事。同样,发方也不能抵赖他的签名,发方的消息也不易被纂改。