JPWO2006129641A1 - コンピュータシステム及びプログラム生成装置 - Google Patents

コンピュータシステム及びプログラム生成装置 Download PDF

Info

Publication number
JPWO2006129641A1
JPWO2006129641A1 JP2007518997A JP2007518997A JPWO2006129641A1 JP WO2006129641 A1 JPWO2006129641 A1 JP WO2006129641A1 JP 2007518997 A JP2007518997 A JP 2007518997A JP 2007518997 A JP2007518997 A JP 2007518997A JP WO2006129641 A1 JPWO2006129641 A1 JP WO2006129641A1
Authority
JP
Japan
Prior art keywords
program
secure
instruction
secure program
management area
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.)
Granted
Application number
JP2007518997A
Other languages
English (en)
Other versions
JP4850830B2 (ja
Inventor
芳賀 智之
智之 芳賀
洋 奥山
洋 奥山
松島 秀樹
秀樹 松島
好克 井藤
好克 井藤
重彦 木村
重彦 木村
保樹 大岩
保樹 大岩
貴文 賀川
貴文 賀川
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.)
Panasonic Corp
Panasonic Holdings Corp
Original Assignee
Panasonic Corp
Matsushita Electric Industrial Co Ltd
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 Panasonic Corp, Matsushita Electric Industrial Co Ltd filed Critical Panasonic Corp
Priority to JP2007518997A priority Critical patent/JP4850830B2/ja
Publication of JPWO2006129641A1 publication Critical patent/JPWO2006129641A1/ja
Application granted granted Critical
Publication of JP4850830B2 publication Critical patent/JP4850830B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/468Specific access rights for resources, e.g. using capability register
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/71Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information
    • G06F21/74Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information operating in dual or compartmented mode, i.e. at least one secure mode

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Mathematical Physics (AREA)
  • Computer Security & Cryptography (AREA)
  • Storage Device Security (AREA)

Abstract

携帯電話10は、OS、ノンセキュアプログラム、切替デバイスドライバ及びセキュアプログラムに含まれている各命令を読み出し、解読し、その解読結果に応じて動作するCPU102と、管理領域及び管理外領域から構成されるメモリ107とを備える。OSは、管理領域のみをアクセス空間として、ノンセキュアプログラムに対して管理領域へのアクセスを仲介する命令と、切替デバイスドライバに対して、セキュアプログラムへの切替を指示する命令とを含む。ノンセキュアプログラムは、OSを介して、管理領域にアクセスする命令を含む。切替デバイスドライバは、OSの指示により、OSからセキュアプログラムへの実行の切替えを行う命令を含む。セキュアプログラムは、管理外領域のみをアクセス空間とし、管理外領域へアクセスする命令を含む。

Description

本発明は、プログラムの不正な改ざんや解析を防止する技術に関する。
プログラムの不正な改ざんや解析を防止する技術については従来から研究されている。
例えば、パッケージとして売られているソフトウェアには、違法コピーによる使用を防ぐために、利用者に対してパスワードの入力を要求するものがある。このようなソフトウェアには、パスワードが正しいかどうかをチェックするコード(コンピュータプログラム)が含まれている。不正な利用者が、このソフトウェア内において、何らかの方法により、このチェックを行うコードが存在する場所を特定し、このチェックを無効にするようにこのコードに改ざんを加えたとするならば、この不正な利用者は、パスワードを知らなくてもこのソフトウェアを使用することができてしまう。
また、近年、PC(パーソナルコンピュータ)で視聴できる有料のデジタルコンテンツが提供されるようになってきている。この有料のデジタルコンテンツは不正にコピーされることを防ぐために暗号化されており、これを視聴するためのソフトウェアは、暗号を解くための復号アルゴリズム及び復号鍵を含んでいる。もしも、悪意のあるユーザが、視聴用のソフトウェアを解析して、復号鍵を特定することができれば、デジタルコンテンツを不正にコピーすることができるソフトウェアを作成することが可能になる。
以上のように、ソフトウェアの内容が解析されると、そのソフトウェアやデジタルコンテンツによるビジネスが成り立たなくなる。そのため、これらのソフトウェアの解析を防止する技術は必要不可欠である。
例えば、非特許文献1では、ソフトウェアの解析を防ぐための基本原則や具体的手法が記述されている。また、非特許文献2では、ソフトウェアの解析を防ぐためのツールとして開発されたTRCS(Tamper Resistant Coding System)の技術課題とその対策が記述されている。また、非特許文献3では、ソフトウェアの違法コピーを防ぐためのソフトウェア的な保護手段(コピープロテクト技術)を無効化されないようにする技術が解説されている。
このようなソフトウェアの不正な解析や改ざんを防ぐ技術を「耐タンパ技術」と呼ぶ.
「逆解析や改変からソフトを守る」日経エレクトロニクス 1998.1.5(P209−220) 「ソフトウェアの耐タンパー化技術」富士ゼロックス テクニカルレポート No.13 「ザ・プロテクト」秀和システム出版 1985年 特開平11−15705号公報
複数のOSが普及している現在において、OS上で動作するソフトウェアデバッガなどの解析ツールが比較的容易に入手できるようになってきている。
そのため、OSに依存するライブラリを利用して、OS上で動作するソフトウェアが、秘匿情報を第三者に知られることなく、安全に処理するように、当該ソフトウェアについてセキュアな実装をした場合であっても、当該ソフトウェアについて、OS上で動作するデバッガに対して耐性が低いという問題点がある。すなわち、不正解析者により、OS上で動作するデバッガを用いて、OSに依存するライブラリを呼び出している部分が特定され、さらに、秘密情報が特定される危険性がある。
本発明は、上記問題点に鑑み、不正解析者による秘密の処理の特定を困難にすることができるコンピュータシステム、集積回路及びプログラム生成装置を提供することを目的とする。
前記目的を達成するために、本発明は、コンピュータシステムであって、基本プログラム、通常プログラム及びセキュアプログラムに含まれている各命令を読み出し、解読し、その解読結果に応じて動作するプロセッサと、管理領域及び前記管理領域とは異なる管理外領域から構成されるメモリ手段とを備え、前記基本プログラムは、オペレーティングシステムを構成し、前記通常プログラムに対して前記管理領域のみをアクセス空間とするアクセスを仲介する命令を含み、前記通常プログラムは、前記基本プログラムを介して、前記管理領域にアクセスする命令を含み、前記セキュアプログラムは、オペレーティングシステムに依存しないプログラムであり、前記管理外領域のみをアクセス空間としてアクセスする命令を含むことを特徴とする。
この構成によると、セキュアプログラムは、オペレーティングシステムである基本プログラムに依存することなく、オペレーティングシステムの管理外領域にアクセスすることが可能である。一方、通常プログラムは、オペレーティングシステムである基本プログラムを介して、オペレーティングシステムの管理領域にアクセス可能であるが、オペレーティングシステムの管理外領域に対してはアクセスできないので、通常プログラムが、例えばソフトウェアデバッガである場合に、ソフトウェアデバッガは、管理外領域にアクセスできず、セキュアプログラムによる管理外領域へのアクセスについての安全性を保つことができるという優れた効果を奏する。
ここで、前記管理領域は、さらに、前記基本プログラム及び前記通常プログラムを記憶しており、前記管理外領域は、さらに、前記セキュアプログラムを記憶しており、前記プロセッサは、前記管理領域に記憶されている前記基本プログラム、前記通常プログラムに含まれている各命令を読み出し、前記管理外領域に記憶されている前記セキュアプログラムに含まれている各命令を読み出すとしてもよい。
この構成によると、セキュアプログラムは、オペレーティングシステムの管理外領域に記憶されているので、上記のソフトウェアデバッガは、管理外領域に記憶されているセキュアプログラムにアクセスできず、セキュアプログラム自身の内容を安全に保つことができる。
ここで、前記セキュアプログラムは、前記管理外領域において格納される秘匿すべき情報に関する秘匿処理を行う命令を含むとしてもよい。
この構成によると、上記のソフトウェアデバッガは、前記セキュアプログラムにより、オペレーティングシステムの管理外領域において格納される秘匿すべき情報にアクセスできず、これらの秘匿すべき情報の内容を安全に保つことができる。
ここで、前記管理領域は、さらに、基本プログラムの指示により、基本プログラムからセキュアプログラムへの実行の切替えを行う命令を含む切替プログラムを記憶しており、前記プロセッサは、さらに、前記管理領域に記憶されている前記切替プログラムに含まれている命令を読み出し、解読し、その解読結果に応じて動作し、前記基本プログラムは、さらに、前記切替プログラムに対して、セキュアプログラムへの切替を指示する命令を含み、前記セキュアプログラムは、さらに、前記秘匿処理の終了後、セキュアプログラムから基本プログラムへの実行の切替えを行う命令を含むとしてもよい。
この構成によると、基本プログラムから秘匿処理が必要な時等に、切替プログラムを介して、本来アクセスできないセキュアプログラムに一時的に処理を移すことができ、また、秘匿処理の終了後、再度オペレーティングシステムである基本プログラムに処理を戻すことができる。これにより、基本プログラムからでも、セキュアプログラムの安全性を確保したまま、セキュアプログラムの秘匿処理を利用することができる。
ここで、前記切替プログラムは、セキュアプログラムから基本プログラムへの実行の切替えの際に、スタックポインタの設定を基本プログラムが利用するものに戻す命令を含み、セキュアプログラムから基本プログラムへの実行の切替えの際に、スタックポインタの設定をセキュアプログラムが利用するものに戻す命令を含むとしてもよい。
この構成によると、セキュアプログラムから基本プログラムへの切り替えの際、スタックポインタの設定を基本プログラムが利用するものに戻すので、基本プログラムの処理を続行することができる。また、基本プログラムからセキュアプログラムへの切り替えの際に、スタックポインタの設定をセキュアプログラムが利用するものに戻すので、セキュアプログラムの処理を続行することができる。
ここで、前記セキュアプログラムは、難読化が施されているとしてもよい。
この構成によると、難読化により、セキュアプログラムの解析が困難となるので、セキュアプログラムの安全性をさらに高めることができる。
また、一般にソフトウェアの処理が実行される前に、実行対象となるソフトウェアが利用するデータは初期化される。不正解析者は、解析対象のソフトウェアの解析を、ソフトウェア初期化シーケンスから行おうとする。この場合、不正解析者が、データ初期化処理に注目し、秘密情報の利用場所を特定する可能性がある。
ここで、前記セキュアプログラムは、初期化処理を必要とし、初期化処理は、複数のプログラムにより行われるとしてもよい。
この構成によると、複数の初期化プログラムを用いて、それぞれの初期化処理が行われることにより、初期化処理が分割・分散し、不正解析者によるデータ初期化処理に注目した秘密情報の利用場所の特定を困難にすることができる。
ここで、前記複数の初期化プログラムは、前記セキュアプログラムによる前記秘匿処理に先行して実行されるとしてもよい。
この構成によると、セキュアプログラムによる秘匿処理に先行して、各初期化プログラムに実行により、各初期化処理が行われるので、秘匿処理において、誤った初期値が使われて、誤った処理が行われることはない。
ここで、前記複数の初期化プログラムのうちの一部の初期化プログラムは、他の初期プログラムとは異なる時期において、実行されるとしてもよい。
この構成によると、不正解析者によるデータ初期化処理に注目した秘密情報の利用場所の特定を、さらに、困難にすることができる。
さらに、携帯電話などの電子機器においても耐タンパ技術を適用する場合、耐タンパ化されたソフトウェアが、利用するメモリサイズは増加する。そのため、前記耐タンパ化されたソフトウェアの初期化処理に要する時間が大きくなってしまい、即応性の求められる電子機器においては、ユーザによる所望の処理要求から、実際にソフトウェアが処理を開始するまでの初期化処理に多大な時間を要することになってしまう。
メモリの初期化処理の高速化に関する文献として、特許文献1に示されているメモリ管理方法がある。しかし、この方法ではプログラムのデータ初期化処理の高速化やセキュリティの向上に対する効果は得られない。
ここで、一部の初期化プログラムは、当該コンピュータシステムのリセットの直後において実行され、セキュアプログラムに含まれる初期化プログラムは、セキュアプログラムの実行が要求された時に、実行されるとしてもよい。
この構成によると、OSに依存しない環境で動作可能なセキュアソフトウェアの初期化処理を分割・分散することで、ユーザによる所望の処理要求から、実際にセキュアソフトウェアが処理を開始するまでの処理時間を短縮するとともに、さらに悪意のある解析者に対する耐性を向上させることができる。
以上説明したように、本発明によると、セキュアプログラムが実行するコード(ROM上に存在する)およびセキュアプログラムが利用するワークメモリ(RAM上に存在する)は、OS管理外の領域としているため、OS上で動作するソフトウェアデバッガからの解析を防ぐことが可能となる。
さらに、セキュアプログラムのRAMデータの初期化処理を分割しているため、ユーザによるセキュアプログラム処理要求発生からセキュアプログラムの起動までの処理時間を短縮することができる。
さらに、分割した初期化処理を分散して実行することにより、セキュアプログラムの初期化処理から解析を行う悪意のある解析者に対して、解析対象範囲を拡大させることが可能となるため、解析を困難にし、セキュリティレベルを向上させることができる。
また、セキュアプログラムがOSに依存しない環境で動作するものであるので、セキュアプログラムの他OSへの移植性が非常に高い。さらに、他OSへ移植する際にもセキュアプログラムのOS向けの変更が発生しないため、セキュリティレベルを落とすことなく移植することが可能となる。
セキュア処理システム1の構成を示すシステム構成図である。 コンパイル装置30の構成を示すブロック図である。 コンパイル装置40の構成を示すブロック図である。 メモリカード20及び携帯電話10の構成を示すブロック図である。 メモリ107のデータの配置を示す配置図である。 バイナリデータの各セクションの配置を示す配置図である。 メモリ107における物理アドレスと論理アドレスとの対応関係を示す図である。 セキュアプログラム202とセキュアプログラム用ワークメモリ602の内容を示す配置図である。 API分岐テーブル800のデータ構造を示すデータ構造図である。 リセットの後、OSプログラム210を起動し、OS上で動作するアプリケーションソフトが起動されるまでのシーケンスを示す図である。 セキュアプログラム202のZIセクションの初期化処理が完了するまでのシーケンスを示す図である。 セキュアプログラム202のZIセクションの初期化完了後、セキュアAPIの起動までのシーケンスを示す図である。 セキュアプログラム202の実行中に割込みが発生した場合のシーケンスを示す図である。
符号の説明
10 携帯電話
20 メモリカード
30 コンパイル装置
40 コンパイル装置
101 デバッガI/F
102 CPU
103 MMU
104 割込コントローラ
105 入力部
106 表示部
107 メモリ
108 入出力部
109 バッファ
110 符号処理部
111 D/A変換部
112 無線通信制御部
113 スピーカ
114 マイク
115 通信部
116 アンテナ
117 バス
120 通常領域
122 入出力部
130 セキュア領域
132 セキュア処理部
201 IPLプログラム
202 セキュアプログラム
210 OSプログラム
211 ノンセキュアプログラム
212 セキュアプログラム呼出部
213 切替デバイスドライバ
310 OS依存コンパイル部
320 OS依存リンク部
330 形式変換部
350 情報記憶部
410 OS非依存コンパイル部
420 OS非依存リンク部
430 形式変換部
450 情報記憶部
1.実施の形態
以下、本発明に係る1の実施の形態としてのセキュア処理システム1について、図面を参照しながら説明する。
1.1 セキュア処理システム1の構成
セキュア処理システム1は、図1に示すように、コンパイル装置30、コンパイル装置40、携帯電話10及びメモリカード20から構成されている。メモリカード20は、携帯電話10に装着される。
コンパイル装置30は、携帯電話10に導入されるOS(Operating System。基本ソフトウェア又は基本プログラムとも呼ぶ。)のカーネルの動作について記述しているソースプログラム、及び当該OSに依存するその他の動作を記述しているソースプログラムから、1個以上の実行形式のコンピュータプログラム(OS依存バイナリデータと呼ぶ。)を生成する。また、コンパイル装置40は、前記OSに依存しないその他の動作を記述しているソースプログラムから、1個以上の実行形式のコンピュータプログラム(OS非依存バイナリデータと呼ぶ。)を生成する。
携帯電話10は、後述するように、CPU(Central Processing Unit)、ROM(Read Only Memory)、RAM(Random Access Memory)などを含んで構成されるコンピュータシステムである。上記において生成されたOS依存バイナリデータ及びOS非依存バイナリデータは、ROMライタにより、携帯電話10が備えるROMに書き込まれる。こうして、ROMは、コンピュータプログラムであるOS依存バイナリデータ及びOS非依存バイナリデータを記憶し、前記CPUが、前記コンピュータプログラムに従って動作することにより、携帯電話10は、その一部の機能を達成する。OS依存バイナリデータであるコンピュータプログラムの一部は、OSを構成しており、他の部分は、当該OSの制御の元に動作する。
メモリカード20は、一例として、音楽又は映像のコンテンツが暗号化されて生成された暗号化コンテンツ及び前記暗号化コンテンツを復号するために用いられるコンテンツ鍵を記憶している。
携帯電話10は、ROMに書き込まれたOS依存バイナリデータ及びOS非依存バイナリデータに従って動作することにより、メモリカード20から暗号化コンテンツを読み出し、読み出した暗号化コンテンツを前記コンテンツ鍵を用いて復号し、復号コンテンツを生成し、生成した復号コンテンツを音楽又は映像として出力する。
1.2 コンパイル装置30の構成
コンパイル装置(プログラム生成装置とも呼ぶ。)30は、図2に示すように、OS依存コンパイル部310、OS依存リンク部320、形式変換部330及び情報記憶部350から構成されている。コンパイル装置30は、携帯電話10の後述するメモリ107のOSの管理領域に配置するバイナリデータを生成する。
コンパイル装置30は、具体的には、マイクロプロセッサ、ROM、RAM、ハードディスクユニット、ディスプレイユニット、キーボード、マウスなどから構成されるコンピュータシステムである。前記RAM又は前記ハードディスクユニットには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、コンパイル装置30を構成するOS依存コンパイル部310、OS依存リンク部320、形式変換部330は、その機能を達成する。
(1)情報記憶部350
情報記憶部350は、OSカーネルソース301a、301b、301c、・・・、ノンセキュアプログラムソース302a、302b、302c、・・・、セキュアプログラム呼出部ソース303a、303b、303c、・・・、切替デバイスドライバソース304a、304b、304c、・・・、アドレス指定ファイル322、OS依存ライブラリ321a、321b、321c、・・・を記憶している。また、OS依存バイナリデータ340a、340b、340c、・・・を記憶するための領域を備えている。
OSカーネルソース301a、301b、301c、・・・は、それぞれ、携帯電話10に導入されるOSの各種処理を記述しているソースコード(ソースプログラム)の一部分であるコンピュータプログラムであってコンピュータ命令を含み、OSカーネルソース301a、301b、301c、・・・は、これらのソースコード全体で、当該OS処理を記述している。また、OSカーネルソース301a、301b、301c、・・・は、全体として、携帯電話10のメモリ107上にOSプログラム210(後述する)として記憶されるバイナリデータに対応している。
ノンセキュアプログラムソース(通常プログラムとも呼ぶ。)302a、302b、302c、・・・は、それぞれ、ノンセキュアな処理が記述されたソースコード(ソースプログラム)であるコンピュータプログラムであってコンピュータ命令を含み、ノンセキュアプログラムソース302aは、携帯電話10のメモリ107上にノンセキュアプログラム211(後述する)として記憶されるバイナリデータに対応している。
セキュアプログラム呼出部ソース303aは、携帯電話10のメモリ107上に記憶されているセキュアプログラム202(後述する)を呼び出すように切替デバイスドライバ213(後述する)に依頼する処理が記述されたソースコード(ソースプログラム)であるコンピュータプログラムであってコンピュータ命令を含み、メモリ107上にはノンセキュアプログラム211(後述する)として記憶されるバイナリデータに対応する。切替デバイスドライバ213に依頼する処理は、本実施の形態では、OSプログラム210のライブラリコールで行うものとする。セキュアプログラム呼出部ソース303b、303c、・・・についても同様である。
切替デバイスドライバソース304aは、メモリ107上のセキュアプログラム呼出部212から依頼されたセキュアプログラム202の処理へ分岐させる処理が記述されたソースコード(ソースプログラム)であるコンピュータプログラムであってコンピュータ命令を含み、メモリ107上には切替デバイスドライバ213(後述する)として記憶されるバイナリデータに対応する。
アドレス指定ファイル322は、OS依存リンク部320によって作成されるバイナリのROMデータやRAMデータの配置アドレスを指定するファイルである。例えば、アドレス指定ファイル322は、OS依存リンク部320により生成される各OS依存バイナリデータについて、ターゲット装置(つまり、携帯電話10)のメモリにおいて、配置されるべき位置を示す物理アドレスを含む。
(2)OS依存コンパイル部310
OS依存コンパイル部310は、これらのOSカーネルソース301a、301b、301c、・・・、ノンセキュアプログラムソース302a、302b、302c、・・・、セキュアプログラム呼出部ソース303a、303b、303c、・・・、切替デバイスドライバソース304a、304b、304c、・・・を入力とし、高級言語で記述されたプログラムコードを低レベルなマシンコード(オブジェクトコード)、つまり、実行形式のコンピュータプログラムに変換して、それぞれ、オブジェクトファイルを生成する。
(3)OS依存リンク部320
OS依存リンク部320は、OS依存コンパイル部310で生成された各オブジェクトファイルに対し、再配置とシンボルの解決を行い、各オブジェクトファイル内にOS依存ライブラリ321a、321b、321c、・・・の関数シンボルが存在するのであれば、関連するOS依存ライブラリをリンクして、OS依存バイナリデータを生成する。
OS依存リンク部320は、アドレス指定ファイル322が指定されると、アドレス指定ファイル322内に記載された論理アドレスにおいてROMデータ、RAMデータを配置する。
(4)形式変換部330
形式変換部330は、OS依存リンク部320により生成された各OS依存バイナリデータを、ROMライターにより実際のROMメモリに書き込み可能な形式に変換して、OS依存バイナリデータ340a、340b、・・・を生成し、生成したOS依存バイナリデータ340a、340b、・・・を情報記憶部350へ書き込む。形式変換部330により生成されるデータ形式には、インテルHEX形式やモトローラSレコード形式などがある。
(5)OS管理外のROM/RAMの設定
コンパイル装置30は、以下に示すようにして、OS管理外のROM/RAMの設定を行う。
(a)OS管理外のRAM領域の確保
例えば、物理アドレス「0x10000000」から物理アドレス「0x11FFFFFF」までをアクセス対象のメモリ空間として扱うことができるOSに対して、物理アドレス「0x10000000」から物理アドレス「0x11E00000」までをOS管理のRAM領域として割り当て、物理アドレス「0x11F00000」から物理アドレス「0x11FFFFFF」までをOS管理外のRAM領域として割り当てる場合には、カーネル起動時に必要なRAMメモリパラメタのサイズを「0x1E00000」(バイト)と指定して、コンパイルする。
これにより、物理アドレス「0x10000000」から、指定されたサイズ「0x1E00000」の領域が、OS管理のRAM領域となり、その他の領域が、OS管理外のRAM領域となる。
(b)セキュアプログラム用のOS管理外のROM領域とOS管理外のRAM領域の物理−論理のマッピングの設定
セキュアプログラム用のOS管理外のROM領域とOS管理外のRAM領域の物理−論理のマッピングを設定する場合には、以下に示すようにする。
OSカーネルのメモリマッピングを指定するソースファイルにおいては、メモリマップを指定する構造体が存在する。Linuxの場合は、メモリマップ指定の構造体として、
map_desc standard_io_desc[]_initdata
が用意されている。
static struct map_desc_standard_io_desc[]_initdata={
MAP_DESC(論理アドレス、物理アドレス、サイズ、ドメイン属性、
READ属性、WRITE属性、CACHE属性、BUFFER属性);
};
ここで、論理アドレスでは、物理アドレスに対応付けたい論理アドレスを指定し、物理アドレスでは、論理アドレスに対応付けたい物理アドレスを指定し、サイズでは、上記アドレスから論理・物理アドレスの対応付けを行いたいサイズを指定する。ドメイン属性では、カーネル領域かユーザ領域なのかを指定し、READ属性では、READ可なら「1」を設定し、READ不可なら「0」を設定し、WRITE属性では、WRITE可なら「1」を設定し、WRITE不可なら「0」を設定し、CACHE属性では、キャッシュ有効なら「1」を設定し、キャッシュ無効なら「0」を設定し、BUFFER属性では、BUFFER有効なら「1」を設定し、BUFFER無効なら「0」を設定する。
後述する図7に示すように、OS管理外のROM、RAMを指定する場合には、この構造体に対して、以下のように、ソースファイルに記述し、このソースファイルを含むカーネルソースファイルをコンパイルする。
static struct map_desc_standard_io_desc[]_initdata={
MAP_DESC(0xFFB00000,0x11F00000,0x000FFFFF,DOMAIN_KERNEL,0,1,1,1),
/*セキュアプログラム用RAM*/
MAP_DESC(0xFFA00000,0x00260000,0x000FFFFF,DOMAIN_KERNEL,0,0,1,1),
/*セキュアプログラム用ROM*/
};
なお、セキュアプログラムのドメイン属性は、カーネルドメインとし、OS上で動作する通常ソフトウェアからのアクセスを禁止する。
さらに、セキュアプログラムのメモリへのアクセスは、切替デバイスドライバ経由で実行されるため、デバイスドライバから、READ/WRITE実行可能かつCPUキャッシュが有効であることか必要である。
(6)まとめ
以上説明したように、OSカーネルソース301a、301b、301c、・・・、ノンセキュアプログラムソース302a、302b、302c、・・・、セキュアプログラム呼出部ソース303a、303b、303c、・・・、切替デバイスドライバソース304a、304b、304c、・・・は、それぞれ、OS依存コンパイル部310によりコンパイルされ、コンパイルによって作成されたオブジェクトファイルはOS依存リンク部320によりリンク処理が行われる。OS依存リンク部320によって生成されたOS依存バイナリデータは、形式変換部330により、ROMに書き込める形式に変換され、OS依存バイナリデータ340a、340b、・・・が情報記憶部350に書き込まれる。
OS(基本プログラム)は、前記管理領域のみをアクセス空間とし、ノンセキュアプログラム(通常プログラム)に対して前記管理領域へのアクセスを仲介する命令と、切替デバイスドライバ(切替プログラム)に対して、セキュアプログラムへの切替を指示する命令とを含む。
ノンセキュアプログラム(通常プログラム)は、OS(基本プログラム)を介して、前記管理領域にアクセスする命令を含む。
切替デバイスドライバ(切替プログラム)は、OS(基本プログラム)の指示により、OS(基本プログラム)セキュアプログラムへの実行の切替えを行う命令を含む。
セキュアプログラムは、前記管理外領域のみをアクセス空間とし、前記管理外領域へアクセスする命令を含む。また、セキュアプログラムの対象処理、例えば、暗号化コンテンツの前記コンテンツ鍵を用いた復号の処理の終了後、セキュアプログラムから基本プログラムへの実行の切替えを行う命令を含む。
1.3 コンパイル装置40の構成
コンパイル装置(プログラム生成装置とも呼ぶ。)40は、図3に示すように、OS非依存コンパイル部410、OS非依存リンク部420、形式変換部430及び情報記憶部450から構成されている。コンパイル装置40は、携帯電話10の後述するメモリ107のOSの管理外領域に配置するバイナリデータを生成する。
コンパイル装置40は、具体的には、マイクロプロセッサ、ROM、RAM、ハードディスクユニット、ディスプレイユニット、キーボード、マウスなどから構成されるコンピュータシステムである。前記RAM又は前記ハードディスクユニットには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、コンパイル装置40を構成するOS非依存コンパイル部410、OS非依存リンク部420、形式変換部430は、その機能を達成する。
情報記憶部450は、セキュアプログラムソース401a、401b、401c、・・・、アドレス指定ファイル422、OS非依存ライブラリ421a、421b、421c、・・・を記憶している。また、OS非依存バイナリデータ440a、440b、440c、・・・を記憶するための領域を備えている。
セキュアプログラムソース401aは、秘密情報を利用した処理が記述されているソースコード(ソースプログラム)であるコンピュータプログラムであってコンピュータ命令を含む。このセキュアプログラムソース401aは、本実施の形態では、暗号化コンテンツを復号するための復号処理が記述されたコードであり、メモリ107上にセキュアプログラム202(後述する)として記憶されるバイナリデータに対応している。セキュアプログラムソース401b、401c、・・・についても同様である。
アドレス指定ファイル422は、図2で説明したアドレス指定ファイル322同じであるので説明を省略する。ただし、セキュアプログラムソース401a、401b、401c、・・・、に対応して生成されるセキュアプログラム202等を、OSプログラム210の管理外領域に配置するため、アドレス指定ファイル422は、管理外領域のアドレスを指定する。
OS非依存コンパイル部410は、OS非依存な処理が記述されたソースコードを高級言語から低レベルなマシンコード(オブジェクト)に変換する。OS非依存コンパイル部410は、CPU102のアーキテクチャに合ったマシンコードを作成する。
OS非依存リンク部420は、再配置とシンボル解決を行い、必要であればOS非依存ライブラリをリンクしCPU102で実行可能なバイナリデータを作成する。OS非依存とは、OS依存ライブラリ321a、321b、321c、・・・をリンクしないことを示している。
形式変換部430は、図2で説明した形式変換部330と同じであるので説明を省略する。
1.4 メモリカード20の構成
メモリカード20は、図4に示すように、通常領域120、セキュア領域130、入出力部122、セキュア処理部132から構成される。
メモリカード20は、具体的には、マイクロプロセッサ、ROM、RAMなどから構成されるコンピュータシステムである。前記RAMには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、メモリカード20は、その一部の機能を達成する。
通常領域120は、外部機器により自由にアクセスできる記憶領域であり、本実施の形態では暗号化コンテンツ121が記憶されている。
セキュア領域130は、許可された外部機器のみがアクセスできる領域であり、コンテンツ鍵131が記憶されている。
暗号化コンテンツ121は、暗号化された音楽データまたは動画データであり、コンテンツ鍵131を暗号鍵として暗号アルゴリズムを用いて暗号化されたデータである。各暗号化データは、コンテンツIDにより識別される。なお、本実施の形態では、暗号化コンテンツ121は共通鍵方式で暗号化されているものとし、コンテンツ鍵131を復号鍵として用いることにより、復号されたコンテンツ、すなわち音楽データまたは動画データを取得可能であるものとする。
入出力部122は、外部機器と通常領域120とセキュア処理部132との間での各種データを入出力する。
セキュア処理部132は、外部機器との間で、CPRM(Content Protection for Recordable Media)の仕組みに基づいて相互認証を行い、認証に成功した場合に、認証した機器と鍵を共有する。共有した鍵を用いて、外部機器との間で安全にデータの入出力を行う。なお、CPRMは公知であるので説明を省略する。
1.5 携帯電話10の構成
携帯電話10は、図4に示すように、デバッガIF101、CPU102、MMU(Memory Management Unit)103、割込コントローラ104、入力部105、表示部106、メモリ107、入出力部108、バッファ109、符号処理部110、D/A変換部111、無線通信制御部112、スピーカ113、マイク114、通信部115、アンテナ116から構成され、各回路はバス117で接続されている。
(1)携帯電話10の各構成要素
メモリ107は、ROMおよびRAMから構成され、CPU102により実行される各種プログラムを記憶している。
CPU102は、命令フェッチ部、命令デコーダ、演算器、プログラムカウンタ、リンクレジスタ、スタックポインタなどを備え、メモリ107上のプログラムから命令をフェッチし、フェッチした命令を解読し、解読した命令を実行する。
MMU103は、論理アドレスを物理アドレスに変換する仮想記憶機能を実現する。
デバッガIF101は、携帯電話10と外部のデバッガとを接続するためのインターフェースである。
割込コントローラ104は、FIQ、IRQなどのハードウェア割込みやソフトウェア割込み(SWI)、プリフェッチアボート、データアボート、リセットなどの各種割込みを検知し、CPU102の割込検出用のレジスタへ割込み発生通知を出力する。
通信部115は、無線通信制御部112と、携帯電話網、インターネットに接続された外部機器との間でアンテナ116を介して情報の送受信を行う。
無線通信制御部112は、ベースバンド部、変復調部、増幅部などを備えており、通信部およびアンテナ116を介して送受信される各種情報の信号処理を行う。
符号処理部110は、バッファ109に記憶されている音楽データにMP3などの符号化技術に従った復号処理を施し、D/A変換部111へ出力する。
D/A変換部111は、符号処理部110により復号された音楽データをアナログ音声信号に変換し、スピーカ113へ出力する。
入力部105は、テンキー、決定ボタンなどの各種ボタンを備え、利用者によるこれらの操作を受け付ける。
表示部106は、VRAM、液晶画面を備え、各種の画面を表示する。
マイク114は、音を電気信号に変換し、生成した電気信号を無線通信制御部112へ出力する。
スピーカ113は、無線通信制御部112およびD/A変換部111から、アナログ信号を受け取り、受け取ったアナログ信号を音に変換して出力する。
(2)メモリ107の構成
メモリ107の構成を図5に示す。メモリ107は、ROMとRAMから構成される。図5では、ROMとRAMとを区別して図示していないが、ROMとRAMとの区別は、図7において図示している。
一例として図5に示すように、メモリ107は、OSプログラム210、ノンセキュアプログラム211、セキュアプログラム呼出部212、切替デバイスドライバ213、セキュアプログラム202、IPL(Initial Program Loader)プログラム201を記憶している。
さらに、本実施の形態では、メモリ107に、OSが管理する管理領域とOSの管理外である管理外領域との2つを割り当てて利用する。OS上で動作するノンセキュアプログラム211、セキュアプログラム呼出部212、切替デバイスドライバ213は、OSの管理領域に記憶される。一方、IPLプログラム201、セキュアプログラム202はOSの管理外領域に記憶される。この割り当て方法については、後述する。
このようにセキュアプログラム202は、OSの管理外の管理外領域で動作するため、OS上で動作するソフトウェアデバッガからの解析が不可能となり、セキュア状態でセキュアプログラムの実行が可能となる。
(各プログラムの説明)
IPLプログラム201は、アセンブラで書かれたコード(コンピュータプログラム)であり、OSが起動するために必要なハードウェアの初期化を行い、OSのカーネル初期化処理へ分岐する命令を含む。また、IPLプログラム201は、後述するZIセクションA711のデータの初期化を実施する命令を含む。
OSプログラム210は、オペレーティングシステムであり、カーネル初期化時にOSが利用するハードウェアの初期化、MMU103の設定やメモリ管理やファイルの管理、ユーザーインターフェースの提供等を行う基本ソフトウェアである。
ノンセキュアプログラム211とセキュアプログラム呼出部212と切替デバイスドライバ213は、OSが管理するメモリで動作するプログラム群である。
ノンセキュアプログラム211は、セキュア環境での実行を必要としないアプリケーションである。例えば、携帯電話10のGUIを管理するアプリケーションや個人のスケジュールを管理するプログラムや音楽再生アプリケーション等である。コンテンツ再生時、メモリカード20に記憶されている暗号化コンテンツ121に対して、メモリカード20に記憶されているコンテンツ鍵131を用いて、セキュアに復号処理を施す必要がある。音楽再生アプリケーションは、セキュアプログラム呼出部212を呼び出す復号処理要求を含む。この復号処理要求は、コンテンツ鍵131を用いた暗号化コンテンツ121の復号処理の要求を示す。
セキュアプログラム呼出部212は、セキュアプログラム202を実行するための呼出プログラムであり、切替デバイスドライバ213にセキュアプログラム202の実行を依頼する。
切替デバイスドライバ213は、管理外領域に記憶されたセキュアプログラム202へ処理を移すインターフェースの役割をする。
セキュアプログラム202は、秘密情報を扱って処理を行うプログラムである。本実施の形態では、セキュアプログラム202は、暗号化コンテンツ121をコンテンツ鍵131を用いて復号する復号プログラムである。また、セキュアプログラム202は、当該セキュアプログラム202の起動直後に、後述するZIセクションB712のゼロ初期化処理を実行する。
なお、本実施の形態において、メモリ107は、ROMとRAMとから構成されるとしているが、これに限定するわけではない。メモリ107は、プログラムが記憶できるプログラム記憶部と、プログラム動作時に利用するワークメモリが記憶できるワークメモリ記憶手段とを備えていればよい。例えば、プログラム記憶手段として、HDD(Hard Disk Drive)やEEPROM(Electrically Erasable Programmable ROM)やFlashROMなどを利用してもよいし、ワークメモリ記憶手段として、SDRAM(Synchronous DRAM)、SRAM(Static RAM)などを利用してもよい。
上述したOSプログラム210、ノンセキュアプログラム211、セキュアプログラム呼出部212及び切替デバイスドライバ213は、コンパイル装置30において、1個以上のOS依存バイナリデータとして生成され、セキュアプログラム202は、コンパイル装置40において、1個以上のOS非依存バイナリデータとして生成される。
こうして生成された1個以上のOS依存バイナリデータと1個以上のOS非依存バイナリデータとが、ROMライタにより、ROMに書き込まれる。図5は、こうしてROMに書き込まれた結果を示している。
(各バイナリデータのセクション構成)
ここで、コンパイル装置30におけるコンパイル及びリンクにより生成された各OS依存バイナリデータのセクション構成について説明する。
各OS依存バイナリデータは、図6に示すように、ZIセクション501、RWセクション502及びROセクション503から構成されている。
ZIセクション501は、ゼロ初期化対象データ領域である。各プログラムの初期化の段階で、このセクション内のデータは、ゼロで初期化されなければならない。
RWセクション502は、読み書き可能なセクションであり、読み書き可能なデータが配置されるセクションである。
ROセクション503は、読み込みのみ可能なセクションであり、実行可能なコード(命令)が配置されるセクションである。
図5では、メモリ107内をROMとRAMに区別して記述していないが、実際は、図6に示すように、各OS依存バイナリデータのZIセクションとRWセクションはRAMに配置され、ROセクションに対応するものはROMに配置される。
また、コンパイル装置40におけるコンパイル及びリンクにより生成された各OS非依存バイナリデータ440a、440b、・・・も、それぞれ、図6に示すように、ZIセクション、RWセクション及びROセクションから構成されている。
セキュアプログラム202が起動する前に、セキュアプログラム202を構成するZIセクションは、ゼロで初期化されなければならない。しかし、ZIセクションのサイズが大きいと、ゼロ初期化処理に時間を要することになる。端末の応答性能が重要とされる電子機器においては、初期化処理の時間をなるべく削減して、セキュアプログラム202の起動を高速に行いたい。
この高速化のために、ZIセクションを複数のサブセクションに分割し、セキュアプログラム202が起動される以前に、一部のサブセクションのゼロ初期化処理を行い、セキュアプログラム202が起動された直後に、残りのサブセクションのゼロ初期化処理を行う。このように、初期化処理を分割することにより、セキュアプログラム202における初期化処理の高速化が可能となる。このシーケンスについては、図10及び図11を用いて、後述する。
(メモリ107の論理アドレスと物理アドレス)
次に、メモリ107の論理アドレスと物理アドレスの関係について簡単に説明をする。
各プログラム中において用いられるアドレスは、論理アドレスであり、これをMMU103が物理アドレスに変換して実際にメモリ107にアクセスする。つまり、上述したOSプログラム210、ノンセキュアプログラム211、セキュアプログラム呼出部212、切替デバイスドライバ213及びセキュアプログラム202において、メモリ107が形成する記憶空間を指し示すアドレスは、論理アドレスであり、MMU103は、これらのプログラムにおいて用いられる論理アドレスを物理アドレスへ変更し、物理アドレスにより、メモリ107が形成する記憶空間を指し示す領域へのアクセスが行われる。
携帯電話10の電源が投入された直後であって、MMU103の初期化が行われていない場合には、各プログラムには、論理アドレスは割り当てられない。また、物理アドレスと論理アドレスの変換作業が可能となるのは、MMU103が有効な状態にあるときである。
(メモリ107のメモリマップ)
メモリ107における物理アドレスと論理アドレスとの対応関係を図7に示す。
メモリ107には、上述したように、セキュアプログラム202、IPLプログラム201、OSプログラム210、ノンセキュアプログラム211、セキュアプログラム呼出部212及び切替デバイスドライバ213が配置され、また、OS用メインメモリ601及びセキュアプログラム用ワークメモリ602が配置されている。
ここで、セキュアプログラム202は、ROM上におけるOSの管理外領域651に配置され、OSプログラム210、ノンセキュアプログラム211、セキュアプログラム呼出部212及び切替デバイスドライバ213は、ROM上におけるOSの管理領域652に配置されている。また、OS用メインメモリ601は、RAM上におけるOSの管理領域653に配置され、セキュアプログラム用ワークメモリ602は、RAM上におけるOSの管理外領域654に配置されている。
物理アドレス0x08000000から0x080C0000により示されるROM内の領域に、IPLプログラム201が存在する。IPLプログラム201は、OSプログラム210が起動する前に実行されるコード(プログラム命令)であり、IPLプログラム201には、論理アドレスは割り当てられていない。なお、本明細書において、0xに続く文字列は、16進数による表現である。
OSプログラム210、ノンセキュアプログラム211、セキュアプログラム呼出部212及び切替デバイスドライバ213は、物理アドレス0x080D0000から0x0BE10000により示されるROM内の領域に存在し、この領域には、論理アドレス0xD0000000から0xD3D40000がOSにより割り当てられる。
OS用メインメモリ601は、OSやOS上で動作するプログラムが利用するワークメモリであり、物理アドレスが0x10000000から0x11E00000のRAM内の領域に存在し、この領域には、論理アドレス0xC0000000から0xC1E00000が割り当てられる。
セキュアプログラム202は、セキュアプログラムの実行コード(プログラム命令)が書かれており、物理アドレス0x00260000から0x00350000のROM内の領域に存在し、この領域には、論理アドレス0xFFA00000から0xFFAFFFFFが割り当てられる。
セキュアプログラム用ワークメモリ602は、セキュアプログラム202が利用するワークメモリであり、物理アドレス0x11F00000から0x11FFFFFFのRAM内の領域に存在し、この領域には、論理アドレス0xFFB00000から0xFFBFFFFFが割り当てられる。
上述したような論理アドレスの指定は、OSプログラム210のカーネルの初期化処理において行われる。
なお、コンパイル装置30が記憶しOS依存リンク部320において用いられるアドレス指定ファイル322、及びコンパイル装置40が記憶しOS非依存リンク部420において用いられるアドレス指定ファイル422においては、上述したようにアドレスが割り当てられるように記述されている。
なお、本実施の形態では、上述したように物理アドレス及び論理アドレスを割り当てているが、実装対象の機器によって変わるものであり、本発明が、このアドレス値に限定されるわけではない。
(セキュアプログラム202とセキュアプログラム用ワークメモリ602)
次に、セキュアプログラム202とセキュアプログラム用ワークメモリ602の内容について、図8を用いて、さらに詳しく説明する。
セキュアプログラム用ワークメモリ602は、ZIセクションを2個に分割したZIセクションA711、ZIセクションB712及びRWセクション713から構成されている。
ZIセクションA711及びZIセクションB712は、セキュアプログラム202が実行される前にゼロ初期化され、セキュアプログラム202により利用されるデータが格納されるデータ格納セクションである。本実施の形態では、セキュアプログラム202の初期化処理を高速にするために、ZIセクションは、ZIセクションA711及びZIセクションB712に分割されている。
セキュアプログラム用ワークメモリ602のZIセクションのゼロ初期化処理においては、携帯電話10の電源が投入された直後に、IPLプログラム201により、ZIセクションA711のゼロ初期化処理が実行され、次にユーザによるコンテンツ再生要求がされ、セキュアプログラム202の起動直後に、セキュアプログラム202により、ZIセクションB712のゼロ初期化処理が実行される。
このようにユーザによるコンテンツ再生要求がされるよりも前に、ZIセクションA711のゼロ初期化処理を行っておくことにより、ユーザによるコンテンツ再生要求後からセキュアプログラム202の初期化処理が完了するまでの時間を短縮することができ、ユーザの待ち時間を短縮することが可能となる。また、ZIセクションの初期化処理を分散させることにより、不正解析者によるセキュアプログラム202の解析を困難にさせることも可能となる
RWセクション713は、セキュアプログラム202が利用する読み書き可能なデータが格納される領域である。
なお、セキュアプログラム用ワークメモリ602は、セキュアプログラム202のスタック領域として利用してもよい。
セキュアプログラム202は、セキュアAPI分岐処理701、ZIセクションB初期化API702、セキュアAPI_A703及びセキュアAPI_B704から構成される。
セキュアAPI分岐処理701、ZIセクションB初期化API702、セキュアAPI_A703及びセキュアAPI_B704は、図8に示すように、それぞれ、論理アドレス「0xFFA00000」、「0xFFA01000」、「0xFFA02000」及び「0xFFA03000」により開始位置が示されるセキュアプログラム202内の領域に格納されている。
セキュアAPI分岐処理701は、ZIセクションB初期化API702、セキュアAPI_A703及びセキュアAPI_B704のそれぞれへの分岐先アドレス情報を含むAPI分岐テーブル800(後述する)を格納している。
セキュアプログラム202の各APIを識別する識別子は、セキュアプログラム呼出部212から、切替デバイスドライバ213を経由し、セキュアAPI分岐処理701へ出力される。セキュアAPI分岐処理701は、切替デバイスドライバ213より識別子を受け取り、API分岐テーブル800から受け取った識別子に対応する分岐先アドレスを抽出し、抽出した分岐先アドレスへ実行を分岐する。
ZIセクションB初期化API702は、ZIセクションB712のゼロ初期化処理を行う実行コード(プログラム命令)である。
セキュアAPI_A703及びセキュアAPI_B704は、それぞれ、セキュアプログラムのAPI処理を行う実行コード(プログラム命令)である。
なお、本実施の形態1では、セキュアプログラムのセキュアなAPIをセキュアAPI_A703及びセキュアAPI_B704の2個として説明しているが、2個に限定するわけではなく、2個以上存在してもよい。
(API分岐テーブル800のデータ構造)
API分岐テーブル800のデータ構造を図9に示す。
API分岐テーブル800は、複数の分岐先アドレス情報811、812及び813から構成されており、分岐先アドレス情報811、812及び813は、それぞれ、セキュアプログラム202に含まれているZIセクションB初期化API702、セキュアAPI_A703及びセキュアAPI_B704に対応しており、各分岐先アドレス情報は、識別子と分岐先アドレスとを含む。
ここで、識別子は、当該識別子を含む分岐先アドレス情報に対応しているAPIを識別する識別情報である。また、分岐先アドレスは、当該分岐先アドレスを含む分岐先アドレス情報に対応しているAPIがセキュアプログラム202内において格納されている位置を示す論理アドレスである。
次に、分岐先アドレス情報811、812及び813についてさらに説明する。
分岐先アドレス情報811は、図9に示すように、識別子801「1」と分岐先アドレス802「0xFFA01000」とを含む。分岐先アドレス情報811は、ZIセクションB初期化API702に対して、識別子801「1」が割り当てられ、論理アドレス「0xFFA01000」により開始位置が示されるセキュアプログラム202内の領域において、ZIセクションB初期化API702の実行コード(プログラム命令)が記憶されていることを示している。
従って、識別子として「1」が指定され、セキュアAPI分岐処理701により、「0xFFA01000」に分岐すると、ZIセクションB初期化API702が実行される。
また、分岐先アドレス情報812は、図9に示すように、識別子803「2」と分岐先アドレス804「0xFFA02000」とを含む。分岐先アドレス情報812は、セキュアAPI_A703に対して、識別子803「2」が割り当てられ、論理アドレス「0xFFA02000」により開始位置が示されるセキュアプログラム202内の領域において、セキュアAPI_A703の実行コード(プログラム命令)が記憶されていることを示している。
従って、識別子として「2」が指定され、セキュアAPI分岐処理701により、「0xFFA02000」に分岐すると、セキュアAPI_A703が実行される。
さらに、分岐先アドレス情報813は、図9に示すように、識別子805「3」と分岐先アドレス806「0xFFA03000」とを含む。分岐先アドレス情報813は、セキュアAPI_B704に対して、識別子805「3」が割り当てられ、論理アドレス「0xFFA03000」により開始位置が示されるセキュアプログラム202内の領域において、セキュアAPI_B704の実行コード(プログラム命令)が記憶されていることを示している。
従って、識別子として「3」が指定され、セキュアAPI分岐処理701により、「0xFFA03000」に分岐すると、セキュアAPI_B704が実行される。
なお、本実施の形態では、API分岐テーブル800は、識別子と分岐先アドレスとを含む複数個の分岐先アドレス情報から構成されているが、この構成に限定されるわけではなく、所望のAPIに分岐する処理を行うるためのアドレス情報が格納されていればよい。
(3)セキュアAPIの実行のシーケンス
次に、セキュアプログラム202のセキュアAPIが実行されるまでのシーケンスについて説明する。
(a)アプリケーションソフト起動までのシーケンス
ここでは、リセットの後、OSプログラム210を起動し、OS上で動作するアプリケーションソフトが起動されるまでのシーケンスについて、図10を用いて説明する。
本実施の形態においては、セキュアプログラム202が、メモリ107内のOSの管理外領域においてワークメモリ(RAM)として利用するセキュアプログラム用ワークメモリ602内のZIセクションのデータの初期化処理に係る時間を短縮するために、上述したように、セキュアプログラムのRAMデータの初期化処理を分割している。具体的には、ZIセクションの初期化処理を2段階に分割している。
携帯電話10は、利用者による電源投入などにより、リセットを受け付ける(ステップS900)。
リセット後、IPLプログラム201は、OSの起動に必要なハードウェアを初期化する。(ステップS901)
次に、IPLプログラム201は、ZIセクションA711のデータの初期化を実施する。(ステップS902)
ZIセクションA711のデータの初期化が終了すると、カーネルに分岐する(ステップS903〜S904)。
カーネルに分岐後、以下に示すカーネルの初期化処理が実行される。まず、カーネルの初期化処理としては、MMU103の初期化が実行され(ステップS905)、次に、携帯電話10が備え、OSが利用する各種デバイスの初期化が実行される(ステップS906)。
カーネルの初期化が終了すると、OSが起動されたことになり、その後、各アプリケーションソフトが起動される(ステップS907)。
ここで、アプリケーションソフトのうち、ユーザによる操作により起動されるものが存在してもよい。ステップS907が実行されると、携帯電話としての機能が有効となり、着信、発信等が行える状態となり、ユーザが携帯電話上の各種操作を行える状態となる。
(b)セキュアプログラム202の実行までのシーケンス
ここでは、セキュアプログラム202が実行されるまでのシーケンスを、図11及び図12を用いて、説明する。
ここで、図11は、セキュアプログラム202のZIセクションの初期化処理が完了するまでのシーケンスを示し、図12は、セキュアプログラム202のZIセクションの初期化完了後、セキュアAPIの起動までのシーケンスを示している。
ユーザによる音楽再生のボタン操作が行われると(ステップS1000)、OSは、セキュアプログラム呼出部212へ処理を移す(ステップS1001〜ステップS1002)。
次に、セキュアプログラム呼出部212は、切替デバイスドライバ213をオープンし(ステップS1003)、識別子として「1」を指定して、切替デバイスドライバ213に対し、ライブラリコールし、切替デバイスドライバ213へ処理が移る(ステップS1004〜ステップS1005)。
次に識別子「1」を受け取った切替デバイスドライバ213は、セキュアAPI分岐処理701に分岐し、セキュアAPI分岐処理701へ処理が移る(ステップS1006〜ステップS1007)。
セキュアAPI分岐処理701は、スタックポインタの設定を、セキュアプログラム202が利用するものに戻し(ステップS1008)、API分岐テーブル800から、識別子「1」に対応する分岐先アドレスを取得する。ここでは、識別子「1」に対応するZIセクションB初期化API702の分岐先アドレス802「0xFFA01000」が取得され、論理アドレス「0xFFA01000」により示される格納位置に格納されている実行コード、つまり、ZIセクションB初期化API702に分岐する(ステップS1009〜ステップS1010)。
「0xFFA01000」に処理が分岐すると、ZIセクションB初期化API702が実行される(ステップS1011)。これにより、ZIセクションB712の初期化が完了する。
ZIセクションB712の初期化が完了すると、セキュアAPI分岐処理701は、スタックポインタの設定を、OSが利用するものに戻す(ステップS1012)。
その後、OS上で動作するセキュアプログラム呼出部212へ処理が移る(ステップS1013〜ステップS1014)。
以上により、セキュアAPI_A703及びセキュアAPI_B704が利用するZIセクションA711及びZIセクションB712の初期化が完了する。
次に、セキュアプログラム呼出部212は、セキュアAPIの識別子を指定し、切替デバイスドライバ213に対し、ライブラリコールし、切替デバイスドライバ213へ処理が移る(ステップS1015〜ステップS1016)。
切替デバイスドライバ213は、指定された識別子をセキュアAPI分岐処理701へ出力し、セキュアAPI分岐処理701へ分岐する(ステップS1017〜ステップS1018)。
セキュアAPI分岐処理701は、スタックポインタの設定を、セキュアプログラム202が利用するものに戻し(ステップS1019)、次に、API分岐テーブル800から、受け取った識別子に対応する分岐先アドレスを取得し、取得した分岐先アドレスへ分岐する(ステップS1020〜ステップS1021)。
次に、分岐先アドレスで示される位置に格納されるセキュアプログラム202のAPI処理が実行される(ステップS1022)。
セキュアAPIの処理が終了すると、スタックポインタの設定を、OSが利用するものに戻し(ステップS1023)、その後、セキュアプログラム呼出部212及びOSへ処理が移る(ステップS1024〜ステップS1026)。
図12に示すステップS1015からステップS1026までの処理は、図11に示すステップS1000からステップS1014までの処理が完了した後、複数回実行されてもよい。図11に示す全てのステップが完了していることは、セキュアプログラムが実行する際に初期化されるべきZIセクションの初期化処理完了を意味しているからである。
なお、本実施の形態では、セキュアAPI_A703は、コンテンツ鍵取得を行うコンピュータプログラムであり、セキュアAPI_B704は、暗号化コンテンツ121をコンテンツ鍵131を用いて復号するコンピュータプログラムである。
この場合、まず図11に示す全てのステップが実行されZIセクションの初期化が完了する。次に、識別子を「2」として、図12に示す全てのステップが実行されることにより、コンテンツ鍵131が取得される。次に、識別子を「3」として、図12に示す全てのステップが実行されることにより、コンテンツ鍵131を用いて暗号化コンテンツ121が復号される。
2.その他の変形例
なお、本発明を上記実施の形態に基づいて説明してきたが、本発明は、上記の実施の形態に限定されないのはもちろんである。以下のような場合も本発明に含まれる。
(1)セキュアプログラム202は、セキュアプログラム202の実行中に、IRQ、FIQ、ソフトウェア割込み等の割込みが発生した場合に、セキュアプログラム202による処理を一時的に中断し、セキュアプログラム202による処理対象のセキュアデータを暗号化し、割込みに対応する処理が完了した後に、暗号化セキュアデータを復号し、セキュアプログラム202による処理を一時的に中断した点から、セキュアプログラム202による処理を継続して実行するとしてもよい。具体的には、以下に示す通りである。
IPLで初期化される領域であるZIセクションA711又はセキュアプログラム202により初期化される領域であるZIセクションB712に、セキュアプログラム202の初期化完了フラグを設ける。初期化完了フラグは、セキュアプログラム202によるZIセクションB712の初期化完了後、「1」に設定され、セキュアプログラム202が実行されている間は、常に、「1」となっている。
このように、初期化完了フラグをZIセクションに設けてもよい。しかしZIセクションに限定されることなく、RWセクションに初期化完了フラグを設けるとしてもよい。
一般的に、コンピュータシステムにおいては、IRQ、FIQ、ソフトウェア割込み等の割込みが発生すると、CPUの例外ベクタテーブルに分岐する。例外ベクタテーブルには、割込み要因毎に割込み処理ルーチンが登録されており、例外ベクタテーブルにより、割込み要因毎に、割込み処理ルーチンへ分岐し、所望の割込み処理が行われる。
本変形例においては、例外ベクタテーブルにおいて、予め、割込みが発生するとセキュアプログラム202に分岐するように登録しておく。このようにすることで、割込みが発生するたびに、セキュアプログラム202へ一旦処理が移るようになる。
セキュアプログラム202の実行中に割込みが発生した場合のシーケンスを、図13を用いて、説明する。
セキュアプログラム202は、ZIセクションBの初期化を完了すると(ステップS1011)、次に、初期化完了フラグを「1」にセットする(ステップS1201)。
セキュアプログラム202が、実行されている間は、初期化完了フラグは、常に、「1」となっている。
セキュアプログラム202は、セキュアAPIの実行を開始する(ステップS1022)。
IRQ、FIQ、ソフトウェア割込み等の割込みが発生すると(ステップS1202)、CPUの例外ベクタテーブルに処理が移る。例外ベクタテーブルには、あらかじめセキュアプログラム202へ分岐するように、ベクタが登録されているので、セキュアプログラム202に分岐する(ステップS1203)。
セキュアプログラム202に分岐後、セキュアプログラム202は、初期化完了フラグが「1」であるか否かを判断する(ステップS1204)。
初期化完了フラグが、「1」であれば(ステップS1204でYES)、セキュアプログラム202の対象となる処理が実行中であるので、セキュアプログラム202は、割込み発生時のポイントを退避し(ステップS1206)、セキュアプログラム202が実行中に利用しているセキュアな情報に関連するセキュアデータ(ランタイムデータ)を暗号化して暗号化セキュアデータを生成する(ステップS1207)。暗号化セキュアデータの生成後、OSへ処理を移し(ステップS1208)、OSは、割込み処理を実施し(ステップS1209)、割込み処理が終了したら、セキュアプログラム202へ処理を移す(ステップS1210)。セキュアプログラム202は、初期化完了フラグが「1」であるか否かを判断する(ステップS1211)。初期化完了フラグが、「1」であれば(ステップS1211でYES)、セキュアプログラム202は、暗号化セキュアデータを復号して復号セキュアデータを生成し(ステップS1213)、割込みが発生してセキュアプログラム202の処理が中断していたポイントに復帰し(ステップS1214)、セキュアプログラム202の処理を継続する(ステップS1215)。
セキュアプログラム202の対象である処理の実行が終了する直前に、セキュアプログラム202は、初期化完了フラグを「0」に設定し(ステップS1216)、その後、セキュアプログラム202の実行が終了する。
初期化完了フラグが、「1」でなければ(ステップS1204でNO、又はステップS1211でNO)、OSへ処理を移す(ステップS1205、又はステップS1212)。
(2)本実施の形態では、セキュアプログラム202は、暗号化コンテンツを復号する復号プログラムであるとしているが、これに限定されることなく、秘密情報を扱うプログラムであるとしてもよい。
(3)本実施の形態では、切替デバイスドライバ213が、OS依存バイナリデータからOS非依存バイナリデータへの切替インターフェースの働きをしているが、切替デバイスドライバ213を利用することなく、セキュアプログラム呼出部212からセキュアAPI分岐処理701へ直接分岐するようにしてもよい。
(4)本実施の形態では、セキュアAPI分岐処理701が、スタックポインタの設定を、セキュアプログラム202が利用するものに戻し、また、スタックポインタの設定を、OSが利用するものに戻すとしているが、これには、限定されない。
切替デバイスドライバ213は、OSからセキュアプログラムへの切替の際に、切替の時点でOSが利用しているスタックポインタを退避し、スタックポインタの設定を、予め退避しておいたセキュアプログラム用のスタックポインタへ戻す命令を含むとしてもよい。また、切替デバイスドライバ213は、セキュアプログラムからOSへの切替の際に、切替の時点でセキュアプログラムが利用しているスタックポインタを退避し、スタックポインタの設定を、予め退避しておいたOS用のスタックポインタへ戻す命令を含むとしてもよい。
また、セキュアAPI分岐処理701が上記を行うとしてもよい。
(5)上述したセキュアプログラムは、BIOS(Basic Input/Output System)を構成するその一部のプログラムであるとしてもよい。BIOSとは、一般的に、コンピュータに接続されたディスクドライブ、キーボード、ビデオカードなどの周辺機器を制御するプログラム群である。
(6)上記の実施の形態では、コンパイル装置30及びコンパイル装置40は、別々の装置であるとしているが、これには限定されない。コンパイル装置30及びコンパイル装置40のそれぞれが有する構成要素を備えた1台のコンパイル装置から構成されるとしてもよい。
このコンパイル装置は、オペレーティングシステムを構成するソースコードにコンパイルを施して、第1オブジェクトを生成する第1コンパイル部と、前記第1オブジェクトのシンボル解決と再配置と第1ライブラリに含まれるプログラムとのリンクとを行って、オペレーティングシステムである実行可能形式の第1ソフトウェアを生成する第1リンク部と、秘匿情報を利用する処理を構成するソースコードにコンパイルを施して、第2オブジェクトを生成する第2コンパイル部と、前記第2オブジェクトのシンボル解決と再配置と第2ライブラリに含まれるプログラムとのリンクを行って、秘匿情報を利用する処理からなる実行可能形式の第2ソフトウェアを生成する第2リンク部とを備える。
(7)本実施の形態では、セキュアプログラムソースに対して耐タンパ化するような例を示していないが、セキュアプログラムソースに対して耐タンパ化手法を施してもよい。
耐タンパ化手法とは、オリジナルコード(プログラム命令)に対して、実行に影響のない不要な冗長コードの追加、ある命令コードの別の等価な命令コードへの置換え、制御構造の複雑化、1つのモジュール(プログラム命令の集合)の複数のモジュールへの分割化などの難読化をしておくこと、又はオリジナルコードを予め暗号化しておき、実行時に復号することである。耐タンパ化手法を適用させることでセキュアプログラム202のセキュリティレベルを向上させてもよい。コード暗号化を施す場合は、復号したコードを展開するRAM領域は、OSがアクセス不可能なエリア、つまり、管理外領域とする。
この技術に関しては、非特許文献1、非特許文献2、非特許文献3に詳細に述べられているので説明は省略する。
(8)上記の実施の形態では、IPLプログラム201により、ZIセクションA711のゼロ初期化処理が実行され、次にユーザによるコンテンツ再生要求がされ、セキュアプログラム202の起動直後に、セキュアプログラム202により、ZIセクションB712のゼロ初期化処理が実行されるとしているが、これには、限定されない。
IPLプログラム201により、ZIセクションA711の中の一部の変数のゼロ初期化処理が実行され、セキュアプログラム202により、ZIセクションB712の一部の変数のゼロ初期化処理が実行されるとしてもよい。
また、上記の実施の形態及び変形例においては、ZIセクションを、ゼロ値で初期するとしているが、これには限定されない。ゼロ値以外の固定値、例えば、「0xffff」などを、ZIセクションに書き込むとしてもよい。
(9)以上説明したように、本発明は、プログラム記憶部とデータ記憶部を備え、前記プログラム記憶部は、第一ソフトウェアと第二ソフトウェアを記憶し、前記データ記憶部は、第一データ記憶部と第二データ記憶部からなり、前記第一データ記憶部は、前記第一ソフトウェアがアクセス可能なエリアであり、前記第二データ記憶部は、前記第二ソフトウェアがアクセス可能なエリアであり、前記第一ソフトウェアは、前記第二データ記憶部にアクセス不可能であることを特徴とするセキュア処理装置である。
ここで、前記第一ソフトウェアは、オペレーティングシステムであり、前記第二ソフトウェアは、秘密情報を利用するソフトウェアであるとしてもよい。
ここで、第一コンパイラは、第一ソフトウェアのソースコードを入力とし、第一オブジェクトを出力し、第一リンカは、前記第一オブジェクトのシンボル解決と再配置と第一ライブラリをリンクする機能を有し、前記第一オブジェクトを入力とし、前記第一ソフトウェアを出力し、前記第一ソフトウェアは、前記第一コンパイラおよび前記第一リンカで作成された実行可能データであり、第二コンパイラは、前記第一コンパイラとは異なるコンパイラであって、前記第二ソフトウェアのソースコードを入力とし、第二オブジェクトを出力し、第二リンカは、前記第一リンカとは異なるリンカであり、前記第二オブジェクトのシンボル解決と再配置と第二ライブラリ群をリンクする機能を有し、前記第二オブジェクトを入力とし、前記第二ソフトウェアを出力し、前記第二ソフトウェアは、前記第二コンパイラおよび前記第二リンカで作成された実行可能データであるとしてもよい。
ここで、前記第二ソフトウェアは、改ざんや解析に対して耐性をもったソフトウェアであるとしてもよい。
ここで、前記第二ソフトウェアが利用する前記第二データ記憶部の初期化処理を少なくとも1つ以上の分割初期化処理に分割するとしてもよい。
ここで、前記分割初期化処理のうち、少なくとも1つ以上の分割初期化処理は、前記第二ソフトウェアの実行要求が発生するよりも前に実行されるとしてもよい。
ここで、前記分割初期化処理は、前記第二ソフトウェアの実行前に処理されるように分散して前記プログラム記憶部に記憶されているとしてもよ。
ここで、前記プログラム記憶部は、さらにIPLを含み、前記IPLが少なくとも1つ以上の前記分割初期化処理を実行するとしてもよい。
ここで、前記プログラム記憶部は、さらに切替デバイスドライバを含み、前記切替デバイスドライバが、前記第一ソフトウェアから第二ソフトウェアに処理を移すとしてもよい。
ここで、前記切替デバイスドライバは、前記第一ソフトウェアが利用する第一スタックポインタと前記第二ソフトウェアが利用する第二スタックポインタを管理し、前記第一ソフトウェアが実行される場合に、前記切替デバイスドライバは、スタックポインタを前記第一スタックポインタに設定し、前記第二ソフトウェアが実行される場合に、前記切替デバイスドライバは、スタックポインタを前記第二スタックポインタに設定するとしてもよい。
(10)上記の各装置は、具体的には、マイクロプロセッサ、ROM、RAM、などから構成されるコンピュータシステムである。前記RAMには、コンピュータプログラムが記憶されている。ここで、コンピュータプログラムは、所定の機能を達成するために、コンピュータに対する指令を示す命令コードが複数個組み合わされて構成されたものである。前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、各装置は、その機能を達成する。つまり、前記マイクロプロセッサは、前記コンピュータプログラムに含まれる各命令を1個ずつ読み出し、読み出した命令を解読し、解読結果に従って動作する。
(11)上記の各装置を構成する構成要素の一部又は全部は、1個のシステムLSI(Large Scale Integration:大規模集積回路)から構成されているとしてもよい。システムLSIは、複数の構成部を1個のチップ上に集積して製造された超多機能LSIであり、具体的には、マイクロプロセッサ、ROM、RAMなどを含んで構成されるコンピュータシステムである。前記RAMには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、システムLSIは、その機能を達成する。
また、上記の各装置を構成する構成要素の各部は、個別に1チップ化されても良いし、一部又は全てを含むように1チップ化されてもよい。また、ここでは、LSIとしたが、集積度の違いにより、IC、システムLSI、スーパーLSI、ウルトラLSIと呼称されることもある。
また、集積回路化の手法はLSIに限るものではなく、専用回路又は汎用プロセッサで実現してもよい。LSI製造後に、プログラムすることが可能なFPGA(Field Programmable Gate Array)やLSI内部の回路セルの接続や設定を再構成可能なリコンフィギュラブル・プロセッサを利用しても良い。
さらには、半導体技術の進歩又は派生する別技術によりLSIに置き換わる集積回路化の技術が登場すれば、当然、その技術を用いて機能ブロックの集積化を行ってもよい。バイオ技術の適応等が可能性としてありえる。
(12)上記の各装置を構成する構成要素の一部又は全部は、各装置に脱着可能なICカード又は単体のモジュールから構成されているとしてもよい。前記ICカード又は前記モジュールは、マイクロプロセッサ、ROM、RAM、などから構成されるコンピュータシステムである。前記ICカード又は前記モジュールは、上記の超多機能LSIを含むとしてもよい。マイクロプロセッサが、コンピュータプログラムに従って動作することにより、前記ICカード又は前記モジュールは、その機能を達成する。このICカード又はこのモジュールは、耐タンパ性を有するとしてもよい。
(13)本発明は、上記に示す方法であるとしてもよい。また、これらの方法をコンピュータにより実現するコンピュータプログラムであるとしてもよいし、前記コンピュータプログラムからなるデジタル信号であるとしてもよい。
また、本発明は、前記コンピュータプログラム又は前記デジタル信号をコンピュータ読み取り可能な記録媒体、例えば、フレキシブルディスク、ハードディスク、CD―ROM、MO、DVD、DVD−ROM、DVD−RAM、BD(Blu−ray Disc)、半導体メモリなど、に記録したものとしてもよい。また、これらの記録媒体に記録されている前記コンピュータプログラム又は前記デジタル信号であるとしてもよい。
また、本発明は、前記コンピュータプログラム又は前記デジタル信号を、電気通信回線、無線又は有線通信回線、インターネットを代表とするネットワーク、データ放送等を経由して伝送するものとしてもよい。
また、本発明は、マイクロプロセッサとメモリとを備えたコンピュータシステムであって、前記メモリは、上記コンピュータプログラムを記憶しており、前記マイクロプロセッサは、前記コンピュータプログラムに従って動作するとしてもよい。
また、前記プログラム又は前記デジタル信号を前記記録媒体に記録して移送することにより、又は前記プログラム又は前記デジタル信号を前記ネットワーク等を経由して移送することにより、独立した他のコンピュータシステムにより実施するとしてもよい。
(14)上記実施の形態及び上記変形例をそれぞれ組み合わせるとしてもよい。
本発明にかかるセキュア処理装置および方法は、秘密情報を利用したプログラムをOS管理外のメモリ上で動作させることで、OS上で動作するソフトウェアデバッガからの解析を防止する効果と、さらにOS管理外で動作するプログラムのRAMデータの初期化処理を分割して行うことで、ユーザ要求発生後から前記プログラム起動までの処理を短縮する効果とを有し、セキュアなソフトウェアの処理方法として有用である。
本発明を構成する各装置は、コンテンツを制作し、配給するコンテンツ配給産業において、また、その他の秘密を維持する必要がある情報を扱う産業において、経営的に、また継続的及び反復的に使用することができる。また、本発明を構成する各装置は、電器機器製造産業において、経営的に、また継続的及び反復的に、製造し、販売することができる。
本発明は、プログラムの不正な改ざんや解析を防止する技術に関する。
プログラムの不正な改ざんや解析を防止する技術については従来から研究されている。
例えば、パッケージとして売られているソフトウェアには、違法コピーによる使用を防ぐために、利用者に対してパスワードの入力を要求するものがある。このようなソフトウェアには、パスワードが正しいかどうかをチェックするコード(コンピュータプログラム)が含まれている。不正な利用者が、このソフトウェア内において、何らかの方法により、このチェックを行うコードが存在する場所を特定し、このチェックを無効にするようにこのコードに改ざんを加えたとするならば、この不正な利用者は、パスワードを知らなくてもこのソフトウェアを使用することができてしまう。
また、近年、PC(パーソナルコンピュータ)で視聴できる有料のデジタルコンテンツが提供されるようになってきている。この有料のデジタルコンテンツは不正にコピーされることを防ぐために暗号化されており、これを視聴するためのソフトウェアは、暗号を解くための復号アルゴリズム及び復号鍵を含んでいる。もしも、悪意のあるユーザが、視聴用のソフトウェアを解析して、復号鍵を特定することができれば、デジタルコンテンツを不正にコピーすることができるソフトウェアを作成することが可能になる。
以上のように、ソフトウェアの内容が解析されると、そのソフトウェアやデジタルコンテンツによるビジネスが成り立たなくなる。そのため、これらのソフトウェアの解析を防止する技術は必要不可欠である。
例えば、非特許文献1では、ソフトウェアの解析を防ぐための基本原則や具体的手法が記述されている。また、非特許文献2では、ソフトウェアの解析を防ぐためのツールとして開発されたTRCS(Tamper Resistant Coding System)の技術課題とその対策が記述されている。また、非特許文献3では、ソフトウェアの違法コピーを防ぐためのソフトウェア的な保護手段(コピープロテクト技術)を無効化されないようにする技術が解説されている。
このようなソフトウェアの不正な解析や改ざんを防ぐ技術を「耐タンパ技術」と呼ぶ.
「逆解析や改変からソフトを守る」 日経エレクトロニクス 1998.1.5 (P209−220) 「ソフトウェアの耐タンパー化技術」富士ゼロックス テクニカルレポート No.13 「ザ・プロテクト」秀和システム出版 1985年 特開平11−15705号公報
複数のOSが普及している現在において、OS上で動作するソフトウェアデバッガなどの解析ツールが比較的容易に入手できるようになってきている。
そのため、OSに依存するライブラリを利用して、OS上で動作するソフトウェアが、秘匿情報を第三者に知られることなく、安全に処理するように、当該ソフトウェアについてセキュアな実装をした場合であっても、当該ソフトウェアについて、OS上で動作するデバッガに対して耐性が低いという問題点がある。すなわち、不正解析者により、OS上で動作するデバッガを用いて、OSに依存するライブラリを呼び出している部分が特定され、さらに、秘密情報が特定される危険性がある。
本発明は、上記問題点に鑑み、不正解析者による秘密の処理の特定を困難にすることができるコンピュータシステム、集積回路及びプログラム生成装置を提供することを目的とする。
前記目的を達成するために、本発明は、コンピュータシステムであって、基本プログラム、通常プログラム及びセキュアプログラムに含まれている各命令を読み出し、解読し、その解読結果に応じて動作するプロセッサと、管理領域及び前記管理領域とは異なる管理外領域から構成されるメモリ手段とを備え、前記基本プログラムは、オペレーティングシステムを構成し、前記通常プログラムに対して前記管理領域のみをアクセス空間とするアクセスを仲介する命令を含み、前記通常プログラムは、前記基本プログラムを介して、前記管理領域にアクセスする命令を含み、前記セキュアプログラムは、オペレーティングシステムに依存しないプログラムであり、前記管理外領域のみをアクセス空間としてアクセスする命令を含むことを特徴とする。
この構成によると、セキュアプログラムは、オペレーティングシステムである基本プログラムに依存することなく、オペレーティングシステムの管理外領域にアクセスすることが可能である。一方、通常プログラムは、オペレーティングシステムである基本プログラムを介して、オペレーティングシステムの管理領域にアクセス可能であるが、オペレーティングシステムの管理外領域に対してはアクセスできないので、通常プログラムが、例えばソフトウェアデバッガである場合に、ソフトウェアデバッガは、管理外領域にアクセスできず、セキュアプログラムによる管理外領域へのアクセスについての安全性を保つことができるという優れた効果を奏する。
ここで、前記管理領域は、さらに、前記基本プログラム及び前記通常プログラムを記憶しており、前記管理外領域は、さらに、前記セキュアプログラムを記憶しており、前記プロセッサは、前記管理領域に記憶されている前記基本プログラム、前記通常プログラムに含まれている各命令を読み出し、前記管理外領域に記憶されている前記セキュアプログラムに含まれている各命令を読み出すとしてもよい。
この構成によると、セキュアプログラムは、オペレーティングシステムの管理外領域に記憶されているので、上記のソフトウェアデバッガは、管理外領域に記憶されているセキュアプログラムにアクセスできず、セキュアプログラム自身の内容を安全に保つことができる。
ここで、前記セキュアプログラムは、前記管理外領域において格納される秘匿すべき情報に関する秘匿処理を行う命令を含むとしてもよい。
この構成によると、上記のソフトウェアデバッガは、前記セキュアプログラムにより、オペレーティングシステムの管理外領域において格納される秘匿すべき情報にアクセスできず、これらの秘匿すべき情報の内容を安全に保つことができる。
ここで、前記管理領域は、さらに、基本プログラムの指示により、基本プログラムからセキュアプログラムへの実行の切替えを行う命令を含む切替プログラムを記憶しており、前記プロセッサは、さらに、前記管理領域に記憶されている前記切替プログラムに含まれている命令を読み出し、解読し、その解読結果に応じて動作し、前記基本プログラムは、さらに、前記切替プログラムに対して、セキュアプログラムへの切替を指示する命令を含み、前記セキュアプログラムは、さらに、前記秘匿処理の終了後、セキュアプログラムから基本プログラムへの実行の切替えを行う命令を含むとしてもよい。
この構成によると、基本プログラムから秘匿処理が必要な時等に、切替プログラムを介して、本来アクセスできないセキュアプログラムに一時的に処理を移すことができ、また、秘匿処理の終了後、再度オペレーティングシステムである基本プログラムに処理を戻すことができる。これにより、基本プログラムからでも、セキュアプログラムの安全性を確保したまま、セキュアプログラムの秘匿処理を利用することができる。
ここで、前記切替プログラムは、セキュアプログラムから基本プログラムへの実行の切替えの際に、スタックポインタの設定を基本プログラムが利用するものに戻す命令を含み、セキュアプログラムから基本プログラムへの実行の切替えの際に、スタックポインタの設定をセキュアプログラムが利用するものに戻す命令を含むとしてもよい。
この構成によると、セキュアプログラムから基本プログラムへの切り替えの際、スタックポインタの設定を基本プログラムが利用するものに戻すので、基本プログラムの処理を続行することができる。また、基本プログラムからセキュアプログラムへの切り替えの際に、スタックポインタの設定をセキュアプログラムが利用するものに戻すので、セキュアプログラムの処理を続行することができる。
ここで、前記セキュアプログラムは、難読化が施されているとしてもよい。
この構成によると、難読化により、セキュアプログラムの解析が困難となるので、セキュアプログラムの安全性をさらに高めることができる。
また、一般にソフトウェアの処理が実行される前に、実行対象となるソフトウェアが利用するデータは初期化される。不正解析者は、解析対象のソフトウェアの解析を、ソフトウェア初期化シーケンスから行おうとする。この場合、不正解析者が、データ初期化処理に注目し、秘密情報の利用場所を特定する可能性がある。
ここで、前記セキュアプログラムは、初期化処理を必要とし、初期化処理は、複数のプログラムにより行われるとしてもよい。
この構成によると、複数の初期化プログラムを用いて、それぞれの初期化処理が行われることにより、初期化処理が分割・分散し、不正解析者によるデータ初期化処理に注目した秘密情報の利用場所の特定を困難にすることができる。
ここで、前記複数の初期化プログラムは、前記セキュアプログラムによる前記秘匿処理に先行して実行されるとしてもよい。
この構成によると、セキュアプログラムによる秘匿処理に先行して、各初期化プログラムに実行により、各初期化処理が行われるので、秘匿処理において、誤った初期値が使われて、誤った処理が行われることはない。
ここで、前記複数の初期化プログラムのうちの一部の初期化プログラムは、他の初期プログラムとは異なる時期において、実行されるとしてもよい。
この構成によると、不正解析者によるデータ初期化処理に注目した秘密情報の利用場所の特定を、さらに、困難にすることができる。
さらに、携帯電話などの電子機器においても耐タンパ技術を適用する場合、耐タンパ化されたソフトウェアが、利用するメモリサイズは増加する。そのため、前記耐タンパ化されたソフトウェアの初期化処理に要する時間が大きくなってしまい、即応性の求められる電子機器においては、ユーザによる所望の処理要求から、実際にソフトウェアが処理を開始するまでの初期化処理に多大な時間を要することになってしまう。
メモリの初期化処理の高速化に関する文献として、特許文献1に示されているメモリ管理方法がある。しかし、この方法ではプログラムのデータ初期化処理の高速化やセキュリティの向上に対する効果は得られない。
ここで、一部の初期化プログラムは、当該コンピュータシステムのリセットの直後において実行され、セキュアプログラムに含まれる初期化プログラムは、セキュアプログラムの実行が要求された時に、実行されるとしてもよい。
この構成によると、OSに依存しない環境で動作可能なセキュアソフトウェアの初期化処理を分割・分散することで、ユーザによる所望の処理要求から、実際にセキュアソフトウェアが処理を開始するまでの処理時間を短縮するとともに、さらに悪意のある解析者に対する耐性を向上させることができる。
以上説明したように、本発明によると、セキュアプログラムが実行するコード(ROM上に存在する)およびセキュアプログラムが利用するワークメモリ(RAM上に存在する)は、OS管理外の領域としているため、OS上で動作するソフトウェアデバッガからの解析を防ぐことが可能となる。
さらに、セキュアプログラムのRAMデータの初期化処理を分割しているため、ユーザによるセキュアプログラム処理要求発生からセキュアプログラムの起動までの処理時間を短縮することができる。
さらに、分割した初期化処理を分散して実行することにより、セキュアプログラムの初期化処理から解析を行う悪意のある解析者に対して、解析対象範囲を拡大させることが可能となるため、解析を困難にし、セキュリティレベルを向上させることができる。
また、セキュアプログラムがOSに依存しない環境で動作するものであるので、セキュアプログラムの他OSへの移植性が非常に高い。さらに、他OSへ移植する際にもセキュアプログラムのOS向けの変更が発生しないため、セキュリティレベルを落とすことなく移植することが可能となる。
1.実施の形態
以下、本発明に係る1の実施の形態としてのセキュア処理システム1について、図面を参照しながら説明する。
1.1 セキュア処理システム1の構成
セキュア処理システム1は、図1に示すように、コンパイル装置30、コンパイル装置40、携帯電話10及びメモリカード20から構成されている。メモリカード20は、携帯電話10に装着される。
コンパイル装置30は、携帯電話10に導入されるOS(Operating System。基本ソフトウェア又は基本プログラムとも呼ぶ。)のカーネルの動作について記述しているソースプログラム、及び当該OSに依存するその他の動作を記述しているソースプログラムから、1個以上の実行形式のコンピュータプログラム(OS依存バイナリデータと呼ぶ。)を生成する。また、コンパイル装置40は、前記OSに依存しないその他の動作を記述しているソースプログラムから、1個以上の実行形式のコンピュータプログラム(OS非依存バイナリデータと呼ぶ。)を生成する。
携帯電話10は、後述するように、CPU(Central Processing Unit)、ROM(Read Only Memory)、RAM(Random Access Memory)などを含んで構成されるコンピュータシステムである。上記において生成されたOS依存バイナリデータ及びOS非依存バイナリデータは、ROMライタにより、携帯電話10が備えるROMに書き込まれる。こうして、ROMは、コンピュータプログラムであるOS依存バイナリデータ及びOS非依存バイナリデータを記憶し、前記CPUが、前記コンピュータプログラムに従って動作することにより、携帯電話10は、その一部の機能を達成する。OS依存バイナリデータであるコンピュータプログラムの一部は、OSを構成しており、他の部分は、当該OSの制御の元に動作する。
メモリカード20は、一例として、音楽又は映像のコンテンツが暗号化されて生成された暗号化コンテンツ及び前記暗号化コンテンツを復号するために用いられるコンテンツ鍵を記憶している。
携帯電話10は、ROMに書き込まれたOS依存バイナリデータ及びOS非依存バイナリデータに従って動作することにより、メモリカード20から暗号化コンテンツを読み出し、読み出した暗号化コンテンツを前記コンテンツ鍵を用いて復号し、復号コンテンツを生成し、生成した復号コンテンツを音楽又は映像として出力する。
1.2 コンパイル装置30の構成
コンパイル装置(プログラム生成装置とも呼ぶ。)30は、図2に示すように、OS依存コンパイル部310、OS依存リンク部320、形式変換部330及び情報記憶部350から構成されている。コンパイル装置30は、携帯電話10の後述するメモリ107のOSの管理領域に配置するバイナリデータを生成する。
コンパイル装置30は、具体的には、マイクロプロセッサ、ROM、RAM、ハードディスクユニット、ディスプレィユニット、キーボード、マウスなどから構成されるコンピュータシステムである。前記RAM又は前記ハードディスクユニットには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、コンパイル装置30を構成するOS依存コンパイル部310、OS依存リンク部320、形式変換部330は、その機能を達成する。
(1)情報記憶部350
情報記憶部350は、OSカーネルソース301a、301b、301c、・・・、ノンセキュアプログラムソース302a、302b、302c、・・・、セキュアプログラム呼出部ソース303a、303b、303c、・・・、切替デバイスドライバソース304a、304b、304c、・・・、アドレス指定ファイル322、OS依存ライブラリ321a、321b、321c、・・・を記憶している。また、OS依存バイナリデータ340a、340b、340c、・・・を記憶するための領域を備えている。
OSカーネルソース301a、301b、301c、・・・は、それぞれ、携帯電話10に導入されるOSの各種処理を記述しているソースコード(ソースプログラム)の一部分であるコンピュータプログラムであってコンピュータ命令を含み、OSカーネルソース301a、301b、301c、・・・は、これらのソースコード全体で、当該OS処理を記述している。また、OSカーネルソース301a、301b、301c、・・・は、全体として、携帯電話10のメモリ107上にOSプログラム210(後述する)として記憶されるバイナリデータに対応している。
ノンセキュアプログラムソース(通常プログラムとも呼ぶ。)302a、302b、302c、・・・は、それぞれ、ノンセキュアな処理が記述されたソースコード(ソースプログラム)であるコンピュータプログラムであってコンピュータ命令を含み、ノンセキュアプログラムソース302aは、携帯電話10のメモリ107上にノンセキュアプログラム211(後述する)として記憶されるバイナリデータに対応している。
セキュアプログラム呼出部ソース303aは、携帯電話10のメモリ107上に記憶されているセキュアプログラム202(後述する)を呼び出すように切替デバイスドライバ213(後述する)に依頼する処理が記述されたソースコード(ソースプログラム)であるコンピュータプログラムであってコンピュータ命令を含み、メモリ107上にはノンセキュアプログラム211(後述する)として記憶されるバイナリデータに対応する。切替デバイスドライバ213に依頼する処理は、本実施の形態では、OSプログラム210のライブラリコールで行うものとする。セキュアプログラム呼出部ソース303b、303c、・・・についても同様である。
切替デバイスドライバソース304aは、メモリ107上のセキュアプログラム呼出部212から依頼されたセキュアプログラム202の処理へ分岐させる処理が記述されたソースコード(ソースプログラム)であるコンピュータプログラムであってコンピュータ命令を含み、メモリ107上には切替デバイスドライバ213(後述する)として記憶されるバイナリデータに対応する。
アドレス指定ファイル322は、OS依存リンク部320によって作成されるバイナリのROMデータやRAMデータの配置アドレスを指定するファイルである。例えば、アドレス指定ファイル322は、OS依存リンク部320により生成される各OS依存バイナリデータについて、ターゲット装置(つまり、携帯電話10)のメモリにおいて、配置されるべき位置を示す物理アドレスを含む。
(2)OS依存コンパイル部310
OS依存コンパイル部310は、これらのOSカーネルソース301a、301b、301c、・・・、ノンセキュアプログラムソース302a、302b、302c、・・・、セキュアプログラム呼出部ソース303a、303b、303c、・・・、切替デバイスドライバソース304a、304b、304c、・・・を入力とし、高級言語で記述されたプログラムコードを低レベルなマシンコード(オブジェクトコード)、つまり、実行形式のコンピュータプログラムに変換して、それぞれ、オブジェクトファイルを生成する。
(3)OS依存リンク部320
OS依存リンク部320は、OS依存コンパイル部310で生成された各オブジェクトファイルに対し、再配置とシンボルの解決を行い、各オブジェクトファイル内にOS依存ライブラリ321a、321b、321c、・・・の関数シンボルが存在するのであれば、関連するOS依存ライブラリをリンクして、OS依存バイナリデータを生成する。
OS依存リンク部320は、アドレス指定ファイル322が指定されると、アドレス指定ファイル322内に記載された論理アドレスにおいてROMデータ、RAMデータを配置する。
(4)形式変換部330
形式変換部330は、OS依存リンク部320により生成された各OS依存バイナリデータを、ROMライターにより実際のROMメモリに書き込み可能な形式に変換して、OS依存バイナリデータ340a、340b、・・・を生成し、生成したOS依存バイナリデータ340a、340b、・・・を情報記憶部350へ書き込む。形式変換部330により生成されるデータ形式には、インテルHEX形式やモトローラSレコード形式などがある。
(5)OS管理外のROM/RAMの設定
コンパイル装置30は、以下に示すようにして、OS管理外のROM/RAMの設定を行う。
(a)OS管理外のRAM領域の確保
例えば、物理アドレス「0x10000000」から物理アドレス「0x11FFFFFF」までをアクセス対象のメモリ空間として扱うことができるOSに対して、物理アドレス「0x10000000」から物理アドレス「0x11E00000」までをOS管理のRAM領域として割り当て、物理アドレス「0x11F00000」から物理アドレス「0x11FFFFFF」までをOS管理外のRAM領域として割り当てる場合には、カーネル起動時に必要なRAMメモリパラメタのサイズを「0x1E00000」(バイト)と指定して、コンパイルする。
これにより、物理アドレス「0x10000000」から、指定されたサイズ「0x1E00000」の領域が、OS管理のRAM領域となり、その他の領域が、OS管理外のRAM領域となる。
(b)セキュアプログラム用のOS管理外のROM領域とOS管理外のRAM領域の物理−論理のマッピングの設定
セキュアプログラム用のOS管理外のROM領域とOS管理外のRAM領域の物理−論理のマッピングを設定する場合には、以下に示すようにする。
OSカーネルのメモリマッピングを指定するソースファイルにおいては、メモリマップを指定する構造体が存在する。Linuxの場合は、メモリマップ指定の構造体として、
map_desc standard_io_desc[]_initdata
が用意されている。
static struct map_desc standard_io_desc[]_initdata={
MAP_DESC(論理アドレス、物理アドレス、サイズ、ドメイン属性、
READ属性、WRITE属性、CACHE属性、BUFFER属性);
};
ここで、論理アドレスでは、物理アドレスに対応付けたい論理アドレスを指定し、物理アドレスでは、論理アドレスに対応付けたい物理アドレスを指定し、サイズでは、上記アドレスから論理・物理アドレスの対応付けを行いたいサイズを指定する。ドメイン属性では、カーネル領域かユーザ領域なのかを指定し、READ属性では、READ可なら「1」を設定し、READ不可なら「0」を設定し、WRITE属性では、WRITE可なら「1」を設定し、WRITE不可なら「0」を設定し、CACHE属性では、キャッシュ有効なら「1」を設定し、キャッシュ無効なら「0」を設定し、BUFFER属性では、BUFFER有効なら「1」を設定し、BUFFER無効なら「0」を設定する。
後述する図7に示すように、OS管理外のROM、RAMを指定する場合には、この構造体に対して、以下のように、ソースファイルに記述し、このソースファイルを含むカーネルソースファイルをコンパイルする。
static struct map_desc standard_io_desc[]_initdata={
MAP_DESC(0xFFB00000,0x11F00000,0x000FFFFF,DOMAIN_KERNEL,0,1,1,1),
/*セキュアプログラム用RAM*/
MAP_DESC(0xFFA00000,0x00260000,0x000FFFFF,DOMAIN_KERNEL,0,0,1,1),
/*セキュアプログラム用ROM*/
};
なお、セキュアプログラムのドメイン属性は、カーネルドメインとし、OS上で動作する通常ソフトウェアからのアクセスを禁止する。
さらに、セキュアプログラムのメモリへのアクセスは、切替デバイスドライバ経由で実行されるため、デバイスドライバから、READ/WRITE実行可能かつCPUキャッシュが有効であることか必要である。
(6)まとめ
以上説明したように、OSカーネルソース301a、301b、301c、・・・、ノンセキュアプログラムソース302a、302b、302c、・・・、セキュアプログラム呼出部ソース303a、303b、303c、・・・、切替デバイスドライバソース304a、304b、304c、・・・は、それぞれ、OS依存コンパイル部310によりコンパイルされ、コンパイルによって作成されたオブジェクトファイルはOS依存リンク部320によりリンク処理が行われる。OS依存リンク部320によって生成されたOS依存バイナリデータは、形式変換部330により、ROMに書き込める形式に変換され、OS依存バイナリデータ340a、340b、・・・が情報記憶部350に書き込まれる。
OS(基本プログラム)は、前記管理領域のみをアクセス空間とし、ノンセキュアプログラム(通常プログラム)に対して前記管理領域へのアクセスを仲介する命令と、切替デバイスドライバ(切替プログラム)に対して、セキュアプログラムへの切替を指示する命令とを含む。
ノンセキュアプログラム(通常プログラム)は、OS(基本プログラム)を介して、前記管理領域にアクセスする命令を含む。
切替デバイスドライバ(切替プログラム)は、OS(基本プログラム)の指示により、OS(基本プログラム)セキュアプログラムへの実行の切替えを行う命令を含む。
セキュアプログラムは、前記管理外領域のみをアクセス空間とし、前記管理外領域へアクセスする命令を含む。また、セキュアプログラムの対象処理、例えば、暗号化コンテンツの前記コンテンツ鍵を用いた復号の処理の終了後、セキュアプログラムから基本プログラムへの実行の切替えを行う命令を含む。
1.3 コンパイル装置40の構成
コンパイル装置(プログラム生成装置とも呼ぶ。)40は、図3に示すように、OS非依存コンパイル部410、OS非依存リンク部420、形式変換部430及び情報記憶部450から構成されている。コンパイル装置40は、携帯電話10の後述するメモリ107のOSの管理外領域に配置するバイナリデータを生成する。
コンパイル装置40は、具体的には、マイクロプロセッサ、ROM、RAM、ハードディスクユニット、ディスプレィユニット、キーボード、マウスなどから構成されるコンピュータシステムである。前記RAM又は前記ハードディスクユニットには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、コンパイル装置40を構成するOS非依存コンパイル部410、OS非依存リンク部420、形式変換部430は、その機能を達成する。
情報記憶部450は、セキュアプログラムソース401a、401b、401c、・・・、アドレス指定ファイル422、OS非依存ライブラリ421a、421b、421c、・・・を記憶している。また、OS非依存バイナリデータ440a、440b、440c、・・・を記憶するための領域を備えている。
セキュアプログラムソース401aは、秘密情報を利用した処理が記述されているソースコード(ソースプログラム)であるコンピュータプログラムであってコンピュータ命令を含む。このセキュアプログラムソース401aは、本実施の形態では、暗号化コンテンツを復号するための復号処理が記述されたコードであり、メモリ107上にセキュアプログラム202(後述する)として記憶されるバイナリデータに対応している。セキュアプログラムソース401b、401c、・・・についても同様である。
アドレス指定ファイル422は、図2で説明したアドレス指定ファイル322同じであるので説明を省略する。ただし、セキュアプログラムソース401a、401b、401c、・・・、に対応して生成されるセキュアプログラム202等を、OSプログラム210の管理外領域に配置するため、アドレス指定ファイル422は、管理外領域のアドレスを指定する。
OS非依存コンパイル部410は、OS非依存な処理が記述されたソースコードを高級言語から低レベルなマシンコード(オブジェクト)に変換する。OS非依存コンパイル部410は、CPU102のアーキテクチャに合ったマシンコードを作成する。
OS非依存リンク部420は、再配置とシンボル解決を行い、必要であればOS非依存ライブラリをリンクしCPU102で実行可能なバイナリデータを作成する。OS非依存とは、OS依存ライブラリ321a、321b、321c、・・・をリンクしないことを示している。
形式変換部430は、図2で説明した形式変換部330と同じであるので説明を省略する。
1.4 メモリカード20の構成
メモリカード20は、図4に示すように、通常領域120、セキュア領域130、入出力部122、セキュア処理部132から構成される。
メモリカード20は、具体的には、マイクロプロセッサ、ROM、RAMなどから構成されるコンピュータシステムである。前記RAMには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、メモリカード20は、その一部の機能を達成する。
通常領域120は、外部機器により自由にアクセスできる記憶領域であり、本実施の形態では暗号化コンテンツ121が記憶されている。
セキュア領域130は、許可された外部機器のみがアクセスできる領域であり、コンテンツ鍵131が記憶されている。
暗号化コンテンツ121は、暗号化された音楽データまたは動画データであり、コンテンツ鍵131を暗号鍵として暗号アルゴリズムを用いて暗号化されたデータである。各暗号化データは、コンテンツIDにより識別される。なお、本実施の形態では、暗号化コンテンツ121は共通鍵方式で暗号化されているものとし、コンテンツ鍵131を復号鍵として用いることにより、復号されたコンテンツ、すなわち音楽データまたは動画データを取得可能であるものとする。
入出力部122は、外部機器と通常領域120とセキュア処理部132との間での各種データを入出力する。
セキュア処理部132は、外部機器との間で、CPRM(Content Protection forRecordable Media)の仕組みに基づいて相互認証を行い、認証に成功した場合に、認証した機器と鍵を共有する。共有した鍵を用いて、外部機器との間で安全にデータの入出力を行う。なお、CPRMは公知であるので説明を省略する。
1.5 携帯電話10の構成
携帯電話10は、図4に示すように、デバッガIF101、CPU102、MMU(MemoryManagement Unit )103、割込コントローラ104、入力部105、表示部106、メモリ107、入出力部108、バッファ109、符号処理部110、D/A変換部111、無線通信制御部112、スピーカ113、マイク114、通信部115、アンテナ116から構成され、各回路はバス117で接続されている。
(1)携帯電話10の各構成要素
メモリ107は、ROMおよびRAMから構成され、CPU102により実行される各種プログラムを記憶している。
CPU102は、命令フェッチ部、命令デコーダ、演算器、プログラムカウンタ、リンクレジスタ、スタックポインタなどを備え、メモリ107上のプログラムから命令をフェッチし、フェッチした命令を解読し、解読した命令を実行する。
MMU103は、論理アドレスを物理アドレスに変換する仮想記憶機能を実現する。
デバッガIF101は、携帯電話10と外部のデバッガとを接続するためのインターフェースである。
割込コントローラ104は、FIQ、IRQなどのハードウェア割込みやソフトウェア割込み(SWI)、プリフェッチアボート、データアボート、リセットなどの各種割込みを検知し、CPU102の割込検出用のレジスタへ割込み発生通知を出力する。
通信部115は、無線通信制御部112と、携帯電話網、インターネットに接続された外部機器との間でアンテナ116を介して情報の送受信を行う。
無線通信制御部112は、ベースバンド部、変復調部、増幅部などを備えており、通信部およびアンテナ116を介して送受信される各種情報の信号処理を行う。
符号処理部110は、バッファ109に記憶されている音楽データにMP3などの符号化技術に従った復号処理を施し、D/A変換部111へ出力する。
D/A変換部111は、符号処理部110により復号された音楽データをアナログ音声信号に変換し、スピーカ113へ出力する。
入力部105は、テンキー、決定ボタンなどの各種ボタンを備え、利用者によるこれらの操作を受け付ける。
表示部106は、VRAM、液晶画面を備え、各種の画面を表示する。
マイク114は、音を電気信号に変換し、生成した電気信号を無線通信制御部112へ出力する。
スピーカ113は、無線通信制御部112およびD/A変換部111から、アナログ信号を受け取り、受け取ったアナログ信号を音に変換して出力する。
(2)メモリ107の構成
メモリ107の構成を図5に示す。メモリ107は、ROMとRAMから構成される。図5では、ROMとRAMとを区別して図示していないが、ROMとRAMとの区別は、図7において図示している。
一例として図5に示すように、メモリ107は、OSプログラム210、ノンセキュアプログラム211、セキュアプログラム呼出部212、切替デバイスドライバ213、セキュアプログラム202、IPL(Initial Program Loader)プログラム201を記憶している。
さらに、本実施の形態では、メモリ107に、OSが管理する管理領域とOSの管理外である管理外領域との2つを割り当てて利用する。OS上で動作するノンセキュアプログラム211、セキュアプログラム呼出部212、切替デバイスドライバ213は、OSの管理領域に記憶される。一方、IPLプログラム201、セキュアプログラム202はOSの管理外領域に記憶される。この割り当て方法については、後述する。
このようにセキュアプログラム202は、OSの管理外の管理外領域で動作するため、OS上で動作するソフトウェアデバッガからの解析が不可能となり、セキュア状態でセキュアプログラムの実行が可能となる。
(各プログラムの説明)
IPLプログラム201は、アセンブラで書かれたコード(コンピュータプログラム)であり、OSが起動するために必要なハードウェアの初期化を行い、OSのカーネル初期化処理へ分岐する命令を含む。また、IPLプログラム201は、後述するZIセクションA711のデータの初期化を実施する命令を含む。
OSプログラム210は、オペレーティングシステムであり、カーネル初期化時にOSが利用するハードウェアの初期化、MMU103の設定やメモリ管理やファイルの管理、ユーザーインターフェースの提供等を行う基本ソフトウェアである。
ノンセキュアプログラム211とセキュアプログラム呼出部212と切替デバイスドライバ213は、OSが管理するメモリで動作するプログラム群である。
ノンセキュアプログラム211は、セキュア環境での実行を必要としないアプリケーションである。例えば、携帯電話10のGUIを管理するアプリケーションや個人のスケジュールを管理するプログラムや音楽再生アプリケーション等である。コンテンツ再生時、メモリカード20に記憶されている暗号化コンテンツ121に対して、メモリカード20に記憶されているコンテンツ鍵131を用いて、セキュアに復号処理を施す必要がある。音楽再生アプリケーションは、セキュアプログラム呼出部212を呼び出す復号処理要求を含む。この復号処理要求は、コンテンツ鍵131を用いた暗号化コンテンツ121の復号処理の要求を示す。
セキュアプログラム呼出部212は、セキュアプログラム202を実行するための呼出プログラムであり、切替デバイスドライバ213にセキュアプログラム202の実行を依頼する。
切替デバイスドライバ213は、管理外領域に記憶されたセキュアプログラム202へ処理を移すインターフェースの役割をする。
セキュアプログラム202は、秘密情報を扱って処理を行うプログラムである。本実施の形態では、セキュアプログラム202は、暗号化コンテンツ121をコンテンツ鍵131を用いて復号する復号プログラムである。また、セキュアプログラム202は、当該セキュアプログラム202の起動直後に、後述するZIセクションB712のゼロ初期化処理を実行する。
なお、本実施の形態において、メモリ107は、ROMとRAMとから構成されるとしているが、これに限定するわけではない。メモリ107は、プログラムが記憶できるプログラム記憶部と、プログラム動作時に利用するワークメモリが記憶できるワークメモリ記憶手段とを備えていればよい。例えば、プログラム記憶手段として、HDD(Hard Disk Drive )やEEPROM(ElectricallyErasable Programmable ROM )やFlashROMなどを利用してもよいし、ワークメモリ記憶手段として、SDRAM(Synchronous DRAM )、SRAM(Static RAM )などを利用してもよい。
上述したOSプログラム210、ノンセキュアプログラム211、セキュアプログラム呼出部212及び切替デバイスドライバ213は、コンパイル装置30において、1個以上のOS依存バイナリデータとして生成され、セキュアプログラム202は、コンパイル装置40において、1個以上のOS非依存バイナリデータとして生成される。
こうして生成された1個以上のOS依存バイナリデータと1個以上のOS非依存バイナリデータとが、ROMライタにより、ROMに書き込まれる。図5は、こうしてROMに書き込まれた結果を示している。
(各バイナリデータのセクション構成)
ここで、コンパイル装置30におけるコンパイル及びリンクにより生成された各OS依存バイナリデータのセクション構成について説明する。
各OS依存バイナリデータは、図6に示すように、ZIセクション501、RWセクション502及びROセクション503から構成されている。
ZIセクション501は、ゼロ初期化対象データ領域である。各プログラムの初期化の段階で、このセクション内のデータは、ゼロで初期化されなければならない。
RWセクション502は、読み書き可能なセクションであり、読み書き可能なデータが配置されるセクションである。
ROセクション503は、読み込みのみ可能なセクションであり、実行可能なコード(命令)が配置されるセクションである。
図5では、メモリ107内をROMとRAMに区別して記述していないが、実際は、図6に示すように、各OS依存バイナリデータのZIセクションとRWセクションはRAMに配置され、ROセクションに対応するものはROMに配置される。
また、コンパイル装置40におけるコンパイル及びリンクにより生成された各OS非依存バイナリデータ440a、440b、・・・も、それぞれ、図6に示すように、ZIセクション、RWセクション及びROセクションから構成されている。
セキュアプログラム202が起動する前に、セキュアプログラム202を構成するZIセクションは、ゼロで初期化されなければならない。しかし、ZIセクションのサイズが大きいと、ゼロ初期化処理に時間を要することになる。端末の応答性能が重要とされる電子機器においては、初期化処理の時間をなるべく削減して、セキュアプログラム202の起動を高速に行いたい。
この高速化のために、ZIセクションを複数のサブセクションに分割し、セキュアプログラム202が起動される以前に、一部のサブセクションのゼロ初期化処理を行い、セキュアプログラム202が起動された直後に、残りのサブセクションのゼロ初期化処理を行う。このように、初期化処理を分割することにより、セキュアプログラム202における初期化処理の高速化が可能となる。このシーケンスについては、図10及び図11を用いて、後述する。
(メモリ107の論理アドレスと物理アドレス)
次に、メモリ107の論理アドレスと物理アドレスの関係について簡単に説明をする。
各プログラム中において用いられるアドレスは、論理アドレスであり、これをMMU103が物理アドレスに変換して実際にメモリ107にアクセスする。つまり、上述したOSプログラム210、ノンセキュアプログラム211、セキュアプログラム呼出部212、切替デバイスドライバ213及びセキュアプログラム202において、メモリ107が形成する記憶空間を指し示すアドレスは、論理アドレスであり、MMU103は、これらのプログラムにおいて用いられる論理アドレスを物理アドレスへ変更し、物理アドレスにより、メモリ107が形成する記憶空間を指し示す領域へのアクセスが行われる。
携帯電話10の電源が投入された直後であって、MMU103の初期化が行われていない場合には、各プログラムには、論理アドレスは割り当てられない。また、物理アドレスと論理アドレスの変換作業が可能となるのは、MMU103が有効な状態にあるときである。
(メモリ107のメモリマップ)
メモリ107における物理アドレスと論理アドレスとの対応関係を図7に示す。
メモリ107には、上述したように、セキュアプログラム202、IPLプログラム201、OSプログラム210、ノンセキュアプログラム211、セキュアプログラム呼出部212及び切替デバイスドライバ213が配置され、また、OS用メインメモリ601及びセキュアプログラム用ワークメモリ602が配置されている。
ここで、セキュアプログラム202は、ROM上におけるOSの管理外領域651に配置され、OSプログラム210、ノンセキュアプログラム211、セキュアプログラム呼出部212及び切替デバイスドライバ213は、ROM上におけるOSの管理領域652に配置されている。また、OS用メインメモリ601は、RAM上におけるOSの管理領域653に配置され、セキュアプログラム用ワークメモリ602は、RAM上におけるOSの管理外領域654に配置されている。
物理アドレス0x08000000から0x080C0000により示されるROM内の領域に、IPLプログラム201が存在する。IPLプログラム201は、OSプログラム210が起動する前に実行されるコード(プログラム命令)であり、IPLプログラム201には、論理アドレスは割り当てられていない。なお、本明細書において、0xに続く文字列は、16進数による表現である。
OSプログラム210、ノンセキュアプログラム211、セキュアプログラム呼出部212及び切替デバイスドライバ213は、物理アドレス0x080D0000から0x0BE10000により示されるROM内の領域に存在し、この領域には、論理アドレス0xD0000000から0xD3D40000がOSにより割り当てられる。
OS用メインメモリ601は、OSやOS上で動作するプログラムが利用するワークメモリであり、物理アドレスが0x10000000から0x11E00000のRAM内の領域に存在し、この領域には、論理アドレス0xC0000000から0xC1E00000が割り当てられる。
セキュアプログラム202は、セキュアプログラムの実行コード(プログラム命令)が書かれており、物理アドレス0x00260000から0x00350000のROM内の領域に存在し、この領域には、論理アドレス0xFFA00000から0xFFAFFFFFが割り当てられる。
セキュアプログラム用ワークメモリ602は、セキュアプログラム202が利用するワークメモリであり、物理アドレス0x11F00000から0x11FFFFFFのRAM内の領域に存在し、この領域には、論理アドレス0xFFB00000から0xFFBFFFFFが割り当てられる。
上述したような論理アドレスの指定は、OSプログラム210のカーネルの初期化処理において行われる。
なお、コンパイル装置30が記憶しOS依存リンク部320において用いられるアドレス指定ファイル322、及びコンパイル装置40が記憶しOS非依存リンク部420において用いられるアドレス指定ファイル422においては、上述したようにアドレスが割り当てられるように記述されている。
なお、本実施の形態では、上述したように物理アドレス及び論理アドレスを割り当てているが、実装対象の機器によって変わるものであり、本発明が、このアドレス値に限定されるわけではない。
(セキュアプログラム202とセキュアプログラム用ワークメモリ602)
次に、セキュアプログラム202とセキュアプログラム用ワークメモリ602の内容について、図8を用いて、さらに詳しく説明する。
セキュアプログラム用ワークメモリ602は、ZIセクションを2個に分割したZIセクションA711、ZIセクションB712及びRWセクション713から構成されている。
ZIセクションA711及びZIセクションB712は、セキュアプログラム202が実行される前にゼロ初期化され、セキュアプログラム202により利用されるデータが格納されるデータ格納セクションである。本実施の形態では、セキュアプログラム202の初期化処理を高速にするために、ZIセクションは、ZIセクションA711及びZIセクションB712に分割されている。
セキュアプログラム用ワークメモリ602のZIセクションのゼロ初期化処理においては、携帯電話10の電源が投入された直後に、IPLプログラム201により、ZIセクションA711のゼロ初期化処理が実行され、次にユーザによるコンテンツ再生要求がされ、セキュアプログラム202の起動直後に、セキュアプログラム202により、ZIセクションB712のゼロ初期化処理が実行される。
このようにユーザによるコンテンツ再生要求がされるよりも前に、ZIセクションA711のゼロ初期化処理を行っておくことにより、ユーザによるコンテンツ再生要求後からセキュアプログラム202の初期化処理が完了するまでの時間を短縮することができ、ユーザの待ち時間を短縮することが可能となる。また、ZIセクションの初期化処理を分散させることにより、不正解析者によるセキュアプログラム202の解析を困難にさせることも可能となる
RWセクション713は、セキュアプログラム202が利用する読み書き可能なデータが格納される領域である。
なお、セキュアプログラム用ワークメモリ602は、セキュアプログラム202のスタック領域として利用してもよい。
セキュアプログラム202は、セキュアAPI分岐処理701、ZIセクションB初期化API702、セキュアAPI_A703及びセキュアAPI_B704から構成される。
セキュアAPI分岐処理701、ZIセクションB初期化API702、セキュアAPI_A703及びセキュアAPI_B704は、図8に示すように、それぞれ、論理アドレス「0xFFA00000」、「0xFFA01000」、「0xFFA02000」及び「0xFFA03000」により開始位置が示されるセキュアプログラム202内の領域に格納されている。
セキュアAPI分岐処理701は、ZIセクションB初期化API702、セキュアAPI_A703及びセキュアAPI_B704のそれぞれへの分岐先アドレス情報を含むAPI分岐テーブル800(後述する)を格納している。
セキュアプログラム202の各APIを識別する識別子は、セキュアプログラム呼出部212から、切替デバイスドライバ213を経由し、セキュアAPI分岐処理701へ出力される。セキュアAPI分岐処理701は、切替デバイスドライバ213より識別子を受け取り、API分岐テーブル800から受け取った識別子に対応する分岐先アドレスを抽出し、抽出した分岐先アドレスへ実行を分岐する。
ZIセクションB初期化API702は、ZIセクションB712のゼロ初期化処理を行う実行コード(プログラム命令)である。
セキュアAPI_A703及びセキュアAPI_B704は、それぞれ、セキュアプログラムのAPI処理を行う実行コード(プログラム命令)である。
なお、本実施の形態1では、セキュアプログラムのセキュアなAPIをセキュアAPI_A703及びセキュアAPI_B704の2個として説明しているが、2個に限定するわけではなく、2個以上存在してもよい。
(API分岐テーブル800のデータ構造)
API分岐テーブル800のデータ構造を図9に示す。
API分岐テーブル800は、複数の分岐先アドレス情報811、812及び813から構成されており、分岐先アドレス情報811、812及び813は、それぞれ、セキュアプログラム202に含まれているZIセクションB初期化API702、セキュアAPI_A703及びセキュアAPI_B704に対応しており、各分岐先アドレス情報は、識別子と分岐先アドレスとを含む。
ここで、識別子は、当該識別子を含む分岐先アドレス情報に対応しているAPIを識別する識別情報である。また、分岐先アドレスは、当該分岐先アドレスを含む分岐先アドレス情報に対応しているAPIがセキュアプログラム202内において格納されている位置を示す論理アドレスである。
次に、分岐先アドレス情報811、812及び813についてさらに説明する。
分岐先アドレス情報811は、図9に示すように、識別子801「1」と分岐先アドレス802「0xFFA01000」とを含む。分岐先アドレス情報811は、ZIセクションB初期化API702に対して、識別子801「1」が割り当てられ、論理アドレス「0xFFA01000」により開始位置が示されるセキュアプログラム202内の領域において、ZIセクションB初期化API702の実行コード(プログラム命令)が記憶されていることを示している。
従って、識別子として「1」が指定され、セキュアAPI分岐処理701により、「0xFFA01000」に分岐すると、ZIセクションB初期化API702が実行される。
また、分岐先アドレス情報812は、図9に示すように、識別子803「2」と分岐先アドレス804「0xFFA02000」とを含む。分岐先アドレス情報812は、セキュアAPI_A703に対して、識別子803「2」が割り当てられ、論理アドレス「0xFFA02000」により開始位置が示されるセキュアプログラム202内の領域において、セキュアAPI_A703の実行コード(プログラム命令)が記憶されていることを示している。
従って、識別子として「2」が指定され、セキュアAPI分岐処理701により、「0xFFA02000」に分岐すると、セキュアAPI_A703が実行される。
さらに、分岐先アドレス情報813は、図9に示すように、識別子805「3」と分岐先アドレス806「0xFFA03000」とを含む。分岐先アドレス情報813は、セキュアAPI_B704に対して、識別子805「3」が割り当てられ、論理アドレス「0xFFA03000」により開始位置が示されるセキュアプログラム202内の領域において、セキュアAPI_B704の実行コード(プログラム命令)が記憶されていることを示している。
従って、識別子として「3」が指定され、セキュアAPI分岐処理701により、「0xFFA03000」に分岐すると、セキュアAPI_B704が実行される。
なお、本実施の形態では、API分岐テーブル800は、識別子と分岐先アドレスとを含む複数個の分岐先アドレス情報から構成されているが、この構成に限定されるわけではなく、所望のAPIに分岐する処理を行うるためのアドレス情報が格納されていればよい。
(3)セキュアAPIの実行のシーケンス
次に、セキュアプログラム202のセキュアAPIが実行されるまでのシーケンスについて説明する。
(a)アプリケーションソフト起動までのシーケンス
ここでは、リセットの後、OSプログラム210を起動し、OS上で動作するアプリケーションソフトが起動されるまでのシーケンスについて、図10を用いて説明する。
本実施の形態においては、セキュアプログラム202が、メモリ107内のOSの管理外領域においてワークメモリ(RAM)として利用するセキュアプログラム用ワークメモリ602内のZIセクションのデータの初期化処理に係る時間を短縮するために、上述したように、セキュアプログラムのRAMデータの初期化処理を分割している。具体的には、ZIセクションの初期化処理を2段階に分割している。
携帯電話10は、利用者による電源投入などにより、リセットを受け付ける(ステップS900)。
リセット後、IPLプログラム201は、OSの起動に必要なハードウェアを初期化する。(ステップS901)
次に、IPLプログラム201は、ZIセクションA711のデータの初期化を実施する。(ステップS902)
ZIセクションA711のデータの初期化が終了すると、カーネルに分岐する(ステップS903〜S904)。
カーネルに分岐後、以下に示すカーネルの初期化処理が実行される。まず、カーネルの初期化処理としては、MMU103の初期化が実行され(ステップS905)、次に、携帯電話10が備え、OSが利用する各種デバイスの初期化が実行される(ステップS906)。
カーネルの初期化が終了すると、OSが起動されたことになり、その後、各アプリケーションソフトが起動される(ステップS907)。
ここで、アプリケーションソフトのうち、ユーザによる操作により起動されるものが存在してもよい。ステップS907が実行されると、携帯電話としての機能が有効となり、着信、発信等が行える状態となり、ユーザが携帯電話上の各種操作を行える状態となる。
(b)セキュアプログラム202の実行までのシーケンス
ここでは、セキュアプログラム202が実行されるまでのシーケンスを、図11及び図12を用いて、説明する。
ここで、図11は、セキュアプログラム202のZIセクションの初期化処理が完了するまでのシーケンスを示し、図12は、セキュアプログラム202のZIセクションの初期化完了後、セキュアAPIの起動までのシーケンスを示している。
ユーザによる音楽再生のボタン操作が行われると(ステップS1000)、OSは、セキュアプログラム呼出部212へ処理を移す(ステップS1001〜ステップS1002)。
次に、セキュアプログラム呼出部212は、切替デバイスドライバ213をオープンし(ステップS1003)、識別子として「1」を指定して、切替デバイスドライバ213に対し、ライブラリコールし、切替デバイスドライバ213へ処理が移る(ステップS1004〜ステップS1005)。
次に識別子「1」を受け取った切替デバイスドライバ213は、セキュアAPI分岐処理701に分岐し、セキュアAPI分岐処理701へ処理が移る(ステップS1006〜ステップS1007)。
セキュアAPI分岐処理701は、スタックポインタの設定を、セキュアプログラム202が利用するものに戻し(ステップS1008)、API分岐テーブル800から、識別子「1」に対応する分岐先アドレスを取得する。ここでは、識別子「1」に対応するZIセクションB初期化API702の分岐先アドレス802「0xFFA01000」が取得され、論理アドレス「0xFFA01000」により示される格納位置に格納されている実行コード、つまり、ZIセクションB初期化API702に分岐する(ステップS1009〜ステップS1010)。
「0xFFA01000」に処理が分岐すると、ZIセクションB初期化API702が実行される(ステップS1011)。これにより、ZIセクションB712の初期化が完了する。
ZIセクションB712の初期化が完了すると、セキュアAPI分岐処理701は、スタックポインタの設定を、OSが利用するものに戻す(ステップS1012)。
その後、OS上で動作するセキュアプログラム呼出部212へ処理が移る(ステップS1013〜ステップS1014)。
以上により、セキュアAPI_A703及びセキュアAPI_B704が利用するZIセクションA711及びZIセクションB712の初期化が完了する。
次に、セキュアプログラム呼出部212は、セキュアAPIの識別子を指定し、切替デバイスドライバ213に対し、ライブラリコールし、切替デバイスドライバ213へ処理が移る(ステップS1015〜ステップS1016)。
切替デバイスドライバ213は、指定された識別子をセキュアAPI分岐処理701へ出力し、セキュアAPI分岐処理701へ分岐する(ステップS1017〜ステップS1018)。
セキュアAPI分岐処理701は、スタックポインタの設定を、セキュアプログラム202が利用するものに戻し(ステップS1019)、次に、API分岐テーブル800から、受け取った識別子に対応する分岐先アドレスを取得し、取得した分岐先アドレスへ分岐する(ステップS1020〜ステップS1021)。
次に、分岐先アドレスで示される位置に格納されるセキュアプログラム202のAPI処理が実行される(ステップS1022)。
セキュアAPIの処理が終了すると、スタックポインタの設定を、OSが利用するものに戻し(ステップS1023)、その後、セキュアプログラム呼出部212及びOSへ処理が移る(ステップS1024〜ステップS1026)。
図12に示すステップS1015からステップS1026までの処理は、図11に示すステップS1000からステップS1014までの処理が完了した後、複数回実行されてもよい。図11に示す全てのステップが完了していることは、セキュアプログラムが実行する際に初期化されるべきZIセクションの初期化処理完了を意味しているからである。
なお、本実施の形態では、セキュアAPI_A703は、コンテンツ鍵取得を行うコンピュータプログラムであり、セキュアAPI_B704は、暗号化コンテンツ121をコンテンツ鍵131を用いて復号するコンピュータプログラムである。
この場合、まず図11に示す全てのステップが実行されZIセクションの初期化が完了する。次に、識別子を「2」として、図12に示す全てのステップが実行されることにより、コンテンツ鍵131が取得される。次に、識別子を「3」として、図12に示す全てのステップが実行されることにより、コンテンツ鍵131を用いて暗号化コンテンツ121が復号される。
2.その他の変形例
なお、本発明を上記実施の形態に基づいて説明してきたが、本発明は、上記の実施の形態に限定されないのはもちろんである。以下のような場合も本発明に含まれる。
(1)セキュアプログラム202は、セキュアプログラム202の実行中に、IRQ、FIQ、ソフトウェア割込み等の割込みが発生した場合に、セキュアプログラム202による処理を一時的に中断し、セキュアプログラム202による処理対象のセキュアデータを暗号化し、割込みに対応する処理が完了した後に、暗号化セキュアデータを復号し、セキュアプログラム202による処理を一時的に中断した点から、セキュアプログラム202による処理を継続して実行するとしてもよい。具体的には、以下に示す通りである。
IPLで初期化される領域であるZIセクションA711又はセキュアプログラム202により初期化される領域であるZIセクションB712に、セキュアプログラム202の初期化完了フラグを設ける。初期化完了フラグは、セキュアプログラム202によるZIセクションB712の初期化完了後、「1」に設定され、セキュアプログラム202が実行されている間は、常に、「1」となっている。
このように、初期化完了フラグをZIセクションに設けてもよい。しかしZIセクションに限定されることなく、RWセクションに初期化完了フラグを設けるとしてもよい。
一般的に、コンピュータシステムにおいては、IRQ、FIQ、ソフトウェア割込み等の割込みが発生すると、CPUの例外ベクタテーブルに分岐する。例外ベクタテーブルには、割込み要因毎に割込み処理ルーチンが登録されており、例外ベクタテーブルにより、割込み要因毎に、割込み処理ルーチンへ分岐し、所望の割込み処理が行われる。
本変形例においては、例外ベクタテーブルにおいて、予め、割込みが発生するとセキュアプログラム202に分岐するように登録しておく。このようにすることで、割込みが発生するたびに、セキュアプログラム202へ一旦処理が移るようになる。
セキュアプログラム202の実行中に割込みが発生した場合のシーケンスを、図13を用いて、説明する。
セキュアプログラム202は、ZIセクションBの初期化を完了すると(ステップS1011)、次に、初期化完了フラグを「1」にセットする(ステップS1201)。
セキュアプログラム202が、実行されている間は、初期化完了フラグは、常に、「1」となっている。
セキュアプログラム202は、セキュアAPIの実行を開始する(ステップS1022)。
IRQ、FIQ、ソフトウェア割込み等の割込みが発生すると(ステップS1202)、CPUの例外ベクタテーブルに処理が移る。例外ベクタテーブルには、あらかじめセキュアプログラム202へ分岐するように、ベクタが登録されているので、セキュアプログラム202に分岐する(ステップS1203)。
セキュアプログラム202に分岐後、セキュアプログラム202は、初期化完了フラグが「1」であるか否かを判断する(ステップS1204)。
初期化完了フラグが、「1」であれば(ステップS1204でYES)、セキュアプログラム202の対象となる処理が実行中であるので、セキュアプログラム202は、割込み発生時のポイントを退避し(ステップS1206)、セキュアプログラム202が実行中に利用しているセキュアな情報に関連するセキュアデータ(ランタイムデータ)を暗号化して暗号化セキュアデータを生成する(ステップS1207)。暗号化セキュアデータの生成後、OSへ処理を移し(ステップS1208)、OSは、割込み処理を実施し(ステップS1209)、割込み処理が終了したら、セキュアプログラム202へ処理を移す(ステップS1210)。セキュアプログラム202は、初期化完了フラグが「1」であるか否かを判断する(ステップS1211)。初期化完了フラグが、「1」であれば(ステップS1211でYES)、セキュアプログラム202は、暗号化セキュアデータを復号して復号セキュアデータを生成し(ステップS1213)、割込みが発生してセキュアプログラム202の処理が中断していたポイントに復帰し(ステップS1214)、セキュアプログラム202の処理を継続する(ステップS1215)。
セキュアプログラム202の対象である処理の実行が終了する直前に、セキュアプログラム202は、初期化完了フラグを「0」に設定し(ステップS1216)、その後、セキュアプログラム202の実行が終了する。
初期化完了フラグが、「1」でなければ(ステップS1204でNO、又はステップS1211でNO)、OSへ処理を移す(ステップS1205、又はステップS1212)。
(2)本実施の形態では、セキュアプログラム202は、暗号化コンテンツを復号する復号プログラムであるとしているが、これに限定されることなく、秘密情報を扱うプログラムであるとしてもよい。
(3)本実施の形態では、切替デバイスドライバ213が、OS依存バイナリデータからOS非依存バイナリデータへの切替インターフェースの働きをしているが、切替デバイスドライバ213を利用することなく、セキュアプログラム呼出部212からセキュアAPI分岐処理701へ直接分岐するようにしてもよい。
(4)本実施の形態では、セキュアAPI分岐処理701が、スタックポインタの設定を、セキュアプログラム202が利用するものに戻し、また、スタックポインタの設定を、OSが利用するものに戻すとしているが、これには、限定されない。
切替デバイスドライバ213は、OSからセキュアプログラムへの切替の際に、切替の時点でOSが利用しているスタックポインタを退避し、スタックポインタの設定を、予め退避しておいたセキュアプログラム用のスタックポインタへ戻す命令を含むとしてもよい。また、切替デバイスドライバ213は、セキュアプログラムからOSへの切替の際に、切替の時点でセキュアプログラムが利用しているスタックポインタを退避し、スタックポインタの設定を、予め退避しておいたOS用のスタックポインタへ戻す命令を含むとしてもよい。
また、セキュアAPI分岐処理701が上記を行うとしてもよい。
(5)上述したセキュアプログラムは、BIOS(Basic Input/Output System)を構成するその一部のプログラムであるとしてもよい。BIOSとは、一般的に、コンピュータに接続されたディスクドライブ、キーボード、ビデオカードなどの周辺機器を制御するプログラム群である。
(6)上記の実施の形態では、コンパイル装置30及びコンパイル装置40は、別々の装置であるとしているが、これには限定されない。コンパイル装置30及びコンパイル装置40のそれぞれが有する構成要素を備えた1台のコンパイル装置から構成されるとしてもよい。
このコンパイル装置は、オペレーティングシステムを構成するソースコードにコンパイルを施して、第1オブジェクトを生成する第1コンパイル部と、前記第1オブジェクトのシンボル解決と再配置と第1ライブラリに含まれるプログラムとのリンクとを行って、オペレーティングシステムである実行可能形式の第1ソフトウェアを生成する第1リンク部と、秘匿情報を利用する処理を構成するソースコードにコンパイルを施して、第2オブジェクトを生成する第2コンパイル部と、前記第2オブジェクトのシンボル解決と再配置と第2ライブラリに含まれるプログラムとのリンクを行って、秘匿情報を利用する処理からなる実行可能形式の第2ソフトウェアを生成する第2リンク部とを備える。
(7)本実施の形態では、セキュアプログラムソースに対して耐タンパ化するような例を示していないが、セキュアプログラムソースに対して耐タンパ化手法を施してもよい。
耐タンパ化手法とは、オリジナルコード(プログラム命令)に対して、実行に影響のない不要な冗長コードの追加、ある命令コードの別の等価な命令コードへの置換え、制御構造の複雑化、1つのモジュール(プログラム命令の集合)の複数のモジュールへの分割化などの難読化をしておくこと、又はオリジナルコードを予め暗号化しておき、実行時に復号することである。耐タンパ化手法を適用させることでセキュアプログラム202のセキュリティレベルを向上させてもよい。コード暗号化を施す場合は、復号したコードを展開するRAM領域は、OSがアクセス不可能なエリア、つまり、管理外領域とする。
この技術に関しては、非特許文献1、非特許文献2、非特許文献3に詳細に述べられているので説明は省略する。
(8)上記の実施の形態では、IPLプログラム201により、ZIセクションA711のゼロ初期化処理が実行され、次にユーザによるコンテンツ再生要求がされ、セキュアプログラム202の起動直後に、セキュアプログラム202により、ZIセクションB712のゼロ初期化処理が実行されるとしているが、これには、限定されない。
IPLプログラム201により、ZIセクションA711の中の一部の変数のゼロ初期化処理が実行され、セキュアプログラム202により、ZIセクションB712の一部の変数のゼロ初期化処理が実行されるとしてもよい。
また、上記の実施の形態及び変形例においては、ZIセクションを、ゼロ値で初期するとしているが、これには限定されない。ゼロ値以外の固定値、例えば、「0xffff」などを、ZIセクションに書き込むとしてもよい。
(9)以上説明したように、本発明は、プログラム記憶部とデータ記憶部を備え、前記プログラム記憶部は、第一ソフトウェアと第二ソフトウェアを記憶し、前記データ記憶部は、第一データ記憶部と第二データ記憶部からなり、前記第一データ記憶部は、前記第一ソフトウェアがアクセス可能なエリアであり、前記第二データ記憶部は、前記第二ソフトウェアがアクセス可能なエリアであり、前記第一ソフトウェアは、前記第二データ記憶部にアクセス不可能であることを特徴とするセキュア処理装置である。
ここで、前記第一ソフトウェアは、オペレーティングシステムであり、前記第二ソフトウェアは、秘密情報を利用するソフトウェアであるとしてもよい。
ここで、第一コンパイラは、第一ソフトウェアのソースコードを入力とし、第一オブジェクトを出力し、第一リンカは、前記第一オブジェクトのシンボル解決と再配置と第一ライブラリをリンクする機能を有し、前記第一オブジェクトを入力とし、前記第一ソフトウェアを出力し、前記第一ソフトウェアは、前記第一コンパイラおよび前記第一リンカで作成された実行可能データであり、第二コンパイラは、前記第一コンパイラとは異なるコンパイラであって、前記第二ソフトウェアのソースコードを入力とし、第二オブジェクトを出力し、第二リンカは、前記第一リンカとは異なるリンカであり、前記第二オブジェクトのシンボル解決と再配置と第二ライブラリ群をリンクする機能を有し、前記第二オブジェクトを入力とし、前記第二ソフトウェアを出力し、前記第二ソフトウェアは、前記第二コンパイラおよび前記第二リンカで作成された実行可能データであるとしてもよい。
ここで、前記第二ソフトウェアは、改ざんや解析に対して耐性をもったソフトウェアであるとしてもよい。
ここで、前記第二ソフトウェアが利用する前記第二データ記憶部の初期化処理を少なくとも1つ以上の分割初期化処理に分割するとしてもよい。
ここで、前記分割初期化処理のうち、少なくとも1つ以上の分割初期化処理は、前記第二ソフトウェアの実行要求が発生するよりも前に実行されるとしてもよい。
ここで、前記分割初期化処理は、前記第二ソフトウェアの実行前に処理されるように分散して前記プログラム記憶部に記憶されているとしてもよ。
ここで、前記プログラム記憶部は、さらにIPLを含み、前記IPLが少なくとも1つ以上の前記分割初期化処理を実行するとしてもよい。
ここで、前記プログラム記憶部は、さらに切替デバイスドライバを含み、前記切替デバイスドライバが、前記第一ソフトウェアから第二ソフトウェアに処理を移すとしてもよい。
ここで、前記切替デバイスドライバは、前記第一ソフトウェアが利用する第一スタックポインタと前記第二ソフトウェアが利用する第二スタックポインタを管理し、前記第一ソフトウェアが実行される場合に、前記切替デバイスドライバは、スタックポインタを前記第一スタックポインタに設定し、前記第二ソフトウェアが実行される場合に、前記切替デバイスドライバは、スタックポインタを前記第二スタックポインタに設定するとしてもよい。
(10)上記の各装置は、具体的には、マイクロプロセッサ、ROM、RAM、などから構成されるコンピュータシステムである。前記RAMには、コンピュータプログラムが記憶されている。ここで、コンピュータプログラムは、所定の機能を達成するために、コンピュータに対する指令を示す命令コードが複数個組み合わされて構成されたものである。前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、各装置は、その機能を達成する。つまり、前記マイクロプロセッサは、前記コンピュータプログラムに含まれる各命令を1個ずつ読み出し、読み出した命令を解読し、解読結果に従って動作する。
(11)上記の各装置を構成する構成要素の一部又は全部は、1個のシステムLSI(Large ScaleIntegration:大規模集積回路)から構成されているとしてもよい。システムLSIは、複数の構成部を1個のチップ上に集積して製造された超多機能LSIであり、具体的には、マイクロプロセッサ、ROM、RAMなどを含んで構成されるコンピュータシステムである。前記RAMには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、システムLSIは、その機能を達成する。
また、上記の各装置を構成する構成要素の各部は、個別に1チップ化されても良いし、一部又は全てを含むように1チップ化されてもよい。また、ここでは、LSIとしたが、集積度の違いにより、IC、システムLSI、スーパーLSI、ウルトラLSIと呼称されることもある。
また、集積回路化の手法はLSIに限るものではなく、専用回路又は汎用プロセッサで実現してもよい。LSI製造後に、プログラムすることが可能なFPGA(Field Programmable Gate Array)やLSI内部の回路セルの接続や設定を再構成可能なリコンフィギュラブル・プロセッサを利用しても良い。
さらには、半導体技術の進歩又は派生する別技術によりLSIに置き換わる集積回路化の技術が登場すれば、当然、その技術を用いて機能ブロックの集積化を行ってもよい。バイオ技術の適応等が可能性としてありえる。
(12)上記の各装置を構成する構成要素の一部又は全部は、各装置に脱着可能なICカード又は単体のモジュールから構成されているとしてもよい。前記ICカード又は前記モジュールは、マイクロプロセッサ、ROM、RAM、などから構成されるコンピュータシステムである。前記ICカード又は前記モジュールは、上記の超多機能LSIを含むとしてもよい。マイクロプロセッサが、コンピュータプログラムに従って動作することにより、前記ICカード又は前記モジュールは、その機能を達成する。このICカード又はこのモジュールは、耐タンパ性を有するとしてもよい。
(13)本発明は、上記に示す方法であるとしてもよい。また、これらの方法をコンピュータにより実現するコンピュータプログラムであるとしてもよいし、前記コンピュータプログラムからなるデジタル信号であるとしてもよい。
また、本発明は、前記コンピュータプログラム又は前記デジタル信号をコンピュータ読み取り可能な記録媒体、例えば、フレキシブルディスク、ハードディスク、CD―ROM、MO、DVD、DVD−ROM、DVD−RAM、BD(Blu−ray Disc)、半導体メモリなど、に記録したものとしてもよい。また、これらの記録媒体に記録されている前記コンピュータプログラム又は前記デジタル信号であるとしてもよい。
また、本発明は、前記コンピュータプログラム又は前記デジタル信号を、電気通信回線、無線又は有線通信回線、インターネットを代表とするネットワーク、データ放送等を経由して伝送するものとしてもよい。
また、本発明は、マイクロプロセッサとメモリとを備えたコンピュータシステムであって、前記メモリは、上記コンピュータプログラムを記憶しており、前記マイクロプロセッサは、前記コンピュータプログラムに従って動作するとしてもよい。
また、前記プログラム又は前記デジタル信号を前記記録媒体に記録して移送することにより、又は前記プログラム又は前記デジタル信号を前記ネットワーク等を経由して移送することにより、独立した他のコンピュータシステムにより実施するとしてもよい。
(14)上記実施の形態及び上記変形例をそれぞれ組み合わせるとしてもよい。
本発明にかかるセキュア処理装置および方法は、秘密情報を利用したプログラムをOS管理外のメモリ上で動作させることで、OS上で動作するソフトウェアデバッガからの解析を防止する効果と、さらにOS管理外で動作するプログラムのRAMデータの初期化処理を分割して行うことで、ユーザ要求発生後から前記プログラム起動までの処理を短縮する効果とを有し、セキュアなソフトウェアの処理方法として有用である。
本発明を構成する各装置は、コンテンツを制作し、配給するコンテンツ配給産業において、また、その他の秘密を維持する必要がある情報を扱う産業において、経営的に、また継続的及び反復的に使用することができる。また、本発明を構成する各装置は、電器機器製造産業において、経営的に、また継続的及び反復的に、製造し、販売することができる。
セキュア処理システム1の構成を示すシステム構成図である。 コンパイル装置30の構成を示すブロック図である。 コンパイル装置40の構成を示すブロック図である。 メモリカード20及び携帯電話10の構成を示すブロック図である。 メモリ107のデータの配置を示す配置図である。 バイナリデータの各セクションの配置を示す配置図である。 メモリ107における物理アドレスと論理アドレスとの対応関係を示す図である。 セキュアプログラム202とセキュアプログラム用ワークメモリ602の内容を示す配置図である。 API分岐テーブル800のデータ構造を示すデータ構造図である。 リセットの後、OSプログラム210を起動し、OS上で動作するアプリケーションソフトが起動されるまでのシーケンスを示す図である。 セキュアプログラム202のZIセクションの初期化処理が完了するまでのシーケンスを示す図である。 セキュアプログラム202のZIセクションの初期化完了後、セキュアAPIの起動までのシーケンスを示す図である。 セキュアプログラム202の実行中に割込みが発生した場合のシーケンスを示す図である。
符号の説明
10 携帯電話
20 メモリカード
30 コンパイル装置
40 コンパイル装置
101 デバッガI/F
102 CPU
103 MMU
104 割込コントローラ
105 入力部
106 表示部
107 メモリ
108 入出力部
109 バッファ
110 符号処理部
111 D/A変換部
112 無線通信制御部
113 スピーカ
114 マイク
115 通信部
116 アンテナ
117 バス
120 通常領域
122 入出力部
130 セキュア領域
132 セキュア処理部
201 IPLプログラム
202 セキュアプログラム
210 OSプログラム
211 ノンセキュアプログラム
212 セキュアプログラム呼出部
213 切替デバイスドライバ
310 OS依存コンパイル部
320 OS依存リンク部
330 形式変換部
350 情報記憶部
410 OS非依存コンパイル部
420 OS非依存リンク部
430 形式変換部
450 情報記憶部

Claims (13)

  1. コンピュータシステムであって、
    基本プログラム、通常プログラム及びセキュアプログラムに含まれている各命令を読み出し、解読し、その解読結果に応じて動作するプロセッサと、
    管理領域及び前記管理領域とは異なる管理外領域から構成されるメモリ手段とを備え、
    前記基本プログラムは、オペレーティングシステムを構成し、前記通常プログラムに対して前記管理領域のみをアクセス空間とするアクセスを仲介する命令を含み、
    前記通常プログラムは、前記基本プログラムを介して、前記管理領域にアクセスする命令を含み、
    前記セキュアプログラムは、オペレーティングシステムに依存しないプログラムであり、前記管理外領域のみをアクセス空間としてアクセスする命令を含む
    ことを特徴とするコンピュータシステム。
  2. 前記管理領域は、さらに、前記基本プログラム及び前記通常プログラムを記憶しており、
    前記管理外領域は、さらに、前記セキュアプログラムを記憶しており、
    前記プロセッサは、前記管理領域に記憶されている前記基本プログラム、前記通常プログラムに含まれている各命令を読み出し、前記管理外領域に記憶されている前記セキュアプログラムに含まれている各命令を読み出す
    ことを特徴とする請求項1に記載のコンピュータシステム。
  3. 前記セキュアプログラムは、前記管理外領域において格納される秘匿すべき情報に関する秘匿処理を行う命令を含む
    ことを特徴とする請求項2に記載のコンピュータシステム。
  4. 前記管理領域は、さらに、基本プログラムの指示により、基本プログラムからセキュアプログラムへの実行の切替えを行う命令を含む切替プログラムを記憶しており、
    前記プロセッサは、さらに、前記管理領域に記憶されている前記切替プログラムに含まれている命令を読み出し、解読し、その解読結果に応じて動作し、
    前記基本プログラムは、さらに、前記切替プログラムに対して、セキュアプログラムへの切替を指示する命令を含み、
    前記セキュアプログラムは、さらに、前記秘匿処理の終了後、セキュアプログラムから基本プログラムへの実行の切替えを行う命令を含む
    ことを特徴とする請求項3に記載のコンピュータシステム。
  5. 前記切替プログラムは、セキュアプログラムから基本プログラムへの実行の切替えの際に、スタックポインタの設定を基本プログラムが利用するものに戻す命令を含み、セキュアプログラムから基本プログラムへの実行の切替えの際に、スタックポインタの設定をセキュアプログラムが利用するものに戻す命令を含む
    ことを特徴とする請求項4に記載のコンピュータシステム。
  6. 前記セキュアプログラムは、難読化が施されている
    ことを特徴とする請求項3に記載のコンピュータシステム。
  7. 前記セキュアプログラムは、初期化処理を必要とし、初期化処理は、複数のプログラムにより行われる
    ことを特徴とする請求項3に記載のコンピュータシステム。
  8. 前記複数の初期化プログラムは、前記セキュアプログラムによる前記秘匿処理に先行して実行される
    ことを特徴とする請求項7に記載のコンピュータシステム。
  9. 前記複数の初期化プログラムのうちの一部の初期化プログラムは、他の初期プログラムとは異なる時期において、実行される
    ことを特徴とする請求項8に記載のコンピュータシステム。
  10. 一部の初期化プログラムは、当該コンピュータシステムのリセットの直後において実行され、
    セキュアプログラムに含まれる初期化プログラムは、セキュアプログラムの実行が要求された時に、実行される
    ことを特徴とする請求項9に記載のコンピュータシステム。
  11. 集積回路であって、
    基本プログラム、通常プログラム及びセキュアプログラムに含まれている各命令を読み出し、解読し、その解読結果に応じて動作するプロセッサと、
    管理領域及び前記管理領域とは異なる管理外領域から構成されるメモリ手段とを備え、
    前記基本プログラムは、オペレーティングシステムを構成し、前記通常プログラムに対して前記管理領域のみをアクセス空間とするアクセスを仲介する命令を含み、
    前記通常プログラムは、前記基本プログラムを介して、前記管理領域にアクセスする命令を含み、
    前記セキュアプログラムは、オペレーティングシステムに依存しないプログラムであり、前記管理外領域のみをアクセス空間としてアクセスする命令を含む
    ことを特徴とする集積回路。
  12. プログラム生成装置であって、
    オペレーティングシステムを構成するソースコードから、実行対象の装置が有する管理領域にのみアクセスする第1オブジェクトを生成する第1オブジェクト生成部と、
    秘匿情報を使う処理のソースコードから、前記実行対象の装置が有し、前記管理領域とは異なる管理外領域にのみアクセスする第2オブジェクトを生成する第2オブジェクト生成部と
    を備えることを特徴とするプログラム生成装置。
  13. 基本プログラム及びセキュアプログラムを記録しているコンピュータ読み取り可能な記録媒体であって、
    前記基本プログラムは、オペレーティングシステムを構成し、前記オペレーティングシステムの管理下で動作する通常プログラムに対して、実行対象の装置が有する管理領域のみをアクセス空間とするアクセスを仲介する命令を含み、
    前記セキュアプログラムは、オペレーティングシステムに依存しないプログラムであり、前記実行対象の装置が有し、前記管理領域とは異なる管理外領域のみをアクセス空間としてアクセスする命令を含む
    ことを特徴とする記録媒体。
JP2007518997A 2005-06-01 2006-05-30 コンピュータシステム及びプログラム生成装置 Active JP4850830B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2007518997A JP4850830B2 (ja) 2005-06-01 2006-05-30 コンピュータシステム及びプログラム生成装置

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
JP2005161359 2005-06-01
JP2005161359 2005-06-01
PCT/JP2006/310744 WO2006129641A1 (ja) 2005-06-01 2006-05-30 コンピュータシステム及びプログラム生成装置
JP2007518997A JP4850830B2 (ja) 2005-06-01 2006-05-30 コンピュータシステム及びプログラム生成装置

Publications (2)

Publication Number Publication Date
JPWO2006129641A1 true JPWO2006129641A1 (ja) 2009-01-08
JP4850830B2 JP4850830B2 (ja) 2012-01-11

Family

ID=37481570

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007518997A Active JP4850830B2 (ja) 2005-06-01 2006-05-30 コンピュータシステム及びプログラム生成装置

Country Status (6)

Country Link
US (1) US7962746B2 (ja)
EP (1) EP1890237A1 (ja)
JP (1) JP4850830B2 (ja)
KR (1) KR20080014786A (ja)
CN (1) CN101189586B (ja)
WO (1) WO2006129641A1 (ja)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7861046B2 (en) * 2007-06-29 2010-12-28 Sandisk Corporation Secure digital host sector application flag compression
JP2009070327A (ja) * 2007-09-18 2009-04-02 Panasonic Corp 情報端末及び情報端末の制御方法
US8775824B2 (en) * 2008-01-02 2014-07-08 Arm Limited Protecting the security of secure data sent from a central processor for processing by a further processing device
JP4953385B2 (ja) * 2008-03-17 2012-06-13 株式会社日立ソリューションズ アプリケーションの実行ファイル及び構成ファイルの漏洩防止装置
US9086913B2 (en) * 2008-12-31 2015-07-21 Intel Corporation Processor extensions for execution of secure embedded containers
US9207968B2 (en) * 2009-11-03 2015-12-08 Mediatek Inc. Computing system using single operating system to provide normal security services and high security services, and methods thereof
US20120079278A1 (en) * 2010-09-28 2012-03-29 Microsoft Corporation Object security over network
US8910307B2 (en) 2012-05-10 2014-12-09 Qualcomm Incorporated Hardware enforced output security settings
GB2515047B (en) 2013-06-12 2021-02-10 Advanced Risc Mach Ltd Security protection of software libraries in a data processing apparatus
CN103365687B (zh) * 2013-06-28 2017-02-08 北京创毅讯联科技股份有限公司 处理器启动方法、装置及提供初始程序装入程序的装置
US10754967B1 (en) * 2014-12-15 2020-08-25 Marvell Asia Pte, Ltd. Secure interrupt handling between security zones
KR102000861B1 (ko) * 2015-01-27 2019-07-16 애리스 엔터프라이지즈 엘엘씨 스트리밍 미디어 및 다른 데이터 흐름들의 보호를 위한 난독화
CN108416209B (zh) * 2018-03-07 2021-10-22 北京元心科技有限公司 程序安全验证方法、装置及终端设备

Family Cites Families (56)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0290330A (ja) * 1988-09-28 1990-03-29 Hitachi Ltd プログラム構成方式
US5522072A (en) * 1990-09-04 1996-05-28 At&T Corp. Arrangement for efficiently transferring program execution between subprograms
US5303378A (en) * 1991-05-21 1994-04-12 Compaq Computer Corporation Reentrant protected mode kernel using virtual 8086 mode interrupt service routines
US5826057A (en) * 1992-01-16 1998-10-20 Kabushiki Kaisha Toshiba Method for managing virtual address space at improved space utilization efficiency
US5515538A (en) * 1992-05-29 1996-05-07 Sun Microsystems, Inc. Apparatus and method for interrupt handling in a multi-threaded operating system kernel
US5892899A (en) * 1996-06-13 1999-04-06 Intel Corporation Tamper resistant methods and apparatus
US5757919A (en) * 1996-12-12 1998-05-26 Intel Corporation Cryptographically protected paging subsystem
US6393569B1 (en) * 1996-12-18 2002-05-21 Alexander S. Orenshteyn Secured system for accessing application services from a remote station
JP3718578B2 (ja) 1997-06-25 2005-11-24 ソニー株式会社 メモリ管理方法及びメモリ管理装置
US6269409B1 (en) * 1997-09-02 2001-07-31 Lsi Logic Corporation Method and apparatus for concurrent execution of operating systems
US6772419B1 (en) * 1997-09-12 2004-08-03 Hitachi, Ltd. Multi OS configuration system having an interrupt process program executes independently of operation of the multi OS
US6996828B1 (en) * 1997-09-12 2006-02-07 Hitachi, Ltd. Multi-OS configuration method
US6385727B1 (en) * 1998-09-25 2002-05-07 Hughes Electronics Corporation Apparatus for providing a secure processing environment
US7140015B1 (en) * 1999-09-29 2006-11-21 Network Appliance, Inc. Microkernel for real time applications
JP2001290665A (ja) * 2000-04-11 2001-10-19 Nec Software Hokuriku Ltd プロセッサシステム
AU2001247941B2 (en) * 2000-04-11 2007-09-06 Mathis, Richard M. Method and apparatus for computer memory protection and verification
US6889378B2 (en) * 2000-07-24 2005-05-03 Sony Corporation Information processing method, inter-task communication method, and computer-executable program for the same
US7149878B1 (en) * 2000-10-30 2006-12-12 Mips Technologies, Inc. Changing instruction set architecture mode by comparison of current instruction execution address with boundary address register values
JP2002251326A (ja) * 2001-02-22 2002-09-06 Hitachi Ltd 耐タンパ計算機システム
JP2002353960A (ja) * 2001-05-30 2002-12-06 Fujitsu Ltd コード実行装置およびコード配布方法
US7272832B2 (en) * 2001-10-25 2007-09-18 Hewlett-Packard Development Company, L.P. Method of protecting user process data in a secure platform inaccessible to the operating system and other tasks on top of the secure platform
JP2003280754A (ja) * 2002-03-25 2003-10-02 Nec Corp 隠蔽化ソースプログラム、ソースプログラム変換方法及び装置並びにソース変換プログラム
JP2003280755A (ja) * 2002-03-25 2003-10-02 Nec Corp 自己復元型プログラム、プログラム生成方法及び装置、情報処理装置並びにプログラム
US7313797B2 (en) * 2002-09-18 2007-12-25 Wind River Systems, Inc. Uniprocessor operating system design facilitating fast context switching
GB2395583B (en) * 2002-11-18 2005-11-30 Advanced Risc Mach Ltd Diagnostic data capture control for multi-domain processors
KR100941104B1 (ko) * 2002-11-18 2010-02-10 에이알엠 리미티드 데이터 처리 장치, 데이터 처리 방법 및 컴퓨터 프로그램을 기억한 컴퓨터 판독가능한 기억매체
GB2411254B (en) * 2002-11-18 2006-06-28 Advanced Risc Mach Ltd Monitoring control for multi-domain processors
KR101099463B1 (ko) * 2002-11-18 2011-12-28 에이알엠 리미티드 보안 도메인과 비보안 도메인을 갖는 시스템 내에서 가상메모리 어드레스의 물리적 메모리 어드레스로의 매핑
US7383587B2 (en) * 2002-11-18 2008-06-03 Arm Limited Exception handling control in a secure processing system
AU2003278342A1 (en) * 2002-11-18 2004-06-15 Arm Limited Security mode switching via an exception vector
DE60308215T2 (de) * 2002-11-18 2007-08-23 Arm Ltd., Cherry Hinton Prozessorschaltung zwischen sicheren und nicht sicheren modi
GB2396930B (en) * 2002-11-18 2005-09-07 Advanced Risc Mach Ltd Apparatus and method for managing access to a memory
GB2396451B (en) * 2002-11-18 2005-12-07 Advanced Risc Mach Ltd Delivering data processing requests to a suspended operating system
GB0226874D0 (en) * 2002-11-18 2002-12-24 Advanced Risc Mach Ltd Switching between secure and non-secure processing modes
US7539853B2 (en) * 2002-11-18 2009-05-26 Arm Limited Handling interrupts in data processing of data in which only a portion of a function has been processed
US7370210B2 (en) * 2002-11-18 2008-05-06 Arm Limited Apparatus and method for managing processor configuration data
GB2411027B (en) * 2002-11-18 2006-03-15 Advanced Risc Mach Ltd Control of access to a memory by a device
US7231476B2 (en) * 2002-11-18 2007-06-12 Arm Limited Function control for a processor
GB2396034B (en) * 2002-11-18 2006-03-08 Advanced Risc Mach Ltd Technique for accessing memory in a data processing apparatus
US7171539B2 (en) * 2002-11-18 2007-01-30 Arm Limited Apparatus and method for controlling access to a memory
GB2396712B (en) * 2002-11-18 2005-12-07 Advanced Risc Mach Ltd Handling multiple interrupts in a data processing system utilising multiple operating systems
US7117284B2 (en) * 2002-11-18 2006-10-03 Arm Limited Vectored interrupt control within a system having a secure domain and a non-secure domain
GB2396713B (en) * 2002-11-18 2005-09-14 Advanced Risc Mach Ltd Apparatus and method for controlling access to a memory unit
US7149862B2 (en) * 2002-11-18 2006-12-12 Arm Limited Access control in a data processing apparatus
US20040168078A1 (en) * 2002-12-04 2004-08-26 Brodley Carla E. Apparatus, system and method for protecting function return address
JP4347582B2 (ja) * 2003-02-04 2009-10-21 パナソニック株式会社 情報処理装置
US7401335B2 (en) * 2003-02-28 2008-07-15 Wind River Systems, Inc. Single stack kernel
US20040243783A1 (en) * 2003-05-30 2004-12-02 Zhimin Ding Method and apparatus for multi-mode operation in a semiconductor circuit
US7415618B2 (en) * 2003-09-25 2008-08-19 Sun Microsystems, Inc. Permutation of opcode values for application program obfuscation
KR20070005917A (ko) * 2003-09-30 2007-01-10 쟈루나 에스에이 운영체제
WO2005052769A1 (ja) * 2003-11-28 2005-06-09 Matsushita Electric Industrial Co.,Ltd. データ処理装置
JP4447977B2 (ja) * 2004-06-30 2010-04-07 富士通マイクロエレクトロニクス株式会社 セキュアプロセッサ、およびセキュアプロセッサ用プログラム。
FR2872933B1 (fr) * 2004-07-06 2008-01-25 Trusted Logic Sa Procede de partage de temps d'un processeur
EP2296089B1 (en) * 2004-08-18 2019-07-03 Red Bend Software Operating systems
US7568186B2 (en) * 2005-06-07 2009-07-28 International Business Machines Corporation Employing a mirror probe handler for seamless access to arguments of a probed function
US7797681B2 (en) * 2006-05-11 2010-09-14 Arm Limited Stack memory selection upon exception in a data processing system

Also Published As

Publication number Publication date
CN101189586B (zh) 2011-06-15
US7962746B2 (en) 2011-06-14
WO2006129641A1 (ja) 2006-12-07
CN101189586A (zh) 2008-05-28
EP1890237A1 (en) 2008-02-20
US20090106832A1 (en) 2009-04-23
JP4850830B2 (ja) 2012-01-11
KR20080014786A (ko) 2008-02-14

Similar Documents

Publication Publication Date Title
JP4850830B2 (ja) コンピュータシステム及びプログラム生成装置
JP6815385B2 (ja) アプリケーションのコード難読化のためのシステムおよび方法
JP5175856B2 (ja) セキュアデバイス・システムにおけるフラッシュメモリ・ブロックの保護と方法
JP5821034B2 (ja) 情報処理装置、仮想マシン生成方法及びアプリ配信システム
JP5828081B2 (ja) 情報処理装置、情報処理方法、及びプログラム配信システム
US7107459B2 (en) Secure CPU and memory management unit with cryptographic extensions
US7690023B2 (en) Software safety execution system
US6996710B1 (en) Platform and method for issuing and certifying a hardware-protected attestation key
US8307215B2 (en) System and method for an autonomous software protection device
WO2005098570A1 (ja) 実行装置
US7908450B2 (en) Memory management unit, code verifying apparatus, and code decrypting apparatus
WO2006009081A1 (ja) アプリケーション実行装置及びアプリケーション実行装置のアプリケーション実行方法
WO2007011001A1 (ja) 実行装置
JP4551231B2 (ja) プログラム実行保護システム、プログラム実行保護方法
JP2005216027A (ja) 暗号化装置及びこれを備えた暗号化システム並びに復号化装置及びこれを備えた半導体システム
JP6696352B2 (ja) プログラマブルロジック装置、情報処理装置、処理方法、及び処理プログラム
WO2023041462A1 (en) Storing diagnostic state of secure virtual machines
JP4507569B2 (ja) 情報処理装置および情報処理方法、プログラム、並びに記録媒体
JP2004272594A (ja) データ利用装置及びデータ利用方法、並びにコンピュータ・プログラム
JP2008310678A (ja) 記憶装置、情報機器、及びコンテンツ変換方法
TWI791995B (zh) 軟體保護方法及其系統
JP2023065323A (ja) コンピュータに実装された方法、システム及びコンピュータプログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20090119

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110705

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110831

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20110927

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20111019

R150 Certificate of patent or registration of utility model

Ref document number: 4850830

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20141028

Year of fee payment: 3