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?