用Kerberos为J2ME应用程序上锁,第1部分 - Kerberos数据格式介绍2011-08-05 IBM Faheem Khan简介: 用户需要确保所使用的无线应用程序不会损害他们的敏感信息。其中一种方法就是使用行业标 准协议如 Kerberos 来提供安全性。在本系列中,Faheem Khan 将创建一个示例 J2ME MIDlet,它使用 Kerberos 来保护财务数据。本文是该系列的第一篇文章,他通过解释为他的应用程序的安全性提供骨架 的 Kerberos 数据格式,介绍了一些基本知识。许多用户不愿意使用通过无线连接发送敏感数据的应用程序,因为他们不信任无线安全性。但是使传 统有线网络上的电子商务的安全成为可能的这些协议,同样也可以使无线交易成为安全的。在这个由三篇 文章组成的系列中,我将展示 J2ME 客户机和服务器端 Java 应用程序之间使用 Kerberos 协议进行的安 全消息传递。我将开发一个移动银行 MIDlet 应用程序,它可以通过 Internet 安全地发送和接收付款信 息。MIDlet 应用程序将使用一个基于 J2ME 的 Kerberos 客户机来进行实际的安全消息传递。在本文中 ,我首先解释移动银行应用程序的使用模型,然后我将解释 Kerberos 消息交换的顺序,从而为后续的 J2ME 客户机和服务器端 Java 应用程序之间进行的安全消息传递建立安全的上下文。紧接着描述了 Kerberos 消息传递中使用的数据格式。本文的最后一部分简单介绍了 Kerberos 客户机的体系结构,它 最终创建并处理 Kerberos 消息和数据格式。一个用于移动银行的安全 MIDlet我将首先考虑这样一个用例场景:其中有两个拥有电子银行帐户的移动电话用户 Alice 和 Bob。如果 Alice 想要付款给 Bob,那么她就向 MIDlet 应用程序提供 Bob 的手机号码(或者他的银行帐 户号码)并让 MIDlet 向他付款。MIDlet 安全地与电子银行联系并请求电子银行向 Bob 付款。电子银行 完成这笔交易并将确认发送回 Alice。Bob 在他的手机上也安装了 MIDlet,可以用于查看 Alice 的付款 是否到达他的帐户。MIDlet 安全地与电子银行进行通信以验证付款状态。我在本系列文章中将设计并实现的 MIDlet 处理所有与电子银行进行的特定于应用程序的消息传递。 当然,MIDlet 必须保证通信是安全的。下面的功能构成了 MIDlet 的安全性需求:电子银行应该可以确认请求付款和更新帐户状态的用户的身份。这种安全性需求通常称为 身份验证, 其中服务器需要验证发出请求的客户的身份。像 Alice 和 Bob 这样的用户应该可以确保他们是真的与电子银行而不是一些恶意的黑客进行通信。 这也是一种身份验证的情况,在这里客户希望对服务器进行身份验证。客户和服务器彼此验证的情况称为 双向身份验证。所有通信都应该是加密的以维护消息的机密性。即使黑客可以得到在网络上传送的消息字节,他也不 能理解这些加密的数据字节的意义。通信的双方(用户和电子银行)都应该能够验证收到的消息的完整性。如果恶意黑客改变了传输中的 消息,那么接收一方应该可以发现这种改变。我将使用 Kerberos 协议来满足这些安全性需求。我将所有与 Kerberos 相关的功能封装到一个小型 的、适合于 J2ME 设备的客户端 Kerberos 实现中。我们的移动银行 MIDlet 只需要负责特定于应用程序 的消息传递功能,而 Kerberos 客户机将处理所有安全问题。这种技术对于读者来说有一个好处。Kerberos 客户机包装了安全功能(身份验证、机密性和消息完整 性)。因此,如果要开发自己的 MIDlet,以用于发出和接收付款以外的目的,您也可以使用这里描述的 Kerberos 客户机来使之具有安全功能。本文的大部分用于讨论 Kerberos 是如何与应用程序一同工作的,以及描述为了建立安全通信而在客 户机与服务器之间交换的不同消息。我将在本系列的后续文章中详细描述客户端应用程序本身。Kerberos 消息交换本节我将描述以下三个参与者之间的 Kerberos 消息交换:支持 J2ME 的无线设备无线设备用户电子银行图 1. 为建立安全通信上下文而进行的 Kerberos 消息交换

图 1 给出了三个参与者之间出现的消息交换的概括视图。本节我将讨论这一视图并解释图中显示的消 息交换的最终结果。下一节解释每一消息的具体细节(即结构和格式)。注意,图 1 中支持 J2ME 的无线设备包含两个参与者:MIDlet 和 Kerberos 客户机。与此类似,电 子银行系统也包含两个参与者:业务逻辑服务器和 Kerberos 分发中心 (Kerberos Distribution Center ,KDC)。