73 FreeBSD连载:认证与加密( 二 )


认证与加密
为了区分合法用户和非法使用者,就需要对用户进行认证 。标准的Unix认证用户的过程是,用户输入口令,口令传输到系统程序中,由系统程序对口令进行加密,并与系统中的口令密文进行比较来判断口令是否正确 。在这种方法中,如果要通过网络认证,就要将口令以明文形式在网络中传输,因此就存在被窃听的危险 。
此外,流行的认证方式还有S/key,Kerberos,Radius等方式,其中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的应用程序 。
加密算法的选择是一个非常关键的问题,由于加密算法涉及非常高深的数学问题,因此不是任何人都能发明一个加密算法 。有的人以为使用一个不公开算法本身的专有加密算法会增加安全性,其实不然,未经验证的加密算法很可能存在漏洞,在专业密码学家那里有很多种方法可以进行破解,在密码学领域内有很多失败的例子,即使是非常专业的密码学专家,发明一种加密方法也不是一个简单的事情,未经验证的算法在其他专业密码学家的破解下,很容易面临失败的危险 。因此,应该尽量选择已被证明是成熟的加密方法 。

推荐阅读