我正在研究使用Apple Pay transactionId来防御同一支付门的重放攻击的可能性。辩护方应依靠参与签名且独特的领域。
但支付令牌格式参考paymentData.header.transactionId
描述
在设备上生成的事务标识符。
这不足以将其视为全球唯一。
下面是ApplePayJS令牌的测试示例:
{
"paymentData": {
"version": "EC_v1",
"data": "...",
"signature": "...",
"header": {
"ephemeralPublicKey": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE6jY12R9PoL7bzaC3/ibs6q6+g/cqjSkiO3GVFld2NVUA6kRlq0iJRT+XzfmGFvRs/G2qwgmWY8fKu7p6Ktgxug==",
"publicKeyHash": "AJiEM3d+czut7s1t4QdtRBPjSOxw0D6iWSp1MUdXueM=",
"transactionId": "f8f0c804922303decba1a8a4f7c503df1a6314e44e8db5ae7eb6b7fe0323513b"
}
},
"paymentMethod": {
"displayName": "MasterCard 1471",
"network": "MasterCard",
"type": "debit"
},
"transactionIdentifier": "F8F0C804922303DECBA1A8A4F7C503DF1A6314E44E8DB5AE7EB6B7FE0323513B"
}
在实践中,它始终具有顶级字段匹配transactionIdentifier
不区分大小写的嵌套paymentData.header.transactionId
。
文档说:
事务标识符
此付款的唯一标识符。
此标识符适用于收据。
谷歌搜索还找到了如何使用Apple Pay处理退货:
在日本,您还可以使用收据上的交易 ID 来查找购买并处理退货。
此外,transactionId
64 个十六进制字符或 32 个完整字节长。这比唯一事务标识符格式长。因此,有足够的空间成为真正的全球独特。
仍在寻找更直接可信的证据。