web-dev-qa-db-ja.com

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

デジタル署名がどのように検証されるのか理解できません。デジタル署名がメッセージに添付され、送信者から受信者に送信されることを知っています。次に、受信者は公開鍵を使用して検証します。ここに私の質問があります:

  • この公開鍵はどこから来たのですか?
  • そしてそれはどのように受信機に配信されますか?
  • 特定のデジタル署名の公開鍵はどのように識別されますか?
  • このプロセスにおける証明機関の役割は何ですか?
58
n92

わかりました。これまでのところ、答えは基本的に順調ですが、質問が寄せられたら、それを取り上げてみましょう。

* where did this public key come from?

公開鍵は、非対称暗号化で使用される鍵ペアの一部です。そこには多くの暗号化アルゴリズムがありますが、数学的にリンクされている公開鍵と秘密鍵に要約されます。これらは次のように使用できます。

暗号化(公開鍵、元のデータ)->暗号化されたデータ

Decrypt(秘密鍵、暗号化されたデータ)->元のデータ

秘密鍵と公開鍵の間の数学的関係の性質は、暗号化アルゴリズムに関連しており、すぐにMath Overflowの良いトピックになります。 :)

重要な部分は、それらが一緒に生成されたキーのペアであることです。

次に、デジタル署名を処理するために、送信者は以下を送信します。

  • 元のデータ、暗号化されたデータ、公開鍵、および署名の検証方法に関する情報(使用されているアルゴリズムなど)

ベリファイアは上記の復号化操作を実行し、その出力を元のデータと比較します。 2つが同じである場合、送信者だけが秘密鍵を持っているため、メッセージが改ざんされなかったことがわかり、公開鍵から秘密鍵を判別する合理的な方法がありません。

これを少し狂わせて...

* and what is the role of the certification authority in this process?

誰でも秘密鍵と公開鍵のペアを作成できます。今日のツールキットを考えると、これはかなり簡単な作業です。そのため、公開鍵と、説明した暗号化されたデータと署名を提供することは、50ドルでStaplesで印刷した名刺を提供するのと同じくらい信頼できるものです。私が言っているとおりの私であり、したがって信頼に値するものであることを本当に信頼するには、誰かが私の身元を承認する必要があります(運転免許証の確認など)。

それが認証局の仕事です(略してCA)。 CAには独自のキーペアがあり、その秘密キーを使用してキーホルダーのデジタル証明書に署名します。証明書には公開鍵と、この秘密鍵を持っている人や物についての情報が含まれています。これは、政府が私に素敵なIDを作成して、特別な機器なしでは簡単に偽造することができないようなものです。政府を信頼しているので、私の情報を信じることができます。

通常、システムが署名を検証するとき、暗号化されたデータが元のデータと一致するかどうかだけでなく、証明書が公開鍵の所有者も、信頼できるソースによって適切に署名されています。通常、CAシステムは、ルートに由来するCAのチェーンで編成されます。より有名なルートCAのコレクション(自己署名、つまり独自の秘密鍵で署名されている)は、ブラウザーで見つけることができます。

安全性の高いシステムでは、最大で最新のステータス情報の追加チェックを実行できます。それはすべて、送信者のステータスを確実に確認することがいかに重要であるかに依存します。

* and how is it (the public key) distributed to the receiver?

ここで再確認します-証明書の受信者または鍵の所有者を意味しますか?

送信者(キーホルダー)は、さまざまな方法でキーペアと証明書を取得できます。最も簡単な方法は、それらをローカルに作成し、CAに適用して証明書を取得し、公開鍵データを送信することです。他の場合では、キーは中央で作成され、安全なチャネルによってキーホルダーに配布されます。

ほとんどの署名の場合、秘密鍵が公開される可能性を制限するため、鍵ペアは鍵保有者によって作成されます。

署名が作成されて受信者に送信されるとき、公開鍵もメッセージに添付されるのが一般的です(たとえば、この標準はXMLDSIGで、要素の1つのオプションフィールドはデジタル証明書であり、公開鍵)。

帯域幅が問題となる場合、公開鍵は、従業員データベースや、多くの場合、Active Directoryや他のLDAPサーバーなどの中央リポジトリに保持される場合があります。次に、署名は送信者のIDを参照でき、検証プロセスには、公開鍵を取得するためのリポジトリへの要求を含めることができます。

* how the public key is identified for the specific digital signature?

通常はデジタル証明書を使用します。

送信者がデジタル署名を作成しようとするとき、彼は通常、どの目的にどのキーペアを使用できるかに関するルールを持っています。 X509証明書標準では、証明書は、証明書によって記述されたキーペアの特定の目的を詳しく説明するキー使用法フィールドを識別します。これらの用途の1つはたまたまデジタル署名であり、多くのソフトウェアシステムでは、証明書にその設定がないと署名を作成できません。

CAは実際に、証明書に署名する前にこれらの設定を決定します。多くのセキュリティポリシーでは、特定のキー使用設定を特定の認証プロセスなしでは付与できないため、これを解明する責任はCAとその担当者(通常はRA、登録機関)にあります。

何らかの理由で、デジタル証明書を使用しないシステムを使用している場合、他の方法でどのキーペアを判別できるかが考えられます。最終的には、適切なセキュリティポリシーと、署名を必要とする特定のアクティビティに適切と見なされるものによって決まります。

37
bethlakshmi

あなたが言及する問題(どのように公開鍵を配布するのですか?)は、公開鍵インフラストラクチャが解決しようとしているものであり、PKIは本質的には、証明機関の集まりです。

簡単な設定では、誰もが公開できる鍵の中央ディレクトリができます。公共の公園の真ん中にあり、公開鍵が刻印された大きな大理石のスラブを想像してください。彫刻されたものの上に単純にペイントすることはできないので、誰でもそれを見て、それが「本物」であることを確認してください。

公共の部分はインターネット全体とうまく接続されておらず、コンピュータは一部の情報が刻まれていることを「見る」ことができないため、「正しいことが保証されます」。また、そこには数十億のキーホルダーがいる可能性があり、かなり大きな石片が必要になります。したがって、コンピュータ化された世界全体への翻訳は、証明書です。

証明書は、従来の形式で以下を含む小さな構造です。

  • identity(鍵の所有者の名前);
  • a公開キー(その人が所有しているとされる);
  • a(== --- ==)Certification Authorityによって前の2つの部分に対して計算されたdigital signature.

CAの役割は、正確には、証明書を発行すること、つまり証明書に署名することです。証明書は、特定の公開鍵を含む大きな大理石のスラブの一部と考えることができます。公開鍵を使用するには、まずこれに正しい情報が含まれていることを確認する必要があります。これを行うには、CAの公開鍵を使用して、証明書の署名を検証します。その署名が正しい場合、CAdidがその証明書に署名していることがわかります。これは、CAが鍵の所有者のID(それらを使用した1回限りの物理プロトコル(たとえば、キーの所有者がIDを示した)を通じて、証明書内の公開キーが実際に識別された所有者に属していることを "確信"させることができます。

これで、問題はまったく解決されなかったと言えます。移動しただけです。証明書を確認するには、CA公開鍵を知っている必要があります。 それキーをどうやって知っていますか?答えは数字にあります。特定のCAが複数の証明書に署名する場合があり、おそらく数百万の証明書に署名します。したがって、たとえば、全世界の証明書を発行する100のCAが存在する可能性があります。 100の公開鍵を知っていることで、any証明書を検証できる可能性があります。他の世界では、問題を移動しただけでなく、集中それ:私たちは数十億の公開鍵の配布の問題を数百のそれらの配布の問題に変えました。

そして、lo!これは、HTTPS Webサイトで正確に行われる方法です。ブラウザーとWebサーバー間の接続の初期段階で、サーバーは自分の証明書を送信します。次に、ブラウザーは証明書を、ハードコーディングされたCA公開鍵のリスト(ブラウザーまたはオペレーティングシステムベンダーの好意で含まれている)と照合して検証します。ブラウザーが証明書を検証すると、ブラウザーはサーバーの公開鍵を認識し、それを使用してサーバーとの機密トンネルを確立します。

27
Thomas Pornin

デジタル署名は通常、2段階のプロセスで作成されます。最初のステップは、データに対して安全なハッシュアルゴリズムを使用することです。 SHA-2アルゴリズムはその一例です。 2番目のステップは、結果の出力を秘密署名鍵で暗号化することです。

したがって、署名が公開鍵によって検証されると、メッセージに一致するハッシュに復号化されます。そのハッシュは、秘密署名鍵で暗号化されている場合にのみ、公開鍵を使用して復号化できます。

公開鍵は、鍵ペアの所有者によって作成されます。認証局は公開鍵の証明書に署名します。サーバーの所有者はその署名付き証明書をインストールします。 SSL(参照していると思います)では、認証局からの鍵と署名を含む証明書が、接続しているサーバーから渡されます。ソフトウェアは、接続先のサイトが証明書のデータと一致することを確認し、署名を認証局のキーと照合して検証します。認証局は署名に鍵を使用し、サーバーは暗号化に鍵を使用します。

12
Jeff Ferland

公開鍵とは何か知っていますか?

何かをbobに暗号化したい。したがって、彼の公開鍵が必要になります。あなたはインターネットでそれを探しに行きますが、あなたが手に入れた公開鍵が本当に彼のものであることを確信することはできません。

したがって、別のアプローチをとります。ある特定のキーがbobに属していることを保証できる誰かからキーを取得します。 CAはまさにそれを行います。

CAはそれをどのように行いますか?シンプル。 bobは自分をCAに識別させ、公開鍵を送信します。このようにして、CAはbobの「アイデンティティ」をこの公開鍵に関連付けるものを持っています。そして、あなたはあなたが手に入れた公開鍵が本当にbobに属していると信じることができます。

7
woliveirajr