猜想原理
以支付宝为例,只要之前有一次用这个支付宝钱包账号买过东西,自动售货机就可以记住,并进行识别(猜测是用了一个标志码来唯一识别)。
设计猜想一
- 用户在支付宝上绑定自己的银行帐号及个人信息;
- 用户帐户信息在绑定时已上传到支付宝后端服务器;
- 客户端离线本身没关系,客户端只是生成用户的帐户信息,转化成一个可扫描的二维码/条形码;
- 商户端获取用户帐户信息向支付宝后端服务器发起请求,支付宝通过请求的解析和认证,认证后通过付款申请,后台服务器响应:付款成功;
- 用户付款成功。
设计猜想二
用户用支付宝会员名、手机号、邮箱对应的支付宝数字账号申请支付宝离线支付服务
- 用户使用手机将上述信息发给支付宝的专用服务器(Token Requestor);
- 支付宝的专用服务器将支付宝账户信息发送给令牌服务提供商(Token Service Provider、Token SP),就是支付宝自己的令牌服务系统;
- Token SP将账户信息和针对这个账户预生成的虚拟卡号(Payment Token、token)发给支付宝账户中心验证;
- 支付宝账户中心通过验证,向Token SP授权,并在数据库中建立支付宝数字账号和token的唯一对应关系,并将这个支付宝数字账号和token做出账务关联;
- Token SP获得授权,将token回送给支付宝的专用服务器;
- 支付宝的专用服务器先将设备(AppleWatch和iPhone)唯一标识和Token进行绑定,然后将token回送至iPhone和Apple Watch的Secure Element进行硬件加密保护。
通俗来讲,这个过程就是:
- 用户在手机支付宝把支付宝会员名abc_123、手机号18610101010、邮箱abc_123@gmail.com对应的支付宝数字账号12345678发给支付宝的专用服务器。
- 支付宝的专用服务器把这四个信息发送给支付宝的Token SP。
- Token SP启动一种算法,针对生成了一个虚拟卡号87654321,并把(abc_123、18610101010、abc_123@gmail.com、12345678,87654321)发送给支付宝账户中心。
- 支付宝账户中心一看,会员名、手机号、邮箱、数字账号正确,便在自己的系统里偷偷地将账户12345678和87654321虚拟卡关联了起来,并告诉Token SP:“来信收到,内容无误,你的请求已经得到了批准。
- Token SP收到回信后,将87654321回送给支付宝专用服务器。
- 支付宝专用服务器将87654321存储在iPhone和Apple Watch的Secure Element里面。
用户使用支付宝离线支付在商户进行交易
- AppleWatch将Token和交易有效起始时间、有效终止时间通过加密算法生成二维码发送给POS;
- POS将二维码和其他交易信息发送给支付宝交易中心;
- 支付宝交易中心将二维码和其他交易信息发送给支付宝交易转接服务器;
- 支付宝交易转接服务器通过算法解密并将Token和交易有效起始时间、有效终止时间发给Token SP;
- Token SP通过Token对应出12345678,将12345679回送至支付宝交易转接服务器;
- 支付宝交易转接服务器将Token、12345678和其他交易信息发给支付宝账户;
- 支付宝账户进行交易授权,并将12345678和授权信息回送至支付宝交易转接服务器;
- 支付宝交易转接服务器将Token和授权信息回送至支付宝交易中心;
- 支付宝交易中心将Token和授权信息回送至POS;
- POS提示交易成功,打单。
从上述过程来看,商户、支付宝交易中心和交易转接服务器之间采用Token来标识卡片,采用有效时间来控制有效时常,而12345678在且仅在交易转接服务器、Token SP和支付宝交易中心之间进行传送。
风险控制
如果手机丢失时:
- 用户会登陆支付宝网站,登陆并停用用户手机上的支付宝离线支付服务;
- 支付宝的专属服务器会立即向Token SP发出请求,按照自己存储的该设备对应的Token列表逐一申请吊销这些Token;
- 捡到手机的人尝试支付(假设TA神通广大,伪造出了用户的指纹并通过了Touch ID的验证);
- 在交易进行到“Token SP通过Token对应出12345678”这一步时,因为Token已被吊销,所以交易无法继续;
- 用户找回或者购买了新设备,重复申请支付宝离线支付的流程,获取全新的Token。
如果在用的Token出现交易风险时:
- 支付宝交易中心会对该Token取消授权,并通告Token SP;
- Token SP会向支付宝专属服务器回送Token失效的信息;
- 支付宝专属服务器向iPhone和AppleWatch发出指令,将这张卡片标记为不可用。
- 用户重复申请支付宝离线支付的流程。
横向比较传统支付和支付宝离线支付,实际上后者比前者多了两个参与方,就是令牌申请方Token Requestor和令牌服务提供商Token SP,这两方的存在保障了用户账户的安全,降低了数字账户泄露的概率。
设计猜想三
一开始就生成了很多张二维码保存在本地,没网也会有二维码(通过实际尝试刷新了很多张二维码,发现基本没有一张是相同的,所以这个猜想基本是排除的)。