JP2015084006A - 動的リンクライブラリ保護方法、動的リンクライブラリ認証方法、動的リンクライブラリ保護装置、動的リンクライブラリ認証装置、プログラム管理システム、プログラムおよび動的リンクライブラリ保護方法、プログラムおよび動的リンクライブラリ認証方法 - Google Patents

動的リンクライブラリ保護方法、動的リンクライブラリ認証方法、動的リンクライブラリ保護装置、動的リンクライブラリ認証装置、プログラム管理システム、プログラムおよび動的リンクライブラリ保護方法、プログラムおよび動的リンクライブラリ認証方法 Download PDF

Info

Publication number
JP2015084006A
JP2015084006A JP2012028350A JP2012028350A JP2015084006A JP 2015084006 A JP2015084006 A JP 2015084006A JP 2012028350 A JP2012028350 A JP 2012028350A JP 2012028350 A JP2012028350 A JP 2012028350A JP 2015084006 A JP2015084006 A JP 2015084006A
Authority
JP
Japan
Prior art keywords
program
dynamic link
link library
library
hash
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2012028350A
Other languages
English (en)
Inventor
学 道下
Manabu Doge
学 道下
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Mitsubishi Electric Corp
Original Assignee
Mitsubishi Electric Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Mitsubishi Electric Corp filed Critical Mitsubishi Electric Corp
Priority to JP2012028350A priority Critical patent/JP2015084006A/ja
Priority to PCT/JP2013/052746 priority patent/WO2013121951A1/ja
Publication of JP2015084006A publication Critical patent/JP2015084006A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/64Protecting data integrity, e.g. using checksums, certificates or signatures
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
    • H04L9/3236Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
    • H04L9/3247Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials involving digital signatures

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Signal Processing (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • General Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • Health & Medical Sciences (AREA)
  • Storage Device Security (AREA)

Abstract

【課題】プログラムの動作遅延を抑制して動的リンクライブラリを保護および認証する。【解決手段】動的リンクライブラリを構成するオブジェクトから、保護すべき保護対象オブジェクトを指定する工程と、保護対象オブジェクトにハッシュ関数を適用してハッシュ値を算出する工程と、算出したハッシュ値と、保護対象オブジェクトの位置情報およびサイズ情報とを組み合わせたタプルを作成する工程と、動的リンクライブラリ内の保護対象オブジェクト毎のタプルの集合である位置サイズ付ハッシュアレイを作成する工程とを備えた。【選択図】図1

Description

この発明は、動的リンクライブラリの改竄に対する保護を行う装置およびその方法と、改竄有無を検証することにより動的リンクライブラリの認証を行う装置およびその方法と、これらの装置および方法により正当性を確認した上でプログラムを実行するプログラム管理システムに関するものである。
デジタルコンテンツは通常著作者が諸権利を有しており、流通配布されたものを正規に受領したとしても、それは物品の流通とは異なって所有権が移転したわけではなく、単に鑑賞などの目的で利用することが許諾されたというだけである。デジタルデータが容易に複製できてしまう点と著作者の作成労力が報われるべきである点との釣り合いを配慮するならば、デジタルコンテンツの利用者を限定したり、デジタルコンテンツ観賞用装置の複製機能を制限したりすることは、やむを得ない処置である。しかしながら、利害関係の点では利用者は手元にあるものから最大の利を得ようと試みがちであり、前記観賞用装置の制限を不正解除しようとする動機が発生する。
例えば観賞用装置がソフトウェア・プログラムで実現されている場合には、該当プログラムの機能制限実現箇所を改竄することにより、デジタルコンテンツを不正に利用しようとすることが考えられる。あるいは機能制限を持たない点を除き鑑賞装置同等の機能を持つ、代替品プログラムを実行させることにより、不正利用しようとすることが考えられる。本来のプログラムから代替品への制御遷移は、前記プログラム内のどの箇所を実行している最中であっても目的を達成できてしまうので、プログラムで読み書き実行される全てのオブジェクトに改竄を受けるおそれがある。
上記の様な改竄の脅威に対して、電子署名を用いてプログラムを保護しておき、プログラム起動時等に改竄がないか検証することで正規プログラムであると認証し、合格時に限ってプログラム起動を成功させる様、あるいは合格時に限ってプログラム実行を継続させる様、防御策を採ることがある。
しかしながらこの検証にかかる処理は、プログラム起動時においては該当プログラム本来の処理が開始されるまでの間に相応の時間を要することとなるという課題があった。より適切に言えば、防御と所要時間短縮化の両立が課題であった。
その対策として、特許文献1および特許文献2には、プログラムをメモリ管理単位であるページ毎に分けて保護を行う共通の方法と、検証によりプログラム認証する方法が開示されている。また、特許文献3にも同一の保護方法が開示されている。
図36は、従来技術の保護方式を示した図である。プログラム9はメモリ管理単位(通例4KBまたは8KB)で分割され、分割後をそれぞれページ91〜94とする。まず各ページにハッシュ関数(一方向関数)を適用してハッシュ値291〜294を得、各ハッシュ値を要素とするハッシュアレイ109を作成する。次にハッシュアレイに対して秘密鍵700を用いて電子署名609を作成する。
また、図36で示した署名作成はハッシュアレイ109に対して更にハッシュ関数を適用してアレイハッシュ値(図示せず)を算出する段階と、アレイハッシュ値に対して署名関数を適用して電子署名を得る段階とで構成されている。署名作成手続きとして知られているものには、例えば非特許文献1に記載されている、入力値定義域に制約のあるRSASP1と、ハッシュ関数およびパディングをRSASP1の前段階として持ち制約緩和したRSASSA-PSS-SIGNおよびRSASSA-PKCS1-v1_5-SIGNとがある。従来技術の署名作成過程は、後者のタイプの署名作成手続きを示すものである。
図37は、従来技術の認証方式を示した図である。まず電子署名作成時に用いた秘密鍵に対応する公開鍵701を用いて、電子署名609がハッシュアレイ109の署名として適合しているかどうかを検証する。次にプログラム9の各ページがロードされるたびに、該当ページ(図37の例ではページ92)にハッシュ関数を適用してハッシュ値592を算出し、ハッシュアレイ109に格納されていたハッシュ値292と比較する。署名検証もしくはハッシュ値比較検証のいずれかで不適合または不一致が検出されれば、改竄ありと判定する。特許文献1ではページをロードする度にハッシュ値算出と比較検証を行い、特許文献2では更に、プログラムの実行に連れてページが必要になる度にページロードとハッシュ値算出と比較検証を行うことで、プログラム実行と認証処理を並行実施している。
また、図37で示した署名検証はハッシュアレイ109に対して更にハッシュ関数を適用してアレイハッシュ値(図示せず)を算出する段階と、アレイハッシュ値および電子署名に対して検証関数を適用して適合性結果を得る段階とで構成されている。署名検証手続きとして、一般的に入力値定義域に制約のあるRSAVP1と、ハッシュ関数およびパディングをRSAVP1の前段階として持ち制約緩和したRSASSA-PSS-VERIFYおよびRSASSA-PKCS1-v1_5-VERIFYとが知られている(非特許文献1参照)。特許文献1〜3の署名検証過程は後者の署名検証手続きを示している。
次に、従来技術の保護処理の流れを説明する。まず、プログラムをページに分解し、そのページについてハッシュ値を算出し、プログラムの全てのページについて実施し終えた場合には、各ページから得たハッシュ値を並べてアレイを作成し、アレイについて電子署名を作成する。得られたハッシュアレイとハッシュアレイへの電子署名を、プログラムと共に格納し、保護手順を終了する。
次に、従来技術の認証処理の流れを説明する。まず、プログラムに対応したハッシュアレイをロードし、ハッシュアレイとハッシュアレイの電子署名とを、信頼できる公開鍵を用いて検証する。署名に適合していた場合には、プログラムのページをロードし、該当ページのハッシュ値を算出し、算出されたハッシュ値とハッシュアレイに格納されていたハッシュ値を比較する。双方のハッシュ値が一致すればロードされたページの命令またはページ内データの参照を実行し、必要なページについて上述した処理を繰り返す。一方、署名に適合していないと判断された場合、および双方のハッシュ値が一致しないと判断された場合には、認証エラーと判断してプログラムの実行を拒絶し、認証処理を終了する。
なお、特許文献1には、双方のハッシュ値が一致した場合にロードされたページの命令またはページ内データの参照を実行する処理は記載されていない。
特許文献1と特許文献2では、プログラム起動時に実施する認証処理は、ハッシュアレイを電子署名で検証する処理と、プログラム実行初期に必要になるページ分のハッシュ値算出と比較であるため、プログラム全体にハッシュ関数を適用するよりも短時間で済むという利点があった。
国際公開第2005/029223号 特開2008−293033号公報 特開2005−202523号公報
PKCS#1 v2.1: RSA Cryptography Standard, RSA Laboratories
しかしながら、上述した特許文献1〜3に開示された技術では、ハッシュ関数の適用対象を、メモリ管理対象であるページ単位としているため、利用単位であるオブジェクトとは、サイズおよび配置と適合しておらず、さらにプログラムを分割したページの順に、各ページから算出したハッシュ値を全ページ分並べてアレイにしている。そのため、利用されるオブジェクトを含むページに含まれる、全てのオブジェクトに対してハッシュ関数を適用し算出していた。1ページ内に含まれるオブジェクトが全て不使用でないかぎり、該当ページへのアクセスは必ず発生するため、そのページに対するハッシュ関数の算出はプログラム起動時あるいは実行中に必ず行われることから、プログラムの動作遅延を招くという課題があった。
さらに、保護対象プログラムと非保護対象プログラムから共有されている動的リンクライブラリにおいて、非保護対象プログラムから呼び出される際にも認証処理が実施され、プログラムの動作遅延を招くという課題があった。
この発明は、上記のような課題を解決するためになされたもので、プログラムの動作遅延を抑制して動的リンクライブラリを保護および認証することを目的とする。
この発明に係る動的リンクライブラリ保護方法は、動的リンクライブラリを構成するオブジェクトから、保護すべき保護対象オブジェクトを指定する工程と、保護対象オブジェクトにハッシュ関数を適用してハッシュ値を算出する工程と、算出したハッシュ値と、保護対象オブジェクトの位置情報およびサイズ情報とを組み合わせたタプル(tuple)を作成する工程と、動的リンクライブラリ内の保護対象オブジェクト毎の前記タプルの集合である位置サイズ付ハッシュアレイを作成する工程とを備えたものである。
この発明に係る動的リンクライブラリ認証方法は、動的リンクライブラリ内の保護対象オブジェクト毎のハッシュ値と位置情報とサイズ情報を組み合わせたタプルの集合である位置サイズ付ハッシュアレイ内の、全てのタプルから動的リンクライブラリ内の保護対象オブジェクトを特定する工程と、保護対象オブジェクトそれぞれのハッシュ値を算出する工程と、算出されたハッシュ値と、位置サイズ付ハッシュアレイを構成するハッシュ値とを比較検証する工程と、位置サイズ付ハッシュアレイ内の全てのタプルにおいて、比較検証の結果が一致する場合には認証結果を合格とし、比較検証の結果が不一致になるタプルが存在する場合には認証結果を不合格とする工程とを備えたものである。
この発明によれば、保護対象となるオブジェクトを限定することができ、プログラムの動作遅延を抑制することができる。
実施の形態1によるライブラリの保護を示す説明図である。 実施の形態1によるライブラリの認証を示す説明図である。 実施の形態1によるライブラリの保護を示す説明図である。 実施の形態1によるライブラリの認証を示す説明図である。 実施の形態1によるハッシュアレイおよび電子署名作成処理を示すフローチャートである。 実施の形態1によるライブラリ認証処理を示すフローチャートである。 実施の形態1による複数のプログラムから共有されるライブラリの保護を示す説明図である。 実施の形態1による複数のプログラムから共有されるライブラリの認証を示す説明図である。 実施の形態1による保護必要なプログラムと保護不要なプログラムから参照されるライブラリの保護を示す説明図である。 実施の形態1による保護必要なプログラムと保護不要なプログラムから参照されるライブラリの認証を示す説明図である。 実施の形態1による1つのプログラムから利用される複数のライブラリの保護を示す説明図である。 実施の形態1による1つのプログラムから利用される複数のライブラリの保護を示す説明図である。 実施の形態1によるプログラム起動時の処理を示すフローチャートである。 実施の形態1によるライブラリロードの処理を示すフローチャートである。 実施の形態1によるオブジェクトアドレス取得処理の動作を示すフローチャートである。 実施の形態1によるオブジェクトアドレス取得処理の動作を示すフローチャートである。 実施の形態1による認証処理の動作を示すフローチャートである。 実施の形態1によるライブラリ保護装置とライブラリ作成装置の構成およびデータの流れを示す図である。 実施の形態1によるライブラリ保護装置の一部において、オブジェクト単位のデータの流れと構成詳細を示す図である。 実施の形態1によるプログラム管理システムの、プログラム起動時動的リンクにかかわる装置の構成およびデータの流れを示す図である。 実施の形態1によるプログラム管理システムの、プログラム起動時動的リンクにかかわる装置の一部において、オブジェクト単位のデータの流れと構成詳細を示す図である。 実施の形態1によるプログラム管理システムの、ライブラリロードにかかわる装置の構成およびデータの流れを示す図である。 実施の形態1によるプログラム管理システムの、オブジェクトアドレス取得にかかわる装置の構成およびデータの流れを示す図である。 実施の形態2によるライブラリの保護を示す説明図である。 実施の形態2によるライブラリの認証を示す説明図である。 実施の形態2の統合ハッシュアレイおよび電子署名作成処理を示すフローチャートである。 実施の形態2の統合ハッシュアレイの認証処理を示すフローチャートである。 実施の形態2のライブラリの認証処理を示すフローチャートである。 実施の形態2のプログラム管理システムのプログラム起動時の処理を示すフローチャートである。 実施の形態2のオブジェクトアドレスのフィックスアップ時の認証処理を示すフローチャートである。 実施の形態2によるライブラリ保護装置とライブラリ作成装置の構成およびデータの流れを示す図である。 実施の形態2によるプログラム管理システムの、プログラム起動時の動的リンクにかかわる装置の構成およびデータの流れを示す図である。 実施の形態2によるプログラム管理システムの、プログラム起動時の動的リンクにかかわる装置の構成およびデータの流れを示す図である。 実施の形態2によるプログラム管理システムの、ライブラリロードにかかわる装置の構成およびデータの流れを示す図である。 実施の形態2によるプログラム管理システムの、オブジェクトアドレス取得にかかわる装置の構成およびデータの流れを示す図である。 従来のライブラリの保護を示す説明図である。 従来のライブラリの認証を示す説明図である。
本発明の実施の形態について説明する前に、動的リンクライブラリの詳細について説明する。
プログラムを構成する手続きとデータは、最初は人間にとって読み書きし易いソースコードの形式で作成され、次いで機械にとって読み書き実行しやすい機械語の形式に翻訳され、最終的に一連の動作が可能になるようにまとめられる。この機械語形式の手続きとデータのことをオブジェクトと呼び、翻訳過程をコンパイルと呼び、まとめ上げる過程をリンクと呼ぶ。1つのプログラムに構成されるソースコードは必ずしも1つのファイルに記述されるわけではなく、手続きとデータの相互関連の深浅を考慮して複数のファイル(各々を特に区別する場合にソースコードファイルと呼ぶ)に分割されて管理される。通常1つのソースコードファイル内の手続きとデータはコンパイル後にも1つのファイルに格納され、これをオブジェクトファイルと呼ぶ。
1つのプログラムを構成するために必要なオブジェクトの入ったオブジェクトファイルは、プログラム作成時点でリンクされて1つのプログラムファイルにまとめ、この時オブジェクト間の相互参照を解決して一連の動作が可能となるように作成することができる。
プログラムを構成する手続きとデータは、必ずしも唯一のプログラムの構成要素に限定されず、異なる複数のプログラムから共通に用いられる場合も多い。そこで利用の共通性や、ソースコード分割時とは異なる程度の相互関連の深浅などを考慮して、オブジェクトファイルは複数集められ、1つのファイルに格納される。これをライブラリと呼び、特に1つのファイルに格納されている点を強調してライブラリファイルと呼ぶこともある。相互関連の深浅を優先してライブラリファイルが作成された場合には、複数のプログラムから共通利用されるオブジェクトだけになるとは限らず、時には一部のオブジェクトは一部プログラムのみからしか利用されないケースも発生する。あるいは製品間での共通部品として作成された動的リンクライブラリの場合には、個々の導入先製品内のプログラムからは、全く利用されないオブジェクトを含むこともある。例えば、C言語の標準関数は多数のプログラムから利用されるので、ライブラリとしてまとめられることが多いが、個々のプログラムはC言語の標準関数全てを必要とせず、個々のプログラムの目的にあった一部の標準関数のみ用いる場合も多い。
ライブラリの種類としては、静的リンクライブラリと動的リンクライブラリがある。静的リンクライブラリはプログラムで利用するオブジェクトを、プログラム作成時にプログラムと同一ファイルにまとめてオブジェクト間相互参照を解決するために、関連性の深いオブジェクトをまとめたものである。オブジェクト間の相互参照は、プログラム作成時に全て解決される。
動的リンクライブラリはプログラムで利用するオブジェクトの一部を、プログラムファイルとは別のファイルにまとめておき、プログラム起動時あるいは実行中に相互参照を解決するように構成したものである。ライブラリの特性である「複数プログラムからの共通利用」側面を作成後のプログラム管理にまで広げ、保守性を向上させることができる。例えば機能改善等に伴うオブジェクトの置換に際して該当オブジェクトを内包する複数プログラムファイルを置換する代わりに該当オブジェクトを内包する1つの共通の動的リンクライブラリを置換することで済むようになる。また共通化により記憶領域の消費を抑えることもできる。但しプログラム起動時または実行中の相互参照解決に要する処理時間をなるべく短縮するために、動的リンクライブラリ内のオブジェクト同士の相互参照関係は、ライブラリファイル作成時に予め解決しておくことがある。このため、オブジェクトファイルから動的リンクライブラリを作成する過程も、リンクと呼ばれている。
動的リンクライブラリの利用方法は大別して2つある。1つはプログラム起動時にプログラムファイル内容と一緒にまとめ上げられて実行時イメージを構築し、プログラムファイル内オブジェクトと動的リンクライブラリファイル内オブジェクト間の相互参照を解決するものである。これはプログラムファイルの中に直接参照しているライブラリの識別子が予め格納されていて、プログラム起動時にOSあるいは標準的ライブラリによって動的リンク処理が行われるため、「暗黙の動的リンク」または「起動時の動的リンク」と呼ぶ。なお動的リンクライブラリから直接参照している他のライブラリについても、参照側ライブラリファイルに被参照側ライブラリの識別子を格納しておき、異なる動的リンクライブラリファイル内オブジェクト間の相互参照も同様に動的リンク処理ができるようになっている。
もう一つは上記の実行時イメージ構築と相互参照解決を、プログラムからそれぞれ明示的に実施するものである。これはOSや標準的ライブラリに備わった、ライブラリのロード機能をプログラムから呼び出すことと、ライブラリ内オブジェクトのアドレス取得機能をプログラムから呼び出すことで動的リンクに関わる処理が行われるため、「明示的な動的リンク」または「実行中の動的リンク」と呼ぶ。
動的リンクライブラリは作成の時点では、アドレス空間内のどこに配置されるかは確定していない。そのためオブジェクトのアドレスも作成の時点では確定しておらず、実行時イメージ構築の際に読出したライブラリ内オブジェクトをアドレス空間内に配置して初めて確定する。その確定したアドレスを他のオブジェクトから参照できる様に一覧表や相互参照用の表に登録する処理のことを、フィックスアップと呼ぶ。上記アドレス取得機能は、呼び出された際にフィックスアップを実施することもあれば、事前に実施されたフィックスアップで登録されたアドレスを、ただ返すだけのこともある。
Windows(登録商標、以下記載を省略する)に備わった機能では、暗黙の動的リンクも明示的な動的リンクも共にOSによって提供されている。ライブラリロード機能を呼び出すAPIはLoadLibrary() / LoadLibraryEx()と言い、ライブラリのパス名(もしくはパス名にマッピング可能な名前)を引数にとりハンドルを返す。アドレス取得機能を呼び出すAPIはGetProcAddress()で、ライブラリのハンドルとオブジェクト名称を引数にとり、フィックスアップされたアドレスを返す。Windowsでは、動的リンクライブラリをDLLと略して呼ぶことも多い。
Linux(登録商標)で採用されている機能では、暗黙の動的リンクも明示的な動的リンクも共に標準的なライブラリ(プログラムファイルに静的リンクされているスタートアップコードと、動的リンクされる標準的ライブラリ)によって提供されている。ライブラリロード機能を呼び出すAPIはdlopen()と言い、ライブラリのパス名(もしくはパス名にマッピング可能な名前)を引数にとりハンドルを返す。アドレス取得機能を呼び出すAPIはdladdr()で、ライブラリのハンドルとオブジェクト名称を引数にとり、フィックスアップされたアドレスを返す。Unix(登録商標)では、動的リンクライブラリのことをシェアードオブジェクトと呼ぶ。
続いて、本発明を実施するための形態について説明する。
実施の形態1.
図1は、この発明の実施の形態1による動的リンクライブラリの保護を示す説明図である。
図1は、動的リンクライブラリ(以下、ライブラリと称する)内の全オブジェクトが呼び出しプログラムから直接参照される場合の、ライブラリの保護について、データ間の処理関係を示している。
ここでは、プログラム1がライブラリ10内の全オブジェクト11〜14を参照して動作する場合を例としてとりあげる。この場合にはライブラリ10を保護するために、オブジェクト11〜14を保護対象として指定する。オブジェクト11の保護時点でのハッシュ値211を算出し、算出したハッシュ値211を、位置311およびサイズ411と共に三つ組みにする。同様に残りのオブジェクト12〜14に対してもハッシュ値、位置およびサイズの三つ組みを作成し、これらの三つ組みを集めてアレイ(以下、位置サイズ付ハッシュアレイ100と称する)を作成する。
作成された位置サイズ付ハッシュアレイ100に対して、製造者のみが保有する秘密鍵700を用いて電子署名600を作成する。なお署名作成手続きとしては、例えば非特許文献1に記載されているRSASSA-PSS-SIGNおよびRSASSA-PKCS1-v1_5-SIGNの様に、ハッシュ関数を前段階として持つ署名作成手続きを用いることで、保護対象オブジェクト数によって位置サイズ付ハッシュアレイのサイズが異なることにも対応可能とする。
図2は、この発明の実施の形態1によるライブラリの認証を示す説明図である。
図2は、ライブラリ内の全オブジェクトが呼び出しプログラムから直接参照される場合の、ライブラリ認証について、データ間の処理関係を示している。
プログラム1、ライブラリ10は上記図1で参照されたものと同一であり、位置サイズ付ハッシュアレイ100および電子署名600は、上記図1で作成されたものである。この場合にライブラリ10を認証するためには、オブジェクト11,12,13,14の全ての改竄有無を検査する必要がある。
まず、製造者のみが保有する秘密鍵700に対応する公開鍵701を用いて、位置サイズ付ハッシュアレイ100が改竄されていないか電子署名600に照らし合わせて検証する。なお署名検証手続きとしては、例えば非特許文献1に記載されているRSASSA-PSS-VERIFYおよびRSASSA-PKCS1-v1_5-VERIFYの様に、ハッシュ関数を前段階として持つ署名検証手続きを用いることで、保護対象オブジェクト数によって位置サイズ付ハッシュアレイのサイズが異なることにも対応可能とする。
次に、改竄されていないと確認された位置311〜314とサイズ411〜414を用いて、オブジェクト11〜14を特定する。次に、各オブジェクト11〜14のハッシュ値511〜514を計算する。
位置サイズ付ハッシュアレイ100に格納されているハッシュ値211〜214は改竄されていないと確認されているため、保護時に計算したハッシュ値211〜214と認証時に計算したハッシュ値511〜514をそれぞれ比較検証することにより、オブジェクト11〜14への改竄がないかを確認する。
オブジェクト11に改竄があった場合を想定すると、認証時にオブジェクト11から計算したハッシュ値511はハッシュ値211と異なる値となるため、当該ハッシュ値211との比較で上記改竄が検出される。また、オブジェクト11の改竄を隠すために、改竄後のオブジェクトから計算したハッシュ値で位置サイズ付ハッシュアレイ100のハッシュ値211を置き換えられたとしても、認証時に位置サイズ付ハッシュアレイ100が電子署名600に適合しないため、改竄が検出される。また、オブジェクト11の改竄を隠すために、ハッシュ値211と位置311とサイズ411からなる三つ組みをハッシュアレイ100から削除したとしても、認証時に位置サイズ付ハッシュアレイ100が電子署名600に適合しないため、改竄が検出される。
さらに、オブジェクト11の改竄および位置サイズ付ハッシュアレイ100の改竄を隠すために、改竄後の位置サイズ付ハッシュアレイから作成した電子署名で電子署名600を置き換えられたとしても、電子署名600作成時に用いた秘密鍵700は製造者しか保有していないため、改竄者は異なる秘密鍵を用いて電子署名を作成せざるをえず、製造者の秘密鍵700に対応した公開鍵701を用いた検証で不適合が検出される。これらの認証処理は、オブジェクト12,13,14についても同様に行われる。
図3は、ライブラリの内の一部のオブジェクトが呼び出しプログラムから直接参照され、他の一部のオブジェクトが間接参照され、更に他の一部のオブジェクトが全く参照されない場合の、ライブラリの保護についてのデータ間の処理関係を示している。
プログラム2はライブラリ20内のオブジェクト21とオブジェクト22を直接参照する。オブジェクト21は他のオブジェクトを参照せず、オブジェクト22はオブジェクト24を参照する。オブジェクト23はプログラム2からは、直接的にも間接的にも参照されない。この場合にはライブラリ20を保護するために、オブジェクト21,22,24を保護対象として指定する。オブジェクト21の保護時点でのハッシュ値221を計算し、計算したハッシュ値221を位置321およびサイズ421と共に三つ組みにする。同様にオブジェクト22,24に対してもハッシュ値、位置およびサイズの三つ組みを作成し、これらの三つ組みを集めて位置サイズ付ハッシュアレイ101を作成する。この位置サイズ付ハッシュアレイ101に対して、製造者のみが保有する秘密鍵700を用いて電子署名601を作成する。
なおこの例では、間接的に参照されるオブジェクトとプログラムの間の参照関係が一回間接である場合を挙げているが、複数回間接的に参照されているオブジェクトがあれば、そのオブジェクトも保護対象に含める。
図4はライブラリの内の一部のオブジェクトが呼び出しプログラムから直接参照され、他の一部のオブジェクトが間接参照され、更に他の一部のオブジェクトが全く参照されない場合の、ライブラリの認証についてのデータ間の処理関係を示している。
プログラム2、ライブラリ20は上記図3で参照されたものと同一であり、位置サイズ付ハッシュアレイ101、電子署名601は、上記図3で作成されたものである。この場合にライブラリ20を認証するためには、オブジェクト11,12,14の改竄有無を検査することが必要である。まず、製造者のみが保有する秘密鍵700に対応する公開鍵701を用いて、位置サイズ付ハッシュアレイ101が改竄されていないか電子署名601に照らし合わせて検証する。
次に、改竄されていないと確認された位置321,322,324とサイズ421,422,424を用いて、オブジェクト21,22,24を特定する。次に、各オブジェクトのハッシュ値521,522,524を計算する。位置サイズ付ハッシュアレイ101に格納されていたハッシュ値221,222,224は改竄されていないと確認がされているため保護時に計算したハッシュ値221,222,224と認証時に計算したハッシュ値521,522,524をそれぞれ比較検証することにより、オブジェクト21,22,24への改竄がないかを確認する。
オブジェクト21,22,24に改竄があった場合、認証時にオブジェクト21,22,24から計算したハッシュ値521,522,524はハッシュ値221,222,224と異なる値となるため、改竄が検出される。また、上記改竄を隠すために対応するハッシュ値を置換するなどの、位置サイズ付ハッシュアレイ101への改竄があった場合、位置サイズ付ハッシュアレイ101が電子署名601と適合しないため、改竄が検出される。また上記オブジェクトへの改竄を隠すために対応する三つ組みを位置サイズ付ハッシュアレイから削除したとしても、認証時に位置サイズ付ハッシュアレイ101が電子書名601に適合しなくなるため、改竄が検出される。さらに改竄を隠すために電子署名を置換するなどの、電子署名601への改竄があった場合には、秘密鍵700に対応した公開鍵701を用いた検証で不適合が検出される。
ここでオブジェクト11と21、12と22、13と23、14と24のサイズがそれぞれ同一であると前提をおいて図2と図4を比較すると、図4では参照されていないオブジェクト23に対するハッシュ関数適用分だけ認証に必要な計算量が削減されており、これによりプログラムの動作遅延を短縮することができる。
動的リンクライブラリを保護するための、位置サイズ付ハッシュアレイおよび電子署名作成方法の手順を、図5に従って説明する。まず保護対象オブジェクトの位置・サイズを特定し(ステップS101)、該当のオブジェクトについてハッシュ値を計算し(ステップS102)、該当オブジェクトのハッシュ値・位置・サイズを三つ組みにする(ステップS103)。全ての保護対象オブジェクトに対して実施したかを判断し、未実施があればステップS101に戻って繰り返す(ステップS104)。全てに対して実施した後、全保護対象オブジェクトの三つ組みを集めて位置サイズ付ハッシュアレイを作成する(ステップS105)。次に位置サイズ付ハッシュアレイの電子署名を作成し(ステップS106)、プログラムとライブラリの組に対応付けて位置サイズ付ハッシュアレイと電子署名を格納する(ステップS107)。以上でハッシュアレイおよび電子署名作成の手順は終了である。
動的リンクライブラリを認証する方法の手順を、図6に従って説明する。まずプログラムとライブラリの組に対応する位置サイズ付ハッシュアレイと電子署名を読み出す(ステップS201)。もし何れか一方または両方について読出し成功しなかったならば分岐して(ステップS202)、認証不合格と判定し(ステップS211)、認証処理を終了する。読出し成功していれば、位置サイズ付ハッシュアレイと、位置サイズ付ハッシュアレイの電子署名とを、信頼できる公開鍵を用いて検証する(ステップS203)。もし電子署名に適合していなければ分岐して(ステップS204)、認証不合格と判定し(ステップST211)、認証処理を終了する。
署名に適合していた場合は、位置サイズ付ハッシュアレイの要素たる三つ組みから、対応する保護対象オブジェクトの位置・サイズを特定し(ステップS205)、保護対象オブジェクトのハッシュ値を計算し(ステップS206)、ステップS206で計算したハッシュ値を、位置サイズ付ハッシュアレイの該当三つ組み内のハッシュ値と比較する(ステップS207)。ハッシュ値同士が適合しないならば分岐し(ステップS208)、認証不合格と判定し(ステップST211)、認証処理を終了する。ハッシュ値同士が適合していれば、位置サイズ付ハッシュアレイの全ての要素について実施したかを判断し、未実施があればステップS205に戻って繰り返す(ステップS209)。ハッシュ値同士に不適合が見つからないまま全ての要素に対して実施し終えたならばライブラリ認証結果を合格とし(ステップST210)、認証方法の手順を終了する。
次に、異なるパターンのライブラリの保護および認証について説明する。図7および図8は、実施の形態1による複数のプログラムから共有されるライブラリの保護および認証を示す説明図である。
まず、図7は、複数のプログラムから共有されるライブラリであって、各プログラムから参照されるライブラリ内オブジェクトが異なる組合せである場合のライブラリの保護についてのデータ間の処理関係を示す説明図である。
プログラム3がライブラリ30内のオブジェクト31,32を直接参照し、プログラム4がライブラリ30内のオブジェクト32,34を参照して動作する例をとりあげる。この場合にライブラリ30を保護するためには、オブジェクト31,32,34を保護しなければならないが、プログラム3の動作に関してオブジェクト34を保護する必要はなく、またプログラム4の動作に関してオブジェクト31を保護する必要はない。従って、「プログラム3とライブラリ30の組」に対してはオブジェクト31,32を保護対象とし、「プログラム4とライブラリ30の組」に対してはオブジェクト32,34を保護対象とすることが好適である。
そこでオブジェクト31の保護時点でのハッシュ値231を計算し、位置331とサイズ431と共に三つ組みにする。同様にオブジェクト32に対しても三つ組みを作成し、これらの三つ組みを集めて位置サイズ付ハッシュアレイ102を作成する。次いで位置サイズ付ハッシュアレイ102に対して、製造者のみが保有する秘密鍵700を用いて電子署名602を作成する。同様にしてオブジェクト32,34から位置サイズ付ハッシュアレイ103を作成し、電子署名603を作成する。
次に、図8は、複数のプログラムから共有されるライブラリであって、各プログラムから参照されるライブラリ内オブジェクトが異なる組合せである場合の認証についてのデータ間の処理関係を示す説明図である。
プログラム3,4、ライブラリ30は上記図7で参照されたものと同一であり、位置サイズ付ハッシュアレイ102,103、および電子署名602,603は、上記図7で作成されたものである。この場合にライブラリ30の認証は、プログラム3で利用される場合にはオブジェクト31,32を認証する必要があり、プログラム4で利用される場合にはオブジェクト32,34を認証する必要がある。
オブジェクト31,32を認証する場合は、まず、製造者のみが保有する秘密鍵700に対応する公開鍵701を用いて、位置サイズ付ハッシュアレイ102が改竄されていないかどうかを電子署名602に照らし合わせて検証する。次に、改竄されていないと確認のされた位置331,332とサイズ431,432を用いて、保護対象オブジェクト31,32を特定する。次に、各オブジェクトのハッシュ値531,532を計算する。位置サイズ付ハッシュアレイ102に格納されていたハッシュ値231,232は改竄されていないと確認がとれているので、保護時に計算したハッシュ値231,232と認証時に計算したハッシュ値531,532をそれぞれ比較検証することにより、オブジェクト31,32への改竄がなかったかどうかを確認することができる。
次に、オブジェクト32,34を認証する場合は、まず、製造者のみが保有する秘密鍵700に対応する公開鍵701を用いて、位置サイズ付ハッシュアレイ103が改竄されていないかどうかを電子署名603に照らし合わせて検証する。次に、改竄されていないと確認のとれた位置332,334とサイズ432,434を用いて、保護対象オブジェクト32,34を特定する。次に、各オブジェクトのハッシュ値532,534を計算する。位置サイズ付ハッシュアレイ103に格納されていたハッシュ値232,234は改竄されていないと確認がとれているので、保護時に計算したハッシュ値232,234と認証時に計算したハッシュ値532,534をそれぞれ比較検証することにより、オブジェクト32,34への改竄がなかったかどうかを確認することができる。
なお、図7で示したライブラリの保護における、位置サイズ付ハッシュアレイ102と電子署名602を作成する手順と、位置サイズ付ハッシュアレイ103と電子署名603を作成する手順は、図5で示したフローチャートと同一の手順で作成される。
また、図8で示したライブラリの認証における、位置サイズ付ハッシュアレイ102と電子署名602によりライブラリ30を認証する手順と、位置サイズ付ハッシュアレイ103と電子署名603によりライブラリ30を認証する手順は、図6で示したフローチャートと同一の手順で判定される。
次に、図9および図10は、実施の形態1による複数のプログラムから共有されるライブラリの保護および認証を示す他の説明図である。
まず図9は、保護が必要のプログラムおよび保護不要なプログラムから参照される場合のライブラリの保護についてのデータ間の処理関係を示す説明図である。
プログラム3は保護が必要なプログラムであって、ライブラリ30内のオブジェクト31,32を直接参照し、プログラム5は保護不要なプログラムであって、ライブラリ30内のオブジェクト32,34を参照して動作する。この場合にライブラリを保護するためには、オブジェクト31,32を保護対象とすることが必要であり、プログラム5の動作に関してオブジェクト31〜34を保護しておく必要はない。従って、「プログラム3とライブラリ30の組」に対してはオブジェクト31,32を保護対象とし、「プログラム5とライブラリ30の組」に対してはライブラリ30内のいずれのオブジェクトも保護対象としないことが好適である。そこで「プログラム3とライブラリ30の組」に対して位置サイズ付ハッシュアレイ102と電子署名602を作成するが、その処理内容は、図7で示した処理内容と同一である。また、「プログラム5とライブラリ30の組」に対しては、位置サイズ付ハッシュアレイおよび電子署名は作成しない。
次に、図10は、保護必要なプログラムおよび保護不要なプログラムから参照される場合のライブラリの認証についてのデータ間の処理関係を示す説明図である。
プログラム3,5、ライブラリ30は上記図9で参照されたものと同一であり、位置サイズ付ハッシュアレイ102、および電子署名602は上記図9で作成されたものである。この場合にライブラリ30を認証するためには、プログラム3で利用される場合にオブジェクト31,32の改竄有無の検査が必要であるが、プログラム5で利用される場合にはオブジェクト31〜34を検査する必要はない。オブジェクト31,32を検査する場合の処理内容は、図8における「プログラム3とライブラリ30の組」に対する処理と同一である。なお、プログラム5が利用される場合には、プログラム5の起動時または実行中に保護不要と判断した時点で、認証に関する処理を取りやめる。
図8と図10を比較すると、プログラム起動時または実行中に行われる、電子署名による位置サイズ付ハッシュアレイの検証処理およびハッシュ値の比較検証処理の分だけ計算量が削減されており、これによりプログラムの動作遅延を短縮することができる。
なお、認証処理を不正にスポイルする目的で、位置サイズ付ハッシュアレイおよび電子署名を不正に除去してしまう場合を想定すると、ライブラリを呼び出すプログラムには保護が必要であるとの印付けを別途行っておくことにより、保護が必要なプログラムに関するライブラリ認証処理を開始させることができる。これにより、位置サイズ付ハッシュアレイおよび電子署名が不正に除去されている場合には、位置サイズ付ハッシュアレイと電子署名の読出しが失敗するため、図6で示したフローチャートのステップS202で認証失敗に分岐する。
さらに、異なるパターンのライブラリの保護および認証について説明する。
図11は、実施の形態1による1つのプログラムから利用される複数のライブラリの保護についてのデータの処理関係を示す説明図である。
プログラム6がライブラリ40内のオブジェクト41,42を直接参照し、更にライブラリ50内のオブジェクト51,53を直接参照する例をとりあげる。この場合にライブラリ40,50を保護するためには、オブジェクト41,42,51,53を保護対象とすることが必要である。オブジェクト41の保護時点でのハッシュ値241を計算し、位置341およびサイズ441と共に三つ組みにする。同様にオブジェクト42に対しても三つ組みを作成し、2つの三つ組みを集めて位置サイズ付ハッシュアレイ104を作成する。
作成した位置サイズ付ハッシュアレイ104に対して、製造者のみが保有する秘密鍵700を用いて電子署名604を作成する。同様にオブジェクト51,53に基づいて、位置サイズ付ハッシュアレイ105および電子署名605を作成する。即ち、ライブラリ40に対する保護処理は、単一のライブラリが単一のプログラムから利用される場合と変わりがなく、ライブラリ50についても同様の処理が行われる。
また、1つのプログラムから利用される複数のライブラリの認証は、各ライブラリの認証をそれぞれ実施する場合と同一の処理により実施される。
図12は、実施の形態1による1つのプログラムから利用される複数のライブラリの保護を示す説明図であり、さらにライブラリの少なくとも1つはプログラムから直接参照されるオブジェクトがなく、他のライブラリ内のオブジェクトからのみ参照されている場合を示している。
プログラム7はライブラリ60内のオブジェクト61,62を直接参照し、更にオブジェクト62はライブラリ70内のオブジェクト71,73を直接参照する。この場合にライブラリ60,70を保護するためには、オブジェクト61,62,71,73を保護対象とすることが必要である。オブジェクト61の保護時点でのハッシュ値261を計算し、位置361とサイズ461と共に三つ組みにする。同様にオブジェクト62に対しても三つ組みを作成し、2つの三つ組みを集めて位置サイズ付ハッシュアレイ106を作成する。
次いで位置サイズ付ハッシュアレイ106に対して、製造者のみが保有する秘密鍵700を用いて電子署名606を作成する。同様にオブジェクト71,73に基づいて、位置サイズ付ハッシュアレイ107と電子署名607を作成する。即ち、ライブラリ60に対する保護処理は、単一のライブラリが単一のプログラムから利用される場合と変わりがなく、ライブラリ70についても同様である。
また、ライブラリの少なくとも1つはプログラムから直接参照されるオブジェクトがなく、他のライブラリ内のオブジェクトからのみ参照されている場合の認証は、各ライブラリの認証をそれぞれ実施する場合と同一の処理により実施される。
上述した図9、図11および図12で示したライブラリの保護における、位置サイズ付ハッシュアレイ102,104〜207、電子署名602,604〜607を作成する手順は、それぞれ図5のフローチャートと同一の手順で作成される。ただし、図9で示した例のように保護不要なプログラム5では、位置サイズ付ハッシュアレイおよび電子署名の作成が不要であることから、以下に示すプログラム管理システムに処理の一端を担わせることになる。
プログラムを格納する記憶装置を更に備え、プログラムに保護の要・不要を印づけるフラグを設け、該当フラグを設定する装置を更に備え、プログラム自体の改竄を防ぐための電子署名の作成装置を更に備え、その電子署名を格納する記憶装置を更に備えるプログラム管理システムを構築する。
プログラムが保護必要である場合とは、保護必要なオブジェクトを読み書き実行しうる場合であるから、プログラムを保護必要と印づける条件は、プログラム自体が保護必要なオブジェクトを含んでいるか、あるいはプログラムから直接的にまたは間接的に参照するオブジェクトの中に保護必要なオブジェクトを含んでいること、である。
上述した図8、図10の認証、および図11「複数の動的リンクライブラリを利用するプログラムの場合」に対応する認証(図示せず)、図12「複数の動的リンクライブラリを利用するプログラムの場合であって、ライブラリの少なくとも1つはプログラムから直接参照されるオブジェクトがなく、他のライブラリ内のオブジェクトからのみ参照されている場合」に対応する認証(図示せず)に現れる位置サイズ付ハッシュアレイ102,104〜107、電子署名602,604〜607を用いてライブラリ30,40,50,60,70を認証する手順は、それぞれ図6で説明した手順と同一でよい。しかしながら、図10の様に保護不要なプログラム5では前述の認証処理自体が不要であることを含めて手順化すると、次のようになる。
動的リンクライブラリと呼び出しプログラムを含むプログラム管理手順について、特にプログラム起動時に暗黙に動的リンクされる場合の手順について、図13を用いて説明する。
プログラム起動処理の内動的リンクを除く処理、例えば資源割当などを実施(ステップS301)した後、該当プログラムが保護必要であるか否か印を参照して判断する(ステップS302)。必要であれば、プログラム認証を行い(ステップS303)、認証合格しなければ分岐して(ステップS304)、認証エラーとしてプログラム実行を拒絶する(ステップS311)。プログラム認証合格であれば、プログラムが暗黙に動的リンクするライブラリを、直接利用するものと間接利用するものを共に含めて列挙する(ステップS305)。
列挙されるライブラリが1個未満であれば分岐し(ステップS306)、以後の処理をスキップしてプログラム起動を完了とする。1個以上であればライブラリ認証を実施し(ステップS307)、認証合格しなければ分岐して(ステップS308)、認証エラーとしてプログラム実行を拒絶する(ステップS311)。もしライブラリ認証合格であれば認証無しの動的リンク手順(ステップS309)を実施する。列挙された全てのライブラリについて実施したかどうかを判断し、未実施があればステップS307に戻って繰り返す(ステップS310)。全てのライブラリについて実施し終えたならばプログラム起動処理を終了する。
他方、ステップS302において該当プログラムが保護必要でなければ、プログラムが暗黙に動的リンクするライブラリを、直接利用するものと間接利用するものを共に含めて列挙する(ステップS312)。列挙されるライブラリが1個未満であれば分岐し(ステップS313)、以後の処理をスキップしてプログラム起動処理を終了する。1個以上であれば認証無しの動的リンク手順(ステップS314)を実施する。列挙された全てのライブラリについて実施したかどうかを判断し、未実施があればステップS314に戻って繰り返す(ステップS315)。全てのライブラリについて実施し終えたならばプログラム起動処理を終了する。
プログラム認証は少なくともプログラムファイルの改竄有無の検証を含んでいなくてはならないが、その具体的な方法は上記図2で説明したライブラリ内オブジェクトに対する認証方法を流用してもよく、従来技術1または2の保護方法を採用してもよく、またこれらとは全く異なりプログラムファイル全体から電子署名を作成するものであってもよい。但しいずれであっても、それぞれに対応した保護方法を事前に適用しておかなければならない。
ステップS302で参照する保護の要・不要を印づけるフラグは、改竄不能なものであるかまたは改竄を検出できるものでなくてはならない。その具体的な方法は例えば、保護必要なプログラムファイルの一覧を設けて電子署名により保護し、かつ任意のプログラム起動の度に一覧につき合わせて該非で分類できるようにするものであってもよい。また上記プログラム認証方法の一部として、プログラム認証の要否を示すフラグを設けたものを採用していた場合には、そのフラグを保護の要・不要を印づけるフラグとして流用してもよい。
次に、動的リンクライブラリと呼び出しプログラムを含むプログラム管理手順について、特にプログラム実行中に明示的にロードされる場合の手順について、図14を用いて説明する。
該当プログラムが保護必要であるか否か印を参照して判断する(ステップS401)。必要であれば、ライブラリ認証を行い(ステップS402)、認証合格しなければ分岐して(ステップS403)、認証エラーとしてプログラム実行を拒絶する(ステップS405)。ライブラリ認証合格すれば認証無しのロード手順(ステップS404)を実施し、ライブラリロード処理を修了する。他方ステップS401において該当プログラムが保護必要でなければ、認証無しのロード手順(ステップS404)を実施し、ライブラリロード処理を終了する。
次に、図15から図17を参照しながら、ライブラリと呼び出しプログラムを含むプログラム管理手順について、特にプログラム実行中に明示的にオブジェクトアドレスが取得される場合のオブジェクト認証処理について説明する。
図15および図16はオブジェクトアドレス取得処理を示すフローチャートであり、図17はオブジェクト認証処理を示すフローチャートである。図17はオブジェクト認証手順を抜き出したものであり、図16はプログラムが保護対象でない場合を抜き出したものであるため、特に断り書きをつけない限り図15を用いて説明する。
要求されているオブジェクトのアドレスがフィックスアップ済みか判断して分岐し(ステップS501)、フィックスアップ済みであれば記録されていたアドレスを出力して(ステップS521)、オブジェクトアドレス取得処理を終了する。
フィックスアップが未だであれば、動的シンボルテーブル内をオブジェクト名で検索して位置情報とサイズ情報を取得し(ステップS502)、更に位置情報をアドレスへ変換する(ステップ503)。ステップS503に続いて、プログラムが保護必要であるか否か印を参照して判断する(ステップS504)。保護必要であればフィックスアップ時オブジェクト認証の手順(ステップS505)を実施し、認証合格しなければ分岐して(ステップS506)、認証エラーとして出力し(ステップS522)、オブジェクトアドレス取得処理を終了する。認証合格すれば該当オブジェクトが他オブジェクトを参照するか判断し(ステップS507)、参照しないなら該当オブジェクトをフィックスアップ済みと印つけてアドレスを記録し(ステップS520)、記録したアドレスを出力して(ステップS521)、オブジェクトアドレス取得処理を終了する。
ステップS507において他オブジェクトを参照していれば、その属するライブラリがロード済みか否か判断し(ステップS508)、ロード済みでないならばライブラリ認証の手順(ステップS509)を実施する。ライブラリ認証に合格しないならば分岐して(ステップS510)、認証エラーとして出力し(ステップS522)、オブジェクトアドレス取得処理を終了する。ライブラリ認証に合格すれば認証無しロード手順(ステップS511)を実施し、参照されるオブジェクトについてアドレス取得する(ステップS512)。なおステップS508においてライブラリがロード済みであった場合にはステップS509〜S511をスキップしてステップS512を実施する。
ステップS512で実施されるオブジェクトアドレス取得手順は、図15で説明している手順全体を再帰的に呼び出すものである。もし呼び出した結果認証合格でないならば分岐して(ステップS513)、認証エラーとして出力し(ステップS522)、オブジェクトアドレス取得処理を終了する。参照されるオブジェクト全てについて実施したかを判断し、未実施があればステップS512に戻って繰り返す(ステップS514)。参照される全てのオブジェクトについて実施し終えたならば、該当オブジェクトをフィックスアップ済みと印つけてアドレスを記録し(ステップS520)、記録したアドレスを出力して(ステップS521)、オブジェクトアドレス取得処理を終了する。
他方プログラムが保護不要であれば分岐し(ステップS504)、該当オブジェクトが他オブジェクトを参照するか判断し(図16のステップS515)、参照しないなら該当オブジェクトをフィックスアップ済みと印つけてアドレスを記録し(ステップS520)、記録したアドレスを出力して(ステップS521)、オブジェクトアドレス取得処理を終了する。図16のステップS515において他オブジェクトを参照していれば、その属するライブラリがロード済みか否か判断し(図16のステップS516)、ロード済みでないならば認証無しロード手順(図16のステップS517)を実施し、参照されるオブジェクトについてアドレス取得する(図16のステップS518)。
なおライブラリがロード済みであった場合にはステップS517をスキップしてステップS518を実施する。ステップS518で実施されるオブジェクトアドレス取得手順は、図15で説明している手順全体を再帰的に呼び出すものである。呼び出した結果が認証不合格になることはない。参照されるオブジェクト全てについて実施したかを判断し、未実施があればステップS518に戻って繰り返す(図16のステップS519)。参照される全てのオブジェクトについて実施し終えたならば、該当オブジェクトをフィックスアップ済みと印つけてアドレスを記録し(ステップS520)、記録したアドレスを出力して(ステップS521)、オブジェクトアドレス取得処理を終了する。
なおフィックスアップ時オブジェクト認証の手順は、図17を用いて説明する。まずオブジェクトの属するライブラリは認証済みかどうか判断し、認証済みでなければ分岐して(ステップS531)、オブジェクト認証結果を不合格として(ステップS535)、オブジェクト認証処理を終了する。ライブラリが認証済みならば、フィックスアップ過程で位置とサイズを特定した該当オブジェクトについて、位置サイズ付ハッシュアレイ内の対応する要素を検索する(ステップS532)。検索結果で対応する要素が存在しないならば分岐して(ステップS533)、オブジェクト認証結果を不合格として(ステップS535)、オブジェクト認証処理を終了する。検索結果で対応する要素が存在すれば、オブジェクト認証結果を合格として(ステップS534)、オブジェクト認証処理を終了する。
保護の時点において、図5のステップS105において保護対象オブジェクト毎の三つ組みをそれぞれ要素として位置サイズ付ハッシュアレイを作成していた場合、上記図17のステップS532での「対応する」とは、位置とサイズの両方が一致する様に構成する。またステップS105で隣接する保護対象オブジェクトの一連の領域はまとめて1つの要素として位置サイズ付ハッシュアレイを作成することもでき、この場合には、上記図17のステップS532での「対応する」とは、該当オブジェクトの位置とサイズで表される領域が要素の三つ組み内の位置とサイズで表される領域に含まれている様に構成する。後者で複数のオブジェクトをまとめて三つ組みにしてしまっていても、ハッシュ関数適用対象となるオブジェクトのサイズの合計は変わらない。
次に、動的リンクライブラリの保護装置とライブラリの作成装置の構成と、これらの装置間を流れるデータについて図18を参照しながら説明する。図18では、特に図3で示したライブラリ20の保護を例に説明している。
各ソースコードファイルには広域関数21,22,23の実現が記述され、更に関数22から呼び出される静的関数24が記述されている。これらのソースコードファイルをコンパイラ110で機械語に翻訳すると、オブジェクトを格納しているオブジェクトファイルが作成される。これらを更に動的リンクライブラリ用にリンカー111でリンクし、ライブラリ20aを作成する。
作成直後のライブラリ20aには、オブジェクトをその性質毎にまとめ上げたセクションと、全オブジェクトの位置・サイズ・名前を記したシンボルテーブルと、ライブラリの外部から参照されるオブジェクトのみ位置・サイズ・名前を記した動的シンボルテーブルが、通例含まれている。また他にも、デバッグ情報などが含まれることもあるが、本発明では使用しない。両シンボルテーブルの位置欄には、セクションの識別子とセクション内での位置が記されている。リンカー111で作成したばかりのライブラリ20aに含まれるシンボルテーブルは、ライブラリの配布時や製品への搭載時にはシンボル情報・デバッグ情報削除装置112で削除され、例えば静的関数24のオブジェクト24は、外部から直接には参照できなくなる。
この実施の形態1の位置サイズ付ハッシュアレイ作成装置121は、保護対象オブジェクト名前のリストを受取り、ライブラリ20a内のシンボルテーブル内を名前で検索して、位置サイズ付ハッシュアレイ101に格納すべき位置・サイズを取得する。なおライブラリ認証処理が起動時動的リンクに限られる場合には、位置サイズ付ハッシュアレイ101に格納すべき位置の標記を最終的なライブラリ20のファイル内における各オブジェクトのオフセットにすることで、セクションの位置を特定する処理を省き単純化できる。位置サイズ付ハッシュアレイ作成装置121は上記位置・サイズに該当するオブジェクトのハッシュ値を計算して三つ組みを作り、これを集めて位置サイズ付ハッシュアレイ101を作成する。
実施の形態1の電子署名作成装置710は、秘密鍵700を用いて、位置サイズ付ハッシュアレイ101の電子署名601を作成する。実施の形態1の位置サイズ付ハッシュアレイ格納装置125aは、位置サイズ付ハッシュアレイ101を、ライブラリ識別子20とプログラム識別子2の組に関連付けて格納する。また、実施の形態1の電子署名格納装置123aは、電子署名601を、ライブラリ識別子20とプログラム識別子2の組に関連付けて格納する。
次に、位置サイズ付ハッシュアレイ作成装置121の内部構成の一例を、図19を用いて説明する。オブジェクト特定部121aは対象オブジェクト名のリストに挙げられた名前21,22,24の各々に対して、ライブラリ20a内のシンボルテーブル内を名前で検索して位置321とサイズ421の組、位置322とサイズ422の組、位置324とサイズ424の組を取得する。位置情報はオブジェクトの属するセクションの識別子とセクション内オフセットになっているので、シンボル情報やデバッグ情報などを除かれてしまったライブラリ20内の同じセクションに対しても適用することができ、これらを基にハッシュ算出部121bはライブラリ20からオブジェクト21,22,24を取得し、それぞれのハッシュ値221,222,224を算出する。三つ組み作成部121cはオブジェクト特定部121aが出力した位置情報とサイズ情報、およびハッシュ算出部が算出したハッシュ値を、対応関係に従って三つ組みにする。位置サイズ付ハッシュアレイ作成部121dはこれらの三つ組みを集めて位置サイズ付ハッシュアレイ101を作成する。
次に、動的リンクライブラリと呼び出しプログラムを含むプログラム管理に関する装置の構成と装置間を流れるデータについて、特にプログラム起動時に暗黙に動的リンクされる場合の構成について、図20を参照しながら説明する。
キーボードやボタンなどの入力装置150を経由して入力されたプログラム起動指示650は、起動指示解析装置151によってプログラム識別子2を抽出される。プログラム2が保護不要と印づけられている場合には細線矢印のみに従ってデータを流し、プログラム2が保護必要と記しづけられている場合には細線矢印と太線矢印の両方に従ってデータを流す。プログラム認証装置157はプログラム識別子2を契機に該当プログラムの認証を実施し、その結果であるプログラム認証結果653を出力する。プログラム読出装置153はプログラム識別子2を契機に読み出すが、その一方でプログラム認証結果653が認証合格でないならば読出しを中止する。読出しに成功したプログラム2は、ライブラリ動的リンク検出装置154に入力され、該当のライブラリ識別子を抽出する。プログラム2の場合は、ライブラリ識別子20が抽出されることになる。
位置サイズ付ハッシュアレイ読出装置125bと電子署名読出装置123bは、プログラム識別子2とライブラリ識別子20を組にして受け取り、該当する位置サイズ付ハッシュアレイ101と電子署名601を出力する。電子署名検証装置711は位置サイズ付ハッシュアレイ101と電子署名601と、公開鍵読出装置702から信頼できる公開鍵701を受け取り、電子署名検証結果654を出力する。
信頼できる公開鍵を供給可能な装置として、公開鍵読出装置702には製造時のみ公開鍵を書き込むことが可能で以後書換え不能な記憶装置を用いる場合を図20では示しているが、電子署名検証装置711中の検証関数(不図示)と公開鍵701を封入した耐タンパーな装置を用いて、該装置に入力として電子署名601と位置サイズ付ハッシュアレイから計算したハッシュ値(不図示)を与え、電子署名検証結果654を出力させる構成であると、更に好適である。
ライブラリ読出装置155は、ライブラリ識別子20を受け取ってライブラリ20を出力する。ハッシュ値検証装置128は、ライブラリ20と位置サイズ付ハッシュアレイ101を受け取って、位置サイズ付ハッシュアレイ101に含まれる全要素の位置とサイズを基にライブラリ20内のオブジェクトを抽出し、そのハッシュ値を計算し、位置サイズ付ハッシュアレイ101に含まれるハッシュ値と比較検証し、そのハッシュ値検証結果656を出力する。判定装置129は電子署名検証結果654とハッシュ値検証結果656を受け取って、判断し、ライブラリ認証結果658を出力する。
動的リンク装置156はプログラム2とライブラリ20を受け取って、通常は実行可能イメージ652を主記憶上に展開しオブジェクトアドレスのフィックスアップを実施するが、ライブラリ認証結果656が合格でないならば中止する。起動時の暗黙の動的リンクが失敗した場合、プログラム2は起動に失敗し、実行されない。
なお位置サイズ付ハッシュアレイ101が不正に除去されて位置サイズ付ハッシュアレイ読出装置125bが読み出しに失敗する場合、後段のハッシュ値検証装置128および電子署名検証装置711を経由して判定装置129に失敗の旨通知する。あるいは特に図示しないが、読み出し失敗を直接に判定装置129に通知するように構成してもよい。判定装置129は前記失敗を通知された場合、ライブラリ認証結果として不合格を出力する。
電子署名601が不正に除去されて電子署名読出し装置123bが読み出しに失敗する場合、後段の電子署名検証装置711を経由して判定装置129に失敗の旨通知する。あるいは特に図示しないが、読み出し失敗を直接に判定装置129に通知するように構成してもよい。判定装置129は前記失敗を通知された場合、ライブラリ認証結果658として不合格を出力する。
あるいは別の構成として、位置サイズ付ハッシュアレイ読出装置125bまたは電子署名読出装置123bが読み出しに失敗する場合、失敗の旨を直接動的リンク装置156に通知し、実行可能イメージの主記憶上への展開とオブジェクトアドレスのフィックスアップを中止させてもよい。
次に、ハッシュ値検証装置128と判定装置129の内部構成の一例を、図21を用いて説明する。
ハッシュ値検証装置128のオブジェクト特定部128aは、位置サイズ付ハッシュアレイの各要素である三つ組みから位置情報とサイズ情報をハッシュ算出部128bに与え、またハッシュ値を比較検証部128cに与える。ハッシュ値検証装置128のハッシュ算出部128bは与えられた位置情報とサイズ情報を基にライブラリ20からオブジェクト21,22,24を取得し、それぞれのハッシュ値521,522,524を算出する。ハッシュ値検証装置128の比較検証部128cはハッシュ値算出部128bに算出されたハッシュ値521,522,524とオブジェクト特定部128aから与えられたハッシュ値221,222,224をそれぞれ比較し、比較結果を出力する。各オブジェクトに関する比較結果を纏めたものがハッシュ値検証結果656である。
判定装置129の比較結果集積部129aは、ハッシュ値検証結果656内の各比較結果を集め、全て一致ならば情報「一致」を出力し、1つでも不一致があれば情報「不一致」を出力する。判定装置129の認証結果出力部129bは、電子署名検証結果654が合格でかつ比較結果集積装置の出力が「一致」である場合にのみライブラリ認証結果658として「合格」を出力し、それ以外の場合はライブラリ認証結果658として「不合格」を出力する。また前記読み出し失敗の通知を受けた場合にもライブラリ認証結果658として「不合格」を出力する(図示せず)。
なお説明の都合上ハッシュ値検証装置の各部位が逐次動作し、かつ各々の部位の動作は位置サイズ付ハッシュアレイ内の全要素に対する処理を終えてから次の部位の動作を開始させる場合を説明したが、各要素毎に各部位が逐次動作する構成であってもよい。この場合、比較検証部128cは比較結果を逐次出力するので、比較結果集積部129aは逐次受け取った比較結果に1つでも不一致があれば即座に情報「不一致」を出力し、全ての比較結果を受け取っても不一致がなければ情報「一致」を出力する。また認証結果出力部129bは、比較結果集積部129aからの出力情報「不一致」か電子署名検証結果「不合格」のいずれかを受け取った時点でライブラリ認証結果「不合格」を出力し、出力情報「一致」と電子署名検証結果「合格」が揃った時点でライブラリ認証結果「合格」を出力する。
次に、動的リンクライブラリと呼び出しプログラムを含むプログラム管理に関する装置と装置間を流れるデータの構成について、特にプログラム実行中に明示的にロードされる場合の構成について、図22を参照しながら説明する。
実行中のプログラムが保護不要であった場合、細線矢印のみに沿ってデータを流し、保護必要であった場合、細線矢印と太線矢印の両方に沿ってデータを流す。
実行中のプログラム2はライブラリロード指示651を発する。ライブラリロード指示解析装置152は、ライブラリロード指示651を入力して、ライブラリ識別子20を抽出する。抽出されたライブラリ識別子20を用いて、図17で示したライブラリ識別子20以降の構成と同様に構成する。但し動的リンク装置156aはオブジェクトアドレスのフィックスアップを行わずに、通常は実行可能イメージの主記憶への展開のみを行い、ライブラリ認証結果658が合格でないならば展開を中止する。また、動的リンク装置156aに与えられるべきプログラム2と、電子署名読出装置123b及び位置サイズ付ハッシュアレイ読出装置125bに与えられるべきプログラム識別子2は、実行中のプログラム2から提供される。
動的リンクライブラリと呼び出しプログラムを含むプログラム管理に関する装置と装置間を流れるデータの構成について、特にオブジェクトのアドレス取得を行う場合の構成について、図23を参照しながら説明する。
実行中のプログラムが保護不要であった場合、細線矢印のみに沿ってデータを流し、保護必要であった場合、細線矢印と太線矢印の両方に沿ってデータを流す。
実行中のプログラム2は、アドレス取得指示660を発する。アドレス取得指示解析装置160はアドレス取得指示660を入力して、オブジェクト名21とライブラリ識別子20を抽出する。読出済位置サイズ付ハッシュアレイ特定装置130はライブラリ識別子20を入力し、ライブラリのロード時に読出されていた位置サイズ付ハッシュアレイ101を出力する。他方動的シンボルテーブル内検索部161aはオブジェクト名21に該当する位置321とサイズ421を出力する。ここで位置321は、セクション識別子とセクション内位置の組で標記されている。オブジェクト検索装置131は位置321とサイズ421で位置サイズ付ハッシュアレイ101内の要素検索を行い、該当要素の有無をオブジェクト認証結果661として出力する。更にアドレスマッピング部161bは位置321をオブジェクトのアドレス321aに変換する。アドレス出力装置162は、オブジェクト認証結果661の合否に応じてアドレス321aの出力を行う。
なお該当オブジェクトが他オブジェクトを参照している場合、ライブラリロードとアドレス取得が再帰的に実施されるが、それらに関する装置構成は図22、図23と同様であるため、説明を省略する。
図18の電子署名格納装置123aと図20および図22の電子署名読出装置123bは、同一の記憶装置に備えられた書込み手段と読み出し手段であってもよく、あるいは同一の記憶媒体に対する別個の装置である書込み装置と読み出し装置であってもよい。図18の位置サイズ付ハッシュアレイ格納装置125aと図20および図22の位置サイズ付ハッシュアレイ読出装置125bは、同一の記憶装置に備えられた書込み手段と読み出し手段であってもよく、あるいは同一の記憶媒体に対する別個の装置である書込み装置と読み出し装置であってもよい。
図20のプログラム読出装置153は書き込み手段と読み出し手段を供えた記憶装置の読み出し手段であってもよく、あるいは記憶媒体に対する読み出し装置であってもよい。図20および図22のライブラリ読出装置155は書込み手段と読み出し手段を備えた記憶装置の読み出し手段であってもよく、あるいは記憶媒体に対する読み出し装置であってもよい。前記記憶装置の書込み手段あるいは前記記憶媒体に対する書込み装置は図18で説明しなかったが、少なくとも製造時に必要とすることは言うまでもない。
同一の記憶装置を採用した場合には、製造者は一旦製造を終えた後でもプログラムおよび/またはライブラリおよび/または位置サイズ付ハッシュアレイおよび/または電子署名を更新することができる。同一の記憶媒体に対する別個の装置を採用した場合には、製造者は媒体を交換することによりプログラムおよび/またはライブラリおよび/または位置サイズ付ハッシュアレイおよび/または電子署名を更新することができる。
以上のような実施の形態1の構成を備えることにより、以下に示す効果を有する。
ハッシュ関数適用対象を位置とサイズで特定するように構成したので、ライブラリを細かく保護および認証することができる。また、保護対象オブジェクトを指定することができるので、ライブラリの一部のみを保護および認証することができる。
さらに、保護対象をプログラムから利用するオブジェクトのみに限定することができる。
さらに、保護対象オブジェクトを名称で指定するように構成したので、ソースコード形式での手続き・データの作成者にとっては、位置・サイズを数値で指定する場合に比べて容易に指定できる。
ライブラリ内オブジェクトのハッシュ値を事前に計算し格納するように構成したので、ライブラリが改竄を受けた場合には認証過程で計算したハッシュ値が異なり、改竄を検出することができる。
さらに、公開鍵暗号の秘密鍵を用いて位置サイズ付ハッシュアレイの電子署名を作成するようにしたので、位置サイズ付ハッシュアレイが改竄されると、電子署名による検証で不適合を検出することができる。また、秘密鍵保有者以外による署名偽造が困難となるように、位置サイズ付ハッシュアレイを保護するように構成したので、位置サイズ付ハッシュアレイと電子署名を共に改竄された場合にも、認証時に改竄を検出することができる。
また、位置サイズ付きアッシュアレイおよび電子署名を、ライブラリと呼び出しプログラムの組毎に作成し、格納するように構成したので、個々のプログラムで使用するオブジェクトのみが保護対象になっている様に、それぞれ別の位置サイズ付ハッシュアレイおよび電子署名を作成し認証することができる。
さらに、ライブラリ呼び出しプログラムを保護対象と非保護対象に分類するように構成したので、非保護対象プログラムから呼び出される場合には、動的リンクライブラリの位置サイズ付ハッシュアレイと電子署名を不要にすることができる。またプログラム起動時およびライブラリロード時に位置サイズ付ハッシュアレイと電子署名の検証処理が不要になる。
保護必要であると分類したプログラムに対して電子署名を作成・格納し、起動時に電子署名を検証するように構成したので、ライブラリ内のオブジェクトに加えてプログラムファイル内のオブジェクトを保護できるようになった。またプログラムの起動に際して、プログラムファイル内のオブジェクトの改竄有無を検査して認証できるようになった。さらに認証不合格になったプログラムの実行を抑止することができるようになった。さらに、ライブラリ内の保護必要オブジェクトを直接もしくは間接的に利用するプログラムは、保護必要であると分類するようにしたので、保護必要オブジェクトを参照するプログラムは、改竄検出可能な様に保護することができるようになった。
また、プログラムが保護対象であると分類した上で位置サイズ付ハッシュアレイまたは電子署名の欠落を認証不合格と判定するように構成したので、位置サイズハッシュアレイおよび電子署名が不正除去された場合にも認証不合格と検出することができる。
さらに、保護されたライブラリを、プログラム起動時の暗黙の動的リンクに際して認証するように構成したので、認証不合格を検出した場合には動的リンクの中止を通じてプログラムの実行を抑止することができる。
さらに、保護されたライブラリを、プログラムからのライブラリロードに際して認証するように構成したので、認証不合格を検出した場合には動的リンクの中止を通じてライブラリロードを抑止することができる。
さらに、保護されたオブジェクトを、プログラムからのアドレス取得に際して認証するように構成したので、保護対象外オブジェクトを利用するためにアドレスを取得しようとしても認証不合格になりアドレスをプログラムに渡さない。
さらに、保護対象オブジェクトはプログラムからの起動時動的リンクおよびロード時動的リンクに際してハッシュ値比較検証が済んでいるため、アドレス取得のために指定したオブジェクトがハッシュ検証済みであるかどうかは、位置サイズ付ハッシュアレイ内の三つ組みに該当するか否かを以って代用することができる。
さらに、電子署名作成過程の前段にハッシュ関数適用を設けるように構成したので、保護対象オブジェクトの数に比例して大きくなる位置サイズ付ハッシュアレイに対しても、署名関数の入力データサイズを一定以内に保つことができる。また電子署名検証過程内の前段にハッシュ関数適用を設けるように構成したので、検証関数の入力データサイズを一定以内に保つことができる。
さらに、製造者のみが保有する秘密鍵に対応した公開鍵のみを、製造時のみに書き込み可能な記憶装置に格納しすることで保護し、プログラムおよびライブラリおよび位置サイズ付ハッシュアレイおよび電子署名を書き換え可能な記憶装置または配布可能な記憶媒体に格納し、プログラムおよびライブラリおよび位置サイズ付ハッシュアレイは電子署名によって保護している場合には、製造者によって、プログラムおよびライブラリを位置サイズ付ハッシュアレイと電子署名と共に更新することができる一方で、更新された後のプログラムおよびライブラリおよび位置サイズ付ハッシュアレイもしくは統合ハッシュアレイと電子署名を、該当公開鍵で検証することができる。
または公開鍵と電子署名の検証関数を封入した耐タンパーな装置を用いて公開鍵を保護している場合には、公開鍵を記憶装置から読み出した後の検証関数適用直前に主記憶上にある公開鍵の改竄を防止し、当該公開鍵および検証関数の演算処理を信頼することができる。
実施の形態2.
この実施の形態2では、複数の動的リンクライブラリ(以下、ライブラリと称する)を利用する場合について示す。図24は、この発明の実施の形態2によるライブラリの保護についてのデータの処理関係を示す説明図である。
プログラム6はライブラリ40内のオブジェクト41,42を直接参照し、更にライブラリ50内のオブジェクト51,53を直接参照する様に作られていた。この場合にライブラリ40,50を保護するためには、オブジェクト41,42,51,53を保護対象とすることが必要である。そこで実施の形態1の図11の説明と同様にしてオブジェクト41,42に該当する三つ組みから形成される位置サイズ付ハッシュアレイ104相当とオブジェクト51,53に該当する三つ組みから形成される位置サイズ付ハッシュアレイ105相当を形成する。ライブラリ識別子40と位置サイズ付ハッシュアレイ104相当をペアにし、またライブラリ識別子50と位置サイズ付ハッシュアレイ105相当をペアにし、これらのペアを集めてアレイ(以下、統合ハッシュアレイ108と称する)とする。
次いで統合ハッシュアレイ108に対して、製造者のみが保有する秘密鍵700を用いて電子署名608を作成する。なお署名作成手続きとしては、例えば非特許文献1に記載されているRSASSA-PSS-SIGNおよびRSASSA-PKCS1-v1_5-SIGNの様に、ハッシュ関数を前段階として持つ署名作成手続きを用いることで、保護対象オブジェクト数および動的リンクライブラリ数によって統合ハッシュアレイのサイズが異なることにも対応可能とする。
図25は、この発明の実施の形態2によるライブラリの認証についてのデータの処理関係を示す説明図である。
プログラム6、ライブラリ40、ライブラリ50は上記図24で参照されたものと同一であり、統合ハッシュアレイ108、電子署名608は、上記図24で作成されたものである。この場合にライブラリ40,50を認証するためには、オブジェクト41,42,51,53の改竄有無を検査することが必要である。
まず、製造者のみが保有する秘密鍵700に対応する公開鍵701を用いて、統合ハッシュアレイ108が改竄されていないかどうかを電子署名608に照らし合わせて検証する。なお署名検証手続きとしては、例えば非特許文献1に記載されているRSASSA-PSS-VERIFYおよびRSASSA-PKCS1-v1_5-VERIFYの様に、ハッシュ関数を前段階として持つ署名作成手続きを用いることで、保護対象オブジェクト数および動的リンクライブラリ数によって統合ハッシュアレイのサイズが異なることにも対応可能とする。
次に、改竄されていないと確認の取れた位置341,342,351,353とサイズ441,442,451,453とライブラリ識別子40,50を用いて、保護対象オブジェクト41,42,51,53を特定する。次に、各オブジェクト41,42,51,53のハッシュ値541,542,551,553を計算する。
統合ハッシュアレイ108に格納されていたハッシュ値241,242,251,253は改竄されていないと確認されているため、保護時に計算したハッシュ値と認証時に計算したハッシュ値をそれぞれ比較検証することにより、オブジェクト41,42,51,53への改竄がなかったかどうかを確認することができる。
オブジェクト41に改竄があった場合を想定すると、認証時にオブジェクト41から計算したハッシュ値541は異なる値になってしまうので、ハッシュ値241との比較で検出される。オブジェクト41の改竄を隠すために、改竄後のオブジェクトから計算したハッシュ値で統合ハッシュアレイ108内のハッシュ値241を置き換えたと想定すると、認証時に統合ハッシュアレイ108は電子署名608に適合しなくなるので、検出される。オブジェクト41の改竄を隠すために、統合ハッシュアレイ108内の位置サイズ付ハッシュアレイ104相当を含むペアを削除したと想定すると、認証時にライブラリ識別子40に対応するペアを検索で見つけることができなくなるので、検出される。オブジェクト41の改竄を隠すために、ハッシュ値241と位置341とサイズ441の三つ組みを削除したと想定すると、認証時に統合ハッシュアレイ108は電子署名608に適合しなくなるので、検出される。オブジェクト41の改竄と統合ハッシュアレイ108の改竄を隠すために、改竄後の統合ハッシュアレイから作成した電子署名で電子署名608を置き換えたと想定すると、電子署名608を作成するために使われた秘密鍵700は製造者しか保有していないため、改竄者は異なる秘密鍵を用いて電子署名を作成せざるをえず、製造者の秘密鍵700に対応した公開鍵701を用いた検証で不適合が検出される。これらの認証処理は、オブジェクト42,51,53についても同様である。
動的リンクライブラリを保護するための、統合ハッシュアレイおよび電子署名作成方法の手順を、図26に従って説明する。なお、以下では実施の形態1による動的リンクライブラリの保護と同一のステップには図5で使用した符号と同一の符号を付し、説明を省略または簡略化する。
まず呼び出される1つのライブラリ分についての保護対象オブジェクトを特定し(ステップS601)、保護対象オブジェクトの位置・サイズを特定し(ステップS101)、該当のオブジェクトについてハッシュ値を計算し(ステップS102)、該当オブジェクトのハッシュ値・位置・サイズを三つ組みにする(ステップS103)。ライブラリ内の全ての保護対象オブジェクトに対して実施したかを判断し、未実施があればステップS101に戻って繰り返す(ステップS104)。ライブラリ内の全てに対して実施した後、全保護対象オブジェクトの三つ組みを集めて位置サイズ付ハッシュアレイを作成し(ステップS105)、位置サイズ付ハッシュアレイと該当ライブラリの識別子をペアにする(ステップS602)。呼び出される全てのライブラリに対して実施したかを判断し、未実施があればステップS601に戻って繰り返す(ステップS603)。全ライブラリに対して実施した後、上記全ライブラリ分のライブラリ識別子と位置サイズ付ハッシュアレイのペアを集めて統合ハッシュアレイを作成し(ステップS604)、統合ハッシュアレイの電子署名を作成し(ステップS605)、プログラムに対応付けて統合ハッシュアレイと電子署名を格納する(ステップS606)。以上で統合ハッシュアレイおよび電子署名作成の手順は終了である。
まず統合ハッシュアレイを認証する方法の手順を、図27に従って説明する。まずプログラムに対応した統合ハッシュアレイと電子署名を読出す(ステップS701)。もし何れか一方または両方について読出し成功しなかったならば分岐して(ステップS702)、認証不合格と判定し(ステップS706)、認証処理を終了する。読出し成功していれば、統合ハッシュアレイと、統合ハッシュアレイの電子署名とを、信頼できる公開鍵を用いて検証する(ステップS703)。もし電子署名に適合していなければ分岐して(ステップS704)、認証不合格と判定し(ステップS706)、認証処理を終了する。署名に適合していた場合は、統合ハッシュアレイ認証結果を合格とし(ステップS705)、認証方法の手順を終了する。
続いて動的リンクライブラリを認証する方法の手順を、図28に従って説明する。なお、以下では実施の形態1による動的リンクライブラリを認証する方法の手順と同一のステップには図6で使用した符号と同一の符号を付す。
図27で認証された統合ハッシュアレイの中から、該当ライブラリの識別子に対応した位置サイズ付ハッシュアレイ相当を検索する(ステップS711)。もし位置サイズ付ハッシュアレイ相当が存在しなかったら分岐して(ステップS712)、ライブラリ認証結果を不合格とし(ステップS211)、認証方法の手順を終了する。もし検索で存在したら、位置サイズ付ハッシュアレイの要素によって、対象オブジェクトの位置・サイズを特定し(ステップS205)、対象オブジェクトのハッシュ値を計算し(ステップS206)、計算されたハッシュ値と位置サイズ付ハッシュアレイ内に格納されていたハッシュ値を比較する(ステップS207)。
ハッシュ値同士が一致しないならば分岐し(ステップS208)、ライブラリ認証結果を不合格とし(ステップS211)、認証方法の手順を終了する。ハッシュ値同士が一致していれば、位置サイズ付ハッシュアレイの全ての要素について実施したかを判断し、未実施があればステップS205の処理に戻り上述した処理を繰り返す(ステップS209)。ハッシュ値同士に不適合が見つからないまま全ての要素に対して実施し終えたならばライブラリ認証結果を合格とし(ステップS210)、認証方法の手順を終了する。
動的リンクライブラリと呼び出しプログラムを含むプログラム管理手順について、特にプログラム起動時に暗黙に動的リンクされる場合の手順について、図29を用いて説明する。なお、以下では実施の形態1によるプログラム起動時に暗黙に動的リンクされる場合の手順と同一のステップには図13で使用した符号と同一の符号を付し、説明を省略または簡略化する。
プログラム起動処理の内動的リンクを除く処理、例えば資源割当などを実施(ステップS301)した後、該当プログラムが保護必要であるか否か印を参照して判断する(ステップS302)。保護必要であれば、プログラム認証を行い(ステップS303)、認証合格しなければ分岐して(ステップS304)、認証エラーとしてプログラム実行を拒絶する(ステップS311)。プログラム認証合格であれば、ハッシュアレイ認証を行い(ステップS801)、認証合格しなければ分岐して(ステップS802)、認証エラーとしてプログラム実行を拒絶する(ステップS311)。認証合格していれば、プログラムが暗黙に動的リンクするライブラリを、直接利用するものと間接利用するものを共に含めて列挙する(ステップS305)。
列挙されたライブラリが1個未満であれば分岐し(ステップS306),以後の処理をスキップしてプログラム起動を完了とする。1個以上であれば図28で説明したライブラリ認証の手順を実施し(ステップS805)、認証合格しなければ分岐して(ステップS806)、認証エラーとしてプログラム実行を拒絶する(ステップS311)。もしライブラリ認証合格であれば認証無しの動的リンク手順(ステップS309)を実施する。列挙された全てのライブラリについて実施したかどうかを判断し、未実施があればステップS805に戻って繰り返す(ステップS310)。全てのライブラリについて実施し終えたならばプログラム起動処理を終了する。
他方、ステップS302において該当プログラムが保護必要でなければ、実施の形態1で説明したステップS312からステップS315と同一の処理を行い、処理を終了する。
プログラム認証については、実施の形態1の図13における説明と同様である。
動的リンクライブラリと呼び出しプログラムを含むプログラム管理手順について、特にプログラム実行中に明示的にロードされる場合の手順については、実施の形態1の図14における説明と同様である。但し、図14のフローチャートのステップS402で示したライブラリ認証には、上述した図28のフローチャートで示した手順を用いる。
動的リンクライブラリと呼び出しプログラムを含むプログラム管理手順について、特にプログラム実行中に明示的にオブジェクトアドレス取得される場合の手順については、実施の形態1の図15および図16における説明と同様である。但し、図15のフローチャートのステップS504で示したフィックスアップ時オブジェクト認証については、図30で下記に説明する手順を用い、図15のフローチャートのステップS509で示したライブラリ認証には、上述した図28のフローチャートで示した手順を用いる。
実施の形態2によるフィックスアップ時オブジェクト認証の手順について、図30を用いて説明する。なお、以下では実施の形態1によるプログラム起動時に暗黙に動的リンクされる場合の手順と同一のステップには図17で使用した符号と同一の符号を付し、説明を省略または簡略化する。
まずオブジェクトの属するライブラリは認証済みかどうか判断し、認証済みでなければ分岐して(ステップS531)、オブジェクト認証結果を不合格として(ステップS535)、オブジェクト認証処理を終了する。ライブラリが認証済みならば、統合ハッシュアレイの中からライブラリの識別子に対応した位置サイズ付ハッシュアレイ相当を検索し(ステップS821)、フィックスアップ過程で位置を特定した該当オブジェクトについて、位置サイズ付ハッシュアレイ内の対応する要素を検索する(ステップS532)。以降、実施の形態1で説明したステップS533からステップS535と同一の処理を行い、処理を終了する。
動的リンクライブラリの保護装置とライブラリの作成装置とこれらの間を流れるデータについての構成を、特にライブラリ40と50の場合を例にとって図31を用いて説明する。
ソースコードファイルをコンパイルしてオブジェクトファイルを取得し、オブジェクトファイルをリンクして動的リンクライブラリを得る過程までは、実施の形態1の図18で説明したものと同一であるため、説明を省略する。リンカー111から出力されたばかりの動的リンクライブラリ40aと50aに含まれるシンボルテーブルは、ライブラリの配布時や製品への搭載時にはシンボル情報・デバッグ情報削除装置112で削除されてしまうので、例えば静的関数のオブジェクトがあったとしても、外部から直接には参照できなくなる。
実施の形態2の位置サイズ付ハッシュアレイ作成装置121は、保護対象オブジェクト名前のリストを受取り、ライブラリ40a内のシンボルテーブル内を名前で検索して、位置サイズ付ハッシュアレイ104に格納すべき位置・サイズを取得する。また保護対象オブジェクト名前のリストを受取り、ライブラリ50a内のシンボルテーブル内を名前で検索して、位置サイズ付ハッシュアレイ105に格納すべき位置・サイズを取得する。なお位置サイズ付ハッシュアレイ104,105を起動時動的リンクのライブラリ認証処理にしか使用しないならば、これらのハッシュアレイに格納すべき位置の標記は、最終的なライブラリファイル40,50内における各オブジェクトのオフセットであることが、認証処理を単純化するためには好適である。位置サイズ付ハッシュアレイ作成装置121は上記位置・サイズに該当するオブジェクトのハッシュ値を計算して三つ組みを作り、これを集めて位置サイズ付ハッシュアレイ104,105を作成する。
実施の形態2の統合ハッシュアレイ作成装置8は、ライブラリ識別子40と位置サイズ付ハッシュアレイ104のペアと、ライブラリ識別子50と位置サイズ付ハッシュアレイ105のペアを受け取り、それぞれのペアを要素にした統合ハッシュアレイ108を作成する。
実施の形態2の電子署名作成装置710は、秘密鍵700を用いて、統合ハッシュアレイ108の電子署名608を作成する。実施の形態2の統合ハッシュアレイ格納装置126aは、統合ハッシュアレイ108を、プログラム識別子2に関連付けて格納する。また実施の形態2の電子署名格納装置124aは、電子署名608を、プログラム識別子2に関連付けて格納する。
動的リンクライブラリと呼び出しプログラムを含むプログラム管理に関する装置と装置間を流れるデータの構成について、特にプログラム6の起動時に動的リンクライブラリ40,50が暗黙に動的リンクされる場合の構成について、図32を用いて説明する。
キーボードやボタンなどの入力装置150を経由して入力されたプログラム起動指示670は、起動指示解析装置151によってプログラム識別子6を抽出される。プログラム6が保護不要と印づけられている場合には細線矢印のみに従ってデータを流し、プログラム6が保護必要と記しづけられている場合には細線矢印と太線矢印の両方に従ってデータを流す。プログラム認証装置157はプログラム識別子6を契機に該当プログラムの認証を実施し、その結果であるプログラム認証結果673を出力する。プログラム読出装置153はプログラム識別子6を契機に読み出すが、その一方でプログラム認証結果673が認証合格でないならば読出しを中止する。読出しに成功したプログラム6は、ライブラリ動的リンク検出装置154に入力され、ライブラリ識別子を抽出される。図32の場合には、ライブラリ識別子40,50が抽出されることになる。
統合ハッシュアレイ読出装置126bと電子署名読出装置124bは、プログラム識別子6を受け取り、該当する統合ハッシュアレイ108と電子署名608を出力する。電子署名検証装置711は統合ハッシュアレイ108と電子署名608と、公開鍵読出装置702から信頼できる公開鍵701を受け取り、電子署名検証結果674を出力する。
信頼できる公開鍵を供給可能な装置として、公開鍵読出装置702には製造時のみ公開鍵を書き込むことが可能で以後書換え不能な記憶装置を用いる場合を図32では示しているが、電子署名検証装置711中の検証関数(不図示)と公開鍵701を封入した耐タンパーな装置を用いて、該装置に入力として電子署名608と統合ハッシュアレイから計算したハッシュ値(不図示)を与え、電子署名検証結果674を出力させる構成であると、更に好適である。
位置サイズ付ハッシュアレイ検索装置127は、統合ハッシュアレイ108の中から、ライブラリ識別子40に対応した位置サイズ付ハッシュアレイ104と、ライブラリ識別子50に対応した位置サイズ付ハッシュアレイ105を出力する。ライブラリ読出装置155は、ライブラリ識別子40,50を受け取ってライブラリ40,50を出力する。
ハッシュ値検証装置128は、ライブラリ40と位置サイズ付ハッシュアレイ104を受け取って、位置サイズ付ハッシュアレイ104に含まれる全要素の位置とサイズを基にライブラリ40内のオブジェクトを抽出し、そのハッシュ値を計算し、位置サイズ付ハッシュアレイ104に含まれるハッシュ値と比較検証する。ハッシュ値検証装置128は、更にライブラリ50と位置サイズ付ハッシュアレイ105を受け取って、位置サイズ付ハッシュアレイ105に含まれる全要素の位置とサイズを基にライブラリ50内のオブジェクトを抽出し、そのハッシュ値を計算し、位置サイズ付ハッシュアレイ105に含まれるハッシュ値と比較検証する。ハッシュ値検証装置128は、これらのハッシュ値検証結果を保護対象オブジェクト毎の比較結果として出力するが、ここでは説明のために、ライブラリ40のオブジェクト分の比較結果の集まりをハッシュ値検証結果676、ライブラリ50のオブジェクト分の比較結果の集まりをハッシュ値検証結果677と符号付けることにする。
判定装置129は電子署名検証結果674をハッシュアレイ認証結果675として受け取り、ハッシュ値検証結果676,677をライブラリ認証結果678,679として受け取って判断し、認証結果を出力する。
より詳細には、判定装置129は図21で説明した比較結果集積部129aと認証結果出力部129bで構成される。比較結果集積部129aは比較結果の集まりであるハッシュ値検証結果676を単一のライブラリ認証結果678に集約し、同様にハッシュ値検証結果677をライブラリ認証結果679に集約する。判定装置129bは電子署名検証結果674をハッシュアレイ認証結果675として受け取り、上記ライブラリ認証結果678を受け取って判断し、ライブラリ40の動的リンク可否判断基準となる認証結果を出力する。また判定装置129bは前記電子署名検証結果674を再度ハッシュアレイ認証結果675として受け取り、上記ライブラリ認証結果679を受け取って判断し、ライブラリ50の動的リンク可否判断基準となる認証結果を出力する。
動的リンク装置156はプログラム6とライブラリ40,50を受け取って実行可能イメージを主記憶上に通常は展開しオブジェクトアドレスのフィックスアップを行うが、認証結果が合格でないならば中止する。起動時の暗黙の動的リンクが失敗した場合、プログラム6は起動に失敗し、実行されない。
なお統合ハッシュアレイ108が不正に除去されて統合ハッシュアレイ読出装置126bが読み出しに失敗する場合、後段の位置サイズ付ハッシュアレイ検索装置127およびハッシュ値検証装置128を経由して判定装置129に失敗の旨通知する。あるいは特に図示しないが、読み出し失敗を直接に判定装置129に通知するように構成してもよい。判定装置129は前記失敗を通知された場合、動的リンク可否判断基準となる認証結果として不合格を出力する。
電子署名608が不正に除去されて電子署名読出し装置124bが読み出しに失敗する場合、後段の電子署名検証装置711を経由して判定装置129に失敗の旨通知する。あるいは特に図示しないが、読み出し失敗を直接に判定装置129に通知してもよい。判定装置129は前記失敗を通知された場合、ライブラリ認証結果として不合格を出力する。
あるいは別の構成として、位置サイズ付ハッシュアレイ読出装置126bまたは電子署名読出装置124bが読み出しに失敗する場合、失敗の旨を直接動的リンク装置156に通知し、実行可能イメージの主記憶上への展開とオブジェクトアドレスのフィックスアップを中止させてもよい。
動的リンクライブラリと呼び出しプログラムを含むプログラム管理に関する装置と装置間を流れるデータの構成について、特にプログラム6の起動時に動的リンクライブラリ50が暗黙に動的リンクされ、動的リンクライブラリ40は明示的にロードされる場合の構成について、図33〜35を用いて説明する。
図33では上記の場合の内の、特にプログラム6の起動時に動的リンクライブラリ50が暗黙に動的リンクされる時点の構成を説明する。図32との相違点は、ライブラリ動的リンク検出装置154から抽出されるのがライブラリ識別子50のみであること、以降の構成で登場するライブラリ・位置サイズ付ハッシュアレイ・ハッシュ値検証結果・ライブラリ認証結果がそれぞれ50,105,677,679のみであること、判定装置の認証結果出力部129bがハッシュアレイ認証結果675として受け取るのは出力されたばかりの電子署名検証結果674であること、実行可能イメージ672aはプログラム6とライブラリ50を主記憶上に展開したものであって、まだライブラリ40の分は展開されていないこと、である。
図34では上記の場合の内の、特にプログラム実行中に動的リンクライブラリ40が明示的にロードされる時点の構成を説明する。
実行中のプログラムが保護不要であった場合、細線矢印のみに沿ってデータを流し、保護必要であった場合、細線矢印と太線矢印の両方に沿ってデータを流す。
実行中のプログラム6はライブラリロード指示671を発する。ライブラリロード指示解析装置152は、ライブラリロード指示671を入力して、ライブラリ識別子40を抽出する。ライブラリ読出装置155は、ライブラリ識別子40を契機として、ライブラリ40を読み出す。
統合ハッシュアレイ108は、プログラム6起動時に統合ハッシュアレイ読出装置126bによって出力されていたので、ロード時点でも引き続き使用する。位置サイズ付ハッシュアレイ検索装置127は、統合ハッシュアレイ108の中から、ライブラリ識別子40に該当する位置サイズ付ハッシュアレイ104を出力する。ハッシュ値検証装置128は位置サイズ付ハッシュアレイ104とライブラリ40を入力し、ハッシュ値検証結果676を出力する。判定装置128の比較結果集積部128aは比較結果の集まりであるハッシュ値検証結果676を単一のライブラリ認証結果678に集約する。動的リンク装置156aは、通常ライブラリ40とプログラム6を受け取って実行可能イメージを主記憶上に展開するが、認証結果が不合格ならば展開を中止する。
なお図33のハッシュアレイ認証結果675がロード時点でも引き続き使用できるならば、ライブラリ認証結果678と動的リンク装置156aの間の構成には、図33と同様に認証結果出力装置129bを介在させ、更にハッシュアレイ認証結果675を入力させていてもよい。
図35では上記の場合の内の、特に明示的にロードされた動的リンクライブラリ40のオブジェクトのアドレス取得を行う時点の構成を説明する。
実行中のプログラムが保護不要であった場合、細線矢印のみに沿ってデータを流し、保護必要であった場合、細線矢印と太線矢印の両方に沿ってデータを流す。
実行中のプログラム6は、アドレス取得指示680を発する。アドレス取得指示解析装置160はアドレス取得指示680を入力して、オブジェクト名41とライブラリ識別子40を抽出する。統合ハッシュアレイ108は、プログラム6起動時に統合ハッシュアレイ読出装置126bによって出力されていたので、アドレス取得時点でも引き続き使用する。位置サイズ付ハッシュアレイ検索装置127は統合ハッシュアレイ108の中から、ライブラリ識別子40に対応する位置サイズ付ハッシュアレイ104を出力する。他方、動的シンボルテーブル内検索部161aはオブジェクト名41に該当する位置341およびサイズ441を出力する。ここで位置341は、セクション識別子とセクション内位置の組で表記されている。
オブジェクト検証装置131は位置341とサイズ441で位置サイズ付ハッシュアレイ104内の要素検索を行い、該当要素の有無をオブジェクト認証結果681として出力する。更にアドレスマッピング部161bは位置341をオブジェクトのアドレス341aに変換する。アドレス出力装置162は、オブジェクト認証結果681の合否に応じて、アドレス341aとフィックスアップ済みである旨記録しアドレスの出力を行う。
なお該当オブジェクトが他オブジェクトを参照している場合、ライブラリロードとアドレス取得が再帰的に実施されるが、それらに関する装置構成は上述した図34および図35と同一であるため説明を省略する。
図31の電子署名格納装置124aと図32および図33の電子署名読出装置124bは、同一の記憶装置に備えられた書込み手段と読み出し手段であってもよく、あるいは同一の記憶媒体に対する別個の装置である書込み装置と読み出し装置であってもよい。図31の統合ハッシュアレイ格納装置126aと図32および図33の統合ハッシュアレイ読出装置126bは、同一の記憶装置に備えられた書込み手段と読み出し手段であってもよく、あるいは同一の記憶媒体に対する別個の装置である書込み装置と読み出し装置であってもよい。
図32および図33のプログラム読出装置153は書き込み手段と読み出し手段を供えた記憶装置の読み出し手段であってもよく、あるいは記憶媒体に対する読み出し装置であってもよい。図32および図33のライブラリ読出装置155は書込み手段と読み出し手段を備えた記憶装置の読み出し手段であってもよく、あるいは記憶媒体に対する読み出し装置であってもよい。前記記憶装置の書込み手段あるいは前記記憶媒体に対する書込み装置は図31で説明しなかったが、少なくとも製造時に必要とすることは言うまでもない。
同一の記憶装置を採用した場合には、製造者は一旦製造を終えた後でもプログラムおよび/またはライブラリおよび/または位置サイズ付ハッシュアレイおよび/または電子署名を更新することができる。同一の記憶媒体に対する別個の装置を採用した場合には、製造者は媒体を交換することによりプログラムおよび/またはライブラリおよび/または位置サイズ付ハッシュアレイおよび/または電子署名を更新することができる。
以上のような実施の形態2の構成を備えることにより、以下に示す効果を有する。
ハッシュ関数適用対象を位置とサイズで特定するように構成したので、ライブラリを細かく保護および認証することができる。また、保護対象オブジェクトを指定することができるので、ライブラリの一部のみを保護および認証することができる。
さらに、保護対象をプログラムから利用するオブジェクトのみに限定することができる。
さらに、保護対象オブジェクトを名称で指定するように構成したので、ソースコード形式での手続き・データの作成者にとっては、位置・サイズを数値で指定する場合に比べて容易に指定できる。
複数の動的リンクライブラリを利用するプログラムの保護および認証に、位置サイズ付ハッシュアレイを統合した統合ハッシュアレイを用いるように構成したので、統合ハッシュアレイはプログラムから呼び出される動的リンクライブラリに関わる位置サイズ付ハッシュアレイを全て集めることができ、統合ハッシュアレイ作成時に想定しなかったライブラリを起動時および実行中のプログラムから動的リンクされることを防ぐことができる。さらに、1つの電子署名を作成することで複数の位置サイズ付ハッシュアレイに対応させることができる。また認証時においても、1つの電子署名の検証処理を行うことで複数の位置サイズ付ハッシュアレイ分の認証を行うことができる。
ライブラリ内オブジェクトのハッシュ値を事前に計算し格納するように構成したので、ライブラリが改竄を受けた場合には認証過程で計算したハッシュ値が異なり、改竄を検出することができる。
さらに、公開鍵暗号の秘密鍵を用いて統合ハッシュアレイの電子署名を作成するようにしたので、統合ハッシュアレイが改竄されると、電子署名による検証で不適合を検出することができる。また、秘密鍵保有者以外による署名偽造が困難となるように、統合ハッシュアレイを保護するように構成したので、統合と電子署名を共に改竄された場合にも、認証時に改竄を検出することができる。
また、統合ハッシュアレイおよび電子署名を、呼び出しプログラム毎に作成し、格納するように構成したので、個々のプログラムで使用するオブジェクトのみが保護対象になっている様に、それぞれ別の統合ハッシュアレイおよび電子署名を作成し認証することができる。
さらに、ライブラリ呼び出しプログラムを保護対象と非保護対象に分類するように構成したので、非保護対象プログラムから呼び出される場合には、統合ハッシュアレイと電子署名を不要にすることができる。またプログラム起動時に統合ハッシュアレイと電子署名の検証処理が不要になる。
保護必要であると分類したプログラムに対して電子署名を作成・格納し、起動時に電子署名を検証するように構成したので、ライブラリ内のオブジェクトに加えてプログラムファイル内のオブジェクトを保護できるようになった。またプログラムの起動に際して、プログラムファイル内のオブジェクトの改竄有無を検査して認証できるようになった。さらに認証不合格になったプログラムの実行を抑止することができるようになった。さらに、ライブラリ内の保護必要オブジェクトを直接もしくは間接的に利用するプログラムは、保護必要であると分類するようにしたので、保護必要オブジェクトを参照するプログラムは、改竄検出可能な様に保護することができるようになった。
また、プログラムが保護対象であると分類した上で統合ハッシュアレイまたは電子署名の欠落を認証不合格と判定するように構成したので、統合ハッシュアレイおよび電子署名が不正除去された場合にも認証不合格と検出することができる。
さらに、保護されたライブラリを、プログラム起動時の暗黙の動的リンクに際して認証するように構成したので、認証不合格を検出した場合には動的リンクの中止を通じてプログラムの実行を抑止することができる。
さらに、保護されたライブラリを、プログラムからのライブラリロードに際して認証するように構成したので、認証不合格を検出した場合には動的リンクの中止を通じてライブラリロードを抑止することができる。
さらに、保護されたオブジェクトを、プログラムからのアドレス取得に際して認証するように構成したので、保護対象外オブジェクトを利用するためにアドレスを取得しようとしても認証不合格になりアドレスをプログラムに渡さない。
さらに、保護対象オブジェクトはプログラムからの起動時動的リンクおよびロード時動的リンクに際してハッシュ値比較検証が済んでいるため、アドレス取得のために指定したオブジェクトがハッシュ検証済みであるかどうかは、統合ハッシュアレイ内の位置サイズ付ハッシュアレイ内の三つ組みに該当するか否かを以って代用することができる。
さらに、電子署名作成過程の前段にハッシュ関数適用を設けるように構成したので、保護対象オブジェクトの数に比例して大きくなる統合ハッシュアレイに対しても、署名関数の入力データサイズを一定以内に保つことができる。また電子署名検証過程内の前段にハッシュ関数適用を設けるように構成したので、検証関数の入力データサイズを一定以内に保つことができる。
さらに、製造者のみが保有する秘密鍵に対応した公開鍵のみを、製造時のみに書き込み可能な記憶装置に格納することで保護し、プログラムおよびライブラリおよび統合ハッシュアレイおよび電子署名を書き換え可能な記憶装置に格納し、プログラムおよびライブラリおよび統合ハッシュアレイは電子署名によって保護している場合には、製造者によって、プログラムおよびライブラリを統合ハッシュアレイと電子署名と共に置換することができる一方で、置換された後のプログラムおよびライブラリおよび統合ハッシュアレイと電子署名を、該当公開鍵で検証することができる。
または公開鍵と電子署名の検証関数を封入した耐タンパーな装置を用いて公開鍵を保護している場合には、公開鍵を記憶装置から読み出した後の検証関数適用直前に主記憶上にある公開鍵の改竄を防止し、当該公開鍵および検証関数の演算処理を信頼することができる。
なお、本願発明はその発明の範囲内において、各実施の形態の自由な組み合わせ、あるいは各実施の形態の任意の構成要素の変形、もしくは各実施の形態において任意の構成要素の省略が可能である。
1,2,3,4,5,6,7 プログラム、10,20,20a,30,40,40a,50,50a,60,70 動的リンクライブラリ、100,101,102,103,104,105,106,107 位置サイズ付ハッシュアレイ、108 統合ハッシュアレイ、
110 コンパイラ、111 リンカー、112 シンボル情報・デバッグ情報削除装置、
121 位置サイズ付ハッシュアレイ作成装置、121a 位置サイズ付ハッシュアレイ作成装置(オブジェクト特定部)、121b 位置サイズ付ハッシュアレイ作成装置(ハッシュ算出部)、121c 位置サイズ付ハッシュアレイ作成装置(三つ組み生成部)、121d 位置サイズ付ハッシュアレイ作成装置(位置サイズ付ハッシュアレイ生成部)、122 統合ハッシュアレイ作成装置、123a,124a 電子署名格納装置、123b,124b 電子署名読出装置、125a 位置サイズ付ハッシュアレイ格納装置、125b 位置サイズ付ハッシュアレイ読出装置、126a 統合ハッシュアレイ格納装置、126b 統合ハッシュアレイ読出装置、127 位置サイズ付ハッシュアレイ検索装置、128 ハッシュ値検証装置、128a ハッシュ値検証装置(オブジェクト特定部)、128b ハッシュ値検証装置(ハッシュ算出部)、128c ハッシュ値検証装置(比較検証部)、129 判定装置、129a 判定装置(比較結果集積部)、129b 判定装置(認証結果出力部)、130 読出済位置サイズ付ハッシュアレイ特定装置、131 オブジェクト検証装置、
150 入力装置、151 起動指示解析装置、152 ライブラリロード指示解析装置、153 プログラム読出装置、154 ライブラリ動的リンク検出装置、155 ライブラリ読出装置、156,156a 動的リンク装置、157 プログラム認証装置、160 アドレス取得指示解析装置、161 アドレスフィックスアップ装置、161a アドレスフィックスアップ装置(動的シンボルテーブル内検索部)、161b アドレスフィックスアップ装置(アドレスマッピング部)、162 アドレス出力装置、
600,601,602,603,604,605,606,607,608 電子署名、
650,670 プログラム起動指示、651,671 ライブラリロード指示、652,672,672a 実行可能イメージ、653,673 プログラム認証結果、654,674 電子署名検証結果、675 ハッシュアレイ認証結果、656,676,677 ハッシュ値検証結果、658,678,679 ライブラリ認証結果、
660,680 アドレス取得指示、661,681 オブジェクト認証結果、
700 秘密鍵、701 公開鍵、702 公開鍵読出装置、710 電子署名作成装置、711 電子署名検証装置。

Claims (41)

  1. プログラムから呼び出される動的リンクライブラリを保護する動的リンクライブラリ保護方法において、
    前記動的リンクライブラリを構成するオブジェクトから、保護すべき保護対象オブジェクトを指定する工程と、
    前記保護対象オブジェクトにハッシュ関数を適用してハッシュ値を算出する工程と、
    前記算出したハッシュ値と、前記保護対象オブジェクトの位置情報およびサイズ情報とを組み合わせたタプルを作成する工程と、
    前記動的リンクライブラリ内の保護対象オブジェクト毎のタプルの集合である位置サイズ付ハッシュアレイを作成する工程とを備えたことを特徴とする動的リンクライブラリ保護方法。
  2. 前記動的リンクライブラリ内のオブジェクトから保護対象オブジェクトを指定する工程は、
    前記動的リンクライブラリを呼び出すプログラムから直接参照されるオブジェクト、および直接的又は間接的に参照されるオブジェクトからの参照により前記プログラムから間接的に参照されるオブジェクトのみを、前記保護対象オブジェクトに指定することを特徴とする請求項1記載の動的リンクライブラリ保護方法。
  3. 公開鍵暗号方式の秘密鍵を用いて、前記位置サイズ付ハッシュアレイの電子署名を作成する工程を備えたことを特徴とする請求項1または請求項2記載の動的リンクライブラリ保護方法。
  4. プログラムから呼び出される動的リンクライブラリを保護する動的リンクライブラリ保護方法において、
    前記動的リンクライブラリと前記呼び出しプログラムとの組毎に請求項3の動的リンクライブラリ保護方法で作成した位置サイズ付ハッシュアレイと位置サイズ付ハッシュアレイの電子署名を、前記動的リンクライブラリと前記呼び出しプログラムとの組に関連付けて格納する工程を備えたことを特徴とする動的リンクライブラリ保護方法。
  5. プログラムから呼び出される動的リンクライブラリを保護する動的リンクライブラリ保護方法において、
    前記プログラムを格納する工程と、
    前記プログラムから呼び出される動的リンクライブラリを格納する工程と、
    保護対象として指定されたプログラムに保護対象であることを印づける工程とを備え、
    前記保護対象として指定されたプログラムおよび当該該プログラムから呼び出される動的リンクライブラリの組に対しては、請求項4記載の動的リンクライブラリの保護方法で位置サイズ付ハッシュアレイおよび電子署名を作成および格納し、
    前記保護対象として指定されていないプログラム、および当該プログラムから呼び出される動的リンクライブラリの組に対しては、位置サイズ付ハッシュアレイと電子署名を作成せず、格納も行わないことを特徴とする動的リンクライブラリ保護方法。
  6. 前記プログラムを保護対象として指定する工程は、
    前記プログラム中に保護必要なオブジェクトを含んでいる場合、または前記プログラムから直接的に参照されるオブジェクトが保護必要である場合、または参照されているオブジェクトから更に参照されるオブジェクトが保護必要である場合に、前記プログラムを保護対象として指定することを特徴とする請求項5の動的リンクライブラリ保護方法。
  7. プログラムから呼び出される動的リンクライブラリを認証する動的リンクライブラリ認証方法において、
    前記動的リンクライブラリ内の保護対象オブジェクト毎のハッシュ値と位置情報とサイズ情報を組み合わせたタプルの集合である位置サイズ付ハッシュアレイ内の、全ての前記タプルから前記動的リンクライブラリ内の保護対象オブジェクトを特定する工程と、
    前記保護対象オブジェクトそれぞれのハッシュ値を算出する工程と、
    前記算出されたハッシュ値と、前記位置サイズ付ハッシュアレイを構成するハッシュ値とを比較検証する工程と、
    前記位置サイズ付ハッシュアレイ内の全てのタプルにおいて、前記比較検証の結果が一致する場合には認証結果を合格と判定し、前記比較検証の結果が不一致になるタプルが存在する場合には認証結果を不合格と判定する工程とを備えたことを特徴とする動的リンクライブラリ認証方法。
  8. 公開鍵を用いて前記位置サイズ付ハッシュアレイを電子署名により検証する工程を備え、
    前記認証結果を判定する工程は、前記電子署名が前記位置サイズ付ハッシュアレイの電子署名として適合し、且つ前記全てのタプルにおいて、前記比較検証の結果が一致する場合には認証結果を合格と判定し、前記電子署名が前記位置サイズ付ハッシュアレイの電子署名として不適合であるか、または前記比較検証の結果に不一致がある場合には認証結果を不合格と判定することを特徴とする請求項7記載の動的リンクライブラリ認証方法。
  9. プログラムから呼び出される動的リンクライブラリを認証する動的リンクライブラリ認証方法において、
    前記動的リンクライブラリと前記呼び出しプログラムとの組に関連付けられた前記位置サイズ付ハッシュアレイおよび前記位置サイズ付ハッシュアレイの電子署名を読出す工程と、
    前記位置サイズ付ハッシュアレイと前記位置サイズ付ハッシュアレイの電子署名のいずれか一方、または両方の読出しに失敗した場合に、認証結果を不合格と判定する工程とを備え、
    前記位置サイズ付ハッシュアレイおよび前記位置サイズ付ハッシュアレイの電子署名の両方の読出しに成功した場合に、請求項8記載の動的リンクライブラリ認証方法を実施することを特徴とする動的リンクライブラリ認証方法。
  10. プログラムから呼び出される動的リンクライブラリを認証する動的リンクライブラリ認証方法において、
    前記プログラムを読出す工程と、
    前記プログラムが保護対象として印ついているか否か判別する工程とを備え、
    前記プログラムが保護対象として印ついている場合に、請求項9記載の動的リンクライブラリ認証方法を実施し、前記プログラムが保護対象と印つけられていない場合に、請求項9の動的リンクライブラリ認証方法の実施をスキップすることを特徴とする動的リンクライブラリ認証方法。
  11. プログラムから呼び出される動的リンクライブラリを保護する動的リンクライブラリ保護装置において、
    前記動的リンクライブラリを構成するオブジェクトから、保護すべき保護対象オブジェクトを指定する手段と、
    前記保護対象オブジェクトにハッシュ関数を適用してハッシュ値を算出する手段と、
    前記保護対象オブジェクトのハッシュ値と、前記保護対象オブジェクトの位置情報およびサイズ情報とを組み合わせたタプルを作成する手段と、
    前記動的リンクライブラリ内の前記保護対象オブジェクトの前記タプルを集めた位置サイズ付ハッシュアレイを作成する手段とを備えたことを特徴とする動的リンクライブラリ保護装置。
  12. 公開鍵暗号方式の秘密鍵を用いて、前記位置サイズ付ハッシュアレイの電子署名を作成する手段を備えたことを特徴とする請求項11記載の動的リンクライブラリ保護装置。
  13. プログラムから呼び出される動的リンクライブラリを認証する動的リンクライブラリ認証装置において、
    前記動的リンクライブラリ内の前記保護対象オブジェクトのハッシュ値と位置情報とサイズ情報を組み合わせたタプルの集合である位置サイズ付ハッシュアレイ内の全てのタプルから、前記動的リンクライブラリ内の保護対象オブジェクトを特定する手段と、
    前記特定した保護対象オブジェクトのハッシュ値を算出する手段と、
    前記算出したハッシュ値と、前記位置サイズ付ハッシュアレイを構成するハッシュ値とを比較検証する手段と、
    前記位置サイズつきハッシュアレイ内の全てのタプルにおいて、前記比較検証の結果が一致する場合には認証結果を合格と判定し、前記比較検証の結果が不一致になるタプルが存在する場合には認証結果を不合格と判定する判定手段を備えたことを特徴とする動的リンクライブラリ認証装置。
  14. 公開鍵と電子署名を用いて、前記位置サイズ付ハッシュアレイを検証する手段を備え、
    判定手段は、前記電子署名が前記位置サイズ付ハッシュアレイの電子署名として適合し、且つ前記全てのタプルにおいて前記比較検証の結果が一致する場合には、認証結果を合格と判定し、前記電子署名が前記位置サイズ付ハッシュアレイの電子署名として不適合であるか、または前記比較検証の結果に不一致がある場合には、認証結果を不合格と判定する判定手段であることを特徴とする請求項13記載の動的リンクライブラリ認証装置。
  15. 動的リンクライブラリを使用するプログラムを実行するプログラム管理システムにおいて、
    前記動的リンクライブラリ内の前記保護対象オブジェクトのハッシュ値と位置情報とサイズ情報を組み合わせたタプルの集合である位置サイズ付ハッシュアレイと当該位置サイズ付ハッシュアレイの電子署名を前記プログラムと前記動的リンクライブラリの組に関連付けて格納する手段と、前記プログラムと前記動的リンクライブラリの組に関連付いた位置サイズ付ハッシュアレイおよび当該位置サイズ付ハッシュアレイの電子署名を読出す手段とを備えたアレイ記憶装置と、
    前記動的リンクライブラリを格納する手段と、前記動的リンクライブラリを読出す手段とを備えたライブラリ記憶装置と、
    前記プログラムを格納する手段と、前記プログラムを読出す手段とを備えたプログラム記憶装置と、
    前記位置サイズ付ハッシュアレイ内の全てのタプルから、前記動的リンクライブラリ内の保護対象オブジェクトを特定する手段と、前記特定した保護対象オブジェクトのハッシュ値を算出する手段と、前記算出したハッシュ値と、前記位置サイズ付ハッシュアレイ内のタプルを構成するハッシュ値とを比較検証する手段と、公開鍵と電子署名を用いて、前記位置サイズ付ハッシュアレイを検証する手段と、認証結果を判定する判定手段とを備えた動的リンクライブラリ認証装置と、
    前記プログラムの起動指示を受け取る入力手段と、当該起動指示からプログラム識別子を抽出する解析手段と、読出したプログラムについてどのライブラリの動的リンクが必要かを検出する手段と、前記動的リンクライブラリ認証装置の判定した認証結果が合格である場合に起動時動的リンクを実施し、前記動的リンクライブラリ認証装置の判定した認証結果が不合格である場合に起動時動的リンクを中止する動的リンク手段とを備えるプログラム処理装置とを備えることを特徴とするプログラム管理システム。
  16. 動的リンクライブラリを使用するプログラムを実行するプログラム管理システムにおいて、
    前記動的リンクライブラリ内の前記保護対象オブジェクトのハッシュ値と位置情報とサイズ情報を組み合わせたタプルの集合である位置サイズ付ハッシュアレイと当該位置サイズ付ハッシュアレイの電子署名を前記プログラムと前記動的リンクライブラリの組に関連付けて格納する手段と、前記プログラムと前記動的リンクライブラリの組に関連付いた位置サイズ付ハッシュアレイおよび当該位置サイズ付ハッシュアレイの電子署名を読出す手段とを備えたアレイ記憶装置と、
    前記動的リンクライブラリを格納する手段と、前記動的リンクライブラリを読出す手段とを備えたライブラリ記憶装置と、
    前記プログラムを格納する手段と、前記プログラムを読出す手段とを備えたプログラム記憶装置と、
    前記位置サイズ付ハッシュアレイ内の全てのタプルから、前記動的リンクライブラリ内の保護対象オブジェクトを特定する手段と、前記特定した保護対象オブジェクトのハッシュ値を算出する手段と、前記算出したハッシュ値と、前記位置サイズ付ハッシュアレイ内のタプルを構成するハッシュ値とを比較検証する手段と、公開鍵と電子署名を用いて、前記位置サイズ付ハッシュアレイを検証する手段と、認証結果を判定する判定手段とを備えた動的リンクライブラリ認証装置と、
    前記プログラムからライブラリロード指示を受け取る入力手段と、当該ロード指示からライブラリ識別子を抽出する解析手段と、前記動的リンクライブラリ認証装置の判定した認証結果が合格である場合に実行中動的リンクを実施し、前記動的リンクライブラリ認証装置の判定した認証結果が不合格である場合に実行中動的リンクを中止する動的リンク手段とを備えるプログラム処理装置とを備えることを特徴とするプログラム管理システム。
  17. 前記プログラム処理装置は、
    前記プログラムからのアドレス取得指示を受け取る入力手段と、
    前記アドレス取得指示から、オブジェクト名とライブラリ識別子を抽出する解析手段と、
    前記ライブラリ識別子の指すロード済みライブラリの動的シンボルテーブルから、前記オブジェクト名に該当するオブジェクトのエントリを検索し、オブジェクトの位置情報とサイズ情報を取得する検索手段と、
    前記ライブラリとプログラムの組に対応した位置サイズ付ハッシュアレイに、前記オブジェクトの位置情報とサイズ情報で指定されるオブジェクトが登録されているかどうかを判定するオブジェクト検証手段と、
    前記オブジェクトが登録されており、且つ前記ライブラリが認証済みである場合にはアドレスを出力し、前記オブジェクトが登録されていない、または前記ライブラリが認証されていない場合にはアドレスの出力を中止するアドレス出力手段とを備えたことを特徴とする請求項16記載のプログラム管理システム。
  18. 動的リンクライブラリを使用するプログラムを実行するプログラム管理システムにおいて、
    前記動的リンクライブラリを構成するオブジェクトから、保護すべき保護対象オブジェクトを指定する手段と、前記保護対象オブジェクトにハッシュ関数を適用してハッシュ値を算出する手段と、前記保護対象オブジェクトのハッシュ値と、前記保護対象オブジェクトの位置情報およびサイズ情報とを組み合わせたタプルを作成する手段と、前記位置サイズ付ハッシュアレイを作成する手段と、公開鍵暗号方式の秘密鍵を用いて、前記位置サイズ付ハッシュアレイの電子署名を作成する手段とを備えた動的リンクライブラリ保護装置
    を備えることを特徴とする請求項15から請求項17のうちのいずれか1項記載のプログラム管理システム。
  19. プログラムから呼び出される動的リンクライブラリを保護する動的リンクライブラリ保護方法において、
    前記プログラムから直接的にあるいは間接的に呼び出されるライブラリのそれぞれについて、請求項2記載の動的リンクライブラリの保護方法で作成する位置サイズ付ハッシュアレイとライブラリ識別子をペアにする工程と、
    前記プログラムについて作成されたそれぞれの前記位置サイズ付ハッシュアレイと前記ライブラリ識別子のペアの集合である統合ハッシュアレイを作成する工程とを備えることを特徴とする動的リンクライブラリ保護方法。
  20. 公開鍵暗号方式の秘密鍵を用いて、前記統合ハッシュアレイの電子署名を作成する工程を備えたことを特徴とする請求項19記載の動的リンクライブラリ保護方法。
  21. プログラムから呼び出される動的リンクライブラリを保護する動的リンクライブラリ保護方法において、
    前記呼び出しプログラム毎に請求項20の動的リンクライブラリ保護方法で作成した統合ハッシュアレイと統合ハッシュアレイの電子署名を、前記呼び出しプログラムに関連付けてアレイ記憶装置に格納する工程を備えたことを特徴とする動的リンクライブラリ保護方法。
  22. プログラムから呼び出される動的リンクライブラリを保護する動的リンクライブラリ保護方法において、
    前記プログラムを格納する工程と、
    保護対象として指定されたプログラムに保護対象であることを印づける工程とを備え、
    保護対象として指定されたプログラム対して、請求項21記載の動的リンクライブラリの保護方法で前記統合ハッシュアレイと前記電子署名を作成し格納する、
    保護対象として指定されていないプログラムに対しては、前記統合ハッシュアレイと前記電子署名を作成せず、格納も行わないことを特徴とする動的リンクライブラリ保護方法。
  23. プログラムから呼び出される動的リンクライブラリを認証する動的リンクライブラリ認証方法において、
    前記プログラムについて作成されたそれぞれの、前記動的リンクライブラリ内の保護対象オブジェクト毎のハッシュ値と位置情報とサイズ情報を組み合わせたタプルの集合である位置サイズ付ハッシュアレイと前記ライブラリ識別子のペアの集合である統合ハッシュアレイ内から、前記動的リンクライブラリの識別子とペアにされた前記位置サイズ付ハッシュアレイを検索する工程と、
    前記位置サイズ付ハッシュアレイ内の全てのタプルから前記動的リンクライブラリ内の保護対象オブジェクトを特定する工程と、
    前記保護オブジェクトそれぞれのハッシュ値を算出する工程と、
    前記算出されたハッシュ値と、前記位置サイズ付ハッシュアレイを構成するハッシュ値とを比較検証する工程と、
    前記動的リンクライブラリの識別子を含むペアが前記統合ハッシュアレイの中に存在しない場合に認証不合格と判定し、
    前記動的リンクライブラリの識別子を含むペアが前記統合ハッシュアレイの中に存在する場合であり、且つ前記ペアを構成する位置サイズ付ハッシュアレイ内の全てのタプルについて前記比較検証の結果が一致する場合には認証結果を合格と判定し、前記比較検証の結果が不一致になるタプルが存在する場合には認証結果を不合格と判定する工程とを備えたことを特徴とする動的リンクライブラリ認証方法。
  24. 公開鍵を用いて、前記統合ハッシュアレイを電子署名により検証する工程を備え、
    前記認証結果を判定する工程は、前記電子署名が前記統合ハッシュアレイの電子署名として適合し、且つ前記動的リンクライブラリの識別子を含むペアが前記統合ハッシュアレイの中に存在し、且つ前記ペアを構成する位置サイズ付ハッシュアレイ内の全てのタプルにおいて、前記比較検証の結果が一致する場合には認証結果を合格と判定し、前記電子署名が前記統合ハッシュアレイの電子署名として不適合であるか、または前記動的リンクライブラリの識別子を含むペアが前記統合ハッシュアレイの中に存在しないか、または前記ペアを構成する位置サイズ付ハッシュアレイ内のいずれかのタプルにおいて、前記比較検証の結果に不一致がある場合には認証結果を不合格と判定することを特徴とする請求項23記載の動的リンクライブラリ認証方法。
  25. プログラムから呼び出される動的リンクライブラリを認証する動的リンクライブラリ認証方法において、
    前記呼び出しプログラムに関連付けられた前記統合ハッシュアレイと前記統合ハッシュアレイの電子署名を読出す工程と、
    前記統合ハッシュアレイと前記統合ハッシュアレイの電子署名のいずれか一方、または両方の読出しに失敗した場合に、認証結果を不合格と判定する工程とを備え、
    前記統合ハッシュアレイと前記統合ハッシュアレイの電子署名の両方の読出しに成功した場合に、請求項24記載の動的リンクライブラリ認証方法を実施することを特徴とする動的リンクライブラリ認証方法。
  26. 前記プログラムを読出す工程と、
    前記プログラムが保護対象として印ついているか否か判別する工程とを備え、
    前記プログラムが保護対象として印ついている場合に、請求項25記載の動的リンクライブラリ認証方法を実施することを特徴とする動的リンクライブラリ認証方法。
  27. プログラムから呼び出される動的リンクライブラリを保護する動的リンクライブラリ保護装置であって、
    前記動的リンクライブラリ内の保護対象オブジェクト毎のタプルの集合である位置サイズ付ハッシュアレイを前記動的リンクライブラリの識別子と共にペアにする手段と、
    前記プログラムから使用する動的リンクライブラリについて、前記ペアを集めた統合ハッシュアレイを作成する手段とを備えた動的リンクライブラリ保護装置。
  28. 公開鍵暗号方式の秘密鍵を用いて前記統合ハッシュアレイの電子署名を作成する手段を備えたことを特徴とする請求項27記載の動的リンクライブラリ保護装置。
  29. プログラムから呼び出される動的リンクライブラリを認証する動的リンクライブラリ認証装置において、
    前記プログラムについて作成されたそれぞれの、前記動的リンクライブラリ内の保護対象オブジェクト毎のタプルの集合である位置サイズ付ハッシュアレイと前記ライブラリ識別子のペアの集合である統合ハッシュアレイ内から、前記動的リンクライブラリの識別子とペアにされた前記位置サイズ付ハッシュアレイを検索する手段と、
    前記位置サイズ付ハッシュアレイ内の全てのタプル内から前記動的リンクライブラリ内の保護対象オブジェクトを特定する手段と、
    前記保護オブジェクトのハッシュ値を算出する手段と、
    前記算出されたハッシュ値を、前記位置サイズ付きハッシュアレイを構成するハッシュ値とを比較検証する手段と、
    前記動的リンクライブラリの識別子を含むペアが前記統合ハッシュアレイの中に存在しない場合に認証不合格と判定し、前記動的リンクライブラリの識別子を含むペアが前記統合ハッシュアレイの中に存在する場合であり、且つ前記ペアを構成する位置サイズ付ハッシュアレイ内の全てのタプルについて前記比較検証の結果が一致する場合には認証結果を合格と判定し、前記比較検証の結果が不一致になるタプルが存在する場合には認証結果を不合格と判定する判定手段を備えたことを特徴とする動的リンクライブラリ認証装置。
  30. 公開鍵および電子署名を用いて前記統合ハッシュアレイを検証する手段を備え、
    判定手段は、前記電子署名が前記統合ハッシュアレイの電子署名として適合し、且つ前記動的リンクライブラリの識別子を含むペアが前記統合ハッシュアレイの中に存在し、かつ前記ペアを構成する位置サイズ付ハッシュアレイ内の全てのタプルにおいて、前記比較検証の結果が一致する場合には認証結果を合格と判定し、前記電子署名が前記統合ハッシュアレイの電子署名として不適合であるか、または前記動的リンクライブラリの識別子を含むペアが前記統合ハッシュアレイの中に存在しないか、または前記ペアを構成する位置サイズ付ハッシュアレイ内のいずれかのタプルにおいて、前記比較検証の結果に不一致がある場合には認証結果を不合格と判定することを特徴とする請求項29記載の動的リンクライブラリ認証装置。
  31. 動的リンクライブラリを使用するプログラムを実行するプログラム管理システムにおいて、
    前記プログラムについて作成されたそれぞれの、前記動的リンクライブラリ内の保護対象オブジェクト毎のタプルの集合である位置サイズ付ハッシュアレイと前記ライブラリ識別子のペアの集合である統合ハッシュアレイと当該統合ハッシュアレイの電子署名を、前記プログラムに関連付けて格納する手段と、前記プログラムに関連付いた、統合ハッシュアレイと当該統合ハッシュアレイの電子署名を読出す手段とを備えたアレイ記憶装置と、
    前記動的リンクライブラリを格納する手段と、前記動的リンクライブラリを読出す手段とを備えたライブラリ記憶装置と、
    前記プログラムを格納する手段と、前記プログラムを読出す手段とを備えるプログラム記憶装置と、
    前記動的リンクライブラリの識別子とペアにされた位置サイズ付ハッシュアレイを統合ハッシュアレイ内の中から検索する手段と、前記位置サイズ付ハッシュアレイ内の全てのタプルから前記ライブラリ内の保護対象オブジェクトを特定する手段と、前記保護対象オブジェクトのハッシュ値を算出する手段と、前記算出されたハッシュ値を、前記位置サイズ付きハッシュアレイ内のタプルを構成するハッシュ値とを比較検証する手段と、公開鍵および電子署名を用いて前記統合ハッシュアレイを検証する手段と、認証結果を判定する判定手段を備え、前記統合ハッシュアレイを検証した結果をハッシュアレイ認証結果として出力し、前記比較検証の結果をライブラリ認証結果として出力する動的リンクライブラリ認証装置と、
    前記プログラムの起動指示を受け取る入力手段と、当該起動指示からプログラム識別子を抽出する解析手段と、読出したプログラムについてどのライブラリの動的リンクが必要かを検出する手段と、前記動的リンクライブラリ認証装置の出力するハッシュアレイ認証結果とライブラリ認証結果が共に合格である場合に起動時動的リンクを実施し、前記動的リンクライブラリ認証装置の出力するハッシュアレイ認証結果とライブラリ認証結果のいずれかまたは両方が不合格である場合に起動時動的リンクを中止する動的リンク手段とを備えるプログラム処理装置とを備えることを特徴とするプログラム管理システム。
  32. 動的リンクライブラリを使用するプログラムを実行するプログラム管理システムにおいて、
    前記プログラム処理装置は、
    前記プログラムからのライブラリロード指示を受け取る入力手段と、
    当該ライブラリロード指示からライブラリ識別子を抽出する解析手段と、
    前記動的リンクライブラリ認証装置の出力するライブラリ認証結果が合格である場合に実行中動的リンクを実施し、前記動的リンクライブラリ認証装置の出力するライブラリ認証結果が不合格である場合に実行中動的リンクを中止する動的リンク手段とを備えたことを特徴とする請求項31記載のプログラム管理システム。
  33. 前記プログラム処理装置は、
    前記プログラムからのアドレス取得指示を受け取る入力手段と、
    当該アドレス取得指示からオブジェクト名とライブラリ識別子を抽出する解析手段と、
    当該該ライブラリ識別子の指すロード済み動的リンクライブラリの動的シンボルテーブルから、前記オブジェクト名に該当するオブジェクトのエントリを検索し、前記オブジェクトの位置情報およびサイズ情報を取得する検索手段と、
    前記プログラムに対応した統合ハッシュアレイに、前記ライブラリ識別子とペアになった位置サイズ付ハッシュアレイが登録されているか否かを判別し、位置サイズ付ハッシュアレイが登録されていなければ前記オブジェクトが登録されていないと判定し、位置サイズ付ハッシュアレイが登録されていれば更に、該当の位置サイズ付ハッシュアレイに、前記オブジェクトの位置情報とサイズ情報に基づいて指定されるオブジェクトが登録されているか否かを判定するオブジェクト検証手段と、
    前記オブジェクトが登録されており、且つ前記動的リンクライブラリが認証済みである場合にはアドレスを出力し、登録されていない、または前記動的リンクライブラリが認証されていない場合にはアドレスの出力を中止するアドレス出力手段とを備えたことを特徴とする請求項32記載のプログラム管理システム。
  34. 動的リンクライブラリを使用するプログラムを実行するプログラム管理システムにおいて、
    前記動的リンクライブラリを構成するオブジェクトから、保護すべき保護対象オブジェクトを指定する手段と、前記保護対象オブジェクトにハッシュ関数を適用してハッシュ値を算出する手段と、前記保護対象オブジェクトのハッシュ値と、前記保護対象オブジェクトの位置情報およびサイズ情報とを組み合わせたタプルを作成する手段と、前記動的リンクライブラリ内の前記保護対象オブジェクトの前記タプルを集めた位置サイズ付ハッシュアレイを作成する手段とを備えたことを特徴とする動的リンクライブラリ保護装置と、
    前記位置サイズ付ハッシュアレイを前記動的リンクライブラリの識別子と共にペアにする手段と、前記プログラムから使用する動的リンクライブラリについて、前記ペアを集めた統合ハッシュアレイを作成する手段と、公開鍵暗号方式の秘密鍵を用いて前記統合ハッシュアレイの電子署名を作成する手段とを備えた動的リンクライブラリ保護装置と、
    を備えることを特徴とする請求項31から請求項33のうちのいずれか1項記載のプログラム管理システム。
  35. 前記プログラム記憶装置は、前記格納されているプログラムに保護必要か否かを印つける手段と、前記プログラムに保護必要と印つけられているかどうかを得る手段とをさらに備えたプログラム記憶装置であり、
    前記プログラム処理装置は、読出されたプログラムが保護必要と印つけられているか否かを判定する手段をさらに備え、プログラムが保護必要と印つけられている場合に請求項9記載の動的リンクライブラリ認証方法を実施して動的リンクを実施し、プログラムが保護必要と印つけられていない場合に請求項9記載の動的リンクライブラリ認証方法の実施をスキップして動的リンクを実施するプログラム処理装置であることを特徴とする請求項15から請求項18のうちのいずれか1項記載のプログラム管理システム。
  36. 前記プログラム記憶装置は、格納されているプログラムに保護必要か否か印つける手段と、保護必要と印付けられているかどうかを得る手段とを備えたプログラム記憶装置であり、
    前記プログラム処理装置は、読出されたプログラムが保護必要と印つけられていたものかどうかを判定する手段を備え、プログラムが保護必要と印付けられている場合に請求項25記載の動的リンクライブラリ認証方法の認証を実施し、プログラムが保護必要と印つけられていない場合に請求項25記載の動的リンクライブラリ認証方法の認証をスキップして動的リンクを実施するプログラム処理装置であることを特徴とする請求項31から請求項34のうちのいずれか1項記載のプログラム管理システム。
  37. プログラムおよび前記プログラムから呼び出される動的リンクライブラリを保護するプログラムおよび動的リンクライブラリ保護方法において、
    保護対象と印づけたプログラムに公開鍵暗号の秘密鍵を用いて電子署名を作成する工程と、
    前記プログラムの電子署名を前記プログラムに関連付けて格納する工程と、
    請求項5または請求項6または請求項22記載の動的リンクライブラリ保護方法を実施する工程とを備えることを特徴とするプログラムおよび動的リンクライブラリ保護方法。
  38. プログラムおよび前記プログラムから呼び出される動的リンクライブラリを認証するプログラムおよび動的リンクライブラリ認証方法において、
    請求項10または請求項26記載の動的リンクライブラリ認証方法を実施する工程と、
    前記プログラムが保護対象として印ついている場合には、前記プログラムに関連づいた電子署名を読出す工程と、
    公開鍵を用いて前記プログラムを前記電子署名により検証する工程とを備え、
    前記電子署名の読出しに失敗した場合には認証結果を不合格とし、前記電子署名が読出しに成功し、且つ前記プログラムの署名として適合している場合には認証結果を合格とし、前記電子署名が読出しに成功しても、前記プログラムの署名として不適合の場合には認証結果を不合格とすることを特徴とするプログラムおよび動的リンクライブラリ認証方法。
  39. 前記プログラムの電子署名を格納する手段と、前記プログラムの電子署名を読出す手段とを備えるプログラム電子署名記憶装置と、
    公開鍵暗号方式の秘密鍵を用いて前記プログラムの電子署名を作成する手段を備えるプログラム保護装置と、
    公開鍵を用いて前記プログラムを前記電子署名により検証する手段を備えるプログラム検証装置とを備え、
    請求項37記載のプログラムおよび動的リンクライブラリ保護方法により前記プログラムおよび前記動的リンクライブラリを保護し、請求項38記載のプログラムおよび動的リンクライブラリ認証方法で前記プログラム及び動的リンクライブラリを認証することを特徴とする請求項15から請求項18および請求項31から請求項36のうちのいずれか1項記載のプログラム管理システム。
  40. 前記ライブラリ内のオブジェクトを保護対象として指定する工程は、
    オブジェクト名を明に指定し、さらに前記ライブラリのシンボルテーブルを参照して、前記オブジェクト名から前記オブジェクトの位置情報およびサイズ情報を得る工程を備えたことを特徴とする請求項1から請求項6のうちのいずれか1項記載の動的リンクライブラリ保護方法。
  41. 前記動的リンクライブラリを構成するオブジェクトから、保護すべき保護対象オブジェクトを指定する手段は、
    オブジェクト名を明に指定し、さらに前記ライブラリのシンボルテーブルを参照して、前記オブジェクト名から前記オブジェクトの位置情報およびサイズ情報を得る手段を備えたことを特徴とする請求項11または請求項12記載の動的リンクライブラリ保護装置。
JP2012028350A 2012-02-13 2012-02-13 動的リンクライブラリ保護方法、動的リンクライブラリ認証方法、動的リンクライブラリ保護装置、動的リンクライブラリ認証装置、プログラム管理システム、プログラムおよび動的リンクライブラリ保護方法、プログラムおよび動的リンクライブラリ認証方法 Pending JP2015084006A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2012028350A JP2015084006A (ja) 2012-02-13 2012-02-13 動的リンクライブラリ保護方法、動的リンクライブラリ認証方法、動的リンクライブラリ保護装置、動的リンクライブラリ認証装置、プログラム管理システム、プログラムおよび動的リンクライブラリ保護方法、プログラムおよび動的リンクライブラリ認証方法
PCT/JP2013/052746 WO2013121951A1 (ja) 2012-02-13 2013-02-06 プログラム管理システム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012028350A JP2015084006A (ja) 2012-02-13 2012-02-13 動的リンクライブラリ保護方法、動的リンクライブラリ認証方法、動的リンクライブラリ保護装置、動的リンクライブラリ認証装置、プログラム管理システム、プログラムおよび動的リンクライブラリ保護方法、プログラムおよび動的リンクライブラリ認証方法

Publications (1)

Publication Number Publication Date
JP2015084006A true JP2015084006A (ja) 2015-04-30

Family

ID=48984063

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012028350A Pending JP2015084006A (ja) 2012-02-13 2012-02-13 動的リンクライブラリ保護方法、動的リンクライブラリ認証方法、動的リンクライブラリ保護装置、動的リンクライブラリ認証装置、プログラム管理システム、プログラムおよび動的リンクライブラリ保護方法、プログラムおよび動的リンクライブラリ認証方法

Country Status (2)

Country Link
JP (1) JP2015084006A (ja)
WO (1) WO2013121951A1 (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2019151013A1 (ja) * 2018-02-02 2019-08-08 日本電気株式会社 情報処理装置、情報処理方法及び記録媒体
JP2020160946A (ja) * 2019-03-27 2020-10-01 キヤノン株式会社 情報処理装置、及び情報処理装置の制御方法、プログラム
WO2021044578A1 (ja) * 2019-09-05 2021-03-11 三菱電機株式会社 情報処理装置、情報処理方法、及び情報処理プログラム

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
SG11201704940PA (en) * 2014-12-24 2017-07-28 Banco De México Method for certifying and authenticating security documents based on a measure of the relative position variations of the different processes involved in its manufacture
WO2018134925A1 (ja) * 2017-01-18 2018-07-26 富士通株式会社 データ送受信方法、データ送信装置、データ受信装置、データ送信プログラム、データ受信プログラム及びデータ送受信システム
WO2021059475A1 (ja) * 2019-09-27 2021-04-01 日本電気株式会社 ホワイトリスト生成装置、ホワイトリスト生成方法、及び、プログラムが記録された非一時的なコンピュータ可読媒体
CN116204429B (zh) * 2023-02-21 2023-12-08 深圳市道旅旅游科技股份有限公司 一种代码组织及其调试方法、系统及存储介质

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2675032B2 (ja) * 1987-12-21 1997-11-12 株式会社日立製作所 伝票圧縮文の作成方法
US6976165B1 (en) * 1999-09-07 2005-12-13 Emc Corporation System and method for secure storage, transfer and retrieval of content addressable information
AU2000238402B2 (en) * 2000-04-20 2005-04-28 Yutaka Yasukura Electronic information inquiring method
US7103779B2 (en) * 2003-09-18 2006-09-05 Apple Computer, Inc. Method and apparatus for incremental code signing

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2019151013A1 (ja) * 2018-02-02 2019-08-08 日本電気株式会社 情報処理装置、情報処理方法及び記録媒体
JPWO2019151013A1 (ja) * 2018-02-02 2021-01-07 日本電気株式会社 情報処理装置、情報処理方法及びプログラム
JP7074146B2 (ja) 2018-02-02 2022-05-24 日本電気株式会社 情報処理装置、情報処理方法及びプログラム
US11449617B2 (en) 2018-02-02 2022-09-20 Nec Corporation Information processing device, information processing method, and storage medium
JP2020160946A (ja) * 2019-03-27 2020-10-01 キヤノン株式会社 情報処理装置、及び情報処理装置の制御方法、プログラム
US11586723B2 (en) 2019-03-27 2023-02-21 Canon Kabushiki Kaisha Information processing apparatus, control method for information processing apparatus, and storage medium
JP7262269B2 (ja) 2019-03-27 2023-04-21 キヤノン株式会社 情報処理装置、及び情報処理装置の制御方法、プログラム
WO2021044578A1 (ja) * 2019-09-05 2021-03-11 三菱電機株式会社 情報処理装置、情報処理方法、及び情報処理プログラム

Also Published As

Publication number Publication date
WO2013121951A1 (ja) 2013-08-22

Similar Documents

Publication Publication Date Title
WO2013121951A1 (ja) プログラム管理システム
Zhang et al. Precise and accurate patch presence test for binaries
AU2010364976B2 (en) Repairing corrupt software
US7962952B2 (en) Information processing apparatus that executes program and program control method for executing program
CN105631337B (zh) 控制机器代码的本机图像访问操作系统资源的系统及方法
KR102044046B1 (ko) 텔레메트리 파일 해시 및 충돌 검출 기법
US20160098555A1 (en) Program code attestation circuitry, a data processing apparatus including such program code attestation circuitry and a program attestation method
CN114600420A (zh) 修剪防篡改数据存储装置中的条目
US8060747B1 (en) Digital signatures for embedded code
JP2011511331A (ja) セキュアブート方法及びセキュアブート装置
US20220138325A1 (en) Secure enclave pathing configuration for data confidence fabrics
CN109255232B (zh) 一种软件加载方法以及软件加载装置
Woo et al. {V0Finder}: Discovering the Correct Origin of Publicly Reported Software Vulnerabilities
CN105701405B (zh) 对软件程序集的本机图像进行防病毒检查的系统和方法
CN111966630B (zh) 文件类型的检测方法、装置、设备和介质
CN112099909B (zh) 一种虚拟机内存度量方法、装置、处理器芯片及系统
JP2005293109A (ja) ソフトウェア実行管理装置、ソフトウェア実行管理方法、及び制御プログラム
US8650645B1 (en) Systems and methods for protecting proprietary data
US11722324B2 (en) Secure and accountable execution of robotic process automation
CN103136474A (zh) 检测文件的方法和装置
Detken et al. Software-design for internal security checks with dynamic integrity measurement (DIM)
He et al. Automatically identifying cve affected versions with patches and developer logs
CN115221051B (zh) 一种用于数据api执行过程验证的程序插桩方法及装置
JP6884652B2 (ja) ホワイトリスト管理システムおよびホワイトリスト管理方法
Cam et al. Detect repackaged android applications by using representative graphs