(57)【特許請求の範囲】
【請求項１】
データ項目を記憶するシステムであって、
アプリケーション・プログラムが稼動しているコンピュータからデータ項目を受信し、該アプリケーション・プログラムが稼動しているコンピュータからの要求に応答して、データ項目を返す記憶サーバとして動作するコンピュータと、
前記データ項目を記憶媒体に記憶し、無許可のアクセスから前記データ項目を保護する記憶プロバイダとして動作する少なくとも１つのコンピュータであって、前記記憶サーバとして動作するコンピュータと通信可能に接続された前記記憶プロバイダとして動作するコンピュータとを備え、
前記記憶プロバイダとして動作する複数の異なるコンピュータを前記記憶サーバとして動作するコンピュータによって使用するために登録することができ、前記記憶プロバイダとして動作する複数の異なるコンピュータは、ユーザが供給したパスワードまたはコードを使用して前記データ項目を保護し、
前記記憶サーバとして動作するコンピュータは、前記記憶プロバイダとして動作するコンピュータによる前記データ項目の保護記憶のために、前記データ項目を前記記憶プロバイダとして動作するコンピュータに提供し、
前記記憶サーバとして動作するコンピュータは、認証された要求元にのみ前記データ項目を返すことを特徴とするシステム。
【請求項２】
請求項１記載のシステムにおいて、認証プロバイダとして動作する１つ以上の異なるコンピュータを、前記記憶サーバとして動作するコンピュータによって使用して、コンピュータ・ユーザを識別するために登録することができ、そうすることによって、認証プロバイダとして動作する新たなコンピュータを前記記憶サーバとして動作するコンピュータに容易に登録できるようにしたことを特徴とするシステム。
【請求項３】
請求項１記載のシステムにおいて、前記記憶サーバとして動作するコンピュータは、前記アプリケーション・プログラムとは異なったアドレス空間において実行されることを特徴とするシステム。
【請求項４】
請求項１記載のシステムにおいて、前記記憶サーバとして動作するコンピュータは、前記アプリケーション・プログラムとは異なったアドレス空間において実行され、リモート・プロシージャ・コールを通じてコールされることを特徴とするシステム。
【請求項５】
請求項１記載のシステムにおいて、前記１つ以上の認証プロバイダとして動作するコンピュータは、以前のネットワーク認証に基づいてユーザを識別する認証プロバイダとして動作するコンピュータを含むことを特徴とするシステム。
【請求項６】
請求項１記載のシステムにおいて、前記１つ以上の記憶プロバイダとして動作するコンピュータは、データ項目を暗号化し、データ項目を解読する記憶プロバイダとして動作するコンピュータを含むことを特徴とするシステム。
【請求項７】
請求項１記載のシステムにおいて、前記１つ以上の記憶プロバイダとして動作するコンピュータは、データ項目を検索する際その保全性を確認する記憶プロバイダとして動作するコンピュータを含むことを特徴とするシステム。
【請求項８】
請求項１記載のシステムにおいて、前記１つ以上の記憶プロバイダとして動作するコンピュータは、コンピュータ・ユーザの認証から得た１つ以上の鍵を用いて、データ項目の暗号化および解読を行う記憶プロバイダとして動作するコンピュータを含むことを特徴とするシステム。
【請求項９】
請求項１記載のシステムにおいて、前記１つ以上の記憶プロバイダとして動作するコンピュータは、ユーザが供給したコードから得た１つ以上の鍵を用いて、データ項目の暗号化および解読を行う記憶プロバイダとして動作するコンピュータを含み、該記憶プロバイダとして動作するコンピュータは、コンピュータ・ユーザに、前記ユーザ供給コードを催促することを特徴とするシステム。
【請求項１０】
請求項１記載のシステムにおいて、前記１つ以上の記憶プロバイダとして動作するコンピュータは、コンピュータ・ユーザが供給したネットワーク・ログオン・コードから得た１つ以上の鍵を用いて、データ項目の暗号化および解読を行う記憶プロバイダとして動作するコンピュータを含むことを特徴とするシステム。
【請求項１１】
請求項１記載のシステムにおいて、前記１つ以上の記憶プロバイダとして動作するコンピュータは、ユーザが供給したコードから得た１つ以上の鍵を用いて、データ項目を安全に記憶し検索する記憶プロバイダとして動作するコンピュータを含むことを特徴とするシステム。
【請求項１２】
請求項１記載のシステムにおいて、前記１つ以上の記憶プロバイダとして動作するコンピュータは、コンピュータ・ユーザが供給したネットワーク・ログオン・コードから得た１つ以上の鍵を用いて、データ項目を安全に記憶し検索する記憶プロバイダとして動作するコンピュータを含むことを特徴とするシステム。
【請求項１３】
請求項１記載のシステムにおいて、前記１つ以上の記憶プロバイダとして動作するコンピュータは、以下のステップにしたがって、データ項目を記憶する記憶プロバイダとして動作するコンピュータを含み、前記ステップは、
項目鍵を用いて個々のデータ項目を暗号化するステップと、
マスタ鍵を用いて前記項目鍵を暗号化するステップと、
ユーザが供給したコードから得たユーザ鍵を用いて前記マスタ鍵を暗号化するステップと、
前記個々の暗号化データ項目、前記暗号化項目鍵、および前記暗号化マスタ鍵を記憶するステップと
を含むことを特徴とするシステム。
【請求項１４】
請求項１記載のシステムにおいて、前記１つ以上の記憶プロバイダとして動作するコンピュータは、以下のステップにしたがって、データ項目を記憶する記憶プロバイダとして動作するコンピュータを含み、前記ステップは、
項目鍵を用いて個々のデータ項目を暗号化するステップと、
項目認証鍵を用いて、個々のデータ項目に対し項目認証コードを生成するステップと、
マスタ鍵を用いて、前記項目鍵および前記項目認証鍵を暗号化するステップと、
マスタ認証鍵を用いて、項目鍵および項目認証鍵に対する鍵認証コードを生成するステップと、
ユーザが供給したコードから得たユーザ鍵を用いて、前記マスタ鍵および前記マスタ認証鍵を暗号化するステップと、
前記個々の暗号化データ項目、前記項目認証コード、前記暗号化項目鍵、前記暗号化項目認証鍵、前記鍵認証コード、前記暗号化マスタ鍵、および前記暗号化マスタ認証鍵を記憶するステップと
を含むことを特徴とするシステム。
【請求項１５】
請求項１記載のシステムにおいて、前記１つ以上の記憶プロバイダとして動作するコンピュータは、以下のステップにしたがって、データ項目を検索する記憶プロバイダとして動作するコンピュータを含み、前記ステップは、
個々の暗号化データ項目、該個々の暗号化データ項目に対応する暗号化項目鍵、および暗号化マスタ鍵を検索するステップと、
ユーザが供給したコードから得たユーザ鍵を用いて、前記暗号化マスタ鍵を解読するステップと、
前記解読マスタ鍵を用いて、前記暗号化項目鍵を解読するステップと、
前記対応する解読項目鍵を用いて、前記個々の暗号化データ項目を解読するステップとを含むことを特徴とするシステム。
【請求項１６】
請求項１記載のシステムにおいて、前記記憶サーバとして動作するコンピュータは、コンピュータ・ユーザに応じて、個々のデータ項目へのアクセスを許可することを特徴とするシステム。
【請求項１７】
請求項１記載のシステムにおいて、前記記憶サーバとして動作するコンピュータは、許可した要求元アプリケーション・プログラムのみに要求データ項目を返すことを特徴とするシステム。
【請求項１８】
請求項１記載のシステムにおいて、前記記憶サーバとして動作するコンピュータは、許可した要求元アプリケーション・プログラムのみに要求データ項目を返し、前記記憶サーバとして動作するコンピュータは、個々のデータ項目を返す前に、要求元アプリケーション・プログラムを認証することを特徴とするシステム。
【請求項１９】
請求項１記載のシステムにおいて、前記記憶サーバとして動作するコンピュータは、許可した要求元アプリケーション・プログラムのみに要求データ項目を返し、前記記憶サーバとして動作するコンピュータは、個々のデータ項目を返す前に、公開鍵暗号を用いて、前記要求元アプリケーション・プログラムを認証することを特徴とするシステム。
【請求項２０】
請求項１記載のシステムにおいて、前記記憶サーバとして動作するコンピュータは、アプリケーション・プログラムの要求に応じて、ユーザ・ダイアログを提示して、データ項目を安全に記憶し検索するため前記記憶プロバイダとして動作するコンピュータが用いるパスワードをコンピュータ・ユーザが指定できるようにすることを特徴とするシステム。
【請求項２１】
請求項１記載のシステムにおいて、前記記憶サーバ、前記記憶プロバイダ、および前記認証プロバイダとして動作するコンピュータは、公開暗号鍵に対応する秘密暗号鍵によって個々に署名され、前記記憶サーバ、前記記憶プロバイダ、および前記認証プロバイダとして動作するコンピュータは、前記公開暗号鍵を用いて、互いの署名を確認するように構成したことを特徴とするシステム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、パスワード、暗号用鍵、および高度の慎重さを要する個人的コードまたは金銭に係わるコードのようなコア・データ機密事項(core data secret)を安全に記憶するための中心的なサービスを提供するシステムおよび方法に関するものである。
【０００２】
【従来の技術】
パーソナル・コンピュータによって、金銭取り引きやその他の高度に慎重さを要する取り引きが増々行われるようになりつつある。このために、データの安全な記憶の必要性が高まっている。このようなデータを不許可のアクセスから保護するために、最新の暗号技法を用いられることが多い。
【０００３】
しかしながら、新たなセキュリティ方法(security methods)は、秘密暗号鍵、クレジット・カード番号、およびその他の機密データの小片のような、「コア」データ機密事項を記憶し保護する必要性をもたらした。現在、この責任は、個々のアプリケーション・プログラムまたはパーソナル・コンピュータ・ユーザ自身に委ねられている。ユーザがデータの暗号化および記憶をするのを可能にするプログラムは入手可能であるが、このようなプログラムは、典型的に、他のアプリケーション・プログラムで用いることができない。現在では、各アプリケーション・プログラムが、このようなデータを記憶するための安全で確実な方法を考案しなければならない。
【０００４】
技術的現状に関連する問題の一例として、スマート・カード技術の利用に伴う問題を考える。スマート・カードは、上述のようなコア・データ機密事項のための受容体(receptacle)として、特に適格性が高い。加えて、スマート・カードは、各ユーザに彼または彼女の個人のスマート・カードを、ユーザのパーソナル・コンピュータと関連した受容体に挿入するように要求することによって、ユーザを認証するためにも用いることができる。正にこの目的のために、耐改ざんスマート・カード(tamper-proof smart card)が設計されている。
【０００５】
【発明が解決しようとする課題】
このようなデバイスを使用するための規格が未承認であることから、問題が発生している。開発者はある限られた数のスマート・カードで動作する機能を与えることはできるが、最終的に生ずる可能性のある異なった様々な変形(variations)の全てを予測することは困難または不可能である。この事実は、種々の異なった用途におけるスマート・カード技術の実施を非実用的にしている。
【０００６】
磁気ハード・ディスクのような記憶媒体には、スマート・カードの問題はないものもあるが、多くのソフトウエア開発者は、単純に、最新の暗号技法を安全に実施するために必要な背景や知識を有していない。彼らが有しているとしても、コア機密事項を記憶する方法を開発する複雑な作業を各開発者が引き受けることは、非効率的であろう。更に、結果的に解決策が得られたとしても、互換性を欠くことになるであろう。このようなデータを記憶するために共通の方式を採用し、異なったアプリケーション・プログラムの各々に新たな解決策を実施する必要性を回避することができれば、はるかに好ましい。
【０００７】
【課題を解決するための手段】
以下に説明する本発明は、コア機密事項を記憶するためアプリケーション・プログラムによってコール可能な中心的な保護記憶サービスを提供する。本発明の一実施形態は、小さなデータ項目を記憶し検索するためアプリケーション・プログラムによって呼び出すことができる、サーバ・プロセスおよびその関連のインターフェースとして実装する。
【０００８】
その概略的な方法およびアーキテクチャは、１つの記憶サーバと、複数のインストール可能な記憶プロバイダおよび認証プロバイダとを含む。各記憶プロバイダは、磁気媒体またはスマート・カードのような特定のタイプの媒体を使ってデータを安全に記憶するように構成する。記憶媒体の詳細は、コール元のアプリケーション・プログラムからは隠蔽する。認証プロバイダを用いることにより、異なった方法でユーザを認証する。その異なった方法には、パスワードを要求する、スマート・カードを読み込む、網膜の走査、または将来考案され得る他の方法等がある。この場合も、認証の詳細は、通常、コール元のアプリケーション・プログラムからは隠蔽する。
【０００９】
アプリケーション・プログラムは、明確に定義されたインターフェースを介して、記憶サーバと対話を行う。データ項目は、記憶サーバへの単純なコールで記憶することができ、そして同様のコールで後に検索することができる。暗号化、解読、項目の保全性チェック、およびユーザの認証は全て、記憶サーバおよびそれに関連するプロバイダによって行う。このために、アプリケーション・プログラムは、複雑さをアプリケーション・プログラム自体に追加することなく、進んだセキュリティ機能を利用することができる。
【００１０】
この保護記憶サービスを用いてデータ項目を記憶する際、アプリケーション・プログラムは、当該データ項目に対するアクセスをいつ許すかを決定する規則を指定することができる。通常、アクセスは、そのデータ項目を作成したコンピュータ・ユーザに限定する。同様に、アクセスは、指定したアプリケーション・プログラムまたはある種のクラスのアプリケーション・プログラムに限定することができる。記憶サーバは、データを返す前に、要求元のアプリケーション・プログラムの認証を行う。
【００１１】
デフォルトの認証プロバイダは、ユーザのコンピュータまたはネットワークのログオンに基づいて、ユーザの認証を行う。他の認証プロバイダもインストールすることができる。
【００１２】
デフォルトの記憶プロバイダは、ハード・ディスクまたはフロッピー・ディスクのような磁気媒体上におけるデータ項目の記憶を可能にする。データ項目は、記憶する前に暗号化する。暗号化には、ユーザの認証から得た鍵を用いる。具体的には、この鍵は、コンピュータまたはネットワークのログオンの間に供給されるユーザのパスワードから得る。加えて、アプリケーション・プログラムまたはユーザは、データへのアクセスを要求する場合にはいつでも、ある種の項目には、追加のパスワードを入力しなければならないように指定することができる。
【００１３】
デフォルトの記憶プロバイダは、多レベルの鍵暗号化方式を実装し、ユーザがパスワードを変更するときに再度行わなければならない暗号化の量を最小限に抑える。各データ項目は、システムがランダムに生成する項目鍵を用いて暗号化する。一方、項目鍵は、マスタ鍵を用いて暗号化するが、マスタ鍵自体も、ユーザが供給するパスワード（ユーザのログオン・パスワードのようなもの）から得た鍵を用いて暗号化する（以下で説明する）。
【００１４】
【発明の実施の形態】
暗号化の概要
一般的に、暗号(cryptography)は、メッセージの暗号化またはスクランブリングを行い、メッセージの安全な記憶および伝送を可能にするプロセスである。伝送媒体（例えば、インターネット）が信頼できない場合でも、暗号を用いて安全な通信を達成することができる。また、コンピュータ・ユーザも暗号を用いて、高度の慎重さを要するファイルを暗号化し、侵入者がこれらを理解できないようにすることが可能である。暗号は、データの保全性(integrity)を確保すると共に、機密を保持するために用いることができる。また、暗号を用いてデータ項目の起源を確認することも可能であるが、デジタル署名の使用を伴う。暗号方法を用いる場合、暗号鍵だけは秘密にしておかなければならない。アルゴリズム、鍵サイズ、およびファイル・フォーマットは、公開することができ、機密性を損なうことはない。
【００１５】
データの暗号化を用いて、データ項目にスクランブルをかけることによって、ランダムなちんぷんかんぷん(random gibberish)のように見せ、秘密の鍵がなければ元のデータに再変換することが非常に困難となるようにすることができる。このメッセージは、アスキー・テキスト、データベース・ファイル、または他の任意のデータから成ることができる。
【００１６】
一旦データ項目を暗号化したなら、機密性のない媒体上に記憶したり、機密性のないネットワーク上を伝送することができ、その場合にも機密性を保持する。後に、そのメッセージは、解読し元の形態に戻すことができる。
【００１７】
データ項目を暗号化する際、暗号化鍵(encryption key)を用いる。これは、南京錠に施錠するために用いる鍵に相当する。メッセージを解読するためには、解読鍵(decryption key)を用いなければならない。暗号化鍵および解読鍵は、常にではないが、多くの場合同一の鍵である。
【００１８】
暗号化アルゴリズムには２つの主要なクラス、対称アルゴリズム(symmetric algorithm)および公開鍵アルゴリズム（非対称アルゴリズムとしても知られている）がある。対称アルゴリズムを用いるシステムのことを、ときとして、伝統的なものと呼ぶ。
【００１９】
対称アルゴリズムは、暗号化アルゴリズムの内最も一般的なタイプである。これらが対称的として知られているのは、同じ鍵を暗号化および解読双方に用いるからである。公開鍵アルゴリズムで用いる鍵とは異なり、対称鍵は、頻繁に変更される。
【００２０】
公開鍵アルゴリズムと比較すると、対称アルゴリズムは非常に速く、そのため、大量のデータを暗号化する場合に好ましい。より一般的な対称アルゴリズムの中には、ＲＣ２、ＲＣ４、およびデータ暗号化規格（ＤＥＳ：Data Encryption Standard）がある。
【００２１】
公開鍵（非対称）アルゴリズムは、２つの異なった鍵、すなわち公開鍵および秘密鍵を用いる。秘密鍵は、この鍵対の所有者だけに内密にしておき、公開鍵は、それを要求する誰にでも（多くの場合、証明書(certificate)によって）配送することができる。一方の鍵をメッセージの暗号化に用いる場合、他方の鍵は、そのメッセージを解読するために必要となる。
【００２２】
公開鍵アルゴリズムは非常に遅く、対称アルゴリズムよりも約1,000倍遅い。その結果、これらは通常セッション鍵を暗号化する場合に用いるだけである。また、これらは、デジタル的にメッセージに署名するためにも用いる。
【００２３】
最も一般的な公開鍵アルゴリズムの１つが、ＲＳＡ公開鍵サイファ(RSA Public-Key Cipher)である。
【００２４】
デジタル署名は、暗号化していないデータ項目を配送するために用いることができ、それと同時に当該メッセージがその意図する送り手(purported sender)から来たこと、およびそれが改ざんされていないことを、受信者が確認できるようにすることができる。メッセージに署名しても、メッセージを変化させることはなく、単に、デジタル署名ストリングを生成し、これは、メッセージに添付するか、あるいは別個に送信することができる。
【００２５】
デジタル署名は、公開鍵署名アルゴリズムを用いて生成する。秘密鍵を用いて署名を生成し、対応する公開鍵を用いてその署名の妥当性を判断する。
【００２６】
認証は、人または実体の同一性を確認するプロセスを含む。証明書は、認証を行うための共通の方法である。証明書とは、ある実体を完全に識別するデータ集合であり、証明機関（ＣＡ：Certification Authority）が発行するが、当該実体がそれであると言っているところのものと機関が確認した後に限られる。このデータ集合は、当該実体の公開暗号鍵を含む。メッセージの送出元がその秘密鍵を用いてデータに署名した（そして、その証明書のコピーを当該メッセージと共に送った）場合、メッセージの受信者は、送出元の公開鍵（証明書から検索）を用いて、送出元がそれであると言っているところのものであると確認することができる。証明書は、（アプリケーション・プログラムを含む）データが、信頼のおけるソースによって保証されていることを確認するためにも用いることができる。
【００２７】
ネットワーク上には、証明機関として知られる安全なコンピュータ(secure computer)上で走っている、信頼のおけるアプリケーション(trusted application)がある場合が多い。このアプリケーションは、各ユーザの公開鍵を知っている。証明機関は、証明書として知られるメッセージを施与し、この各証明書は、そのクライアント・ユーザの１つの公開鍵を含む。各証明書は、証明機関の秘密鍵を用いて署名されている。
【００２８】
以下に説明する本発明は、以上に述べた、公知のデジタル暗号化、署名、および認証技法のような技法を利用する。このような技法に関するこれ以上の情報については、Schneier, Bruce; Applied Cryptography Second Edition:  Protocols, Algorithms, and Source Code in C; John Wiley & Sons, 1996を参照のこと。その内容は、この言及により本願に含めるものとする。以下の説明では、これらの内容について全体的に精通していることを前提とする。
【００２９】
動作環境の一例
図１および以下の説明は、本発明を実施するのに適した計算機環境についての簡単な全体的な説明を与えるのを意図している。本発明は、全体として、プログラム・モジュールのような、パーソナル・コンピュータによって実行する、コンピュータ実行可能命令との関連で説明するが、但し、必ずしもその必要はない。通常、プログラム・モジュールは、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造等を含み、特定のタスクを実行するか、あるいは特定の抽象的なデータ・タイプを実装する。更に、本発明は、ハンドヘルド・デバイス、マルチプロセッサ・システム、マイクロプロセッサをベースとする消費者用電子装置またはプログラム可能な消費者用電子装置、ネットワークＰＣ、ミニコンピュータ、メインフレーム・コンピュータ等を含む、その他のコンピュータ・システム・コンフィギュレーションを用いても実施可能であることを当業者は認めよう。また、本発明は、通信ネットワークを通じてリンクしたリモート処理デバイスがタスクを実行する、分散型コンピュータ環境においても実用可能である。分散型コンピュータ環境では、プログラム・モジュールは、ローカルおよびリモート双方のメモリ記憶デバイス内に配置してもよい。
【００３０】
図１を参照すると、本発明を実施するシステムの一例は、従来のパーソナル・コンピュータ２０の形態の汎用計算機デバイスを含み、このパーソナル・コンピュータ２０は、処理ユニット２１、システム・メモリ２２、およびシステム・メモリを含む種々のシステム構成要素を処理ユニット２１に結合するシステム・バス２３を含む。システム・バス２３は、メモリ・バスまたはメモリ・コントローラ、周辺バス、および種々のバス・アーキテクチャの任意のものを用いるローカル・バスを含む、数種類のバス構造のいずれかとすればよい。システム・メモリは、リード・オンリ・メモリ（ＲＯＭ）２４およびランダム・アクセス・メモリ（ＲＡＭ）２５を含む。起動の間のように、パーソナル・コンピュータ２０内の要素間で情報を転送するために役立つ基本ルーチンを含む、基本入出力システム２６（ＢＩＯＳ）をＲＯＭ２４内に記憶している。更に、パーソナル・コンピュータ２０は、図示しないハード・ディスクに対する読み出しおよび書き込みを行うハード・ディスク・ドライブ２７、リムーバブル磁気ディスク２９に対する読み出しまたは書き込みを行う磁気ディスク・ドライブ２８、ならびに、ＣＤ ＲＯＭまたはその他の光媒体のようなリムーバブル光ディスク３１に対する読み出しまたは書き込みを行う光ディスク・ドライブ３０も含む。ハード・ディスク・ドライブ２７、磁気ディスク・ドライブ２８、および光ディスク・ドライブ３０は、それぞれ、ハード・ディスク・ドライブ・インターフェース３２、磁気ディスク・ドライブ・インターフェース３３、および光ドライブ・インターフェース３４によってシステム・バス２３に接続している。これらのドライブおよびそれらに関連するコンピュータ読み取り可能媒体は、コンピュータ読み取り可能命令、データ構造、プログラム・モジュール、およびパーソナル・コンピュータ２０のためのその他のデータの不揮発性記憶を行う。ここに記述する環境の一例は、ハード・ディスク、リムーバブル・ディスク２９、およびリムーバブル光ディスク３１を使用するが、磁気カセット、フラッシュ・メモリ・カード、デジタル・ビデオ・ディスク、ベルヌーイ・カートリッジ、ランダム・アクセス・メモリ（ＲＡＭ）、リード・オンリ・メモリ（ＲＯＭ）などのように、コンピュータによるアクセスが可能なデータを記憶することができる、その他のタイプのコンピュータ読み取り可能媒体も、動作環境の一例に用いてもよいことは、当業者には認められよう。
【００３１】
オペレーティング・システム３５、１つ以上のアプリケーション・プログラム３６、他のプログラム・モジュール３７、およびプログラム・データ３８を含む多数のプログラム・モジュールは、ハード・ディスク、磁気ディスク２９、光ディスク３１、ＲＯＭ２４、またはＲＡＭ２５に記憶することができる。ユーザは、キーボード４０およびポインティング・デバイス４２のような入力デバイスを通じて、パーソナル・コンピュータ２０にコマンドおよび情報を入力することができる。他の入力デバイス（図示せず）は、マイクロフォン、ジョイスティック、ゲーム・パッド、衛星パラボラアンテナ、スキャナ等を含むことができる。これらおよびその他の入力デバイスは、多くの場合、システム・バスに結合したシリアル・ポート・インターフェース４６を介して、処理ユニット２１に接続するが、パラレル・ポート、ゲーム・ポート、またはユニバーサル・シリアル・バス（ＵＳＢ：universal serial bus）のような、他のインターフェースによって接続してもよい。更に、ビデオ・アダプタ４８のようなインターフェースを介して、モニタ４７またはその他のタイプの表示デバイスもシステム・バス２３に接続している。そのモニタに加えて、パーソナル・コンピュータは、通常、スピーカおよびプリンタのような他の周辺出力デバイス（図示せず）を含む。
【００３２】
パーソナル・コンピュータ２０は、ネットワーク化された環境において、リモート・コンピュータ４９のような１つ以上のリモート・コンピュータへの論理接続を用いて動作することも可能である。リモート・コンピュータ４９は、その他のパーソナル・コンピュータ、サーバ、ルータ、ネットワークＰＣ、ピア・デバイス(peer device)またはその他の一般的なネットワーク・ノードとしてもよく、そして典型的には、パーソナル・コンピュータ２０に関して先に述べた要素の多くまたは全てを含むが、図１では、メモリ記憶デバイス５０のみを示す。図１に示す論理接続は、ローカル・エリア・ネットワーク（ＬＡＮ）５１およびワイド・エリア・ネットワーク（ＷＡＮ）５２を含む。このようなネットワーク構築環境は、オフィス、企業規模のコンピュータ・ネットワーク、イントラネット、およびインターネットでは普通のものである。
【００３３】
ＬＡＮネットワーク構築環境において用いる場合、パーソナル・コンピュータ２０は、ネットワーク・インターフェースまたはアダプタ５３を介して、ローカル・ネットワーク５１に接続する。ＷＡＮネットワーク構築環境において用いる場合、パーソナル・コンピュータ２０は、通常、インターネットのようなワイド・エリア・ネットワーク５２上で通信を確立するためのモデム５４またはその他の手段を含む。モデム５４は、内装でも外装でもよく、そしてシリアル・ポート・インターフェース４６を介して、システム・バス２３に接続している。ネットワーク化した環境では、パーソナル・コンピュータ２０に関して図示したプログラム・モジュール、またはその各一部分は、離れたメモリ記憶デバイスに記憶することも可能である。尚、図示のネットワーク接続は一例であり、コンピュータ間の通信リンクを確立する他の手段を用いてもよいことは認められよう。
【００３４】
図示のコンピュータは、Microsoft Corporationから入手可能な、Windowsファミリーのオペレーティング・システムのような、オペレーティング・システムを用いる。以下に述べる機能性は、標準的なプログラミング技法を用いて実施する。その技法には、Brockschmidt, Kraig; Inside OLE2; Microsoft Press, 1994に記載されているような、ＯＬＥおよびＣＯＭインターフェースの使用を含む。この文献の内容は、この言及により本願に含めるものとする。
【００３５】
最新のWindowsオペレーティング・システムは、Win32 APIと呼ぶものを利用している。これは、Windowsオペレーティング・システムが提供する機能性をアプリケーション・プログラムが利用するのを可能にする明確に定義されたインターフェース集合である。Win32 APIについては、Simon, Richard; Windows 95 Win32 Programming API Bible; Waite Group Press, 1996を含む数多くの文献に記述がある(documented)。この文献の内容は、この言及により本願に含めるものとする。以下の説明全体を通じて、このタイプのプログラミングに全体的に精通していることを前提とする。
【００３６】
全体的な機能性およびアーキテクチャ
図２は、データ項目を記憶し、不許可のアクセスからそれらを保護するための、本発明のよる保護記憶システムのアーキテクチャ上の構成要素を示す。この保護記憶システムは、アプリケーション・プログラムが、秘密を保持し改ざんから保護すべきデータ項目を安全に記憶できるようにするものである。このようなデータ項目は、暗号鍵、パスワード、金銭上の情報、信用照会(trust profile)等を含む場合がある。本記憶システムは、コア機密データの小さな項目を、中央の共通記憶位置に保持するように設計してある。多数のデータを保護すべき場合、データ自体ではなく、ブートストラップ機密事項（暗号化鍵のような）を記憶システムに記憶すればよい。これによって、スマート・カードのような小型の機密ハードウエア・デバイスにデータ項目を適宜移動させることができる。こうしなければ、大きなデータ項目の機密を保持する際にオーバーヘッドが必要となるが、この不要なオーバーヘッドを回避することができる。
【００３７】
図１を参照して先に説明したようなコンピュータによって、本保護記憶システムを実行する。図２に示すアプリケーション・プログラム１０２のようなアプリケーション・プログラムも、このコンピュータによって実行する。
【００３８】
記憶システム１００は、記憶サーバ・コンポーネント１０４を含み、これをディスパッチャとも呼ぶ。通常、記憶サーバは、Pstoreインターフェース１１０を介して、アプリケーション・プログラムからデータ項目を受け取り、これらのデータ項目を安全に記憶し、そしてアプリケーション・プログラムからの要求に応答して、このようなデータ項目を返す。また、記憶サーバは、要求元のアプリケーション・プログラムに関する認証手順および確認手順も実行する。これについては、以下で更に詳細に説明する。
【００３９】
記憶サーバに関連しているのは、複数のインストール可能な記憶プロバイダ(installable storage provider)１０６および複数のインストール可能な認証プロバイダ(installable authentication provider)１０８である。指定した記憶プロバイダを記憶サーバがコールし、データ項目の安全な記憶および検索を行う。また、現コンピュータ・ユーザ群の識別および／または認証を行う際、記憶サーバが１つ以上の認証プロバイダをコールする。
【００４０】
本記憶システム内には、デフォルトの記憶プロバイダを実装している。デフォルト記憶プロバイダは、データ項目を暗号化し、次いでそれらをハード・ディスクまたはフロッピー・ディスク上に記憶する。その暗号化は、現コンピュータ・ユーザの認証から得られる１つ以上の鍵に基づく。また、デフォルト記憶プロバイダは、データ項目を読み出して解読する際に、データの保全性を確認する。
【００４１】
更に、本記憶システム内には、デフォルトの認証プロバイダも実装している。デフォルト認証プロバイダは、記憶サーバによって呼び出し、以前に完了したオペレーティング・システムのログオン手順に基づいて、現コンピュータ・ユーザ群を識別する。具体的には、デフォルト認証プロバイダは、コンピュータのオペレーティング・システム上またはネットワーク・オペレーティング・システムにログオンする間に、ユーザが与えるログオン識別およびパスワードに基づいて、現コンピュータ・ユーザを識別する。
【００４２】
デフォルトの記憶プロバイダおよび認証プロバイダを実装しているが、将来追加のプロバイダをインストールして、新しい記憶および認証技術を利用することが可能である。例えば、スマート・カード記憶プロバイダをインストールし、スマート・カード上にコア・データ項目の記憶を可能にすることも考えられる。同様に、スマート・カード認証プロバイダを備え、ユーザのスマート・カードをスマート・カード・リーダに挿入するように彼らに要求することによって、ユーザを認証することも可能である。いずれの場合でも、スマート・カードは、公開鍵暗号技術を利用することができる。
【００４３】
明確に定義されたＣＯＭインターフェースを、記憶サーバおよび種々のプロバイダ間に用いて、新しいプロバイダを容易にインストールし、記憶サーバに登録できるようにしている。アプリケーション・プログラムは、どのプロバイダを使用するかには無関係に、同じコールを記憶サーバ１０２に対して行うことができる。このために、単に記憶サーバ１０２と対話を行うことによって将来の技術を利用するように、アプリケーション・プログラムを書くことができ、このような将来の技術の詳細にアプリケーション・プログラム自体が係わる必要はない。
【００４４】
セキュリティを高めるために、コール元のアプリケーション・プログラムとは異なったアドレス空間に、保護記憶システムを実装する。プロセッサまたはアドレス空間の境界を横切る通信を行うには、リモート・プロシージャ・コール（ＲＰＣ）を用いる。このようなコールは、Windowsオペレーティング・システムまたはその他のオペレーティング・システムの下で動作している場合に行うことができる。ＲＰＣコールの機能性およびフォーマッティングは、Microsoft Win32 Software Development Kitに記述されている。
【００４５】
アプリケーション・プログラムはＲＰＣコールを直接行うことができるが、アプリケーション・プログラムのアドレス空間内で実行可能な、ダイナミックにリンクされたライブラリ（ＤＬＬ：dynamically linked library）を備えることによって、この複雑性を回避する。このライブラリは、図２では、Pstoreインターフェース１１０と呼んでおり、複数のインターフェースおよび関連するメソッドを実装し、アプリケーション・プログラムからこれらをコールして、保護記憶システムの機能性を最大限利用することができる。このインターフェースは、データ項目および他の有用な機能を作成し読み出すメソッドを含む。ここに記述する実施形態においては、インターフェースおよびメソッドは、Windows オペレーティング・システムのＣＯＭ（コンポーネント・オブジェクト・モデル）インターフェースを用いて実装する。
【００４６】
保護データ・アクセス制御
ここに記述する保護記憶システムは、強力なデータ・アクセス制御機能を有する。本記憶システムは、２つのレベルのデータ保護、すなわちアプリケーション・レベルの保護およびユーザ・レベルの保護を提供する。アプリケーション・レベルでは、記憶サーバは、要求のあったデータ項目を、許可した要求元アプリケーション・プログラムにのみ返す。更に、記憶サーバは、個々のデータ項目を返す前に、要求元アプリケーション・プログラムの認証を行う。アプリケーション・プログラムの認証とは、アプリケーション・プログラムが改ざんされていないか否かについて判定を行うプロセス、あるいは公開／秘密鍵暗号、デジタル署名、またはその他の手段を用いることによって、プログラムの信頼性(trustworthiness)を確認する別のプロセスのことを言う。マイクロソフト・オーセンティコード（Microsoft Authenticode）は、デジタル署名の使用によって、あるアプリケーション・プログラムが、指定の人、グループ、または組織によって発行されたものであり、したがってそれが信頼できるものであることを確認するために使用可能な機構である。オーセンティコードの機能性は、Microsoft Corporationから、そのWin32 Software Development Kitの一部として、公に入手可能である。
【００４７】
ここに記述する実施形態では、データ項目は、以下のようにタイプおよびサブタイプを指定することによって、階層構造に組織化する。
【００４８】
タイプ−サブタイプ−データ項目
タイプおよびサブタイプには予め定義してあるものがあり、またアプリケーション・プログラムは、新たなタイプおよびサブタイプを作成することができる。ある種のタイプおよびサブタイプに該当するデータ項目には、異なった保護レベルを確立することができる。すなわち、各サブタイプに、１つのアクセス・ルール・セットを指定する。アクセス・ルール・セットは、異なったタイプまたはサブタイプのデータ項目のためのルールを含む。特定のサブタイプのデータ項目に対するアクセスは、対応するルール・セットの内のいずれか１つのルールを満足すれば、付与するようにする。各アクセス・ルールは、１つのモードおよび１つ以上のアクセス・クローズ(access clause)を含む。ルールを満足すると見做す前に、全てのアクセス・クローズを満足しなければならない。モードは、ルール内の全てのクローズを満足する場合に許されるアクセスのタイプを示す。現在、２つのアクセス・モード、すなわち、読み出しアクセスおよび書き込みアクセスが定義してある。
【００４９】
また、現在、３つのタイプのアクセス・クローズ、すなわち、オーセンティコード(Authenticode), 二進チェック(Binary Check),およびセキュリティ記述子(Security Descriptor)がある。オーセンティコードは、保護対象データにアクセスを要求したアプリケーション・プログラムが、信用できることを確認し、更にオプションとして、要求元(originator)したがって要求元のアプリケーションが信頼できるか否かについて判定を行うことができる。二進チェックは、プログラムが、インストール以来改ざんされていないことを保証する。セキュリティ記述子クローズは、Windows NTアクセス制御リスト（ＡＣＬ）に基づいてアクセスを与える。
【００５０】
オーセンティコードは、文書がよく整備された製品およびサービスであり、Microsoft Corporationから入手可能である。オーセンティコード・クローズをサブタイプの作成時に指定すると、要求元アプリケーションに署名がしてあったか否かについてチェックを行い、署名がしてあった場合は、誰が署名したかについてチェックを行う。このクローズは、特定のルート、証明書発行者、発行者（署名者）、プログラム名、またはこれらの任意の組み合わせを指定することができる。指定した基準を満たさなければ、アクセスは付与しない。基準の指定がない場合、確認は、オーセンティコードが確認されたアプリケーションまたはモジュールのデータへのアクセスの全てを許可することと同等である。オーセンティコードのチェックは、検査対象のモジュールの二進像(binary image)の確認も行う。
【００５１】
二進チェックは、初期化時に、アプリケーション・プログラムの二進像のハッシュを取ることによって実施する。アプリケーション・プログラムが後にデータを要求する場合、記憶システムは再度メモリ像のハッシュを取り、元のハッシュと比較する。２つのハッシュが一致しなければ、保護記憶システムは、アプリケーション・プログラムに、要求データへのアクセスを許可しない。したがって、アプリケーションが、そのインストール以来変わっており、したがって改ざんされている可能性が高い場合、データを保護し、アプリケーションによるデータへのアクセスを拒絶する。
【００５２】
セキュリティ記述子クローズは、指定したユーザまたはグループのみにアクセスを許可することを意図するものであり、Windows NTプラットフォーム上で施行(enforce)している。このクローズは、ユーザおよびグループに関する必要な情報を、Windows NTセキュリティ記述子に含まれたＡＣＬから取得する。
【００５３】
ユーザ・レベルでは、記憶サーバは、現コンピュータ・ユーザに応じて、個々のデータ項目へのアクセスを許可する。デフォルトでは、当該データ項目の作成を担当したユーザのみに、そのデータ項目へのアクセスを許可する。しかしながら、ユーザは、データ項目を作成しセーブする際に適切なオプションを指定することによって、このデフォルト・ビヘイビアを無効にすることができる。あるいは、ユーザは、後にデータへのアクセス権を変更することができる。
【００５４】
ユーザおよびアプリケーション・プログラムは、セキュリティ・スタイル(security style)を指定することができる。セキュリティ・スタイルは、特定のデータ項目にアクセスする際に必要な確認または認証の程度および／またはタイプ、例えば、パスワードを必要とするか否かについて指定する。この実施形態は、デフォルトの認証プロバイダによって、以下のアクセス・スタイルに対応している。
【００５５】
・サイレント・アクセス：ユーザの対話は不要である。認証は、以前に完了したコンピュータまたはネットワークのオペレーティング・システムの認証手順に基づく。殆どの場合、このタイプの認証は、ユーザが、以前のログオン手順の間に正しいパスワードを入力できたことに頼っており、保護対象データに実際にアクセスする場合に、それ以上の対話を要求しない。
【００５６】
・ログオン・パスワード：ダイアログ・ボックスを提示し、以前にコンピュータまたはネットワークにログオンする際に用いたパスワードを入力するように、ユーザに要求する。
【００５７】
・ユーザ定義パスワード：ユーザは、ある項目を最初に記憶するときに、パスワードを指定し、このパスワードを入力しなければ、このデータに再度アクセスすることはできない。このようなパスワードは、異なったデータ項目に対して異なったものとすることができ、あるいは、同じパスワードの下で、データ項目の集合を記憶することも可能である。
【００５８】
・ＯＫ／キャンセル：アプリケーションがデータにアクセスしようとする場合、ダイアログ・ボックスが現れる。ユーザは、ＯＫまたは拒絶ボタンをクリックすることによってダイアログ・ボックスに応答し、これにより要求元のアプリケーション・プログラムによるデータへのアクセスを許可／拒絶する。
【００５９】
これら異なったタイプのアクセス・スタイルから明白なように、保護記憶装置内の項目にアクセスするには、ユーザの対話を要求する場合がある。この対話は、ユーザ・アラート・ダイアログ・ボックスを用いることによって実施する。典型的に、ユーザには、ユーザ・アラート・ダイアログ・ボックスに応答して、パスワードを入力するように要求する。しかしながら、異なった認証プロバイダには、異なったタイプの応答（ハードウエア・トークンの物理的な挿入、または生物測定学的な認証手順のように）を要求する場合もあり得る。
【００６０】
攻撃するプログラム(attacking program)が同様のユーザ・アラート・ダイアログを提示するのを防止し、これによって機密データへのアクセスを得るのを防止するために、ユーザ・アラート・ダイアログは、ユーザが自由に設計できるようにしている。具体的には、ユーザは、ユーザ・アラート・ダイアログ・ボックスにおいて使用する、特定の背景またはデジタル透かし(digital watermark)を指定することができる。あるいは、このような透かしは、当該ユーザにランダムに生成することができる。ユーザは、いずれの透かしであっても、選択したものについては熟知しているであろうから、攻撃するアプリケーションが無許可のダイアログ・ボックスを生成したならば、これを認識するであろう。
【００６１】
データの暗号化、解読、および認証
異なった記憶プロバイダは、異なった方法で記憶データを保護することができる。しかしながら、通常はあるタイプの暗号を採用する。ここに記述するデフォルト記憶プロバイダは、パスワードに基づく暗号化方式を用い、ユーザが供給するパスワード、またはユーザの認証に関係する他の任意のコードに基づいて、データ項目を暗号化し、その後にこれらデータ項目を記憶する。データ項目を読み出す場合、同じパスワードまたはコードに基づいて解読を行う。
【００６２】
前述の「ユーザ定義パスワード」によるセキュリティ・スタイルによってデータ項目を保護する場合、ユーザは、認証ステップの間に、各データ項目毎にパスワードを明示的に入力する。この認証ステップは、個々のデータ項目へのアクセスを許可する前に、呼び出す。しかしながら、「サイレント・アクセス」の場合、暗号化および解読は、以前のコンピュータまたはネットワークのオペレーティング・システムの認証またはログオン手順の間に、現コンピュータ・ユーザが供給したパスワードまたはその他のコードに基づいて行うようにする。典型的に、ユーザのログオン名およびパスワードを用いて鍵を形成または誘導し、これを用いてデータ項目の暗号化および解読を行う。
【００６３】
ここに記述する実施形態では、多レベル鍵技法を用いて、ユーザ供給のコードまたはパスワードに基づいてデータ項目を暗号化する。この技法を図３に示す。この実施形態では、暗号化および解読は、供給したパスワードまたはログオン・コードから誘導した、１つ以上の鍵を用いる。前述のように、パスワードまたはコードは、以前の認証ステップから持ってくることができ、あるいは記憶システムが現コンピュータ・ユーザにパスワードを催促してもよい。
【００６４】
通常、項目鍵は各データ項目毎にランダムに生成する。データ項目は、それに対応する項目鍵を用いて暗号化する。項目認証鍵も、各項目毎にランダムに生成し、項目認証コードを生成する際に用いる。項目認証コードは、解読中に用いて、データ項目が正確に解読されたことを確認する。
【００６５】
次に、マスタ鍵を用いて、項目鍵および項目認証鍵を暗号化する。マスタ鍵は、ランダムに生成した数である。マスタ認証鍵も生成して、鍵認証コードを計算する際に用い、後に項目鍵および項目認証鍵の正しい解読が確認できるようにする。最後に、ユーザ認証または識別から誘導するパスワードを用いて、マスタ鍵およびマスタ認証鍵を暗号化する。
【００６６】
次に図３の具体的なステップを参照すると、暗号化し記憶すべき個々のデータ項目は、番号１３０で引用してある。データ項目１３０を暗号化するステップまたは処理１３１は、項目鍵１３２を用いて実行する。具体的には、暗号鍵１３２を用いて、データ項目１３０に対しＤＥＳ暗号化を行う。項目鍵１３２は、デフォルト記憶プロバイダによって、乱数として生成する。
【００６７】
記憶プロバイダは、個々のデータ項目１３０に対して項目認証コードを生成するステップ１３３も実行する。項目認証コードの生成には、ＭＡＣ（メッセージ認証コード）を、ランダムに生成した項目認証鍵１３４と共に用いる。ＭＡＣについては、前述のSchneierの文献に記述されている。
【００６８】
次に、再び上述のＤＥＳ暗号化を用いて、マスタ鍵１４１によって項目鍵１３２および項目認証鍵１３４の暗号化を行うステップ１４０を実行する。このマスタ鍵は乱数である。ステップ１４２は、項目鍵および項目認証鍵の組み合わせに対して鍵認証コードを生成することから成る。鍵認証コードを生成するには、ＭＡＣを、ランダムに生成したマスタ認証鍵１３と共に用いる。
【００６９】
ユーザ鍵１４６を用いてマスタ鍵およびマスタ認証鍵を暗号化するステップ１４５を実行する。これもまたＤＥＳ暗号化である。
【００７０】
ユーザ鍵は、図３において番号１４７で引用する、ユーザが供給したパスワードまたはコードから誘導する。ユーザ鍵を生成するために、ユーザが供給したパスワード１４７を、ソルト(salt)１４８と呼ぶ乱数に添付し、SHA-1ハッシング関数を用いて、ステップ１４９においてハッシングを行う。この結果、ユーザ鍵として用いる数が得られる。
【００７１】
一旦これらのステップを実行したなら、記憶サーバは、暗号化した個々のデータ項目、項目認証コード、暗号化した項目鍵、暗号化した項目認証鍵、鍵認証コード、暗号化したマスタ鍵、および暗号化したマスタ認証鍵を記憶し、許可したアプリケーション・プログラムが後に要求した際に、検索できるようにしておく。
【００７２】
検索は逆のプロセスから成る。暗号化項目を記憶装置から検索する。記憶プロバイダは、ユーザが供給したパスワードからユーザ鍵を誘導し、このユーザ鍵を用いて、マスタ鍵およびマスタ認証鍵を解読する。マスタ認証鍵を、指定したＭＡＣと共に用いて、マスタ鍵が正確に解読してあることを確認する。次に、このマスタ鍵を用いて、適切な項目鍵および対応する項目認証鍵を解読する。次に、項目認証鍵をＭＡＣと共に用いて、項目鍵が正確に解読してあることを確認する。次に、項目鍵を用いて、実際のデータ項目を解読する。
【００７３】
このプロセスによって、ユーザのデータ項目全てを、単一のマスタ鍵によって制御することが可能となり、一方マスタ鍵は、ユーザのパスワードの関数として暗号化する。この方式の利点は、ユーザが彼または彼女のパスワードを変更する際に、データ項目を再度暗号化し直さなくてもよいことである。代わりに、マスタ鍵のみを再度暗号化すればよい。
【００７４】
記憶システムの保全性の確認
記憶サーバ、記憶プロバイダ、および認証プロバイダは、セキュリティ・インターロック機構を採用して、システム・コンポーネントの改ざんの結果発生し得る、セキュリティ侵入(security violation)を防止する。この機構は、暗号技法を利用している。
【００７５】
セキュリティ・インターロック機構を採用した動機の１つは、記憶サーバが無許可のプロバイダをロードするのを防止することである。無許可のモジュールが許可を受けたプロバイダのように偽装するのを防止することは特に重要である。何故なら、このような無許可のモジュールは、システムから機密データを盗む可能性があるからである。別の動機は、記憶サーバ自体の改ざんを防止することである。
【００７６】
サーバおよびプロバイダを出荷する際、公開／秘密暗号鍵対（秘密鍵は対応する公開鍵を有する）の秘密鍵を用いて、これらにデジタル的に署名する。次に、公開鍵をハード・コード化(hard-coded)し、種々のサーバおよびプロバイダのモジュールに組み込む。サーバおよびプロバイダは、個々のコンポーネントをロードするときおよび実行するときはいつでも、公開暗号鍵を用いて、互いの署名を確認するように構成している。サーバをロードする場合、最初に公開鍵を用いて、それ自体のデジタル署名をチェックすることにより、それ自体の保全性をチェックする。次に、サーバは、他のコア・コンポーネントをロードする際に、そのデジタル署名をチェックする。各コンポーネントをロードする際、サーバのデジタル署名をチェックする。いずれかの保全性チェックにおいて不合格となった場合、それらコンポーネントは全て動作しない。
【００７７】
要求元アプリケーション・プログラムの認証
先に説明したように、データ項目に対するアクセスは、どのアプリケーション・プログラムが当該データ項目にアクセスしようとしているのかに基づいて、制限することができる。この特徴を信頼性のおけるものにするためには、記憶システムは、アプリケーション・プログラムがこれらがそうであると述べているところのものであること、およびそれらが改ざんされていないことを確認する必要がある。このプロセスを、プログラム認証と呼ぶ。１つのオプションは、二進チェックに基づいてプログラムを認証することである。このような認証は、２つの記憶サーバ・モジュール、すなわち、識別モジュールおよび施行（enforcement）モジュールによって行う。
【００７８】
識別モジュールは、記憶サーバをコールしているクライアントへの問い合わせを担当する。要求に関連するプロセスを識別するために、次のステップを実行する。
【００７９】
１．クライアント・アプリケーション・プログラムは、プロセスＩＤおよびスレッド・ハンドル(thread handle)という２つの情報片を提示して、サーバにそれ自体の素性を明らかにする。プロセスＩＤを得るには、GetCurrentProcessId()システム・コールを用いる。スレッド・ハンドルを得るには、GetCurrentThread()およびDuplicateHandle()システム・コールを用いる。
【００８０】
２．記憶サーバは、システム・コールOpenProcess()へのコールの中で、プロセスＩＤを用いて、クライアントへのハンドルを開く。記憶サーバは、後の使用のために、このハンドルをセーブする。
【００８１】
３．クライアントは、データ項目のアクセス要求を行う。
【００８２】
４．サーバは、先に獲得したプロセス・ハンドルを用いて、当該クライアント・プロセスに関連するメモリ・アドレス空間を分析する。また、サーバは、モジュールのロード・アドレスを判定することに加えて、このハンドルを用いて、基本オペレーティング・システムに、関連するプロセスの中にはどの実行可能モジュール（.exe, .dll,等のファイル）があるのかについて問い合わせを行う。オペレーティング・システムに問い合わせを行う際に用いる正確な方法は、当該オペレーティング・システムによって異なった。
【００８３】
５．この時点で、サーバは、クライアントに関連するモジュールの完全なリストを有し、そしてそれを用いて、先に獲得したスレッド・ハンドルに関連するコール・スタックを分析する。StackWalk()システム・コールを利用して、クライアントに関連するコール元のチェーンを判定する。
【００８４】
施行モジュールは、識別モジュールが提供する結果を、以下のチェックを行う際に用いる。
【００８５】
１．クライアント・プロセスにロードした像(image)は、オン・ディスク(on-disk)によって改ざんされていないことを確認する。これは、アクセスを許可するファイル（群）の暗号表現を記憶することによって行う。この暗号表現は、データと共に記憶する。ファイルの暗号表現には、次の２種類が可能である。
【００８６】
・ファイル全体を読み出し、SHA-1暗号ハッシュを施す。このハッシュの出力は、データと共に記憶する。後にこのデータに対するアクセスが要求された場合、オン・ディスク・ファイルに対してハッシュを再計算し、データと共に記憶したそのハッシュと比較する。これらの比較が正しい場合、プロセスは以下のチェック２に進む。
【００８７】
・ファイルに、公開鍵証明書に基づく妥当性検査を行う。これは、マイクロソフト・オーセンティコード（Microsoft Authenticode）を用い、像が改ざんされていないことを確認する。オーセンティコードは、内部的なディスク像のハッシングを扱う。このファイルの暗号表現の方が、柔軟性が高い。何故なら、これは、指定したファイルに付随する証明書内の様々なフィールドに対する妥当性検査もサポートするからである。オーセンティコードによる確認を行った後、システムは証明書の内容を分析して、アクセス対象のデータと共に記憶した内容と一致することを確認する。
【００８８】
２．ディスク上の像が、クライアント・プロセス内にロードした像と一致することを確認する。
【００８９】
・CreateFileMapping()およびMapViewOfFile()システムＡＰＩコールを用いて、チェックするモジュールを、サーバ・アドレス空間に「マップ」する。
【００９０】
・必要であれば、すなわち、像がクライアント・アドレス空間内の好ましいアドレスにロードされなかった場合のみに、マップした像に再配置手配(relocation fixup)を適用する。
【００９１】
・システムは像ヘッダを一巡し(loop over)、コード部分、資源、およびリード・オンリ・データのような、リード・オンリ・セクションを探す。各セクションに対し、SHA-1に基づく暗号ハッシュを更新する。
【００９２】
・この時点で、識別モジュールから出力されたプロセス・ハンドルを用いて、モジュールをロードしたメモリ・アドレス空間を読み出す。これは、ReadProcessMemory()システム・コールを用いることによって行う。メモリの各セクションは、直前のステップで概略的に述べたように読み出し、プロセスが進行するに連れて暗号ハッシュを更新する。
【００９３】
・システムは、直前のステップから得られた２つのハッシュを比較する。これらが一致した場合、メモリ内の像は改ざんされていないことになる。
【００９４】
アプリケーション・インターフェース機能
上述のように、インターフェースは、アプリケーション・プログラムに露出してあり、したがって精巧な暗号化方式を実施する必要なく、更にＲＰＣコールを行う必要もなく、アプリケーション・プログラムは保護記憶構造の利用が可能となっている。
【００９５】
結論
本発明は、従来技術に対して多数の利点を与え、多様性があり効率的なアーキテクチャを提供する。重要な利点の１つは、備えてある単一のサーバを、異なったアプリケーション・プログラムが利用し、中央の記憶領域にコア・データ機密事項を記憶できることである。これによって、アプリケーション間の一貫性を一層高め、アプリケーションからかなりのオーバーヘッドを取り除く。ユーザ・インターフェースは、上述の記憶システムによって得られる一貫性の恩恵を受ける領域である。何故なら、ユーザ・プロンプトは、個々のアプリケーション・プログラムではなく、システムが生成するからである。データ項目を均一な方法で記憶することによって、アプリケーション・プログラム自体とは独立した、単一の管理プログラムによる管理が可能となる。
【００９６】
本発明の別の重要な利点は、データ項目の機密保持の基礎となる詳細を、コール元のアプリケーション・プログラムからは隠蔽してあることである。したがって、プログラムの開発者は、精巧なセキュリティ対策を実装する必要がない。このような対策は、ここに記述した記憶システムへの単純なコールによって実施することができる。更に追加の利点は、広範なプログラムのし直しをすることなく、スマート・カードのような新しい技術がアプリケーション・プログラムに使用可能となることである。
【００９７】
本発明は、ウイルスによる攻撃を含む、ユーザ対象およびソフトウエア対象の攻撃から機密を保護するものである。重要なことに、アクセス制御は、データ項目を生成しまたこれらにアクセスするアプリケーション・プログラムの外側において、管理するようにしたことである。アプリケーションが鍵設定の材料(keying material)やその他の制御データに直接アクセスする必要がないので、データの１片に対するアクセスには、他のデータのアクセスを含むことは全くない。更に、記憶システム自体は、記憶してあるデータ項目を解読するために必要な情報を保持しない。代わりに、ユーザがいなければならず、正しいパスワードを供給してデータの解読ができるようにしなければならない。
【００９８】
本発明の更に別の効果は、データ・アクセスを要求する場合、ユーザに明示的にパスワードを入力するよう強要しないことである。代わりに、ユーザがコンピュータまたはネットワークにログオンする際に、ユーザの認証を１回行えばよい。このログオン情報は、ユーザの認証、およびデータの暗号化および解読のための鍵を誘導するための双方に用いる。
【００９９】
以上、本発明の説明は、構造的特徴および／または方法論的ステップに特定した用語を用いて行ったが、特許請求の範囲に規定する本発明は、ここに記述した特定の構造またはステップには必ずしも限定されるものではないことは理解されるべきである。この特定の構造やステップは、特許請求する本発明を実施する形態の一例として開示したに過ぎないものである。
【図面の簡単な説明】
【図１】本発明の実施に使用するのに好適なコンピュータ・システムの一例を示すブロック図。
【図２】本発明による保護記憶システムおよびコール元アプリケーション・プログラムを示すブロック図。
【図３】本発明にしたがって、どのようにデータ項目の暗号化および認証を行うのかを示すプロセス図。
【符号の説明】
２０    パーソナル・コンピュータ
２１    処理ユニット
２２    メモリ
２３    システム・バス
２４    リード・オンリ・メモリ（ＲＯＭ）
２５    ランダム・アクセス・メモリ（ＲＡＭ）
２６    基本入出力システム（ＢＩＯＳ）
２７    ハード・ディスク・ドライブ
２８    磁気ディスク・ドライブ
２９    ハード・ディスク、リムーバブル・ディスク
３０    光ディスク・ドライブ
３１    リムーバブル光ディスク
３２    ハード・ディスク・ドライブ・インターフェース
３３    磁気ディスク・ドライブ・インターフェース
３４    光ドライブ・インターフェース
３５    オペレーティング・システム
３６    アプリケーション・プログラム
３７    プログラム・モジュール
３８    プログラム・データ
４０    キーボード
４２    ポインティング・デバイス
４６    シリアル・ポート・インターフェース
４７    モニタ
４８    ビデオ・アダプタ
４９    リモート・コンピュータ
５０    メモリ記憶デバイス
５１    ローカル・エリア・ネットワーク（ＬＡＮ）
５２    ワイド・エリア・ネットワーク（ＷＡＮ）
５３    ネットワーク・インターフェース
５４    モデム
１０２    アプリケーション・プログラム
１０２     記憶サーバ
１０４    記憶サーバ・コンポーネント
１０６    記憶プロバイダ
１０８    認証プロバイダ
１１０    Pstoreインターフェース
１３０    データ項目
１３２    項目鍵
１３４    項目認証鍵
１４１    マスタ鍵
１４６    ユーザ鍵
１４７    パスワード
【図１】
0004463887.tif 000002
【図２】
0004463887.tif 000003
【図３】
0004463887.tif 000004