微信和支付宝没联网情况下都可以展示二维码付款,大家说说这是什么原理?
1
explon 2017-10-10 16:02:47 +08:00 2
原理类似离线的 RSA
|
2
simplesslife OP @explon 啥意思哦
|
3
hjc4869 2017-10-10 16:06:43 +08:00
基于时间的
|
4
caixiexin 2017-10-10 16:16:34 +08:00 via Android
如果让二维码的失效时间长一点,再加一些其他限制,是不是就类似脱机二维码了?
|
5
paw 2017-10-10 16:17:45 +08:00 1
简单上可以理解为 HMAC ( token,时间戳) 计算出的摘要。
token 是在有网络登录时服务器下发的,可能会每次联网都更新,时间戳是按 2 分钟左右窗口对齐过的值。 服务器拿到离线码后,计算下当前时间前后 2-3 个窗口的摘要,如果有一致的,认为是你本人。 |
6
Humorce 2017-10-10 16:18:17 +08:00 via Android
密保卡原理
|
7
ColinZeb 2017-10-10 16:20:07 +08:00
原理参考 MFA
|
9
simplesslife OP @ColinZeb MFA google 没搜到,是什么意思?
|
10
ss098 2017-10-10 16:31:21 +08:00
在本地存储一个密钥,这个密钥在一定时间内可用,每次需要用的时候就生成一个二维码。
|
11
ColinZeb 2017-10-10 16:54:29 +08:00
|
12
BBCCBB 2017-10-10 17:05:35 +08:00
你离线,商家得在线才能使用!!!
|
13
BBCCBB 2017-10-10 17:06:07 +08:00
|
14
simplesslife OP @BBCCBB 666
|
15
jiangzhuo 2017-10-10 17:37:39 +08:00
扫码的得在线啊。
|
16
byuan04 2017-10-10 18:39:38 +08:00
别的没啥事 我就想支持 apple watch 3 啥时候能支持离线, 一代能支持, 三代到现在还提示不支持
|
18
opengps 2017-10-10 19:16:33 +08:00
二维码离线了,但是扫码枪没离线啊
|
19
CZ 2017-10-10 19:22:12 +08:00
跟你的信用卡一样,你的信用卡也不会上网,刷卡机联网!
|
20
clino 2017-10-10 19:43:32 +08:00 via Android
不就应该是包含一个账户信息吗?
为什么要密钥? |
22
tadtung 2017-10-10 19:52:20 +08:00
这东西其实类似于两部验证,,只是微信和支付宝将数字密码信息用二维码展示。。。
楼上有人说 HMAC,,的确是这样的。 我想你应该用过 google 的两步验证,或者暴雪的游戏验证器。。 想详细了解的话,建议自己去看 google 的开源代码,,或者也有不少开源的其他验证源码。 |
23
realpg 2017-10-10 20:10:08 +08:00
|
24
clino 2017-10-10 20:43:32 +08:00
@sky0009 为什么帐户信息需要保密?
类比很早以前原始的网购就是给一个银行帐号,然后你给这个帐号汇款 当然这只是一个类比,也可以用一个帐号的哈希值,支付宝或者微信可以根据这个值查到对应的帐户就行了吧,这个过程并不需要加密 |
25
keniusahdu 2017-10-10 20:43:59 +08:00
TOTP 算法啊
|
26
jyf 2017-10-10 20:51:11 +08:00
基于公钥密钥加密的话完全可以啊
|
27
tinkerer 2017-10-10 21:17:29 +08:00
@keniusahdu 我也觉得是基于时间的
|
28
wr410 2017-10-10 21:32:48 +08:00 2
简单说吧!
条码支付其实格式上是有潜规则的,基本上是前 2 位用来识别这个条码属于哪个支付公司的。因为有很多聚合支付的商户,具体举例:麦当劳、全家,统一入口扫码,自动路由去请求支付授权。 所以,第一种,商户联机核销的条码。这种条码除了标识头以外,中间大概会分成 token 类似于挑战码,后面几位应该是类似于应答值。 上面有人说的一次性口令的实现其实是不严谨的,因为单纯一次性口令的前提是必须知道对方的身份。否则,给你一串条码你去几亿用户里比对? 那么如何从几个数字的条码里识别用户?这才是条码支付的核心。那么就必须提前把身份信息注册到条码里,也就是说客户端在联机的时候,预先向服务器里申请 token,这样某一个 token 被谁申请了,服务器自然就记录了。当然这还不足,如何鉴权,那就必须在服务器上和客户端里进行相同的操作,无论是 HMAC 还是预共享密钥,这个随便了,得出的结果就是后面几位的应答值。 当然,十来位的条码肯定是不足的,那么 token 段必然是多用户共享的,也就是一个 token 是可能被多个用户一起注册的,但是我们可以从 token 里知道有哪些用户在用,然后通过检索每个用户的应答值就可以完成鉴权动作了。所以这里就存在一个风险,一个 token 最大同时共享给多少人可以控制在可接受的风险范围?这些就是数学问题啦。 第二种,双方离线的二维码。 这个其实就是和公交卡一样的原理,感觉没什么可说的。大家有共同的密钥或者基于 PKI 的鉴权,生成账户支付码(无外乎就是金额、账号之类的,需要时效性就再加一个有效期),设备检查通过就可以了。反正要预先充钱,事后再记账罢了。 以上均为个人想法,欢迎探讨。 |
29
HYSS 2017-10-10 21:41:01 +08:00
你听说过支票么?
|
30
johnnie502 2017-10-10 21:54:32 +08:00
@clino 大家都说的是付款方信息加密,你说的是收款方信息公开,这是两回事。付款方信息当然要加密了,不然丢失之后就会被人恶意支付
|
31
cnkuner 2017-10-10 22:05:04 +08:00 via Android
根据时间戳、手机串号等和特定密钥或者算法算出一串值,然后生成二维码,拿这个值和服务器算出的比对,如果正确,就通过。
类似将军令、QQ 令牌、动态密码这种。大概原理应该就这种,至于具体的方式和细节(比如时间校对之类的)没有深入研究过。 |
32
clino 2017-10-10 22:40:51 +08:00
@johnnie502 明白了,我误解了...
那应该是楼上说的那种预先申请好的一次性的付款 token 之类的,然后由收款方拿着发往服务端,因为收款方肯定要能联网 |
33
157003892 2017-10-10 23:23:08 +08:00 via iPhone
有一个此项技术的重度应用,将军令,安全又快捷
|
34
ETiV 2017-10-10 23:48:51 +08:00 via iPhone
其实最大的问题是要解决海量用户下的碰撞问题
否则某次支付的时候,被刷走了别人的钱,这种公司迟早倒闭 |
35
Tony2ee 2017-10-11 00:44:52 +08:00 via Android
参考银行的网银令牌
|
37
Chieh 2017-10-11 09:01:37 +08:00 via Android
类似信用卡 信用卡也不用联网
|
38
whatTheGhost 2017-10-11 10:46:37 +08:00
@clino 不加密我知道你的支付宝账户,自己生成一个二维码,随便刷。
|
39
clino 2017-10-11 10:57:20 +08:00
@whatTheGhost 我之前说的是不加密自己的收款方信息,这样的二维码你刷了是要往这个帐户里转钱吗?
|
40
Neveroldmilk 2017-10-11 11:00:14 +08:00
这跟银联刷卡一个意思吧。你离线,商家在线就行。
|
41
JerryCha 2017-10-11 11:52:25 +08:00
基于时间戳的 token,但一定得有一方在线的
|
42
whatTheGhost 2017-10-11 12:02:52 +08:00
@clino 你说的是你刷别人的二维码付款,题主说的是用自己的二维码付款。OK ?
|
43
xomix 2017-10-11 12:16:23 +08:00
技术搜索关键字 TOTP,有没有标准化的文档我忘记了,你自己用这个关键字丰富技术内容吧
|
44
xomix 2017-10-11 12:18:04 +08:00
|