署名の検査
更新 : 2007 年 11 月
データが特定の人によって署名されたかどうかを検査するためには、次の情報が必要です。
データに署名した人の公開キー
デジタル署名
署名されたデータ
署名者が使用したハッシュ アルゴリズム
RSAPKCS1SignatureFormatter クラスによって作成された署名を検査するには、RSAPKCS1SignatureDeformatter クラスを使用します。RSAPKCS1SignatureDeformatter クラスには、署名者の公開キーを与える必要があります。公開キーを指定するには、剰余値と指数部の値が必要になります(これらの値は、公開キーと秘密キーのペアを作成した人が提供する必要があります)。まず、署名を検査する公開キーを保持するための RSACryptoServiceProvider オブジェクトを作成します。次に、RSAParameters 構造体を初期化して、公開キーを指定する剰余値と指数部の値を設定します。
RSAParameters 構造体の作成を次のコード例に示します。Modulus プロパティには ModulusData というバイト配列の値が設定され、Exponent プロパティには ExponentData というバイト配列の値が設定されます。
Dim RSAKeyInfo As RSAParameters
RSAKeyInfo.Modulus = ModulusData
RSAKeyInfo.Exponent = ExponentData
RSAParameters RSAKeyInfo;
RSAKeyInfo.Modulus = ModulusData;
RSAKeyInfo.Exponent = ExponentData;
RSAParameters オブジェクトを作成したら、RSACryptoServiceProvider クラスの新しいインスタンスを初期化して、RSAParameters に指定された値を設定できます。次に、RSAPKCS1SignatureDeformatter のコンストラクタに RSACryptoServiceProvider を渡してキーを転送します。
このプロセスを説明する例を次に示します。この例では、HashValue と SignedHashValue は離れた場所にいる人から与えられたバイト配列です。離れた場所にいる人は SHA1 アルゴリズムを使用して HashValue に署名し、デジタル署名 SignedHashValue を生成します。RSAPKCS1SignatureDeformatter.VerifySignature メソッドは、デジタル署名が有効であること、およびそのデジタル署名を使用して HashValue が署名されたことを検査します。
Dim RSA As New RSACryptoServiceProvider()
RSA.ImportParameters(RSAKeyInfo)
Dim RSADeformatter As New RSAPKCS1SignatureDeformatter(RSA)
RSADeformatter.SetHashAlgorithm("SHA1")
If RSADeformatter.VerifySignature(HashValue, SignedHashValue) Then
Console.WriteLine("The signature is valid.")
Else
Console.WriteLine("The signture is not valid.")
End If
RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
RSA.ImportParameters(RSAKeyInfo);
RSAPKCS1SignatureDeformatter RSADeformatter = new RSAPKCS1SignatureDeformatter(RSA);
RSADeformatter.SetHashAlgorithm("SHA1");
if(RSADeformatter.VerifySignature(HashValue, SignedHashValue))
{
Console.WriteLine("The signature is valid.");
}
else
{
Console.WriteLine("The signature is not valid.");
}
上記のコード片は、署名が有効な場合は、"The signature is valid"、署名が無効な場合は、"The signature is not valid" と表示します。