JP2004038394A - 耐タンパプロセッサにおける共有ライブラリの使用方法およびそのプログラム - Google Patents

耐タンパプロセッサにおける共有ライブラリの使用方法およびそのプログラム Download PDF

Info

Publication number
JP2004038394A
JP2004038394A JP2002192422A JP2002192422A JP2004038394A JP 2004038394 A JP2004038394 A JP 2004038394A JP 2002192422 A JP2002192422 A JP 2002192422A JP 2002192422 A JP2002192422 A JP 2002192422A JP 2004038394 A JP2004038394 A JP 2004038394A
Authority
JP
Grant status
Application
Patent type
Prior art keywords
shared library
key
shared
program
data
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
JP2002192422A
Other languages
English (en)
Other versions
JP4115759B2 (ja )
Inventor
Mikio Hashimoto
Kensaku Yamaguchi
山口 健作
橋本 幹生
Original Assignee
Toshiba Corp
株式会社東芝
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material
    • G06F21/12Protecting executable software
    • G06F21/14Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
    • GPHYSICS
    • G06COMPUTING; CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/51Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems at application loading time, e.g. accepting, rejecting, starting or inhibiting executable software based on integrity or source reliability

Abstract

【課題】暗号化されたコードを復号化して実行する機能を有するマイクロプロセッサ上で動作し、自身の処理内容や処理結果を呼出元以外に漏洩しない共有ライブラリを実現する。
【解決手段】暗号化されたコードを復号化して実行する機能を有し、各タスクに異なる識別子を与えて暗号鍵を格納するテーブルを有するマイクロプロセッサ1上で呼出元から共有ライブラリ4を使用可能にする方法は、共有ライブラリ用4のタスクを作成し、このタスクにタスク識別子を割り当てる。共有ライブラリ4のヘッダ41から命令鍵k41を取得し、この命令鍵k41を前記マイクロプロセッサ1内の前記共有ライブラリに割り当てられた識別子に対応する鍵値テーブル13に格納する。次に、共有ライブラリ4内のローダー42aを実行して初期化を行うステップと、共有ライブラリ4内のエントリポイント42bを経由して呼出元へ制御を返すステップとからなる。
【選択図】   図9

Description

【0001】
【発明の属する技術分野】
本発明は、マルチタスクのプログラム実行環境を支援する機能を持つマイクロプロセッサで、プログラムやデータの暗号化及び復号化機能を有し、プログラムの実行コードや処理対象であるデータの秘匿性の保護、及び改竄の防止を可能とするマイクロプロセッサにおける、共有ライブラリの使用方法およびそのプログラムに関する。
【0002】
【従来の技術】
近年のコンピュータシステムでは、パーソナルコンピュータをはじめとして、様々なメーカーのハードウェアやソフトウェアを組み合わせて構築される、オープンシステムが広く普及している。オープンシステムでは、ハードウェアやシステムプログラム(又はオペレーティングシステム、以下OSと呼ぶ)の情報が開示されており、エンドユーザがこの情報をもとにシステムプログラムを改変・改竄することも原理的に可能である。
【0003】
このような環境で実行されるアプリケーションプログラムにおいて、その提供者が、プログラムを解析や改竄から完全に保護することは困難である。アプリケーションプログラムはOSの管理下で動作するため、このOS自体が改変されて攻撃の手段として使われた場合、これを避ける手段がない。
【0004】
そこで予め、オープンシステムで動作するアプリケーションプログラムの解析を防止するために、これを暗号化するという方法がある。プログラムを暗号化すると、解析が困難になるだけでなく、そのプログラムを改変した場合の動作が予測困難となるため、改竄の防止にも有効である。ただし暗号化したアプリケーションプログラムを既存のコンピュータで実行することはできないので、これを復号化しつつ実行するようなマイクロプロセッサが必要となる。このマイクロプロセッサは、OSがアプリケーションプログラムに対して敵対動作をとることを前提として、プログラムの秘密を守るものでなければならない。
【0005】
このような要件を満たすマイクロプロセッサとしては、橋本他による特開2001−230770や、Lie他による”Architectural Support for Copy and Tamper Resistant Software” (Computer Architecture News 28(5) p. 168−)がある。これらで提案されているマイクロプロセッサは、プログラムだけでなくプログラムが扱う情報やデータも暗号化して、解析や改変から保護する機能を備えている。また、保護を受けたプログラムを、複数同時に疑似並列実行するマルチタスクのプログラム実行環境を提供する。以下、このようなマイクロプロセッサを耐タンパマイクロプロセッサと呼ぶ。
【0006】
従来提案されてきた耐タンパマイクロプロセッサでは、アプリケーションプログラムは単体で動作し、その実行コードだけで必要な全ての処理が可能であるものとみなされてきた。また、複数のプログラムが協調動作をするためデータ領域の共有方法は寺本他による特願2000−402672で提案されている。しかし、この場合でも協調動作をしている各プログラムは、それぞれ独立した個別のプログラムである。
【0007】
一方、現代のOSでは共有ライブラリが使われることが多い。ライブラリとは、プログラムを構成する部分であるサブルーチン(プログラムにおいてなんらかの機能を有する一纏まりの命令群)等のサブプログラムを集めたものである。アプリケーションプログラムのプログラマは、アプリケーションプログラムの動作に必要な全ての機能をアプリケーションプログラムに実装するかわりに、一部の機能をライブラリに用意されたサブプログラムに依存することができる。ライブラリとアプリケーションプログラムは、それぞれ別々に開発してから後で自由に組み合わせて使用することができるため、開発を効率化することができる。
【0008】
古典的なライブラリは、アプリケーションプログラムの作成時にアプリケーションプログラムにリンクされ、ライブラリのサブプログラムはアプリケーションプログラムと一体となって配布される。一方、今日広く使われているライブラリは、アプリケーションプログラムとは別ファイルとして配布される。
【0009】
共有ライブラリの場合、アプリケーションプログラムとのリンクは、ユーザがプログラムを実行する時に初めて行なわれる。またこのリンク動作は、アプリケーションプログラムの実行可能オブジェクトファイルに対してではなく、アプリケーションプログラムのメモリ上のイメージに対して行なわれる。いったんアプリケーションプログラムと共有ライブラリ間のリンクが行なわれると、共有ライブラリのサブプログラムは通常の共有ライブラリのサブプログラムと同様、アプリケーションプログラム本体から自由に呼び出して使用することができる。
【0010】
共有ライブラリを使う利点として、必要な記憶領域を節約できることが挙げられる。1つのアプリケーションプログラムとそれが使う共有ライブラリのサイズを合計すれば、共有ライブラリを使わない場合に比べてサイズが小さくなることはない。しかし、同じ共有ライブラリを使用するアプリケーションプログラムが複数ある場合は、共有ライブラリのコピーは1つだけあれば良いので、全体として記憶領域の節約になる。この記憶領域の節約は、アプリケーションプログラムの配布ファイルが置かれる二次記憶(ディスク等の外部記憶装置)にも、アプリケーションプログラムが実行時に置かれるコンピュータのメインメモリにも適用できる。
【0011】
共有ライブラリの中でも動的リンク型と呼ばれる種類のもの(動的リンク共有ライブラリ)は、アプリケーションプログラムを変更することなく共有ライブラリを変更できることを特徴としている。動的リンク共有ライブラリを使うと、ある共有ライブラリを別のものと置き換えることにより、アプリケーションプログラム本体を変更することなくその機能の一部分を変更したり、不具合を修正したりすることが可能である。また、アプリケーションプログラムが実行開始後に使用可能な共有ライブラリを検索し、これをロードするようにすれば、共有ライブラリのみを別途提供することにより、アプリケーションプログラム本体に変更を加えることなく機能追加が可能になる。このような使用形態の共有ライブラリは、しばしばプラグインと呼ばれる。
【0012】
【発明が解決しようとする課題】
これまで、上述した耐タンパマイクロプロセッサ上で、共有ライブラリを使用できるようなアーキテクチャの提案は行なわれていない。
【0013】
耐タンパマイクロプロセッサ上で共有ライブラリを実装するためには、以下に述べる要件を満たす必要がある。すなわち、アプリケーションプログラムから共有ライブラリのルーチンを呼び出すことが可能であること。および、ルーチンを呼び出す際にデータをルーチンに渡し、ルーチンから復帰するときも呼出元に処理結果のデータを返すことが出来ること、が要求される。
【0014】
また上記に加えて、耐タンパマイクロプロセッサが提供するデータ等の保護機能を有効に機能させるためには、アプリケーションプログラムと共有ライブラリとの間でやりとりされる情報の秘密をOS等から守る必要がある。ルーチン呼出の際に秘匿したいデータをやりとりする場合、データを渡す前に相手が信用できるかどうか(OS等によって悪意のある別の共有ライブラリに置き換えられていないかどうか)を認証する必要がある。また、この認証が終った後で呼出先のルーチンがすり替えられることも防止しなければならない。共有ライブラリが複数のアプリケーションプログラムから同時に使用される場合は、共有ライブラリが1つのプログラムの秘密を他のプログラムに漏らすようなことはあってはならない。
【0015】
また共有ライブラリは、任意のアプリケーションから使用可能でなければならない。つまり認証により、ある特定のアプリケーションプログラムからしか使用できないような共有ライブラリは、用途が限定されるため共有ライブラリとしては不十分である。一方、共有ライブラリを使用するアプリケーションプログラムの側は、共有ライブラリに秘匿にしたいデータを渡す前に、共有ライブラリがこのデータを他に漏らさないことを確認できることが望ましい。
【0016】
このためアプリケーションプログラムが、共有ライブラリを認証する手段が用意されていなければならない。
【0017】
共有ライブラリの動作は、アプリケーションプログラムからデータを受け取り、これに対しある処理をして、その結果をアプリケーションプログラムに返すことである。このとき、アプリケーションプログラムから受け取ったデータや、その処理結果を、アプリケーションプログラムと共有ライブラリ以外の第三者に漏洩してはならない。すなわち、データの受渡しを暗号化して行なわなければならないだけでなく、受け取ったデータに対応する処理結果を返す先のプログラムが、元のデータを提供したアプリケーションプログラムと同一であることを確かめる必要もある。
【0018】
また、誰でもこの共有ライブラリを使うアプリケーションプログラムを書くことができるため、悪意のあるアプリケーションプログラムから使用される可能性がある。その場合でも共有ライブラリの内部動作を解析から防御できなければならない。つまり、共有ライブラリの実行コードをアプリケーションプログラムが読み出したり、共有ライブラリに渡されたデータが処理される途中過程のデータをアプリケーションプログラムが盗み見たりすることを、防止できなければならない。
【0019】
本発明は従来の耐タンパマイクロプロセッサでは使用することのできなかった共有ライブラリを使用可能にすること。および、上記要件を満たしつつ、かつ前述した利点の得られる共有ライブラリの使用方法、およびそのプログラムを提供することを目的とする。
【0020】
【課題を解決するための手段】
上記目的を解決する、本発明の第一の側面は以下を要旨とする。暗号化されたコードを復号化して実行する機能を有すると共に、少なくとも1つのプログラム及びそのプログラムが呼び出す少なくとも1つの共有ライブラリに対応した複数の暗号鍵を格納する複数の領域からなるテーブルを有するマイクロプロセッサ上で、呼出元プログラムから前記少なくとも1つの共有ライブラリを呼び出して使用する方法であって、まず、共有ライブラリ用のタスクを作成し、次にこのタスクにタスク識別子を割り当てる。次に共有ライブラリのヘッダから予め記録されている命令鍵を取得し、次にこの命令鍵を前記マイクロプロセッサ内の前記共有ライブラリに割り当てられた識別子に対応するテーブルの領域に格納する。次に共有ライブラリ内のローダーを実行して初期化を行ない、共有ライブラリ内のエントリポイントを経由してアプリケーションへ制御を返す。
【0021】
このようにして実現された共有ライブラリの使用方法にあっては、共有ライブラリそのものを一つの識別子を有するタスクとして処理し、かつこの識別子に対応するプロセッサ内の場所に共有ライブラリを暗号・復号化する為の命令鍵を記録するので、共有ライブラリの実行コードが保護される。
【0022】
また本発明における第二の側面は、暗号化されたコードを復号化して実行する機能を有すると共に、少なくとも1つのプログラム及びそのプログラムが呼び出す少なくとも1つの共有ライブラリに対応した複数の暗号鍵を格納する複数の領域からなるテーブルを有するマイクロプロセッサ上で、呼出元プログラムから前記少なくとも1つの共有ライブラリを呼び出して使用する方法であって、以下を要旨とする。まず共有ライブラリ用のタスクを作成し、このタスクにタスク識別子を割り当てる。次に、共有ライブラリのヘッダから、予め記録されている命令鍵を取得し、この命令鍵を前記マイクロプロセッサ内の前記共有ライブラリに割り当てられた識別子に対応するテーブルの領域に格納する。共有ライブラリ内のローダーを実行して初期化を行ない、上記ローダーで初期化をする際にこの共有ライブラリが使用するデータを暗号化するためのデータ鍵を作成する。次いでこのデータ鍵を、上記プロセッサ内の当該共有ライブラリに対応する識別子が割り当てられたの前記テーブルの領域に格納し、共有ライブラリ内のエントリポイントを経由してアプリケーションへ制御を返し、呼出元からの呼出を待機する。呼出元からの呼出後で呼出元と認証を行う。呼出元側でこの認証情報を使用して認証を行ない、認証が正しく行なわれた後呼出元との間で使用する共通鍵を作成する。呼出元が作成した共有メモリ領域のアドレスを受け取り、上記共有メモリ領域を呼出元とのデータ交換に使用する共有暗号化データ領域に設定する。そして、呼出元から共有ライブラリ内のサブルーチン呼出信号を受け取り、呼出元のチェックサムを検証する。呼出元とのチェックサムが共有ライブラリのチェックサムと一致した場合に要求された処理を行ない、上記処理の結果を前記共有暗号化データ領域にチェックサムを加えて送付する。
【0023】
このような共有ライブラリでは、上記第一の側面に加えてプログラムから要求された処理を共有ライブラリが行う際に、共有ライブラリのデータ鍵を使用して処理内容および処理結果のデータを暗号化する。このため、共有ライブラリ自身のコードの暗号化に加えて、内部処理方法や処理結果が外部へ漏洩することを防げる。また、処理の要求を受ける時と処理結果を呼出元に返す時に互いのチェックサムが一致するかどうかを検証するため、処理の前後で呼出元がOSなどによって変更された場合にも、共有ライブラリ内の処理内容や処理結果を確実に保護できる。また加えて、呼出元の個数だけロードを行うため、一つの共有ライブラリを複数の呼出元から使用することも可能である。
【0024】
【発明の実施の形態】
以下、図面を参照しながら本発明の一実施の形態を説明する。
【0025】
図1は、本発明が適用されるマイクロプロセッサ(耐タンパマイクロプロセッサ)1の基本ハードウェア構成図である。マイクロプロセッサ1は、プロセッサ・コア10と、コード・データ暗号/復号処理部11と、鍵値テーブル13と、タスクID格納レジスタ14と、乱数生成部15と、外部バスインタフェース12とを有する。
【0026】
耐タンパマイクロプロセッサとして使用されるマイクロプロセッサ1が、通常のマイクロプロセッサと大きく異なる点は、その内部にコード・データ暗号/復号処理部11を有している点である。バス上の実行コードやデータは、暗号化された状態で流れる。プロセッサ・コア10に入力される実行コードやデータは、コード・データ暗号/復号処理部11によって復号化されて入力される。またデータがプロセッサ・コア10から再度バス上へ流れて出るときには、コード・データ暗号/復号処理部11を経由して暗号化されて出力される。コード・データ暗号/復号処理部11は暗号化や復号化に暗号鍵を使用する。この暗号鍵は、同プロセッサ1内の鍵値テーブル13から取得する。また、鍵値テーブル13の中から使うべき暗号鍵を選択・取得するために、タスクID格納レジスタ14を使う。
【0027】
図2は、鍵値テーブル13の構成を示す図である。鍵値テーブル13は、暗号鍵の値を格納するレジスタからなる鍵値テーブルエントリ130を複数個並べたものである。この鍵値テーブルエントリは、後述する0〜n番までのn+1個からなるタスクIDの数だけ設けることが可能である。各鍵値テーブルエントリ130は、タスクIDごとに130、130、130、・・・、130のように互いに識別される。鍵値テーブルエントリ130i( には、後述するプログラム3の実行コード32を暗号・復号化するための鍵である命令鍵k1、プログラム3が操作するデータを暗号化・復号化するためのデータ鍵k2、命令鍵k1やデータ鍵k2が適用されるメモリ範囲を示すアドレス情報13aを格納することができる。鍵値テーブル13には複数の鍵値テーブルエントリ130、130、130、・・・、130が並んでいるため、それぞれの鍵値テーブル130i( に別々のプログラム3の命令鍵を格納することができる。これにより異なる暗号鍵で暗号化された複数のプログラムのインスタンス(プロセス等)を疑似並列動作させるマルチタスク動作に対応可能となる。
【0028】
タスクID格納レジスタ14は、タスクIDを1つ格納するレジスタである。単一スレッドのプロセスや、複数スレッドを使うプロセスの中の各スレッド、又は呼び出された共有ライブラリのインスタンス(以下これらのプロセス、スレッドやインスタンスを、タスクと呼ぶ)をマルチタスク動作で疑似並列動作させているとき、現在マイクロプロセッサが実行中のタスクを識別するために、タスクID格納レジスタ14を用いる。
【0029】
乱数生成部15は、プロセッサ・コア10からの読み出しに対して、毎回異なる乱数を提供する。この乱数生成部15はプログラムが暗号化を行うための鍵や、認証のために必要な乱数を生成するために使用することができる。
【0030】
本発明が適用されるマイクロプロセッサ上で動作するソフトウェアは、システムソフトウェア(OS)と、アプリケーションプログラム3(以下、単にプログラムと呼ぶ)と、共有ライブラリ4からなる。
【0031】
以下では、アプリケーション3と、共有ライブラリ4の構成等について説明する。図3は、本発明に係るプログラム3の構成図である。プログラム3はヘッダ31と、実行コード32と、初期化済みデータ33と、インポートテーブル34からなる。ヘッダ31には、プログラム3の実行コード32を復号化するための命令鍵k31が含まれる。インポートテーブル34は、プログラム3が使用する共有ライブラリ4や、それに含まれるシンボル(シンボルは後述する共有ライブラリ内の各サブルーチン等を識別するための識別子である)を指定するもので、共有ライブラリ4のロードをするために必要な情報である。
【0032】
図4は、本発明に係る共有ライブラリ4の構成図である。共有ライブラリ4はプログラム3と同様、ヘッダ41と、実行コード42と、初期化済みデータ43と、インポートテーブル44からなる。共有ライブラリ4のインポートテーブル44は、共有ライブラリ4自身が別の共有ライブラリを使用する場合に必要な情報を含む。共有ライブラリ4の実行コード42はさらに、ブートストラップルーチン42aと、エントリポイントコード42bと、それぞれ機能を持ったいくつかのサブルーチン42cとからなる。図4では、複数のサブルーチンを添字i(1≦i≦n)で、42c、42c、・・・、42cのように区別してある。
【0033】
ブートストラップルーチン(ローダー)42aは、共有ライブラリ4が呼出元のプログラム3等によってロードされる時に必要な処理を行うためのものである。エントリポイントコード42bは、呼出元のプログラム3等から共有ライブラリ4が使用されるときの呼出先となる共有ライブラリ4のプログラム3に対する入口となる部分である。共有ライブラリ4のその他のサブルーチン42ci(1 n)が、実際にプログラム3が使用する機能を実装したコードである。共有ライブラリ4の各サブルーチン42ci(1 n)は、それぞれを共有ライブラリ4の中で識別できるような識別子が付与されている。
【0034】
また共有ライブラリの実行コード42内には、共有ライブラリ4が、後述するプログラム3等からの呼出に応じて処理を行う際に、要求された処理を行う際に使用するデータを暗号化するためのデータ鍵k42も含んでいる。
【0035】
(タスクの開始)
次に図5を参照しながら、OSがユーザからのプログラム実行の要求や、既存プロセスによる新規プロセスや新規スレッドスレッド作成の要求により、タスクの実行を開始する手順を説明する。
【0036】
OSは最初にタスクの作成を行う(ステップ51)。これはメモリの確保や、タスクを管理するためのデータ構造の作成等を含む。また、OSは新しいタスクのためのタスクIDの割当も行う。
【0037】
次にOSはプログラム3のヘッダ31より命令鍵k31を取得し、先ほど割り当てたタスクIDに対応する鍵値テーブルのエントリ130i(0 n)に命令鍵k31を格納する(ステップ52)。
【0038】
また、OSはプログラム3のインポートテーブル34を参照し、ここに記述された各共有ライブラリ4を、後述する手段(図6参照)によりロードする(ステップ53)。インポートテーブル34には任意の数の共有ライブラリ4が記述されている可能性がある。従って、OSは記述された共有ライブラリ4それぞれに関して、別個にロードの作業を行う。なお、タスク開始前に共有ライブラリ4をロードするかわりに、タスクが開始された後でタスクからの要求に応じて共有ライブラリ4をロードしても良い。
【0039】
OSは要求された全ての共有ライブラリ4のロードが完了すると、新しいタスクにコンテキスト(ただし、ここでコンテキストとは、プロセスの処理状況や環境が記載されているデータを指す)の切り替えを行ない、タスクの実行を開始する(ステップ54)。このタスク切り替えの際にプログラムのタスクIDがタスクID格納レジスタ14に格納される。
【0040】
耐タンパマイクロプロセッサ1において、プログラムの実行コード32は次のように実行される。外部バスインタフェース12が外部メモリより命令コードを取得すると、コード・データ暗号/復号処理部11は、タスクID格納レジスタ14に格納されたタスクIDに対応する鍵値テーブル13の内容を参照し、ここに格納されたプログラム3の命令鍵k31によって実行コード32を復号化する。次に復号化された実行コード32はプロセッサ・コア10に渡されて実行される。
【0041】
(共有ライブラリのロード)
図6は、OSが共有ライブラリをロードする手順を示す図である。
【0042】
通常のマイクロプロセッサでは、共有ライブラリのために呼出元のプログラムとは別のタスクを作成するようなことはしない。しかし耐タンパプロセッサ1では、プログラム3又は共有ライブラリ4の一方に悪意があった場合の安全性を考慮し、共有ライブラリ4にも別のタスクを作成する。このため、OSが共有ライブラリ4をロードするときに最初に行う作業は、タスクの作成及び新しいタスクのためのタスクIDの割り当てである(ステップ61)。
【0043】
次にOSは共有ライブラリ4のヘッダ41より命令鍵k41を取得し、割り当てられたタスクIDに対応する鍵値テーブル13のエントリ130i(0 n)にこの命令鍵k41を格納する(ステップ62)。このステップにより予め命令鍵k41で暗号化されている共有ライブラリ4をマイクロプロセッサ1で復号化可能となるとともに、各命令鍵k41が別々のエントリ130i(0 n)に格納される。従って、複数の共有ライブラリ4が存在する場合でも、これらを識別可能となり安全である。
【0044】
また、OSは必要に応じて共有ライブラリ4のインポートテーブル44を参照し、ここに記述された他の共有ライブラリ4をロードする(ステップ63)。このロードの手順は、プログラム3のインポートテーブル34に従って共有ライブラリ4をロードする場合の手順と同じである。
【0045】
次に、OSは共有ライブラリ4のブートストラップルーチン(ローダー)42aを実行する(ステップ64)。ブートストラップルーチン42aは、必要な初期化の処理を行なった後、エントリポイントコード42bに制御を渡す(ステップ65)。次いで、エントリポイントコード42bは、制御をOSに戻す。制御がOSに戻ると共有ライブラリ4は待機状態に移行する(ステップ66)。
【0046】
なお、ロードしようとしている共有ライブラリ4を、既に実行中の他のタスクが使用している場合であっても、共有ライブラリ4のロードは呼出元のタスク毎に毎回行う。結果として、呼出元タスクと同じ数だけのタスクIDが同じ共有ライブラリ4に対し割り当てられる。ただし共有ライブラリ4の実行コード42は、OSやマイクロプロセッサ1の仮想メモリの仕組みを利用すれば、呼出元タスクが複数ある場合でも1回だけメモリにロードするだけで良い。
【0047】
(共有ライブラリ内のサブルーチンの呼出)
タスク実行の途中で、共有ライブラリ4のサブルーチン42ci(1 n) を呼び出す必要があるときは、図7に示すシーケンスによってサブルーチン42ci(1 n)呼出の処理が行なわれる。
【0048】
図8は、サブルーチン呼出パラメータブロックの構造8である。呼出元のタスクは、呼出先の共有ライブラリ4の識別子81と、呼び出すサブルーチン42ci(1 n)の識別子82と、サブルーチン42ci(1 n)に渡すパラメータ83とを、サブルーチン呼出パラメータブロック8に格納する。サブルーチン呼出パラメータブロック8を作成した後、呼出元のタスクはシステムコールを使い、サブルーチン呼出パラメータブロック8を渡して、OSにサブルーチン呼出の要求を出す。
【0049】
OSはこの要求を受けると呼出元のタスクを停止させ、サブルーチン呼出パラメータブロック8の共有ライブラリ識別子81を参照して呼出先の共有ライブラリ4のタスクを選択し、その共有ライブラリ4にタスクの切り替えを行う。このときOSはサブルーチン呼出パラメータブロック8を共有ライブラリのタスクに渡す。共有ライブラリ4にタスクの切り替えを行うと共有ライブラリ4のタスクIDがタスクID格納レジスタ14に格納される。するとこれまで待機状態であった共有ライブラリ4のエントリポイントコード42bの実行が再開される。
【0050】
共有ライブラリ4の暗号化された実行コード42を実行する手順は、上記で説明したプログラム実行コード32の実行手順と同じである。
【0051】
共有ライブラリ4のエントリポイントコード42bは、実行が再開されると渡されたサブルーチン呼出パラメータブロック8の内容を参照し、ここに指定されたサブルーチン識別子81に対応するサブルーチン42ci(1 n)を呼び出す。呼び出されたサブルーチン42ci(1 n)はサブルーチン呼出パラメータブロック8にあるパラメータ83等を参照し、要求された処理を行う。処理の結果として返すべきデータはサブルーチン呼出パラメータブロック8に格納し、処理が完了するとエントリポイントコードに復帰し、次にここからOSに復帰する。OSに処理が復帰すると共有ライブラリ4は再び待機状態に戻り、OSはサブルーチン呼出パラメータブロック8を呼出元のタスクに返して呼出元タスクの実行を再開する。
【0052】
(マルチスレッド動作)
共有ライブラリ4の呼出元であるのプログラム3がマルチスレッド動作をする場合、複数のスレッドが同時に同じ共有ライブラリ4のタスクを使用することはできない。
【0053】
そこで、OSは呼出元プロセスが実行中に新しいスレッドの作成を要求すると、呼出元プログラム3が使う全ての共有ライブラリ4に関して、もう1度ロードの処理を行う。結果として、各共有ライブラリ4には、それぞれ呼出元プロセスのスレッドの数と同じだけの数のタスクIDが割り当てられる。OSはあるスレッドから共有ライブラリ4のサブルーチン42ci(1 n) 呼出を要求されると、その共有ライブラリ4に割り当てられた未使用のタスクIDを選択して、このタスクIDを使用して共有ライブラリ4のサブルーチン42ci(1 n)を呼び出す。
【0054】
また、OSは使用するタスクIDの数を節約するため、共有ライブラリ4のロードをタスクの作成時ではなく、サブルーチン42ci(1 n)呼出のときにタスクIDが不足した場合に行うようにしても良い。
【0055】
(共有ライブラリに固有の秘匿データの保持方法)
共有ライブラリ4のサブルーチン42ci(1 n)が、共有ライブラリ4内部での処理経過や処理方法等の秘匿データを保持するには次のようにする。
【0056】
共有ライブラリ4の作成者は、秘匿データ暗号化のための暗号化鍵であるデータ鍵k42を1つ作り、実行コード42の中に埋め込む(図4参照)。このデータ鍵k42の値は実行コード42の中に埋め込まれており、実行コード42は命令鍵k41によって暗号化されている。従って、共有ライブラリ4の命令鍵k41を知らない者はこのデータ鍵k42を共有ライブラリ4から取り出すことはできない。秘匿すべきデータを暗号化するには、このデータ鍵k42の値と、暗号化するべきメモリ領域のアドレスを、鍵値テーブル13に格納する。すると指定されたメモリ領域に対して読み書きされるデータは、コード・データ暗号/復号処理部11により暗号化/復号化される。また、このデータ鍵k42を使って予め暗号化したデータを共有ライブラリ4の初期化済みデータ43として配布し、共有ライブラリ4のサブルーチン42ci(1 n)がこれを上記のように復号化して使っても良い。
【0057】
データを上述のメモリ領域に書き込んでいったん呼出元に復帰した後、再び呼び出されたときにこのデータを読み出す必要がある場合は、同じデータ鍵k42を鍵値テーブル13に再度格納すれば良い。
【0058】
ただし上記の方法では、同じ共有ライブラリ4を使う限り、何回ロードしても毎回同じデータ鍵k42の値を使うことになる。つまり、同じデータ鍵k42を使うと、1回のプログラム実行時の暗号化されたデータを保存しておいて、もう1度プログラムを実行した時にこのデータを同じメモリ領域に書き込み、前回実行したときの状態を再現することができる。このようにデータの再利用ができてしまうと、共有ライブラリ4の動作に対する攻撃手段として使われる恐れがあり、不都合な場合がある。
【0059】
そのような場合は、白川他による特願2000−333635に記載のように、命令鍵とデータ鍵を鍵のペアとみなし、データ鍵k42としてプロセッサの乱数生成部15で生成した乱数を使用すればよい。共有ライブラリ4のタスクは、実行時に乱数生成部15より乱数を取得し、これをデータ鍵k42として、このデータ鍵k42を使用して暗号化するべきメモリ領域のアドレスとともに、鍵値テーブル13に格納する。共有ライブラリ4のタスク毎に乱数生成部15で生成したデータ鍵k42を使用すれば、異なるタスクでは異なる値のデータ鍵k42が使われる。従って、上記のようにして得られたデータ鍵k42を使って暗号化されたデータは、再利用することができなくなる。
【0060】
命令鍵k41とデータ鍵k42のペアは呼出元に復帰しても内容が失われないため、再び共有ライブラリ4のルーチンが呼び出されても、このデータ鍵k42で暗号化したデータは読み出すことができる。
【0061】
(データの受渡し)
共有ライブラリ4とその呼出元(プログラムないしは、その他の共有ライブラリ)は、上記のサブルーチン呼出パラメータブロック8を用いて互いにデータをやりとりすることができる。しかし、このサブルーチン呼出パラメータブロック8の内容は暗号化されていない。そのため、オペレーティングシステムにより内容が見られてしまう恐れがある。
【0062】
共有ライブラリ4とその呼出元が秘匿データを互いにやりとりするためには、寺本他による特願2000−402672で提案されているように、両者の間でDiffie−Hellman鍵交換シーケンスを用いて鍵の生成を行なえばよい。Diffie−Hellman 鍵交換シーケンスにより生成される鍵は、鍵交換を行なった2者のみが計算できる。すなわち、両者のやりとりを観察することのできるOSであっても、この鍵の値を知ることはできない。以下、この鍵を共通鍵ckと呼ぶことにする。
【0063】
秘匿データ受渡しのための領域は、OSが提供するメモリ共有手段により、両者の間で共有されるメモリ領域を割り当てる。この領域に対し、共有ライブラリ4と呼出元がそれぞれのタスクの鍵値テーブルエントリ130i(0 n)に共通鍵ckを登録すれば、相手がこのメモリ領域に暗号化して書き込んだ内容を互いに復号化して読むことができる。このようにして用意したメモリ領域を、以下では共有暗号化データ領域と呼ぶ。
【0064】
共有ライブラリ4やその呼出元が相互に、相手が意図したプログラム3又は共有ライブラリ4であることを認証する必要がある場合は、上記の鍵交換シーケンスのメッセージに公開鍵方式による署名を与えることにより行う。例えば、プログラム3が共有ライブラリ4を認証する必要がある場合は、共有ライブラリ4に公開鍵と秘密鍵の組を予め与えておき、プログラム3の作成者に共有ライブラリ4の公開鍵を配布しておく。認証は、鍵交換のために共有ライブラリ4がプログラム3に送るメッセージに、共有ライブラリ4の秘密鍵による署名を付加し、プログラム3が共有ライブラリ4の公開鍵を用いてこの署名を検証する。反対に共有ライブラリ4がプログラム3を認証する必要がある場合は、プログラム3に公開鍵と秘密鍵のペアを与えておき、共有ライブラリ4の作成者にプログラム3の公開鍵を配布しておく。認証は、鍵交換のためにプログラムが共有ライブラリ4に送るメッセージに、プログラム3の秘密鍵による署名を付加し、共有ライブラリ4がプログラム3の公開鍵を用いてこの署名を検証する。なお、これらの方式では認証を鍵交換と同時に行うが、もしこれを別々に行なってしまうと、認証をしている相手と鍵交換をしている相手が同一であることを確かめる方法がないため、悪意のあるプログラムによる相手のなりすましが可能になってしまい、認証が正しく行なわれない。
【0065】
(共有ライブラリの動作)
以上で説明した各部位の基本動作を用いて、本発明の一実施形態における実際の共有ライブラリ4の動作を説明する。ここで説明するプログラム3が、共有ライブラリ4を使用する手順における、共有ライブラリ4側の動作を図9に示す。またその時の、プログラム3側の動作を図10に示す。なお、図11は、そのときのプログラム3と共有ライブラリ4それぞれのメモリアドレス空間の配置である。
【0066】
ここで説明する共有ライブラリ4は、プログラム3からデータを受け取ってある処理を行ないその結果を返す、という動作のルーチンを提供する。その他に、Diffie−Hellman鍵交換シーケンスを行うための補助的なルーチンもプログラムから利用可能である。また、プログラム3の側から共有ライブラリ4を認証することができるように、共有ライブラリ4には前述の認証用の公開鍵と秘密鍵が与えられているものとする。これらのうち、公開鍵の方は共有ライブラリ4と共に配布され、この共有ライブラリ4を使いたいプログラマは、この公開鍵を自分が作るプログラムに組み込むことができる。
【0067】
共有ライブラリ4を使用するプログラム3が実行されると、先に図6を用いて説明したように、共有ライブラリ4のロードが行なわれる(ステップ91)。ロードの際に共有ライブラリ4のブートストラップルーチン42a(図6参照)が実行される。この際マイクロプロセッサ1の乱数生成部15より乱数を取得してこれよりデータ鍵k42を生成し、これを鍵値テーブル13に共有ライブラリ4のデータ鍵k42として格納する。ロードが完了すると共有ライブラリ4は待機状態になり、プログラム3の実行が開始される。プログラム3も共有ライブラリ4と同様、自分が使うメモリ領域を暗号化するために乱数生成部15より乱数を取得し、データ鍵k32を生成して鍵値テーブル13にデータ鍵k32として格納する(ステップ101)。
【0068】
プログラム3は共有ライブラリ4の機能を使用する前に、データの受渡しのための共有暗号化データ領域115を準備する(ステップ102)。次に共有ライブラリ4のDiffie−Hellman鍵交換シーケンスを行うためのルーチンを呼び出す(ステップ103)。またこれに伴い、共有ライブラリ4側もDiffie−Hellman鍵交換シーケンスを実行する(ステップ92)。鍵交換の際、共有ライブラリ4からプログラム3に送るメッセージには、共有ライブラリ4の認証用の秘密鍵を用いて署名を付加し、この認証情報をプログラムへ送付する(ステップ93)。プログラム3は共有ライブラリ4からこの認証情報を受け取る(ステップ104)。ここで、共有ライブラリ4の認証用の公開鍵を用いてこの署名の検証を行う(ステップ105)。この検証が成功した場合にのみ鍵交換シーケンスを終了させる(ステップ106)。この署名の検証により、鍵交換を行なっている相手の共有ライブラリ4が、意図した正しい共有ライブラリ4であることを確かめることができる。
【0069】
鍵交換の結果生成される共通鍵ckの値は、プログラム3の側ではプログラム3のデータ鍵k32により暗号化されてプログラム3以外から読み出せない秘匿データ領域112に書き込まれる。また同様に共有ライブラリ4の側でも上記共通鍵ckは、共有ライブラリ4のデータ鍵k42により暗号化され、共有ライブラリ4以外から読み出せない秘匿データ領域114に書き込まれる(ステップ94)。次にプログラム3は、データ受渡しのための共有メモリ領域をOSに要求して確保し、共通鍵ckをこの共有メモリ領域に対し適用されるよう鍵値テーブル13に設定する(ステップ107)。また、この共有メモリ領域のアドレスを共有ライブラリ4にも通知し、共有ライブラリ4の側でも共通鍵ckを同じメモリ領域に対して適用されるよう鍵値テーブル13に設定する。一方、共有ライブラリ4は、この共有メモリ領域のアドレスを受け取り、鍵の設定を行う(ステップ95)。これによりこのメモリ領域は、共有暗号化データ領域115として使用できるようになる。
【0070】
プログラム3が実際に目的の処理を行う共有ライブラリ4のサブルーチン42ci(1 n)を呼び出すときは、共有暗号化データ領域115に渡すべきデータを入れ、またこのデータのチェックサム111を計算してデータに付加する。そして共有ライブラリ4のサブルーチン42ci(1 n)に呼び出す(ステップ109)。この呼出信号を受け取ると(ステップ96)、共有ライブラリ4のサブルーチン42ci(1 n)はまずチェックサム111を検査する(ステップ97)。チェックサム111がデータ内容と一致しない場合はエラーとして終了する(ステップ971)。チェックサム111が一致した場合、次に共有暗号化データ領域115からデータ及び呼出側からの要求を読みだす(ステップ98)。この処理の過程で作業用のメモリ領域が必要な場合は、共有暗号化データ領域115ではなく、共有ライブラリ4独自のデータ鍵k42により暗号化されたメモリ領域(作業領域)116を作成して使用してもよい(ステップ99)。次に、このデータに対し要求された処理を行う(ステップ990)。要求された処理が完了したら、処理結果を共有暗号化データ領域115に格納し、チェックサム111を付加した後、プログラム3に復帰する(ステップ991)。復帰するとプログラム3はチェックサム111を検査する(ステップ110、ステップ111)。これがデータ内容と一致する場合、返されたデータを使って処理を続行するS112。一致しない場合は、エラーを返し終了する(ステップ113)。
【0071】
以上で説明した共有ライブラリ4は、鍵交換のための手続きやデータ受渡しの形式が公開されていれば誰でもこれを使うプログラム3を作ることができる。この共有ライブラリ4が安全性に関する要求を満たすことは次のように確認できる。
【0072】
プログラム3から渡されたデータの秘匿性は、プログラム3と共有ライブラリ4の間で共有される共有暗号化データ領域115が、共通鍵ckによって暗号化されていることにより保証される。
【0073】
ここで暗号化に用いている共通鍵ckはDiffie−Hellman鍵交換により生成している。従って、どちらかが意図的に、あるいは誤ってこの共通鍵ckを開示してしまわない限り、この二者以外に共通鍵ckの値が知られることはない。また、処理結果を返す時も、同じ共有暗号化データ領域115を使うため、この内容は、プログラム3および共有ライブラリのみが閲覧可能である。もし処理結果を他のプログラムが読もうとしても、元のDiffie−Hellman 鍵交換による共通鍵ckの値を知らないので、復号化することはできない。
【0074】
共有ライブラリ4が処理を行なっている途中で、OSが呼出元のプログラム3を別のプログラム3にすり替えて、置き換えた後のプログラム3が共有ライブラリ4から返された処理結果を盗み取るという攻撃が考えられる。しかし、呼出元のプログラムは、すり替えの前後で違う命令鍵k1(k31)のプログラム3になるため、鍵値テーブル13でペアとして管理されている命令鍵k1とデータ鍵k2(k32)の内容は共に変化する。共通鍵ckはすり替え前のデータ鍵k2(k32)で暗号化された秘匿データ領域115に格納されているが、すり替え後は鍵値テーブル13にあるデータ鍵k2(k32)の値が変わってしまうため、すり替え後のプログラム3は共通鍵ckを読むことができない。このため共有ライブラリ4より返されたデータをすり替え後のプログラム3が復号化することは原理的に不可能である。
【0075】
別の攻撃手段として、プログラム3と共有ライブラリ4との間のデータ受渡しの途中過程で、他のプログラム3がこの内容を改変することにより誤動作を誘導することが考えられる。しかし、改変をする側のプログラム3はこのデータの暗号化に使われている共通鍵ckの値を知らないため、改変結果を復号化した結果を予測することはできない。改変を行うとデータを復号化した結果はでたらめな内容になり、チェックサム111による整合性の検査で改変が検出される。
【0076】
複数のタスクが同時に同じ共有ライブラリ4を使用している場合でも、各呼出元のタスク毎に別のタスクを共有ライブラリ4のために割り当てるので、各共有ライブラリ4はそれぞれ別のデータ鍵k42を使うことになる。このため、共有ライブラリ4がある呼出元から受け取ったデータを、誤って他の呼出元に渡してしまうようなことは発生しない。
【0077】
共有ライブラリ4を呼び出すプログラム3自体が、共有ライブラリ4の実行コード42を見ることは、共有ライブラリ4がそれに固有の命令鍵k41により暗号化されているため、不可能である。また、共有ライブラリ4が処理の過程で作業用に使うメモリの内容も、共有ライブラリ4にしか知られないデータ鍵k42により暗号化された秘匿データ領域114を使うため、これを覗き見ることはできない。
【0078】
なお、上記の共有ライブラリ4は予め認証用の秘密鍵を持っている。このため、この秘密鍵を知らない第三者は、この共有ライブラリ4の代替となる共有ライブラリ4を勝手に作ることはできない。これは動的リンク共有ライブラリの利点である、既存の共有ライブラリと互換性のある共有ライブラリを自由に作ることができるという特徴に反する。しかし、これは共有ライブラリ4の動作の安全性をプログラム3に対して保証する上で必要不可欠な制約事項である。もし共有ライブラリ4の、元々の提供者以外の開発者が、機能追加等のためにこの共有ライブラリ4と互換性のある新しい共有ライブラリ4を作成する必要がある場合は、元の共有ライブラリ4の提供者に新しい共有ライブラリ4の安全性を確認してもらい、秘密鍵を埋め込んでもらうよう依頼すれば良い。
【0079】
【発明の効果】
上記説明したように、本発明によれば耐タンパマイクロプロセッサ上で動作する、保護されたアプリケーションプログラムから、保護された共有ライブラリを使用することが可能となる。共有ライブラリを使うことにより、プログラムの開発効率や機能拡張性の向上を得ることができる。また、秘匿されたデータのやりとりや、相互認証を可能とすることにより、暗号化されたプログラム
や共有ライブラリ内の処理方法や、処理結果などのデータの秘密を守ることが可能である。
【図面の簡単な説明】
【図1】本発明による共有ライブラリ使用の前提となるマイクロプロセッサの構成図。
【図2】図1のマイクロプロセッサ内部における、鍵値テーブルの構成図。
【図3】アプリケーションプログラムの構成図。
【図4】共有ライブラリの構成図。
【図5】本発明によるタスク実行開始の手順を示すフローチャート。
【図6】本発明による共有ライブラリをロードする手順を示すフローチャート。
【図7】本発明による共有ライブラリのルーチン呼出手続きを示すシーケンス図。
【図8】本発明によるサブルーチン呼出パラメータブロックの構成図。
【図9】プログラムから共有ライブラリを使用する際の、共有ライブラリ側のフローチャート。
【図10】プログラムから共有ライブラリを使用する際の、プログラム側のフローチャート。
【図11】プログラムと共有ライブラリのメモリアドレス空間の配置図。
【符号の説明】
1 耐タンパマイクロプロセッサ
10 プロセッサ・コア
11 コード・データ暗号/復号処理部
12 外部バスインタフェース
13 鍵値テーブル
14 タスクID格納レジスタ
15 乱数生成部
k1 命令鍵
k2 データ鍵
13a アドレス情報
130 鍵値テーブルエントリ
130 鍵値テーブルエントリ
130 鍵値テーブルエントリ
130 鍵値テーブルエントリ
3 アプリケーションプログラム
31 ヘッダ
k31 命令鍵
32 実行コード
33 初期化済みデータ
34 インポートテーブル
4  共有ライブラリ
41 ヘッダ
k41 命令鍵
42 実行データ
42a ブートストラップルーチン
42b エントリポイントコード
42c サブルーチン
42c サブルーチン
42c サブルーチン
k42 データ鍵
43 初期化済みデータ
44 インポートテーブル
8 サブルーチン呼出パラメータブロック
81 共有ライブラリ識別子
82 サブルーチン識別子
83 パラメータ
112 秘匿データ領域
ck 共通鍵
115 共有暗号化データ領域
110 受け渡しデータ
111 チェックサム
114 秘匿データ領域
116 作業領域

Claims (14)

  1. 暗号化されたコードを復号化して実行する機能を有すると共に、少なくとも1つのプログラム及びそのプログラムが呼び出す少なくとも1つの共有ライブラリに対応した複数の暗号鍵を格納する複数の領域からなるテーブルを有するマイクロプロセッサ上で、呼出元プログラムから前記少なくとも1つの共有ライブラリを呼び出して使用する方法であって、
    共有ライブラリ用のタスクを作成し、
    このタスクにタスク識別子を割り当て、
    共有ライブラリのヘッダから命令鍵を取得し、
    この命令鍵を前記マイクロプロセッサ内の前記共有ライブラリに割り当てられた識別子に対応するテーブルの領域に格納し、
    共有ライブラリ内のローダーを実行して初期化を行ない、
    共有ライブラリ内のエントリポイントを経由して呼出元へ制御を返すことからなる共有ライブラリの使用方法。
  2. 請求項1記載の共有ライブラリの使用方法であって、
    前記命令鍵をマイクロプロセッサ内のテーブルの領域に格納した後で、共有ライブラリ内のインポートテーブルを参照して他の共有ライブラリをロードすることを特徴とする共有ライブラリの使用方法。
  3. 暗号化されたコードを復号化して実行する機能を有すると共に、少なくとも1つのプログラム及びそのプログラムが呼び出す少なくとも1つの共有ライブラリに対応した複数の暗号鍵を格納する複数の領域からなるテーブルを有するマイクロプロセッサ上で、呼出元プログラムから前記少なくとも1つの共有ライブラリを呼び出して使用する方法であって、
    共有ライブラリ用のタスクを作成し、
    このタスクにタスク識別子を割り当て、
    共有ライブラリのヘッダから命令鍵を取得し、
    この命令鍵を前記マイクロプロセッサ内の前記共有ライブラリに割り当てられた識別子に対応するテーブルの領域に格納し、
    共有ライブラリ内のローダーを呼出元の個数だけ実行して初期化を行ない、
    共有ライブラリが使用するデータを暗号化するためのデータ鍵を呼出元の個数だけ作成し、
    このデータ鍵を上記プロセッサ内の当該共有ライブラリに対応する識別子が割り当てられた前記テーブルの領域に格納し、
    共有ライブラリ内のエントリポイントを経由して呼出元へ制御を返し呼出元からの呼出を待機し、
    呼出元と認証をし、
    呼出元が作成した共有メモリ領域のアドレスを受け取り、
    上記共有メモリ領域を呼出元とのデータ交換に使用する共有暗号化データ領域に設定し、
    呼出元から共有ライブラリ内のサブルーチン呼出信号を受け取り、
    呼出元のチェックサムを検証し、
    呼出元とのチェックサムが共有ライブラリのチェックサムと一致した場合に要求された処理を行ない、
    上記処理の結果を前記共有暗号化データ領域にチェックサムを加えて送付することからなる共有ライブラリの使用方法。
  4. 請求項3記載の共有ライブラリの使用方法であって、
    呼出元のチェックサムの検証を行った後で、呼出元から要求された処理を行うための作業メモリ領域を共有ライブラリのデータ鍵で暗号化し、
    この暗号化された作業メモリ領域内で呼出元から要求された処理を行うことを特徴とする共有ライブラリの使用方法。
  5. 請求項3記載の共有ライブラリの使用方法であって、
    前記呼出元との認証は、共有ライブラリに予め格納されている秘密鍵による署名を付加した認証情報を呼出元へ送付し、呼出元との間で使用する共通鍵を作成することで行われることを特徴とする共有ライブラリの使用方法。
  6. 請求項5記載の共有ライブラリの使用方法であって、
    前記呼出元と認証を行った後で前記共通鍵を共有ライブラリ内の前記データ鍵で暗号化し、
    このデータ鍵で暗号化された共通鍵を共有ライブラリの秘匿データ領域に格納することを特徴とする共有ライブラリの使用方法。
  7. 暗号化されたコードを復号化して実行する機能を有すると共に、少なくとも1つのプログラム及びそのプログラムが呼び出す少なくとも1つの共有ライブラリに対応した複数の暗号鍵を格納する複数の領域からなるテーブルを有するマイクロプロセッサ上で、呼出元プログラムから前記少なくとも1つの共有ライブラリを呼び出して使用する方法であって、
    共有ライブラリ用のタスクを作成し、
    このタスクにタスク識別子を割り当て、
    共有ライブラリのヘッダから命令鍵を取得し、
    この命令鍵を前記マイクロプロセッサ内の前記共有ライブラリに割り当てられた識別子に対応するテーブルの領域に格納し、
    共有ライブラリ内のローダーを実行して初期化を行ない、
    前記マイクロプロセッサ内の乱数生成部から取得した乱数から当該共有ライブラリの作業用メモリ領域を暗号化する為のデータ鍵を生成し、
    共有ライブラリ内のエントリポイントを経由して呼出元へ制御を返し呼出元からの呼出を待機することからなる共有ライブラリの使用方法。
  8. 暗号化されたコードを復号化して実行する機能を有すると共に、少なくとも1つのプログラム及びそのプログラムが呼び出す少なくとも1つの共有ライブラリに対応した複数の暗号鍵を格納する複数の領域からなるテーブルを有するマイクロプロセッサ上で、
    共有ライブラリ用タスクを作成するステップと、
    このタスクにタスク識別子を割り当てるステップと、
    共有ライブラリのヘッダから命令鍵を取得するステップと、
    この命令鍵を前記マイクロプロセッサ内の前記共有ライブラリに割り当てられた識別子に対応するテーブルの領域に格納するステップと、
    ローダーを実行して初期化を行うステップと、
    エントリポイントを経由して呼出元へ制御を返し待機するステップを実行させるためのプログラム。
  9. 暗号化されたコードを復号化して実行する機能を有すると共に、少なくとも1つのプログラム及びそのプログラムが呼び出す少なくとも1つの共有ライブラリに対応した複数の暗号鍵を格納する複数の領域からなるテーブルを有するマイクロプロセッサ上で、
    共有ライブラリ用のタスクを作成するステップと、
    このタスクにタスク識別子を割り当てるステップと、
    共有ライブラリのヘッダから予め記録されている命令鍵を取得するステップと、
    この命令鍵を前記マイクロプロセッサ内の前記共有ライブラリに割り当てられた識別子に対応するテーブルの領域に格納するステップと、
    共有ライブラリ内のローダーを実行して初期化を行うステップと、
    上記ローダーで初期化をする際にこの共有ライブラリが使用するデータを暗号化するデータ鍵を作成するステップと、
    このデータ鍵を上記プロセッサ内の当該共有ライブラリに対応する識別子が割り当てられた前記テーブルの領域に格納し、
    共有ライブラリ内のエントリポイントを経由してアプリケーションへ制御
    を返すステップと、
    呼出元と認証を行うステップと、
    呼出元が作成した共有メモリ領域のアドレスを受け取るステップと、
    上記共有メモリ領域を呼出元とのデータ交換に使用する共有暗号化データ領域に設定するステップと、
    呼出元から共有ライブラリ内のサブルーチン呼出信号を受け取るステップと、
    呼出元のチェックサムを検証するステップと、
    呼出元とのチェックサムが共有ライブラリのチェックサムと一致した場合に要求された処理を行うステップと、
    上記処理の結果を前記共有暗号化データ領域にチェックサムを加えて送付さるステップとを実行させるためのプログラム。
  10. 暗号化されたプログラムを該プログラム単位で実行する機能を有するマイクロプロセッサ上で実行される呼出元プログラムが、共有ライブラリを利用する方法であって、
    前記呼出元プログラムは固有の第1の暗号鍵で暗号化されており、
    前記共有ライブラリは固有の第2の暗号鍵で暗号化されており、
    前記共有ライブラリ該共有ライブラリの中に該共有ライブラリ自身の秘密鍵を保持し、
    前記呼出元プログラムは前記秘密鍵に対応する公開鍵を保持し、
    前記呼出元プログラムは第1の一時鍵を該呼出元プログラム内部で生成し、この第1の一時鍵に基づいて生成した第1の鍵共有情報を前記共有ライブラリに通知し、
    前記共有ライブラリは第2の一時鍵を該呼出元プログラム内部で生成し、この第2の一時鍵に基づいて生成した第2の鍵共有情報および受け取った前記第1の鍵共有情報に対して前記秘密鍵に基づいて署名を生成し、前記第2の認証用情報および前記署名を前記呼出元プログラムに通知し、
    前記共有ライブラリは前記第2の一時鍵および受信した第1の鍵共有情報から共有鍵を生成し、
    前記呼出元プログラムは前記第1の一時鍵および受信した第2の鍵共有情報から共有鍵を生成し、
    前記呼出元プログラムは受け取った前記署名を、前記第1の鍵共有情報及び第2の鍵共有情報について前記公開鍵を用いて検証し、前記検証に成功したときのみ、前記共有鍵を用いて暗号化した処理対象のデータを共有ライブラリに通知し、前記共有ライブラリは、前記通知された処理対象のデータを共有鍵により復号化して所定の処理を行い、この処理結果として得られたデータを、前記共有鍵を用いて暗号化して前記呼出元プログラムへ通知することを特徴とする共有ライブラリの使用方法。
  11. 請求項10記載の共有ライブラリの使用方法であって、
    前記マイクロプロセッサには暗号化されたデータの暗号化鍵及びメモリ領域を指定する特殊レジスタが設けられ、
    前記送信元プログラムは、前記データの交換に先立って第1のデータ交換用メモリ領域を前記特殊レジスタに設定し、
    前記共有ライブラリは、前記データの交換に先立って第2のデータ交換用メモリ領域を前記特殊レジスタに設定し、
    前記送信元プログラム及び前記共有ライブラリは前記データの送付及び受信の際に前記第1及び第2のデータ交換用メモリ領域への書き込みを行うことにより暗号化された前記データを前記メモリ領域に書き込むことを特徴とする共有ライブラリの使用方法。
  12. 請求項11記載の共有ライブラリ使用方法であって、
    前記共有ライブラリは前記第1の一時鍵の生成時に所定の乱数生成手段により作業鍵を作成し、
    前記作業鍵及び作業用メモリ領域を前記特殊レジスタに設定し、
    前記共有ライブラリ内部における一時データの保持には前記作業用メモリ領域を使用することにより、一時データを暗号化して前記作業用メモリ領域で指定されたメモリ領域に格納することを特徴とする共有ライブラリ使用方法。
  13. 暗号化されたプログラムを該プログラム単位で復号化して実行する機能を有するマイクロプロセッサ上で実行される呼出元プログラムが、共有ライブラリを利用する方法であって、
    前記マイクロプロセッサは該マイクロプロセッサ毎に固有のプロセッサ秘密鍵を持ち、
    前記マイクロプロセッサは複数の前記プログラムに各々対応する複数の配布鍵を、前記マイクロプロセッサ秘密鍵によってそれぞれ復号化して、複数のプログラム鍵を取り出し、
    前記各々のプログラム鍵により暗号化された状態で外部メモリに配置された複数のプログラムを、対応する前記プログラム鍵によってそれぞれ復号化して疑似並列的に実行し、
    前記マイクロプロセッサ内部に疑似並列実行単位の制御情報を保持するテーブルを持ち、このテーブルの識別子に基づいて、前記マイクロプロセッサ内部に保持する情報のアクセス制御を行い、
    前記呼出元プログラムから呼び出される共有ライブラリの読み込み時に前記実行制御情報を保持するエントリを割り当て、他のプログラムとは個別に実行制御することを特徴とする共有ライブラリ使用方法。
  14. 請求項13記載の共有ライブラリ使用方法であって、
    前記制御情報はコンテキスト情報を暗号化するための暗号鍵であることを特徴とする共有ライブラリ使用方法。
JP2002192422A 2002-07-01 2002-07-01 耐タンパプロセッサにおける共有ライブラリの使用方法およびそのプログラム Expired - Fee Related JP4115759B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2002192422A JP4115759B2 (ja) 2002-07-01 2002-07-01 耐タンパプロセッサにおける共有ライブラリの使用方法およびそのプログラム

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP2002192422A JP4115759B2 (ja) 2002-07-01 2002-07-01 耐タンパプロセッサにおける共有ライブラリの使用方法およびそのプログラム
US10608113 US7299363B2 (en) 2002-07-01 2003-06-30 Method for using shared library in tamper resistant microprocessor
US11767893 US7721114B2 (en) 2002-07-01 2007-06-25 Method for using shared library in tamper resistant microprocessor

Publications (2)

Publication Number Publication Date
JP2004038394A true true JP2004038394A (ja) 2004-02-05
JP4115759B2 JP4115759B2 (ja) 2008-07-09

Family

ID=31701701

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2002192422A Expired - Fee Related JP4115759B2 (ja) 2002-07-01 2002-07-01 耐タンパプロセッサにおける共有ライブラリの使用方法およびそのプログラム

Country Status (2)

Country Link
US (2) US7299363B2 (ja)
JP (1) JP4115759B2 (ja)

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006042289A (ja) * 2004-06-24 2006-02-09 Toshiba Corp マイクロプロセッサ
JP2006221632A (ja) * 2005-02-07 2006-08-24 Sony Computer Entertainment Inc プロセッサ内にセキュアな起動シーケンスを提供する方法および装置
JP2007164595A (ja) * 2005-12-15 2007-06-28 Toshiba Corp コンピュータシステムの関数呼び出し方法、コンピュータシステムおよびライブラリ
JP2008523480A (ja) * 2004-12-06 2008-07-03 ギーゼッケ ウント デフリエント ゲーエムベーハーGiesecke & Devrient GmbH ロードフォーマットのプログラムコードの生成および実行可能プログラムコードの提供
US7577851B2 (en) 2004-07-02 2009-08-18 Ntt Docomo, Inc. Multitask execution apparatus and multitask execution method
JP2009278491A (ja) * 2008-05-16 2009-11-26 Casio Comput Co Ltd マイクロプロセッサ及びマイクロプロセッサ応用装置
JP2010078273A (ja) * 2008-09-29 2010-04-08 Daikin Ind Ltd 空気調和機
US7865733B2 (en) 2004-06-30 2011-01-04 Fujitsu Semiconductor Limited Secure processor and a program for a secure processor
JP5377748B2 (ja) * 2010-02-18 2013-12-25 株式会社東芝 プログラム
US10095890B2 (en) 2004-06-30 2018-10-09 Socionext Inc. Secure processor and a program for a secure processor

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7343494B2 (en) * 2001-08-01 2008-03-11 Sas Validy Method to protect software against unwanted use with a “renaming” principle
JP4115759B2 (ja) * 2002-07-01 2008-07-09 株式会社東芝 耐タンパプロセッサにおける共有ライブラリの使用方法およびそのプログラム
JP4624732B2 (ja) * 2003-07-16 2011-02-02 パナソニック株式会社 アクセス方法
WO2005020111A3 (en) * 2003-08-21 2006-03-02 Koninkl Philips Electronics Nv Hardware register access via task tag id
JP4282472B2 (ja) * 2003-12-26 2009-06-24 株式会社東芝 マイクロプロセッサ
JP4612461B2 (ja) * 2004-06-24 2011-01-12 株式会社東芝 マイクロプロセッサ
JP4204522B2 (ja) * 2004-07-07 2009-01-07 株式会社東芝 マイクロプロセッサ
US8290152B2 (en) * 2007-08-30 2012-10-16 Microsoft Corporation Management system for web service developer keys
JP4976991B2 (ja) * 2007-11-22 2012-07-18 株式会社東芝 情報処理装置、プログラム検証方法及びプログラム
JP5322620B2 (ja) 2008-12-18 2013-10-23 株式会社東芝 情報処理装置、プログラム開発システム、プログラム検証方法及びプログラム
WO2011119137A1 (en) 2010-03-22 2011-09-29 Lrdc Systems, Llc A method of identifying and protecting the integrity of a set of source data
JP5171907B2 (ja) * 2010-09-13 2013-03-27 株式会社東芝 情報処理装置、情報処理プログラム
US20140282461A1 (en) * 2013-03-15 2014-09-18 International Business Machines Corporation Concurrent patching of shared libraries
KR101859823B1 (ko) * 2016-07-04 2018-06-28 순천향대학교 산학협력단 키 백업을 사용한 랜섬웨어 방지 시스템 및 방법

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4558176A (en) 1982-09-20 1985-12-10 Arnold Mark G Computer systems to inhibit unauthorized copying, unauthorized usage, and automated cracking of protected software
US5666411A (en) 1994-01-13 1997-09-09 Mccarty; Johnnie C. System for computer software protection
US6141698A (en) * 1997-01-29 2000-10-31 Network Commerce Inc. Method and system for injecting new code into existing application code
JPH11110193A (ja) 1997-09-30 1999-04-23 Toshiba Corp コンピュータシステム及び同システムに適用するライブラリのリンク方法
US6044442A (en) * 1997-11-21 2000-03-28 International Business Machines Corporation External partitioning of an automated data storage library into multiple virtual libraries for access by a plurality of hosts
US6385722B1 (en) * 2000-01-27 2002-05-07 Sun Microsystems, Inc. Method, system, and article of manufacture for limiting access to program files in a shared library file
FR2811096A1 (fr) * 2000-06-28 2002-01-04 St Microelectronics Sa Microprocesseur securise comprenant un systeme d'attribution de droits a des librairies
JP4074057B2 (ja) * 2000-12-28 2008-04-09 株式会社東芝 耐タンパプロセッサにおける暗号化データ領域のプロセス間共有方法
FR2820221B1 (fr) * 2001-02-01 2004-08-20 Cimai Technology Procede et systeme pour gerer des executables a bibliotheques partagees
JP4226816B2 (ja) * 2001-09-28 2009-02-18 株式会社東芝 マイクロプロセッサ
US6876996B2 (en) * 2001-11-14 2005-04-05 Sun Microsystems, Inc. Method and apparatus for using a shared library mechanism to facilitate sharing of metadata
US7246350B2 (en) * 2002-01-07 2007-07-17 Intel Corporation Dynamic composition and maintenance of applications
JP4115759B2 (ja) 2002-07-01 2008-07-09 株式会社東芝 耐タンパプロセッサにおける共有ライブラリの使用方法およびそのプログラム

Cited By (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4559794B2 (ja) * 2004-06-24 2010-10-13 株式会社東芝 マイクロプロセッサ
JP2006042289A (ja) * 2004-06-24 2006-02-09 Toshiba Corp マイクロプロセッサ
US8191155B2 (en) 2004-06-24 2012-05-29 Kabushiki Kaisha Toshiba Microprocessor
US9652635B2 (en) 2004-06-30 2017-05-16 Socionext Inc. Secure processor and a program for a secure processor
US9536110B2 (en) 2004-06-30 2017-01-03 Socionext Inc. Secure processor and a program for a secure processor
US9141829B2 (en) 2004-06-30 2015-09-22 Socionext Inc. Secure processor and a program for a secure processor
US8886959B2 (en) 2004-06-30 2014-11-11 Fujitsu Semiconductor Limited Secure processor and a program for a secure processor
US9672384B2 (en) 2004-06-30 2017-06-06 Socionext Inc. Secure processor and a program for a secure processor
US7865733B2 (en) 2004-06-30 2011-01-04 Fujitsu Semiconductor Limited Secure processor and a program for a secure processor
US10095890B2 (en) 2004-06-30 2018-10-09 Socionext Inc. Secure processor and a program for a secure processor
US7577851B2 (en) 2004-07-02 2009-08-18 Ntt Docomo, Inc. Multitask execution apparatus and multitask execution method
JP2008523480A (ja) * 2004-12-06 2008-07-03 ギーゼッケ ウント デフリエント ゲーエムベーハーGiesecke & Devrient GmbH ロードフォーマットのプログラムコードの生成および実行可能プログラムコードの提供
US8332834B2 (en) 2004-12-06 2012-12-11 Giesecke & Devrient Gmbh Generation of a program code in a load format and provision of an executable program code
JP4489030B2 (ja) * 2005-02-07 2010-06-23 株式会社ソニー・コンピュータエンタテインメント プロセッサ内にセキュアな起動シーケンスを提供する方法および装置
JP2006221632A (ja) * 2005-02-07 2006-08-24 Sony Computer Entertainment Inc プロセッサ内にセキュアな起動シーケンスを提供する方法および装置
JP2007164595A (ja) * 2005-12-15 2007-06-28 Toshiba Corp コンピュータシステムの関数呼び出し方法、コンピュータシステムおよびライブラリ
JP2009278491A (ja) * 2008-05-16 2009-11-26 Casio Comput Co Ltd マイクロプロセッサ及びマイクロプロセッサ応用装置
JP2010078273A (ja) * 2008-09-29 2010-04-08 Daikin Ind Ltd 空気調和機
JP5377748B2 (ja) * 2010-02-18 2013-12-25 株式会社東芝 プログラム

Also Published As

Publication number Publication date Type
US20040139341A1 (en) 2004-07-15 application
JP4115759B2 (ja) 2008-07-09 grant
US7299363B2 (en) 2007-11-20 grant
US7721114B2 (en) 2010-05-18 grant
US20070250720A1 (en) 2007-10-25 application

Similar Documents

Publication Publication Date Title
US7779394B2 (en) Software self-defense systems and methods
US6438666B2 (en) Method and apparatus for controlling access to confidential data by analyzing property inherent in data
US6779114B1 (en) Tamper resistant software-control flow encoding
US6715085B2 (en) Initializing, maintaining, updating and recovering secure operation within an integrated system employing a data access control function
US7181603B2 (en) Method of secure function loading
US7509639B2 (en) Customized execution environment
US6490720B1 (en) Sequence numbering mechanism to ensure execution order integrity of inter-dependent smart card applications
US20060259487A1 (en) Creating secure process objects
US20070220500A1 (en) Computer security method and computer system
US20040003278A1 (en) Secure and opaque type library providing secure data protection of variables
US20110271279A1 (en) Secure Virtual Machine
US7051200B1 (en) System and method for interfacing a software process to secure repositories
US20030120938A1 (en) Method of securing software against reverse engineering
Lie et al. Architectural support for copy and tamper resistant software
US20040003273A1 (en) Sleep protection
US20020051536A1 (en) Microprocessor with program and data protection function under multi-task environment
US20040093505A1 (en) Open generic tamper resistant CPU and application system thereof
Lie et al. Implementing an untrusted operating system on trusted hardware
US20040117318A1 (en) Portable token controlling trusted environment launch
US20030196085A1 (en) System and method for authenticating an operating system
US6820063B1 (en) Controlling access to content based on certificates and access predicates
US20110289294A1 (en) Information processing apparatus
US20030033537A1 (en) Tamper resistant microprocessor using fast context switching
US8166304B2 (en) Support for multiple security policies on a unified authentication architecture
Strackx et al. Fides: Selectively hardening software application components against kernel-level or process-level malware

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20060906

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20061121

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070122

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: 20080408

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20080416

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

Free format text: PAYMENT UNTIL: 20110425

Year of fee payment: 3

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

Free format text: PAYMENT UNTIL: 20110425

Year of fee payment: 3

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

Free format text: PAYMENT UNTIL: 20130425

Year of fee payment: 5

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

Free format text: PAYMENT UNTIL: 20140425

Year of fee payment: 6

LAPS Cancellation because of no payment of annual fees