数据加密技术
数据通信的迅速发展带来了数据失密问题。信息被非法截取和数据库资料被窃的事例经常发生,在日常生活中信用卡密码被盗是常见的例子。数据失密造成严重后果(如金融信息、军事情报等),所以数据保密成为十分重要的问题。
数据保密技术包括三个方面:
(1)
用户身份标志 不同的用户享有不同的权利,可以对不同的数据库或数据库的不同部分进行访问,用户身份标志最常用的方法是口令学。
(2)
物理性保护 一般保密性较高的数据库除了用户身份标志外,还需要数据加密,例如信用卡。
(3)
使用权 数据库的每一个受保护部分保持一份各个用户使用权的清单。
在数据通信中的传统的保密方法是采用通信双方协定的密钥字(定期或不定期变换),在通信开始时先验证对方身份。传输的信号也是经过加密的。
在数据加密法中最有代表性的是美国“数据加密标准”(DES)DES算法本身是公开的知识,但是各厂家生产的设备具体加密方式都各不相同。DES加密方法是用56位密钥字加上8位校验成为64位码字,密钥的变化范围有256种,对明文加密时采用分组移位操作。经过加密任何人企图截取信息用随机试验去解某一密钥事实上是办不到的。DES加密设备是一个插件,装入通信通信双方终端即构成保密通信,使用者并不知道所用密钥内容。当该保密系统工作时,由一随机数字发生器产生密钥,存储在一个电气可消失的存储器内,任何非法的人打开该单元或误用则密钥自动消失。
但是尽管算法复杂,由于设备设计标准化,加密本身也存在标准化问题,既是标准化就有失密可能。同时还存在密钥管理问题,通信双方要有相同密钥,一旦密钥丢失或泄露,或双方失去信任发生争执,就影响通信保密难于解决。所以还需要开发能验证身份的更有效的加密技术。
1976年美国人M.E.Hellman提出了一种公开密钥理论,其基本要领是给每一用户分配一对密钥,其中一个是只有使用者本人掌握秘密密钥,另一个是可以公开的密钥,两个密钥通过算法结成一定的关系。公开密钥只用于加密密钥通过算法结成一定的关系。公开密钥只用于加密,秘密密钥只用于解密,而且要想从一个密钥导出另一个密钥事实上是不可能的,也就是说,从数字观点来看,函数是单向的,而且只有唯一的解。这一方法的特点是把经过加密的报文发送出去而无需双方进行密钥互换、分配或同步。
1978年L.Rivest、A.Shamir和L.Adleman三人合作在Hellman理论基础上提出了称为RSA法的新的数字签名验证法,可以确证对方用户身份。他们认为,数字签名可以由公开密钥系统产生出来,其前提是公开密钥和秘密密钥是互逆的,就是说,假使一个明文报文是用某个秘密密钥“解密”的,则公开密钥“加密”就可以将报文恢复为明文格式。RSA法的操作步骤如下:
(1)
由发报人用自己的秘密密钥将报文“解密”(即用解密钥加密);
(2)
用收报人的公开密钥将被“解密”的报文加密;
(3)
收报人先用他自己的秘密密钥解密,然后用发报人的公开密钥“加密”,如能成功地译出原报文,则可以确保报文是真实的,否则对方的签名就是假冒。
网络数据加密的三种技术:
一般的数据加密可以在通信的三个层次来实现:链路加密、节点加密和端到端加密。
链路加密
对于在两个网络节点间的某一次通信链路,链路加密能为网上传输的数据提供安全保证。对于链路加密(又称在线加密),所有消息在被传输之前进行加密,在每一个节点对接收到的消息进行解密,然后先使用下一个链路的密钥对消息进行加密,再进行传输。在到达目的地之前,一条消息可能要经过许多通信链路的传输。
由于在每一个中间传输节点消息均被解密后重新进行加密,因此,包括路由信息在内的链路上的所有数据均以密文形式出现。这样,链路加密就掩盖了被传输消息的源点与终点。由于填充技术的使用以及填充字符在不需要传输数据的情况下就可以进行加密,这使得消息的频率和长度特性得以掩盖,从而可以防止对通信业务进行分析。
尽管链路加密在计算机网络环境中使用得相当普遍,但它并非没有问题。链路加密通常用在点对点的同步或异步线路上,它要求先对在链路两端的加密设备进行同步,然后使用一种链模式对链路上传输的数据进行加密。这就给网络的性能和可管理性带来了副作用。
在线路/信号经常不通的海外或卫星网络中,链路上的加密设备需要频繁地进行同步,带来的后果是数据丢失或重传。另一方面,即使仅一小部分数据需要进行加密,也会使得所有传输数据被加密。
在一个网络节点,链路加密仅在通信链路上提供安全性,消息以明文形式存在,因此所有节点在物理上必须是安全的,否则就会泄漏明文内容。然而保证每一个节点的安全性需要较高的费用,为每一个节点提供加密硬件设备和一个安全的物理环境所需要的费用由以下几部分组成:保护节点物理安全的雇员开销,为确保安全策略和程序的正确执行而进行审计时的费用,以及为防止安全性被破坏时带来损失而参加保险的费用。
在传统的加密算法中,用于解密消息的密钥与用于加密的密钥是相同的,该密钥必须被秘密保存,并按一定规则进行变化。这样,密钥分配在链路加密系统中就成了一个问题,因为每一个节点必须存储与其相连接的所有链路的加密密钥,这就需要对密钥进行物理传送或者建立专用网络设施。而网络节点地理分布的广阔性使得这一过程变得复杂,同时增加了密钥连续分配时的费用。
节点加密
尽管节点加密能给网络数据提供较高的安全性,但它在操作方式上与链路加密是类似的:两者均在通信链路上为传输的消息提供安全性;都在中间节点先对消息进行解密,然后进行加密。因为要对所有传输的数据进行加密,所以加密过程对用户是透明的。
然而,与链路加密不同,节点加密不允许消息在网络节点以明文形式存在,它先把收到的消息进行解密,然后采用另一个不同的密钥进行加密,这一过程是在节点上的一个安全模块中进行。
节点加密要求报头和路由信息以明文形式传输,以便中间节点能得到如何处理消息的信息。因此这种方法对于防止攻击者分析通信业务是脆弱的。
端到端加密
端到端加密允许数据在从源点到终点的传输过程中始终以密文形式存在。采用端到端加密(又称脱线加密或包加密),消息在被传输时到达终点之前不进行解密,因为消息在整个传输过程中均受到保护,所以即使有节点被损坏也不会使消息泄露。
端到端加密系统的价格便宜些,并且与链路加密和节点加密相比更可靠,更容易设计、实现和维护。端到端加密还避免了其它加密系统所固有的同步问题,因为每个报文包均是独立被加密的,所以一个报文包所发生的传输错误不会影响后续的报文包。此外,从用户对安全需求的直觉上讲,端到端加密更自然些。单个用户可能会选用这种加密方法,以便不影响网络上的其他用户,此方法只需要源和目的节点是保密的即可。
端到端加密系统通常不允许对消息的目的地址进行加密,这是因为每一个消息所经过的节点都要用此地址来确定如何传输消息。由于这种加密方法不能掩盖被传输消息的源点与终点,因此它对于防止攻击者分析通信业务是脆弱的
认证技术
为了区分合法用户和非法使用者,需要对用户进行认证。 标准的Unix认证用户的过程是,用户输入口令,口令传输到系统程序中,由系统程序对口令进行加密,并与系统中的口令密文进行比较来判断口令是否正确。在这种方法中,如果要通过网络认证,就要将口令以明文形式在网络中传输,因此就存在被窃听的危险。此外,流行的认证方式还有S/key,Kerberos,Radius/TACACS等方式,其中S/key是使用一次性的口令,这样即使口令被窃听也无关紧要,其然而使用起来却比较烦琐,使用S/key的用户可能需要打印出长长的口令来帮助输入正确的口令。Kerberos和Radius认证方式能保证口令不被窃听,但他们是在服务器和客户机都支持相应的认证方式的条件下才能使用,因而需要更复杂的设置。
当前Kerberos V认证方式比较流行,Windows 2000中采用了这种认方式。但在FreeBSD 中提供的是Kerberos IV认证方式。需要注意的是,Kerberos V和Kerberos IV差异较大,是两个互不兼容的独立版本。
通常使用的加密算法为DES算法,经实践证明它是一种很有效加密算法,虽然Unix上使用的密钥长度为56位,还不足够安全。因为在Internet上,已经有人通过多台计算机合作计算,通过几个月时间破解了使用它加密的内容。但对于一般的安全性,加上选择得当的口令,56位的DES算法也足够用了。如果要提供更高的安全性,可以使用更长的密钥,或者使用另外的算法,如IDEA算法、三重DES算法等。
与安全有关的算法还包括一类单向散列算法,如MD2、MD4、MD5等,这些算法的目的是用于从已有数据中生成与其他数据不同的少量标识数据,从而区分不同的数据,这样就能通过这些标识数据分辨不同数据。由于不同的数据使用上面的算法生成的标识数据只有极少的可能相同,这些算法一般被用于数字签名,用于保证网络中的文件传输没有发生错误。这些算法也能用于口令认证,其中MD4用于认证时存在安全性不高的问题,因而用于认证时一般使用MD5算法。FreeBSD缺省使用MD5算法用作口令认证,这并不影响系统的正常执行。
对于DES等算法来讲,加密和解密是使用同一个密钥,这个密钥必须秘密保存,一旦泄露就不能保证数据的安全,但要让其他使用者获得加密的信息,就必须告诉他这个密钥,这样就很容易泄露密钥。因此在加密传输中,密钥的传输是一个与数据安全非常相关的问题。另一种不同的思路是使用多个密钥,例如两个密钥,一个加密过的数据只能由另一个来解密,其中一个密钥由用户保存,为私有密钥,另一个向所有要进行加密传输信息的使用者公开,称为公开密钥。当他们要向这个用户发送信息时,能使用该用户的公开密钥加密信息,那么只有这个用户能使用自己的私有密钥能解开信息。同样这个用户用自己的私有密钥加密信息,那么其他用户只能使用他的公开密钥才能解开,这样就保证了信息是由这个用户发出的,而不是其他人的伪造信息。最著名的公开密钥加密算法为RSA算法。使用公开密钥算法进行传输,就能避免数据被窃听的问题,常用的使用公开密钥算法的软件有ssh,pgp,以及其他使用SSL的应用程序。
加密算法的选择是一个非常关键的问题,由于加密算法及非常高深的数学问题,因此不是任何人都能发明一个加密算法。有的人以为使用一个不公开算法本身的专有加密算法会增加安全性,其实不然,未经验证的加密算法很可能存在漏洞,在专业密码学家那里有很多种方法可以进行破解,在密码学领域内有很多失败的例子,即使是非常专业的密码学专家,发明一种加密方法也不是一个简单的事情,未经验证的算法在其他专业密码学家的破解下,很容易面临失败的危险。因此,应该尽量选择已被证明是成熟的加密方法。