Apple Wallet NFC 加密PublicKey

Posted

技术标签:

【中文标题】Apple Wallet NFC 加密PublicKey【英文标题】:Apple Wallet NFC encryptionPublicKey 【发布时间】:2018-01-25 08:41:04 【问题描述】:

在 Apple's documentation for the keys available for a Wallet pass 中,有一个用于 NFC 相关数据的字典选项。我了解使用此密钥需要获得 Apple 的特别许可。无论如何...

message 直截了当——它是传递 NFC 终端(通常是客户的唯一标识符)的数据。

encryptionPublicKey,然而,让我感到困惑。 Apple 声明它是增值服务协议使用的公共加密密钥。 使用 Base64 编码的 X.509 SubjectPublicKeyInfo 结构,其中包含组 P256 的 ECDH 公钥。

谁能解释第二句话的含义和/或开发人员必须做什么才能生成它?甚至可以从什么生成公钥/私钥?

【问题讨论】:

【参考方案1】:

您需要以下内容来生成公钥和私钥。商户硬件在读取 pass 和解码 payload 时使用私钥。

压缩后的公钥是进入您的pass.json 的内容。

openssl ecparam -name prime256v1 -genkey -noout -out nfcKey.pem
openssl ec -in nfcKey.pem -pubout -out nfcPubkey.pem -conv_form compressed
cat nfcPubkey.pem

输出:

-----BEGIN PUBLIC KEY-----
MDkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDIgAC/Bu9nyAtG1DQe7t7jszLb+dZ1GbX
oR8G0rIXoak67NM=
-----END PUBLIC KEY---

encryptionPublicKey 字段需要 Base64 键(不带换行符)。

例如 MDkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDIgAC/Bu9nyAtG1DQe7t7jszLb+dZ1GbXoR8G0rIXoak67NM=

【讨论】:

你将如何解码终端返回的 VAS 数据?除了我们的公钥/私钥之外,我们似乎还需要另一个共享密钥来解码数据。 我相信数据是从通行证发送到终端的,是吗? 公钥不发送到终端,钱包在算法中使用它来加密有效载荷。加密/解密算法受 Apple Pay NDA 约束。您需要直接与您当地的 Apple Pay 联系人联系才能获得它。 如果您有兴趣,我们提供不暴露算法的解密 API。 Apple 停止更新钱包文档。密钥在 ios11 中成为强制性的。

以上是关于Apple Wallet NFC 加密PublicKey的主要内容,如果未能解决你的问题,请参考以下文章

Apple Wallet 中的 Apple Watch 1D 条码不可见

将银行卡添加到Apple Wallet

Apple Wallet 的新发行者(应用内配置)

Apple Pay 检测 Wallet 没有信用卡

oracle加密--wallet

Apple Wallet:推送更新后 Pass 不会自动更新