2015-11-09 1 views
4

Я только что создал очень простой апплет. Это «привет мир» в технологии Java-карт. Я вставил код ниже.Установка апплета (Java-карты) на J3A081

После этого я решил установить его на реальной карте (J3A081) с использованием глобальной платформы, но это не удалось. Прежде всего, я проверил, есть ли апплет уже установлена ​​на карту с помощью команды:

java -jar gp.jar -l 

Отклик:

AID: A000000003000000 (|........|) 
    ISD OP_READY: Security Domain, Card lock, Card terminate, Default selected, CVM (PIN) management 

Когда я решил установить апплет, используя * .cap файл I» ve got:

java -jar gp.jar -install krystian.cap 

javax.smartcardio.CardException: sun.security.smartcardio.PCSCException: Unknown error 0x1f 
     at sun.security.smartcardio.ChannelImpl.doTransmit(ChannelImpl.java:219) 
     at sun.security.smartcardio.ChannelImpl.transmit(ChannelImpl.java:90) 
     at pro.javacard.gp.GlobalPlatform.transmit(GlobalPlatform.java:661) 
     at pro.javacard.gp.GlobalPlatform.loadCapFile(GlobalPlatform.java:727) 
     at pro.javacard.gp.GlobalPlatform.loadCapFile(GlobalPlatform.java:686) 
     at pro.javacard.gp.GPTool.main(GPTool.java:453) 
Caused by: sun.security.smartcardio.PCSCException: Unknown error 0x1f 
     at sun.security.smartcardio.PCSC.SCardTransmit(Native Method) 
     at sun.security.smartcardio.ChannelImpl.doTransmit(ChannelImpl.java:188) 
     ... 5 more 
Exception in thread "main" javax.smartcardio.CardException: sun.security.smartcardio.PCSCException: Unknown error 0x1f 
     at sun.security.smartcardio.ChannelImpl.doTransmit(ChannelImpl.java:219) 
     at sun.security.smartcardio.ChannelImpl.transmit(ChannelImpl.java:90) 
     at pro.javacard.gp.GlobalPlatform.transmit(GlobalPlatform.java:661) 
     at pro.javacard.gp.GlobalPlatform.loadCapFile(GlobalPlatform.java:727) 
     at pro.javacard.gp.GlobalPlatform.loadCapFile(GlobalPlatform.java:686) 
     at pro.javacard.gp.GPTool.main(GPTool.java:453) 
Caused by: sun.security.smartcardio.PCSCException: Unknown error 0x1f 
     at sun.security.smartcardio.PCSC.SCardTransmit(Native Method) 
     at sun.security.smartcardio.ChannelImpl.doTransmit(ChannelImpl.java:188) 
     ... 5 more 

Не могли бы вы рассказать мне, что я делаю неправильно. Эта карта совершенно новая, никогда не использовавшаяся ранее. Я использую устройство чтения карт NFC Card ACR122U и карту J3A081 от NXP.

EDIT

После нескольких часов попыток мне удалось для того чтобы достигнуть несколько вещей. Прежде всего, я обновил драйверы для считывателя смарт-карт ACR122U. Кроме того, я ознакомлюсь с GPShell и создал простой скрипт:

mode_211 
enable_trace 
establish_context 
card_connect 
select -AID a000000003000000 
open_sc -security 1 -keyind 0 -keyver 0 -mac_key 404142434445464748494a4b4c4d4e4f -enc_key 404142434445464748494a4b4c4d4e4f 
card_disconnect 
release_context 

который выводит:

mode_211 
enable_trace 
establish_context 
card_connect 
select -AID a000000003000000 
Command --> 00A4040008A000000003000000 
Wrapped command --> 00A4040008A000000003000000 
Response <-- 6F658408A000000003000000A5599F6501FF9F6E06479100783400734A06072A864                 886FC6B01600C060A2A864886FC6B02020101630906072A864886FC6B03640B06092A864886FC6B0                 40215650B06092B8510864864020103660C060A2B060104012A026E01029000 
open_sc -security 1 -keyind 0 -keyver 0 -mac_key 404142434445464748494a4b4c4d4e4                 f -enc_key 404142434445464748494a4b4c4d4e4f 
Command --> 80CA006600 
Wrapped command --> 80CA006600 
Response <-- 664C734A06072A864886FC6B01600C060A2A864886FC6B02020101630906072A864                 886FC6B03640B06092A864886FC6B040215650B06092B8510864864020103660C060A2B060104012                 A026E01029000 
Command --> 805000000853DFBA4B056DAE8800 
Wrapped command --> 805000000853DFBA4B056DAE8800 
Response <-- 0000510101086197846701020018CC282BD831DB0145313B12DB3E169000 
Command --> 84820100103294E6632BFE5E59879A2C9C03EE345E 
Wrapped command --> 84820100103294E6632BFE5E59879A2C9C03EE345E 
Response <-- 9000 
card_disconnect 
release_context 

Так что я думаю, что все работает нормально, но когда я хочу установить апплет с помощью этого:

mode_211 
enable_trace 
establish_context 
card_connect 
select -AID a000000003000000 
open_sc -security 1 -keyind 0 -keyver 0 -mac_key 404142434445464748494a4b4c4d4e4f -enc_key 404142434445464748494a4b4c4d4e4f 
install -file helloworld.cap -nvDataLimit 2000 -instParam 00 -priv 2 
card_disconnect 
release_context 

я получил исключение:

mode_211 
enable_trace 
establish_context 
card_connect 
select -AID a000000003000000 
Command --> 00A4040008A000000003000000 
Wrapped command --> 00A4040008A000000003000000 
Response <-- 6F658408A000000003000000A5599F6501FF9F6E06479100783400734A06072A864                 886FC6B01600C060A2A864886FC6B02020101630906072A864886FC6B03640B06092A864886FC6B0                 40215650B06092B8510864864020103660C060A2B060104012A026E01029000 
open_sc -security 1 -keyind 0 -keyver 0 -mac_key 404142434445464748494a4b4c4d4e4                 f -enc_key 404142434445464748494a4b4c4d4e4f 
Command --> 80CA006600 
Wrapped command --> 80CA006600 
Response <-- 664C734A06072A864886FC6B01600C060A2A864886FC6B02020101630906072A864                 886FC6B03640B06092A864886FC6B040215650B06092B8510864864020103660C060A2B060104012                 A026E01029000 
Command --> 8050000008ADBD20501C2C87A400 
Wrapped command --> 8050000008ADBD20501C2C87A400 
Response <-- 0000510101086197846701020019DFABEED157EA9E2F7E75EAA739E89000 
Command --> 848201001014781742A86F6C5026B0D999238ABEBA 
Wrapped command --> 848201001014781742A86F6C5026B0D999238ABEBA 
Response <-- 9000 
install -file helloworld.cap -nvDataLimit 2000 -instParam 00 -priv 2 
Command --> 80E602001E07D0D1D2D3D4D50108A000000003000000000AEF08C6020160C80207D0                 0000 
Wrapped command --> 84E602002607D0D1D2D3D4D50108A000000003000000000AEF08C6020160                 C80207D000B9A71938B63B8CFB00 
Response <-- 009000 
Command --> 80E80000EFC4820157010011DECAFFED010204000107D0D1D2D3D4D50102001F0011                 001F000C000B0026000C003B0019000F0000005D00020001000C01010004000B01000107A0000000                 62010103000C0108D0D1D2D3D4D50101000C06000C00800300FF0007010000001707003B00011018                 8C0000188B00017A02308F00023D8C00033B7A0521198B00042D198B00053B7B0006031A037B0006                 928D00073B19037B0006928B00087A08001900020001000103000C48656C6C6F20576F726C642100                 00000005002600090680030003800301010000000600000103800A0103800A060500000006801002                 03800A0809000F000000 
Wrapped command --> 84E80000F7C4820157010011DECAFFED010204000107D0D1D2D3D4D50102                 001F0011001F000C000B0026000C003B0019000F0000005D00020001000C01010004000B01000107                 A000000062010103000C0108D0D1D2D3D4D50101000C06000C00800300FF0007010000001707003B                 000110188C0000188B00017A02308F00023D8C00033B7A0521198B00042D198B00053B7B0006031A                 037B0006928D00073B19037B0006928B00087A08001900020001000103000C48656C6C6F20576F72                 6C64210000000005002600090680030003800301010000000600000103800A0103800A0605000000                 0680100203800A0809000F00000067CDD7B27E70D011 
load() returns 0x0000001F (Urzdzenie doczone do komputera nie dziaa. 

Может ли кто-нибудь получить аналогичную ошибку? Знаете ли вы, что это значит?

EDIT 2 Наконец-то мне удалось установить апплет на мою карточку. Я использовал модифицированный GlobalPlatformPro, как писал vlp, необходимо изменить блок загрузки на 16 байтов.

Но я только был в состоянии установить привет мир апплет, во время обработки моего, GlobalPlatformPro вернулся исключение:

java -jar gp_16byteLoadBlock.jar --install inzynierka.cap 
pro.javacard.gp.GPException: LOAD failed SW: 6A80 
     at pro.javacard.gp.GlobalPlatform.check(GlobalPlatform.java:1092) 
     at pro.javacard.gp.GlobalPlatform.loadCapFile(GlobalPlatform.java:728) 
     at pro.javacard.gp.GlobalPlatform.loadCapFile(GlobalPlatform.java:686) 
     at pro.javacard.gp.GPTool.main(GPTool.java:453) 
+0

Я уверен, что стандартный Java AWT (например, «Applet») не включен в API смарт-карт. Но я не уверен, что еще их заменит. –

+0

Прежде всего, этот апплет импортируется из javacard.framework, который входит в JCDK. Это нечто иное, чем в обычном Java API. Я тестировал это приложение на симуляторе, и все работает нормально. Мне интересно, что на карте у меня есть Java Card 2.2.2, но я разработал приложение с использованием Java Card 3.0. – Krystian

+0

Вы используете бесконтактный считыватель? Если да, попробуйте связаться с читателем. – vlp

ответ

1

(Стенограмма обсуждения в комментариях)

оказалось, что ACR122U NFC Card у читателя есть проблемы с длинными APDU (также упоминается here).

Одним из возможных решений является изменение GlobalPlatformPro инструмента следующим образом:

  • получить источники here

  • Расположить часть кода, который извлекает блоки загрузки файла в GlobalPlatform.java:724

  • уменьшить размер блока нагрузки, заменив часть wrapper.getBlockSize() на некоторую меньшую постоянную (32 c onfirmed работать и 64 подтверждается не работать с этим читателем)

  • перекомпиляция GlobalPlatformPro

EDIT>

Последний GlobalPlatformPro код adds-bs вариант, который позволяет установить блок размер без перекомпиляции.

+0

Я просто попытался скомпилировать замену 'wrapper.getBlockSize()' с константой '32', и он работает. Когда вы меняете его на '64', он не может установить файл * .cap. – Krystian

+0

@ Krystian Great, я обновил ответ. Теоретически максимальным для режима по умолчанию (который является MAC) является 40 (при условии, что максимально допустимые APDU-данные 48 байт, как указано в [Yubico forum post] (http://forum.yubico.com/viewtopic.php?f= 26 & т = тысяча сто тридцать два)). – vlp

+0

@ Krystian Apropos, вам удалось загрузить ваш апплет (скомпилированный для JC 2.2)? – vlp

Смежные вопросы