标签: javacard

T=0 JavaCard 的传输错误

我有 4 种不同类型的 JavaCard。出于一个奇怪的目的,我编写了以下小程序,以在接收到每个 APDU 命令时返回整个 APDU 缓冲区:

package bufferReturner;

import javacard.framework.APDU;
import javacard.framework.Applet;
import javacard.framework.ISOException;

public class BufferReturner extends Applet {

    private BufferReturner() {
    }

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

    }

    public void process(APDU arg0) throws ISOException {
        arg0.setOutgoingAndSend((short)0, (short)256);
    }

}
Run Code Online (Sandbox Code Playgroud)

当我向我的卡发送 APDU 命令时,我得到以下结果:

NXP JCOP v2.4.2 r3 卡 - 使用 T=1

OpenSCTool:> OSC.exe -s 00A404000B0102030405060708090101 -s 00000000 -s 00000000020101
Using reader with a card: CASTLES EZ100PU 0
Sending: …
Run Code Online (Sandbox Code Playgroud)

apdu smartcard javacard globalplatform

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

如何将 JavaCard 包添加到 JavaCard 小程序?

我正在尝试构建一个简单的 Hello world JavaCard 小程序。我正在使用 NetBeans IDE。

我正在关注本教程。

这是我的代码:

package classicapplet1;

import javacard.framework.*;
import java.rmi.Remote;
import javacard.framework.service.Dispatcher;
import javacard.framework.service.RMIService;
import javacard.framework.service.Service;

public class JavaCardApplet extends Applet  {

    HelloWorld hello;
    Dispatcher disp;
    Service svc;

    public static void install(byte[] bArray, short bOffset, byte bLength) {
        new JavaCardApplet();
    }

    private JavaCardApplet() {
       // register();

        hello = new HelloWorld();
        svc=new RMIService((Remote) hello);
        disp = new Dispatcher((short)1);
        disp.addService(svc, Dispatcher.PROCESS_COMMAND);
    }

    public static void install(byte[] buf, short ofs, short len){

        (new JavaCardApplet()).register();
    }

    public void …
Run Code Online (Sandbox Code Playgroud)

javacard netbeans-8

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

ISO/IEC 7816 数据对象和结构选择和 EF 结构

我只是在阅读 ISO/IEC 7816 第 4 部分标准。不幸的是,它对我来说有些模糊,我希望我能在这里得到答案。

第一个模糊点是关于Data Objects。定义了数据对象构成Simple-TLVBer-TLV类别,并对这些类别进行了一些描述。但是什么是数据对象本身?是我们存储在卡上的数据吗?如果是这样,据我所知,我们将数据存储在小程序的不同字段中,我们不考虑它们的任何BER-TLVSimple-TLV类别!它们只是一系列十六进制数字。

第二个模糊点是关于结构选择部分。它被定义为我们可以通过以下五种不同的方式:

  1. 复位后隐式。
  2. 按 DF 名称显式选择
  3. 通过文件标识符选择显式
  4. 显式按路径选择
  5. 通过短 EF 标识符选择显式

模糊的一点是,据我所知,我唯一可以在卡片上选择的东西是小程序,没有别的。对于小程序,我可以选择默认值(这可以是上述选项的第一种方式,隐式选择)或通过将 SELECT APDU 命令发送到带有 Applet AID 的卡片来选择它(上述任何一种方式都没有提到)。

那么这些结构选择方法是什么呢?

第三个模糊点是EF Structures。定义 EF-s 可以具有以下五种结构:

  1. 透明结构
  2. 具有固定大小记录的线性结构
  3. 具有可变大小记录的线性结构
  4. 具有固定大小记录的循环结构(箭头指向最近写入的记录)
  5. TLV结构

问题又来了,这些结构是干什么用的?这是数据在内存中存储的方式吗?如果是这样,为什么它们在标准中定义,而它们是关于卡片的内部行为?程序员需要了解它们吗?他/她可以检测/更改他/她的卡使用的EF结构吗?

最后,是否所有符合 ISO 7816-4 的卡都支持上述所有项目(因为我在 ISO 7816-4 中找不到任何提到它们是可选的或其他内容)?

是否所有符合 ISO 7816-4 的卡都需要支持在这部分标准中定义的 APDU 命令?

smartcard javacard

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

使用 javacard 生成签名 CSR 时出错(asn1 错误标签值)

我已经在java卡中生成了密钥对并返回公钥。我在 android 应用程序中再次生成公钥,然后在 android 中生成 CSR

 private byte[] CertReqGeneration()  throws Exception
 {
    if(publickeyobj==null)
        return null;

    String info = "CN=cn, OU=ou, O=o, C=cn, ST=city";
    X500Principal x500 = new X500Principal(info);

    X500Name x500name;
    x500name= X500Name.getInstance(x500.getEncoded());

    CertificationRequestInfo csrInfo = new CertificationRequestInfo(x500name, publickeyobj, new DERSet());

    ASN1EncodableVector v = new ASN1EncodableVector();
    v.add(csrInfo);
    ASN1ObjectIdentifier oid = new ASN1ObjectIdentifier("0.0");
    v.add(new DERSequence(oid));
    v.add(new DERBitString(new byte[] {}));
    byte[] encoded = new DERSequence(v).getEncoded();
    byte[] PKCS10= DataSignGeneration(encoded);

       byte[] encoded = Base64.encode(PKCS10);
      String base64=new String(encoded);
    return  base64;

}
Run Code Online (Sandbox Code Playgroud)

但是当我想在 ca 中发布它时,我收到错误 asn1 bad …

android bouncycastle csr javacard

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

使用 javacard Shareable 类在作为客户端和服务器的两个小程序之间共享具有不同包的接口?

我想在作为客户端和服务器的两个小程序之间共享具有不同包 AID 的接口。我看到了链接:[ 0x6f00 errorcasting Javacard Shareable Interface

在上面的链接中说:客户端和服务器必须位于同一个包中。我现在有一个问题。如果客户端有不同的包 AID,是否可以使用服务器功能?非常感谢。

applet smartcard javacard

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

如何转换 Java Card 的 ECDSA 曲线参数

如何转换这些 192-ECDSA 曲线参数以在 Java Card 中使用?

p = 6277101735386680763835789423207666416083908700390324961279 
n = 6277101735386680763835789423176059013767194773182842284081 
SEED = 3045ae6f c8422f64 ed579528 d38120ea e12196d5 
c = 3099d2bb bfcb2538 542dcd5f b078b6ef 5f3d6fe2 c745de65
b = 64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1 
Gx = 188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012
Gy = 07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811
Run Code Online (Sandbox Code Playgroud)

cryptography digital-signature javacard ecdsa

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

Javacard 在 APDU 中发送 RSA 公钥

通过 APDU 发送 JavaCard RSAPublicKey 的好解决方案是什么?获取指数和模块并将它们打包成字节数组?

cryptography rsa apdu javacard

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

Java Card:发送 T=0 的长响应

我想从卡向主机发送一个长响应(1000+ 字节)。读者只有T=0。我有几个问题想知道是否有人知道:

  1. 我的理解是 ExtendedLength 仅适用于 T=1,这是真的吗?
  2. 如果是这样,是否有在 T=0 上发送长响应的最佳实践?
  3. 一种可能的解决方案是按块发送数据,状态码为 61xx。基本上,我会调用 APDU.sendBytesLong,然后用 61xx 抛出异常以指示有更多数据。但是抛出异常来表明有更多数据似乎很奇怪,即使这似乎符合标准

祝一切顺利!

约翰尼

apdu smartcard javacard

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

Java Card 通过可共享接口访问对象

我正在尝试通过两个小程序之间的 Java 卡中的可共享接口访问对象。

服务器小程序代码:

package Wallet;

public class Wallet extends Applet implements IShareable {

    public static byte[] buf1 = JCSystem.makeTransientByteArray((short) 258, JCSystem.CLEAR_ON_DESELECT);

    public static void install(byte[] bArray, short bOffset, byte bLength) {
        new Wallet();
    }

    protected Wallet() {
        register();
    }

    public Shareable getShareableInterfaceObject(AID clientAID, byte parameter) {
        return this;
    }

    public short getArray(byte[] buf, short off, short len) {
        Util.arrayCopyNonAtomic(testArray, (short)0, buf, off, (short) 5);
        Util.arrayFillNonAtomic(buf1, (short) 0, (short) buf1.length, (byte) 0xAA); // <---- This is causing SecurityException
        return len; …
Run Code Online (Sandbox Code Playgroud)

javacard

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

OP_READY和SECURED状态有什么区别?

我把我的java卡的ISD状态设置为SECURED状态.我想知道与OP_READY相比,这种新状态卡丢失的能力是什么?

注意:当我尝试时,我可以在卡上上传并安装新的.cap文件并成功删除它们[在这个新的ISD状态]!

如果有人解释不同状态之间的主要差异,我会感恩的吗?我已经阅读了全球平台规范2.2.2,但不幸的是我有点难以理解!

smartcard javacard globalplatform

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