web-dev-qa-db-ja.com

公開鍵の暗号化とデジタル署名について話すとき、なぜ公開/秘密鍵の役割が逆になるのですか?

公開鍵暗号化では、encrypt公開鍵を使用します。ただし、デジタル署名を作成するときは、暗号化秘密鍵を使用したハッシュで署名します。

公開キー暗号化のこれら2つの使用法の原則は理解していますが、キーの役割が突然逆転する方法と理由を頭の中で調整することはできません。デジタル署名は、公開鍵暗号化の概念に何らかの形で基づいていますか?または、基になるアルゴリズムは完全に異なりますか?

7
Phil_1984_

キーの役割が突然逆転する方法と理由を頭の中で調整することはできません。

(私は主にRSA署名に焦点を当てています。)

誰でも(公開鍵を使用して)暗号化されたメッセージを生成でき、(秘密鍵を使用して)それを解読できるのはあなただけです。公開鍵と秘密鍵の役割が逆になるのは、署名はあなただけが(秘密鍵で暗号化することによって)作成でき、他の全員が(公開鍵で復号することによって)確認できるものでなければならないためです。

基本的な前提は、公開鍵を使用して意味のあるメッセージに復号化できる暗号文を公開する場合、秘密鍵を所有していることを証明していることです。そうしないと、そのような暗号文を生成できないためです。 (このプレーンなRSA署名アルゴリズムは、さまざまな理由で安全ではないことに注意してください。最も重要なこととして、実際には、完全なメッセージテキストに署名しないでください ただし、メッセージのハッシュ 。)

RSAの数学的な設計では、どちらかのキーを使用してメッセージを暗号化し、もう一方のキーで復号化できるため、公開キーと秘密キーの役割を単純に入れ替えることができます。 1つ-両方の方法で同じ元の平文になります。これは、暗号化指数eが、復号化指数d modulo φ(N)の-​​ 乗法逆数 であるからです(ここで、Nは、 RSA係数と_φ_は オイラーのトーテント関数 )です。つまり、1 ≡ ed ≡ de (mod φ(N))です。

また参照してください RSA署名検証はどのように機能しますか?

14
Arminius

私は公開鍵暗号のこれら2つの使用の原則を理解していますが、鍵の役割が突然逆転する方法と理由を頭の中で調整することはできません。

それが意味のある唯一の方法です。誰かが暗号化を解読できる場合、暗号化は役に立ちません。したがって、暗号化を解除するには秘密鍵が必要です。

逆に、デジタル署名は、だれかがそれを作成できる場合には意味がありません。

デジタル署名は、公開鍵暗号化の概念に何らかの形で基づいていますか?または、基になるアルゴリズムは完全に異なりますか?

それはアルゴリズムに依存します。 RSAの場合、暗号化と署名は、(ほとんどの場合)鍵を逆にした同じ操作です。 ElGamalなどの他のものでは、署名と暗号化は技術的にはほんの少し似ていますが、理論的には鍵を再利用できます。最後に、操作の1つに特化したスキームがあります。たとえば、ハッシュベースの署名には、対応する暗号化機能はありません。

8
mat

2つのキーは、暗号化/復号化プロセスの反対側で使用されます。キーペアのいずれかのキーを使用してデータを暗号化し、他のキーは復号化に必要です。プロセスにはペアが必要であり、複製しようとしているものと同じ結果を生成できる別のキーを見つけるのは非常に複雑です。

誰もが公開鍵を知っているため、誰でもその鍵を使用してメッセージを送信できます秘密鍵の所有者のみが開くことができます。公開鍵はメッセージを復号化しません。

秘密鍵を持っているのは1人だけなので、一致する公開鍵によって開かれたメッセージが本当にその人からのものであったことを誰もが確信できます。ここで重要なのは、一般の人がそれを開いた場合、署名するには秘密鍵が使用されている必要があるであるということです。

1
Craig

私があなたの質問を正しく理解している場合、既存の回答が本当にそれを扱っているかどうかはわかりません。

反対称性基本的にはがどこにあるのか疑問に思われるかもしれません。

もしそうなら、私は説明しようとします。 (誰も私にこれを教えてくれませんでしたが、私はthinkこれはどこから来たのかです)


まず、「情報」が何であるかを覚えておきましょう(または学びましょう!)

情報は可能性を区別する能力です。

言い換えると、何かについてより多くの情報を取得すると、それ以外の点では同じように見えた2つの異なる可能性を区別できるようになります。

あなたは引用を知っていますか「話すことで何も学ぶことはありません」?情報理論的には、次のことを意味します。

通信は受信者にのみメリットがあり、senderにはメリットがありません。

つまり、誰かに情報を送信しても、あなたは可能性を区別する能力を獲得できません。その恩恵を受けることができるのは受信者だけです。

次に、これらのそれぞれの意味を検討してください一方向の通信チャネルで(つまり、一方向の信頼):

  • 署名は、許可されていない生産(書き込み)情報から保護するためのものです。
    レシーバー(リーダー)の利益のためです。これは、「はい、これはreally me」を証明する作者の方法です。双方向の通信チャネルがないと、作者はこれによる利益を受けません。それは厳密に読者の利益のためです。

  • 暗号化は、許可されていない消費(読み取り)情報から保護するためのものです。
    レシーバー(リーダー)の利益のためです。これはわかりません少なくとも、私が片方向通信チャネル。一方向チャネルでは、送信者は受信者を認証していません。つまり、送信者は受信者を信頼していないため、情報をブロードキャストしている可能性があり、受信者は必要に応じて情報を公開できます。 only暗号化する理由は、受信者を保護するためです。

readingwritingの間には反対称性があるが、 readerwriterの間に対応する反対称性がない!

つまり、状況が逆転しているということです。その事実により、公開鍵と秘密鍵の役割が逆転します。

1
user541686

RSA暗号システム では、暗号化、復号化、署名、および署名検証がallと同じ数学演算で行われます modular exponentiation

また、数学的には、秘密鍵と公開鍵のRSAに違いはありません。これらは2組の数値(en)と(dn)であり、共有係数nは2つの( または時にはそれ以上 )大きな素数の積であり、eおよびdが選択されますxedx(mod n)すべてのxに対して。

便利なことに、そのような数値edを選択することは、nの素因数を知っていれば簡単に実行できますが、知らない(たとえedのいずれかをすでに知っていても)。したがって、2つのランダムな大きな素数を選択し、それらを乗算してnを取得し、適切なedを選択してから、公開neまたはdのいずれか(通常、パブリックと呼ぶeともう一方と呼ぶd)他の誰もdneのどちらに対応するかを理解できないことを確信しながら、.

(数学ではeおよびdのいずれかを(ほぼ)任意の数に修正し、それと素因数に基づいて他の1つを計算することもできますof n。たとえば、常にe = 3またはe = 65537 = 2を選択できます16+1して計算xe mod n少し簡単です。もちろん、それを行う場合は、定数を公開番号にする必要があります。なぜなら、あなたと他のすべての人が常に同じ秘密番号dを使用している場合、実際にはそれほど多くないからです。秘密ですよね?)

そして、誰でも簡単に計算できますy = xe mod n for any x、and for you(for you you know d)to compute compute x =- yd mod n、知らない人にとってはdどれが(十分にランダムに選択された)かを理解するのは非常に難しいxは任意の値に対応するyの。このプロパティには、少なくとも2つの便利な実用的なアプリケーションがあります。

  1. xy = xを計算することで、だれでも数値を「暗号化」できます。e mod n、結果のyに簡単に「解読」できるx = yd mod n

  2. 任意の数に「署名」することができますy「署名」を計算することによってx = yd mod nおよびそれを公開すると、誰でもあなたの署名xが元の番号と一致することを確認できますy = xe mod nですが、特定の番号に一致する署名xを簡単に思い付く人は誰もいませんy選択したもの。

もちろん、実際には、これにはいくつかの制限があります。たとえば、暗号化にRSAを使用する場合、暗号化される数値xが常に予測不能であることが重要です。誰かがxの可能性のある値を推測できる場合、彼らはxを計算することができますe mod nそして、それが実際の暗号化された数値yと一致するかどうかを確認します。

同様に、署名にRSAを使用する場合、誰でも偽の「署名」を選択するだけで常に可能ですx(本質的にランダムな)数を計算しますy = xe mod n署名に一致x;したがって、有効な数値の範囲yを1からn-1までの全範囲の非常に小さいサブセットのみに制限するか、そうでなければそのような署名を確実にすることが重要です(疑似)乱数の数は実用的な偽造として役に立たない。

これらの実用的な問題を解決する通常の方法は、 padding 入力番号(暗号化の場合はx、署名の場合はy)を使用して、それらは予測不可能であり、および/またはパディングの正確さを検証することを可能にします(ランダムに選択された数がゼロチェックに合格する可能性がほとんどないような方法で)。実際には、RSA暗号化とRSA署名には通常、異なるパディングスキームが使用されます。これは、これら2つの異なる用途のセキュリティ要件が多少異なるためです。したがって、モジュラ指数部分は、4つのRSA操作(暗号化、復号化、署名、署名検証)で基本的に同じですが、実際にシステムを実際に安全にするために必要な追加(非)パディング操作は異なります。

とにかく、このすべてのポイントは、元の質問が誤った二分法に基づいているということです。

RSA署名を「秘密鍵による暗号化」と同等であると説明する意味がある限り(つまり、パディングを無視して、モジュラー指数にのみ焦点を当てている限り)、「-」と同等であると言っても意味がありますdecryption with the private key "、または" verification with the private key "。これらはすべて、数学的には、モジュラ指数の実際の名前が異なるためです。もちろん、実際には、これらすべての操作にはいくつかの(非)パディングも含まれているため、それらすべてが異なります。

そしてもちろん、署名(および復号化)に常に秘密キーを使用する理由は、公開キーを使用した場合、公開されているため、他のユーザーもそれを実行できるためです。そして、それはそもそも暗号を使用することのポイントを無効にするでしょう。

1
Ilmari Karonen