Я пытаюсь выполнить аутентификацию активной карты на смарт-карте, совместимой с 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?