标签: javacard

如何在 JavaCard 中存储大于 128 字节的数据

我无法在字节数组中的 128 以上的索引处写入数据。代码如下。

private void Write1(APDU apdu) throws ISOException
{
    apdu.setIncomingAndReceive();
    byte[] apduBuffer = apdu.getBuffer();
    byte j = (byte)apduBuffer[4];       // Return incoming bytes lets take 160
    Buffer1 = new byte[j];              // initialize a array with size 160
    for (byte i=0; i<j; i++)
        Buffer1[(byte)i] = (byte)apduBuffer[5+i];
}
Run Code Online (Sandbox Code Playgroud)

它给了我错误 6F 00(这意味着到达文件结尾)。

我在用:

  • 智能卡类型 = 联系人卡
  • 使用带有 apdu 的 jcop 的 java 卡 2.2.2

applet byte apdu smartcard javacard

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

如何加快Java卡加密/解密(RSA)

我已经开发了java卡applet.it使用RSA进行加密.所以我想知道有没有办法加速java卡中的RSA加密/解密.原因是当我使用RSA 2048它需要一些额外的时间比RSA 512或1024.

谢谢SSV

encryption performance rsa javacard

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

Javacard KeyAgreement与BouncyCastle KeyAgreement不同

我的问题看起来像这样.我在卡和终端侧生成了密钥.我在终端侧有卡公钥和私钥以及终端公钥和私钥,卡侧也一样(我正在做测试,这就是为什么我把它们全部放在终端和卡上).当我为卡生成KeyAgreement(终端侧)作为私有而终端作为私有时,secters是相同的,所以生成是正常的,我得到一个24字节(192位)的秘密.当我在卡上产生秘密时(2个情况就像在终端上一样),秘密也是相同的,但它们更短--20个字节(160位).这是代码.终点站:

ECPublicKey publicKey;
ECPrivateKey privateKey;
Run Code Online (Sandbox Code Playgroud)

...

KeyAgreement aKeyAgree = KeyAgreement.getInstance("ECDH", "BC");
aKeyAgree.init(privateKey);
aKeyAgree.doPhase(publicKey, true);
byte[] aSecret = aKeyAgree.generateSecret();
Run Code Online (Sandbox Code Playgroud)

和卡方面:

eyAgreement = KeyAgreement.getInstance(KeyAgreement.ALG_EC_SVDP_DH, false);
short length = terminalEcPublicKey.getW(array, (short) 0);

keyAgreement.init(cardEcPrivateKey);
short secretlength = keyAgreement.generateSecret(array, (short)0, length, buffer, (short)0);
Run Code Online (Sandbox Code Playgroud)

bouncycastle elliptic-curve javacard diffie-hellman

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

如何将任何APDU命令从当前选定的applet传递到另一个applet?

问题:假设有一个Applet的多个实例.目前选择了一个Applet实例.是否可以将任何APDU命令从选定的Applet传递到另一个Applet实例?我在JavaCard API 3.0.4版中没有找到这样的方法.

详细信息:在研究文档"Expresspay Mobile Specifications v1.2"以实现"应用程序选择"服务时,我陷入了以下5.3.6节.由于该文件不是开源的,我引用了选择性部分:

"如果使用部分AID通过无接触界面选择Expresspay移动应用程序,则它应将SELECT命令和后续命令传递给激活的Expresspay移动应用程序实例(可能是也可能不是正在选择的应用程序)."

它声明我需要将SELECT命令从当前选定的applet传递到另一个applet(已激活!).但我没有在JavaCard API中找到任何可以将任何命令从一个applet传递到另一个applet的东西.我搜索在Oracle社区,发现这个没有回复!

编辑:假设applet A有三个实例A1,A2,A3.Applet A有一个可共享的标志对象 flag,包含AID为"active"实例,比如AID为A2.(假设flag可以预先初始化).当前选择实例A1.现在终端发送任何APDU命令,该命令将到达实例A1.A1将检查flag并找出flag包含A2的AID.因此,A1会将APDU命令传递给A2进行进一步处理.我的问题是A1实例如何向A2实例发送任何APDU命令?

apdu smartcard nfc javacard contactless-smartcard

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

(Javacard)APDU命令"选择文件"的类错误测试

那里

我不明白为什么不会出现错误'类不支持'.

首先,我的源代码和APDU命令如下

<源代码>

package SelectFileTest;
import javacard.framework.*;

public class SelectFileTest extends Applet{
    public static void install(byte[] bArray, short bOffset, byte bLength) {
        new SelectFileTest(bArray, bOffset, bLength);
    }   
    private SelectFileTest(byte bArray[], short bOffset, byte bLength){     
        register();
    }

    public void process(APDU apdu){
        byte buf[] = apdu.getBuffer();
        if (buf[1]==(byte)0xA4) {       
            if((buf[0]&0xff)!=0x00)                         // Class Check (Question)
                ISOException.throwIt((short)0xfff5);

            if(selectingApplet()) 
                {   }
            else
                ISOException.throwIt((short)0xffff);        // 6881
        }
        return ;
    }
}
Run Code Online (Sandbox Code Playgroud)

<APDU命令>

[Card-1C] <== 00 A4 04 00 07 A0000000031234
[Card-1R] ==> 9000
[Card-2C] <== …
Run Code Online (Sandbox Code Playgroud)

class apdu javacard

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

Javacard,生物识别指纹认证

我想使用Java卡就可以建立一种生物指纹认证,我发现Java卡2.2提供API( javacardx.biometry)要做到这一点,但我没有找到有关的匹配算法卡信息的任何,以及如何与使用它javacardx.biometry来开发我自己的生物指纹认证系统。

请让我定向。

最好的祝福。

authentication biometrics javacard

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

我应该使用哪个APDU命令取消当前执行的读取记录?

当主机向卡发送APDU命令(如读取命令)时,是否还有另一个命令,主机可以在执行第一个命令时发送该命令以取消先前(正在进行的)命令执行?

例如,这里Command_2被Command_3中断:

     Host        <--->        Card     
----------------------------------------------------------
 Command_1        --->             \
                                   | Processing Command_1
                 <---   Response_1 /

 Command_2        --->             \
                                   | Processing Command_2
                                   |
 Command_3        --->             x Processing interrupted
                 <---   Response_3 /

apdu smartcard javacard

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

为什么我不能从我的 JavaCard 中删除未使用的包?

我有一张Gemalto Top DL v2 java 卡。当我list查看内容时,卡中加载了很多包:

GlobalPlatformPro:> gp -visa2 -key 47454D5850524553534F53414D504C45 -list
AID: A000000018434D00 (|.....CM.|)
     ISD OP_READY: Security Domain, Card lock, Card terminate, Default selected, CVM (PIN) management

AID: A0000000620001 (|....b..|)
     ExM LOADED: (none)

AID: A0000000620002 (|....b..|)
     ExM LOADED: (none)

AID: A0000000620003 (|....b..|)
     ExM LOADED: (none)

AID: A0000000620101 (|....b..|)
     ExM LOADED: (none)

AID: A000000062010101 (|....b...|)
     ExM LOADED: (none)

AID: A0000000620102 (|....b..|)
     ExM LOADED: (none)

AID: A0000000620201 (|....b..|)
     ExM LOADED: (none)

AID: A0000000030000 (|.......|)
     ExM LOADED: (none)

AID: …
Run Code Online (Sandbox Code Playgroud)

javacard gemalto globalplatform

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

javacard 的最终安全步骤

我已经编写了我的小程序并安装在我的卡上。我应该怎么做才能防止在我的 java 卡上进一步修改或安装小程序?

我已经读到我应该更改默认密钥集。我试过 GPSShell 但我无法更改密钥!

我试过 jcManager 但它无法识别我的读者(acs 和 REINERSCT)!

我如何完成我的卡以交付用户。任何人都可以告诉我使我的卡安全的最终确定步骤吗?

谢谢

security javacard globalplatform

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

全球平台Java卡安全通道示例

我挣扎了很长时间。我需要创建从Desktop App到JavaCard的安全通道。我找到了GlobalPlatform http://www.win.tue.nl/pinpasjc/docs/apis/gp22/,但是我无法使其正常运行。我知道当我有一个安全通道(使用它)但努力创建它时该如何反应。我知道我应该在桌面应用程序上创建Key,然后以某种方式发送InitUpdate APDU,然后创建ExtAuth APDU,然后它应该可以工作吗?我知道我迷路了,因此,如果有人举一些例子或事情,我会很高兴!

apdu javacard globalplatform

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