1. Reverse engineering Ticketmaster's rotating barcodes (conduition.io)
逆向工程TicketMaster动态条码
背景与问题
作者购买TicketMaster音乐会门票后,发现必须使用其SafeTix动态条码系统(条码每15秒自动刷新)入场,而非传统可打印PDF票据。该系统在拥挤场馆因网络信号差导致多人无法加载条码,暴露了实时依赖互联网的缺陷。
TicketMaster的营销宣称
TicketMaster宣传SafeTix通过动态条码防止欺诈和非法转让,声称截图或打印件无法扫描。但作者指出:
- 条码的“移动动画”仅是CSS视觉效果,不影响截图后的可读性。
- 强制安装官方应用带来隐私风险,且离线使用能力与数据隔离政策存在逻辑矛盾。
技术逆向分析
条码格式
- 使用PDF417条码编码UTF-8文本,结构为:
静态Base64令牌::TOTP1::TOTP2::Unix时间戳。
- 使用PDF417条码编码UTF-8文本,结构为:
动态机制
- 两个6位数字码类似TOTP(基于时间的一次性密码),每15秒更新。
- 静态Base64数据解码后为48字节随机数据,充当票据标识令牌。
密钥发现
通过Chrome DevTools分析TicketMaster Web应用:- 从
/api/render-ticket/secure-barcode接口响应中提取JSON数据,包含字段:t:静态票据令牌(48字节)。ck(客户密钥)和ek(事件密钥):20字节十六进制数。
- 源码分析显示
generateSignedToken函数使用ck和ek作为密钥,结合15秒时间步长生成TOTP。
- 从
验证确认
使用oathtool命令行工具,以ek和ck为密钥、对应时间戳生成TOTP,结果与条码中的数字匹配,证实了密钥用途。令牌提取
- 原始令牌可直接从浏览器控制台获取(组件挂载时自动打印)。
- 若持有有效的票据令牌、事件密钥和客户密钥,可生成完全相同的动态条码。
令牌有效期与离线使用
- 根据TicketMaster开发者文档,原始令牌有效期可能约20小时,需在活动开始前刷新。
- 作者构建了离线应用
TicketGimp,输入令牌即可生成条码,证明无需官方应用亦可实现票据验证。
结论
TicketMaster的SafeTix系统技术上并未实现绝对的反欺诈,其动态机制基于标准TOTP算法。通过逆向工程可提取必要参数实现离线使用,但该系统仍限制了票据转让并推动用户使用其封闭生态。作者批评该技术设计服务于商业垄断而非用户便利,并呼吁拆分TicketMaster。