(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0020】
本発明における暗号化された通信チャネル確立のためのプロトコルは、SSL/TLSの代用となるものではない。むしろ、本発明のプロトコルは、アプリケーション層における暗号化された通信チャネルの確立と認証とを同時に行うように働くものとなる。特に断らない限り、「暗号」は、ブロック暗号又はストリームにおける暗号を意味する。
最も重要な点は、本発明のプロトコルは、第1のノード(例えばクライアント)と第2のノード(例えばサーバ)とが秘密情報(例えばパスワード)を事前に共有することを前提とする点にある。この場合、秘密情報(例えばパスワード)をセキュアに管理することは第2のノード(例えばサーバ)の責任となる。
なお、パスワードそのものではなく、パスワードのハッシュを第2のノード(例えばサーバ)に格納することは、本発明にとっては十分ではない。本発明においては、第2のノード(例えばサーバ)が、暗号化された通信チャネルを確立するために、実際のパスワードの値そのものを必要とする。このように、本発明においては、第1のノード(例えばクライアント)と第2のノード(例えばサーバ)とは、予めパスワード(pwC)を共有しているものとする。
【0021】
<第1実施形態>
以下、本発明の実施形態の一例である第1実施形態について説明する。
図1に示すように、本実施形態に係る暗号化通信チャネル確立システム1は、第1のノード10、第2のノード20、及び通信網30から構成される。
【0022】
第1のノード10及び第2のノード20は、それぞれCPU等の制御部110、210、記憶部120、220、及び通信部130、230等を含む任意の電子機器とする。典型的には、公知のコンピュータ、例えば、マイクロコンピュータ、スマートフォン、携帯電話等の携帯端末、タブレット端末、ノートパソコン、パソコン、サーバー、及びルーター等の通信機器を含む。
第1のノード10(のノードユーザ)が第2のノード20にアクセスするための識別情報(id)とパスワード(pwC)が予め設定されているものとする。
【0023】
例えば、第1のノード10がクライアント端末、第2のノード20がサーバの場合、クライアント端末(第1のノード10)におけるノードユーザの識別情報(id)とパスワード(pwC)が予めサーバ(第2のノード20)に設定されていることで、本発明を適用できる。
特に、Webブラウザ(第1のノード10)とWebサーバ(第2のノード20)から構成されるクライアントサーバシステムにおいては、ユーザの識別情報(id)とパスワード(pwC)によりアクセス管理することが一般的なことから、本発明を適用できる。
【0024】
また、オペレータ(ユーザ)が介在しない、マシンとマシンとの間の通信においても、例えば、あるマシン(第1のノード10)が別のマシン(第2のノード20)にアクセスするために、予め識別情報(id)とパスワード(pwC)とが設定されているものであれば本発明を適用することができる。
【0025】
また、第1のノード10を例えば無線端末とし、第2のノード20を例えばWiFi(登録商標)ルータのような無線LANルータとした場合、第1のノード10(無線端末)の識別情報(id)とパスワード(pwC)が予め第2のノード20(無線LANルータ)に設定されているものであれば本発明を適用することができる。
【0026】
また、IOT(Internet Of Things)においても、インターネットに接続し相互に通信する際に、識別情報(id)とパスワード(pwC)により、アクセスコントロールされる場合、本発明を適用することができる。
【0027】
以上のように、第1実施形態では、第1のノード10(のノードユーザ)が第2のノード20にアクセスするための識別情報(id)とパスワード(pwC)が予め設定されていることを前提とする。以下、簡単のため、第1のノード10(のノードユーザ)が第2のノード20にアクセスするための識別情報(id)とパスワード(pwC)を、第1のノード10から第2のノード20にアクセスするための識別情報(id)とパスワード(pwC)とも言う。
【0028】
<ノンスについて>
第1のノード10及び第2のノード20の説明に先立ち、ノンスについて説明する。
ノンスとは、暗号通信等で用いられる一度きりの使い捨てのランダムな値を意味する。したがって、第1のノード10又は第2のノード20がノンスを生成する場合、生成されるノンスの値は、生成されるたびに異なる「一度きり」のものとなる。
「一度きり」であることを担保するために、例えば、ノンスの生成手段として、十分なエントロピーを持った乱数を生成する乱数生成手段を、生成される乱数が重複する可能性を現実的でないほどに下げるように構成することが好ましい。また、ノンスを例えば、できるだけ粒度の細かいタイムスタンプから生成することで、重複する可能性を現実的でないほどに下げるように構成してもよい。
【0029】
<第1のノード10について>
第1のノード10について、
図2を参照しながら説明する。
図2は、本実施形態に係る第1のノード10の機能構成を示すブロック図である。
第1のノード10は、制御部110(例えば、CPU)と、記憶部120と、通信部130と、を備える。
制御部110は、記憶部120と、通信部130とを含むハードウェア群の全体を制御する機能部である。
【0030】
制御部110は、接続要求部111と、第1使い捨て共有値取得部112と、パスワード取得部113と、第1共通鍵生成部114と、第1認証部115と、を備える。これらの各部は、例えば、第1のノード10の記憶部120に格納されたアプリケーションを制御部110が実行することにより機能するように構成することができる。
【0031】
接続要求部111は、第2のノード20との間で暗号化された通信チャネルを確立するに際して、第1のノード10のノードユーザの識別情報(id)を通信部130を介して第2のノード20に送信する。
なお、識別情報(id)については、第1のノード10の入力部(図示せず)を介してノードユーザにより入力されてもよい。また、ユーザ(オペレータ)が介在しない、又は自動的に処理する場合、識別情報(id)を予め記憶部120に記憶しておき、記憶部120から識別情報(id)を入力するように構成してもよい。
【0032】
第1使い捨て共有値取得部112は、第2のノード20と一時的に共有する使い捨ての値(r1)を取得する。
具体的には、第1使い捨て共有値取得部112は、第2のノード20の第2使い捨て共有値取得部212により生成されるノンスを一時的に共有する使い捨ての値(r1)として通信部130を介して取得する。
【0033】
パスワード取得部113は、識別情報(id)に対応するパスワード(pwC)を取得する。具体的には、パスワード取得部113は、第1のノード10の入力部(図示せず)を介してノードユーザにより入力されるパスワードを取得するように構成してもよい。また、ユーザ(オペレータ)が介在しない場合、又は自動的に処理する場合、識別情報に対応するパスワードを予め記憶部120に記憶しておき、パスワード取得部113は、記憶部120からパスワードを入力するように構成してもよい。
【0034】
第1共通鍵生成部114は、第1のノード10のノードユーザの識別情報(id)に対応するパスワード(pwC)と第1使い捨て共有値取得部112により取得された使い捨ての値(r1)とに基づいて、第1のノード10と第2のノード20とが共有する共通関数により共通鍵(k)を生成する。
【0035】
[共通関数について]
第1のノード10と第2のノード20とが共有する共通関数について説明する。
共通関数としては、例えばRBKDF2(Passwod−Based Key Derivation Function 2)関数のような一方向性関数を適用することができる。例えば、RBKDF2関数を適用する場合、RBKDF2関数に入力されるパスワードをpwC、ソルト(Salt)をr1とすることで、共通鍵(k)を生成するように構成することができる。
すなわち、パスワードをpwC、使い捨ての値をr1、RBKDF2関数をH()、生成される共通鍵をkとした場合、共通鍵(k)は、式1により算出される。
k = H(pwC,r1) (式1)
【0036】
また、共通関数として、第1のノード10及び第2のノード20が備える共通の暗号化関数Enc()を適用してもよい。例えば、暗号化関数Enc()を適用する場合、暗号化関数Enc()に入力される暗号鍵をpwC、平文をr1とすることで、共通鍵(k)を生成するように構成することができる。
すなわち、パスワードをpwC、使い捨ての値をr1とした場合、共通鍵(k)は式2により算出される。
k = Enc(r1,pwC) (式2)
共通関数として暗号化関数を用いる場合、第1のノード10及び第2のノード20は、暗号化関数以外の共通関数をインストールする必要がなく、第1のノード及び第2のノードの初期設定を効率的に行うことができる。
なお、共通関数は上記の例に限定されない。例えば、任意の一方向性関数又は暗号化関数を選択することができる。
【0037】
第1認証部115は、ランダムにノンスを生成し、第1共通鍵生成部114により生成された共通鍵により暗号化したノンスをチャレンジデータとして通信部130を介して第2のノード20に送信し、第2のノード20から受信したレスポンスデータを用いて第2のノード20を認証する。
より具体的には、第1認証部115は、ランダムに生成したノンス(r2)を第1共通鍵生成部114により生成された共通鍵(k)により暗号化することで、チャレンジデータを生成する。第1認証部115は、生成したチャレンジデータを通信部130を介して第2のノード20に送信する。後述するように、第2のノード20では、受信したチャレンジデータを第2のノード20の第2共通鍵生成部214により生成された共通鍵(k)により復号したレスポンスデータを生成し、レスポンスデータを第1のノード10(第1認証部115)に返信する。第1認証部115は、第2のノード20から受信したレスポンスデータが、チャレンジデータの元データ(ランダムに生成したノンス)と同じ値であるか否かを判定する。レスポンスデータがチャレンジデータの元データ(ランダムに生成したノンス)と同じ値である場合、第1認証部115は、第2のノード20が正しいパスワード(pwC)を知っていると判断して、第2のノード20を信頼できるものと認証する。
【0038】
記憶部120は半導体メモリやハードディスクドライブ等で構成されており、オペレーティングシステム(OS)やアプリケーションと呼ばれるソフトウェアが保存される。
【0039】
通信部130は、例えば、LAN(Local Area Network)、WAN(Wide Area Netowark)、インターネット回線、有線回線、無線回線等の任意の通信網30に接続し、相互にパケットデータ等の送受信(データ通信)を行う通信プロトコル等を実装する。
【0040】
<第2のノード20について>
第2のノード10について、
図3を参照しながら説明する。
図3は、本実施形態に係る第2のノード20の機能構成を示すブロック図である。
第2のノード20は、第1のノード10と同様に、制御部210(例えば、CPU)と、記憶部220と、通信部230と、を備える。
制御部210は、記憶部220と、通信部230とを含むハードウェア群の全体を制御する機能部である。
【0041】
制御部210は、識別情報受信部211と、第2使い捨て共有値取得部212と、パスワード取得部213と、第2共通鍵生成部214と、第2レスポンス部216と、を備える。これらの各部は、例えば、第2のノード20の記憶部220に格納されたアプリケーションを制御部210が実行することにより機能するように構成することができる。
【0042】
識別情報受信部211は、第1のノード10から識別情報(id)を通信部230を介して受信する。
【0043】
第2使い捨て共有値取得部212は、ランダムにノンス(r1)を生成し、生成したノンスを使い捨ての値とする。
第2使い捨て共有値取得部212は、生成したノンス(r1)を通信部230を介して、第1のノード10(第1使い捨て共有値取得部112)に送信する。そうすることで、第1のノード10及び第2のノード20は、一時的に共有する使い捨ての値(r1)を共有することができる。
【0044】
パスワード取得部213は、第1のノード10から受信した識別情報(id)に基づいて、予め設定されたパスワード(pwC)を取得する。具体的には、セキュアな記憶部(図示せず)から第1のノード10から受信した識別情報(id)に基づいて、予め設定されたパスワード(pwC)を取得する。なお、セキュアな記憶部は第2のノードが備えてもよい。また、第2のノードとは別のファイルサーバが備えるようにしてもよい。
【0045】
第2共通鍵生成部214は、パスワード取得部213により取得されたパスワード(pwC)と第2使い捨て共有値取得部により生成された使い捨ての値(r1)とに基づいて、共通関数により共通鍵を生成する。ここで、共通関数は、前述したように、第1のノード10と第2のノード20とが、予め共有する関数である。
こうすることで、第1のノード10から第2のノード20にアクセスするためのパスワード(pwC)が予め設定されている場合、第2共通鍵生成部214により生成された共通鍵(k)と第1共通鍵生成部114により生成された共通鍵(k)とは、同じ値となる。
【0046】
第2レスポンス部216は、第1のノード10から通信部230を介して受信した暗号化されたノンス(チャレンジデータ)を、第2共通鍵生成部214により生成された共通鍵(k)により復号したレスポンスデータを生成し、レスポンスデータを第1のノード10に送信する。
こうすることで、第1のノード10は、第2のノード20が信頼できるものかどうかを認証することができる。
【0047】
記憶部220は半導体メモリやハードディスクドライブ等で構成されており、オペレーティングシステム(OS)やアプリケーションと呼ばれるソフトウェアが保存される。
【0048】
通信部130は、例えば、LAN(Local Area Network)、WAN(Wide Area Netowark)、インターネット回線、有線回線、無線回線等の任意の通信網30に接続し、相互にパケットデータ等の送受信(データ通信)を行う通信プロトコル等を実装する。
以上、第1のノード10及び第2のノード20の機能構成を説明した。
【0049】
<フローチャートによる動作説明>
次に、
図4を参照して、本発明の一実施形態に係る第1のノード10及び第2のノード20間の処理の流れを説明する。
図4は、処理の一例を示すフローチャートである。
ここでは、共通関数として、RBKDF2関数を適用した。
また、第1のノード10と第2のノード20とが一時的に共有する使い捨ての値については、第2使い捨て共有値取得部212がランダムに生成したノンス(r1)を、第1ノードの第1使い捨て共有値取得部112に送信する方式を適用した。
なお、第1のノード10(例えばクライアント)と第2のノード20(例えばサーバ)とは、予め識別情報(id)及びパスワード(pwC)を予め共有しているものとする。
【0050】
[共通鍵の生成]
ステップST101において、第1のノード10(接続要求部111)は、第1のノード10のノードユーザの識別情報(id)を第2のノード20に送信する。
【0051】
ステップST201において、第2のノード20(識別情報受信部211)は、第1のノード10から識別情報(id)を受信する。
【0052】
ステップST202において、第2のノード20(第2使い捨て共有値取得部212)は、ランダムにノンス(r1)を生成し、使い捨ての値とし、第1のノード10に送信する。
【0053】
ステップST203において、第2のノード20(パスワード取得部213)は、受信した識別情報(id)に基づいて、予め設定されたパスワード(pwC)を取得する。
【0054】
ステップST204において、第2のノード20(第2共通鍵生成部214)は、予め設定されたパスワード(pwC)と第2使い捨て共有値取得部212により生成された使い捨ての値(r1)とに基づいて、共通関数(H)により共通鍵(k)(=H(pwC,r1))を生成する。
【0055】
ステップST102において、第1のノード10(第1使い捨て共有値取得部112)は、第2のノード20(第2使い捨て共有値取得部212)から送信される使い捨ての値(r1)を受信することで、取得する。
【0056】
ステップST103において、第1のノード10(第1共通鍵生成部114)は、識別情報(id)に対応するパスワード(pwC)と第1使い捨て共有値取得部112により取得された使い捨ての値(r1)とに基づいて共通関数(H)により共通鍵(k)(=H(pwC,r1))を生成する。
【0057】
[第1のノード10による第2のノード20の認証]
ステップST104において、第1のノード10(第1認証部115)は、ランダムにノンス(r2)を生成する。
【0058】
ステップST105において、第1のノード10(第1認証部115)は、共通鍵(k)により暗号化したノンスをチャレンジデータ(c1)(=Enc(r2、k))として、第2のノード20に送信する。
【0059】
ステップST205において、第2のノード20(第2レスポンス部216)は、第1のノード10から受信したチャレンジデータ(c1)を共通鍵(k)により復号したレスポンスデータ(Dec(c1、k))を生成し、第1のノード10に送信する。
【0060】
ステップST106において、第1のノード10(第1認証部115)は、第2のノード20から受信したレスポンスデータ(Dec(c1、k))がチャレンジデータの元データ(r2)と同じ値であるか否かを判定する。レスポンスデータ(Dec(c1、k))がチャレンジデータの元データ(r2)と同じ値である場合(Yesの場合)ステップST107に移る。レスポンスデータがチャレンジデータの元データ(ランダムに生成したノンスr2)と異なる値の場合(Noの場合)ステップST101に戻る。
【0061】
ステップST107において、第1のノード10と第2のノード20との間で、共通鍵(k)により暗号化される通信チャネルが確立されるとともに、第2ノードが信頼できることが認証されたことになる。
【0062】
[第2のノード20による第1のノード10の認証]
第1のノード10(第1認証部115)が、第2のノード20を信頼できるものと認証できたことで、共通鍵(k)により暗号化される通信チャネルが確立することができる。第2のノード20による第1のノード10の認証についても実質的に完了しているとみなすことができる。
これは、共通鍵(k)が、第1のノード10及び第2のノード20のみが知るパスワード(pwC)により生成されたことに基づく。
【0063】
以上のように、共通鍵(k)により暗号化される通信チャネルがアプリケーション層に確立されて以降の第1のノード10のアプリケーションと第2のノード20のアプリケーションとの間のデータの送受信は、共通鍵(k)により暗号化される通信チャネル(「暗号化通信チャネル」という)を介して行われるように構成される。
具体的には、第1のノード10のアプリケーション(又は第2のノード20のアプリケーション)が平文を第2のノード20のアプリケーション(又は第1のノード10のアプリケーション)を宛先として送信すると、暗号化通信チャネルにおいて、平文が共通鍵(k)により暗号化され、通信網を伝送される。その後、暗号化通信チャネルにおいて、暗号文が共通鍵(k)により復号され、第2のノード20のアプリケーション(又は第1のノード10のアプリケーション)に平文が引き渡される。
本発明の共通鍵(k)により暗号化される通信チャネルは、第1のノード10と第2のノード20におけるアプリケーション層において、第1のノード10または第2のノード20から相手先(第2のノード10または第1のノード20)に向けて送信されるメッセージは暗号化され、第1のノード10または第2のノード20が相手先(第2のノード10または第1のノード20)から受信するメッセージは復号される。
このように、第1のノード10と第2のノード20との間で、トランスポート層のSSL/TLSを置き換えることなく、アプリケーション層においてアプリケーションデータを、共通鍵(k)により暗号化された状態で送受信することができる。
【0064】
以上、本発明の実施形態の一例である第1実施形態について説明したが、本発明は、上述した実施形態に限定されるものではない。次に、第1使い捨て共有値取得部112及び第2使い捨て共有値取得部212の別実装例について説明する。
【0065】
<第1使い捨て共有値取得部112及び第2使い捨て共有値取得部212の変形例1>
第1実施形態においては、第2ノードの第2使い捨て共有値取得部212がランダムに生成したノンス(r1)を、第1ノードの第1使い捨て共有値取得部112に送信することにより、当該ノンス(r1)を第1のノード10と第2のノード20とが一時的に共有する使い捨ての値とした。
【0066】
これに対して、第1ノード10の第1使い捨て共有値取得部112がランダムに生成したノンスを、第2ノード20に送信することにより、当該ノンスを第1のノード10と第2のノード20とが一時的に共有する使い捨ての値としてもよい。
【0067】
<第1使い捨て共有値取得部112及び第2使い捨て共有値取得部212の変形例2>
[カウンタ値による、一時的に共有する使い捨ての値について]
ノンスの生成に替えて、カウンタ値を用いて一時的に共有する使い捨ての値を生成するようにしてもよい。この場合、第1のノード10が第1カウンタ(図示せず)を備え、第2のノード20が第2カウンタ(図示せず)を備え、第1カウンタと第2カウンタとが同期を取ることにより、第1カウンタの値(第1カウンタ値)と第2カウンタの値(第2カウンタ値)とが、常に同じ値となるように構成する。そうすることで、第1カウンタの値及び第2のカウンタの値をそれぞれ第1のノード10及び第2のノード20が「一度限り」の一時的に共有する使い捨ての値を取得することができる。
【0068】
具体的には、第1カウンタ及び第2カウンタの初期設定において、第1カウンタの値及び第2カウンタの値を例えば1になるように初期設定する。その後、例えば共通鍵を生成するたび(又は、共通鍵(k)をリセットするたび)に、第1ノード及び第2ノードは、それぞれ第1カウンタ及び第2カウンタをインクリメントさせることで、第1カウンタ及び第2カウンタとが同期を取るように構成する。なお、インクリメントするタイミングは、共通鍵(k)を生成する前又は共通鍵を生成した後に統一することが好ましい。
【0069】
[共通鍵の生成について]
第1使い捨て共有値取得部112及び第2使い捨て共有値取得部212をカウンタを用いて構成する場合、第1共通鍵生成部114及び第2共通鍵生成部214による共通鍵(k)の生成について説明する。
【0070】
共通関数として、RBKDF2関数を適用した場合、第1カウンタ及び第2カウンタの値がi番目(i≧1)の値(i)を示しているとき、パスワードをpwC、RBKDF2関数をH()とすると、第1共通鍵生成部114及び第2共通鍵生成部214により生成される共通鍵(k
i)は、式3により算出される。
k
i = H(pwC,i) (式3)
【0071】
また、共通関数として、暗号化関数を適用した場合、第1カウンタ及び第2カウンタの値がi番目(i≧1)の値(i)を示しているとき、パスワードをpwC、暗号化関数をEnc()とすると、第1共通鍵生成部114及び第2共通鍵生成部214により生成される共通鍵(k
i)は、暗号鍵をpwC、平文をiとすることで、式4により算出される。
k
i = Enc(i,pwC) (式4)
【0072】
このように第1ノードの第1使い捨て共有値取得部112及び第2ノードの第2使い捨て共有値取得部212は、ノンスをお互いに送付することなく、第1カウンタの示すカウント値及び第2カウンタの示すカウント値をそれぞれ、第1のノード10と第2のノード20とが「一度限り」の一時的に共有する使い捨ての値とするように構成することができる。
【0073】
<第1認証部115の別実装例>
次に、第1認証部115の別実装例について説明する。
第1実施形態においては、第1認証部115は、ランダムにノンスを生成し、共通鍵(k)により暗号化したノンスをチャレンジデータとして、第2のノード20に送信し、第2のノード20から受信したレスポンスデータを用いて、第2のノード20を認証した。
【0074】
これに対して、第1認証部115は、ランダムにノンスを生成し、生成したノンスを平文のままチャレンジデータとして、第2のノード20に送信し、第2のノード20から受信したレスポンスデータを用いて第2のノード20を認証するようにしてもよい。
より具体的には、第1認証部115は、ランダムに生成したノンスを平文のままチャレンジデータとして、第2のノード20に送信する。これに対して第2のノード20(第2レスポンス部216)は、受信したチャレンジデータを共通鍵(k)により暗号化したレスポンスデータを生成し、第1のノード10に返信する。
そうすることで、第1認証部115は、第2のノード20(第2レスポンス部216)から受信したレスポンスデータを共通鍵(k)により復号したデータの値が、チャレンジデータ(ランダムに生成したノンス)の値と同じ値であるか否かを判定する。レスポンスデータを共通鍵(k)により復号したデータの値が、チャレンジデータ(ランダムに生成したノンス)の値と同じ値である場合、第1認証部115は、第2のノード20が正しいパスワード(pwC)を知っていると判断して、第2のノード20を信頼できるものと認証することができる。
【0075】
上記のとおり、第2レスポンス部216は、第1のノード10から受信したチャレンジデータを、共通鍵(k)により暗号化したデータをレスポンスデータとして、第1のノード10に送信するように構成される。
【0076】
第1認証部115は、チャレンジデータを、平文のままとするか又は共通鍵で暗号化するか、を選択的に利用可能とすることができる。
このために、第1認証部115は、チャレンジデータが平文のままであるか又は共通鍵で暗号化されているかを識別するための識別子をチャレンジデータに付加したデータを第2のノード20に送信するように構成してもよい。
この場合、第2レスポンス部216は、識別子に基づいて、レスポンスデータを生成するように構成される。
【0077】
<第2のノードによる第1のノードの認証について(その1)>
第1実施形態においては、第1のノード10(第1認証部115)が、第2のノード20を信頼できるものと認証できたことで、共通鍵(k)により暗号化される通信チャネルが確立され、第2のノードによる第1のノードの認証を省略した。
これに対して、第2のノードによる第1のノードの認証を行うようにしてもよい。
この場合、第2のノード20が第1のノード10を認証する方式として、例えば、第2使い捨て共有値取得部212により生成され、第1のノード10に送付済みのノンス(r1)を再利用してもよい。
具体的には、第1のノード10は、ノンス(r1)を共通鍵(k)により暗号化して、第2のノード20に送信する。第2のノード20は、第1のノード10から受信したデータを共通鍵(k)により復号(Dec(c2、k))し、復号されたデータ(Dec(c2、k))がノンス(r1)と同じ値であるか否かを判定する。復号されたデータ(Dec(c2、k))がノンス(r1)と同じ値である場合、第2のノード20は、第1のノード10(のノードユーザ)が予め設定された識別情報とパスワードの持ち主であることを認証することができる。
【0078】
<第2のノードによる第1のノードの認証について(その2)>
第1実施形態においては、第1のノード10及び第2のノード20がそれぞれ共通鍵(k)を生成した後、第1のノード10(第1認証部115)がチャレンジデータを作成し、第2のノード20からレスポンスを受信することで、第2のノード20を認証した。
【0079】
これに対して、第1のノード10及び第2のノード20がそれぞれ共通鍵(k)を生成した後、第2のノード10がチャレンジデータを作成し、第1のノード10からレスポンスを受信することで、第1のノード10を認証するように構成してもよい。
特に、一時的に共有する使い捨ての値(r1)を第1のノード10(第1使い捨て共有値取得部112)が生成し、第1のノード10及び第2のノード20がそれぞれ、前記一時的に共有する使い捨ての値(r1)とパスワード(pwC)とに基づいて、共通鍵(k)を生成する場合に、第2のノード20が第1のノード10を認証するように構成することが好ましい。
【0080】
より具体的には、
図5及び
図6に示すように、第2のノード20は第1のノード10を認証するために第2認証部215を備える。また、第1のノードは第1レスポンス部116を備える。
【0081】
第2認証部215は、ランダムにノンスを生成し、共通鍵(k)により暗号化したノンスをチャレンジデータとして、通信部230を介して第1のノード10(第1レスポンス部116)に送信する。
【0082】
第1レスポンス部116は、第2のノード20(第2認証部215)から通信部130を介して受信した暗号化されたノンス(チャレンジデータ)を、共通鍵(k)により復号したレスポンスデータを生成し、第2のノード20(第2認証部215)に送信する。
【0083】
第2認証部215は、第1のノード20(第1レスポンス部116)から受信したレスポンスデータを用いて第1のノード10を認証する。
こうすることで、第2認証部215は、第1のノード10が信頼できるものかどうかを認証することができる。
なお、第2認証部215は、前述した第1認証部115の別実装例と同様に、ランダムにノンスを生成し、生成したノンスを平文のままチャレンジデータとして、第1のノード10(第1レスポンス部116)に送信し、第1のノード10(第1レスポンス部116)から受信したレスポンスデータを用いて第1のノード10を認証するように構成してもよい。
【0084】
第2認証部215の機能は、前述した第1認証部115の機能説明において、「第1」を「第2」に読み替え、また「第2」を「第1」に読み替えることで説明できるため、詳細な説明は省略する。
【0085】
同様に、第1レスポンス部116の機能は、前述した第2レスポンス部216の機能説明において、「第2」を「第1」に読み替え、また「第1」を「第2」に読み替えることで説明できるため、詳細な説明は省略する。
【0086】
<SSL/TLSプロトコルを用いた識別情報及びパスワードの初期設定>
第1実施形態においては、第1のノード10と第2のノード20とは、予めパスワードを共有していることが前提であった。これに対して、SSL/TLSプロトコルを利用して、第1のノード10と第2のノード20とが、識別情報及びパスワードを初期設定する一例について説明する。
【0087】
[初めてのアクセス時]
第1のノード10のノードユーザが初めて第2のノード20にアクセスするときは、SSL/TLSプロトコルを利用して、第1のノードと第2のノードとの間で、第2のノード20の公開鍵を使用して、第2のノード20の認証を行い、暗号化された通信チャネルを確立する。
【0088】
第1のノード10と第2のノード20との間で暗号化された通信チャネルが確立された後、当該通信チャネルを用いて、第1のノード10と第2のノード20間で、第1のノード10のノードユーザの識別情報(id)及びパスワード(pwC)を初期設定し、第2のノード20は、識別情報(id)とパスワード(pwC)を例えばセキュアに記憶する。
こうすることで、第1のノード10のノードユーザの識別情報(id)とパスワード(pwC)が、第2のノード20に設定されている状態となる。
【0089】
第1のノード10のノードユーザの識別情報(id)とパスワード(pwC)が、第2のノード20に設定されて以降の第1のノード10から第2のノード20への接続には、パスワード(pwC)に基づく暗号化された通信チャネル確立システム1を適用することができる。
【0090】
このように、第1のノード10と第2のノード20との間で、識別情報(id)及びパスワード(pwC)が設定されていない場合に、最初に、SSL/TLSを用いて識別情報(id)及びパスワード(pwC)を設定することで、2回目以降の第1のノード10から第2のノード20への接続においては、公開鍵及び第三者の認証局を必要とせず、パスワード(pwC)に基づく共通鍵を生成し、共通鍵により暗号化された通信チャネルを確立するとともに、同時にノードの認証を行うことができる。
【0091】
<第1実施形態の効果>
以上のように、本実施形態によれば、第1のノード10及び第2のノード20は、通信路上で識別情報(id)と一時的に共有する使い捨ての値(r1)を送受信することで、予め共有する秘密情報であるパスワードと「一度限り」の一時的に共有する使い捨ての値とに基づいて、それぞれ共通鍵を生成する第1共通鍵生成部114及び第2共通鍵生成部214と、を備える。
これにより、公開鍵及び第三者の認証局を必要とせず、証明書発行コストを不要とするとともに、証明書に伴うやりとりの負荷が軽減され、共通鍵により暗号化された通信チャネルを安価に容易に確立することができる。
【0092】
また、仮に第三者が通信路上に送受信されるデータ(識別情報(id)と一時的に共有する使い捨ての値(r1))を盗聴できたと仮定しても、第三者はパスワード(pwC)を知らない限り、共通鍵(k)を生成することはできず、また、暗号化された通信チャネルを確立する毎に異なる共通鍵が生成されることから、安全性を十分に担保することができる。
【0093】
また、第1のノード10のノードユーザーが複数いる場合に、あるノードユーザーのパスワードが破られた場合であっても、当該ノードユーザー以外の他のノードユーザーと第2のノード20との間に確立された、暗号化された通信チャネルを脅かすものではないことから、独立して安全性を担保することができる。
【0094】
また、第1のノード10及び第2のノード20とがパスワードを共有するシステムであれば、本実施形態を適用できることから、クライアントサーバ型のシステムはもとより、WebブラウザとWebサーバ型のシステム、マシン対マシン型のシステム、無線端末と無線LAN機器との接続、さらにはIOT(Internet Of Things)等幅広く適用可能であり、社会的なインフラ基盤として、幅広く提供することができる。
【0095】
また、第1のノード10は、チャレンジデータ(r2)を共通鍵(k)により暗号化し、第2のノード20に送信し、第2のノード20において共通鍵(k)により復号されたレスポンスデータ(r2)を受信することで、第2のノード20を認証する。
これにより、第1のノード10と第2のノード20との間で、パスワードに基づいて生成される共通鍵による暗号化された通信チャネルを確立できることが、実質的に各ノードの認証の成功を含む。これにより、暗号化された通信チャネルの確立とノードの認証とを、1段階で実行することができる。
【0096】
また、暗号化通信チャネル確立システム1は、共通関数として、汎用的な一方向性関数又は暗号化関数を利用することができるので、用途に応じて、任意の共通関数を利用することができる汎用性を備える。
以上、本発明の実施形態についてその構成要素の変形例を含めて説明したが、本発明は上述した実施形態に限るものではない。
【0097】
<第2実施形態>
第1実施形態において、第1共通鍵生成部114及び第2共通鍵生成部214は、パスワード(pwC)及び一時的に共有する使い捨ての値(r1)に基づいて、1個の共通鍵(k)を生成した(式1〜式4)。
これに対して、第1共通鍵生成部114及び第2共通鍵生成部214は、共通鍵(k)に基づいて、さらに、別の共通鍵(k´)を生成するように構成してもよい。
例えば、第1使い捨て共有値取得部112及び第2使い捨て共有値取得部212によりr1とは別の一時的に共有する使い捨ての値(r1´)を取得することにより、RBKDF2関数に入力されるパスワードを共通鍵(k)、ソルト(Salt)をr1´とすることで、式5により共通鍵(k)から別の共通鍵(k´)を生成するように構成することができる。
k´ = H(k,r1´) (式5)
こうすることで、第1共通鍵生成部114及び第2共通鍵生成部214は、2つの共通鍵k=H(pwC,r1)及びk´=H(k,r1´)を生成することができる。
ここで、r1´として、例えば第1のノード10(第1認証部115)の生成したチャレンジデータとなるノンス(r2)を用いてもよい。
【0098】
同様に、「一度限り」の一時的に共有する使い捨ての値として、第1カウンタ及び第2カウンタの表すカウンタ値を適用する場合、第1カウンタ及び第2カウンタをそれぞれ、インクリメントさせることで、別の共通鍵(k´)を生成するように構成することができる。
例えば、共通鍵(k)を生成した後、第1カウンタ及び第2カウンタをそれぞれ、インクリメントさせて、第1カウンタ及び第2カウンタの値が例えば2となった場合、式6により共通鍵(k)から別の共通鍵(k´)を生成するように構成することができる。
k´ = H(k,2) (式6)
【0099】
また、「一度限り」の一時的に共有する使い捨ての値として、第1カウンタ及び第2カウンタの表すカウンタ値を適用する場合、第1カウンタ及び第2カウンタをそれぞれ、共通鍵を生成するたびに、インクリメントさせることで、2つの共通鍵(k1、k2)を生成するように構成することができる。
具体的には、例えば、RBKDF2関数に入力されるパスワードを共通鍵(k)とし、ソルト(Salt)を「i」及び「i+1」とすることで、式7及び式8に示すように、2つの共通鍵(k1、k2)を生成するように構成することができる。
k1= H(k,i) (式7)
k2= H(k,i+1) (式8)
【0100】
このように第1共通鍵生成部114及び第2共通鍵生成部214は、先に生成した共通鍵(k)に基づいて2つの鍵(k、k´)又は2つの鍵(k1、k2)を生成することができる。
なお、第1共通鍵生成部114及び第2共通鍵生成部214が、先に生成した共通鍵(k)に基づいて2つの鍵を生成する方法は、上述した実施例に限定されるものではない。
例えば、共通関数として、暗号化関数Enc()を適用する場合についても、RBKDF2関数の場合と同様に、2つの共通鍵を生成することができる。
【0101】
第2実施形態で作成する2つの共通鍵について、一方を暗号化に用いるセッション鍵(共通鍵)、他方を完全性の確認に用いるMAC(Message Authentication Code)鍵として、SSL/TLS(レコードプロトコル)に、引き渡すことが可能となる。
すなわち、第2実施形態で作成する2つの共通鍵のうち、一方を暗号化に用いるセッション鍵(共通鍵)、他方を完全性の確認に用いるMAC鍵として、SSL/TLS(レコードプロトコル)のセキュリティ暗号として設定することが可能となる。
こうすることで、SSL/TLSのハンドシェイクプロトコルの代わりに、第2実施形態により、暗号化された通信チャネルの確立及び通信相手の認証といった、暗号通信のための準備を行い、レコードプロトコルは、第2実施形態で生成した2つの共通鍵を使い、送受信するデータの暗号化と完全性(交換されるデータが改ざんされていないこと)のチェックを行うようにすることができる。
【0102】
<第2実施形態の効果>
第2実施形態によれば、第1のノード(例えばクライアント端末)のノードユーザが第2のノード(例えばサーバ)にアクセスするための識別情報(id)及びパスワード(pwC)が予め設定されている場合に、公開鍵及び第三者の認証局を必要とせず、メッセージの暗号化に用いるセッション鍵(共通鍵)及び完全性の確認に用いるMAC鍵を簡易に生成することができる。
これにより、第1のノードと第2のノード間でセッション鍵により暗号化された通信チャネルを確立するとともに、MAC鍵によりメッセージの改ざんを防止することが可能となり、証明書に伴うやりとりの負荷が軽減され、共通鍵により暗号化された通信チャネルを安価に容易に確立することができる。
【0103】
本発明の共通鍵により暗号化された通信チャネルを確立する暗号化通信チャネル確立システム1は、専用のシステムによらず、通常のコンピュータシステムを用いて実現できる。例えば、コンピュータに上述の動作を実行するためのプログラムを格納したコンピュータ読み取り可能な記録媒体(CD、DVD,ブルーレイディスク等のリムーバブルメディア等)を配布してもよいし、又はネットワークを介して、サーバー又はクラウドからコンピュータにダウンロードされることにより配布してもよい。
そして、配布されたプログラムをコンピュータにインストールすることにより、第1のノード10、又は第2のノード20等を構成することができる。
そして、プログラムを起動し、OSの制御下で実行することにより、コンピュータに第1のノード10、又は第2のノード20の備える機能部として機能させることができる。
【0104】
特に、上記プログラム(第1のノードとして機能させるプログラム)をコンピュータに搭載されるブラウザにインストールし、上記プログラム(第2のノードとして機能させるプログラム)をWEBサーバにインストールすることにより、ブラウザとWebサーバにより構成されるブラウザベースのクライアントサーバシステムに本発明の共通鍵により暗号化された通信チャネルを確立する暗号化通信チャネル確立システム1をインストールすることができる。
【0105】
また、共通鍵により暗号化された通信チャネルを確立する暗号化通信チャネル確立方法も、ソフトウェアにより実現される。ソフトウェアによって実現される場合には、このソフトウェアを構成するプログラムが、コンピュータ(第1のノード10又は第2のノード20)にインストールされる。また、これらのプログラムは、CD−ROMのようなリムーバブルメディアに記録されてユーザに配布されてもよいし、ネットワークを介してユーザのコンピュータにダウンロードされることにより配布されてもよい。さらに、これらのプログラムは、ダウンロードされることなくネットワークを介したWebサービスとしてユーザのコンピュータに提供されてもよい。