web-dev-qa-db-ja.com

デジタル署名プロセスはどのように機能しますか?

私はデジタル署名検証のプロセスを理解しようとしていますが、私の本では説明がまったくわかりません。

Aがデジタル署名を使用してBにメッセージを送信する場合、プロセスは明らかに次のようになります。

  • 送信されるメッセージには、ハッシュを作成するためにパブリックハッシュアルゴリズムが適用されています
  • ハッシュはAの秘密鍵を使用して暗号化され、メッセージにも追加されます。これも暗号化されます。この暗号化されたハッシュがデジタル署名です
  • 次に、BはAの公開鍵を使用してハッシュを復号化します
  • 次に、元のメッセージが復号化され、同じハッシュアルゴリズムを実行してハッシュが生成されます。
  • 2つのハッシュが同じ場合、メッセージは認証され、それ以外の場合は認証されません。

まず、この説明は正しいですか?

次に、BはどのようにしてAの公開鍵を使用してハッシュを復号化できますか?公開鍵の目的は、データを暗号化できるようにすることです。

なぜAは秘密鍵で何かを暗号化するのですか? Bにメッセージを送信する場合、AはBの公開鍵を使用しませんか?

Aが最初にプライベートキーを使用して最初のハッシュを作成した場合(AのプライベートキーはBに知られていません)、元のメッセージに同じハッシュアルゴリズムを適用して同じハッシュを作成するにはどうすればよいですか?

この説明が正しくない場合、どこが間違っていますか?

3
Logan545

暗号化と(デジタル)署名は異なる PKIのアプリケーションです。

最初に(唯一)最も関連する概念:

  • 暗号化(サードパーティにコンテンツが表示されないようにするため):受信者の公開鍵(B-PubKey)を使用します。コンテンツを暗号化します。それはあなたから生まれたので、あなたは内容を知っています。受信者は秘密鍵(B-PvtKey)を使用して復号化し、コンテンツを見ることができます。
  • デジタル署名(あなたが署名したときに、ドキュメントがまったく同じであるかどうかを誰もが確認できるように、そしてあなただけが署名したことを確認してください) :送信者の秘密キー(A-PvtKey)を使用してハッシュを暗号化します。 内容ではありません。

あなたの例では、問題の1つは、両方を組み合わせたことです。通常のデジタル署名プロセスには、

  1. よく知られている(パブリック)ハッシュアルゴリズムを使用して、メッセージプレーンテキストをハッシュします。
  2. 送信者の(A-PvtKey)秘密鍵で暗号化します。
  3. 暗号化されたハッシュをメッセージのプレーンテキストに追加して送信/保存/ ...
  4. レシーバーは、1つ/複数/任意にすることができます。受信者のキーは使用されません。
  5. 文書を検証したい人は、逆のプロセスをたどります。つまり、
  6. 暗号化されたハッシュをメッセージから分離する
  7. 送信者の公開鍵(A-PubKey)を使用して復号化します(通常、信頼できる/合法的に受け入れ可能なCAが発行したデジタル署名証明書から)。
  8. メッセージプレーンテキストから個別にハッシュを生成し、上記の#7からの復号化されたハッシュと比較します。

BがA-PubKeyでハッシュを復号化できたことは、否認防止の技術的側面を確立します。ハッシュが同じである場合(その場合)、ドキュメントの整合性が確立されます。

これらのイラストは、ウェブで無料で入手できる多数の記事/ビデオで見ることができるはずです。

4
Sas3

ハッシュプロセスと暗号化プロセスは2つの異なるものです。

メッセージを暗号化する方法は2つあります。1)送信者の秘密鍵を使用して暗号化し、受信者が送信者の公開鍵を使用して復号化します。2)受信者の公開鍵を使用して暗号化し、受信者が秘密鍵を使用して復号化します。

ハッシュ部分...メッセージのハッシュは、送信者がメッセージをハッシュして結果を送信する別のプロセスです。受信者はまた、復号化されたメッセージをハッシュして、結果を比較します。一致がある場合、受信者は復号化されたメッセージが検証されたことを確認します。

1
Kc0pah

この説明は正しいです。

編集:技術的な操作を明確にするためにこれを追加します署名付きメッセージを送信するときは、プレーンテキストと、プレーンテキストのハッシュ出力である暗号文のブロックを送信しています。ハッシュ出力は改ざんから保護する必要があるため、秘密鍵で暗号化されます。適切に復号化できるのは公開鍵だけです。次に、受信者は平文に対してハッシュ関数を実行し、メッセージに添付した復号化されたハッシュ出力と出力を比較できます。両方が一致する場合、メッセージは「本物」と見なすことができます。 編集の終了

あなたを混乱させているように思われる点は、秘密鍵と公開鍵の役割です。これらのキーは機能的に同じです。対称暗号化では、2つのキーを使用して平文を暗号化および復号化します。これは、あるキーから別のキーへの一方向の関数ですが、いずれかの方向です。

これは、暗号化の技術的で数学的な部分が、公開鍵インフラストラクチャの管理/ポリシー部分に物事を引き渡すところです。鍵ペアが生成されると、一方の鍵は「秘密」に指定され、もう一方は「公開」に指定されます。どのキーがどの用途に使用されるかは関係ありません。それらは交換可能です。アルゴリズムに関する限り(少なくとも、ある意味で機能的な部分は...私は技術的な数学の部分では大きくなく、理論だけです)。

理論的には自分だけがその鍵にアクセスできるため、秘密鍵で署名します。それはあなたがメッセージを送った「保証」です。公開鍵は理論的には誰でも誰でも利用できます。メッセージが署名/暗号化されていて、その公開鍵が偶然にそれを検証/復号化している場合、秘密鍵がメッセージに署名/暗号化したことはかなり確実です。

したがって、秘密鍵を使用して送信することは、暗号化の「メッセージを隠す」という観点からは実際には効果的ではありませんが、「メッセージの信頼性/発信元の保証」からは非常に効果的です。

これが、PKIと対称暗号化で双方向のプライベートな会話をしたい場合、bothの両当事者が独自の鍵ペアを必要とする理由です。

1
0xSheepdog