V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
414348489
V2EX  ›  问与答

支付宝的无网支付是如何实现

  •  
  •   414348489 · 2016-08-19 11:41:52 +08:00 · 7284 次点击
    这是一个创建于 3029 天前的主题,其中的信息可能已经有所发展或是发生改变。
    39 条回复    2016-08-29 11:08:38 +08:00
    imn1
        1
    imn1  
       2016-08-19 12:02:08 +08:00
    有这么可怕的功能?
    mkeith
        2
    mkeith  
       2016-08-19 12:03:07 +08:00
    类似网银的动态口令
    vicalloy
        3
    vicalloy  
       2016-08-19 12:03:27 +08:00 via iPhone
    你的公交卡支付还不是不用网络
    zhanglintc
        4
    zhanglintc  
       2016-08-19 12:06:03 +08:00
    你说的是那个二维码没有网也能用吗? 我也比较好奇这个.
    imn1
        5
    imn1  
       2016-08-19 12:25:12 +08:00
    @vicalloy
    哦,原来是这种,我想复杂了
    jarlyyn
        6
    jarlyyn  
       2016-08-19 12:29:22 +08:00 via Android
    商家有网......
    ashchen
        7
    ashchen  
       2016-08-19 13:04:18 +08:00
    扫码只是输入了账号而已
    mahone3297
        8
    mahone3297  
       2016-08-19 13:22:25 +08:00
    我也有点好奇。之前,我也有一次没开网络,然后支付成功了。
    我猜,应该是等你网络开了后,数据再同步。
    商家那边是有网络的,他那边肯定会上传数据了。
    learnshare
        9
    learnshare  
       2016-08-19 13:26:00 +08:00
    离线算法计算就是了,网银的动态口令也不需要网络
    vicalloy
        10
    vicalloy  
       2016-08-19 13:31:09 +08:00   ❤️ 3
    再说两句吧。
    这个和你刷银行卡,公交卡是一个原理。
    只要能确认你是这张卡的所有者,并不需要你上网,商家肯定得要上网。
    手机上的二维码应当是采用非对称,将你的账号进行加密(应当还包含时间之类的信息),服务器进行解密取出你的账号。
    每个人的密钥都不一样,因此无法冒充他人。
    vwok
        11
    vwok  
       2016-08-19 13:45:32 +08:00
    @vicalloy 哈哈 这个回复简单粗暴
    sujin190
        12
    sujin190  
       2016-08-19 13:49:59 +08:00
    或者简单的在有网的时候提前更新一个和账号相关支付密钥也可以啊,然后支付的时候用这个密钥签名或加密都行,总不可能你一直没网吧,有网的时候刷新一下这个密钥就行了
    just4test
        13
    just4test  
       2016-08-19 14:02:55 +08:00   ❤️ 1
    @vicalloy
    @imn1
    和公交卡不一样。

    支付宝和动态口令小硬件 /网易将军令是同样原理。设备内有一个 key ,该 key 根据当前时间生成验证码。刷卡机扫描二维码之后把验证码传给支付宝,支付宝就从对应的账户里刷钱。

    公交卡是双端离线支付。无论卡还是公交刷卡机都是离线的。不过地铁刷卡机是在线的。公交卡本质是基于证书的。发卡公司有根证书,为每个公交卡颁发子证书。证书还会更新,在地铁刷卡的时候就顺便更新了。所以如果长时间不刷卡,卡还会过期。公交卡内存储了账号余额,公交刷卡时余额也会更新。所以如果破解了公交卡,可以伪造余额免费坐公交,但无法伪造余额在超市买东西,因为超市的刷卡机是在线的。另外,干这种事儿马上会被发现,卡的证书会被吊销,还会有条子叔叔根据你坐公交的路线和影像记录抓住你。
    ilikekindle
        14
    ilikekindle  
       2016-08-19 15:28:45 +08:00 via Android
    不能用公交卡类比,原理根本不一样。
    lincanbin
        15
    lincanbin  
       2016-08-19 16:16:23 +08:00
    服务器给了一个离线密钥,本地储存这个密钥,并加入时间戳,通过一个哈希算法得到一个一次性、会过期的 token ,这个可以是离线的。
    csdreamdong
        16
    csdreamdong  
       2016-08-19 16:26:39 +08:00
    没用过,但我觉得 商家有网,我没网,我扫了二维码,商家怎么知道它的二维码被扫了呢?
    virusdefender
        17
    virusdefender  
       2016-08-19 16:29:56 +08:00
    和两步验证一个道理
    csdreamdong
        18
    csdreamdong  
       2016-08-19 16:30:11 +08:00
    如果是商家扫我的码,那可以理解。
    arens
        19
    arens  
       2016-08-19 16:33:53 +08:00
    @csdreamdong 实际上都是商家和服务端之间的交互,你扫描二维码只是做了“我确认支付”行为
    csdreamdong
        20
    csdreamdong  
       2016-08-19 16:44:49 +08:00
    @arens 我没网。。我通过什么方式告诉商家,‘我确认支付’了。
    des
        21
    des  
       2016-08-19 16:44:52 +08:00 via Android
    @arens ??如果没有网络,仅仅通过扫码,怎么能知道是谁扫的码??
    des
        22
    des  
       2016-08-19 16:51:26 +08:00 via Android
    搜了一下是用声波传输数据的。

    不过嘛,可能有黑产会盯上。
    Tony2ee
        23
    Tony2ee  
       2016-08-19 17:09:39 +08:00
    动态口令牌而已
    你手机上显示的码只是为了告诉商家 /支付宝“我是谁”,
    至于收款商户信息、常用地点检验、金额检验等等操作都是通过商家联网与支付宝对接以后在云端完成的。
    离线扫码支付实际上是个很不错的功能的,有效解决了许多商场的超市在地下信号差导致交易失败的问题,有时候地下的超市的无线 POS 机由于信号原因无法付款的时候支付宝是个很好的解决方案
    xdeng
        24
    xdeng  
       2016-08-19 17:57:26 +08:00
    @just4test 怎么保证服务器时间和手机时间一致或误差?公交卡里的余额好像支持 nfc 的手机可以读出来
    SPACELAN
        25
    SPACELAN  
       2016-08-19 18:06:34 +08:00
    公司里用的 rsa token 不也是一样离线验证么
    SourceMan
        26
    SourceMan  
       2016-08-19 18:08:27 +08:00
    动态口令咯
    ohhe
        27
    ohhe  
       2016-08-19 18:10:41 +08:00
    你的哪个卡可以上网?不都是可以支付
    ohhe
        28
    ohhe  
       2016-08-19 18:18:17 +08:00
    所以两方只要一方可以上网就可以了
    qzy168
        29
    qzy168  
       2016-08-19 18:30:12 +08:00
    商家刷的时候,又不需要你输入密码确定。
    chromee
        30
    chromee  
       2016-08-19 19:00:54 +08:00 via Android
    @ohhe 商家不上网怎么收到钱
    cmxz
        31
    cmxz  
       2016-08-19 19:03:23 +08:00 via Android
    @csdreamdong 你的二维码亮出来让商家扫就是你确认支付的行为
    JJaicmkmy
        32
    JJaicmkmy  
       2016-08-19 19:07:19 +08:00
    @csdreamdong 如果是商家出示二维码,你来扫这种是必须联网的。但是如果是你出示二维码,商家来扫这种是可以离线的。
    zhicheng
        33
    zhicheng  
       2016-08-19 19:59:53 +08:00 via Android
    那个二维码和信用卡的磁条信息差不多,再加上时间戳,随机数和签名防伪造。公交卡要复杂一些。
    justina25
        34
    justina25  
       2016-08-20 00:10:17 +08:00
    内部人士。。很高兴有人讨论这个问题。。基本说的都对的。
    提个小问题大家思考下, RSA 这种 Token 都是基于时间的,换句话动态令牌都是隔一分钟刷新一次 key 值的。支付宝的付款二维码在离线情况下除了每分钟刷新之外,还可以手动刷新二维码,这是怎么做到的?
    (可以掏出手机看下,点那个每分钟自动刷新的地方也可以是手动刷新)
    iyangyuan
        35
    iyangyuan  
       2016-08-20 06:09:02 +08:00 via iPhone
    商家有网
    cheese
        36
    cheese  
       2016-08-20 09:00:39 +08:00
    @justina25 时间戳精确到秒,然后对应的一分钟内所有的 60 个时间戳都能被识别?
    justina25
        37
    justina25  
       2016-08-22 10:51:05 +08:00
    @cheese 这样暂不说系统成本很大。。准确度也很有问题, 1 分钟一变的话算上时间窗口可以允许 3 分钟之内的时间误差。精确到秒的话你只要时间差 3 秒就验证不通过了。。
    CYKun
        38
    CYKun  
       2016-08-22 12:26:15 +08:00
    @justina25 用序列号?客户端每次生成 token 时把序号加 1 ,服务器收到 token 后比较其中的序号和用户最后一次交易的序号,前者比后者大说明是有效 token 。
    arens
        39
    arens  
       2016-08-29 11:08:38 +08:00
    @des
    @csdreamdong
    是商家来扫码,你手机上的码只是你的基本信息,而你愿意让商家来扫也被系统认为“你愿意支付”

    声波支付前几年的一个创业项目里就用过,的确不安全~
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5902 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 44ms · UTC 02:28 · PVG 10:28 · LAX 18:28 · JFK 21:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.