移动支付系统的设计与实现过程,你了解多少?

业界
2021
11/26
06:06
网络整理
分享
评论

【摘要】:移动支付是移动电子商务的重要组成部分之一。安全性、隐私性和易用性是移动支付最重要的问题。目前,可以实现移动支付的技术有很多种,其中J2ME凭借着诸多显着的优势成为了佼佼者。移动支付系统也有多种架构。其中智能手机的移动支付模式,以第三方支付平台为中心的架构更加灵活,扩展性强。本文讨论了以第三方支付平台为中心的基于J2ME的移动支付系统的特点和优势,并给出了该系统的详细设计和实现过程。

关键词:移动支付;J2ME;XML 加密;XML 签名

1、 简介

目前,移动支付已经非常流行,并引起了银行、零售等移动行业以外的公司的关注。移动支付是指交易双方通过手机、PDA、移动PC等移动设备进行商业交易。

根据涉及的金额,移动支付一般可以分为以下两类:

1)Micropayment(小额支付):小额支付是指交易金额低于10美元,通常是指购买移动内容服务。

2)宏支​​付:宏支付是指交易金额较大的支付行为。

对于宏支付方式,通过可靠的金融机构进行交易认证是非常必要的;对于小额支付,利用移动网络本身的SIM卡认证机制可以达到更高的安全性。

与传统支付方式相比,移动支付最大的特点是交易灵活、方便、快捷。但是,由于安全性、易用性等问题还没有得到很好的解决,目前国内的移动支付以小额支付为主。目前,理论上可以实现移动支付的技术有很多,如短信、WAP、J2ME等增值服务技术,可以满足移动支付业务的基本需求。其中,J2ME以其可移植性、强大的JDK支持等显着优势成为未来移动支付技术的首选。

2、 系统分析与设计

2.1 移动支付系统的基本组成部分

移动支付系统一般可以分为以下几个基本组成部分:

1) 移动运营商:移动运营商的主要任务是为移动支付提供通信渠道。

2) 金融机构:一般是银行,为用户和商户之间的交易提供一种不使用现金的渠道。

3) 移动支付平台提供商:第三方移动支付平台提供商是运营商与金融机构之间的纽带。

4) 用户业务。

2.2 以第三方移动支付平台为中心的设计模式

目前,移动支付系统的设计模式主要有以下三种:

1) 以移动运营商为中心的设计模式;

2) 以银行为中心的设计模式;

3) 以第三方移动支付平台提供商为中心的设计模式。

其中,以第三方移动支付平台提供商为中心的设计模型如图1所示,具有其他两种设计模型所不具备的简单、方便、跨域操作等优点。

2.3 移动支付系统运行流程

以第三方移动支付平台提供商为中心的移动支付系统运行流程如下:

1) 用户向移动支付平台提供商的服务账户发送交易短信;

2) 支付平台收到短信后,进行服务识别并回复用户确认信息;

3) 用户收到确认消息后会回复确认交易;

4) 支付平台收到确认消息后,会根据产品编号、价格以及相关注册信息查找用户的银行卡号;

5) 支付平台尝试向银行发送扣费请求。如果扣费成功,则转发给6),否则,向用户发送短信提示交易失败;

6) 如果扣款成功,会向用户发送确认信息,并通知相关移动支付系统交易成功,交易结束。

2.4 系统实现重点

1) 安全问题

由于无线网络本身几乎没有提供任何安全保护措施,因此在移动支付过程中可能会受到各种攻击。要实现安全的无线交易,必须解决以下问题:

•鉴权:通信方必须进行身份验证,未通过鉴权的通信方将无法进行下一步。

• 数据完整性(Integrity):确保交易的其他方或非法入侵者无法修改交易的内容,从而确保通信中的接收方收到原始文本。

• 数据保密性(Confidentiality):防止合法或私人数据被非法用户获取,从而确保在交易过程中只有交易双方才能唯一知道交易内容。

• 不可否认性:为保证交易行为的正确性,交易双方均不得否认交易行为产生的事实。

2) 开发移动终端设备应用的限制

移动终端设备应用的开发受到多种制约,例如:芯片处理能力弱、存储空间小、堆内存小、屏幕尺寸有限、按钮少、网络带宽不足等。

2.5 安全问题的解决方案

为了保护通信安全,实现安全的无线交易,需要解决通信过程中的认证、数据完整性、数据保密性和不可否认性问题。数据加密和数字签名这两种安全措施正好可以达到这个目的。

加密数据的方式有很多种,比如使用成熟的SSL/TLS和HTTPS对网络连接进行加密以保护数据。此外,其加密算法也有多种选择,常用的算法有Triple DES、RSA等。系统采用Triple DES对传输的机密数据进行加密,采用RSA算法对Triple DES密钥进行加密。

数字签名解决了以下问题:

认证:由于私钥和公钥是一一对应的,只有用户才能持有私钥,所以私钥实际上成为了用户身份的唯一标志,就像普通的用户名/密码一样. 在认证过程中识别用户的身份。

数据完整性:数据完整性主要是保证内容不被篡改。在数字签名过程中,接收方在收到签名和原始消息后,会根据原始消息生成一个摘要,然后将摘要与公钥解密进行比较验证。因此,即使入侵者修改了原文,也无法达到破坏的目的,因为无法通过比较验证。

不可否认性:由于特定的签名信息只能由某个用户通过私钥进行签名,而不能被其他任何人签名,因此用户无法否认自己已经签名的信息。

这里选择 XML 作为客户端和服务器之间通信的数据载体。使用XML不仅可以表达复杂的嵌套数据结构,逻辑清晰,而且由于XML是当今互联网上的主流通信接口标准,具有良好的兼容性和可扩展性。所以我们将使用 XML 加密和 XML 签名来解决这个系统的安全问题。

3、 J2ME 客户端的实现

整个J2ME客户端的逻辑架构由几个功能模块组成,涵盖了网络通信、用户界面、安全等方面的功能,通过模块之间的通信来实现移动支付系统客户端的功能。

逻辑结构如图2所示,其中A到F的含义如下:

A:用户请求交易/交易操作结果

B:用户输入的交易请求信息/服务器返回的交易结果

C: XML 加密的请求信息/XML 签名认证后的返回结果

D:XML签名的加密请求信息/解析XML的返回结果

E:经过XML签名的加密请求信息的组装XML数据包/网络通信模块收到的XML数据包

F:发送到服务器的XML数据包/从服务器接收的XML数据包

黑色双箭头表示J2ME独有的RMS数据库的数据。数据库访问模块负责调用J2ME RMS 数据库的功能接口,对用户界面模块进行个性化设置、XML 加密和签名的公私钥对、HTTP 访问地址和设置网络通讯模块。访问,其他模块通过访问数据库模块来访问需要的数据。

在客户端系统的实现中,用到了一些第三方API库:kXML和Bouncy Castle API。其中kXML是XML汇编/解析工具,Bouncy Castle API是专用于J2ME应用的XML加解密和签名/验证工具。

客户端部分的主要模块实现如下:

1) 数据库访问模块

数据库访问模块是其他所有模块都需要使用的模块,因为它将整个J2ME客户端需要用到的程序配置和用户设置访问到J2ME数据库中。J2ME MIDP 定义了一个简单的基于记录的数据库管理系统(Record Management System,RMS)。在RMS中,Record Store相当于一般数据库系统中的一张表。它是一个记录一系列记录的文件。

数字

数据库访问模块操作RMS,为外部模块提供两个数据访问接口:

按名称保存数据到RMS的接口:public void setDataToRecordStore(String name, String data)

按名称从 RMS 获取数据的接口:public String getDataFromRecordStore(String name)

2) 用户界面模块

用户界面模块实现人机交互,接受用户输入,并以友好的形式输出操作结果。除了使用 J2ME 提供的 Display、Screen、Label、Command、Alert、Form、TextField 等高级用户界面控件外,还需要使用 J2ME 提供的 Canvas 和 Image 等低级用户界面 API。 J2ME 实现动画等特殊效果。

3) XML 加解密模块

这两个模块负责对来自服务器的使用RSA算法公钥加密的共享密钥进行解密,然后使用共享密钥对使用Triple DES算法的机密信息进行加密。

通过使用 Bouncy Castle API 加密包,我们可以轻松地对需要传输的交易请求中的机密信息进行加密和解密。它提供的 org.bouncycastle.crypto 包中包含了大多数用于加密/解密的类。此外,org.bouncycastle.util 包提供了有用的工具,例如 Base64 编码转换和 Hex 编码转换。在 Bouncy Castle API 中,公钥、私钥和共享密钥都是对象。在尝试使用它们之前,必须通过它们的主要参数重构这些关键对象。RSA 公钥有两个主要参数:模数和指数。除了这两个参数,RSA私钥还有privExp、dp、dq、p、q、qInv等几个参数,而Triple DES共享密钥只有一个密钥参数。在传递这些关键参数或者加密相关信息的时候,因为XML加密的很多元素都指定了使用Base64编码,所以也需要Base64工具类。我们定义了一个 Encryptor 类来处理所有与加密/解密相关的问题。定义的接口如下:

TripleDES 加密接口:public byte[] encryptTripleDES (byte[] data) throws CryptoException

RSA 解密接口:公共同步字节 [] 解密RSA(字节[] 数据) 抛出 CryptoException

4) XML 签名/验证模块

在 XML 签名过程中,首先生成原始数据的摘要,然后对摘要进行签名。生成摘要的算法一般采用SHA1算法。Bouncy Castle API 包还提供了用于生成签名摘要的 SHA1Digest 类,以及用于数字签名的 RSAEngine 和 PSSSigner 等类。我们定义了 Signature 类来封装处理签名的所有功能代码。定义的接口如下:

生成摘要:private byte[] getDigest(String mesg) 抛出异常

使用 RSA 私钥签名:public byte[] RSASign(byte[] toSign) throws Exception

5) XML 汇编/解析模块

为了简化问题,可以通过简单的字符串拼接来实现XML组装,对于XML解析,我们使用kXML进行处理。它是一个只占用很小存储空间的XML语法分析程序,非常适合J2ME应用。

kXML 有非常独特的DOM 操作方法和称为Pull 的语法分析方法。DOM 是一种与 XML 交互的简单方法。通常,这个XML是一棵完整的XML树,它被解析成一个节点结构存储在内存中,遍历这棵树就可以得到所有的节点信息。非常简单好用,但是因为整棵树都存在于内存中,造成了内存的负担。与 DOM 不同,Pull 语法分析允许程序员从语法分析程序中“拉出”下一个事件。拉式语法分析可以更轻松地处理状态更改,因为您可以将分析器发送到不同的函数并维护它们自己的状态变量。. 此外,Pull 特别适用于 J2ME 环境中需要保持尽可能少的内存的情况,所以我们使用Pull 方法进行XML 解析。定义接口如下:

根据XML节点名获取对应的值:private String getXMLNodeValue(String nodeName)

6) 网络通讯模块

在J2ME的MIDP1.0 API中,网络通信协议支持UDP、HTTP、Socket等,虽然理论上可以使用Socket或UDP协议与外界进行通信,但部分厂商的MIDP设备可能不支持这些协议。使用这些协议进行通信可能会导致程序迁移出现问题。由于HTTP是当今互联网上最重要的通信协议,基本上所有厂商的移动终端设备都支持HTTP协议。因此,我们使用 HTTP 协议进行通信。发送和接收数据的代码如下: public String sendAndReceiveByHttp(String url, String strToSend) throws Exception

{

HttpConnection hc = (HttpConnection)Connector.open(url, Connector.READ_WRITE);

hc.setRequestMethod(HttpConnection.POST);

hc.setRequestProperty(“Connection”, “Keep-Alive”);

DataOutputStream dos = hc.openDataOutputStream();

dos.writeUTF(strToSend);//发送数据到目的网址

dos.flush();

dos.close();

DataInputStream dis = hc.openInputStream();

String strReceived = dis.readUTF();//接收目标URL的响应数据

透露();

返回 strReceived;

}

4、 J2EE 服务器端实现

服务器端包含一些重要的模块,如多个对外接口、后台管理子系统、商户自助服务子系统、OTA下载等。这里我们忽略那些与J2ME客户端重复的功能模块,比如XML解析、加密、签名等,而专注于服务端独特的实现细节。服务器的逻辑结构如图3所示。

A:2.3 描述的移动支付交易过程的每一步。

B:OTA服务器提供用户通过网站或发送短信点播WapPush链接的方式下载MIDlet。每个 MIDlet 都内嵌了 RSA 私钥-公钥对,这些密钥对由 RSA 密钥对管理模块维护。

C:商户登录自助子系统注册账号,发布、修改或删除商品信息。

服务器端主要模块的实现如下:

1) 交易接口和交易流程管理模块:交易接口是指在移动支付过程中负责处理服务器端与外界交互的业务逻辑的模块,包括用户交易接口、银行交易接口和商户交易界面。用户交易接口负责处理与J2ME客户端的交互,银行交易接口负责处理使用用户指定的银行卡扣费的业务逻辑,商户交易接口负责处理业务将交易结果通知商户的逻辑。并且这三个接口由交易流程管理模块作为一个整体来协调和管理。

2) Triple DES 密钥管理模块:J2ME 客户端用于加密的 Triple DES 共享密钥是服务器收到交易请求后系统随机生成的,同时生成相应的密钥名,并且CarriedKeyName 元素将名称带回 J2ME 客户端。之后,系统将密钥名称和密钥都存储在数据库中,下次需要解密用密钥加密的数据时,会根据密钥名称从数据库中找到密钥进行解密。系统通过表 DESede_Keys 存储 TripleDES 密钥。

3) OTA下载模块:用户通过Wap Push进入OTA服务器提供的MIDlet下载链接,从而获取MIDlet应用。OTA下载模块主要需要在Resin服务器上做一些相应的设置,获取RSA密钥对并嵌入到MIDlet中。

THE END
广告、内容合作请点击这里 寻求合作
数据库系统 xml语言 通信接口
免责声明:本文系转载,版权归原作者所有;旨在传递信息,不代表云科技的观点和立场。

相关热点

相关推荐

1
3