(57)【特許請求の範囲】
【請求項１】
第１デバイスと、ファームウェアを保持し、当該ファームウェアに基づく処理を行う第２デバイスとを含む情報処理システムであって、
前記第２デバイスは、
前記第１デバイスからコマンドを受信する手段と、
前記受信したコマンドが所定の認証コマンドである場合に、前記ファームウェアの処理として、予め定められた応答を送出する手段と、
を有し、
前記第１デバイスは、
前記第２デバイスに対して所定の認証コマンドを送出する手段と、
前記第２デバイスから前記所定の認証コマンドに対する応答を受け入れる手段と、
前記第２デバイスから受け入れた応答が、前記予め定められた応答であるか否かにより、前記第２デバイスのファームウェア改竄の有無を判断し、当該判断の結果を出力する手段と、
を備え、
前記第１デバイスはＵＳＢホストであり、前記第２デバイスはＵＳＢデバイスであって、
前記所定の認証コマンドは、ＳＣＳＩのベンダーユニークコマンドである情報処理システム。
【請求項２】
ファームウェアを保持し、当該ファームウェアに基づく処理を行う情報処理装置であって、
外部の機器からコマンドを受信する手段と、
前記受信したコマンドが所定の認証コマンドである場合に、前記ファームウェアの処理として、予め定められた応答を前記外部の機器へ送出する手段と、
を有し、
前記外部の機器はＵＳＢホストであり、前記情報処理装置はＵＳＢデバイスであって、
前記所定の認証コマンドは、ＳＣＳＩのベンダーユニークコマンドである情報処理装置。
【請求項３】
請求項２記載の情報処理装置であって、
前記外部の機器から、所定のコマンドを単位時間あたり所定の回数だけ受信したときに、前記ファームウェアの処理として、当該受信したコマンドが前記所定の認証コマンドであると判断して、前記予め定められた応答を前記外部の機器へ送出する情報処理装置。
【請求項４】
請求項２または３に記載の情報処理装置であって、
前記予め定められた応答には、前記外部の機器から受信した前記所定の認証コマンド内の情報を符号化した情報を含む情報処理装置。
【請求項５】
請求項４記載の情報処理装置であって、
前記符号化は、予め定められた暗号鍵による暗号化により行われる情報処理装置。
【請求項６】
情報処理装置であるＵＳＢデバイスを、
外部の機器であるＵＳＢホストからコマンドを受信する手段と、
前記受信したコマンドが所定の認証コマンドであるＳＣＳＩのベンダーユニークコマンドである場合に、ファームウェアの処理として、予め定められた応答を前記外部の機器へ送出する手段と、
として機能させるファームウェアプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理システム、情報処理装置、及びファームウェアプログラムに関する。
【背景技術】
【０００２】
近年では、パーソナルコンピュータやその周辺機器（ＵＳＢデバイスや、無線ＬＡＮアクセスポイント等を含む）、携帯電話機、家電製品等、多くの機器が予め設定されたプログラムに従ってコンピュータ制御されている。こうしたコンピュータ制御される種々の機器において、そのプログラムは、ファームウェアとしてフラッシュメモリ等に書き込まれて、機器に内蔵される。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特表２０１４−５０９４２１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
こうした機器において、ファームウェアが不正に書き換えられると、当該機器そのものの動作だけでなく、当該機器が接続される他の機器（例えばファームウェアが不正に書き換えられた周辺機器に接続されるパーソナルコンピュータ等）の動作にも影響があるので、ファームウェアの不正な書き換えを検知したい要望がある。
【０００５】
特許文献１には、疑わしいＵＳＢデバイスとホストとの通信を遮断する目的で、デバイスクラス等の情報から疑わしいパターンを検索する等の処理を行う技術が開示されている。
【０００６】
本発明は上記実情に鑑みて為されたもので、機器のファームウェアの不正な書き換えを検出できる情報処理システム、情報処理装置、及びファームウェアプログラムを提供することを、その目的の一つとする。
【課題を解決するための手段】
【０００７】
上記従来例の問題点を解決するための本発明は、情報処理システムであって、第１デバイスと、ファームウェアを保持し、当該ファームウェアに基づく処理を行う第２デバイスとを含む情報処理システムであって、前記第２デバイスは、前記第１デバイスからコマンドを受信する手段と、前記受信したコマンドが所定の認証コマンドである場合に、前記ファームウェアの処理として、予め定められた応答を送出する手段と、を有し、前記第１デバイスは、前記第２デバイスに対して所定の認証コマンドを送出する手段と、前記第２デバイスから前記所定の認証コマンドに対する応答を受け入れる手段と、前記第２デバイスから受け入れた応答が、前記予め定められた応答であるか否かにより、前記第２デバイスのファームウェア改竄の有無を判断し、当該判断の結果を出力する手段と、を備えることとしたものである。本発明によると、第２デバイスにおけるファームウェアの不正な書き換えを検出できる。
【０００８】
また、本発明の一態様に係る情報処理装置は、ファームウェアを保持し、当該ファームウェアに基づく処理を行う情報処理装置であって、外部の機器からコマンドを受信する手段と、前記受信したコマンドが所定の認証コマンドである場合に、前記ファームウェアの処理として、前記予め定められた応答を前記外部の機器へ送出する手段と、を有することとしたものである。本発明によると、情報処理装置におけるファームウェアの不正な書き換えを検出できる。
【０００９】
またここで、前記外部の機器から、所定のコマンドを単位時間あたり所定の回数だけ受信したときに、前記ファームウェアの処理として、当該受信したコマンドが前記所定の認証コマンドであると判断して、前記予め定められた応答を前記外部の機器へ送出することとしてもよい。これによると、新たなコマンドを定義することなく、認証の動作を行わせることが可能となる。
【００１０】
さらに前記外部の機器はＵＳＢホストであり、前記情報処理装置はＵＳＢデバイスであって、前記所定の認証コマンドは、ＳＣＳＩのベンダーユニークコマンドであってもよい。
【００１１】
また前記応答は、前記外部の機器から認証コマンドとして受信した情報を符号化した情報としてもよい。このとき、前記符号化は、予め定めた暗号鍵による暗号化により行われるようにしてもよい。
【００１２】
また本発明の一態様は、ファームウェアプログラムであって、情報処理装置を、外部の機器からコマンドを受信する手段と、前記受信したコマンドが所定の認証コマンドである場合に、前記ファームウェアの処理として、前記予め定められた応答を前記外部の機器へ送出する手段と、として機能させることとしたものである。
【発明の効果】
【００１３】
本発明によれば、機器のファームウェアの不正な書き換えを検出できる。
【図面の簡単な説明】
【００１４】
【図１】本発明の実施の形態に係る情報処理システムの構成例を表すブロック図である。
【図２】本発明の実施の形態に係る情報処理装置の例を表す機能ブロック図である。
【図３】本発明の実施の形態に係る第１デバイスの動作例を表すフローチャート図である。
【図４】本発明の実施の形態に係る第１デバイスの別の動作例を表すフローチャート図である。
【図５】本発明の実施の形態に係る情報処理システムの別の例を表す構成ブロック図である。
【図６】本発明の実施の形態に係る第２デバイスのファームウェアアップデート時の動作例を表すフローチャート図である。
【発明を実施するための形態】
【００１５】
本発明の実施の形態について図面を参照しながら説明する。本発明の実施の形態に係る情報処理システムは、図１に例示するように、第１デバイスとしてのパーソナルコンピュータ（ＰＣ）１と、第２デバイスとしてのＵＳＢデバイス２とを備えて構成される。本実施の形態の例では、この第２デバイスが、本発明の情報処理装置に相当する。
【００１６】
ここでＰＣ１は、図１に例示するように、制御部１１、記憶部１２、操作部１３、表示部１４、通信部１５及びインタフェース部１６を備えている。またＵＳＢデバイス２は、制御部２１と、記憶部２２と、インタフェース部２３とを具備している。
【００１７】
ＰＣ１の制御部１１はＣＰＵ等のプログラム制御デバイスであり、記憶部１２に格納されたプログラムに従って動作している。この制御部１１は、一般的なＰＣとしての動作を行うほか、第２デバイスであるＵＳＢデバイス２を認証する認証プログラムとしての動作を行い、ＵＳＢデバイス２に対して所定の認証コマンドを送出し、ＵＳＢデバイス２から当該所定の認証コマンドに対する応答を受け入れる。またこの制御部１１は、ＵＳＢデバイス２から受け入れた当該応答が、予め定められた応答であるか否かにより、ＵＳＢデバイス２におけるファームウェア改竄の有無を判断し、その結果を出力する。この制御部１１の詳しい動作については後に述べる。
【００１８】
記憶部１２は、制御部１１によって実行されるプログラムを保持する。この記憶部１２が保持するプログラムには、ＵＳＢデバイス２を認証する認証プログラムが含まれる。これらのプログラムは、コンピュータ可読かつ非一時的な記憶媒体に格納されて提供され、この記憶部１２に格納されたものであってもよいし、ネットワーク等の通信手段を介して提供され、この記憶部１２に格納されたものであってもよい。また、認証プログラムはＵＳＢデバイス２とともに提供されたものであってもよい。具体的に、本実施形態のある例では、認証プログラムを格納したコンピュータ可読な記録媒体が、ＵＳＢデバイス２とともに提供される。利用者はＵＳＢデバイス２を利用するために、この記録媒体に格納された認証プログラムを記憶部１２にインストールする。
【００１９】
本実施の形態においてこの記憶部１２はまた、制御部１１のワークメモリとしても動作する。操作部１３は、例えばマウスやキーボード等であり、利用者からの操作を受け入れて、当該操作の内容を制御部１１に出力する。表示部１４は、ディスプレイ等であり、制御部１１から入力される指示に従って情報を表示出力する。通信部１５は、ネットワークインタフェースであり、制御部１１から入力される指示に従い、ネットワークを介して外部の機器との間で情報を送受する。インタフェース部１６は、ＵＳＢポート等であり、本実施の形態の例では、ＵＳＢデバイス２に接続されるＵＳＢホストとして機能する。このインタフェース部１６は、制御部１１から入力される指示に従って、ＵＳＢデバイス２に対してコマンド等の情報を送出する。また、このインタフェース部１６は、ＵＳＢデバイス２が出力する情報を受け入れて制御部１１に出力する。
【００２０】
ＵＳＢデバイス２の制御部２１は、マイクロコンピュータ等の制御ＩＣであり、記憶部２２に格納されたプログラム（ファームウェア）に従って動作する。本実施の形態の制御部２１は、記憶部２２に格納されたファームウェアに従って、ＵＳＢデバイス２の機能を実現する処理を行う。例えばこのＵＳＢデバイス２がＵＳＢメモリであれば、制御部２１は、ホストであるＰＣ１から入力される指示に従って、記憶部２２に情報を格納する。また、この制御部２１は、ＰＣ１から入力される指示に従って、記憶部２２に格納された情報を読み出してＰＣ１へ出力する。
【００２１】
また本実施の形態では、制御部２１はさらに、第１デバイスであるＰＣ１からコマンドを受信し、当該受信したコマンドが所定の認証コマンドである場合に、ファームウェアに従って実行される処理、すなわちファームウェアの処理として、予め定められた応答を送出する。この制御部２１の動作についても後に述べる。
【００２２】
記憶部２２は、例えばフラッシュメモリ等の不揮発性（給電がない状態で記憶内容を保持可能）かつ、書き換え可能なメモリデバイスであり、本実施の形態では、制御部２１によって実行されるファームウェアプログラムを保持する。このファームウェアプログラムは、コンピュータ可読かつ非一時的な記憶媒体に格納されて提供され、この記憶部２２に格納されたものであってもよいし、ネットワーク等の通信手段を介して提供され、この記憶部２２に格納されたものであってもよい。
【００２３】
インタフェース部２３は、ＵＳＢポート等であり、本実施の形態の例ではＰＣ１のインタフェース部１６に対して接続されている。このインタフェース部２３は、ＰＣ１が出力するコマンド等の情報を受け入れて制御部２１に出力する。またこのインタフェース部２３は、制御部２１から入力される指示に従って、ＰＣ１に対してコマンドに対する応答等の情報を送出する。
【００２４】
本実施の形態に係るＵＳＢデバイス２の制御部２１は、記憶部２２に格納されたファームウェアを実行することにより、機能的には図２に例示するように、コマンド受信部３１と、認証コマンド判断部３２と、応答部３３とを備えている。本実施の形態の一例では、コマンド受信部３１は、インタフェース部２３を介してＰＣ１からコマンドを受け入れて認証コマンド判断部３２に出力する。
【００２５】
認証コマンド判断部３２は、コマンド受信部３１が受け入れたコマンドが所定の認証コマンドであるか否かを判断する。具体的にこのコマンド受信部３１がＰＣ１側から受信するコマンドはＳＣＳＩ（Small Computer System Interface）コマンドであり、所定の認証コマンドは、ＳＣＳＩのベンダーユニークコマンド（ベンダが任意に定め得るコマンド）であってもよい。そして認証コマンド判断部３２が、ＰＣ１側から受信したコマンドが所定の認証コマンドであると判断したときには、認証コマンド判断部３２は応答部３３に対して所定の応答を行うよう指示する。
【００２６】
応答部３３は、認証コマンド判断部３２から指示を受けると、予め定められた応答をＰＣ１へ送出する。具体的にこの応答は、予め定められた文字列等の情報としてもよい。この場合、当該文字列の情報は、ファームウェア内にハードコードされていてもよい。この予め定めた文字列等を秘匿しておくことにより、ファームウェアの改竄者が当該予め定めた文字列等を応答するプログラムモジュールを作成できなくなるので、所定の認証コマンドを受信したときに予め定められた応答を行うことができず、ファームウェアの改竄が検知可能となる。
【００２７】
この例のＵＳＢデバイス２が接続されたＰＣ１の制御部１１は、例えばＵＳＢデバイス２が接続された時点等の所定のタイミングで、認証プログラムの実行を開始し、図３に例示するように、ＵＳＢデバイス２に対して所定の認証コマンドとしてＳＣＳＩのベンダーユニークコマンドを送出する（Ｓ１１）。そして制御部１１は、ＵＳＢデバイス２から当該所定の認証コマンドに対する応答を受け入れるまで待機する（Ｓ１２）。またこの制御部１１は、ＵＳＢデバイス２から応答を受け入れると、当該受け入れた応答が、予め定められた応答であるか否かを判断する。上述のように、この応答が予め定められた文字列等の情報であるときには、ＰＣ１の記憶部１２にはＵＳＢデバイス２が応答として送出するべき当該予め定められた文字列等の情報が（例えば認証プログラムの一部としてハードコードされて）格納されているものとする。
【００２８】
すなわち制御部１１は、ＵＳＢデバイス２から応答を受け入れると、記憶部１２に格納されている文字列等の情報と、当該応答とを比較し（Ｓ１３）、これらが互いに一致していればＵＳＢデバイス２におけるファームウェア改竄はないものと判断し、その結果を出力する（Ｓ１４）。また、制御部１１は、処理Ｓ１３において、記憶部１２に格納されている文字列等の情報と、ＵＳＢデバイス２から受け入れた応答とを比較したときに、これらが互いに一致していなければＵＳＢデバイス２におけるファームウェア改竄がされているものと判断して、その結果を出力する（Ｓ１５）。
【００２９】
本実施の形態のこのような例（応答となるべき文字列等の情報がファームウェアや、記憶部１２に格納された認証プログラムにハードコードされている例）では、ベンダ側においてファームウェア等のソースコードがオープンソース化されるなどして外部に露出された場合に、当該応答となるべき文字列等の情報も公開されることとなる。
【００３０】
そこで本実施形態のこのような例を採用する場合は、ファームウェア等のプログラムのコンパイラにおいて、応答の文字列等として指定された文字列を、コンパイル後にソースコードから削除する処理を行うことが好ましい。本実施の形態の一例では、認証プログラムと対応するファームウェアとが一度に生成されてコンパイルされる。すなわちこの認証プログラムとファームウェアとを生成する情報処理装置では、認証プログラムとファームウェアとのソースコードをロードし、ロードした各ソースコード内の予め定められた位置に、応答となるべき文字列等を挿入する。なお、この挿入位置は各ソースコードの先頭からのオフセットで定めてもよいし、コンパイラへの所定指示文字列（プラグマ等）のある位置に挿入することとしてもよい。この場合、コンパイラのプリプロセッサにより挿入が行われてもよい。また、この応答となるべき文字列は、コンパイラ（プリプロセッサを含む）がここでランダムに発行することとしても構わない。
【００３１】
そして当該文字列挿入後の認証プログラム、及びファームウェアをコンパイルしてそれぞれの実行モジュールを生成する。認証プログラムの実行モジュールは、例えばコンピュータ可読な記録媒体に格納される。またファームウェアの実行モジュールは、ＵＳＢデバイス２の記憶部２２に書き込まれる。
【００３２】
また認証プログラムとファームウェアとを生成する情報処理装置は、コンパイルが完了すると、認証プログラムとファームウェアとのソースコード内の予め定められた位置に挿入した応答となるべき文字列等を削除する。
【００３３】
これにより、本実施の形態では、仮にソースコードが外部に露出した場合であっても、応答となるべき文字列等が同時に公開されることがなくなる。
【００３４】
［認証コマンドの別の例］
またここまでの説明において、ＰＣ１の制御部１１が送出する認証コマンドはＳＣＳＩのベンダーユニークコマンド等、認証コマンドとして特に定められたものであるとしていたが本実施の形態はこれに限られない。具体的に本実施の形態において認証コマンドは、任意のコマンドを所定の態様で送出したものとすることとしてもよい。ここで任意のコマンドはベンダーユニークコマンドであってもよいし、既存のコマンドであっても構わない。また所定の態様とは、具体的には、単位時間あたり所定の回数だけ送信する態様などとすればよい。例えばＳＣＳＩのGetDescripterコマンドを１秒あたり１０回送出する等の態様でよい。なお、ここで所定コマンドは続けて送信される必要はなく、単位時間あたりに所定数送信されれば、所定コマンド以外の他のコマンドがその間に送信されてもよい。またこのほかにも、コマンドＡ，Ｂ，Ｃを所定の順序で、例えばＡ，Ｂ，Ｃの順に１秒以内に送出する、といった態様でも構わない。
【００３５】
この例では、第２デバイスであるＵＳＢデバイス２の制御部２１が、認証コマンド判断部３２としての動作において、上記所定の態様でコマンド受信部３１がコマンドを受信したと判断したときに、所定の認証コマンドを受信したものとして、応答部３３に対して所定の応答を行うよう指示する。
【００３６】
またこの例では、認証コマンド判断部３２としての動作において、上記所定の態様以外の態様で、コマンド受信部３１がコマンドを受信したと判断したときには、当該コマンドに関わる処理を実行するよう指示を出力する。例えば、上記所定の態様が上述の通り、ＳＣＳＩのGetDescripterコマンドを１秒あたり１０回送出することであれば、ＵＳＢデバイス２の制御部２１は、ＰＣ１からＳＣＳＩのGetDescripterコマンドを１秒あたり１０回受信したときに、ＰＣ１に対して所定の応答を行う。このときには、受信したコマンド（GetDescripterコマンド）に対する通常の処理は行う必要はない。
【００３７】
またＵＳＢデバイス２の制御部２１は、ＰＣ１からＳＣＳＩのGetDescripterコマンドを１秒以内に一度だけ受信するなど、１秒あたり１０回受信する以外の態様で受信したときには、GetDescripterコマンドを受信したときに通常行う処理を実行する。このように、単位時間あたり所定のコマンドを受信する回数を測定することにより、ファームウェア改竄の有無を判断することができる。なお、ここで所定コマンドは連続的に受信されなくても、単位時間あたりに所定数受信されればよく、所定コマンド以外の他のコマンドがその間に受信されてもよい。
【００３８】
［応答の別の例］
また応答は、予め定められた文字列等を送出する例だけに限られない。例えば本実施の形態のＰＣ１の制御部１１は、文字列等の暗号対象情報をランダムに生成し、このランダムに生成した暗号対象情報を暗号化して、認証コマンドに含めて送出してもよい。
【００３９】
この例では、当該認証コマンドに対して応答を行うＵＳＢデバイス２の制御部２１は、応答部３３としての処理を行う際に、ＰＣ１から受信した認証コマンドに含まれる、ＰＣ１側で暗号化された情報を、所定の方法で復号し、当該復号の結果を応答としてＰＣ１へ送出することとしてもよい。
【００４０】
ここで符号化の方法は、例えば予め定めた暗号鍵により暗号化する方法である。またＵＳＢデバイス２の制御部２１において行う復号は、当該予め定めた暗号鍵に対応する復号鍵を用いて行われる。この例では暗号鍵に対応する復号鍵を秘匿しておく。これによりファームウェアの改竄者が当該符号化を行った応答をするためのプログラムモジュール（暗号化された情報を復号するプログラムモジュール）を作成できなくなるので、上記所定の認証コマンドを受信したときに予め定められた応答を行うことができず、ファームウェアの改竄が検知可能となる。本実施の形態のこの例では、ＰＣ１の制御部１１及びＵＳＢデバイス２の制御部２１は、それぞれ次のように動作する。
【００４１】
すなわち制御部１１は、例えばＵＳＢデバイス２が接続された時点等の所定のタイミングで、認証プログラムの実行を開始し、図４に例示するように、暗号対象情報となる認証用の文字列を例えばランダムに発行する（Ｓ２１）。また制御部１１は、この発行した文字列を、予め定めた暗号鍵を用いて暗号化し、暗号化文字列を得る（Ｓ２２）。そして制御部１１は、第２デバイスであるＵＳＢデバイス２に対し、所定の認証コマンドとして上記暗号化した暗号化文字列を含むコマンドを送出する（Ｓ２３）。
【００４２】
ＵＳＢデバイス２の制御部２１では、上記所定の認証コマンドを受信し、当該認証コマンドに含まれる暗号化文字列を取り出して、予め定められた復号鍵を用いて、当該暗号化文字列を復号する（Ｓ３１）。そして制御部２１は、当該復号の結果をＰＣ１に対して認証コマンドに対する応答として送出する（Ｓ３２）。
【００４３】
ＰＣ１の制御部１１は、予め定めたタイムアウト時間以内に、ＵＳＢデバイス２から上記所定の認証コマンドに対する応答を受け入れたか否かを判断し（Ｓ２４）、受け入れたならば（Ｓ２４：Ｙｅｓ）、当該受け入れた応答が、処理Ｓ２１で発行した認証用文字列に一致しているか否かを判断する（Ｓ２５）。
【００４４】
ここで制御部１１は、ＵＳＢデバイス２から得られた応答が、処理Ｓ２１で発行した認証用文字列に一致していれば（Ｓ２５：Ｙｅｓ）、ＵＳＢデバイス２におけるファームウェア改竄はないものと判断して、その結果を出力する（Ｓ２６）。また、処理Ｓ２５において、ＵＳＢデバイス２から得られた応答が、処理Ｓ２１で発行した認証用文字列に一致していないと判断すると（Ｓ２５：Ｎｏ）、制御部１１は、ＵＳＢデバイス２におけるファームウェア改竄がされているものと判断して、その結果を出力する（Ｓ２７）。
【００４５】
なお、制御部１１は処理Ｓ２４において、予め定めたタイムアウト時間以内に、ＵＳＢデバイス２から上記所定の認証コマンドに対する応答を受け入れなかった場合は（Ｓ２４：Ｎｏ）、処理Ｓ２７に移行して処理を続ける。
【００４６】
またここでの例でも暗号鍵等や対応する復号鍵を、ＰＣ１の認証プログラムやＵＳＢデバイス２のファームウェアにハードコードしておいてもよい。
【００４７】
そしてこの場合も、ファームウェア等のプログラムのコンパイラにおいて、暗号鍵や復号鍵等を、コンパイル後にソースコードから削除する処理を行うことが好ましい。本実施の形態の一例では、認証プログラムと対応するファームウェアとが一度に生成されてコンパイルされる。すなわちこの認証プログラムとファームウェアとを生成する情報処理装置では、認証プログラムとファームウェアとのソースコードをロードし、ロードした各ソースコード内の予め定められた位置に、暗号鍵等を挿入する（復号鍵を用いる場合は認証プログラムには復号鍵を挿入し、ファームウェアには対応する暗号鍵を挿入する）。なお、この挿入位置は各ソースコードの先頭からのオフセットで定めてもよいし、コンパイラへの所定指示文字列（プラグマ等）のある位置に挿入することとしてもよい。この場合、コンパイラのプリプロセッサにより挿入が行われてもよい。また、この暗号鍵等は、コンパイラ（プリプロセッサを含む）がここで発行することとしても構わない。
【００４８】
そして当該暗号鍵等を挿入した後の認証プログラム、及びファームウェアをコンパイルしてそれぞれの実行モジュールを生成する。認証プログラムの実行モジュールは、例えばコンピュータ可読な記録媒体に格納される。またファームウェアの実行モジュールは、ＵＳＢデバイス２の記憶部２２に書き込まれる。
【００４９】
また認証プログラムとファームウェアとを生成する情報処理装置は、コンパイルが完了すると、認証プログラムとファームウェアとのソースコード内の予め定められた位置に挿入した暗号鍵等を削除する。
【００５０】
これにより、本実施の形態では、仮にソースコードが外部に露出した場合であっても、暗号鍵等が同時に公開されることがなくなる。
【００５１】
［第１、第２デバイスの別の例］
また、ここまでの例では第１デバイスがＰＣであり、第２デバイスがそれに接続されるＵＳＢデバイスであるものとしたが、本実施の形態はこれに限られるものではない。
【００５２】
例えば本実施の形態のある例では、図５に例示するように、第１デバイスが無線または有線ＬＡＮインタフェースを備えたＰＣ１であり、第２デバイスが無線ＬＡＮアクセスポイント装置４ａ，ｂ，…であってもよい。本実施形態のこの例においてＰＣ１は、複数の無線ＬＡＮアクセスポイント装置４ａ，ｂ，…（以下、各無線ＬＡＮアクセスポイント装置４ａ，ｂ，…をそれぞれ区別する必要がない場合は、単に無線ＬＡＮアクセスポイント装置４と表記する）の管理装置として動作し、無線ＬＡＮアクセスポイント装置４の設定を管理する。
【００５３】
本実施形態のこの例では、無線ＬＡＮアクセスポイント装置４がＰＣ１に対して無線または有線ＬＡＮを介して接続され、無線または有線にてＰＣ１からコマンドを受け入れる。またこの無線ＬＡＮアクセスポイント装置４にはファームウェアがインストールされ、その制御部としてのＣＰＵが当該ファームウェアに従って、次のように動作する。
【００５４】
すなわち無線ＬＡＮアクセスポイント装置４は、管理装置として動作するＰＣ１から受け入れたコマンドが所定の認証コマンドであるか否かを判断する。ここで、ＰＣ１側から受信したコマンドが所定の認証コマンドであると判断したときには、無線ＬＡＮアクセスポイント装置４は予め定められた応答をＰＣ１へ送出する。この応答は、ＵＳＢデバイス２の例において述べたものと同様、予め無線ＬＡＮアクセスポイント装置４にインストールされたファームウェア内に予め設定された文字列等の情報であってもよいし、ＰＣ１側から受信したコマンドに含まれる文字列等を所定の方法で符号化したものであってもよい。
【００５５】
ＰＣ１は、図３に例示した例と同様に、所定のタイミング（例えば起動時や、予め定められた時刻ごとのタイミング）で、認証プログラムを実行し、所定の認証コマンドを第２デバイスとしての無線ＬＡＮアクセスポイント装置４ａ，ｂ，…にそれぞれ送出する（Ｓ１１）。
【００５６】
そしてＰＣ１は、各無線ＬＡＮアクセスポイント装置４ａ，ｂ，…から当該所定の認証コマンドに対する応答を受け入れるまで待機し（Ｓ１２：Ｎｏ）、無線ＬＡＮアクセスポイント装置４ａ，ｂ，…から応答を受け入れるごとに（Ｓ１２：Ｙｅｓ）、当該応答を送出した無線ＬＡＮアクセスポイント装置４について、当該無線ＬＡＮアクセスポイント装置４から受け入れた応答が、予め定められた応答であるか否かを判断する（Ｓ１３）。
【００５７】
ＰＣ１は、ある無線ＬＡＮアクセスポイント装置４から受け入れた応答が、予め定められた応答であれば（Ｓ１３：Ｙｅｓ）、当該無線ＬＡＮアクセスポイント装置４におけるファームウェア改竄はないものと判断し、その結果を出力する（Ｓ１４）。また制御部１１は、ある無線ＬＡＮアクセスポイント装置４から受け入れた応答が、予め定められた応答でない場合は（Ｓ１３：Ｎｏ）、当該無線ＬＡＮアクセスポイント装置４においてはファームウェア改竄がされているものと判断して、その結果を出力する（Ｓ１５）。
【００５８】
またこのように無線ＬＡＮアクセスポイント装置４を第２デバイスとする場合、認証コマンドは、無線ＬＡＮアクセスポイント装置４の装置種別や、ＭＡＣアドレス、備えている機能等を問い合わせるコマンドであってもよい。この場合、ＰＣ１には予め上記問い合せに対する各無線ＬＡＮアクセスポイント装置４からの応答を保持させておく。例えば、無線ＬＡＮアクセスポイント装置４を特定する情報として、各無線ＬＡＮアクセスポイント装置４のＭＡＣアドレスに関連付けて、対応する無線ＬＡＮアクセスポイント装置４の装置種別を表す情報等を保持させておく。
【００５９】
そしてＰＣ１は、上記認証コマンドとしての問い合せ（Ｓ１１）に対して各無線ＬＡＮアクセスポイント装置４が送出する応答を受信し（Ｓ１２：Ｙｅｓ）、当該応答の送出元であるＭＡＣアドレスに関連付けて記憶している装置種別を表す情報等と、応答とが一致しているか否かを調べる（Ｓ１３）。そしてこれらが一致していれば（Ｓ１３：Ｙｅｓ）、当該無線ＬＡＮアクセスポイント装置４におけるファームウェア改竄はないものと判断し、その結果を出力する（Ｓ１４）。また、応答の送出元であるＭＡＣアドレスに関連付けて記憶している装置種別を表す情報等と、当該送出元から受信した応答とが一致していなければ（Ｓ１３：Ｎｏ）、当該無線ＬＡＮアクセスポイント装置４においてはファームウェア改竄がされているものと判断して、その結果を出力する（Ｓ１５）。
【００６０】
また第２デバイスが外部から設定変更が可能である場合は、第１デバイスは、次のようにして認証コマンドを送出することとしてもよい。すなわち本実施の形態のある例では、第２デバイスである無線ＬＡＮアクセスポイント装置４は、ウェブサーバとして機能し、自己の動作設定変更を、当該ウェブサーバが配信するウェブページを介して受け入れる機能を有する。
【００６１】
この場合、第１デバイスであるＰＣ１は、当該無線ＬＡＮアクセスポイント装置４が配信するウェブページへアクセスして、予め定めた設定変更を行う。具体的には、ＰＣ１は、文字列の書き込みや、動作モードの切り替え等、予め定めた設定変更を試みる。この例では、当該設定変更の指示が、図３に示した処理Ｓ１１の動作における認証コマンドに相当する。つまりＰＣ１は、認証コマンドとして設定変更の指示を送出する（Ｓ１１）。
【００６２】
そしてＰＣ１は、当該設定変更後、再度当該無線ＬＡＮアクセスポイント装置４が配信するウェブページへアクセスする。ＰＣ１は、当該アクセスに対し、無線ＬＡＮアクセスポイント装置４が応答するまで待機し（Ｓ１２：Ｎｏ）、設定変更が正常に行われたか否かを表す情報を、認証コマンドに対する応答として受け入れると、処理Ｓ１３に進む（Ｓ１２：Ｙｅｓ）。処理Ｓ１３においてＰＣ１は設定変更が正常に行われた旨を表す情報が受け入れられた場合（この例では正常に行われた旨を表す情報が、予め定められた応答に相当する）は（Ｓ１３：Ｙｅｓ）、ＰＣ１は当該無線ＬＡＮアクセスポイント装置４におけるファームウェア改竄はないものと判断し、その結果を出力する（Ｓ１４）。
【００６３】
また、ここで設定変更が正常に行われていない旨を表す情報が受け入れられた場合（設定変更がされていないなどの場合）は（Ｓ１３：Ｎｏ）、ＰＣ１は当該無線ＬＡＮアクセスポイント装置４においてはファームウェア改竄がされているものと判断して、その結果を出力する（Ｓ１５）。
【００６４】
［応答の送出方法の別の例］
またここまでの例では、第２デバイスである無線ＬＡＮアクセスポイント装置４は、第１デバイスに対して直接的に応答を送出するものとしていたが、予め設定されたＵＲＬで特定されるサーバにアクセスし、当該サーバに応答を送出することで応答の送出を行うこととしてもよい。このサーバは、例えばsyslogサーバ等のログサーバであり、第１デバイスは、当該ログサーバに記録された無線ＬＡＮアクセスポイント装置４からの応答を参照して、当該応答が所定の応答であるか否かを調べることで、無線ＬＡＮアクセスポイント装置４のファームウェアの改竄の有無を検出する。
【００６５】
［相互に応答を確認する例］
また本実施の形態のこの例では、第１デバイスは、無線ＬＡＮアクセスポイント装置４自身であってもよい。例えば本実施の形態のある例では、各無線ＬＡＮアクセスポイント装置４が第１デバイスとしても、第２デバイスとしても機能する。そして、無線ＬＡＮアクセスポイント装置４ａが第１デバイスとして機能するときには、他の無線ＬＡＮアクセスポイント装置４ｂを第２デバイスとして、この無線ＬＡＮアクセスポイント装置４ｂに対して、無線または有線ＬＡＮ経由で所定の認証コマンドを送出する。そしてこの無線ＬＡＮアクセスポイント装置４ｂが所定の応答を無線または有線ＬＡＮ経由で返答し、当該応答が予め定めた応答であるか否かにより、無線ＬＡＮアクセスポイント装置４ａが無線ＬＡＮアクセスポイント装置４ｂにおけるファームウェアの改竄の有無を検出する。
【００６６】
この認証コマンドの送出は、例えば所定のタイミングごと（例えば定時ごとなど予め定めた時刻が到来するごと）としておく。この場合、各無線ＬＡＮアクセスポイント装置４はそれぞれネットワークを介してアクセス可能なＮＴＰ（Network Time Protocol）サーバ等を用いて、内部で計時する時刻を合わせておき、予め定めた時刻が到来するごとに、いずれかの無線ＬＡＮアクセスポイント装置４ａが第１デバイスとしての動作を開始して、第２デバイスとして動作する他の無線ＬＡＮアクセスポイント装置４ｂ，ｃ…に対して認証コマンドを送出するようにしておく。
【００６７】
このとき無線ＬＡＮアクセスポイント装置４ａは、いずれかの無線ＬＡＮアクセスポイント装置４ｂ，ｃ…から予め定めた応答がない場合、あるいは応答そのものがない場合には、当該無線ＬＡＮアクセスポイント装置４については、そのファームウェアの改竄があったものとして、その旨を表す情報を出力する（例えばsyslogサーバに書き込むなどして、管理者がＰＣ等から参照可能な状態とする）。
【００６８】
また、第２デバイスとして動作する他の無線ＬＡＮアクセスポイント装置４ｂ，ｃ…は、第１デバイスとして動作する無線ＬＡＮアクセスポイント装置４ａから、上記予め定めた時刻が到来した後、所定の時間（例えば１分）が経過しても認証コマンドの送出がない場合、無線ＬＡＮアクセスポイント装置４ａのファームウェアの改竄があったものとして、その旨を表す情報を出力する（例えばsyslogサーバに書き込むなどして、管理者がＰＣ等から参照可能な状態とする）こととしてもよい。このように本実施の形態のある例では、相互に検証を行うことが可能となる。
【００６９】
［ビーコンを用いる例］
またここまでの例で、第１デバイスとして機能する無線ＬＡＮアクセスポイント装置４は、ＩＥＥＥ８０２．１１規格に定められる管理パケットの一種であるビーコン（ＥＳＳＩＤのブロードキャスト）パケットの一部（例えばInformation Element等の領域）に認証コマンドを含めて送出してもよい。
【００７０】
本実施形態のここでの例における第２デバイス（無線ＬＡＮアクセスポイント装置４）は、いわゆる無線ＬＡＮ中継装置であり、第１デバイスである無線ＬＡＮアクセスポイント装置と、無線ＬＡＮ端末装置である無線ＬＡＮステーション装置間の無線ＬＡＮ通信を中継する。つまり、ここでの例において、第２デバイスは第１デバイスである無線ＬＡＮアクセスポイントに対しては無線ＬＡＮステーション装置として機能し、無線ＬＡＮ端末装置に対しては無線ＬＡＮアクセスポイント装置として機能する。
【００７１】
この場合第２デバイスとして機能する無線ＬＡＮアクセスポイント装置４は、無線ＬＡＮステーション機能を備え、この無線ＬＡＮステーション機能により、第１デバイスとして機能する無線ＬＡＮアクセスポイント装置４がブロードキャストしたビーコンパケットを受信する。無線ＬＡＮアクセスポイント装置４は、ここで受信したビーコンパケット内に認証コマンドが含まれているか否かを調べ、認証コマンドが含まれていれば、上述の予め定めた応答を第１デバイスへ送出することとする。
【００７２】
なお、この場合、第２デバイスとして機能する無線ＬＡＮアクセスポイント装置４は、無線ＬＡＮステーション機能としての動作において、当該応答を送出するにあたり、ＩＥＥＥ８０２．１１に定められる管理パケットの一種である無線ＬＡＮのプローブ要求パケットの一部（例えばInformation Element等の領域）に応答を含めて、第１デバイスへ送出することとしてもよい。
【００７３】
第１デバイスとして機能する無線ＬＡＮアクセスポイント装置４は、認証コマンド（認証コマンドを含むビーコンパケット）を送出した後、当該ビーコンパケットを受信した第２デバイスとして機能する他の無線ＬＡＮアクセスポイント装置４からの応答であるプローブ要求パケットを受信して、当該プローブ要求パケットに応答が含まれているか否かを調べる。そして第１デバイスとして機能する無線ＬＡＮアクセスポイント装置４は、認証コマンドを送出した後、予め定めた回数あるいは時間が経過するまでの間に第２デバイスとして機能する他の無線ＬＡＮアクセスポイント装置４から受信するプローブ要求パケットに応答が含まれない場合は、当該第２デバイスとして機能する無線ＬＡＮアクセスポイント装置４のファームウェアの改竄があったものとして、その旨を表す情報を出力する。
【００７４】
また、第１デバイスとして機能する無線ＬＡＮアクセスポイント装置４は、認証コマンドを送出した後、第２デバイスとして機能する無線ＬＡＮアクセスポイント装置４から受信したプローブ要求パケットに応答が含まれていれば、当該応答が予め定めた応答に一致しているか否かを調べ、一致していれば、当該応答を行った第２デバイスとして機能する無線ＬＡＮアクセスポイント装置４のファームウェアに改竄がなかったものとして、その旨を表す情報を出力する。またここで、第１デバイスとして機能する無線ＬＡＮアクセスポイント装置４は、認証コマンドを送出した後、第２デバイスとして機能する無線ＬＡＮアクセスポイント装置４から受信したプローブ要求パケットに予め定められた応答が含まれない場合、あるいは含まれる応答が予め定めたられ応答に一致していなければ、当該応答を行った他の無線ＬＡＮアクセスポイント装置４のファームウェアに改竄があったものとして、その旨を表す情報を出力する。
【００７５】
［ドングルを用いる例］
また本実施の形態のある例では、認証プログラムがＵＳＢメモリデバイス等の外部記憶デバイスに格納されて提供されてもよい。この例においては、第２のデバイスとして機能し得る（つまり改竄のない状態のファームウェアに第２デバイスとして動作するためのプログラムモジュールが含まれる）無線ＬＡＮアクセスポイント装置４等が、この外部記憶デバイスを受け入れるインタフェースを備える。
【００７６】
そして当該無線ＬＡＮアクセスポイント装置４は、このインタフェースに、上記認証プログラムを格納した外部記憶デバイスが接続されると、当該認証プログラムの実行を開始し、自己宛に認証コマンドを送出する。この送出は例えばローカルループバックアドレス宛に行えばよい。
【００７７】
この無線ＬＡＮアクセスポイント装置４は、自己宛に送出された認証コマンドを受けて、ファームウェアの処理として予め定めた応答を生成して返信（この場合は同じく自己宛、つまりローカルループバックアドレス宛に送出）する。
【００７８】
無線ＬＡＮアクセスポイント装置４は、認証プログラムとしての動作において、自己から返信された応答が、予め定められた応答に一致するか否かを調べ、一致していれば当該無線ＬＡＮアクセスポイント装置４のファームウェアに改竄がなかったものとして、その旨を表す情報を出力する。また、当該自己から返信された応答が予め定めた応答に一致していなければ、当該無線ＬＡＮアクセスポイント装置４のファームウェアに改竄があったものとして、その旨を表す情報を出力する。
【００７９】
［第１、第２デバイスのさらに他の例］
さらに第１デバイスや第２デバイスは、無線ＬＡＮアクセスポイント装置４に限られず、他のネットワーク機器、例えばＮＡＳ（Network Attached Storage）や、ルータ、その他のデバイスであっても構わない。本実施の形態によれば、種々の機器のファームウェアの不正な書き換えを検出できる。
【００８０】
［ファームウェアのアップデートの例］
また本実施の形態のある例では、第１デバイスであるＰＣ１が、例えばＵＳＢデバイス２等の第２デバイスのファームウェアをアップデートする際に、第２デバイスが第１デバイスを認証してから、アップデートを受け入れるようにしてもよい。この例では、ＰＣ１の制御部１１が、第２デバイス（以下では、ＵＳＢデバイス２である場合を例として説明する）のファームウェアアップデートの指示（ファームウェアアップデート用プログラムの実行指示）を、利用者から受け入れて次の処理を実行する。
【００８１】
すなわち図６に例示するように、制御部１１は、認証用情報の発行をＵＳＢデバイス２に対して要求する（Ｓ４１）。ＵＳＢデバイス２の制御部２１では、認証用情報の発行要求を受けて、認証用情報である文字列を例えばランダムに発行する（Ｓ４２）。またこの制御部２１は、当該発行した認証用情報となる文字列を、予め定めた暗号鍵を用いて暗号化し、暗号化文字列を得る（Ｓ４３）。そして制御部２１は、ＰＣ１に対し、上記暗号化した暗号化文字列を送出する（Ｓ４４）。
【００８２】
ＰＣ１の制御部１１は、ＵＳＢデバイス２が送出した暗号化文字列を受け入れて、予め定められた復号鍵を用いて、当該暗号化文字列を復号する（Ｓ４５）。そして制御部１１は、当該復号の結果と、アップデート用のファームウェアのデータとをＵＳＢデバイス２に対して送出する（Ｓ４６）。ここで処理Ｓ４５での復号が正しく行われていれば、ＵＳＢデバイス２が受け入れる復号の結果は認証用情報に一致することとなる。
【００８３】
ＵＳＢデバイス２の制御部２１は、予め定めたタイムアウト時間以内に、ＰＣ１から復号の結果を含む応答を受け入れたか否かを判断し（Ｓ４７）、受け入れたならば（Ｓ４７：Ｙｅｓ）、当該受け入れた復号の結果が、処理Ｓ４２で発行した認証用情報である文字列に一致しているか否かを判断する（Ｓ４８）。
【００８４】
ここで制御部２１は、ＰＣ１から得られた復号の結果が、処理Ｓ４２で発行した認証用情報である文字列に一致していれば（Ｓ４８：Ｙｅｓ）、当該復号の結果とともに受け入れたアップデート用のファームウェアのデータを用いて、記憶部２２に格納されたファームウェアのアップデートの処理を実行して（Ｓ４９）、処理を終了する。
【００８５】
また、処理Ｓ４８において、ＰＣ１から得られた復号の結果が、処理Ｓ４２で発行した認証用情報である文字列に一致していないと判断すると（Ｓ４８：Ｎｏ）、制御部２１は、ＰＣ１から受け入れた情報を破棄して処理を終了する。
【００８６】
またここでの例でも暗号鍵等や対応する復号鍵を、ＵＳＢデバイス２のファームウェアやＰＣ１のファームウェアアップデート用プログラムにハードコードしておいてもよい。
【００８７】
そしてこの場合も、ファームウェア等のプログラムのコンパイラにおいて、暗号鍵や復号鍵等を、コンパイル後にソースコードから削除する処理を行うことが好ましい。本実施の形態の一例では、ファームウェアアップデート用プログラムと対応するファームウェア（当該ファームウェアアップデート用プログラムがアップデートの対象とするファームウェア）とが一度に生成されてコンパイルされる。すなわちこのファームウェアアップデート用プログラムとファームウェアとを生成する情報処理装置では、ファームウェアアップデート用プログラムとファームウェアとのソースコードをロードし、ロードした各ソースコード内の予め定められた位置に、暗号鍵等を挿入する（復号鍵を用いる場合は認証プログラムには復号鍵を挿入し、ファームウェアには対応する暗号鍵を挿入する）。なお、この挿入位置は各ソースコードの先頭からのオフセットで定めてもよいし、コンパイラへの所定指示文字列（プラグマ等）のある位置に挿入することとしてもよい。この場合、コンパイラのプリプロセッサにより挿入が行われてもよい。また、この暗号鍵等は、コンパイラ（プリプロセッサを含む）がここで発行することとしても構わない。
【００８８】
そして当該暗号鍵等を挿入した後のファームウェアをコンパイルして実行モジュールを生成する。また復号鍵を挿入した後のファームウェアアップデート用プログラムについては、アップデート用のプログラムができた時点で、コンパイルされ、実行モジュールが生成される。ファームウェアアップデート用プログラムの実行モジュールは、例えばコンピュータ可読な記録媒体に格納され、またはネットワーク等を介して配信される。またファームウェアの実行モジュールは、ＵＳＢデバイス２の記憶部２２に書き込まれる。
【００８９】
また認証プログラムとファームウェアとを生成する情報処理装置は、コンパイルが完了すると、認証プログラムとファームウェアとのソースコード内の予め定められた位置に挿入した暗号鍵等を削除する。
【００９０】
本実施の形態のこの例によると、ファームウェアアップデート用プログラムが不正に作成されて、ＵＳＢデバイス２等第２デバイスのファームウェアが不正に書き換えられることを防止できる。
すなわち本実施の形態では、第２デバイスは、次のことも特徴としている。認証用情報の要求を受けて、認証用情報を発行し、所定の暗号鍵で暗号化して認証用情報の要求元へ送出する手段と、この認証情報の要求元から暗号化した情報を復号した復号結果と、ファームウェアのアップデート用情報とを受け入れて、当該復号結果が、先に発行した認証用情報に一致していれば、当該復号結果とともに受け入れたアップデート用情報を用いて、保持しているファームウェアをアップデートする手段と、を含む。
また、第１デバイスはファームウェアアップデート用プログラムの起動時に、既に述べた、図３または図４等で例示した方法により、第２デバイスのファームウェアが改竄されているか否かを調べ、改竄されていないと判断した場合に、第２デバイスに対して認証用情報の要求を送出することとしてもよい。この例では、第２デバイスのファームウェアが改竄されていると判断したときには、第１デバイスは、その後の処理（図６に例示した処理）を実行せずに処理を終了する。
【符号の説明】
【００９１】
１  ＰＣ、２  ＵＳＢデバイス、４  無線ＬＡＮアクセスポイント装置、１１  制御部、１２  記憶部、１３  操作部、１４  表示部、１５  通信部、１６  インタフェース部、２１  制御部、２２  記憶部、２３  インタフェース部、３１  コマンド受信部、３２  認証コマンド判断部、３３  応答部。
【図１】
0006492944.tif 000002
【図２】
0006492944.tif 000003
【図３】
0006492944.tif 000004
【図４】
0006492944.tif 000005
【図５】
0006492944.tif 000006
【図６】
0006492944.tif 000007