説明

セキュアモジュールおよび情報処理装置

【課題】ハードウェアスキャンに対応しないインターフェースであっても、クラッカーに容易に無効化されないスキャンを実現すること。
【解決手段】セキュアモジュール110は、定期的にまたは不定期に、スキャンプログラムSPをランダムに自動生成/更新する生成プログラムGPを実行する。生成プログラムGPによりランダムに変化させるのは、たとえば、スキャン対象領域130、スキャン対象アドレスの順序、スキャン結果演算、演算したスキャン結果をセキュアモジュール110に戻す演算処理、スキャンプログラムSPコード、情報処理装置100のメモリ上の位置などが挙げられる。この生成プログラムGPによるスキャンプログラムSPのランダム生成/更新処理は、セキュアモジュール110内で実行されるため、生成過程を覗き見されたり、解析されたり、その結果無効化されることはない。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報を保護するセキュアモジュールおよび情報処理装置に関する。
【背景技術】
【0002】
近年、ブロードバンドインターネットやディジタル放送が普及しつつあり、配信されたコンテンツ(主にディジタルAV(Audio Visual)コンテンツ)の安全性を保障する権利保護技術がクローズアップされている。この中でも特にPC(パーソナルコンピュータ)はオープンアーキテクチャーである。したがって、AVコンテンツを処理するメモリ上のプログラム(ソフトウェア)は、誰もが覗き見し、解析し、書き換えることが可能な空間に存在するため、安全性の実現は困難とされている。
【0003】
すなわち、AVコンテンツは、インターネット上あるいは放送ネットワーク上に存在する時は、暗号化されているので安全だが、それをPCで受信し処理する際はコンテンツを復号する必要があり、復号したコンテンツを違法コピーされる可能性がある。PCのメモリ上のプログラムは、誰でも覗き見し、書き換えることが可能なので、当該プログラムを解析し、復号されたAVコンテンツを無断でハードディスクなどに書き込むように改造することが原理的に可能である。
【0004】
一方で、PCは、ブロードバンドインターネットの主要な出入り口であり、そこで安全性を保証できれば、インターネット全体でのディジタルAVコンテンツの配信が可能になり意義は大きい。
【0005】
従来は、PCでのプログラムの保護は、安全性を保障するアルゴリズムの秘匿化、さらにアルゴリズムの解析を困難にする難読化(プログラムを限りなく複雑にし、プログラムの違法書換えの第一ステップであるプログラム解析を限りなく困難にする)が主流であった。
【0006】
しかしプログラムは一旦、PCのメインメモリ上に展開してしまえば、先ほど述べたように覗き見可能な空間のためコピーすることは容易であり、コピーした結果を時間かけて解析することで、権利保護アルゴリズムを解析できる。非常に安全性に不安のある権利保護システムと考えられ、放送等公共性の高いシステムで一度解析されたことによる被害を考えると採用は困難である。
【0007】
また、近年、安全性の保証されたセキュアモジュール(耐タンパモジュール)を信頼性拠点として、セキュアモジュールがPCのメモリ領域に展開されたプログラムの改ざん(違法な書換え)ができないようにプログラムをリアルタイムにスキャンし、プログラムが書き換えられないようにすることでプログラムの安全性を担保する手法も考えられている(たとえば、下記特許文献1、2を参照。)。
【0008】
この信頼性拠点が安全性の保証されたセキュアモジュール(耐タンパモジュール、基本的にハードウェア)であり、このハードウェアを無効化することが非常に困難なため、安全性は格段に向上する。なお、上述した特許文献1では、セキュアモジュールがプログラムをリアルタイム・スキャンする場合、「スキャン機能の無効化」を阻止するため、DMA(Direct Memory Access)を用いたDMAスキャンと呼ばれるハードウェアスキャンが用いられている。
【先行技術文献】
【特許文献】
【0009】
【特許文献1】特開2004−129227号公報
【特許文献2】特開2003−198527号公報
【発明の概要】
【発明が解決しようとする課題】
【0010】
上述したハードウェアスキャンは、それが適用可能なシステムでしか適用できない。すなわち、セキュアモジュールとPCの接続インターフェースがハードウェアスキャン可能なインターフェースであることが前提となる。具体的には、PCI(Peripheral Component Interconnect)インターフェースやPCIe(PCI Express)インターフェースに限定される。
【0011】
一方で、一般的に、PCとモジュールの間の接続で最も一般的なインターフェースはUSB(Universal Serial Bus)である。USBは、ハードウェアスキャン機能をサポートしていないため、ハードウェアスキャンを適用することができない。
【0012】
具体的には、USBでは、PC上のUSB対応ソフトウェア(ドライバなど)にすべての処理を依頼する必要がある。たとえば、USBインターフェースを持つモジュールがスキャンを依頼する場合は、USBインターフェースを持つモジュールがPC上のUSB対応のソフトウェアにPCのメモリのスキャンを依頼する。つぎに、依頼を受けたUSB対応ソフトウェアがスキャンを実行する。そして、そのスキャン結果を、USBインターフェースを持つモジュールに返すことになる。この際、PC上のUSB対応のソフトウェアがクラッカーに違法改ざんされ、スキャン機能が無効化されるおそれがある。
【0013】
本発明は、上述した従来技術による問題点を解消するため、ハードウェアスキャンに対応しないインターフェースであっても、容易に無効化されないスキャンを実現するセキュアモジュールおよび情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【0014】
上述した課題を解決し、目的を達成するため、対象プログラムに固有なコードを記憶しておき、前記対象プログラムに固有なコードを生成するスキャン処理を接続先装置で実行させるスキャンプログラムを生成する生成処理と、前記固有なコードと同一コードの生成を維持したまま前記スキャンプログラムの内容をランダムに更新する更新処理とを実行し、前記接続先装置内の特定の記憶領域に記憶されている前記対象プログラムに対し前記スキャンプログラムが前記接続先装置で実行された場合、前記接続先装置での前記スキャンプログラムの実行結果と記憶された前記コードとに基づいて、前記特定の記憶領域に記憶されている前記対象プログラムの正当性を認証するセキュアモジュールまたは当該セキュアモジュールを備えた情報処理装置が、一例として提供される。
【発明の効果】
【0015】
本発明にかかるセキュアモジュールおよび情報処理装置によれば、ハードウェアスキャンに対応しないインターフェースであっても、クラッカーに容易に無効化されないスキャンを実現することができるという効果を奏する。
【図面の簡単な説明】
【0016】
【図1】情報処理装置のハードウェア構成例を示すブロック図である。
【図2】セキュアモジュールのハードウェア構成例を示すブロック図である。
【図3】情報処理装置での動作概要例を示す説明図である。
【図4】対象プログラムTPの実行例を示す説明図である。
【図5】スキャンプログラムの具体例1を示す説明図である。
【図6】スキャンプログラムの具体例2を示す説明図である。
【図7】スキャンプログラムの具体例3を示す説明図である。
【図8】スキャンプログラムの具体例4を示す説明図である。
【図9】スキャンプログラム生成/更新処理の手順を示すフローチャートである。
【図10】図9に示したスキャンプログラム生成処理(ステップS903)の詳細な処理手順例を示すフローチャート(前半)である。
【図11】図9に示したスキャンプログラム生成処理(ステップS903)の詳細な処理手順例を示すフローチャート(後半)である。
【図12】スキャンプログラム更新処理(ステップS908)の詳細な処理手順例を示すフローチャート(その1)である。
【図13】スキャンプログラム更新処理(ステップS908)の詳細な処理手順例を示すフローチャート(その2)である。
【図14】対象プログラムの加工の概要を示す説明図である。
【図15】加工プログラムによる対象プログラムの加工例1を示す説明図である。
【図16】加工プログラムによる対象プログラムの加工例2を示す説明図である。
【図17A】加工プログラムによる対象プログラムの加工例3を示す説明図である。
【図17B】加工プログラムによる対象プログラムの加工例4を示す説明図である。
【図18】対象プログラムTP加工処理の処理手順例を示すフローチャートである。
【図19】図18に示したシャッフリング処理(ステップS1811)の詳細な処理手順例を示すフローチャートである。
【図20】対象プログラムTPの加工例を示す説明図である。
【発明を実施するための形態】
【0017】
以下に添付図面を参照して、この発明にかかるセキュアモジュールおよび情報処理装置の実施の形態を詳細に説明する。情報処理装置は、たとえば、パーソナル・コンピュータ、据置型ゲーム機、テレビ、ハードディスクレコーダや、携帯型端末(携帯電話機、スマートフォン、携帯ゲーム機、電子辞書、タブレット型端末)などのコンピュータである。
【0018】
<ハードウェア構成>
図1は、情報処理装置のハードウェア構成例を示すブロック図である。情報処理装置100は、プロセッサ101と、ノースブリッジ102と、メモリと、ディスプレイ105と、サウスブリッジ106と、HDD107と、通信I/F108と、入力デバイス109と、セキュアモジュール110と、を備えている。これらハードウェアは、バスによってそれぞれ接続されている。
【0019】
プロセッサ101は、情報処理装置100内の制御や演算処理をおこなう。ノースブリッジ102は、プロセッサ101とメモリ(RAM103、ROM104)とディスプレイ105とサウスブリッジ106に接続され、これらの橋渡しをおこなう。RAM103は、プロセッサ101のワークエリアとして使用されるメインメモリである。ROM104は、プログラムやデータが格納される不揮発性メモリである。ディスプレイ105は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。
【0020】
サウスブリッジ106は、ノースブリッジ102、HDD107、通信I/F108、入力デバイス109、セキュアモジュール110に接続され、これらの橋渡しをおこなう。HDD107は、プロセッサ101の制御にしたがって内蔵するハードディスクに対するデータのリード/ライトを制御する駆動装置である。
【0021】
通信I/F108(インターフェース)は、サウスブリッジ106の制御により、通信回線を通じてLAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどのネットワークに接続可能なインターフェースである。また、ディジタル放送波を受信することも可能なインターフェースである。
【0022】
入力デバイス109は、文字、数字、各種指示などの入力する装置である。たとえば、キーボードやマウス、タッチパネルなどが挙げられる。入力デバイス109からの入力データは、サウスブリッジ106およびノースブリッジ102を経由してプロセッサ101に送られ、プロセッサ101で処理される。
【0023】
セキュアモジュール110は、内部に格納された情報を外部から参照できない構造を有するLSI(Large Scale Integration)であり、外部からの覗き見を防止するとともに、内部のデータが改ざんされることを防止するハードウェアである。たとえば、TRM(Tamper Resistant Module:耐タンパ性)構造が挙げられる。
【0024】
TRM構造は、半導体チップ(この場合、セキュアモジュール110)などの内部解析や改ざんを物理的および論理的に防衛するための構造をいう。具体的には、セキュアモジュール110においては、内部に強固で粘着力が高いコーティングが施され、その表面が剥がされると内部の回路が完全に破壊されたり、ダミーの配線が配されている。
【0025】
セキュアモジュール110は、HDD107から監視対象ソフトウェア(以下、「対象プログラム」)を読み出す機能、対象プログラムをスキャンするスキャンプログラムを生成/更新する機能、対象プログラムやスキャンプログラムをRAM103に実装する機能、暗号化機能、復号化機能等を備えている。セキュアモジュール110は、サウスブリッジ106内のUSBコントローラとUSBバス111を介して通信可能に接続されている。セキュアモジュール110は、情報処理装置100に内蔵されていてもよく、外付けとしてもよい。
【0026】
図2は、セキュアモジュール110のハードウェア構成例を示すブロック図である。セキュアモジュール110は、プロセッサ201、USBI/F202、暗号化回路203、RAM204、ROM205、フラッシュメモリ206、を備えている。
【0027】
プロセッサ201は、セキュアモジュール110内の制御や演算処理をおこなう。USBI/F202は、USBバス111を介してサウスブリッジ106内のUSBコントローラと接続され、通信をおこなう。暗号化回路203は、データやプログラムを暗号化したり、暗号化されたデータやプログラムを復号する。
【0028】
RAM204は、プロセッサ201のワークエリアとして使用されるメインメモリである。ROM205は、プログラムやデータが格納される不揮発性メモリである。フラッシュメモリ206は、保存したデータやプログラムが書き換え可能な不揮発性メモリである。
【0029】
<情報処理装置100での動作概要>
つぎに、情報処理装置100の動作概要について説明する。本実施の形態において、情報処理装置100上のソフトウェアを書換えから守るセキュアモジュール110は、ハードウェアスキャンが不可能なUSBインターフェースで情報処理装置100に接続されている。このため、セキュアモジュール110が普通にUSBインターフェース経由でUSB対応ソフトウェア(一般にこの種のソフトを「ドライバ」という)にメモリのスキャン対象領域のスキャンを依頼するとUSB対応ソフトウェア自身がクラッキングされる。
【0030】
たとえば、情報処理装置100上のソフトウェアが書き換えられても、さも書き換えられていないような結果を返すようにクラッキングされる。これにより、スキャン機能が有効に働かない可能性がある。したがって、本実施の形態では、以下のような処理を実行する。
【0031】
図3は、情報処理装置100での動作概要例を示す説明図である。本実施の形態では、まず、(1)セキュアモジュール110は、HDD107内に記憶されている暗号化された対象プログラム(以下、「暗号化対象プログラムE(TP)」)を取得して、セキュアモジュール110内の暗号化回路203で対象プログラムTPに復号する。そして、セキュアモジュール110は、RAM103のスキャン対象領域130に、復号された対象プログラムTPを書き出す。対象プログラムTPはセキュアモジュール110内でも保持しておく。
【0032】
なお、HDD107内に記憶されているプログラムが暗号化されていない場合は、セキュアモジュール110では復号することなく、RAM103のスキャン対象領域130に、取得した対象プログラムTPを書き出す。
【0033】
また、セキュアモジュール110は、加工プログラムPPにより対象プログラムTPを加工してもよい。加工内容の詳細は後述するが、対象プログラムTPの働きは同じだが、処理内容や処理手順は異なるように加工する。また、この加工により、対象プログラムTPの一部となるプログラム片をセキュアモジュール110内に保持しておき、情報処理装置100での対象プログラムTPの実行の際に、セキュアモジュール110内のプログラム片を参照しないと、対象プログラムTPの実行を継続できないようにする。
【0034】
(2)セキュアモジュール110は、定期的にまたは不定期に、スキャンプログラムSPをランダムに自動生成/更新する生成プログラムGPを実行する。具体的には、対象プログラムTPをスキャンするという機能は変わらないが、処理内容が毎回異なるスキャンプログラムSPをランダム自動生成する。
【0035】
この自動生成は、たとえば、数[msec]〜数分間隔で定期的に実行してもよく、ランダムな間隔で不定期に実行してもよい。いずれにしても、クラッカーが改ざんに要する時間よりも短い間隔となるよう設定しておけばよい。
【0036】
生成プログラムGPによりランダムに変化させるのは、たとえば、スキャン対象領域130、スキャン対象アドレスの順序、スキャン結果演算、演算したスキャン結果をセキュアモジュール110に戻す演算処理、スキャンプログラムSPコード、情報処理装置100のメモリ上の位置などが挙げられる。この生成プログラムGPによるスキャンプログラムSPのランダム生成/更新処理は、セキュアモジュール110内で実行されるため、生成過程を覗き見されたり、解析されたり、その結果無効化されることはない。
【0037】
なお、生成プログラムGPによりスキャンプログラムSPが生成/更新された場合、セキュアモジュール110でも対象プログラムTPを最新のスキャンプログラムSPでスキャンし、スキャン結果R1を更新しておく。スキャン結果R1はRAM204またはフラッシュメモリ206に記憶しておく。スキャン結果R1は、対象プログラムTPに固有のコードである。
【0038】
(3)スキャンプログラムSPは、プロセッサ101に、ドライバ131にRAM103上の非スキャン対象領域への配置を依頼させる。これにより、ドライバ131は、プロセッサ101に、セキュアモジュール110から送られてきたスキャンプログラムSPをRAM103の非スキャン対象領域に格納させる。
【0039】
(4)RAM103に格納されたスキャンプログラムSPは、プロセッサ101に、スキャン対象領域130内の対象プログラムTPをスキャンさせる。スキャン結果R2は、ドライバ131を介してセキュアモジュール110に通知される。
【0040】
(5)セキュアモジュール110はドライバ131から送られてくるスキャン結果R2を受け取る。スキャン結果R2を受け取ると、認証プログラムAPは、プロセッサ201に、セキュアモジュール110で保持しておいたスキャン結果R1と送られてきたスキャン結果R2を比較して一致判定を実行させる。
【0041】
一致していれば、対象プログラムTPが改ざんされていないこととなる。一方、対象プログラムTPが書き換えられていれば、セキュアモジュール110は、対象プログラムTPの実行停止指示をプロセッサ101に通知する。これにより、プロセッサ101は当該通知を受けると対象プログラムTPの実行を停止する。
【0042】
また、一定期間が経過してもドライバ131からスキャン結果R2を受け取れなかった場合も、対象プログラムTPの実行停止指示をプロセッサ101に通知する。
【0043】
(6)セキュアモジュール110は、対象プログラムTPの動作が停止するまでは、上記(2)〜(5)を繰り返す。
【0044】
このように、定期的または不定期にセキュアモジュール110によってランダムに生成/更新されたスキャンプログラムSPが動作するため、たとえスキャンプログラムSPが誰もが覗き見や書換えが可能な情報処理装置100のメモリ空間に存在してもクラッカーにクラッキングされることはない。
【0045】
すなわち、クラッカーがスキャンプログラムSPを覗き見し、解析し、偽スキャンプログラムに書き換えるには、一定の時間が必要である。しかし、セキュアモジュール110が不定期或いは定期的にスキャンプログラムをランダムに毎回違う形にするため、クラッカーは、解析し、偽スキャンプログラムに書き換える時間が得られない。
【0046】
図4は、対象プログラムTPの実行例を示す説明図である。RAM103のスキャン対象領域130には、対象プログラムTPとして、コンテンツ鍵復号プログラム401とコンテンツ復号プログラム402とコンテンツ処理プログラム403が実装されている。インターネットなどのネットワーク経由で、放送波で、またはHDD107から、暗号化されたコンテンツ(以下、「暗号化コンテンツE(412)」)や暗号化されたコンテンツ鍵(以下、「暗号化コンテンツ鍵E(411)」)が情報処理装置100に取得されると、暗号化コンテンツ鍵E(411)がコンテンツ鍵復号プログラム401により復号される。
【0047】
そして、コンテンツ復号プログラム402は、暗号化コンテンツE(412)を、復号されたコンテンツ鍵411を用いて復号する。復号されたコンテンツ412は、コンテンツ処理プログラム403により所定の処理(たとえば、MPEG伸張処理)が実行されて、当該処理後のコンテンツがディスプレイ105に表示される。
【0048】
<スキャンプログラムSPの具体例>
図5〜図8は、スキャンプログラムSPの具体例を示す説明図である。なお、図5〜図8では、わかりやすさを考慮して単純なスキャンプログラムSPを例示している。なお、図5〜図8において、「○○番地」と記述されている番地は、スキャン対象領域130に対応する論理アドレスである。
【0049】
図5は、対象プログラムTPのスキャンを実行するスキャンプログラムSPを示している。たとえば、11番地に「1」、12番地に「2」、13番地に「3」、14番地に「4」、15番地に「5」が記憶されているとすると、アドレス1〜5のステップでは、1001番地〜1005番地に書き出す。そして、アドレス6のステップですべて加算して、アドレス7のステップで加算結果「15」を1010番地に書き込む。
【0050】
アドレス8のステップで1010番地の内容「15」に「+80」して、さらに「*5」するため、(15+80)×5=475を得る。アドレス9のステップで、アドレス8の計算結果「475」を1011番地に書き込み、アドレス10のステップで1011番地の内容「475」をセキュアモジュール110に通知する。
【0051】
セキュアモジュール110でも、事前のスキャンによりスキャン結果を保持している。そして、通知されてきたスキャン結果と一致すれば、改ざんされていないこととなる。一方、不一致であれば、改ざんされていることとなり、対象プログラムTPの実行を停止する。
【0052】
図6は、図5に示したスキャンプログラムSPにおいて、アドレス1〜5の読込先となるスキャン対象アドレスを、11番地〜15番地から21番地〜25番地に変更した例である。図6では、21番地〜25番地の値を読み込むため、セキュアモジュール110に通知するスキャン結果が図5の場合と異なることとなる。
【0053】
図7は、図5に示したスキャンプログラムSPにおいて、スキャン対象アドレスの順序変更および順序変更に依存した演算に変更した例を示している。具体的には、スキャンプログラムSPは、アドレス1〜5でのスキャン対象アドレスの順序が変更されている。この順序変更だけでは、スキャン結果は図5と変わらないため、アドレス6のステップの演算もランダムに書き換えている。これにより、セキュアモジュール110に通知されるスキャン結果は図5のスキャン結果と異なる値となる。
【0054】
図8は、図7に示したスキャンプログラムSPにおいて、スキャンプログラムSPが特定の記憶領域に保持されていないと、スキャンが実行されない例を示している。この場合、セキュアモジュール110でも、スキャンプログラムSPが保持されるアドレスが特定済みである。
【0055】
具体的には、アドレス1〜5のステップにおいて、読込先のスキャン対象アドレスの値に、スキャンプログラムSPが保持されているアドレス(たとえば、先頭の番地)を加算することとしている。この場合、セキュアモジュール110に保持されている図8のスキャンプログラムSPのスキャン結果R1と、情報処理装置100のプロセッサ101で実行されたスキャンプログラムSPのスキャン結果R2が一致すれば、対象プログラムTPが改ざんされておらず、かつ、スキャンプログラムSPが特定の位置に配置されていることが確認できる。
【0056】
逆に、不一致の場合は、スキャンプログラムSPが意図的に他の位置に保持されている可能性があるため、そのような場合はスキャン結果の不一致により、対象プログラムTPが停止する。
【0057】
このように、スキャンプログラムSPの存在するメモリ番地が違えば、スキャン結果が変わってしまうこととなり、スキャンプログラムSPを想定と違うメモリ番地に書き込んで動作解析するようなクラッキングが困難になる。
【0058】
<スキャンプログラム生成/更新処理>
図9は、スキャンプログラム生成/更新処理の手順を示すフローチャートである。スキャンプログラム生成/更新処理は、セキュアモジュール110のプロセッサ101が生成プログラムGPを実行するときの処理である。
【0059】
まず、セキュアモジュール110は、所定時間経過するまで待ち受ける(ステップS901:No)。たとえば、すでに、対象プログラムTPがRAM103のスキャン対象領域130に書き込まれて実行開始したのをトリガにして、所定時間の計時を開始する。所定時間は、上述したように、数[msec]〜数分間隔とする。なお、数[msec]〜数分間隔の範囲内でランダムに設定してもよい。
【0060】
所定時間が経過した場合(ステップS901:Yes)、セキュアモジュール110は、すでにスキャンプログラムSPが生成済みであるか否かを判断する(ステップS902)。生成済みでない場合(ステップS902:No)、セキュアモジュール110は、スキャンプログラム生成処理(図10〜図11)を実行し(ステップS903)、生成されたスキャンプログラムSPをRAM103の非スキャン対象領域に書き込む(ステップS904)。
【0061】
このあと、生成されたスキャンプログラムSPで対象プログラムTPをスキャンし、スキャン結果をセキュアモジュール110内(たとえば、RAM204やフラッシュメモリ206)に保持しておく(ステップS905)。そして、ステップS901に戻る。
【0062】
また、ステップS902において、スキャンプログラムSPが生成済みである場合(ステップS902:Yes)、セキュアモジュール110は、スキャンプログラムSPを新規生成するか生成済みのスキャンプログラムSPを更新するかを決定する(ステップS906)。そして、新規生成である場合(ステップS907:新規生成)、ステップS903に移行する。一方、更新である場合(ステップS907:更新)、スキャンプログラム更新処理(図12〜図13)を実行し(ステップS908)、更新されたスキャンプログラムSPをRAM103の非スキャン対象領域に書き込む(ステップS904)。
【0063】
このあと、更新されたスキャンプログラムSPで対象プログラムTPをスキャンし、スキャン結果をセキュアモジュール110内(たとえば、RAM204やフラッシュメモリ206)に保持しておく(ステップS905)。そして、ステップS901に戻る。
【0064】
なお、起動の契機となった対象プログラムTPが終了等により、スキャン対象領域130から消去されると、セキュアモジュール110は、スキャンプログラム生成/更新処理を終了する。
【0065】
<スキャンプログラム生成処理>
図10は、図9に示したスキャンプログラム生成処理(ステップS903)の詳細な処理手順例を示すフローチャート(前半)である。まず、セキュアモジュール110は、セキュアモジュール110外のRAM103のスキャン対象領域130[As,Ae]および書込先領域[Bs,Be]を設定する(ステップS1001)。なお、ここで設定するスキャン対象領域130[As,Ae]は、対象プログラムTPと同じサイズでもよく、対象プログラムTPの一部と同じサイズでもよい。
【0066】
また、スキャン対象領域130[As,Ae]が対象プログラムTPの一部と同じサイズとする場合、スキャンプログラム生成処理を実行する都度、スキャン対象領域130[As,Ae]を異なる範囲とする。たとえば、スキャンプログラム生成処理を実行する都度、スキャン対象領域130[As,Ae]をシフトしていく。
【0067】
セキュアモジュール110は、スキャン対象領域130よりも大きいメモリ領域[Ms,Me](以下、「モジュール内設定領域」)をセキュアモジュール110内のRAM204(またはフラッシュメモリ206)に設定する(ステップS1002)。また、セキュアモジュール110は、各種変数の初期値を設定する(ステップS1003)。iは初期値を1とする変数である。Aiは、スキャン対象領域130の任意のアドレスを示し、初期値は、先頭アドレスAsとする。Biは、書込先領域の任意のアドレスを示し、初期値は、先頭アドレスBsとする。
【0068】
Miは、モジュール内設定領域内の任意のアドレスを示し、初期値は、先頭アドレスMsとする。Yiは、生成されるスキャンプログラムSP内で用いられるアドレスであり、初期値は、Biとする。このあと、セキュアモジュール110は、「Ai番地の内容を読み込んで、Bi番地に書き込む」というスキャン命令を、モジュール内設定領域のMi番地に書き込む(ステップS1004)。
【0069】
そして、セキュアモジュール110は、Ai>Aeであるか否かを判断する(ステップS1005)。Aeは、スキャン対象領域130の末尾アドレスである。Ai>Aeでない場合(ステップS1005:No)、iをインクリメントして(ステップS1006)、ステップS1004に戻る。一方、Ai>Aeである場合(ステップS1005:Yes)、図11のステップS1101に移行する。
【0070】
図11は、図9に示したスキャンプログラム生成処理(ステップS903)の詳細な処理手順例を示すフローチャート(後半)である。図10のステップS1005:Yesのあと、セキュアモジュール110は、モジュール内設定領域の番地Miをインクリメントして(ステップS1101)、Mi>Me−2であるか否かを判断する(ステップS1102)。
【0071】
Mi>Me−2でない場合(ステップS1102:No)、セキュアモジュール110は変数jの初期値をj=1とし(ステップS1103)、演算方法Zjをランダムに決定する(ステップS1104)。演算方法とは、四則演算や論理演算、チェックサムの算出やハッシュ関数によるハッシュ値算出などが挙げられる。以降、演算方法Zjでの演算を「Zj演算」と称す。
【0072】
そして、セキュアモジュール110は、jをインクリメントし(ステップS1105)、j=yであるか否かを判断する(ステップS1106)。ここで、yはYiの個数である。すなわち、モジュール内設定領域のMi番地の個数である。
【0073】
j=yでない場合(ステップS1106:No)、ステップS1104に戻る。一方、j=yとなった場合(ステップS1106:Yes)、セキュアモジュール110は「Y1番地の内容とY2番地の内容をZ1演算し、Z1演算結果とY3番地の内容とをZ2演算し、…、Z(y−2)演算結果とYy番地の内容とをZ(y−1)演算する」というスキャン命令Z(Mi)を、Mi番地に書き込む(ステップS1107)。
【0074】
このあと、セキュアモジュール110は、Miをインクリメントし(ステップS1108)、「スキャン命令Z(Mi―1)の計算結果を、(Bi+1)番地に書き込む」というスキャン命令をMi番地に書き込む(ステップS1109)。そして、ステップS1101に戻る。
【0075】
ステップS1102において、Mi>Me−2である場合(ステップS1102:Yes)、「(Bi+1)番地の内容をセキュアモジュール110に通知する」というスキャン命令をMi番地に書き込む(ステップS1110)。そして、ステップS904に移行する。このスキャンプログラム生成処理(ステップS903)によれば、定期的(または不定期に)スキャンプログラムSPをランダムに生成することができる。
【0076】
<スキャンプログラム更新処理>
図12は、スキャンプログラム更新処理(ステップS908)の詳細な処理手順例を示すフローチャート(その1)である。まず、セキュアモジュール110は、更新内容をランダムに決定する(ステップS1201)。ここで、更新内容とは、たとえば、「難読化」、「スキャン対象領域変更」、「スキャン対象アドレスの順序変更」、「スキャン結果演算の追加」、「スキャンプログラムSPのアドレス追加」、「何もしない」、などが挙げられる。
【0077】
「難読化」、「スキャン対象領域変更」、「スキャン対象アドレスの順序変更」の順序変更については、図12で説明する。一方、「スキャン結果演算の追加」、「スキャンプログラムSPのアドレス追加」、「何もしない」については、図13で説明する。なお、スキャンプログラム更新処理としては、これら6つの更新内容のうち、少なくとも1つ(「何もしない」を除く)でもあればよい。
【0078】
図12にもどって、セキュアモジュール110は、ランダムに決定された更新内容が、「難読化」であるか否かを判断する(ステップS1202)。難読化とは、対象となる命令または命令群を複雑にすることで、解読を難しくする方法である。具体的には、「働きは同じだが、処理内容が違うプログラムコード」に置き換えることである。たとえば、単一の命令の場合、「X=1+Y」という命令を「X=10−9+2Y−Y」という命令に更新する。また、「X=1+Y」、「Z=X+50」を「X=26+Y」、「Z=X+25」という命令群に更新する。
【0079】
更新後の命令は、更新前と同じ働きをするが、別のプログラムコードである。こうすると生成プログラムGPは、更新前後において、「働きは同じだが、プログラムコードが違う」ものになる。クラッカーが、生成プログラムGPのコードを「覗き見」したとしても、生成プログラムGPのプログラムコードが更新の都度違うのでそれだけ解析が困難である。また、生成プログラムGPのどの部分に肝心のコードがあるか分からなくなるという利点がある。
【0080】
「難読化」である場合(ステップS1202:Yes)、セキュアモジュール110は、難読化の対象範囲を対象プログラムTPの中から指定し(ステップS1203)、指定された対象範囲の命令(難読化可能な命令に限る)の難読化を実行する(ステップS1204)。そして、ステップS1201に戻る。
【0081】
一方、ステップS1202において、ランダムに決定された更新内容が、「難読化」でない場合(ステップS1202:No)、セキュアモジュール110は、ランダムに決定された更新内容が、「スキャン対象領域変更」か否かを判断する(ステップS1205)。
【0082】
「スキャン対象領域変更」とは、スキャンプログラムSPにおいて指定されるスキャン対象アドレスを、スキャン対象領域130内の異なるアドレスに変更することである。たとえば、図5に示したスキャンプログラムSPから図6に示したスキャンプログラムSPへ更新する際に、スキャン対象領域変更が実行されることとなる。
【0083】
「スキャン対象領域変更」である場合(ステップS1205:Yes)、セキュアモジュール110は、対象プログラムTPからスキャン対象領域130変更の対象範囲を指定し(ステップS1206)、指定された対象範囲のアドレスどうしを変更する(ステップS1207)。そして、ステップS1201に戻る。
【0084】
スキャン対象領域変更をおこなっても、生成プログラムGPがアクセスするアドレスが変わるだけで、スキャンプログラムSPの働きは同じである。また、スキャン対象領域130が変更されることで、スキャン結果も更新されるため、セキュリティ強度が向上することとなる。
【0085】
また、ステップS1205において、ランダムに決定された更新内容が、「スキャン対象領域変更」でない場合(ステップS1205:No)、セキュアモジュール110は、ランダムに決定された更新内容が、「スキャン対象アドレスの順序変更」か否かを判断する(ステップS1208)。スキャン対象アドレスの順序変更とは、スキャンプログラムSPのあるアドレスのコードとあるアドレスのコードを入れ替えることである。
【0086】
たとえば、図5に示したスキャンプログラムSPから図7に示したスキャンプログラムSPへ更新する際に、スキャン対象アドレスの順序変更が実行されている。なお、スキャン対象アドレスの順序変更により実行順序が入れ替わることとなるが、入れ替え前後において、スキャン結果が変わる場合と変わらない場合とがある。
【0087】
「スキャン対象アドレスの順序変更」である場合(ステップS1208:Yes)、セキュアモジュール110は、対象プログラムTPから順序変更の対象範囲を指定し(ステップS1209)、指定された対象範囲のアドレスのコードどうしを変更する(ステップS1210)。そして、ステップS1201に戻る。一方、ステップS1208において、スキャン対象アドレスの順序変更でない場合(ステップS1208:No)、図13のステップS1301に移行する。
【0088】
図13は、スキャンプログラム更新処理(ステップS908)の詳細な処理手順例を示すフローチャート(その2)である。ステップS1301において、セキュアモジュール110は、ステップS1201においてランダムに決定された更新内容が、「スキャン結果演算の追加」であるか否かを判断する(ステップS1301)。
【0089】
「スキャン結果演算の追加」である場合(ステップS1301:Yes)、セキュアモジュール110は、対象プログラムTPから演算対象アドレスを指定し(ステップS1302)、演算方法をランダムに決定する(ステップS1303)。ここで、演算方法とは、ある演算対象アドレスのデータとある演算対象アドレスのデータとについて、四則演算や論理演算をおこなったり、データごとにチェックサムの算出やハッシュ関数によるハッシュ値算出をおこなったりする。
【0090】
そして、セキュアモジュール110は、「演算対象アドレス内のデータを用いて、ステップS1303で決定された演算方法で演算する」スキャン命令を、更新元の生成プログラムGPに追加する(ステップS1304)。また、セキュアモジュール110は、「追加されたスキャン命令による演算結果をセキュアモジュール110に通知する」スキャン命令を、更新元の生成プログラムGPに追加する(ステップS1305)。このあと、ステップS1201に戻る。
【0091】
また、ステップS1201においてランダムに決定された更新内容が、「スキャン結果演算の追加」でない場合(ステップS1301:No)、セキュアモジュール110は、ランダムに決定された更新内容が、「スキャンプログラムSPのアドレス追加」であるか否かを判断する(ステップS1306)。スキャンプログラムSPのアドレス追加とは、スキャンプログラムSPのあるアドレスの命令に、スキャンプログラムSPの書込先アドレスを与えて、この書込先アドレスに依存したスキャン結果を得る手法である。
【0092】
たとえば、図7に示したスキャンプログラムSPから図8に示したスキャンプログラムSPへ更新する際に、スキャンプログラムSPのアドレス追加が実行されている。
【0093】
セキュアモジュール110は、ステップS1306において、「スキャンプログラムSPのアドレス追加」と判断された場合(ステップS1306:Yes)、追加対象アドレスを対象プログラムTPから指定する(ステップS1307)。そして、図7のアドレス1〜5に示したように、追加対象アドレス内のデータに、スキャンプログラムSPのアドレスの値を追加して、書き換える(ステップS1308)。このあと、ステップS1201に戻る。
【0094】
また、ステップS1306で「スキャンプログラムSPのアドレス追加」でもないと判断された場合(ステップS1306:No)、セキュアモジュール110は、生成プログラムGPの更新を終了するか否かを判断する(ステップS1309)。具体的には、たとえば、このケースでは、「何もしない」にランダム決定されているため、一度も更新していない場合は、更新を終了しない(ステップS1309:No)。この場合は、ステップS1201に戻る。
【0095】
少なくとも1度、または、あらかじめ設定しておいた所定回数更新が行われた場合、ランダムに更新を終了する(ステップS1309:Yes)。この場合、図9のステップS904に戻る。
【0096】
このように、耐タンパ性構造のセキュアモジュール110内で実行されるため、スキャンプログラムSPの生成/更新を毎回セキュアにおこなうことができる。したがって、クラッキングによりスキャン機能を無効化しづらい状態となり、USB接続においてもセキュリティ強度を高めることができる。
【0097】
<対象プログラムTPの加工>
つぎに、対象プログラムTPの加工について説明する。図3で説明したように、セキュアモジュール110内のプロセッサ201が加工プログラムPPを実行することで対象プログラムTPが加工される。ここで、対象プログラムTPの加工について具体的に説明する。
【0098】
図14は、対象プログラムTPの加工の概要を示す説明図である。プログラムは、アドレス単位の命令の集合体である。ここでは、わかりやすさを考慮して、対象プログラムTPが5つのアドレス単位の命令で成り立っているものとする。具体的には、分割プログラムP1〜P5で構成されており、アドレスadr1〜adr5の順に分割プログラムP1〜P5が実行されるものとする。したがって、HDD107では、論理アドレスとして、実行順序となるアドレスadr1〜adr5の並びで記憶されている。
【0099】
対象プログラムTP(分割プログラムP1〜P5)は、加工プログラムPPにより配置順、すなわち、アドレスを入れ替えられる。図14では、アドレスadr1が分割プログラムP1、アドレスadr2が分割プログラムP4、アドレスadr3が分割プログラムP2、アドレスadr4が分割プログラムP3、アドレスadr5が分割プログラムP5に加工されている。
【0100】
この場合、分割プログラムP1,P4,P3の後続に、セキュアモジュール110へのREAD命令を追記しておく。セキュアモジュール110内には、アドレス変更後の対応関係を示すプログラム片を保持しておく。たとえば、プログラム片paは、分割プログラムP1の実行後に参照されるGoto文であり、アドレスadr3にジャンプするものとする。
【0101】
また、プログラム片pbは、分割プログラムP3の実行後に参照されるGoto文であり、アドレスadr2にジャンプするものとする。プログラム片pcは、分割プログラムP4の実行後に参照されるGoto文であり、アドレスadr5にジャンプするものとする。プログラム片pa〜pcは加工の際に生成される。なお、加工前後では、スキャン結果R1は変わりない。
【0102】
図15〜図17Bは、加工プログラムPPによる対象プログラムTPの加工例を示す説明図である。まず、図15では、HDD107内の対象プログラムTPのアドレス3〜5の命令群を、アドレス7〜9に移動させている。また、対象プログラムTPのアドレス6,7の命令群を、アドレス15,16に移動させている。アドレス1,2の命令群はそのままである。
【0103】
加工前では、アドレス2の命令「Y=X+8」のつぎは、アドレス3の命令「Z=X+Y」が実行される。アドレス3の命令「Z=X+Y」は、アドレス7に移動したため、アドレス3の内容を、「Goto7」というプログラム片(ジャンプ命令)に書き換える。そして、セキュアモジュール110は、テーブルにアドレス3とプログラム片「Goto7」との組み合わせを保持する。
【0104】
同様に、加工前では、アドレス5の命令「Z=Z+1」のつぎは、アドレス6の命令「Z=5+Z」が実行される。アドレス5の命令「Z=Z+1」はアドレス9に移動し、アドレス6の命令は、アドレス15に移動したため、アドレス9の次であるアドレス10の内容を、「Goto15」というプログラム片(ジャンプ命令)に書き換える。そして、セキュアモジュール110は、テーブルにアドレス10とプログラム片「Goto15」との組み合わせを保持する。
【0105】
そして、セキュアモジュール110は、対象プログラムTPをスキャン対象領域130に書き出す前に、プログラム片をセキュアモジュール110へのREAD命令に書き換える。これにより、スキャン対象領域130に実装された加工後の対象プログラムTPが実行される場合、アドレス3のREAD命令により、セキュアモジュール110内のテーブルを参照して、アドレス3に対応するプログラム片「Goto7」を特定する。セキュアモジュール110は、プロセッサ101に対し、「Goto7」を通知することで、プロセッサ101は加工後の対象プログラムTPのアドレス7の命令を実行することとなる。
【0106】
このように、対象プログラムTPを構成する命令群を、対応関係を保持しておきながらシャッフリングする。したがって、対象プログラムTPも解読しにくい状態とすることで、セキュリティの向上を図ることができる。
【0107】
図16は、図15よりも加工を複雑化した例である。具体的には、図15では、プログラム片を単なるジャンプ命令としたが、図16では、単なるジャンプ命令ではなく、プログラム片に対象プログラムTPを構成する命令も挿入している。
【0108】
まず、図16では、HDD107内の対象プログラムTPのアドレス4,5の命令群を、アドレス8,9に移動させている。また、対象プログラムTPのアドレス6,7の命令群を、アドレス15,16に移動させている。アドレス1〜3の命令群はそのままである。
【0109】
加工前では、アドレス2の命令「Y=X+8」のつぎは、アドレス3の命令「Z=X+Y」が実行される。アドレス3の次であるアドレス4の命令は、アドレス8に移動したため、Goto文「Goto8」を生成する。そして、セキュアモジュール110は、アドレス3と、アドレス3の命令「Z=X+Y」および生成されたGoto文「Goto8」との組み合わせを保持する。このように、プログラム片を単なるジャンプ命令ではなく、複雑化することで、セキュリティの向上を図ることができる。
【0110】
図17Aは、対象プログラムTPを構成する命令群を暗号化する例である。図17では、セキュアモジュール110は、対象プログラムTP(加工前)のアドレス4〜7の命令群を暗号復号鍵K1〜K4で暗号化する。つぎに、暗号化された命令の前に、セキュアモジュール110へのREAD命令と復号命令を挿入する。これにより、挿入された命令分だけ、アドレスが繰り下がる。
【0111】
たとえば、アドレス4の命令「Y=Y+1」を暗号復号鍵K1で暗号化して、アドレス6に書き込む。そして、空いているアドレス4にセキュアモジュールへのREAD命令を挿入し、アドレス5に復号命令を挿入する。
【0112】
このあと、セキュアモジュール110では、対象プログラムTP(加工後)における暗号化命令を暗号化した鍵とその暗号化命令のために挿入されたREAD命令のアドレスとの組み合わせをテーブルに保持する。たとえば、アドレス6に書き込まれた暗号化命令E1(Y=Y+1)を暗号化した暗号復号鍵K1と、暗号化命令E1(Y=Y+1)の生成により挿入されたREAD命令のアドレス4との組み合わせをテーブルに保持する。
【0113】
このあと、セキュアモジュール110は、テーブルをRAM204またはフラッシュメモリ206に保持しておき、加工した対象プログラムTPをスキャン対象領域に書き込む。対象プログラムTP(加工後)を実行するときは、挿入されたREAD命令により暗号復号鍵を読み出して、つぎの復号命令で、暗号化命令を復号する。これにより、復号された命令を実行することが可能となる。たとえば、アドレス4のREAD命令があると、セキュアモジュール110は、テーブルを参照して暗号復号鍵K1をプロセッサ101に渡す。プロセッサ101は、暗号復号鍵K1とアドレス5の復号命令により、暗号化命令E1(Y=Y+1)を復号して、アドレス6に命令「Y=Y+1」を書き込む。そして、アドレス6で、命令「Y=Y+1」を実行することとなる。こうすることで、スキャン対象プログラムが一部暗号化されていても、復号鍵をセキュアモジュールから取得することで処理の続行が可能になります。
【0114】
図17Bは、対象プログラムTPを構成する命令群を暗号化する例である。図17Bでは、セキュアモジュール110は、対象プログラムTP(加工前)のアドレス4〜7の命令群をセキュアモジュール110へのREAD命令に置換する。たとえば、アドレス4の命令「Y=Y+1」をREAD命令に置換する。そして、つぎのアドレス5に、「アドレス4でセキュアモジュール110から読み出した命令「Y=Y+1」を書き込む」命令を挿入する。
【0115】
このあと、セキュアモジュール110は、置換対象の命令とそのアドレスとの組み合わせをテーブルに保持する。たとえば、セキュアモジュール110は、置換対象となったアドレス4とその命令「Y=Y+1」の組み合わせをテーブルに保持する。
【0116】
このあと、セキュアモジュール110は、テーブルをRAM204またはフラッシュメモリ206に保持しておき、加工した対象プログラムTPをスキャン対象領域に書き込む。対象プログラムTP(加工後)を実行するときは、プロセッサ101は、置換されたREAD命令により置換元の命令を読み出して実行する。たとえば、プロセッサ101は、アドレス4のREAD命令でセキュアモジュール110から命令「Y=Y+1」を読み出して実行することとなる。
【0117】
<対象プログラムTP加工処理>
図18は、対象プログラムTP加工処理の処理手順例を示すフローチャートである。まず、セキュアモジュール110が、暗号化対象プログラムE(TP)をHDD107から読み出し(ステップS1801)、暗号化対象プログラムE(TP)を復号する(ステップS1802)。なお、HDD107において対象プログラムTPが暗号化されていない場合は、HDD107から対象プログラムTPを読み出すだけでよい。
【0118】
つぎに、セキュアモジュール110は、対象プログラムTPの加工方法をランダムに決定する(ステップS1803)。具体的には、セキュアモジュール110は、「難読化」、「暗号化」(図17を参照)、「シャッフリング」(図16,図17を参照)、「何もしない」の中から決定する。
【0119】
そして、セキュアモジュール110は、加工方法が「難読化」である場合(ステップS1804:Yes)、対象プログラムTPから難読化の対象範囲を指定し(ステップS1805)、対象範囲の命令を難読化する(ステップS1806)。そして、ステップS1803に戻る。
【0120】
また、ステップS1804において、加工方法が「難読化」でない場合(ステップS1804:No)、セキュアモジュール110は、加工方法が「暗号化」であるか否かを判断する(ステップS1807)。加工方法が「暗号化」である場合(ステップS1807:Yes)、対象プログラムTPから暗号化の対象範囲を指定し(ステップS1808)、対象範囲の命令を暗号化する(ステップS1809)。このとき、図17に示したように、暗号化対象のアドレスとそのアドレスの暗号化命令を復号する復号鍵の組み合わせをテーブルに保存する。そして、ステップS1803に戻る。
【0121】
また、ステップS1807において、加工方法が「暗号化」でない場合(ステップS1807:No)、セキュアモジュール110は、加工方法が「シャッフリング」であるか否かを判断する(ステップS1810)。加工方法が「シャッフリング」である場合(ステップS1810:Yes)、セキュアモジュール110は、シャッフリング処理(図19)を実行する。そして、シャッフリング処理(ステップS1811)のあと、ステップS1803に戻る。
【0122】
また、ステップS1810において、加工方法が「シャッフリング」でない場合(ステップS1810:No)、セキュアモジュール110は、加工終了であるか否かを判断する(ステップS1812)。具体的には、たとえば、このケースでは、加工方法が「何もしない」にランダム決定されているため、一度も加工していない場合は、加工を終了しない(ステップS1812:No)。この場合は、ステップS1803に戻る。
【0123】
少なくとも1度、または、あらかじめ設定しておいた所定回数加工が行われた場合、ランダムに加工を終了する(ステップS1812:Yes)。この場合、RAM103のスキャン対象領域130に加工後の対象プログラムTPを書き出す(ステップS1813)。これにより、加工処理を終了する。
【0124】
図19は、図18に示したシャッフリング処理(ステップS1811)の詳細な処理手順例を示すフローチャートである。ここでは、例として、図15に示したようなシャッフリングをする場合を例に挙げる。まず、セキュアモジュール110は、セキュアモジュール110内で加工先の領域を確保し(ステップS1901)、対象プログラムTPを複数の命令群に分割する(ステップS1902)。
【0125】
つぎに、セキュアモジュール110は、先頭の命令群を対象命令群に設定する(ステップS1903)。そして、セキュアモジュール110は、対象命令群の後続命令群があるか否かを判断する(ステップS1904)。後続命令群がある場合(ステップS1904:Yes)、セキュアモジュール110は、プログラム片(たとえば、Goto文)をランダムに生成する(ステップS1905)。具体的には、セキュアモジュール110は、ランダムかつ対象命令群が入る領域が確保できるように生成する。
【0126】
このあと、セキュアモジュール110は、生成されたプログラム片のアドレスを、対象命令群の末尾アドレスの次のアドレスに設定する(ステップS1906)。そして、セキュアモジュール110は、プログラム片とその書込先アドレスとの組み合わせをテーブルに追加する(ステップS1907)。
【0127】
そして、セキュアモジュール110は、対象プログラムTPのプログラム片に割り当てられたアドレスに、プログラム片のREAD命令を書き込む(ステップS1908)。このあと、セキュアモジュール110は、プログラム片で指定されたアドレス(プログラム片が「Goto8」なら「8」)に、後続命令群を対象命令群に設定して(ステップS1909)、ステップS1904に戻る。
【0128】
ステップS1904において、対象命令群の後続命令群がない場合(ステップS1904:No)、シャッフリング処理を終了して、ステップS1803に戻る。
【0129】
このように、対象プログラムTPを加工することで対象プログラムTPのクラッキングに対してもセキュリティ強度を高めることができる。なお、上述した加工処理は、暗号化対象プログラムTPを読み込む都度実行されるため、その都度、対象プログラムTPの加工方法が変更することとなる。したがって、クラッカーから見るとさらに対象プログラムTPの解析を困難にすることができる。
【0130】
また、スキャンプログラムSPが、スキャン対象領域130に不定期または定期的にスキャンした場合、そのスキャンプログラムSPが更新される前に、加工プログラムPPが、スキャン対象領域130にランダムにデータやコードを書き込む。そして、更新前に、加工後のスキャンプログラムSPでスキャンすることで、スキャンプログラムSPの正常動作を再々確認することができる。
【0131】
図20は、対象プログラムTPの加工例を示す説明図である。(A)では、対象プログラムTPのアドレス1〜4の命令が難読化され、アドレス5〜7にNOPを追加した例である。(B)では、アドレス1〜4の命令はそのままで、アドレス5〜7に命令が追加されているが、結果は同一となる例である。(C)では、アドレス1〜4の命令はそのままで、アドレス5〜7に無意味な命令が追加されているため、結果は同一となる例である。
【0132】
このように、図20の左側の対象プログラムTPをスキャンしたあと、図20の右側のように対象プログラムTPを加工して、スキャンプログラムSPを更新する前に加工後の対象プログラムTPをスキャンする。これにより、スキャンプログラムSPの正常動作を再々確認することができる。
【0133】
以上説明したように、本実施の形態によれば、ハードウェアスキャンに対応しないインターフェースであっても、クラッカーに容易に無効化されないスキャンを実現することができるという効果を奏する。特に、スキャンプログラムSPの更新頻度を高めることで、よりセキュリティ強度が高くなる。さらに、対象プログラムTPをスキャン対象領域130に書き込む都度、対象プログラムTPを加工するため、よりセキュリティ強度を高めることができる。
【0134】
なお、本実施の形態では、PCI(またはPCIe)接続およびUSB接続が可能な情報処理装置100に対し、セキュアモジュール110をUSB接続する場合の例について説明したが、USBに限らず、USB以外の他の規格でもよい。
【0135】
また、本実施の形態は、ディジタルAV情報、ゲームソフトウェア、アプリケーションがディジタル放送やブロードバンドインターネット上で送信されたときに、オープンアーキテクチャーのPCのソフトウェア上で安全性(ディジタルAV情報が悪意ある者に盗まれない)を保証する場合に利用することができる。
【0136】
上述した実施の形態に関し、さらに以下の付記を開示する。
【0137】
(付記1)対象プログラムに固有なコードを記憶する記憶手段と、
前記対象プログラムに固有なコードを生成するスキャン処理を接続先装置で実行させるスキャンプログラムを生成する生成処理と、前記固有なコードと同一コードの生成を維持したまま前記スキャンプログラムの内容をランダムに更新する更新処理とを実行する生成手段と、
前記接続先装置内の特定の記憶領域に記憶されている前記対象プログラムに対し前記スキャンプログラムが前記接続先装置で実行された場合、前記接続先装置での前記スキャンプログラムの実行結果と前記記憶手段に記憶された前記コードとに基づいて、前記特定の記憶領域に記憶されている前記対象プログラムの正当性を認証する認証手段と、
を備えることを特徴とするセキュアモジュール。
【0138】
(付記2)前記セキュアモジュールは、内部に格納された情報を外から参照できない構造であることを特徴とする付記1に記載のセキュアモジュール。
【0139】
(付記3)前記生成手段は、前記更新処理を定期的に実行することを特徴とする付記1または2に記載のセキュアモジュール。
【0140】
(付記4)前記生成手段は、前記更新処理を不定期に実行することを特徴とする付記1または2に記載のセキュアモジュール。
【0141】
(付記5)前記生成手段は、前記更新処理として、前記スキャンプログラムの命令を難読化することを特徴とする付記1〜4のいずれか一つに記載のセキュアモジュール。
【0142】
(付記6)前記生成手段は、前記更新処理として、前記スキャンプログラムで指定された前記特定の記憶領域内のスキャン先アドレスを変更することを特徴とする付記1〜4のいずれか一つに記載のセキュアモジュール。
【0143】
(付記7)前記生成手段は、前記更新処理として、前記スキャンプログラム内の命令群においてそれぞれ指定された前記特定の記憶領域内のスキャン先アドレスの順序を変更することを特徴とする付記1〜4のいずれか一つに記載のセキュアモジュール。
【0144】
(付記8)前記生成手段は、前記更新処理として、前記スキャンプログラム内の命令で指定されたデータに基づく演算命令の内容を変更して、変更後の演算命令による演算結果を前記記憶手段に記憶しておき、前記変更後の演算命令による演算結果を前記セキュアモジュールに返す命令を追加することを特徴とする付記1〜4のいずれか一つに記載のセキュアモジュール。
【0145】
(付記9)前記生成手段は、前記更新処理として、前記スキャンプログラム内の命令を、前記スキャンプログラムの前記接続先装置での格納先アドレスに依存した命令に変更することを特徴とする付記1〜4のいずれか一つに記載のセキュアモジュール。
【0146】
(付記10)前記生成手段は、前記生成処理として、前記固有なコードと同一コードの生成を維持したまま記述内容が異なるスキャンプログラムをランダムに生成することを特徴とする付記1または2に記載のセキュアモジュール。
【0147】
(付記11)前記生成手段は、前記生成処理を定期的に実行することを特徴とする付記10に記載のセキュアモジュール。
【0148】
(付記12)前記生成手段は、前記生成処理を不定期に実行することを特徴とする付記10に記載のセキュアモジュール。
【0149】
(付記13)前記対象プログラムを、記述内容は異なるが機能は同一のプログラムコードに加工する加工手段を備え、
前記加工手段による加工後の対象プログラムに固有なコードを前記記憶手段に上書きすることを特徴とする付記1〜12のいずれか一つに記載のセキュアモジュール。
【0150】
(付記14)前記加工手段は、前記対象プログラムの命令を難読化することを特徴とする付記13に記載のセキュアモジュール。
【0151】
(付記15)前記加工手段は、前記対象プログラムの命令群をシャッフリングし、ジャンプ先命令のアドレスを指定するジャンプ命令と当該ジャンプ命令のアドレスとの組み合わせを特定するテーブルを前記記憶手段に記憶し、シャッフリング後の前記対象プログラムにおける前記ジャンプ命令の内容を前記テーブルのリード命令に変更して、前記特定の記憶領域に書き出すことを特徴とする付記13に記載のセキュアモジュール。
【0152】
(付記16)前記加工手段は、前記対象プログラムの命令群をシャッフリングし、ジャンプ先命令のアドレスを指定するジャンプ命令およびジャンプ元命令と当該ジャンプ元命令のアドレスとの組み合わせを特定するテーブルを前記記憶手段に記憶し、シャッフリング後の前記対象プログラムにおける前記ジャンプ元命令の内容を前記テーブルのリード命令に変更して、前記特定の記憶領域に書き出すことを特徴とする付記13に記載のセキュアモジュール。
【0153】
(付記17)前記加工手段は、前記対象プログラムの任意の命令を、当該命令を暗号化した暗号化命令と、セキュアモジュールに対するリード命令と、前記暗号化命令を復号する復号命令とに置換し、前記リード命令のアドレスと前記暗号化命令を復号する復号鍵との組み合わせを特定するテーブルを前記記憶手段に記憶し、加工後の前記対象プログラムを前記特定の記憶領域に書き出すことを特徴とする付記13に記載のセキュアモジュール。
【0154】
(付記18)前記加工手段は、前記対象プログラムの任意の命令をセキュアモジュールに対するリード命令に置換し、当該リード命令のアドレスと置換元の命令との組み合わせを特定するテーブルを前記記憶手段に記憶し、加工後の前記対象プログラムを前記特定の記憶領域に書き出すことを特徴とする付記13に記載のセキュアモジュール。
【0155】
(付記19)前記加工手段は、前記接続先装置において前記スキャンプログラムの実行中に、前記対象プログラムを、記述内容は異なるが機能は同一のプログラムコードに加工し、
前記加工手段による加工後の対象プログラムに固有なコードを前記記憶手段に上書きすることを特徴とする付記13に記載のセキュアモジュール。
【0156】
(付記20)プロセッサと、
メモリと、
セキュアモジュールと、を備え、
前記セキュアモジュールは、
対象プログラムに固有なコードを記憶する記憶手段と、
前記対象プログラムに固有なコードを生成するスキャン処理を前記プロセッサで実行させるスキャンプログラムを生成する生成処理と、前記固有なコードと同一コードの生成を維持したまま前記スキャンプログラムの内容をランダムに更新する更新処理とを実行する生成手段と、
前記メモリ内の特定の記憶領域に記憶されている前記対象プログラムに対し前記スキャンプログラムが実行された場合、前記スキャンプログラムの実行結果と前記記憶手段に記憶された前記コードとに基づいて、前記特定の記憶領域に記憶されている前記対象プログラムの正当性を認証する認証手段と、
を備えることを特徴とする情報処理装置。
【符号の説明】
【0157】
100 情報処理装置
101 プロセッサ
102 ノースブリッジ
105 ディスプレイ
106 サウスブリッジ
109 入力デバイス
110 セキュアモジュール
111 USBバス
130 スキャン対象領域
131 ドライバ
201 プロセッサ
203 暗号化回路
206 フラッシュメモリ
AP 認証プログラム
GP 生成プログラム
PP 加工プログラム
SP スキャンプログラム
TP 対象プログラム

【特許請求の範囲】
【請求項1】
対象プログラムに固有なコードを記憶する記憶手段と、
前記対象プログラムに固有なコードを生成するスキャン処理を接続先装置で実行させるスキャンプログラムを生成する生成処理と、前記固有なコードと同一コードの生成を維持したまま前記スキャンプログラムの内容をランダムに更新する更新処理とを実行する生成手段と、
前記接続先装置内の特定の記憶領域に記憶されている前記対象プログラムに対し前記スキャンプログラムが前記接続先装置で実行された場合、前記接続先装置での前記スキャンプログラムの実行結果と前記記憶手段に記憶された前記コードとに基づいて、前記特定の記憶領域に記憶されている前記対象プログラムの正当性を認証する認証手段と、
を備えることを特徴とするセキュアモジュール。
【請求項2】
前記セキュアモジュールは、内部に格納された情報を外部から参照できない構造であることを特徴とする請求項1に記載のセキュアモジュール。
【請求項3】
前記生成手段は、前記更新処理を定期的に実行することを特徴とする請求項1または2に記載のセキュアモジュール。
【請求項4】
前記生成手段は、前記更新処理を不定期に実行することを特徴とする請求項1または2に記載のセキュアモジュール。
【請求項5】
前記生成手段は、前記更新処理として、前記スキャンプログラムの命令を難読化することを特徴とする請求項1〜4のいずれか一つに記載のセキュアモジュール。
【請求項6】
前記生成手段は、前記更新処理として、前記スキャンプログラムで指定された前記特定の記憶領域内のスキャン先アドレスを変更することを特徴とする請求項1〜4のいずれか一つに記載のセキュアモジュール。
【請求項7】
前記生成手段は、前記更新処理として、前記スキャンプログラム内の命令群においてそれぞれ指定された前記特定の記憶領域内のスキャン先アドレスの順序を変更することを特徴とする請求項1〜4のいずれか一つに記載のセキュアモジュール。
【請求項8】
前記生成手段は、前記更新処理として、前記スキャンプログラム内の命令で指定されたデータに基づく演算命令の内容を変更して、変更後の演算命令による演算結果を前記記憶手段に記憶しておき、前記変更後の演算命令による演算結果を前記セキュアモジュールに返す命令を追加することを特徴とする請求項1〜4のいずれか一つに記載のセキュアモジュール。
【請求項9】
前記生成手段は、前記更新処理として、前記スキャンプログラム内の命令を、前記スキャンプログラムの前記接続先装置での格納先アドレスに依存した命令に変更することを特徴とする請求項1〜4のいずれか一つに記載のセキュアモジュール。
【請求項10】
プロセッサと、
メモリと、
セキュアモジュールと、を備え、
前記セキュアモジュールは、
対象プログラムに固有なコードを記憶する記憶手段と、
前記対象プログラムに固有なコードを生成するスキャン処理を前記プロセッサで実行させるスキャンプログラムを生成する生成処理と、前記固有なコードと同一コードの生成を維持したまま前記スキャンプログラムの内容をランダムに更新する更新処理とを実行する生成手段と、
前記メモリ内の特定の記憶領域に記憶されている前記対象プログラムに対し前記スキャンプログラムが実行された場合、前記スキャンプログラムの実行結果と前記記憶手段に記憶された前記コードとに基づいて、前記特定の記憶領域に記憶されている前記対象プログラムの正当性を認証する認証手段と、
を備えることを特徴とする情報処理装置。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17A】
image rotate

【図17B】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate


【公開番号】特開2012−38222(P2012−38222A)
【公開日】平成24年2月23日(2012.2.23)
【国際特許分類】
【出願番号】特願2010−179876(P2010−179876)
【出願日】平成22年8月10日(2010.8.10)
【出願人】(000005223)富士通株式会社 (25,993)
【出願人】(308014341)富士通セミコンダクター株式会社 (2,507)
【Fターム(参考)】