web-dev-qa-db-ja.com

事前の知識がない2つの当事者間で秘密を交渉する方法はありますか?

事前共有された知識がなくても、2つの当事者が共有秘密(たとえば、セッションキー)をネゴシエートする方法はありますか?

SSLは非対称暗号化を使用してこれを行います。 PKIを使用せずにこれを実現する他の方法はありますか?

8
paan

Diffie-Hellman(SSLも使用できます)がありますが、これは、攻撃者がアクティブな攻撃を実行できないか、パーティを相互認証できる場合にのみ安全です。

8
frankodwyer

共有シークレットを確立するために使用されるいくつかの鍵合意プロトコルがあります。 Diffie-Hellman。本当の問題は、秘密を共有することです。

コンピュータの世界では、アイデンティティは知識です。あなたはボブと秘密を共有したいが、ボブを装った誰とも共有したくない:したがって、ボブはチャーリーができない「何かをする」ことができなければならない。そうしないと、それらを確実に区別できなくなります。誰もが同じコンピューターを持っているので、「何かができる」とは「機密情報を知っている」ことと同じです。

SSLでは、証明書が使用されます。つまり、非対称暗号化が存在します。 Bobは(あなたの観点から)Charlieとは異なります。Bobは、証明書に含まれる公開鍵に対応する秘密鍵を知っているためです(そしてCharlieはを知らない )その秘密鍵を知っている)。

まとめると、あなたとボブが共有シークレットを知っている場合は、それを使用して相互に認証できます。それ以外の場合で、ボブが非共有秘密を知っている場合、この秘密は公開/秘密鍵ペアの秘密鍵です。問題は次のようになります。使用しようとしている公開鍵が確かにボブのものであることをどのようにして知るのでしょうか。 PKIは、ボブのID(コンピューターの世界の一部ではない)とボブの公開キー(コンピューターの世界にある)の間のリンクを実行する「権限」の助けを借りて、これを行う方法です。

「PKI」は広義の用語であり、あなたがあなた自身のPKIである退化した状況をカバーします。つまり、ボブと一度会うと、ボブは公開鍵(またはそのハッシュ)を渡します。その後、その知識を使用して、「正しい」ボブのキーを使用していることを確認します。これが [〜#〜] ssh [〜#〜] の仕組みです。

6
Thomas Pornin