孙青青,陈豪尔,董钊月,温哲乾
(合肥工业大学计算机与信息学院,合肥 230000)
现阶段,QR二维码由于其方便快捷、成本低等特点,已经广泛应用于各个领域,以QR二维码信息技术为媒介的移动支付[1]也成了近年来新兴的一种便捷支付的手段。然而,短时间内发展起来的二维码[2]必然存在诸多局限性和安全隐患,并不能满足支付过程的安全性要求,账户资金失窃和个人信息泄露的情况时有发生。因为我们必须重视QR码支付[3]过程中的各项安全隐患,并致力于通过技术手段来保障支付过程的安全性。
目前,在现有的支付系统中,并不包含签名模块,这就使得商家端的身份得不到根本的保证,因而才会有部分平台的电商假货横飞的现象。而对于个人转账的支付模块来说,现有的支付系统中,当向对方用户转账时,会发现被转账方的个人信息包括姓名、手机号出于隐私都会被遮挡一部分。这就会给不法分子可乘之机,通过篡改二维码信息来进行身份的伪造,造成用户的损失。所以开发出一种适用性强、安全性高的支付方案就显得尤为重要。
本文提出一种基于多场景认证的移动支付方案[4],使用数字签名和动态口令进行商家端与用户端的身份验证,最终完成支付交易。QR安全支付是一个系统过程,需要商家端、用户端和支付网关三方合理搭配运用各种安全手段和机制,才能在享受二维码便利性的同时最大限度实现安全支付。
本文主要针对于两种二维码支付场景模式:向商家付款支付模式和向个人转账支付模式。
向商家付款,也就是我们在日常购物常用到的扫码支付。用户想要购买商品时,商家端(假设是某一购物网页)就会弹出二维码支付页面,出示的二维码有该商家的签名认证,用户只需要扫描该二维码即可得到商家的信息,通过解析QR码中的签名再决定是否付款。
向个人转账,一般用于用户与小商家或者普通用户之间,他们都是以普通用户的身份出示二维码,所以在这种情况下有时候就需要动态口令来确认身份。用户可以自行选择是否确认对方的身份。
在整个支付流程中,本文主要涉及的对象有三个:用户端、商家、支付网关。本文在两种情况下都是对主动扫码进行安全性保护。用户端是基于Android端的扫码软件,商家端、普通用户端产生相应的二维码。支付网关(Payment Gateway,简称PG)是一个可信的第三方,用于处理用户和商家之间的支付交易[5]。
(1)向商家转账场景流程如图1所示,当用户提出购物需求需要扫码时,商家产生支付信息传送给网关,并产生带有RSA签名[6]的QR支付码,其中QR码中嵌有商家的相关基本信息;商家将产生的QR码发送给用户;用户收到QR码并进行本地验证;并根据支付网关的解析结果来自行选择是否继续付款。
图1 商家转账场景下的支付流程
(2)个人转账场景流程如图2所示,用户1通过扫码软件获得用户2的信息,并将其发送给支付网关解析;支付网关得到信息后给用户2发送动态口令验证码;用户2收到验证码后将验证码交给用户1;用户1输入验证码后即支付成功。
图2 个人转账场景下的支付流程
(1)产生签名模块
为了实现商家的身份认证,本文采取了RSA签名的方法。商家端在QR码生成模块,利用自己的私钥将签名嵌入到了QR码中,这既证明了该笔支付订单信息是由自己产生的,又防范了其他攻击者对QR码的篡改行为。QR码中共包含订单信息、公钥和签名三类信息。因而用户端在支付时便可确认商家的信息是否可信,继而决定是否继续完成支付。由于签名具有不可抵赖性,这样买家就能够确认商家的身份,避免了以后可能发生的支付经济纠纷。
(2)认证签名模块
在一次QR支付中,用户通过摄像头获取商家二维码信息并解码,本地服务器需要通过用公钥解密签名来验证,只要签名验证不合格,那么此次QR支付将以失败而告终,相反,若签名验证通过,则会提示签名验证通过并进入下一轮支付环节。
此外,在商家签名认证环节中,由于QR码里不但拥有数字签名,而且还嵌入了其他的安全因素,例如Base64编码,所以用户在得到商家签名之前,还需要经过Base64解码,才能进入到真正的签名认证环节。
整个商家签名模块的具体细节示意如表1所示。
表1 商家签名模块
个人转账是基于面对面的转账模式,并且采用动态口令的形式。当我们主动扫码进行支付的时候,支付端会发送验证码到对方的设备,我们可以因此确认我们需要转账的用户的安全性与可靠性。
(1)限额管理
在个人的转账过程中,用户扫描被付款方二维码。在此之前,用户可自行设置所允许的最大的转账额度,若在转账的过程中额度超过所设置的值,则支付网关会自行向对方手机发送短信,对方出示后该用户将验证信息输入验证框便可确认身份安全。
(2)动态口令验证
在现有的支付技术中,通常只有用户希望验证对方身份的情况下才会点开身份认证去验证对方的身份。而且在验证的界面,对方用户的姓名和手机号的中间部分都进行了打码处理,所以可以伪造个人用户的姓名。所以即使我们在验证的时候补全了对方姓名也无济于事。
所以本系统运用了一种动态口令机制,即可以通过动态口令的现场验证,完成身份的确认。在支付时,支付网关将会给用户2发送动态口令短信验证码,用户2会对用户1展示收到的验证码以证明他是此手机号的机主,用户1输入即可完成手机的动态口令认证,这样既实现了隐私保护,又利用了支付网关数据库进行了身份认证。
个人用户动态口令验证模块的具体细节示意如表2所示。
表2 用户动态口令验证模块
为了测试系统的可用性和安全性,我们对基于该支付方案完成的系统进行了如下的系统模块测试,并将测试内容列举如表3所示。
(1)验证商家签名
①正向测试:正确的商家签名信息——显示验证成功。如图3所示。
图3 商家签名正向测试
②反向测试:篡改商家签名信息——显示乱码,无法辨认结果。如图4所示。
图4 商家签名反向测试
(2)验证动态口令
①正向测试:输入正确的动态口令——显示“验证通过”。如图5所示。
图5 动态口令正向测试
②反向测试:输入错误的动态口令——显示“验证未通过,请注意!”。如图6所示。
图6 动态口令反向测试
在本文提出的基于QR支付模式的两种场景中,分别对应防范了几种可能的攻击行为。
(1)商家端可能是不法分子的伪造二维码。在现有的支付系统中,不含签名模块,这就使得商家端的身份得不到根本的保证。任何人都可以伪造产生自身的二维码。而在本系统中由于签名具有不可抵赖性,这样买家就能够确认商家的身份,避免了以后可能发生的支付经济纠纷。此外在现有的网上购物系统中,例如淘宝商家端假货横飞,但是截至目前为止并没有什么实质性的防治措施。若利用该系统就能够很好地抵制这种现象,如给予授权的正规商家签名,其他非正规商家并没有授予的签名机制,当用户在扫描二维码的时候,自会发觉解析的签名是否符合,因而可以确认该卖家是否正规。
表3 系统测试模块
(2)用户端二维码被篡改。在现有的支付系统中,当向对方用户转账时,会发现被转账方的个人信息包括姓名手机号出于隐私都会被遮挡一部分。这就会给不法分子可乘之机,通过篡改二维码信息来进行身份的伪造,造成用户的损失。因而在本文中,提出了一种动态口令机制。当用户进行转账时,会发送动态口令进行认证,这样即使消息被篡改,不法分子也收不到相应的认证口令,因而计谋也无法得逞。所以在一定程度上保证了支付的安全。
总之,本研究方案在传统的移动安全支付手段的基础上,针对于现在比较流行的QR支付,引入数字签名,动态口令等技术,建立了更加完备的身份认证系统,多角度(商家端、用户端、支付网关)、多场景(基于商家和普通用户)实现了一套比较安全的QR安全支付体系。当然本方案还有其他的优势所在。
(1)交易双方身份的真实性。实现商家服务器与用户端的认证、用户端与第三方支付的认证。用户端收到商家嵌有签名的QR码,能够进一步验证商家身份的真实性,第三方支付也能够验证商家端身份是否可信。能够确保整个支付流程在一定的可信域内实施,有效地防范了二维码被篡改的威胁。
(2)支付终端的安全性。超过一定限额时用户在支付交易时需要使用动态登录口令,以此来对交易者的身份进行确认,确保账户资金的安全。
(3)隐私保护。采用了Base64编码使一般的解码程序无法获得交易数据。
本研究方案基于真实的QR安全支付流程,提出了一种基于多场景认证的低成本移动支付方案,从用户端、商家端和支付网关三个端口对QR支付的商家和个人转账模式场景进行了安全设计,运用签名算法和动态口令验证码提高了QR支付的安全性。
整个支付方案结构清晰,内容完整,QR码提供了便捷性,而加密算法等提高了支付的过程中的安全性。但是,本方案也存在着不足之处。例如,没有考虑移动终端上的恶意应用或系统漏洞带来的风险,仅仅保证了支付过程本身的安全性。所以我们下一步的工作是继续评估、完善整个方案的安全性,进行更彻底的安全性测试,以期能得到社会的认可并更好地服务于大众。