ISO 9797 метод заполнения 2 и генерация MAC в Java - PullRequest
0 голосов
/ 06 августа 2011

Я надеюсь, что некоторые из вас могут помочь мне в этом вопросе.

Я использовал программу SmartCardShell для запуска кода JavaScript, который извлекает данные из британского электронного паспорта.

Я пытаюсь повторить код в Java для моей диссертации.Однако я поставлен в тупик на поколение MAC.

Код JavaScript для шифрования данных и генерации MAC-адресов:

var cryptogram = crypto.encrypt(kenc, Crypto.DES_CBC, plain, new ByteString("0000000000000000", HEX));
print("Cryptogram   : " + cryptogram);'

var mac = crypto.sign(kmac, Crypto.DES_MAC_EMV, cryptogram.pad(Crypto.ISO9797_METHOD_2));
print("MAC          : " + mac);

Мне удалось правильно проверить, что мой ключ шифрования (Kenc) сгенерирован правильно.

Если исходить из кода скрипта, ключ MAC (Kmac) также является тройным ключом DES, который выполняется с помощью:

byte[] kmackey = new byte[24];
System.arraycopy(kmac, 0, kmackey, 0, kmac.length);
System.arraycopy(kmac, 0, kmackey, kmac.length, 8);
System.out.println("kmackey = " + ConvertToHex.convertToHex(kmackey));

DESedeKeySpec desedekey = new DESedeKeySpec(kmackey);
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede");
Key KMac = keyFactory.generateSecret(desedekey);

Как видно выше, код javascript «подписывает» данные ключом Kmac,механизм DES_MAC_EMV и дополняет данные криптограммы методом дополнения ISO 9797. 2, который, я считаю, называется «заполнением битами».

Может ли кто-нибудь помочь мне в создании / объяснении мне Java-эквивалента механизма DES_MAC_EMV иметод дополнения ISO 9797 2?

Оцените помощь

Просто добавьте, как я забыл упомянуть, я создаю систему для подключения к электронному паспорту и извлечения данных.В тот момент, когда я проверяю данные, полученные из программы / кода javascript SmartCardShell.Это не апплет / приложение javacard, это исключительно Java-хост-приложение

HSK

1 Ответ

1 голос
/ 11 августа 2011

Заполнение

Заполнение на самом деле очень просто.В некоторых местах метод заполнения 2 стандарта ISO 9797-1 называется Битовое заполнение .Вы в основном добавляете один байт 0x80 в конце, а затем добавляете достаточное число 0x00, чтобы общая длина сообщения была кратна 8.

Шифрование

DES_MAC_EMV в приведенном выше кодеболее формально названный ISO 9797-1 Алгоритм 3 .Некоторые статьи / веб-сайты также называют его Алгоритм MAC для розничной торговли .

Вам необходимы два 8-байтовых ключа для этого алгоритма и выполнение 3DES, как определено ниже.Обратите внимание, что это мое понимание алгоритма (вне моей головы);пожалуйста, прочитайте формальные спецификации для «правильного» понимания:

  1. Сначала выполните требуемое заполнение
  2. Используйте вектор инициализации 0 (все нули)
  3. Цепочка изашифровать 8-битные блоки с использованием первого ключа (как в одном DES)
  4. Последний блок требует приложения 3DES;следовательно, расшифруйте, используя второй ключ, и снова зашифруйте его первым ключом.
...