APP下载

基于NFC的点对点支付模拟实现

2022-12-23陈镜宇刘雨婷

物联网技术 2022年12期
关键词:收款密码界面

陈镜宇,孙 丽,杨 静,刘雨婷

(东南大学成贤学院 电子与计算机工程学院,江苏 南京 210000)

0 引 言

当今社会,移动互联网技术的迅速发展推动无线通信技术不断前进,当前,由于智能手机的普及,现金支付的方式逐渐转为移动支付,当下,移动支付已经成为当前最为流行的支付方式。移动支付的实现方式可分为两种:一种是通过短信、WAP等远程控制完成支付;另一种是通过近距离非接触技术完成支付,主要的近距离通信技术有RFID、NFC、蓝牙等[1]。其中,NFC近场移动支付成为一种便捷且相对安全的移动支付方式。目前,NFC技术应用较为广泛,市面上使用NFC技术做移动支付的场景,大多是手机模拟成常用的支付卡,例如常见的公交卡等,然后手机模拟成公交卡与POS机进行交易[2-3]。然而,利用POS机作为交易的一方终究有其局限性,首当其冲的便是其便携性,因此,利用NFC技术实现两部手机之间,即以点对点,手机之间背对背的方式相靠进行交易,能极大便利人们的生活。

1 NFC技术

NFC是Near Field Communication的缩写,即近距离无线通信技术。与RFID类似,NFC信息也是通过频谱中无线频率部分的电磁感应耦合方式传递。但由于NFC采取了独特的信号衰减技术,相对于RFID而言NFC具有距离近、带宽高、能耗低等特点[4]。

NFC技术的支付优点在于:首先,与其他通信技术相比,NFC的传输距离最近,距离近意味着更高的安全性,更有利于传输财务信息或敏感的个人信息等重要数据;其次,相比于红外,NFC更为快捷、可靠和简单[4-5]。

NFC移动通信终端共有3种工作状态:卡模拟状态、识读器状态、点对点通信状态。其中,点对点通信状态即2个NFC移动通信终端靠近可互相通信,实现数据传输[4-5]。

NDEF(NFC Data Exchange Format)定义了消息的封装格式,对于需要传输或存储的原始数据进行了封装处理,该格式主要应用于标签领域或者2个NFC设备之间[4-5]。

2 开发实现

2.1 系统开发环境

使用Android Studio作为开发环境,一是因为其基于Gradle构件项目,可以导入来自Github或其他网站的包,大大节省开发成本,降低开发难度;其次,Android Studio有Google的支持,可以快速引用Google的JDK,从而快速构件UI。

MySQL是一种持久性的关系型数据库,事务一旦提交,那么所有更改就会保存到数据库中进行。此举的好处在于,当系统崩溃时,数据依旧不会丢失。此外,通过JDBC连接数据库的Java更适配MySQL。

2.2 系统运行环境

本系统运行于两部均内置有源NFC芯片的手机,而且由于本系统中NFC的工作状态为点对点通信状态,所以要求手机支持Android Beam功能[6]。而这两部手机都具有该功能,因此满足系统需要。

2.3 总体设计方案

本文设计了基于Android平台开发使用NFC作为通信技术的模拟支付软件。软件的设计重点在于2台支持NFC传输的手机之间的数据传输,以及对整个交易过程中的一些安全方案的研究。系统中主要利用XML语言设计软件的前端UI,使用Java进行后端的逻辑处理,使用MySQL数据库存储用户的个人信息以及账户金额等。

由前文可知,NFC共有3种工作模式,对于识读器状态,此时与手机进行交互的目标更多是NFC论坛上定义的1、2、3、4标签[3],这4种标签并不符合实际的交易情景,所以不予考虑;其次是卡模拟状态,对于卡模拟状态,由于Android的卡模拟基于ISO7816-4协议,而市面上大多数流通的卡,例如校园卡、公司员工卡等,一般都是MIFARE Classic系列的卡[6],这些卡基本遵守ISO14443A标准,且卡均有加密,有自己的安全元件,即手机不能完全模拟这些卡的所有扇区。此外,如果使用卡模拟状态,还需要考虑硬件方面与软件的兼容问题。综上所述,使用点对点状态作为本系统的通信状态较为合适。

系统本身采用MVP(Model, View, Presenter)设计模式。用户通过View层进行交互,将数据传输给Presenter层进行处理。数据被Presenter层交给Model层进行格式处理,然后再返回到Presenter层,Presenter层再将数据传给数据库进行同步,同时调用View层的回调接口以更新View层,从而响应用户。设计模式示意图如图1所示。

图1 系统的设计模式示意图

2.4 用户注册、登录和找回密码功能设计

2.4.1 用户注册

用户输入账号、手机号码进行注册。注册界面调用了MobTech的短信验证服务,只有通过输入正确的手机账号后才能获取验证码。只有注册手机和验证码相匹配,才能完成注册。通过手机号码与短信验证码绑定来防止恶意注册。完成注册后,Presenter层会对密码进行MD5非对称加密后存储到数据库中,加密是为了保证数据库泄露后密码难以被破解,登录界面如图2所示。

图2 注册界面示意图

2.4.2 找回密码

由于注册时通过手机号码验证,那么在找回密码时,也应该用手机号码找回。通过验证之后,连续2次输入密码防止用户误输入。找回密码示意图如图3所示。

图3 找回密码界面示意图

2.4.3 登录

输入正确的账号/手机号码和密码后,即能成功登录主界面。

2.5 支付与收款功能设计

2.5.1 支付功能设计

在待支付界面之前设置一个界面,这样用户可以在该界面输入金额和支付密码。在提交之前,首先系统会从数据库获得当前用户的余额,如果待支付的金额大于余额,那么就无法发起交易。否则就会判断用户的支付密码是否与设定的一致,如果不一致,那么仍旧不能发起交易。只有满足以上2个条件,用户才能发起交易并进入等待交易界面。在等待交易界面中,只有当收款方也进入等待交易界面时,两者手机背对背相靠后,才能触发交易流程。等待支付的界面如图4所示。等待支付界面显示付款方的一些个人信息以便支付方自己进行信息核对。

图4 等待支付界面示意图

2.5.2 收款功能设计

收款方点击“收款”按钮,进入收款界面后便进入等待收款状态。当双方通过手机背靠背贴近进行交易时。支付方发起支付请求,成功发起后,数据通过NFC传输。收款方接收完数据后,其系统先进行支付业务逻辑的处理,随后更新UI以通知收款方交易完成。UI更新后的示意图如图5所示。支付方信息显示在屏幕上以便收款方和支付方进行信息与身份核对。

图5 交易完成后收款方的界面示意图

2.6 NFC传输逻辑实现

2.6.1 支付方发送数据的逻辑实现

为了能让系统在手机上启用NFC功能,首先,需要在项目的配置文件AndroidManifest.xml中申明NFC权限。其次,创建并实现方法initNFC以完成对NFC的初始化。Google官方提供了获得默认NFC适配器的方法,为NfcAdapter.getDefaultAdapter。成功获得后,创建PendingIntent和过滤类型为ACTION_NDEF_DISCOVERED的意图过滤器,为系统启动前台调度系统做准备。前者的作用在于Android系统扫描到标签后,会对PendingIntent的内容进行填充,从而产生可以发起传输的界面。后者的作用就是过滤发出和接收包含NDEF负载的标签且类型申明为ACTION_NDEF_DISCOVERED的Intent[6]。通过使用前台调度系统,系统可以通过过滤器拦截Intent以优于其他软件来处理NFC数据,避免与其他系统和软件冲突。

NDEF的数据封装在NdefMessage内,而NdefMessage包含一条或多条NdefRecord记录[6]。官方提供的方法是createNdefMessage,该方法需要开发者重写以创建一条NdefMessage。

为了能成功创建NdefMessage,还需要创建NdefRecord记录,因此创建方法createRecord。根据NFC论坛对NdefRecord的结构定义,第一条NdefRecord的第一个字节为消息头。消息头内需要包括3位TNF(Type Name Format)、可变长度类型、可变长度ID。本系统指定的TNF类 型 为 TNF_WELL_KNOWN,RTD(Record Type Definition)的类型为RTD_TEXT[6-7]。数据的主体部分先经Model层进行JSON格式化处理变为String类型,然后再转换成Byte字节数组,并将数组的头字节置空以存放数据头。NdefRecord创建成功后,用其创建NdefMessage。最后,调用方法nfcAdapter.setNdefPushMessageCallback发送数据。

2.6.2 收款方接收数据的逻辑实现

与支付方的逻辑类似,首先收款方也需要对NFC进行初始化、创建PendingIntent和设置意图过滤器。与支付方不同的是,收款方需要在Activity的onNewIntent方法中实现对Intent的过滤逻辑处理。当NFC适配器过滤到支付方的Intent的Action为ACTION_NDEF_DISCOVERED时,就要对接收的数据进行处理。

官方提供了一个名为getParcelableArrayExtra的方法来获得序列化后的数据。该方法将其转换成NdefMessage,即字节数组。通过切片获取其第一个字节数组后的数据并反向JSON转换成JavaBean类。这样收款方就获取了支付方传输的数据类。

2.7 交易逻辑

付款方将个人与交易信息传输给收款方后,收款方与数据库进行交互以完成交易业务。

3 归纳与改进

3.1 归纳

软件的优点更多是NFC的优点,但是软件的缺点也十分明显。首先,软件在交易逻辑的实现上并不完整,在双方传输完数据后,数据的更改和与数据库的交互是在收款方的手机上,这样会导致更大的安全隐患[3];尽管一个NdefMessage能包含多个NdefRecord,但通过NFC传输数据时,每次只能传输一个NdefMessage,即对比通过TCP传输的“多次握手”,NFC单次传输后接收方不能返回数据,从而缺少接收数据后的回复确认功能。

3.2 改进

上文提到,NFC的数据传输不经过网络且若交易最终向后端发起请求方是收款方,那交易时若支付方无法连接网络,收款方就可以直接通过网络实现后端数据更新,这样在支付方无网络的情况下也能进行交易,达到类似“电子钱包”的效果[8-9]。如果模拟该效果,那么支付方需要本地创建数据文件来存放个人信息。类比HTTPS的加密传输,服务端可以向客户端返回含有公钥的证书,客户端添加随机长整数到个人信息文件后用公钥加密,交易时将加密信息一同发出,交易后服务端再通过私钥进行身份解密以判断身份[10]。

此外,除了对交易过程中的数据进行加密,用户可以设置每次交易完成后自动关闭NFC功能来保证不正常且非自愿的恶意交易。

如果牺牲用户的体验,即发起2次NFC传输,第二次让收款方发送信息验证数据。那么支付方在发送数据前先对数据进行备份,然后将其与收款方发回的数据进行比对来判断数据是否被篡改。如果发生篡改则立即通知后端取消交易并通知用户交易环境不安全。

4 结 语

如今的移动交易发展迅猛,使用手机进行支付已经成为当今主流支付手段。本系统以NFC技术为基础,设计了一款模拟交易软件。相比通过扫码支付,用户通过该软件可以通过手机背对背相靠的方式完成小额付款,不仅便捷,更由于双方交易不经过网络,也会更加安全。同时,针对该系统提出了一些改进方案和一定的安全研究,在一定程度上,该软件甚至可以模拟成一个“数字钱包”。

猜你喜欢

收款密码界面
密码里的爱
No.8 3月1日后,个人收款码可继续使用
国企党委前置研究的“四个界面”
密码抗倭立奇功
会赚钱的收款二维码
基于FANUC PICTURE的虚拟轴坐标显示界面开发方法研究
人机交互界面发展趋势研究
收款像打针
企业销售与收款循环的内部控制
手机界面中图形符号的发展趋向