【发布时间】:2012-05-03 15:46:46
【问题描述】:
我希望有人可以通过PIV smart card standard 帮助我。
我想通过使用之前生成的 RSA 1024 位模数数字签名密钥 0x9C 签署 PKCS#1 填充随机数来验证智能卡。这是我的测试应用程序的输出:
Requesting Signature
Sending: 0087069C867C84820081800001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00CB441C4A656E071F1FB9F31BC6AB1824324FB42780
Error: (6A80) Incorrect parameters in command data
这是细分:
00 - Not chained (chaining not required because message does not exceed max length)
87 - GENERAL AUTHENTICATE
06 - RSA 1024 Algorithm
9C - Digital Signature Key
86 - Length of data field
7C - Dynamic Authentication template identifier
84 - Length of dynamic authentication template
82 - Response
00 - Response length 0 (Response requested)
81 - Challenge
80 - Challenge length 128
0001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00CB441C4A656E071F1FB9F31BC6AB1824324FB427 - PKCS #1 padded 20-byte Nonce (Padded with OpenSSL RSA_padding_add_PKCS1_type_1)
80 - Expected response length (128 bytes)
我还使用所有不同的密钥(已经成功生成所有密钥)并使用链式消息与单部分消息运行测试。 进一步查看test data。
【问题讨论】:
-
您确实在 NONCE 周围执行了 PCKS#1 填充,但您确定不需要内部哈希结构吗?也许只需执行 H(NONCE) 并使用 PKCS#1 标准中定义的结构,您可以在解密后简单地比较 H(NONCE) 与 H'(NONCE) 而不是 NONCE 与 NONCE' 来验证身份验证。
-
我不太明白。你是说我应该在填充之前在我的 Nonce/Hash 周围应用“DigestInfo”DER 编码吗?如果是这样,这也不起作用。你是说我应该在填充之前对我的随机数进行哈希处理吗?因为我的 nonce 和 sha1 哈希都是 20 个伪随机字节,所以这没有区别。
-
"GENERAL AUTHENTICATE 命令应与 PIV 身份验证密钥('9A'、'9B'、'9E')一起用于向客户端应用程序验证卡或卡应用程序(内部验证) " 在我看来,您同时使用了错误的键 和 错误的 APDU。为什么需要密钥 0x9C,因为规范清楚地指出了其他密钥?
-
来自 NIST 标准:“GENERAL AUTHENTICATE 命令可用于生成签名。预签名哈希和填充(如果适用)是在卡片之外计算的。PIV 卡应用程序接收哈希值原始消息,应用私有签名密钥(密钥引用'9C'),并将生成的签名返回给客户端应用程序” - 我已经蛮力尝试了每个密钥。您认为我的 APDU 有什么问题?
标签: cryptography rsa smartcard fips nonce