(57)【要約】      （修正有）【課題】開発等されたプログラムの危険度を検証し、その検証結果を含む署名を容易に付加可能にする。【解決手段】複数の命令と該複数の命令のそれぞれの危険度を示す値とを対応付けて記憶する記憶部０１３と、署名済みモジュールに予め付加された署名を参照することにより、該署名済みモジュールの危険度を示す値を取得する取得部と、複数の命令又は署名済みモジュールを有する検証対象プログラムを入力する入力部０１１と、前記検証対象プログラムが有する命令については前記記憶部０１３を参照することにより第１の危険度の値を求め、前記検証対象プログラムが有する署名済みモジュールについては前記取得部により第２の危険度の値を求め、前記第１の危険度の値及び前記第２の危険度の値から前記検証対象プログラムが有する危険度の最大値を算出する算出部と、前記危険度の最大値を含む検証結果を出力する出力部０１５とを有する。【選択図】図２
2008158686.tif 000002
【特許請求の範囲】
【請求項１】
複数の命令と該複数の命令のそれぞれの危険度を示す値とを対応付けて記憶する記憶部と、
署名済みモジュールに予め付加された署名を参照することにより、該署名済みモジュールの危険度を示す値を取得する取得部と、
複数の命令又は署名済みモジュールを有する検証対象プログラムを入力する入力部と、
前記検証対象プログラムが有する命令については前記記憶部を参照することにより第１の危険度の値を求め、前記検証対象プログラムが有する署名済みモジュールについては前記取得部により第２の危険度の値を求め、前記第１の危険度の値及び前記第２の危険度の値から前記検証対象プログラムが有する危険度の最大値を算出する算出部と、
前記危険度の最大値を含む検証結果を出力する出力部と、を具備するプログラム検証装置。
【請求項２】
前記算出部は、前記最大値に代えて、危険度の合計、平均、及びその他の指標の組み合わせを前記検証対象プログラムの危険度の値として算出し、
前記出力部は、前記検証対象プログラムの危険度の値を含む検証結果を出力する請求項１に記載のプログラム検証装置。
【請求項３】
プログラムの作成者に応じて前記第１の危険度の値又は前記第２の危険度の値を修正する手段を具備する請求項１又は２に記載のプログラム検証装置。
【請求項４】
請求項１乃至３のいずれか一項に記載のプログラム検証装置を有する署名システムであって、
検証対象プログラムを入力する第１の入力部と、
前記プログラム検証装置に対し検証対象プログラムを出力する第１の出力部と、
前記第１の出力部が出力した検証対象プログラムについて前記プログラム検証装置から出力された検証結果を入力する第２の入力部と、
前記第２の入力部に入力された検証結果を含む署名情報を生成する第１の生成部と、
前記署名情報を前記第１の入力部に入力された検証対象プログラムに付加することにより署名付プログラムを生成する第２の生成部と、を具備する署名システム。
【請求項５】
前記第２の生成部により生成された署名付プログラムを、該署名付プログラムを利用する利用機器からの求めに応じて配布する配布部をさらに具備する請求項４に記載の署名システム。
【請求項６】
前記第１の生成部は、
検証者プロフィールと、前記プログラム検証装置から出力された検証結果と、前記第１の入力部に入力された検証対象プログラムとを連結したものを検証者署名対象とし、該検証者署名対象から一方向性ハッシュ関数値を計算する計算部と、
前記一方向性ハッシュ関数値を秘密鍵を用いて暗号化することにより検証者署名を生成する第３の生成部とを有し、
前記検証者署名と、前記検証者プロフィールと、前記プログラム検証装置から出力された検証結果とを連結することにより前記署名情報を生成する請求項４又は５に記載の署名システム。
【請求項７】
複数の命令と該複数の命令のそれぞれの危険度を示す値とを対応付けて記憶部が記憶するステップと、
署名済みモジュールに予め付加された署名を参照することにより、該署名済みモジュールの危険度を示す値を取得部が取得するステップと、
複数の命令又は署名済みモジュールを有する検証対象プログラムを入力部が入力するステップと、
前記検証対象プログラムが有する命令については前記記憶部を参照することにより第１の危険度の値を求め、前記検証対象プログラムが有する署名済みモジュールについては前記取得部により第２の危険度の値を求め、前記第１の危険度の値及び前記第２の危険度の値から前記検証対象プログラムが有する危険度の最大値を算出部が算出するステップと、
前記危険度の最大値を含む検証結果を出力部が出力するステップと、を具備するプログラム検証方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルウェアやコンピュータウイルスによる影響を抑制するためのプログラム検証装置及び方法、ならびにプログラム検証に基づく署名システムに関する。
【背景技術】
【０００２】
インターネット等信頼のおけない通信路を通じてプログラムを入手する場合、そのプログラムが安全かどうかを確認することが望まれる。確認を助ける目的で、配布元から正しくプログラムが手元に届いていることを確認するために該プログラムに電子署名を付加して配布することが行われている（例えば、非特許文献１を参照。）。
【０００３】
署名が正しいものであれば、その署名が付加されたプログラムは改ざんされていないことを確認できる。また、署名の有無によって、プログラムが重要なリソースをアクセスできるかどうかを定める等、実行権限に制限を設けることができる（例えば、非特許文献２を参照。）。
【０００４】
しかし、プログラムに電子署名を付けても、プログラム自体が有害かどうかを機械的に判断できない。また、ネットワークのようなリソースに対してアクセスを許可するかどうかを一律に定めることも困難である。なぜなら、アクセスを許可するとオープン・プロキシ（ｏｐｅｎ  ｐｒｏｘｙ）や迷惑メール送信のためのボットネット（ｂｏｔｎｅｔ）となる等、好ましくないプログラムを実行するリスクを負う一方、アクセスを拒否するとＷｅｂ  ＡＰＩ等ネットワーク上のサービスを活用したプログラムが実行できないからである。
【非特許文献１】“Ｗｉｎｄｏｗｓ（登録商標）上のプログラムにおけるＶｅｒｉＳｉｇｎのコードサイニング証明書”、インターネット＜URL:http://www.verisign.co.jp/codesign/authenticode/message.html＞
【非特許文献２】“Ｊａｖａ（登録商標）セキュリティアーキテクチャ”、インターネット＜ＵＲＬ：http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/security/spec/security-spec.doc1.html＞
【発明の開示】
【発明が解決しようとする課題】
【０００５】
上述したように、プログラム自体が有害かどうかを機械的に判断できないという問題点がある。また、ネットワーク等のリソースに対してアクセスを許可するかどうかを一律に定めることは困難であるという問題点がある。
【０００６】
そこで、本発明はネットワーク等の重要リソースにアクセスするプログラムの危険度を検証するための装置を提供する。そして、検証を経たプログラムに署名を付加して配布し、署名付プログラムのみが利用機器において実行を許可され、利用機器においてマルウェアやコンピュータウイルスが実行される機会を抑制できるようにする。
【課題を解決するための手段】
【０００７】
本発明の一観点に係るプログラム検証装置は、複数の命令と該複数の命令のそれぞれの危険度を示す値とを対応付けて記憶する記憶部と、署名済みモジュールに予め付加された署名を参照することにより、該署名済みモジュールの危険度を示す値を取得する取得部と、複数の命令又は署名済みモジュールを有する検証対象プログラムを入力する入力部と、前記検証対象プログラムが有する命令については前記記憶部を参照することにより第１の危険度の値を求め、前記検証対象プログラムが有する署名済みモジュールについては前記取得部により第２の危険度の値を求め、前記第１の危険度の値及び前記第２の危険度の値から前記検証対象プログラムが有する危険度の最大値を算出する算出部と、前記危険度の最大値を含む検証結果を出力する出力部と、を具備するプログラム検証装置である。
【０００８】
本発明の別の観点に係る署名システムは、上記プログラム検証装置を有する署名システムであって、検証対象プログラムを入力する第１の入力部と、前記プログラム検証装置に対し検証対象プログラムを出力する第１の出力部と、前記第１の出力部が出力した検証対象プログラムについて前記プログラム検証装置から出力された検証結果を入力する第２の入力部と、前記第２の入力部に入力された検証結果を含む署名情報を生成する第１の生成部と、前記署名情報を前記第１の入力部に入力された検証対象プログラムに付加することにより署名付プログラムを生成する第２の生成部と、を具備する署名システムである。
【発明の効果】
【０００９】
本発明によれば、ネットワーク等の重要リソースにアクセスするプログラムの危険度を検証できる。したがって、そのような検証を経たプログラムに署名を付加して配布し、署名付プログラムのみが利用機器において実行を許可され、利用機器においてマルウェアやコンピュータウイルスが実行される機会を抑制することができる。
【発明を実施するための最良の形態】
【００１０】
以下、図面を参照しながら本発明の実施形態を説明する。
【００１１】
図１は、本発明の一実施形態に係わるプログラム実行システムを示すブロック図である。このシステムは、プログラムを検証する検証装置０１０と、プログラムの署名を計算する署名装置０２０と、プログラムを開発する開発機器０３０と、プログラムを配布する配布装置０４０と、プログラムを利用（実行）する利用機器０５０とから構成されている。
【００１２】
署名装置０２０は、開発機器０３０から検証対象のプログラムを受け取り、安全に使えることが（人手もしくは機械的に）検証されたプログラムに対し、その危険度に応じた署名を付ける。詳細は後述するが、署名装置０２０は検証対象プログラムの危険度を算出するよう検証装置０１０に依頼する。検証装置０１０は、署名装置０２０は署名済モジュールの危険度及び予め定められた命令毎の危険度から、検証対象プログラムの危険度を算出し、検証対象プログラムの危険度を表す検証結果を署名装置０２０に返す。検証装置０１０からの検証結果に基づいて、署名装置０２０は検証対象プログラムに対し危険度に応じた署名を付ける。署名が付加された検証対象プログラム（「署名付プログラム」という）は、配布装置０４０を通じて利用機器０５０に配布される。利用機器０５０は、署名付プログラムが配布されると、正しい署名が付いていて、かつその署名に書かれた危険度が予め定めた実行可能危険度以下であることを確認の上、その署名付プログラムを実行する。
【００１３】
図１を参照し、本実施形態に係わるプログラム実行システムにおいて署名付プログラムが利用機器に配布されるまでの一連の流れを説明する。開発者は、開発機器０３０を用いてプログラムを開発する。開発が完了すると、利用機器０５０での利用に供するために、開発機器０３０は署名装置０２０にそのプログラムＩ１を送る。これを「検証対象プログラム」と呼ぶ。
【００１４】
署名装置０２０は、開発機器０３０から受信した検証対象プログラムＩ１をそのまま検証対象プログラムＩ２として検証装置０１０に送り、検証を依頼する。検証装置０１０は、署名装置０２０から送られてきた検証対象プログラムＩ２の検証を行い、検証結果Ｉ３を署名装置０２０に送る。検証結果Ｉ３はプログラム危険度を示す情報を含んでおり、署名装置０２０はこの検証結果Ｉ３に基づいて署名Ｉ４を生成する。尚、「プログラム危険度」は、検証対象プログラムＩ２を構成する命令又はモジュールの各々の危険度の値を代表する値を有する。この代表値は、例えば各々の危険度の値の最大値である。署名装置０２０は署名Ｉ４を開発機器０３０に送る。
【００１５】
開発機器０３０は、検証対象プログラムＩ１に検証を経て署名を付加したものに相当する署名付プログラムＩ５を配布装置０４０に送る。配布装置０４０は、利用機器０５０に署名付プログラムＩ６を配布する。利用機器０５０は、署名付プログラムＩ６に付加されている署名が正しいことを確認するとともに、その署名情報からプログラム危険度を読み取る。プログラム危険度が予め定めた実行可能危険度以下であれば、利用機器０５０はその署名付プログラムＩ６を実行する。このような本実施形態に係わるプログラム実行システムによれば、利用機器０５０はプログラムを実行して問題がないかどうかを機械的に判定することが可能となる。
【００１６】
以下、プログラム実行システムを構成する各々の装置について説明する。
【００１７】
図２は、検証装置０１０を示すブロック図である。この検証装置０１０は、プログラムを入力するプログラム入力部０１１と、プログラム危険度を判定する危険度判定部０１２と、プログラムを構成する命令別の危険度を記憶する命令別危険度記憶部０１３と、プログラムを構成するモジュール別の危険度を取得するモジュール別危険度判定部０１４と、プログラムの検証結果を出力する検証結果出力部０１５とを備える。
【００１８】
図２、図３および表１を参照し、検証装置０１０の動作について説明する。なお、図３は検証装置０１０の動作を示すフローチャートである。
【００１９】
まず危険度判定部０１２は、最大危険度（危険度の最大値）を示す変数ＭａｘＬｅｖｅｌを０にクリア（初期化）する（ステップＳ１）。
【００２０】
次に、プログラム入力部０１１は、検証対象プログラムＩ２から１つづつ命令を読み込み、危険度判定部０１２に送る（ステップＳ２）。
【００２１】
次に、危険度判定部０１２は、プログラム入力部０１１から送られてきた命令が、組み込み命令であるか否かを判定する（ステップＳ３）。プログラム入力部０１１から送られてきた命令が組み込み命令である場合、危険度判定部０１２は命令別危険度記憶部０１３からこの命令に対応する危険度を読み出し、変数Ｌｅｖｅｌに格納する（ステップＳ４）。命令別危険度記憶部０１３には、例えば表１のように、種々の命令とそれぞれの危険度とが対応付けられた命令別危険度データが予め記憶されている。
【表１】
2008158686.tif 000003
【００２２】
一方、ステップＳ３においてプログラム入力部０１１から送られてきた命令が署名済モジュールであった場合、危険度判定部０１２はモジュール別危険度判定部０１４に該モジュールを送り、該モジュールに対応する危険度を取得して変数Ｌｅｖｅｌに格納する（ステップＳ５）。このとき、モジュール別危険度判定部０１４は該モジュールに付いている署名を確認し、書き込まれている危険度を読み出すことにより危険度の値を取得する。なお、本プログラム実行システムにおいては、プログラムは組み込み命令と署名済モジュールで構成され、署名済でないモジュールが検証装置０１０へ入力されることはないものとする。本プログラム実行システムにおいてモジュールを利用するためには、そのモジュールを構成するプログラムについて、本プログラム実行システムにより危険度を判定し、署名を付ける必要がある。それでもなお何らかの誤りにより署名済でないモジュールが入力された場合は、危険度を、その取りうる最大値とすることで事故を防ぐことが好ましい。
【００２３】
次に、危険度判定部０１２は変数ＭａｘＬｅｖｅｌと変数Ｌｅｖｅｌの値を比較する。変数Ｌｅｖｅｌの方が値が大きければ変数Ｌｅｖｅｌの値を変数ＭａｘＬｅｖｅｌに代入する（ステップＳ７）。
【００２４】
次に、プログラム入力部０２１がプログラムを最後まで読み込んでいなければ、ステップＳ２へ戻る（ステップＳ８）。プログラム入力部０２１がプログラムを最後まで読み込んだならば、危険度判定部０１２は変数ＭａｘＬｅｖｅｌを検証結果出力部０１５に送る。検証結果出力部０１５は、危険度判定部０１２から受け取った変数ＭａｘＬｅｖｅｌの値をプログラム危険度とし、該プログラム危険度を含む検証結果Ｉ３を出力する。この変数ＭａｘＬｅｖｅｌの値（検証結果Ｉ３）に基づいて署名が行われることになる（ステップＳ９）。
【００２５】
このように検証装置０１０によれば、プログラムを機械的に検証することでプログラムの危険度を判定できる。図９は検証対象プログラムのソースコードの一例を示している。このプログラムはモジュール「ｇｅｔｗｅａｔｈｅｒ＿ｂｙ＿ｐｏｓｔａｌ」を利用しており、このモジュールは組み込み命令の表（命令別危険度データ；表１）中に記載されていない署名済モジュールである。図１０は、署名済モジュール「ｇｅｔｗｅａｔｈｅｒ＿ｂｙ＿ｐｏｓｔａｌ」のソースコードの一例を示している。
【００２６】
なお、検証装置０１０に例外判定のための機構を追加し、有用ではあるが機械的な検証では危険度の値が大きくなるプログラム（例えば図１０のプログラムは"socket"を含んでいることから危険度は「５」と判定される）の判定結果を、便宜的に修正するよう検証装置０１０を構成してもよい（例えば図１０のプログラムの危険度を「２」に修正する）。具体的な修正手法としては、例えば、危険度が小さいことが既知のプログラムのパターンを予め複数記憶しておき、これを入力されたプログラムと比較したり、プログラム中の変数間の関係を追跡して解析したりすることで危険度を修正してもよい。
【００２７】
なお、検証装置０１０は、例えば、汎用のコンピュータ装置を基本ハードウェアとして用いることでも実現することが可能である。すなわち、プログラム入力部０１１と、危険度判定部０１２と、命令別危険度記憶部０１３とモジュール別危険度判定部０１４および検証結果出力部０１５は、上記のコンピュータ装置に搭載されたプロセッサにプログラムを実行させることにより実現することができる。このとき、検証装置０１０は、上記のプログラムをコンピュータ装置に予めインストールすることで実現してもよいし、ＣＤ−ＲＯＭなどの記憶媒体に記憶して、あるいはネットワークを介して上記のプログラムを配布して、このプログラムをコンピュータ装置に適宜インストールすることで実現してもよい。また上記プログラムは、上記コンピュータ装置に内蔵あるいは外付けされたメモリ、ハードディスクもしくはＣＤ−Ｒ、ＣＤ−ＲＷ、ＤＶＤ−ＲＡＭ、ＤＶＤ−Ｒなどの記憶媒体などを適宜利用して実現することができる。
【００２８】
図４は署名装置０２０を示すブロック図である。署名装置０２０は、開発機器０３０から送られてきた検証対象プログラムＩ１を入力するプログラム入力部０２１と、検証対象プログラムＩ１に付加する署名を計算する署名計算部０２２と、署名に必要な秘密鍵を記憶する秘密鍵記憶部０２３と、検証装置０１０に対して検証対象プログラムＩ２を出力するプログラム出力部０２４と、検証装置０１０から送られてきた検証結果Ｉ３を入力するプログラム検証結果入力部０２５と、署名Ｉ４を開発機器０３に対して出力する署名出力部０２６を備えている。
【００２９】
図４および図８を参照し、署名装置０２０の動作について説明する。まず、プログラム入力部０２１は、開発機器０３０から送られてきた検証対象プログラムＩ１を読み込み、プログラム出力部０２４および署名計算部０２２に送る。プログラム出力部０２４は、検証対象プログラムＩ１をそのまま検証装置０１０に対して出力し、この出力された検証対象プログラムＩ２についての検証を依頼する。
【００３０】
次に、プログラム検証結果入力部０２５は、検証装置０１０から送られてきたプログラム検証結果Ｉ３を受け取り、署名計算部０２２に送る。署名計算部０２２は、プログラム入力部０２１から受け取った検証対象プログラムＩ１に付加すべき署名を、プログラム検証結果入力部０２５から受け取ったプログラム検証結果Ｉ３と、秘密鍵記憶部０２３に記憶されている秘密鍵群から読み出した秘密鍵と、署名装置０２０に係る検証者プロフィールとに基づいて計算（生成）する。
【００３１】
署名の計算について図８を参照しながら説明する。図８は署名付プログラムのデータ構造の一例を示している。
【００３２】
検証者プロフィール１０２と、プログラム危険度１０３（プログラム検証結果Ｉ３）と、プログラム１０４（検証対象プログラムＩ１）とを連結したものを検証者署名対象１０５とし、この検証者署名対象１０５を一方向性ハッシュ関数にかけ、その出力を秘密鍵にて暗号化したものを検証者署名（デジタル署名）１０１とする。検証者署名１０１と、検証者プロフィール１０２と、プログラム危険度１０３とを連結することによって署名Ｉ４を得ることができる。
【００３３】
検証者プロフィール１０２には、検証者のＩＤ、名称、デジタル証明書、ハッシュ関数アルゴリズム、デジタル署名アルゴリズム、シリアル番号、タイムスタンプ、有効期間、乱数などを含むことができる。これらの検証者プロフィール１０２は予め秘密鍵記憶部０２３に併せて記憶しておいてもよい。また、乱数を含む場合は、乱数を取得するための乱数発生器を、タイムスタンプを含む場合は現在時刻を取得するための時計を内蔵しておいてもよい。一方向性ハッシュ関数についてはＳＨＡ２５６等のハッシュ関数アルゴリズムや、ＡＥＳ等の秘密鍵暗号アルゴリズムを利用して構成することができる。また、デジタル署名は、ＲＳＡ公開鍵暗号アルゴリズムや楕円暗号アルゴリズムを使って構成することができる。署名計算部０２２は、計算した署名Ｉ４を署名出力部０２６に送る。署名出力部０２６は署名Ｉ４を開発機器０３０に送る。
【００３４】
このように、署名装置０２０によれば、検証装置０１０により検証されたプログラムの危険度に応じた署名を生成することが可能となる。
【００３５】
なお、この署名装置０２０は、例えば、汎用のコンピュータ装置を基本ハードウェアとして用いることでも実現することが可能である。すなわち、プログラム入力部０２１と、署名計算部０２２と、秘密鍵記憶部０２３と、プログラム出力部０２４と、プログラム検証結果入力部０２５および署名出力部０２６は、上記のコンピュータ装置に搭載されたプロセッサにプログラムを実行させることにより実現することができる。このとき、署名装置０２０は、上記のプログラムをコンピュータ装置に予めインストールすることで実現してもよいし、ＣＤ−ＲＯＭなどの記憶媒体に記憶して、あるいはネットワークを介して上記のプログラムを配布して、このプログラムをコンピュータ装置に適宜インストールすることで実現してもよい。また上記プログラムは、上記コンピュータ装置に内蔵あるいは外付けされたメモリ、ハードディスクもしくはＣＤ−Ｒ、ＣＤ−ＲＷ、ＤＶＤ−ＲＡＭ、ＤＶＤ−Ｒなどの記憶媒体などを適宜利用して実現することができる。
【００３６】
図５は、開発機器０３０を示すブロック図である。この開発機器０３０は、検証対象プログラムＩ１を記憶するプログラム記憶部０３１と、検証対象プログラムＩ１を出力するプログラム出力部０３２と、署名装置０２０から送られてきた署名Ｉ４を入力する署名入力部０３３と、検証対象プログラムＩ１に署名Ｉ４を付加する署名付加部０３４と、署名付プログラムＩ５を出力する署名付プログラム出力部０３５とを備えている。
【００３７】
図５を参照し、開発機器０３０の動作について説明する。
【００３８】
プログラム記憶部０３１は、開発及びテストが完了し、利用機器０５０による利用に供する前に予め検証を行う検証対象プログラムＩ１を記憶している。プログラム記憶部０３１は、この検証対象プログラムＩ１をプログラム出力部０３２および署名付加部０３４に送る。プログラム出力部０３２は、検証対象プログラムＩ１を署名装置０２０に送り、この検証対象プログラムＩ１に付加する署名の生成を署名装置０２０に依頼する。署名入力部０３３は、署名装置０２０から送られてきた署名Ｉ４を受け取り、署名付加部０３４に送る。署名付加部０３４は、プログラム記憶部０３１から受け取った検証対象プログラムＩ１に、署名入力部０３３から受け取った署名Ｉ４を付加し、生成した署名付プログラムＩ５を署名付プログラム出力部０３５に送る。署名付プログラムＩ５は、例えば図８に示したようなデータ構造を有する。そして、署名付プログラム出力部０３５は署名付プログラムＩ５を配布装置０４０に送る。このような開発機器０３０によれば、新規にプログラムが開発された時点で、署名装置０２０に対して検証及び署名生成を依頼し、署名付プログラムＩ５を容易に準備することができる。
【００３９】
なお、この開発機器０３０は、例えば、汎用のコンピュータ装置を基本ハードウェアとして用いることでも実現することが可能である。すなわち、プログラム記憶部０３１と、プログラム出力部０３２と、署名入力部０３３と、署名付加部０３４および署名付プログラム出力部０３５は、上記のコンピュータ装置に搭載されたプロセッサにプログラムを実行させることにより実現することができる。このとき、開発機器０３０は、上記のプログラムをコンピュータ装置に予めインストールすることで実現してもよいし、ＣＤ−ＲＯＭなどの記憶媒体に記憶して、あるいはネットワークを介して上記のプログラムを配布して、このプログラムをコンピュータ装置に適宜インストールすることで実現してもよい。上記プログラムは、上記コンピュータ装置に内蔵あるいは外付けされたメモリ、ハードディスクもしくはＣＤ−Ｒ、ＣＤ−ＲＷ、ＤＶＤ−ＲＡＭ、ＤＶＤ−Ｒなどの記憶媒体などを適宜利用して実現することができる。
【００４０】
図６は、配布装置０４０を示すブロック図である。配布装置０４０は、署名付プログラムＩ５を入力する署名付プログラム入力部０４１と、署名付プログラムＩ５を記憶する署名付プログラム記憶部０４２と、署名付プログラムＩ５を利用機器０５０への配布のために出力する署名付プログラム出力部０４３とを備えている。
【００４１】
図６を参照し、配布装置０４０の動作について説明する。まず、署名付プログラム入力部０４１は、署名付プログラムＩ５を開発機器０３０から受け取り、署名付プログラム記憶部０４２に送る。署名付プログラム記憶部０４２は、署名付プログラムＩ５を記憶すると共に、署名付プログラム出力部０４３に送る。署名付プログラム出力部０４３は、利用機器０５０からの配布要求に応じて、署名付プログラムＩ５を利用機器０５０に例えば通信回線等を通じて送信する。配布装置０４０によれば、署名付プログラムＩ５を開発機器０３０から受け入れて記憶し、利用機器０５０へ配布することが可能となる。
【００４２】
なお、この配布装置０４０は、例えば、汎用のコンピュータ装置を基本ハードウェアとして用いることでも実現することが可能である。すなわち、署名付プログラム入力部０４１と、署名付プログラム記憶部０４２、および署名付プログラム出力部０４３は、上記のコンピュータ装置に搭載されたプロセッサにプログラムを実行させることにより実現することができる。このとき、配布装置０４０は、上記のプログラムをコンピュータ装置に予めインストールすることで実現してもよいし、ＣＤ−ＲＯＭなどの記憶媒体に記憶して、あるいはネットワークを介して上記のプログラムを配布して、このプログラムをコンピュータ装置に適宜インストールすることで実現してもよい。上記プログラムは、上記コンピュータ装置に内蔵あるいは外付けされたメモリ、ハードディスクもしくはＣＤ−Ｒ、ＣＤ−ＲＷ、ＤＶＤ−ＲＡＭ、ＤＶＤ−Ｒなどの記憶媒体などを適宜利用して実現することができる。
【００４３】
図７は、利用機器０５０を示すブロック図である。利用機器０５０は、署名付プログラムＩ５を入力する署名付プログラム入力部０５１と、署名付プログラムＩ５の実行可否を確認する実行可否確認部０５２と、実行可能危険度記憶部０５３と、署名付プログラムＩ５を記憶する署名付プログラム記憶部０５４と、署名付プログラムＩ５を実行する署名付プログラム実行部０５５とを備えている。
【００４４】
図７を参照し、利用機器０５０の動作について説明する。まず、署名付プログラム入力部０５１は、署名付プログラムＩ５を配布装置０４０から受け取り、実行可否確認部０５２に送る。実行可否確認部０５２は、実行可能危険度記憶部０５３に記憶されている実行可能危険度を読み出し、署名付プログラム入力部０５１から送られた署名付プログラムＩ５に付加されている署名Ｉ４を比較し、このプログラムを実行してよいかどうかを判定する。署名Ｉ４に書かれたプログラムの危険度が実行可能危険度以下であった場合、実行可否確認部０５２は、署名付プログラムＩ５を署名付プログラム記憶部０５４に送る。署名付プログラム実行部０５５は、署名付プログラム記憶部０５４から署名付プログラムＩ５を読み出して実行する。このように、利用機器０５０によれば、署名付プログラムＩ５を配布装置０４０から受け入れ、実行可能危険度以下のプログラムについてはこれを記憶し、実行することが可能となる。
【００４５】
なお、この利用機器０５０は、例えば、汎用のコンピュータ装置を基本ハードウェアとして用いることでも実現することが可能である。すなわち、署名付プログラム入力部０５１と、実行可否確認部０５２と、実行可能危険度記憶部０５３と、署名付プログラム記憶部０５４、および署名付プログラム実行部０５５は、上記のコンピュータ装置に搭載されたプロセッサにプログラムを実行させることにより実現することができる。このとき、利用機器０５０は、上記のプログラムをコンピュータ装置に予めインストールすることで実現してもよいし、ＣＤ−ＲＯＭなどの記憶媒体に記憶して、あるいはネットワークを介して上記のプログラムを配布して、このプログラムをコンピュータ装置に適宜インストールすることで実現してもよい。上記プログラムは、上記コンピュータ装置に内蔵あるいは外付けされたメモリ、ハードディスクもしくはＣＤ−Ｒ、ＣＤ−ＲＷ、ＤＶＤ−ＲＡＭ、ＤＶＤ−Ｒなどの記憶媒体などを適宜利用して実現することができる。
【００４６】
上述した実施形態のバリエーションを以下に説明する。
【００４７】
（バリエーション１）
プログラムに脆弱性があることや危険な振る舞いをすることが後で判明したときに備えて、利用機器０５０は署名Ｉ４を無効にする仕組みを備えていても良い。この場合、別途、取消署名群を記憶する記憶部を設けておく。利用機器０５０の実行可否確認部０５２は、取消署名記憶部に記憶されている取消署名群を参照し、実行しようとしている署名付プログラムＩ５の署名が取消署名に該当しているかどうかを確認する。
【００４８】
（バリエーション２）
取消署名群を記憶する記憶部は、署名装置０２０、開発機器０３０や配布装置０４０からの通知（インシデントレポート）を受けて取消署名を追加してもよい。また、他の信頼できる認証機関による通知を受けて取消署名を追加してもよい。
【００４９】
（バリエーション３）
上記実施形態では、危険度判定部０１２がプログラム危険度を、検証対象プログラム中に含まれる組込命令と署名済モジュールの危険度の最大値となるように算出することについて説明したが（図３参照）、危険度の合計、平均、その他の指標を組み合わせてプログラム危険度を判定してもよい。また、プログラムの作成者によって危険度の値を補正してもよい。例えば、検証装置０１０に予め登録済みのプログラマが作成したプログラムについては危険度を１ほど低く補正する、匿名のプログラマが作成したプログラムについては危険度を１ほど高く補正することなどが想定される。
【００５０】
（バリエーション４）
上記実施形態では、署名装置０２０が署名Ｉ４を開発機器０３０に送り、開発機器０３０が検証対象プログラムＩ１に署名Ｉ４を付加したものに相当する署名付プログラムＩ５を生成して配布装置０４０に送るものとして説明した（図１参照）が、署名装置０２０が検証対象プログラムＩ１に署名Ｉ４を付加して署名付プログラムＩ５を生成し、この署名付プログラムＩ５を配布装置０４０に（開発機器０３０を介さずに）直接送ってもよい。
【００５１】
なお、本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
【図面の簡単な説明】
【００５２】
【図１】本発明の一実施形態に係わるプログラム実行システムを示すブロック図
【図２】検証装置を示すブロック図
【図３】検証装置の動作を示すフローチャート
【図４】署名装置を示すブロック図
【図５】開発機器を示すブロック図
【図６】配布装置を示すブロック図
【図７】利用機器を示すブロック図
【図８】署名付プログラムのデータ構造の一例を示す図
【図９】検証対象プログラムのソースコードの一例を示す図
【図１０】署名済モジュールのソースコードの一例を示す図
【符号の説明】
【００５３】
０１０…検証装置；０２０…署名装置；０３０…開発機器；０４０…配布装置；０５０…利用機器。
【図１】
2008158686.tif 000004
【図２】
2008158686.tif 000005
【図３】
2008158686.tif 000006
【図４】
2008158686.tif 000007
【図５】
2008158686.tif 000008
【図６】
2008158686.tif 000009
【図７】
2008158686.tif 000010
【図８】
2008158686.tif 000011
【図９】
2008158686.tif 000012
【図１０】
2008158686.tif 000013