(57)【要約】【課題】  ユーザがファームウェアのバージョンアップを行うような場合において、許可された種類のファームウェアに対してのみに行えるようにする。【解決手段】  １．バージョンアップ用のファームウェアは、許可されている以前のファームウェアのハッシュ値リストを持つ。２．デバイスは、バージョンアップするときに、ハッシュ値リストと現在動作中のファームウェアのハッシュ値との比較を行い、一致していればバージョンアップを実行する。【選択図】  図１
2007041694.tif 000002
【特許請求の範囲】
【請求項１】
バージョンアップの対象となるファームウェアと公開しない秘密な値とを合わせてHash関数に入力し、その出力値をバージョンアップ対象のファームウェアの識別子として使用するファームウェアバージョンアップ方法。
【請求項２】
前記Hash値の1つ以上をリストで持つことを特徴とする請求項１に記載のファームウェアバージョンアップ方法。
【請求項３】
バージョンアップ操作時に、現在のファームウェアを識別する前記Hash値が、前記バージョンアップ用ファームウェアが持つ前記Hash値のリストの中に一致するものがあれば、現在のファームウェアはバージョンアップ対象であることと判定し、バージョンアップを実行する請求項１或いは２に記載のファームウェアバージョンアップ方法。
【請求項４】
請求項１乃至３のいずれかに記載のファームウェアバージョンアップ方法を実行するデバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
CPUを持ち、ファームウェアをインストールすることによって動作するデバイスに関する。
【背景技術】
【０００２】
従来、ファームウェアによって動作するデバイスは、ユーザによってバージョンアップすることが可能なものがあった。その際、本来許可されていないユーザのデバイスに対して高機能なファームウェアをインストールされてしまうことを防ぐため、以下のような施策のうちの１つ、または複数を施すことがあった。
【０００３】
個々のデバイスは唯一の番号を持ち、ファームウェア製造者は許可されたユーザが使用するデバイスの番号をファームウェアに付与する。インストール実行時に、インストールプログラムはデバイスの持つ番号とインストールするファームウェアが持つ番号を調べ、一致すればインストールが行われる。
【０００４】
デバイスは電源ON時に、デバイスの保持する番号と、実行するファームウェアが持つ番号が一致すれば、動作を開始する。
【０００５】
ユーザのデバイスで動作中のファームウェアは唯一の番号を持ち、ファームウェア製造者はユーザに提供する新しいファームウェアに対して、対象となるユーザが保持するデバイスのファームウェアと同値な番号を付与し、インストールプログラムはインストール時に前記番号を検査し、一致すればインストールを実行する。
【０００６】
ユーザは現在動作しているファームウェアに対して与えられる唯一の番号を保持しており、ファームウェア製造者は新たに提供するファームウェアに対して対象とするユーザが持つ番号と同値な番号を付与しておき、インストールプログラムはインストール時にユーザに前記番号を要求し、一致すればインストールを開始する。
【０００７】
上記はすべてユーザごとに、もしくは個々のファームウェアごとに（同じ機能のファームウェアであっても個別に）バージョンアップを管理する方法である。ユーザが不正に新しい高機能なファームウェアを入手した場合の、インストールおよびファームウェアの実行を防ぐことができる。
【０００８】
ファームウェアは保持する機能によって種類に分けて管理されており、各種類ごとに唯一の番号を持ち、インストールプログラムは、新たに提供されたファームウェアが持つ番号と、現在動作中のファームウェアが持つ番号を比較し、一致した場合のみインストールを実行する。
【０００９】
ファームウェアは保持する機能、配布・公開された日時、バージョンなどによって種類に分けて管理されており、各種類ごとに唯一の番号を持ち、新たに提供されたファームウェアはインストール可能な前記番号を持ち、インストールプログラムは現在動作中のファームウェアの番号と、前記番号を比較し、一致した場合にインストールを実施する。
【００１０】
上記（５）〜（６）は、ファームウェアの種類ごとに（たとえば、同じ機能のファームウェアは識別せずに）バージョンアップを管理する方法である。ユーザごとに管理しない製品において、許可されていない高機能なファームウェアのインストール、保守対象としないバージョンに対するバージョンアップを防ぐことが可能である。
【００１１】
又、従来例としては、例えば特許文献１と特許文献２をあげることが出来る。
【特許文献１】特開２００４−８６７７１号公報
【特許文献２】特開平０９−２４４８８６号公報
【発明の開示】
【発明が解決しようとする課題】
【００１２】
（１）〜（４）の方法でファームウェアのバージョンアップを管理しようとすると、次のような課題があった。
【００１３】
ファームウェア製造者は、ユーザのデバイスが保持する番号、ユーザのデバイスで動作中のファームウェアが保持する番号、およびそのバージョンなどを、「ユーザごと」に管理し、指定したユーザに対して唯一のファームウェアを作成する必要があった。しかしユーザごとに管理を必要としない製品もあり、そのような製品のファームウェアのバージョンアップにおいて、ユーザごとの管理はファームウェア製造者にとって負担が大きいため不適と言える。
【００１４】
（５）〜（６）の方法でファームウェアのバージョンアップを管理しようとすると、次のような課題があった。
【００１５】
ファームウェアの番号が型番号、バージョン番号、シリアル番号などでは、悪意のあるユーザにとっては解析されやすく、別の種類に区分されている高機能なファームウェアを、それが持つ番号を改ざんし、別の低機能な種類のファームウェアに対してインストールされてしまう可能性がある。
【００１６】
また、上記の課題を解決するにあたって、以下の件も考慮しなければならない。
【００１７】
デバイス自身で判定させ、他に機材を必要としない。
【００１８】
従来のファームウェアのバージョンアップと同等の手順、手間とし、ユーザに不便をかけさせない。
【課題を解決するための手段】
【００１９】
上記問題を解決するため、以下の手段を講じる。
【００２０】
バージョンアップ用のファームウェアは、そのファームウェアにバージョンアップすることが許可されている以前のファームウェアのHASH値リストを持つ。
【００２１】
インストールプログラムは、ファームウェアをバージョンアップするときに、ファームウェアが保持するHASH値リストと現在動作中のファームウェアのHASH値との比較を行い、一致していればバージョンアップを実行する。
【００２２】
HASH値の作成は（ファームウェア＋秘密値）から作成し、秘密値を変更することによって、バージョンアップの対象とする以前のファームウェアのHash値リスト値を変更する。
【００２３】
これらの手段を講じることにより、以下の作用を得ることができる。
【００２４】
バージョンアップが許可されていないファームウェアに対して、ユーザがバージョンアップを実行することを防ぐことが出来る。
【００２５】
インストールプログラムを実行するデバイス自身がバージョンアップの可否を判断し、バージョンアップの可否のために他の機材を必要としない。
判定する基準が単なる番号ではなく、現在動作しているファームウェアのHash値で行うことにより、以下のメリットが得られる。
【００２６】
型番情報、バージョン情報等分かりやすい情報ではなく、ファームウェアに秘密値を加えたHash値で判定するため、バージョンアップ可能なファームウェアの情報を、Hash値リストから特定することは困難であるといえる。そのため、悪意のあるユーザによりHash値リストを書き換えられて勝手にバージョンアップされる可能性を低くすることができる。特に、秘密値を１つのファームウェア内に複数持つ、秘密値の変更をリリースするファームウェアごとに変更する、などを行えば、ハッキングされる可能性を非常に低くすることが可能である。
【００２７】
ファームウェアが自分の番号情報を持っておく必要がない。(HASH値はファームウェアから生成できるため)
【発明の効果】
【００２８】
本発明の効果として、以下の事項が挙げられる。
【００２９】
バージョンアップが許可されていないファームウェアに対して、ユーザがバージョンアップを実行することを防ぐことが出来る。
【００３０】
インストールプログラムを実行するデバイス自身がバージョンアップの可否を判断し、バージョンアップの可否のために他の機材を必要としない。
【００３１】
判定する基準が単なる番号ではなく、現在動作しているファームウェアのHash値で行うことにより、以下のメリットが得られる。
【００３２】
型番情報、バージョン情報等分かりやすい情報ではなく、ファームウェアに秘密値を加えたHash値で判定するため、バージョンアップ可能なファームウェアの情報を、Hash値リストから特定することは困難であるといえる。そのため、悪意のあるユーザによりHash値リストを書き換えられて勝手にバージョンアップされる可能性を低くすることができる。特に、秘密値を１つのファームウェア内に複数持つ、秘密値の変更をリリースするファームウェアごとに変更する、などを行えば、ハッキングされる可能性を非常に低くすることが可能である。
【００３３】
HASH値はファームウェアから生成できるため、ファームウェアが自分の番号情報を持っておく必要がない。
【発明を実施するための最良の形態】
【００３４】
本発明は以下に詳述するように、デバイスのファームウェアをバージョンアップする方法に関するものである。
【００３５】
図１は、本実施例のネットワークシステムが動作可能な構成を示す図である。
図１において、１１０は単機能プリンタ（以下SFP（SingleFunctionPrinter）と呼ぶ）、１２０は複合機（以下MFP（Multi Function Printer）と呼ぶ）であり、それぞれLAN１００に接続されている。
【００３６】
SFP１１０、MFP１２０はPC１３０からネットワークを介して印刷ジョブを受信し印刷処理を行う。また、SFP１１０、MFP１２０はPC１３０からの指示により、新規ファームウェアのインストール要求を受信し、可能であれば新規ファームウェアプログラムを受信し、インストールを実行する。１４０はファイアウォールであり、LAN１００を外部のインタネット１５０に接続する。またLAN１００はファイアウォール１４０、インタネット１５０を介して更に別のネットワーク１６０に接続される。
【００３７】
図２は、一般的なパーソナルコンピュータの内部構成を示した図であり、図１におけるPC１３０の内部構成はこのようになっている。PC２００は、ROM２０２もしくはハードディスク（HD）２１１に記憶された、あるいはフレキシブルディスクドライブ（FD）２１２より供給される各種ソフトウェアを実行するCPU２０１を備え、システムバス２０４に接続される各機器を総括的に制御する。２０３はRAMで、CPU２０１の主メモリ、ワークエリア等として機能する。２０５はキーボードコントローラ（KBC）で、キーボード（KB）２０９や不図示のポインティングデバイス等からの指示入力を制御する。２０６はCRTコントローラ（CRTC）で、CRTディスプレイ（CRT）２１０の表示を制御する。２０７はディスクコントローラ（DKC）で、ブートプログラム、本発明を実現するプログラム、種々のアプリケーション、編集ファイル、ユーザファイル等を記憶するハードディスク（HD）２１１およびフレキシブルディスクコントローラ（FD）２１２とのアクセスを制御する。２０８はネットワークインタフェースカード（NIC）で、LAN２２０を介して、ネットワークプリンタ、他のネットワーク機器あるいは他のPCと双方向にデータをやりとりする。
【００３８】
なお、本実施例においては、LAN２２０は図１におけるLAN１００と同じものである。
【００３９】
図３において、３００は、本発明プログラムが稼動するMFPまたはSFPの内部構成の一例であり、図１における１１０、１２０と同等である。デバイス３００は、ＲＯＭ３０２もしくはハードディスク（HD）３１０に記憶された、あるいはフレキシブルディスクドライブ（FD）３１１より供給される各種プログラムを実行するCPU３０１を備え、システムバス３０４に接続される各機器を総括的に制御する。３０３はRAMで、CPU３０１の主メモリ、ワークエリア等として機能する。３０５はユーザインタフェースコントローラ（UIC）で、ユーザインタフェース（UI）３０９への表示、３０９からの指示入力を制御する。ファンクションコントローラ（FUNCC）３０６は各デバイス特有の機能であるファンクション（FUNC）３１０を実現／制御する。モノクロプリンタであればモノクロプリントエンジンコントローラとモノクロプリントエンジン、カラープリンタであればカラープリントエンジンコントローラとカラープリントエンジン、MFPであればデバイス３００は各機能のファンクションコントローラ（FUNCC）３０６とファンクション（FUNC）３１０をそれぞれ持つ。３０７はディスクコントローラ（DKC）で、ブートプログラム、本発明の動作を行うプログラム、種々のアプリケーション、データファイルを記憶するハードディスク（HD）３１１およびフレキシブルディスクコントローラ（FD）３１２とのアクセスを制御する。３０８はネットワークインタフェースカード（NIC）で、LAN３２０を介して、ネットワークプリンタ、他のネットワーク機器あるいは他のPCと双方向にデータをやりとりする。なお、本実施例においては、LAN３２０は図１におけるLAN１００、LAN１９０と同じものである。
【００４０】
図４は、本発明の印刷システムにおけるMFPとSFPのインストール動作の説明図である。４１０はメディアであり、バージョンアップ用のファームウェアプログラム４１１とバージョンアップ対象となるファームウェアのハッシュ値のリスト４１２を格納している。４２０、４２１はMFPまたはSFPを表すデバイスであり、図１における１１０、１２０と同等である。デバイス４２０で動作中のファームウェアプログラムHash2で表され、ハッシュ値リスト４１２に表示されている。したがって、このメディア４１０に格納されているバージョンアップ用ファームウェアプログラムはデバイス４２０に対してインストール可能であることが分かる。ところがデバイス４２１のハッシュ値はHash8であり、ハッシュ値リスト４１２には存在しない。よって、デバイス４２１はメディア４１０に格納されているファームウェアプログラムのインストールは許可されない。
【００４１】
図５は本発明の動作における、インストール動作のシーケンス図である。PC５１０において、インストール操作が開始されると、デバイス５２０へインストールプログラムが転送される。その際、ハッシュ値リストも同時に転送される。デバイス５２０はインストールプログラムの処理を開始させ、まず、現在デバイスで動作しているファームウェアのハッシュ値を算出し（５２１）、受信したハッシュ値リストに、算出したハッシュ値があるか否かを調べ（５２１、５２２）、存在すれば新規ファームウェアのインストール処理を開始する（５２３）。その後、PC５１０からファームウェアプログラムのデータを受信し（５１３~５１５）、インストールを実行する（５２４）。
【００４２】
図６は本発明におけるハッシュ値の算出を表す式である。本発明におけるハッシュ値とは、ファームウェアのデータにインストールプログラムが秘密に保持する秘密値をあわせてハッシュ関数H( )に入力し、その出力のことを指す。
【００４３】
図７はデバイスで動作するファームウェアプログラムのフローチャートである。まず、電源が投入されるとデバイスの初期化処理を行い（処理７１０）、初期化が終了すると外部からの要求待ちとなる（処理７１１）。新規ファームウェアインストール要求を受信すると、インストールプログラムの受信を行う（処理７２０）。その他の要求を受信すると、その他の処理を行い（処理７３０）、再び外部からの要求待ち（処理７１１）となる。処理７２０を終了後、デバイスのブートプログラムを、インストールプログラムが起動するように設定し（処理７２１）、リブートを行い（処理７２２）、処理を終了する（処理７９９）。
【００４４】
図８は図７の処理７２０で受信するインストールプログラムのフローチャートである。まず、現在動作中のファームウェアのハッシュ値を、図６のとおりに作成する（処理８１０）。インストールプログラムが保持するハッシュ値リストから、前記算出したハッシュ値を検索し（処理８１１）、ハッシュ値リストに前記算出したハッシュ値が含まれていれば、処理８２１へ進む。無ければ処理８３０へ進む。処理８２０では新規ファームウェアのダウンロードを図５のPC５１０から行い、ファームウェアの検査を行いダウンロードが成功したか否かを判定する（処理８２１）。ダウンロードが成功した場合は処理８４０へ進み、失敗と判定されれば処理８３０へ進む。処理８４０では、ダウンロードした新規ファームウェアが、次回リブート後に動作開始するように設定し（処理８４０）、デバイスをリブートする（処理８４１）。処理８３０ではファームウェアの更新が失敗したことをパネル表示またはPC510へ通知する。その後、処理８３１にて今まで稼動していたファームウェアが動作するように設定し、処理８４１へ進む。
【００４５】
図９は、デバイスのインストール動作時に関係するプログラムのメモリマップである。CPUが電源投入後、最初に参照するアドレスがAddress A（アドレス９１０）であり、Address Aを先頭にブートプログラムが格納されている。Address B（アドレス９２０）、Address C（アドレス９３０）にはファームウェアプログラムが格納されているエリアの先頭アドレスであり、Address Dを先頭にしたエリアにはインストールプログラムが格納される。
【００４６】
ブートプログラムはどのプログラムを実行するかが設定されており、仮にここで現在稼動中のファームウェアプログラムがファームウェア０格納エリア（エリア９２１）に格納されているとすると、ブートプログラムはアドレス９２０から処理を実行するように設定されている。図７において、処理７１１のようにインストール要求を受信した場合、まずインストールプログラム格納エリア（エリア９４１）にインストールプログラムを格納し（処理７２０）、処理７２１で次回起動時はアドレス９４０からの処理を実行するように設定される。その後リブートされ、図８のインストールプログラムのフローに従って処理を実行し、処理８２０で新規ファームウェアプログラムのダウンロードを行う際には、ファームウェア１格納エリア（エリア９３１）へ格納する。新規ファームウェアのダウンロードが終了すると、ブートプログラムがアドレス９３０から処理を実行するように設定され（処理８４０）、デバイスをリブート（処理８４１）後、アドレス８３０から処理が開始され、新規ファームウェアの実行が開始される。
【００４７】
図１０は、記憶媒体の一例であるＣＤ−ＲＯＭのメモリマップを示す図である。９９９９はディレクトリ情報を記憶してある領域で、以降のインストールプログラムを記憶してある領域９９９８およびデバイス用のインストールプログラムを記憶してある領域９９９７、デバイス用の新規ファームウェアプログラムを記憶してある領域９９９６の位置を示している。９９９８は、PC上でデバイスへ領域９９９６のインストールを実行するプログラムを記憶している領域である。９９９７は、デバイス上で動作するインストールを実行するプログラムを記憶してある領域である。９９９６は、デバイスのファームウェアプログラムを記憶してある領域である。９９９６に記憶されているプログラムが、例えばPC２００を使用して印刷デバイス３００にインストールされる際には、まずインストールプログラムを記憶してある領域９９９８に記憶されているインストールプログラムがPC200にロードされ、ＣＰＵ２０１によって実行される。次に、ＣＰＵ２０１によって実行されるインストールプログラムが、デバイス用インストールプログラムを記憶してある領域９９９７を印刷デバイス３００に転送し、CPU３０１によって実行される。次にCPU３０１によって実行されるデバイス用インストールプログラムが、PC２００へデバイス用ファームウェアの要求を行い、PC２００はインストールプログラムによってデバイス用ファームウェアを印刷デバイス３００へ送信し、印刷デバイス３００はデバイス用インストールプログラムによってデバイス用ファームウェアをハードディスク３１１に格納する。
【００４８】
なお、本発明は、複数の機器（例えばホストコンピュータ、インタフェース機器、リーダなど）から構成されるシステムあるいは統合装置に適用しても、ひとつの機器からなる装置に適用してもよい。
【００４９】
また、前述した実施形態の機能を実現するソフトウェアのプログラムコードを記録した記憶媒体を、システムあるいは装置に供給し、そのシステムあるいは装置のコンピュータ（またはＣＰＵやＭPＵ）が記憶媒体に格納されたプログラムコードを読み出し実行することによっても、本発明の目的が達成されることは言うまでもない。
【００５０】
この場合、記憶媒体から読み出されたプログラムコード自体が本発明の新規な機能を実現することになり、そのプログラムコードを記憶した記憶媒体は本発明を構成することになる。
【００５１】
プログラムコードを供給するための記憶媒体としては、例えば、フレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、ＣＤ−ＲＯＭ，ＣＤ−Ｒ、磁気テープ、不揮発性のメモリカード、ＲＯＭなどを用いることができる。
【００５２】
また、コンピュータが読み出したプログラムコードを実行することによって、前述した実施形態の機能が実現される他、そのプログラムコードの指示に基づき、コンピュータ上で稼動しているＯＳなどが実際の処理の一部または全部を行い、その処理によっても前述した実施形態の機能が実現され得る。
【００５３】
さらに、記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれた後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるＣＰＵなどが実際の処理の一部または全部を行い、その処理によっても前述した実施形態の機能が実現され得る。
【００５４】
なお、本発明は、前述した実施形態の機能を実現するソフトウェアのプログラムコードを記録した記憶媒体から、そのプログラムをパソコン通信など通信ラインを介して要求者にそのプログラムを配信する場合にも適用できることは言うまでもない。
【図面の簡単な説明】
【００５５】
【図１】本実施例の印刷システムの構成を示す図。
【図２】一般的なパーソナルコンピュータの内部構成を示した図。
【図３】一般的な画像形成装置の内部構成を示した図。
【図４】PCと画像形成装置のモデル図。
【図５】PCと画像形成装置との間のシーケンス図の一例。
【図６】ハッシュ値の算出式。
【図７】画像形成装置のフローチャートの一例。
【図８】画像形成装置のフローチャートの一例。
【図９】画像形成装置のメモリマップの一例。
【図１０】本発明のプログラムの記憶媒体におけるメモリマップの一例。
【図１】
2007041694.tif 000003
【図２】
2007041694.tif 000004
【図３】
2007041694.tif 000005
【図４】
2007041694.tif 000006
【図５】
2007041694.tif 000007
【図６】
2007041694.tif 000008
【図７】
2007041694.tif 000009
【図８】
2007041694.tif 000010
【図９】
2007041694.tif 000011
【図１０】
2007041694.tif 000012