标签: globalplatform

扩展的APDU和T = 0/1通信协议

我有一个JCOP V2.4.2 R3 java卡,它的数据表中提到"卡支持T=1T=0通信协议"

我还有一个ACR38智能卡读卡器,它支持T = 0和T = 1协议.(我成功地与一张卡进行了T = 0通信,并且成功地与该卡进行了T = 1通信.)

我编写了以下程序并将其上传到卡上以发送和接收扩展的APDU:

package extAPDU;

import javacard.framework.APDU;
import javacard.framework.Applet;
import javacard.framework.ISOException;
import javacardx.apdu.ExtendedLength;

public class ExAPDU extends Applet implements ExtendedLength {

    private ExAPDU() {
    }


    public static void install(byte bArray[], short bOffset, byte bLength)
            throws ISOException {
        new ExAPDU().register();
    }

    public void process(APDU arg0) throws ISOException {
        short number = arg0.setIncomingAndReceive();
        arg0.setOutgoingAndSend((short)0, (short)(number+7));
    }

}
Run Code Online (Sandbox Code Playgroud)

在CAD方面,我使用python脚本向卡发送不同的APDU.问题是:

1-为什么我无法启动与T = 0协议的通信(虽然提到该卡支持此协议):

python脚本:

from smartcard.scard import *
import …
Run Code Online (Sandbox Code Playgroud)

smartcard javacard smartcard-reader pyscard globalplatform

3
推荐指数
3
解决办法
4260
查看次数

使用UICC运营商特权证书签署应用

我正在阅读有关此链接的信息,该信息与使用运营商特权签署应用程序有关。

我知道如何使用用于生产版本的密钥库对应用程序进行签名,但是如何将UICC证书添加到我的应用程序中以使其获得运营商特权?

我的主要目标是能够调用TelephonyManager函数,例如:

iccOpenLogicalChannel
iccCloseLogicalChannel
iccTransmitApduLogicalChannel
iccTransmitApduBasicChannel
Run Code Online (Sandbox Code Playgroud)

这是调用上述函数之一时得到的堆栈跟踪:

E/AndroidRuntime: FATAL EXCEPTION: main
E/AndroidRuntime: Process: com.xxxx, PID: 2668
E/AndroidRuntime: java.lang.SecurityException: No modify permission or carrier privilege.
E/AndroidRuntime:     at android.os.Parcel.readException(Parcel.java:1599)
E/AndroidRuntime:     at android.os.Parcel.readException(Parcel.java:1552)
E/AndroidRuntime:     at com.android.internal.telephony.ITelephony$Stub$Proxy.iccOpenLogicalChannel(ITelephony.java:2966)
E/AndroidRuntime:     at android.telephony.TelephonyManager.iccOpenLogicalChannel(TelephonyManager.java:2914)
E/AndroidRuntime:     at android.view.View.performClick(View.java:5198)
E/AndroidRuntime:     at android.view.View$PerformClick.run(View.java:21147)
E/AndroidRuntime:     at android.os.Handler.handleCallback(Handler.java:739)
E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:95)
E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:148)
E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5417)
E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Run Code Online (Sandbox Code Playgroud)

提前致谢!

android apdu sim-card telephonymanager globalplatform

3
推荐指数
1
解决办法
3298
查看次数

如何检测传入命令的接口?

我有一个包含我的小程序的双接口 Java 卡。我想对来自不同接口的单个​​命令有两个不同的 APDU 响应。

例如,00 10 00 00当从接触式接口接收到命令时,我想用“Contact”响应APDU 命令,并在从非接触式接口接收到此命令时响应“ContactLess”。

那么,Java Card API 或Global Platform API 中是否有任何方法来检测传入命令的接口?

apdu javacard globalplatform

3
推荐指数
1
解决办法
352
查看次数

如何从智能卡获取CPLC数据?

我在带有智能卡读卡器的Ubuntu VM上使用GPShell(型号为ACR122),我正在使用几种不同的恩智浦SmartMX芯片.

使用他们的Android TagInfo应用程序,当我扫描一个特定的SmartMX芯片时,我能够看到"卡片生产生命周期数据".

但是,我想使用GPShell来获取CPLC数据.我认为它是可访问的,因为我可以在Android设备上扫描标签时看到它.

我有一个名为的程序connect.txt,它有以下内容:

mode_211
enable_trace
establish_context
card_connect
get_data -identifier 9F7F
card_disconnect
release_context
Run Code Online (Sandbox Code Playgroud)

这是输出:

josh@josh-VirtualBox:~/projects/gpshell-test$ gpshell connect.txt
mode_211
enable_trace
establish_context
card_connect
* reader name ACS ACR122U PICC Interface 00 00
get_data -identifier 9F7F
Command --> 80CA9F7F00
Wrapped command --> 80CA9F7F00
Response <-- 
get_data() returns 0x80200000 (Unknown ISO7816 error: 0x0000)
Run Code Online (Sandbox Code Playgroud)

我正在尝试按照上面的命令()的GPShell文档,get_data -identifier 9F7F这应该是获取CPLC数据的命令.

我如何获得CPLC数据?

至于调试,我尝试了一些GPShell附带的示例脚本(例如,选择某个AID,或列出AID,尝试使用默认密钥进行身份验证等).所有命令都给我与上面相同的输出.我也搜索gpshellStackOverflow并阅读大多数问题/答案,但它们似乎都没有覆盖我在这里要求的内容(如果需要,我可以提供链接).谢谢.

ubuntu nfc javacard globalplatform gpshell

3
推荐指数
1
解决办法
3329
查看次数

更新Java Card/GlobalPlatform applet时如何保存数据?

如何更新包含需要跨版本保留的数据的Java Card小程序?尽管我可以告诉我更新applet是通过删除它然后安装新版本完成的,这似乎也会删除与应用程序关联的任何持久数据.

作为一个具体的例子,假设我正在编写一个身份验证和加密applet.applet的版本1将在安装时生成受硬件保护的密钥,并支持签名消息,但不加密它们.假设我然后想要发布也支持加密的版本2,并且可以使用版本1创建的密钥.为了实现这一点,我需要在版本1和版本2中做什么?

除了纯Java卡之外,我对使用GlobalPlatform机制的解决方案持开放态度.

security updates smartcard javacard globalplatform

3
推荐指数
2
解决办法
354
查看次数

将applet 安装到java 卡的APDU 命令顺序是什么?

我有一个 .CAP 文件(小程序),我想将它安装到我的 java 卡上。我知道我可以使用 GPShell 或 apdutool(来自 JCDK)之类的工具来做到这一点,但我想自己复制安装过程。

令人困惑的是,在 GP 标准中,安装过程是: APDU 命令 INSTALL[for load] 然后是多个 LOAD 命令,然后是 INSTALL[for install] 命令。

虽然 oracle 文档提出了用于安装 .CAP 文件的不同 APDU 命令序列:Select(Issuer Security Domain?)、CAP begin、Component ## Begin+Data+End(对于每个组件)、CAP End、Create Applet。

两种安装小程序的方法是否等效?

LOAD 命令的 DATA 字段包含什么?GP 标准没有指定,我知道从 .CAP 文件发送原始字节是错误的。我使用 GPShell 成功安装了小程序,但 LOAD 命令的 DATA 字段对我来说没有意义。 GPSshell 输出

对于 oracle 方法,我使用 Java Card Developement Kit 中的 scriptgen 来生成 APDU 命令,但是来自这些命令(B0、B2、B4、BC、BA)的 INS 字节没有 GP 引用。脚本生成输出

java smartcard javacard globalplatform

3
推荐指数
1
解决办法
1657
查看次数

Java Card 可共享接口是否可以跨安全域访问?

通常是否可以访问安装在符合 Java 卡和全局平台规范的卡中不同安全域中的小程序的可共享接口?

如果这是不可能的,是否有另一种方法可以调用另一个安全域中的应用程序,可能是通过安全通道手动通信?

javacard globalplatform

3
推荐指数
1
解决办法
160
查看次数

SIM 卡 GlobalPlatform 密钥在现场的使用

问题1.当 SIM 制造商对 SIM 卡进行个性化处理,然后移动运营商将其交给最终用户时,GlobalPlatform (GP) 密钥(ENC、MAC、KEK...)是否有任何用途?

只要我知道 SIM 文件结构或其小程序可以通过 OTA RFM 和 RAM 访问(KID/KIC/KIK)。因此,当 SIM 到达客户手中时,无需拥有 GP 密钥。

是否有什么特殊的地方(例如,在 OTA 交互过程中,我们是否需要 GP 密钥)?正如我所理解的,当我们物理上可以访问 SIM 卡并且可以直接向 SIM 卡发送 APDU 时,GP 密钥就可用。我对吗?

问题2。是否可以使用全局平台命令(例如是否可以读取记录、读取二进制)使用 GP 密钥访问 SIM/USIM 文件结构并访问 ISD 拥有的权限?通常,可以使用 PIN 和 ADM 密钥根据 3GPP TS 51.011/ETSI TS 151 011 中定义的访问条件来访问文件结构。但是是否可以使用 ISD 拥有的 GP 密钥和访问权限?

smartcard javacard ota sim-card globalplatform

3
推荐指数
1
解决办法
759
查看次数

pcsc-lite和libnfc之间的区别

有人可以解释两者之间的差异/关系吗?

现在我使用GPShell + globalplatform + pcsclite也操纵了支持NFC的卡.从我的角度来看(我对libnfc了解不多)pcsclite和libnfc做同样的事情.

nfc pcsc smartcard-reader globalplatform lib-nfc

2
推荐指数
1
解决办法
2568
查看次数

pro.javacard.gp.GPException:严格警告:检测到未融合的JCOP

尝试使用以下命令列出智能卡的内容时

gp -l
Run Code Online (Sandbox Code Playgroud)

获得以下异常:

pro.javacard.gp.GPException: STRICT WARNING: Unfused JCOP detected
at pro.javacard.gp.GlobalPlatform.printStrictWarning(GlobalPlatform.java:184)
at pro.javacard.gp.GlobalPlatform.select(GlobalPlatform.java:213)
at pro.javacard.gp.GPTool.main(GPTool.java:334)
Run Code Online (Sandbox Code Playgroud)

搜索时,我知道该卡不是预先个性化的.我的问题是什么是智能卡预个性化?这种预先预先定位的人是谁?它是供应商吗?

smartcard javacard globalplatform jcop

2
推荐指数
1
解决办法
513
查看次数