ハッシュとデジタル署名 (Windows ストア アプリ)

ハッシュ

暗号化ハッシュ関数は任意の長さのデータ ブロックを受け取り、固定ビット サイズの文字列を返します。通常、ハッシュ関数はデータへの署名時に使われます。多くの公開キー署名操作は負荷が高いため、通常は元のメッセージに署名 (暗号化) するよりもメッセージのハッシュに署名する方が効率的です。次の手順では、一般的なシナリオを簡略化して説明します。

  • アリスはキー ペアを作り、秘密キーを秘密に保有し、公開キーを信頼された証明機関を使って公開します。
  • アリスはメッセージを作成してそれをハッシュし、秘密キーを使ってハッシュに署名します。そして (暗号化されていない) メッセージと署名をボブに送ります。
  • ボブはアリスの公開キーを取得して署名の暗号化を解除し、アリスのハッシュを取り出します。
  • ボブはアリスから受け取ったメッセージをハッシュし、自分で計算したハッシュと暗号化を解除したハッシュを比較します。ハッシュが同じであれば、アリスからのメッセージが改変されてないことをボブは確信できます。

アリスは暗号化されていないメッセージを送信したことに注目してください。ハッシュが暗号化されただけです。この手順によって保証されるのは、元のメッセージが改変されていないことと、アリスの公開キーが使われていることから、アリスの秘密キーにアクセスできるだれか、おそらくアリス本人によってメッセージのハッシュが署名されたことだけです。

HashAlgorithmProvider クラスを使って利用できるハッシュ アルゴリズムを列挙し、CryptographicHash 値を作成することができます。

デジタル署名は、秘密キーによるメッセージ認証コード (MAC) と等価の公開キーのコードです。MAC ではメッセージが転送中に改変されなかったことをメッセージの受信者が確認するのに秘密キーを使いますが、署名では秘密キーと公開キーのペアを使います。

デジタル署名

デジタル署名は、秘密キーによるメッセージ認証コード (MAC) と等価の公開キーのコードです。MAC ではメッセージが転送中に改変されなかったことをメッセージの受信者が確認するのに秘密キーを使いますが、署名では秘密キーと公開キーのペアを使います。

多くの公開キー署名操作は負荷が高いため、通常は元のメッセージに署名 (暗号化) するよりもメッセージのハッシュに署名する方が効率的です。送信者はメッセージのハッシュを作成してそれに署名し、署名と (暗号化されていない) メッセージの両方を送ります。受信者はメッセージのハッシュを計算し、署名の暗号化を解除し、暗号化を解除した署名を計算したハッシュ値と比較します。これらが一致する場合、メッセージが本当に送信者からのものであり、転送中に改変されていないことを受信者は確信できます。

署名によって保証されるのは、元のメッセージが改変されていないことと、送信者の公開キーが使われていることから、秘密キーにアクセスできる人によってメッセージのハッシュが署名されたことだけです。

AsymmetricKeyAlgorithmProvider オブジェクトを使って、利用できる署名アルゴリズムを列挙したり、キー ペアを生成またはインポートしたりできます。CryptographicHash クラスの静的メソッドを使って、メッセージに署名したり、署名を検証したりできます。

関連トピック

MAC、ハッシュ、および署名

C# または Visual Basic を使った Windows ストア アプリのためのロードマップ