Cryptography PIV智能卡-常规身份验证-立即签名

Cryptography PIV智能卡-常规身份验证-立即签名,cryptography,rsa,smartcard,fips,nonce,Cryptography,Rsa,Smartcard,Fips,Nonce,我希望有人能帮我解决这个问题 我想通过让智能卡使用先前生成的RSA 1024位模数字签名密钥0x9C对PKCS#1填充的nonce进行签名来验证智能卡。以下是我的测试应用程序的输出: Requesting Signature Sending: 0087069C867C84820081800001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

我希望有人能帮我解决这个问题

我想通过让智能卡使用先前生成的RSA 1024位模数字签名密钥0x9C对PKCS#1填充的nonce进行签名来验证智能卡。以下是我的测试应用程序的输出:

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)
我还使用所有不同的键(已经成功生成了所有键)运行测试,并使用链式消息和单部分消息。
进一步查看。

我的智能卡上加载的PIV卡小程序有一个错误。它不会对任何以0x00开头的数据进行签名。如果将0x00更改为任何其他值(只要整数形式的数据小于RSA算法要求的整数形式的模数),则它将成功签名。因此,这当然意味着这些卡不能签署任何标准PKCS1填充数据:(


感谢您的帮助

您确实在NONCE周围执行了PCK#1填充,但是您确定不需要内部哈希结构吗?可能只需执行H(NONCE)并使用PKCS#1标准中定义的结构,您就可以简单地比较H(NONCE)和H'(NONCE)在解密后用NONCE代替NONCE来验证身份验证。我不完全理解。你是说我应该应用“DigestInfo”吗填充前对我的Nonce/Hash进行DER编码?如果是,这也不起作用。你是说我应该在填充前对Nonce进行哈希吗?因为我的Nonce和sha1哈希都是20个伪随机字节,这没有什么区别。“通用身份验证命令应与PIV身份验证密钥一起使用('9A','9B','9E'))向客户端应用程序验证卡或卡应用程序(内部验证)”在我看来,您使用的密钥和APDU都不正确。为什么需要密钥0x9C,因为规范明确指出了其他密钥?来自NIST标准:“通用身份验证命令可用于生成签名。预签名哈希和填充(如果适用)在卡外计算。PIV卡应用程序接收原始消息的哈希值,应用私有签名密钥(密钥引用'9C'),并将生成的签名返回给客户端应用程序。”“-我已经用蛮力试过了所有的钥匙。你认为我的APDU有什么问题吗?你现在应该可以接受你的答案了。真糟糕,是这种错误。”。