web-dev-qa-db-ja.com

証明書の公開鍵が署名されていないのはなぜですか?

証明書について簡単な質問があります。公開鍵のハッシュがCAの秘密鍵で署名されていることを知っています。別のデザインがあります。とにかく公開鍵が送信されているので、公開鍵に直接署名して送信してみませんか?したがって、ブラウザはそれを解読して公開鍵を取得できますか?このデザインを使用できない理由は何ですか?

2
user231806

デジタル署名で署名されたメッセージの場合、標準でメッセージのハッシュを取得してから、デジタル署名アルゴリズムをハッシュに適用します。

最初にハッシュ関数を適用しない場合、メッセージは、デジタル署名アルゴリズムが各ブロックに個別に作用するのに十分小さいブロックに分割する必要があります。これは、署名プロセスだけでなく、検証プロセスも複雑にします。

3
mti2935

それで、私の最後の答えをした後、私は間違った質問に答えたことに気づいたと思います。 (しかし、私がそう言ったとしても、それはかなりきちんとしているので、そのままにしておきます。)次に、別の質問に答えます。

署名と暗号化がまったく同じであるが逆である場合、なぜ証明書をハッシュしてハッシュに署名する必要があるのでしょうか。証明書全体に署名(つまり、CAの秘密鍵で暗号化)し、それを送信しないのはなぜですか-クライアントがCAの公開鍵で復号化できますか?帯域幅が少なくなりますか?

これを行わない理由は3つあります。

RSA暗号化(または署名)は、実際には任意の長さのペイロードで実行できますが、それは非常に遅いです。

本当に、本当に遅いように。そのため、RSAで実際にメッセージを暗号化する人は誰もいません-彼らは(16バイトのような比較的短い)メッセージキーを生成し、代わりにそれを暗号化します。次に、メッセージキーを使用して、はるかに高速な対称暗号を使用してメッセージを暗号化できます。

署名は、一般的に、単なる暗号化ではなく、逆方向です。

RSAは、秘密鍵による暗号化によって署名方式が提供される特殊なケースですが、通常はそのような秘密鍵と公開鍵を交換できないだけでなく、暗号化方式は通常署名方式として使用できず、その逆も同様です。

たとえば、ECCを取り上げます。ECC秘密鍵は単なる整数ですが、ECC公開鍵はカーブポイントです。通常、整数のペア(X、Y)として表されます。 ECDHは、ECC暗号化を強化するために使用される鍵合意方式であり、秘密鍵と公開鍵を掛け合わせるのと同じくらい簡単です-そのうちの1つを他のタイプと交換しようとすると、公開鍵と公開鍵が掛けられますキー-これは単に数値の数倍であり、除算で分割できます-または、曲線点と曲線点の積ですが、これは、曲線点で実行できることではありません。 (それらを追加できます。つまり、整数を乗算できますが、互いに乗算することはできません。)

証明書を読むのは高すぎるでしょう。

証明書の本体は、RSAを使用して証明書を復号化するなど、高価なことをせずにアクセスできる必要があります。これは非常にコストのかかる操作であり、証明書が正しいものであると主張しているかどうかさえわからない場合は、それを実行する必要があります。

また、通常は複数の信頼できるCAがあり、ほとんどの証明書は直接発行されず、サブCAを介して発行されます。通常、これらはエンドユーザーのコンピューターに保存されませんが、実際に発行されている証明書とともに送信されます。確認に興味があります。つまり、証明書を解読するためにどのキーを使用するかを知る前に、証明書を読んで、それがどのCAまたはサブCAであるかを把握する必要があります。

整合性保護はありません。

これはもう少し微妙です。ランダムに見えるデータを渡して、それがgoogle.comの証明書だと言ったとしましょう。暗号化を解除すると、何かが得られます。おそらくランダムに見える意味不明なものですが、そうでない場合もあります。どういうわけか、その復号化されたデータが実際にgoogleの証明書であるかどうかを確認する必要があり、「google.com」の名前がそこにあるかどうかを確認するだけで本当に悪い考えになるでしょう-名前が短いので、特定の位置にある文字列で何かに復号化されたランダムなblobを見つけるのはそれほど難しくありません。

整合性保護を提供するには、チェックする既知のデータ(おそらく魔法のヘッダーフィールドなど)が必要ですが、そのデータは、少なくともハッシュが有効である限り、長くなければなりません。つまり、証明書のサイズを少なくともその分大きくする必要があります。

0
Reid Rankin

どういう意味

公開鍵に直接署名して送信しないのはなぜですか?

「公開鍵に直接署名する」ことにより、公開鍵のデジタル署名を生成し、公開鍵自体ではなくデジタル署名のみを送信する場合、ブラウザは「復号して公開鍵を取得する」ことができません。これは、デジタル署名が署名されたメッセージの暗号ハッシュであるためです。元のメッセージを取得するために解読できるのは、メッセージ(この場合は公開鍵)の暗号化された暗号テキストバージョンではありません。

したがって、公開キーとそのデジタル署名の両方を送信する場合、「公開キーのハッシュがCAの秘密キーで署名されていることを知っている」という意味と同じです。 CAの秘密鍵で署名された公開鍵のハッシュがデジタル署名です。

0
auspicious99