发明内容
针对现有方法存在的不足,本发明提出一种基于数字证书的远程移动支付系统及支付方法,以达到提高交易安全性的目的。
本发明的技术方案是这样实现的:一种基于数字证书的远程移动支付系统,包括:CA服务器、OCSP服务器(其中,OCSP表示在线证书状态协议)、商家服务器、银行服务器,此外还增加了用于手机客户端,手机客户端与商家服务器通讯,用于传递商品信息;商家服务器与银行服务器通讯,用于传递支付信息;手机客户端、商家服务器与银行服务器分别与CA服务器通讯,用于申请并下载公钥证书;手机客户端、商家服务器与银行服务器分别和OCSP服务器通讯,用于获取证书状态信息;
采用基于数字证书的远程移动支付系统的支付方法,包括以下步骤:
步骤1:用户、商家和银行在CA证书颁发机构注册,申请公私证书,公钥证书中包含着公钥,其中,用户公钥证书存入手机客户端,商家公钥证书存入商家服务器,银行的公钥证书存入银行服务器;所述的CA是认证机构Certificate Authority的缩写,主要负责公钥数字证书的签发和管理;
用户和商家都在银行注册,即用户和商家都在银行有自己的账户
步骤2:手机客户端发送消息用于连接远程商家服务器,所述的消息包括商家的IP地址和端口号;
步骤3:商家服务器接收到手机客户端的消息后,首先读取自己的商品列表,并将自己在CA中申请的公钥证书附加到商品列表后,产生本次发送给用户的消息,即待售商品列表和公钥证书,其中,所述的商品列表中设置商品信息,所述的商品信息包括商品名称、商品的出售价格和商品简介;
步骤4:手机客户端收到商家服务器返回给用户的服务响应消息后,首先,提取商品列表和商家的公钥证书,将商家的公钥证书保存,解析商品信息,显示给用户;
步骤5:手机客户端向CA服务器发出消息要求获得银行的公钥证书,CA服务器发送银行的公钥证书给手机客户端,并进行签名;
步骤6:手机客户端在OCSP服务器查询商家和银行公钥证书的当前状态,所述当前的状态包括正常、撤销或过期;如公钥证书的状态为正常,则执行步骤7,如果公钥证书的状态为撤销或过期,则执行步骤5,所述的OCSP是在线证书状态协议Online Certificate StatusProtocol的缩写,负责查询某个证书文件当前的状态;
步骤7:手机客户端发送商品选择消息给商家服务器,所述的商品选择消息包括订单信息和验证信息,所述的订单信息包括两个部分:一部分为用户公钥证书序列号、商家公钥证书序列号、银行公钥证书序列号,另一部分为商品名称、商品价格、商品数量和收货地址;所述的验证信息包括用户公钥证书序列号、商家公钥证书序列号、银行公钥证书序列号、商品总价、用户的银行账号、用户的银行账号密码和收货地址;
其中的验证信息是由手机客户端发送给商家服务器并由商家服务器转发给银行服务器的,验证信息进行了两次加密:首先由银行的公钥对其进行加密,保证只有银行才能获得消息内容;其次,再由用户的私钥对其进行加密,保证验证信息确实是有用户所发出;
使用数字信封发送这条消息。方法为:手机客户端生成一个临时的对称加密密钥,使用对称加密密钥对商品选择消息进行加密,经过加密的商品选择消息与对称加密密钥一同被商家的公钥再一次加密;
步骤8:商家服务器解析手机客户端发送来的商品选择消息,方法为:商家服务器接收到手机客户端的商品选择消息后,首先,使用商家私钥解密数字信封,获得用户产生的对称加密密钥,然后使用该密钥对商品选择信息进行解密,获得明文消息;
商家服务器读取自己的公钥证书序列号,与接收到的商品选择消息中的商家公钥证书序列号进行比较,如果相同,则说明商品选择消息是发送给自己的,否则,拒绝接收本条商品选择消息;
步骤9:商家服务器根据手机客户端发送过来的消息,向银行发送消息,方法为:
所述的消息,包括两部分内容:接收到的来自用户发送给银行验证的消息以及商家服务器向银行发送的支付消息,前者由商家服务器直接转发给银行服务器,后者支付消息包括:用户接收商品的地址,商家在银行注册的账户,用户公钥证书序列号、商家公钥证书序列号、银行公钥证书序列号、用户所选定商品的价格总和以及商家发给银行的验证信息;
所述的商家发送给银行的验证信息包括用户公钥证书序列号、商家公钥证书序列号、银行公钥证书序列号、商品总价、商家的银行账号和收货地址;商家服务器利用商家私钥对商家发送给银行的验证消息进行加密;
使用数字信封发送消息,包括方法为:商家生成一个临时的对称加密密钥,使用对称加密密钥对支付消息进行加密,经过加密的支付消息与对称加密密钥一同被银行的公钥再一次加密;
步骤10:银行服务器解析商家服务器的支付消息,方法为:
银行服务器收到商家服务器发送过来的支付消息后,首先读取银行私钥,解密数字信封,获得支付消息中商家服务器临时生成的对称加密密钥,然后使用对称加密密钥解密支付消息,获得明文消息;
银行服务器读取自己的公钥证书序列号,与接收到的商家支付消息中的银行公钥证书序列号进行比较,如果相同,则说明商家的支付消息是发送给自己的,否则,拒绝接收本条支付消息;
银行服务器根据支付消息中的用户公钥证书序列号、商家公钥证书序列号分别从CA服务器下载用户和商家公钥证书,通过支付消息中包含的内容和下载的商家的公钥证书对商家发送给银行的验证信息进行验证,然后使用用户的公钥证书验证用户发送由商家服务器转发待银行验证的消息;
以上验证操作均都通过之后,银行将实现转账操作,将用户账户中的商品价格总和金额转到商家的账户中;
步骤11:银行服务器使用银行的私钥加密支付确认消息,再发送给商家服务器,方法为:
所述的支付确认消息内容包括转账操作中涉及的商家的银行账号、商品总价、用户公钥证书序列号、商家公钥证书序列号和银行公钥证书序列号,并使用银行的私钥对内容进行加密;
使用数字信封发送支付确认消息。方法为:银行服务器生成一个临时的对称加密密钥,使用对称加密密钥对经过银行私钥加密的支付确认消息进行加密,经过加密的支付确认消息与对称加密密钥一同被商家公钥再一次加密,然后发送给商家;
步骤12:商家服务器解析支付确认消息。方法为:
商家服务器接收到银行服务器发送过来的消息后,首先使用自己的私钥解密数字信封,获得银行生成的临时对称加密密钥,然后使用对称加密密钥进行解密,最后使用银行公钥解密经过银行私钥加密的支付确认消息,获得支付确认消息明文。商家服务器根据自己的已有信息和支付确认消息内容进行验证,如果通过验证,则说明支付请求成功,银行服务器已经成功转账,商家服务器根据用户选择的商品,生成订单;
步骤13:商家服务器发送发货消息给手机客户端
商家服务器根据接收到的用户公钥证书序列号,向CA服务器发出消息要求获得用户的公钥证书,CA服务器发送用户公钥证书给商家服务器,并进行签名。商家服务器将经过银行私钥加密的支付确认消息发送给手机客户端。
商家服务器使用数字信封发送这条消息,方法为:商家服务器生成一个临时的对称加密密钥,使用对称加密密钥对经过银行私钥加密的支付确认消息进行加密,经过加密的支付确认消息与对称加密密钥一同被用户公钥再一次加密,然后发送给手机客户端;
步骤14:手机客户端解密发货消息,方法为:用户接收到商家服务器发送的发货消息,首先使用自己的私钥,解密数字信封,获得对称加密密钥,然后使用对称加密密钥进行解密,最后使用银行公钥解密经过银行私钥加密的消息,获得支付确认消息明文,手机客户端根据自己的已有信息和支付确认消息内容进行验证,如果验证通过,认为本次交易已经成功,则等待商家发送自己所购买的商品。
本发明优点:本发明采用数字证书将用户的身份和用户的公钥进行绑定,解决了交易过程中密钥难于管理的问题;所有通信信息都使用密钥进行加密,保证了交易信息的机密性,保护了用户的交易细节,防止隐私泄露;同时,每条交易信息使用发送者的私钥进行数字签名,接收者只要使用发送者的公钥验证签名成功,则发送者本人无法否认曾发送过此消息,达到信息的不可否认性;每条交易信息都计算了信息的摘要值,接收者首先根据接收到的信息进行摘要值比对,来判断信息是否被篡改,保证信息的完整性。
具体实施方式
下面结合附图和实施例对本发明做进一步详细的说明。
本实施例采用一种基于数字证书的远程移动支付系统,如图1所示,包括:CA服务器、OCSP服务器(其中,OCSP表示在线证书状态协议)、商家服务器、银行服务器,此外还增加了用于手机客户端,手机客户端与商家服务器通讯,用于传递商品信息;商家服务器与银行服务器通讯,用于传递支付信息;手机客户端、商家服务器与银行服务器分别与CA服务器通讯,用于申请并下载公钥证书;手机客户端、商家服务器与银行服务器分别和OCSP服务器通讯,用于获取证书状态信息;
本实施例采用基于数字证书的远程移动支付系统的支付方法,其流程如图2示,方法为:
步骤1:用户、商家和银行在CA证书颁发机构注册,如图3所示,三者申请公私证书的过程相同,下面以手机客户端的申请过程为例,加以说明:
手机客户端注册数字证书:手机客户端接收用户输入的个人信息,创建1024位的公私密钥对,接收用户输入的私钥PIN码(私钥文件是加密的,当使用私钥时,需要用户输入PIN码,验证PIN码正确后,才可以解密私钥文件),将私钥保存到私钥文件后再存储到手机中,使用Diffie-Helleman密钥交换协议与CA服务器进行密钥协商,如图4所示,具体方法为:
CA服务器和手机客户端协商一个大素数n和g,g是模n的本原元,这两个整数可以是公开的,故A和B可以通过不安全的途径协商产生;
(1)CA服务器选择一个大随机整数x,并计算X=gxmodn,将X发送给手机客户端;
(2)手机客户端选择一个大随机整数y,并计算Y=gymodn,将Y发送给CA服务器;
(3)CA服务器计算会话密钥k=Yxmodn;
(4)手机客户端计算会话密钥k′=Xy modn。
CA服务器和手机客户端是独立计算会话密钥的,且k=k′=gxymodn;
将用户个人信息和公钥放在一起,使用协商好的会话密钥k′进行加密,发给CA服务器;
CA服务器接受到手机客户端的请求消息后,用协商好的会话密钥k进行解密,产生一个公钥证书序列号,生成一个公钥证书文件,用协商好的会话密钥k加密发送后,发送给手机客户端;
手机客户端接收到CA服务器的响应信息后,用协商好的会话密钥k′解密信息,获得自己的公钥证书文件,存储在手机中,如图5所示,手机客户端获得了公钥证书序列号,以下简称为IDcust,如图6所示,该号码为2;
步骤2:用户登录手机购物系统后,显示“欢迎使用手机购物系统”页面,用户在手机客户端输入商家的IP地址及端口号,并将含上述信息的消息发送给商家服务器;
步骤3:商家服务器接受接收到手机客户端的消息后,首先读取自己的商品列表,如表1所示:
表1为商品列表
名称 |
价格 |
描述 |
手机 |
3500 |
最新三星手机 |
电脑 |
10000 |
联想笔记本 |
商家服务器将自己在CA中申请的公钥证书附加到商品列表后,产生本次发送给用户的消息,即待售商品列表和公钥证书;
步骤4:手机客户端收到商家服务器返回给用户的服务响应消息后,首先,提取商品列表和商家的公钥证书,将商家的公钥证书保存,解析商品信息,并以表1的形式显示给用户;
步骤5:手机客户端等待用户输入选择商品,例如用户选择三星手机,将会跳转至接受邮件地址和私钥PIN码的页面;用户输入相应的邮件地址和私钥PIN码后,手机客户端对用户输入的PIN码进行验证,验证PIN码正确后,才可以解密私钥文件,获取用户私钥;
手机客户端向CA服务器发出消息要求获得银行的公钥证书,CA服务器接受到手机客户端的消息后,使用CA私钥加密银行的公钥证书(这样处理是为了保证该银行公钥证书确实由CA发出),然后发送给手机客户端;
步骤6:手机客户端接受到CA服务器的返回信息后,使用CA公钥解密消息,获取银行公钥证书序列号,通过商家公钥证书序列号(以下简称为IDmerch,本实施例中该序列号为3)和银行公钥证书序列号(以下简称为IDbank,本实施例中该序列号为1),向OCSP服务器查询商家公钥证书和银行公钥证书的当前状态,所述当前的状态包括正常、撤销或过期;如公钥证书的状态为正常,则执行步骤7,如果公钥证书的状态为撤销或过期,则执行步骤5;
步骤7:手机客户端发送商品选择消息给商家服务器,所述的商品选择消息包括订单信息和验证信息,其中,订单信息如表2所示:
表2为订单信息
其中,①TIMEcust是手机发消息的时间,商家接到消息后申请一个时间,如两者相差太大就抛弃该消息,加入TIMEcust还用于防止重放攻击;②加入NONCEcust用于完整性验证,防止产生碰撞;③H(PRODUCT|TIMEcust|Addresscust)表示由商品信息、当前时间和邮寄地址的数据内容,通过单向散列函数计算出的摘要值,用于完整性验证;
验证信息是由手机客户端发送给商家服务器并由商家服务器转发给银行服务器的,验证消息的内容要用用户的私钥进行加密,保证不可否认性,验证信息如表3所示:
表3为验证消息内容
其中,①PRICE是商品价格与商品数量的乘积;
②H(IDmerch|IDbank|IDcust|PRICE|Addresscust|TIMEcust)表示由IDmerch、IDbank、IDcust、邮寄地址、商品总价、当前时间的数据内容,通过单向散列函数计算出的摘要值;
③H(PRODUCT|NONCEcust)表示由商品选择信息、随机数产生的数据内容,通过单向散列函数计算出的摘要值;
④用户的银行账号和密码要是用银行公钥加密,保证只有银行才能获取用户的账号和密码;
手机客户端生成一个临时的对称加密密钥,使用对称加密密钥对商品选择消息进行加密,经过加密的商品选择消息与对称加密密钥一同被商家的公钥再一次加密,发送给商家服务器;
步骤8:商家服务器接收到手机客户端的商品选择消息后,首先,使用商家私钥解密数字信封,获得用户产生的对称加密密钥,然后使用该密钥对商品选择信息进行解密,获得明文消息;
首先,商家服务器向TSA(Time Stamp Authority,时间戳机构)申请时间戳,与接收到的TIMEcust进行比较,如果差值不在接收范围内,认为接收到的是重放攻击发送过来的无效消息,直接丢弃,结束本次通信过程;
商家服务器读取自己的公钥证书序列号,与接收到的商品选择消息中的IDmerch进行比较,如果相同,则说明商品选择消息是发送给自己的,否则,拒绝接收本条商品选择消息;
根据接收到的IDCUST,获得用户的公钥证书文件,然后对PRODUCT|TIMECUST|AddressCUST计算消息摘要,记为hash1,使用用户公钥对经过用户私钥加密的订单消息中的摘要值{H(PRODUCT|TIME cust|Address cust)}SKEYCUST解密,比较hash1和解密出的摘要值,如果二者相等,则说明PRODUCT|TIME CUST|Address CUST是发自手机客户端,同时计算消息摘要值,保证了消息在传输中没有被篡改,是完整的;
步骤9:商家服务器根据手机客户端发送过来的消息,向银行发送消息,消息包括两部分内容:接收到的来自用户发送给银行验证的消息以及商家服务器向银行发送的支付消息,前者由商家服务器直接转发给银行服务器;后者支付消息包括:用户公钥证书序列号、商家公钥证书序列号、银行公钥证书序列号、商家的银行账号、用户接收商品的地址、用户所选定商品的价格总和以及商家发给银行的验证信息;
支付消息内容如表4所示:
表4为支付消息内容
支付消息中的验证部分要用商家的私钥加密,验证部分如表5所示:
表5为支付消息中的验证内容
其中:①H(IDmerch|IDbank|IDcust|TIMEcust|ACCTmerch|PRICE|Addresscust)表示由IDmerch、IDbank、IDcust、当前时间、商家的银行账号、商品总价、邮寄地址的数据内容,通过单向散列函数计算出的摘要值;②H(PRODUCT|NONCEcust)表示由商品选择信息、随机数产生的数据内容,通过单向散列函数计算出的摘要值。
商家服务器生成一个临时的对称加密密钥,使用对称加密密钥对支付消息进行加密,经过加密的支付消息与对称加密密钥一同被银行的公钥再一次加密;
步骤10:银行服务器收到商家服务器发送过来的支付消息后,首先读取银行私钥,解密数字信封,获得支付消息中商家服务器临时生成的对称加密密钥,然后使用对称加密密钥解密支付消息,获得明文消息;
首先,银行服务器向TSA申请时间戳,与接收到的TIMEcust进行比较,如果差值不在接收范围内,认为接收到的是重放攻击发送过来的无效消息,直接丢弃,结束本次通信过程;
银行服务器读取自己的公钥证书序列号,与接收到的商家支付消息中的IDbank比较,如果相同,则说明商家的支付消息是发送给自己的,否则,拒绝接收本条支付消息;
银行服务器根据ID cust和ID merch分别从CA服务器下载用户和商家的公钥证书文件,对支付消息中的内容IDmerch|IDbank|IDcust|TIMEcust|ACCTmerch|PRICEH计算摘要值,记为hash2,使用商家的公钥解密支付消息的验证部分,比较hash2与H(IDmerch|IDbank|IDcust|TIMEcust|ACCTmerch|PRICE))的值,二者相同,说明支付消息确实发自商家服务器,且未被篡改;
银行服务器先使用用户的公钥解密由手机客户端发出并由商家服务器转发给银行服务器的验证消息,再使用自己的私钥继续解密,从而获得明文消息;由支付消息中的IDmerch|IDbank|IDcust|PRICE|Addresscust|TIMEcust计算摘要值,记为hash3,比较hash3和H(IDmerch|IDbank|IDcust|PRICE|Addresscust|TIMEcust))的值;再比较商家服务器发来的验证消息中的H(PRODUCT|NONCEcust)和手机客户端发来的验证消息中的H(PRODUCT|NONCEcust)比较,若二项比较都通过了,则说明手机客户端与商家服务器的消息内容一致;
以上验证操作均都通过之后,银行将实现转账操作,将用户账户中的3500元转到商家的账户中;
步骤11:银行服务器完成转账操作后,向商家服务器发出支付确认消息,使用银行的私钥加密支付确认消息,再发送给商家服务器,支付确认消息如表6所示:
表6为支付确认消息内容
其中,①H(IDmerch|IDbank|IDcust|TIMEcust|ACCTmerch|PRICE)表示由IDmerch、IDbank、IDcust、当前时间、商家的银行账号、商品总价的数据内容,通过单向散列函数计算出的摘要值;②H(PRODUCT|NONCEcust)表示由商品选择信息、随机数产生的数据内容,通过单向散列函数计算出的摘要值;
银行服务器生成一个临时的对称加密密钥,使用对称加密密钥对经过银行私钥加密的支付确认消息进行加密,经过加密的确认支付消息与对称加密密钥一同被商家公钥再一次加密,然后发送给商家服务器;
步骤12:商家服务器解析支付确认消息,方法为:商家服务器接收到银行服务器发送过来的消息后,首先使用自己的私钥解密数字信封,获得银行生成的临时对称加密密钥,然后使用对称加密密钥进行解密,最后使用银行公钥解密经过银行私钥加密的支付确认消息,获得支付确认消息明文;计算自己已知的消息IDmerch|IDbank|IDcust|TIMEcust|ACCTmerch|PRICE的摘要值,记为hash4,将hash4与银行服务器发来的支付确认消息中的H(IDmerch|IDbank|IDcust|TIMEcust|ACCTmerch|PRICE))进行对比验证;再比较自己曾发送的H(PRODUCT|NONCEcust)与银行服务器发来的确认支付消息中的H(PRODUCT|NONCEcust)比较,如果两项比较验证均通过,则说明支付请求成功,银行服务器已经成功转账,商家服务器根据用户选择的商品,生成订单;
步骤13:商家服务器根据接收到的IDmerch,向CA服务器发出消息要求获得用户的公钥证书,CA服务器发送用户公钥证书给商家服务器,并进行签名。商家服务器将经过银行私钥加密的支付确认消息(即{H(IDmerch|IDbank|IDcust|TIMEcust|ACCTmerch|PRICE)H(PRODUCT|NONCEcust)}SKEYbank)作为发送给手机客户端的消息内容,商家服务器再生成一个临时的对称加密密钥,使用对称加密密钥对经过银行私钥加密的支付确认消息进行加密,经过加密的支付确认消息与对称加密密钥一同被用户公钥再一次加密,然后发送给手机客户端。
步骤14:用户接收到商家服务器发送的发货消息,首先使用自己的私钥,解密数字信封,获得对称加密密钥,然后使用对称加密密钥进行解密,最后使用银行公钥解密经过银行私钥加密的消息,获得消息明文。计算自己已知的消息IDmerch|IDbank|IDcust|TIMEcust|ACCTmerch|PRICE的摘要值,记为hash5,将hash5与银行服务器发来的支付确认消息中的H(IDmerch|IDbank|IDcust|TIMEcust|ACCTmerch|PRICE))进行对比验证;再比较自己曾发送的H(PRODUCT|NONCEcust)与银行服务器发来的确认支付消息中的H(PRODUCT|NONCEcust)比较,如果两项比较验证均通过,则说明交易成功,商家已发货,显示“交易成功”。