Шифрование Apple Wallet NFC

В документации Apple по ключам, доступным для прохода через кошелек есть вариант словаря для данных, связанных с NFC. Я понимаю, что для использования этого ключа требуется специальное разрешение от Apple. Несмотря ни на что ...

message прямолинейно - это данные, передаваемые терминалу NFC (обычно это уникальный идентификатор для клиента).

encryptionPublicKey, однако, сбил меня с толку. Apple заявляет, что это открытый ключ шифрования, используемый протоколом дополнительных услуг. Используйте структуру SubjectPublicKeyInfo в кодировке Base64 X.509, содержащую открытый ключ ECDH для группы P256.

Может ли кто-нибудь объяснить, что означает это второе предложение и / или что разработчик должен будет сделать, чтобы это сгенерировать? Из чего можно было бы даже сгенерировать публичные / частные ключи?


person Dan    schedule 25.01.2018    source источник


Ответы (1)


Для создания открытого и закрытого ключей вам понадобится следующее. Закрытый ключ используется аппаратным обеспечением продавца при чтении прохода и декодировании полезной нагрузки.

Сжатый открытый ключ - это то, что входит в ваш 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---

Вам понадобится ключ Base64 (без новой строки) для поля encryptionPublicKey.

E.g. MDkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDIgAC/Bu9nyAtG1DQe7t7jszLb+dZ1GbXoR8G0rIXoak67NM=

person PassKit    schedule 25.01.2018
comment
И как бы вы декодировали данные VAS, возвращаемые терминалом? Похоже, нам нужен еще один общий секрет в дополнение к нашим открытым / частным ключам для декодирования данных. - person Loris Guignard; 22.02.2018
comment
Я считаю, что данные отправляются с пропуска на терминал, а? - person Dan; 22.02.2018
comment
Открытый ключ не отправляется на терминал, он используется кошельком в алгоритме для шифрования полезной нагрузки. Алгоритм шифрования / дешифрования подлежит NDA Apple Pay. Вам нужно будет напрямую поговорить со своим местным представителем Apple Pay, чтобы получить его. - person PassKit; 23.02.2018
comment
Если вам интересно, мы предлагаем расшифровку API, которая не раскрывает алгоритм. - person PassKit; 23.02.2018
comment
Я! у вас есть дополнительная информация о вашем API дешифрования? - person Loris Guignard; 23.02.2018
comment
@PassKit Спасибо за информацию, encryptionPublicKey не является обязательным, но когда этого поля нет в моем проходе nfc: {message: data}, проход не является NFC. Почему ? Я думал, что данные передаются в открытом виде без этого поля, не так ли? Спасибо - person xav-stargate; 30.03.2019
comment
Apple перестала обновлять документацию кошелька. Ключ стал обязательным в iOS11. - person PassKit; 01.04.2019