标签: smartcard

Java SmartCard IO上的奇怪无效CLA命令(6E 00)

我正在编写一个智能卡应用程序,并在成功选择带有AID的应用程序后,发送获取处理选项

我得到6E 00作为响应 - 无效的CLA命令.这是发送命令并接收响应的代码的一部分:

ResponseAPDU rapdu = sendCommand(new byte[]{(byte)0x80, (byte)0xA8, (byte)0x00, (byte)0x00, (byte)0x02, (byte)0x83, (byte)0x00, (byte)0x00});

private ResponseAPDU sendCommand(byte[] apdu) throws CardException{
    CommandAPDU capdu = new CommandAPDU(apdu);         
    ResponseAPDU rpd = channel.transmit(capdu);

    return rpd;
}
Run Code Online (Sandbox Code Playgroud)

我正在使用相同的命令使用Jaccal库读取卡片并且它工作正常,但由于它使用了外部dll文件,因此jaccal不适合我的应用程序.我不知道为什么它会给我这种回应.

smartcard javacard

7
推荐指数
2
解决办法
2656
查看次数

需要有关加密算法的建议

为这个问题的论文性质道歉.我一直在努力解决这个问题,并试图用我具体的问题总结我对所需内容的理解.

这个有关从欧洲DTCO公司卡读取数据的问题中,我得到的建议涉及到下面屏幕截图中的算法(来自本文件的附录11 ),但我不清楚如何执行这两个突出显示的步骤.

  1. 我看到Sign是包含证书的数组的一部分,但用公钥打开它意味着什么?我可以通过从卡中读取CA_Certificate并使用CAR 发出管理安全环境 APDU (参见算法的第一步)来成功执行该步骤.但是通过这种方式选择了公钥,我在开放的Sign步骤中使用了哪些公钥.MSE选择一个,但我没有; 我只有来自ERCA的欧洲公钥,但是我在卡中选择了相同的密钥吗?我没有任何私钥,但我需要它们.

  2. 在检查Hash(C')= H'的步骤中,我应该如何计算哈希?进行加密/解密/散列似乎有很多不同的方式(格式正确吗?)我很困惑.

在此输入图像描述

我真正需要能够读取我需要的数据是使用EXTERNAL AUTHENTICATE进行身份验证,紧接在返回8字节质询的GET CHALLENGE之后.我认为我需要用它来计算EXTERNAL AUTHENTICATE的密码.我在下面找到了示例代码(请参阅完整帖子),虽然它看起来像是某种类似C语言的脚本语言(我正在使用C#),但对于不同类型的智能卡,它似乎与我必须使用的非常类似.

//
// Authenticate against CardOS card
//

var card = new Card(_scsh3.reader);
var crypto = new Crypto();

var key = new Key();
key.setComponent(Key.DES,
    new ByteString("01010101010101010101010101010101", HEX));

// Get challenge
var challenge = card.sendApdu(0x00, 0x84, 0x00, 0x00, 8, [0x9000]);

// Crypto.DES_MAC_EMV is a …
Run Code Online (Sandbox Code Playgroud)

c# security cryptography smartcard

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

使用智能卡的SSL客户端身份验证在Java 6中工作,但在Java 7中失败

以下代码使用PKCS#11设备(智能卡)创建客户端身份验证的SSL上下文.这一切都适用于Java 6:

// Configure the SunPkcs11 provider
String pkcs11config;
pkcs11config = "name = Cryptoki";
pkcs11config += "\nlibrary = /SCDriver/libbit4ipki.dylib";
InputStream confStream = new ByteArrayInputStream(pkcs11config.getBytes());
SunPKCS11 sunpkcs11 = new SunPKCS11(confStream);
Security.addProvider(sunpkcs11);

// Specify keystore builder parameters for PKCS#11 keystores
Builder scBuilder = Builder.newInstance("PKCS11", sunpkcs11, new KeyStore.CallbackHandlerProtection(new PasswordRetriever()));

// Create and init KeyManagerFactory
KeyManagerFactory factory = KeyManagerFactory.getInstance("NewSunX509");
factory.init(new KeyStoreBuilderParameters(scBuilder));

// create and init ssl context
m_ssl_context = SSLContext.getInstance("TLS");
m_ssl_context.init(factory.getKeyManagers(), new TrustManager[] {new PkTrustManager()}, null);      
SSLContext.setDefault(m_ssl_context);
Run Code Online (Sandbox Code Playgroud)

PkTrustManager仅仅是和"空"类,服用任何服务器/客户端证书为好,并PasswordRetriever刚刚经历一个对话框,询问密码(要求我发布这些源代码).在Java 7上,我在ssl上下文的SSL握手期间得到以下异常:

java.security.InvalidKeyException: …
Run Code Online (Sandbox Code Playgroud)

authentication ssl smartcard pkcs#11 java-7

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

使用.Net技术开发智能卡读卡器

有谁知道如何监控智能卡的存在并读取卡的UID值?

是的我在网上尝试过很多例子

适用于.NET的智能卡框架

PCSC锐

监控智能卡读卡器

但不知道该怎么做.我可以检测卡的存在并且可以单独获取UID,但不知道如何在我的应用程序中组合它们:(.

帮我

c# smartcard winscard

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

NPAPI下降后从Chrome读取智能卡

这篇铬博客称Chrome正在逐步推出NPAPI.

在我目前的项目中,我需要访问比利时的E-ID卡来获取数据(不是身份验证).
我发现的所有文档和示例都使用Java插件.这将在未来变得不可能.

有人知道如何处理这个问题吗?

google-chrome npapi smartcard

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

JavaCard - 基于GF(2 ^ n)的ECC的纯软件实现

我有NXP的智能卡支持ECC over GF(p)并且不支持ECC over GF(2 ^ n).

在我的项目中,我需要使用这种特殊类型的智能卡(已经使用了数千个实例).但是,我需要在sect193r1上添加EC签名验证,这是GF(2 ^ n)上的曲线.

对我来说,性能不是问题.这可能需要一些时间.签名验证不涉及任何私钥,因此安全性和密钥管理也不是问题.不幸的是,我必须验证智能卡内的签名,而不是配备智能卡读卡器的设备.

有什么解决方案吗?是否存在基于GF(2 ^ n)的EC加密的纯软件JavaCard实现的任何现有源代码?

security cryptography smartcard javacard

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

使用Javascript读取智能卡证书

我需要知道是否可以使用Javascript读取智能卡证书.NodeJS可以解决问题.我探索并发现了NodeJS插件

xml-crypto
Run Code Online (Sandbox Code Playgroud)

对于数字签名xml,它工作得很好,但我写了正确的路径到我的光盘上的certificate.pem(它不在智能卡上).那么如何使用智能卡呢?

javascript smartcard

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

Java Card小程序EEPROM与RAM测试

Java Card小程序中的一个典型错误是将持久性内存用于应该在RAM中的临时变量.

这些错误可能会减慢applet的速度并导致一些严重的问题(例如EEPROM损坏的症状).

单元测试很难揭示这些错误.单元测试将applet作为黑盒子访问,他们所能做的就是检查给定输入的输出.当然,它们可以测量时间并报告可疑的慢速命令,但是覆盖持久存储器中的单个字节几乎与覆盖RAM中的单个字节的时间相同.

有没有办法摆脱这些错误(编码时要小心)?我可以以某种方式检测EEPROM更改以及在处理特定APDU时完成了多少次更改?

当然,一个好的模拟器可以完成这项工作.但是,JCardSim(www.jcardsim.org)和恩智浦JCOP工具似乎都远远无法报告EEPROM使用情况统计数据.

你知道其他任何可以帮助我的工具或测试技术吗?

simulation debugging unit-testing smartcard javacard

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

获取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
查看次数

通过Android USB主机与智能卡读卡器通信

我正在尝试向智能卡发送命令.我使用Gemalto IDBridge CT30(PC TWIN阅读器)和通过USB连接到Android设备的IDBridge K30.

我尝试通过USB发送SELECT APDU命令:

boolean claim = openedConnection.claimInterface(usbInterface, true);
byte[] data = new byte[]{
        (byte) 0x00, (byte) 0xA4, (byte) 0x04, (byte) 0x0C,
        (byte) 0x07, (byte) 0xA0, (byte) 0x00, (byte) 0x00,
        (byte) 0x01, (byte) 0x18, (byte) 0x45, (byte) 0x4E};
Run Code Online (Sandbox Code Playgroud)

之后我收到了答案:

final int dataTransferred = this.openedConnection.bulkTransfer(endPointOut, data, data.length, TIMEOUT_MS);
if(!(dataTransferred == 0 || dataTransferred == data.length)) {
    throw new Exception("Error durring sending command [" + dataTransferred + " ; " + data.length + "]"); //$NON-NLS-1$ …
Run Code Online (Sandbox Code Playgroud)

usb android smartcard pcsc smartcard-reader

7
推荐指数
2
解决办法
2842
查看次数