ノート:ディフィー・ヘルマン鍵共有

ページのコンテンツが他言語でサポートされていません。

公開鍵暗号方式との混同について[編集]

DH鍵交換自体は公開鍵暗号方式の一種ではありません。 従いまして、g,p,a,bのような値を公開鍵や秘密鍵と呼ぶのは不適当だと思います。 プロトコルの内容の項にあるように、事前におのおのが公開鍵を公開するという事実もありません。 概要の項については、2006年10月26日 (木) 22:41の版に準ずる形の記述が適当と考えますがいかがでしょうか? --Showsuke 2008年4月15日 (火) 15:39 (UTC)[返信]

DHは鍵交換(key distribution)なのであって暗号化(encryption)ではないというご指摘でしたらそのとおりだと思いますが、Cryptosystemの一種であることには違いないと思います。だとしたらご指摘のポイントは、DHで使用する値(g,p,a,b,A,B)を秘密鍵・公開鍵と呼ぶか否か、つまりDHは公開鍵方式(Public key system)か否か?にあるのでしょうか。
参考文献にある "New Directions in Cryptography" によれば、各ユーザは、a,bは秘密にしてA,Bを公開ファイルに登録するとあります(文献ではユーザは二人とは限っていないことにもご注意ください)。これは「事前におのおのが公開鍵を公開」なのではないでしょうか?2006年10月26日 (木) 22:41の版のような記述にする必要は無いと思います。Sina 2008年4月15日 (火) 22:34 (UTC)[返信]
ご返答ありがとうございました。
  1. DH鍵交換は暗号化ではないという点についてはご同意いただけたように思います。そうしますと、概要の項の文中「公開鍵暗号の概念を提案し、その具体的な方式の一つとして、Diffie-Hellman鍵共有(DH鍵共有)プロトコルを提案した。」という表現は、「DH鍵共有は公開鍵暗号の一方式である」という意を含んでしまうと思いますので、少なくともこの部分については修正が必要だと思います。
  2. "New Directions in Cryptography"(Section 3)では、事前の鍵配送が困難であることを解決する手段を2つ示しています。まず公開鍵暗号方式(public key cryptsystem)の概念について提案をし、次に、これとは異なるものとしてMerkle提案の公開鍵配送(public key distribution)を紹介し、その具体的一手法としてDH鍵交換を提案しています。したがいまして、この論文でも、DH鍵交換はcryptsystemとは違うことが明言されていることになります。「公開鍵方式」という表現にしても、事前に「公開鍵」と呼ぶ数値がやりとりされるという事実のみをもって「公開鍵方式」と呼んでしまうのは性急であって、DH鍵交換がそこに含まれるか否かは「公開鍵方式」という単語が一般にどのような意味で使われているかを考慮した上で、判断されるべきだと思います。
  3. 2.における議論はひとまず措いておくとしても、A,Bを特別な説明なしで「公開鍵」と表現するのは、「公開鍵暗号方式の公開鍵」との混同を招き、無用な誤解を生むのではないか?というのが私の主張の大きな所です。上記引用論文でもこれらを、"public key"と表現した箇所はありません。ElGamal暗号では、まさにA,Bに相当する数値を公開鍵(の一部)として利用するわけで、それとの誤解を避ける必要もあると思います。A,Bを説明する上で必要があれば、公開{情報,値,数}などのより適切な表現を取るのが妥当と思いますが、いかがでしょうか?。
--Showsuke 2008年4月16日 (水) 02:50 (UTC)[返信]
丁寧なお返事をありがとうございます。Cryptography, Cryptosystem, Encryption などの用語がどこまでの含むのか(Cryptosystem は Encryption だけなのか)は、議論が難しいのでひとまず置いておきます("1."のお返事は後回し)。まず最初に整理すべきポイントは A, B を public key(公開鍵)と呼ぶか否かにあるみたいなので、以下、ここに絞って述べます。
まず、"New Directions in Cryptography" では、A や B を public key という用語を使って定義していないというご指摘はその通りだと思いますが、DH のことを public key system (公開鍵方式)と表現していますし、手元の何冊かのテキストをみても DH は公開鍵(暗号)方式であると説明しています。ご参考までに『情報セキュリティハンドブック』の 1.3.3 公開鍵暗号方式(p.24)では、(a)にて RSA 暗号を紹介し、(b)として Diffie-Hellman 鍵配送方式を説明しています。つまり、DH を公開鍵暗号方式の中で説明しています。ただ、5章 公開鍵暗号(p.79~)では「公開鍵暗号(Public Key Encryption)」として、p.86で DH をエルガマル暗号の節の中で扱っているのが少々残念です。それはともかく、DH は公開鍵方式と呼ぶことには問題は無さそうですが如何でしょう? DH を「公開鍵方式と呼んでしまうのは性急」とのことですが、何か懸念されていることなり、問題点があるのでしたらそれをお知らせ下さい。
次に、A, B を公開鍵と呼ぶかについては、『情報セキュリティハンドブック』のp.24でもp.86でも A, B に相当する変数を「公開鍵」と表現しています。他にも a, b を Private key, A, B を Public key としている書籍は、数え上げてはいませんが多々あるように思います。このように A, B を公開鍵だと表現するのは普通のことで、エルガマル暗号と DH の関係をご存知なようなので説明を省きますが、DH の A, B の役割は、まさしく「公開鍵」と呼ぶのが適切なのではないでしょうか?
「A,Bを特別な説明なしで「公開鍵」と表現するのは、「公開鍵暗号方式の公開鍵」との混同を招き、無用な誤解を生む」とのことですが、どのような混乱や誤解があって、何が問題なのかを明らかにして頂けないでしょうか?Sina 2008年4月16日 (水) 16:22 (UTC)[返信]


詳細にご調査ご検討いただきましてありがとうございました。 すみませんが都合上回答の順序が前後します。

  • >どのような混乱や誤解があって、何が問題なのかを明らかにして頂けないでしょうか?
「公開鍵」という用語は、公開鍵暗号/デジタル署名で用いられるデータであると、一般に説明されているように見受けられます。Wikipediaの公開鍵から転送される鍵 (暗号)の記事でもそのように説明されています。
この状況下で、DH鍵交換の説明の際に、「公開鍵」(とその対としての「秘密鍵」)という語を用いてしまうと、読者に「DH鍵交換は公開鍵暗号の一種あるいは公開鍵暗号に依存するもの」との予断を与えてしまうと思うのです。
実際には、公開鍵配送と公開鍵暗号は概念としては本来全く独立であるわけです。DH鍵交換は公開鍵暗号とは全く無関係に利用することも出来ます。利用目的が同じである場合もあり、数学的/技術的には(DHからElGamalが考案された経緯などから)基礎を同じくすることもあり、分野としても同一で、多くの場合互いに組み合わせて使われるという事情から、ただでさえ混同しやすいということにも配慮する必要があると思います。
もちろん、公開鍵暗号の既修者に対しては、あるいは公開鍵暗号と同時に説明を行う場合には、「公開鍵」の語を使うことは、むしろ理解を早めることもあるでしょうし、「公開鍵」を「プロトコル上重要な公開データ」程度の意であるとの注釈を加えつつ、あるいは文脈上暗示しつつ、使用することも可能かと存じます。
しかしながら、今回の対象は、百科事典の一記事の概要の項での表現です。読者の知識レベルは前提できず、表現は簡潔である必要があります。そこで、
  • a)上記混同の回避の必要性
  • b)Wikipedia内の他の記事(鍵 (暗号)公開鍵暗号など)との用語の整合性の維持
  • c)本記事の独立性の確保
  • d)初心者、拾い読み者への配慮
  • e)「公開鍵」の語を使用しなくても特に理解の妨げにはならない
などの理由から、私は「公開鍵」の語を用いて説明することは、むしろ積極的に避けるべきとの立場に立つものです。
  • >DH の A, B の役割は、まさしく「公開鍵」と呼ぶのが適切なのではないでしょうか?
(この点は、上記論点と連動するものですが)
上記の「公開鍵」の意味では、逆に不適切だと言わざるを得ません。数学的に等価なものでありながら、役割は異なっています。
ElGamalではもちろん「公開鍵」(の一部)としての役割ですが、DHでは共通鍵生成のための中間データです。「公開鍵」として考案されたものではなく、技術的には身元認証を欠くため「公開鍵」としては不適切で、実際の運用上も「公開鍵」としては使われていません。
  • >DH を「公開鍵方式と呼んでしまうのは性急」とのことですが…
「公開鍵方式」というと、一般的な用例では結局「公開鍵暗号/デジタル署名方式」の短縮表現にすぎない、と考えましたので「性急」と申し上げましたが、文脈によってはDH鍵交換を含め周辺技術を広くカバーする語として捉えることも、仰るとおりできようかと思います。

--Showsuke 2008年4月17日 (木) 16:57 (UTC)[返信]

リクエストに答えて詳細にご説明を下さり、ありがとうございます。読者への配慮は大切なことですし、他の記事との整合性維持も必要なことだと思います。この気持ちを大切にしつつ「概要」のセクションとして最適な表現を探すという点には全く異存はありません。
以下、DH の説明にて「Public key(公開鍵)」という言葉を使うことは用語の混乱では無い、という説明を試みます。
  • 「公開鍵/秘密鍵」という用語は「公開鍵暗号」の文脈で定義されたものであるが、公開鍵暗号を利用して実現できる「デジタル署名」でも使用されている。デジタル署名にはRSAのようにそのまま暗号化関数と復号関数を署名に使用できるものもあれば、署名専用で暗号化には使用できない方式もあるが、後者でも公開鍵/秘密鍵が使用されている(例えば DSA)。つまり、暗号化ではなくても「公開鍵方式」に分類できるならば「公開鍵」という言葉が使われている。
  • 同様に、公開鍵暗号を利用して実現する「鍵共有」やその他のプリミティブでも「公開鍵/秘密鍵」という用語は使用されていて、中には鍵共有専用の方式もあるが、公開鍵方式に分類できる方式ならば「公開鍵」という言葉を使っても「混乱」していることにはならない。
  • 実際、DH は1976年の原論文で public key (distribution) system として、つまり公開鍵方式の一つとして、提案されたもので、ここに既に public key(公開鍵) が登場している。2000年以降でも、DHは公開鍵暗号(あるいは公開鍵方式)として分類されていて、その説明に「公開鍵」が使用されている(『情報セキュリティハンドブック』など)。
DH を公開鍵方式に分類することには同意を頂けていると思いますので、以上のことを合せると、DH の説明で公開鍵という用語を使用することには問題は無いのではないでしょうか?
真ん中の段落にて、DH の A や B は「中間データ」であり、「技術的には身元認証を欠く」「実際の運用上も公開鍵としては使われていない」とのことですが、これらには首を傾げざるを得ません。現在の記事「Diffie-Hellman鍵共有にはまだ記載されていないことですが、DHには幾つものバリエーションがあり、A や B を long-term (static) public key として使用する原論文のやり方もあれば、セッション鍵と同レベルの期間しか存在しない short-term (ephemeral) key とすることもあります。static key ならは中間データとは言えないと思いますし、ephemeral key なので中間データだからといって「公開鍵と呼ぶのは不適切」というのは理由がないように感じます。鍵とは暗号アルゴリズムの入力パラメータというほどの意味なのですから。「身元認証を欠く」というのは公開鍵証明書がないという意味でしょうか?証明書の有無が決め手にはならないように思います。実際の運用については、DH に関連する規格類をみると、RSA の PKCS #3 (Diffie-Hellman Key Agreement Standard, v1.4, 1993年11月) では、public value / private value としていますが、IEFT RFC 2246 (TLS, 1999年1月)では public value, public key という表現が混在していて、RFC 2631 (Diffie-Hellman Key Agreement Method, 1999年 6月) では、AやBの定義で public key だと説明しています。同様にIEEE Std 1363-2000 では、DLKAS-DH1 (Discrete Logarithm Key Agreement Scheme, Diffie-Hellman version) などで、AやBにあたるデータを public key としています。NIST の SP800-56 (Recommendation for Pair-Wise Key Establishment Schemes Using Discrete Logarithm Cryptography (Revised), 2007年3月) でも、public key / private key としています。今ざっと調べただけなので、資料が見つからなくて確認していない規格(ISOやJIS)や、見落としももあろうかと思いますが、2000年以降は DH の A や B を公開鍵と言っても差し支えない状態だと言えないでしょうか。
他の記事との関係について補足しますと、「鍵 (暗号)#鍵の種類」の説明では「公開鍵は暗号化や署名検証等」に使用されると書かれています。ここで最後に「等」とあるのは「公開鍵」という言葉が使われるのは「公開鍵暗号」や「デジタル署名」以外にもあるからではないでしょうか。例えば「CRYPTREC」で作成された「電子政府推奨暗号リスト」では、公開鍵暗号を「署名」「守秘」「鍵共有」の3つに分類して、署名にはDSA、守秘にはRSA-OAEP等、そして鍵共有にはDHをリストアップしています。
むしろ、DH は公開鍵方式(公開鍵暗号)に分類されるのに、どこが公開鍵なのかが説明されていないという状態は読者に不親切なのではないでしょうか?もっと加筆して解説すべき、というのがSinaの主張です。
少々長くなり過ぎました。読みづらくて申し訳ありません。Sina 2008年4月18日 (金) 18:02 (UTC)[返信]


たびたび長文を頂いて恐縮です。

どうしてこうも意見が食い違うのかと不思議に思っていたんですが、ご紹介いただいた「電子政府推奨暗号リスト」と、Sinaさんの投稿記録を子細に拝見させていただいて、やっと合点がいきました。つまり、Sinaさんは上記リストの如く、

  • 公開鍵暗号(cryptsystem/cryptgraphy)
    • 暗号化(守秘,encryption)
    • デジタル署名
    • 鍵交換

との分類(包含関係)を前提としているということですね?もしこれが前提であるとの議論であれば、たしかに現在の記事内容で誤解は起こらないでしょう。また、この分類自体は理に叶った、わかりやすいものだと思います。そう前提すれば、当然「公開鍵」の語は自動的に

>暗号アルゴリズムの(公開された)入力パラメータ言うほどの意味

になります。

ただ、cryptsystem/cryptgraphyとencryptionが、日本語では単一の「公開鍵暗号(化)」に縮退してしまっている所が、厄介ですね。上記分類に従って、わかりやすく用語の再定義を行うならば、例えば、

cryptsystem/cryptgraphy
「公開鍵暗号技術」、「公開鍵暗号法」、「公開鍵暗号系」
encryption
「守秘」、「(狭い意味での)公開鍵暗号化」

とでもするのでしょうか。

また何より、このような前提が広く知れ渡り、合意が得られているとはとても思えない点が問題で、Wikipedia(ja)の公開鍵暗号関連記事も、未だ上記のような分類が十分反映された内容になっていないですね。(既にずいぶんと沿うように書き換えを行われたようですが…(笑)。もしSinaさんが関連記事を一気に書き換えてしまえば、Wikipedia的には矛盾はなくなりますから、それはそれでアリでしょうか?)例えば、記事公開鍵暗号デジタル署名を含むということは、一番最後のセクションを読むまでわからないです。en:Public-key cryptographyのように文頭に列挙すべきでしょう。

今後、上記分類に従って更新を行っていくおつもりならば、すくなくとも定着するまでのしばらくの間は用語についてどこかに整理されていないと、私のような理解(公開鍵暗号をencryptionの意に限定)をしていると思われる、読者&参加者との間で、誤解が起こり続けるとおもうのですが、このあたりよろしければご存念をお聞かせください。

そして、私が今回本記事を書き換えたのも、まさにこの誤解に基づくものですから、この際、回答を保留されている、

>「DH鍵共有は公開鍵暗号の一方式である」という意を含んでしまう

すなわち

「DHはpublic encryption(守秘)の一方式である」と誤解される

との指摘につき、どのように思っていらっしゃるのか、お答えいただければと思います。--Showsuke 2008年4月19日 (土) 06:30 (UTC)[返信]

(追記)少々独りよがりな部分を修正しました。--Showsuke 2008年4月19日 (土) 14:12 (UTC)[返信]

「どうしてこうも意見が食い違うのか」とのことで、ここまでの議論の流れをSinaなりにまとめてみました。ご参考にして頂ければと思います。
  • 「DHのAやBを公開鍵と説明してよいか」について、振り返って分析してみるとその論点は2つに分解できると思います。
    • 論点1: DH鍵共有方式は、公開鍵方式に分類してよいか?
    • 論点2: DH鍵共有方式で使用するA,Bは、鍵と呼んでよいか?
  • そして、
    • 見解X: 論点1と論点2の両方が YES でなければ A や B は公開鍵とは言えず、少なくとも論点2は NO である
    • 見解Y: 論点1と論点2とも YES なので、A や B は公開鍵と言って良い
  • という相違があったと思います(見解Xはさらに広い視点で、読者への配慮などの指摘があり、これには異論はありませんでした)。
  • まず、論点1については、公開鍵方式という言葉で DH のような鍵共有方式をカバーすることは可能という点で意見は一致しました。
  • 次に、論点2については、見解Xの立場から、鍵共有の入力を“鍵”と称すると、鍵とは暗号化(守秘)や署名(認証)で使用するものなのだから、鍵共有と暗号化を混同することになり問題がある、という説明があり、見解Yからは、鍵共有でも鍵という言葉は使ってよいし、DH には鍵を使っているとするのが適当な使用方法(バリエーション)があることの説明と、実際に“鍵”としている文献や規格が示された。
以上のように流れてきたと思います。誤解が解けてきたように感じられますので、潮時というのでしょうか、さらに議論を重ねることは止めてこの辺で終了するのがよさそうに思いますが如何でしょうか。「このような前提が広く知れ渡り、合意が得られているとはとても思えない点が問題」とのことですが、Sinaは「このような前提」を唯一の根拠とするのは避けて、DH の A や B は公開鍵と呼ばれているという事実をいくつか示しました。にも関わらず、「前提」があるのだろう、問題だとおっしゃられても、さらに時間を掛けてご説明してみたいとは思えません。ただ今回、色々と御意見を頂いた事々は今後の記事の改善に役立てるように思います。ニュース記事や非専門的な書籍では、暗号の用語を間違って使用している例はよくあることですし、Wikipediaの記事が未完成ゆえの誤解は不可避としても、しっかりと書かれた暗号の専門書を年代別に通読した上で執筆すれば問題は解決していくと思います(それには時間が掛かるので執筆が進まない、もたもたしていると新論文が発表されて概念や用語の中味が変質してしまうという問題は残りますが)。時間がとれたら記事本文の修正案を作成してみます。Sina 2008年4月20日 (日) 05:48 (UTC)[返信]