认证(鉴权)就是指用户必须提供他是谁的证明, 他是某个雇员, 某个组织的代理、某个软件过程(如股票交易系统或Web订货系统的软件过程)。认证的标准方法就是弄清楚他是谁,他具有什么特征, 他知道什么可用于识别他的东西。比如说, 系统中存储了他的指纹, 他接入网络时, 就必须在连接到网络的电子指纹机上提供他的指纹(这就防止他以假的指纹或其它电子信息欺骗系统), 只有指纹相符才允许他访问系统。更普通的是通过视网膜血管分布图来识别, 原理与指纹识别相同, 声波纹识别也是商业系统采用的一种识别方式。网络通过用户拥有什么东西来识别的方法, 一般是用智能卡或其它特殊形式的标志, 这类标志可以从连接到计算机上的读出器读出来。至于说到“他知道什么”, 最普通的就是口令, 口令具有共享秘密的属性。例如, 要使服务器操作系统识别要入网的用户, 那么用户必须把他的用户名和口令送服务器。服务器就将它仍与数据库里的用户名和口令进行比较, 如果相符, 就通过了认证, 可以上网访问。这个口令就由服务器和用户共享。更保密的认证可以是几种方法组合而成。例如用ATM卡和PIN卡。在安全方面最薄弱的一环是规程分析仪的窃听, 如果口令以明码(未加密)传输, 接入到网上的规程分析仪就会在用户输入帐户和口令时将它记录下来, 任何人只要获得这些信息就可以上网工作。
两种加密方法
如果口令在不安全的信道内传输, 必须要对口令进行加密, 加密方法有两种: 公共密钥加密和专用密钥加密。专用密钥加密具有对称性, 即加密密钥也可以用作解密。最有名的专用密钥加密系统就是数据加密标准(DES), 这个标准现在由美国国家安全局和国家标准与技术局来管理。另一个系统是国际数据加密算法(IDEA), 它比DES的加密性好, 而且需要的计算机功能也不么强。IDEA加密标准由PGP(Pretty Good Privacy)系统使用。公共密钥加密使用两个不同的密钥, 因此是一种不对称的加密系统。它的一个密钥是公开的, 而系统的基本功能也是有公共密钥的人可以访问的, 公共密钥可以保存在系统目录内或保存在未加密的电子邮件信息中。它的另一个密钥是专用的, 它用来加密信息但公共密钥可以解密该信息, 它也可以对公共密钥加密的信息解密。在提供同等安全性的前提下, 专用密钥加密的系统速度比较快。
由于专用密钥由双方共享, 所以没有办法确定哪一方始发信息, 这就为合法的争议留下了缺口。专用密钥和公共密钥的鉴权过程是相同的, 主要问题是密钥分配。怎样使密钥保存在手边或记在脑子里(人、计算机、软件模块都会有密钥, 我们将他们称为密钥持有者), 在使用时不被窃听者截获? 用得最多的专用密钥认证系统就是Kerberos, 它需要有一个保密性好的服务器来保存与所有密钥持有者通信的主密钥, 密钥持有者想要进行认证或解密, 与其它密钥持有者的会话, 就要发布与他们秘密通信的密钥, Kerberos只是部分实现了OSF的分布式计算环境(DCE)规范。Kerberos也是Windows NT 5.0安全系统的一部分, 基于Kerberos的系统尚未被广泛采用。公共密钥加密没有密钥分配问题, 它可以放在目录内, 电话黄页(商业电话)上或公告牌里。公共密钥存在的问题是能否信任使用密钥的密钥持有者, 因为任何人都可获得公共密钥。目前使用的第三个版本的ITU的X. 509标准定义了兼容 的数字证书模块, 其主要模块是密钥持有者的名称、密钥持有者的公共密钥信息和证书管理(CA)的数字签名(数字签名保证证书不被修改, 也不可姳环袢?)。X. 509 V3数字证书还包括证书发行人的名字, 发行人的唯一识别码, 密钥持有者的唯一识别码和证书的序列号及有效期和证书的版本号和签字算法等。使用Novell目录服务、Lotus Notes和PGP的用户使用数字证书, 但它们不使用X. 509标准。
实现公共密钥基础结构的障碍
证书管理是一个十分陈旧而且不直观的机制, 它不仅发布数字证书, 它还要建立维护证书取消清单(CRL)。如果你的专用密钥丢失或被偷了, 或者你被解雇了, 或者你找到了新的工作不需要访问现在的东西, 那么必须有一种方法使你原来有效的证书失效。因此需要一个验证数字证书有效性的过程, 它检查证书管理者的公共密钥对证书是否有效, 验证证书是否被修改, 验证证书是否过期, 检验证书是否被取消。信息安全方面的人士很关心CRL的可伸缩性, 如果有效期过长, CRL就不断加长, 就需要更多的计算机资源来搜索它, 如果证书更新太快, 又给管理带来麻烦。
证书管理的另一个问题是如何相互作用。例如公司X对证书管理,这经与公司Y相互证明, 公司Y也对证书管理。但是我是否愿意信任某个想与我在Internet上做生意的证书管理(CA)呢? 或者说, 信任是否可以传递: 如果CAY信任CAZ, 而且CAX信任CAY, 那么CAX是否能自动信任CAZ呢? 如果这样做是合理的, 那么我是否可以在与我信任的CA和我不知道的CA之间找到一个闭合的链路呢? 如果能得到这样一个信任链, 那么它们的扩展是否可以接受呢, 或者说将花掉过多的计算费用、引起时延? X. 509标准提供一个所谓的反向证书, 它包括其它CA经过认证的密钥, 这种能力提供了灵活的交叉认证, 但它不能解决识别和实现信任链的体系结构问题。
证书和密钥管理
证书有一定的生存期, 从发布、分布到取消, 它可以到其期, 再更新。当然, 任何CA的数据库都必须进行有效地备份, 并为任何的不测作好准备。应该为CA制定政策(如果可能的话还应该公布), 它要指明证书的有效期, 与密钥持有人的密钥对连接的证据, 以及防范正在雇用但不被信任的雇员应采取的步骤。CA系统应具备最起码的性能, 还有很高的保密性。在一个可以互操作的公共密钥体系结构中, 折衷的密钥可能可破许多信任链并使特殊CA用户的安全性消失。对专用密钥的访问就好象是用口令保护一样, 处理被忘掉的口令的方法也值得认真考虑, 除了密钥持有人外, 其它人员是不能使用专用密钥进行访问的。用于加密的密钥也需要作备份, 否则密钥丢失或改变, 用此密钥加密的数据也会丢失(但是数字签名的密钥却不能被工具所备份, 因为如果有人丢失了用于数字签名的专用密钥, 还可以产生一个新的专用密钥使它与原来的公共密钥一起工作。)将密钥交与第三方保存是与密钥备份不同的另一个问题。一般来说, 有一个或多个第三方保存密钥的工具或部分密钥工具, 所有第三方钥密持有人一起才能生成一个完整的工具。另一个较好的方法是周期更新密钥, 就象当初生成公共/专用密钥对一样, 更新密钥也要花费CPU的周期, 比较好的主意是错开更新的日期。