はい。RSAを使用して、Diffie-Hellmanのような交換を行うことができます。これは、関連する1つのペアのキーが通勤するだけでなく、異なるキーペアのキーも通勤できるためです。
alice -> bob: alice.pub
bob -> alice: bob.pub
alice: r = random.secret()
alice -> bob: ( r * (alice.priv * bob.pub) )
bob: r = ( (r * (alice.priv * bob.pub)) * (bob.priv * alice.pub) )
ここで奇妙なことをしたことに注意してください。1つの操作で異なるキーペアからのRSA操作を混合しました。括弧内のオブジェクトは事実上新しい仮想RSAキーであり、これらのキーのいずれも公開されていません。そのRSAキーを直接作成しようとすると、アリスまたはボブのいずれかがペアの両方のキーを認識します。このキーペアは事実上、一方の端に書き込む秘密鍵であり、もう一方の側だけがそれを復号化できますが、自分で書いたものを復号化することはできず、他の誰もメッセージをもう一方の側に暗号化することはできません。
このようなキーペアを組み合わせる人を見たことがありませんが、コードを記述してこれをテストしました。通常、メッセージに秘密鍵を適用するのは「署名」のためであるため、私は何か変わったことをしなければなりませんでした。ただし、署名は通常、秘密をハッシュし、秘密鍵をそのハッシュに適用します。私たちが望まない何か。したがって、私のコードでは、RSAコンポーネント(D、E、N)を任意の精度の数値に抽出すると、次のようになります。つまり、復号化、暗号化、モジュラス...
wormholeSend(me,you,msg) =
(((me ^ {me_D}) \% me_N) ^ {you_E}) \% you_N
少し注意が必要なのは、E(暗号化指数)は実際には予測可能な値ですが、モジュラスNは公開鍵(E、N)にあるということです。Dは各パーティにプライベートです。あなたと私は異なる弾性率Nを持っているので、ここでは注意する必要があります。
これを行ったのは、ユーザーが復号化できるキーをプログラムが暗号化することを許可されているシステムが必要だったためです。これを行うと、ユーザーはキーを暗号化できず、プログラムはキーを復号化できません。