нужен пример вычисления глобальной платформы безопасного канала 2 - PullRequest
0 голосов
/ 21 февраля 2020

Я пишу программное обеспечение для персонализации платежного чипа, которое реализует протокол 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 калькуляторах , но, конечно, я не вижу ключ сеанса карты. Онлайн калькуляторы подписи не согласны с моим кодом, но они также не согласны с примерами данных. Все, что я знаю, так это то, что подпись получилась неправильной или, по крайней мере, отличной от рабочего инструмента.

Итак, я думаю, вопрос в том, есть ли где-нибудь примеры таких вычислений? Конечно, я сначала спросил производителя чипа.

1 Ответ

1 голос
/ 21 февраля 2020

Примером в Python является проект Asterix: https://github.com/suma12/asterix

Незначительное измельчение SCP02.py в этом проекте было достаточно для запуска и дублирования моих образцов данных.

...