整理下网上的在线支付其中一种实现方式。通过学习、消化,可借鉴到自己项目重要数据的交互使用。

1 在线支付的模式

在线支付分三块:支付终端、支付服务商服务器(支付宝、微信)、银行。

支付终端:如手机、pos机,这些设备通过密码、指纹、面部识别等获取验证,我们得op-tee就是在终端使用;

支付服务商:如支付宝,你通过终端使用支付宝进行交易。这里可以理解为我们公司内部得服务器。

银行:这些最终还需要通过银行进行交易。如何确保支付凭据安全且可信的发送到服务器端并被服务器验证通过就尤为重要。本文将简要介绍在线支付系统中,终端设备中的TEE是如何确保数据安全且可信地被支付系统的服务器端使用。

2 在线支付的框架

在线支付系统的支付凭据是由终端产生,该支付凭据包含了产生支付操作所需要的所有信息,支付凭据的组包和加密都是由TEE内核或者运行于TEE中的TA来完成的,至于采取何种方式则需要支付厂商与终端设备厂商协商解决。

公司内部的通信、加密采取什么加密协议,肯定是公司内部协商。可根据该框架进行修改,学习的这个加密框架是可以用的,或者改进的。

一个简单的在线支付系统的大致框架如下图所示

在整篇文章中我们不考虑银行端的问题。从终端的角度出发。

终端和服务器之间的重要数据交互问题,首先要搭建一个交互框架、数据的组包和加密都在tee中进行与ree操作进行隔离开来。根据是否在终端设备中预置了密钥,在TEE中完成终端设备与支付系统服务器端之间交互数据的组包和加密可大致分为预置密钥的组包方式和未预置密钥的组包方式。

在线支付系统的服务器端与银行之间的数据交互协议是由支付厂商与银行之间制定的,而支付系统的服务器端与终端设备之间的数据交互协议则是由支付服务提供商自行定义。一般情况下支付系统提供商会为终端设备提供从应用层到系统层面的支付应用程序、库文件和可执行文件,这些软件能够搭建一个完整的支付请求交互通道。终端设备普遍支持TEE,支付厂商可将数据的组包操作和加密操作都放到TEE中来完成,这样可将交互数据的组包和加密部分与REE侧的系统相互隔离。

3 可信通道

可信通信通道是指设备终端与支付服务器之间的通信链路是安全可信的,即设备终端发出去的支付相关数据只有支付服务器才能正确地解析。

在确定可信通信通道之前,设备终端与服务器端需要经过三次握手来协商通信时使用的加密密钥。设备终端向服务器第一次发送握手请求时会生成一个随机数A,服务器端会认证该请求的可信性,如果认证通过,服务器会生成一个随机数B,然后将该随机数发送给设备终端。设备终端获取到来自服务器的返回数据之后会进行一系列的可信认证,待认证通过之后会生成一个随机数C,并将该随机数发送给服务器完成整个握手操作。然后客户端和服务器端使用相同的算法结合上述三个随机数生成两者之间进行数据通信的加密密钥。

为防止中间人攻击,在终端设备和服务器建立可信通信通道时,终端设备和服务器需要具有数据的唯一性和可信鉴定机制。这一点可通过在设备生产时提前将认证密钥预置到设备中或在应用程序安装或注册时分发密钥到设备来实现。为确保终端设备与服务器之间的相互隐私,这组密钥一般使用的是非堆成算法密钥,其中私钥保存在终端设备中,而公钥则由服务器来保存。在线支付程序安装或者注册时,支付服务器可给设备下发一对RSA密钥的公钥,该公钥最终会被保存到OP-TEE中。在建立可信通信信道时,终端设备可用该公钥加密握手数据请求。

4 数据交互协议

数据交互协议是指终端设备与支付服务器之间进行数据交互时双方发送的数据需按照一定的格式进行组合。组合的数据需要包含数据的用途、内容、发送方、数字签名,且以密文的形式进行传输。

示例中,数据交互协议的内容包括数据头部区域数据区域、电子签名区域。数据头部区域和数据区域的内容在发送之前需要使用密码学算法进行处理,以便数据在传输过程中都是以密文的形式存在。

5 交互示例

终端与服务器需通过三次握手确认,建立可信通信通道。设备端和服务器分别把自己存的私钥对应的公钥发送给对方,用于加密数据。每次握手操作的握手数据包中都会包含一个随机数,待握手操作完成后,支付服务器和终端设备会使用握手过程中的三个随机数使用PBKDF2算法生成后期设备终端与支付服务器之间进行数据交互时使用的AES加密密钥。

在第一次握手时会使用到RSA的公钥对数据包进行加密。该密钥可通过在线下发的方式,在安装或注册支付应用程序时下发给终端设备。

第二次握手时使用的RSA公钥即可在第一次握手请求时告知服务器端,亦可在终端设备生产时提前将该RSA私钥预置到设备中,同时将RSA公钥告知服务器。关于设备终端的RSA密钥对可在使用时调用OP-TEE的接口产生亦可提前生成好然后预置到设备中。

5.1 第一次握手请求

在支付应用程序安装到终端设备或者用户登录时(经常用pos机刷信用卡的同志可能会注意到,开机的时候他会下载一个密钥,猜测这个密钥就是加密的公钥),服务器会向终端设备下发一把RSA公钥。为方便后续说明,将该RSA公钥称为RSA_PUBLIC_SERVER。终端设备发起第一次握手请求时,在TA中就会使用该公钥加密握手请求数据,按照通信协议规定,第一次握手请求的明文数据内容如图所示。

5.2 第二次握手数据的解析

第一次握手请求时,设备终端会将一把RSA的公钥RSA_PUBLIC_CLIENT打包到握手请求数据包中,服务器接收到数据包后使用对应的RSA私钥解密开数据包,然后解析获取到设备终端的RSA公钥,该公钥会被用于加密第二次握手数据。第二次握手数据是由服务器端组包完成的。该数据的明文内容如图所示

第二次握手数据明文组包完成后会使用RSA_PUBLIC_CLIENT进行加密,最后使用服务器的RSA私钥对密文数据进行RSA电子签名操作,第二组数据包中的数据区域中会包含第二个随机数B。终端设备接收到该数据后会调用CA接口,将数据包发送给TA,然后TA按照协议内容对数据包进行电子签名验证、数据解析、数据验证,最终获取到第二个随机数B,并将该随机数保存到OP-TEE中。

5.3 第三次握手请求

第三次握手请求会将第三个随机数C发送给服务器端,按照协议内容组包的第三次明文数据内容如图所示。

第三次握手请求使用设备终端的RSA私钥进行签名,其中会包含第三个随机数C。明文数据会使用RSA_PUBLIC_SERVER进行加密。

待数据组包完成之后,TA会使用获取和生成的三个随机数A、B、C使用PBKDF2算法生成数据交互使用的AES密钥,并将最终生成的AES密钥保存在OP-TEE中。待此操作完成后,TA会将第三次握手请求数据包返回给CA, CA以网络通信的方式将数据发送给服务器端。待服务器端接收到第三次握手请求后,服务器同样也会使用PBKDF2算法节后三个随机数生成AES密钥并保存起来,用于后续数据交互时明文数据的加密操作。到此终端设备与服务器端之间可信通信信道已经建立。

5.4 支付请求

支付请求命令会生成一个通知支付服务器与银行产生清算操作的支付凭据的数据包。该数据包使用握手时生成的AES密钥进行加密,然后使用设备终端的RSA私钥进行电子签名,以确保数据包的完整性和唯一性。支付请求的数据包内容示意图如图所示。

支付请求时设备终端发送给支付服务器的支付凭据,在组包之前需要被发起支付请求的操作者进行相关的身份验证,例如支付密码、指纹验证、短信验证等方式。待身份验证通过后,CA会向OP-TEE发送该命令,让TA生成合法的支付请求数据包。明文支付请求数据会使用握手时生成的AES密钥进行加密,服务器接收到该数据包后会对数据包进行电子签名验证、解密、解析、支付请求合法性验证等操作。

5.5 支付反馈

支付请求完成之后,服务器端会向设备终端发送支付反馈数据包,该数据包包含直接结果和其他相关的信息,用于将最终的支付结果反馈给用户。该数据包的内容示意图如图所示。

设备终端接收到支付反馈数据包后会通过调用CA将该数据发送给TA, TA接收到数据后会对数据包进行电子签名验证、AES解密、合法性验证,然后解析出支付结果,并将最终的支付结果信息返回给CA。支付应用可从CA的返回数据中获取支付结果并显示给用户。

6 项目借鉴

这套支付系统的设备终端与支付服务商服务器的通信非常值得借鉴。可移植到项目设备与公司内服务器间的可信通信。通过RSA对通信数据防偷窥进行加密(传递信息的安全性),通过RSA对传递信息进行签名和验签(传递信息的完整性)。使用三次握手的随机数,通过PBKDF2算法产生密钥,通过AES-CBC对支付信息(或者项目中需传递的信息)进行加密。

在线支付系统可信通道建立(OP-TEE侧实现)相关推荐

  1. TEEOS的实例-在线支付系统

    到了我最喜欢的环节了,我其实学习的过程中,对这些应用场景概念是十分的感兴趣的. 下面一起看看老师这本书的最后的一个部分应用篇-在线支付系统 内容来自<手机安全和可信应用开发指南> 1.简介 ...

  2. 系统设计:在线支付系统的需求分析报告

    在线支付系统 在线支付系统是一个第三方安全交易系统. 买方可以先向账户充值,然后系统会提醒卖方发货.一旦买方确认收货,系统会将钱转到卖方的账户,这样他们就完成了一次在线交易. 在个文档描述了支付系统的 ...

  3. php在线支付系统,Thinkphp各大支付平台在线支付集成源码

    支付配置ThinkPay\Application\Common\Conf\config.php array( /* 支付设置 */ 'payment' => array( 'tenpay' =& ...

  4. javaweb商城实现在线支付

    1.在线支付概述 什么是在线支付呢?没错,就是在网上花钱!大家一定有过这样的经历.但是你可能不太了解在线支付的"内情",下面我们来了解一下! 如果你现在开始经营一个电子商务网站,用 ...

  5. 机器学习案例(一):在线支付欺诈检测

    在线支付系统的引入对支付的便利性有很大帮助.但是,与此同时,支付欺诈也有所增加.使用任何支付系统的任何人都可能发生在线支付欺诈,尤其是在使用信用卡付款时.这就是为什么检测在线支付欺诈对于信用卡公司来说 ...

  6. 金融第三方网银在线支付通道及支付通道被攻击的解决方案

    银行卡在线支付 银行卡在线支付网关是网银在线推出的基于银行卡在线支付的第三方电子支付系统,通过整合各家银行的支付接口,支持国内银行借记卡和信用卡的在线支付,致力于为国内外从事电子商务的企业或个人提供安 ...

  7. ZLMS教学管理平台系统V1.2.0最新版本发布,支持纯Web视频直播点播,还带运营在线支付功能!完全免费提供!...

    ZLMS教学管理平台系统V1.2.0最新版本发布,支持纯Web视频直播,点播!还带在线支付功能! ZLMS 开发团队在综合参考了各方面的合理建议之后,经过两个多月的紧张开发及测试,终于发布V1.2.0 ...

  8. 在线支付之风控系统架构选型

    http://www.infoq.com/cn/articles/risk-management-analysis-system 风控系统介绍 伴随着互联网的发展,游戏.商贸.慈善.博彩.餐饮等各行各 ...

  9. 【在线教育-PC+手机-源代码】HDEDU在线网校系统–学习+练习+考试+支付+营销一站式!在线网校系统 学习练习考试 支付营销

    系统功能: (1)学习模块:视频点播.图文.课件下载:视频支持上传到服务器,也可以采用视频托管. (2)练习模块:在线刷题.错题回顾.高频错题.笔记收藏.进度保存.试题解析.模拟考试: (3)考试模块 ...

最新文章

  1. java web微服务是什么_java微服务是什么
  2. ARM机器学习新平台Trillium
  3. 【数据结构】——冒泡排序、插入排序、选择排序
  4. LeetCode MySQL 1421. 净现值查询
  5. 车辆销售系统用例_使用OpenCV和Python构建自己的车辆检测模型
  6. Java8 改进的匿名内部类:
  7. *第四周*数据结构实践项目一【创建单链表】
  8. libiconv库裁剪
  9. 二、 jQuery带本地时间的日历代码
  10. 淘宝爆款单品月纯利100万运营实战
  11. mui 框架跨域_MUI框架学习(5)–AJAX跨域问题
  12. 电脑一复制粘贴就卡死_CAD复制粘贴时卡死的解决方法步骤
  13. 2017年一线城市程序员工资大调查
  14. css网站变灰色代码
  15. cubieboard mysql_【Linux】【笔记】Cubieboard开发板Debian系统+SAMBA共享+远程迅雷Xware+Nginx+PH......
  16. Inter 架构和AMD的差别
  17. python出入库_练习1:python设计停车入库出库系统
  18. 机器学习评价指标(1)——灵敏度(sensitivity)/查准率/召回率(Recall)/和特异度(Specificity)
  19. jpg转换pgm(其他图片格式转换类似)
  20. leetcode-1100. 长度为 K 的无重复字符子串

热门文章

  1. print与printf的区别
  2. 多乐影视电影网站开发——HTML+CSS+JavaScript+PHP
  3. 中兴交换机 路由器 端口镜像,原理,配置,实例
  4. 【IPTV】Hybrid Video解决方案概念与价值
  5. 2021年西式面点师(中级)考试及西式面点师(中级)考试试卷
  6. 工业数字银行解决方案-制造业数字化探讨(9)
  7. [leetcode]Binary Tree Postorder TraversalBinary Tree Preorder Traversal
  8. 软件工程导论11-软件测试
  9. 日语学习资料汇总(可下载)
  10. 湖北大学计算机系宿舍,2020年湖北大学新生宿舍环境条件,大一新生男生女生宿舍内部图片【多图】...