<sub id="pvpnh"><meter id="pvpnh"></meter></sub>

        <th id="pvpnh"></th>

        <sub id="pvpnh"></sub>

        1. 无忧支付网首页
          囊括国内所有第三方支付公司信息
          为客户提供最优质的支付接口服务
          24小时服务电话
          站内搜索
          您当前的位置:主页 > 相关文档 >

          基于蓝牙的无线支付系统设计

          添加时间:2018-12-19 14:31
            蓝牙作为一种常见的短距离通讯技术,其通讯距离可达10米以上,几乎所有的智能手机都支持蓝牙。传统刷卡支付需要用户签名或者在POS机机输入卡片密码,步骤繁琐且安全风险大, 在客流量巨大的商场超市,劣势更为明显。随着移动技术的发展,二维码扫码支付逐渐替代了传统刷卡支付,但扫码支付仍然存在诸多问题,例如需要在公开场合暴露手机屏幕,摄像头受到光线和距离的影响较大,在网络不佳时无法完成支付,二维码ID不能无限分配,另外也无法在用户端实现单步操作完成交易。为解决上述问题,本文试图描述一种基于蓝牙的无线支付方案,具有比扫码支付更优秀的安全性和便利性。另外如果对本方案稍?#26377;?#25913;,可以将蓝牙POS机替换为安装有商户管理App的智能手机,以便应用到其他更加细分的支付场景,例如出租?#26723;取?#22914;图1所示。

          蓝牙POS机
            
            1、系统结构
            
            我们将交易双方分为商户和用户,商户使用蓝牙POS机+商品扫码器+支付网关,用户使用带有蓝牙功能的智能手机+支付管理App.
            
            蓝牙POS机为安装有Android操作系统,带有蓝牙/网络/USB接口的触屏版POS机。蓝牙POS机机中内置IC卡,卡中包含商户信息,商户信息具有全球唯一ID.支付管理App可以设计为在蓝牙配对之后自动唤醒,无需用户手动运行;
            
            商品扫码器用于扫描商品的条形码,可以连接到蓝牙POS机的USB接口并与之通讯;
            
            支付网关即为银联的支付服务器,用于处理最终交易报文;
            
            智能手机为普通的支持蓝牙功能的Android或者iPhone手机;
            
            支付管理App为管理用户支付凭证及支付过程的手机App,负责通过蓝牙协议与蓝牙POS机进行数据?#25442;唬?#22914;图2所示。
            
            2、详细步骤
            
            (1)商户使用商品扫码器扫描所有商品,商品信息写入到USB缓冲区,数据格式为(商品总数量N+商品1信息+商品2信息+…+商品N信息)。由于USB协议为被动传输协议,因此本步骤中的商品信息应由蓝牙POS机循环检测USB缓冲区来读取,蓝牙POS机每读取一条商品信息,就把商品总数量N减一,并把商品信息显示在屏幕上,而扫描器每扫描一件商品,就把商品总数量N加一。当所有的商?#33539;?#24050;扫描时,商户按下蓝牙POS机中的确认键,此后蓝牙POS机在显示所有商品信息后将自动开启蓝牙功能进入待连接状态,并发出提示音。
            
            (2)用户启动支付管理App(也可以提前将此App保持在后台运行),将手机不断贴近蓝牙POS机,支付管理App循环枚举周边的蓝牙设备并读取蓝牙设备ID(即商户ID)和计算距离,根据预先设置的条件来过滤可连接蓝牙设备(例如设备ID格式必须为MERCHANT-XXX,距离必须在2m范围内)。如果发现单台符合条件的蓝牙设备,则静默完成配对和连接,如果存在多台符合条件的蓝牙设备,则显示设备列表提示用户选择目标设备。配对过程静默完成,不需要用户输入PIN码。手机连接到蓝牙POS机之后,蓝牙POS机发出提示音。
            
            (3)蓝牙POS机与支付管理App通过DH算法协商出256比特的AES密钥,DH算法可以让双方在完全没有对方任何预先信息的条件下通过明文信?#26469;?#24314;起一个密钥。蓝牙POS机与支付管理App此后所有的数据?#25442;?#37117;要经过AES加密,不得传送任何明文信息,以防止可能发生的旁路嗅探攻击。密钥协商大致过程如下:1)蓝牙POS机与支付管理App协定使用大质数p以及大基数g,p与g均为正整数;2)蓝牙POS机选择一个秘密整数a,计算A=ga mod p并发送给支付管理App;3)支付管理App选择一个秘密整数b,计算B=gb mod p并发送给蓝牙POS机;4)蓝牙POS机计算k=Ba mod p(k即为双方共享的AES密钥);5)支付管理App计算k=Ab mod p(k即为双方共享的AES密钥)。
            
            (4)蓝牙POS机通过已建立的加密通道向支付管理App发送详细商品信息,并进行声音提示以防止交易中止,支付管理App将商品信息和总价显示在手机屏幕供用户确认。
            
            (5)用户核对订单信息,如果发现订单有误,可以点击取消按钮,支付管理App向蓝牙POS机发送交易取消指令,交易过程中止;如果订单无误,则输入支付密码进行支付,支付管理App将银行卡号,由支付密码加盐(当前时间)而产生的CRC校验码发送到蓝牙POS机并等待交易结果,支付过程中用户端无需联网。
            
            (6)蓝牙POS机将支付信息发送至支付网关进行最终结算,接收交易结果,如果交易成功,则向支付管理App发送交易成功指令,支付管理App收到该指令后向用户展示交易成功界面;如果交易失败,则向支付管理App发送交易继续指令,支付管理App收到该指令后回到步骤5继续支付。
            
            (7)蓝牙POS机关闭蓝牙功能,回到步骤1继续处理下一位用户的订单;如图3所示。
            
            3、结语
            
            由于快捷安全以及适应性强的特点,蓝牙支付是一种极有前景的支付模式,实际上在国内某些领域已经在使用与蓝牙支付类似的NFC技术。相对于NFC支付,蓝牙支付不需要升级现有的硬件设备,大部分工作可以通过修改软件来实现。若要部署到实际生产环境,最重要的工作是制定统一的蓝牙通讯?#22270;用?#21327;议,该协议是在蓝牙传输协议基础上的数据?#25442;?#21327;议,蓝牙POS机与支付管理App之间通过该协议来?#25442;?#25968;据。在本方案中,还有以下几点需做说明:
            
            (1)每个蓝牙POS机均有唯一设备ID,此设备ID需要包含其商户信息,以便支付管理App进行过滤。每次交易完成后支付管理App可以?#19988;?#21830;户ID以便下次静默配对,如果是新设备首次配对则需要用户手动确认配对。
            
            (2)为了加密效?#21183;?#35265;,本文对蓝牙传输采用的加密算法为AES对称加密,由于支付过程较短且被人为操控,此加密算法的安全性已经足够。若要进一步提升安全性,则可以采用2048位RSA非对称加密,方法是在详细步骤3的基础上进行以下操作:1)蓝牙POS机使用已协商的密钥k加密自己的RSA公钥M发送给支付管理App;2)支付管理App执行解密获取蓝牙POS机的RSA公钥M;3)支付管理App使用M加密交易报文发送给蓝牙POS机;4)蓝牙POS机使用自己的RSA私钥N解密出交易报文。
            
            此加密方式要求蓝牙POS机预置一个RSA密钥对,私钥N应设置为只能使用但无法读取的状态。
            
            (3)两台蓝牙设备距离之间的距离,可以使用RSSI(Received signal strength indication)进行测算。方法是注册一个传感器服务(SENSOR_SERVICE)通知,当设备位置发生变化?#26412;?#24320;始计算周围的蓝牙设备距离:
            
            计算公式:
            
            d=10^((abs(RSSI)-A)/(10*n))
            
            其中:
            
            d-计算所得距离(米);  
            RSSI-接收信号强度(负值);  
            A-发射端和接收端相隔1米时的信号强度;  
            n-环境衰减因子。
          pk10不管怎么玩都是输
          <sub id="pvpnh"><meter id="pvpnh"></meter></sub>

                <th id="pvpnh"></th>

                <sub id="pvpnh"></sub>

                  <sub id="pvpnh"><meter id="pvpnh"></meter></sub>

                        <th id="pvpnh"></th>

                        <sub id="pvpnh"></sub>