Я пытаюсь выполнить активную проверку подлинности карты на PIV-совместимой смарт-карте. Подробнее см. Приложение A.2 в этом документе .
У меня есть открытый ключ из соответствующего сертификата X.509. Мне нужно отправить карте случайные данные, которые она подпишет своим закрытым ключом, а затем мне нужно проверить подпись открытым ключом.
Пример в документе, который я разместил, отмечает, что данные, которые они отправляют для подписи, «кодируются в соответствии со схемой заполнения подписи PKCS # 1 v1.5». Как мне кодировать мои случайные данные, как это? Я думал, что заполнение данных было частью процесса подписания RSA.
// Generate random data
byte[] randomData = new byte[128];
Random random = new Random();
random.NextBytes(randomData);
// Hash the random data
SHA1Managed sha1 = new SHA1Managed();
byte[] hash = sha1.ComputeHash(randomData);
// Send the hash to the Smart Card and get back signed data
byte[] signature = SendToSmartCardForSignature(hash);
// Verify the data and the signature match using the public key
RSACryptoServiceProvider rsa = smartCardCertificate.PublicKey;
bool verified = rsa.VerifyData(randomData, CryptoConfig.MapNameToOID("SHA1"), signature);
// verified is false...why?