通讯安全
时间:2007-02-17 来源:PHP爱好者
有两种方法可以提供安全的通讯:第一种是保证传输介质的物理安全,即使任何人都不可能在传输介质上接上自己的窃密线或"窃听",第二种方法是加密重要数据.
(1)物理安全
如果所有的系统都锁在屋里,并且所有连接系统的网络和接到系统上的终端都在上锁的同一屋内,则通讯与系统一样安全(假定没有MODEM).但是系统的通讯线在上锁的室外时,就会发生问题了.
尽管从网络通讯线提取信息所需要的技术,比从终端通讯线获取数据的技术高几个数量级,上述的同样的问题也倒发生在网络连接上.
用一种简单的(但很昂贵)高技术加压电缆,可以获得通讯的物理安全.这一技术是若干年前,为美国国家电话系统而发展的.通讯电缆密封在塑料中,埋置于地下,并在线的两端加压.线上连接了带有报警器的监示器,用来测量压力.
如果压力下降,则意味电缆可能破了,维修人员将被派出寻找与修复出问题的电缆.
电缆加压技术提供了安全的通讯线.不是将电缆埋置于地下,而是架线于整座楼中,每寸电缆都将暴露在外.如果任何人企图割电缆,监示器会启动报警器,通知安全保卫人员电缆已被破坏.如果任何人成功地在电缆上接了自己的通讯线,安全人员定期地检查电缆的总长度,应可以发现电缆拼接处.加压电缆是屏蔽在波纹铝钢包皮中的,因此几乎没有电磁发射,如果要用电磁感应窃密, 势必需用大量可见的设备.
这样终端就不必锁在办公室,而只需将安全电缆的端头锁在办公室的一个盒子里.
另一个增加外部终端物理安全的方法,是在每天下午5点使用计算机的时间结束时,即当所有用户回家时,断开终端的连接.这样某人若想非法进入系统, 将不得不试图在白天人们来来回回的时间里获取终端的存取权,或不得不在下午5点手试图潜入计算机房(如果5点后计算机房有操作人员或有安全人员,潜入计算机房的企图就不可能得逞).
光纤通讯线曾被认为是不可搭线窃听的,其断破处立即可被检测到,拼接处的传输会令人难以忍耐的缓慢.光纤没有电磁幅射,所以也不能用电磁感应窃密.不幸的是光纤的最大长度有限制,长于这一长度的光纤系统必须定期地放大(复制)信号.这就需要将信号转换成电脉冲,然后再恢复成光脉冲,继续通过另一条线传送.完成这一操作的设备(复制器)是光纤通讯系统的安全薄弱环节,因为信号可能在这一环节被搭线窃听.有两个办法可解决这一问题:距离大于最大长度限制的系统间,不要用光纤线通讯(目前,网络覆盖范围半径约100
公里),或加强复制器的安全(用加压电缆,警报系统,警卫).
(2)加密
加密也可提高终端和网络通讯的物理安全,有三种方法加密传输数据:
. 链接加密:在网络节点间加密,在节点间传输加密,传送到节点后解密, 不同节点对间用不同的密码.
. 节点加密:与链接加密类似,不同的只是当数据在节点间传送时,不用明码格式传送,而是用特殊的加密硬件进行解密和重加密,这种
专用硬件通常旋转在安全保险箱中.
. 首尾加密:对进入网络的数据加密,然后待数据从网络传送出后再进行解密.网络本身并不会知道正在传送的数据是加密数据.这一
方法的优点是,网络上的每个用户(通常是每个机器的一个用户)可有不同的加密关键词,并且网络本身不需增添任何专门的加密设备.缺点是每个系统必须有一个加密设备和相应的软件(管理加密关键词).或者每个系统必须自己完成加密工作(当数据传输率是按兆位/秒的单位计算时,加密任务的计算量是很大的).
终端数据加密是一特殊情况,此时链接加密法和首尾加密法是一样的方法,终端和计算机都是既为节点又为终止端点.
通讯数据加密常常不同于文件加密,加密所用的方法不应降低数据的传送速度.丢失或被歪曲了的数据不应当引起丢失更多的数据位,即解密进程应当能修复坏数据,而不能由于坏数据对整个文件或登录进行不正确地解密.对于登录会话,必须一次加密一个字节,特别是在UNIX系统的情况下,系统要将字所返回给用户,更应一次加密一个字节.在网络中,每一链可能需要不同的加密关键字,这就提出了对加密关键词的管理,分配和替换问题.
DES传送数据的一般形式是以代入法密码格式按块传送数据,不能达到上述的许多要求.DES采用另一加密方法,一次加密一位或一个字节,形成密码流.
密码流具有自同步的特点,被传送的密码文本中发生的错误和数据丢失,将只影响最终的明码文本的一小段(64位).这称为密码反馈.在这种方法中,DES被用作虚拟随机数发生器,产生出一系列用于对明码文本的随机数.明码文本的每n位与一个DESn位的加密输出数进行异或,n的取值为1-64,DES加密处理的输入是根据前边传送的密码文本形成的64位的数值.
发n为1时,加密方法是自同步方式:错一位或丢失1位后,64位的密码文本将不能被正确地解密,因为不正确的加密值将移入DES输入的末端.但是一旦接收到正确的64位密码,由于DES的加密和解密的输入是同步的,故解密将继续正确地进行.
DES的初始输入称为种子,是一个同时由传输器和接收器认可的随机数.通常种子由一方选择,在加密前给另一方.而加密关键词不能以明码格式通过网络传送,当加密系统加电时在两边都写入加密关键词,并且在许多阶段期间加密关键词都保持不变,用户可以选择由主关键词加密的阶段关键词,发送到数据传送的另一端,当该阶段结束后,阶段关键词就不再使用了.主关键词对用户是不可见的,由系统管理员定期改变,选择哪一种关键词管理方法,常由所用的硬件来确定.如果加密硬件都有相应的设备,则用种子还是用主关键词阶段关键词是无关紧要的.
(3)用户身份鉴别
口令只是识别一个用户的一种方法,实际上有许多方法可以用来识别用户.
. CALL BACK MODEM:则维护系统有效用户表及其相应电话号码的设备.当用户拨号调用系统时,CALL BACK MODEM获得用户的登录户头,挂起,再回头调用用户的终端.这种方法的优点是,限制只有电话号码存于MODEM中的人才是系统的用户,从而使非法侵入者不能从其家里调用系统并登录,这一方法的缺点是限制了用户的灵活性,并仍需要使用口令,因为MODEM不能仅从用户发出调用的地方,唯一地标识用户.
. 标记识别:标记是口令的物理实现,许多标记识别系统使用某种形式的卡(如背面有磁条的信用卡),这种卡含有一个编码后的随机数.卡由连接到终端的阅卡机读入,不用再敲入口令.为了增加安全性, 有的系统要求读入卡和敲入口令.有些卡的编码方法使得编码难于复制.标记识别的优点是,标识可以是随机的并且必须长于口令.
不足之处是每个用户必须携带一个卡(卡也可与公司的徽记组合使用).并且每个终端上必须连接一个阅读机.
. 一次性口令:即"询问-应答系统".一次性口令系统允许用户每次登录时使用不同的口令.这种系统允许用户每次登录时使用不同的口令.
这种系统使用一种称做口令发生器的设备,设备是手携式的(大约为一个袖珍计算器的大小),并有一个加密程序和独一的内部加密关键词.系统在用户登录时给用户提供一个随机数,用户将这个随机数送入口令发生器,口令发生器用用户的关键词对随机数加密,然后用户再将口令发生器输出的加密口令(回答)送入系统,系统将用户输入的口令,与它用相同的加密程序,关键词和随机数产生的口令比较,如果二者相同,允许用户存取系统.这种方法的优点是:用户可每次敲入不同的口令,因此不需要口令保密,唯有口令发生器需要安全保护.为了增加安全性,UNIX系统甚至不需联机保存关键词,实际的关键词可保存在有线连接于系统的一个特殊加密计算机中.在用户登录期间,加密计算机将为用户产生随机数和加密口令.这样一种系统的优点是,口令实际不由用户输入,系统中也不保存关键词,即使是加密格式的关键词也可保存于系统中.
其不足之处类似于标记识别方法,每个用户必须携带口令发生器, 如果要脱机保存关键词,还需要有一个特殊硬件.
. 个人特征:有些识别系统检测如指印,签名,声音,零售图案这倦的物理特征.大多数这样的系统极是实验性的,昂贵的,并且不是百分之
百的可靠.任何一个送数据到远程系统去核实的系统有被搭线窃听的危险,非法入侵者只须记录下送去系统校核的信息,以后再重显示这些信息,就能窃密.注意:这同样也是标记识别系统的一个问题.
6.SUN OS系统的网络安全
美国SUN MICROSYSTEM公司的SUN OS操作系统是建立在贝尔实验室的UNIX SYSTEM V和加州大学伯克得分校的UNIX 4.3基础上的UNIX操作系统.SUN OS 4.0版提供了专门的鉴别系统,该系统极大地提高了网络环境的安全性.它也可用来确保其它UNIX系统或非UNIX系统的安全.它使用DES密码机构和公共关键字密码机构来鉴别在网络中的用户和机器.DES表示数据编码标准,而公共数据编码机构是包含两种密钥的密码系统:一种是公用的,另一种是专用的.公用的密钥是公开的而专用密钥是不公开的.专用(秘密)的密钥用来对数据进行编码和解码.
SUN OS系统不同于其它公共关键字编码之系统在于:SUN OS的公用和专用密钥都被用来生成一个通用密钥,该密钥又用来产生DES密钥.
(1)确保NFS的安全
在网络文件系统NFS上建立安全系统,首先文件系统必须开放并保证装配的安全.
. 编辑/etc/exports文件,并将-Secure任选项加在要使用DES编码机构的文件系统上.在屏幕上显示服务器怎样开放安全的/home目录,如: home -Secure,access=engineering
其中engineering是网络中唯一能存取/home文件系统的用户组.
. 对于每台客户机(CLIENT),编辑/etc/fastab文件时,Secure将作为一个装配任选项出现在每个需要确保安全的文件系统中.
. SUN OS中包括有/etc/publickey数据库,该库对每个用户均包含有三个域:
用户的网络名,公用密钥和编码后的密钥.当正常安装时X唯一的用户是nobody,这个用户可以无需管理员的干预即可建立自己的专用密钥(使用 chkey(1)).为了进一步确保安全,管理员可为每个使用newkey(8)的用户建立一个公用密钥.
. 确认keyserv(8c)进程由/etc/rc.local启动,并且仍在运行.该进程执行对公用密码的编码,并将编码后的专用密钥存入/etc/keystore中.
. 此时,所有的用户(除超级用户)都必须使用yppasswd来代替passwd,以使得登录的口令与用户的密钥一致.其结果是在网络中每台客户机的/etc/passwd文件中不能有每个用户的用户名,因而应使用有缺省值的/etc/passwd文件.
. 当安装,移动或升级某台机器时,要将/etc/keystore和/etc/.rootkey两个文件保留.
注意:当你使用login,rlogin或telnet命令到远程机器时,你会被要求输入口令.一旦你输入正确的口令,你也就泄漏了你的帐号.因为此时你的密钥是存放在/etc/keystore中.当然这是指用户对远程机器的安全不信任时.如果用户觉得远程机器在安全保密方面不可靠,那就不要登录到远程机器去,而可使用NFS来装配你所查找的文件.
(2)NFS安全性方面的缺陷
SUN的远程过程调用(RPC)机制已被证明可以用来建立有效的网络服务,最有名的服务是NFS,它实现了不同机器,不同操作系统之间透明的文件共享.但NFS并非毫无缺陷.通常NFS鉴别一个写文件的请求时是鉴别发出这个请求的机器,而不是用户.因而,在基于NFS的文件系统中,运行su命令而成为某个文件的拥有者并不是一件困难的事情.同样,rlogin命令使用的是与NFS同样的鉴别机制,也存在与NFS一样的在安全性方面的弱点.
对网络安全问题一个通常的办法是针对每一个具体的应用来进行解决.而更好的办法是在RPC层设置鉴别机构,使对所有的基于RPC的应用都使用标准的鉴别机构(比如NFS和Yellow pages).于是在SUN OS系统中就可以对用户的机器都进行鉴别.这样做的优点是使计算机网络系统更像过去的分时系统.在每台机器上的用户都可登录到任何一台机器;就象分时系统中任何一个终端上的用户都可登录到主机系统一样,用户的登录口令就是网络的安全保证.用户不需要有任何有关鉴别系统的基础.SUN系统的目标是让网络系统成为既安全又方便的分时系统.
要注意以下几点:
. 任何人只要他拥有root存取权并具备较好的网络程序设计知识,他就可以向网络中加入二进制数据或从网络中获得数据.
. 在采用以太网结构的局域网的工作中不可能发生信息包被窜改(即被传送的信息包在到达目的站之前,被捕获并将其修改后按原路径发出),因为所有的信息包都将几乎同时到达目的站之前,被捕获并将其修改后按原路径发出),但在网关上发生包被窜改则是有可能的.因而应确保网络中所有网关都是可靠的.
. 对网络系统最危险的攻击是同向网络中加入数据有关的事件,例如通过生成一个合法的信息包来冒充某个用户;或记录下用户会话的内容,并在晚一些时候再回答它们.这些都会严重的影响数据的完整性.
. 至于偷看信息这类侵袭(仅仅是偷看网络中传送的内容而不冒充任何人) 将可能造成失密,但并不十分危险,因为数据的完整性没有被破坏,而且用户可通过对需要保密的数据进行编码来保护数据的专用.
总之,在任何意义上要完全明白网络传送的各种问题并不是很容易的,需不断实践分析.
(3)远程过程调用(RPC)鉴别
RPC是网络安全的核心,要明白这一点就必须清楚在RPC中鉴别机制是怎样工作的.RPC的鉴别机制是端口开放式的,即各种鉴别系统都可插入其中并与之共存.当前SUN OS有两个鉴别系统:UNIX和DES,前者是老的,功能也弱.后者是在本节要介绍的新系统.对于RPC鉴别机制有两个词是很重要的:证书和核对器(credentials和verify).这好比身份证一样,证书是识别一个人的姓名,地址, 出生日期等;而核对器就是身份证的照片,通过这张照片就能对持有者进行核对.在RPC机制中也是这样:客户进程在RPC请求时要发出证书和核对器信息.而服务器收到后只返回核对器信息,因为客户是已知道服务的证书的.
(4)UNIX鉴别机制
SUN早期的各种网络服务都建立在UNIX鉴别机制之上,证书部分包含站名,用户号,组号和同组存取序列,而核对器是空白.这个系统存在两个问题:首先,最突出的问题是核对器是空的,这就使得伪造一份证书是非常容易的.如果网络中所有的系统管理员都是可以信赖的,那不会有什么问题.但是在许多网络(特别是在大学)中,这样是不安全的.而NFS对通过查寻发出mount请求的工作站的INTERNET地址作为hostname域的核对器来弥补UNIX鉴别系统的不足,并且使它只按受来自特权INTERNET口的请求.但这样来确保系统安全仍然是不够的,
因为NFS仍然无法识别用户号ID.
另一个问题是UNIX鉴别系统只适用于UNIX系统,但需要在一个网络中所有的站都使用UNIX系统是不现实的.因为NFS可运行于MS-DOS和VMS系统的机器上,但在这些操作系统中UNIX鉴别系统是不能运行的,例如:MS-DOS系统甚至就没有用户号的概念.
由此可知,应该有这样的鉴别系统:它具有独立于操作系统证书并使用核对器.这就如像DES鉴别系统.
(5)DES鉴别系统
DES鉴别系统的安全性建立在发送者对当前时间的编码能力上,它使接收者能解码并对照自己的时钟来进行检验.时钟标记也使用DES编码.这样的机制要工作有两件事是必须的:
. 发送者和接收者双方必须对什么是当前时间进行约定.
. 发送者和接收者必须使用同样的编码关键字.
如果网络有时间同步机制,那么客户机服务器之间的时间同步将自己执行.
如果没有这样的机制,时间标记将按服务器的时间来计算.为计算时间,客户机在开始RPC调用之前必须向服务器询问时间,然后计算自己和服务器之间的时间差,当计算时间标记时,这个差值将校正客户方面的时钟.一旦客户机和服务器时钟不同步,服务器就开始拒绝客户机的请求,并且DES鉴别系统将使它们的时间同步.
客户和服务器是怎样来获得相同的编码关键字的呢?当客户希望与服务器交谈时,它生成一个随机关键字来对时间标记进行编码;这个关键字称为会话关键字CK,客户对CK按公用关键字模式进行编码,并在第一次会话时发送给服务器.这个CK是唯一使用公用关键字编码的关键字.这时只有这一客户与服务器两者才知道它们的DES关键字,这个关键字称为共有关键字.
第一次请求时,客户的证书包括三项:名字,用共有关键字编码的会话关键字和用会话关键字编码的时窗,时窗告诉服务器:以后即将给你发送许多证书; 也许会有人用伪造的时间标记冒充新的会话向你发送证书.当你收到时间标志时,请查看你的当前时间是否在时间标记和时间标记加时窗之间,如果不对请拒绝.
为创建安全的NFS文件,时窗缺省值为30分钟.在发出首次请求时,客户的核对器中包含被编码的时间标记和特定时窗(WIN+1)的编码核对器.这样做的原因是:如果某人想写一个程序并且在证书和核对器的编码域中填充一些任意的二进制值,服务器将CK解码成DES关键字,并且用它来对时窗和时间标记解码,最后产生随机值.在经过上千次的努力后,这些随机的时窗/时间标记对才有可能通过鉴别系统,因此时窗核对器将使要猜测出正确的证书变得更困难,以提高安全性.
在对客户进行鉴别后,服务器将在证书表中存放四项值:客户名A,会话关键字CK,时窗,时间标记.在服务器中保留前三项的目的是以备将来使用.保留时间标记的目的是为防止再次执行,服务器只接收比以前的时间标记晚的时间标记.服务器将向客户返回的核对器包括一个序号ID和负的时间标记(该标记是被CK编码后的).客户机知道,只有服务器能返送回这样的核对器,因为只有服务器知道时间标记.
第一次会话过程是很复杂的,以后就容易多了,客户每次向服务器发送它的ID和编码后的时间标记,而服务器则返送回编码后的时间标记.
(6)公共关键字的编码
SUN OS使用Diffie-Hellman法进行公共关键字的编码,该算法随机产生一个秘密关键字(SK),简称密钥.可用一个公式来计算出公共关键字(PK),公共关键字存放在公共目录中,而密钥存放在专用的目录中.由PK和SK生成普通关键字K,由于计算K必须知道两个密钥中的一个,所以除了服务器和客户外没有任何人能计算K.计算将与另一个已知常数M求模.尽管某人的密钥可能会被人采用对公共关键字求对数的方法来得到,但是由于M的值很大,要计算出M来几乎是不可能的.为了确保安全,K必须有较多位的二进制数来作DES密钥,最多可从K中取56位来形成DES密钥.
PK和SK都是以在文件publickey,byname中的网络名的顺序存放,SK用登录号时的口令编码后存放.当你登录到一个站时,Login程序先取你的编码关键字后再用你的口令对其进行编码;并将解码后的密钥送给确保安全的本地密钥服务器,以备以后进行RPC处理时使用.(注意:一般的应用是不需要知道公共关键字和密钥的).除改变登录口令外,yppasswd程序还将随机地产生新的公共关键字和密钥关键字对.
密钥服务器是一个驻留于本机的RPC服务器,它执行以下三种公共关键字操作:
. setsecreykey(secretkey):告诉密钥服务器将密钥SK存贮起来,以备将来使用(通常是被login程序采用).
. encrytsessionkey(severname,des_key):使在第一次RPC处理中将会话关键字传送给服务器,密钥服务器查找severname中的公共关键字, 并将它和setsecretkey设置的client的密钥组合,以生成用于对des_key编码的密钥.
. decrytsessionkey(clientname,des_key):服务器又请求密钥服务器通过调用本操作来对会话密钥解码.
注意:隐含在这些调用中的使用者名必须鉴别,密钥服务器中可能使用DES鉴别系统的(因为会产生死馈).密钥服务器通过按uid存贮的密钥来解决这个问题,它只允许对本机的root所属进程的请求.然后client进程又执行setuid进程,该进程属于root,执行对client的请求,并将真正的client的uid告诉密钥服务器.
以上三种操作都是系统调用,内核将与密钥服务器直接通信,而不是通过执行setuid程序来通信.
(7)网络实体的命名
对网络实体的命名原有的UNIX鉴别系统存在一些问题,对UNIX鉴别系统最基本的网络实体uid,已经陈述了这个系统的一个问题(太UNIX系统化了),而且这个系统还有两个问题:一个是当许多域联系起来时的uid冲突;另一个是超级用户不是以每个域为基础赋值,而是以每台机器为基础赋值.在缺省情况下,NFS以一种严密的方式解决这一问题:它不允许根通过网络以uid0存取.
DES鉴别系统通过建立在新名字(网络名)基础上的命名机制纠正这些问题.
简单地说,网络名是一串可打印字符,从根本上说,我们所要鉴别的正是这些网络名.公共关键字和密钥按网络名存贮而不是按用户名存贮.yellow page map netid.byname 将网络名映射为本机器中的用户名uid和同组存取序列,而非SUN环境会将网络名映射为其它序列.
我们采用全局唯一的网络名来解决网络命名问题,这比选择全局唯一的用户号要容易的多.在SUN环境中,对每个YP域,用户名是唯一的.如将操作系统名在YP域中的用户号和ARPA域名组合在一起就构成了网络名.在为一个域命名时将ARPA域名加在本地域名之后是一个好习惯.
象对用户赋以网络名一样,对机器也赋以网络名,这样就可解决多个超级用户的问题.机器的网络名其形式与用户的网络名的形式相似,正确的机器鉴别系统对网络中的无盘工作站是非常重要的,它必须保证无盘工作站能通过网络存取本机的home目录.
非SUN环境中,网络名的产生也许与前述有较大区别,但这并不妨碍它们通过SUN的网络安全系统合法地存取信息,为鉴别一个来自另一个域的用户,只需在两个YP数据库是建立实体.一个实体是有关密钥和公开密钥的,另一个是有关uid和同组存取序列的.完成这项工作后,在远程域中的用户就可利用本域的网络服务.
(8)DES鉴别系统的应用
第一个应用是广义的YP更新服务,这个服务允许用户更新YP数据库中的专用域.
另一个应用也是最重要的应用是:更安全的网络文件系统NFS.使用UNIX鉴别系统的NFS存在三个问题:
. 证书的检验仅仅在装配时进行,这时client从服务器获得一条信息,这条信息是以后请求的关键:文件handle.如果有人不通过服务器就能通过猜想或偷听网络传输内容而获得文件handle,那么他也就能破坏UNIX鉴别系统.因为在NFS文件装配完毕后,当发生文件请求时,不再进行证书的检验.
. 假如一个文件系统已从一个为多个client服务的服务器中装配到一台client中;当一个具有超级用户特权的用户使用su命令非法存取别人的文件时,文件系统不能提供任何保护.NFS的第三个问题是:由于它不能鉴别远程client的超级用户,它不得不采用一种严历的方法:拒绝所有的超组用户存取.
新的鉴别系统解决了所有这些问题.某人相获得非法存取权,他不得不猜出正确的被编码后的时间标记并放在证书中,而这几乎是不可能的,这样他就不能猜出文件handle.由于新的系统可鉴别机器,上述第二,三问题也解决了.
但是在这点上,根文件系统不能使用安全的文件,而非文件系统的根用户由IP地址识别.
实际上,与每个文件系统相联系的安全级别可由系统管理员改变.文件/etc/exports包含有文件和可装配它们的机器名,在缺省的情况下文件系统向UNIX鉴别系统开放.但管理员在任意行后加上一secure就可改变为向DES鉴别系统开放.与DES鉴别系统相应的是一个参数:服务器能接收的最大窗口的大小.
(9)遗留的安全问题
尽管使用su不能破坏DES鉴别系统,但仍有几种方法可做到这点.为了通过鉴别,你的密钥必须存放在工作站中,这通常在登录时发生,login程序用你的口令对你的密钥解码,并存放起来以备使用,由于别人不能对你的密钥解码,因而任何人用su命令冒充你都不可能.编辑/etc/passwd文件也不可能对他有什么帮助,因为他必须修改存放在YP中的被编码后的密钥.如果你用你的口令登录到别人的工作站中,你的密钥就会存放在该工作站中,他们就能用su命令冒充你,由于你不可能将你的口令泄露给你不信任的机器,因而这是不可能发生的.但在其它机器上的人可以修改login程序将所有口令存放在他能看到的文件中.
由于使用su命令不能破坏DES鉴别系统,也许最容易的方式就是猜出口令, 因此选择安全的口令对用户是至关重要的.
另一个最方便的方法就是试图重新执行.因此服务器的放置应在安全的地方.
还有其他打破DES的方法,但都非常困难,需要花费巨型计算机几个月的时间来计算.
还存在有另一个DES不曾考虑的安全问题,就是网络偷听,即使有了DES,也不能阻止任何人偷听网络传输的内容.大多数情况下这不是一个大的问题,因为网络中传送的大多数内容虽不是不可读的,但要搞清网络中传送的二进制的含义却不是一件轻松的工作.对登录来说,由于你希望别人不能通过网络获得你的口令,故你传送的是编码后的口令,正如前面所提到的一样,鉴定系统是信息交换的关键,网络传输内容被偷听的问题可以在每个具体应用中获得解决.
(10)性能
众所周知公共关键字系统的速度是很慢的,但在SUN系统中公共关键字编码很少发生,它仅仅发生在每个服务的第一次事务处理时,即使如此,还有缓冲区加速编码的进行.当client第一次与服务器接触时,client和服务器都必须计算出普通密钥,计算普通密钥的时间主要是计算幂关于M的模,在SUN3系统中使用192位模,这需花1秒钟计算普通密钥,也就是说总共需要2秒.因为client和服务器都必须计算普通密钥.因此,在client与服务器第一次接触时,必须等待这个时间,而且关键字服务器将保存计算的结果,以后就用不着每次都计算幂了.
DES系统最重要的网络服务就是快速安全的NFS,DES鉴别系统,相对于UNIX鉴别系统多花的时间就是编码的时间.时间标记和DES块都是64位,在一次RPC中平均要进行四次编码操作:client对请求时间标记编码,服务器对它进行解码,服务器对时间标记编码,client对它解码.在SUN3系列中对一个块进行编码的硬件执行需1毫秒,软件执行需1.2毫秒.这样进行一次RPC调用,若由硬件执行需多花2毫秒,若由软件执行需多花5毫秒.进行一次NFS请求大约需20秒,这样由DES鉴别会使NFS请求的性能降低10%(假如有编码硬件),25%(假如没有编码硬件).这就是DES对网络性能的冲击,事实上并不是所有的文件操作都需通过网络,因而DES对系统性能的影响要低得多.另外是否采用DES鉴别系统是任选的,因此在需要高速的环境时可以不采用DES鉴别系统.
(11)启动和setuid程序引起的问题
考虑这样的情况:计算机因发生某种事件后重新启动.这时机内保存的所有密钥都被清除,如果采用的是DES鉴别系统,那么所有的进程都不能再利用网络服务.这时起关键作用的是根进程.如果根的密钥保存在机内同时没有人输入口令,对该密钥进行编码,那么根进程就将能够利用网络服务.对以上问题的答案就是将根的密钥存放在关键字服务器可读的某个文件中.这样的方式对有盘工作站来说是很好的,但对无盘工作站来说,即存在一个致命的问题:它的密钥必须通过网络存取.这样在无盘工作站启动时,如有人窃听网络传送内容,他就能发现编码后的密钥,尽管完成,但这一工作并不容易.
众所周知有一种启动方式叫单用户启动,启动后根的登录shell出现在主终端上,这儿出现的问题是,如果安装了C2安全系统,从单用户启动仍需口令;
当没有安装C2安全系统时,只要/etc/ttytab文件中的console项标记为secure, 机器的启动就不需口令.
另一个问题是无盘工作站启动不安全,因为有人可以冒充启动服务器,启动一个不正当的内核记录远程无盘工作站的密钥,因为仅仅在内核和关键字服务器运行之后,SUN系统才能对这一问题提供保护.在此以前没有任何方式可以鉴别回答是否来自正确的启动服务器.但我们不考虑这种情况,因为一个不知道源码的人,要想写这样的内核几乎是不可能的.另外犯罪者也极易留下证据,只要你对网络中的启动服务器进行检测,就能发现谁是服务器.
并不是所有的setuid程序都会按我们希望的那样运行,比如一个由用户dave拥有的setuid程序,只要在机器启动后,dave没有进行登录,那么程序setuid就不能存取安全的网络服务(即采用DES鉴别系统的网络服务),好在绝大多数setuid程序都为root所拥有,而且根的密钥在系统忘却后总是存放在系统中,因而程序setuid在采用了DES系统之后,仍能象原来那样运行.
(12)总结
SUN的目标是要让网络系统象分时系统一样安全,这个目标已经达到.在分时系统中,用户被口令鉴别,有个DES鉴别系统,网络中的用户也由口令鉴别.在分时系统中,用户信任系统管理员,他的职业道德不允许他改变用户的口令以冒充该用户.在SUN系统中用户信息网络管理员,他不会改变用户在公共密钥数据库中的实体.很,SUN的系统从某种意义上说比系统更安全,因为在SUN的系统中旋转"窃听"装置来"窃听"网络中传送的口令和编码用的密钥是无用的(因为这些口令和密钥都已被编码).而大多数分时系统对来自终端的数据并不进行编码,用户必须相信,没有人在终端与主机的传送线上安装"窃听"装置.
DES鉴别系统也许不是最终完善的鉴别系统,在将来,很可能有更好的算法和硬件来证明DES鉴别系统无用并放弃它.但至少可以说DES为将来的发展指出了一个方向.从理论上讲,协议从来规定会话密钥甚至公共密钥的编码要采用Diff3-Hellman方法.为了使DES鉴别系统更有力,我们要做的仅仅是使会话密钥的编码更有力,从理论上说这样会形成另一个协议,但是RPC的优点在于它可以采用任何鉴别系统而本身不会受到影响.
至少在目前我们可以说DES鉴别系统满足了我们对网络服务的安全要求,在一个不友好的网络系统中建立起了一个足够安全的系统,而所付出的代价也不高.用户不需使用磁卡或记住上百位的数字,用户像往常一样使用口令鉴别自己,只是系统的性能略有降低.但是如果用户认为性能降低不可并且他的网络系统非常友好的话,他可以不采用DES鉴别系统.
php爱好者站 http://www.phpfans.net 为phper提供一切资讯.
(1)物理安全
如果所有的系统都锁在屋里,并且所有连接系统的网络和接到系统上的终端都在上锁的同一屋内,则通讯与系统一样安全(假定没有MODEM).但是系统的通讯线在上锁的室外时,就会发生问题了.
尽管从网络通讯线提取信息所需要的技术,比从终端通讯线获取数据的技术高几个数量级,上述的同样的问题也倒发生在网络连接上.
用一种简单的(但很昂贵)高技术加压电缆,可以获得通讯的物理安全.这一技术是若干年前,为美国国家电话系统而发展的.通讯电缆密封在塑料中,埋置于地下,并在线的两端加压.线上连接了带有报警器的监示器,用来测量压力.
如果压力下降,则意味电缆可能破了,维修人员将被派出寻找与修复出问题的电缆.
电缆加压技术提供了安全的通讯线.不是将电缆埋置于地下,而是架线于整座楼中,每寸电缆都将暴露在外.如果任何人企图割电缆,监示器会启动报警器,通知安全保卫人员电缆已被破坏.如果任何人成功地在电缆上接了自己的通讯线,安全人员定期地检查电缆的总长度,应可以发现电缆拼接处.加压电缆是屏蔽在波纹铝钢包皮中的,因此几乎没有电磁发射,如果要用电磁感应窃密, 势必需用大量可见的设备.
这样终端就不必锁在办公室,而只需将安全电缆的端头锁在办公室的一个盒子里.
另一个增加外部终端物理安全的方法,是在每天下午5点使用计算机的时间结束时,即当所有用户回家时,断开终端的连接.这样某人若想非法进入系统, 将不得不试图在白天人们来来回回的时间里获取终端的存取权,或不得不在下午5点手试图潜入计算机房(如果5点后计算机房有操作人员或有安全人员,潜入计算机房的企图就不可能得逞).
光纤通讯线曾被认为是不可搭线窃听的,其断破处立即可被检测到,拼接处的传输会令人难以忍耐的缓慢.光纤没有电磁幅射,所以也不能用电磁感应窃密.不幸的是光纤的最大长度有限制,长于这一长度的光纤系统必须定期地放大(复制)信号.这就需要将信号转换成电脉冲,然后再恢复成光脉冲,继续通过另一条线传送.完成这一操作的设备(复制器)是光纤通讯系统的安全薄弱环节,因为信号可能在这一环节被搭线窃听.有两个办法可解决这一问题:距离大于最大长度限制的系统间,不要用光纤线通讯(目前,网络覆盖范围半径约100
公里),或加强复制器的安全(用加压电缆,警报系统,警卫).
(2)加密
加密也可提高终端和网络通讯的物理安全,有三种方法加密传输数据:
. 链接加密:在网络节点间加密,在节点间传输加密,传送到节点后解密, 不同节点对间用不同的密码.
. 节点加密:与链接加密类似,不同的只是当数据在节点间传送时,不用明码格式传送,而是用特殊的加密硬件进行解密和重加密,这种
专用硬件通常旋转在安全保险箱中.
. 首尾加密:对进入网络的数据加密,然后待数据从网络传送出后再进行解密.网络本身并不会知道正在传送的数据是加密数据.这一
方法的优点是,网络上的每个用户(通常是每个机器的一个用户)可有不同的加密关键词,并且网络本身不需增添任何专门的加密设备.缺点是每个系统必须有一个加密设备和相应的软件(管理加密关键词).或者每个系统必须自己完成加密工作(当数据传输率是按兆位/秒的单位计算时,加密任务的计算量是很大的).
终端数据加密是一特殊情况,此时链接加密法和首尾加密法是一样的方法,终端和计算机都是既为节点又为终止端点.
通讯数据加密常常不同于文件加密,加密所用的方法不应降低数据的传送速度.丢失或被歪曲了的数据不应当引起丢失更多的数据位,即解密进程应当能修复坏数据,而不能由于坏数据对整个文件或登录进行不正确地解密.对于登录会话,必须一次加密一个字节,特别是在UNIX系统的情况下,系统要将字所返回给用户,更应一次加密一个字节.在网络中,每一链可能需要不同的加密关键字,这就提出了对加密关键词的管理,分配和替换问题.
DES传送数据的一般形式是以代入法密码格式按块传送数据,不能达到上述的许多要求.DES采用另一加密方法,一次加密一位或一个字节,形成密码流.
密码流具有自同步的特点,被传送的密码文本中发生的错误和数据丢失,将只影响最终的明码文本的一小段(64位).这称为密码反馈.在这种方法中,DES被用作虚拟随机数发生器,产生出一系列用于对明码文本的随机数.明码文本的每n位与一个DESn位的加密输出数进行异或,n的取值为1-64,DES加密处理的输入是根据前边传送的密码文本形成的64位的数值.
发n为1时,加密方法是自同步方式:错一位或丢失1位后,64位的密码文本将不能被正确地解密,因为不正确的加密值将移入DES输入的末端.但是一旦接收到正确的64位密码,由于DES的加密和解密的输入是同步的,故解密将继续正确地进行.
DES的初始输入称为种子,是一个同时由传输器和接收器认可的随机数.通常种子由一方选择,在加密前给另一方.而加密关键词不能以明码格式通过网络传送,当加密系统加电时在两边都写入加密关键词,并且在许多阶段期间加密关键词都保持不变,用户可以选择由主关键词加密的阶段关键词,发送到数据传送的另一端,当该阶段结束后,阶段关键词就不再使用了.主关键词对用户是不可见的,由系统管理员定期改变,选择哪一种关键词管理方法,常由所用的硬件来确定.如果加密硬件都有相应的设备,则用种子还是用主关键词阶段关键词是无关紧要的.
(3)用户身份鉴别
口令只是识别一个用户的一种方法,实际上有许多方法可以用来识别用户.
. CALL BACK MODEM:则维护系统有效用户表及其相应电话号码的设备.当用户拨号调用系统时,CALL BACK MODEM获得用户的登录户头,挂起,再回头调用用户的终端.这种方法的优点是,限制只有电话号码存于MODEM中的人才是系统的用户,从而使非法侵入者不能从其家里调用系统并登录,这一方法的缺点是限制了用户的灵活性,并仍需要使用口令,因为MODEM不能仅从用户发出调用的地方,唯一地标识用户.
. 标记识别:标记是口令的物理实现,许多标记识别系统使用某种形式的卡(如背面有磁条的信用卡),这种卡含有一个编码后的随机数.卡由连接到终端的阅卡机读入,不用再敲入口令.为了增加安全性, 有的系统要求读入卡和敲入口令.有些卡的编码方法使得编码难于复制.标记识别的优点是,标识可以是随机的并且必须长于口令.
不足之处是每个用户必须携带一个卡(卡也可与公司的徽记组合使用).并且每个终端上必须连接一个阅读机.
. 一次性口令:即"询问-应答系统".一次性口令系统允许用户每次登录时使用不同的口令.这种系统允许用户每次登录时使用不同的口令.
这种系统使用一种称做口令发生器的设备,设备是手携式的(大约为一个袖珍计算器的大小),并有一个加密程序和独一的内部加密关键词.系统在用户登录时给用户提供一个随机数,用户将这个随机数送入口令发生器,口令发生器用用户的关键词对随机数加密,然后用户再将口令发生器输出的加密口令(回答)送入系统,系统将用户输入的口令,与它用相同的加密程序,关键词和随机数产生的口令比较,如果二者相同,允许用户存取系统.这种方法的优点是:用户可每次敲入不同的口令,因此不需要口令保密,唯有口令发生器需要安全保护.为了增加安全性,UNIX系统甚至不需联机保存关键词,实际的关键词可保存在有线连接于系统的一个特殊加密计算机中.在用户登录期间,加密计算机将为用户产生随机数和加密口令.这样一种系统的优点是,口令实际不由用户输入,系统中也不保存关键词,即使是加密格式的关键词也可保存于系统中.
其不足之处类似于标记识别方法,每个用户必须携带口令发生器, 如果要脱机保存关键词,还需要有一个特殊硬件.
. 个人特征:有些识别系统检测如指印,签名,声音,零售图案这倦的物理特征.大多数这样的系统极是实验性的,昂贵的,并且不是百分之
百的可靠.任何一个送数据到远程系统去核实的系统有被搭线窃听的危险,非法入侵者只须记录下送去系统校核的信息,以后再重显示这些信息,就能窃密.注意:这同样也是标记识别系统的一个问题.
6.SUN OS系统的网络安全
美国SUN MICROSYSTEM公司的SUN OS操作系统是建立在贝尔实验室的UNIX SYSTEM V和加州大学伯克得分校的UNIX 4.3基础上的UNIX操作系统.SUN OS 4.0版提供了专门的鉴别系统,该系统极大地提高了网络环境的安全性.它也可用来确保其它UNIX系统或非UNIX系统的安全.它使用DES密码机构和公共关键字密码机构来鉴别在网络中的用户和机器.DES表示数据编码标准,而公共数据编码机构是包含两种密钥的密码系统:一种是公用的,另一种是专用的.公用的密钥是公开的而专用密钥是不公开的.专用(秘密)的密钥用来对数据进行编码和解码.
SUN OS系统不同于其它公共关键字编码之系统在于:SUN OS的公用和专用密钥都被用来生成一个通用密钥,该密钥又用来产生DES密钥.
(1)确保NFS的安全
在网络文件系统NFS上建立安全系统,首先文件系统必须开放并保证装配的安全.
. 编辑/etc/exports文件,并将-Secure任选项加在要使用DES编码机构的文件系统上.在屏幕上显示服务器怎样开放安全的/home目录,如: home -Secure,access=engineering
其中engineering是网络中唯一能存取/home文件系统的用户组.
. 对于每台客户机(CLIENT),编辑/etc/fastab文件时,Secure将作为一个装配任选项出现在每个需要确保安全的文件系统中.
. SUN OS中包括有/etc/publickey数据库,该库对每个用户均包含有三个域:
用户的网络名,公用密钥和编码后的密钥.当正常安装时X唯一的用户是nobody,这个用户可以无需管理员的干预即可建立自己的专用密钥(使用 chkey(1)).为了进一步确保安全,管理员可为每个使用newkey(8)的用户建立一个公用密钥.
. 确认keyserv(8c)进程由/etc/rc.local启动,并且仍在运行.该进程执行对公用密码的编码,并将编码后的专用密钥存入/etc/keystore中.
. 此时,所有的用户(除超级用户)都必须使用yppasswd来代替passwd,以使得登录的口令与用户的密钥一致.其结果是在网络中每台客户机的/etc/passwd文件中不能有每个用户的用户名,因而应使用有缺省值的/etc/passwd文件.
. 当安装,移动或升级某台机器时,要将/etc/keystore和/etc/.rootkey两个文件保留.
注意:当你使用login,rlogin或telnet命令到远程机器时,你会被要求输入口令.一旦你输入正确的口令,你也就泄漏了你的帐号.因为此时你的密钥是存放在/etc/keystore中.当然这是指用户对远程机器的安全不信任时.如果用户觉得远程机器在安全保密方面不可靠,那就不要登录到远程机器去,而可使用NFS来装配你所查找的文件.
(2)NFS安全性方面的缺陷
SUN的远程过程调用(RPC)机制已被证明可以用来建立有效的网络服务,最有名的服务是NFS,它实现了不同机器,不同操作系统之间透明的文件共享.但NFS并非毫无缺陷.通常NFS鉴别一个写文件的请求时是鉴别发出这个请求的机器,而不是用户.因而,在基于NFS的文件系统中,运行su命令而成为某个文件的拥有者并不是一件困难的事情.同样,rlogin命令使用的是与NFS同样的鉴别机制,也存在与NFS一样的在安全性方面的弱点.
对网络安全问题一个通常的办法是针对每一个具体的应用来进行解决.而更好的办法是在RPC层设置鉴别机构,使对所有的基于RPC的应用都使用标准的鉴别机构(比如NFS和Yellow pages).于是在SUN OS系统中就可以对用户的机器都进行鉴别.这样做的优点是使计算机网络系统更像过去的分时系统.在每台机器上的用户都可登录到任何一台机器;就象分时系统中任何一个终端上的用户都可登录到主机系统一样,用户的登录口令就是网络的安全保证.用户不需要有任何有关鉴别系统的基础.SUN系统的目标是让网络系统成为既安全又方便的分时系统.
要注意以下几点:
. 任何人只要他拥有root存取权并具备较好的网络程序设计知识,他就可以向网络中加入二进制数据或从网络中获得数据.
. 在采用以太网结构的局域网的工作中不可能发生信息包被窜改(即被传送的信息包在到达目的站之前,被捕获并将其修改后按原路径发出),因为所有的信息包都将几乎同时到达目的站之前,被捕获并将其修改后按原路径发出),但在网关上发生包被窜改则是有可能的.因而应确保网络中所有网关都是可靠的.
. 对网络系统最危险的攻击是同向网络中加入数据有关的事件,例如通过生成一个合法的信息包来冒充某个用户;或记录下用户会话的内容,并在晚一些时候再回答它们.这些都会严重的影响数据的完整性.
. 至于偷看信息这类侵袭(仅仅是偷看网络中传送的内容而不冒充任何人) 将可能造成失密,但并不十分危险,因为数据的完整性没有被破坏,而且用户可通过对需要保密的数据进行编码来保护数据的专用.
总之,在任何意义上要完全明白网络传送的各种问题并不是很容易的,需不断实践分析.
(3)远程过程调用(RPC)鉴别
RPC是网络安全的核心,要明白这一点就必须清楚在RPC中鉴别机制是怎样工作的.RPC的鉴别机制是端口开放式的,即各种鉴别系统都可插入其中并与之共存.当前SUN OS有两个鉴别系统:UNIX和DES,前者是老的,功能也弱.后者是在本节要介绍的新系统.对于RPC鉴别机制有两个词是很重要的:证书和核对器(credentials和verify).这好比身份证一样,证书是识别一个人的姓名,地址, 出生日期等;而核对器就是身份证的照片,通过这张照片就能对持有者进行核对.在RPC机制中也是这样:客户进程在RPC请求时要发出证书和核对器信息.而服务器收到后只返回核对器信息,因为客户是已知道服务的证书的.
(4)UNIX鉴别机制
SUN早期的各种网络服务都建立在UNIX鉴别机制之上,证书部分包含站名,用户号,组号和同组存取序列,而核对器是空白.这个系统存在两个问题:首先,最突出的问题是核对器是空的,这就使得伪造一份证书是非常容易的.如果网络中所有的系统管理员都是可以信赖的,那不会有什么问题.但是在许多网络(特别是在大学)中,这样是不安全的.而NFS对通过查寻发出mount请求的工作站的INTERNET地址作为hostname域的核对器来弥补UNIX鉴别系统的不足,并且使它只按受来自特权INTERNET口的请求.但这样来确保系统安全仍然是不够的,
因为NFS仍然无法识别用户号ID.
另一个问题是UNIX鉴别系统只适用于UNIX系统,但需要在一个网络中所有的站都使用UNIX系统是不现实的.因为NFS可运行于MS-DOS和VMS系统的机器上,但在这些操作系统中UNIX鉴别系统是不能运行的,例如:MS-DOS系统甚至就没有用户号的概念.
由此可知,应该有这样的鉴别系统:它具有独立于操作系统证书并使用核对器.这就如像DES鉴别系统.
(5)DES鉴别系统
DES鉴别系统的安全性建立在发送者对当前时间的编码能力上,它使接收者能解码并对照自己的时钟来进行检验.时钟标记也使用DES编码.这样的机制要工作有两件事是必须的:
. 发送者和接收者双方必须对什么是当前时间进行约定.
. 发送者和接收者必须使用同样的编码关键字.
如果网络有时间同步机制,那么客户机服务器之间的时间同步将自己执行.
如果没有这样的机制,时间标记将按服务器的时间来计算.为计算时间,客户机在开始RPC调用之前必须向服务器询问时间,然后计算自己和服务器之间的时间差,当计算时间标记时,这个差值将校正客户方面的时钟.一旦客户机和服务器时钟不同步,服务器就开始拒绝客户机的请求,并且DES鉴别系统将使它们的时间同步.
客户和服务器是怎样来获得相同的编码关键字的呢?当客户希望与服务器交谈时,它生成一个随机关键字来对时间标记进行编码;这个关键字称为会话关键字CK,客户对CK按公用关键字模式进行编码,并在第一次会话时发送给服务器.这个CK是唯一使用公用关键字编码的关键字.这时只有这一客户与服务器两者才知道它们的DES关键字,这个关键字称为共有关键字.
第一次请求时,客户的证书包括三项:名字,用共有关键字编码的会话关键字和用会话关键字编码的时窗,时窗告诉服务器:以后即将给你发送许多证书; 也许会有人用伪造的时间标记冒充新的会话向你发送证书.当你收到时间标志时,请查看你的当前时间是否在时间标记和时间标记加时窗之间,如果不对请拒绝.
为创建安全的NFS文件,时窗缺省值为30分钟.在发出首次请求时,客户的核对器中包含被编码的时间标记和特定时窗(WIN+1)的编码核对器.这样做的原因是:如果某人想写一个程序并且在证书和核对器的编码域中填充一些任意的二进制值,服务器将CK解码成DES关键字,并且用它来对时窗和时间标记解码,最后产生随机值.在经过上千次的努力后,这些随机的时窗/时间标记对才有可能通过鉴别系统,因此时窗核对器将使要猜测出正确的证书变得更困难,以提高安全性.
在对客户进行鉴别后,服务器将在证书表中存放四项值:客户名A,会话关键字CK,时窗,时间标记.在服务器中保留前三项的目的是以备将来使用.保留时间标记的目的是为防止再次执行,服务器只接收比以前的时间标记晚的时间标记.服务器将向客户返回的核对器包括一个序号ID和负的时间标记(该标记是被CK编码后的).客户机知道,只有服务器能返送回这样的核对器,因为只有服务器知道时间标记.
第一次会话过程是很复杂的,以后就容易多了,客户每次向服务器发送它的ID和编码后的时间标记,而服务器则返送回编码后的时间标记.
(6)公共关键字的编码
SUN OS使用Diffie-Hellman法进行公共关键字的编码,该算法随机产生一个秘密关键字(SK),简称密钥.可用一个公式来计算出公共关键字(PK),公共关键字存放在公共目录中,而密钥存放在专用的目录中.由PK和SK生成普通关键字K,由于计算K必须知道两个密钥中的一个,所以除了服务器和客户外没有任何人能计算K.计算将与另一个已知常数M求模.尽管某人的密钥可能会被人采用对公共关键字求对数的方法来得到,但是由于M的值很大,要计算出M来几乎是不可能的.为了确保安全,K必须有较多位的二进制数来作DES密钥,最多可从K中取56位来形成DES密钥.
PK和SK都是以在文件publickey,byname中的网络名的顺序存放,SK用登录号时的口令编码后存放.当你登录到一个站时,Login程序先取你的编码关键字后再用你的口令对其进行编码;并将解码后的密钥送给确保安全的本地密钥服务器,以备以后进行RPC处理时使用.(注意:一般的应用是不需要知道公共关键字和密钥的).除改变登录口令外,yppasswd程序还将随机地产生新的公共关键字和密钥关键字对.
密钥服务器是一个驻留于本机的RPC服务器,它执行以下三种公共关键字操作:
. setsecreykey(secretkey):告诉密钥服务器将密钥SK存贮起来,以备将来使用(通常是被login程序采用).
. encrytsessionkey(severname,des_key):使在第一次RPC处理中将会话关键字传送给服务器,密钥服务器查找severname中的公共关键字, 并将它和setsecretkey设置的client的密钥组合,以生成用于对des_key编码的密钥.
. decrytsessionkey(clientname,des_key):服务器又请求密钥服务器通过调用本操作来对会话密钥解码.
注意:隐含在这些调用中的使用者名必须鉴别,密钥服务器中可能使用DES鉴别系统的(因为会产生死馈).密钥服务器通过按uid存贮的密钥来解决这个问题,它只允许对本机的root所属进程的请求.然后client进程又执行setuid进程,该进程属于root,执行对client的请求,并将真正的client的uid告诉密钥服务器.
以上三种操作都是系统调用,内核将与密钥服务器直接通信,而不是通过执行setuid程序来通信.
(7)网络实体的命名
对网络实体的命名原有的UNIX鉴别系统存在一些问题,对UNIX鉴别系统最基本的网络实体uid,已经陈述了这个系统的一个问题(太UNIX系统化了),而且这个系统还有两个问题:一个是当许多域联系起来时的uid冲突;另一个是超级用户不是以每个域为基础赋值,而是以每台机器为基础赋值.在缺省情况下,NFS以一种严密的方式解决这一问题:它不允许根通过网络以uid0存取.
DES鉴别系统通过建立在新名字(网络名)基础上的命名机制纠正这些问题.
简单地说,网络名是一串可打印字符,从根本上说,我们所要鉴别的正是这些网络名.公共关键字和密钥按网络名存贮而不是按用户名存贮.yellow page map netid.byname 将网络名映射为本机器中的用户名uid和同组存取序列,而非SUN环境会将网络名映射为其它序列.
我们采用全局唯一的网络名来解决网络命名问题,这比选择全局唯一的用户号要容易的多.在SUN环境中,对每个YP域,用户名是唯一的.如将操作系统名在YP域中的用户号和ARPA域名组合在一起就构成了网络名.在为一个域命名时将ARPA域名加在本地域名之后是一个好习惯.
象对用户赋以网络名一样,对机器也赋以网络名,这样就可解决多个超级用户的问题.机器的网络名其形式与用户的网络名的形式相似,正确的机器鉴别系统对网络中的无盘工作站是非常重要的,它必须保证无盘工作站能通过网络存取本机的home目录.
非SUN环境中,网络名的产生也许与前述有较大区别,但这并不妨碍它们通过SUN的网络安全系统合法地存取信息,为鉴别一个来自另一个域的用户,只需在两个YP数据库是建立实体.一个实体是有关密钥和公开密钥的,另一个是有关uid和同组存取序列的.完成这项工作后,在远程域中的用户就可利用本域的网络服务.
(8)DES鉴别系统的应用
第一个应用是广义的YP更新服务,这个服务允许用户更新YP数据库中的专用域.
另一个应用也是最重要的应用是:更安全的网络文件系统NFS.使用UNIX鉴别系统的NFS存在三个问题:
. 证书的检验仅仅在装配时进行,这时client从服务器获得一条信息,这条信息是以后请求的关键:文件handle.如果有人不通过服务器就能通过猜想或偷听网络传输内容而获得文件handle,那么他也就能破坏UNIX鉴别系统.因为在NFS文件装配完毕后,当发生文件请求时,不再进行证书的检验.
. 假如一个文件系统已从一个为多个client服务的服务器中装配到一台client中;当一个具有超级用户特权的用户使用su命令非法存取别人的文件时,文件系统不能提供任何保护.NFS的第三个问题是:由于它不能鉴别远程client的超级用户,它不得不采用一种严历的方法:拒绝所有的超组用户存取.
新的鉴别系统解决了所有这些问题.某人相获得非法存取权,他不得不猜出正确的被编码后的时间标记并放在证书中,而这几乎是不可能的,这样他就不能猜出文件handle.由于新的系统可鉴别机器,上述第二,三问题也解决了.
但是在这点上,根文件系统不能使用安全的文件,而非文件系统的根用户由IP地址识别.
实际上,与每个文件系统相联系的安全级别可由系统管理员改变.文件/etc/exports包含有文件和可装配它们的机器名,在缺省的情况下文件系统向UNIX鉴别系统开放.但管理员在任意行后加上一secure就可改变为向DES鉴别系统开放.与DES鉴别系统相应的是一个参数:服务器能接收的最大窗口的大小.
(9)遗留的安全问题
尽管使用su不能破坏DES鉴别系统,但仍有几种方法可做到这点.为了通过鉴别,你的密钥必须存放在工作站中,这通常在登录时发生,login程序用你的口令对你的密钥解码,并存放起来以备使用,由于别人不能对你的密钥解码,因而任何人用su命令冒充你都不可能.编辑/etc/passwd文件也不可能对他有什么帮助,因为他必须修改存放在YP中的被编码后的密钥.如果你用你的口令登录到别人的工作站中,你的密钥就会存放在该工作站中,他们就能用su命令冒充你,由于你不可能将你的口令泄露给你不信任的机器,因而这是不可能发生的.但在其它机器上的人可以修改login程序将所有口令存放在他能看到的文件中.
由于使用su命令不能破坏DES鉴别系统,也许最容易的方式就是猜出口令, 因此选择安全的口令对用户是至关重要的.
另一个最方便的方法就是试图重新执行.因此服务器的放置应在安全的地方.
还有其他打破DES的方法,但都非常困难,需要花费巨型计算机几个月的时间来计算.
还存在有另一个DES不曾考虑的安全问题,就是网络偷听,即使有了DES,也不能阻止任何人偷听网络传输的内容.大多数情况下这不是一个大的问题,因为网络中传送的大多数内容虽不是不可读的,但要搞清网络中传送的二进制的含义却不是一件轻松的工作.对登录来说,由于你希望别人不能通过网络获得你的口令,故你传送的是编码后的口令,正如前面所提到的一样,鉴定系统是信息交换的关键,网络传输内容被偷听的问题可以在每个具体应用中获得解决.
(10)性能
众所周知公共关键字系统的速度是很慢的,但在SUN系统中公共关键字编码很少发生,它仅仅发生在每个服务的第一次事务处理时,即使如此,还有缓冲区加速编码的进行.当client第一次与服务器接触时,client和服务器都必须计算出普通密钥,计算普通密钥的时间主要是计算幂关于M的模,在SUN3系统中使用192位模,这需花1秒钟计算普通密钥,也就是说总共需要2秒.因为client和服务器都必须计算普通密钥.因此,在client与服务器第一次接触时,必须等待这个时间,而且关键字服务器将保存计算的结果,以后就用不着每次都计算幂了.
DES系统最重要的网络服务就是快速安全的NFS,DES鉴别系统,相对于UNIX鉴别系统多花的时间就是编码的时间.时间标记和DES块都是64位,在一次RPC中平均要进行四次编码操作:client对请求时间标记编码,服务器对它进行解码,服务器对时间标记编码,client对它解码.在SUN3系列中对一个块进行编码的硬件执行需1毫秒,软件执行需1.2毫秒.这样进行一次RPC调用,若由硬件执行需多花2毫秒,若由软件执行需多花5毫秒.进行一次NFS请求大约需20秒,这样由DES鉴别会使NFS请求的性能降低10%(假如有编码硬件),25%(假如没有编码硬件).这就是DES对网络性能的冲击,事实上并不是所有的文件操作都需通过网络,因而DES对系统性能的影响要低得多.另外是否采用DES鉴别系统是任选的,因此在需要高速的环境时可以不采用DES鉴别系统.
(11)启动和setuid程序引起的问题
考虑这样的情况:计算机因发生某种事件后重新启动.这时机内保存的所有密钥都被清除,如果采用的是DES鉴别系统,那么所有的进程都不能再利用网络服务.这时起关键作用的是根进程.如果根的密钥保存在机内同时没有人输入口令,对该密钥进行编码,那么根进程就将能够利用网络服务.对以上问题的答案就是将根的密钥存放在关键字服务器可读的某个文件中.这样的方式对有盘工作站来说是很好的,但对无盘工作站来说,即存在一个致命的问题:它的密钥必须通过网络存取.这样在无盘工作站启动时,如有人窃听网络传送内容,他就能发现编码后的密钥,尽管完成,但这一工作并不容易.
众所周知有一种启动方式叫单用户启动,启动后根的登录shell出现在主终端上,这儿出现的问题是,如果安装了C2安全系统,从单用户启动仍需口令;
当没有安装C2安全系统时,只要/etc/ttytab文件中的console项标记为secure, 机器的启动就不需口令.
另一个问题是无盘工作站启动不安全,因为有人可以冒充启动服务器,启动一个不正当的内核记录远程无盘工作站的密钥,因为仅仅在内核和关键字服务器运行之后,SUN系统才能对这一问题提供保护.在此以前没有任何方式可以鉴别回答是否来自正确的启动服务器.但我们不考虑这种情况,因为一个不知道源码的人,要想写这样的内核几乎是不可能的.另外犯罪者也极易留下证据,只要你对网络中的启动服务器进行检测,就能发现谁是服务器.
并不是所有的setuid程序都会按我们希望的那样运行,比如一个由用户dave拥有的setuid程序,只要在机器启动后,dave没有进行登录,那么程序setuid就不能存取安全的网络服务(即采用DES鉴别系统的网络服务),好在绝大多数setuid程序都为root所拥有,而且根的密钥在系统忘却后总是存放在系统中,因而程序setuid在采用了DES系统之后,仍能象原来那样运行.
(12)总结
SUN的目标是要让网络系统象分时系统一样安全,这个目标已经达到.在分时系统中,用户被口令鉴别,有个DES鉴别系统,网络中的用户也由口令鉴别.在分时系统中,用户信任系统管理员,他的职业道德不允许他改变用户的口令以冒充该用户.在SUN系统中用户信息网络管理员,他不会改变用户在公共密钥数据库中的实体.很,SUN的系统从某种意义上说比系统更安全,因为在SUN的系统中旋转"窃听"装置来"窃听"网络中传送的口令和编码用的密钥是无用的(因为这些口令和密钥都已被编码).而大多数分时系统对来自终端的数据并不进行编码,用户必须相信,没有人在终端与主机的传送线上安装"窃听"装置.
DES鉴别系统也许不是最终完善的鉴别系统,在将来,很可能有更好的算法和硬件来证明DES鉴别系统无用并放弃它.但至少可以说DES为将来的发展指出了一个方向.从理论上讲,协议从来规定会话密钥甚至公共密钥的编码要采用Diff3-Hellman方法.为了使DES鉴别系统更有力,我们要做的仅仅是使会话密钥的编码更有力,从理论上说这样会形成另一个协议,但是RPC的优点在于它可以采用任何鉴别系统而本身不会受到影响.
至少在目前我们可以说DES鉴别系统满足了我们对网络服务的安全要求,在一个不友好的网络系统中建立起了一个足够安全的系统,而所付出的代价也不高.用户不需使用磁卡或记住上百位的数字,用户像往常一样使用口令鉴别自己,只是系统的性能略有降低.但是如果用户认为性能降低不可并且他的网络系统非常友好的话,他可以不采用DES鉴别系统.
php爱好者站 http://www.phpfans.net 为phper提供一切资讯.
相关阅读 更多 +