标签: globalplatform

在javacard中安装applet

我通过Eclipse制作了流行的"Hello World"javacard代码的.cap文件

现在我想通过GPShell和ACR38智能卡读卡器将它加载到真正的javacard中.

问题:我需要任何密钥才能在卡中加载.cap文件吗?我的意思是,我应该在将我的小程序上传到卡中之前进行身份验证,还是不是必需的?我认为认证是非常重要的.在没有身份验证的情况下上传.cap是不合理的.但我不知道,如何进行身份验证.问题:这有什么问题?

C:\Users\ghasemi>java -jar e:\gpj\gpj.jar -load e:\helloWorld.cap -install
Found terminals: [PC/SC terminal ACS CCID USB Reader 0]
javax.smartcardio.CardException: connect() failed
        at sun.security.smartcardio.TerminalImpl.connect(Unknown Source)
        at net.sourceforge.gpj.cardservices.GlobalPlatformService.main(Unknown S
ource)
Caused by: sun.security.smartcardio.PCSCException: SCARD_E_SHARING_VIOLATION
        at sun.security.smartcardio.PCSC.SCardConnect(Native Method)
        at sun.security.smartcardio.CardImpl.<init>(Unknown Source)
        ... 2 more
Found card in terminal: ACS CCID USB Reader 0
java.lang.NullPointerException
        at net.sourceforge.gpj.cardservices.GlobalPlatformService.main(Unknown S
ource)

C:\Users\ghasemi>java -jar e:\gpj\gpj.jar -load e:\helloWorld.cap -install

Found terminals: [PC/SC terminal ACS CCID USB Reader 0]

Found card in terminal: ACS CCID USB Reader 0 …
Run Code Online (Sandbox Code Playgroud)

smartcard javacard globalplatform

8
推荐指数
1
解决办法
2102
查看次数

自锁一个Javacard小程序

我的问题是,是否可以从applet本身的代码中锁定applet作为从代码中检测到的操作的对策.

显而易见的选择是使用GPSystem.lockCard();并且它有效,但是我想知道是否可以仅锁定applet.此外,我可以从相关安全域的经过身份验证的会话中锁定applet本身.但它是否可以从applet代码本身.看来,考虑到GPSystem.setCardContentState();使用的方法GPSystem.APPLICATION_LOCKED,所以我也测试了但是它不起作用.

重读GP卡规范说明2.2 PDF:

开放应拒绝任何转换请求锁定生命周期状态;

在我的Eclipse中,JavaDoc说:

开放应拒绝任何转换请求的生命周期状态已锁定

这里发生了什么?

security lifecycle smartcard javacard globalplatform

8
推荐指数
2
解决办法
791
查看次数

如何使用SIM卡(安装小程序)

我有一张带有以下ATR的智能卡:

ATR = 3B 9E 94 80 1F 42 80 31 00 73 BE 21 10 66 54 59 53 04 4C 25 CF.

根据atr-parse.appspot.com的输出,我发现它是MCI(伊朗移动通信公司)的SIM卡.

这些是我从历史字节获得的信息:

(紧凑型TLV数据对象)

标签:3,Len:1(卡服务数据字节)

卡服务数据字节:0

  • EF.DIR和EF.ATR访问服务:通过GET RECORD(s)命令

  • 卡与MF

标签:7,Len:3(卡片功能)

选择方法:190

  • 支持记录号码

  • 支持短EF标识符

  • 隐式DF选择

  • 按文件标识符选择DF

  • 通过路径选择DF

  • DF选择全DF名称

数据编码字节:33

  • 写功能的行为:专有

  • BER-TLV标记字段的第一个字节的值'FF':有效

  • 四重奏数据单位:1

命令链,长度字段和逻辑通道:16

  • 逻辑频道号码分配:由卡

  • 最大逻辑通道数:1

标签:6,Len:6(发布前数据)

数据:54 59 53 04 4C 25"TYS.L%"

如上所述,提到该卡有一个MF.

问题是我对这张卡无能为力.在第一步中,我想列出其内容.我看了TS 11.11,TS 102.221,TS 131.102TS 151.011规范.

据我所知,从上面的文件中,卡的系统文件包括Master File其AID 3F00 …

gsm javacard sim-card gemalto globalplatform

7
推荐指数
1
解决办法
3336
查看次数

获取Data APDU命令的不同标签和响应格式

您可能知道,Gloabal Platform Card Specification定义了一个名为Get Data的命令,用于从智能卡中检索一些信息.

GlobalPlatformPro是与智能卡通信的流行工具之一.当我使用此工具列出卡上已安装的小程序时,我有以下输出:

D:\3-TestTools\SmartCard>GP -list -d -v -i
//Useless Info Censored
ATR: 3B6800000073C84012009000
//Select APDU Command
A>> T=0 (4+0000) 00A40400 00
A<< (0018+2) (48ms) 6F108408A000000003000000A5049F6501FF 9000

***** Card info:
A>> T=0 (4+0000) 80CA9F7F 00
A<< (0045+2) (65ms) 9F7F2A4250010C425102902610116000099A5A0AF9425211694253117E00000000000000000000000000000000 9000
Card CPLC:
ICFabricator: 4250
ICType: 010C
OperatingSystemID: 4251
OperatingSystemReleaseDate: 0290
OperatingSystemReleaseLevel: 2610
ICFabricationDate: 1160
ICSerialNumber: 00099A5A
ICBatchIdentifier: 0AF9
ICModuleFabricator: 4252
ICModulePackagingDate: 1169
ICCManufacturer: 4253
ICEmbeddingDate: 117E
ICPrePersonalizer: 0000
ICPrePersonalizationEquipmentDate: 0000
ICPrePersonalizationEquipmentID: …
Run Code Online (Sandbox Code Playgroud)

smartcard javacard globalplatform

7
推荐指数
1
解决办法
7743
查看次数

Secure Com SCP02会话:在初始化更新命令的响应中返回的"密钥多样化数据"的作用是什么

在初始化更新命令的响应字段中,密钥分散数据(其包含制造ID和安全域AID的最后两个字节)被返回到Off Card实体.

我想知道这些数据的用途是什么?

我在某地读到,这个密钥多样化数据用于推断Off Card端的基本密钥.我不知道这是对还是错.

如果它是正确的,那么如何使用这种多样化数据在卡片末端导出基本密钥?

请提供你的建议!!

smartcard javacard globalplatform

6
推荐指数
1
解决办法
2856
查看次数

什么是GlobalPlatform和JavaCard的关系?

我开始使用GlobalPlatfrom Card规范,我无法弄清楚GLobalPlatform functinalify如何来到JavaCard.是否有任何小程序应安装到卡中以使此卡与GP兼容?或者在制造期间将GP功能作为JRE扩展提供给卡?或者甚至可以使非GP兼容卡与GP兼容?

java simulator javacard globalplatform

6
推荐指数
1
解决办法
2689
查看次数

Java Card 小程序、安全数据传输和安全通道

我想以一种方式编写我的小程序,使其 APDU 命令和状态字在我的卡和我的读卡器之间的传输通道中不清楚。我的意思是我不想将 APDU 命令和响应发送为第三方的纯文本。

我想我有两个选择:

  1. 在卡上选择我的小程序后,对于所有其他命令,对 APDU 命令的数据部分执行加密功能,并在卡上对其进行解密,然后对其进行分析。请注意,我无法使用这种方法加密整个命令,因为结果可能与另一个SELECTAPDU 命令冲突,并且卡的 SDSELECT错误地将其识别为命令。那正确吗?

它的图表:

在此处输入图片说明

  1. 使用SD安全通道:据我所知的安全的信道的装置:全体APDU命令响应以加密的形式发送(即,它们在源(安全域/卡阅读器)和解密加密的目的地(与危机干预域/卡Reader). 是吗?据我所知,SD 在这个机制中执行加密方法的角色,我的小程序和 SD 之间的通信是简单的(下图),对吧?

它的图表: 在此处输入图片说明

有没有其他办法?

似乎第一个解决方案还不够好,因为:

  1. 我必须自己实现!:)
  2. 我们无法对第三方隐藏所有部分的命令和响应。(我们只能隐藏数据)

我对吗?

现在,假设我想确保我的小程序仅适用于使用安全通道传输的 APDU 命令。我想我又有两个选择:

  1. 将卡置于SECURED状态。由于用户在这种状态下无法使用纯文本 APDU 命令与卡通信(对吗?),因此他必须使用安全通道将命令发送到我的小程序。对?如果不正确,是否有任何方法可以强制 SD 仅使用安全通道?

  2. 将卡保持在它所处的任何生命周期(例如 OP_READY),但相反,在接收任何 APDU 命令时,检查CLA部分以查看它是否是安全传输的!(这可能吗?CLA来自安全通道的部分 APDU 命令和其他命令之间有什么区别吗?我说得对吗?)

有没有其他办法?

最后是主要问题:

如何使用 SD 与我的小程序进行安全通信?因为我认为我必须使用 GlobalPlatform 类(我是吗?),所以我查看了它的 API-s。我getSecureChannel在名为org.globalplatform.GPSystem. 我的方式正确吗?我必须使用这种方法吗?

我知道回答这个问题可能太长了,但我相信它不仅为我,也为其他未来的观众澄清了很多问题。

我很感激任何机构为我解决了这个问题。

一个示例小程序更可观。

javacard globalplatform

6
推荐指数
2
解决办法
2924
查看次数

Java Card 3.0连接版本中Web服务器的IP地址是多少?

当我们在兼容Java卡3.0的卡中运行Web服务器时,我们如何请求该服务器,或者更确切地说我们请求该服务器的IP地址.还有更多的Android应用程序请求并从服务器获得响应,如果是这样我们怎么能这样做?

smartcard javacard sim-card globalplatform

6
推荐指数
1
解决办法
298
查看次数

在 Java 卡上安装小程序时出现错误 0x643A

在成功安装(和删除)同一个小程序两次后,我无法再在我的 Java 卡上安装小程序。

设置涉及:

  • 智能卡:ACS ACOSJ 40KB Java Card 3.0.4(双接口)
  • 读卡器:Cherry TC 1300(双接口)
  • CCID 驱动程序:HID Global OMNIKEY ifdokccid_linux_x86_64-v4.2.8
  • 软件:GlobalPlatformPro最新提交

一般卡信息:

$ gp-pro --info --debug --verbose
GlobalPlatformPro v0.3.9-26-gf426164
Running on Linux 4.11.3-1-ARCH amd64, Java 1.8.0_121 by Oracle Corporation
[DEBUG] PlaintextKeys - static keys: 
ENC: Ver:0 ID:0 Type:DES3 Len:16 Value:404142434445464748494A4B4C4D4E4F KCV: 8BAF47
MAC: Ver:0 ID:0 Type:DES3 Len:16 Value:404142434445464748494A4B4C4D4E4F KCV: 8BAF47
KEK: Ver:0 ID:0 Type:DES3 Len:16 Value:404142434445464748494A4B4C4D4E4F KCV: 8BAF47
# Detected readers from JNA2PCSC
[ ] Cherry SC …
Run Code Online (Sandbox Code Playgroud)

applet apdu javacard contactless-smartcard globalplatform

5
推荐指数
0
解决办法
505
查看次数

删除数据字段中带有 SSD AID 的 APDU 命令,返回 6985

我有一个包含 SSD(补充安全域)的 Javacard,我想删除它。通常,当我想从我的卡中删除小程序或包时,我会在成功的相互验证过程后发送以下DELETE APDU命令(不需要 MAC 或数据字段加密,对于DELETE APDU命令就足够了):Security Level == 0

--> 80 E4 00 00 LC 4F <AID Len> <AID>
<-- 90 00
Run Code Online (Sandbox Code Playgroud)

上面的命令适用于普通小程序。但是当我将我的SSD的AID放入其中时,该卡以69 85个状态字响应,这意味着“不满足使用条件”。.

由于在我的卡中启用了委托管理功能,并且 ISD 中加载了公共令牌密钥和收据密钥,我认为上述错误可能是由于未在DELETE APDU命令中使用删除令牌。所以我计算了删除令牌如下:

全球平台卡规范 2.2.0.7:图 C-8:删除令牌计算 在此处输入图片说明

DeleteToken = RSA_Sign("00 00 LC 4F <SSD AID Len> <SSD AID>", TokenPrivateKey)
Run Code Online (Sandbox Code Playgroud)

然后我尝试使用以下命令删除 SSD:

--> 80 E4 00 00 <LC+Len(DeleteToken)> 4F <SSD AID Len> <SSD …
Run Code Online (Sandbox Code Playgroud)

javacard globalplatform

5
推荐指数
1
解决办法
158
查看次数