(57)【特許請求の範囲】
【請求項１】
所定の使用状態で測定動作を実行し、測定データを取得するセンサと、
前記測定データに対して暗号化処理を実行して暗号化データを生成し、当該暗号化データをメモリに格納するプロセッサと、を有し、
前記プロセッサは、供給電源の電圧値が所定値以上ある場合に、前記暗号化処理に用いる擬似乱数列を初期化する処理を実行することを特徴とするセンサデバイス。
【請求項２】
請求項１において、
前記プロセッサは、擬似乱数を用いて前記暗号化データを生成し、当該暗号化データを生成する際に用いた前記擬似乱数が前記擬似乱数列の初期化から何回目に出力されたものであるかを示す乱数出力回数情報を前記暗号化データに付加して出力することを特徴とするセンサデバイス。
【請求項３】
請求項１において、
前記プロセッサは、前記センサデバイスの起動回数を前記メモリ上で管理し、前記擬似乱数列初期化処理において、前記起動回数から乱数を生成して初期化ベクトルを取得し、当該初期化ベクトルと前記センサデバイスの共通鍵とを用いて秘密鍵を生成し、当該秘密鍵で内部状態を生成することを特徴とするセンサデバイス。
【請求項４】
請求項３において
前記プロセッサは、前記内部状態と当該内部状態の配列要素を入れ替えるための情報であるインデックス情報とを用いて擬似乱数列を出力し、当該擬似乱数列の出力を所定回数実行して前記擬似乱数列初期化処理を完了することを特徴とするセンサデバイス。
【請求項５】
請求項１において、
前記プロセッサは、外部電源が接続されているか否か判断することによって、前記供給電源の電圧値が所定値以上であると判定することを特徴とするセンサデバイス。
【請求項６】
所定の使用状態で測定動作を実行し、測定データを出力するセンサデバイスの制御方法であって、
前記センサデバイスのプロセッサが、供給電源の電圧値が所定値以上ある場合に、暗号化処理に用いる擬似乱数列を初期化する処理を実行するステップと、
前記プロセッサが、前記初期化された擬似乱数列を用いて、前記測定データに対して暗号化処理を実行して暗号化データを生成し、当該暗号化データをメモリに格納するステップと、
を有することを特徴とする制御方法。
【請求項７】
請求項６において、
さらに、前記プロセッサが、擬似乱数を用いて前記暗号化データを生成し、当該暗号化データを生成する際に用いた前記擬似乱数が前記擬似乱数列の初期化から何回目に出力されたものであるかを示す乱数出力回数情報を前記暗号化データに付加して出力するステップを有することを特徴とする制御方法。
【請求項８】
請求項６において、
さらに、前記プロセッサが、前記センサデバイスの起動回数を前記メモリ上で管理ステップを有し、
前記擬似乱数列を初期化するステップにおいて、前記プロセッサは、前記起動回数から乱数を生成して初期化ベクトルを取得し、当該初期化ベクトルと前記センサデバイスの共通鍵とを用いて秘密鍵を生成し、当該秘密鍵で内部状態を生成することを特徴とする制御方法。
【請求項９】
請求項８において
前記擬似乱数列を初期化するステップにおいて、前記プロセッサは、前記内部状態と当該内部状態の配列要素を入れ替えるための情報であるインデックス情報とを用いて擬似乱数列を出力し、当該擬似乱数列の出力を所定回数実行して前記擬似乱数列初期化処理を完了することを特徴とする制御方法。
【請求項１０】
請求項６において、
前記擬似乱数を初期化するステップにおいて、前記プロセッサは、外部電源が接続されているか否か判断することによって、前記供給電源の電圧値が所定値以上であると判定することを特徴とする制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、センサデバイス、及びその制御方法に関し、例えば、人の身体に装着され、或いは、所定の環境下に配置され、測定したデータを出力するセンサデバイス、及びその制御方法に関するものである。
【背景技術】
【０００２】
人にセンサノード（センサデバイスともいう）を装着したり、情報端末を所定の環境下に設置したりして、個人情報、生体情報、及び環境情報等を取得することが考えられている。
【０００３】
例えば、特許文献１に示されるように、センサ、無線、マイコン等を搭載した小型のセンサノードが実用化段階にある。特許文献１で開示されるセンサノードでは、センシングや無線通信が必要なタイミングでのみ起動し、それ以外では電源を切って消費電力を削減する間欠動作を実行している。また、このような脈拍を測ることを目的としたセンサノードは電源を内蔵しつつも一般的に小型であり、人が身に付けることも容易である場合が多い。従って、日常生活において、人の生活の中の活動の情報を容易に収集し、収集情報をサーバ装置に送信して集中管理することが可能となっている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００４−２３４６２２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１に示されるセンサノードにおいては、センシングして収集した情報は脈拍などの個人情報であり、取り扱いを厳重にしなければならないところ、当該個人情報を単に通信によりサーバ装置に送信することを想定しており、第三者による個人情報の閲覧や改竄を防止するという観点が欠落している。
【０００６】
また、このようなセンサノードや情報端末においては、小型バッテリを電源として駆動するため、低消費電力でセンシングする必要がある。ところが、特許文献１に示されるセンサノードは、センシング処理に特化して、それ以外の時間をスリープ状態にして消費電力を削減する間欠動作であるため、センシング処理以外で処理時間が長くなると、消費電力が大幅に増大し、電池を電源とした場合には日常利用が困難な電池寿命となる。
【０００７】
本発明はこのような状況に鑑みてなされたものであり、センサノードで収集した情報を安全に送信すると共に、センシング処理以外の処理における消費電力の増加の影響を軽減することができる技術を提供するものである。
【課題を解決するための手段】
【０００８】
本発明では、センサノードで暗号化に用いる擬似乱数列を初期化、更新する処理を、パワーオン時や、外部電源による充電や給電時、あるいはバッテリの残量が十分である場合のみ実行する。また、送信する暗号化データには、疑似乱数列の初期化から、そのパケットを暗号化した乱数を出力するまでの出力回数を付加する。
【０００９】
即ち、本発明によるセンサノード（センサデバイス）では、センサによって取得した測定データに対して暗号化処理を実行して暗号化データを生成する。そして、当該センサノードでは、供給電源の電圧値が所定値以上ある場合（例えば、内臓バッテリの電圧残量が所定値以上の場合、或いは、外部電源が接続されていることを検知した場合）に、暗号化処理に用いる擬似乱数列を初期化する処理を実行するようにしている。
【００１０】
本発明に関連する更なる特徴は、本明細書の記述、添付図面から明らかになるものである。また、本発明の態様は、要素及び多様な要素の組み合わせ及び以降の詳細な記述と添付される特許請求の範囲の様態により達成され実現される。
【００１１】
本明細書の記述は典型的な例示に過ぎず、本発明の特許請求の範囲又は適用例を如何なる意味に於いても限定するものではないことを理解する必要がある。
【発明の効果】
【００１２】
本発明によれば、センサノードで収集した情報を安全に格納し、または送信することができ、また、センシング処理以外の処理における消費電力の増加の影響を軽減することができるようになる。
【図面の簡単な説明】
【００１３】
【図１】本発明の実施形態によるセンサノードの概略構成を示すブロック図である。
【図２】センサノードで用いられる電源検出回路の構成例を示す図である。
【図３】センサノードで用いられるＯＲ回路の構成例を示す図である
【図４】センサノード、基地局、サーバを含むシステムの概略構成例を示す図である。
【図５】本発明の実施形態による基地局の内部構成例を示すブロック図である。
【図６】本発明の実施形態によるサーバの内部構成例ブロック図である。
【図７】本発明の実施形態における、暗号化ファイルのデータフォーマット例を示す図である。
【図８】各センサノードの共通鍵を記録した共通鍵テーブルの構成例を示す図である。
【図９】本発明の実施形態であるサーバにおける、センサデータ（暗号化データ）を復号化する際に生成される内部情報を保持する内部情報保持データの構成例を示す図である。
【図１０】センサノードの処理の概要を説明するためのフローチャートである。
【図１１】センサノードの初期化処理（Ｓ１０１）の詳細を説明するためのフローチャートである。
【図１２】センサノードの擬似乱数初期化処理（Ｓ１１２及びＳ２０２）の詳細を説明するためのフローチャートである。
【図１３】センサノードの暗号化処理（Ｓ１０７）の詳細を説明するためのフローチャートである。
【図１４】センサノードやサーバが有する内部状態の構成例を示す図である。
【図１５】センサノードやサーバが有する秘密鍵の構成例を示す図である。
【図１６】センサノードやサーバにおいて、ストリーム暗号化アルゴリズムをＡＲＣＦＯＵＲとした場合の、ストリーム暗号化アルゴリズムの初期化処理（Ｓ３０３）の詳細を説明するためのフローチャートである。
【図１７】センサノードやサーバにおいて、ストリーム暗号化アルゴリズムをＡＲＣＦＯＵＲとした場合の、ストリーム暗号化アルゴリズムの擬似乱数出力処理（Ｓ３０６及びＳ４０３）の詳細を説明するためのフローチャートである。
【図１８】センサノードの通信処理（Ｓ１０２）の詳細を説明するためのフローチャートである。
【図１９】基地局におけるデータ受信処理の詳細を説明するためのフローチャートである。
【図２０】サーバの暗号化ファイル復号化処理の詳細を説明するためのフローチャートである。
【図２１】サーバの擬似乱数列初期化処理（Ｓ９１１）の詳細を説明するためのフローチャートである。
【図２２】サーバの復号化処理（Ｓ９０５）の詳細を説明するためのフローチャートである。
【図２３】センサノードの消費電流の変化を示す図である。
【発明を実施するための形態】
【００１４】
本発明は、例えば人体に装着可能な、或いは所定の環境下に設置可能な超小型のセンサノードにおいて、測定データを暗号化する際に生じる電力消費の影響を軽減することができる技術を提供するものである。
【００１５】
以下、添付図面を参照して本発明の実施形態について説明する。添付図面では、機能的に同じ要素は同じ番号で表示される場合もある。なお、添付図面は本発明の原理に則った具体的な実施形態と実装例を示しているが、これらは本発明の理解のためのものであり、決して本発明を限定的に解釈するために用いられるものではない。
【００１６】
本実施形態では、当業者が本発明を実施するのに十分詳細にその説明がなされているが、他の実装・形態も可能で、本発明の技術的思想の範囲と精神を逸脱することなく構成・構造の変更や多様な要素の置き換えが可能であることを理解する必要がある。従って、以降の記述をこれに限定して解釈してはならない。
【００１７】
更に、本発明の実施形態は、後述されるように、汎用コンピュータ上で稼動するソフトウェアで実装しても良いし専用ハードウェア又はソフトウェアとハードウェアの組み合わせで実装しても良い。
【００１８】
なお、本明細書の図では、テーブルやリストを例にして本発明で用いられる情報について説明しているが、テーブルやリストの構造で提供される情報に限られるものではなく、データ構造に依存しない情報であっても良い。
【００１９】
また、各情報の内容を説明する際に、「識別情報」、「識別子」、「名」、「名前」、「ＩＤ」という表現を用いるが、これらについてはお互いに置換が可能である。
【００２０】
以後の説明では「プログラム」を主語として各処理の説明を行うことがあるが、プログラムはプロセッサによって実行されることで定められた処理をメモリ及び通信ポート（通信制御装置）を用いながら行うため、プロセッサを主語とした説明としてもよい。また、プログラムを主語として開示された処理は管理サーバ等の計算機、情報処理装置が行う処理としてもよい。プログラムの一部または全ては専用ハードウェアで実現してもよく、また、モジュール化されていても良い。各種プログラムはプログラム配布サーバや記憶メディアによって各計算機にインストールされてもよい。
【００２１】
＜センサノードの構成＞
図１は、本発明の第１の実施形態によるセンサノード１（センサデバイス、センサ装置、センサ端末、情報端末などと言うこともできる）の概略構成を示す図である。
【００２２】
センサノード１は、マイコン１０と、センサ２と、リアルタイムクロック（ＲＴＣ）３と、センサノード１の内部の所定の電源電圧を生成するレギュレータ４と、バッテリ（例えば、内蔵された充電池）５と、外部から供給される電源によってバッテリ５の充電を制御する充電回路６と、シリアル−ＵＳＢ変換回路７と、無線通信部９と、ＵＳＢポート８と、ＥＥＰＲＯＭ４０と、フラッシュメモリ５０と、電源検出回路６０と、ＯＲ回路７０と、を有する。
【００２３】
センサノード１のＵＳＢポート８に外部から電源が供給されると、電源検出回路６０がマイコン１０の入力検出部１４に信号を発生させ、マイコン１０が演算部１２でストリーム暗号アルゴリズム２２、ハッシュ関数２３及び乱数生成器（乱数生成プログラム）２４によって、暗号化処理に用いる擬似乱数列を初期化し、ＲＡＭ３０に記録されている秘密鍵３３、初期化ベクトル３４、及び内部状態３５を更新する。
【００２４】
センサノード１は、人に装着され、或いは所定の環境下に設置され、一定間隔でセンサ２によって検知した情報を取得して内部のメモリ（図示せず）に記録する。また、センサノード１は、記録した検知情報をフラッシュメモリ５０から読み出し、当該情報を無線部９による通信機能を用いて、外部（例えば、サーバ（後述））に送信する。なお、センサノード１は、特に人が身につける場合においては、その利便性のため、内蔵電池（満充電した充電池：バッテリ５）で１、２週間以上駆動することが望ましい。
【００２５】
センサ２は、人の動きや温度、脈拍等の生体情報、周辺環境の光や音等を所定の時間間隔で検出して内部のメモリに記録し、シリアル通信によって当該メモリから情報を読み出し可能となっている。センサ２として、検出した値をアナログ値の電圧等で出力するセンサを使用することも可能である。アナログ出力のセンサを用いる場合には、センサ２をＡ／Ｄ変換部１５に接続する必要がある。
【００２６】
ＲＴＣ３は、時計機能を持ったＩＣであり、内部の時計情報を保持、及び更新する。ＲＴＣ３は、シリアル通信によって、保持した時計情報（時刻）を読み出し、読み出した時刻と所定の処理のタイミングを同期させることや所定の時間間隔で信号を発することが可能である。典型的には、マイコン１０の消費電力よりもＲＴＣ３のそれの方が小さいため、ＲＴＣ３からマイコン１０に測定周期の割込みを発生させることにより、マイコン１０は欠かさず測定処理を実行しながら、処理の空き時間は内部のクロックを停止してスリープ状態にして消費電力を削減することができる。
【００２７】
マイコン１０は、接続されたセンサ２や各メモリ（ＥＥＰＲＯＭ４０、フラッシュメモリ５０など）等とシリアル通信をするシリアル通信部１１及び１６と、プログラムコードに従って演算やメモリを書き換える演算部１２と、入力される信号によって所定のプログラムの実行を開始させる割込み検出部１３と、入力される信号の値を保持、または割込みとする入力検出部１４と、入力される信号の電圧をデジタル値に変換するアナログ−デジタル変換部（Ａ／Ｄ変換部）１５と、大容量の不揮発メモリであるフラッシュメモリ２０と、揮発メモリであるＲＡＭ３０と、を有している。
【００２８】
フラッシュメモリ２０は、マイコン１０の演算部１２で処理するプログラムのコードを記録するコード領域２１と、演算部１２で処理するプログラムから参照するデータを記録するデータ記録領域２６と、を含む。データ領域２６は、マイコン１０の動作中に書き換えることが可能である。コード領域２１は、ストリーム暗号アルゴリズム２２と、ハッシュ関数２３と、乱数生成器（乱数生成プログラム）２４と、制御プログラム２５と、を有する。
【００２９】
制御プログラム２５は、マイコン１０のメイン処理を記述したプログラムコードであり、マイコン１０の起動時に演算部１２に呼び出されて実行される。ストリーム暗号アルゴリズム２２、ハッシュ関数２３、及び乱数生成器２４はそれぞれ、制御プログラム２５に記述される処理から呼び出して実行される。データ記録領域２６は、センサノード１に固有な識別子である機器ＩＤ２７と、マイコン１０のリセット及び起動回数を記録するリセットカウンタ２８と、擬似乱数列の初期化に使用し、センサノード１ごとに固有な共通鍵２９と、を含んでいる。
【００３０】
ＲＡＭ３０は、センサ２で測定した情報やセンサ２で測定したタイミングの時刻情報を記録するセンサデータバッファ領域３１と、センサデータバッファ領域３１のデータを暗号化したデータを記録する暗号化データバッファ領域３２と、擬似乱数列の基になる秘密鍵を格納する秘密鍵格納領域３３と、乱数生成器２４によって生成されるランダムな値であり、共通鍵から秘密鍵を生成する際に用いる初期化ベクトルを格納する初期化ベクトル格納領域３４と、ストリーム暗号アルゴリズム２２で擬似乱数列を生成する過程でメモリに書かれた必要な情報である内部状態（擬似ランダムなバイト列：例えば、０番目から２５５番目までバイト列を擬似的にランダムに配列したもの（図１４参照））を格納する内部状態格納領域３５と、内部状態の配列を入れ替えるときに用いる２個のインデックスであるインデックスｉ及びインデックスｊを格納するインデックスｉ格納領域３７及びインデックスｊ格納領域３８と、擬似乱数列の初期化から乱数を出力した回数を記録する出力カウンタ値を格納する出力カウンタ値格納領域３６と、暗号化データバッファ３２のデータをセクタ５１の暗号化データ５５の領域に記録するのに適したサイズまで蓄積する記録用暗号化データ蓄積領域６５と、記録用暗号化データ６５に記録されるデータの先頭値を暗号化する直前の出力カウンタの値を格納する記録用出力カウンタ格納領域６３と、記録用暗号化データ６５に含まれるセンサデータを測定した時刻情報を記録する記録用タイムスタンプ格納領域６２と、を含んでいる。なお、図１では、領域、格納領域、及び蓄積領域の文言は省略されている。また、本明細書では、例えば、秘密鍵格納領域３３に格納される秘密鍵を、秘密鍵３３と称する場合があり、その他のデータについても同様である。
【００３１】
ストリーム暗号アルゴリズム２２によって生成される擬似乱数列は、秘密鍵３３によって一意に定まる。秘密鍵３３は、例えば、センサノード固有の共通鍵２９と初期化ベクトル３４を結合した値を基づいてハッシュ関数２３で生成したハッシュ値であることが望ましい。一般的に、ＡＲＣＦＯＵＲなどの公知のストリーム暗号アルゴリズムにおいては、同じ秘密鍵から生成した擬似乱数列を繰り返し使用すると解読されやすいため、使用する秘密鍵が循環することがない程度のバリエーションがあり、予測や再現されにくい十分ランダムな初期化ベクトル３４を組み合わせて使用する。本実施形態によるセンサノード１においては、初期化ベクトル３４はリセットカウンタ２８をもとに乱数生成器２４によって生成される。ソフトウェアで構成できる乱数生成器２４としては、線形帰還シフトレジスタ（ＬＦＳＲ）等が望ましい。
【００３２】
また、初期化ベクトル３４は揮発性のＲＡＭ３０に記録され、リセットカウンタ２８はマイコン１０内部のフラッシュメモリ２０に記録されている。このため、マイコン１０の開発用のポート（典型的にはＪＴＡＧポート）を使用不可にすれば外部から読み出すことができない。つまり、後から暗号化データを第三者が解読する目的で、任意の初期化ベクトル３４を再現させることは困難であるため、初期化ベクトル３４は必要十分にランダムであるといえる。なお、万が一、秘密鍵３３が第三者に解読された場合においても、共通鍵２９が復元されないようにするために、秘密鍵３３は、ハッシュ関数でハッシュ化されている。
【００３３】
センサデータバッファ３１の値は、典型的には先頭から順に擬似乱数列とのＸＯＲ（排他的論理和）演算によって暗号化される。擬似乱数列は秘密鍵３３によって定まるが、長期的に擬似乱数列を初期化しない場合においては、初期化直後ではない擬似乱数列によって暗号化した暗号化データのみを受け取ることがほとんどであるため、秘密鍵３３のみを同期しても、復号化に必要な乱数を出力することができない。これを解決するため、擬似乱数列を初期化してからの乱数の出力回数である出力カウンタ３６の値を暗号化データに付加して復号化側に送信する。この出力カウンタ３６の値によって、複号化で用いる擬似乱数列の先頭を特定することが可能となる。
【００３４】
フラッシュメモリ５０には、主にＲＡＭ３０の暗号化データバッファに一時的に記録された情報が記録される。例えば、ＳＤカードなどの大容量のフラッシュメモリ５０は、一般的に５１２バイト程度の書き換え単位が定められており、この単位がセクタ５１とされている。それぞれのセクタ５１には、保存されたデータの時刻情報であるタイムスタンプ５２と、暗号化データバッファ３２の値をコピーした暗号化データ５５と、暗号化データ５５に対応する記録用出力カウンタである出力カウンタ５３と、暗号化データ５５に対応する初期化ベクトル５４とが記録される。つまり、復号化側においてはセクタ５１ごとに読み出されて受信した際に、共通鍵２９と、初期化ベクトル５４と、出力カウンタ５３と、ストリーム暗号アルゴリズム２２と、ハッシュ関数２３と、乱数生成器２４を暗号側と共有することで、暗号化データ５５を復号化することができる。また、任意の時刻に測定されたデータを含むセクタ５１のみを読み出したい場合においては、タイムスタンプ５２のみを読みだしていくことで検索することもできる。
【００３５】
ＥＥＰＲＯＭ４０には、フラッシュメモリ５０から次に読み出すセクタの位置を示す読出しセクタポインタ４１と、次に書き込むセクタの位置を示す書込みセクタポインタ４２が記録される。読出しセクタポインタ４１では、セクタのデータを読み出して送信に成功すると、ポインタ値が次のセクタの位置に進められて更新される。また、書込みセクタポインタ４２では、セクタにデータを書き込むと、ポインタ値が次のセクタの位置に進められて更新される。また、読出しセクタポインタ４１は書込みセクタポインタ４２よりは先に進めないようになっている。これにより、書込みセクタポインタ４２と読出しセクタポインタ４１の間のデータのみを送ることで、重複したデータの送信を防ぐことができる。また、読出しセクタポインタ４１と書込みセクタポインタ４２は、フラッシュメモリ５０で規定された最大値を超えると、最小値に戻って循環する。一般的にフラッシュメモリ５０は書き換え回数に制限があるため、使用する領域を循環させることにより、フラッシュメモリ５０の寿命を最大化することができる。
【００３６】
マイコン１０は、シリアル通信部１６により、シリアル−ＵＳＢ変換７を介して、ＵＳＢポート８に接続したＵＳＢ端子を有する機器と通信することができる。同様に、無線通信部９を介して、他の無線機器と通信することがきる。
【００３７】
マイコン１０、センサ２、ＲＴＣ３、無線通信部９、ＥＥＰＲＯＭ４０、及びフラッシュメモリ５０には、レギュレータ４から配線８３を介して、電源が供給される。電源は、ＯＲ回路７０及びレギュレータ４を介して、バッテリ５から、または電源供給可能な機器と接続されていればＵＳＢポート８からそれぞれに供給される。充電回路６は、ＵＳＢポート８が電源供給可能な機器と接続されている場合にのみ、バッテリ５の充電を開始し、バッテリ５の電圧が十分に高くなると、充電を停止する。
【００３８】
＜電源検出回路の内部構成例＞
図２は、電源検出回路６０の構成例を示す図である。当該構成は単なる例であり、本発明を限定するものではないことに注意すべきである。
【００３９】
電源検出回路６０は、抵抗６０１、６０２、及び６０３と、トランジスタ６０４と、グランド６０５及び６０６と、を有する。例えば、端子６０７に、レギュレータ４を介して内部電源（バッテリ５）を接続した場合、端子６０９にＵＳＢポート８を介して接続された電源の電圧に応じて、端子６０８の電圧が切り替えられる。つまり、端子６０７の電圧をレギュレータ４によって、内部電源電圧（バッテリ５の電圧）よりも大きい入力電圧、例えば電源電圧を３ボルトとした場合、例えば５ボルトの外部電源を、ＵＳＢポート８を介して端子６０９に接続しても、抵抗６０１及び６０３によって分圧してトランジスタ６０４に適したベース電圧が生成される。そして、端子６０９にＵＳＢ端子を介して外部電源が接続されると、端子６０８の電圧をグランド６０６の電圧に、端子６０９に外部電源が接続されないと端子６０８を端子６０７の電圧（内部電源電圧）にする。これにより、ＵＳＢ端子の電源が接続されたことを、内部電源電圧を使用するマイコンにおける０及び１のデジタル入力値として生成することができる。
【００４０】
＜ＯＲ回路の内部構成例＞
図３は、ＯＲ回路７０の内部構成例を示す図である。当該構成は単なる例であり、本発明を限定するものではないことに注意すべきである。
【００４１】
ＯＲ回路７０は、ダイオード７１及び７２と、抵抗７３と、グランド７４と、を有し、端子７６及び７７に接続された電源電圧の高い方が端子７５に出力されるようになっている。
【００４２】
＜システムの構成＞
図４は、本実施形態による情報管理システム（単に、情報処理システムと称することもできる）の構成例を示す図である。当該情報管理システムは、少なくとも１つのセンサノード１と、少なくとも１つの基地局１００と、少なくとも１つのサーバ２００と、を有する。各センサノード１と基地局１００は無線ネットワークで接続され、基地局１００とサーバ２００はネットワーク４００で接続されている。
【００４３】
当該情報管理システムでは、基地局１００は、ユーザ３００が身に付けたセンサノード１からセンサで計測したデータを取得して、インターネット等のネットワーク４００を介してサーバ２００に送信する。そして、サーバ２００は、複数のセンサノード１のデータを収集して蓄積し、収集した情報を解析する。
【００４４】
このような構成を採用することにより、センサノード１や基地局１００を構成するマイコンやＰＣが低コストで処理能力が少ない場合においても、ネットワーク４００に接続された比較的処理能力が高く、メモリの記録容量も豊富なサーバ２００で、大量のセンサデータを扱うことが可能になる。
【００４５】
センサノード１と基地局１００は、ＵＳＢなどの有線通信で接続される他、無線通信であれば距離や接続する手間に関わらず、安定してセンサノード１からデータを収集することが可能である。
【００４６】
＜基地局の内部構成＞
図５は、基地局１００の内部概略構成例を示す図である。基地局１００は、主にＰＣや携帯電話等の情報機器である制御装置１０１と、制御装置１０１に接続される無線通信部１３０と、入力装置１５０と、ディスプレイ１４０と、を有する。
【００４７】
制御装置１０１は、不揮発記憶部１１０と、中央演算部（ＣＰＵ）１０２と、ＲＡＭ１０３と、ネットワーク４００と接続して通信する機能を有するネットワーク接続部１０４と、ディスプレイ１４０等を制御してユーザ３００が基地局１００を操作するために必要な情報等を表示する表示制御部１０５と、マウスやキーボード及びタッチパネル等の入力装置１５０からの入力を受け付けてＣＰＵ１０２で実行されるプログラムから参照可能とするＵ／Ｉ制御部１０６と、外部から供給される電源から基地局１００の内部電源電圧を生成する電源装置１０７と、ＵＳＢケーブル１６０で繋がれたセンサノード１や無線通信部１３０による通信を制御する汎用Ｉ／Ｆ１０８と、を有する。
【００４８】
不揮発記憶部１１０には、データ受信プログラム１１２、時刻同期プログラム１１３、及び暗号ファイル送信プログラム１１４等を含む制御プログラム１１１と、暗号化ファイル１２０を格納している。制御プログラム１１１は、ＣＰＵ１０２によって実行される。また、暗号化ファイル１２０は、センサノード１から受信した情報である。
【００４９】
データ受信プログラム１１２は、センサノード１から暗号化されたデータを受信して暗号化ファイル１２０を生成するプログラムである。時刻同期プログラム１１３は、センサノード１と通信してセンサノード１のＲＴＣ３の時刻を同期するためのプログラムである。暗号化ファイル送信プログラム１１４は、ネットワーク４００を介して暗号化ファイル１２０をサーバ２００に送信するためのプログラムである。
【００５０】
データ受信プログラム１１２は、ＵＳＢ通信、有線通信や無線通信によってセンサノード１と基地局１００が接続されたか否か定期的に監視し、接続されるとセンサノード１からデータを読み出すためのリクエストコマンドをセンタノード１に送信し、暗号化データの受信を開始する。受信したデータは、制御装置１０１で扱いやすいファイルサイズの暗号ファイル１２０に分割されて、不揮発記憶部１１０に格納される。
【００５１】
暗号化ファイル送信プログラム１１４は、定期的に新しい暗号化ファイル１２０が生成されたか否か監視し、データ受信プログラム１１２によって生成された暗号化ファイル１２０を、ネットワーク通信部１０４を制御してサーバ２００に送信する。
【００５２】
＜サーバの内部構成＞
図６は、サーバ２００の内部概略構成例を示す図である。サーバ２００は、不揮発記憶部２２０と、ＣＰＵ２０１と、ＲＡＭ２１０と、インターネット等のネットワーク４００に接続されたネットワーク通信部２０２と、外部電源からサーバ２００の内部電源を生成する電源装置２０２と、を有する。
【００５３】
不揮発記憶部２２０は、サーバ２００のＣＰＵ２０１で実行される制御プログラム２２１と、データベース２３０を有する。制御プログラム２２１は、ネットワーク４００を介して基地局１００から送信される暗号化ファイル１２０を受信してデータベース２３０に記録する暗号化ファイル受信プログラム２２２と、データベース２３０に記録された暗号化ファイル２３２を復号化する暗号化ファイル復号化プログラム２２３と、暗号化ファイル復号化プログラム２２３から参照されるストリーム暗号アルゴリズム２２４と、ハッシュ関数２２５と、データベース２３０に記録されている復号化されたセンサデータ２３３から人の行動や健康状態といった有益な情報を抽出するための解析計算プログラム２２６と、データベース２３０に記録されているセンサデータ２３３や解析データ２３４をユーザ３００等からネットワーク４００経由で閲覧可能にするＷｅｂサーバプログラム２２７と、を有する。
【００５４】
データベース２３０は、複数のセンサノード１の共通鍵２９を記録する共通鍵テーブル２３１と、センサノード１から受信した暗号化ファイル２３２と、暗号化ファイル２３２を復号化した結果であるセンサデータ２３３と、センサデータ２３３を解析した結果として得られる解析データ２３４と、を格納している。
【００５５】
ストリーム暗号アルゴリズム２２４は、センサノード１のストリーム暗号アルゴリズム２２と共通であり、ハッシュ関数２２５もセンサノード１のハッシュ関数２３と共通である。これにより、それぞれのセンサノード１の共通鍵から、同じ秘密鍵や疑似乱数列の生成が可能である。
【００５６】
ＲＡＭ２１０は、暗号化ファイル２３２を復号化した情報を一時的に記憶するセンサデータバッファ領域２１１と、暗号化ファイル２３２に含まれる初期化ベクトルを格納する初期ベクトル格納領域２１８と、共通鍵テーブル２３１の共通鍵を結合してハッシュ関数２３５でハッシュ化した値である秘密鍵を格納する秘密鍵格納領域２１２と、ストリーム暗号アルゴリズム２２４で疑似乱数列を出力するために使用するメモリの情報である内部状態を格納する内部状態格納領域２１３（今まさに復号化しようとする暗号化データについての内部状態）と、インデックスｉを格納するインデックスｉ格納領域２１４と、インデックスｊを格納するインデックスｊ格納領域２１５と、復号化中のデータの機器ＩＤを格納する機器ＩＤ格納領域２１６と、出力カウンタ値を格納する出力カウンタ値格納領域２１７と、暗号化ファイル２３２をストリーム暗号アルゴリズム２３４で復号化した後の内部状態を記録して保持する内部状態保持データ領域２１９と、を有する。内部状態保持データ２１９は、センサデータ（暗号化データ）を受け取るごとに擬似乱数列初期化処理を実行して内部状態を作成しなくてもよいようにするためのデータである。同じセンサノード１からデータを受け取ったときに、以前データを受け取ったときに作成した内部状態の情報が使える可能性があるため、使える内部状態の情報が存在すれば、それを使い、初期化処理の時間を短縮するようにしている。なお、図６では、図１と同様、領域、及び格納領域の文言は省略されている。また、本明細書では、例えば、秘密鍵格納領域２１２に格納される秘密鍵を、秘密鍵２１２と称する場合があり、その他のデータについても同様である。
【００５７】
＜暗号化ファイルの構成例＞
図７は、基地局１００の暗号化ファイル１２０及びサーバ２００の暗号化ファイル２３２の構成例を示す図である。図７には、暗号化ファイル１２０及び２３２の共通の構成が示されている。
【００５８】
暗号化ファイル１２０及び２３２は、機器ＩＤ１２１と複数のセクタデータ１２２を含んでいる。セクタデータ１２２は、センサノード１のフラッシュメモリ５０と同様にタイムスタンプ１２３と、出力カウンタ１２４と、初期化ベクトル１２５と、暗号化データ１２６と、を有する。
【００５９】
サーバ２００は、暗号化ファイル１２０を復号化する場合、機器ＩＤ１２１に対応するセンサノード１の共通鍵を共通鍵テーブル２３１から読出し、共通鍵と初期化ベクトル１２５を結合してハッシュ関数２２５によってハッシュ値を生成する。そして、サーバ２００は、生成したハッシュ値を秘密鍵としてストリーム暗号アルゴリズム２２４を初期化し、出力カウンタ１２５の値に従って不要な乱数を出力して疑似乱数列を進めた後に、暗号化データ１２６を暗号化した乱数を出力する。このようにすることにより、暗号化データ１２６の復号化が可能となる。
【００６０】
出力カウンタ１２５に従って不要な乱数を出力して疑似乱数列を先に進める処理は、サーバ２００にとっては一見無駄な処理のように思われるが、消費電力を抑える点で利点がある。つまり、例えばセクタデータ１２２ごとに疑似乱数を初期化すると、センサノード１で頻繁に疑似乱数列の初期化処理をしなくてはならないため、消費電力が増大し、電池寿命を大幅に短くする可能性がある。一方で、サーバ２００は、小型で電池駆動のセンサノード１と比較して、典型的には十分な電力や処理能力を有するため、疑似乱数列を先に進める処理は無視できる程度に短時間であるため、問題にならない。また、センサノード１とサーバ２００の電力コスト、処理時間を最適化するように出力カウンタ１２５の上限値を定めることが好適である。
【００６１】
＜共通鍵テーブル＞
図８は、共通鍵テーブル（テーブル）２３１の構成例を示す図である。共通鍵テーブル２３１は、機器ＩＤ２４０と、有効開始日時２４１と、有効終了日時２４２と、共通鍵２４３と、を構成項目として含んでいる。
【００６２】
この共通鍵テーブル２３１からは、機器ＩＤ２４０を基に検索すると、目的のセンサノード１に対応する共通鍵２４３を取得することができる。検索する際には、例えば、暗号化ファイルのタイムスタンプ１２２が、有効開始日時２４１及び有効終了日時２４２によって規定される有効期間に含まれるものに限定することもできる。これにより、センサノード１の共通鍵２９を変更する場合に、変更前の共通鍵２４３に対応する有効終了日２４２に変更する直前の日時を入力し、新たな共通鍵２４３と有効開始日時２４１を入力して登録することで、共通鍵の変更を容易にできる。
【００６３】
＜内部状態保持データ＞
図９は、内部状態保持データ２１９の構成例を示す図である。内部状態保持データ２１９は、機器ＩＤ２５０と、初期化ベクトル２５１と、出力カウンタ２５２と、内部状態２５３と、インデックスｉ２５４と、インデックスｊ２５５と、を構成項目として含んでいる。
【００６４】
機器ＩＤ２５０、初期化ベクトル２５１、及び出力カウンタ２５２を基に内部状態保持データ２１９を検索することで、対応する内部状態２５３、インデックスｉ２５４及びインデックスｊ２５５を取得することができる。つまり、サーバ２００でストリーム暗号アルゴリズム２３４によって疑似乱数列を初期化し、不要な乱数を出力して疑似乱数列を進める処理をすることなく、必要な乱数を即座できるように、出力する内部状態２５３、インデックスｉ２５３、インデックスｊ２５４を取得することができるため、大幅に処理時間を短縮することができる。また、出力カウンタ２５２が同一の内部状態２５３が存在しない場合は、探したい出力カウンタの値より小さくて最も近い値があれば、その内部状態２５３を取得することで、疑似乱数列を初期化する処理を省くことができる。
【００６５】
＜センサノードの処理概要＞
図１０は、センサノード１の制御プログラム２５による処理概要を説明するためのフローチャートである。制御プログラム２５では、所定の間隔で計測したデータを暗号化して記録し、内部電源の電圧が所定値以上ある場合、或いは、ＵＳＢ等によって外部電源が接続された場合に、接続を検出して疑似乱数列を初期化する。
【００６６】
処理Ｓ１００では、制御プログラム２５は、マイコン１０のリセット、パワーオンリセット時に処理を開始する。
【００６７】
処理Ｓ１０１では、制御プログラム２５は、リセットカウンタの更新や、疑似乱数列の初期化を行う初期化処理を実行する。初期化処理Ｓ１０１の詳細については、図１１を用いて後述する。なお、図１１に示されるように、Ｓ１０１の処理の中には、擬似乱数列初期化処理（Ｓ２０２）も含まれている。従って、センサノード１が起動された段階での初期化処理（Ｓ１０１）では、時間が掛かったとしても擬似乱数列初期化処理は必ず実行される。
【００６８】
処理Ｓ１０２では、制御プログラム２５は、ＵＳＢや無線で接続された基地局１００と通信し、基地局からのリクエストがあれば、フラッシュメモリ４０のデータを読み出して基地局１００に対して送信する。通信処理Ｓ１０２の詳細については、図１８を用いて後述する。
【００６９】
処理Ｓ１０３では、制御プログラム２５は、ＲＴＣ３が発する所定の周期的な信号を受信するまで待機する。この周期がセンサ２による測定処理実行の周期となる。待機中はマイコン１０のクロックを停止したスリープ状態にすることで、消費電力を削減できる。
【００７０】
処理Ｓ１０４では、制御プログラム２５は、センサ２からデータ（測定データ）を読み出して、ＲＡＭ３０のセンサデータバッファ３１に記録する。
【００７１】
処理Ｓ１０５では、制御プログラム２５は、センサデータバッファ領域３１に記録されたデータのサイズを監視する。当該領域に所定のサイズが蓄積されている場合（Ｓ１０５でＹｅｓの場合）、処理はＳ１０６に移行する。満たない場合（Ｓ１０５でＮｏの場合）、処理はＳ１０２に移行する。この所定のサイズとは、圧縮効率やセクタ５１の使用効率を最適化するように規定される。例えば、５０ミリ秒間隔で３軸加速度を測定する場合には、１秒分、つまり２０サンプル分を所定のサイズとすることが望ましい。
【００７２】
処理Ｓ１０６では、制御プログラム２５は、センサデータバッファ３１のデータを読み出して、公知の圧縮アルゴリズムにて圧縮する。
【００７３】
処理Ｓ１０７では、制御プログラム２５は、ストリーム暗号アルゴリズム２２を用いて、センサデータバッファ３１の圧縮データを読み出して暗号化し、暗号化データバッファ３２に記録する。Ｓ１０７の暗号化処理の詳細については、図１３を用いて後述する。
【００７４】
処理Ｓ１０８では、制御プログラム２５は、暗号化データバッファ３２に記録されたデータのサイズと記録用暗号化データ６５に記録されたデータのサイズとの合計サイズを、セクタ５１のサイズと比較する。セクタ５１が合計サイズよりも小さければ（Ｓ１０８でＹｅｓの場合）、処理はＳ１０９に移行し、それ以外の場合（Ｓ１０８でＮｏの場合）、処理はＳ１１３に移行する。
【００７５】
処理Ｓ１０９では、制御プログラム２５は、記録用暗号化データ６５のデータを暗号化データ５５として、ＲＡＭ３０の初期化ベクトル３４（の値）をフラッシュメモリ５０の初期化ベクトル５４（の値）とする。また、制御プログラム２５は、記録用出力カウンタ６３（の値）を出力カウンタ５３（の値）として、記録用タイムスタンプ６２に格納されている最初と最後の時刻情報をタイムスタンプ５２に格納する。このように、制御プログラム２５は、ＲＡＭ３０に格納されたデータをセクタ５１のデータとして記録する。フラッシュメモリ５０への記録完了後に、制御プログラム２５は、記録用タイムスタンプ５２及び記録用暗号化データ６４を初期化し、記録用出力カウンタ６３に出力カウンタ３６の値をコピーする。この出力カウンタ３６の値は、擬似乱数列の初期化から乱数を出力した回数を示すものである。よって、サーバ２００側では、この出力カウンタ値を用いて当該カウンタ値の１つ手前の数に相当する乱数までを不要な乱数として捨て、出力カウンタ値に示された順番の乱数を復号化に用いればすむので、暗号化データを復号化する度に擬似乱数列初期化処理を実行する必要がなくなり、処理時間を短縮することが可能となる。
【００７６】
処理Ｓ１１０では、制御プログラム２５は、ＥＥＰＲＯＭ４０の書込みセクタポインタ４２を次の位置に更新する。これにより、次に書き込むセクタの正確な位置を確定することができる。
【００７７】
処理Ｓ１１１では、制御プログラム２５は、内臓バッテリ５における使用可能な電圧値（バッテリの残量）が所定値（閾値）以上か、或いは、入力検出部１４の入力から判断してＵＳＢの外部電源が接続されていて電圧値が所定値（閾値）以上か判断する。つまり、外部電源が接続されていなくてもバッテリ５の電圧値の残量に余裕があるか、或いは、外部電源が接続されて使用可能な電圧値に余裕があるか（バッテリ５への充電処理中であっても良い）が判断される。使用可能電圧値が所定値以上の場合（Ｓ１１１でＹｅｓの場合）、処理はＳ１１２に移行し、使用可能電圧値が所定値よりも小さい場合（Ｓ１１１でＮｏの場合）、処理はＳ１１３に移行する。
【００７８】
処理Ｓ１１２では、制御プログラム２５は、疑似乱数列の初期化処理を実行する。当該擬似欄数列の初期化処理の詳細については、図１２を用いて後述する。
【００７９】
処理Ｓ１１３では、制御プログラム２５は、記録用暗号化データ格納領域６５に、暗号化データバッファ格納領域３２のデータを記録する。
【００８０】
＜初期化処理の詳細＞
図１１は、図１０の処理Ｓ１０１の詳細を説明するためのフローチャートである。図１１には、基地局１００と通信してＲＴＣ３を時刻同期し、擬似乱数列を初期化することが示されている。
【００８１】
処理Ｓ２００では、制御プログラム２５は、初期化処理を開始する。
【００８２】
処理Ｓ２０１では、制御プログラム２５は、フラッシュメモリ５０のデータ記録領域２６のリセットカウンタ２７をインクリメントする。このリセットカウンタ２７の値は、センサノード１の起動回数を示す情報となっている。なお、データ記憶領域２６がフラッシュメモリ内にあるため、一般的には最大書き換え回数の制約があるが、一度の充電で１週間以上使用でき、継ぎ足し充電可能なバッテリ５を備えるセンサノード１であれば、典型的にはリセット回数が書き換え回数の上限を上回ることはない。
【００８３】
処理Ｓ２０２では、制御プログラム２５は、疑似乱数列の初期化処理を実行する。擬似乱数の列の初期化処理の詳細については、図１２を用いて後述する。
【００８４】
処理Ｓ２０３では、制御プログラム２５は、センサノード１のＲＴＣ３に時刻情報がセットされているかを判定する。ＲＴＣ３が時刻同期されていないと、センサで測定しても正しい時刻情報を付加できないからである。従って、時刻同期が完了するまでは測定動作を開始しない。時刻同期が完了していれば（Ｓ２０３でＹｅｓの場合）、処理はＳ２０４に移行し、初期化処理が終了する。時刻同期が完了していない場合（Ｓ２０３でＮｏ場合）は、処理はＳ２１１に移行する。
【００８５】
処理Ｓ２１１では、制御プログラム２５は、基地局１００からコマンドが送信されてくるまで待機する。
【００８６】
処理Ｓ２１２では、制御プログラム２５は、受信データ列からコマンドを識別し、コマンドに対応する所定の処理を実行する。例えば、時刻情報を受信した場合は、制御プログラム２５は、ＲＴＣ３に時刻情報をセットする。
【００８７】
＜擬似乱数列初期化処理の詳細＞
図１２は、図１０の処理Ｓ１１２及び図１１の処理Ｓ２０２による擬似乱数列初期化処理の詳細を説明するためのフローチャートである。擬似乱数列初期化処理では、リセットカウンタ２８と共通鍵２９から、ストリーム暗号アルゴリズムにより、疑似乱数列の出力に必要な内部状態３５が生成される。
【００８８】
処理Ｓ３００では、制御プログラム２５は、疑似乱数列の初期化処理を開始する。
【００８９】
処理Ｓ３０１では、制御プログラム２５は、リセットカウンタ格納領域２８からリセットカウンタ値を読み出して、乱数生成器２４に記述された処理によって乱数を生成し、当該乱数を初期化ベクトルとして初期化ベクトル格納領域３４に記録する。
【００９０】
処理Ｓ３０２では、制御プログラム２５は、初期化ベクトル格納領域３４に格納されている初期化ベクトルと共通鍵格納領域２９に格納されている共通鍵とを結合し、この値を基にハッシュ関数２３に記述された処理によってハッシュ値を出力し、当該ハッシュ値を秘密鍵として秘密鍵格納領域３３に記録する。
【００９１】
処理Ｓ３０３では、制御プログラム２５は、秘密鍵格納領域３３に格納されている秘密鍵に基づいて、例えばＡＲＣＦＯＵＲなどの公知のアルゴリズムであるストリーム暗号化アルゴリズム２２の初期化処理によって疑似乱数列を初期化し、当該擬似乱数列を乱数出力に必要な内部状態の情報として内部状態格納領域３５に出力する。
【００９２】
処理Ｓ３０４では、制御プログラム２５は、疑似乱数列初期化処理で使用する変数ｎと、インデックスｉ３７及びインデックスｊ３８を０に初期化する。
【００９３】
処理Ｓ３０５では、制御プログラム２５は、変数ｎと十分な大きい所定の数（例えば、３０００以上）と比較し、ｎが小さければ（Ｓ３０５でＹｅｓの場合）、処理をＳ３０６に移行させ、それ以外の場合（Ｓ３０５でＮｏの場合）、処理をＳ３０８に移行させて疑似乱数初期化処理を終了する。本処理で十分な大きい数の分だけ予め疑似乱数列から乱数を出力しておくことで、疑似乱数列の予測や解読を困難にすることができる。つまり、所定回数（例えば、３０００回）だけ乱数を出力して初めて暗号化に使える乱数となる。そして、そのときの内部状態、インデックスｉ及びｊをＲＡＭに保持する。なお、当該乱数出力回数は出力カウンタ３６には含まれず、暗号化側のセンサノード１と、復号化側のサーバ２００とで予め同じ値を疑似乱数初期化処理のプログラムに記述する。
【００９４】
処理Ｓ３０６では、制御プログラム２５は、ストリーム暗号アルゴリズム２２により、内部状態３５、インデックスｉ３７、及びインデックスｊ３８を用いて乱数を１バイト出力する。この乱数は不要な乱数となる。
【００９５】
処理Ｓ３０７では、制御プログラム２５は、変数ｎをインクリメントし、Ｓ３０５からの処理を再度実行する。
【００９６】
＜暗号化処理の詳細＞
図１３は、図１０の処理Ｓ１０７による暗号化処理の詳細を説明するためのフローチャートである。図１３では、センサデータバッファ３１のデータを、ストリーム暗号によって順に暗号化して暗号化データバッファ領域３２に記録する処理が実行される。
【００９７】
処理Ｓ４００では、制御プログラム２５は、暗号化処理を開始する。
【００９８】
処理Ｓ４０１では、制御プログラム２５は、センサデータバッファ領域３１から１バイト分のデータを読み出す。
【００９９】
処理Ｓ４０２では、制御プログラム２５は、ストリーム暗号アルゴリズム２２によって内部状態３５、インデックスｉ３７、及びインデックスｊ３８を用いて、１バイト分の疑似乱数を出力する。
【０１００】
処理Ｓ４０３では、制御プログラム２５は、処理Ｓ４０１で読み出したデータと処理Ｓ４０３で出力した乱数とをＸＯＲ演算する。
【０１０１】
処理Ｓ４０４では、制御プログラム２５は、処理Ｓ４０３の結果を暗号化データバッファ格納領域３２に記録する。
【０１０２】
処理Ｓ４０５では、制御プログラム２５は、出力カウンタ３６をインクリメントして更新する。
【０１０３】
処理Ｓ４０６では、制御プログラム２５は、Ｓ４０１においてセンサデータバッファ領域３１から全てのデータを読み出し終わったかを判定する。読み出しが完了している場合（Ｓ４０６でＹｅｓの場合）、処理はＳ４０７に移行して暗号化処理は完了する。読み出しが完了していない場合（Ｓ４０６でＮｏの場合）、処理はＳ４０１に戻る。
【０１０４】
＜内部状態のデータ例＞
図１４は、内部状態格納領域３５に格納される内部状態のデータの好適な例を示す図である。ストリーム暗号アルゴリズム２２にＡＲＣＦＯＵＲを用いた場合は、２５６バイトの内部状態が生成される。
【０１０５】
＜秘密鍵の例＞
図１５は、秘密鍵格納領域３３に格納される秘密鍵の好適な例を示す図である。秘密鍵は、長いほど一般的に暗号強度が高まり、例えば、１６バイト以上の長さがあることが望ましい。本実施形態では、１６バイトに設定されている。
【０１０６】
＜内部状態生成処理の詳細＞
図１６は、図１２の処理Ｓ３０３による内部状態生成処理の詳細を説明するためのフローチャートである。図１６では、より具体的には、好適な公知のストリーム暗号化アルゴリズムであるＡＲＣＦＯＵＲの初期化処理を実行し、秘密鍵３３から内部状態３５が生成される。
【０１０７】
処理Ｓ５００では、制御プログラム２５は、ストリーム暗号アルゴリズムの初期化処理を開始する。
【０１０８】
処理Ｓ５０１では、制御プログラム２５は、ストリーム暗号アルゴリズムの初期化処理内で使用する変数ｉを０に初期化する。
【０１０９】
処理Ｓ５０２では、制御プログラム２５は、ｉが２５６より小さければ（Ｓ５０２でＹｅｓの場合）処理をＳ５０３に移行させ、それ以外の場合（Ｓ５０２でＮｏの場合）、処理をＳ５０５に移行させる。
【０１１０】
処理Ｓ５０３では、制御プログラム２５は、内部状態３５のｉ番のバイトにｉを代入する。
【０１１１】
処理Ｓ５０４でハ、制御プログラム２５は、変数ｉを1インクリメントし、処理をＳ５０２に移行させる。
【０１１２】
処理Ｓ５０５では、制御プログラム２５は、ストリーム暗号アルゴリズムの初期化処理内で使用する変数ｉ及びｊをそれぞれ０で初期化する。
【０１１３】
処理Ｓ５０６では、制御プログラム２５は、変数ｉが２５６より小さければ（Ｓ５０６でＹｅｓの場合）、処理をＳ５０７に移行させ、それ以外の場合（Ｓ５０６でＮｏの場合）、処理をＳ５１０に移行させてストリーム暗号アルゴリズムの初期化処理を完了する。
【０１１４】
処理Ｓ５０７では、制御プログラム２５は、変数ｊと、内部状態３５のｉ番のバイト値と、ｉを１６で割った余りをｋとした場合の秘密鍵３３のｋ番のバイト値との和を、２５６で割った余りを、変数ｊに代入する。
【０１１５】
処理Ｓ５０８では、制御プログラム２５は、内部状態３５のｉ番と、内部状態３５のｊ番のバイト値を交換する。
【０１１６】
処理Ｓ５０９では、制御プログラム２５は、変数ｉを１インクリメントし、処理をＳ５０６に移行させる。
【０１１７】
以上の処理により、内部状態のデータが生成される。この内部状態のデータは、擬似乱数列生成処理（Ｓ３０６：詳細は図１７参照）に用いられる。
【０１１８】
＜擬似乱数出力処理の詳細＞
図１７は、図１２のＳ３０６及び図１３のＳ４０２による擬似乱数出力処理の詳細を説明するためのフローチャートである。図１７では、好適な公知のストリーム暗号化アルゴリズムであるＡＲＣＦＯＵＲの疑似乱数出力処理が示され、擬似乱数列の初期化処理時と比較して少ない計算量で内部状態３５、インデックスｉ３７、及びインデックスｊ３８から１バイト分の疑似乱数が取り出され、内部状態３５、インデックスｉ３７、及びインデックスｊ３８が更新される。
【０１１９】
処理Ｓ６００では、制御プログラム２５は、疑似乱数出力処理を開始する。
【０１２０】
処理Ｓ６０１では、制御プログラム２５は、インデックスｉ３７の値に１を加えた値を、２５６で割った余りの数を、インデックスｉ３７に代入する。
【０１２１】
処理Ｓ６０２では、制御プログラム２５は、インデックスｊ３８の値に、内部状態３５のｉ番のバイト値を加えた値を、２５６で割った余りを、インデックスｊ３８に代入する。
【０１２２】
処理Ｓ６０３では、制御プログラム２５は、内部状態３５のｉ番と、内部状態３５のｊ番のバイト値を交換する。
【０１２３】
処理Ｓ６０４では、制御プログラム２５は、内部状態３５のｉ番目のバイト値及び内部状態３５のｊ番目のバイト値の和を２５６で割った余りをｋとし、内部状態３５のｋ番のバイト値を、疑似乱数として出力し、処理をＳ６０５に移行させて疑似乱数出力処理を完了する。
【０１２４】
＜通信処理の詳細＞
図１８は、図１０のＳ１０２による通信処理の詳細を説明するためのフローチャートである。図１８では、ＵＳＢまたは無線接続により通信処理をする例が示されており、基地局１００からの所定のコマンドを受信して処理が実行される。例えばセンサノード１が基地局１００からデータ送信リクエストコマンドを受信した場合には、フラッシュメモリ５０に記録されているデータを重複なく基地局１００に送信する。
【０１２５】
処理Ｓ７００では、制御プログラム２５は、通信処理を開始する。
【０１２６】
処理Ｓ７０１では、制御プログラム２５は、電源検出回路６０に接続された入力検出部１４の入力を監視し、ＵＳＢや無線で基地局１００にセンサノード１が接続されているか否か判断する。基地局が接続されていれば（Ｓ７０１でＹｅｓの場合）、処理は、Ｓ７０２に移行する。接続されていなければ（Ｓ７０１でＮｏの場合）、処理は、Ｓ７０９に移行し、通信処理が終了する。
【０１２７】
処理Ｓ７０２では、制御プログラム２５は、シリアル通信部１６を用いて、基地局１００から受信したコマンドがあるか否か判断する。受信したコマンドがあれば（Ｓ７０２でＹｅｓの場合）、処理は、Ｓ７０３に移行する。受信したコマンドがなければ（Ｓ７０２でＮｏの場合）、処理は、Ｓ７０９に移行し、通信処理が終了する。
【０１２８】
処理Ｓ７０３では、制御プログラム２５は、受信したコマンドがデータリクエストであるか否か判断する。受信コマンドがデータリクエストであれば（Ｓ７０３でＹｅｓの場合）、処理は、Ｓ７０４に移行する。受信コマンドがデータリクエスト以外であれば（Ｓ７０３でＮｏの場合）、処理は、Ｓ７０８に移行し、制御プログラム２５は、コマンドに対応した所定の処理を実行する。例えば、機器ＩＤ２７を読み出すリクエストコマンドを受信した場合には、制御プログラム２５は、シリアル通信部１６を介して、機器ＩＤ２７を読み出して基地局１００に送信する。
【０１２９】
処理Ｓ７０４では、制御プログラム２５は、書込みセクタポインタ４２と読出しセクタポインタ４１を比較し、同じでなければ（Ｓ７０４でＮｏの場合）処理をＳ７０５に移行させ、同じであれば（Ｓ７０４でＹｅｓの場合）処理をＳ７０９に移行させ、通信処理を完了する。
【０１３０】
処理Ｓ７０５では、制御プログラム２５は、読出しセクタポインタ４１の示すセクタ５１のデータをフラッシュメモリ５０から読み出す。
【０１３１】
処理Ｓ７０６では、制御プログラム２５は、Ｓ７０５で読み出したセクタのデータを、接続されている基地局１００に送信する。
【０１３２】
処理Ｓ７０７では、制御プログラム２５は、読出しセクタポインタ４１を進めて更新し、処理をＳ７０４に戻す。
【０１３３】
＜基地局における受信処理の詳細＞
図１９は、基地局１００のデータ受信プログラム１１２による受信処理の詳細を説明するためのフローチャートである。基地局１００において、受信処理が定期的に実行されることで、センサノード１と基地局１００が、ＵＳＢもしくは無線通信にて接続されるか定期的に監視される。センサノード１と基地局１００が接続されていれば、基地局１００がデータリクエストコマンドを送信して、センサノード１のセンサ２によって計測したデータを読み出すようにする。
【０１３４】
処理Ｓ８００では、データ受信プログラム１１２は、データ受信処理を開始する。
【０１３５】
処理Ｓ８０１では、データ受信プログラム１１２は、センサノード１と基地局１００が接続されているかを判定する。両者が接続されていれば（Ｓ８０１でＹｅｓの場合）、処理はＳ８０２に移行する。両者が接続されていなければ（Ｓ８０１でＮｏの場合）、処理は、Ｓ８０９に移行し、データ受信処理が終了する。
【０１３６】
処理Ｓ８０２では、データ受信プログラム１１２は、汎用Ｉ／Ｆ１０８を介して、時刻情報を付加したコマンドをセンサノード１に送信する。センサノード１は、当該時刻情報を受信し、ＲＴＣ３を受信した時刻情報と同期させる処理を実行する。
【０１３７】
処理Ｓ８０３では、データ受信プログラム１１２は、センサノード１の機器ＩＤ２７を読み出すリクエストコマンドを、該当するセンサノード１に送信する。
【０１３８】
処理Ｓ８０４では、データ受信プログラム１１２は、汎用Ｉ／Ｆ（ＵＳＢ）１０８或いは無線通信部１３０を介して、機器ＩＤ２７を受信したか判定する。受信に成功した場合（Ｓ８０４でＹｅｓの場合）、処理はＳ８０５に移行する。受信に失敗した場合（Ｓ８０４でＮｏの場合）、処理Ｓ８０９に移行し、データ受信処理は終了する。機器ＩＤ２７が分からない暗号化データは、復号化に必要な共通鍵が取得できないからである。
【０１３９】
処理Ｓ８０５では、データ受信プログラム１１２は、データリクエストを送信する。
【０１４０】
処理Ｓ８０６では、データ受信プログラム１１２は、汎用Ｉ／Ｆ（ＵＳＢ）１０８或いは無線通信部１３０によるデータ受信を所定の時間待機する。当該待機時間は、最大でも１秒程度であることが好ましい。
【０１４１】
処理Ｓ８０７では、データ受信プログラム１１２は、処理Ｓ８０６でデータ受信があったかを判定する。センサノード１から送信されたセクタデータを受信した場合（Ｓ８０７でＹｅｓの場合）、処理は、Ｓ８０８に移行する。セクタデータを受信しなかった場合（Ｓ８０７でＮｏの場合）、処理はＳ８０９に移行し、データ受信処理が終了する。
【０１４２】
処理Ｓ８０８では、データ受信プログラム１１２は、不揮発記憶部１１０に暗号化ファイル１２０を生成、または追記する。
【０１４３】
＜暗号化ファイルの復号化処理の詳細＞
図２０は、サーバ２００における、暗号化ファイル復号化プログラム２２３による復号化処理の詳細を説明するためのフローチャートである。当該復号化処理は、定期的に実行され、新しい暗号化ファイルの有無が監視され、新しい暗号化ファイルがあれば復号化してデータベース２３０に記録される。
【０１４４】
処理Ｓ９００では、暗号化ファイル復号化プログラム２２３は、開始指示に従って、暗号化ファイル復号化処理を開始する。なお、暗号化ファイル復号化プログラム２２３は、サーバ２００のオペレーションシステム、或いは他の制御プログラムによって指示され、定期的に実行されるように設定することが望ましい。
【０１４５】
処理Ｓ９０１では、暗号化ファイル復号化プログラム２２３は、データベース２３０に新しい暗号化ファイル２３２が存在するか判定する。新しい暗号化ファイルが存在する場合（Ｓ９０１でＹｅｓの場合）、処理は、Ｓ９０２に移行する。新しい暗号化ファイルが存在しない場合（Ｓ９０１でＮｏの場合）には、処理は、Ｓ９０９に移行し、暗号化ファイル復号化処理は終了する。
【０１４６】
処理Ｓ９０２では、暗号化ファイル復号化プログラム２２３は、暗号化ファイル２３２から機器ＩＤ１２１と１セクタ分のデータを読み出す。
【０１４７】
処理Ｓ９０３では、暗号化ファイル復号化プログラム２２３は、Ｓ９０２で暗号化ファイル２３２から読み出したデータを復号化するのに、疑似乱数列が初期化されているかを判定する。これは、復号化対象の暗号化ファイル２３２に含まれる機器ＩＤ１２１とＲＡＭ２１０に格納された機器ＩＤ２１６が同じで、かつ暗号化ファイル２３２に含まれる初期化ベクトル１２５とＲＡＭ２１０に格納された初期化ベクトル２１８が同じであるかで判定する。同じであれば（Ｓ９０３でＹｅｓの場合）、初期化済みであると判断され、処理はＳ９０４に移行する。一つでも異なれば（Ｓ９０３でＮｏの場合）、初期化されていないと判断され、処理はＳ９１１に移行する。
【０１４８】
処理Ｓ９１１では、暗号化ファイル復号化プログラム２２３は、疑似乱数列の初期化処理を実行する。より具体的には、暗号化ファイル復号化プログラム２２３は、暗号化ファイル２３２の機器ＩＤ１２１とＲＡＭ２１０の機器ＩＤ２１６が同じで、かつ初期化ベクトル１２５と初期化ベクトル２１８が同じ状態での秘密鍵２１２を生成し、さらに、内部状態２１３、インデックスｉ２１４、及びインデックスｊ２１５を生成する。Ｓ９１１の処理の更なる詳細については、図２１を用いて後述する。
【０１４９】
処理Ｓ９０４では、暗号化ファイル復号化プログラム２２３は、暗号化ファイル２３２のセクタデータ１２２の出力カウンタ１２４と、ＲＡＭ２１０の出力カウンタ２１７の差分の回数だけ、ストリーム暗号アルゴリズム２３４で疑似乱数を出力して出力カウンタ２１７を出力回数分インクリメントし、出力カウンタ１２４と出力カウンタ２１７の値を同じくする。
【０１５０】
処理Ｓ９０５では、暗号化ファイル復号化プログラム２２３は、ストリーム暗号アルゴリズム２２４に従って、セクタデータ１２２の暗号化データ１２６を、内部状態２１３、インデックスｉ２１４、及びインデックスｊ２１５を用いて復号化し、当該復号化データをセンサデータバッファ領域２１１に記録する。
【０１５１】
処理Ｓ９０６では、暗号化ファイル復号化プログラム２２３は、センサデータバッファ領域２１１の復号化データをデータベース２３０のセンサデータ領域２３３に記録する。
【０１５２】
処理Ｓ９０７では、暗号化ファイル復号化プログラム２２３は、暗号化ファイル２３２のセクタデータ１２２が全て処理済みか（Ｓ９０２ですべて読み出したか）判定する。読み出しがファイルの最後まで完了していれば（Ｓ９０７でＹｅｓの場合）、処理はＳ９０８に移行する。完了していなければ（Ｓ９０７でＮｏの場合）、処理はＳ９０２に戻る。ファイルの読み出しがすべて完了した場合には、読み出した暗号化ファイル２３２を削除するか、別のバックアップ用記憶領域に処理が移動する。
【０１５３】
処理Ｓ９０８では、暗号化ファイル復号化プログラム２２３は、内部状態２１３、インデックスｉ２１４、インデックスｊ２１５、機器ＩＤ２１６、出力カウンタ２１７、及び初期化ベクトル２１８を、ＲＡＭ２１０の内部状態保持データ２１９に記録し、処理をＳ９０９に移行させ、暗号化ファイル復号化処理を完了する。
【０１５４】
このように、内部状態を内部状態保持データとして保持することにより、内部状態２１３の初期化や同期を高速化することができる。なお、内部状態保持データ２１９（構造については図９参照）の容量に制限を設けるためには、機器当たりに記憶できる最大数を設定し、それを超えた場合には古い情報から削除していくようにしても良い。
【０１５５】
＜サーバにおける擬似乱数列初期化処理（Ｓ９１１）の詳細＞
図２１は、図２０の処理Ｓ９１１における擬似乱数列初期化処理の詳細を説明するためのフローチャートである。図２１では、内部状態保持データ（テーブル）２１９に機器ＩＤや初期化ベクトルが一致し、出力回数が同じか小さい内部状態のデータが存在する場合には、当該データを内部状態保持データ２１９から読み出すことにより、擬似乱数列の初期化処理を短縮するようにする。
【０１５６】
処理Ｓ１０００では、暗号化ファイル復号化プログラム２２３は、擬似乱数列の初期化処理を開始する。
【０１５７】
処理Ｓ１００１では、暗号化ファイル復号化プログラム２２３は、内部状態保持データ２１９（図９）を参照し、機器ＩＤ２５０と暗号化ファイル２３２の機器ＩＤ１２１が同じで、かつ初期化ベクトル２５１とセクタデータ１２２の初期化ベクトル１２５が同じで、かつ出力カウンタ２５２がセクタデータ１２２の出力カウンタ１２４と同じか小さい内部状態２５３、インデックスｉ２５４、及びインデックスｊ２５５が存在するか判断する。存在する場合（Ｓ１００１でＹｅｓの場合）には、暗号化ファイル復号化プログラム２２３は、該当するデータを内部状態保持データ２１９から読みだして、処理をＳ１０１０に移行させる。存在しない場合（Ｓ１００１でＮｏの場合）には、処理はＳ１００２に移行する。
【０１５８】
処理Ｓ１０１０では、暗号化ファイル復号化プログラム２２３は、Ｓ１００１で読みだした内部状態２５３、インデックスｉ２５４、及びインデックスｊ２５５を、それぞれＲＡＭ２１０の内部状態２１３、インデックスｉ２１４、及びインデックスｊ２１５に記録する。また、暗号化ファイル復号化プログラム２２３は、暗号化ファイル２３２の機器ＩＤ１２１と、セクタデータ１２２の初期化ベクトル１２５と、出力カウンタ２５２をそれぞれ、ＲＡＭ２１０の機器ＩＤ２１６と、初期化ベクトル２１８と、出力カウンタ２１７に記録し、処理をＳ１００８に移行させて、擬似乱数列初期化処理を完了する。
【０１５９】
処理Ｓ１００２では、暗号化ファイル復号化プログラム２２３は、暗号化ファイル２３２の機器ＩＤ１２１に対応する共通鍵を共通鍵テーブル２３１から読み出する。そして、暗号化ファイル復号化プログラム２２３は、読み出した共通鍵とセクタデータ１２２の初期化ベクトル１２５と結合した値をハッシュ関数２２５によってハッシュ化し、ハッシュ値を秘密鍵として秘密鍵格納領域２１２に記録する。
【０１６０】
処理Ｓ１００３では、暗号化ファイル復号化プログラム２２３は、秘密鍵格納領域２１２の秘密鍵を基に、ストリーム暗号アルゴリズム２２４の初期化処理によって内部状態の情報を生成し、内部状態格納領域２１３に格納する。ストリーム暗号アルゴリズム２２４はセンサノード１と共通のものが用いられ、例えば、公知のＡＲＣＦＯＵＲを用いられる。暗号化処理の詳細については、図１６に示される処理と同様である。
【０１６１】
処理Ｓ１００４では、暗号化ファイル復号化プログラム２２３は、疑似乱数列初期化処理で使用する変数ｎ、インデックスｉ２１４、及びインデックスｊ２１５を０に初期化する。
【０１６２】
処理Ｓ１００５では、暗号化ファイル復号化プログラム２２３は、変数ｎと十分な大きい所定値（例えば、典型的には３０００以上）と比較する。ｎが所定値よりも小さければ（Ｓ１００５でＹｅｓの場合）、処理はＳ１００６に移行する。それ以外の場合（Ｓ１００５でＮｏの場合）、処理はＳ１００７に移行し、疑似乱数初期化処理が終了する。本処理で十分な大きい数の分だけ予め疑似乱数列から乱数を出力しておくことで、疑似乱数列の予測や解読を困難にすることができる。この回数は、暗号化側のセンサノード１と、復号化側のサーバ２００とで予め同じ値を疑似乱数初期化処理のプログラムに記述する。
【０１６３】
処理Ｓ１００６では、暗号化ファイル復号化プログラム２２３は、ストリーム暗号アルゴリズム２２４に従って、内部状態２１３、インデックスｉ２１４、及びインデックスｊ２１５を用い、乱数を１バイト出力する。この乱数は不要である。当該処理の詳細は、図１７と同様である。
【０１６４】
処理Ｓ１００７では、暗号化ファイル復号化プログラム２２３は、変数ｎをインクリメントし、処理をＳ１００５に移行させる。
【０１６５】
＜復号化処理の詳細＞
図２２は、図２０のＳ９０５による復号化処理の詳細を説明するためのフローチャートである。復号化処理では、ＲＡＭ２１０の内部状態２１３、インデックスｉ２１４、及びインデックスｊ２１５からストリーム暗号アルゴリズム２２４によって擬似乱数を生成し、暗号化ファイル２３２のデータを復号化し、復号化データをセンサデータバッファ２１１に記録するようにしている。
【０１６６】
処理Ｓ１１００では、暗号化ファイル復号化プログラム２２３は、復号化処理を開始する。
【０１６７】
処理Ｓ１１０１では、暗号化ファイル復号化プログラム２２３は、暗号化ファイル２３２のセクタデータ１２２に含まれる暗号化データ１２６（復号化対象）から１バイト読み出す。
【０１６８】
処理Ｓ１１０２では、暗号化ファイル復号化プログラム２２３は、ストリーム暗号アルゴリズム２２４に従って、内部状態２１３、インデックスｉ２１４、及びインデックスｊ２１５を用い、疑似乱数を１バイト出力する。処理の詳細は図１７と同様である。
【０１６９】
処理Ｓ１１０３では、暗号化ファイル復号化プログラム２２３は、処理Ｓ１１０１で読み出したデータと、処理Ｓ１１０２で出力した乱数をＸＯＲ演算する。
【０１７０】
処理Ｓ１１０４では、暗号化ファイル復号化プログラム２２３は、処理Ｓ１１０３の結果をセンサデータバッファ領域２１１に記録する。
【０１７１】
処理Ｓ１１０５では、暗号化ファイル復号化プログラム２２３は、出力カウンタ２１７のカウンタ値をインクリメントして更新する。
【０１７２】
処理Ｓ１１０６では、暗号化ファイル復号化プログラム２２３は、セクタデータ１２２の暗号化データ１２６のデータを、Ｓ１１０１で全て読み出し終わったか（全ての対象データの復号が完了したか）を判定する。読み出しが完了している場合（Ｓ１１０６でＹｅｓの場合）、処理はＳ１１０７に移行し、復号化処理が終了する。読み出しが完了していない場合（Ｓ１１０６でＮｏの場合）、処理はＳ１１０１に移行し、復号化処理が続けられる。
【０１７３】
＜まとめ＞
図２３は、擬似乱数列初期化処理の有無によって電流値がどのように変化するかを示す図である。図２３Ａは、図１のセンサノード１が５１２バイトのデータに対し、擬似乱数出力とＸＯＲ演算による暗号化のみを行ってフラッシュメモリ５０のセクタに記録した電流波形５００を示している。図２３Ｂは、擬似乱数列の初期化処理を行ってから、同サイズのデータに対して擬似乱数出力とＸＯＲ演算による暗号化のみを行ってフラッシュメモリ５０のセクタに記録した電流波形５０１を比較した例を示している。
【０１７４】
図２３に示されるように、擬似乱数の初期化処理は、擬似乱数出力と暗号化のみの場合と比較して１０倍の処理時間を要するため、消費電力を増大させることは明らかである。
【０１７５】
従って、擬似乱数列初期化処理は、消費電力量の増大を気にする必要のない環境・状況下で行う必要があることが分かる。このため、本発明では、バッテリ５の残量が充分にある場合、或いは、外部電源がセンサノード１に接続されている場合に、擬似乱数列初期化処理を実行するようにしている。
【０１７６】
例えば、通信プロトコルで用いられるＡＲＣＦＯＵＲと呼ばれるストリーム暗号化技術は、秘密鍵とするデータ列を入力として、固有な疑似乱数列を生成する技術である。疑似乱数を発生させる処理量は、一般に比較的少なく、ボタン電池で駆動するマイコンにおいても処理可能である。しかし、ストリーム暗号化では、疑似乱数生成の処理時間は比較的少なくて済むが、秘密鍵から疑似乱数列の生成を始めるまでの初期化処理は桁違いに時間を要する。従って、センサノードで通常の通信プロトコルを用いる場合、データ送信単位であるパケット生成毎に擬似乱数を初期化することになるため、センサノードの処理時間を大幅に増大させる可能性が高く、多くの電力を消費する可能性がある。特に、小型のセンサノードの場合ＣＰＵパワーが小さいことが多いので、この擬似乱数列初期化処理の時間が長くなる傾向がある。
【０１７７】
また、機器内部のメモリに予め定められた複数の疑似乱数列を用いて情報を暗号化し、一定時間ごとに使用する乱数列を切り替えることで、疑似乱数列を内部で生成する処理を避けて消費電力を低減した上で、暗号の解読を困難にする技術がある。この技術では、センサノード内部で疑似乱数列を生成する処理が不要であるため、処理時間の問題はない。しかしながら、記憶できる疑似乱数列はメモリサイズに制約を受けるため、使用する疑似乱数列が循環しやすくなり、暗号化データを大量に収集されると、解読される可能性が高い。
【０１７８】
一方、本発明では、上述したように、センサノードの起動時、外部電源接続時、或いは内蔵バッテリ残量が十分（所定値以上）の場合のみ、暗号化に用いる擬似乱数列の初期化処理を実行する。従って、使用する擬似乱数列が循環しやすくなるという状態を回避することができる。また、バッテリの残量が少ない状態で擬似乱数列の初期化処理を実行することがなくなるので、擬似乱数列初期化処理による影響（電力低下という状態）を受けなくなる。つまり、ストリーム暗号化の中でも負荷の大きい初期化処理による電池の消費による電池寿命の大幅な低下や、日常的に可能な充電サイクルより早い電池切れを防ぐことができる。従って、ＣＰＵパワーが小さいセンサノードであっても、擬似乱数列初期化処理に掛かる時間を気にする必要がなくなる。
【０１７９】
また、暗号化データを送信する際には、暗号化データを生成する際に用いた擬似乱数が擬似乱数列の初期化から何回目に出力されたものであるかを示す乱数出力回数情報（出力カウンタ値）を暗号化データに付加する。このようにすることにより、１つの疑似乱数列をある程度の期間に亘って使用する場合で、かつ擬似乱数列が複数パケットにまたがる場合においても、復号化側で暗号化データに付加された出力回数分の擬似乱数列を出力して同期させれば、必要な擬似乱数を出力することができるので、復号化側の処理を軽減することが可能となる。
【０１８０】
本発明では、センサデバイスの起動回数（リセットカウンタ値）を用いて乱数を生成し、この乱数を初期化ベクトルとして、擬似乱数列の初期化を実行する。このようにすることにより、起動ごとに異なる初期化ベクトルを用いることができ、より秘匿性を強化することが可能となる。
【０１８１】
また、擬似乱数列の出力を所定回数（例えば、３０００回）実行して、３０００回目の擬似乱数列を暗号化に用いる擬似乱数列とする。このようにすることにより、擬似乱数列の予測や解読を困難にして秘匿性を強化することが可能となる。
【０１８２】
本発明は、実施形態の機能を実現するソフトウェアのプログラムコードによっても実現できる。この場合、プログラムコードを記録した記憶媒体をシステム或は装置に提供し、そのシステム或は装置のコンピュータ（又はＣＰＵやＭＰＵ）が記憶媒体に格納されたプログラムコードを読み出す。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコード自体、及びそれを記憶した記憶媒体は本発明を構成することになる。このようなプログラムコードを供給するための記憶媒体としては、例えば、フレキシブルディスク、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、ハードディスク、光ディスク、光磁気ディスク、ＣＤ−Ｒ、磁気テープ、不揮発性のメモリカード、ＲＯＭなどが用いられる。
【０１８３】
また、プログラムコードの指示に基づき、コンピュータ上で稼動しているＯＳ（オペレーティングシステム）などが実際の処理の一部又は全部を行い、その処理によって前述した実施の形態の機能が実現されるようにしてもよい。さらに、記憶媒体から読み出されたプログラムコードが、コンピュータ上のメモリに書きこまれた後、そのプログラムコードの指示に基づき、コンピュータのＣＰＵなどが実際の処理の一部又は全部を行い、その処理によって前述した実施の形態の機能が実現されるようにしてもよい。
【０１８４】
さらに、実施の形態の機能を実現するソフトウェアのプログラムコードを、ネットワークを介して配信することにより、それをシステム又は装置のハードディスクやメモリ等の記憶手段又はＣＤ−ＲＷ、ＣＤ−Ｒ等の記憶媒体に格納し、使用時にそのシステム又は装置のコンピュータ（又はＣＰＵやＭＰＵ）が当該記憶手段や当該記憶媒体に格納されたプログラムコードを読み出して実行するようにしても良い。
【０１８５】
最後に、ここで述べたプロセス及び技術は本質的に如何なる特定の装置に関連することはなく、コンポーネントの如何なる相応しい組み合わせによってでも実装できることを理解する必要がある。更に、汎用目的の多様なタイプのデバイスがここで記述した教授に従って使用可能である。ここで述べた方法のステップを実行するのに、専用の装置を構築するのが有益であることが判るかもしれない。また、実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。本発明は、具体例に関連して記述したが、これらは、すべての観点に於いて限定の為ではなく説明の為である。本分野にスキルのある者には、本発明を実施するのに相応しいハードウェア、ソフトウェア、及びファームウエアの多数の組み合わせがあることが解るであろう。例えば、記述したソフトウェアは、アセンブラ、Ｃ／Ｃ＋＋、ｐｅｒｌ、Ｓｈｅｌｌ、ＰＨＰ、Ｊａｖａ（登録商標）等の広範囲のプログラム又はスクリプト言語で実装できる。
【０１８６】
さらに、上述の実施形態において、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。全ての構成が相互に接続されていても良い。
【０１８７】
加えて、本技術分野の通常の知識を有する者には、本発明のその他の実装がここに開示された本発明の明細書及び実施形態の考察から明らかになるである。記述された実施形態の多様な態様及び／又はコンポーネントは、データを管理する機能を有するコンピュータ化ストレージシステムに於いて、単独又は如何なる組み合わせでも使用することが出来る。明細書と具体例は典型的なものに過ぎず、本発明の範囲と精神は後続する請求範囲で示される。
【符号の説明】
【０１８８】
１  センサノード
３  リアルタイムクロック（ＲＴＣ）
１０  マイコン
１１  シリアル通信部（ＳＰＩ）
１２  演算部（ＭＣＵ）
１６  シリアル通信部（ＵＡＲＴ）
３０  ランダムアクセスメモリ（ＲＡＭ）
６０  電源検出回路
６０１〜６０３  抵抗
６０４  トランジスタ
６０５、６０６  グランド
６０７〜６０９  端子
７０  ＯＲ回路
７１、７２  ダイオード
７３  抵抗
７４  グランド
７５〜７７  端子
８１〜８３  配線
１００  基地局
１０１  制御装置
１０２  中央演算部（ＣＰＵ）
１０３  ランダムアクセスメモリ（ＲＡＭ）
１０６  ユーザインタフェース制御部（Ｕ／Ｉ制御部）
１０８  汎用インタフェース（汎用Ｉ／Ｆ）
１２０  暗号化ファイル
２００  サーバ
２０１  中央演算部（ＣＰＵ）
２１０  ランダムアクセスメモリ（ＲＡＭ）
２１９  内部状態保持データ
２３１  共通鍵テーブル
３００  ユーザ
４００  ネットワーク
５００、５０１  電流波形
【図１】
0005525467.tif 000002
【図２】
0005525467.tif 000003
【図３】
0005525467.tif 000004
【図４】
0005525467.tif 000005
【図５】
0005525467.tif 000006
【図６】
0005525467.tif 000007
【図７】
0005525467.tif 000008
【図８】
0005525467.tif 000009
【図９】
0005525467.tif 000010
【図１０】
0005525467.tif 000011
【図１１】
0005525467.tif 000012
【図１２】
0005525467.tif 000013
【図１３】
0005525467.tif 000014
【図１４】
0005525467.tif 000015
【図１５】
0005525467.tif 000016
【図１６】
0005525467.tif 000017
【図１７】
0005525467.tif 000018
【図１８】
0005525467.tif 000019
【図１９】
0005525467.tif 000020
【図２０】
0005525467.tif 000021
【図２１】
0005525467.tif 000022
【図２２】
0005525467.tif 000023
【図２３】
0005525467.tif 000024