説明

センサデバイス、及びその制御方法

【課題】センサノードで収集した情報を安全に送信すると共に、センシング処理以外の処理における消費電力の増加の影響を軽減する。
【解決手段】センサノードで暗号化に用いる擬似乱数列を初期化、更新する処理を、パワーオン時や、外部電源による充電や給電時、あるいはバッテリの残量が十分である場合のみ実行する。また、送信する暗号化データには、疑似乱数列の初期化から、そのパケットを暗号化した乱数を出力するまでの出力回数を付加する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、センサデバイス、及びその制御方法に関し、例えば、人の身体に装着され、或いは、所定の環境下に配置され、測定したデータを出力するセンサデバイス、及びその制御方法に関するものである。
【背景技術】
【0002】
人にセンサノード(センサデバイスともいう)を装着したり、情報端末を所定の環境下に設置したりして、個人情報、生体情報、及び環境情報等を取得することが考えられている。
【0003】
例えば、特許文献1に示されるように、センサ、無線、マイコン等を搭載した小型のセンサノードが実用化段階にある。特許文献1で開示されるセンサノードでは、センシングや無線通信が必要なタイミングでのみ起動し、それ以外では電源を切って消費電力を削減する間欠動作を実行している。また、このような脈拍を測ることを目的としたセンサノードは電源を内蔵しつつも一般的に小型であり、人が身に付けることも容易である場合が多い。従って、日常生活において、人の生活の中の活動の情報を容易に収集し、収集情報をサーバ装置に送信して集中管理することが可能となっている。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2004−234622号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、特許文献1に示されるセンサノードにおいては、センシングして収集した情報は脈拍などの個人情報であり、取り扱いを厳重にしなければならないところ、当該個人情報を単に通信によりサーバ装置に送信することを想定しており、第三者による個人情報の閲覧や改竄を防止するという観点が欠落している。
【0006】
また、このようなセンサノードや情報端末においては、小型バッテリを電源として駆動するため、低消費電力でセンシングする必要がある。ところが、特許文献1に示されるセンサノードは、センシング処理に特化して、それ以外の時間をスリープ状態にして消費電力を削減する間欠動作であるため、センシング処理以外で処理時間が長くなると、消費電力が大幅に増大し、電池を電源とした場合には日常利用が困難な電池寿命となる。
【0007】
本発明はこのような状況に鑑みてなされたものであり、センサノードで収集した情報を安全に送信すると共に、センシング処理以外の処理における消費電力の増加の影響を軽減することができる技術を提供するものである。
【課題を解決するための手段】
【0008】
本発明では、センサノードで暗号化に用いる擬似乱数列を初期化、更新する処理を、パワーオン時や、外部電源による充電や給電時、あるいはバッテリの残量が十分である場合のみ実行する。また、送信する暗号化データには、疑似乱数列の初期化から、そのパケットを暗号化した乱数を出力するまでの出力回数を付加する。
【0009】
即ち、本発明によるセンサノード(センサデバイス)では、センサによって取得した測定データに対して暗号化処理を実行して暗号化データを生成する。そして、当該センサノードでは、供給電源の電圧値が所定値以上ある場合(例えば、内臓バッテリの電圧残量が所定値以上の場合、或いは、外部電源が接続されていることを検知した場合)に、暗号化処理に用いる擬似乱数列を初期化する処理を実行するようにしている。
【0010】
本発明に関連する更なる特徴は、本明細書の記述、添付図面から明らかになるものである。また、本発明の態様は、要素及び多様な要素の組み合わせ及び以降の詳細な記述と添付される特許請求の範囲の様態により達成され実現される。
【0011】
本明細書の記述は典型的な例示に過ぎず、本発明の特許請求の範囲又は適用例を如何なる意味に於いても限定するものではないことを理解する必要がある。
【発明の効果】
【0012】
本発明によれば、センサノードで収集した情報を安全に格納し、または送信することができ、また、センシング処理以外の処理における消費電力の増加の影響を軽減することができるようになる。
【図面の簡単な説明】
【0013】
【図1】本発明の実施形態によるセンサノードの概略構成を示すブロック図である。
【図2】センサノードで用いられる電源検出回路の構成例を示す図である。
【図3】センサノードで用いられるOR回路の構成例を示す図である
【図4】センサノード、基地局、サーバを含むシステムの概略構成例を示す図である。
【図5】本発明の実施形態による基地局の内部構成例を示すブロック図である。
【図6】本発明の実施形態によるサーバの内部構成例ブロック図である。
【図7】本発明の実施形態における、暗号化ファイルのデータフォーマット例を示す図である。
【図8】各センサノードの共通鍵を記録した共通鍵テーブルの構成例を示す図である。
【図9】本発明の実施形態であるサーバにおける、センサデータ(暗号化データ)を復号化する際に生成される内部情報を保持する内部情報保持データの構成例を示す図である。
【図10】センサノードの処理の概要を説明するためのフローチャートである。
【図11】センサノードの初期化処理(S101)の詳細を説明するためのフローチャートである。
【図12】センサノードの擬似乱数初期化処理(S112及びS202)の詳細を説明するためのフローチャートである。
【図13】センサノードの暗号化処理(S107)の詳細を説明するためのフローチャートである。
【図14】センサノードやサーバが有する内部状態の構成例を示す図である。
【図15】センサノードやサーバが有する秘密鍵の構成例を示す図である。
【図16】センサノードやサーバにおいて、ストリーム暗号化アルゴリズムをARCFOURとした場合の、ストリーム暗号化アルゴリズムの初期化処理(S303)の詳細を説明するためのフローチャートである。
【図17】センサノードやサーバにおいて、ストリーム暗号化アルゴリズムをARCFOURとした場合の、ストリーム暗号化アルゴリズムの擬似乱数出力処理(S306及びS403)の詳細を説明するためのフローチャートである。
【図18】センサノードの通信処理(S102)の詳細を説明するためのフローチャートである。
【図19】基地局におけるデータ受信処理の詳細を説明するためのフローチャートである。
【図20】サーバの暗号化ファイル復号化処理の詳細を説明するためのフローチャートである。
【図21】サーバの擬似乱数列初期化処理(S911)の詳細を説明するためのフローチャートである。
【図22】サーバの復号化処理(S905)の詳細を説明するためのフローチャートである。
【図23】センサノードの消費電流の変化を示す図である。
【発明を実施するための形態】
【0014】
本発明は、例えば人体に装着可能な、或いは所定の環境下に設置可能な超小型のセンサノードにおいて、測定データを暗号化する際に生じる電力消費の影響を軽減することができる技術を提供するものである。
【0015】
以下、添付図面を参照して本発明の実施形態について説明する。添付図面では、機能的に同じ要素は同じ番号で表示される場合もある。なお、添付図面は本発明の原理に則った具体的な実施形態と実装例を示しているが、これらは本発明の理解のためのものであり、決して本発明を限定的に解釈するために用いられるものではない。
【0016】
本実施形態では、当業者が本発明を実施するのに十分詳細にその説明がなされているが、他の実装・形態も可能で、本発明の技術的思想の範囲と精神を逸脱することなく構成・構造の変更や多様な要素の置き換えが可能であることを理解する必要がある。従って、以降の記述をこれに限定して解釈してはならない。
【0017】
更に、本発明の実施形態は、後述されるように、汎用コンピュータ上で稼動するソフトウェアで実装しても良いし専用ハードウェア又はソフトウェアとハードウェアの組み合わせで実装しても良い。
【0018】
なお、本明細書の図では、テーブルやリストを例にして本発明で用いられる情報について説明しているが、テーブルやリストの構造で提供される情報に限られるものではなく、データ構造に依存しない情報であっても良い。
【0019】
また、各情報の内容を説明する際に、「識別情報」、「識別子」、「名」、「名前」、「ID」という表現を用いるが、これらについてはお互いに置換が可能である。
【0020】
以後の説明では「プログラム」を主語として各処理の説明を行うことがあるが、プログラムはプロセッサによって実行されることで定められた処理をメモリ及び通信ポート(通信制御装置)を用いながら行うため、プロセッサを主語とした説明としてもよい。また、プログラムを主語として開示された処理は管理サーバ等の計算機、情報処理装置が行う処理としてもよい。プログラムの一部または全ては専用ハードウェアで実現してもよく、また、モジュール化されていても良い。各種プログラムはプログラム配布サーバや記憶メディアによって各計算機にインストールされてもよい。
【0021】
<センサノードの構成>
図1は、本発明の第1の実施形態によるセンサノード1(センサデバイス、センサ装置、センサ端末、情報端末などと言うこともできる)の概略構成を示す図である。
【0022】
センサノード1は、マイコン10と、センサ2と、リアルタイムクロック(RTC)3と、センサノード1の内部の所定の電源電圧を生成するレギュレータ4と、バッテリ(例えば、内蔵された充電池)5と、外部から供給される電源によってバッテリ5の充電を制御する充電回路6と、シリアル−USB変換回路7と、無線通信部9と、USBポート8と、EEPROM40と、フラッシュメモリ50と、電源検出回路60と、OR回路70と、を有する。
【0023】
センサノード1のUSBポート8に外部から電源が供給されると、電源検出回路60がマイコン10の入力検出部14に信号を発生させ、マイコン10が演算部12でストリーム暗号アルゴリズム22、ハッシュ関数23及び乱数生成器(乱数生成プログラム)24によって、暗号化処理に用いる擬似乱数列を初期化し、RAM30に記録されている秘密鍵33、初期化ベクトル34、及び内部状態35を更新する。
【0024】
センサノード1は、人に装着され、或いは所定の環境下に設置され、一定間隔でセンサ2によって検知した情報を取得して内部のメモリ(図示せず)に記録する。また、センサノード1は、記録した検知情報をフラッシュメモリ50から読み出し、当該情報を無線部9による通信機能を用いて、外部(例えば、サーバ(後述))に送信する。なお、センサノード1は、特に人が身につける場合においては、その利便性のため、内蔵電池(満充電した充電池:バッテリ5)で1、2週間以上駆動することが望ましい。
【0025】
センサ2は、人の動きや温度、脈拍等の生体情報、周辺環境の光や音等を所定の時間間隔で検出して内部のメモリに記録し、シリアル通信によって当該メモリから情報を読み出し可能となっている。センサ2として、検出した値をアナログ値の電圧等で出力するセンサを使用することも可能である。アナログ出力のセンサを用いる場合には、センサ2をA/D変換部15に接続する必要がある。
【0026】
RTC3は、時計機能を持ったICであり、内部の時計情報を保持、及び更新する。RTC3は、シリアル通信によって、保持した時計情報(時刻)を読み出し、読み出した時刻と所定の処理のタイミングを同期させることや所定の時間間隔で信号を発することが可能である。典型的には、マイコン10の消費電力よりもRTC3のそれの方が小さいため、RTC3からマイコン10に測定周期の割込みを発生させることにより、マイコン10は欠かさず測定処理を実行しながら、処理の空き時間は内部のクロックを停止してスリープ状態にして消費電力を削減することができる。
【0027】
マイコン10は、接続されたセンサ2や各メモリ(EEPROM40、フラッシュメモリ50など)等とシリアル通信をするシリアル通信部11及び16と、プログラムコードに従って演算やメモリを書き換える演算部12と、入力される信号によって所定のプログラムの実行を開始させる割込み検出部13と、入力される信号の値を保持、または割込みとする入力検出部14と、入力される信号の電圧をデジタル値に変換するアナログ−デジタル変換部(A/D変換部)15と、大容量の不揮発メモリであるフラッシュメモリ20と、揮発メモリであるRAM30と、を有している。
【0028】
フラッシュメモリ20は、マイコン10の演算部12で処理するプログラムのコードを記録するコード領域21と、演算部12で処理するプログラムから参照するデータを記録するデータ記録領域26と、を含む。データ領域26は、マイコン10の動作中に書き換えることが可能である。コード領域21は、ストリーム暗号アルゴリズム22と、ハッシュ関数23と、乱数生成器(乱数生成プログラム)24と、制御プログラム25と、を有する。
【0029】
制御プログラム25は、マイコン10のメイン処理を記述したプログラムコードであり、マイコン10の起動時に演算部12に呼び出されて実行される。ストリーム暗号アルゴリズム22、ハッシュ関数23、及び乱数生成器24はそれぞれ、制御プログラム25に記述される処理から呼び出して実行される。データ記録領域26は、センサノード1に固有な識別子である機器ID27と、マイコン10のリセット及び起動回数を記録するリセットカウンタ28と、擬似乱数列の初期化に使用し、センサノード1ごとに固有な共通鍵29と、を含んでいる。
【0030】
RAM30は、センサ2で測定した情報やセンサ2で測定したタイミングの時刻情報を記録するセンサデータバッファ領域31と、センサデータバッファ領域31のデータを暗号化したデータを記録する暗号化データバッファ領域32と、擬似乱数列の基になる秘密鍵を格納する秘密鍵格納領域33と、乱数生成器24によって生成されるランダムな値であり、共通鍵から秘密鍵を生成する際に用いる初期化ベクトルを格納する初期化ベクトル格納領域34と、ストリーム暗号アルゴリズム22で擬似乱数列を生成する過程でメモリに書かれた必要な情報である内部状態(擬似ランダムなバイト列:例えば、0番目から255番目までバイト列を擬似的にランダムに配列したもの(図14参照))を格納する内部状態格納領域35と、内部状態の配列を入れ替えるときに用いる2個のインデックスであるインデックスi及びインデックスjを格納するインデックスi格納領域37及びインデックスj格納領域38と、擬似乱数列の初期化から乱数を出力した回数を記録する出力カウンタ値を格納する出力カウンタ値格納領域36と、暗号化データバッファ32のデータをセクタ51の暗号化データ55の領域に記録するのに適したサイズまで蓄積する記録用暗号化データ蓄積領域65と、記録用暗号化データ65に記録されるデータの先頭値を暗号化する直前の出力カウンタの値を格納する記録用出力カウンタ格納領域63と、記録用暗号化データ65に含まれるセンサデータを測定した時刻情報を記録する記録用タイムスタンプ格納領域62と、を含んでいる。なお、図1では、領域、格納領域、及び蓄積領域の文言は省略されている。また、本明細書では、例えば、秘密鍵格納領域33に格納される秘密鍵を、秘密鍵33と称する場合があり、その他のデータについても同様である。
【0031】
ストリーム暗号アルゴリズム22によって生成される擬似乱数列は、秘密鍵33によって一意に定まる。秘密鍵33は、例えば、センサノード固有の共通鍵29と初期化ベクトル34を結合した値を基づいてハッシュ関数23で生成したハッシュ値であることが望ましい。一般的に、ARCFOURなどの公知のストリーム暗号アルゴリズムにおいては、同じ秘密鍵から生成した擬似乱数列を繰り返し使用すると解読されやすいため、使用する秘密鍵が循環することがない程度のバリエーションがあり、予測や再現されにくい十分ランダムな初期化ベクトル34を組み合わせて使用する。本実施形態によるセンサノード1においては、初期化ベクトル34はリセットカウンタ28をもとに乱数生成器24によって生成される。ソフトウェアで構成できる乱数生成器24としては、線形帰還シフトレジスタ(LFSR)等が望ましい。
【0032】
また、初期化ベクトル34は揮発性のRAM30に記録され、リセットカウンタ28はマイコン10内部のフラッシュメモリ20に記録されている。このため、マイコン10の開発用のポート(典型的にはJTAGポート)を使用不可にすれば外部から読み出すことができない。つまり、後から暗号化データを第三者が解読する目的で、任意の初期化ベクトル34を再現させることは困難であるため、初期化ベクトル34は必要十分にランダムであるといえる。なお、万が一、秘密鍵33が第三者に解読された場合においても、共通鍵29が復元されないようにするために、秘密鍵33は、ハッシュ関数でハッシュ化されている。
【0033】
センサデータバッファ31の値は、典型的には先頭から順に擬似乱数列とのXOR(排他的論理和)演算によって暗号化される。擬似乱数列は秘密鍵33によって定まるが、長期的に擬似乱数列を初期化しない場合においては、初期化直後ではない擬似乱数列によって暗号化した暗号化データのみを受け取ることがほとんどであるため、秘密鍵33のみを同期しても、復号化に必要な乱数を出力することができない。これを解決するため、擬似乱数列を初期化してからの乱数の出力回数である出力カウンタ36の値を暗号化データに付加して復号化側に送信する。この出力カウンタ36の値によって、複号化で用いる擬似乱数列の先頭を特定することが可能となる。
【0034】
フラッシュメモリ50には、主にRAM30の暗号化データバッファに一時的に記録された情報が記録される。例えば、SDカードなどの大容量のフラッシュメモリ50は、一般的に512バイト程度の書き換え単位が定められており、この単位がセクタ51とされている。それぞれのセクタ51には、保存されたデータの時刻情報であるタイムスタンプ52と、暗号化データバッファ32の値をコピーした暗号化データ55と、暗号化データ55に対応する記録用出力カウンタである出力カウンタ53と、暗号化データ55に対応する初期化ベクトル54とが記録される。つまり、復号化側においてはセクタ51ごとに読み出されて受信した際に、共通鍵29と、初期化ベクトル54と、出力カウンタ53と、ストリーム暗号アルゴリズム22と、ハッシュ関数23と、乱数生成器24を暗号側と共有することで、暗号化データ55を復号化することができる。また、任意の時刻に測定されたデータを含むセクタ51のみを読み出したい場合においては、タイムスタンプ52のみを読みだしていくことで検索することもできる。
【0035】
EEPROM40には、フラッシュメモリ50から次に読み出すセクタの位置を示す読出しセクタポインタ41と、次に書き込むセクタの位置を示す書込みセクタポインタ42が記録される。読出しセクタポインタ41では、セクタのデータを読み出して送信に成功すると、ポインタ値が次のセクタの位置に進められて更新される。また、書込みセクタポインタ42では、セクタにデータを書き込むと、ポインタ値が次のセクタの位置に進められて更新される。また、読出しセクタポインタ41は書込みセクタポインタ42よりは先に進めないようになっている。これにより、書込みセクタポインタ42と読出しセクタポインタ41の間のデータのみを送ることで、重複したデータの送信を防ぐことができる。また、読出しセクタポインタ41と書込みセクタポインタ42は、フラッシュメモリ50で規定された最大値を超えると、最小値に戻って循環する。一般的にフラッシュメモリ50は書き換え回数に制限があるため、使用する領域を循環させることにより、フラッシュメモリ50の寿命を最大化することができる。
【0036】
マイコン10は、シリアル通信部16により、シリアル−USB変換7を介して、USBポート8に接続したUSB端子を有する機器と通信することができる。同様に、無線通信部9を介して、他の無線機器と通信することがきる。
【0037】
マイコン10、センサ2、RTC3、無線通信部9、EEPROM40、及びフラッシュメモリ50には、レギュレータ4から配線83を介して、電源が供給される。電源は、OR回路70及びレギュレータ4を介して、バッテリ5から、または電源供給可能な機器と接続されていればUSBポート8からそれぞれに供給される。充電回路6は、USBポート8が電源供給可能な機器と接続されている場合にのみ、バッテリ5の充電を開始し、バッテリ5の電圧が十分に高くなると、充電を停止する。
【0038】
<電源検出回路の内部構成例>
図2は、電源検出回路60の構成例を示す図である。当該構成は単なる例であり、本発明を限定するものではないことに注意すべきである。
【0039】
電源検出回路60は、抵抗601、602、及び603と、トランジスタ604と、グランド605及び606と、を有する。例えば、端子607に、レギュレータ4を介して内部電源(バッテリ5)を接続した場合、端子609にUSBポート8を介して接続された電源の電圧に応じて、端子608の電圧が切り替えられる。つまり、端子607の電圧をレギュレータ4によって、内部電源電圧(バッテリ5の電圧)よりも大きい入力電圧、例えば電源電圧を3ボルトとした場合、例えば5ボルトの外部電源を、USBポート8を介して端子609に接続しても、抵抗601及び603によって分圧してトランジスタ604に適したベース電圧が生成される。そして、端子609にUSB端子を介して外部電源が接続されると、端子608の電圧をグランド606の電圧に、端子609に外部電源が接続されないと端子608を端子607の電圧(内部電源電圧)にする。これにより、USB端子の電源が接続されたことを、内部電源電圧を使用するマイコンにおける0及び1のデジタル入力値として生成することができる。
【0040】
<OR回路の内部構成例>
図3は、OR回路70の内部構成例を示す図である。当該構成は単なる例であり、本発明を限定するものではないことに注意すべきである。
【0041】
OR回路70は、ダイオード71及び72と、抵抗73と、グランド74と、を有し、端子76及び77に接続された電源電圧の高い方が端子75に出力されるようになっている。
【0042】
<システムの構成>
図4は、本実施形態による情報管理システム(単に、情報処理システムと称することもできる)の構成例を示す図である。当該情報管理システムは、少なくとも1つのセンサノード1と、少なくとも1つの基地局100と、少なくとも1つのサーバ200と、を有する。各センサノード1と基地局100は無線ネットワークで接続され、基地局100とサーバ200はネットワーク400で接続されている。
【0043】
当該情報管理システムでは、基地局100は、ユーザ300が身に付けたセンサノード1からセンサで計測したデータを取得して、インターネット等のネットワーク400を介してサーバ200に送信する。そして、サーバ200は、複数のセンサノード1のデータを収集して蓄積し、収集した情報を解析する。
【0044】
このような構成を採用することにより、センサノード1や基地局100を構成するマイコンやPCが低コストで処理能力が少ない場合においても、ネットワーク400に接続された比較的処理能力が高く、メモリの記録容量も豊富なサーバ200で、大量のセンサデータを扱うことが可能になる。
【0045】
センサノード1と基地局100は、USBなどの有線通信で接続される他、無線通信であれば距離や接続する手間に関わらず、安定してセンサノード1からデータを収集することが可能である。
【0046】
<基地局の内部構成>
図5は、基地局100の内部概略構成例を示す図である。基地局100は、主にPCや携帯電話等の情報機器である制御装置101と、制御装置101に接続される無線通信部130と、入力装置150と、ディスプレイ140と、を有する。
【0047】
制御装置101は、不揮発記憶部110と、中央演算部(CPU)102と、RAM103と、ネットワーク400と接続して通信する機能を有するネットワーク接続部104と、ディスプレイ140等を制御してユーザ300が基地局100を操作するために必要な情報等を表示する表示制御部105と、マウスやキーボード及びタッチパネル等の入力装置150からの入力を受け付けてCPU102で実行されるプログラムから参照可能とするU/I制御部106と、外部から供給される電源から基地局100の内部電源電圧を生成する電源装置107と、USBケーブル160で繋がれたセンサノード1や無線通信部130による通信を制御する汎用I/F108と、を有する。
【0048】
不揮発記憶部110には、データ受信プログラム112、時刻同期プログラム113、及び暗号ファイル送信プログラム114等を含む制御プログラム111と、暗号化ファイル120を格納している。制御プログラム111は、CPU102によって実行される。また、暗号化ファイル120は、センサノード1から受信した情報である。
【0049】
データ受信プログラム112は、センサノード1から暗号化されたデータを受信して暗号化ファイル120を生成するプログラムである。時刻同期プログラム113は、センサノード1と通信してセンサノード1のRTC3の時刻を同期するためのプログラムである。暗号化ファイル送信プログラム114は、ネットワーク400を介して暗号化ファイル120をサーバ200に送信するためのプログラムである。
【0050】
データ受信プログラム112は、USB通信、有線通信や無線通信によってセンサノード1と基地局100が接続されたか否か定期的に監視し、接続されるとセンサノード1からデータを読み出すためのリクエストコマンドをセンタノード1に送信し、暗号化データの受信を開始する。受信したデータは、制御装置101で扱いやすいファイルサイズの暗号ファイル120に分割されて、不揮発記憶部110に格納される。
【0051】
暗号化ファイル送信プログラム114は、定期的に新しい暗号化ファイル120が生成されたか否か監視し、データ受信プログラム112によって生成された暗号化ファイル120を、ネットワーク通信部104を制御してサーバ200に送信する。
【0052】
<サーバの内部構成>
図6は、サーバ200の内部概略構成例を示す図である。サーバ200は、不揮発記憶部220と、CPU201と、RAM210と、インターネット等のネットワーク400に接続されたネットワーク通信部202と、外部電源からサーバ200の内部電源を生成する電源装置202と、を有する。
【0053】
不揮発記憶部220は、サーバ200のCPU201で実行される制御プログラム221と、データベース230を有する。制御プログラム221は、ネットワーク400を介して基地局100から送信される暗号化ファイル120を受信してデータベース230に記録する暗号化ファイル受信プログラム222と、データベース230に記録された暗号化ファイル232を復号化する暗号化ファイル復号化プログラム223と、暗号化ファイル復号化プログラム223から参照されるストリーム暗号アルゴリズム224と、ハッシュ関数225と、データベース230に記録されている復号化されたセンサデータ233から人の行動や健康状態といった有益な情報を抽出するための解析計算プログラム226と、データベース230に記録されているセンサデータ233や解析データ234をユーザ300等からネットワーク400経由で閲覧可能にするWebサーバプログラム227と、を有する。
【0054】
データベース230は、複数のセンサノード1の共通鍵29を記録する共通鍵テーブル231と、センサノード1から受信した暗号化ファイル232と、暗号化ファイル232を復号化した結果であるセンサデータ233と、センサデータ233を解析した結果として得られる解析データ234と、を格納している。
【0055】
ストリーム暗号アルゴリズム224は、センサノード1のストリーム暗号アルゴリズム22と共通であり、ハッシュ関数225もセンサノード1のハッシュ関数23と共通である。これにより、それぞれのセンサノード1の共通鍵から、同じ秘密鍵や疑似乱数列の生成が可能である。
【0056】
RAM210は、暗号化ファイル232を復号化した情報を一時的に記憶するセンサデータバッファ領域211と、暗号化ファイル232に含まれる初期化ベクトルを格納する初期ベクトル格納領域218と、共通鍵テーブル231の共通鍵を結合してハッシュ関数235でハッシュ化した値である秘密鍵を格納する秘密鍵格納領域212と、ストリーム暗号アルゴリズム224で疑似乱数列を出力するために使用するメモリの情報である内部状態を格納する内部状態格納領域213(今まさに復号化しようとする暗号化データについての内部状態)と、インデックスiを格納するインデックスi格納領域214と、インデックスjを格納するインデックスj格納領域215と、復号化中のデータの機器IDを格納する機器ID格納領域216と、出力カウンタ値を格納する出力カウンタ値格納領域217と、暗号化ファイル232をストリーム暗号アルゴリズム234で復号化した後の内部状態を記録して保持する内部状態保持データ領域219と、を有する。内部状態保持データ219は、センサデータ(暗号化データ)を受け取るごとに擬似乱数列初期化処理を実行して内部状態を作成しなくてもよいようにするためのデータである。同じセンサノード1からデータを受け取ったときに、以前データを受け取ったときに作成した内部状態の情報が使える可能性があるため、使える内部状態の情報が存在すれば、それを使い、初期化処理の時間を短縮するようにしている。なお、図6では、図1と同様、領域、及び格納領域の文言は省略されている。また、本明細書では、例えば、秘密鍵格納領域212に格納される秘密鍵を、秘密鍵212と称する場合があり、その他のデータについても同様である。
【0057】
<暗号化ファイルの構成例>
図7は、基地局100の暗号化ファイル120及びサーバ200の暗号化ファイル232の構成例を示す図である。図7には、暗号化ファイル120及び232の共通の構成が示されている。
【0058】
暗号化ファイル120及び232は、機器ID121と複数のセクタデータ122を含んでいる。セクタデータ122は、センサノード1のフラッシュメモリ50と同様にタイムスタンプ123と、出力カウンタ124と、初期化ベクトル125と、暗号化データ126と、を有する。
【0059】
サーバ200は、暗号化ファイル120を復号化する場合、機器ID121に対応するセンサノード1の共通鍵を共通鍵テーブル231から読出し、共通鍵と初期化ベクトル125を結合してハッシュ関数225によってハッシュ値を生成する。そして、サーバ200は、生成したハッシュ値を秘密鍵としてストリーム暗号アルゴリズム224を初期化し、出力カウンタ125の値に従って不要な乱数を出力して疑似乱数列を進めた後に、暗号化データ126を暗号化した乱数を出力する。このようにすることにより、暗号化データ126の復号化が可能となる。
【0060】
出力カウンタ125に従って不要な乱数を出力して疑似乱数列を先に進める処理は、サーバ200にとっては一見無駄な処理のように思われるが、消費電力を抑える点で利点がある。つまり、例えばセクタデータ122ごとに疑似乱数を初期化すると、センサノード1で頻繁に疑似乱数列の初期化処理をしなくてはならないため、消費電力が増大し、電池寿命を大幅に短くする可能性がある。一方で、サーバ200は、小型で電池駆動のセンサノード1と比較して、典型的には十分な電力や処理能力を有するため、疑似乱数列を先に進める処理は無視できる程度に短時間であるため、問題にならない。また、センサノード1とサーバ200の電力コスト、処理時間を最適化するように出力カウンタ125の上限値を定めることが好適である。
【0061】
<共通鍵テーブル>
図8は、共通鍵テーブル(テーブル)231の構成例を示す図である。共通鍵テーブル231は、機器ID240と、有効開始日時241と、有効終了日時242と、共通鍵243と、を構成項目として含んでいる。
【0062】
この共通鍵テーブル231からは、機器ID240を基に検索すると、目的のセンサノード1に対応する共通鍵243を取得することができる。検索する際には、例えば、暗号化ファイルのタイムスタンプ122が、有効開始日時241及び有効終了日時242によって規定される有効期間に含まれるものに限定することもできる。これにより、センサノード1の共通鍵29を変更する場合に、変更前の共通鍵243に対応する有効終了日242に変更する直前の日時を入力し、新たな共通鍵243と有効開始日時241を入力して登録することで、共通鍵の変更を容易にできる。
【0063】
<内部状態保持データ>
図9は、内部状態保持データ219の構成例を示す図である。内部状態保持データ219は、機器ID250と、初期化ベクトル251と、出力カウンタ252と、内部状態253と、インデックスi254と、インデックスj255と、を構成項目として含んでいる。
【0064】
機器ID250、初期化ベクトル251、及び出力カウンタ252を基に内部状態保持データ219を検索することで、対応する内部状態253、インデックスi254及びインデックスj255を取得することができる。つまり、サーバ200でストリーム暗号アルゴリズム234によって疑似乱数列を初期化し、不要な乱数を出力して疑似乱数列を進める処理をすることなく、必要な乱数を即座できるように、出力する内部状態253、インデックスi253、インデックスj254を取得することができるため、大幅に処理時間を短縮することができる。また、出力カウンタ252が同一の内部状態253が存在しない場合は、探したい出力カウンタの値より小さくて最も近い値があれば、その内部状態253を取得することで、疑似乱数列を初期化する処理を省くことができる。
【0065】
<センサノードの処理概要>
図10は、センサノード1の制御プログラム25による処理概要を説明するためのフローチャートである。制御プログラム25では、所定の間隔で計測したデータを暗号化して記録し、内部電源の電圧が所定値以上ある場合、或いは、USB等によって外部電源が接続された場合に、接続を検出して疑似乱数列を初期化する。
【0066】
処理S100では、制御プログラム25は、マイコン10のリセット、パワーオンリセット時に処理を開始する。
【0067】
処理S101では、制御プログラム25は、リセットカウンタの更新や、疑似乱数列の初期化を行う初期化処理を実行する。初期化処理S101の詳細については、図11を用いて後述する。なお、図11に示されるように、S101の処理の中には、擬似乱数列初期化処理(S202)も含まれている。従って、センサノード1が起動された段階での初期化処理(S101)では、時間が掛かったとしても擬似乱数列初期化処理は必ず実行される。
【0068】
処理S102では、制御プログラム25は、USBや無線で接続された基地局100と通信し、基地局からのリクエストがあれば、フラッシュメモリ40のデータを読み出して基地局100に対して送信する。通信処理S102の詳細については、図18を用いて後述する。
【0069】
処理S103では、制御プログラム25は、RTC3が発する所定の周期的な信号を受信するまで待機する。この周期がセンサ2による測定処理実行の周期となる。待機中はマイコン10のクロックを停止したスリープ状態にすることで、消費電力を削減できる。
【0070】
処理S104では、制御プログラム25は、センサ2からデータ(測定データ)を読み出して、RAM30のセンサデータバッファ31に記録する。
【0071】
処理S105では、制御プログラム25は、センサデータバッファ領域31に記録されたデータのサイズを監視する。当該領域に所定のサイズが蓄積されている場合(S105でYesの場合)、処理はS106に移行する。満たない場合(S105でNoの場合)、処理はS102に移行する。この所定のサイズとは、圧縮効率やセクタ51の使用効率を最適化するように規定される。例えば、50ミリ秒間隔で3軸加速度を測定する場合には、1秒分、つまり20サンプル分を所定のサイズとすることが望ましい。
【0072】
処理S106では、制御プログラム25は、センサデータバッファ31のデータを読み出して、公知の圧縮アルゴリズムにて圧縮する。
【0073】
処理S107では、制御プログラム25は、ストリーム暗号アルゴリズム22を用いて、センサデータバッファ31の圧縮データを読み出して暗号化し、暗号化データバッファ32に記録する。S107の暗号化処理の詳細については、図13を用いて後述する。
【0074】
処理S108では、制御プログラム25は、暗号化データバッファ32に記録されたデータのサイズと記録用暗号化データ65に記録されたデータのサイズとの合計サイズを、セクタ51のサイズと比較する。セクタ51が合計サイズよりも小さければ(S108でYesの場合)、処理はS109に移行し、それ以外の場合(S108でNoの場合)、処理はS113に移行する。
【0075】
処理S109では、制御プログラム25は、記録用暗号化データ65のデータを暗号化データ55として、RAM30の初期化ベクトル34(の値)をフラッシュメモリ50の初期化ベクトル54(の値)とする。また、制御プログラム25は、記録用出力カウンタ63(の値)を出力カウンタ53(の値)として、記録用タイムスタンプ62に格納されている最初と最後の時刻情報をタイムスタンプ52に格納する。このように、制御プログラム25は、RAM30に格納されたデータをセクタ51のデータとして記録する。フラッシュメモリ50への記録完了後に、制御プログラム25は、記録用タイムスタンプ52及び記録用暗号化データ64を初期化し、記録用出力カウンタ63に出力カウンタ36の値をコピーする。この出力カウンタ36の値は、擬似乱数列の初期化から乱数を出力した回数を示すものである。よって、サーバ200側では、この出力カウンタ値を用いて当該カウンタ値の1つ手前の数に相当する乱数までを不要な乱数として捨て、出力カウンタ値に示された順番の乱数を復号化に用いればすむので、暗号化データを復号化する度に擬似乱数列初期化処理を実行する必要がなくなり、処理時間を短縮することが可能となる。
【0076】
処理S110では、制御プログラム25は、EEPROM40の書込みセクタポインタ42を次の位置に更新する。これにより、次に書き込むセクタの正確な位置を確定することができる。
【0077】
処理S111では、制御プログラム25は、内臓バッテリ5における使用可能な電圧値(バッテリの残量)が所定値(閾値)以上か、或いは、入力検出部14の入力から判断してUSBの外部電源が接続されていて電圧値が所定値(閾値)以上か判断する。つまり、外部電源が接続されていなくてもバッテリ5の電圧値の残量に余裕があるか、或いは、外部電源が接続されて使用可能な電圧値に余裕があるか(バッテリ5への充電処理中であっても良い)が判断される。使用可能電圧値が所定値以上の場合(S111でYesの場合)、処理はS112に移行し、使用可能電圧値が所定値よりも小さい場合(S111でNoの場合)、処理はS113に移行する。
【0078】
処理S112では、制御プログラム25は、疑似乱数列の初期化処理を実行する。当該擬似欄数列の初期化処理の詳細については、図12を用いて後述する。
【0079】
処理S113では、制御プログラム25は、記録用暗号化データ格納領域65に、暗号化データバッファ格納領域32のデータを記録する。
【0080】
<初期化処理の詳細>
図11は、図10の処理S101の詳細を説明するためのフローチャートである。図11には、基地局100と通信してRTC3を時刻同期し、擬似乱数列を初期化することが示されている。
【0081】
処理S200では、制御プログラム25は、初期化処理を開始する。
【0082】
処理S201では、制御プログラム25は、フラッシュメモリ50のデータ記録領域26のリセットカウンタ27をインクリメントする。このリセットカウンタ27の値は、センサノード1の起動回数を示す情報となっている。なお、データ記憶領域26がフラッシュメモリ内にあるため、一般的には最大書き換え回数の制約があるが、一度の充電で1週間以上使用でき、継ぎ足し充電可能なバッテリ5を備えるセンサノード1であれば、典型的にはリセット回数が書き換え回数の上限を上回ることはない。
【0083】
処理S202では、制御プログラム25は、疑似乱数列の初期化処理を実行する。擬似乱数の列の初期化処理の詳細については、図12を用いて後述する。
【0084】
処理S203では、制御プログラム25は、センサノード1のRTC3に時刻情報がセットされているかを判定する。RTC3が時刻同期されていないと、センサで測定しても正しい時刻情報を付加できないからである。従って、時刻同期が完了するまでは測定動作を開始しない。時刻同期が完了していれば(S203でYesの場合)、処理はS204に移行し、初期化処理が終了する。時刻同期が完了していない場合(S203でNo場合)は、処理はS211に移行する。
【0085】
処理S211では、制御プログラム25は、基地局100からコマンドが送信されてくるまで待機する。
【0086】
処理S212では、制御プログラム25は、受信データ列からコマンドを識別し、コマンドに対応する所定の処理を実行する。例えば、時刻情報を受信した場合は、制御プログラム25は、RTC3に時刻情報をセットする。
【0087】
<擬似乱数列初期化処理の詳細>
図12は、図10の処理S112及び図11の処理S202による擬似乱数列初期化処理の詳細を説明するためのフローチャートである。擬似乱数列初期化処理では、リセットカウンタ28と共通鍵29から、ストリーム暗号アルゴリズムにより、疑似乱数列の出力に必要な内部状態35が生成される。
【0088】
処理S300では、制御プログラム25は、疑似乱数列の初期化処理を開始する。
【0089】
処理S301では、制御プログラム25は、リセットカウンタ格納領域28からリセットカウンタ値を読み出して、乱数生成器24に記述された処理によって乱数を生成し、当該乱数を初期化ベクトルとして初期化ベクトル格納領域34に記録する。
【0090】
処理S302では、制御プログラム25は、初期化ベクトル格納領域34に格納されている初期化ベクトルと共通鍵格納領域29に格納されている共通鍵とを結合し、この値を基にハッシュ関数23に記述された処理によってハッシュ値を出力し、当該ハッシュ値を秘密鍵として秘密鍵格納領域33に記録する。
【0091】
処理S303では、制御プログラム25は、秘密鍵格納領域33に格納されている秘密鍵に基づいて、例えばARCFOURなどの公知のアルゴリズムであるストリーム暗号化アルゴリズム22の初期化処理によって疑似乱数列を初期化し、当該擬似乱数列を乱数出力に必要な内部状態の情報として内部状態格納領域35に出力する。
【0092】
処理S304では、制御プログラム25は、疑似乱数列初期化処理で使用する変数nと、インデックスi37及びインデックスj38を0に初期化する。
【0093】
処理S305では、制御プログラム25は、変数nと十分な大きい所定の数(例えば、3000以上)と比較し、nが小さければ(S305でYesの場合)、処理をS306に移行させ、それ以外の場合(S305でNoの場合)、処理をS308に移行させて疑似乱数初期化処理を終了する。本処理で十分な大きい数の分だけ予め疑似乱数列から乱数を出力しておくことで、疑似乱数列の予測や解読を困難にすることができる。つまり、所定回数(例えば、3000回)だけ乱数を出力して初めて暗号化に使える乱数となる。そして、そのときの内部状態、インデックスi及びjをRAMに保持する。なお、当該乱数出力回数は出力カウンタ36には含まれず、暗号化側のセンサノード1と、復号化側のサーバ200とで予め同じ値を疑似乱数初期化処理のプログラムに記述する。
【0094】
処理S306では、制御プログラム25は、ストリーム暗号アルゴリズム22により、内部状態35、インデックスi37、及びインデックスj38を用いて乱数を1バイト出力する。この乱数は不要な乱数となる。
【0095】
処理S307では、制御プログラム25は、変数nをインクリメントし、S305からの処理を再度実行する。
【0096】
<暗号化処理の詳細>
図13は、図10の処理S107による暗号化処理の詳細を説明するためのフローチャートである。図13では、センサデータバッファ31のデータを、ストリーム暗号によって順に暗号化して暗号化データバッファ領域32に記録する処理が実行される。
【0097】
処理S400では、制御プログラム25は、暗号化処理を開始する。
【0098】
処理S401では、制御プログラム25は、センサデータバッファ領域31から1バイト分のデータを読み出す。
【0099】
処理S402では、制御プログラム25は、ストリーム暗号アルゴリズム22によって内部状態35、インデックスi37、及びインデックスj38を用いて、1バイト分の疑似乱数を出力する。
【0100】
処理S403では、制御プログラム25は、処理S401で読み出したデータと処理S403で出力した乱数とをXOR演算する。
【0101】
処理S404では、制御プログラム25は、処理S403の結果を暗号化データバッファ格納領域32に記録する。
【0102】
処理S405では、制御プログラム25は、出力カウンタ36をインクリメントして更新する。
【0103】
処理S406では、制御プログラム25は、S401においてセンサデータバッファ領域31から全てのデータを読み出し終わったかを判定する。読み出しが完了している場合(S406でYesの場合)、処理はS407に移行して暗号化処理は完了する。読み出しが完了していない場合(S406でNoの場合)、処理はS401に戻る。
【0104】
<内部状態のデータ例>
図14は、内部状態格納領域35に格納される内部状態のデータの好適な例を示す図である。ストリーム暗号アルゴリズム22にARCFOURを用いた場合は、256バイトの内部状態が生成される。
【0105】
<秘密鍵の例>
図15は、秘密鍵格納領域33に格納される秘密鍵の好適な例を示す図である。秘密鍵は、長いほど一般的に暗号強度が高まり、例えば、16バイト以上の長さがあることが望ましい。本実施形態では、16バイトに設定されている。
【0106】
<内部状態生成処理の詳細>
図16は、図12の処理S303による内部状態生成処理の詳細を説明するためのフローチャートである。図16では、より具体的には、好適な公知のストリーム暗号化アルゴリズムであるARCFOURの初期化処理を実行し、秘密鍵33から内部状態35が生成される。
【0107】
処理S500では、制御プログラム25は、ストリーム暗号アルゴリズムの初期化処理を開始する。
【0108】
処理S501では、制御プログラム25は、ストリーム暗号アルゴリズムの初期化処理内で使用する変数iを0に初期化する。
【0109】
処理S502では、制御プログラム25は、iが256より小さければ(S502でYesの場合)処理をS503に移行させ、それ以外の場合(S502でNoの場合)、処理をS505に移行させる。
【0110】
処理S503では、制御プログラム25は、内部状態35のi番のバイトにiを代入する。
【0111】
処理S504でハ、制御プログラム25は、変数iを1インクリメントし、処理をS502に移行させる。
【0112】
処理S505では、制御プログラム25は、ストリーム暗号アルゴリズムの初期化処理内で使用する変数i及びjをそれぞれ0で初期化する。
【0113】
処理S506では、制御プログラム25は、変数iが256より小さければ(S506でYesの場合)、処理をS507に移行させ、それ以外の場合(S506でNoの場合)、処理をS510に移行させてストリーム暗号アルゴリズムの初期化処理を完了する。
【0114】
処理S507では、制御プログラム25は、変数jと、内部状態35のi番のバイト値と、iを16で割った余りをkとした場合の秘密鍵33のk番のバイト値との和を、256で割った余りを、変数jに代入する。
【0115】
処理S508では、制御プログラム25は、内部状態35のi番と、内部状態35のj番のバイト値を交換する。
【0116】
処理S509では、制御プログラム25は、変数iを1インクリメントし、処理をS506に移行させる。
【0117】
以上の処理により、内部状態のデータが生成される。この内部状態のデータは、擬似乱数列生成処理(S306:詳細は図17参照)に用いられる。
【0118】
<擬似乱数出力処理の詳細>
図17は、図12のS306及び図13のS402による擬似乱数出力処理の詳細を説明するためのフローチャートである。図17では、好適な公知のストリーム暗号化アルゴリズムであるARCFOURの疑似乱数出力処理が示され、擬似乱数列の初期化処理時と比較して少ない計算量で内部状態35、インデックスi37、及びインデックスj38から1バイト分の疑似乱数が取り出され、内部状態35、インデックスi37、及びインデックスj38が更新される。
【0119】
処理S600では、制御プログラム25は、疑似乱数出力処理を開始する。
【0120】
処理S601では、制御プログラム25は、インデックスi37の値に1を加えた値を、256で割った余りの数を、インデックスi37に代入する。
【0121】
処理S602では、制御プログラム25は、インデックスj38の値に、内部状態35のi番のバイト値を加えた値を、256で割った余りを、インデックスj38に代入する。
【0122】
処理S603では、制御プログラム25は、内部状態35のi番と、内部状態35のj番のバイト値を交換する。
【0123】
処理S604では、制御プログラム25は、内部状態35のi番目のバイト値及び内部状態35のj番目のバイト値の和を256で割った余りをkとし、内部状態35のk番のバイト値を、疑似乱数として出力し、処理をS605に移行させて疑似乱数出力処理を完了する。
【0124】
<通信処理の詳細>
図18は、図10のS102による通信処理の詳細を説明するためのフローチャートである。図18では、USBまたは無線接続により通信処理をする例が示されており、基地局100からの所定のコマンドを受信して処理が実行される。例えばセンサノード1が基地局100からデータ送信リクエストコマンドを受信した場合には、フラッシュメモリ50に記録されているデータを重複なく基地局100に送信する。
【0125】
処理S700では、制御プログラム25は、通信処理を開始する。
【0126】
処理S701では、制御プログラム25は、電源検出回路60に接続された入力検出部14の入力を監視し、USBや無線で基地局100にセンサノード1が接続されているか否か判断する。基地局が接続されていれば(S701でYesの場合)、処理は、S702に移行する。接続されていなければ(S701でNoの場合)、処理は、S709に移行し、通信処理が終了する。
【0127】
処理S702では、制御プログラム25は、シリアル通信部16を用いて、基地局100から受信したコマンドがあるか否か判断する。受信したコマンドがあれば(S702でYesの場合)、処理は、S703に移行する。受信したコマンドがなければ(S702でNoの場合)、処理は、S709に移行し、通信処理が終了する。
【0128】
処理S703では、制御プログラム25は、受信したコマンドがデータリクエストであるか否か判断する。受信コマンドがデータリクエストであれば(S703でYesの場合)、処理は、S704に移行する。受信コマンドがデータリクエスト以外であれば(S703でNoの場合)、処理は、S708に移行し、制御プログラム25は、コマンドに対応した所定の処理を実行する。例えば、機器ID27を読み出すリクエストコマンドを受信した場合には、制御プログラム25は、シリアル通信部16を介して、機器ID27を読み出して基地局100に送信する。
【0129】
処理S704では、制御プログラム25は、書込みセクタポインタ42と読出しセクタポインタ41を比較し、同じでなければ(S704でNoの場合)処理をS705に移行させ、同じであれば(S704でYesの場合)処理をS709に移行させ、通信処理を完了する。
【0130】
処理S705では、制御プログラム25は、読出しセクタポインタ41の示すセクタ51のデータをフラッシュメモリ50から読み出す。
【0131】
処理S706では、制御プログラム25は、S705で読み出したセクタのデータを、接続されている基地局100に送信する。
【0132】
処理S707では、制御プログラム25は、読出しセクタポインタ41を進めて更新し、処理をS704に戻す。
【0133】
<基地局における受信処理の詳細>
図19は、基地局100のデータ受信プログラム112による受信処理の詳細を説明するためのフローチャートである。基地局100において、受信処理が定期的に実行されることで、センサノード1と基地局100が、USBもしくは無線通信にて接続されるか定期的に監視される。センサノード1と基地局100が接続されていれば、基地局100がデータリクエストコマンドを送信して、センサノード1のセンサ2によって計測したデータを読み出すようにする。
【0134】
処理S800では、データ受信プログラム112は、データ受信処理を開始する。
【0135】
処理S801では、データ受信プログラム112は、センサノード1と基地局100が接続されているかを判定する。両者が接続されていれば(S801でYesの場合)、処理はS802に移行する。両者が接続されていなければ(S801でNoの場合)、処理は、S809に移行し、データ受信処理が終了する。
【0136】
処理S802では、データ受信プログラム112は、汎用I/F108を介して、時刻情報を付加したコマンドをセンサノード1に送信する。センサノード1は、当該時刻情報を受信し、RTC3を受信した時刻情報と同期させる処理を実行する。
【0137】
処理S803では、データ受信プログラム112は、センサノード1の機器ID27を読み出すリクエストコマンドを、該当するセンサノード1に送信する。
【0138】
処理S804では、データ受信プログラム112は、汎用I/F(USB)108或いは無線通信部130を介して、機器ID27を受信したか判定する。受信に成功した場合(S804でYesの場合)、処理はS805に移行する。受信に失敗した場合(S804でNoの場合)、処理S809に移行し、データ受信処理は終了する。機器ID27が分からない暗号化データは、復号化に必要な共通鍵が取得できないからである。
【0139】
処理S805では、データ受信プログラム112は、データリクエストを送信する。
【0140】
処理S806では、データ受信プログラム112は、汎用I/F(USB)108或いは無線通信部130によるデータ受信を所定の時間待機する。当該待機時間は、最大でも1秒程度であることが好ましい。
【0141】
処理S807では、データ受信プログラム112は、処理S806でデータ受信があったかを判定する。センサノード1から送信されたセクタデータを受信した場合(S807でYesの場合)、処理は、S808に移行する。セクタデータを受信しなかった場合(S807でNoの場合)、処理はS809に移行し、データ受信処理が終了する。
【0142】
処理S808では、データ受信プログラム112は、不揮発記憶部110に暗号化ファイル120を生成、または追記する。
【0143】
<暗号化ファイルの復号化処理の詳細>
図20は、サーバ200における、暗号化ファイル復号化プログラム223による復号化処理の詳細を説明するためのフローチャートである。当該復号化処理は、定期的に実行され、新しい暗号化ファイルの有無が監視され、新しい暗号化ファイルがあれば復号化してデータベース230に記録される。
【0144】
処理S900では、暗号化ファイル復号化プログラム223は、開始指示に従って、暗号化ファイル復号化処理を開始する。なお、暗号化ファイル復号化プログラム223は、サーバ200のオペレーションシステム、或いは他の制御プログラムによって指示され、定期的に実行されるように設定することが望ましい。
【0145】
処理S901では、暗号化ファイル復号化プログラム223は、データベース230に新しい暗号化ファイル232が存在するか判定する。新しい暗号化ファイルが存在する場合(S901でYesの場合)、処理は、S902に移行する。新しい暗号化ファイルが存在しない場合(S901でNoの場合)には、処理は、S909に移行し、暗号化ファイル復号化処理は終了する。
【0146】
処理S902では、暗号化ファイル復号化プログラム223は、暗号化ファイル232から機器ID121と1セクタ分のデータを読み出す。
【0147】
処理S903では、暗号化ファイル復号化プログラム223は、S902で暗号化ファイル232から読み出したデータを復号化するのに、疑似乱数列が初期化されているかを判定する。これは、復号化対象の暗号化ファイル232に含まれる機器ID121とRAM210に格納された機器ID216が同じで、かつ暗号化ファイル232に含まれる初期化ベクトル125とRAM210に格納された初期化ベクトル218が同じであるかで判定する。同じであれば(S903でYesの場合)、初期化済みであると判断され、処理はS904に移行する。一つでも異なれば(S903でNoの場合)、初期化されていないと判断され、処理はS911に移行する。
【0148】
処理S911では、暗号化ファイル復号化プログラム223は、疑似乱数列の初期化処理を実行する。より具体的には、暗号化ファイル復号化プログラム223は、暗号化ファイル232の機器ID121とRAM210の機器ID216が同じで、かつ初期化ベクトル125と初期化ベクトル218が同じ状態での秘密鍵212を生成し、さらに、内部状態213、インデックスi214、及びインデックスj215を生成する。S911の処理の更なる詳細については、図21を用いて後述する。
【0149】
処理S904では、暗号化ファイル復号化プログラム223は、暗号化ファイル232のセクタデータ122の出力カウンタ124と、RAM210の出力カウンタ217の差分の回数だけ、ストリーム暗号アルゴリズム234で疑似乱数を出力して出力カウンタ217を出力回数分インクリメントし、出力カウンタ124と出力カウンタ217の値を同じくする。
【0150】
処理S905では、暗号化ファイル復号化プログラム223は、ストリーム暗号アルゴリズム224に従って、セクタデータ122の暗号化データ126を、内部状態213、インデックスi214、及びインデックスj215を用いて復号化し、当該復号化データをセンサデータバッファ領域211に記録する。
【0151】
処理S906では、暗号化ファイル復号化プログラム223は、センサデータバッファ領域211の復号化データをデータベース230のセンサデータ領域233に記録する。
【0152】
処理S907では、暗号化ファイル復号化プログラム223は、暗号化ファイル232のセクタデータ122が全て処理済みか(S902ですべて読み出したか)判定する。読み出しがファイルの最後まで完了していれば(S907でYesの場合)、処理はS908に移行する。完了していなければ(S907でNoの場合)、処理はS902に戻る。ファイルの読み出しがすべて完了した場合には、読み出した暗号化ファイル232を削除するか、別のバックアップ用記憶領域に処理が移動する。
【0153】
処理S908では、暗号化ファイル復号化プログラム223は、内部状態213、インデックスi214、インデックスj215、機器ID216、出力カウンタ217、及び初期化ベクトル218を、RAM210の内部状態保持データ219に記録し、処理をS909に移行させ、暗号化ファイル復号化処理を完了する。
【0154】
このように、内部状態を内部状態保持データとして保持することにより、内部状態213の初期化や同期を高速化することができる。なお、内部状態保持データ219(構造については図9参照)の容量に制限を設けるためには、機器当たりに記憶できる最大数を設定し、それを超えた場合には古い情報から削除していくようにしても良い。
【0155】
<サーバにおける擬似乱数列初期化処理(S911)の詳細>
図21は、図20の処理S911における擬似乱数列初期化処理の詳細を説明するためのフローチャートである。図21では、内部状態保持データ(テーブル)219に機器IDや初期化ベクトルが一致し、出力回数が同じか小さい内部状態のデータが存在する場合には、当該データを内部状態保持データ219から読み出すことにより、擬似乱数列の初期化処理を短縮するようにする。
【0156】
処理S1000では、暗号化ファイル復号化プログラム223は、擬似乱数列の初期化処理を開始する。
【0157】
処理S1001では、暗号化ファイル復号化プログラム223は、内部状態保持データ219(図9)を参照し、機器ID250と暗号化ファイル232の機器ID121が同じで、かつ初期化ベクトル251とセクタデータ122の初期化ベクトル125が同じで、かつ出力カウンタ252がセクタデータ122の出力カウンタ124と同じか小さい内部状態253、インデックスi254、及びインデックスj255が存在するか判断する。存在する場合(S1001でYesの場合)には、暗号化ファイル復号化プログラム223は、該当するデータを内部状態保持データ219から読みだして、処理をS1010に移行させる。存在しない場合(S1001でNoの場合)には、処理はS1002に移行する。
【0158】
処理S1010では、暗号化ファイル復号化プログラム223は、S1001で読みだした内部状態253、インデックスi254、及びインデックスj255を、それぞれRAM210の内部状態213、インデックスi214、及びインデックスj215に記録する。また、暗号化ファイル復号化プログラム223は、暗号化ファイル232の機器ID121と、セクタデータ122の初期化ベクトル125と、出力カウンタ252をそれぞれ、RAM210の機器ID216と、初期化ベクトル218と、出力カウンタ217に記録し、処理をS1008に移行させて、擬似乱数列初期化処理を完了する。
【0159】
処理S1002では、暗号化ファイル復号化プログラム223は、暗号化ファイル232の機器ID121に対応する共通鍵を共通鍵テーブル231から読み出する。そして、暗号化ファイル復号化プログラム223は、読み出した共通鍵とセクタデータ122の初期化ベクトル125と結合した値をハッシュ関数225によってハッシュ化し、ハッシュ値を秘密鍵として秘密鍵格納領域212に記録する。
【0160】
処理S1003では、暗号化ファイル復号化プログラム223は、秘密鍵格納領域212の秘密鍵を基に、ストリーム暗号アルゴリズム224の初期化処理によって内部状態の情報を生成し、内部状態格納領域213に格納する。ストリーム暗号アルゴリズム224はセンサノード1と共通のものが用いられ、例えば、公知のARCFOURを用いられる。暗号化処理の詳細については、図16に示される処理と同様である。
【0161】
処理S1004では、暗号化ファイル復号化プログラム223は、疑似乱数列初期化処理で使用する変数n、インデックスi214、及びインデックスj215を0に初期化する。
【0162】
処理S1005では、暗号化ファイル復号化プログラム223は、変数nと十分な大きい所定値(例えば、典型的には3000以上)と比較する。nが所定値よりも小さければ(S1005でYesの場合)、処理はS1006に移行する。それ以外の場合(S1005でNoの場合)、処理はS1007に移行し、疑似乱数初期化処理が終了する。本処理で十分な大きい数の分だけ予め疑似乱数列から乱数を出力しておくことで、疑似乱数列の予測や解読を困難にすることができる。この回数は、暗号化側のセンサノード1と、復号化側のサーバ200とで予め同じ値を疑似乱数初期化処理のプログラムに記述する。
【0163】
処理S1006では、暗号化ファイル復号化プログラム223は、ストリーム暗号アルゴリズム224に従って、内部状態213、インデックスi214、及びインデックスj215を用い、乱数を1バイト出力する。この乱数は不要である。当該処理の詳細は、図17と同様である。
【0164】
処理S1007では、暗号化ファイル復号化プログラム223は、変数nをインクリメントし、処理をS1005に移行させる。
【0165】
<復号化処理の詳細>
図22は、図20のS905による復号化処理の詳細を説明するためのフローチャートである。復号化処理では、RAM210の内部状態213、インデックスi214、及びインデックスj215からストリーム暗号アルゴリズム224によって擬似乱数を生成し、暗号化ファイル232のデータを復号化し、復号化データをセンサデータバッファ211に記録するようにしている。
【0166】
処理S1100では、暗号化ファイル復号化プログラム223は、復号化処理を開始する。
【0167】
処理S1101では、暗号化ファイル復号化プログラム223は、暗号化ファイル232のセクタデータ122に含まれる暗号化データ126(復号化対象)から1バイト読み出す。
【0168】
処理S1102では、暗号化ファイル復号化プログラム223は、ストリーム暗号アルゴリズム224に従って、内部状態213、インデックスi214、及びインデックスj215を用い、疑似乱数を1バイト出力する。処理の詳細は図17と同様である。
【0169】
処理S1103では、暗号化ファイル復号化プログラム223は、処理S1101で読み出したデータと、処理S1102で出力した乱数をXOR演算する。
【0170】
処理S1104では、暗号化ファイル復号化プログラム223は、処理S1103の結果をセンサデータバッファ領域211に記録する。
【0171】
処理S1105では、暗号化ファイル復号化プログラム223は、出力カウンタ217のカウンタ値をインクリメントして更新する。
【0172】
処理S1106では、暗号化ファイル復号化プログラム223は、セクタデータ122の暗号化データ126のデータを、S1101で全て読み出し終わったか(全ての対象データの復号が完了したか)を判定する。読み出しが完了している場合(S1106でYesの場合)、処理はS1107に移行し、復号化処理が終了する。読み出しが完了していない場合(S1106でNoの場合)、処理はS1101に移行し、復号化処理が続けられる。
【0173】
<まとめ>
図23は、擬似乱数列初期化処理の有無によって電流値がどのように変化するかを示す図である。図23Aは、図1のセンサノード1が512バイトのデータに対し、擬似乱数出力とXOR演算による暗号化のみを行ってフラッシュメモリ50のセクタに記録した電流波形500を示している。図23Bは、擬似乱数列の初期化処理を行ってから、同サイズのデータに対して擬似乱数出力とXOR演算による暗号化のみを行ってフラッシュメモリ50のセクタに記録した電流波形501を比較した例を示している。
【0174】
図23に示されるように、擬似乱数の初期化処理は、擬似乱数出力と暗号化のみの場合と比較して10倍の処理時間を要するため、消費電力を増大させることは明らかである。
【0175】
従って、擬似乱数列初期化処理は、消費電力量の増大を気にする必要のない環境・状況下で行う必要があることが分かる。このため、本発明では、バッテリ5の残量が充分にある場合、或いは、外部電源がセンサノード1に接続されている場合に、擬似乱数列初期化処理を実行するようにしている。
【0176】
例えば、通信プロトコルで用いられるARCFOURと呼ばれるストリーム暗号化技術は、秘密鍵とするデータ列を入力として、固有な疑似乱数列を生成する技術である。疑似乱数を発生させる処理量は、一般に比較的少なく、ボタン電池で駆動するマイコンにおいても処理可能である。しかし、ストリーム暗号化では、疑似乱数生成の処理時間は比較的少なくて済むが、秘密鍵から疑似乱数列の生成を始めるまでの初期化処理は桁違いに時間を要する。従って、センサノードで通常の通信プロトコルを用いる場合、データ送信単位であるパケット生成毎に擬似乱数を初期化することになるため、センサノードの処理時間を大幅に増大させる可能性が高く、多くの電力を消費する可能性がある。特に、小型のセンサノードの場合CPUパワーが小さいことが多いので、この擬似乱数列初期化処理の時間が長くなる傾向がある。
【0177】
また、機器内部のメモリに予め定められた複数の疑似乱数列を用いて情報を暗号化し、一定時間ごとに使用する乱数列を切り替えることで、疑似乱数列を内部で生成する処理を避けて消費電力を低減した上で、暗号の解読を困難にする技術がある。この技術では、センサノード内部で疑似乱数列を生成する処理が不要であるため、処理時間の問題はない。しかしながら、記憶できる疑似乱数列はメモリサイズに制約を受けるため、使用する疑似乱数列が循環しやすくなり、暗号化データを大量に収集されると、解読される可能性が高い。
【0178】
一方、本発明では、上述したように、センサノードの起動時、外部電源接続時、或いは内蔵バッテリ残量が十分(所定値以上)の場合のみ、暗号化に用いる擬似乱数列の初期化処理を実行する。従って、使用する擬似乱数列が循環しやすくなるという状態を回避することができる。また、バッテリの残量が少ない状態で擬似乱数列の初期化処理を実行することがなくなるので、擬似乱数列初期化処理による影響(電力低下という状態)を受けなくなる。つまり、ストリーム暗号化の中でも負荷の大きい初期化処理による電池の消費による電池寿命の大幅な低下や、日常的に可能な充電サイクルより早い電池切れを防ぐことができる。従って、CPUパワーが小さいセンサノードであっても、擬似乱数列初期化処理に掛かる時間を気にする必要がなくなる。
【0179】
また、暗号化データを送信する際には、暗号化データを生成する際に用いた擬似乱数が擬似乱数列の初期化から何回目に出力されたものであるかを示す乱数出力回数情報(出力カウンタ値)を暗号化データに付加する。このようにすることにより、1つの疑似乱数列をある程度の期間に亘って使用する場合で、かつ擬似乱数列が複数パケットにまたがる場合においても、復号化側で暗号化データに付加された出力回数分の擬似乱数列を出力して同期させれば、必要な擬似乱数を出力することができるので、復号化側の処理を軽減することが可能となる。
【0180】
本発明では、センサデバイスの起動回数(リセットカウンタ値)を用いて乱数を生成し、この乱数を初期化ベクトルとして、擬似乱数列の初期化を実行する。このようにすることにより、起動ごとに異なる初期化ベクトルを用いることができ、より秘匿性を強化することが可能となる。
【0181】
また、擬似乱数列の出力を所定回数(例えば、3000回)実行して、3000回目の擬似乱数列を暗号化に用いる擬似乱数列とする。このようにすることにより、擬似乱数列の予測や解読を困難にして秘匿性を強化することが可能となる。
【0182】
本発明は、実施形態の機能を実現するソフトウェアのプログラムコードによっても実現できる。この場合、プログラムコードを記録した記憶媒体をシステム或は装置に提供し、そのシステム或は装置のコンピュータ(又はCPUやMPU)が記憶媒体に格納されたプログラムコードを読み出す。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコード自体、及びそれを記憶した記憶媒体は本発明を構成することになる。このようなプログラムコードを供給するための記憶媒体としては、例えば、フレキシブルディスク、CD−ROM、DVD−ROM、ハードディスク、光ディスク、光磁気ディスク、CD−R、磁気テープ、不揮発性のメモリカード、ROMなどが用いられる。
【0183】
また、プログラムコードの指示に基づき、コンピュータ上で稼動しているOS(オペレーティングシステム)などが実際の処理の一部又は全部を行い、その処理によって前述した実施の形態の機能が実現されるようにしてもよい。さらに、記憶媒体から読み出されたプログラムコードが、コンピュータ上のメモリに書きこまれた後、そのプログラムコードの指示に基づき、コンピュータのCPUなどが実際の処理の一部又は全部を行い、その処理によって前述した実施の形態の機能が実現されるようにしてもよい。
【0184】
さらに、実施の形態の機能を実現するソフトウェアのプログラムコードを、ネットワークを介して配信することにより、それをシステム又は装置のハードディスクやメモリ等の記憶手段又はCD−RW、CD−R等の記憶媒体に格納し、使用時にそのシステム又は装置のコンピュータ(又はCPUやMPU)が当該記憶手段や当該記憶媒体に格納されたプログラムコードを読み出して実行するようにしても良い。
【0185】
最後に、ここで述べたプロセス及び技術は本質的に如何なる特定の装置に関連することはなく、コンポーネントの如何なる相応しい組み合わせによってでも実装できることを理解する必要がある。更に、汎用目的の多様なタイプのデバイスがここで記述した教授に従って使用可能である。ここで述べた方法のステップを実行するのに、専用の装置を構築するのが有益であることが判るかもしれない。また、実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。本発明は、具体例に関連して記述したが、これらは、すべての観点に於いて限定の為ではなく説明の為である。本分野にスキルのある者には、本発明を実施するのに相応しいハードウェア、ソフトウェア、及びファームウエアの多数の組み合わせがあることが解るであろう。例えば、記述したソフトウェアは、アセンブラ、C/C++、perl、Shell、PHP、Java(登録商標)等の広範囲のプログラム又はスクリプト言語で実装できる。
【0186】
さらに、上述の実施形態において、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。全ての構成が相互に接続されていても良い。
【0187】
加えて、本技術分野の通常の知識を有する者には、本発明のその他の実装がここに開示された本発明の明細書及び実施形態の考察から明らかになるである。記述された実施形態の多様な態様及び/又はコンポーネントは、データを管理する機能を有するコンピュータ化ストレージシステムに於いて、単独又は如何なる組み合わせでも使用することが出来る。明細書と具体例は典型的なものに過ぎず、本発明の範囲と精神は後続する請求範囲で示される。
【符号の説明】
【0188】
1 センサノード
3 リアルタイムクロック(RTC)
10 マイコン
11 シリアル通信部(SPI)
12 演算部(MCU)
16 シリアル通信部(UART)
30 ランダムアクセスメモリ(RAM)
60 電源検出回路
601〜603 抵抗
604 トランジスタ
605、606 グランド
607〜609 端子
70 OR回路
71、72 ダイオード
73 抵抗
74 グランド
75〜77 端子
81〜83 配線
100 基地局
101 制御装置
102 中央演算部(CPU)
103 ランダムアクセスメモリ(RAM)
106 ユーザインタフェース制御部(U/I制御部)
108 汎用インタフェース(汎用I/F)
120 暗号化ファイル
200 サーバ
201 中央演算部(CPU)
210 ランダムアクセスメモリ(RAM)
219 内部状態保持データ
231 共通鍵テーブル
300 ユーザ
400 ネットワーク
500、501 電流波形

【特許請求の範囲】
【請求項1】
所定の使用状態で測定動作を実行し、測定データを取得するセンサと、
前記測定データに対して暗号化処理を実行して暗号化データを生成し、当該暗号化データをメモリに格納するプロセッサと、を有し、
前記プロセッサは、供給電源の電圧値が所定値以上ある場合に、前記暗号化処理に用いる擬似乱数列を初期化する処理を実行することを特徴とするセンサデバイス。
【請求項2】
請求項1において、
前記プロセッサは、擬似乱数を用いて前記暗号化データを生成し、当該暗号化データを生成する際に用いた前記擬似乱数が前記擬似乱数列の初期化から何回目に出力されたものであるかを示す乱数出力回数情報を前記暗号化データに付加して出力することを特徴とするセンサデバイス。
【請求項3】
請求項1において、
前記プロセッサは、前記センサデバイスの起動回数を前記メモリ上で管理し、前記擬似乱数列初期化処理において、前記起動回数から乱数を生成して初期化ベクトルを取得し、当該初期化ベクトルと前記センサデバイスの共通鍵とを用いて秘密鍵を生成し、当該秘密鍵で内部状態を生成することを特徴とするセンサデバイス。
【請求項4】
請求項3において
前記プロセッサは、前記内部状態と当該内部状態の配列要素を入れ替えるための情報であるインデックス情報とを用いて擬似乱数列を出力し、当該擬似乱数列の出力を所定回数実行して前記擬似乱数列初期化処理を完了することを特徴とするセンサデバイス。
【請求項5】
請求項1において、
前記プロセッサは、外部電源が接続されているか否か判断することによって、前記供給電源の電圧値が所定値以上であると判定することを特徴とするセンサデバイス。
【請求項6】
所定の使用状態で測定動作を実行し、測定データを出力するセンサデバイスの制御方法であって、
前記センサデバイスのプロセッサが、供給電源の電圧値が所定値以上ある場合に、暗号化処理に用いる擬似乱数列を初期化する処理を実行するステップと、
前記プロセッサが、前記初期化された擬似乱数列を用いて、前記測定データに対して暗号化処理を実行して暗号化データを生成し、当該暗号化データをメモリに格納するステップと、
を有することを特徴とする制御方法。
【請求項7】
請求項6において、
さらに、前記プロセッサが、擬似乱数を用いて前記暗号化データを生成し、当該暗号化データを生成する際に用いた前記擬似乱数が前記擬似乱数列の初期化から何回目に出力されたものであるかを示す乱数出力回数情報を前記暗号化データに付加して出力するステップを有することを特徴とする制御方法。
【請求項8】
請求項6において、
さらに、前記プロセッサが、前記センサデバイスの起動回数を前記メモリ上で管理ステップを有し、
前記擬似乱数列を初期化するステップにおいて、前記プロセッサは、前記起動回数から乱数を生成して初期化ベクトルを取得し、当該初期化ベクトルと前記センサデバイスの共通鍵とを用いて秘密鍵を生成し、当該秘密鍵で内部状態を生成することを特徴とする制御方法。
【請求項9】
請求項8において
前記擬似乱数列を初期化するステップにおいて、前記プロセッサは、前記内部状態と当該内部状態の配列要素を入れ替えるための情報であるインデックス情報とを用いて擬似乱数列を出力し、当該擬似乱数列の出力を所定回数実行して前記擬似乱数列初期化処理を完了することを特徴とする制御方法。
【請求項10】
請求項6において、
前記擬似乱数を初期化するステップにおいて、前記プロセッサは、外部電源が接続されているか否か判断することによって、前記供給電源の電圧値が所定値以上であると判定することを特徴とする制御方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate

【図21】
image rotate

【図22】
image rotate

【図23】
image rotate


【公開番号】特開2012−173434(P2012−173434A)
【公開日】平成24年9月10日(2012.9.10)
【国際特許分類】
【出願番号】特願2011−33945(P2011−33945)
【出願日】平成23年2月18日(2011.2.18)
【出願人】(000005108)株式会社日立製作所 (27,607)
【Fターム(参考)】