【问题标题】:encryptData GlobalPlatform加密数据全球平台
【发布时间】:2012-10-04 05:46:46
【问题描述】:

我正在向小程序发送一个没有 CMAC(CLA 字节 = 0x80)的 APDU。我正在使用 SCP02 i55。我需要使用SecureChannel.encryptData() 函数加密数据。我不想手动加密它,我需要 Global Platform 加密数据,然后我将使用正确的会话密钥对其进行解密(我确信它们是经过精心计算的)。

我正在使用以下代码来加密 APDU 缓冲区。

byte buffer = apdu.getBuffer();
buffer[0] = 20;
short lc = chan.encryptData(buffer, (short) 0, (short) 1);
apdu.setOutgoingAndSend((short) 0, lc);

这会引发安全状态不满足异常 (0x6982),在该异常中,我期望响应 APDU 带有加密 20。

我做错了什么?

【问题讨论】:

  • 信息太少了。您使用的是哪种安全消息传递协议?你如何加密?您自己计算会话数据加密密钥吗?
  • 因为 bra_racing 没有返回其他信息而被否决。
  • 抱歉没有接听,但我正在度假,无法上网。我正在使用 scp02,i = 55 我不想手动加密,我需要 globalplatform 加密数据,然后我将使用正确的会话密钥对其进行解密(我确信它们计算得很好)非常感谢
  • @martijno 好的,我要写一个例子。我有一个向我的小程序发送 APDU 的主类。当小程序接收到 APDU 时:buffer[ISO7816.OFFSET_CDATA] = 20;apdu.setOutgoingAndSend((short) 0, (short) 1);
  • 对不起@martijno,正确的代码是:byte buffer = apdu.getBuffer();buffer[ISO7816.OFFSET_CDATA] = 20;short lc = chan.encryptData(buffer, (short) 0, (short) 1);apdu.setOutgoingAndSend((short) 0, lc);谢谢

标签: encryption javacard


【解决方案1】:

您忘记包装状态字节。来自标准:

小程序负责在响应数据的末尾附加预期的状态字节,以便它们受到安全消息的保护;

【讨论】:

  • 谢谢@owlstead,你是对的,但我无法加密,因为我的卡不支持 R-ENCRYPTION,在这里link 我们可以看到使用@987654322 是必要的@方法。
  • 这很有趣,因为我不认为我是对的......我想我把它和 wrap 混淆了。我还认为您的状态字不是在加密呼叫期间生成的,但我必须查一下。也许你需要在调用 encrypt 之后调用 wrap 方法?
  • 你看到关于这个问题的其他评论了吗?注意对cardmanager的认证是不够的。
猜你喜欢
  • 1970-01-01
  • 2018-11-06
  • 1970-01-01
  • 1970-01-01
  • 2012-09-02
  • 1970-01-01
  • 2020-02-21
  • 2012-01-25
  • 1970-01-01
相关资源
最近更新 更多