一、背景:

随着手机付款的流行,人们出门已经很少带现金了,或者只带一点儿以备不时之需。手机付款基本有两种形式,要么扫对方的二维码自己输入金额。要么展示付款码,让对方用扫码枪扫。作为软件工程师的我,虽然不从事支付软件开发。但是每次在超市购物付款时对展示付款码扫码的方式很好奇。不就是一连串阿拉伯数字,基本一分钟自动变一次嘛。就这样被扫码枪扫一扫,立即就收到扣款消息。我相信商家能推出这种方式肯定认为是安全的,但是这种安全性在数学上或密码学上是如何体现的,还是很好奇。最近一个月看了些密码学的知识,并观察自己手机上付款码的变化规律,做了如下分析。

二、调查

笔者对自己手机上三种支付方式的条形付款码数字分别连续采集四个,发现如下规律:

1. 微信和支付宝的条码十六进制有效数字有15个,云闪付的条码十六进制有效数字有16个

2. 如果把三个平台的条码十六进制有效数字都按16个计算,那么微信的前两个数字固定是01, 支付宝03, 云闪付56

三、条码中包含的信息:

扫码枪把条码数字传递给服务器就能扣款,说明条码种至少包含4个信息

1. 支付平台:即手机持有者到底打开的是微信,支付宝,云闪付,还是别的。。。

2. 用户ID:即手机持有者到底是谁?

3. 支付方式:到底从浦发,招行,还是平台上的余额,花呗...

4. 支付密码

这四个信息中,支付平台是固定且公开的,如调查结果。用户ID是固定的(从在支付App上注册时就分配好,与手机号绑定)支付方式是有限且少量的(例如,用"0"代表浦发,"1"代表招行)只有支付密码每隔1分钟变化一次。所以,我们看到每次打开付款码时数字都不一样,就是里面有新的支付密码,而这才是支付安全的关键。

四、各信息的长度:

1. 支付平台:2个十六进制字符,最多可以表达0xFF+1=256个支付平台,目前在中国最最流行的也就支付宝和微信两家,加上其他国有大型银行,即未来的新支付平台,也完全够用了。

2. 用户ID:8个十六进制字符0xFFFFFFFF = ‭4294967295‬,即42.9亿。 9个十六进制字符0xF,FFFF,FFFF=‭68719476735‬,即687.1亿。目前全球总人口不到80亿,从统计学上【全球一半的人口都选择某一个支付平台】这件事情几乎不可能,所以8个十六进制字符足够了。

3. 支付方式:1个十六进制字符0xF=15, 即用户在一个平台上最多可以选择16中支付方式,这是足够的。

4. 支付密码:按照手机短信验证码6个10进制字符,最大999,999=0x‭F423F‬计算,5个十六进制字符刚好。

总共需要2+8+1+5=16个,刚好和调查的结果一样。

所以,条码如果是明文格式,应该是下面的顺序人人都能读懂:

支付平台 用户ID 支付方式 支付密码 十六进制条码
12 3456789A B CDEF0 1234,5678,9ABC,DEF0

五、支付原理(流程)

六、离线支付

根据支付流程图,只要手机的系统时间和服务器系统时间同步,各自生成的支付密码Key是一样的。另外,只要校验Key正确,服务器开始向银行申请扣款可以不需再和手机终端确认了,这说明这种方式理论上支持离线支付。

七、支付密码

这里的支付密码和短信验证码看起来都是一直变化的,但本质完全不一样。短信验证码可以是真随机数,它是由银行或支付系统服务器生成发送给手机的。而这里的支付密码其实是一个关于时间的函数:

Key=F(Seed,t)

Seed是注册时由支付系统分配给客户的一个种子(每个客户都不一样),它会传送给手机端存储起来,同时在服务器上备份。这个值很关键,决不能泄露。t是以分钟为单位以某一固定时刻为起始的增量时间(例如,从2010年1月1日0时0分起)。F是一个算法,同一支付系统的所有客户都一样。这个Key很像以前中国银行用的动态口令牌。不同的是中银动态口令牌是在银行前台办理,由工作人员将Key在离网方式下注入口令牌里,然后亲手交给用户,整个操作都是在封闭环境下进行的,可以保证Key不泄露。但是,手机支付系统的Key是由服务器通过网络传输给手机里的,没见过谁安装支付宝或微信要到营业厅去办理吧。所以,这个Key是在公开网络环境下传输的,理论上存在会被窃取的可能。这决定了这种支付方式的安全性肯定低于独立的动态口令牌或U盾。所以,在满足方便快捷的前提下只能小额支付。

八、小结:

1. 付款支付类似于中银e令【中银e令(动态口令牌)是一种内置电源、密码生成芯片和显示屏,根据专门的算法,每隔一定时间自动更新动态口令的专用硬件。基于该动态密码技术的系统又称一次一密(OTP)系统,即用户的身份验证密码是变化的,密码在使用过一次后就失效,下次使用时的密码是完全不同的新密码。作为一种重要的双因素认证工具,动态口令牌被广泛地运用于安全认证领域。动态口令牌可以提升网上银行的登录和交易安全。】支付方式,将手机当成e令硬件。

2.手机里的Seed和中银e令的Seed分配方式完全不一样,这决定了它的安全性比中银e令要低,只能小额支付。

3.付款码里除了类似中银e令的动态密码,还有客户ID,付款银行信息。这些信息足以让支付系统在后台和银行交易,从而实现小额安全条件下的快捷支付。

4.由于Seed可以离线同步生成,所以可以实现离线支付。

手机支付平台付款码分析相关推荐

  1. 微信第三方服务平台源码分析——每个Action与模块的对应关系

    Lib\Action    |__Home--------前台页面中的首页,功能介绍,关于我们,帮助中心    |__System------后台管理       |__AdminAction     ...

  2. 小明分享|8ms平台下工程源码分析

    今天小明为大家分享的是开发工具平台-8ms(www.8ms.xyz)工程源码分析 1.打开"8ms平台",创建工程制作完UI后,选中"编译"一栏,等待结束后,选 ...

  3. 【.NET Core项目实战-统一认证平台】第八章 授权篇-IdentityServer4源码分析

    上篇文章我介绍了如何在网关上实现客户端自定义限流功能,基本完成了关于网关的一些自定义扩展需求,后面几篇将介绍基于IdentityServer4(后面简称Ids4)的认证相关知识,在具体介绍ids4实现 ...

  4. DVWA平台漏洞测试与源码分析(一)SQL注入

    DVWA平台是初学网络安全者了解十大漏洞的有效途径,此平台收集了当前威胁网络安全的最常见的十大漏洞,并且为各位初学者提供了靶场实验环境,我们可以利用此平台进行各种攻击实验,从而丰富自己对于Web安全的 ...

  5. 【SemiDrive源码分析】【X9芯片启动流程】08 - X9平台 lk 目录源码分析 之 目录介绍

    [SemiDrive源码分析][X9芯片启动流程]08 - X9平台 lk 目录源码分析 之 目录介绍 一./rtos/lk/ 目录结构分析 1.1 /rtos/lk_boot/ 目录结构分析 1.2 ...

  6. 如何正确使用语音聊天平台源码的用户分析功能

    任何一个平台的运营,都首先要了解自己平台的用户,用户从哪里来.从哪个渠道了解到我们.留存率是多少.充值打赏率是多少.可能有什么阻碍了用户付费--这些都是平台运营的关键,我们无法直接知晓用户心里在想些什 ...

  7. 【SemiDrive源码分析】【X9芯片启动流程】09 - X9平台系统启动流程分析

    [SemiDrive源码分析][X9芯片启动流程]09 - X9平台系统启动流程分析 一.X9 芯片介绍 二.OSPI1_ONLY boot (0000)启动方式(Nor + eMMC) 2.1 Se ...

  8. 5章 性能平台GodEye源码分析-第三方模块

    5. 第三方模块 5.1 Crash(XCrash) Crash监控崩溃后的堆栈上传,作者采用接入爱奇艺的XCrash框架 源码分析 1.启动Crash的监控 Crash的监控通过反射启动XCrash ...

  9. 详细讲解:RocketMQ的限时订单实战与RocketMQ的源码分析!

    目录 一.限时订单实战 1.1.什么是限时订单 1.2.如何实现限时订单 1.2.1.限时订单的流程 1.2.2.限时订单实现的关键 1.2.3.轮询数据库? 1.2.4.Java 本身的提供的解决方 ...

最新文章

  1. centos 6 KVM 网卡桥接配置
  2. 【深度学习】3D深度学习简介
  3. Java Web之BaseServlet的抽取
  4. 如何将Wii遥控器用作陀螺仪鼠标
  5. mysql跨服务器查询插入_Oracle跨服务器查询插入数据
  6. 亚马逊分类目录_新版亚马逊分类目录v2.4程序源码官方分享下载
  7. 打开网页出现运行脚本错误的解决技巧
  8. Android 通过开源框架AsyncHttpClient进行get和post请求
  9. 完蛋,公司被一条 update 语句干趴了!
  10. 服务器进pe后找不到硬盘,进入PE后找不到硬盘的原因及解决方法
  11. Java 使用poi-tl下载Word
  12. 从实际问题看 SwiftUI 和 Widget 编程
  13. 2013网易校园招聘笔试题
  14. Vue Cannot read property ‘xxx‘ of undefined
  15. STL源码剖析(四):容器(6)Rb_tree
  16. 电子价签带来的竞争优势
  17. SRPG游戏开发(十)第五章 颜色映射与职业动画 - 二 颜色组(Color Chart)
  18. GMT6.0绘制地形起伏
  19. CSS之3D转换(translate3d,透视perspective,旋转rotated3,transform-style)
  20. 共享软件大敌 简析十大破解工具

热门文章

  1. 读文章笔记(八):多模态情感分析数据集整理
  2. [Nikon D80]月季
  3. P1719 最大加权矩形(最大连续子段和+矩形二维降一维+前缀和)
  4. C# 里面的 #region 是什么意思?
  5. OLAP和数据立方体
  6. 【网络时间同步】基于马尔科夫随机场最大后验估计和Gardner环的无线传感器网络时间同步算法matlab仿真
  7. 南京2级计算机成绩查询,南京审计大学教务管理系统登录入口、成绩查询网上选课查分...
  8. html标签的多级列表,Word小技巧1:利用多级列表功能实现章节标题自动编号
  9. 各种品牌主板、笔记本、台式一体机的U盘启动热键一览表
  10. 【论文阅读】【3d目标检测】Behind the Curtain: Learning Occluded Shapes for 3D Object Detection