Ошибка создания и проверки криптограммы приложения

Я работаю над приложением для обработки транзакций Master Card, но все еще на стадии разработки. Чтобы иметь возможность протестировать свое приложение для проверки криптограммы, я персонализировал карту с помощью MChip со следующей информацией профиля:

  • MChip Jcop
  • версия приложения 1.0
  • ревизия профиля 1.0.11
  • требуется универсальная ОС.

Прочитав материалы по этим вопросам, Невозможно создать правильную криптограмму приложения и Создание криптограммы вручную, я попытался проверить номер версии криптограммы моей карты, но тег 0x9F10 отсутствовал на моем данные персонализации, и я не мог добавить этот тег перед персонализацией. Я пробовал различные комбинации генерации криптограмм на Thales HSM, но ни один из них не возвращает то же значение, что и карта.

Находясь на стадии разработки с доступом к ключам разработки, я проверил, что ключи хороши, те же данные, переданные для генерации криптограммы, и на этом этапе я совершенно не знаю, что делать. Буду признателен за любую помощь в этом вопросе. Спасибо

foreach (var tagLen in EMVTag.ParseDOL(crmDolstr))
    {                                    
        requestData.Append(EMVData[tagLen.Split(',')[0]]);
        dolData.AppendFormat("{0}|{1},", tagLen.Split(',')[0], 
            EMVData[tagLen.Split(',')[0]]);
    }
string commandStr = string.Format("80 AE 8000 {0} {1} 00", 
    GetHexLen(requestData.ToString()), requestData.ToString());
byte[] hexData = Helpers.HexStringToBytes(commandStr);
apdu = new APDUCommand(hexData);

public APDUCommand(byte[] apdu)
    {
        if (apdu.Length < 5)
            throw new Exception("Wrong APDU length.");

        this.cla = apdu[OFFSET_CLA];
        this.ins = apdu[OFFSET_INS];
        this.p1 = apdu[OFFSET_P1];
        this.p2 = apdu[OFFSET_P2];
        this.lc = apdu[OFFSET_LC];
        if (this.lc == apdu.Length - 5)
            this.le = (byte) 0;
        else if (this.lc == apdu.Length - 5 - 1)
            this.le = apdu[apdu.Length - 1];
        else
            throw new Exception("Wrong LC value.");
        this.data = new byte[this.lc];
        System.Array.Copy(apdu, OFFSET_CDATA, this.data, 0, 
            this.data.Length);
}

person Ayodele Sunday    schedule 22.01.2018    source источник
comment
Можете ли вы обновить свой вопрос с полным APDU и R-APDU от начала до конца?   -  person Adarsh Nanu    schedule 22.01.2018
comment
Некоторый поток APDU был бы лучше для понимания сценария, чем этот фрагмент кода .. !!   -  person Gaurav Shukla    schedule 02.05.2018


Ответы (1)


Используемых вами данных (из CDOL) недостаточно для генерации криптограммы. Криптограмма обычно включает AIP, ATC и CVR. Обратите внимание на ответ на создание криптограммы для IAD, поскольку он обычно также содержит динамически сгенерированный CVR, который используется в процессе создания криптограммы.

person Michal Gluchowski    schedule 23.03.2018