説明

コンピューターシステムおよびプログラム起動方法

【課題】プログラムを安全に起動する技術を提供する。
【解決手段】クライアント装置のストレージにはOSプログラムが暗号化または電子署名付与されて記憶されており、端末起動時に実行されるブートプログラムによってサーバー装置からプログラムを取得し実行する。サーバー装置から取得されるプログラムは、実行対象プログラムを復号または署名検証する検証プログラムであり、この検証プログラムによりOSプログラムの安全が確認された後にこのプログラムを実行する。また、OSプログラムを更新する場合には、サーバー装置は、更新プログラムをダウンロードしてから再起動するプログラムをクライアント装置に送信する。サーバー装置の安全が確保されていれば、クライアント・サーバー間の通信の安全を確保するだけでクライアント装置に特別な装置を設けなくても、OSプログラムを安全に起動することができる。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プログラムを安全に実行可能なコンピューターシステムおよびプログラム起動方法に関する。
【背景技術】
【0002】
コンピューターシステムの普及に伴い、セキュリティ保証の重要性がますます高まっている。プログラムとして機能するソフトウェアコードそのものを保護するために、物理的または仮想的に作業領域を分割して保護する方法が考えられている(特許文献1)。また、TCG(Trusted Computing Group)は、TPM(Trusted Platform Module)と呼ばれるセキュリティチップの規格を策定している。TPMを用いることで、ハードウェアの改変やソフトウェアの改ざんがないことを連鎖的に検証してプログラムを起動することで、セキュリティを確保できる。
【0003】
ソフトウェアを実行するシステムでは、製品出荷後でもソフトウェアを更新することで、機能の修正や追加を行うことができる。このような場合はネットワークを介して修正されたプログラムを取得することになるが、取得したプログラムが改ざんされていないことを検証する必要がある。電子証明書を利用して、かつ端末に常駐するアプリケーションから隠蔽することで安全なプログラムの取得および実行を実現する方法が提案されている(特許文献2)。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2004−199693号公報
【特許文献2】特表2007−528064号公報
【特許文献3】特開2002−24175号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、特許文献1に記載された方法のように、端末に特殊なハードウェアを導入すると、数多くの端末が存在するシステムでは導入コストが肥大してしまう。たとえば、自動車には多数のECU(Electronic Control Unit)が搭載されており、ECUの搭
載数は今後ますます増加することが予想される。このような多数のECUの全てに特殊なハードウェアを導入することはコストの観点からも望ましくない。
【0006】
また、特許文献2に記載された方法は、資源に乏しいコンピューターを対象としたダウンロードを想定しているが、ある程度の大きさを持つプログラムを対象としているため即時応答性などダウンロード時間を短くしたいという要求を満たすことは難しい。
【0007】
本発明はこのような問題点を考慮してなされたものであり、その目的は、低コストにコンピューターにおいてプログラムを安全に起動する技術を提供することにある。
【課題を解決するための手段】
【0008】
上記目的を達成するために本発明では、クライアント装置の起動時に、サーバー装置から得られる情報に基づいて実行対象プログラムの正当性を検証してから、そのプログラムを実行する。これにより、実行対象のプログラムが改ざんされているか否かを判別可能である。
【0009】
〈第一の態様〉
本発明の第一の態様に係るコンピューターシステムは、互いに通信可能なクライアント装置とサーバー装置とから構成されるコンピューターシステムである。クライアント装置は、装置起動時に実行されるプログラムであるブートプログラムを記憶する第1の記憶手段と、実行対象のプログラムを記憶する第2の記憶手段とを有する。サーバー装置は、前記実行対象のプログラムを検証および起動するための検証プログラムを記憶する記憶手段を有する。ここで、ブートプログラムは、サーバー装置からプログラムを取得して実行する処理を含む。また、サーバー装置は、クライアント装置のブートプログラムからの要求に応じて検証プログラムをクライアント装置に送信し、クライアント装置は、取得した検証プログラムを用いて実行対象のプログラムを検証し、検証に成功した後に当該プログラムを実行する。
【0010】
クライアント装置に記憶されている実行対象プログラムの正当性を検証する手法として、復号処理による方法と電子署名による方法とを挙げることができる。
【0011】
プログラム検証の第1の手法は、実行対象プログラムを暗号化された状態で第2の記憶手段に記憶しておき、検証プログラムはそのプログラムを復号するという手法である。実行対象プログラムが暗号化されて保存されている場合は、正しく復号できた場合にプログラムが改ざんされていないと判断できる。第三者によって改ざんが行われた場合には正しく復号できないので、改ざんを検知可能である。さらに、第三者から実行対象プログラムを秘匿化することができる。
【0012】
ブートプログラムの安全性を保証するためには、第1の記憶手段として書き換え不可能あるいは書き換えが困難な記憶手段を採用すればよい。一方、実行対象プログラムを記憶する第2の記憶手段としては、プログラム更新などを可能とするために書き換え可能な記憶手段を採用することが好ましい。
【0013】
また、サーバー装置から取得されるプログラムの正当性を検証するためには、クライアント・サーバー間の通信に秘匿通信または署名付き通信を利用することが好ましい。このような秘匿通信または署名付き通信によりサーバー装置から送信されるプログラム等の正当性を検証できる。なお、サーバー装置からクライアント装置への通信に公開鍵暗号方式による署名付き通信を採用することが好ましい。この場合は、クライアント装置にサーバー装置の公開鍵を格納するだけで良く、公開鍵は秘匿化する必要がないので改ざん不可能なマスクロムなどに格納しておけば十分なためである。つまり、クライアント装置側に特殊な装置を要しないという利点がある。ただし、共通鍵暗号方式を採用して秘匿通信を行ったり、クライアント装置の秘密鍵を要する公開鍵暗号方式の通信(サーバーからクライアントへの秘匿通信およびクライアントからサーバーへの署名付き通信)を行う場合はクライアント装置側にセキュリティチップ(耐タンパデバイス)を設ける必要があるが、本発明はこのような方式を除外するものではない。
【0014】
第1の手法においては、実行対象のプログラムをクライアント装置に暗号化して記憶しているので、第三者がその内容を知ることができないという利点がある。ただし、この暗号化プログラムを復号するための検証プログラム(ここでは復号処理プログラムという)がクライアント・サーバー間で通信される。この通信が平文で行われると、第三者が復号処理プログラムを取得可能であり、暗号化プログラムを復号できてしまう。したがって、実行対象プログラムを第三者から秘匿するためには、復号処理プログラムを通信により入手した後は実行対象プログラムの暗号鍵または暗号アルゴリズムを変更することが好ましい。そのために、クライアント装置は、第2の記憶手段に記憶されているプログラムとは異なる暗号アルゴリズムまたは異なる暗号鍵を用いて暗号化された、実行対象のプログラムをサーバー装置から取得し、第2の記憶手段に格納する機能を有することが好ましい。
また、サーバー装置は、前記クライアント装置へ送信した実行対象のプログラムを復号するための暗号アルゴリズムおよび暗号鍵を記憶しておき、次に前記クライアント装置のブートプログラムからプログラムの要求があったときに、クライアント装置に記憶されている実行対象のプログラムに対応した検証プログラムをクライアント装置へ送信することが好ましい。この場合、新しい暗号方式による暗号化プログラムの取得は、クライアント装置の実行終了時に行うことが処理負荷の観点から好ましい。
【0015】
また、上記のように実行対象プログラムの暗号鍵または暗号アルゴリズムを変更する場合、サーバー装置は暗号化方法に対応した復号処理プログラムをクライアント装置に送信しなければならない。そのため、サーバー装置はクライアント装置へ送信した実行対象プログラムを復号するための暗号アルゴリズムおよび暗号鍵を記憶する。そして、クライアント装置のブートプログラムからプログラムの要求があったときに、クライアント装置に記憶されている実行対象プログラムに対応した復号処理プログラムをクライアント装置に送信する。
【0016】
また、実行対象プログラムを更新する場合は、クライアント装置のブートプログラムがサーバー装置にプログラムを要求したときに、サーバー装置が更新作業用プログラムをクライアント装置に送信すればよい。ここで、更新作業用プログラムは、新しい実行対象プログラムを通信により取得して第2の記憶手段に格納し、その後に再起動を行うプログラムである。クライアント装置のブートプログラムは、サーバー装置から取得したプログラムを実行するので、更新作業用プログラムに含まれる処理、すなわち、更新および再起動がクライアント装置において実行される。また、ここではブートプログラムによるサーバー装置へのプログラム要求に対してサーバー装置が更新作業用プログラムを送信しているが、クライアント装置の終了時に実行されるプログラム(停止処理プログラム)がサーバー装置へプログラムを要求し、サーバー装置はこの要求に対して更新作業用プログラムを送信しても構わない。起動前に更新を行う手法は更新があった場合に新しいプログラムを実行できるというメリットがある一方、プログラム起動までに時間を要するというデメリットがある。停止前に更新を行う手法は、プログラム起動が早くなるというメリットがある一方、更新があった場合に古いプログラムを実行してしまうというデメリットがある。したがって、更新の重要性に応じて起動前もしくは停止前のいずれで更新処理を行うか切り替えることも好ましい。
【0017】
プログラム検証の第2の手法は、実行対象プログラムを電子署名が付与された状態で第2の記憶手段に記憶しておき、検証プログラムは署名検証するという手法である。実行対象プログラムに署名が付与されている場合は、プログラム本体から算出される認証コードと付与された署名とが一致する場合にプログラムが改ざんされていないと判断できる。実行対象プログラムを暗号化して記憶しておき実行時に復号処理を施す第1の手法は、プログラムの起動に比較的時間を要する。これに対して署名検証による本手法は、実行対象プログラムが平文の状態で格納されるため第三者がその内容を知ることができてしまうが、より高速に検証処理が実施できるという利点がある。
【0018】
第2の手法には、サーバー装置から取得した検証プログラムに対する検証と、第2の記憶手段に記憶されている実行対象プログラムに対する検証の2つの検証動作がある。ここで、検証プログラムに対する検証処理は、クライアント装置の第1の記憶手段に格納されるものであるため、変更できない。そこで、長期間運用するために、鍵長を長くするなど堅牢なプログラムを用いる必要があり、比較的処理速度が遅くなる。これに対して実行対象プログラムの検証は、サーバー装置から送られる検証プログラムによって行われるので変更が可能である。そこで、その時点において高速な暗号アルゴリズムを用いることが好ましい。検証プログラムは実行対象プログラムと比較してサイズが小さいので、検証プログラムの検証に低速なアルゴリズムを利用し、実行対象プログラムに高速なアルゴリズム
を利用することで、検証処理に要する全体の時間は短くすることができる。
【0019】
第2の手法においても、ブートプログラムを記憶する第1の記憶手段として書き換え不可能または書き換えが困難な記憶手段を採用し、実行対象プログラムを記憶する第2の記憶手段として書き換え可能な記憶手段を採用することが好ましい。また、クライアント・サーバー間の通信も、第1の手法と同様に、秘匿通信または署名付き通信を利用することが好ましい。
【0020】
また、第2の手法においても、第1の手法で述べたのと同様の手法により実行対象プログラムの更新を行うことが好ましい。本手法においても、第1の手法の場合と同様に種々のタイミングで更新処理を行っても良い。ただし、第2の手法においてはプログラムを高速に起動することを目的としているので、クライアント装置の実行終了時にサーバー装置から更新作業用プログラムを取得して更新処理を行うことが好ましい。
【0021】
〈第二の態様〉
本発明の第二の態様では、サーバー装置が実行対象プログラムの任意のアドレスについてハッシュ値を要求し、これが正しいハッシュ値である場合に実行対象プログラムが正しいと判断する。サーバー装置側では正しいハッシュ値を把握できるように、クライアント装置の第2の記憶手段に格納されているプログラムの状態を管理する管理手段を設けることが好ましい。
【0022】
第二の態様では、実行対象プログラムの更新処理が失敗に終わった場合にも正常に動作可能とする。更新処理が途中で異常終了した場合は、第2の記憶手段内に格納されている実行対象プログラムは一部が書き換え済みで、一部が古いままとなる。このような状態で復号処理や署名検証などの検証動作を行っても検証を通過せず、第一の態様による方法ではクライアント装置が起動できなくなる。そこで、本手法のようにサーバー装置側でクライアント装置のプログラムの更新状況を管理し、内容を把握しているアドレスについてのハッシュ値をクライアント装置に要求する。このように更新状況をサーバー装置側で管理し、ハッシュ値を用いたプログラム検証を行うため、更新処理が途中で異常終了した場合であってもクライアント装置の正当性を検証可能である。
【0023】
本態様において、実行対象のプログラムを更新する場合は、サーバー装置が新しい実行対象プログラムを所定のサイズに分割して1つずつクライアント装置へ送信し、クライアント装置は、取得した更新プログラムで第2の記憶手段の書き換えが完了した場合に、その旨をサーバー装置へ通知することが好ましい。そして、サーバー装置の管理手段が、クライアント装置からの書き換え完了通知に基づいて、クライアント装置において実行対象プログラムの更新がどの部分まで完了したかを管理することが好ましい。つまり、管理手段は、クライアント装置において更新が完了したアドレス領域(更新プログラムを送信しかつ書き換え完了通知を受領したアドレス領域)、更新が未完了なアドレス領域(更新プログラムを送信していないアドレス領域)、更新の完了・未完了が不明なアドレス領域(更新プログラムを送信したが書き換え完了通知を受領していないアドレス領域)とを管理することが好ましい。このような構成を採用することで、クライアント装置における実行対象プログラムが、どの部分まで更新が完了し、どの部分は更新が行われていないかが分かる。また、どの部分の更新中に異常終了が発生したかも分かる。そこで、サーバー装置は、更新完了または未完了と判断できるアドレスを指定してクライアント装置にハッシュ値を要求することができる。なお、ハッシュ値算出対象のアドレスは、更新が完了または未完了と把握されるアドレスの中からランダムに決定されることが好ましい。
【0024】
クライアント装置において、実行対象プログラムの更新処理が完了していない場合(途中で中断した場合)は、指定されたアドレスについてのハッシュ値に基づく検証が成功し
た後に、サーバー装置が更新処理を再開することが好ましい。一方、実行対象プログラムの更新処理が正常に完了している場合には、上記検証が成功した後に、実行対象プログラムを実施すべき旨の指示をサーバー装置からクライアント装置に送信する。
【0025】
このようにして、第二の態様では実行対象プログラムの更新処理が途中で異常終了した場合でも、クライアント装置に記憶されている実行対象プログラムを検証できる。なお、更新処理が途中で異常終了した場合の対処方法として、記憶手段を二重にしておき更新に失敗した場合にはロールバックする手法も存在するが、多くの計算機資源が必要となる。本態様では、多くの計算機資源を必要としないという利点がある。
【0026】
なお、本発明は、上記手段の少なくとも一部を有するコンピューターシステムとして捉えることができる。また、本発明は、上記処理の少なくとも一部を含むプログラム起動方法、またはその方法を実行するプログラムとして捉えることもできる。上記手段および処理の各々は可能な限り互いに組み合わせて本発明を構成することができる。
【発明の効果】
【0027】
本発明によれば、コンピューターにおける安全なプログラム起動を低コストに実現できる。
【図面の簡単な説明】
【0028】
【図1】第1の実施形態に係るコンピューターシステムの概略構成を示す図。
【図2】第1の実施形態における各プログラムが有する機能を説明する図。
【図3】第1の実施形態におけるクライアント端末起動から停止までの全体的な処理の流れを示すフローチャート。
【図4】第1の実施形態におけるサーバー装置が行う処理の流れを示すフローチャート。
【図5】第1の実施形態におけるクライアント装置が端末起動時に行う処理の流れを示すフローチャート。
【図6】第1の実施形態におけるクライアント装置が端末停止時に行う処理の流れを示すフローチャート。
【図7】第2の実施形態に係るコンピューターシステムの概略構成を示す図。
【図8】第2の実施形態のおける各プログラムが有する機能を説明する図。
【図9】第2の実施形態におけるクライアント装置起動から停止までの全体的な処理の流れを示すフローチャート。
【図10】第2の実施形態におけるサーバー装置が行う処理の流れを示すフローチャート。
【図11】第2の実施形態におけるクライアント装置が端末起動時に行う処理の流れを示すフローチャート。
【図12】第2の実施形態におけるクライアント装置が端末停止時に行う処理の流れを示すフローチャート。
【図13】第3の実施形態に係るコンピューターシステムの概略構成を示す図。
【図14】第3の実施形態における各プログラムが有する機能を説明する図。
【図15】第3の実施形態における更新プログラム管理部が有するクライアント装置の更新状況を記憶するためのテーブルの例。
【図16】第3の実施形態におけるクライアント装置停止時における処理の流れを示す図。
【図17】第3の実施形態におけるクライアント装置起動時における処理の流れを示す図。
【発明を実施するための形態】
【0029】
以下に図面を参照して、この発明の好適な実施の形態を例示的に詳しく説明する。
【0030】
(第1の実施形態)
〈構成〉
図1は本実施形態に係るコンピューターシステムの概略構成を示す図である。本実施形態に係るコンピューターシステムは、複数のクライアント装置100と、サーバー装置200とから構成される。各クライアント装置100はサーバー装置200と通信可能に構成されている。本システムを車載システムに適用した場合、クライアント装置100は個々のECU(Electronic Control Unit)に相当するものであり、クライアント装置10
0は計算機資源の乏しい装置である。サーバー装置200はシステム内に1台のみあればよいものであるため、豊富な計算機資源を備えセキュリティが確保された装置として構成することができる。サーバー装置200は、既存の車載システムに新しい装置として追加されても良いが、カーナビゲーション装置などの汎用的な処理を行う装置の一機能として実装されても良い。なお、本実施形態に係るコンピューターシステムは、車載システムだけでなくその他の任意にシステムに対して適用することができる。
【0031】
クライアント装置100およびサーバー装置200は、ハードウェアの観点からは、CPU(中央演算処理装置)、RAM、ROM、ストレージ装置、ネットワークインタフェース装置などから構成される。後述するように改ざんを防止するためにROMには書き換え不可能なマスクROMを採用することが好ましい。ストレージ装置としては、フラッシュメモリやHDD(Hard Disk Drive)、SSD(Solid State Drive)などを採用できる。また、クライアント装置100は後述するようにブート時にサーバー装置200へアクセスするのでネットワークブート可能な構成とする。たとえば、ネットワークインタフェース装置にPXE(Preboot eXcution Environment)に準拠したプログラムを搭載すればよい。また、サーバー装置200はクライアント装置に適切なプログラムを配信するTFTPサーバおよびクライアント装置にアドレスを割り当てるDHCPサーバー(またはBOOTPサーバー)として動作すればよい。
【0032】
クライアント装置100は、コストを抑えるために特殊な機器をできるだけ利用せずに構成する。セキュリティ確保のためにはTPMなどのハードウェア耐タンパ性を有するセキュリティチップを用いてセキュアブート機能を用いればよいが、クライアント装置の数が多い環境では個々のクライアントに特殊なハードウェアを導入するとコストが高くなってしまう。本実施形態ではクライアント装置側にセキュリティチップなどのハードウェアを導入せずに、クライアント装置の安全なプログラム実行および安全なプログラム更新を実現する。なお、サーバー装置200はシステム内に一台のみでよいので、TPMモジュールなどによってセキュリティが確保された構成を採用する。
【0033】
以下で説明するクライアント装置100およびサーバー装置200の各機能部は、ROMやストレージ装置内に格納されているプログラムをCPUが実行することにより実現される。ただし、これらの機能の内の一部については、専用のハードウェアによって構成しても構わない。
【0034】
クライアント装置100は、起動プログラム記憶部101、終了プログラム記憶部102、公開鍵記憶部103、外部通信部104、ダウンロードプログラム展開・実行部105、OS記憶部106を含む。起動プログラム記憶部101は、クライアント装置100の電源投入時に実行される起動プログラム(ブートプログラム)を記憶する。終了プログラム記憶部102は、クライアント装置100の終了時に実行されるプログラムを記憶する。公開鍵記憶部103は、サーバー装置200の公開鍵を記憶する。これらの各記憶部は実体としてはマスクロムである。外部通信部104はネットワークを介してサーバー装置200と通信する機能部である。ダウンロードプログラム展開・実行部105は、サー
バー装置から取得(ダウンロード)したプログラムの署名検証を行い、RAMに展開して実行する機能部である。外部通信部104およびダウンロードプログラム展開・実行部105は、マスクROMに記憶されたプログラムをCPUが実行することによって実現される。
【0035】
OS記憶部106は、クライアント装置100が実行するシステムプログラム(OS:オペレーティングシステム)を記憶する。OS記憶部106は、実体としてはストレージ装置である。本実施形態においては、OS記憶部106にOSプログラムが暗号化されて記憶されている。なお、本実施形態ではクライアント装置が安全に実行すべきプログラムがOSプログラムである例を説明しているが、実行対象のプログラムはOSである必要はなく任意のプログラムであって構わない。
【0036】
サーバー装置200は、外部通信部201、アップロードプログラム選択部202、アップロードプログラム記憶部203、更新プログラム記憶部206、暗号化部207、暗号方法記憶部208を含む。外部通信部201は、ネットワークを介してクライアント装置100と通信する機能部である。本実施形態においては、サーバー装置200からクライアント装置100への通信は、公開鍵暗号方式による電子署名付き通信により行う。アップロードプログラム選択部202は、クライアント装置100からプログラムを要求されたときに、どのプログラムをクライアント装置100へ送信するかを選択する機能部である。アップロードプログラム記憶部203は、クライアント装置100に送信されるプログラムを記憶するものであり、通常ブート用プログラム204と更新作業用プログラム205を記憶する。通常ブート用プログラム204は、クライアント装置100においてOS記憶部106に格納されているOSプログラムを検証・実行するためのプログラムである。更新作業用プログラム205は、クライアント装置100において新しいOSプログラムを取得してOS記憶部106に格納するためのプログラムである。更新プログラム記憶部206は、クライアント装置100のOSプログラムの最新版を記憶する。更新プログラム記憶部206に新しいバージョンのOSプログラムを格納するためには、サーバー装置200が安全の確保された通信によって外部装置から新しいOSプログラムを取得する必要があるが、電子署名などの認証技術によって達成すればよい。暗号化部207は、更新プログラム記憶部206に記憶されている更新プログラムに所定の暗号アルゴリズムおよび暗号鍵を適用して暗号化する。暗号方式としてはAESやトリプルDESなどの共通鍵暗号方式、RSAや楕円曲線暗号などの公開鍵暗号公式などいずれの手法であっても良い。ただし、クライアント装置のOSプログラム実行前に復号処理を行うことを考慮すると、より高速な共通鍵暗号方式を採用することが好ましい。暗号方法記憶部208は、クライアント装置100のOS記憶部106に格納されている暗号化されたOSの、暗号アルゴリズムおよび暗号鍵を記憶する。なお、クライアント装置ごとに暗号アルゴリズム等が異なるので、暗号方法記憶部208はそれぞれにクライアント装置に対する暗号アルゴリズム等を記憶する。
【0037】
図2は、本実施形態における各種のプログラムが有する機能を説明する図である。図2(a)はクライアント装置100に格納されるプログラムの機能を説明する図である。起動プログラム記憶部101に格納されている起動プログラムは、プログラム要求機能101a、署名検証機能101b、および展開プログラム実行機能101cを有する。プログラム要求機能101aは、サーバー装置200に対してプログラムを要求する。このプログラム要求は、クライアント端末の識別子(ID)と起動時のプログラム要求である旨の通知を伴う。署名検証機能101bは、サーバー装置200から取得したプログラムに付されている署名を、公開鍵記憶部103に格納されているサーバー装置200の公開鍵を利用して検証する。展開プログラム実行機能101cは、サーバー装置200から取得したプログラムをRAMに展開して実行する機能である。もちろん、取得したプログラムの署名検証に成功した場合のみプログラムを実行する。
【0038】
終了プログラム記憶部102に格納されている終了プログラムは、プログラムダウンロード機能102a、署名検証機能102b、OS記憶部更新機能102cを有する。プログラムダウンロード機能102aは、OS記憶部106に記憶されている暗号化されたOSプログラムとは異なる暗号アルゴリズムまたは暗号鍵で暗号化されたOSプログラムをサーバー装置200から取得する機能である。署名検証機能102bは、サーバー装置200から取得したデータ(暗号化OSプログラム)に付された署名を、公開鍵記憶部103に格納されているサーバー装置200の公開鍵を利用して検証する。OS記憶部更新機能102cは、署名検証に成功した場合に、サーバー装置200から新たに取得したOSプログラムでOS記憶部106を更新する。
【0039】
図2(b)は、サーバー装置200に格納されるプログラムの機能を説明する図である。アップロードプログラム記憶部203に格納されている通常ブート用プログラム204は、OS復号機能204a、プログラム展開機能204b、展開プログラム実行機能204cを有する。OS復号機能204aは、クライアント装置100のOS記憶部106に格納されている暗号化されたOSプログラムを復号する機能である。OS復号機能204aは、OS記憶部106に格納されている暗号アルゴリズムおよび暗号鍵に対応する必要がある。このOS復号機能204aにより復号処理が成功した場合は、OS記憶部106に格納されているOSプログラムは改ざんされていないことが分かる。プログラム展開機能204bは、復号したOSプログラムをRAMに展開する機能である。展開プログラム実行機能204cは、RAM上に展開されたOSプログラムを実行する機能である。このように、通常ブート用プログラムをクライアント装置100で実行することで、OS記憶部106内に格納されているOSプログラムの検証およびその実行を実現できる。
【0040】
アップロードプログラム記憶部203に格納されている更新作業用プログラム205は、プログラムダウンロード機能205a、OS記憶部更新機能205b、再起動機能205cを有する。プログラムダウンロード機能205aは、サーバー装置200に更新されたOSプログラムを要求する機能である。OS記憶部更新機能205bは、サーバー装置200から新たに取得したOSプログラムでOS記憶部106を更新する。再起動機能205cは、クライアント装置100を再起動する機能である。
【0041】
〈動作〉
・全体処理
第1の実施形態における処理の流れを説明する。まず、図3のフローチャートを参照して、全体的な処理の流れを説明する。
【0042】
クライアント装置100の電源が投入されると(S101)、起動プログラムが実行されて、サーバー装置200に対してプログラムを要求する(S102)。サーバー装置200からクライアント装置100に送信されるプログラムは状況により変化し、更新プログラムがない場合には通常ブート用プログラム204が送信され、更新プログラムがある場合には更新作業用プログラム205が送信される。
【0043】
クライアント装置100がサーバー装置200から更新作業用プログラム205を取得した場合(S103)は、この更新作業用プログラム205をクライアント装置100が実行することでOSの更新を行う(S104)。そして、更新終了後に再起動する(S105)ので、再起動後に再びサーバーにプログラムを要求することになる(S102)。
【0044】
クライアント装置100が有するOSプログラムが最新のものである場合は、サーバー装置200から通常ブート用プログラム204がクライアント装置に送信される(S106)。クライアント装置100は通常ブート用プログラム204を実行してOS記憶部1
06内のOSプログラムを復号処理する(S107)。そして、正常に復号できた場合にはOSプログラムを実行する(S108)。
【0045】
OSプログラムの実行を終了するときは終了プログラムが実行され、サーバー装置からOS記憶部106に記憶されているものとは異なる方法により暗号化されたOSプログラムを取得する(S109)。クライアント装置100は取得した暗号化OSをOS記憶部106に格納して(S110)、端末の処理を終了する(S111)。
【0046】
・サーバー装置の処理
以下では、クライアント装置100およびサーバー装置200が行うそれぞれの処理をより詳しく説明する。まず、サーバー装置200が行う処理を図4のフローチャートを参照しつつ説明する。
【0047】
サーバー装置200は、基本的に、クライアント装置100からのプログラム要求を受けて、適切なプログラムを送信する処理を繰り返す。サーバー装置200のアップロードプログラム選択部202は、クライアント装置100からのプログラム要求を受信すると(S201)、要求の種類を判断する(S202)。すなわち、アップロードプログラム選択部202は、プログラム要求がクライアント端末起動時のものであるかクライアント端末停止時のものであるかを判断する。プログラム要求が端末起動時のものである場合には、アップロードプログラム選択部202はさらに更新プログラムがあるか否かを判断する(S203)。更新プログラムがない場合には、暗号方法記憶部208を参照して要求元のクライアント端末に格納されている暗号化OSを復号するための復号処理機能を有する通常ブート用プログラム204をクライアント装置100に送信する(S204)。送信する通常ブート用プログラム204には電子署名が付与される。一方、ステップS203の判定で更新プログラムがある場合には、アップロードプログラム選択部202はクライアント装置100に対して更新作業用プログラム205を送信する(S205)。送信する更新作業用プログラムには電子署名が付与される。そして、クライアント端末からの更新プログラムの要求を待つ(S206)。この要求を受信したら、最新のOSプログラムを暗号化部207によって暗号化する(S207)。この時の、暗号方法(暗号アルゴリズムおよび暗号鍵)はクライアント端末の識別子と関連付けて暗号方法記憶部208に記憶する。アップロードプログラム選択部202はさらに暗号化されたプログラムをクライアント端末に送信する(S208)。また、ステップS202での判定で要求の種類がクライアント端末停止時のものである場合には、ステップS207に進み最新のOSプログラムを異なる暗号方法で暗号化してクライアント端末に送信する。
【0048】
・クライアント装置の処理
次にクライアント装置100が行う処理を説明する。まず、クライアント装置100が起動時に行う処理(図3のステップS101〜S105およびS101〜S108に相当)を図5のフローチャートを参照しつつ説明する。
【0049】
クライアント装置100の電源が投入されると(S301)、まず、マスクロムに格納されている起動プログラムが実行され(S302)、プログラム要求機能101aによりサーバー装置200に対するプログラム要求が行われる(S303)。クライアント装置100は、サーバー装置200から受け取ったプログラムを、起動プログラムの署名検証機能101bによって検証する(S304)。ここで、署名検証を通過しない場合(S305:NO)は、取得したプログラムはサーバー装置200からのものではない、または、改ざんされたおそれがあるため、プログラムの実行を中止する(S306)。なお、検証に失敗した場合の動作は本発明では特に規定しない。時間をおいて再度実行しても良いし、管理者に報知する処理を行っても良い。取得したプログラムが署名検証により正当なものであると判断された場合(S305:YES)は、起動プログラムの展開プログラム
実行機能101cにより、取得したプログラムをRAMに展開して実行する(S307)。
【0050】
サーバー装置200から受け取ったプログラムが更新作業用プログラム205の場合は、そのプログラムダウンロード機能205aにより、サーバー装置200へ更新プログラムを要求する(S308)。そして、サーバー装置200から受信された新しいバージョンのOSプログラムは、OS記憶部更新機能205bによりOS記憶部106に格納される(S309)。その後、再起動機能205cによりクライアント端末が再起動される(S310)。再起動後はステップS302に戻り、次のプログラム取得では通常ブート用プログラム204がサーバー装置200から得られることになる。
【0051】
ステップS207においてサーバー装置200から受け取ったプログラムが通常ブート用プログラム204の場合は、そのOS復号機能204aによりOS記憶部106内の暗号化OSプログラムを復号する(S311)。そして、復号したOSプログラムをプログラム展開機能204bによりRAMに展開し(S312)、展開したOSプログラムを展開プログラム実行機能204cにより実行する(S313)。OS記憶部106内のOSプログラムが改ざんされていた場合は、復号処理が正常に完了せず改ざんが検知できる。もちろん、改ざんが検知された場合はOSプログラムの実行はしない。このようにして、実行するOSプログラムの正当性を担保できる。
【0052】
次にクライアント装置100が終了時に行う処理(図3のステップS109〜S111に相当)を図6のフローチャートを参照しつつ説明する。
【0053】
クライアント装置100では、OSプログラムの実行が終了する(S401)と終了プログラム記憶部102内の終了プログラムが実行される(S402)。終了プログラムのプログラムダウンロード機能102aによりサーバー装置200に対する暗号化OSプログラムの要求が行われる(S403)。サーバー装置200から受け取ったプログラムは、署名検証機能102bによって検証される(S404)。ここで、署名検証を通過しない場合(S405:NO)は、取得したプログラムがサーバー装置200からのものではない、または、改ざんされたものであるおそれがあるため、OS記憶部106の更新処理を行わずに処理を終了する(S406)。不正プログラム受信時は、再度プログラムを要求したり、管理者に報知しても良い。一方、取得した暗号OSプログラムが署名検証により正当なものであると判断された場合(S406:YES)は、OS記憶部更新機能102cにより受信したプログラムをOS記憶部106に格納する。
【0054】
〈実施形態の作用・効果〉
本実施形態によれば、クライアント装置側にはセキュリティチップなどの特殊な装置を導入することなく、OS記憶部に格納されているOSプログラムを安全に実行できる。また、クライアント装置のOSプログラムの更新も安全に行うことができる。したがって、クライアント装置において改ざんされたプログラムが実行されることを防止できる。
【0055】
クライアント装置の起動時に安全が確保される理由を順をおって説明する。まず、電源投入時に実行される起動プログラムはマスクロムに格納されており改ざんできないため、起動プログラムの安全性が確保される。したがって、電源投入からプログラム取得処理までの間(図3のS101〜S102)に脅威は存在しない。次に、サーバー装置200から取得されたプログラムには公開鍵暗号方式の電子署名が付されており、サーバー装置の公開鍵で検証するため、取得したプログラムが改ざんされていないことが保証される。なお、サーバー装置200のセキュリティが確保されていることは前提である。これにより、サーバー装置200から取得したプログラムが安全であることが保証される。すなわち、図3のステップS103、S106までに脅威が存在しない。
【0056】
OS記憶部106に記憶されている暗号化OSを起動する際には、サーバー装置200から得られた通常ブート用プログラムによって復号処理をして、正常に復号できた場合のみOSプログラムを実行している。したがって、このOSプログラムの正当性も保証される(図3のS106〜S108まで安全)。
【0057】
なお、更新作業用プログラムによって取得される暗号化OSに対する検証処理は施していない。したがって、クライアント装置100のOS記憶部106に改ざんされた暗号化OSが格納される可能性はある。しかしながら、この場合も通常ブート用プログラムで暗号化OSの復号処理を行うときに改ざんが検知できるためクライアント装置の安全は確保される。もちろん、改ざんされたOSプログラムがOS記憶部106に格納されないように、更新作業用プログラム205にも署名検証機能を持たせ、サーバー装置200から取得される暗号化OSに対する署名検証を行うことも好ましい。ただし、本実施形態においてはクライアント装置起動時に更新処理を行っているため、署名検証処理を含ませると更新作業がある場合に起動までに時間が掛かってしまうというデメリットがある。したがって、セキュリティ要求と性能要求を考慮して署名検証動作を含めるか否かを適宜設計すればよい。
【0058】
また、本実施形態においてはOS記憶部106に格納されているOSプログラムは暗号化されているため、第三者に対してその内容を秘匿できる。ただし、OS復号機能204aを含む通常ブート用プログラム204は、クライアント・サーバー間を平文の状態で通信される。したがって、第三者がこの通常ブート用プログラム204を盗聴することで、OS記憶部106に格納されている暗号化OSを復号して内容を知ることができてしまう。そこで、クライアント装置100の終了時に異なる暗号アルゴリズムまたは暗号鍵で暗号化されたOSプログラムを取得してOS記憶部106に格納することで、電源がオフされた時に第三者がその中身を知ることができない。
【0059】
(第2の実施形態)
第1の実施形態においては、クライアント装置の起動時にOSプログラムの復号処理や更新処理を行っているため、起動に要する時間が長くなり要求を満足しない場合もある。そこで、本実施形態においては、より高速に起動するための構成を提供する。本実施形態と第1の実施形態との最も大きな相違点は、クライアント装置に格納するシステムプログラム(OSプログラム)を暗号化せずに、電子署名を付与した状態でストレージ装置に記憶している点である。また本実施形態は、OSプログラムの更新処理をクライアント装置の起動時ではなく終了時に行っている点においても第1の実施形態と異なる。
【0060】
〈構成〉
図7は本実施形態に係るコンピューターシステムの概略構成を示す図である。本実施形態に係るコンピューターシステムは、複数のクライアント装置100と、サーバー装置200とから構成される。なお、図7において、第1の実施形態と対応する構成については、同一の符号を付している。
【0061】
上述したようにクライアント装置100のOS記憶部106には、平文のOSプログラムに電子署名が付加されて記憶されている点で第1の実施形態と異なる。また、クライアント装置100にTPMモジュールなどのセキュリティチップ(耐タンパデバイス)によって実現される通信検証部107が設けられている点でも第1の実施形態と異なる。本実施形態においてクライアント・サーバー間の通信は、改ざんおよびなりすましが防止できるように暗号処理を施す。ここでは、サーバー・クライアント間の通信として、共通鍵暗号方式によるメッセージ認証コード(MAC)を用いる署名付き通信を採用する。もっとも、サーバー・クライアント間の通信には、共通鍵方式による秘匿通信や、公開鍵暗号方
式による署名付き通信を採用しても良い。この共通鍵(公開鍵方式の場合は秘密鍵)は秘匿化する必要があるため通信検証部107にはセキュリティチップが利用される。なお、暗号アルゴリズムも(公開鍵方式の場合は加えて公開鍵も)セキュリティチップ内に格納されるものとして説明するが、暗号アルゴリズムは改ざんされてなければ十分なのでマスクROMに格納しても良い。
【0062】
サーバー装置200は基本的に第1の実施形態と同様であるが、OSプログラムの暗号化処理を行わないため、暗号化部207および暗号方法記憶部208が省略されている。また、アップロードプログラム記憶部203に、停止用プログラム209が格納されている。
【0063】
図8は、本実施形態における各種のプログラムが有する機能を説明する図である。図8(a)はクライアント装置100に格納されるプログラムの機能を説明する図である。起動プログラム記憶部101に格納されている起動プログラムは、プログラム要求機能101dとプログラム実行機能101eを有する。プログラム要求機能101dは、サーバー装置200に対してプログラムを要求する。このプログラム要求は、クライアント端末の識別子(ID)と起動時のプログラム要求である旨の通知を伴う。プログラム実行機能101eは、サーバー装置200から取得したプログラムを実行する機能である。
【0064】
終了プログラム記憶部102に格納されている終了プログラムは、プログラム要求機能102dおよびプログラム実行機能102eを有する。終了プログラムは基本的に起動プログラムと同じ機能を有するが、端末停止時のプログラム要求である旨を通知してサーバー装置200にプログラムを要求する点で異なる。
【0065】
図8(b)は、サーバー装置200に格納されるプログラムの機能を説明する図である。アップロードプログラム記憶部203に格納されている通常ブート用プログラム204は、OS検証機能204dおよびプログラム実行機能204eを有する。OS検証機能204dは、クライアント装置100のOS記憶部106に格納されているOSプログラムの署名を検証する機能である。プログラム実行機能204eは、OS記憶部106に格納されているOSプログラムの実行を指示する機能である。
【0066】
アップロードプログラム記憶部203に格納されている更新作業用プログラム205は、プログラムダウンロード機能205d、OS記憶部更新機能205e、OS検証機能205fを有する。プログラムダウンロード機能205dは、サーバー装置200から更新されたOSプログラムを取得する機能である。OS記憶部更新機能205eは、取得したOSプログラムをOS記憶部106に格納する機能である。OS検証機能205fは、取得したOSプログラムの署名検証を行い、OSプログラムが正当なものであるか判定する機能である。
【0067】
アップロードプログラム記憶部203に格納されている停止用プログラム209は、実質的に何も処理を行わないプログラムである。
【0068】
ここで、署名検証動作として2つのケースがある点に注意されたい。一つはクライアント装置100の通信検証部107による、サーバー装置から取得されるプログラムに対する署名検証である。もう一つは、通常ブート用プログラム204による、OS記憶部106内のOSプログラムに対する署名検証である。通信検証部107による署名検証動作はROM(セキュリティチップ)に焼かれているため変更することができない。そこで汎用性の高い暗号アルゴリズムを採用し、かつ長期間運用するために鍵長を長く設定する。したがって、通信検証部107により検証処理は比較的速度の遅いアルゴリズムとなる。一方、OSプログラムに対する署名検証は、サーバー装置から取得するプログラムに含まれ
るため、任意に変更可能である。したがって、その時点で高速な暗号アルゴリズムを選択すればよい。
【0069】
〈動作〉
・全体処理
第2の実施形態における処理の流れを説明する。まず、図9のフローチャートを参照して、全体的な処理の流れを説明する。
【0070】
クライアント装置100の電源が投入されると(S501)、起動プログラムが実行されて、サーバー装置200からブート用のプログラムを要求して取得する(S502)。取得したブート用のプログラムによってOSプログラムの署名検証を行い(S503)、検証を通過したらOSプログラムの実行を開始する(S504)。クライアント装置100の終了時(OSプログラムの実行終了時)には、終了プログラムが実行されて、サーバー装置にプログラムを要求する(S505)。OSプログラムの更新がない場合には停止処理用プログラムがサーバー装置から送信されて、クライアント装置100はそれ以上の処理を行わず終了する。一方、OSプログラムの更新がある場合には、更新作業用のプログラムがサーバーから送信される(S507)。クライアント装置100は、この更新作業用プログラムを用いてOSプログラムの更新を行い(S508)、正常に更新が完了したら(S509:YES)実行を停止する。更新に失敗した場合には(S509:NO)はOSの更新を再度行う。
【0071】
このように本実施形態においては、クライアント装置の起動時には電子署名検証によるOSプログラムの検証を行い、OSプログラムの更新作業はクライアント装置の停止処理時に行う。
【0072】
・サーバー装置の処理
以下では、クライアント装置100及びサーバー装置200が行うそれぞれの処理をより詳しく説明する。まず、サーバー装置200が行う処理を図10のフローチャートを参照しつつ説明する。
【0073】
サーバー装置200は、基本的に、クライアント装置100からのプログラム要求を受け付けて、適切なプログラムを送信する処理を繰り返す。サーバー装置200のアップロードプログラム選択部202は、クライアント装置100からのプログラム要求を受信すると(S601)、要求の種類を判断する(S602)。クライアント装置からのプログラム要求がブート用プログラムの要求、すなわちクライアント装置起動時のプログラム要求である場合には、アップロードプログラム選択部202は、通常ブート用プログラム204をクライアント装置100へ送信する(S603)。この通常ブート用プログラム204は、電子署名が付与されてクライアント装置100へ送信される。一方、クライアント装置100からのプログラム要求が更新プログラムの要求、すなわちクライアント装置停止時プログラムの要求である場合には、アップロードプログラム選択部202は更新プログラムがあるか否かを判断する(S604)。更新プログラムがない場合には、アップロードプログラム選択部202は、停止用プログラム209をクライアント装置100へ送信する(S605)。一方、更新プログラムがある場合は更新作業用プログラム205をクライアント装置100へ送信する(S606)。更新作業用プログラム205の送信後は、クライアント装置100からの更新プログラムの送信要求を待ち(S607)、要求を受けて更新プログラムをクライアント装置100へ送信する(S608)。
【0074】
・クライアント装置の処理
次にクライアント装置100が行う処理を説明する。まず、クライアント装置100が起動時に行う処理(図9のステップS501〜S504に相当)を図11のフローチャー
トを参照しつつ説明する。
【0075】
クライアント装置100の電源が投入されると(S701)、まず、マスクロムに格納されている起動プログラムが実行され(S702)、プログラム要求機能101dによりサーバー装置200に対するプログラム要求が行われる(S703)。クライアント装置起動時のプログラム要求は通常ブート用プログラム204を要求するものであるため、クライアント装置100は、サーバー装置から通常ブート用プログラム204を取得する。取得された通常ブート用プログラム204の正当性を検証するために、通信検証部107が署名検証を実施する(S704)。ここで署名が一致せず改ざんやなりすましの危険性がある場合には(S705:NO)、プログラムの実行を停止する(S706)。なお、検証に失敗した場合の動作は本発明では特に規定しない。時間をおいて再度実行しても良いし、管理者に報知する処理を行っても良い。取得したプログラムが署名検証により正当なものであると判断された場合(S705:YES)は、プログラム実行機能101eにより取得した通常ブート用プログラム204を実行する(S707)。
【0076】
通常ブート用プログラム204が実行されると、そのOS検証機能204dにより、OS記憶部106に格納されているOSプログラムの署名検証が実施される(S708)。ここで、署名検証を通過しない場合(S709:NO)は、OS記憶部106内のOSプログラムが改ざんされたおそれがあるため、プログラムを実行せずに終了する(S710)。一方、署名検証を通過した場合(S709:YES)は、通常ブート用プログラム204に含まれるプログラム実行機能204eにより、OS記憶部106内のOSプログラムを実行する(S711)。
【0077】
次にクライアント装置100が終了時に行う処理(図9のステップS505〜510に相当)を図12のフローチャートを参照しつつ説明する。
【0078】
クライアント装置100では、OSプログラムの実行が終了する(S801)と終了プログラム記憶部102内の終了プログラムが実行される(S802)。終了プログラムのプログラム要求機能102dによりサーバー装置200に対してプログラムの要求が行われる(S803)。サーバー装置200から受け取ったプログラムに対しては、通信検証部107が署名検証処理を行う(S804)。受け取ったプログラムの検証が失敗した場合(S805:NO)は、改ざんまたはなりすましのおそれがあるのでそのプログラムを実行せずに終了する(S806)。一方、受け取ったプログラムの検証が成功した場合(S805:YES)は、プログラム実行機能102eによりそのプログラムを実行する(S806)。
【0079】
ここでOSプログラムの更新が必要ではない場合は、実質的に何も処理を行わない停止用プログラム209がサーバー装置200から送られるので、クライアント装置100は何も処理をせずに終了することになる(S812)。
【0080】
一方、OSプログラムの更新が必要な場合には、サーバー装置200から更新作業用プログラム205が送信される。このプログラムが実行されると、更新作業用プログラム205に含まれるプログラムダウンロード機能205dにより、サーバー装置200に対して新しいOSプログラムを要求する(S807)。クライアント装置100は、受け取ったOSプログラムをOS記憶部更新機能205eによりOS記憶部106に格納し(S808)、OS検証機能205fによりOS記憶部106内のプログラムの署名検証を行う(S809)。OSプログラムが改ざん等されており検証が失敗した場合(S810:NO)は、再度サーバー装置200に対して更新プログラムを要求する。一方、OSプログラムの検証が成功した場合(S810:YES)は、そのまま処理を終了する(S811)。
【0081】
〈実施形態の作用・効果〉
本実施形態によっても、OSプログラムの正当性を保証した上で実行することができる。まず、電源投入時に実行される起動プログラムはマスクロムに格納されており改ざんできないので、この時点までの安全が保証される。起動プログラムはサーバー装置から通常ブート用プログラムを取得するが、通信検証部によって署名検証されるためサーバーとの間の通信もなりすましや改ざんのおそれがない。なお、通信検証部自体はセキュリティチップにより構成されているため安全であり、サーバー装置も前提として安全が確保されている。したがって、取得した通常ブート用プログラムの正当性が保証される。そして、この正当性が保証される通常ブート用プログラムによってOSプログラムの署名検証を行い検証が成功した場合にOSプログラムを実行するため、実行されるOSプログラムの正当性も保証される。
【0082】
なお、本実施形態では署名検証によりOSプログラムを検証しているので、復号処理を行う第1の実施形態と比較してより高速なOSの起動が実現できる。また、OSプログラムの更新処理もクライアント装置の停止時に行っているため、クライアントの起動を高速に行える。
【0083】
また、署名検証処理はサーバー装置から得られるプログラムに対してと、OS記憶部内のOSプログラムに対して行われる。ここで、サーバー装置から得られるプログラムに対する署名検証処理はROM(セキュリティチップ)に焼かれているため変更できず長期間運用する必要があるため、汎用性の高いアルゴリズムでかつ鍵長を長くする。つまり、取得したプログラムに対する検証処理は比較的速度の遅いアルゴリズムが必要となる。しかしながら、OSプログラムの署名検証処理はサーバー装置から得られる通常ブート用プログラムに含まれるので、その時点で高速なアルゴリズムを選択することができる。サーバー装置から取得するブート用プログラムとOSプログラムとでは、一般にOSプログラムの方が大容量である。サイズの大きいOSプログラムに対して高速なアルゴリズムを適用できるので、全体の検証時間はより短くなる。
【0084】
(第3の実施形態)
上記第1,2の実施形態においてOSプログラムの更新処理を行っているが、この更新処理が途中で異常終了すると、記憶部内のプログラムは一部が書き換えられ一部は古いままという不整合な状態となる。このような事態が発生した場合、復号処理や署名検証によるOSプログラムの検査で異常と判断されてしまいプログラムが起動できなくなる。このような事態に対処するために、クライアント装置のストレージを二重にして古いプログラムを残しておくことも考えられるが、多くの計算機資源を必要となりコストが上昇してしまう。そこで、本実施形態では、クライアント装置に多くの計算機資源を必要とすることなく、OSプログラムの更新処理が失敗した場合にも安全に起動(更新処理の再開)を行えるようにする。
【0085】
〈構成〉
図13は本実施形態に係るコンピューターシステムの概略構成を示す図である。本実施形態は第1および第2の実施形態と類似する構成を有するため、異なる部分について主に説明する。本実施形態に係るコンピューターシステムは、複数のクライアント装置300と、サーバー装置400とから構成される。各クライアント装置300はサーバー装置400と通信可能に構成されている。
【0086】
クライアント装置300は、起動プログラム記憶部301、終了プログラム記憶部302、外部通信部304、更新プログラム展開部305、OS記憶部306、OS検査部308、暗号処理部307を備える。起動プログラム記憶部301および終了プログラム記
憶部302は、それぞれ、クライアント装置300の起動時および停止時に実行されるプログラムである起動プログラムおよび終了プログラムを記憶する。これらの記憶部は実体としてはマスクロムである。OS記憶部306はストレージ装置であり、OSプログラムを記憶する。本実施形態においては、OSプログラムは暗号化や電子署名付与されずに平文の状態でOS記憶部306に格納される。外部通信部304はネットワークを介してサーバー装置400と通信する機能部である。更新プログラム展開部305はサーバー装置400から取得した新しいOSプログラムをOS記憶部306に展開する。OS検査部308は、OS記憶部306の所定のアドレスのハッシュ値を求める機能を有する。外部通信部304、更新プログラム展開部305、OS検査部308は、マスクロムに格納されたプログラムをCPUが実行することで実現される。暗号処理部307は、TPMモジュールなどのセキュリティチップ(耐タンパデバイス)によって実現されるものであり、サーバー装置400との間で秘匿通信を行う。本実施形態ではクライアント・サーバー間の通信は共通鍵方式による秘匿通信により行う。
【0087】
なお、暗号処理部307の全てを耐タンパデバイスで構成する必要はない。共有鍵(公開鍵暗号方式を採用する場合は秘密鍵)は秘匿化する必要があるので耐タンパデバイスに格納する必要があるが、暗号アルゴリズム(および公開鍵暗号方式を採用する場合は公開鍵)は改ざんされなければ十分なのでマスクROMに格納すれば十分である。このような構成を採用すれば、耐タンパデバイスの導入を最小限にできコストの上昇を抑えることができる。
【0088】
図14はクライアント装置300の起動プログラム記憶部301および終了プログラム記憶部302に格納される起動プログラムおよび終了プログラムの機能を説明する図である。起動プログラムのアドレス問い合わせ機能301aは、サーバー装置400にOSプログラムの検査対象アドレス(ハッシュ値を求めるアドレス)を問い合わせる機能である。ハッシュ値算出機能301bは、サーバー装置400から取得したアドレスについてのハッシュ値を、OS検査部308を用いて算出する機能部である。ハッシュ値送信機能301cは、算出したハッシュ値をサーバー装置400に送信する機能である。OS実行機能301dは、ハッシュ値送信に対する応答をサーバー装置400から取得して、ハッシュ値が正しいと判断された場合にOS記憶部306内のOSプログラムを実行する機能である。
【0089】
終了プログラムのプログラムダウンロード機能302aは、サーバー装置400からOSプログラムの更新版を取得する機能である。OS記憶部更新機能302bは、サーバー装置400から取得される更新版のOSプログラムをOS記憶部306に格納する機能である。なお、後述するようにサーバー装置400から更新版のOSプログラムがブロック単位に分割されて送信されるので、クライアント装置300においてもブロック単位で取得・更新処理を行う。更新完了通知機能302cは、OS記憶部306の更新が完了したことをブロック単位で通知する機能である。
【0090】
サーバー装置400は、外部通信部401、更新プログラム管理部402、検査部位決定部403、更新プログラム記憶部404、クライアントプログラム記憶部405、暗号処理部406を備える。外部通信部401は、ネットワークを介してクライアント装置300と通信する機能部である。クライアント装置300との間の通信は、暗号処理部406により秘匿化される。更新プログラム管理部402は、クライアント装置300に対するOSプログラムの更新処理および更新状況の管理(把握)を行う機能部である。更新プログラム記憶部404は、クライアント装置300において実行するOSプログラムに更新がある場合に、最新版のOSプログラムを記憶する。クライアントプログラム記憶部405は、更新前のOSプログラムを記憶する。なお、サーバー装置400は、全体がセキュリティチップなどを用いて構成されることで、セキュリティが確保される。
【0091】
更新プログラム管理部402についてより詳細に説明する。更新プログラム管理部402は、更新プログラムをクライアント装置300が一度に受信可能なサイズに分割して送信する。また、更新プログラム管理部402は、クライアント装置300における各ブロックの書き換え完了・未完了などを管理する。図14は、更新プログラム管理部402が保持する更新状況テーブルであり、更新プログラム管理部402はこの更新状況テーブルを用いてクライアント装置300の更新状況を記憶する。この更新状況テーブルには、ブロックID402aごとに、対応する更新プログラム記憶部内のアドレス402bと、サーバー装置からクライアント装置に更新プログラムを送信したか否かを表す送付済みフィールド402c、クライアント装置から書き換え済みの通知を受けたか否かを表す書き換え済みフィールド402dを含む。送付済みフィールド402cおよび書き換え済みフィールド402dの両方が「完了」となっているブロックはクライアント装置において更新完了済みであり、OS記憶部306内のこのブロックには新しいプログラムが格納されていることが分かる。逆に両方が「未実施」となっているブロックにクライアント装置において更新が未完了であり、OS記憶部306内にこのブロックには古いプログラムが格納されていることが分かる。送付済みフィールド402cが「完了」であり、書き換え済みフィールド402dが「未実施」のブロックについては、クライアント装置において更新されたか否かが把握不能である。検査部位決定部403は、更新プログラム管理部402から得られる更新状況を元にクライアント装置300にどのアドレスのハッシュ値を要求するか決定する機能部である。検査部位決定部403は、サーバー装置400において内容が把握可能なクライアント装置300のアドレスのうちから、ハッシュ値算出対象のアドレスをランダムに決定する。また、検査部位決定部403は、更新プログラム記憶部404とクライアントプログラム記憶部405を参照して、指定したアドレスにおける正しいハッシュ値を算出する。
【0092】
〈動作〉
・クライアント停止時(更新処理)
第3の実施形態における処理の流れを説明する。まず、クライアント装置終了時における更新処理を図16を参照して説明する。
【0093】
クライアント装置300においてOSプログラムの実行が終了する(S901)と、終了プログラム記憶部302内の終了プログラムが実行されて、そのプログラムダウンロード機能302aによりサーバー装置400へ更新プログラムの有無が問い合わされる(S902)。この要求を受信したサーバー装置400の更新プログラム管理部402は、クライアント装置300に送信する更新プログラムがあるか判断する(S903)。更新プログラムがない場合(S903:NO)は、その旨がクライアント装置300に通知され、クライアント装置300はそれ以上の処理を行わず停止する(S904)。
【0094】
更新プログラムがある場合(S903:YES)には、更新プログラム管理部402は、ブロック単位に分割された更新プログラムの一部を暗号化してクライアント装置300へ送信する(S905)。送信が完了したら、更新プログラム管理部402は、送信したブロックの送信済みフィールド402cを「完了」にして、クライアント装置へ送信したことを記憶する。クライアント装置300は、更新プログラムを受信し、終了プログラムのOS記憶部更新機能302bによりOS記憶部306を更新する(S906)。OS記憶部306の更新が完了したら、更新完了通知機能302cにより、このブロックの更新が完了した旨を暗号化してサーバー装置400へ送信する(S907)。更新プログラム管理部402は、この更新完了通知を受け取ると、このブロックの書き換え済みフィールドを「完了」にして、クライアント装置において更新が完了したことを記憶する(S908)。更新プログラム管理部402は、更新プログラムの全てのブロックについて更新が完了したか判断し、未処理のブロックがある場合(S909:NO)は送信を繰り返す。
全てのブロックの更新が完了した場合(S909:YES)は、更新処理が完了したことをクライアント装置300へ通知する(S910)。クライアント装置300は、この通知を受け取ると停止する(S911、S912)。
【0095】
このように更新プログラムをブロック単位に分割してクライアント装置300に送信し、更新完了通知によって更新完了を確認しつつ処理を進めるため、更新処理の途中でクライアント装置300の電源が切れるなどの事態が発生しても、どのアドレスまで更新処理が完了しているかをサーバー装置400は把握可能である。たとえば、更新プログラム管理部402の更新状況テーブルが図15の場合を例に説明する。ブロックID0x0001, 0x0002については、送付済みフィールド402c・書き換え済みフィールド402dの両方が「完了」となっているため、更新プログラムがクライアント装置に送信され、実際にOS記憶部306が更新されたことが分かる。ブロックID0x0003については、送付済みフィールド402cは「完了」であるものの、書き換え済みフィールド402dが「未実施」となっている。このブロックに関しては、サーバー装置側ではクライアント装置のOS記憶部306内の状態は判断不可能である。OS記憶部306が更新されていない状況もあり得るし、更新されたが更新完了通知を送信できなかったという場合もあり得る。ブロックID0x0004以降については、送付済みフィールド402cが「未実施」であるため、クライアント装置300のOS記憶部306は更新前の状態であることが分かる。このように、更新状況テーブルを参照することで、クライアント装置ごとに更新作業が全て正常に完了したか否か、および、全て完了していない場合はどのブロックまで更新が完了しているかを把握できる。
【0096】
・クライアント起動時(プログラム実行・更新処理再開)
次に、クライアント装置300の起動時の処理について、図17のフローチャートを参照しつつ説明する。
【0097】
クライアント装置300が起動すると(S1001)、起動プログラムが実行されて、そのアドレス問い合わせ機能301aにより、OS記憶部306内のどのアドレスを対象に検査するかをサーバー装置400に問い合わせる(S1002)。この要求を受信したサーバー装置400の更新プログラム管理部402は、更新状況テーブルを参照して検査可能なアドレスをランダムに選択しクライアント装置300に通知する(S1003)。検査可能なアドレスとは、サーバー装置で状態を把握しているアドレス(ブロック)であり、より具体的には更新状況テーブルで送付済みフィールド402cおよび書き換え済みフィールド402dの両方が「完了」または両方が「未実施」であるアドレスである。
【0098】
クライアント装置300は、サーバー装置400から指定されたアドレスを対象に、OS検査部308を用いてハッシュ値を算出してサーバー装置400へ送信する(S1004)。クライアント装置300において算出されたハッシュ値を受信したサーバー装置400は、そのハッシュ値が想定値と一致するか否か比較して、クライアント装置300の正当性を検証する(S1005)。更新プログラム管理部402ではクライアント装置300のOS記憶部306の状態を把握しているので、指定したアドレスについて正しいハッシュ値を算出可能である。クライアント装置300から送信されたハッシュ値が想定される値と異なる場合(S1006:NG)は、クライアント装置300は不正な端末であると判断し認証に失敗したことを通知する(S1007)。一方、クライアント装置300から送信された値と一致する場合(S1006:OK)は、クライアント装置が正当なものであると判断できる。このとき、更新プログラム管理部402は更新状況テーブルを参照して、クライアント装置において更新処理に未完了な部分があるか判断する(S1008)。未完了な部分がない場合(S1008:NO)、サーバー装置400は、クライアント装置300に対して、認証成功の通知およびOS記憶部306内のOSプログラムの実行すべき旨の通知を送信する(S1009)。一方、更新処理に未完了な部分がある
場合、すなわち、更新処理の途中である場合(S1008:YES)は、サーバー装置400は、クライアント装置300に対して、認証成功の通知および更新処理を再開すべき旨の通知を送信する(S1010)。
【0099】
クライアント装置300はサーバー装置400から認証結果を受け取る(S1011)。認証が失敗した場合(S1012:NG)は、プログラムの実行を中止する(S1013)。認証に成功した場合(S1012:OK)は、サーバー装置400からの指示にしたがった動作、すなわち、OSプログラムの実行または更新作業の再開を行う(S1014)
〈実施形態の作用・効果〉
本実施形態においては、クライアント装置300内のOSプログラムのハッシュ値を検証して、クライアント装置の正当性を判断している。クライアント装置300でOSプログラムが改ざんされた場合、ハッシュ値が想定される値と異なるものになるため改ざんを検知できる。なお、ハッシュ値算出対象のアドレスはランダムに決定されるので、クライアント・サーバー間の通信を盗聴して、それに含まれるハッシュ値と同じ値を返すという攻撃も阻止できる。
【0100】
さらに、本実施形態においては、クライアント装置のOSプログラムの更新作業が途中で中断した場合であっても、サーバー装置側で更新状況を把握しているため、ハッシュ値による正当性の検証が可能である。つまり、更新作業が中断した場合もクライアント装置の正当性を検証し、更新処理を再開することができる。
【符号の説明】
【0101】
100,300 クライアント装置
200,400 サーバー装置
101,301 起動プログラム記憶部
102,302 終了プログラム記憶部
106,306 OS記憶部
202 アップロードプログラム選択部
203 アップロードプログラム記憶部
204 通常ブート用プログラム
205 更新作業用プログラム
308 OS検査部
402 更新プログラム管理部
403 検査部位決定部

【特許請求の範囲】
【請求項1】
互いに通信可能なクライアント装置とサーバー装置とから構成されるコンピューターシステムであって、
クライアント装置は、装置起動時に実行されるプログラムであるブートプログラムを記憶する第1の記憶手段と、実行対象のプログラムを記憶する第2の記憶手段とを有し、
サーバー装置は、前記実行対象のプログラムを検証するための検証プログラムを記憶する記憶手段を有し、
前記ブートプログラムは、サーバー装置からプログラムを取得して実行する処理を含み、
前記サーバー装置は、クライアント装置のブートプログラムからの要求に応じて、前記検証プログラムをクライアント装置に送信し、
前記クライアント装置は、取得した検証プログラムを用いて前記実行対象のプログラムを検証し、検証に成功した後に当該プログラムを実行する
ことを特徴とするコンピューターシステム。
【請求項2】
前記実行対象のプログラムは、暗号化された状態で前記第2の記憶手段に記憶されており、
前記検証プログラムは、実行対象のプログラムを復号する処理を含む
ことを特徴とする請求項1に記載のコンピューターシステム。
【請求項3】
前記クライアント装置は、実行対象のプログラムの実行終了時に、第2の記憶手段に記憶されている実行対象のプログラムとは異なる暗号アルゴリズムまたは異なる暗号鍵を用いて暗号化された、実行対象のプログラムをサーバー装置から取得し、第2の記憶手段に格納する機能を有し、
前記サーバー装置は、前記クライアント装置へ送信した実行対象のプログラムを復号するための暗号アルゴリズムおよび暗号鍵を記憶しておき、次に前記クライアント装置のブートプログラムからプログラムの要求があったときに、クライアント装置に記憶されている実行対象のプログラムに対応した検証プログラムをクライアント装置へ送信する
ことを特徴とする請求項2に記載のコンピューターシステム。
【請求項4】
前記実行対象のプログラムを更新する場合は、
前記サーバー装置は、前記クライアント装置のブートプログラムからの要求があったときに、新しい実行対象プログラムを第2の記憶手段に格納した後に再起動を行うプログラムを、クライアント装置に送信する
ことを特徴とする請求項2または3に記載のコンピューターシステム。
【請求項5】
前記実行対象のプログラムは、電子署名が付加された状態で前記第2の記憶手段に記憶されており、
前記検証プログラムは、実行対象のプログラムの電子署名を検証する処理を含む
ことを特徴とすることを特徴とする請求項1に記載のコンピューターシステム。
【請求項6】
前記クライアント装置は、前記実行対象プログラムの実行終了時に、前記サーバー装置に対してプログラムを要求する機能を含む停止処理プログラムを有しており、
前記サーバー装置は、前記クライアント装置の前記停止処理プログラムからプログラムの要求があったときに、前記実行対象のプログラムを更新する場合は、新しい実行対象プログラムを第2の記憶手段に格納した後に再起動を行うプログラムをクライアント装置に送信する
ことを特徴とする請求項5のいずれかに記載のコンピューターシステム。
【請求項7】
前記サーバー装置は、前記検証プログラムに電子署名を付加してクライアント装置に送信し、
前記ブートプログラムは、取得した検証プログラムの電子署名を検証する処理を含む
ことを特徴とする請求項1〜6のいずれかに記載のコンピューターシステム。
【請求項8】
前記第1の記憶手段は、書き換え不可能な不揮発性メモリであり、
前記第2の記憶手段は、書き換え可能な不揮発性メモリである
ことを特徴とする請求項1〜7のいずれかに記載のコンピューターシステム。
【請求項9】
互いに通信可能なクライアント装置とサーバー装置とから構成されるコンピューターシステムであって、
クライアント装置は、装置起動時に実行されるプログラムであるブートプログラムを記憶する第1の記憶手段と、実行対象のプログラムを記憶する第2の記憶手段とを有し、
サーバー装置は、前記クライアント装置の第2の記憶手段に格納されているプログラムの状態を管理する管理手段と、前記クライアント装置に所定のアドレスについてのハッシュ値を要求し前記管理手段から判断可能な正しいハッシュ値と一致するか否かを判定しクライアント装置に通知する判定手段を含み、
前記ブートプログラムは、前記サーバー装置からハッシュ値を算出する対象のアドレスを取得し、取得したアドレスについてハッシュ値を求めて、サーバー装置に送信する機能を有し、サーバー装置からハッシュ値が正しいという通知を受けた後に前記第2の記憶手段に格納されている実行対象のプログラムを実行する
ことを特徴とするコンピューターシステム。
【請求項10】
クライアント装置とサーバー装置との間の通信は、秘匿通信または署名付き通信により行われることを特徴とする請求項9に記載のコンピューターシステム。
【請求項11】
前記実行対象のプログラムを更新する場合は、
前記サーバー装置は、新しい実行対象プログラムを分割して1つずつクライアント装置へ送信し、
前記クライアント装置は、取得した更新プログラムで前記第2の記憶手段の書き換えが完了した場合にその旨を示す完了通知をサーバー装置へ通知し、
前記サーバー装置の管理手段は、クライアント装置において更新が完了したアドレス領域と更新が未完了なアドレス領域と更新の完了・未完了が不明なアドレス領域とを管理することを特徴とする請求項9または10に記載のコンピューターシステム。
【請求項12】
前記判定手段は、ハッシュ値算出の対象となるアドレスを、前記管理手段によって更新が完了または未完了と把握されているアドレス領域の中からランダムに決定することを特徴とする請求項11に記載のコンピューターシステム。
【請求項13】
前記サーバー装置は、前記クライアント装置から送信されたハッシュ値が正しいと判定された場合に、前記クライアント装置における実行対象プログラムの更新処理が未完了であると前記管理手段から判断される場合は、更新処理を再開する
ことを特徴とする請求項12に記載のコンピューターシステム。
【請求項14】
互いに通信可能なクライアント装置とサーバー装置とから構成されるコンピューターシステムにおける、クライアント装置のストレージ手段に格納された実行対象プログラムを起動するプログラム起動方法であって、
クライアント装置は、装置起動時に実行されるブートプログラムにより、サーバー装置からプログラムを取得し、
サーバー装置は、クライアント装置からのプログラム要求に応じて、実行対象プログラ
ムを検証するためのプログラムをクライアント装置に送信し、
クライアント装置は、取得した検証プログラムによって実行対象プログラムを検証し、検証に成功した後に当該実行対象プログラムを実行する
ことを特徴とするプログラム起動方法。
【請求項15】
前記実行対象プログラムは、暗号化された状態でストレージ手段に格納されており、
前記検証プログラムは、実行対象プログラムを復号する処理を含む
ことを特徴とする請求項14に記載のプログラム起動方法。
【請求項16】
前記実行対象プログラムは、電子署名が付加された状態でストレージ手段に格納されており、
前記検証プログラムは、実行対象プログラムの電子署名を検証する処理を含む
ことを特徴とする請求項14に記載のプログラム起動方法。
【請求項17】
互いに通信可能なクライアント装置とサーバー装置とから構成されるコンピューターシステムにおける、クライアント装置のストレージ手段に格納された実行対象プログラムを起動するプログラム起動方法であって、
サーバー装置は、クライアント装置のストレージ手段に格納されているプログラムの状態を管理しており、
クライアント装置は、装置起動時に実行されるブートプログラムにより、サーバー装置からハッシュ値を算出する対象のアドレスを取得し、当該アドレスのハッシュ値を算出してサーバー装置に送信し、
サーバー装置は、クライアント装置から送信されるハッシュ値が、正しいハッシュ値と一致するか否かを判定してクライアント装置に通知し、
クライアント装置は、サーバー装置からハッシュ値が正しいという通知を受けた後に実行対象のプログラムを実行する
ことを特徴とするプログラム起動方法。

【図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


【公開番号】特開2011−3020(P2011−3020A)
【公開日】平成23年1月6日(2011.1.6)
【国際特許分類】
【出願番号】特願2009−145671(P2009−145671)
【出願日】平成21年6月18日(2009.6.18)
【出願人】(502087460)株式会社トヨタIT開発センター (232)
【出願人】(000003207)トヨタ自動車株式会社 (59,920)
【Fターム(参考)】