(57)【要約】【課題】プログラムの動作遅延を抑制して動的リンクライブラリを保護および認証する。【解決手段】動的リンクライブラリを構成するオブジェクトから、保護すべき保護対象オブジェクトを指定する工程と、保護対象オブジェクトにハッシュ関数を適用してハッシュ値を算出する工程と、算出したハッシュ値と、保護対象オブジェクトの位置情報およびサイズ情報とを組み合わせたタプルを作成する工程と、動的リンクライブラリ内の保護対象オブジェクト毎のタプルの集合である位置サイズ付ハッシュアレイを作成する工程とを備えた。【選択図】図１
2015084006.tif 000002
【特許請求の範囲】
【請求項１】
プログラムから呼び出される動的リンクライブラリを保護する動的リンクライブラリ保護方法において、
前記動的リンクライブラリを構成するオブジェクトから、保護すべき保護対象オブジェクトを指定する工程と、
前記保護対象オブジェクトにハッシュ関数を適用してハッシュ値を算出する工程と、
前記算出したハッシュ値と、前記保護対象オブジェクトの位置情報およびサイズ情報とを組み合わせたタプルを作成する工程と、
前記動的リンクライブラリ内の保護対象オブジェクト毎のタプルの集合である位置サイズ付ハッシュアレイを作成する工程とを備えたことを特徴とする動的リンクライブラリ保護方法。
【請求項２】
前記動的リンクライブラリ内のオブジェクトから保護対象オブジェクトを指定する工程は、
前記動的リンクライブラリを呼び出すプログラムから直接参照されるオブジェクト、および直接的又は間接的に参照されるオブジェクトからの参照により前記プログラムから間接的に参照されるオブジェクトのみを、前記保護対象オブジェクトに指定することを特徴とする請求項１記載の動的リンクライブラリ保護方法。
【請求項３】
公開鍵暗号方式の秘密鍵を用いて、前記位置サイズ付ハッシュアレイの電子署名を作成する工程を備えたことを特徴とする請求項１または請求項２記載の動的リンクライブラリ保護方法。
【請求項４】
プログラムから呼び出される動的リンクライブラリを保護する動的リンクライブラリ保護方法において、
前記動的リンクライブラリと前記呼び出しプログラムとの組毎に請求項３の動的リンクライブラリ保護方法で作成した位置サイズ付ハッシュアレイと位置サイズ付ハッシュアレイの電子署名を、前記動的リンクライブラリと前記呼び出しプログラムとの組に関連付けて格納する工程を備えたことを特徴とする動的リンクライブラリ保護方法。
【請求項５】
プログラムから呼び出される動的リンクライブラリを保護する動的リンクライブラリ保護方法において、
前記プログラムを格納する工程と、
前記プログラムから呼び出される動的リンクライブラリを格納する工程と、
保護対象として指定されたプログラムに保護対象であることを印づける工程とを備え、
前記保護対象として指定されたプログラムおよび当該該プログラムから呼び出される動的リンクライブラリの組に対しては、請求項４記載の動的リンクライブラリの保護方法で位置サイズ付ハッシュアレイおよび電子署名を作成および格納し、
前記保護対象として指定されていないプログラム、および当該プログラムから呼び出される動的リンクライブラリの組に対しては、位置サイズ付ハッシュアレイと電子署名を作成せず、格納も行わないことを特徴とする動的リンクライブラリ保護方法。
【請求項６】
前記プログラムを保護対象として指定する工程は、
前記プログラム中に保護必要なオブジェクトを含んでいる場合、または前記プログラムから直接的に参照されるオブジェクトが保護必要である場合、または参照されているオブジェクトから更に参照されるオブジェクトが保護必要である場合に、前記プログラムを保護対象として指定することを特徴とする請求項５の動的リンクライブラリ保護方法。
【請求項７】
プログラムから呼び出される動的リンクライブラリを認証する動的リンクライブラリ認証方法において、
前記動的リンクライブラリ内の保護対象オブジェクト毎のハッシュ値と位置情報とサイズ情報を組み合わせたタプルの集合である位置サイズ付ハッシュアレイ内の、全ての前記タプルから前記動的リンクライブラリ内の保護対象オブジェクトを特定する工程と、
前記保護対象オブジェクトそれぞれのハッシュ値を算出する工程と、
前記算出されたハッシュ値と、前記位置サイズ付ハッシュアレイを構成するハッシュ値とを比較検証する工程と、
前記位置サイズ付ハッシュアレイ内の全てのタプルにおいて、前記比較検証の結果が一致する場合には認証結果を合格と判定し、前記比較検証の結果が不一致になるタプルが存在する場合には認証結果を不合格と判定する工程とを備えたことを特徴とする動的リンクライブラリ認証方法。
【請求項８】
公開鍵を用いて前記位置サイズ付ハッシュアレイを電子署名により検証する工程を備え、
前記認証結果を判定する工程は、前記電子署名が前記位置サイズ付ハッシュアレイの電子署名として適合し、且つ前記全てのタプルにおいて、前記比較検証の結果が一致する場合には認証結果を合格と判定し、前記電子署名が前記位置サイズ付ハッシュアレイの電子署名として不適合であるか、または前記比較検証の結果に不一致がある場合には認証結果を不合格と判定することを特徴とする請求項７記載の動的リンクライブラリ認証方法。
【請求項９】
プログラムから呼び出される動的リンクライブラリを認証する動的リンクライブラリ認証方法において、
前記動的リンクライブラリと前記呼び出しプログラムとの組に関連付けられた前記位置サイズ付ハッシュアレイおよび前記位置サイズ付ハッシュアレイの電子署名を読出す工程と、
前記位置サイズ付ハッシュアレイと前記位置サイズ付ハッシュアレイの電子署名のいずれか一方、または両方の読出しに失敗した場合に、認証結果を不合格と判定する工程とを備え、
前記位置サイズ付ハッシュアレイおよび前記位置サイズ付ハッシュアレイの電子署名の両方の読出しに成功した場合に、請求項８記載の動的リンクライブラリ認証方法を実施することを特徴とする動的リンクライブラリ認証方法。
【請求項１０】
プログラムから呼び出される動的リンクライブラリを認証する動的リンクライブラリ認証方法において、
前記プログラムを読出す工程と、
前記プログラムが保護対象として印ついているか否か判別する工程とを備え、
前記プログラムが保護対象として印ついている場合に、請求項９記載の動的リンクライブラリ認証方法を実施し、前記プログラムが保護対象と印つけられていない場合に、請求項９の動的リンクライブラリ認証方法の実施をスキップすることを特徴とする動的リンクライブラリ認証方法。
【請求項１１】
プログラムから呼び出される動的リンクライブラリを保護する動的リンクライブラリ保護装置において、
前記動的リンクライブラリを構成するオブジェクトから、保護すべき保護対象オブジェクトを指定する手段と、
前記保護対象オブジェクトにハッシュ関数を適用してハッシュ値を算出する手段と、
前記保護対象オブジェクトのハッシュ値と、前記保護対象オブジェクトの位置情報およびサイズ情報とを組み合わせたタプルを作成する手段と、
前記動的リンクライブラリ内の前記保護対象オブジェクトの前記タプルを集めた位置サイズ付ハッシュアレイを作成する手段とを備えたことを特徴とする動的リンクライブラリ保護装置。
【請求項１２】
公開鍵暗号方式の秘密鍵を用いて、前記位置サイズ付ハッシュアレイの電子署名を作成する手段を備えたことを特徴とする請求項１１記載の動的リンクライブラリ保護装置。
【請求項１３】
プログラムから呼び出される動的リンクライブラリを認証する動的リンクライブラリ認証装置において、
前記動的リンクライブラリ内の前記保護対象オブジェクトのハッシュ値と位置情報とサイズ情報を組み合わせたタプルの集合である位置サイズ付ハッシュアレイ内の全てのタプルから、前記動的リンクライブラリ内の保護対象オブジェクトを特定する手段と、
前記特定した保護対象オブジェクトのハッシュ値を算出する手段と、
前記算出したハッシュ値と、前記位置サイズ付ハッシュアレイを構成するハッシュ値とを比較検証する手段と、
前記位置サイズつきハッシュアレイ内の全てのタプルにおいて、前記比較検証の結果が一致する場合には認証結果を合格と判定し、前記比較検証の結果が不一致になるタプルが存在する場合には認証結果を不合格と判定する判定手段を備えたことを特徴とする動的リンクライブラリ認証装置。
【請求項１４】
公開鍵と電子署名を用いて、前記位置サイズ付ハッシュアレイを検証する手段を備え、
判定手段は、前記電子署名が前記位置サイズ付ハッシュアレイの電子署名として適合し、且つ前記全てのタプルにおいて前記比較検証の結果が一致する場合には、認証結果を合格と判定し、前記電子署名が前記位置サイズ付ハッシュアレイの電子署名として不適合であるか、または前記比較検証の結果に不一致がある場合には、認証結果を不合格と判定する判定手段であることを特徴とする請求項１３記載の動的リンクライブラリ認証装置。
【請求項１５】
動的リンクライブラリを使用するプログラムを実行するプログラム管理システムにおいて、
前記動的リンクライブラリ内の前記保護対象オブジェクトのハッシュ値と位置情報とサイズ情報を組み合わせたタプルの集合である位置サイズ付ハッシュアレイと当該位置サイズ付ハッシュアレイの電子署名を前記プログラムと前記動的リンクライブラリの組に関連付けて格納する手段と、前記プログラムと前記動的リンクライブラリの組に関連付いた位置サイズ付ハッシュアレイおよび当該位置サイズ付ハッシュアレイの電子署名を読出す手段とを備えたアレイ記憶装置と、
前記動的リンクライブラリを格納する手段と、前記動的リンクライブラリを読出す手段とを備えたライブラリ記憶装置と、
前記プログラムを格納する手段と、前記プログラムを読出す手段とを備えたプログラム記憶装置と、
前記位置サイズ付ハッシュアレイ内の全てのタプルから、前記動的リンクライブラリ内の保護対象オブジェクトを特定する手段と、前記特定した保護対象オブジェクトのハッシュ値を算出する手段と、前記算出したハッシュ値と、前記位置サイズ付ハッシュアレイ内のタプルを構成するハッシュ値とを比較検証する手段と、公開鍵と電子署名を用いて、前記位置サイズ付ハッシュアレイを検証する手段と、認証結果を判定する判定手段とを備えた動的リンクライブラリ認証装置と、
前記プログラムの起動指示を受け取る入力手段と、当該起動指示からプログラム識別子を抽出する解析手段と、読出したプログラムについてどのライブラリの動的リンクが必要かを検出する手段と、前記動的リンクライブラリ認証装置の判定した認証結果が合格である場合に起動時動的リンクを実施し、前記動的リンクライブラリ認証装置の判定した認証結果が不合格である場合に起動時動的リンクを中止する動的リンク手段とを備えるプログラム処理装置とを備えることを特徴とするプログラム管理システム。
【請求項１６】
動的リンクライブラリを使用するプログラムを実行するプログラム管理システムにおいて、
前記動的リンクライブラリ内の前記保護対象オブジェクトのハッシュ値と位置情報とサイズ情報を組み合わせたタプルの集合である位置サイズ付ハッシュアレイと当該位置サイズ付ハッシュアレイの電子署名を前記プログラムと前記動的リンクライブラリの組に関連付けて格納する手段と、前記プログラムと前記動的リンクライブラリの組に関連付いた位置サイズ付ハッシュアレイおよび当該位置サイズ付ハッシュアレイの電子署名を読出す手段とを備えたアレイ記憶装置と、
前記動的リンクライブラリを格納する手段と、前記動的リンクライブラリを読出す手段とを備えたライブラリ記憶装置と、
前記プログラムを格納する手段と、前記プログラムを読出す手段とを備えたプログラム記憶装置と、
前記位置サイズ付ハッシュアレイ内の全てのタプルから、前記動的リンクライブラリ内の保護対象オブジェクトを特定する手段と、前記特定した保護対象オブジェクトのハッシュ値を算出する手段と、前記算出したハッシュ値と、前記位置サイズ付ハッシュアレイ内のタプルを構成するハッシュ値とを比較検証する手段と、公開鍵と電子署名を用いて、前記位置サイズ付ハッシュアレイを検証する手段と、認証結果を判定する判定手段とを備えた動的リンクライブラリ認証装置と、
前記プログラムからライブラリロード指示を受け取る入力手段と、当該ロード指示からライブラリ識別子を抽出する解析手段と、前記動的リンクライブラリ認証装置の判定した認証結果が合格である場合に実行中動的リンクを実施し、前記動的リンクライブラリ認証装置の判定した認証結果が不合格である場合に実行中動的リンクを中止する動的リンク手段とを備えるプログラム処理装置とを備えることを特徴とするプログラム管理システム。
【請求項１７】
前記プログラム処理装置は、
前記プログラムからのアドレス取得指示を受け取る入力手段と、
前記アドレス取得指示から、オブジェクト名とライブラリ識別子を抽出する解析手段と、
前記ライブラリ識別子の指すロード済みライブラリの動的シンボルテーブルから、前記オブジェクト名に該当するオブジェクトのエントリを検索し、オブジェクトの位置情報とサイズ情報を取得する検索手段と、
前記ライブラリとプログラムの組に対応した位置サイズ付ハッシュアレイに、前記オブジェクトの位置情報とサイズ情報で指定されるオブジェクトが登録されているかどうかを判定するオブジェクト検証手段と、
前記オブジェクトが登録されており、且つ前記ライブラリが認証済みである場合にはアドレスを出力し、前記オブジェクトが登録されていない、または前記ライブラリが認証されていない場合にはアドレスの出力を中止するアドレス出力手段とを備えたことを特徴とする請求項１６記載のプログラム管理システム。
【請求項１８】
動的リンクライブラリを使用するプログラムを実行するプログラム管理システムにおいて、
前記動的リンクライブラリを構成するオブジェクトから、保護すべき保護対象オブジェクトを指定する手段と、前記保護対象オブジェクトにハッシュ関数を適用してハッシュ値を算出する手段と、前記保護対象オブジェクトのハッシュ値と、前記保護対象オブジェクトの位置情報およびサイズ情報とを組み合わせたタプルを作成する手段と、前記位置サイズ付ハッシュアレイを作成する手段と、公開鍵暗号方式の秘密鍵を用いて、前記位置サイズ付ハッシュアレイの電子署名を作成する手段とを備えた動的リンクライブラリ保護装置
を備えることを特徴とする請求項１５から請求項１７のうちのいずれか１項記載のプログラム管理システム。
【請求項１９】
プログラムから呼び出される動的リンクライブラリを保護する動的リンクライブラリ保護方法において、
前記プログラムから直接的にあるいは間接的に呼び出されるライブラリのそれぞれについて、請求項２記載の動的リンクライブラリの保護方法で作成する位置サイズ付ハッシュアレイとライブラリ識別子をペアにする工程と、
前記プログラムについて作成されたそれぞれの前記位置サイズ付ハッシュアレイと前記ライブラリ識別子のペアの集合である統合ハッシュアレイを作成する工程とを備えることを特徴とする動的リンクライブラリ保護方法。
【請求項２０】
公開鍵暗号方式の秘密鍵を用いて、前記統合ハッシュアレイの電子署名を作成する工程を備えたことを特徴とする請求項１９記載の動的リンクライブラリ保護方法。
【請求項２１】
プログラムから呼び出される動的リンクライブラリを保護する動的リンクライブラリ保護方法において、
前記呼び出しプログラム毎に請求項２０の動的リンクライブラリ保護方法で作成した統合ハッシュアレイと統合ハッシュアレイの電子署名を、前記呼び出しプログラムに関連付けてアレイ記憶装置に格納する工程を備えたことを特徴とする動的リンクライブラリ保護方法。
【請求項２２】
プログラムから呼び出される動的リンクライブラリを保護する動的リンクライブラリ保護方法において、
前記プログラムを格納する工程と、
保護対象として指定されたプログラムに保護対象であることを印づける工程とを備え、
保護対象として指定されたプログラム対して、請求項２１記載の動的リンクライブラリの保護方法で前記統合ハッシュアレイと前記電子署名を作成し格納する、
保護対象として指定されていないプログラムに対しては、前記統合ハッシュアレイと前記電子署名を作成せず、格納も行わないことを特徴とする動的リンクライブラリ保護方法。
【請求項２３】
プログラムから呼び出される動的リンクライブラリを認証する動的リンクライブラリ認証方法において、
前記プログラムについて作成されたそれぞれの、前記動的リンクライブラリ内の保護対象オブジェクト毎のハッシュ値と位置情報とサイズ情報を組み合わせたタプルの集合である位置サイズ付ハッシュアレイと前記ライブラリ識別子のペアの集合である統合ハッシュアレイ内から、前記動的リンクライブラリの識別子とペアにされた前記位置サイズ付ハッシュアレイを検索する工程と、
前記位置サイズ付ハッシュアレイ内の全てのタプルから前記動的リンクライブラリ内の保護対象オブジェクトを特定する工程と、
前記保護オブジェクトそれぞれのハッシュ値を算出する工程と、
前記算出されたハッシュ値と、前記位置サイズ付ハッシュアレイを構成するハッシュ値とを比較検証する工程と、
前記動的リンクライブラリの識別子を含むペアが前記統合ハッシュアレイの中に存在しない場合に認証不合格と判定し、
前記動的リンクライブラリの識別子を含むペアが前記統合ハッシュアレイの中に存在する場合であり、且つ前記ペアを構成する位置サイズ付ハッシュアレイ内の全てのタプルについて前記比較検証の結果が一致する場合には認証結果を合格と判定し、前記比較検証の結果が不一致になるタプルが存在する場合には認証結果を不合格と判定する工程とを備えたことを特徴とする動的リンクライブラリ認証方法。
【請求項２４】
公開鍵を用いて、前記統合ハッシュアレイを電子署名により検証する工程を備え、
前記認証結果を判定する工程は、前記電子署名が前記統合ハッシュアレイの電子署名として適合し、且つ前記動的リンクライブラリの識別子を含むペアが前記統合ハッシュアレイの中に存在し、且つ前記ペアを構成する位置サイズ付ハッシュアレイ内の全てのタプルにおいて、前記比較検証の結果が一致する場合には認証結果を合格と判定し、前記電子署名が前記統合ハッシュアレイの電子署名として不適合であるか、または前記動的リンクライブラリの識別子を含むペアが前記統合ハッシュアレイの中に存在しないか、または前記ペアを構成する位置サイズ付ハッシュアレイ内のいずれかのタプルにおいて、前記比較検証の結果に不一致がある場合には認証結果を不合格と判定することを特徴とする請求項２３記載の動的リンクライブラリ認証方法。
【請求項２５】
プログラムから呼び出される動的リンクライブラリを認証する動的リンクライブラリ認証方法において、
前記呼び出しプログラムに関連付けられた前記統合ハッシュアレイと前記統合ハッシュアレイの電子署名を読出す工程と、
前記統合ハッシュアレイと前記統合ハッシュアレイの電子署名のいずれか一方、または両方の読出しに失敗した場合に、認証結果を不合格と判定する工程とを備え、
前記統合ハッシュアレイと前記統合ハッシュアレイの電子署名の両方の読出しに成功した場合に、請求項２４記載の動的リンクライブラリ認証方法を実施することを特徴とする動的リンクライブラリ認証方法。
【請求項２６】
前記プログラムを読出す工程と、
前記プログラムが保護対象として印ついているか否か判別する工程とを備え、
前記プログラムが保護対象として印ついている場合に、請求項２５記載の動的リンクライブラリ認証方法を実施することを特徴とする動的リンクライブラリ認証方法。
【請求項２７】
プログラムから呼び出される動的リンクライブラリを保護する動的リンクライブラリ保護装置であって、
前記動的リンクライブラリ内の保護対象オブジェクト毎のタプルの集合である位置サイズ付ハッシュアレイを前記動的リンクライブラリの識別子と共にペアにする手段と、
前記プログラムから使用する動的リンクライブラリについて、前記ペアを集めた統合ハッシュアレイを作成する手段とを備えた動的リンクライブラリ保護装置。
【請求項２８】
公開鍵暗号方式の秘密鍵を用いて前記統合ハッシュアレイの電子署名を作成する手段を備えたことを特徴とする請求項２７記載の動的リンクライブラリ保護装置。
【請求項２９】
プログラムから呼び出される動的リンクライブラリを認証する動的リンクライブラリ認証装置において、
前記プログラムについて作成されたそれぞれの、前記動的リンクライブラリ内の保護対象オブジェクト毎のタプルの集合である位置サイズ付ハッシュアレイと前記ライブラリ識別子のペアの集合である統合ハッシュアレイ内から、前記動的リンクライブラリの識別子とペアにされた前記位置サイズ付ハッシュアレイを検索する手段と、
前記位置サイズ付ハッシュアレイ内の全てのタプル内から前記動的リンクライブラリ内の保護対象オブジェクトを特定する手段と、
前記保護オブジェクトのハッシュ値を算出する手段と、
前記算出されたハッシュ値を、前記位置サイズ付きハッシュアレイを構成するハッシュ値とを比較検証する手段と、
前記動的リンクライブラリの識別子を含むペアが前記統合ハッシュアレイの中に存在しない場合に認証不合格と判定し、前記動的リンクライブラリの識別子を含むペアが前記統合ハッシュアレイの中に存在する場合であり、且つ前記ペアを構成する位置サイズ付ハッシュアレイ内の全てのタプルについて前記比較検証の結果が一致する場合には認証結果を合格と判定し、前記比較検証の結果が不一致になるタプルが存在する場合には認証結果を不合格と判定する判定手段を備えたことを特徴とする動的リンクライブラリ認証装置。
【請求項３０】
公開鍵および電子署名を用いて前記統合ハッシュアレイを検証する手段を備え、
判定手段は、前記電子署名が前記統合ハッシュアレイの電子署名として適合し、且つ前記動的リンクライブラリの識別子を含むペアが前記統合ハッシュアレイの中に存在し、かつ前記ペアを構成する位置サイズ付ハッシュアレイ内の全てのタプルにおいて、前記比較検証の結果が一致する場合には認証結果を合格と判定し、前記電子署名が前記統合ハッシュアレイの電子署名として不適合であるか、または前記動的リンクライブラリの識別子を含むペアが前記統合ハッシュアレイの中に存在しないか、または前記ペアを構成する位置サイズ付ハッシュアレイ内のいずれかのタプルにおいて、前記比較検証の結果に不一致がある場合には認証結果を不合格と判定することを特徴とする請求項２９記載の動的リンクライブラリ認証装置。
【請求項３１】
動的リンクライブラリを使用するプログラムを実行するプログラム管理システムにおいて、
前記プログラムについて作成されたそれぞれの、前記動的リンクライブラリ内の保護対象オブジェクト毎のタプルの集合である位置サイズ付ハッシュアレイと前記ライブラリ識別子のペアの集合である統合ハッシュアレイと当該統合ハッシュアレイの電子署名を、前記プログラムに関連付けて格納する手段と、前記プログラムに関連付いた、統合ハッシュアレイと当該統合ハッシュアレイの電子署名を読出す手段とを備えたアレイ記憶装置と、
前記動的リンクライブラリを格納する手段と、前記動的リンクライブラリを読出す手段とを備えたライブラリ記憶装置と、
前記プログラムを格納する手段と、前記プログラムを読出す手段とを備えるプログラム記憶装置と、
前記動的リンクライブラリの識別子とペアにされた位置サイズ付ハッシュアレイを統合ハッシュアレイ内の中から検索する手段と、前記位置サイズ付ハッシュアレイ内の全てのタプルから前記ライブラリ内の保護対象オブジェクトを特定する手段と、前記保護対象オブジェクトのハッシュ値を算出する手段と、前記算出されたハッシュ値を、前記位置サイズ付きハッシュアレイ内のタプルを構成するハッシュ値とを比較検証する手段と、公開鍵および電子署名を用いて前記統合ハッシュアレイを検証する手段と、認証結果を判定する判定手段を備え、前記統合ハッシュアレイを検証した結果をハッシュアレイ認証結果として出力し、前記比較検証の結果をライブラリ認証結果として出力する動的リンクライブラリ認証装置と、
前記プログラムの起動指示を受け取る入力手段と、当該起動指示からプログラム識別子を抽出する解析手段と、読出したプログラムについてどのライブラリの動的リンクが必要かを検出する手段と、前記動的リンクライブラリ認証装置の出力するハッシュアレイ認証結果とライブラリ認証結果が共に合格である場合に起動時動的リンクを実施し、前記動的リンクライブラリ認証装置の出力するハッシュアレイ認証結果とライブラリ認証結果のいずれかまたは両方が不合格である場合に起動時動的リンクを中止する動的リンク手段とを備えるプログラム処理装置とを備えることを特徴とするプログラム管理システム。
【請求項３２】
動的リンクライブラリを使用するプログラムを実行するプログラム管理システムにおいて、
前記プログラム処理装置は、
前記プログラムからのライブラリロード指示を受け取る入力手段と、
当該ライブラリロード指示からライブラリ識別子を抽出する解析手段と、
前記動的リンクライブラリ認証装置の出力するライブラリ認証結果が合格である場合に実行中動的リンクを実施し、前記動的リンクライブラリ認証装置の出力するライブラリ認証結果が不合格である場合に実行中動的リンクを中止する動的リンク手段とを備えたことを特徴とする請求項３１記載のプログラム管理システム。
【請求項３３】
前記プログラム処理装置は、
前記プログラムからのアドレス取得指示を受け取る入力手段と、
当該アドレス取得指示からオブジェクト名とライブラリ識別子を抽出する解析手段と、
当該該ライブラリ識別子の指すロード済み動的リンクライブラリの動的シンボルテーブルから、前記オブジェクト名に該当するオブジェクトのエントリを検索し、前記オブジェクトの位置情報およびサイズ情報を取得する検索手段と、
前記プログラムに対応した統合ハッシュアレイに、前記ライブラリ識別子とペアになった位置サイズ付ハッシュアレイが登録されているか否かを判別し、位置サイズ付ハッシュアレイが登録されていなければ前記オブジェクトが登録されていないと判定し、位置サイズ付ハッシュアレイが登録されていれば更に、該当の位置サイズ付ハッシュアレイに、前記オブジェクトの位置情報とサイズ情報に基づいて指定されるオブジェクトが登録されているか否かを判定するオブジェクト検証手段と、
前記オブジェクトが登録されており、且つ前記動的リンクライブラリが認証済みである場合にはアドレスを出力し、登録されていない、または前記動的リンクライブラリが認証されていない場合にはアドレスの出力を中止するアドレス出力手段とを備えたことを特徴とする請求項３２記載のプログラム管理システム。
【請求項３４】
動的リンクライブラリを使用するプログラムを実行するプログラム管理システムにおいて、
前記動的リンクライブラリを構成するオブジェクトから、保護すべき保護対象オブジェクトを指定する手段と、前記保護対象オブジェクトにハッシュ関数を適用してハッシュ値を算出する手段と、前記保護対象オブジェクトのハッシュ値と、前記保護対象オブジェクトの位置情報およびサイズ情報とを組み合わせたタプルを作成する手段と、前記動的リンクライブラリ内の前記保護対象オブジェクトの前記タプルを集めた位置サイズ付ハッシュアレイを作成する手段とを備えたことを特徴とする動的リンクライブラリ保護装置と、
前記位置サイズ付ハッシュアレイを前記動的リンクライブラリの識別子と共にペアにする手段と、前記プログラムから使用する動的リンクライブラリについて、前記ペアを集めた統合ハッシュアレイを作成する手段と、公開鍵暗号方式の秘密鍵を用いて前記統合ハッシュアレイの電子署名を作成する手段とを備えた動的リンクライブラリ保護装置と、
を備えることを特徴とする請求項３１から請求項３３のうちのいずれか１項記載のプログラム管理システム。
【請求項３５】
前記プログラム記憶装置は、前記格納されているプログラムに保護必要か否かを印つける手段と、前記プログラムに保護必要と印つけられているかどうかを得る手段とをさらに備えたプログラム記憶装置であり、
前記プログラム処理装置は、読出されたプログラムが保護必要と印つけられているか否かを判定する手段をさらに備え、プログラムが保護必要と印つけられている場合に請求項９記載の動的リンクライブラリ認証方法を実施して動的リンクを実施し、プログラムが保護必要と印つけられていない場合に請求項９記載の動的リンクライブラリ認証方法の実施をスキップして動的リンクを実施するプログラム処理装置であることを特徴とする請求項１５から請求項１８のうちのいずれか１項記載のプログラム管理システム。
【請求項３６】
前記プログラム記憶装置は、格納されているプログラムに保護必要か否か印つける手段と、保護必要と印付けられているかどうかを得る手段とを備えたプログラム記憶装置であり、
前記プログラム処理装置は、読出されたプログラムが保護必要と印つけられていたものかどうかを判定する手段を備え、プログラムが保護必要と印付けられている場合に請求項２５記載の動的リンクライブラリ認証方法の認証を実施し、プログラムが保護必要と印つけられていない場合に請求項２５記載の動的リンクライブラリ認証方法の認証をスキップして動的リンクを実施するプログラム処理装置であることを特徴とする請求項３１から請求項３４のうちのいずれか１項記載のプログラム管理システム。
【請求項３７】
プログラムおよび前記プログラムから呼び出される動的リンクライブラリを保護するプログラムおよび動的リンクライブラリ保護方法において、
保護対象と印づけたプログラムに公開鍵暗号の秘密鍵を用いて電子署名を作成する工程と、
前記プログラムの電子署名を前記プログラムに関連付けて格納する工程と、
請求項５または請求項６または請求項２２記載の動的リンクライブラリ保護方法を実施する工程とを備えることを特徴とするプログラムおよび動的リンクライブラリ保護方法。
【請求項３８】
プログラムおよび前記プログラムから呼び出される動的リンクライブラリを認証するプログラムおよび動的リンクライブラリ認証方法において、
請求項１０または請求項２６記載の動的リンクライブラリ認証方法を実施する工程と、
前記プログラムが保護対象として印ついている場合には、前記プログラムに関連づいた電子署名を読出す工程と、
公開鍵を用いて前記プログラムを前記電子署名により検証する工程とを備え、
前記電子署名の読出しに失敗した場合には認証結果を不合格とし、前記電子署名が読出しに成功し、且つ前記プログラムの署名として適合している場合には認証結果を合格とし、前記電子署名が読出しに成功しても、前記プログラムの署名として不適合の場合には認証結果を不合格とすることを特徴とするプログラムおよび動的リンクライブラリ認証方法。
【請求項３９】
前記プログラムの電子署名を格納する手段と、前記プログラムの電子署名を読出す手段とを備えるプログラム電子署名記憶装置と、
公開鍵暗号方式の秘密鍵を用いて前記プログラムの電子署名を作成する手段を備えるプログラム保護装置と、
公開鍵を用いて前記プログラムを前記電子署名により検証する手段を備えるプログラム検証装置とを備え、
請求項３７記載のプログラムおよび動的リンクライブラリ保護方法により前記プログラムおよび前記動的リンクライブラリを保護し、請求項３８記載のプログラムおよび動的リンクライブラリ認証方法で前記プログラム及び動的リンクライブラリを認証することを特徴とする請求項１５から請求項１８および請求項３１から請求項３６のうちのいずれか１項記載のプログラム管理システム。
【請求項４０】
前記ライブラリ内のオブジェクトを保護対象として指定する工程は、
オブジェクト名を明に指定し、さらに前記ライブラリのシンボルテーブルを参照して、前記オブジェクト名から前記オブジェクトの位置情報およびサイズ情報を得る工程を備えたことを特徴とする請求項１から請求項６のうちのいずれか１項記載の動的リンクライブラリ保護方法。
【請求項４１】
前記動的リンクライブラリを構成するオブジェクトから、保護すべき保護対象オブジェクトを指定する手段は、
オブジェクト名を明に指定し、さらに前記ライブラリのシンボルテーブルを参照して、前記オブジェクト名から前記オブジェクトの位置情報およびサイズ情報を得る手段を備えたことを特徴とする請求項１１または請求項１２記載の動的リンクライブラリ保護装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、動的リンクライブラリの改竄に対する保護を行う装置およびその方法と、改竄有無を検証することにより動的リンクライブラリの認証を行う装置およびその方法と、これらの装置および方法により正当性を確認した上でプログラムを実行するプログラム管理システムに関するものである。
【背景技術】
【０００２】
デジタルコンテンツは通常著作者が諸権利を有しており、流通配布されたものを正規に受領したとしても、それは物品の流通とは異なって所有権が移転したわけではなく、単に鑑賞などの目的で利用することが許諾されたというだけである。デジタルデータが容易に複製できてしまう点と著作者の作成労力が報われるべきである点との釣り合いを配慮するならば、デジタルコンテンツの利用者を限定したり、デジタルコンテンツ観賞用装置の複製機能を制限したりすることは、やむを得ない処置である。しかしながら、利害関係の点では利用者は手元にあるものから最大の利を得ようと試みがちであり、前記観賞用装置の制限を不正解除しようとする動機が発生する。
【０００３】
例えば観賞用装置がソフトウェア・プログラムで実現されている場合には、該当プログラムの機能制限実現箇所を改竄することにより、デジタルコンテンツを不正に利用しようとすることが考えられる。あるいは機能制限を持たない点を除き鑑賞装置同等の機能を持つ、代替品プログラムを実行させることにより、不正利用しようとすることが考えられる。本来のプログラムから代替品への制御遷移は、前記プログラム内のどの箇所を実行している最中であっても目的を達成できてしまうので、プログラムで読み書き実行される全てのオブジェクトに改竄を受けるおそれがある。
【０００４】
上記の様な改竄の脅威に対して、電子署名を用いてプログラムを保護しておき、プログラム起動時等に改竄がないか検証することで正規プログラムであると認証し、合格時に限ってプログラム起動を成功させる様、あるいは合格時に限ってプログラム実行を継続させる様、防御策を採ることがある。
【０００５】
しかしながらこの検証にかかる処理は、プログラム起動時においては該当プログラム本来の処理が開始されるまでの間に相応の時間を要することとなるという課題があった。より適切に言えば、防御と所要時間短縮化の両立が課題であった。
【０００６】
その対策として、特許文献１および特許文献２には、プログラムをメモリ管理単位であるページ毎に分けて保護を行う共通の方法と、検証によりプログラム認証する方法が開示されている。また、特許文献３にも同一の保護方法が開示されている。
【０００７】
図３６は、従来技術の保護方式を示した図である。プログラム９はメモリ管理単位（通例４ＫＢまたは８ＫＢ）で分割され、分割後をそれぞれページ９１〜９４とする。まず各ページにハッシュ関数（一方向関数）を適用してハッシュ値２９１〜２９４を得、各ハッシュ値を要素とするハッシュアレイ１０９を作成する。次にハッシュアレイに対して秘密鍵７００を用いて電子署名６０９を作成する。
【０００８】
また、図３６で示した署名作成はハッシュアレイ１０９に対して更にハッシュ関数を適用してアレイハッシュ値（図示せず）を算出する段階と、アレイハッシュ値に対して署名関数を適用して電子署名を得る段階とで構成されている。署名作成手続きとして知られているものには、例えば非特許文献１に記載されている、入力値定義域に制約のあるRSASP1と、ハッシュ関数およびパディングをRSASP1の前段階として持ち制約緩和したRSASSA-PSS-SIGNおよびRSASSA-PKCS1-v1_5-SIGNとがある。従来技術の署名作成過程は、後者のタイプの署名作成手続きを示すものである。
【０００９】
図３７は、従来技術の認証方式を示した図である。まず電子署名作成時に用いた秘密鍵に対応する公開鍵７０１を用いて、電子署名６０９がハッシュアレイ１０９の署名として適合しているかどうかを検証する。次にプログラム９の各ページがロードされるたびに、該当ページ（図３７の例ではページ９２）にハッシュ関数を適用してハッシュ値５９２を算出し、ハッシュアレイ１０９に格納されていたハッシュ値２９２と比較する。署名検証もしくはハッシュ値比較検証のいずれかで不適合または不一致が検出されれば、改竄ありと判定する。特許文献１ではページをロードする度にハッシュ値算出と比較検証を行い、特許文献２では更に、プログラムの実行に連れてページが必要になる度にページロードとハッシュ値算出と比較検証を行うことで、プログラム実行と認証処理を並行実施している。
【００１０】
また、図３７で示した署名検証はハッシュアレイ１０９に対して更にハッシュ関数を適用してアレイハッシュ値（図示せず）を算出する段階と、アレイハッシュ値および電子署名に対して検証関数を適用して適合性結果を得る段階とで構成されている。署名検証手続きとして、一般的に入力値定義域に制約のあるRSAVP1と、ハッシュ関数およびパディングをRSAVP1の前段階として持ち制約緩和したRSASSA-PSS-VERIFYおよびRSASSA-PKCS1-v1_5-VERIFYとが知られている（非特許文献１参照）。特許文献１〜３の署名検証過程は後者の署名検証手続きを示している。
【００１１】
次に、従来技術の保護処理の流れを説明する。まず、プログラムをページに分解し、そのページについてハッシュ値を算出し、プログラムの全てのページについて実施し終えた場合には、各ページから得たハッシュ値を並べてアレイを作成し、アレイについて電子署名を作成する。得られたハッシュアレイとハッシュアレイへの電子署名を、プログラムと共に格納し、保護手順を終了する。
【００１２】
次に、従来技術の認証処理の流れを説明する。まず、プログラムに対応したハッシュアレイをロードし、ハッシュアレイとハッシュアレイの電子署名とを、信頼できる公開鍵を用いて検証する。署名に適合していた場合には、プログラムのページをロードし、該当ページのハッシュ値を算出し、算出されたハッシュ値とハッシュアレイに格納されていたハッシュ値を比較する。双方のハッシュ値が一致すればロードされたページの命令またはページ内データの参照を実行し、必要なページについて上述した処理を繰り返す。一方、署名に適合していないと判断された場合、および双方のハッシュ値が一致しないと判断された場合には、認証エラーと判断してプログラムの実行を拒絶し、認証処理を終了する。
なお、特許文献１には、双方のハッシュ値が一致した場合にロードされたページの命令またはページ内データの参照を実行する処理は記載されていない。
【００１３】
特許文献１と特許文献２では、プログラム起動時に実施する認証処理は、ハッシュアレイを電子署名で検証する処理と、プログラム実行初期に必要になるページ分のハッシュ値算出と比較であるため、プログラム全体にハッシュ関数を適用するよりも短時間で済むという利点があった。
【先行技術文献】
【特許文献】
【００１４】
【特許文献１】国際公開第２００５／０２９２２３号
【特許文献２】特開２００８−２９３０３３号公報
【特許文献３】特開２００５−２０２５２３号公報
【非特許文献】
【００１５】
【非特許文献１】PKCS#1 v2.1: RSA Cryptography Standard, RSA Laboratories
【発明の概要】
【発明が解決しようとする課題】
【００１６】
しかしながら、上述した特許文献１〜３に開示された技術では、ハッシュ関数の適用対象を、メモリ管理対象であるページ単位としているため、利用単位であるオブジェクトとは、サイズおよび配置と適合しておらず、さらにプログラムを分割したページの順に、各ページから算出したハッシュ値を全ページ分並べてアレイにしている。そのため、利用されるオブジェクトを含むページに含まれる、全てのオブジェクトに対してハッシュ関数を適用し算出していた。１ページ内に含まれるオブジェクトが全て不使用でないかぎり、該当ページへのアクセスは必ず発生するため、そのページに対するハッシュ関数の算出はプログラム起動時あるいは実行中に必ず行われることから、プログラムの動作遅延を招くという課題があった。
さらに、保護対象プログラムと非保護対象プログラムから共有されている動的リンクライブラリにおいて、非保護対象プログラムから呼び出される際にも認証処理が実施され、プログラムの動作遅延を招くという課題があった。
【００１７】
この発明は、上記のような課題を解決するためになされたもので、プログラムの動作遅延を抑制して動的リンクライブラリを保護および認証することを目的とする。
【課題を解決するための手段】
【００１８】
この発明に係る動的リンクライブラリ保護方法は、動的リンクライブラリを構成するオブジェクトから、保護すべき保護対象オブジェクトを指定する工程と、保護対象オブジェクトにハッシュ関数を適用してハッシュ値を算出する工程と、算出したハッシュ値と、保護対象オブジェクトの位置情報およびサイズ情報とを組み合わせたタプル（ｔｕｐｌｅ）を作成する工程と、動的リンクライブラリ内の保護対象オブジェクト毎の前記タプルの集合である位置サイズ付ハッシュアレイを作成する工程とを備えたものである。
【００１９】
この発明に係る動的リンクライブラリ認証方法は、動的リンクライブラリ内の保護対象オブジェクト毎のハッシュ値と位置情報とサイズ情報を組み合わせたタプルの集合である位置サイズ付ハッシュアレイ内の、全てのタプルから動的リンクライブラリ内の保護対象オブジェクトを特定する工程と、保護対象オブジェクトそれぞれのハッシュ値を算出する工程と、算出されたハッシュ値と、位置サイズ付ハッシュアレイを構成するハッシュ値とを比較検証する工程と、位置サイズ付ハッシュアレイ内の全てのタプルにおいて、比較検証の結果が一致する場合には認証結果を合格とし、比較検証の結果が不一致になるタプルが存在する場合には認証結果を不合格とする工程とを備えたものである。
【発明の効果】
【００２０】
この発明によれば、保護対象となるオブジェクトを限定することができ、プログラムの動作遅延を抑制することができる。
【図面の簡単な説明】
【００２１】
【図１】実施の形態１によるライブラリの保護を示す説明図である。
【図２】実施の形態１によるライブラリの認証を示す説明図である。
【図３】実施の形態１によるライブラリの保護を示す説明図である。
【図４】実施の形態１によるライブラリの認証を示す説明図である。
【図５】実施の形態１によるハッシュアレイおよび電子署名作成処理を示すフローチャートである。
【図６】実施の形態１によるライブラリ認証処理を示すフローチャートである。
【図７】実施の形態１による複数のプログラムから共有されるライブラリの保護を示す説明図である。
【図８】実施の形態１による複数のプログラムから共有されるライブラリの認証を示す説明図である。
【図９】実施の形態１による保護必要なプログラムと保護不要なプログラムから参照されるライブラリの保護を示す説明図である。
【図１０】実施の形態１による保護必要なプログラムと保護不要なプログラムから参照されるライブラリの認証を示す説明図である。
【図１１】実施の形態１による１つのプログラムから利用される複数のライブラリの保護を示す説明図である。
【図１２】実施の形態１による１つのプログラムから利用される複数のライブラリの保護を示す説明図である。
【図１３】実施の形態１によるプログラム起動時の処理を示すフローチャートである。
【図１４】実施の形態１によるライブラリロードの処理を示すフローチャートである。
【図１５】実施の形態１によるオブジェクトアドレス取得処理の動作を示すフローチャートである。
【図１６】実施の形態１によるオブジェクトアドレス取得処理の動作を示すフローチャートである。
【図１７】実施の形態１による認証処理の動作を示すフローチャートである。
【図１８】実施の形態１によるライブラリ保護装置とライブラリ作成装置の構成およびデータの流れを示す図である。
【図１９】実施の形態１によるライブラリ保護装置の一部において、オブジェクト単位のデータの流れと構成詳細を示す図である。
【図２０】実施の形態１によるプログラム管理システムの、プログラム起動時動的リンクにかかわる装置の構成およびデータの流れを示す図である。
【図２１】実施の形態１によるプログラム管理システムの、プログラム起動時動的リンクにかかわる装置の一部において、オブジェクト単位のデータの流れと構成詳細を示す図である。
【図２２】実施の形態１によるプログラム管理システムの、ライブラリロードにかかわる装置の構成およびデータの流れを示す図である。
【図２３】実施の形態１によるプログラム管理システムの、オブジェクトアドレス取得にかかわる装置の構成およびデータの流れを示す図である。
【図２４】実施の形態２によるライブラリの保護を示す説明図である。
【図２５】実施の形態２によるライブラリの認証を示す説明図である。
【図２６】実施の形態２の統合ハッシュアレイおよび電子署名作成処理を示すフローチャートである。
【図２７】実施の形態２の統合ハッシュアレイの認証処理を示すフローチャートである。
【図２８】実施の形態２のライブラリの認証処理を示すフローチャートである。
【図２９】実施の形態２のプログラム管理システムのプログラム起動時の処理を示すフローチャートである。
【図３０】実施の形態２のオブジェクトアドレスのフィックスアップ時の認証処理を示すフローチャートである。
【図３１】実施の形態２によるライブラリ保護装置とライブラリ作成装置の構成およびデータの流れを示す図である。
【図３２】実施の形態２によるプログラム管理システムの、プログラム起動時の動的リンクにかかわる装置の構成およびデータの流れを示す図である。
【図３３】実施の形態２によるプログラム管理システムの、プログラム起動時の動的リンクにかかわる装置の構成およびデータの流れを示す図である。
【図３４】実施の形態２によるプログラム管理システムの、ライブラリロードにかかわる装置の構成およびデータの流れを示す図である。
【図３５】実施の形態２によるプログラム管理システムの、オブジェクトアドレス取得にかかわる装置の構成およびデータの流れを示す図である。
【図３６】従来のライブラリの保護を示す説明図である。
【図３７】従来のライブラリの認証を示す説明図である。
【発明を実施するための形態】
【００２２】
本発明の実施の形態について説明する前に、動的リンクライブラリの詳細について説明する。
プログラムを構成する手続きとデータは、最初は人間にとって読み書きし易いソースコードの形式で作成され、次いで機械にとって読み書き実行しやすい機械語の形式に翻訳され、最終的に一連の動作が可能になるようにまとめられる。この機械語形式の手続きとデータのことをオブジェクトと呼び、翻訳過程をコンパイルと呼び、まとめ上げる過程をリンクと呼ぶ。１つのプログラムに構成されるソースコードは必ずしも１つのファイルに記述されるわけではなく、手続きとデータの相互関連の深浅を考慮して複数のファイル（各々を特に区別する場合にソースコードファイルと呼ぶ）に分割されて管理される。通常１つのソースコードファイル内の手続きとデータはコンパイル後にも１つのファイルに格納され、これをオブジェクトファイルと呼ぶ。
【００２３】
１つのプログラムを構成するために必要なオブジェクトの入ったオブジェクトファイルは、プログラム作成時点でリンクされて１つのプログラムファイルにまとめ、この時オブジェクト間の相互参照を解決して一連の動作が可能となるように作成することができる。
【００２４】
プログラムを構成する手続きとデータは、必ずしも唯一のプログラムの構成要素に限定されず、異なる複数のプログラムから共通に用いられる場合も多い。そこで利用の共通性や、ソースコード分割時とは異なる程度の相互関連の深浅などを考慮して、オブジェクトファイルは複数集められ、１つのファイルに格納される。これをライブラリと呼び、特に１つのファイルに格納されている点を強調してライブラリファイルと呼ぶこともある。相互関連の深浅を優先してライブラリファイルが作成された場合には、複数のプログラムから共通利用されるオブジェクトだけになるとは限らず、時には一部のオブジェクトは一部プログラムのみからしか利用されないケースも発生する。あるいは製品間での共通部品として作成された動的リンクライブラリの場合には、個々の導入先製品内のプログラムからは、全く利用されないオブジェクトを含むこともある。例えば、Ｃ言語の標準関数は多数のプログラムから利用されるので、ライブラリとしてまとめられることが多いが、個々のプログラムはＣ言語の標準関数全てを必要とせず、個々のプログラムの目的にあった一部の標準関数のみ用いる場合も多い。
【００２５】
ライブラリの種類としては、静的リンクライブラリと動的リンクライブラリがある。静的リンクライブラリはプログラムで利用するオブジェクトを、プログラム作成時にプログラムと同一ファイルにまとめてオブジェクト間相互参照を解決するために、関連性の深いオブジェクトをまとめたものである。オブジェクト間の相互参照は、プログラム作成時に全て解決される。
【００２６】
動的リンクライブラリはプログラムで利用するオブジェクトの一部を、プログラムファイルとは別のファイルにまとめておき、プログラム起動時あるいは実行中に相互参照を解決するように構成したものである。ライブラリの特性である「複数プログラムからの共通利用」側面を作成後のプログラム管理にまで広げ、保守性を向上させることができる。例えば機能改善等に伴うオブジェクトの置換に際して該当オブジェクトを内包する複数プログラムファイルを置換する代わりに該当オブジェクトを内包する１つの共通の動的リンクライブラリを置換することで済むようになる。また共通化により記憶領域の消費を抑えることもできる。但しプログラム起動時または実行中の相互参照解決に要する処理時間をなるべく短縮するために、動的リンクライブラリ内のオブジェクト同士の相互参照関係は、ライブラリファイル作成時に予め解決しておくことがある。このため、オブジェクトファイルから動的リンクライブラリを作成する過程も、リンクと呼ばれている。
【００２７】
動的リンクライブラリの利用方法は大別して２つある。１つはプログラム起動時にプログラムファイル内容と一緒にまとめ上げられて実行時イメージを構築し、プログラムファイル内オブジェクトと動的リンクライブラリファイル内オブジェクト間の相互参照を解決するものである。これはプログラムファイルの中に直接参照しているライブラリの識別子が予め格納されていて、プログラム起動時にＯＳあるいは標準的ライブラリによって動的リンク処理が行われるため、「暗黙の動的リンク」または「起動時の動的リンク」と呼ぶ。なお動的リンクライブラリから直接参照している他のライブラリについても、参照側ライブラリファイルに被参照側ライブラリの識別子を格納しておき、異なる動的リンクライブラリファイル内オブジェクト間の相互参照も同様に動的リンク処理ができるようになっている。
【００２８】
もう一つは上記の実行時イメージ構築と相互参照解決を、プログラムからそれぞれ明示的に実施するものである。これはＯＳや標準的ライブラリに備わった、ライブラリのロード機能をプログラムから呼び出すことと、ライブラリ内オブジェクトのアドレス取得機能をプログラムから呼び出すことで動的リンクに関わる処理が行われるため、「明示的な動的リンク」または「実行中の動的リンク」と呼ぶ。
【００２９】
動的リンクライブラリは作成の時点では、アドレス空間内のどこに配置されるかは確定していない。そのためオブジェクトのアドレスも作成の時点では確定しておらず、実行時イメージ構築の際に読出したライブラリ内オブジェクトをアドレス空間内に配置して初めて確定する。その確定したアドレスを他のオブジェクトから参照できる様に一覧表や相互参照用の表に登録する処理のことを、フィックスアップと呼ぶ。上記アドレス取得機能は、呼び出された際にフィックスアップを実施することもあれば、事前に実施されたフィックスアップで登録されたアドレスを、ただ返すだけのこともある。
【００３０】
Windows（登録商標、以下記載を省略する）に備わった機能では、暗黙の動的リンクも明示的な動的リンクも共にＯＳによって提供されている。ライブラリロード機能を呼び出すAPIはLoadLibrary() / LoadLibraryEx()と言い、ライブラリのパス名（もしくはパス名にマッピング可能な名前）を引数にとりハンドルを返す。アドレス取得機能を呼び出すAPIはGetProcAddress()で、ライブラリのハンドルとオブジェクト名称を引数にとり、フィックスアップされたアドレスを返す。Windowsでは、動的リンクライブラリをＤＬＬと略して呼ぶことも多い。
【００３１】
Linux（登録商標）で採用されている機能では、暗黙の動的リンクも明示的な動的リンクも共に標準的なライブラリ（プログラムファイルに静的リンクされているスタートアップコードと、動的リンクされる標準的ライブラリ）によって提供されている。ライブラリロード機能を呼び出すAPIはdlopen()と言い、ライブラリのパス名（もしくはパス名にマッピング可能な名前）を引数にとりハンドルを返す。アドレス取得機能を呼び出すAPIはdladdr()で、ライブラリのハンドルとオブジェクト名称を引数にとり、フィックスアップされたアドレスを返す。Unix（登録商標）では、動的リンクライブラリのことをシェアードオブジェクトと呼ぶ。
【００３２】
続いて、本発明を実施するための形態について説明する。
実施の形態１．
図１は、この発明の実施の形態１による動的リンクライブラリの保護を示す説明図である。
図１は、動的リンクライブラリ（以下、ライブラリと称する）内の全オブジェクトが呼び出しプログラムから直接参照される場合の、ライブラリの保護について、データ間の処理関係を示している。
ここでは、プログラム１がライブラリ１０内の全オブジェクト１１〜１４を参照して動作する場合を例としてとりあげる。この場合にはライブラリ１０を保護するために、オブジェクト１１〜１４を保護対象として指定する。オブジェクト１１の保護時点でのハッシュ値２１１を算出し、算出したハッシュ値２１１を、位置３１１およびサイズ４１１と共に三つ組みにする。同様に残りのオブジェクト１２〜１４に対してもハッシュ値、位置およびサイズの三つ組みを作成し、これらの三つ組みを集めてアレイ（以下、位置サイズ付ハッシュアレイ１００と称する）を作成する。
作成された位置サイズ付ハッシュアレイ１００に対して、製造者のみが保有する秘密鍵７００を用いて電子署名６００を作成する。なお署名作成手続きとしては、例えば非特許文献１に記載されているRSASSA-PSS-SIGNおよびRSASSA-PKCS1-v1_5-SIGNの様に、ハッシュ関数を前段階として持つ署名作成手続きを用いることで、保護対象オブジェクト数によって位置サイズ付ハッシュアレイのサイズが異なることにも対応可能とする。
【００３３】
図２は、この発明の実施の形態１によるライブラリの認証を示す説明図である。
図２は、ライブラリ内の全オブジェクトが呼び出しプログラムから直接参照される場合の、ライブラリ認証について、データ間の処理関係を示している。
プログラム１、ライブラリ１０は上記図１で参照されたものと同一であり、位置サイズ付ハッシュアレイ１００および電子署名６００は、上記図１で作成されたものである。この場合にライブラリ１０を認証するためには、オブジェクト１１，１２，１３，１４の全ての改竄有無を検査する必要がある。
【００３４】
まず、製造者のみが保有する秘密鍵７００に対応する公開鍵７０１を用いて、位置サイズ付ハッシュアレイ１００が改竄されていないか電子署名６００に照らし合わせて検証する。なお署名検証手続きとしては、例えば非特許文献１に記載されているRSASSA-PSS-VERIFYおよびRSASSA-PKCS1-v1_5-VERIFYの様に、ハッシュ関数を前段階として持つ署名検証手続きを用いることで、保護対象オブジェクト数によって位置サイズ付ハッシュアレイのサイズが異なることにも対応可能とする。
【００３５】
次に、改竄されていないと確認された位置３１１〜３１４とサイズ４１１〜４１４を用いて、オブジェクト１１〜１４を特定する。次に、各オブジェクト１１〜１４のハッシュ値５１１〜５１４を計算する。
位置サイズ付ハッシュアレイ１００に格納されているハッシュ値２１１〜２１４は改竄されていないと確認されているため、保護時に計算したハッシュ値２１１〜２１４と認証時に計算したハッシュ値５１１〜５１４をそれぞれ比較検証することにより、オブジェクト１１〜１４への改竄がないかを確認する。
【００３６】
オブジェクト１１に改竄があった場合を想定すると、認証時にオブジェクト１１から計算したハッシュ値５１１はハッシュ値２１１と異なる値となるため、当該ハッシュ値２１１との比較で上記改竄が検出される。また、オブジェクト１１の改竄を隠すために、改竄後のオブジェクトから計算したハッシュ値で位置サイズ付ハッシュアレイ１００のハッシュ値２１１を置き換えられたとしても、認証時に位置サイズ付ハッシュアレイ１００が電子署名６００に適合しないため、改竄が検出される。また、オブジェクト１１の改竄を隠すために、ハッシュ値２１１と位置３１１とサイズ４１１からなる三つ組みをハッシュアレイ１００から削除したとしても、認証時に位置サイズ付ハッシュアレイ１００が電子署名６００に適合しないため、改竄が検出される。
【００３７】
さらに、オブジェクト１１の改竄および位置サイズ付ハッシュアレイ１００の改竄を隠すために、改竄後の位置サイズ付ハッシュアレイから作成した電子署名で電子署名６００を置き換えられたとしても、電子署名６００作成時に用いた秘密鍵７００は製造者しか保有していないため、改竄者は異なる秘密鍵を用いて電子署名を作成せざるをえず、製造者の秘密鍵７００に対応した公開鍵７０１を用いた検証で不適合が検出される。これらの認証処理は、オブジェクト１２，１３，１４についても同様に行われる。
【００３８】
図３は、ライブラリの内の一部のオブジェクトが呼び出しプログラムから直接参照され、他の一部のオブジェクトが間接参照され、更に他の一部のオブジェクトが全く参照されない場合の、ライブラリの保護についてのデータ間の処理関係を示している。
プログラム２はライブラリ２０内のオブジェクト２１とオブジェクト２２を直接参照する。オブジェクト２１は他のオブジェクトを参照せず、オブジェクト２２はオブジェクト２４を参照する。オブジェクト２３はプログラム２からは、直接的にも間接的にも参照されない。この場合にはライブラリ２０を保護するために、オブジェクト２１，２２，２４を保護対象として指定する。オブジェクト２１の保護時点でのハッシュ値２２１を計算し、計算したハッシュ値２２１を位置３２１およびサイズ４２１と共に三つ組みにする。同様にオブジェクト２２，２４に対してもハッシュ値、位置およびサイズの三つ組みを作成し、これらの三つ組みを集めて位置サイズ付ハッシュアレイ１０１を作成する。この位置サイズ付ハッシュアレイ１０１に対して、製造者のみが保有する秘密鍵７００を用いて電子署名６０１を作成する。
なおこの例では、間接的に参照されるオブジェクトとプログラムの間の参照関係が一回間接である場合を挙げているが、複数回間接的に参照されているオブジェクトがあれば、そのオブジェクトも保護対象に含める。
【００３９】
図４はライブラリの内の一部のオブジェクトが呼び出しプログラムから直接参照され、他の一部のオブジェクトが間接参照され、更に他の一部のオブジェクトが全く参照されない場合の、ライブラリの認証についてのデータ間の処理関係を示している。
プログラム２、ライブラリ２０は上記図３で参照されたものと同一であり、位置サイズ付ハッシュアレイ１０１、電子署名６０１は、上記図３で作成されたものである。この場合にライブラリ２０を認証するためには、オブジェクト１１，１２，１４の改竄有無を検査することが必要である。まず、製造者のみが保有する秘密鍵７００に対応する公開鍵７０１を用いて、位置サイズ付ハッシュアレイ１０１が改竄されていないか電子署名６０１に照らし合わせて検証する。
【００４０】
次に、改竄されていないと確認された位置３２１，３２２，３２４とサイズ４２１，４２２，４２４を用いて、オブジェクト２１，２２，２４を特定する。次に、各オブジェクトのハッシュ値５２１，５２２，５２４を計算する。位置サイズ付ハッシュアレイ１０１に格納されていたハッシュ値２２１，２２２，２２４は改竄されていないと確認がされているため保護時に計算したハッシュ値２２１，２２２，２２４と認証時に計算したハッシュ値５２１，５２２，５２４をそれぞれ比較検証することにより、オブジェクト２１，２２，２４への改竄がないかを確認する。
【００４１】
オブジェクト２１，２２，２４に改竄があった場合、認証時にオブジェクト２１，２２，２４から計算したハッシュ値５２１，５２２，５２４はハッシュ値２２１，２２２，２２４と異なる値となるため、改竄が検出される。また、上記改竄を隠すために対応するハッシュ値を置換するなどの、位置サイズ付ハッシュアレイ１０１への改竄があった場合、位置サイズ付ハッシュアレイ１０１が電子署名６０１と適合しないため、改竄が検出される。また上記オブジェクトへの改竄を隠すために対応する三つ組みを位置サイズ付ハッシュアレイから削除したとしても、認証時に位置サイズ付ハッシュアレイ１０１が電子書名６０１に適合しなくなるため、改竄が検出される。さらに改竄を隠すために電子署名を置換するなどの、電子署名６０１への改竄があった場合には、秘密鍵７００に対応した公開鍵７０１を用いた検証で不適合が検出される。
【００４２】
ここでオブジェクト１１と２１、１２と２２、１３と２３、１４と２４のサイズがそれぞれ同一であると前提をおいて図２と図４を比較すると、図４では参照されていないオブジェクト２３に対するハッシュ関数適用分だけ認証に必要な計算量が削減されており、これによりプログラムの動作遅延を短縮することができる。
【００４３】
動的リンクライブラリを保護するための、位置サイズ付ハッシュアレイおよび電子署名作成方法の手順を、図５に従って説明する。まず保護対象オブジェクトの位置・サイズを特定し（ステップＳ１０１）、該当のオブジェクトについてハッシュ値を計算し（ステップＳ１０２）、該当オブジェクトのハッシュ値・位置・サイズを三つ組みにする（ステップＳ１０３）。全ての保護対象オブジェクトに対して実施したかを判断し、未実施があればステップＳ１０１に戻って繰り返す（ステップＳ１０４）。全てに対して実施した後、全保護対象オブジェクトの三つ組みを集めて位置サイズ付ハッシュアレイを作成する（ステップＳ１０５）。次に位置サイズ付ハッシュアレイの電子署名を作成し（ステップＳ１０６）、プログラムとライブラリの組に対応付けて位置サイズ付ハッシュアレイと電子署名を格納する（ステップＳ１０７）。以上でハッシュアレイおよび電子署名作成の手順は終了である。
【００４４】
動的リンクライブラリを認証する方法の手順を、図６に従って説明する。まずプログラムとライブラリの組に対応する位置サイズ付ハッシュアレイと電子署名を読み出す（ステップＳ２０１）。もし何れか一方または両方について読出し成功しなかったならば分岐して（ステップＳ２０２）、認証不合格と判定し（ステップＳ２１１）、認証処理を終了する。読出し成功していれば、位置サイズ付ハッシュアレイと、位置サイズ付ハッシュアレイの電子署名とを、信頼できる公開鍵を用いて検証する（ステップＳ２０３）。もし電子署名に適合していなければ分岐して（ステップＳ２０４）、認証不合格と判定し（ステップＳＴ２１１）、認証処理を終了する。
【００４５】
署名に適合していた場合は、位置サイズ付ハッシュアレイの要素たる三つ組みから、対応する保護対象オブジェクトの位置・サイズを特定し（ステップＳ２０５）、保護対象オブジェクトのハッシュ値を計算し（ステップＳ２０６）、ステップＳ２０６で計算したハッシュ値を、位置サイズ付ハッシュアレイの該当三つ組み内のハッシュ値と比較する（ステップＳ２０７）。ハッシュ値同士が適合しないならば分岐し（ステップＳ２０８）、認証不合格と判定し（ステップＳＴ２１１）、認証処理を終了する。ハッシュ値同士が適合していれば、位置サイズ付ハッシュアレイの全ての要素について実施したかを判断し、未実施があればステップＳ２０５に戻って繰り返す（ステップＳ２０９）。ハッシュ値同士に不適合が見つからないまま全ての要素に対して実施し終えたならばライブラリ認証結果を合格とし（ステップＳＴ２１０）、認証方法の手順を終了する。
【００４６】
次に、異なるパターンのライブラリの保護および認証について説明する。図７および図８は、実施の形態１による複数のプログラムから共有されるライブラリの保護および認証を示す説明図である。
【００４７】
まず、図７は、複数のプログラムから共有されるライブラリであって、各プログラムから参照されるライブラリ内オブジェクトが異なる組合せである場合のライブラリの保護についてのデータ間の処理関係を示す説明図である。
プログラム３がライブラリ３０内のオブジェクト３１，３２を直接参照し、プログラム４がライブラリ３０内のオブジェクト３２，３４を参照して動作する例をとりあげる。この場合にライブラリ３０を保護するためには、オブジェクト３１，３２，３４を保護しなければならないが、プログラム３の動作に関してオブジェクト３４を保護する必要はなく、またプログラム４の動作に関してオブジェクト３１を保護する必要はない。従って、「プログラム３とライブラリ３０の組」に対してはオブジェクト３１，３２を保護対象とし、「プログラム４とライブラリ３０の組」に対してはオブジェクト３２，３４を保護対象とすることが好適である。
【００４８】
そこでオブジェクト３１の保護時点でのハッシュ値２３１を計算し、位置３３１とサイズ４３１と共に三つ組みにする。同様にオブジェクト３２に対しても三つ組みを作成し、これらの三つ組みを集めて位置サイズ付ハッシュアレイ１０２を作成する。次いで位置サイズ付ハッシュアレイ１０２に対して、製造者のみが保有する秘密鍵７００を用いて電子署名６０２を作成する。同様にしてオブジェクト３２，３４から位置サイズ付ハッシュアレイ１０３を作成し、電子署名６０３を作成する。
【００４９】
次に、図８は、複数のプログラムから共有されるライブラリであって、各プログラムから参照されるライブラリ内オブジェクトが異なる組合せである場合の認証についてのデータ間の処理関係を示す説明図である。
プログラム３，４、ライブラリ３０は上記図７で参照されたものと同一であり、位置サイズ付ハッシュアレイ１０２，１０３、および電子署名６０２，６０３は、上記図７で作成されたものである。この場合にライブラリ３０の認証は、プログラム３で利用される場合にはオブジェクト３１，３２を認証する必要があり、プログラム４で利用される場合にはオブジェクト３２，３４を認証する必要がある。
【００５０】
オブジェクト３１，３２を認証する場合は、まず、製造者のみが保有する秘密鍵７００に対応する公開鍵７０１を用いて、位置サイズ付ハッシュアレイ１０２が改竄されていないかどうかを電子署名６０２に照らし合わせて検証する。次に、改竄されていないと確認のされた位置３３１，３３２とサイズ４３１，４３２を用いて、保護対象オブジェクト３１，３２を特定する。次に、各オブジェクトのハッシュ値５３１，５３２を計算する。位置サイズ付ハッシュアレイ１０２に格納されていたハッシュ値２３１，２３２は改竄されていないと確認がとれているので、保護時に計算したハッシュ値２３１，２３２と認証時に計算したハッシュ値５３１，５３２をそれぞれ比較検証することにより、オブジェクト３１，３２への改竄がなかったかどうかを確認することができる。
【００５１】
次に、オブジェクト３２，３４を認証する場合は、まず、製造者のみが保有する秘密鍵７００に対応する公開鍵７０１を用いて、位置サイズ付ハッシュアレイ１０３が改竄されていないかどうかを電子署名６０３に照らし合わせて検証する。次に、改竄されていないと確認のとれた位置３３２，３３４とサイズ４３２，４３４を用いて、保護対象オブジェクト３２，３４を特定する。次に、各オブジェクトのハッシュ値５３２，５３４を計算する。位置サイズ付ハッシュアレイ１０３に格納されていたハッシュ値２３２，２３４は改竄されていないと確認がとれているので、保護時に計算したハッシュ値２３２，２３４と認証時に計算したハッシュ値５３２，５３４をそれぞれ比較検証することにより、オブジェクト３２，３４への改竄がなかったかどうかを確認することができる。
【００５２】
なお、図７で示したライブラリの保護における、位置サイズ付ハッシュアレイ１０２と電子署名６０２を作成する手順と、位置サイズ付ハッシュアレイ１０３と電子署名６０３を作成する手順は、図５で示したフローチャートと同一の手順で作成される。
また、図８で示したライブラリの認証における、位置サイズ付ハッシュアレイ１０２と電子署名６０２によりライブラリ３０を認証する手順と、位置サイズ付ハッシュアレイ１０３と電子署名６０３によりライブラリ３０を認証する手順は、図６で示したフローチャートと同一の手順で判定される。
【００５３】
次に、図９および図１０は、実施の形態１による複数のプログラムから共有されるライブラリの保護および認証を示す他の説明図である。
まず図９は、保護が必要のプログラムおよび保護不要なプログラムから参照される場合のライブラリの保護についてのデータ間の処理関係を示す説明図である。
プログラム３は保護が必要なプログラムであって、ライブラリ３０内のオブジェクト３１，３２を直接参照し、プログラム５は保護不要なプログラムであって、ライブラリ３０内のオブジェクト３２，３４を参照して動作する。この場合にライブラリを保護するためには、オブジェクト３１，３２を保護対象とすることが必要であり、プログラム５の動作に関してオブジェクト３１〜３４を保護しておく必要はない。従って、「プログラム３とライブラリ３０の組」に対してはオブジェクト３１，３２を保護対象とし、「プログラム５とライブラリ３０の組」に対してはライブラリ３０内のいずれのオブジェクトも保護対象としないことが好適である。そこで「プログラム３とライブラリ３０の組」に対して位置サイズ付ハッシュアレイ１０２と電子署名６０２を作成するが、その処理内容は、図７で示した処理内容と同一である。また、「プログラム５とライブラリ３０の組」に対しては、位置サイズ付ハッシュアレイおよび電子署名は作成しない。
【００５４】
次に、図１０は、保護必要なプログラムおよび保護不要なプログラムから参照される場合のライブラリの認証についてのデータ間の処理関係を示す説明図である。
プログラム３，５、ライブラリ３０は上記図９で参照されたものと同一であり、位置サイズ付ハッシュアレイ１０２、および電子署名６０２は上記図９で作成されたものである。この場合にライブラリ３０を認証するためには、プログラム３で利用される場合にオブジェクト３１，３２の改竄有無の検査が必要であるが、プログラム５で利用される場合にはオブジェクト３１〜３４を検査する必要はない。オブジェクト３１，３２を検査する場合の処理内容は、図８における「プログラム３とライブラリ３０の組」に対する処理と同一である。なお、プログラム５が利用される場合には、プログラム５の起動時または実行中に保護不要と判断した時点で、認証に関する処理を取りやめる。
【００５５】
図８と図１０を比較すると、プログラム起動時または実行中に行われる、電子署名による位置サイズ付ハッシュアレイの検証処理およびハッシュ値の比較検証処理の分だけ計算量が削減されており、これによりプログラムの動作遅延を短縮することができる。
【００５６】
なお、認証処理を不正にスポイルする目的で、位置サイズ付ハッシュアレイおよび電子署名を不正に除去してしまう場合を想定すると、ライブラリを呼び出すプログラムには保護が必要であるとの印付けを別途行っておくことにより、保護が必要なプログラムに関するライブラリ認証処理を開始させることができる。これにより、位置サイズ付ハッシュアレイおよび電子署名が不正に除去されている場合には、位置サイズ付ハッシュアレイと電子署名の読出しが失敗するため、図６で示したフローチャートのステップＳ２０２で認証失敗に分岐する。
【００５７】
さらに、異なるパターンのライブラリの保護および認証について説明する。
図１１は、実施の形態１による１つのプログラムから利用される複数のライブラリの保護についてのデータの処理関係を示す説明図である。
プログラム６がライブラリ４０内のオブジェクト４１，４２を直接参照し、更にライブラリ５０内のオブジェクト５１，５３を直接参照する例をとりあげる。この場合にライブラリ４０，５０を保護するためには、オブジェクト４１，４２，５１，５３を保護対象とすることが必要である。オブジェクト４１の保護時点でのハッシュ値２４１を計算し、位置３４１およびサイズ４４１と共に三つ組みにする。同様にオブジェクト４２に対しても三つ組みを作成し、２つの三つ組みを集めて位置サイズ付ハッシュアレイ１０４を作成する。
作成した位置サイズ付ハッシュアレイ１０４に対して、製造者のみが保有する秘密鍵７００を用いて電子署名６０４を作成する。同様にオブジェクト５１，５３に基づいて、位置サイズ付ハッシュアレイ１０５および電子署名６０５を作成する。即ち、ライブラリ４０に対する保護処理は、単一のライブラリが単一のプログラムから利用される場合と変わりがなく、ライブラリ５０についても同様の処理が行われる。
【００５８】
また、１つのプログラムから利用される複数のライブラリの認証は、各ライブラリの認証をそれぞれ実施する場合と同一の処理により実施される。
【００５９】
図１２は、実施の形態１による１つのプログラムから利用される複数のライブラリの保護を示す説明図であり、さらにライブラリの少なくとも１つはプログラムから直接参照されるオブジェクトがなく、他のライブラリ内のオブジェクトからのみ参照されている場合を示している。
【００６０】
プログラム７はライブラリ６０内のオブジェクト６１，６２を直接参照し、更にオブジェクト６２はライブラリ７０内のオブジェクト７１，７３を直接参照する。この場合にライブラリ６０，７０を保護するためには、オブジェクト６１，６２，７１，７３を保護対象とすることが必要である。オブジェクト６１の保護時点でのハッシュ値２６１を計算し、位置３６１とサイズ４６１と共に三つ組みにする。同様にオブジェクト６２に対しても三つ組みを作成し、２つの三つ組みを集めて位置サイズ付ハッシュアレイ１０６を作成する。
【００６１】
次いで位置サイズ付ハッシュアレイ１０６に対して、製造者のみが保有する秘密鍵７００を用いて電子署名６０６を作成する。同様にオブジェクト７１，７３に基づいて、位置サイズ付ハッシュアレイ１０７と電子署名６０７を作成する。即ち、ライブラリ６０に対する保護処理は、単一のライブラリが単一のプログラムから利用される場合と変わりがなく、ライブラリ７０についても同様である。
【００６２】
また、ライブラリの少なくとも１つはプログラムから直接参照されるオブジェクトがなく、他のライブラリ内のオブジェクトからのみ参照されている場合の認証は、各ライブラリの認証をそれぞれ実施する場合と同一の処理により実施される。
【００６３】
上述した図９、図１１および図１２で示したライブラリの保護における、位置サイズ付ハッシュアレイ１０２，１０４〜２０７、電子署名６０２，６０４〜６０７を作成する手順は、それぞれ図５のフローチャートと同一の手順で作成される。ただし、図９で示した例のように保護不要なプログラム５では、位置サイズ付ハッシュアレイおよび電子署名の作成が不要であることから、以下に示すプログラム管理システムに処理の一端を担わせることになる。
【００６４】
プログラムを格納する記憶装置を更に備え、プログラムに保護の要・不要を印づけるフラグを設け、該当フラグを設定する装置を更に備え、プログラム自体の改竄を防ぐための電子署名の作成装置を更に備え、その電子署名を格納する記憶装置を更に備えるプログラム管理システムを構築する。
プログラムが保護必要である場合とは、保護必要なオブジェクトを読み書き実行しうる場合であるから、プログラムを保護必要と印づける条件は、プログラム自体が保護必要なオブジェクトを含んでいるか、あるいはプログラムから直接的にまたは間接的に参照するオブジェクトの中に保護必要なオブジェクトを含んでいること、である。
【００６５】
上述した図８、図１０の認証、および図１１「複数の動的リンクライブラリを利用するプログラムの場合」に対応する認証（図示せず）、図１２「複数の動的リンクライブラリを利用するプログラムの場合であって、ライブラリの少なくとも１つはプログラムから直接参照されるオブジェクトがなく、他のライブラリ内のオブジェクトからのみ参照されている場合」に対応する認証（図示せず）に現れる位置サイズ付ハッシュアレイ１０２，１０４〜１０７、電子署名６０２，６０４〜６０７を用いてライブラリ３０，４０，５０，６０，７０を認証する手順は、それぞれ図６で説明した手順と同一でよい。しかしながら、図１０の様に保護不要なプログラム５では前述の認証処理自体が不要であることを含めて手順化すると、次のようになる。
【００６６】
動的リンクライブラリと呼び出しプログラムを含むプログラム管理手順について、特にプログラム起動時に暗黙に動的リンクされる場合の手順について、図１３を用いて説明する。
プログラム起動処理の内動的リンクを除く処理、例えば資源割当などを実施（ステップＳ３０１）した後、該当プログラムが保護必要であるか否か印を参照して判断する（ステップＳ３０２）。必要であれば、プログラム認証を行い（ステップＳ３０３）、認証合格しなければ分岐して（ステップＳ３０４）、認証エラーとしてプログラム実行を拒絶する（ステップＳ３１１）。プログラム認証合格であれば、プログラムが暗黙に動的リンクするライブラリを、直接利用するものと間接利用するものを共に含めて列挙する（ステップＳ３０５）。
【００６７】
列挙されるライブラリが１個未満であれば分岐し（ステップＳ３０６）、以後の処理をスキップしてプログラム起動を完了とする。１個以上であればライブラリ認証を実施し（ステップＳ３０７）、認証合格しなければ分岐して（ステップＳ３０８）、認証エラーとしてプログラム実行を拒絶する（ステップＳ３１１）。もしライブラリ認証合格であれば認証無しの動的リンク手順（ステップＳ３０９）を実施する。列挙された全てのライブラリについて実施したかどうかを判断し、未実施があればステップＳ３０７に戻って繰り返す（ステップＳ３１０）。全てのライブラリについて実施し終えたならばプログラム起動処理を終了する。
【００６８】
他方、ステップＳ３０２において該当プログラムが保護必要でなければ、プログラムが暗黙に動的リンクするライブラリを、直接利用するものと間接利用するものを共に含めて列挙する（ステップＳ３１２）。列挙されるライブラリが１個未満であれば分岐し（ステップＳ３１３）、以後の処理をスキップしてプログラム起動処理を終了する。１個以上であれば認証無しの動的リンク手順（ステップＳ３１４）を実施する。列挙された全てのライブラリについて実施したかどうかを判断し、未実施があればステップＳ３１４に戻って繰り返す（ステップＳ３１５）。全てのライブラリについて実施し終えたならばプログラム起動処理を終了する。
【００６９】
プログラム認証は少なくともプログラムファイルの改竄有無の検証を含んでいなくてはならないが、その具体的な方法は上記図２で説明したライブラリ内オブジェクトに対する認証方法を流用してもよく、従来技術１または２の保護方法を採用してもよく、またこれらとは全く異なりプログラムファイル全体から電子署名を作成するものであってもよい。但しいずれであっても、それぞれに対応した保護方法を事前に適用しておかなければならない。
ステップＳ３０２で参照する保護の要・不要を印づけるフラグは、改竄不能なものであるかまたは改竄を検出できるものでなくてはならない。その具体的な方法は例えば、保護必要なプログラムファイルの一覧を設けて電子署名により保護し、かつ任意のプログラム起動の度に一覧につき合わせて該非で分類できるようにするものであってもよい。また上記プログラム認証方法の一部として、プログラム認証の要否を示すフラグを設けたものを採用していた場合には、そのフラグを保護の要・不要を印づけるフラグとして流用してもよい。
【００７０】
次に、動的リンクライブラリと呼び出しプログラムを含むプログラム管理手順について、特にプログラム実行中に明示的にロードされる場合の手順について、図１４を用いて説明する。
該当プログラムが保護必要であるか否か印を参照して判断する（ステップＳ４０１）。必要であれば、ライブラリ認証を行い（ステップＳ４０２）、認証合格しなければ分岐して（ステップＳ４０３）、認証エラーとしてプログラム実行を拒絶する（ステップＳ４０５）。ライブラリ認証合格すれば認証無しのロード手順（ステップＳ４０４）を実施し、ライブラリロード処理を修了する。他方ステップＳ４０１において該当プログラムが保護必要でなければ、認証無しのロード手順（ステップＳ４０４）を実施し、ライブラリロード処理を終了する。
【００７１】
次に、図１５から図１７を参照しながら、ライブラリと呼び出しプログラムを含むプログラム管理手順について、特にプログラム実行中に明示的にオブジェクトアドレスが取得される場合のオブジェクト認証処理について説明する。
図１５および図１６はオブジェクトアドレス取得処理を示すフローチャートであり、図１７はオブジェクト認証処理を示すフローチャートである。図１７はオブジェクト認証手順を抜き出したものであり、図１６はプログラムが保護対象でない場合を抜き出したものであるため、特に断り書きをつけない限り図１５を用いて説明する。
要求されているオブジェクトのアドレスがフィックスアップ済みか判断して分岐し（ステップＳ５０１）、フィックスアップ済みであれば記録されていたアドレスを出力して（ステップＳ５２１）、オブジェクトアドレス取得処理を終了する。
【００７２】
フィックスアップが未だであれば、動的シンボルテーブル内をオブジェクト名で検索して位置情報とサイズ情報を取得し（ステップＳ５０２）、更に位置情報をアドレスへ変換する（ステップ５０３）。ステップＳ５０３に続いて、プログラムが保護必要であるか否か印を参照して判断する（ステップＳ５０４）。保護必要であればフィックスアップ時オブジェクト認証の手順（ステップＳ５０５）を実施し、認証合格しなければ分岐して（ステップＳ５０６）、認証エラーとして出力し（ステップＳ５２２）、オブジェクトアドレス取得処理を終了する。認証合格すれば該当オブジェクトが他オブジェクトを参照するか判断し（ステップＳ５０７）、参照しないなら該当オブジェクトをフィックスアップ済みと印つけてアドレスを記録し（ステップＳ５２０）、記録したアドレスを出力して（ステップＳ５２１）、オブジェクトアドレス取得処理を終了する。
【００７３】
ステップＳ５０７において他オブジェクトを参照していれば、その属するライブラリがロード済みか否か判断し（ステップＳ５０８）、ロード済みでないならばライブラリ認証の手順（ステップＳ５０９）を実施する。ライブラリ認証に合格しないならば分岐して（ステップＳ５１０）、認証エラーとして出力し（ステップＳ５２２）、オブジェクトアドレス取得処理を終了する。ライブラリ認証に合格すれば認証無しロード手順（ステップＳ５１１）を実施し、参照されるオブジェクトについてアドレス取得する（ステップＳ５１２）。なおステップＳ５０８においてライブラリがロード済みであった場合にはステップＳ５０９〜Ｓ５１１をスキップしてステップＳ５１２を実施する。
【００７４】
ステップＳ５１２で実施されるオブジェクトアドレス取得手順は、図１５で説明している手順全体を再帰的に呼び出すものである。もし呼び出した結果認証合格でないならば分岐して（ステップＳ５１３）、認証エラーとして出力し（ステップＳ５２２）、オブジェクトアドレス取得処理を終了する。参照されるオブジェクト全てについて実施したかを判断し、未実施があればステップＳ５１２に戻って繰り返す（ステップＳ５１４）。参照される全てのオブジェクトについて実施し終えたならば、該当オブジェクトをフィックスアップ済みと印つけてアドレスを記録し（ステップＳ５２０）、記録したアドレスを出力して（ステップＳ５２１）、オブジェクトアドレス取得処理を終了する。
【００７５】
他方プログラムが保護不要であれば分岐し（ステップＳ５０４）、該当オブジェクトが他オブジェクトを参照するか判断し（図１６のステップＳ５１５）、参照しないなら該当オブジェクトをフィックスアップ済みと印つけてアドレスを記録し（ステップＳ５２０）、記録したアドレスを出力して（ステップＳ５２１）、オブジェクトアドレス取得処理を終了する。図１６のステップＳ５１５において他オブジェクトを参照していれば、その属するライブラリがロード済みか否か判断し（図１６のステップＳ５１６）、ロード済みでないならば認証無しロード手順（図１６のステップＳ５１７）を実施し、参照されるオブジェクトについてアドレス取得する（図１６のステップＳ５１８）。
【００７６】
なおライブラリがロード済みであった場合にはステップＳ５１７をスキップしてステップＳ５１８を実施する。ステップＳ５１８で実施されるオブジェクトアドレス取得手順は、図１５で説明している手順全体を再帰的に呼び出すものである。呼び出した結果が認証不合格になることはない。参照されるオブジェクト全てについて実施したかを判断し、未実施があればステップＳ５１８に戻って繰り返す（図１６のステップＳ５１９）。参照される全てのオブジェクトについて実施し終えたならば、該当オブジェクトをフィックスアップ済みと印つけてアドレスを記録し（ステップＳ５２０）、記録したアドレスを出力して（ステップＳ５２１）、オブジェクトアドレス取得処理を終了する。
【００７７】
なおフィックスアップ時オブジェクト認証の手順は、図１７を用いて説明する。まずオブジェクトの属するライブラリは認証済みかどうか判断し、認証済みでなければ分岐して（ステップＳ５３１）、オブジェクト認証結果を不合格として（ステップＳ５３５）、オブジェクト認証処理を終了する。ライブラリが認証済みならば、フィックスアップ過程で位置とサイズを特定した該当オブジェクトについて、位置サイズ付ハッシュアレイ内の対応する要素を検索する（ステップＳ５３２）。検索結果で対応する要素が存在しないならば分岐して（ステップＳ５３３）、オブジェクト認証結果を不合格として（ステップＳ５３５）、オブジェクト認証処理を終了する。検索結果で対応する要素が存在すれば、オブジェクト認証結果を合格として（ステップＳ５３４）、オブジェクト認証処理を終了する。
保護の時点において、図５のステップＳ１０５において保護対象オブジェクト毎の三つ組みをそれぞれ要素として位置サイズ付ハッシュアレイを作成していた場合、上記図１７のステップＳ５３２での「対応する」とは、位置とサイズの両方が一致する様に構成する。またステップＳ１０５で隣接する保護対象オブジェクトの一連の領域はまとめて１つの要素として位置サイズ付ハッシュアレイを作成することもでき、この場合には、上記図１７のステップＳ５３２での「対応する」とは、該当オブジェクトの位置とサイズで表される領域が要素の三つ組み内の位置とサイズで表される領域に含まれている様に構成する。後者で複数のオブジェクトをまとめて三つ組みにしてしまっていても、ハッシュ関数適用対象となるオブジェクトのサイズの合計は変わらない。
【００７８】
次に、動的リンクライブラリの保護装置とライブラリの作成装置の構成と、これらの装置間を流れるデータについて図１８を参照しながら説明する。図１８では、特に図３で示したライブラリ２０の保護を例に説明している。
各ソースコードファイルには広域関数２１，２２，２３の実現が記述され、更に関数２２から呼び出される静的関数２４が記述されている。これらのソースコードファイルをコンパイラ１１０で機械語に翻訳すると、オブジェクトを格納しているオブジェクトファイルが作成される。これらを更に動的リンクライブラリ用にリンカー１１１でリンクし、ライブラリ２０ａを作成する。
【００７９】
作成直後のライブラリ２０ａには、オブジェクトをその性質毎にまとめ上げたセクションと、全オブジェクトの位置・サイズ・名前を記したシンボルテーブルと、ライブラリの外部から参照されるオブジェクトのみ位置・サイズ・名前を記した動的シンボルテーブルが、通例含まれている。また他にも、デバッグ情報などが含まれることもあるが、本発明では使用しない。両シンボルテーブルの位置欄には、セクションの識別子とセクション内での位置が記されている。リンカー１１１で作成したばかりのライブラリ２０ａに含まれるシンボルテーブルは、ライブラリの配布時や製品への搭載時にはシンボル情報・デバッグ情報削除装置１１２で削除され、例えば静的関数２４のオブジェクト２４は、外部から直接には参照できなくなる。
【００８０】
この実施の形態１の位置サイズ付ハッシュアレイ作成装置１２１は、保護対象オブジェクト名前のリストを受取り、ライブラリ２０ａ内のシンボルテーブル内を名前で検索して、位置サイズ付ハッシュアレイ１０１に格納すべき位置・サイズを取得する。なおライブラリ認証処理が起動時動的リンクに限られる場合には、位置サイズ付ハッシュアレイ１０１に格納すべき位置の標記を最終的なライブラリ２０のファイル内における各オブジェクトのオフセットにすることで、セクションの位置を特定する処理を省き単純化できる。位置サイズ付ハッシュアレイ作成装置１２１は上記位置・サイズに該当するオブジェクトのハッシュ値を計算して三つ組みを作り、これを集めて位置サイズ付ハッシュアレイ１０１を作成する。
【００８１】
実施の形態１の電子署名作成装置７１０は、秘密鍵７００を用いて、位置サイズ付ハッシュアレイ１０１の電子署名６０１を作成する。実施の形態１の位置サイズ付ハッシュアレイ格納装置１２５ａは、位置サイズ付ハッシュアレイ１０１を、ライブラリ識別子２０とプログラム識別子２の組に関連付けて格納する。また、実施の形態１の電子署名格納装置１２３ａは、電子署名６０１を、ライブラリ識別子２０とプログラム識別子２の組に関連付けて格納する。
【００８２】
次に、位置サイズ付ハッシュアレイ作成装置１２１の内部構成の一例を、図１９を用いて説明する。オブジェクト特定部１２１ａは対象オブジェクト名のリストに挙げられた名前２１，２２，２４の各々に対して、ライブラリ２０ａ内のシンボルテーブル内を名前で検索して位置３２１とサイズ４２１の組、位置３２２とサイズ４２２の組、位置３２４とサイズ４２４の組を取得する。位置情報はオブジェクトの属するセクションの識別子とセクション内オフセットになっているので、シンボル情報やデバッグ情報などを除かれてしまったライブラリ２０内の同じセクションに対しても適用することができ、これらを基にハッシュ算出部１２１ｂはライブラリ２０からオブジェクト２１，２２，２４を取得し、それぞれのハッシュ値２２１，２２２，２２４を算出する。三つ組み作成部１２１ｃはオブジェクト特定部１２１ａが出力した位置情報とサイズ情報、およびハッシュ算出部が算出したハッシュ値を、対応関係に従って三つ組みにする。位置サイズ付ハッシュアレイ作成部１２１ｄはこれらの三つ組みを集めて位置サイズ付ハッシュアレイ１０１を作成する。
【００８３】
次に、動的リンクライブラリと呼び出しプログラムを含むプログラム管理に関する装置の構成と装置間を流れるデータについて、特にプログラム起動時に暗黙に動的リンクされる場合の構成について、図２０を参照しながら説明する。
キーボードやボタンなどの入力装置１５０を経由して入力されたプログラム起動指示６５０は、起動指示解析装置１５１によってプログラム識別子２を抽出される。プログラム２が保護不要と印づけられている場合には細線矢印のみに従ってデータを流し、プログラム２が保護必要と記しづけられている場合には細線矢印と太線矢印の両方に従ってデータを流す。プログラム認証装置１５７はプログラム識別子２を契機に該当プログラムの認証を実施し、その結果であるプログラム認証結果６５３を出力する。プログラム読出装置１５３はプログラム識別子２を契機に読み出すが、その一方でプログラム認証結果６５３が認証合格でないならば読出しを中止する。読出しに成功したプログラム２は、ライブラリ動的リンク検出装置１５４に入力され、該当のライブラリ識別子を抽出する。プログラム２の場合は、ライブラリ識別子２０が抽出されることになる。
【００８４】
位置サイズ付ハッシュアレイ読出装置１２５ｂと電子署名読出装置１２３ｂは、プログラム識別子２とライブラリ識別子２０を組にして受け取り、該当する位置サイズ付ハッシュアレイ１０１と電子署名６０１を出力する。電子署名検証装置７１１は位置サイズ付ハッシュアレイ１０１と電子署名６０１と、公開鍵読出装置７０２から信頼できる公開鍵７０１を受け取り、電子署名検証結果６５４を出力する。
信頼できる公開鍵を供給可能な装置として、公開鍵読出装置７０２には製造時のみ公開鍵を書き込むことが可能で以後書換え不能な記憶装置を用いる場合を図２０では示しているが、電子署名検証装置７１１中の検証関数（不図示）と公開鍵７０１を封入した耐タンパーな装置を用いて、該装置に入力として電子署名６０１と位置サイズ付ハッシュアレイから計算したハッシュ値（不図示）を与え、電子署名検証結果６５４を出力させる構成であると、更に好適である。
【００８５】
ライブラリ読出装置１５５は、ライブラリ識別子２０を受け取ってライブラリ２０を出力する。ハッシュ値検証装置１２８は、ライブラリ２０と位置サイズ付ハッシュアレイ１０１を受け取って、位置サイズ付ハッシュアレイ１０１に含まれる全要素の位置とサイズを基にライブラリ２０内のオブジェクトを抽出し、そのハッシュ値を計算し、位置サイズ付ハッシュアレイ１０１に含まれるハッシュ値と比較検証し、そのハッシュ値検証結果６５６を出力する。判定装置１２９は電子署名検証結果６５４とハッシュ値検証結果６５６を受け取って、判断し、ライブラリ認証結果６５８を出力する。
【００８６】
動的リンク装置１５６はプログラム２とライブラリ２０を受け取って、通常は実行可能イメージ６５２を主記憶上に展開しオブジェクトアドレスのフィックスアップを実施するが、ライブラリ認証結果６５６が合格でないならば中止する。起動時の暗黙の動的リンクが失敗した場合、プログラム２は起動に失敗し、実行されない。
【００８７】
なお位置サイズ付ハッシュアレイ１０１が不正に除去されて位置サイズ付ハッシュアレイ読出装置１２５ｂが読み出しに失敗する場合、後段のハッシュ値検証装置１２８および電子署名検証装置７１１を経由して判定装置１２９に失敗の旨通知する。あるいは特に図示しないが、読み出し失敗を直接に判定装置１２９に通知するように構成してもよい。判定装置１２９は前記失敗を通知された場合、ライブラリ認証結果として不合格を出力する。
電子署名６０１が不正に除去されて電子署名読出し装置１２３ｂが読み出しに失敗する場合、後段の電子署名検証装置７１１を経由して判定装置１２９に失敗の旨通知する。あるいは特に図示しないが、読み出し失敗を直接に判定装置１２９に通知するように構成してもよい。判定装置１２９は前記失敗を通知された場合、ライブラリ認証結果６５８として不合格を出力する。
あるいは別の構成として、位置サイズ付ハッシュアレイ読出装置１２５ｂまたは電子署名読出装置１２３ｂが読み出しに失敗する場合、失敗の旨を直接動的リンク装置１５６に通知し、実行可能イメージの主記憶上への展開とオブジェクトアドレスのフィックスアップを中止させてもよい。
【００８８】
次に、ハッシュ値検証装置１２８と判定装置１２９の内部構成の一例を、図２１を用いて説明する。
ハッシュ値検証装置１２８のオブジェクト特定部１２８ａは、位置サイズ付ハッシュアレイの各要素である三つ組みから位置情報とサイズ情報をハッシュ算出部１２８ｂに与え、またハッシュ値を比較検証部１２８ｃに与える。ハッシュ値検証装置１２８のハッシュ算出部１２８ｂは与えられた位置情報とサイズ情報を基にライブラリ２０からオブジェクト２１，２２，２４を取得し、それぞれのハッシュ値５２１，５２２，５２４を算出する。ハッシュ値検証装置１２８の比較検証部１２８ｃはハッシュ値算出部１２８ｂに算出されたハッシュ値５２１，５２２，５２４とオブジェクト特定部１２８ａから与えられたハッシュ値２２１，２２２，２２４をそれぞれ比較し、比較結果を出力する。各オブジェクトに関する比較結果を纏めたものがハッシュ値検証結果６５６である。
【００８９】
判定装置１２９の比較結果集積部１２９ａは、ハッシュ値検証結果６５６内の各比較結果を集め、全て一致ならば情報「一致」を出力し、１つでも不一致があれば情報「不一致」を出力する。判定装置１２９の認証結果出力部１２９ｂは、電子署名検証結果６５４が合格でかつ比較結果集積装置の出力が「一致」である場合にのみライブラリ認証結果６５８として「合格」を出力し、それ以外の場合はライブラリ認証結果６５８として「不合格」を出力する。また前記読み出し失敗の通知を受けた場合にもライブラリ認証結果６５８として「不合格」を出力する（図示せず）。
【００９０】
なお説明の都合上ハッシュ値検証装置の各部位が逐次動作し、かつ各々の部位の動作は位置サイズ付ハッシュアレイ内の全要素に対する処理を終えてから次の部位の動作を開始させる場合を説明したが、各要素毎に各部位が逐次動作する構成であってもよい。この場合、比較検証部１２８ｃは比較結果を逐次出力するので、比較結果集積部１２９ａは逐次受け取った比較結果に１つでも不一致があれば即座に情報「不一致」を出力し、全ての比較結果を受け取っても不一致がなければ情報「一致」を出力する。また認証結果出力部１２９ｂは、比較結果集積部１２９ａからの出力情報「不一致」か電子署名検証結果「不合格」のいずれかを受け取った時点でライブラリ認証結果「不合格」を出力し、出力情報「一致」と電子署名検証結果「合格」が揃った時点でライブラリ認証結果「合格」を出力する。
【００９１】
次に、動的リンクライブラリと呼び出しプログラムを含むプログラム管理に関する装置と装置間を流れるデータの構成について、特にプログラム実行中に明示的にロードされる場合の構成について、図２２を参照しながら説明する。
実行中のプログラムが保護不要であった場合、細線矢印のみに沿ってデータを流し、保護必要であった場合、細線矢印と太線矢印の両方に沿ってデータを流す。
実行中のプログラム２はライブラリロード指示６５１を発する。ライブラリロード指示解析装置１５２は、ライブラリロード指示６５１を入力して、ライブラリ識別子２０を抽出する。抽出されたライブラリ識別子２０を用いて、図１７で示したライブラリ識別子２０以降の構成と同様に構成する。但し動的リンク装置１５６ａはオブジェクトアドレスのフィックスアップを行わずに、通常は実行可能イメージの主記憶への展開のみを行い、ライブラリ認証結果６５８が合格でないならば展開を中止する。また、動的リンク装置１５６ａに与えられるべきプログラム２と、電子署名読出装置１２３ｂ及び位置サイズ付ハッシュアレイ読出装置１２５ｂに与えられるべきプログラム識別子２は、実行中のプログラム２から提供される。
【００９２】
動的リンクライブラリと呼び出しプログラムを含むプログラム管理に関する装置と装置間を流れるデータの構成について、特にオブジェクトのアドレス取得を行う場合の構成について、図２３を参照しながら説明する。
実行中のプログラムが保護不要であった場合、細線矢印のみに沿ってデータを流し、保護必要であった場合、細線矢印と太線矢印の両方に沿ってデータを流す。
実行中のプログラム２は、アドレス取得指示６６０を発する。アドレス取得指示解析装置１６０はアドレス取得指示６６０を入力して、オブジェクト名２１とライブラリ識別子２０を抽出する。読出済位置サイズ付ハッシュアレイ特定装置１３０はライブラリ識別子２０を入力し、ライブラリのロード時に読出されていた位置サイズ付ハッシュアレイ１０１を出力する。他方動的シンボルテーブル内検索部１６１ａはオブジェクト名２１に該当する位置３２１とサイズ４２１を出力する。ここで位置３２１は、セクション識別子とセクション内位置の組で標記されている。オブジェクト検索装置１３１は位置３２１とサイズ４２１で位置サイズ付ハッシュアレイ１０１内の要素検索を行い、該当要素の有無をオブジェクト認証結果６６１として出力する。更にアドレスマッピング部１６１ｂは位置３２１をオブジェクトのアドレス３２１ａに変換する。アドレス出力装置１６２は、オブジェクト認証結果６６１の合否に応じてアドレス３２１ａの出力を行う。
【００９３】
なお該当オブジェクトが他オブジェクトを参照している場合、ライブラリロードとアドレス取得が再帰的に実施されるが、それらに関する装置構成は図２２、図２３と同様であるため、説明を省略する。
【００９４】
図１８の電子署名格納装置１２３ａと図２０および図２２の電子署名読出装置１２３ｂは、同一の記憶装置に備えられた書込み手段と読み出し手段であってもよく、あるいは同一の記憶媒体に対する別個の装置である書込み装置と読み出し装置であってもよい。図１８の位置サイズ付ハッシュアレイ格納装置１２５ａと図２０および図２２の位置サイズ付ハッシュアレイ読出装置１２５ｂは、同一の記憶装置に備えられた書込み手段と読み出し手段であってもよく、あるいは同一の記憶媒体に対する別個の装置である書込み装置と読み出し装置であってもよい。
図２０のプログラム読出装置１５３は書き込み手段と読み出し手段を供えた記憶装置の読み出し手段であってもよく、あるいは記憶媒体に対する読み出し装置であってもよい。図２０および図２２のライブラリ読出装置１５５は書込み手段と読み出し手段を備えた記憶装置の読み出し手段であってもよく、あるいは記憶媒体に対する読み出し装置であってもよい。前記記憶装置の書込み手段あるいは前記記憶媒体に対する書込み装置は図１８で説明しなかったが、少なくとも製造時に必要とすることは言うまでもない。
同一の記憶装置を採用した場合には、製造者は一旦製造を終えた後でもプログラムおよび／またはライブラリおよび／または位置サイズ付ハッシュアレイおよび／または電子署名を更新することができる。同一の記憶媒体に対する別個の装置を採用した場合には、製造者は媒体を交換することによりプログラムおよび／またはライブラリおよび／または位置サイズ付ハッシュアレイおよび／または電子署名を更新することができる。
【００９５】
以上のような実施の形態１の構成を備えることにより、以下に示す効果を有する。
ハッシュ関数適用対象を位置とサイズで特定するように構成したので、ライブラリを細かく保護および認証することができる。また、保護対象オブジェクトを指定することができるので、ライブラリの一部のみを保護および認証することができる。
さらに、保護対象をプログラムから利用するオブジェクトのみに限定することができる。
【００９６】
さらに、保護対象オブジェクトを名称で指定するように構成したので、ソースコード形式での手続き・データの作成者にとっては、位置・サイズを数値で指定する場合に比べて容易に指定できる。
【００９７】
ライブラリ内オブジェクトのハッシュ値を事前に計算し格納するように構成したので、ライブラリが改竄を受けた場合には認証過程で計算したハッシュ値が異なり、改竄を検出することができる。
さらに、公開鍵暗号の秘密鍵を用いて位置サイズ付ハッシュアレイの電子署名を作成するようにしたので、位置サイズ付ハッシュアレイが改竄されると、電子署名による検証で不適合を検出することができる。また、秘密鍵保有者以外による署名偽造が困難となるように、位置サイズ付ハッシュアレイを保護するように構成したので、位置サイズ付ハッシュアレイと電子署名を共に改竄された場合にも、認証時に改竄を検出することができる。
【００９８】
また、位置サイズ付きアッシュアレイおよび電子署名を、ライブラリと呼び出しプログラムの組毎に作成し、格納するように構成したので、個々のプログラムで使用するオブジェクトのみが保護対象になっている様に、それぞれ別の位置サイズ付ハッシュアレイおよび電子署名を作成し認証することができる。
さらに、ライブラリ呼び出しプログラムを保護対象と非保護対象に分類するように構成したので、非保護対象プログラムから呼び出される場合には、動的リンクライブラリの位置サイズ付ハッシュアレイと電子署名を不要にすることができる。またプログラム起動時およびライブラリロード時に位置サイズ付ハッシュアレイと電子署名の検証処理が不要になる。
【００９９】
保護必要であると分類したプログラムに対して電子署名を作成・格納し、起動時に電子署名を検証するように構成したので、ライブラリ内のオブジェクトに加えてプログラムファイル内のオブジェクトを保護できるようになった。またプログラムの起動に際して、プログラムファイル内のオブジェクトの改竄有無を検査して認証できるようになった。さらに認証不合格になったプログラムの実行を抑止することができるようになった。さらに、ライブラリ内の保護必要オブジェクトを直接もしくは間接的に利用するプログラムは、保護必要であると分類するようにしたので、保護必要オブジェクトを参照するプログラムは、改竄検出可能な様に保護することができるようになった。
また、プログラムが保護対象であると分類した上で位置サイズ付ハッシュアレイまたは電子署名の欠落を認証不合格と判定するように構成したので、位置サイズハッシュアレイおよび電子署名が不正除去された場合にも認証不合格と検出することができる。
【０１００】
さらに、保護されたライブラリを、プログラム起動時の暗黙の動的リンクに際して認証するように構成したので、認証不合格を検出した場合には動的リンクの中止を通じてプログラムの実行を抑止することができる。
さらに、保護されたライブラリを、プログラムからのライブラリロードに際して認証するように構成したので、認証不合格を検出した場合には動的リンクの中止を通じてライブラリロードを抑止することができる。
さらに、保護されたオブジェクトを、プログラムからのアドレス取得に際して認証するように構成したので、保護対象外オブジェクトを利用するためにアドレスを取得しようとしても認証不合格になりアドレスをプログラムに渡さない。
【０１０１】
さらに、保護対象オブジェクトはプログラムからの起動時動的リンクおよびロード時動的リンクに際してハッシュ値比較検証が済んでいるため、アドレス取得のために指定したオブジェクトがハッシュ検証済みであるかどうかは、位置サイズ付ハッシュアレイ内の三つ組みに該当するか否かを以って代用することができる。
【０１０２】
さらに、電子署名作成過程の前段にハッシュ関数適用を設けるように構成したので、保護対象オブジェクトの数に比例して大きくなる位置サイズ付ハッシュアレイに対しても、署名関数の入力データサイズを一定以内に保つことができる。また電子署名検証過程内の前段にハッシュ関数適用を設けるように構成したので、検証関数の入力データサイズを一定以内に保つことができる。
【０１０３】
さらに、製造者のみが保有する秘密鍵に対応した公開鍵のみを、製造時のみに書き込み可能な記憶装置に格納しすることで保護し、プログラムおよびライブラリおよび位置サイズ付ハッシュアレイおよび電子署名を書き換え可能な記憶装置または配布可能な記憶媒体に格納し、プログラムおよびライブラリおよび位置サイズ付ハッシュアレイは電子署名によって保護している場合には、製造者によって、プログラムおよびライブラリを位置サイズ付ハッシュアレイと電子署名と共に更新することができる一方で、更新された後のプログラムおよびライブラリおよび位置サイズ付ハッシュアレイもしくは統合ハッシュアレイと電子署名を、該当公開鍵で検証することができる。
【０１０４】
または公開鍵と電子署名の検証関数を封入した耐タンパーな装置を用いて公開鍵を保護している場合には、公開鍵を記憶装置から読み出した後の検証関数適用直前に主記憶上にある公開鍵の改竄を防止し、当該公開鍵および検証関数の演算処理を信頼することができる。
【０１０５】
実施の形態２．
この実施の形態２では、複数の動的リンクライブラリ（以下、ライブラリと称する）を利用する場合について示す。図２４は、この発明の実施の形態２によるライブラリの保護についてのデータの処理関係を示す説明図である。
プログラム６はライブラリ４０内のオブジェクト４１，４２を直接参照し、更にライブラリ５０内のオブジェクト５１，５３を直接参照する様に作られていた。この場合にライブラリ４０，５０を保護するためには、オブジェクト４１，４２，５１，５３を保護対象とすることが必要である。そこで実施の形態１の図１１の説明と同様にしてオブジェクト４１，４２に該当する三つ組みから形成される位置サイズ付ハッシュアレイ１０４相当とオブジェクト５１，５３に該当する三つ組みから形成される位置サイズ付ハッシュアレイ１０５相当を形成する。ライブラリ識別子４０と位置サイズ付ハッシュアレイ１０４相当をペアにし、またライブラリ識別子５０と位置サイズ付ハッシュアレイ１０５相当をペアにし、これらのペアを集めてアレイ（以下、統合ハッシュアレイ１０８と称する）とする。
次いで統合ハッシュアレイ１０８に対して、製造者のみが保有する秘密鍵７００を用いて電子署名６０８を作成する。なお署名作成手続きとしては、例えば非特許文献１に記載されているRSASSA-PSS-SIGNおよびRSASSA-PKCS1-v1_5-SIGNの様に、ハッシュ関数を前段階として持つ署名作成手続きを用いることで、保護対象オブジェクト数および動的リンクライブラリ数によって統合ハッシュアレイのサイズが異なることにも対応可能とする。
【０１０６】
図２５は、この発明の実施の形態２によるライブラリの認証についてのデータの処理関係を示す説明図である。
プログラム６、ライブラリ４０、ライブラリ５０は上記図２４で参照されたものと同一であり、統合ハッシュアレイ１０８、電子署名６０８は、上記図２４で作成されたものである。この場合にライブラリ４０，５０を認証するためには、オブジェクト４１，４２，５１，５３の改竄有無を検査することが必要である。
【０１０７】
まず、製造者のみが保有する秘密鍵７００に対応する公開鍵７０１を用いて、統合ハッシュアレイ１０８が改竄されていないかどうかを電子署名６０８に照らし合わせて検証する。なお署名検証手続きとしては、例えば非特許文献１に記載されているRSASSA-PSS-VERIFYおよびRSASSA-PKCS1-v1_5-VERIFYの様に、ハッシュ関数を前段階として持つ署名作成手続きを用いることで、保護対象オブジェクト数および動的リンクライブラリ数によって統合ハッシュアレイのサイズが異なることにも対応可能とする。
【０１０８】
次に、改竄されていないと確認の取れた位置３４１，３４２，３５１，３５３とサイズ４４１，４４２，４５１，４５３とライブラリ識別子４０，５０を用いて、保護対象オブジェクト４１，４２，５１，５３を特定する。次に、各オブジェクト４１，４２，５１，５３のハッシュ値５４１，５４２，５５１，５５３を計算する。
統合ハッシュアレイ１０８に格納されていたハッシュ値２４１，２４２，２５１，２５３は改竄されていないと確認されているため、保護時に計算したハッシュ値と認証時に計算したハッシュ値をそれぞれ比較検証することにより、オブジェクト４１，４２，５１，５３への改竄がなかったかどうかを確認することができる。
【０１０９】
オブジェクト４１に改竄があった場合を想定すると、認証時にオブジェクト４１から計算したハッシュ値５４１は異なる値になってしまうので、ハッシュ値２４１との比較で検出される。オブジェクト４１の改竄を隠すために、改竄後のオブジェクトから計算したハッシュ値で統合ハッシュアレイ１０８内のハッシュ値２４１を置き換えたと想定すると、認証時に統合ハッシュアレイ１０８は電子署名６０８に適合しなくなるので、検出される。オブジェクト４１の改竄を隠すために、統合ハッシュアレイ１０８内の位置サイズ付ハッシュアレイ１０４相当を含むペアを削除したと想定すると、認証時にライブラリ識別子４０に対応するペアを検索で見つけることができなくなるので、検出される。オブジェクト４１の改竄を隠すために、ハッシュ値２４１と位置３４１とサイズ４４１の三つ組みを削除したと想定すると、認証時に統合ハッシュアレイ１０８は電子署名６０８に適合しなくなるので、検出される。オブジェクト４１の改竄と統合ハッシュアレイ１０８の改竄を隠すために、改竄後の統合ハッシュアレイから作成した電子署名で電子署名６０８を置き換えたと想定すると、電子署名６０８を作成するために使われた秘密鍵７００は製造者しか保有していないため、改竄者は異なる秘密鍵を用いて電子署名を作成せざるをえず、製造者の秘密鍵７００に対応した公開鍵７０１を用いた検証で不適合が検出される。これらの認証処理は、オブジェクト４２，５１，５３についても同様である。
【０１１０】
動的リンクライブラリを保護するための、統合ハッシュアレイおよび電子署名作成方法の手順を、図２６に従って説明する。なお、以下では実施の形態１による動的リンクライブラリの保護と同一のステップには図５で使用した符号と同一の符号を付し、説明を省略または簡略化する。
まず呼び出される１つのライブラリ分についての保護対象オブジェクトを特定し（ステップＳ６０１）、保護対象オブジェクトの位置・サイズを特定し（ステップＳ１０１）、該当のオブジェクトについてハッシュ値を計算し（ステップＳ１０２）、該当オブジェクトのハッシュ値・位置・サイズを三つ組みにする（ステップＳ１０３）。ライブラリ内の全ての保護対象オブジェクトに対して実施したかを判断し、未実施があればステップＳ１０１に戻って繰り返す（ステップＳ１０４）。ライブラリ内の全てに対して実施した後、全保護対象オブジェクトの三つ組みを集めて位置サイズ付ハッシュアレイを作成し（ステップＳ１０５）、位置サイズ付ハッシュアレイと該当ライブラリの識別子をペアにする（ステップＳ６０２）。呼び出される全てのライブラリに対して実施したかを判断し、未実施があればステップＳ６０１に戻って繰り返す（ステップＳ６０３）。全ライブラリに対して実施した後、上記全ライブラリ分のライブラリ識別子と位置サイズ付ハッシュアレイのペアを集めて統合ハッシュアレイを作成し（ステップＳ６０４）、統合ハッシュアレイの電子署名を作成し（ステップＳ６０５）、プログラムに対応付けて統合ハッシュアレイと電子署名を格納する（ステップＳ６０６）。以上で統合ハッシュアレイおよび電子署名作成の手順は終了である。
【０１１１】
まず統合ハッシュアレイを認証する方法の手順を、図２７に従って説明する。まずプログラムに対応した統合ハッシュアレイと電子署名を読出す（ステップＳ７０１）。もし何れか一方または両方について読出し成功しなかったならば分岐して（ステップＳ７０２）、認証不合格と判定し（ステップＳ７０６）、認証処理を終了する。読出し成功していれば、統合ハッシュアレイと、統合ハッシュアレイの電子署名とを、信頼できる公開鍵を用いて検証する（ステップＳ７０３）。もし電子署名に適合していなければ分岐して（ステップＳ７０４）、認証不合格と判定し（ステップＳ７０６）、認証処理を終了する。署名に適合していた場合は、統合ハッシュアレイ認証結果を合格とし（ステップＳ７０５）、認証方法の手順を終了する。
【０１１２】
続いて動的リンクライブラリを認証する方法の手順を、図２８に従って説明する。なお、以下では実施の形態１による動的リンクライブラリを認証する方法の手順と同一のステップには図６で使用した符号と同一の符号を付す。
図２７で認証された統合ハッシュアレイの中から、該当ライブラリの識別子に対応した位置サイズ付ハッシュアレイ相当を検索する（ステップＳ７１１）。もし位置サイズ付ハッシュアレイ相当が存在しなかったら分岐して（ステップＳ７１２）、ライブラリ認証結果を不合格とし（ステップＳ２１１）、認証方法の手順を終了する。もし検索で存在したら、位置サイズ付ハッシュアレイの要素によって、対象オブジェクトの位置・サイズを特定し（ステップＳ２０５）、対象オブジェクトのハッシュ値を計算し（ステップＳ２０６）、計算されたハッシュ値と位置サイズ付ハッシュアレイ内に格納されていたハッシュ値を比較する（ステップＳ２０７）。
【０１１３】
ハッシュ値同士が一致しないならば分岐し（ステップＳ２０８）、ライブラリ認証結果を不合格とし（ステップＳ２１１）、認証方法の手順を終了する。ハッシュ値同士が一致していれば、位置サイズ付ハッシュアレイの全ての要素について実施したかを判断し、未実施があればステップＳ２０５の処理に戻り上述した処理を繰り返す（ステップＳ２０９）。ハッシュ値同士に不適合が見つからないまま全ての要素に対して実施し終えたならばライブラリ認証結果を合格とし（ステップＳ２１０）、認証方法の手順を終了する。
【０１１４】
動的リンクライブラリと呼び出しプログラムを含むプログラム管理手順について、特にプログラム起動時に暗黙に動的リンクされる場合の手順について、図２９を用いて説明する。なお、以下では実施の形態１によるプログラム起動時に暗黙に動的リンクされる場合の手順と同一のステップには図１３で使用した符号と同一の符号を付し、説明を省略または簡略化する。
プログラム起動処理の内動的リンクを除く処理、例えば資源割当などを実施（ステップＳ３０１）した後、該当プログラムが保護必要であるか否か印を参照して判断する（ステップＳ３０２）。保護必要であれば、プログラム認証を行い（ステップＳ３０３）、認証合格しなければ分岐して（ステップＳ３０４）、認証エラーとしてプログラム実行を拒絶する（ステップＳ３１１）。プログラム認証合格であれば、ハッシュアレイ認証を行い（ステップＳ８０１）、認証合格しなければ分岐して（ステップＳ８０２）、認証エラーとしてプログラム実行を拒絶する（ステップＳ３１１）。認証合格していれば、プログラムが暗黙に動的リンクするライブラリを、直接利用するものと間接利用するものを共に含めて列挙する（ステップＳ３０５）。
列挙されたライブラリが１個未満であれば分岐し（ステップＳ３０６），以後の処理をスキップしてプログラム起動を完了とする。１個以上であれば図２８で説明したライブラリ認証の手順を実施し（ステップＳ８０５）、認証合格しなければ分岐して（ステップＳ８０６）、認証エラーとしてプログラム実行を拒絶する（ステップＳ３１１）。もしライブラリ認証合格であれば認証無しの動的リンク手順（ステップＳ３０９）を実施する。列挙された全てのライブラリについて実施したかどうかを判断し、未実施があればステップＳ８０５に戻って繰り返す（ステップＳ３１０）。全てのライブラリについて実施し終えたならばプログラム起動処理を終了する。
他方、ステップＳ３０２において該当プログラムが保護必要でなければ、実施の形態１で説明したステップＳ３１２からステップＳ３１５と同一の処理を行い、処理を終了する。
【０１１５】
プログラム認証については、実施の形態１の図１３における説明と同様である。
【０１１６】
動的リンクライブラリと呼び出しプログラムを含むプログラム管理手順について、特にプログラム実行中に明示的にロードされる場合の手順については、実施の形態１の図１４における説明と同様である。但し、図１４のフローチャートのステップＳ４０２で示したライブラリ認証には、上述した図２８のフローチャートで示した手順を用いる。
【０１１７】
動的リンクライブラリと呼び出しプログラムを含むプログラム管理手順について、特にプログラム実行中に明示的にオブジェクトアドレス取得される場合の手順については、実施の形態１の図１５および図１６における説明と同様である。但し、図１５のフローチャートのステップＳ５０４で示したフィックスアップ時オブジェクト認証については、図３０で下記に説明する手順を用い、図１５のフローチャートのステップＳ５０９で示したライブラリ認証には、上述した図２８のフローチャートで示した手順を用いる。
【０１１８】
実施の形態２によるフィックスアップ時オブジェクト認証の手順について、図３０を用いて説明する。なお、以下では実施の形態１によるプログラム起動時に暗黙に動的リンクされる場合の手順と同一のステップには図１７で使用した符号と同一の符号を付し、説明を省略または簡略化する。
【０１１９】
まずオブジェクトの属するライブラリは認証済みかどうか判断し、認証済みでなければ分岐して（ステップＳ５３１）、オブジェクト認証結果を不合格として（ステップＳ５３５）、オブジェクト認証処理を終了する。ライブラリが認証済みならば、統合ハッシュアレイの中からライブラリの識別子に対応した位置サイズ付ハッシュアレイ相当を検索し（ステップＳ８２１）、フィックスアップ過程で位置を特定した該当オブジェクトについて、位置サイズ付ハッシュアレイ内の対応する要素を検索する（ステップＳ５３２）。以降、実施の形態１で説明したステップＳ５３３からステップＳ５３５と同一の処理を行い、処理を終了する。
【０１２０】
動的リンクライブラリの保護装置とライブラリの作成装置とこれらの間を流れるデータについての構成を、特にライブラリ４０と５０の場合を例にとって図３１を用いて説明する。
ソースコードファイルをコンパイルしてオブジェクトファイルを取得し、オブジェクトファイルをリンクして動的リンクライブラリを得る過程までは、実施の形態１の図１８で説明したものと同一であるため、説明を省略する。リンカー１１１から出力されたばかりの動的リンクライブラリ４０ａと５０ａに含まれるシンボルテーブルは、ライブラリの配布時や製品への搭載時にはシンボル情報・デバッグ情報削除装置１１２で削除されてしまうので、例えば静的関数のオブジェクトがあったとしても、外部から直接には参照できなくなる。
【０１２１】
実施の形態２の位置サイズ付ハッシュアレイ作成装置１２１は、保護対象オブジェクト名前のリストを受取り、ライブラリ４０ａ内のシンボルテーブル内を名前で検索して、位置サイズ付ハッシュアレイ１０４に格納すべき位置・サイズを取得する。また保護対象オブジェクト名前のリストを受取り、ライブラリ５０ａ内のシンボルテーブル内を名前で検索して、位置サイズ付ハッシュアレイ１０５に格納すべき位置・サイズを取得する。なお位置サイズ付ハッシュアレイ１０４，１０５を起動時動的リンクのライブラリ認証処理にしか使用しないならば、これらのハッシュアレイに格納すべき位置の標記は、最終的なライブラリファイル４０，５０内における各オブジェクトのオフセットであることが、認証処理を単純化するためには好適である。位置サイズ付ハッシュアレイ作成装置１２１は上記位置・サイズに該当するオブジェクトのハッシュ値を計算して三つ組みを作り、これを集めて位置サイズ付ハッシュアレイ１０４，１０５を作成する。
【０１２２】
実施の形態２の統合ハッシュアレイ作成装置８は、ライブラリ識別子４０と位置サイズ付ハッシュアレイ１０４のペアと、ライブラリ識別子５０と位置サイズ付ハッシュアレイ１０５のペアを受け取り、それぞれのペアを要素にした統合ハッシュアレイ１０８を作成する。
【０１２３】
実施の形態２の電子署名作成装置７１０は、秘密鍵７００を用いて、統合ハッシュアレイ１０８の電子署名６０８を作成する。実施の形態２の統合ハッシュアレイ格納装置１２６ａは、統合ハッシュアレイ１０８を、プログラム識別子２に関連付けて格納する。また実施の形態２の電子署名格納装置１２４ａは、電子署名６０８を、プログラム識別子２に関連付けて格納する。
【０１２４】
動的リンクライブラリと呼び出しプログラムを含むプログラム管理に関する装置と装置間を流れるデータの構成について、特にプログラム６の起動時に動的リンクライブラリ４０，５０が暗黙に動的リンクされる場合の構成について、図３２を用いて説明する。
キーボードやボタンなどの入力装置１５０を経由して入力されたプログラム起動指示６７０は、起動指示解析装置１５１によってプログラム識別子６を抽出される。プログラム６が保護不要と印づけられている場合には細線矢印のみに従ってデータを流し、プログラム６が保護必要と記しづけられている場合には細線矢印と太線矢印の両方に従ってデータを流す。プログラム認証装置１５７はプログラム識別子６を契機に該当プログラムの認証を実施し、その結果であるプログラム認証結果６７３を出力する。プログラム読出装置１５３はプログラム識別子６を契機に読み出すが、その一方でプログラム認証結果６７３が認証合格でないならば読出しを中止する。読出しに成功したプログラム６は、ライブラリ動的リンク検出装置１５４に入力され、ライブラリ識別子を抽出される。図３２の場合には、ライブラリ識別子４０，５０が抽出されることになる。
【０１２５】
統合ハッシュアレイ読出装置１２６ｂと電子署名読出装置１２４ｂは、プログラム識別子６を受け取り、該当する統合ハッシュアレイ１０８と電子署名６０８を出力する。電子署名検証装置７１１は統合ハッシュアレイ１０８と電子署名６０８と、公開鍵読出装置７０２から信頼できる公開鍵７０１を受け取り、電子署名検証結果６７４を出力する。
信頼できる公開鍵を供給可能な装置として、公開鍵読出装置７０２には製造時のみ公開鍵を書き込むことが可能で以後書換え不能な記憶装置を用いる場合を図３２では示しているが、電子署名検証装置７１１中の検証関数（不図示）と公開鍵７０１を封入した耐タンパーな装置を用いて、該装置に入力として電子署名６０８と統合ハッシュアレイから計算したハッシュ値（不図示）を与え、電子署名検証結果６７４を出力させる構成であると、更に好適である。
【０１２６】
位置サイズ付ハッシュアレイ検索装置１２７は、統合ハッシュアレイ１０８の中から、ライブラリ識別子４０に対応した位置サイズ付ハッシュアレイ１０４と、ライブラリ識別子５０に対応した位置サイズ付ハッシュアレイ１０５を出力する。ライブラリ読出装置１５５は、ライブラリ識別子４０，５０を受け取ってライブラリ４０，５０を出力する。
【０１２７】
ハッシュ値検証装置１２８は、ライブラリ４０と位置サイズ付ハッシュアレイ１０４を受け取って、位置サイズ付ハッシュアレイ１０４に含まれる全要素の位置とサイズを基にライブラリ４０内のオブジェクトを抽出し、そのハッシュ値を計算し、位置サイズ付ハッシュアレイ１０４に含まれるハッシュ値と比較検証する。ハッシュ値検証装置１２８は、更にライブラリ５０と位置サイズ付ハッシュアレイ１０５を受け取って、位置サイズ付ハッシュアレイ１０５に含まれる全要素の位置とサイズを基にライブラリ５０内のオブジェクトを抽出し、そのハッシュ値を計算し、位置サイズ付ハッシュアレイ１０５に含まれるハッシュ値と比較検証する。ハッシュ値検証装置１２８は、これらのハッシュ値検証結果を保護対象オブジェクト毎の比較結果として出力するが、ここでは説明のために、ライブラリ４０のオブジェクト分の比較結果の集まりをハッシュ値検証結果６７６、ライブラリ５０のオブジェクト分の比較結果の集まりをハッシュ値検証結果６７７と符号付けることにする。
【０１２８】
判定装置１２９は電子署名検証結果６７４をハッシュアレイ認証結果６７５として受け取り、ハッシュ値検証結果６７６，６７７をライブラリ認証結果６７８，６７９として受け取って判断し、認証結果を出力する。
より詳細には、判定装置１２９は図２１で説明した比較結果集積部１２９ａと認証結果出力部１２９ｂで構成される。比較結果集積部１２９ａは比較結果の集まりであるハッシュ値検証結果６７６を単一のライブラリ認証結果６７８に集約し、同様にハッシュ値検証結果６７７をライブラリ認証結果６７９に集約する。判定装置１２９ｂは電子署名検証結果６７４をハッシュアレイ認証結果６７５として受け取り、上記ライブラリ認証結果６７８を受け取って判断し、ライブラリ４０の動的リンク可否判断基準となる認証結果を出力する。また判定装置１２９ｂは前記電子署名検証結果６７４を再度ハッシュアレイ認証結果６７５として受け取り、上記ライブラリ認証結果６７９を受け取って判断し、ライブラリ５０の動的リンク可否判断基準となる認証結果を出力する。
【０１２９】
動的リンク装置１５６はプログラム６とライブラリ４０，５０を受け取って実行可能イメージを主記憶上に通常は展開しオブジェクトアドレスのフィックスアップを行うが、認証結果が合格でないならば中止する。起動時の暗黙の動的リンクが失敗した場合、プログラム６は起動に失敗し、実行されない。
【０１３０】
なお統合ハッシュアレイ１０８が不正に除去されて統合ハッシュアレイ読出装置１２６ｂが読み出しに失敗する場合、後段の位置サイズ付ハッシュアレイ検索装置１２７およびハッシュ値検証装置１２８を経由して判定装置１２９に失敗の旨通知する。あるいは特に図示しないが、読み出し失敗を直接に判定装置１２９に通知するように構成してもよい。判定装置１２９は前記失敗を通知された場合、動的リンク可否判断基準となる認証結果として不合格を出力する。
電子署名６０８が不正に除去されて電子署名読出し装置１２４ｂが読み出しに失敗する場合、後段の電子署名検証装置７１１を経由して判定装置１２９に失敗の旨通知する。あるいは特に図示しないが、読み出し失敗を直接に判定装置１２９に通知してもよい。判定装置１２９は前記失敗を通知された場合、ライブラリ認証結果として不合格を出力する。
あるいは別の構成として、位置サイズ付ハッシュアレイ読出装置１２６ｂまたは電子署名読出装置１２４ｂが読み出しに失敗する場合、失敗の旨を直接動的リンク装置１５６に通知し、実行可能イメージの主記憶上への展開とオブジェクトアドレスのフィックスアップを中止させてもよい。
【０１３１】
動的リンクライブラリと呼び出しプログラムを含むプログラム管理に関する装置と装置間を流れるデータの構成について、特にプログラム６の起動時に動的リンクライブラリ５０が暗黙に動的リンクされ、動的リンクライブラリ４０は明示的にロードされる場合の構成について、図３３〜３５を用いて説明する。
図３３では上記の場合の内の、特にプログラム６の起動時に動的リンクライブラリ５０が暗黙に動的リンクされる時点の構成を説明する。図３２との相違点は、ライブラリ動的リンク検出装置１５４から抽出されるのがライブラリ識別子５０のみであること、以降の構成で登場するライブラリ・位置サイズ付ハッシュアレイ・ハッシュ値検証結果・ライブラリ認証結果がそれぞれ５０，１０５，６７７，６７９のみであること、判定装置の認証結果出力部１２９ｂがハッシュアレイ認証結果６７５として受け取るのは出力されたばかりの電子署名検証結果６７４であること、実行可能イメージ６７２ａはプログラム６とライブラリ５０を主記憶上に展開したものであって、まだライブラリ４０の分は展開されていないこと、である。
【０１３２】
図３４では上記の場合の内の、特にプログラム実行中に動的リンクライブラリ４０が明示的にロードされる時点の構成を説明する。
実行中のプログラムが保護不要であった場合、細線矢印のみに沿ってデータを流し、保護必要であった場合、細線矢印と太線矢印の両方に沿ってデータを流す。
実行中のプログラム６はライブラリロード指示６７１を発する。ライブラリロード指示解析装置１５２は、ライブラリロード指示６７１を入力して、ライブラリ識別子４０を抽出する。ライブラリ読出装置１５５は、ライブラリ識別子４０を契機として、ライブラリ４０を読み出す。
【０１３３】
統合ハッシュアレイ１０８は、プログラム６起動時に統合ハッシュアレイ読出装置１２６ｂによって出力されていたので、ロード時点でも引き続き使用する。位置サイズ付ハッシュアレイ検索装置１２７は、統合ハッシュアレイ１０８の中から、ライブラリ識別子４０に該当する位置サイズ付ハッシュアレイ１０４を出力する。ハッシュ値検証装置１２８は位置サイズ付ハッシュアレイ１０４とライブラリ４０を入力し、ハッシュ値検証結果６７６を出力する。判定装置１２８の比較結果集積部１２８ａは比較結果の集まりであるハッシュ値検証結果６７６を単一のライブラリ認証結果６７８に集約する。動的リンク装置１５６ａは、通常ライブラリ４０とプログラム６を受け取って実行可能イメージを主記憶上に展開するが、認証結果が不合格ならば展開を中止する。
なお図３３のハッシュアレイ認証結果６７５がロード時点でも引き続き使用できるならば、ライブラリ認証結果６７８と動的リンク装置１５６ａの間の構成には、図３３と同様に認証結果出力装置１２９ｂを介在させ、更にハッシュアレイ認証結果６７５を入力させていてもよい。
【０１３４】
図３５では上記の場合の内の、特に明示的にロードされた動的リンクライブラリ４０のオブジェクトのアドレス取得を行う時点の構成を説明する。
実行中のプログラムが保護不要であった場合、細線矢印のみに沿ってデータを流し、保護必要であった場合、細線矢印と太線矢印の両方に沿ってデータを流す。
実行中のプログラム６は、アドレス取得指示６８０を発する。アドレス取得指示解析装置１６０はアドレス取得指示６８０を入力して、オブジェクト名４１とライブラリ識別子４０を抽出する。統合ハッシュアレイ１０８は、プログラム６起動時に統合ハッシュアレイ読出装置１２６ｂによって出力されていたので、アドレス取得時点でも引き続き使用する。位置サイズ付ハッシュアレイ検索装置１２７は統合ハッシュアレイ１０８の中から、ライブラリ識別子４０に対応する位置サイズ付ハッシュアレイ１０４を出力する。他方、動的シンボルテーブル内検索部１６１ａはオブジェクト名４１に該当する位置３４１およびサイズ４４１を出力する。ここで位置３４１は、セクション識別子とセクション内位置の組で表記されている。
【０１３５】
オブジェクト検証装置１３１は位置３４１とサイズ４４１で位置サイズ付ハッシュアレイ１０４内の要素検索を行い、該当要素の有無をオブジェクト認証結果６８１として出力する。更にアドレスマッピング部１６１ｂは位置３４１をオブジェクトのアドレス３４１ａに変換する。アドレス出力装置１６２は、オブジェクト認証結果６８１の合否に応じて、アドレス３４１ａとフィックスアップ済みである旨記録しアドレスの出力を行う。
【０１３６】
なお該当オブジェクトが他オブジェクトを参照している場合、ライブラリロードとアドレス取得が再帰的に実施されるが、それらに関する装置構成は上述した図３４および図３５と同一であるため説明を省略する。
【０１３７】
図３１の電子署名格納装置１２４ａと図３２および図３３の電子署名読出装置１２４ｂは、同一の記憶装置に備えられた書込み手段と読み出し手段であってもよく、あるいは同一の記憶媒体に対する別個の装置である書込み装置と読み出し装置であってもよい。図３１の統合ハッシュアレイ格納装置１２６ａと図３２および図３３の統合ハッシュアレイ読出装置１２６ｂは、同一の記憶装置に備えられた書込み手段と読み出し手段であってもよく、あるいは同一の記憶媒体に対する別個の装置である書込み装置と読み出し装置であってもよい。
図３２および図３３のプログラム読出装置１５３は書き込み手段と読み出し手段を供えた記憶装置の読み出し手段であってもよく、あるいは記憶媒体に対する読み出し装置であってもよい。図３２および図３３のライブラリ読出装置１５５は書込み手段と読み出し手段を備えた記憶装置の読み出し手段であってもよく、あるいは記憶媒体に対する読み出し装置であってもよい。前記記憶装置の書込み手段あるいは前記記憶媒体に対する書込み装置は図３１で説明しなかったが、少なくとも製造時に必要とすることは言うまでもない。
同一の記憶装置を採用した場合には、製造者は一旦製造を終えた後でもプログラムおよび／またはライブラリおよび／または位置サイズ付ハッシュアレイおよび／または電子署名を更新することができる。同一の記憶媒体に対する別個の装置を採用した場合には、製造者は媒体を交換することによりプログラムおよび／またはライブラリおよび／または位置サイズ付ハッシュアレイおよび／または電子署名を更新することができる。
【０１３８】
以上のような実施の形態２の構成を備えることにより、以下に示す効果を有する。
ハッシュ関数適用対象を位置とサイズで特定するように構成したので、ライブラリを細かく保護および認証することができる。また、保護対象オブジェクトを指定することができるので、ライブラリの一部のみを保護および認証することができる。
さらに、保護対象をプログラムから利用するオブジェクトのみに限定することができる。
【０１３９】
さらに、保護対象オブジェクトを名称で指定するように構成したので、ソースコード形式での手続き・データの作成者にとっては、位置・サイズを数値で指定する場合に比べて容易に指定できる。
【０１４０】
複数の動的リンクライブラリを利用するプログラムの保護および認証に、位置サイズ付ハッシュアレイを統合した統合ハッシュアレイを用いるように構成したので、統合ハッシュアレイはプログラムから呼び出される動的リンクライブラリに関わる位置サイズ付ハッシュアレイを全て集めることができ、統合ハッシュアレイ作成時に想定しなかったライブラリを起動時および実行中のプログラムから動的リンクされることを防ぐことができる。さらに、１つの電子署名を作成することで複数の位置サイズ付ハッシュアレイに対応させることができる。また認証時においても、１つの電子署名の検証処理を行うことで複数の位置サイズ付ハッシュアレイ分の認証を行うことができる。
【０１４１】
ライブラリ内オブジェクトのハッシュ値を事前に計算し格納するように構成したので、ライブラリが改竄を受けた場合には認証過程で計算したハッシュ値が異なり、改竄を検出することができる。
さらに、公開鍵暗号の秘密鍵を用いて統合ハッシュアレイの電子署名を作成するようにしたので、統合ハッシュアレイが改竄されると、電子署名による検証で不適合を検出することができる。また、秘密鍵保有者以外による署名偽造が困難となるように、統合ハッシュアレイを保護するように構成したので、統合と電子署名を共に改竄された場合にも、認証時に改竄を検出することができる。
【０１４２】
また、統合ハッシュアレイおよび電子署名を、呼び出しプログラム毎に作成し、格納するように構成したので、個々のプログラムで使用するオブジェクトのみが保護対象になっている様に、それぞれ別の統合ハッシュアレイおよび電子署名を作成し認証することができる。
さらに、ライブラリ呼び出しプログラムを保護対象と非保護対象に分類するように構成したので、非保護対象プログラムから呼び出される場合には、統合ハッシュアレイと電子署名を不要にすることができる。またプログラム起動時に統合ハッシュアレイと電子署名の検証処理が不要になる。
【０１４３】
保護必要であると分類したプログラムに対して電子署名を作成・格納し、起動時に電子署名を検証するように構成したので、ライブラリ内のオブジェクトに加えてプログラムファイル内のオブジェクトを保護できるようになった。またプログラムの起動に際して、プログラムファイル内のオブジェクトの改竄有無を検査して認証できるようになった。さらに認証不合格になったプログラムの実行を抑止することができるようになった。さらに、ライブラリ内の保護必要オブジェクトを直接もしくは間接的に利用するプログラムは、保護必要であると分類するようにしたので、保護必要オブジェクトを参照するプログラムは、改竄検出可能な様に保護することができるようになった。
また、プログラムが保護対象であると分類した上で統合ハッシュアレイまたは電子署名の欠落を認証不合格と判定するように構成したので、統合ハッシュアレイおよび電子署名が不正除去された場合にも認証不合格と検出することができる。
【０１４４】
さらに、保護されたライブラリを、プログラム起動時の暗黙の動的リンクに際して認証するように構成したので、認証不合格を検出した場合には動的リンクの中止を通じてプログラムの実行を抑止することができる。
さらに、保護されたライブラリを、プログラムからのライブラリロードに際して認証するように構成したので、認証不合格を検出した場合には動的リンクの中止を通じてライブラリロードを抑止することができる。
さらに、保護されたオブジェクトを、プログラムからのアドレス取得に際して認証するように構成したので、保護対象外オブジェクトを利用するためにアドレスを取得しようとしても認証不合格になりアドレスをプログラムに渡さない。
【０１４５】
さらに、保護対象オブジェクトはプログラムからの起動時動的リンクおよびロード時動的リンクに際してハッシュ値比較検証が済んでいるため、アドレス取得のために指定したオブジェクトがハッシュ検証済みであるかどうかは、統合ハッシュアレイ内の位置サイズ付ハッシュアレイ内の三つ組みに該当するか否かを以って代用することができる。
【０１４６】
さらに、電子署名作成過程の前段にハッシュ関数適用を設けるように構成したので、保護対象オブジェクトの数に比例して大きくなる統合ハッシュアレイに対しても、署名関数の入力データサイズを一定以内に保つことができる。また電子署名検証過程内の前段にハッシュ関数適用を設けるように構成したので、検証関数の入力データサイズを一定以内に保つことができる。
【０１４７】
さらに、製造者のみが保有する秘密鍵に対応した公開鍵のみを、製造時のみに書き込み可能な記憶装置に格納することで保護し、プログラムおよびライブラリおよび統合ハッシュアレイおよび電子署名を書き換え可能な記憶装置に格納し、プログラムおよびライブラリおよび統合ハッシュアレイは電子署名によって保護している場合には、製造者によって、プログラムおよびライブラリを統合ハッシュアレイと電子署名と共に置換することができる一方で、置換された後のプログラムおよびライブラリおよび統合ハッシュアレイと電子署名を、該当公開鍵で検証することができる。
【０１４８】
または公開鍵と電子署名の検証関数を封入した耐タンパーな装置を用いて公開鍵を保護している場合には、公開鍵を記憶装置から読み出した後の検証関数適用直前に主記憶上にある公開鍵の改竄を防止し、当該公開鍵および検証関数の演算処理を信頼することができる。
【０１４９】
なお、本願発明はその発明の範囲内において、各実施の形態の自由な組み合わせ、あるいは各実施の形態の任意の構成要素の変形、もしくは各実施の形態において任意の構成要素の省略が可能である。
【符号の説明】
【０１５０】
１，２，３，４，５，６，７  プログラム、１０，２０，２０ａ，３０，４０，４０ａ，５０，５０ａ，６０，７０  動的リンクライブラリ、１００，１０１，１０２，１０３，１０４，１０５，１０６，１０７  位置サイズ付ハッシュアレイ、１０８  統合ハッシュアレイ、
１１０  コンパイラ、１１１  リンカー、１１２  シンボル情報・デバッグ情報削除装置、
１２１  位置サイズ付ハッシュアレイ作成装置、１２１ａ  位置サイズ付ハッシュアレイ作成装置（オブジェクト特定部）、１２１ｂ  位置サイズ付ハッシュアレイ作成装置（ハッシュ算出部）、１２１ｃ  位置サイズ付ハッシュアレイ作成装置（三つ組み生成部）、１２１ｄ  位置サイズ付ハッシュアレイ作成装置（位置サイズ付ハッシュアレイ生成部）、１２２  統合ハッシュアレイ作成装置、１２３ａ，１２４ａ  電子署名格納装置、１２３ｂ，１２４ｂ  電子署名読出装置、１２５ａ  位置サイズ付ハッシュアレイ格納装置、１２５ｂ  位置サイズ付ハッシュアレイ読出装置、１２６ａ  統合ハッシュアレイ格納装置、１２６ｂ  統合ハッシュアレイ読出装置、１２７  位置サイズ付ハッシュアレイ検索装置、１２８  ハッシュ値検証装置、１２８ａ  ハッシュ値検証装置（オブジェクト特定部）、１２８ｂ  ハッシュ値検証装置（ハッシュ算出部）、１２８ｃ  ハッシュ値検証装置（比較検証部）、１２９  判定装置、１２９ａ  判定装置（比較結果集積部）、１２９ｂ  判定装置（認証結果出力部）、１３０  読出済位置サイズ付ハッシュアレイ特定装置、１３１  オブジェクト検証装置、
１５０  入力装置、１５１  起動指示解析装置、１５２  ライブラリロード指示解析装置、１５３  プログラム読出装置、１５４  ライブラリ動的リンク検出装置、１５５  ライブラリ読出装置、１５６，１５６ａ  動的リンク装置、１５７  プログラム認証装置、１６０  アドレス取得指示解析装置、１６１  アドレスフィックスアップ装置、１６１ａ  アドレスフィックスアップ装置（動的シンボルテーブル内検索部）、１６１ｂ  アドレスフィックスアップ装置（アドレスマッピング部）、１６２  アドレス出力装置、
６００，６０１，６０２，６０３，６０４，６０５，６０６，６０７，６０８  電子署名、
６５０，６７０  プログラム起動指示、６５１，６７１  ライブラリロード指示、６５２，６７２，６７２ａ  実行可能イメージ、６５３，６７３  プログラム認証結果、６５４，６７４  電子署名検証結果、６７５  ハッシュアレイ認証結果、６５６，６７６，６７７  ハッシュ値検証結果、６５８，６７８，６７９  ライブラリ認証結果、
６６０，６８０  アドレス取得指示、６６１，６８１  オブジェクト認証結果、
７００  秘密鍵、７０１  公開鍵、７０２  公開鍵読出装置、７１０  電子署名作成装置、７１１  電子署名検証装置。
【図１】
2015084006.tif 000003
【図２】
2015084006.tif 000004
【図３】
2015084006.tif 000005
【図４】
2015084006.tif 000006
【図５】
2015084006.tif 000007
【図６】
2015084006.tif 000008
【図７】
2015084006.tif 000009
【図８】
2015084006.tif 000010
【図９】
2015084006.tif 000011
【図１０】
2015084006.tif 000012
【図１１】
2015084006.tif 000013
【図１２】
2015084006.tif 000014
【図１３】
2015084006.tif 000015
【図１４】
2015084006.tif 000016
【図１５】
2015084006.tif 000017
【図１６】
2015084006.tif 000018
【図１７】
2015084006.tif 000019
【図１８】
2015084006.tif 000020
【図１９】
2015084006.tif 000021
【図２０】
2015084006.tif 000022
【図２１】
2015084006.tif 000023
【図２２】
2015084006.tif 000024
【図２３】
2015084006.tif 000025
【図２４】
2015084006.tif 000026
【図２５】
2015084006.tif 000027
【図２６】
2015084006.tif 000028
【図２７】
2015084006.tif 000029
【図２８】
2015084006.tif 000030
【図２９】
2015084006.tif 000031
【図３０】
2015084006.tif 000032
【図３１】
2015084006.tif 000033
【図３２】
2015084006.tif 000034
【図３３】
2015084006.tif 000035
【図３４】
2015084006.tif 000036
【図３５】
2015084006.tif 000037
【図３６】
2015084006.tif 000038
【図３７】
2015084006.tif 000039