(57)【特許請求の範囲】
【請求項１】
第１の装置の第１の秘密ＳＡおよび第２の装置の第２の秘密ＳＢが同じであるか否かを、前記第１の秘密ＳＡおよび前記第２の秘密ＳＢを相互にまたは任意の第三者に開示することなく判定する方法であって、
−前記第１の装置はランダムな数字ＲＡを選択し、前記第２の装置の公開鍵ＰＵＢを用いて前記ランダムな数字ＲＡを暗号化し、前記第１の装置の第１の秘密ＳＡの値を暗号化された前記ランダムな数字ＲＡに加算し、前記ランダムな数字ＲＡを選択し、前記ランダムな数字ＲＡを暗号化し、及び前記第１の秘密ＳＡの値を加算するステップの第１の結果Ｋを前記第２の装置に送るステップ；
−前記第２の装置は前記第１の結果Ｋを受信し、前記第２の装置の前記第２の秘密ＳＢを前記第１の結果Ｋから減算し、前記第２の装置の秘密鍵ＰＲＢを用いて前記減算の結果の復号を行い、前記復号により復号結果Ｌを得るステップ；
−前記第２の装置は一方向性関数Ｈを前記復号結果Ｌに適用し、前記一方向性関数の前記適用の第２の結果Ｍを前記第１の装置に送るステップ；
−前記第１の装置は前記一方向性関数Ｈを前記ランダムな数字ＲＡに適用するステップ；
−前記第１の装置は前記第２の結果Ｍを受信し、前記受信した第２の結果Ｍが前記一方向性関数Ｈを前記ランダムな数字ＲＡに適用した結果に等しいかどうかを確認するステップ
を含む方法。
【請求項２】
前記第１の装置および前記第２の装置は、前記第１および第２の装置の役割を相互に交換して前記ステップを繰り返す、請求項１に記載の方法。
【請求項３】
−前記第１の装置は前記ランダムな数字ＲＡを前記第２の装置に送るステップ；
−前記第２の装置は前記ランダムな数字ＲＡを受信し、前記ランダムな数字ＲＡが以前の前記復号結果Ｌに等しいかどうかを確認し、答えが「はい」である場合、前記第１の装置は前記第２の装置が前記同じ秘密を持つことが分かり、答えが「いいえ」である場合、前記第２の装置は前記第１の装置が前記同じ秘密を持たないことが分かると結論するステップ
が後に続く、請求項１に記載の方法。
【請求項４】
一対の装置を用い、前記一対の装置のどちらかが前記第１および前記第２の装置の役割においてそれぞれ実行すべきかを判定するステップを含む、請求項１〜３のいずれか１項に記載の方法。
【請求項５】
どちらの装置が前記第１および前記第２の装置の役割においてそれぞれ実行すべきかの前記判定は、どちらの装置が通信の交換を開始するかにより判定される、請求項４に記載の方法。
【請求項６】
どちらの装置が前記第１および前記第２の装置の役割においてそれぞれ実行すべきかの前記判定は、ランダムな決定により判定され、コミットメント方式を用いて前記ランダムな決定の公正性を確保する、請求項４に記載の方法。
【請求項７】
秘密ＳＡを保存する記憶装置；および、ランダムな数字ＲＡを選択し、別の装置の公開鍵ＰＵＢを用いて前記ランダムな数字ＲＡを暗号化し、秘密ＳＡの値を暗号化された前記ランダムな数字ＲＡに加算し、前記ランダムな数字ＲＡを選択し、前記ランダムな数字を暗号化し、及び前記秘密ＳＡの値を加算するステップの第１の結果Ｋを前記別の装置に送り、前記別の装置から第２の結果Ｍを受信し、一方向性関数Ｈを前記ランダムな数字ＲＡに適用し、前記受信した第２の結果Ｍが前記一方向性関数Ｈを前記ランダムな数字ＲＡに適用した結果に等しいかどうかを確認することにより、前記別の装置が前記秘密ＳＡを有するかどうかを判定するように構成されたプロセッサを含む装置。
【請求項８】
秘密ＳＢを保存する記憶装置；およびプロセッサを含む装置であって、前記プロセッサは、別の装置から第１の結果Ｋを受信し、前記秘密ＳＢを前記第１の結果Ｋから減算し、前記装置の秘密鍵ＰＲＢを用いて前記減算の結果の復号を行い、前記復号により復号結果Ｌを得て、一方向性関数Ｈを前記復号結果Ｌに適用し、前記一方向性関数の前記適用の第２の結果Ｍを前記別の装置に返信し、数字ＲＡを前記別の装置から受信し、受信した前記数字ＲＡが前記復号結果Ｌに等しいかどうかを確認することにより、前記別の装置が前記秘密ＳＢと同じ秘密を有しているかどうかを判定するように構成された、装置。
【請求項９】
請求項７に記載の装置を含むシステムであって、前記システムは前記別の装置をさらに含み、前記別の装置は秘密ＳＢを保存する別の記憶装置；および、第１の結果Ｋを受信し、前記秘密ＳＢを前記第１の結果Ｋから減算し、前記装置の秘密鍵ＰＲＢを用いて前記減算の結果の復号を行い、前記復号により復号結果Ｌを得て、一方向性関数Ｈを前記復号結果Ｌに適用し、前記一方向性関数の前記適用の第２の結果Ｍを、請求項７に記載の装置に返信し、数字ＲＡを請求項７に記載の装置から受信し、受信した前記数字ＲＡが前記復号結果Ｌに等しいかどうかを確認することにより、請求項７に記載の装置が前記秘密ＳＢと同じ秘密を有しているかどうかを判定するように構成された別のプロセッサを含むシステム。
【請求項１０】
プログラム可能なプロセッサにより実行される際、前記プロセッサに
−ランダムな数字ＲＡを選択させ、
−装置の公開鍵ＰＵＢを用いて前記ランダムな数字ＲＡを暗号化させ、
−秘密ＳＡの値を前記暗号化したランダムな数字に加算させ、
−前記ランダムな数字ＲＡを選択させ、前記ランダムな数字を暗号化させ、及び前記秘密ＳＡの値を加算させるステップの第１の結果Ｋを前記装置に送らせ、
−前記装置から第２の結果Ｍを受信させ、
−一方向性関数Ｈを前記ランダムな数字ＲＡに適用させ、
−前記受信した第２の結果Ｍが、前記一方向性関数Ｈを前記ランダムな数字ＲＡに適用した結果に等しいかどうかを確認させることにより、前記秘密ＳＡが前記装置の別の秘密と同じであるかどうかを判定する
命令プログラムを含むコンピュータプログラム。
【請求項１１】
プログラム可能なプロセッサにより実行される際、前記プロセッサに
−装置から第１の結果Ｋを受信させ、
−前記第１の結果から秘密ＳＢを減算させ、
−秘密鍵ＰＲＢを用いて前記減算の結果の復号を行い、前記復号により復号結果Ｌを得さ
せ、
−一方向性関数Ｈを前記復号結果Ｌに適用させ、
−前記一方向性関数の前記適用の第２の結果Ｍを前記装置に返信させ、数字ＲＡを前記装置から受信させ、受信した前記数字ＲＡが前記復号結果Ｌに等しいかどうかを確認させることにより、前記装置が前記秘密ＳＢと同じ秘密を有しているかどうかを判定させる
命令プログラムを含むコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、安全なデータ交換に使用することができる、安全なマルチパーティ計算（ＳＭＣ：Ｓｅｃｕｒｅ  Ｍｕｌｔｉ−ｐａｒｔｙ  Ｃｏｍｐｕｔａｔｉｏｎ）にリンクした共有の秘密の確認方法に関する。本発明はさらに、この方法を実行するための装置、システムおよびコンピュータプログラムに関する。
【背景技術】
【０００２】
共有の秘密の確認を使用するシステムにおいては、たとえば２人の当事者がそれぞれ秘密を持っている場合がある。彼らは同じ秘密を共有しているか否かを知りたいが、相互にまたは第三者に秘密自体を開示したくない。本発明は、現代の電気通信において安全な通信（公開鍵および／または秘密鍵）、ゼロ知識証明、一方向性（ハッシュ）関数、コミットメント方式、データ圧縮などに関係する。用途としては特に、たとえば２人の当事者がインターネット上で出会うなど、インターネット上での接触における安全なグループ形成の分野で用途がある。後に２人が再びインターネット上で出会う。この際に問題となるのは、２人の当事者が本人情報を開示しなくても他方の当事者について以前出会ったのと同じ当事者であることをどのように確認できるかということである。別の例としては、たとえば２つの携帯装置が相互につながれ、この２つの装置がつながれたときの正確な時間インスタンスである秘密のタイムスタンプを作成するときに生じる問題である。後で２人は相互に通信したい。この際に問題となるのは、他方の装置に全く同じタイムスタンプがあることを自らのタイムスタンプを開示せずにどのように確認するかということである。
【０００３】
本発明による方法が解決法を提供しようとする問題は以下のように記載することができる：ある時点のある場所で通信手段において、ある秘密ができた。この秘密は２つ以上の当事者間で共有される。これらの当事者は人でも、機械でも、またはその両方でもよい。別の時間、場所および／または通信手段において、２つ以上の当事者が出会い、他方（単数または複数）が同じ秘密を共有しているかどうかを確認したい。介在させてもよい信頼される第三者は存在しない。この秘密はシャノンエントロピーが小さくてもよい。プロトコル／アルゴリズムが失敗した場合、詐欺師にはそれ以上の情報が分からない。さらに、本発明による方法はプライバシーを最適に保護し、秘密が作成されるときも、あるいは秘密が確認されるときも本人情報は交換されないはずである。また、認証あるいは確認には第三者が必要とされないはずである。
【０００４】
暗号化における安全なマルチパーティ計算（ＭＰＣ）は、１９８２年にアンドリューＣ．ヤオ（Ａｎｄｒｅｗ  Ｃ．Ｙａｏ）により最初に示唆された問題である［アンドリューチーチーヤオ（Ａｎｄｒｅｗ  Ｃｈｉ−Ｃｈｉｈ  Ｙａｏ）：安定な計算のためのプロトコル（概要書）（Ｐｒｏｔｏｃｏｌｓ  ｆｏｒ  Ｓｅｃｕｒｅ  Ｃｏｍｐｕｔａｔｉｏｎｓ  （Ｅｘｔｅｎｄｅｄ  Ａｂｓｔｒａｃｔ））ＦＯＣＳ  １９８２：１６０−１６４］。この刊行物において大富豪問題が紹介された。すなわちアリス（Ａｌｉｃｅ）およびボブ（Ｂｏｂ）は２人共大富豪であり、どちらの方が金持ちであるかを、正確な財産額を明らかにすることなく知りたがっている。ヤオは、その制約を守りつつアリスおよびボブの好奇心を満足させる解決法を提案した。
【０００５】
安全なＭＰＣは、分散投票、非公開の入札および競売、署名または復号機能の共有、個人情報の検索など様々な現実的な問題に対して解決策を与える。マルチパーティ計算の最初の大規模な実用化は、２００８年１月にデンマークで行われた［ピーターボーゲトフト（Ｐｅｔｅｒ  Ｂｏｇｅｔｏｆｔ）、ダンルンドクリステンセン（Ｄａｎ  Ｌｕｎｄ  Ｃｈｒｉｓｔｅｎｓｅｎ）、イバンダームガード（Ｉｖａｎ  Ｄａｍｇａｒｄ）、マーティンガイスラー（Ｍａｒｔｉｎ  Ｇｅｉｓｌｅｒ）、トマスヤコブセン（Ｔｈｏｍａｓ  Ｊａｋｏｂｓｅｎ）、ミッケルクルガード（Ｍｉｋｋｅｌ  Ｋｒｏｉｇａａｒｄ）、ヤヌスダムニールセン（Ｊａｎｕｓ  Ｄａｍ  Ｎｉｅｌｓｅｎ）、ジェスパーブースニールセン（Ｊｅｓｐｅｒ  Ｂｕｕｓ  Ｎｉｅｌｓｅｎ）、カートニールセン（Ｋｕｒｔ  Ｎｉｅｌｓｅｎ）、ヤコブパグター（Ｊａｋｏｂ  Ｐａｇｔｅｒ）、ミカエルシュバルツバッハ（Ｍｉｃｈａｅｌ  Ｓｃｈｗａｒｔｚｂａｃｈ）およびトマストフト（Ｔｏｍａｓ  Ｔｏｆｔ）：マルチパーティ計算の実用化（Ｍｕｌｔｉｐａｒｔｙ  Ｃｏｍｐｕｔａｔｉｏｎ  Ｇｏｅｓ  Ｌｉｖｅ）、クリプトロジーｅプリントアーカイブ（Ｃｒｙｐｔｏｌｏｇｙ  ｅＰｒｉｎｔ  Ａｒｃｈｉｖｅ）：レポート（Ｒｅｐｏｒｔ）２００８／０６８］。
【０００６】
大富豪問題の従来技術による解決法を以下に示す。２人の大富豪アリスおよびボブ（暗号化の際の２人の当事者は通常ＡおよびＢ）は実際の財産を明らかにせずにどちらがより金持ちであるかを知りたい。始めに、アリスおよびボブには、有力な公開鍵暗号システム、本例ではＲＳＡが必要になる。アリスはＲＳＡを使用し、公開鍵を作成する（７９，３３３７）。彼女の秘密鍵は１０１９である。例を単純にしておくため、アリスおよびボブは２人のロールスロイスコレクションから算定して、どちらも１〜１０百万程度の財産がある。２人は互いにどの程度金持ちであるかを伝えたがらないが、どちらの方が金持ちであるかをどうしても知りたい。アリスはＩ百万を、ボブはＪ百万を所有している。この例ではアリスは５百万（Ｉ＝５）を、ボブは６百万（Ｊ＝６）を所有しているものとする。手法は数百万まで拡張できるが、１〜１０の数のみを使用し、百万単位を使用しないこととする。
【０００７】
ステップ１
ボブはｘというランダムなＮビットの整数を選ぶ（その後アリスはＮ／２ビットの素数を使用するため、整数の長さが重要である。この計算例で使用する素数はＮ／２ビットに過ぎないが、それでもうまく行く）。ここではｘ＝１２３４（４つの１０進数字、Ｎは約１４ビットである）とする。まず、ボブは、Ｃ＝１２３４＾７９  ｍｏｄ  ３３３７＝９０１になるようにＣを計算する［ＣはｘをＲＳＡ暗号化したものである。］
【０００８】
ステップ２
ボブはＣを得て、アリスにＣ−Ｊ＋１、つまり９０１−６＋１＝８９６を送信する。彼は８９６アリスを送る。
【０００９】
ステップ３
アリスは、Ｙ１が（Ｃ−Ｊ＋１）のＲＳＡ復号化；Ｙ２が（Ｃ−Ｊ＋２）のＲＳＡ復号化；Ｙ３が（Ｃ＋Ｊ＋３）のＲＳＡ復号化；…；Ｙ１０が（Ｃ−Ｊ＋１０）のＲＳＡ復号化になるように一連の数字Ｙ１、Ｙ２、Ｙ３…Ｙ１０を作成する。彼女はＣまたはＪが分からないけれども、（Ｃ−Ｊ＋１）が分かっているため、これを行うことができる。（Ｃ−Ｊ＋１）はボブがアリスに送った数字である。ここで、以下の表が得られ、この場合Ｕは１〜１０、ＹＵはＹ１、Ｙ２、Ｙ３、Ｙ４  …Ｙ１０である：
Ｕ（Ｃ−Ｊ＋Ｕ）  ＲＳＡ関数  ＹＵ
１  ８９６  ８９６＾１０１９  ｍｏｄ  ３３３７  １０５９
２  ８９７  ８９７＾１０１９  ｍｏｄ  ３３３７  １１５６
３  ８９８  ８９８＾１０１９  ｍｏｄ  ３３３７  ２５０２
４  ８９９                ・                      ２９１８
５  ９００                ・                      ３８５
６  ９０１                ・                      １２３４（この値にならなければならない）
７  ９０２                ・                      ２９６
８  ９０３                ・                      １５９６
９  ９０４                ・                      ２８０４
１０  ９０５  ９０５＾１０１９  ｍｏｄ  ３３３７  １３１１
【００１０】
ステップ４
ここでアリスはランダムなＮ／２ビットの長さの素数ｐを作成する。この場合、１０７を使用する：１０７は７または８ビットであるため、要件を満たしている。次にアリスはＹ１  ｍｏｄ  ｐ、Ｙ２  ｍｏｄ  ｐ、Ｙ３  ｍｏｄ  ｐ  …Ｙ１０  ｍｏｄ  ｐを計算してＺ１、Ｚ２、Ｚ３  …Ｚ１０を作成する。このためＵ＝１〜１０であれば、ＺＵ＝Ｚ１〜Ｚ１０であり、以下の表を完成できる：
Ｕ（Ｃ−Ｊ＋Ｕ）  ＲＳＡ関数  ＹＵ  ＺＵ（＝ＹＵ  ｍｏｄ  １０７）
１  ８９６  ８９６＾  １０１９  ｍｏｄ  ３３３７１０５９  ９６
２  ８９７  ８９７＾  １０１９  ｍｏｄ  ３３３７１１５６  ８６
３  ８９８  ８９８＾  １０１９  ｍｏｄ  ３３３７２５０２  ４１
４  ８９９                ・                    ２９１８  ２９
５  ９００                ・                    ３８５  ６４
６  ９０１                ・                    １２３４  ５７
７  ９０２                ・                    ２９６  ８２
８  ９０３                ・                    １５９６  ９８
９  ９０４                ・                    ２８０４  ２２
１０  ９０５  ９０５＾１０１９  ｍｏｄ  ３３３７  １３１１  ２７
【００１１】
ｐはすべてのＺＵが少なくとも２異なるように選択されなければならないことに注意する必要がある（これは比較的小規模の例では重要な場合がある）。
【００１２】
ステップ５
上記は有効なビットである。次にアリスは素数ｐをボブに送ってから１０個の数字を送る。最初のいくつかの数字はＺ１、Ｚ２、Ｚ３で、最大ＺＩの値までであり、Ｉは百万単位のアリス財産（この場合５）である。したがってアリスはＺ１、Ｚ２、Ｚ３、Ｚ４およびＺ５を送る。アリスは残りの数字には１を加算するため、Ｚ６＋１、Ｚ７＋１、Ｚ８＋１、Ｚ９＋１およびＺ１０＋１を送る。彼女が送る完全な文字列は以下となる：
ｐ  Ｚ１  Ｚ２  Ｚ３  Ｚ４  Ｚ５  Ｚ６＋１  Ｚ７＋１  Ｚ８＋１  Ｚ９＋１  Ｚ１０＋１
１０７  ９６  ８６  ４１  ２９  ６４  ５８  ８３  ９９  ２３  ２８
【００１３】
ステップ６
次にボブは、最初の素数を除外してＪ番目の数字を見る。Ｊは彼の百万単位の財産（６）である。したがって彼は５８を見る。さらに彼はＧ＝ｘ  ｍｏｄ  ｐを計算する（ｘは彼の最初のランダムな数字、ｐはアリスが彼に送ったランダムな素数である）。したがって：
Ｇ＝１２３４  ｍｏｄ  １０７＝５７となる。ここでＪ番目の数字（５８）がＧと等しければ、アリスの財産はボブと等しいか、またはそれ以上となる（Ｉ＞＝Ｊ）。Ｊ番目の数字がＧと等しくなければ、ボブの方がアリスより財産が多いことになる（Ｉ＜Ｊ）。この例では、５７は５８と等しくないので、ボブの方が財産が多い。
【００１４】
ステップ７
ボブはアリスに結果を伝え、アリスは一連の数字の中で彼女の値（５）よりも大きい数字に１を加算し始め、ボブは一連の数字の中で彼の境遇の数字（６）に１が加算されているかどうかを点検し、加算されていれば、ボブはアリスより財産があるにちがいないことが分かる。
【００１５】
これはすべて、どちらにも財産額を送信することなく行われたものである。一方、最終的に２人にはより多くのことが分かる。つまりアリスはボブが６〜１０百万を所有していることが分かり、ボブはアリスが１〜５百万を所有していることが分かる。ただし、これは、どちらがより多くの財産があるかを知ることによる必然的な結論である。＞＝条件が成立するなら、ボブとアリスは、アリスの方が実際に財産があるかどうか、あるいは２人の財産が共に同じであるかどうかを調べるためこのプロトコルを逆に実行することもできる。
【００１６】
この手法は不正を確認できる手法ではない（ボブはステップ７で嘘をつくことができた）。ヤオは、通常追加のステップを採用することで、こうした技法を不正の抑制が可能なように構築できることを示している。
【００１７】
最後に、この手法を実際に使用することはできるが、それにはある程度の処理能力が必要となる。１つの解決策で１〜１００，０００，０００の範囲をカバーしたい場合、アリスはおそらく少なくとも８バイトの整数になると考えられる１００，０００，０００の数字の表をボブに送ることになる。現実的なフォーマットのオーバーヘッドの点から見ると、これは、この表がギガバイト程度になることを意味する。これを処理することはできるが、この手法の実際の処理および保存への影響は小さくなく、これが実用的な実装にするのに大きな問題になっている。
【発明の概要】
【発明が解決しようとする課題】
【００１８】
本発明は、この問題の解決法を与えることを目的とする。
【００１９】
本発明の目的は、現代の安全なデータ交換用途における実用的な実装に十分適合する、より無駄のない効率的なプロトコルを提供することにある。
【００２０】
請求項１に記載する方法を提供する。ヤオの既知のプロトコルはｘ＜ｙかどうかを決定できるが、そのためにはアリスはｘおよびｙの考えられるすべての値を暗号化しなければならず、ボブがｘおよびｙのうちどちらが大きいかを決定できるのはその後のことである。これに対して特許請求の範囲に記載される方法はｘ＝ｙかどうかのみを判定するため、アリスが暗号化する必要があるのはｘの値だけであり、ボブが決定する必要があるのはｙ＝ｘであるか（または否か）のみである。このアプローチによりプロトコルはより効率的なものとなる。実施形態の１つでは、このプロトコルに追加ステップを加えて、プロトコルを初めからやり直さなくてもアリスおよびボブがｘおよびｙの２つの値が等しいか、または等しくないかを決定できるようにすることができる。
【００２１】
一態様によれば、この方法の各当事者の行為を実行するそれぞれの装置を提供する。こうした装置は消費者装置であってもよい。さらなる実施形態では、装置は、必要に応じてアリスまたはボブとしての役割を果たすことができるように２つの装置の各特徴を組み合わせたものでもよい。
【００２２】
これらおよび他の目的および有利な態様については、例示的な実施形態の説明により明らかになるであろう。新規なプロトコルを提示する。例示的な実施形態の説明は、以下の図を参照する。
【図面の簡単な説明】
【００２３】
【図１】通信システムを示す。
【図２】共有の秘密の確認に関わる動作を図示する。
【発明を実施するための形態】
【００２４】
図１は、第１の装置Ａおよび第２の装置Ｂを含む通信システムを示す。装置Ａ、装置Ｂはどちらも、記憶装置１００、記憶装置１２０、送受信機１０２、送受信機１２２およびプロセッサ１０４、プロセッサ１２４を含む。各装置ではプロセッサ１０４、プロセッサ１２４が装置の記憶装置１００、記憶装置１２０および送受信機１０２、送受信機１２２に連結されている。装置Ａ、装置Ｂは同一である必要はない。すなわち一方の装置がスマートカードチップであって、他方がそのスマートカードチップと通信するための機械であってもよい。あるいは、装置Ａ、装置Ｂは、たとえば携帯電話でも構わない。送受信機１０２、送受信機１０４は装置Ａ、装置Ｂ間のメッセージの交換を行う装置である。どのようなメッセージ交換媒体を使用してもよい。たとえばコンダクタを使用してもよいし、あるいは無線通信媒体を使用してもよい。送受信機１０２、送受信機１２０は、無線通信受信機および送信機、またはスマートカードリーダまたはリーダインターフェイスを含んでもよい。
【００２５】
記憶装置１００、記憶装置１２０は共に２つの装置Ａ、装置Ｂにおいて同一の秘密情報を保存する。この情報を共有の秘密という。動作プロセッサ１０４、動作プロセッサ１２４は装置Ａ、装置Ｂに情報を交換させ、装置間で交換される信号の秘密情報を明らかにせずに秘密情報が同一であることを確認する。暗号化における慣用的な名前として、装置Ａ、装置Ｂをそれぞれアリスおよびボブと呼ぶが、「当事者」とも呼ぶ。
【００２６】
前述のように、本発明により２つの当事者は互いに同じ秘密を共有しているかどうかを確認することができる。本発明は以下の要素を使用する。
−共有の秘密Ｓ
−暗号化アルゴリズムＥ
−復号アルゴリズムＤ
−一方向性（ハッシュ）関数Ｈ
−公開鍵ＰＵ
−秘密鍵ＰＲ
−ランダムな数字Ｒ
【００２７】
図２はプロトコルを実行するためのアルゴリズムを図示する（「ＳＡはＳＢに等しいか？」という質問に対する答えは、はい／いいえである）。図２のアルゴリズムでは以下のステップを行う：
【００２８】
ステップ１
ボブは自分の公開鍵ＰＵＢをアリスに送る。注記：アリスは既にボブの公開鍵を持っている（アクセスできる）こともある。この場合、公開鍵を送らなくてもよい。
【００２９】
ステップ２
アリスはランダムな数字ＲＡを選択し、ボブの公開鍵ＰＵＢを用いてこれを暗号化し、彼女の秘密ＳＡの値を加算してその結果Ｋをボブに送る。注記：ここでアリスは一方向性関数しか使用できない。なぜなら、その後ボブは同一の一方向性関数の出力を与える秘密を発見するまで、限られた秘密の空間（シャノンエントロピーが小さい）ですべての秘密を簡単に試すことができるためである。
【００３０】
ステップ３
ボブはＫを受信し、彼の秘密ＳＢを減算し、彼自身の秘密鍵ＰＲＢを用いて復号を行う。注記：アリスおよびボブが同じ秘密を持つ場合、すなわちＳＡ＝ＳＢである場合、結果Ｌはアリスの最初のランダムな数字ＲＡと等しくなる。秘密が同一でない場合、すなわちＳＡ≠ＳＢである場合、やはりＲＡ≠Ｌとなる。
【００３１】
ステップ４
ボブはＬを得て、これに一方向性関数Ｈを実行して、その結果Ｍをアリスに送り返す。注記：一方向性関数を使用する理由は、多くの暗号化／復号アルゴリズムが入れ替え可能であるためである。つまり、暗号化の前に復号も行うことが可能である。アリスはＳＢ＝Ｋ−ＤＰＲＡ（Ｌ）とすることでボブの秘密を計算できるため、これは問題になると考えられる。このためボブは彼の結果Ｌを秘密しておかなければならず、Ｌの一方向性関数のみを送ることができる。
【００３２】
ステップ５
アリスはＭを受信し、彼女の最初のランダムな数字ＲＡを用いて、同一の一方向性関数Ｈを実行し、結果が受信したＭに等しいかどうかを確認する。注記：答えが「はい」である場合、アリスはボブが同じ秘密を持つことが分かる。答えが「いいえ」である場合、アリスはボブが同じ秘密を持たないことが分かる。
【００３３】
ステップ６
アリスは彼女の最初のランダムな数字ＲＡをボブに送る。アリスはステップ５の結果が「はい」であった場合に限り、ステップ６を行う必要があることに注意されたい。答えが「いいえ」であった場合、アリスは任意のランダムな数字ＲＡ’を送っても、あるいは単にプロトコルが失敗したというメッセージを送ってもよい。
【００３４】
ステップ７
ボブはＲＡを受信し、それが彼の以前の結果Ｌに等しいかどうかを確認する。答えが「はい」である場合、アリスはボブが同じ秘密を持つことが分かる。答えが「いいえ」である場合、ボブはアリスが同じ秘密を持たないことが分かる。
【００３５】
装置Ａおよび装置Ｂがこれらのステップを行うとき、第１の装置Ａのプロセッサ１０４は、ランダムな数字ＲＡの選択、公開鍵ＰＵＢを用いた暗号化、第１の装置Ａの記憶装置１００の秘密ＳＡの値の加算を行うことができ、プロセッサ１０４は、公開鍵ＰＵＢを用いてランダムな数字を暗号化した結果に秘密ＳＡを加算した結果を第１の装置Ａの送受信機１０２により送信させる。さらに、プロセッサ装置Ａは一方向性関数Ｈをランダムな数字ＲＡに適用し、ＨをＲＡに適用した結果が、受信したＭに等しいかどうかを確認することもできる。
【００３６】
第２の装置Ｂのプロセッサ１２４は、送信された結果Ｋを第２の装置Ｂの送受信機１２２に取得させ、第２の装置Ｂの記憶装置１２０の秘密ＳＢを減算し、装置Ｂの秘密鍵ＰＲＢを用いて復号を行い、復号の結果に一方向性関数Ｈを適用し、第２の装置Ｂの送受信機１２２に結果Ｍを第１の装置に返信させるように構築すればよい。
【００３７】
記憶装置１００、記憶装置１２０に保存された秘密ＳＡ、秘密ＳＢが等しい場合（ＳＡ＝ＳＢ）、結果Ｌはランダムな数字ＲＡに等しい。秘密が同一でなかった場合、すなわちＳＡ≠ＳＢである場合、やはりＲＡ≠Ｌとなる。任意に第２の装置Ｂのプロセッサ１２４は、第１の装置Ａからランダムな数字ＲＡを受信し、ランダムな数字がその以前の結果Ｌに等しいかどうかを確認するように構築してもよい。プロセッサ１０４、プロセッサ１２４は、様々な動作を行うためのプログラムを備えたプログラム可能なプロセッサ回路であってもよい。
【００３８】
提案したアルゴリズムにはいくつかの修正および改善が可能である。
【００３９】
修正１
このアルゴリズムは、アリスまたはボブのどちらが交換を開始すべきかを判定するように拡張してもよい。１つのアプローチは通信の開始者が先になる（または後になる）必要があるというアプローチである。たとえば、装置Ａが最初に装置Ｂにメッセージを送り、通信を開始する場合、装置Ａがアリスの役割を果たす。この場合、最初のメッセージは、秘密ＳＡを加算してあるランダムな数字により暗号化することができる。あるいは、装置Ｂからの最初のメッセージの受信をきっかけに装置Ａがプロトコルのステップを実行し始めるようにしてもよい。
【００４０】
もう１つのアプローチは、コミットメント方式を用いてランダムに決定して（硬貨を指ではじいて）判定される。この場合、関係当事者は関連値を隠したままでその値をコミットする一方で、ランダムな決定（硬貨投げ）の公正性を確保するためコミットした値を後で明らかすることができる。ランダムな決定は、たとえば２進値をランダムに選択して行ってもよい。
【００４１】
修正２
アリスおよびボブはステップ６および７を行う代わりに、ステップ１〜５を繰り返してもよく、この場合、交換を開始するのはボブである。この場合、ボブがアリスのステップを行ってもよく、アリスがボブのステップを行ってもよい。
【００４２】
修正２ａ
ステップ６および７を省略する実施形態の１つでは、相互に入れ替えができない暗号化アルゴリズムＥおよび復号アルゴリズムＤを使用してもよい。この実施形態では、一方向性関数Ｈを省略することができる。ステップ４の文脈で示したように、一方向性関数を使用する理由は、ボブにより送られた結果Ｌからアリスがボブの秘密を計算することを防止するためである。相互に入れ替えができない暗号化および復号を使用する場合、アリスはＤＰＲＡ（Ｌ）を計算することが不可能であり、一方向性（ハッシュ）関数Ｈを省略しても構わない。
【００４３】
修正３
ボブがアリスの公開鍵を既に知ってしまっている場合、アリスはそれを送る必要はない。
【００４４】
修正４
本明細書で使用する場合、「加算（すること）」および「減算（すること）」とは、数学関数が相互に逆の関係にあり、かつ数値の加算の場合のように２つの数を結び付ける働きをするという点で、すなわち単純な逆操作によりその結果から他方の数を復元するには２つの数のうちの１つの数（秘密）が必要になるように、数学関数が２つの数を結び付ける働きをするという点で、加算することおよび減算することの対に相当する、数を結び付けるための数学関数の任意の対をいう。
【００４５】
たとえば、整数数値の加算／減算またはビット単位の加算／減算（ビット単位の排他的論理和）を用いてもよい。ステップ２において整数数値またはビット単位の加算、およびステップ３において減算を用いる代わりに、たとえば、掛け算／割り算、累乗／対数、またはこうした関数の組み合わせのような数値数学関数など任意の可逆的数学関数を用いてもよい。これらの数学関数は、加算することおよび減算することにより総称される。ステップ２では、秘密ＳＡとボブの公開鍵を用いてランダムな数字を暗号化した結果ＥＢ（ＲＡ）との和ＳＡ＋ＥＢ（ＲＡ）の代わりに積ＥＢ（ＲＡ）＊ＳＡ、差ＥＢ（ＲＡ）−ＳＡまたは累乗ＥＢ（ＲＡ）ＳＡの計算を行ってもよい。この場合、ステップ３では、減算Ｋ−ＳＢの代わりに比Ｋ／ＳＢ、和Ｋ＋ＳＢ、対数ＳＢｌｏｇ  Ｋの計算を行えばよい。加算／減算の役割については、暗号化したランダムな数字から秘密ＳＡを減算し、受信した結果Ｋに加算して交換してもよい。同様に掛け算／割り算および累乗／対数の役割も交換しても構わない。
【００４６】
修正５
ボブは一定の暗号化および復号アルゴリズムを使用する代わりに、アリスが使用するはずの暗号化アルゴリズムの信号に対するプロトコルを使用してもよく、またはその逆も同様である。
【００４７】
修正６
ボブは一定の一方向性関数を使用する代わりに、アリスが使用するはずの一方向性関数の信号に対するプロトコルを使用してもよく、またはその逆も同様である。
【００４８】
修正７
一部のメッセージは順序が異なってもよく、たとえばアリスは彼女の公開鍵ＰＵＡを送る前に結果Ｋを送ってもよいし、あるいは同じメッセージ内にその両方を送ってもよい。修正５および６において選択した暗号化／復号アルゴリズムおよび／または一方向性関数の場合も同様である。
【００４９】
修正８
場合によっては、秘密を符号化する必要があることもある。この場合、全当事者が連続した番号を取得するか、または秘密に任意のデータ圧縮アルゴリズムを使用してもよい。
【００５０】
修正９
ステップ６においてＲＡを送ることで、アリスとボブとの間の通信を盗聴する不正者は秘密を計算することができる。こうしたリスクを回避するには、アリスはＲＡの数字自体ではなく、ＲＡを秘密と連結し、一方向性関数に基づきその画像を計算し、その結果をボブに送ればよい。こうすれば、盗聴する不正者には秘密が分からない。
【００５１】
修正１０
すべてのステップは、安全な通信チャネルを用いて、たとえば受信機の公開鍵で全メッセージを暗号化することでさらに保護してもよい。
【００５２】
修正１１
すべてのステップは、認証機構を用いて、たとえば公開鍵を利用した認証によりさらに保護してもよい。さらに、たとえば送信者の秘密鍵でメッセージを暗号化することで、各メッセージにデジタル署名を付与してもよい。プロトコルに認証を付与すれば、中間者はプロトコルを確実に妨害できなくなる。
【００５３】
このプロトコルを用いれば、国際公開第２００９／０１４４３８号に関連する問題が解決される。さらに、このプロトコルは、信頼される第三者企業の新たな役割、すなわち共有の秘密の確認という役割を示唆している。この場合、信頼される第三者がアリスおよびボブのうちの１人のステップを実行することになる。
【００５４】
共有の秘密の確認のため、たとえば安全なデータ交換に利用できる方法が提供される。この場合、少なくとも２人の当事者（以下アリスおよびボブという）はそれぞれ秘密を持っており、その課題は、秘密自体を相互にまたは任意の第三者に開示しなくても、彼らが同じ秘密を共有しているか否かを知ることである。この方法は、それぞれの秘密ＳＡおよびＳＢ、暗号化アルゴリズムＥ、復号アルゴリズムＤ、一方向性またはハッシュ関数Ｈ、公開鍵ＰＵＡおよびＰＵＢ、秘密鍵ＰＲＡおよびＰＲＢ、ならびにランダムな数字ＲＡを含む次のステップを含む：
ステップ１：アリスはランダムな数字ＲＡを選択し、ボブの公開鍵ＰＵＢを用いてこれを暗号化し、彼女の秘密ＳＡの値を加算し、結果Ｋをボブに送る；
ステップ２：ボブはＫを受信し、彼の秘密ＳＢを減算し、彼自身の秘密鍵ＰＲＢを用いて復号を行う；
ステップ３：ボブはＬに一方向性関数Ｈを実行し、結果Ｍをアリスに送る；
ステップ４：アリスはＭを受信し、彼女の最初のランダムな数字ＲＡを用いて、同一の一方向性関数Ｈを行い、結果が受信したＭに等しいかどうかを確認する。
【００５５】
ステップ１で加算、およびステップ２で減算を用いる代わりに、たとえば掛け算／割り算、累乗／対数、またはこうした関数の組み合わせなど任意の可逆的数学関数を用いてもよい。
【００５６】
実施形態の１つでは、こうしたステップの後に以下のステップが続く：
ステップ５：アリスは彼女の最初のランダムな数字ＲＡをボブに送る；
ステップ６：ボブはＲＡを受信し、それが彼の以前の結果Ｌと等しいかどうかを確認し、答えが「いいえ」である場合、アリスはボブが同じ秘密を持つことが分かり、答えが「はい」である場合、ボブはアリスが同じ秘密を持たないことが分かると結論する。
【００５７】
実施形態の１つでは、アリスおよびボブはステップ１〜４を繰り返すが、この場合、交換を開始するのはボブである。
【００５８】
実施形態の１つでは、アリス、アリスまたはボブのどちらの当事者が交換を開始すべきかを判定するステップを加える。どちらの当事者が交換を開始すべきかの判定は、どちらの当事者が通信の交換を開始するかにより判定してもよいし、あるいは「硬貨を指ではじき」、コミットメント方式を用いてその硬貨投げの公正性を確保することで判定してもよい。
【図１】
0005544355.tif 000002
【図２】
0005544355.tif 000003