(57)【要約】【課題】プログラムを安全に起動する技術を提供する。【解決手段】クライアント装置のストレージにはＯＳプログラムが暗号化または電子署名付与されて記憶されており、端末起動時に実行されるブートプログラムによってサーバー装置からプログラムを取得し実行する。サーバー装置から取得されるプログラムは、実行対象プログラムを復号または署名検証する検証プログラムであり、この検証プログラムによりＯＳプログラムの安全が確認された後にこのプログラムを実行する。また、ＯＳプログラムを更新する場合には、サーバー装置は、更新プログラムをダウンロードしてから再起動するプログラムをクライアント装置に送信する。サーバー装置の安全が確保されていれば、クライアント・サーバー間の通信の安全を確保するだけでクライアント装置に特別な装置を設けなくても、ＯＳプログラムを安全に起動することができる。【選択図】図３
2011003020.tif 000002
【特許請求の範囲】
【請求項１】
互いに通信可能なクライアント装置とサーバー装置とから構成されるコンピューターシステムであって、
クライアント装置は、装置起動時に実行されるプログラムであるブートプログラムを記憶する第１の記憶手段と、実行対象のプログラムを記憶する第２の記憶手段とを有し、
サーバー装置は、前記実行対象のプログラムを検証するための検証プログラムを記憶する記憶手段を有し、
前記ブートプログラムは、サーバー装置からプログラムを取得して実行する処理を含み、
前記サーバー装置は、クライアント装置のブートプログラムからの要求に応じて、前記検証プログラムをクライアント装置に送信し、
前記クライアント装置は、取得した検証プログラムを用いて前記実行対象のプログラムを検証し、検証に成功した後に当該プログラムを実行する
ことを特徴とするコンピューターシステム。
【請求項２】
前記実行対象のプログラムは、暗号化された状態で前記第２の記憶手段に記憶されており、
前記検証プログラムは、実行対象のプログラムを復号する処理を含む
ことを特徴とする請求項１に記載のコンピューターシステム。
【請求項３】
前記クライアント装置は、実行対象のプログラムの実行終了時に、第２の記憶手段に記憶されている実行対象のプログラムとは異なる暗号アルゴリズムまたは異なる暗号鍵を用いて暗号化された、実行対象のプログラムをサーバー装置から取得し、第２の記憶手段に格納する機能を有し、
前記サーバー装置は、前記クライアント装置へ送信した実行対象のプログラムを復号するための暗号アルゴリズムおよび暗号鍵を記憶しておき、次に前記クライアント装置のブートプログラムからプログラムの要求があったときに、クライアント装置に記憶されている実行対象のプログラムに対応した検証プログラムをクライアント装置へ送信する
ことを特徴とする請求項２に記載のコンピューターシステム。
【請求項４】
前記実行対象のプログラムを更新する場合は、
前記サーバー装置は、前記クライアント装置のブートプログラムからの要求があったときに、新しい実行対象プログラムを第２の記憶手段に格納した後に再起動を行うプログラムを、クライアント装置に送信する
ことを特徴とする請求項２または３に記載のコンピューターシステム。
【請求項５】
前記実行対象のプログラムは、電子署名が付加された状態で前記第２の記憶手段に記憶されており、
前記検証プログラムは、実行対象のプログラムの電子署名を検証する処理を含む
ことを特徴とすることを特徴とする請求項１に記載のコンピューターシステム。
【請求項６】
前記クライアント装置は、前記実行対象プログラムの実行終了時に、前記サーバー装置に対してプログラムを要求する機能を含む停止処理プログラムを有しており、
前記サーバー装置は、前記クライアント装置の前記停止処理プログラムからプログラムの要求があったときに、前記実行対象のプログラムを更新する場合は、新しい実行対象プログラムを第２の記憶手段に格納した後に再起動を行うプログラムをクライアント装置に送信する
ことを特徴とする請求項５のいずれかに記載のコンピューターシステム。
【請求項７】
前記サーバー装置は、前記検証プログラムに電子署名を付加してクライアント装置に送信し、
前記ブートプログラムは、取得した検証プログラムの電子署名を検証する処理を含む
ことを特徴とする請求項１〜６のいずれかに記載のコンピューターシステム。
【請求項８】
前記第１の記憶手段は、書き換え不可能な不揮発性メモリであり、
前記第２の記憶手段は、書き換え可能な不揮発性メモリである
ことを特徴とする請求項１〜７のいずれかに記載のコンピューターシステム。
【請求項９】
互いに通信可能なクライアント装置とサーバー装置とから構成されるコンピューターシステムであって、
クライアント装置は、装置起動時に実行されるプログラムであるブートプログラムを記憶する第１の記憶手段と、実行対象のプログラムを記憶する第２の記憶手段とを有し、
サーバー装置は、前記クライアント装置の第２の記憶手段に格納されているプログラムの状態を管理する管理手段と、前記クライアント装置に所定のアドレスについてのハッシュ値を要求し前記管理手段から判断可能な正しいハッシュ値と一致するか否かを判定しクライアント装置に通知する判定手段を含み、
前記ブートプログラムは、前記サーバー装置からハッシュ値を算出する対象のアドレスを取得し、取得したアドレスについてハッシュ値を求めて、サーバー装置に送信する機能を有し、サーバー装置からハッシュ値が正しいという通知を受けた後に前記第２の記憶手段に格納されている実行対象のプログラムを実行する
ことを特徴とするコンピューターシステム。
【請求項１０】
クライアント装置とサーバー装置との間の通信は、秘匿通信または署名付き通信により行われることを特徴とする請求項９に記載のコンピューターシステム。
【請求項１１】
前記実行対象のプログラムを更新する場合は、
前記サーバー装置は、新しい実行対象プログラムを分割して１つずつクライアント装置へ送信し、
前記クライアント装置は、取得した更新プログラムで前記第２の記憶手段の書き換えが完了した場合にその旨を示す完了通知をサーバー装置へ通知し、
前記サーバー装置の管理手段は、クライアント装置において更新が完了したアドレス領域と更新が未完了なアドレス領域と更新の完了・未完了が不明なアドレス領域とを管理することを特徴とする請求項９または１０に記載のコンピューターシステム。
【請求項１２】
前記判定手段は、ハッシュ値算出の対象となるアドレスを、前記管理手段によって更新が完了または未完了と把握されているアドレス領域の中からランダムに決定することを特徴とする請求項１１に記載のコンピューターシステム。
【請求項１３】
前記サーバー装置は、前記クライアント装置から送信されたハッシュ値が正しいと判定された場合に、前記クライアント装置における実行対象プログラムの更新処理が未完了であると前記管理手段から判断される場合は、更新処理を再開する
ことを特徴とする請求項１２に記載のコンピューターシステム。
【請求項１４】
互いに通信可能なクライアント装置とサーバー装置とから構成されるコンピューターシステムにおける、クライアント装置のストレージ手段に格納された実行対象プログラムを起動するプログラム起動方法であって、
クライアント装置は、装置起動時に実行されるブートプログラムにより、サーバー装置からプログラムを取得し、
サーバー装置は、クライアント装置からのプログラム要求に応じて、実行対象プログラ
ムを検証するためのプログラムをクライアント装置に送信し、
クライアント装置は、取得した検証プログラムによって実行対象プログラムを検証し、検証に成功した後に当該実行対象プログラムを実行する
ことを特徴とするプログラム起動方法。
【請求項１５】
前記実行対象プログラムは、暗号化された状態でストレージ手段に格納されており、
前記検証プログラムは、実行対象プログラムを復号する処理を含む
ことを特徴とする請求項１４に記載のプログラム起動方法。
【請求項１６】
前記実行対象プログラムは、電子署名が付加された状態でストレージ手段に格納されており、
前記検証プログラムは、実行対象プログラムの電子署名を検証する処理を含む
ことを特徴とする請求項１４に記載のプログラム起動方法。
【請求項１７】
互いに通信可能なクライアント装置とサーバー装置とから構成されるコンピューターシステムにおける、クライアント装置のストレージ手段に格納された実行対象プログラムを起動するプログラム起動方法であって、
サーバー装置は、クライアント装置のストレージ手段に格納されているプログラムの状態を管理しており、
クライアント装置は、装置起動時に実行されるブートプログラムにより、サーバー装置からハッシュ値を算出する対象のアドレスを取得し、当該アドレスのハッシュ値を算出してサーバー装置に送信し、
サーバー装置は、クライアント装置から送信されるハッシュ値が、正しいハッシュ値と一致するか否かを判定してクライアント装置に通知し、
クライアント装置は、サーバー装置からハッシュ値が正しいという通知を受けた後に実行対象のプログラムを実行する
ことを特徴とするプログラム起動方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムを安全に実行可能なコンピューターシステムおよびプログラム起動方法に関する。
【背景技術】
【０００２】
コンピューターシステムの普及に伴い、セキュリティ保証の重要性がますます高まっている。プログラムとして機能するソフトウェアコードそのものを保護するために、物理的または仮想的に作業領域を分割して保護する方法が考えられている（特許文献１）。また、ＴＣＧ（Trusted Computing Group）は、ＴＰＭ（Trusted Platform Module）と呼ばれるセキュリティチップの規格を策定している。ＴＰＭを用いることで、ハードウェアの改変やソフトウェアの改ざんがないことを連鎖的に検証してプログラムを起動することで、セキュリティを確保できる。
【０００３】
ソフトウェアを実行するシステムでは、製品出荷後でもソフトウェアを更新することで、機能の修正や追加を行うことができる。このような場合はネットワークを介して修正されたプログラムを取得することになるが、取得したプログラムが改ざんされていないことを検証する必要がある。電子証明書を利用して、かつ端末に常駐するアプリケーションから隠蔽することで安全なプログラムの取得および実行を実現する方法が提案されている（特許文献２）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００４−１９９６９３号公報
【特許文献２】特表２００７−５２８０６４号公報
【特許文献３】特開２００２−２４１７５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１に記載された方法のように、端末に特殊なハードウェアを導入すると、数多くの端末が存在するシステムでは導入コストが肥大してしまう。たとえば、自動車には多数のＥＣＵ（Electronic Control Unit）が搭載されており、ＥＣＵの搭
載数は今後ますます増加することが予想される。このような多数のＥＣＵの全てに特殊なハードウェアを導入することはコストの観点からも望ましくない。
【０００６】
また、特許文献２に記載された方法は、資源に乏しいコンピューターを対象としたダウンロードを想定しているが、ある程度の大きさを持つプログラムを対象としているため即時応答性などダウンロード時間を短くしたいという要求を満たすことは難しい。
【０００７】
本発明はこのような問題点を考慮してなされたものであり、その目的は、低コストにコンピューターにおいてプログラムを安全に起動する技術を提供することにある。
【課題を解決するための手段】
【０００８】
上記目的を達成するために本発明では、クライアント装置の起動時に、サーバー装置から得られる情報に基づいて実行対象プログラムの正当性を検証してから、そのプログラムを実行する。これにより、実行対象のプログラムが改ざんされているか否かを判別可能である。
【０００９】
〈第一の態様〉
本発明の第一の態様に係るコンピューターシステムは、互いに通信可能なクライアント装置とサーバー装置とから構成されるコンピューターシステムである。クライアント装置は、装置起動時に実行されるプログラムであるブートプログラムを記憶する第１の記憶手段と、実行対象のプログラムを記憶する第２の記憶手段とを有する。サーバー装置は、前記実行対象のプログラムを検証および起動するための検証プログラムを記憶する記憶手段を有する。ここで、ブートプログラムは、サーバー装置からプログラムを取得して実行する処理を含む。また、サーバー装置は、クライアント装置のブートプログラムからの要求に応じて検証プログラムをクライアント装置に送信し、クライアント装置は、取得した検証プログラムを用いて実行対象のプログラムを検証し、検証に成功した後に当該プログラムを実行する。
【００１０】
クライアント装置に記憶されている実行対象プログラムの正当性を検証する手法として、復号処理による方法と電子署名による方法とを挙げることができる。
【００１１】
プログラム検証の第１の手法は、実行対象プログラムを暗号化された状態で第２の記憶手段に記憶しておき、検証プログラムはそのプログラムを復号するという手法である。実行対象プログラムが暗号化されて保存されている場合は、正しく復号できた場合にプログラムが改ざんされていないと判断できる。第三者によって改ざんが行われた場合には正しく復号できないので、改ざんを検知可能である。さらに、第三者から実行対象プログラムを秘匿化することができる。
【００１２】
ブートプログラムの安全性を保証するためには、第１の記憶手段として書き換え不可能あるいは書き換えが困難な記憶手段を採用すればよい。一方、実行対象プログラムを記憶する第２の記憶手段としては、プログラム更新などを可能とするために書き換え可能な記憶手段を採用することが好ましい。
【００１３】
また、サーバー装置から取得されるプログラムの正当性を検証するためには、クライアント・サーバー間の通信に秘匿通信または署名付き通信を利用することが好ましい。このような秘匿通信または署名付き通信によりサーバー装置から送信されるプログラム等の正当性を検証できる。なお、サーバー装置からクライアント装置への通信に公開鍵暗号方式による署名付き通信を採用することが好ましい。この場合は、クライアント装置にサーバー装置の公開鍵を格納するだけで良く、公開鍵は秘匿化する必要がないので改ざん不可能なマスクロムなどに格納しておけば十分なためである。つまり、クライアント装置側に特殊な装置を要しないという利点がある。ただし、共通鍵暗号方式を採用して秘匿通信を行ったり、クライアント装置の秘密鍵を要する公開鍵暗号方式の通信（サーバーからクライアントへの秘匿通信およびクライアントからサーバーへの署名付き通信）を行う場合はクライアント装置側にセキュリティチップ（耐タンパデバイス）を設ける必要があるが、本発明はこのような方式を除外するものではない。
【００１４】
第１の手法においては、実行対象のプログラムをクライアント装置に暗号化して記憶しているので、第三者がその内容を知ることができないという利点がある。ただし、この暗号化プログラムを復号するための検証プログラム（ここでは復号処理プログラムという）がクライアント・サーバー間で通信される。この通信が平文で行われると、第三者が復号処理プログラムを取得可能であり、暗号化プログラムを復号できてしまう。したがって、実行対象プログラムを第三者から秘匿するためには、復号処理プログラムを通信により入手した後は実行対象プログラムの暗号鍵または暗号アルゴリズムを変更することが好ましい。そのために、クライアント装置は、第２の記憶手段に記憶されているプログラムとは異なる暗号アルゴリズムまたは異なる暗号鍵を用いて暗号化された、実行対象のプログラムをサーバー装置から取得し、第２の記憶手段に格納する機能を有することが好ましい。
また、サーバー装置は、前記クライアント装置へ送信した実行対象のプログラムを復号するための暗号アルゴリズムおよび暗号鍵を記憶しておき、次に前記クライアント装置のブートプログラムからプログラムの要求があったときに、クライアント装置に記憶されている実行対象のプログラムに対応した検証プログラムをクライアント装置へ送信することが好ましい。この場合、新しい暗号方式による暗号化プログラムの取得は、クライアント装置の実行終了時に行うことが処理負荷の観点から好ましい。
【００１５】
また、上記のように実行対象プログラムの暗号鍵または暗号アルゴリズムを変更する場合、サーバー装置は暗号化方法に対応した復号処理プログラムをクライアント装置に送信しなければならない。そのため、サーバー装置はクライアント装置へ送信した実行対象プログラムを復号するための暗号アルゴリズムおよび暗号鍵を記憶する。そして、クライアント装置のブートプログラムからプログラムの要求があったときに、クライアント装置に記憶されている実行対象プログラムに対応した復号処理プログラムをクライアント装置に送信する。
【００１６】
また、実行対象プログラムを更新する場合は、クライアント装置のブートプログラムがサーバー装置にプログラムを要求したときに、サーバー装置が更新作業用プログラムをクライアント装置に送信すればよい。ここで、更新作業用プログラムは、新しい実行対象プログラムを通信により取得して第２の記憶手段に格納し、その後に再起動を行うプログラムである。クライアント装置のブートプログラムは、サーバー装置から取得したプログラムを実行するので、更新作業用プログラムに含まれる処理、すなわち、更新および再起動がクライアント装置において実行される。また、ここではブートプログラムによるサーバー装置へのプログラム要求に対してサーバー装置が更新作業用プログラムを送信しているが、クライアント装置の終了時に実行されるプログラム（停止処理プログラム）がサーバー装置へプログラムを要求し、サーバー装置はこの要求に対して更新作業用プログラムを送信しても構わない。起動前に更新を行う手法は更新があった場合に新しいプログラムを実行できるというメリットがある一方、プログラム起動までに時間を要するというデメリットがある。停止前に更新を行う手法は、プログラム起動が早くなるというメリットがある一方、更新があった場合に古いプログラムを実行してしまうというデメリットがある。したがって、更新の重要性に応じて起動前もしくは停止前のいずれで更新処理を行うか切り替えることも好ましい。
【００１７】
プログラム検証の第２の手法は、実行対象プログラムを電子署名が付与された状態で第２の記憶手段に記憶しておき、検証プログラムは署名検証するという手法である。実行対象プログラムに署名が付与されている場合は、プログラム本体から算出される認証コードと付与された署名とが一致する場合にプログラムが改ざんされていないと判断できる。実行対象プログラムを暗号化して記憶しておき実行時に復号処理を施す第１の手法は、プログラムの起動に比較的時間を要する。これに対して署名検証による本手法は、実行対象プログラムが平文の状態で格納されるため第三者がその内容を知ることができてしまうが、より高速に検証処理が実施できるという利点がある。
【００１８】
第２の手法には、サーバー装置から取得した検証プログラムに対する検証と、第２の記憶手段に記憶されている実行対象プログラムに対する検証の２つの検証動作がある。ここで、検証プログラムに対する検証処理は、クライアント装置の第１の記憶手段に格納されるものであるため、変更できない。そこで、長期間運用するために、鍵長を長くするなど堅牢なプログラムを用いる必要があり、比較的処理速度が遅くなる。これに対して実行対象プログラムの検証は、サーバー装置から送られる検証プログラムによって行われるので変更が可能である。そこで、その時点において高速な暗号アルゴリズムを用いることが好ましい。検証プログラムは実行対象プログラムと比較してサイズが小さいので、検証プログラムの検証に低速なアルゴリズムを利用し、実行対象プログラムに高速なアルゴリズム
を利用することで、検証処理に要する全体の時間は短くすることができる。
【００１９】
第２の手法においても、ブートプログラムを記憶する第１の記憶手段として書き換え不可能または書き換えが困難な記憶手段を採用し、実行対象プログラムを記憶する第２の記憶手段として書き換え可能な記憶手段を採用することが好ましい。また、クライアント・サーバー間の通信も、第１の手法と同様に、秘匿通信または署名付き通信を利用することが好ましい。
【００２０】
また、第２の手法においても、第１の手法で述べたのと同様の手法により実行対象プログラムの更新を行うことが好ましい。本手法においても、第１の手法の場合と同様に種々のタイミングで更新処理を行っても良い。ただし、第２の手法においてはプログラムを高速に起動することを目的としているので、クライアント装置の実行終了時にサーバー装置から更新作業用プログラムを取得して更新処理を行うことが好ましい。
【００２１】
〈第二の態様〉
本発明の第二の態様では、サーバー装置が実行対象プログラムの任意のアドレスについてハッシュ値を要求し、これが正しいハッシュ値である場合に実行対象プログラムが正しいと判断する。サーバー装置側では正しいハッシュ値を把握できるように、クライアント装置の第２の記憶手段に格納されているプログラムの状態を管理する管理手段を設けることが好ましい。
【００２２】
第二の態様では、実行対象プログラムの更新処理が失敗に終わった場合にも正常に動作可能とする。更新処理が途中で異常終了した場合は、第２の記憶手段内に格納されている実行対象プログラムは一部が書き換え済みで、一部が古いままとなる。このような状態で復号処理や署名検証などの検証動作を行っても検証を通過せず、第一の態様による方法ではクライアント装置が起動できなくなる。そこで、本手法のようにサーバー装置側でクライアント装置のプログラムの更新状況を管理し、内容を把握しているアドレスについてのハッシュ値をクライアント装置に要求する。このように更新状況をサーバー装置側で管理し、ハッシュ値を用いたプログラム検証を行うため、更新処理が途中で異常終了した場合であってもクライアント装置の正当性を検証可能である。
【００２３】
本態様において、実行対象のプログラムを更新する場合は、サーバー装置が新しい実行対象プログラムを所定のサイズに分割して１つずつクライアント装置へ送信し、クライアント装置は、取得した更新プログラムで第２の記憶手段の書き換えが完了した場合に、その旨をサーバー装置へ通知することが好ましい。そして、サーバー装置の管理手段が、クライアント装置からの書き換え完了通知に基づいて、クライアント装置において実行対象プログラムの更新がどの部分まで完了したかを管理することが好ましい。つまり、管理手段は、クライアント装置において更新が完了したアドレス領域（更新プログラムを送信しかつ書き換え完了通知を受領したアドレス領域）、更新が未完了なアドレス領域（更新プログラムを送信していないアドレス領域）、更新の完了・未完了が不明なアドレス領域（更新プログラムを送信したが書き換え完了通知を受領していないアドレス領域）とを管理することが好ましい。このような構成を採用することで、クライアント装置における実行対象プログラムが、どの部分まで更新が完了し、どの部分は更新が行われていないかが分かる。また、どの部分の更新中に異常終了が発生したかも分かる。そこで、サーバー装置は、更新完了または未完了と判断できるアドレスを指定してクライアント装置にハッシュ値を要求することができる。なお、ハッシュ値算出対象のアドレスは、更新が完了または未完了と把握されるアドレスの中からランダムに決定されることが好ましい。
【００２４】
クライアント装置において、実行対象プログラムの更新処理が完了していない場合（途中で中断した場合）は、指定されたアドレスについてのハッシュ値に基づく検証が成功し
た後に、サーバー装置が更新処理を再開することが好ましい。一方、実行対象プログラムの更新処理が正常に完了している場合には、上記検証が成功した後に、実行対象プログラムを実施すべき旨の指示をサーバー装置からクライアント装置に送信する。
【００２５】
このようにして、第二の態様では実行対象プログラムの更新処理が途中で異常終了した場合でも、クライアント装置に記憶されている実行対象プログラムを検証できる。なお、更新処理が途中で異常終了した場合の対処方法として、記憶手段を二重にしておき更新に失敗した場合にはロールバックする手法も存在するが、多くの計算機資源が必要となる。本態様では、多くの計算機資源を必要としないという利点がある。
【００２６】
なお、本発明は、上記手段の少なくとも一部を有するコンピューターシステムとして捉えることができる。また、本発明は、上記処理の少なくとも一部を含むプログラム起動方法、またはその方法を実行するプログラムとして捉えることもできる。上記手段および処理の各々は可能な限り互いに組み合わせて本発明を構成することができる。
【発明の効果】
【００２７】
本発明によれば、コンピューターにおける安全なプログラム起動を低コストに実現できる。
【図面の簡単な説明】
【００２８】
【図１】第１の実施形態に係るコンピューターシステムの概略構成を示す図。
【図２】第１の実施形態における各プログラムが有する機能を説明する図。
【図３】第１の実施形態におけるクライアント端末起動から停止までの全体的な処理の流れを示すフローチャート。
【図４】第１の実施形態におけるサーバー装置が行う処理の流れを示すフローチャート。
【図５】第１の実施形態におけるクライアント装置が端末起動時に行う処理の流れを示すフローチャート。
【図６】第１の実施形態におけるクライアント装置が端末停止時に行う処理の流れを示すフローチャート。
【図７】第２の実施形態に係るコンピューターシステムの概略構成を示す図。
【図８】第２の実施形態のおける各プログラムが有する機能を説明する図。
【図９】第２の実施形態におけるクライアント装置起動から停止までの全体的な処理の流れを示すフローチャート。
【図１０】第２の実施形態におけるサーバー装置が行う処理の流れを示すフローチャート。
【図１１】第２の実施形態におけるクライアント装置が端末起動時に行う処理の流れを示すフローチャート。
【図１２】第２の実施形態におけるクライアント装置が端末停止時に行う処理の流れを示すフローチャート。
【図１３】第３の実施形態に係るコンピューターシステムの概略構成を示す図。
【図１４】第３の実施形態における各プログラムが有する機能を説明する図。
【図１５】第３の実施形態における更新プログラム管理部が有するクライアント装置の更新状況を記憶するためのテーブルの例。
【図１６】第３の実施形態におけるクライアント装置停止時における処理の流れを示す図。
【図１７】第３の実施形態におけるクライアント装置起動時における処理の流れを示す図。
【発明を実施するための形態】
【００２９】
以下に図面を参照して、この発明の好適な実施の形態を例示的に詳しく説明する。
【００３０】
（第１の実施形態）
〈構成〉
図１は本実施形態に係るコンピューターシステムの概略構成を示す図である。本実施形態に係るコンピューターシステムは、複数のクライアント装置１００と、サーバー装置２００とから構成される。各クライアント装置１００はサーバー装置２００と通信可能に構成されている。本システムを車載システムに適用した場合、クライアント装置１００は個々のＥＣＵ（Electronic Control Unit）に相当するものであり、クライアント装置１０
０は計算機資源の乏しい装置である。サーバー装置２００はシステム内に１台のみあればよいものであるため、豊富な計算機資源を備えセキュリティが確保された装置として構成することができる。サーバー装置２００は、既存の車載システムに新しい装置として追加されても良いが、カーナビゲーション装置などの汎用的な処理を行う装置の一機能として実装されても良い。なお、本実施形態に係るコンピューターシステムは、車載システムだけでなくその他の任意にシステムに対して適用することができる。
【００３１】
クライアント装置１００およびサーバー装置２００は、ハードウェアの観点からは、ＣＰＵ（中央演算処理装置）、ＲＡＭ、ＲＯＭ、ストレージ装置、ネットワークインタフェース装置などから構成される。後述するように改ざんを防止するためにＲＯＭには書き換え不可能なマスクＲＯＭを採用することが好ましい。ストレージ装置としては、フラッシュメモリやＨＤＤ（Hard Disk Drive）、ＳＳＤ（Solid State Drive）などを採用できる。また、クライアント装置１００は後述するようにブート時にサーバー装置２００へアクセスするのでネットワークブート可能な構成とする。たとえば、ネットワークインタフェース装置にＰＸＥ（Preboot eXcution Environment）に準拠したプログラムを搭載すればよい。また、サーバー装置２００はクライアント装置に適切なプログラムを配信するＴＦＴＰサーバおよびクライアント装置にアドレスを割り当てるＤＨＣＰサーバー（またはＢＯＯＴＰサーバー）として動作すればよい。
【００３２】
クライアント装置１００は、コストを抑えるために特殊な機器をできるだけ利用せずに構成する。セキュリティ確保のためにはＴＰＭなどのハードウェア耐タンパ性を有するセキュリティチップを用いてセキュアブート機能を用いればよいが、クライアント装置の数が多い環境では個々のクライアントに特殊なハードウェアを導入するとコストが高くなってしまう。本実施形態ではクライアント装置側にセキュリティチップなどのハードウェアを導入せずに、クライアント装置の安全なプログラム実行および安全なプログラム更新を実現する。なお、サーバー装置２００はシステム内に一台のみでよいので、ＴＰＭモジュールなどによってセキュリティが確保された構成を採用する。
【００３３】
以下で説明するクライアント装置１００およびサーバー装置２００の各機能部は、ＲＯＭやストレージ装置内に格納されているプログラムをＣＰＵが実行することにより実現される。ただし、これらの機能の内の一部については、専用のハードウェアによって構成しても構わない。
【００３４】
クライアント装置１００は、起動プログラム記憶部１０１、終了プログラム記憶部１０２、公開鍵記憶部１０３、外部通信部１０４、ダウンロードプログラム展開・実行部１０５、ＯＳ記憶部１０６を含む。起動プログラム記憶部１０１は、クライアント装置１００の電源投入時に実行される起動プログラム（ブートプログラム）を記憶する。終了プログラム記憶部１０２は、クライアント装置１００の終了時に実行されるプログラムを記憶する。公開鍵記憶部１０３は、サーバー装置２００の公開鍵を記憶する。これらの各記憶部は実体としてはマスクロムである。外部通信部１０４はネットワークを介してサーバー装置２００と通信する機能部である。ダウンロードプログラム展開・実行部１０５は、サー
バー装置から取得（ダウンロード）したプログラムの署名検証を行い、ＲＡＭに展開して実行する機能部である。外部通信部１０４およびダウンロードプログラム展開・実行部１０５は、マスクＲＯＭに記憶されたプログラムをＣＰＵが実行することによって実現される。
【００３５】
ＯＳ記憶部１０６は、クライアント装置１００が実行するシステムプログラム（ＯＳ：オペレーティングシステム）を記憶する。ＯＳ記憶部１０６は、実体としてはストレージ装置である。本実施形態においては、ＯＳ記憶部１０６にＯＳプログラムが暗号化されて記憶されている。なお、本実施形態ではクライアント装置が安全に実行すべきプログラムがＯＳプログラムである例を説明しているが、実行対象のプログラムはＯＳである必要はなく任意のプログラムであって構わない。
【００３６】
サーバー装置２００は、外部通信部２０１、アップロードプログラム選択部２０２、アップロードプログラム記憶部２０３、更新プログラム記憶部２０６、暗号化部２０７、暗号方法記憶部２０８を含む。外部通信部２０１は、ネットワークを介してクライアント装置１００と通信する機能部である。本実施形態においては、サーバー装置２００からクライアント装置１００への通信は、公開鍵暗号方式による電子署名付き通信により行う。アップロードプログラム選択部２０２は、クライアント装置１００からプログラムを要求されたときに、どのプログラムをクライアント装置１００へ送信するかを選択する機能部である。アップロードプログラム記憶部２０３は、クライアント装置１００に送信されるプログラムを記憶するものであり、通常ブート用プログラム２０４と更新作業用プログラム２０５を記憶する。通常ブート用プログラム２０４は、クライアント装置１００においてＯＳ記憶部１０６に格納されているＯＳプログラムを検証・実行するためのプログラムである。更新作業用プログラム２０５は、クライアント装置１００において新しいＯＳプログラムを取得してＯＳ記憶部１０６に格納するためのプログラムである。更新プログラム記憶部２０６は、クライアント装置１００のＯＳプログラムの最新版を記憶する。更新プログラム記憶部２０６に新しいバージョンのＯＳプログラムを格納するためには、サーバー装置２００が安全の確保された通信によって外部装置から新しいＯＳプログラムを取得する必要があるが、電子署名などの認証技術によって達成すればよい。暗号化部２０７は、更新プログラム記憶部２０６に記憶されている更新プログラムに所定の暗号アルゴリズムおよび暗号鍵を適用して暗号化する。暗号方式としてはＡＥＳやトリプルＤＥＳなどの共通鍵暗号方式、ＲＳＡや楕円曲線暗号などの公開鍵暗号公式などいずれの手法であっても良い。ただし、クライアント装置のＯＳプログラム実行前に復号処理を行うことを考慮すると、より高速な共通鍵暗号方式を採用することが好ましい。暗号方法記憶部２０８は、クライアント装置１００のＯＳ記憶部１０６に格納されている暗号化されたＯＳの、暗号アルゴリズムおよび暗号鍵を記憶する。なお、クライアント装置ごとに暗号アルゴリズム等が異なるので、暗号方法記憶部２０８はそれぞれにクライアント装置に対する暗号アルゴリズム等を記憶する。
【００３７】
図２は、本実施形態における各種のプログラムが有する機能を説明する図である。図２（ａ）はクライアント装置１００に格納されるプログラムの機能を説明する図である。起動プログラム記憶部１０１に格納されている起動プログラムは、プログラム要求機能１０１ａ、署名検証機能１０１ｂ、および展開プログラム実行機能１０１ｃを有する。プログラム要求機能１０１ａは、サーバー装置２００に対してプログラムを要求する。このプログラム要求は、クライアント端末の識別子（ＩＤ）と起動時のプログラム要求である旨の通知を伴う。署名検証機能１０１ｂは、サーバー装置２００から取得したプログラムに付されている署名を、公開鍵記憶部１０３に格納されているサーバー装置２００の公開鍵を利用して検証する。展開プログラム実行機能１０１ｃは、サーバー装置２００から取得したプログラムをＲＡＭに展開して実行する機能である。もちろん、取得したプログラムの署名検証に成功した場合のみプログラムを実行する。
【００３８】
終了プログラム記憶部１０２に格納されている終了プログラムは、プログラムダウンロード機能１０２ａ、署名検証機能１０２ｂ、ＯＳ記憶部更新機能１０２ｃを有する。プログラムダウンロード機能１０２ａは、ＯＳ記憶部１０６に記憶されている暗号化されたＯＳプログラムとは異なる暗号アルゴリズムまたは暗号鍵で暗号化されたＯＳプログラムをサーバー装置２００から取得する機能である。署名検証機能１０２ｂは、サーバー装置２００から取得したデータ（暗号化ＯＳプログラム）に付された署名を、公開鍵記憶部１０３に格納されているサーバー装置２００の公開鍵を利用して検証する。ＯＳ記憶部更新機能１０２ｃは、署名検証に成功した場合に、サーバー装置２００から新たに取得したＯＳプログラムでＯＳ記憶部１０６を更新する。
【００３９】
図２（ｂ）は、サーバー装置２００に格納されるプログラムの機能を説明する図である。アップロードプログラム記憶部２０３に格納されている通常ブート用プログラム２０４は、ＯＳ復号機能２０４ａ、プログラム展開機能２０４ｂ、展開プログラム実行機能２０４ｃを有する。ＯＳ復号機能２０４ａは、クライアント装置１００のＯＳ記憶部１０６に格納されている暗号化されたＯＳプログラムを復号する機能である。ＯＳ復号機能２０４ａは、ＯＳ記憶部１０６に格納されている暗号アルゴリズムおよび暗号鍵に対応する必要がある。このＯＳ復号機能２０４ａにより復号処理が成功した場合は、ＯＳ記憶部１０６に格納されているＯＳプログラムは改ざんされていないことが分かる。プログラム展開機能２０４ｂは、復号したＯＳプログラムをＲＡＭに展開する機能である。展開プログラム実行機能２０４ｃは、ＲＡＭ上に展開されたＯＳプログラムを実行する機能である。このように、通常ブート用プログラムをクライアント装置１００で実行することで、ＯＳ記憶部１０６内に格納されているＯＳプログラムの検証およびその実行を実現できる。
【００４０】
アップロードプログラム記憶部２０３に格納されている更新作業用プログラム２０５は、プログラムダウンロード機能２０５ａ、ＯＳ記憶部更新機能２０５ｂ、再起動機能２０５ｃを有する。プログラムダウンロード機能２０５ａは、サーバー装置２００に更新されたＯＳプログラムを要求する機能である。ＯＳ記憶部更新機能２０５ｂは、サーバー装置２００から新たに取得したＯＳプログラムでＯＳ記憶部１０６を更新する。再起動機能２０５ｃは、クライアント装置１００を再起動する機能である。
【００４１】
〈動作〉
・全体処理
第１の実施形態における処理の流れを説明する。まず、図３のフローチャートを参照して、全体的な処理の流れを説明する。
【００４２】
クライアント装置１００の電源が投入されると（Ｓ１０１）、起動プログラムが実行されて、サーバー装置２００に対してプログラムを要求する（Ｓ１０２）。サーバー装置２００からクライアント装置１００に送信されるプログラムは状況により変化し、更新プログラムがない場合には通常ブート用プログラム２０４が送信され、更新プログラムがある場合には更新作業用プログラム２０５が送信される。
【００４３】
クライアント装置１００がサーバー装置２００から更新作業用プログラム２０５を取得した場合（Ｓ１０３）は、この更新作業用プログラム２０５をクライアント装置１００が実行することでＯＳの更新を行う（Ｓ１０４）。そして、更新終了後に再起動する（Ｓ１０５）ので、再起動後に再びサーバーにプログラムを要求することになる（Ｓ１０２）。
【００４４】
クライアント装置１００が有するＯＳプログラムが最新のものである場合は、サーバー装置２００から通常ブート用プログラム２０４がクライアント装置に送信される（Ｓ１０６）。クライアント装置１００は通常ブート用プログラム２０４を実行してＯＳ記憶部１
０６内のＯＳプログラムを復号処理する（Ｓ１０７）。そして、正常に復号できた場合にはＯＳプログラムを実行する（Ｓ１０８）。
【００４５】
ＯＳプログラムの実行を終了するときは終了プログラムが実行され、サーバー装置からＯＳ記憶部１０６に記憶されているものとは異なる方法により暗号化されたＯＳプログラムを取得する（Ｓ１０９）。クライアント装置１００は取得した暗号化ＯＳをＯＳ記憶部１０６に格納して（Ｓ１１０）、端末の処理を終了する（Ｓ１１１）。
【００４６】
・サーバー装置の処理
以下では、クライアント装置１００およびサーバー装置２００が行うそれぞれの処理をより詳しく説明する。まず、サーバー装置２００が行う処理を図４のフローチャートを参照しつつ説明する。
【００４７】
サーバー装置２００は、基本的に、クライアント装置１００からのプログラム要求を受けて、適切なプログラムを送信する処理を繰り返す。サーバー装置２００のアップロードプログラム選択部２０２は、クライアント装置１００からのプログラム要求を受信すると（Ｓ２０１）、要求の種類を判断する（Ｓ２０２）。すなわち、アップロードプログラム選択部２０２は、プログラム要求がクライアント端末起動時のものであるかクライアント端末停止時のものであるかを判断する。プログラム要求が端末起動時のものである場合には、アップロードプログラム選択部２０２はさらに更新プログラムがあるか否かを判断する（Ｓ２０３）。更新プログラムがない場合には、暗号方法記憶部２０８を参照して要求元のクライアント端末に格納されている暗号化ＯＳを復号するための復号処理機能を有する通常ブート用プログラム２０４をクライアント装置１００に送信する（Ｓ２０４）。送信する通常ブート用プログラム２０４には電子署名が付与される。一方、ステップＳ２０３の判定で更新プログラムがある場合には、アップロードプログラム選択部２０２はクライアント装置１００に対して更新作業用プログラム２０５を送信する（Ｓ２０５）。送信する更新作業用プログラムには電子署名が付与される。そして、クライアント端末からの更新プログラムの要求を待つ（Ｓ２０６）。この要求を受信したら、最新のＯＳプログラムを暗号化部２０７によって暗号化する（Ｓ２０７）。この時の、暗号方法（暗号アルゴリズムおよび暗号鍵）はクライアント端末の識別子と関連付けて暗号方法記憶部２０８に記憶する。アップロードプログラム選択部２０２はさらに暗号化されたプログラムをクライアント端末に送信する（Ｓ２０８）。また、ステップＳ２０２での判定で要求の種類がクライアント端末停止時のものである場合には、ステップＳ２０７に進み最新のＯＳプログラムを異なる暗号方法で暗号化してクライアント端末に送信する。
【００４８】
・クライアント装置の処理
次にクライアント装置１００が行う処理を説明する。まず、クライアント装置１００が起動時に行う処理（図３のステップＳ１０１〜Ｓ１０５およびＳ１０１〜Ｓ１０８に相当）を図５のフローチャートを参照しつつ説明する。
【００４９】
クライアント装置１００の電源が投入されると（Ｓ３０１）、まず、マスクロムに格納されている起動プログラムが実行され（Ｓ３０２）、プログラム要求機能１０１ａによりサーバー装置２００に対するプログラム要求が行われる（Ｓ３０３）。クライアント装置１００は、サーバー装置２００から受け取ったプログラムを、起動プログラムの署名検証機能１０１ｂによって検証する（Ｓ３０４）。ここで、署名検証を通過しない場合（Ｓ３０５：ＮＯ）は、取得したプログラムはサーバー装置２００からのものではない、または、改ざんされたおそれがあるため、プログラムの実行を中止する（Ｓ３０６）。なお、検証に失敗した場合の動作は本発明では特に規定しない。時間をおいて再度実行しても良いし、管理者に報知する処理を行っても良い。取得したプログラムが署名検証により正当なものであると判断された場合（Ｓ３０５：ＹＥＳ）は、起動プログラムの展開プログラム
実行機能１０１ｃにより、取得したプログラムをＲＡＭに展開して実行する（Ｓ３０７）。
【００５０】
サーバー装置２００から受け取ったプログラムが更新作業用プログラム２０５の場合は、そのプログラムダウンロード機能２０５ａにより、サーバー装置２００へ更新プログラムを要求する（Ｓ３０８）。そして、サーバー装置２００から受信された新しいバージョンのＯＳプログラムは、ＯＳ記憶部更新機能２０５ｂによりＯＳ記憶部１０６に格納される（Ｓ３０９）。その後、再起動機能２０５ｃによりクライアント端末が再起動される（Ｓ３１０）。再起動後はステップＳ３０２に戻り、次のプログラム取得では通常ブート用プログラム２０４がサーバー装置２００から得られることになる。
【００５１】
ステップＳ２０７においてサーバー装置２００から受け取ったプログラムが通常ブート用プログラム２０４の場合は、そのＯＳ復号機能２０４ａによりＯＳ記憶部１０６内の暗号化ＯＳプログラムを復号する（Ｓ３１１）。そして、復号したＯＳプログラムをプログラム展開機能２０４ｂによりＲＡＭに展開し（Ｓ３１２）、展開したＯＳプログラムを展開プログラム実行機能２０４ｃにより実行する（Ｓ３１３）。ＯＳ記憶部１０６内のＯＳプログラムが改ざんされていた場合は、復号処理が正常に完了せず改ざんが検知できる。もちろん、改ざんが検知された場合はＯＳプログラムの実行はしない。このようにして、実行するＯＳプログラムの正当性を担保できる。
【００５２】
次にクライアント装置１００が終了時に行う処理（図３のステップＳ１０９〜Ｓ１１１に相当）を図６のフローチャートを参照しつつ説明する。
【００５３】
クライアント装置１００では、ＯＳプログラムの実行が終了する（Ｓ４０１）と終了プログラム記憶部１０２内の終了プログラムが実行される（Ｓ４０２）。終了プログラムのプログラムダウンロード機能１０２ａによりサーバー装置２００に対する暗号化ＯＳプログラムの要求が行われる（Ｓ４０３）。サーバー装置２００から受け取ったプログラムは、署名検証機能１０２ｂによって検証される（Ｓ４０４）。ここで、署名検証を通過しない場合（Ｓ４０５：ＮＯ）は、取得したプログラムがサーバー装置２００からのものではない、または、改ざんされたものであるおそれがあるため、ＯＳ記憶部１０６の更新処理を行わずに処理を終了する（Ｓ４０６）。不正プログラム受信時は、再度プログラムを要求したり、管理者に報知しても良い。一方、取得した暗号ＯＳプログラムが署名検証により正当なものであると判断された場合（Ｓ４０６：ＹＥＳ）は、ＯＳ記憶部更新機能１０２ｃにより受信したプログラムをＯＳ記憶部１０６に格納する。
【００５４】
〈実施形態の作用・効果〉
本実施形態によれば、クライアント装置側にはセキュリティチップなどの特殊な装置を導入することなく、ＯＳ記憶部に格納されているＯＳプログラムを安全に実行できる。また、クライアント装置のＯＳプログラムの更新も安全に行うことができる。したがって、クライアント装置において改ざんされたプログラムが実行されることを防止できる。
【００５５】
クライアント装置の起動時に安全が確保される理由を順をおって説明する。まず、電源投入時に実行される起動プログラムはマスクロムに格納されており改ざんできないため、起動プログラムの安全性が確保される。したがって、電源投入からプログラム取得処理までの間（図３のＳ１０１〜Ｓ１０２）に脅威は存在しない。次に、サーバー装置２００から取得されたプログラムには公開鍵暗号方式の電子署名が付されており、サーバー装置の公開鍵で検証するため、取得したプログラムが改ざんされていないことが保証される。なお、サーバー装置２００のセキュリティが確保されていることは前提である。これにより、サーバー装置２００から取得したプログラムが安全であることが保証される。すなわち、図３のステップＳ１０３、Ｓ１０６までに脅威が存在しない。
【００５６】
ＯＳ記憶部１０６に記憶されている暗号化ＯＳを起動する際には、サーバー装置２００から得られた通常ブート用プログラムによって復号処理をして、正常に復号できた場合のみＯＳプログラムを実行している。したがって、このＯＳプログラムの正当性も保証される（図３のＳ１０６〜Ｓ１０８まで安全）。
【００５７】
なお、更新作業用プログラムによって取得される暗号化ＯＳに対する検証処理は施していない。したがって、クライアント装置１００のＯＳ記憶部１０６に改ざんされた暗号化ＯＳが格納される可能性はある。しかしながら、この場合も通常ブート用プログラムで暗号化ＯＳの復号処理を行うときに改ざんが検知できるためクライアント装置の安全は確保される。もちろん、改ざんされたＯＳプログラムがＯＳ記憶部１０６に格納されないように、更新作業用プログラム２０５にも署名検証機能を持たせ、サーバー装置２００から取得される暗号化ＯＳに対する署名検証を行うことも好ましい。ただし、本実施形態においてはクライアント装置起動時に更新処理を行っているため、署名検証処理を含ませると更新作業がある場合に起動までに時間が掛かってしまうというデメリットがある。したがって、セキュリティ要求と性能要求を考慮して署名検証動作を含めるか否かを適宜設計すればよい。
【００５８】
また、本実施形態においてはＯＳ記憶部１０６に格納されているＯＳプログラムは暗号化されているため、第三者に対してその内容を秘匿できる。ただし、ＯＳ復号機能２０４ａを含む通常ブート用プログラム２０４は、クライアント・サーバー間を平文の状態で通信される。したがって、第三者がこの通常ブート用プログラム２０４を盗聴することで、ＯＳ記憶部１０６に格納されている暗号化ＯＳを復号して内容を知ることができてしまう。そこで、クライアント装置１００の終了時に異なる暗号アルゴリズムまたは暗号鍵で暗号化されたＯＳプログラムを取得してＯＳ記憶部１０６に格納することで、電源がオフされた時に第三者がその中身を知ることができない。
【００５９】
（第２の実施形態）
第１の実施形態においては、クライアント装置の起動時にＯＳプログラムの復号処理や更新処理を行っているため、起動に要する時間が長くなり要求を満足しない場合もある。そこで、本実施形態においては、より高速に起動するための構成を提供する。本実施形態と第１の実施形態との最も大きな相違点は、クライアント装置に格納するシステムプログラム（ＯＳプログラム）を暗号化せずに、電子署名を付与した状態でストレージ装置に記憶している点である。また本実施形態は、ＯＳプログラムの更新処理をクライアント装置の起動時ではなく終了時に行っている点においても第１の実施形態と異なる。
【００６０】
〈構成〉
図７は本実施形態に係るコンピューターシステムの概略構成を示す図である。本実施形態に係るコンピューターシステムは、複数のクライアント装置１００と、サーバー装置２００とから構成される。なお、図７において、第１の実施形態と対応する構成については、同一の符号を付している。
【００６１】
上述したようにクライアント装置１００のＯＳ記憶部１０６には、平文のＯＳプログラムに電子署名が付加されて記憶されている点で第１の実施形態と異なる。また、クライアント装置１００にＴＰＭモジュールなどのセキュリティチップ（耐タンパデバイス）によって実現される通信検証部１０７が設けられている点でも第１の実施形態と異なる。本実施形態においてクライアント・サーバー間の通信は、改ざんおよびなりすましが防止できるように暗号処理を施す。ここでは、サーバー・クライアント間の通信として、共通鍵暗号方式によるメッセージ認証コード（ＭＡＣ）を用いる署名付き通信を採用する。もっとも、サーバー・クライアント間の通信には、共通鍵方式による秘匿通信や、公開鍵暗号方
式による署名付き通信を採用しても良い。この共通鍵（公開鍵方式の場合は秘密鍵）は秘匿化する必要があるため通信検証部１０７にはセキュリティチップが利用される。なお、暗号アルゴリズムも（公開鍵方式の場合は加えて公開鍵も）セキュリティチップ内に格納されるものとして説明するが、暗号アルゴリズムは改ざんされてなければ十分なのでマスクＲＯＭに格納しても良い。
【００６２】
サーバー装置２００は基本的に第１の実施形態と同様であるが、ＯＳプログラムの暗号化処理を行わないため、暗号化部２０７および暗号方法記憶部２０８が省略されている。また、アップロードプログラム記憶部２０３に、停止用プログラム２０９が格納されている。
【００６３】
図８は、本実施形態における各種のプログラムが有する機能を説明する図である。図８（ａ）はクライアント装置１００に格納されるプログラムの機能を説明する図である。起動プログラム記憶部１０１に格納されている起動プログラムは、プログラム要求機能１０１ｄとプログラム実行機能１０１ｅを有する。プログラム要求機能１０１ｄは、サーバー装置２００に対してプログラムを要求する。このプログラム要求は、クライアント端末の識別子（ＩＤ）と起動時のプログラム要求である旨の通知を伴う。プログラム実行機能１０１ｅは、サーバー装置２００から取得したプログラムを実行する機能である。
【００６４】
終了プログラム記憶部１０２に格納されている終了プログラムは、プログラム要求機能１０２ｄおよびプログラム実行機能１０２ｅを有する。終了プログラムは基本的に起動プログラムと同じ機能を有するが、端末停止時のプログラム要求である旨を通知してサーバー装置２００にプログラムを要求する点で異なる。
【００６５】
図８（ｂ）は、サーバー装置２００に格納されるプログラムの機能を説明する図である。アップロードプログラム記憶部２０３に格納されている通常ブート用プログラム２０４は、ＯＳ検証機能２０４ｄおよびプログラム実行機能２０４ｅを有する。ＯＳ検証機能２０４ｄは、クライアント装置１００のＯＳ記憶部１０６に格納されているＯＳプログラムの署名を検証する機能である。プログラム実行機能２０４ｅは、ＯＳ記憶部１０６に格納されているＯＳプログラムの実行を指示する機能である。
【００６６】
アップロードプログラム記憶部２０３に格納されている更新作業用プログラム２０５は、プログラムダウンロード機能２０５ｄ、ＯＳ記憶部更新機能２０５ｅ、ＯＳ検証機能２０５ｆを有する。プログラムダウンロード機能２０５ｄは、サーバー装置２００から更新されたＯＳプログラムを取得する機能である。ＯＳ記憶部更新機能２０５ｅは、取得したＯＳプログラムをＯＳ記憶部１０６に格納する機能である。ＯＳ検証機能２０５ｆは、取得したＯＳプログラムの署名検証を行い、ＯＳプログラムが正当なものであるか判定する機能である。
【００６７】
アップロードプログラム記憶部２０３に格納されている停止用プログラム２０９は、実質的に何も処理を行わないプログラムである。
【００６８】
ここで、署名検証動作として２つのケースがある点に注意されたい。一つはクライアント装置１００の通信検証部１０７による、サーバー装置から取得されるプログラムに対する署名検証である。もう一つは、通常ブート用プログラム２０４による、ＯＳ記憶部１０６内のＯＳプログラムに対する署名検証である。通信検証部１０７による署名検証動作はＲＯＭ（セキュリティチップ）に焼かれているため変更することができない。そこで汎用性の高い暗号アルゴリズムを採用し、かつ長期間運用するために鍵長を長く設定する。したがって、通信検証部１０７により検証処理は比較的速度の遅いアルゴリズムとなる。一方、ＯＳプログラムに対する署名検証は、サーバー装置から取得するプログラムに含まれ
るため、任意に変更可能である。したがって、その時点で高速な暗号アルゴリズムを選択すればよい。
【００６９】
〈動作〉
・全体処理
第２の実施形態における処理の流れを説明する。まず、図９のフローチャートを参照して、全体的な処理の流れを説明する。
【００７０】
クライアント装置１００の電源が投入されると（Ｓ５０１）、起動プログラムが実行されて、サーバー装置２００からブート用のプログラムを要求して取得する（Ｓ５０２）。取得したブート用のプログラムによってＯＳプログラムの署名検証を行い（Ｓ５０３）、検証を通過したらＯＳプログラムの実行を開始する（Ｓ５０４）。クライアント装置１００の終了時（ＯＳプログラムの実行終了時）には、終了プログラムが実行されて、サーバー装置にプログラムを要求する（Ｓ５０５）。ＯＳプログラムの更新がない場合には停止処理用プログラムがサーバー装置から送信されて、クライアント装置１００はそれ以上の処理を行わず終了する。一方、ＯＳプログラムの更新がある場合には、更新作業用のプログラムがサーバーから送信される（Ｓ５０７）。クライアント装置１００は、この更新作業用プログラムを用いてＯＳプログラムの更新を行い（Ｓ５０８）、正常に更新が完了したら（Ｓ５０９：ＹＥＳ）実行を停止する。更新に失敗した場合には（Ｓ５０９：ＮＯ）はＯＳの更新を再度行う。
【００７１】
このように本実施形態においては、クライアント装置の起動時には電子署名検証によるＯＳプログラムの検証を行い、ＯＳプログラムの更新作業はクライアント装置の停止処理時に行う。
【００７２】
・サーバー装置の処理
以下では、クライアント装置１００及びサーバー装置２００が行うそれぞれの処理をより詳しく説明する。まず、サーバー装置２００が行う処理を図１０のフローチャートを参照しつつ説明する。
【００７３】
サーバー装置２００は、基本的に、クライアント装置１００からのプログラム要求を受け付けて、適切なプログラムを送信する処理を繰り返す。サーバー装置２００のアップロードプログラム選択部２０２は、クライアント装置１００からのプログラム要求を受信すると（Ｓ６０１）、要求の種類を判断する（Ｓ６０２）。クライアント装置からのプログラム要求がブート用プログラムの要求、すなわちクライアント装置起動時のプログラム要求である場合には、アップロードプログラム選択部２０２は、通常ブート用プログラム２０４をクライアント装置１００へ送信する（Ｓ６０３）。この通常ブート用プログラム２０４は、電子署名が付与されてクライアント装置１００へ送信される。一方、クライアント装置１００からのプログラム要求が更新プログラムの要求、すなわちクライアント装置停止時プログラムの要求である場合には、アップロードプログラム選択部２０２は更新プログラムがあるか否かを判断する（Ｓ６０４）。更新プログラムがない場合には、アップロードプログラム選択部２０２は、停止用プログラム２０９をクライアント装置１００へ送信する（Ｓ６０５）。一方、更新プログラムがある場合は更新作業用プログラム２０５をクライアント装置１００へ送信する（Ｓ６０６）。更新作業用プログラム２０５の送信後は、クライアント装置１００からの更新プログラムの送信要求を待ち（Ｓ６０７）、要求を受けて更新プログラムをクライアント装置１００へ送信する（Ｓ６０８）。
【００７４】
・クライアント装置の処理
次にクライアント装置１００が行う処理を説明する。まず、クライアント装置１００が起動時に行う処理（図９のステップＳ５０１〜Ｓ５０４に相当）を図１１のフローチャー
トを参照しつつ説明する。
【００７５】
クライアント装置１００の電源が投入されると（Ｓ７０１）、まず、マスクロムに格納されている起動プログラムが実行され（Ｓ７０２）、プログラム要求機能１０１ｄによりサーバー装置２００に対するプログラム要求が行われる（Ｓ７０３）。クライアント装置起動時のプログラム要求は通常ブート用プログラム２０４を要求するものであるため、クライアント装置１００は、サーバー装置から通常ブート用プログラム２０４を取得する。取得された通常ブート用プログラム２０４の正当性を検証するために、通信検証部１０７が署名検証を実施する（Ｓ７０４）。ここで署名が一致せず改ざんやなりすましの危険性がある場合には（Ｓ７０５：ＮＯ）、プログラムの実行を停止する（Ｓ７０６）。なお、検証に失敗した場合の動作は本発明では特に規定しない。時間をおいて再度実行しても良いし、管理者に報知する処理を行っても良い。取得したプログラムが署名検証により正当なものであると判断された場合（Ｓ７０５：ＹＥＳ）は、プログラム実行機能１０１ｅにより取得した通常ブート用プログラム２０４を実行する（Ｓ７０７）。
【００７６】
通常ブート用プログラム２０４が実行されると、そのＯＳ検証機能２０４ｄにより、ＯＳ記憶部１０６に格納されているＯＳプログラムの署名検証が実施される（Ｓ７０８）。ここで、署名検証を通過しない場合（Ｓ７０９：ＮＯ）は、ＯＳ記憶部１０６内のＯＳプログラムが改ざんされたおそれがあるため、プログラムを実行せずに終了する（Ｓ７１０）。一方、署名検証を通過した場合（Ｓ７０９：ＹＥＳ）は、通常ブート用プログラム２０４に含まれるプログラム実行機能２０４ｅにより、ＯＳ記憶部１０６内のＯＳプログラムを実行する（Ｓ７１１）。
【００７７】
次にクライアント装置１００が終了時に行う処理（図９のステップＳ５０５〜５１０に相当）を図１２のフローチャートを参照しつつ説明する。
【００７８】
クライアント装置１００では、ＯＳプログラムの実行が終了する（Ｓ８０１）と終了プログラム記憶部１０２内の終了プログラムが実行される（Ｓ８０２）。終了プログラムのプログラム要求機能１０２ｄによりサーバー装置２００に対してプログラムの要求が行われる（Ｓ８０３）。サーバー装置２００から受け取ったプログラムに対しては、通信検証部１０７が署名検証処理を行う（Ｓ８０４）。受け取ったプログラムの検証が失敗した場合（Ｓ８０５：ＮＯ）は、改ざんまたはなりすましのおそれがあるのでそのプログラムを実行せずに終了する（Ｓ８０６）。一方、受け取ったプログラムの検証が成功した場合（Ｓ８０５：ＹＥＳ）は、プログラム実行機能１０２ｅによりそのプログラムを実行する（Ｓ８０６）。
【００７９】
ここでＯＳプログラムの更新が必要ではない場合は、実質的に何も処理を行わない停止用プログラム２０９がサーバー装置２００から送られるので、クライアント装置１００は何も処理をせずに終了することになる（Ｓ８１２）。
【００８０】
一方、ＯＳプログラムの更新が必要な場合には、サーバー装置２００から更新作業用プログラム２０５が送信される。このプログラムが実行されると、更新作業用プログラム２０５に含まれるプログラムダウンロード機能２０５ｄにより、サーバー装置２００に対して新しいＯＳプログラムを要求する（Ｓ８０７）。クライアント装置１００は、受け取ったＯＳプログラムをＯＳ記憶部更新機能２０５ｅによりＯＳ記憶部１０６に格納し（Ｓ８０８）、ＯＳ検証機能２０５ｆによりＯＳ記憶部１０６内のプログラムの署名検証を行う（Ｓ８０９）。ＯＳプログラムが改ざん等されており検証が失敗した場合（Ｓ８１０：ＮＯ）は、再度サーバー装置２００に対して更新プログラムを要求する。一方、ＯＳプログラムの検証が成功した場合（Ｓ８１０：ＹＥＳ）は、そのまま処理を終了する（Ｓ８１１）。
【００８１】
〈実施形態の作用・効果〉
本実施形態によっても、ＯＳプログラムの正当性を保証した上で実行することができる。まず、電源投入時に実行される起動プログラムはマスクロムに格納されており改ざんできないので、この時点までの安全が保証される。起動プログラムはサーバー装置から通常ブート用プログラムを取得するが、通信検証部によって署名検証されるためサーバーとの間の通信もなりすましや改ざんのおそれがない。なお、通信検証部自体はセキュリティチップにより構成されているため安全であり、サーバー装置も前提として安全が確保されている。したがって、取得した通常ブート用プログラムの正当性が保証される。そして、この正当性が保証される通常ブート用プログラムによってＯＳプログラムの署名検証を行い検証が成功した場合にＯＳプログラムを実行するため、実行されるＯＳプログラムの正当性も保証される。
【００８２】
なお、本実施形態では署名検証によりＯＳプログラムを検証しているので、復号処理を行う第１の実施形態と比較してより高速なＯＳの起動が実現できる。また、ＯＳプログラムの更新処理もクライアント装置の停止時に行っているため、クライアントの起動を高速に行える。
【００８３】
また、署名検証処理はサーバー装置から得られるプログラムに対してと、ＯＳ記憶部内のＯＳプログラムに対して行われる。ここで、サーバー装置から得られるプログラムに対する署名検証処理はＲＯＭ（セキュリティチップ）に焼かれているため変更できず長期間運用する必要があるため、汎用性の高いアルゴリズムでかつ鍵長を長くする。つまり、取得したプログラムに対する検証処理は比較的速度の遅いアルゴリズムが必要となる。しかしながら、ＯＳプログラムの署名検証処理はサーバー装置から得られる通常ブート用プログラムに含まれるので、その時点で高速なアルゴリズムを選択することができる。サーバー装置から取得するブート用プログラムとＯＳプログラムとでは、一般にＯＳプログラムの方が大容量である。サイズの大きいＯＳプログラムに対して高速なアルゴリズムを適用できるので、全体の検証時間はより短くなる。
【００８４】
（第３の実施形態）
上記第１，２の実施形態においてＯＳプログラムの更新処理を行っているが、この更新処理が途中で異常終了すると、記憶部内のプログラムは一部が書き換えられ一部は古いままという不整合な状態となる。このような事態が発生した場合、復号処理や署名検証によるＯＳプログラムの検査で異常と判断されてしまいプログラムが起動できなくなる。このような事態に対処するために、クライアント装置のストレージを二重にして古いプログラムを残しておくことも考えられるが、多くの計算機資源を必要となりコストが上昇してしまう。そこで、本実施形態では、クライアント装置に多くの計算機資源を必要とすることなく、ＯＳプログラムの更新処理が失敗した場合にも安全に起動（更新処理の再開）を行えるようにする。
【００８５】
〈構成〉
図１３は本実施形態に係るコンピューターシステムの概略構成を示す図である。本実施形態は第１および第２の実施形態と類似する構成を有するため、異なる部分について主に説明する。本実施形態に係るコンピューターシステムは、複数のクライアント装置３００と、サーバー装置４００とから構成される。各クライアント装置３００はサーバー装置４００と通信可能に構成されている。
【００８６】
クライアント装置３００は、起動プログラム記憶部３０１、終了プログラム記憶部３０２、外部通信部３０４、更新プログラム展開部３０５、ＯＳ記憶部３０６、ＯＳ検査部３０８、暗号処理部３０７を備える。起動プログラム記憶部３０１および終了プログラム記
憶部３０２は、それぞれ、クライアント装置３００の起動時および停止時に実行されるプログラムである起動プログラムおよび終了プログラムを記憶する。これらの記憶部は実体としてはマスクロムである。ＯＳ記憶部３０６はストレージ装置であり、ＯＳプログラムを記憶する。本実施形態においては、ＯＳプログラムは暗号化や電子署名付与されずに平文の状態でＯＳ記憶部３０６に格納される。外部通信部３０４はネットワークを介してサーバー装置４００と通信する機能部である。更新プログラム展開部３０５はサーバー装置４００から取得した新しいＯＳプログラムをＯＳ記憶部３０６に展開する。ＯＳ検査部３０８は、ＯＳ記憶部３０６の所定のアドレスのハッシュ値を求める機能を有する。外部通信部３０４、更新プログラム展開部３０５、ＯＳ検査部３０８は、マスクロムに格納されたプログラムをＣＰＵが実行することで実現される。暗号処理部３０７は、ＴＰＭモジュールなどのセキュリティチップ（耐タンパデバイス）によって実現されるものであり、サーバー装置４００との間で秘匿通信を行う。本実施形態ではクライアント・サーバー間の通信は共通鍵方式による秘匿通信により行う。
【００８７】
なお、暗号処理部３０７の全てを耐タンパデバイスで構成する必要はない。共有鍵（公開鍵暗号方式を採用する場合は秘密鍵）は秘匿化する必要があるので耐タンパデバイスに格納する必要があるが、暗号アルゴリズム（および公開鍵暗号方式を採用する場合は公開鍵）は改ざんされなければ十分なのでマスクＲＯＭに格納すれば十分である。このような構成を採用すれば、耐タンパデバイスの導入を最小限にできコストの上昇を抑えることができる。
【００８８】
図１４はクライアント装置３００の起動プログラム記憶部３０１および終了プログラム記憶部３０２に格納される起動プログラムおよび終了プログラムの機能を説明する図である。起動プログラムのアドレス問い合わせ機能３０１ａは、サーバー装置４００にＯＳプログラムの検査対象アドレス（ハッシュ値を求めるアドレス）を問い合わせる機能である。ハッシュ値算出機能３０１ｂは、サーバー装置４００から取得したアドレスについてのハッシュ値を、ＯＳ検査部３０８を用いて算出する機能部である。ハッシュ値送信機能３０１ｃは、算出したハッシュ値をサーバー装置４００に送信する機能である。ＯＳ実行機能３０１ｄは、ハッシュ値送信に対する応答をサーバー装置４００から取得して、ハッシュ値が正しいと判断された場合にＯＳ記憶部３０６内のＯＳプログラムを実行する機能である。
【００８９】
終了プログラムのプログラムダウンロード機能３０２ａは、サーバー装置４００からＯＳプログラムの更新版を取得する機能である。ＯＳ記憶部更新機能３０２ｂは、サーバー装置４００から取得される更新版のＯＳプログラムをＯＳ記憶部３０６に格納する機能である。なお、後述するようにサーバー装置４００から更新版のＯＳプログラムがブロック単位に分割されて送信されるので、クライアント装置３００においてもブロック単位で取得・更新処理を行う。更新完了通知機能３０２ｃは、ＯＳ記憶部３０６の更新が完了したことをブロック単位で通知する機能である。
【００９０】
サーバー装置４００は、外部通信部４０１、更新プログラム管理部４０２、検査部位決定部４０３、更新プログラム記憶部４０４、クライアントプログラム記憶部４０５、暗号処理部４０６を備える。外部通信部４０１は、ネットワークを介してクライアント装置３００と通信する機能部である。クライアント装置３００との間の通信は、暗号処理部４０６により秘匿化される。更新プログラム管理部４０２は、クライアント装置３００に対するＯＳプログラムの更新処理および更新状況の管理（把握）を行う機能部である。更新プログラム記憶部４０４は、クライアント装置３００において実行するＯＳプログラムに更新がある場合に、最新版のＯＳプログラムを記憶する。クライアントプログラム記憶部４０５は、更新前のＯＳプログラムを記憶する。なお、サーバー装置４００は、全体がセキュリティチップなどを用いて構成されることで、セキュリティが確保される。
【００９１】
更新プログラム管理部４０２についてより詳細に説明する。更新プログラム管理部４０２は、更新プログラムをクライアント装置３００が一度に受信可能なサイズに分割して送信する。また、更新プログラム管理部４０２は、クライアント装置３００における各ブロックの書き換え完了・未完了などを管理する。図１４は、更新プログラム管理部４０２が保持する更新状況テーブルであり、更新プログラム管理部４０２はこの更新状況テーブルを用いてクライアント装置３００の更新状況を記憶する。この更新状況テーブルには、ブロックＩＤ４０２ａごとに、対応する更新プログラム記憶部内のアドレス４０２ｂと、サーバー装置からクライアント装置に更新プログラムを送信したか否かを表す送付済みフィールド４０２ｃ、クライアント装置から書き換え済みの通知を受けたか否かを表す書き換え済みフィールド４０２ｄを含む。送付済みフィールド４０２ｃおよび書き換え済みフィールド４０２ｄの両方が「完了」となっているブロックはクライアント装置において更新完了済みであり、ＯＳ記憶部３０６内のこのブロックには新しいプログラムが格納されていることが分かる。逆に両方が「未実施」となっているブロックにクライアント装置において更新が未完了であり、ＯＳ記憶部３０６内にこのブロックには古いプログラムが格納されていることが分かる。送付済みフィールド４０２ｃが「完了」であり、書き換え済みフィールド４０２ｄが「未実施」のブロックについては、クライアント装置において更新されたか否かが把握不能である。検査部位決定部４０３は、更新プログラム管理部４０２から得られる更新状況を元にクライアント装置３００にどのアドレスのハッシュ値を要求するか決定する機能部である。検査部位決定部４０３は、サーバー装置４００において内容が把握可能なクライアント装置３００のアドレスのうちから、ハッシュ値算出対象のアドレスをランダムに決定する。また、検査部位決定部４０３は、更新プログラム記憶部４０４とクライアントプログラム記憶部４０５を参照して、指定したアドレスにおける正しいハッシュ値を算出する。
【００９２】
〈動作〉
・クライアント停止時（更新処理）
第３の実施形態における処理の流れを説明する。まず、クライアント装置終了時における更新処理を図１６を参照して説明する。
【００９３】
クライアント装置３００においてＯＳプログラムの実行が終了する（Ｓ９０１）と、終了プログラム記憶部３０２内の終了プログラムが実行されて、そのプログラムダウンロード機能３０２ａによりサーバー装置４００へ更新プログラムの有無が問い合わされる（Ｓ９０２）。この要求を受信したサーバー装置４００の更新プログラム管理部４０２は、クライアント装置３００に送信する更新プログラムがあるか判断する（Ｓ９０３）。更新プログラムがない場合（Ｓ９０３：ＮＯ）は、その旨がクライアント装置３００に通知され、クライアント装置３００はそれ以上の処理を行わず停止する（Ｓ９０４）。
【００９４】
更新プログラムがある場合（Ｓ９０３：ＹＥＳ）には、更新プログラム管理部４０２は、ブロック単位に分割された更新プログラムの一部を暗号化してクライアント装置３００へ送信する（Ｓ９０５）。送信が完了したら、更新プログラム管理部４０２は、送信したブロックの送信済みフィールド４０２ｃを「完了」にして、クライアント装置へ送信したことを記憶する。クライアント装置３００は、更新プログラムを受信し、終了プログラムのＯＳ記憶部更新機能３０２ｂによりＯＳ記憶部３０６を更新する（Ｓ９０６）。ＯＳ記憶部３０６の更新が完了したら、更新完了通知機能３０２ｃにより、このブロックの更新が完了した旨を暗号化してサーバー装置４００へ送信する（Ｓ９０７）。更新プログラム管理部４０２は、この更新完了通知を受け取ると、このブロックの書き換え済みフィールドを「完了」にして、クライアント装置において更新が完了したことを記憶する（Ｓ９０８）。更新プログラム管理部４０２は、更新プログラムの全てのブロックについて更新が完了したか判断し、未処理のブロックがある場合（Ｓ９０９：ＮＯ）は送信を繰り返す。
全てのブロックの更新が完了した場合（Ｓ９０９：ＹＥＳ）は、更新処理が完了したことをクライアント装置３００へ通知する（Ｓ９１０）。クライアント装置３００は、この通知を受け取ると停止する（Ｓ９１１、Ｓ９１２）。
【００９５】
このように更新プログラムをブロック単位に分割してクライアント装置３００に送信し、更新完了通知によって更新完了を確認しつつ処理を進めるため、更新処理の途中でクライアント装置３００の電源が切れるなどの事態が発生しても、どのアドレスまで更新処理が完了しているかをサーバー装置４００は把握可能である。たとえば、更新プログラム管理部４０２の更新状況テーブルが図１５の場合を例に説明する。ブロックＩＤ0x0001, 0x0002については、送付済みフィールド４０２ｃ・書き換え済みフィールド４０２ｄの両方が「完了」となっているため、更新プログラムがクライアント装置に送信され、実際にＯＳ記憶部３０６が更新されたことが分かる。ブロックＩＤ0x0003については、送付済みフィールド４０２ｃは「完了」であるものの、書き換え済みフィールド４０２ｄが「未実施」となっている。このブロックに関しては、サーバー装置側ではクライアント装置のＯＳ記憶部３０６内の状態は判断不可能である。ＯＳ記憶部３０６が更新されていない状況もあり得るし、更新されたが更新完了通知を送信できなかったという場合もあり得る。ブロックＩＤ0x0004以降については、送付済みフィールド４０２ｃが「未実施」であるため、クライアント装置３００のＯＳ記憶部３０６は更新前の状態であることが分かる。このように、更新状況テーブルを参照することで、クライアント装置ごとに更新作業が全て正常に完了したか否か、および、全て完了していない場合はどのブロックまで更新が完了しているかを把握できる。
【００９６】
・クライアント起動時（プログラム実行・更新処理再開）
次に、クライアント装置３００の起動時の処理について、図１７のフローチャートを参照しつつ説明する。
【００９７】
クライアント装置３００が起動すると（Ｓ１００１）、起動プログラムが実行されて、そのアドレス問い合わせ機能３０１ａにより、ＯＳ記憶部３０６内のどのアドレスを対象に検査するかをサーバー装置４００に問い合わせる（Ｓ１００２）。この要求を受信したサーバー装置４００の更新プログラム管理部４０２は、更新状況テーブルを参照して検査可能なアドレスをランダムに選択しクライアント装置３００に通知する（Ｓ１００３）。検査可能なアドレスとは、サーバー装置で状態を把握しているアドレス（ブロック）であり、より具体的には更新状況テーブルで送付済みフィールド４０２ｃおよび書き換え済みフィールド４０２ｄの両方が「完了」または両方が「未実施」であるアドレスである。
【００９８】
クライアント装置３００は、サーバー装置４００から指定されたアドレスを対象に、ＯＳ検査部３０８を用いてハッシュ値を算出してサーバー装置４００へ送信する（Ｓ１００４）。クライアント装置３００において算出されたハッシュ値を受信したサーバー装置４００は、そのハッシュ値が想定値と一致するか否か比較して、クライアント装置３００の正当性を検証する（Ｓ１００５）。更新プログラム管理部４０２ではクライアント装置３００のＯＳ記憶部３０６の状態を把握しているので、指定したアドレスについて正しいハッシュ値を算出可能である。クライアント装置３００から送信されたハッシュ値が想定される値と異なる場合（Ｓ１００６：ＮＧ）は、クライアント装置３００は不正な端末であると判断し認証に失敗したことを通知する（Ｓ１００７）。一方、クライアント装置３００から送信された値と一致する場合（Ｓ１００６：ＯＫ）は、クライアント装置が正当なものであると判断できる。このとき、更新プログラム管理部４０２は更新状況テーブルを参照して、クライアント装置において更新処理に未完了な部分があるか判断する（Ｓ１００８）。未完了な部分がない場合（Ｓ１００８：ＮＯ）、サーバー装置４００は、クライアント装置３００に対して、認証成功の通知およびＯＳ記憶部３０６内のＯＳプログラムの実行すべき旨の通知を送信する（Ｓ１００９）。一方、更新処理に未完了な部分がある
場合、すなわち、更新処理の途中である場合（Ｓ１００８：ＹＥＳ）は、サーバー装置４００は、クライアント装置３００に対して、認証成功の通知および更新処理を再開すべき旨の通知を送信する（Ｓ１０１０）。
【００９９】
クライアント装置３００はサーバー装置４００から認証結果を受け取る（Ｓ１０１１）。認証が失敗した場合（Ｓ１０１２：ＮＧ）は、プログラムの実行を中止する（Ｓ１０１３）。認証に成功した場合（Ｓ１０１２：ＯＫ）は、サーバー装置４００からの指示にしたがった動作、すなわち、ＯＳプログラムの実行または更新作業の再開を行う（Ｓ１０１４）
〈実施形態の作用・効果〉
本実施形態においては、クライアント装置３００内のＯＳプログラムのハッシュ値を検証して、クライアント装置の正当性を判断している。クライアント装置３００でＯＳプログラムが改ざんされた場合、ハッシュ値が想定される値と異なるものになるため改ざんを検知できる。なお、ハッシュ値算出対象のアドレスはランダムに決定されるので、クライアント・サーバー間の通信を盗聴して、それに含まれるハッシュ値と同じ値を返すという攻撃も阻止できる。
【０１００】
さらに、本実施形態においては、クライアント装置のＯＳプログラムの更新作業が途中で中断した場合であっても、サーバー装置側で更新状況を把握しているため、ハッシュ値による正当性の検証が可能である。つまり、更新作業が中断した場合もクライアント装置の正当性を検証し、更新処理を再開することができる。
【符号の説明】
【０１０１】
１００，３００  クライアント装置
２００，４００  サーバー装置
１０１，３０１  起動プログラム記憶部
１０２，３０２  終了プログラム記憶部
１０６，３０６  ＯＳ記憶部
２０２  アップロードプログラム選択部
２０３  アップロードプログラム記憶部
２０４  通常ブート用プログラム
２０５  更新作業用プログラム
３０８  ＯＳ検査部
４０２  更新プログラム管理部
４０３  検査部位決定部
【図１】
2011003020.tif 000003
【図２】
2011003020.tif 000004
【図３】
2011003020.tif 000005
【図４】
2011003020.tif 000006
【図５】
2011003020.tif 000007
【図６】
2011003020.tif 000008
【図７】
2011003020.tif 000009
【図８】
2011003020.tif 000010
【図９】
2011003020.tif 000011
【図１０】
2011003020.tif 000012
【図１１】
2011003020.tif 000013
【図１２】
2011003020.tif 000014
【図１３】
2011003020.tif 000015
【図１４】
2011003020.tif 000016
【図１５】
2011003020.tif 000017
【図１６】
2011003020.tif 000018
【図１７】
2011003020.tif 000019