0

私は100%確実にするためにこの質問をしています。

リンク

認証局によってデジタル署名された情報が含まれていることを確認するために証明書を検証するために、Webブラウザはデジタル署名を検証します。デジタル署名は、証明書の内容に基づいて計算された暗号化されたハッシュ値であるため、Webブラウザーはハッシュ値を比較する必要があります。Webブラウザーは、受け取った証明書の内容に基づいてハッシュ値を計算します。次に、デジタル署名を復号化して、認証局が計算したハッシュ値を決定します。2つのハッシュ値が一致する場合、認証局が検証してデジタル署名した情報が証明書に含まれていることがWebブラウザーに保証されます。

質問:

Webブラウザーは、受け取った証明書の内容に基づいてハッシュ値を計算します

ブラウザは、証明書が内部で使用されたダイジェストアルゴリズムを認識しているため、証明書の内容に基づいてハッシュを計算するためにも使用ます

次に、デジタル署名を復号化して、認証局が計算したハッシュ値を決定します。

ブラウザは、どのCAが証明書を作成したかを知っているため、適切なコンピュータストアの場所から公開鍵を取得し、暗号化されたハッシュ値に適用します。結果は復号化されたハッシュ値です。

次に、両方が同じかどうかを確認します。

私は正しいですか?

4

1 に答える 1

5

(Security.SE に関するこの質問に興味があるかもしれません。)

これはX.509 証明書の構造です:

Certificate  ::=  SEQUENCE  {
     tbsCertificate       TBSCertificate,
     signatureAlgorithm   AlgorithmIdentifier,
     signatureValue       BIT STRING  }

TBSCertificate  ::=  SEQUENCE  {
     version         [0]  EXPLICIT Version DEFAULT v1,
     serialNumber         CertificateSerialNumber,
     signature            AlgorithmIdentifier,
     issuer               Name,
     validity             Validity,
     subject              Name,
     subjectPublicKeyInfo SubjectPublicKeyInfo,
     issuerUniqueID  [1]  IMPLICIT UniqueIdentifier OPTIONAL,
                          -- If present, version MUST be v2 or v3
     subjectUniqueID [2]  IMPLICIT UniqueIdentifier OPTIONAL,
                          -- If present, version MUST be v2 or v3
     extensions      [3]  EXPLICIT Extensions OPTIONAL
                          -- If present, version MUST be v3
     }

証明書が提示されると、ブラウザーは証明書自体から署名アルゴリズムを取得します。通常、これは のようなものRSAwithSHA1です。

この場合、TBSCertificate(証明書の実際の内容) の SHA-1 ダイジェストを実際に再計算できます。

さらに、 からTBSCertificate発行者名を見つけることができます。これは、既知の CA 証明書からトラスト アンカーを見つけるために使用されるものです (発行者名は CA 証明書のサブジェクトと一致する必要があります)。すでに信頼しているリストに正しい名前の CA 証明書が見つかると、その CA 証明書から公開 RSA キーを取得できます。

SHA-1 ダイジェストと RSA 公開鍵の両方があれば、一致していることを確認できsignatureValueます。

デジタル署名は暗号化されたハッシュ値です

一般的に言われていますが、厳密にはそうではありません。デジタル署名はデジタル署名であり、暗号化ではありません。

問題は、RSA が暗号化と署名に同じ数学を使用することです: 公開鍵による暗号化と秘密鍵による署名です。多くの場合、一方が他方と混同されます (OpenSSL API であっても)。「暗号化」は隠すことを意味するため、秘密鍵で「暗号化」することは意味がありません (また、署名を「復号化」できるように公開鍵を渡す場合、何も隠しているわけではありません)。

デジタル署名を使用したハッシュと暗号化に関するこの微妙な点は、署名専用の DSA などの他のアルゴリズムでは機能しません。

これが、多くのデジタル署名 API がハッシュとキーの使用法を単一の「署名」または「検証」操作に結合する理由です。これは Java署名API が行うことです。たとえば、RSAwithSHA1orを使用するように指示DSAwithSHA1し、キーとメッセージを渡して、署名または検証するように指示します。ダイジェストまたは「暗号化」を手動で行う必要はありません。

証明書の検証の目的で: ブラウザーは証明書から発行者を取得し、対応する公開鍵を (信頼できる CA 証明書から) 見つけます。証明書から署名アルゴリズムも取得し、その公開鍵と TBSCertificate を使用して署名を検証します。署名アルゴリズムが指示するものに従って、コンテンツ。

于 2012-09-28T19:21:10.323 に答える