Я пишу программное обеспечение для персонализации платежного чипа, которое реализует протокол Global Channel Platform Secure Channel 2. У меня есть инструмент от поставщика чипов, который может войти на карту, но я не могу продублировать эти вычисления, чтобы создать свой собственный логин , У инструмента поставщика есть только один заводской ключ или, возможно, набор ключей из трех идентичных частей. Это все, что знает инструмент вендора, и он может войти на карту:
cm> auth
=> 80 50 00 00 08 A0 13 2D 8B C1 E6 6E 9A 00 .P.....-...n.. host challenge: A0132D8B C1E66E9A
(122317 usec) vv indicates SCP02
<= 00 00 00 00 00 00 00 00 00 00 FF 02 00 13 BA 2A ...............* seq num: 0013 card challenge: BA2A16C9DC0E
16 C9 DC 0E 30 11 F0 19 01 0D BF 2B 90 00 ....0......+.. card cryptogram: 3011F019 010DBF2B
Status: No Error
=> 84 82 00 00 10 29 FD 73 3D 5A 91 6C 6F EA A6 56 .....).s=Z.lo..V host cryptogram: 29FD733D5A916C6FEAA656B82A6B8928
B8 2A 6B 89 28 .*k.(
(75647 usec)
<= 90 00 ..
Status: No Error
Из моих общедоступных Спецификаций карты глобальной платформы мое программное обеспечение должно использовать постоянную 182 (или, может быть, 181, я пробовал это в обоих направлениях), и счетчик последовательности (здесь «0013»), дополненный нулями до 16 байт, для создания ключа сеанса. Затем он должен объединить вызов хоста, порядковый номер, вызов карты и заполнение "8000 ...", чтобы создать открытый текст для подписи. Подпишите это с помощью ключа сеанса, и результат должен соответствовать криптограмме карты. После того, как я смогу продублировать вычисления инструмента вендора, я смогу использовать тот же код на моей машине. Легко peasy.
Работает в. Net 4.5 TripleDESCryptoServiceProvider и MACTripleDES, я получаю значения, которые не совпадают. Я неохотно интегрирую Bouncy Castle, чтобы посмотреть, улучшит ли это ситуацию. Мои вычисления ключа проверены на inte rnet калькуляторах , но, конечно, я не вижу ключ сеанса карты. Онлайн калькуляторы подписи не согласны с моим кодом, но они также не согласны с примерами данных. Все, что я знаю, так это то, что подпись получилась неправильной или, по крайней мере, отличной от рабочего инструмента.
Итак, я думаю, вопрос в том, есть ли где-нибудь примеры таких вычислений? Конечно, я сначала спросил производителя чипа.