
微信和支付宝没联网情况下都可以展示二维码付款,大家说说这是什么原理?
1 explon 2017-10-10 16:02:47 +08:00 原理类似离线的 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 简单上可以理解为 HMAC ( token,时间戳) 计算出的摘要。 token 是在有网络登录时服务器下发的,可能会每次联网都更新,时间戳是按 2 分钟左右窗口对齐过的值。 服务器拿到离线码后,计算下当前时间前后 2-3 个窗口的摘要,如果有一致的,认为是你本人。 |
6 rzti483NAJ66l669 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 PRO |
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 位用来识别这个条码属于哪个支付公司的。因为有很多聚合支付的商户,具体举例:麦当劳、全家,统一入口扫码,自动路由去请求支付授权。 所以,第一种,商户联机核销的条码。这种条码除了标识头以外,中间大概会分成 token 类似于挑战码,后面几位应该是类似于应答值。 上面有人说的一次性口令的实现其实是不严谨的,因为单纯一次性口令的前提是必须知道对方的身份。否则,给你一串条码你去几亿用户里比对? 那么如何从几个数字的条码里识别用户?这才是条码支付的核心。那么就必须提前把身份信息注册到条码里,也就是说客户端在联机的时候,预先向服务器里申请 token,这样某一个 token 被谁申请了,服务器自然就记录了。当然这还不足,如何鉴权,那就必须在服务器上和客户端里进行相同的操作,无论是 HMAC 还是预共享密钥,这个随便了,得出的结果就是后面几位的应答值。 当然,十来位的条码肯定是不足的,那么 token 段必然是多用户共享的,也就是一个 token 是可能被多个用户一起注册的,但是我们可以从 token 里知道有哪些用户在用,然后通过检索每个用户的应答值就可以完成鉴权动作了。所以这里就存在一个风险,一个 token 最大同时共享给多少人可以控制在可接受的风险范围?这些就是数学问题啦。 第二种,双方离线的二维码。 这个其实就是和公交卡一样的原理,感觉没什么可说的。大家有共同的密钥或者基于 PKI 的鉴权,生成账户支付码(无外乎就是金额、账号之类的,需要时效性就再加一个有效期),设备检查通过就可以了。反正要预先充钱,事后再记账罢了。 以上均为个人想法,欢迎探讨。 |
29 HYSS 你听说过支票么? |
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 |