发明内容
本发明需要解决的技术问题是提供一种在移动端App支付过程中,能够有效的应对拦截篡改网络数据包的行为,防止用户的支付交易数据被篡改的通信安全防护方法。
为解决上述技术问题,本发明所采取的技术方案如下。
实现移动端App安全支付的方法,该方法为基于Internet跨平台的web服务,作为移动端和业务端之间的安全服务平台,进行移动端的数据安全控制;具体包括以下步骤:
A)初始化安全服务平台,包括预先配置接口白名单以及初始化全局内存对象;配置好的接口白名单放置在安全服务平台指定的目录下;
B)登录移动端App;移动端以Post方式把登录请求数据发送给安全服务平台,
C)安全服务平台对登录请求数据做安全检查,安全服务根据接口白名单识别登录请求,并根据白名单中描述的解密方式取出系统密钥进行解密,如果解密成功,则进行步骤D);
D)安全检查完成后安全服务平台再进行登录验证,验证成功后,安全服务平台产生会话凭证及会话密钥,并把会话凭证、会话密钥及用户数据返回给移动端,同时进行缓存;
E)移动端App做普通操作时,通过会话密钥加密数据报文,发给安全服务平台;移动端App做支付操作时,先向安全服务平台请求支付密钥;
F)安全服务平台接收到数据之后,根据会话凭证取出缓存中的会话密钥,用该密钥进行解密;解密成功后,动态生成一次性支付密钥,并把支付密钥以短信形式发给会话凭证对应用户数据中的手机号码;
G)移动端App收到密钥短信后,输入密钥确认支付。
本发明步骤C)具体包括以下内容:
C1)接收请求数据:安全服务平台接收移动端App Post过来的数据,并分别获取接口ID、凭证、设备码、消息内容这四个域的值;
C2)按接口ID获取白名单配置:根据接口ID查询缓存中的接口白名单,取出对应的接口配置信息;
C3)按凭证和白名单配置中密钥类别查询缓存:根据白名单配置判断该接口所对应的密钥解密类别,再用凭证和密钥类别查询缓存,获取具体的密钥;如果该接口没有凭证,一般会直接取出系统密钥来解密;
C4)取出密钥解密:根据取出的具体密钥,进行DES解密,如解密成功,则进行步骤D)。
本发明步骤D)具体包括以下内容:
D1)生成会话凭证:安全服务平台动态产生一个Guid值,作为用户本次登录后的会话凭证;
D2)关联会话凭证及用户数据:将会话凭证及用户数据关联起来,形成一个key-value对象:会话凭证作为key值,用户数据作为value值;
D3)写入缓存:安全服务平台将会话凭证及用户数据形成的key-value对象写入缓存中;
D4)产生会话密钥:安全服务平台动态产生一个8位长度的随机数值,作为用户本次登录后的会话密钥;
D5)关联会话凭证及会话密钥:将会话凭证及会话密钥关联,形成一个key-value对象;
D6)写入缓存:安全服务平台将会话凭证及会话密钥形成的key-value对象写入缓存中;
D7)安全服务平台将会话凭证、会话密钥及用户数据返回给移动端。
由于采用了以上技术方案,本发明所取得技术进步如下。
本发明基于Internet跨平台的web服务,作为移动端和业务端的中间件,进行移动端数据安全控制,采用动态密钥替代传统的公钥私钥模式,当用户登录时产生会话密钥,用来加密一般数据,安全服务能用相应密钥解密,则认为数据是安全可信任的;对于支付数据,则使用动态的一次性支付密钥,支付密钥要由用户来输入,保证密钥来源来自于用户输入;从而有效防止了移动端App在支付过程中用户的支付交易数据被篡改现象的发生,保证了移动端支付的安全性。
具体实施方式
下面将结合附图和具体实施例对本发明进行进一步详细说明。
实现移动端App安全支付的方法,该方法为基于Internet跨平台的web服务,作为移动端和业务端之间的安全服务平台,进行移动端的数据安全控制。该方法的流程图如图1所示,具体包括以下步骤:
A)安全服务平台加载接口白名单:
初始化安全服务平台,包括预先配置接口白名单以及初始化全局内存对象;配置好的接口白名单放置在安全服务平台指定的目录下。
接口白名单是一份Xml文件,用以确定哪些接口可被安全服务平台授权接受以及接口的一些相关安全处理规则,Xml文件,里面描述了每个接口具体的加、解密方式,业务端路由地址等,通过这种方式对接口的处理和安全服务代码是完全松耦合的,增、减接口处理直接修改Xml文件即可。
每个接口节点包含:接口ID、接口描述、接口对应业务端地址、数据解密方式(针对从客户端接收的数据)、数据加密方式(针对从安全服务返回给手机端的数据)、接口参数规则、接口挡板标识、挡板起始时间、挡板结束时间。各字段用途为:
接口ID:移动端向安全服务平台请求业务时,必须要带上这个值,安全服务平台通过接口ID来识别该接口按哪种方式进行安全控制。
接口描述:用于简单描述该接口的用途。
接口对应业务端地址:用于描述该接口的数据要中转到哪个业务端。
数据解密方式:描述安全服务平台针对从移动端接收的数据,使用哪种密钥解密该数据。
数据加密方式:描述安全服务平台针对从业务端返回的数据,使用哪种密钥加密该数据后再返回给移动端。
接口参数规则:描述该接口的参数规则,如是否需要凭证,业务数据的正则格式。
接口挡板标识:描述该接口是否设置挡板(如果设置,则该接口会在安全服务平台中做拦截,不会发往业务端)。
挡板起始时间:如果接口设置挡板,则此值描述挡板在什么时候开始生效。
挡板结束时间:如果接口设置挡板,则此值描述挡板在什么时候结束。
安全服务启动时读取接口白名单文件,并装载入内存,把文件内容映射成对象。在后面使用接口白名单时,直接从内存对象中进行读取,以加快性能。
B)登录移动端App:
用户在移动端APP上输入账号、密码请求登录,登录数据由移动端APP和安全服务共同的系统密钥进行加密,移动端以Post方式把登录请求数据发送给安全服务平台。
C)安全验证:
安全服务平台对登录请求数据做安全检查,安全服务根据接口白名单识别登录请求,并根据白名单中描述的解密方式取出系统密钥进行解密。本步骤的流程如图2所示,具体包括以下内容。
C1)接收请求数据:安全服务平台接收移动端App Post过来的数据,并分别获取接口ID、凭证、设备码、消息内容这四个域的值。该凭证是系统动态产生的一种口令,为一串随机产生的字符串值,系统产生这种口令后,返回移动端,移动端在请求过程中都需要戴上该口令,以防止其他移动端模拟接口请求。
C2)按接口ID获取白名单配置:根据接口ID查询缓存中的接口白名单,取出对应的接口配置信息。
C3)按凭证和白名单配置中密钥类别查询缓存:根据白名单配置判断该接口所对应的密钥解密类别,再用凭证和密钥类别查询缓存,获取具体的密钥;如果该接口没有凭证,一般会直接取出系统密钥来解密。
C4)取出密钥解密:根据取出的具体密钥,进行DES解密,如解密成功,则进行步骤D)。
D)登录验证:
安全检查完成后安全服务平台再进行登录验证,验证成功后,安全服务平台产生会话凭证及会话密钥,并把会话凭证、会话密钥及用户数据返回给移动端,同时进行缓存。如果验证登录不成功,则返回错误信息,告诉移动端进行提示并重新等待用户登录。
验证成功后的操作流程如图3所示,具体如下:
D1)生成会话凭证:安全服务平台动态产生一个Guid值,作为用户本次登录后的会话凭证。该会话凭证是指这种口令生命周期,只针对一次会话。一次会话是表示:从用户登陆到用户注销期间,中间任意调用接口都在这次会话内。当用户重新登录时,以前的会话凭证即无效,系统会再次产生新的会话。
D2)关联会话凭证及用户数据:将会话凭证及用户数据关联起来,形成一个key-value对象:会话凭证作为key值,用户数据作为value值。
D3)写入缓存:安全服务平台将会话凭证及用户数据形成的key-value对象写入缓存中。
D4)产生会话密钥:安全服务平台动态产生一个8位长度的随机数值,作为用户本次登录后的会话密钥。该会话密钥的用途是,移动端保持这个会话密钥,并以这个会话密钥进行加密数据,直到用户主动注销或重新登录。而会话凭证则作为该用户的唯一标识,将取代用户敏感信息数据,在移动端的后续请求中,安全服务平台通过会话凭证再在服务端缓存中取出用户数据,提交给业务端。
D5)关联会话凭证及会话密钥:将会话凭证及会话密钥关联,形成一个key-value对象。
D6)写入缓存:安全服务平台将会话凭证及会话密钥形成的key-value对象写入缓存中。
D7)安全服务平台将会话凭证、会话密钥及用户数据返回给移动端。
E)移动端求支付密钥:
移动端App做普通操作时,通过会话密钥加密数据报文,发给安全服务平台;移动端App做支付操作时,先向安全服务平台请求支付密钥。
移动端在用户支付前,先提示用户点击获取“支付验证码”,此时即调用请求支付密钥接口。在移动端的表现形式上,是用户主动请求一个支付验证码,等待系统返回。
安全服务平台接收支付密钥请求数据后,进行安全检查。如果检查未通过,则提示用户再次获取。
F)安全服务平台发送支付密钥:
安全服务平台接收到请求支付密钥数据之后,根据会话凭证取出缓存中的会话密钥,用该密钥进行解密;解密成功后,动态生成8位数的随机值,作为一次性支付密钥,并和会话凭证关联进来,写入缓存中。支付密钥在缓存中有超时时间,超时时间在配置文件中设置,时长和移动端提示给用户的 “支付验证码”的有效时间一致。
安全服务平台把支付密钥写入在固定的文案中,并根据凭证从用户数据中获取用户手机号,把支付密钥以短信形式发给手机号码。
G)移动端支付:移动端收到密钥短信后,输入密钥确认支付。
移动端收到短信后,按短信中的文案输入“验证码”(即文案中的密钥),并点击“确认支付”。在此事件被触发时,移动端使用用户输入的支付密钥对真正的支付数据进行加密,并发送到安全服务平台。安全服务平台接收数据后,按白名单配置获取到缓存中的支付密钥解密。如果解密不成功,或者缓存中支付密钥已经超时,则提示用户重新输入。或者用户可重新获取“支付验证码”。如果解密成功,则销毁缓存中的支付密钥,保证支付密钥只能使用一次。
安全服务平台把解密后的支付数据中转到业务端进行支付处理,并将支付结果返回给移动端。
本发明所述的方法中,融合了数据接收、数据安全控制、数据中转、凭证及密钥管理以及日志记录等操作过程。
其中:数据接收是指安全服务平台使用WebApi技术提供轻量级的跨平台接口调用方式,仅接收Http Post过来的数据。
数据安全控制:形式上是一个DLL文件,被加载到安全服务平台中,封装了对数据安全处理的整个过程,包括数据检查以及数据加解密等。
数据检查是针对移动端传来的数据进行各种检查,包括:参数检查和密文检查。
参数检查用于加载接口白名单文件时,进行参数检查。参数检查包括接口ID检查、凭证检查和IMEI设备码检查。接口ID检查用于检查参数中所传的接口ID是否为接口白名单中指定的ID,如果不是则拒绝接口访问。凭证检查用于检查参数中的凭证是否有效,具体做法是判断缓存中有无此凭证;如果无效,则拒绝接口访问。IMEI设备码检查用于检查接口所传的设备码是否为凭证对应的设备码,如果不一致,则认为非法,拒绝接口访问。
密文检查:根据接口白名单,来判断该接口使用哪种密钥进行解密,并根据凭证查找缓存中对应的密钥。找到密钥后,用该密钥进行解密,如果解密成功,代表密文检查成功。
数据加密用于将从移动端发过来的数据,解密成功后会转发给业务端。由业务端处理完毕后,返回结果到安全服务平台。安全服务平台根据接口白名单所描述的哪种密钥,从缓存中取出该密钥,对返回结果进行加密,并把加密后的数据返回给移动端。
数据中转是由安全服务平台把移动端请求的数据中转到业务端。具体地,对于移动端发过来的数据,安全服务平台先做解密处理;并根据接口白名单找到该接口对应的业务端地址,把数据转发过去。业务端对数据处理完毕后,安全服务平台再把结果转发回移动端。
凭证及密钥管理是由安全服务平台产生了凭证及密钥后存放在Memcache;凭证是一个GUID值,唯一标识着用户及密钥信息。密钥分为系统密钥、会话密钥、支付密钥。
系统密钥是安全服务和移动端共同约定的一个密钥。当用户访问未登录接口(此时还没有产生凭证),使用系统密钥进行加密解密。
会话密钥在用户通过移动端登录后,安全服务平台产生会话密钥。会话密钥的生命周期是用户登录后产生,用户注销或会话超时的时候结束。
支付密钥在用户请求支付密钥时,安全服务平台产生支付密钥,支付密钥也有超时时间,并且超时时间比会话密钥更短,一般为60秒,或者系统设定的时间。支付密钥的生命周期是用户请求支付密钥时产生,使用过一次或会话超时的时候结束。
日志记录则贯穿安全服务平台处理数据的整个过程,详细的把每一步记录下来。安全服务平台的每一层都记录有日志,日志是文本形式日志。包括移动端传来的原始数据、解密后数据、发给业务端数据、业务端返回的数据等,以及过程中加密、解密的操作步骤,生成和取出的密钥等都会被记录下来。
对于移动端和业务端进行安全支付,除移动端本身的病毒风险之外,在网络传输过程中,防止数据被篡改是一个大问题。如果数据在传输中被篡改,即使用户账号没有被盗取,也会导致严重的支付风险。本发明采用凭证替代用户数据,用密钥对数据进行加密,并且密钥并不永久驻留在移动端,防止移动端病毒盗取密钥。而对于支付,其密钥完全不驻留在移动端,并且只能在有效时间内使用一次,极大的降低了支付风险。同样移动端也不驻留用户数据,只驻留用户凭证,且用户凭证仅能使用在一个移动端设备中。