APDU:"使用条件不满意" (69 85)同时计算签名

时间:2014-09-09 09:27:15

标签: certificate smartcard private-key apdu

使用智能卡金雅拓(IAS ECC),我会使用存储在智能卡上的私钥来计算签名。为此,我使用APDU命令:

// Verify PIN
00 20 00 01 04 31 32 33 34
-> 90 00

// Create a context for security operation
00 22 41 B6 06 84 01 84 80 01 12
-> 90 00

// Set the hash of the document
00 2A 90 A0 14 HASH OF DOCUMENT
-> 69 85

// Calculating the signature
00 2A 9E 9A 80
-> 69 85

我的问题如下:las两个命令返回错误代码“69 85”,意思是“使用条件不满意”。

我已经尝试了几种解决方案,但我总是得到同样的错误。怎么解决?这段代码意味着什么?

经过一些测试,我发现了一些有趣的东西。当我将“00”替换为“10”时,智能卡会返回不同的响应:

// Create a context for security operation
00 22 41 B6 06 84 01 84 80 01 12

// Verify PIN
00 20 00 01 04 31 32 33 34

// Calculating the signature (I replace "00" by "10")
10 2A 9E 9A 23 30 21 30 09 06 05 2B 0E 03 02 1A 05 00 04 14 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 12 13 14 15

我不知道这是不是很好的解决方案,因为智能卡会返回“90 00”。但是,它会返回我签名的内容!

感谢您的帮助!

祝你好运

1 个答案:

答案 0 :(得分:0)

您正在获得SW 6985

// Set the hash of the document
00 2A 90 A0 14 HASH OF DOCUMENT
-> 69 85

由于您尚未在当前安全环境中设置正确的上下文。

让我在下面解释一下

首先,您执行了成功的验证PIN命令

// Verify PIN
00 20 00 01 04 31 32 33 34
-> 90 00

然后你执行了MSE SET命令,在那里你设置了安全上下文。为此你必须理解SE是如何工作的(请参阅IAS ECC v1.01第3.5节)。

在个性化时,Personaliser代理在卡内创建SDO(安全数据对象)。在SE(安全环境)中以CRT(控制参考模板)的形式提及对该SDO的引用。

// Create a context for security operation
00 22 41 B6 06 84 01 84 80 01 12
-> 90 00

一般来说,即使SDO参考错误,MSE SET命令也将始终返回SW 900。因为它只在模板错误时返回SW 6A80而不是在引用错误时返回(SDO参考在标签84中传递)

之后你执行了PSO HASH命令

// Set the hash of the document
00 2A 90 A0 14 HASH OF DOCUMENT
-> 69 85

其中卡返回SW 6985(使用条件不满意),这表示用于计算Hash的算法和SDO参考可能错误。由于在MSE SET命令期间发送的SDO引用不可用,因此可能发生这种情况

检测来自MSE SET的错误可能很棘手,因为它返回SW 9000。 对于这些类型的情况,您必须仔细检查个性化文件,并且需要匹配关于SDO参考和支持的ALGO的MSE SET命令。

放置默认上下文(例如,加密算法或 安全操作)进入当前SE,以便很少交换MSE设置命令。