(57)【要約】プログラマブル携帯データ記憶媒体（１０）、例えば、スマートカード用プログラムの分散生成方法。ユーザ・コンピュータ（２０）上でプログラム・ソース・テキスト（Ｑ）を作成し、空間的に離間しているコンパイラ・サーバ（３０）でコンパイルおよびリンクすることにより、実行可能プログラム・コード（Ｃ）を生成し、再度ユーザ・コンピュータ（２０）を介して、データ記憶媒体（１０）にロードする。データ交換のための安全なエンドツーエンド・リンクをデータ記憶媒体（１０）とコンパイラ・サーバ（３０）との間にセットアップする。本目的を達成するため、データ記憶媒体（１０）の半製品化の段階で、一時フォーマット形式のトランスポート・コード（Ｕ、ＣＳＳＬ、ＵＣＳＭ）を最終的に実行可能プログラム・コード（Ｃ）に変換することができるソフトウェア・ツールが組み込まれる。トランスポート・コード（Ｕ、ＣＳＳＬ、ＵＣＳＭ）は、暗号メカニズムによって保護される。コンパイラ・サーバ（３０）が生成した実行可能プログラム・コード（Ｃ）は、一時フォーマット形式（Ｕ、ＣＳＳＬ、ＵＣＳＭ）でデータ記憶媒体（１０）に転送される。
2004528632.tif 000002
【特許請求の範囲】
【請求項１】
プログラマブル携帯データ記憶媒体用実行可能プログラムを分散生成する方法であって、ユーザの所在地に存在する第１コンピュータ上でプログラム・ソース・テキストを作成し、前記データ記憶媒体発行者の所在地に存在する第２コンピュータに前記テキストを転送後、該コンピュータ上で該テキストをコンパイルおよびリンクすることにより、実行可能プログラム・コードを生成し、該コードを前記第１コンピュータに逆転送後、該コードを前記データ記憶媒体にロードする方法において、
前記データ記憶媒体（１０）の半製品化の段階で、一時フォーマット形式のトランスポート・コード（Ｕ、ＵＣＳＭ、ＣＳＳＬ）を最終的に実行可能プログラム・コード（Ｃ）に変換することができるソフトウェア・ツールを組み込み、
前記第２コンピュータ（３０）上で生成した前記実行可能プログラム・コード（Ｃ）をトランスポート・コード（Ｕ、ＵＣＳＭ、ＣＳＳＬ）に変換して、前記第１コンピュータ（２０）に逆転送し、
前記データ記憶媒体（１０）に組み込むために、前記第１コンピュータ（２０）に逆転送した前記トランスポート・コード（Ｕ、ＵＣＳＭ、ＣＳＳＬ）を前記ソフトウェア・ツールによって実行可能プログラム・コード（Ｃ）に再変換する
ことを特徴とする方法。
【請求項２】
前記第１コンピュータ（２０）上で作成した前記プログラム・ソース・テキスト（Ｑ）を前記第２コンピュータ（３０）に転送するため、該テキストを暗号化することにより、トランスポート・セキュリティ・メカニズムを施すことを特徴とする、請求項１記載の方法。
【請求項３】
前記ソフトウェア・ツールが、前記データ記憶媒体（１０）を示す識別情報（１１４）、および署名キー（１２４）を備えることを特徴とする、請求項１記載の方法。
【請求項４】
前記ソフトウェア・ツールが、ＳＳＬハンドシェイク・プロトコル（１２２）および/またはＳｅｃｕｒｅ  Ｍｅｓｓａｇｉｎｇ（１２０）を実行するプログラムを備えることを特徴とする、請求項１記載の方法。
【請求項５】
前記ソフトウェア・ツールが、前記データ記憶媒体のプライベート・キー（１３０）、および前記第２コンピュータ（３０）のパブリック・キー（１２８）を用いて署名を検証するプログラムを備えることを特徴とする、請求項１記載の方法。
【請求項６】
前記携帯データ記憶媒体（１０）にロードされる前記実行可能プログラム・コード（Ｃ）が、前記第２コンピュータ（３０）の関与の下に実行され、エラーの有無が判定されることを特徴とする、請求項１記載の方法。
【請求項７】
前記携帯データ記憶媒体（１０）にロードされる前記実行可能プログラム・コード（Ｃ）が、前記第１コンピュータ（２０）の関与の下に、前記第２コンピュータ（３０）上で実行されることを特徴とする、請求項６記載の方法。
【請求項８】
前記実行可能プログラム・コード（Ｃ）が前記データ記憶媒体（１０）のメモリ（１１３）に記憶されることを特徴とする、請求項１記載の方法。
【請求項９】
プロセッサ、および該プロセッサで実行可能なプログラム・コードを収容するメモリを有する集積回路を備えるプログラマブル携帯データ記憶媒体であって、一時フォーマット形式で供給されるトランスポート・コード（Ｕ、ＵＣＳＭ、ＣＳＳＬ）を実行可能プログラム・コードに変換することができる最終処理用ソフトウェア・ツールが、前記集積回路（１２）内に生成されることを特徴とするデータ記憶媒体。
【請求項１０】
少なくとも１つのシーケンス・カウンタ（１３６）を有することを特徴とする、請求項９記載のデータ記憶媒体。
【請求項１１】
データ記憶媒体（１０）を示す識別情報（１１４）、および限定された第２コンピュータ（３０）に関連付けられ、データ保護コードを形成するためのキー（１２４）を備えることを特徴とする、請求項９記載のデータ記憶媒体。
【請求項１２】
少なくとも翻訳プログラム、およびリンキング・プログラム（３１２）を備える、プログラマブル携帯データ記憶媒体用実行可能プログラムを分散生成するためのコンピュータであって、受信した一時フォーマット形式のトランスポート・コード（Ｔ、ＴＱ、ＴＱＳＳＬ）からプログラム・ソース・テキスト（Ｑ）を復元する手段を有することを特徴とするコンピュータ。
【請求項１３】
プログラムするデータ記憶媒体（１０）の検知、および確認検査をする手段を有することを特徴とする、請求項１２記載のコンピュータ。
【請求項１４】
プログラム可能なそれぞれの携帯データ記憶媒体（１０）を示す識別情報（１１４）を記憶したテーブルを維持することを特徴とする、請求項１２記載のコンピュータ。
【請求項１５】
コンパイルすることによって生成したプログラム・コード（Ｃ）の形式を検証する手段（３２１）を有することを特徴とする、請求項１２記載のコンピュータ。
【請求項１６】
生成したプログラム・コード（Ｃ）を直接実行することにより、エラーの有無をチェックする手段（３１６）を有することを特徴とする、請求項１２記載のコンピュータ。
【請求項１７】
少なくともデータ記憶媒体とデータ交換を行うための第１インタフェース、およびデータ・リンクを接続するための第２インタフェースを備える、プログラマブル携帯データ記憶媒体用実行可能プログラムを分散生成するためのコンピュータであって、
自らは実行することができないプログラム・ソース・テキスト（Ｑ）を作成する編集プログラム（２２）を実行する手段と、
前記第１および第２インタフェース（２４、２６）を介し、携帯データ記憶媒体（１０）と、前記データ・リンク（２８）を介して接続される第２コンピュータ（３９）との間の直接データ転送を可能とする手段
とを有することを特徴とするコンピュータ。
【請求項１８】
ＳＳＬプロトコルを実行する手段を有することを特徴とする、請求項１７記載のコンピュータ。
【請求項１９】
請求項９記載の携帯データ記憶媒体、および請求項１２記載のコンピュータを備える、プログラマブル携帯データ記憶媒体用実行可能プログラムを分散生成するシステム。
【請求項２０】
請求項１７記載のコンピュータを更に備えることを特徴とする、請求項２０記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、携帯データ記憶媒体（好ましくはスマートカード形式）用実行可能プログラム・コードを不正に改竄されることなく生成する方法およびシステムに関するものである。
【背景技術】
【０００２】
プログラマブル・ロジック回路用プログラムを分散生成する方法が、特許文献１によって開示されている。自分のコンピュータを使用して、前記のような回路用プログラムを作成したいと希望するユーザに対し、回路製造メーカから操作が簡単なユーザ・インタフェースが供給される。ユーザは前記インタフェースを使用して、希望するロジック回路用機能を自分のコンピュータに記述する。前記の記述は入力されたパラメータを定義する入力マスクを介して、メニュー方式で行われる。こうして作成された、希望する回路機能を記述したパラメータ・レコードが、データ・ネットワークを介して回路製造メーカのコンピュータに送られる。回路製造メーカのコンピュータは、前記パラメータ・レコードをコンパイルして、ユーザが希望する機能を備える実行可能プログラムを生成する。回路製造メーカは生成した実行可能プログラムをユーザに返送し、ユーザ・コンピュータがそれをプログラム命令シーケンスに変換してロジック回路に転送する。対話方式によるパラメータの入力という簡略化された方法によって、プログラムが生成されるので、プログラミングの知識をあまり持っていないユーザでもロジック回路用プログラムを作成することができる。この方法では、ユーザがコンパイラ用ソフトウェアを所持していなくてもプログラムを作成することができる。この方法は構成上の理由から取扱いが難しいテクニカル・システムの使い勝手を良くすることに重点が置かれている。関係するコンピュータ間で交換されるデータを保護し、データが操作されるのを防止する予防措置が全く取られていない。従って、この方法は、生成されたプログラム・データを保護し、データがインターセプトされたり、操作されたりしないようにすることが特に重要なアプリケーションには適していない。特に、バンキング・トランザクションのような、セキュリティに関わるトランザクションを行うことを意図するスマートカード用プログラムを生成する記述形式のデータには適していない。
【０００３】
既に発行済みのスマートカードに実行可能アプリケーションを安全にロードする方法が、特許文献２によって開示されている。この方法により、アプリケーション供給者は、スマートカード発行者を介して、スマートカードのライフサイクル期間中、何時でもアプリケーションを追加することができる。追加の実行可能アプリケーションは、カード発行者に関連付けられ、キーおよび暗号メカニズムを運用管理する特別なカード・ドメイン・ルーチンによってロードすることができる。カード・ドメイン・ルーチンは、同様にキーおよび暗号メカニズムを運用管理するセキュリティ・ルーチンによってサポートされるが、このルーチンはアプリケーション供給者に関連付けらており、安全なアプリケーションはカード発行者にダウンロードされる。ダウンロードされるアプリケーションは暗号化され、セキュリティ・ルーチンのサポートを受けてカード・ドメイン・ルーチンによって復号され、カードにロードされる。前記ロードに際し、暗号署名がチェックされる。特許文献２は、ソース・テキストから始まるアプリケーションの生成を取り扱っていない。
【０００４】
ソフトウェア製造業者から始まり、仲介ディーラーを介して、最終的な購入者に至る市販用ソフトウェアを配信する方法が、特許文献３によって開示されている。この方法により、仲介ディーラーが実行可能コア・コードのセキュリティを害することなく、配信するソフトウェアに情報を追加することができる。この機能は配信するソフトウェアを暗号化し、特別な配信情報テーブルを提供する特別な配信ルーチンによって行われる。仲介ディーラーは、前記テーブルの変更および追加のみ可能である。
【０００５】
実行可能プログラム・コードをダウンロードできるスマートカード、およびプログラム・コードをスマートカードに組み込む方法については、例えば、非特許文献1に記載されている。この方法においては、プログラムの生成は、完全にバックグラウンド・システムによって行われる。生成された実行可能プログラム・コードは、例えば相互認証によって安全が保証されたインタフェースを介してスマートカードに転送される。安全上の理由から、実行可能プログラム・コードのスマートカードへの組込みは、バックグラウンド・システム、インタフェース、カードのオペレーティング・システム、およびカードのマイクロプロセッサー固有の識別および連携関係を確認後、オンラインで行われることが好ましい。セキュリティを最大限に維持しながら、識別情報を記憶しているバックグラウンドのシステム・データベースの管理を確実に行えるようにするため、バックグラウンド・システムで実行可能プログラム・コードを生成する認可は、いくつかの条件付きでカード発行者に対してのみ与えられ、認可リストが作成される。このため、自分自身で実行可能プログラム・コードを生成するという、基本的に備わっている可能性が制限されている。
【０００６】
開放型データ・ネットワークを介した２つのコンピュータ間のデータ交換を保護する方法として、ＳＳＬ (Ｓｅｃｕｒｅ  Ｓｏｃｋｅｔ  Ｌａｙｅｒ)、ＰＧＰ (Ｐｒｅｔｔｙ  Ｇｏｏｄ  Ｐｒｉｖａｃｙ)、Ｓｅｃｕｒｅ  Ｍｅｓｓａｇｉｎｇ、およびＳＭＩＭＥプロトコルを含む、いくつかの異なる暗号化技術をベースにした方法が知られている。この種の方法は以下に述べる発明の方法にも用いられるが、それ自体は本発明の主題ではない。従って、暗号の作成方法を含むこれらの実施方法の詳細については、それぞれの方法を記述した適切な文献、およびインターネット・サイトを引用している。また、３ＤＥＳによる暗号化やＭａｓｓａｇｅ  Ａｕｔｈｅｎｔｉｃａｔｉｏｎ  Ｃｏｄｅｓ(ＭＡＣ)の構成など、データの保護に関連する一般的な手段についても同様である。
【特許文献１】
米国特許第６，０２３，５６５号明細書
【特許文献２】
米国特許第６，００５，９４２号明細書
【特許文献３】
国際公開第９９/１２３０７号パンフレット
【非特許文献１】
Ｗ．Ｒａｎｋｌ、Ｗ．Ｅｆｆｉｎｇ、Ｈａｎｓａ  Ｖｅｌａｇ著、   「Ｈａｎｄｂｕｃｈ  ｄｅｒ  Ｃｈｉｐｋａｒｔｅｎ」、第３版
【発明の開示】
【発明が解決しようとする課題】
【０００７】
本発明は、データ操作に対する最大限のセキュリティを維持しながら、多くのユーザが、プログラマブル携帯データ記憶媒体用の実行可能プログラムを生成することができる方法を提示するという課題に立脚している。また、前記方法の実施に必要なシステム・コンポーネントを提示することも本発明の課題である。
【課題を解決するための手段】
【０００８】
前記課題は、メイン・クレームの特徴を有する方法によって解決される。本発明によれば、プログラム・ソース・テキスト生成用のプログラム・エディタ、および一時フォーマット形式のトランスポート・コードを実行可能プログラム・コードに変換することができる最終処理用のソフトウェア・ツールを備える半製品化された携帯データ記憶媒体がユーザに提供される。携帯データ記憶媒体用実行可能プログラム・コードは分散生成される。ユーザが前記プログラム・エディタを使用してプログラム・ソース・テキストを作成し、その後作成された前記テキストが安全なコネクションを介して、前記携帯データ記憶媒体発行者のコンピュータに転送される。安全なコネクションは、プログラム・ソース・テキストを前記半製品化されたデータ記憶媒体自体によってトランスポート・コードに暗号化し、前記データ記憶媒体発行者のコンピュータによってアドレス指定された一定の受取人以外は、前記トランスポート・コードの復号および保全性のチェックをすることができないようにすることにより、前記コードが変更されるのを防止することによって確立される。
【０００９】
前記データ記憶媒体発行者のコンピュータは、受信したプログラム・ソース・テキストをコンパイル、およびリンクして実行可能プログラム・コードを生成する。前記コンパイル、およびリンク・プロセスの一部によって、生成したプログラム・コードの形式が確認され、特に攻撃的コードの判定が行われる。前記データ記憶媒体発行者のコンピュータは、確認済み実行可能プログラム・コードを一時フォーマット形式に変換し、ユーザ・コンピュータを介して、前記半製品化された携帯データ記憶媒体に転送する。前記半製品化された携帯データ記憶媒体は、前記最終処理ソフトウェア・ツールの支援の下に、受信した一時フォーマット形式のプログラム・コードを実行可能プログラム・コードに変換して自分のメモリに記憶する。
【００１０】
最終処理ソフトウェアのセキュリティ関連パーツは、半製品化されたデータ記憶媒体に記憶されていることが好ましい。前記により、特に、プログラム・コードを含んでいるトランスポート・コードの復号、および/または信憑性、および/または保全性の確認が半製品化されたデータ記憶媒体において適切に実施され、エラーがなければ、復号した実行可能プログラム・コードを前記半製品化されたデータ記憶媒体のメモリに記憶することができる。
【００１１】
本発明の方法によれば、ユーザ・コンピュータを介して、データ記憶媒体発行者のコンピュータとデータ記憶媒体との間に、安全なエンドツーエンドのリンクが提供される。半製品化の設計、およびソフトウェア・ツールの選定によって、発行された特定のデータ記憶媒体のタイプ、および技術的要件に容易に適合させることができる。データ記憶媒体が対称暗号方式のみを実行するようセットアップされている場合には、一方において対称カード固有キーを用い、他方において、ユーザ・コンピュータとデータ記憶媒体発行者のコンピュータとの間のデータ・リンクに簡易非対称暗号方式を重畳することにより、安全なエンドツーエンド・リンクを適切に確立する。別の実施の形態では、ユーザ・コンピュータとデータ記憶媒体発行者のコンピュータとの間のデータ転送は、相互認証を用いた非対称暗号方式の導入により保護され、データ記憶媒体発行者のコンピュータとデータ記憶媒体との間のデータ転送は、Ｓｅｃｕｒｅ  Ｍｅｓｓａｇｉｎｇメカニズムによる安全なエンドツーエンドのリンクをセットアップすることにより保護される。
【００１２】
データ記憶媒体が非対称暗号方式を実行するようセットアップされている場合には、非対称暗号方式によって保証されるエンドツーエンド・リンクが、直接データ記憶媒体発行者のコンピュータとデータ記憶媒体との間に適切に形成される。この場合には、ユーザ・コンピュータは単に仲介するに過ぎない。
【発明の効果】
【００１３】
本発明の方法は、ユーザの確認検査および管理を必要とせずに、基本的にどのユーザもデータ記憶媒体用実行可能プログラムを生成することができるという効果を有している。データ記憶媒体発行者がすべてのプログラム生成に関与しているので、生成されたプログラム、従ってトータル・システムのセキュリティが常に保証される。特に、コンパイラ機能がデータ記憶媒体発行者によって保持されているので、重要なノウハウおよびセキュリティ関連ノウハウをユーザに与える必要がない。
【００１４】
コンパイラ機能がユーザから受信した暗号化されていないプログラム・ソース・テキスト、あるいはユーザが生成したプログラム・コードに直接アクセスするのを阻止するよう設計されているので、逆にユーザのアプリケーション固有のノウハウがデータ記憶媒体発行者から保護される。そのために、データ記憶媒体発行者のコンピュータは、コンパイラ機能、プログラム暗号化/復号化、署名のチェック/作成および認証を実行するハードウェア・セキュリティ・モジュールを使用している。前記ハードウェア・セキュリティ・モジュールの外部では、プログラム・ソース・テキスト、あるいは実行可能プログラム・コードは暗号化された形でしか現れない。
【００１５】
新たに作成されたプログラムの形式確認が、データ記憶媒体発行者によって、即ち安全な環境の下で行われるので、データ記憶媒体が使用可能なシステムに攻撃的プログラム・コードが組み込まれるのが完全に防止される。更に、すべての実行可能プログラムが、最新のコンパイラによってコンパイルされる効果も有している。本発明の方法はオンラインまたはオフラインで実行することができる。データ記憶媒体発行者にとって、本発明の方法は、ユーザが希望する特別な実行可能アプリケーション・プログラムの作成を完全にユーザに委ね、半製品の形でのみデータ記憶媒を納品することができる可能性を秘めている。データ記憶媒の発行者がプログラムの作成に関与することがプログラムの分散生成にとって必須であることから、更に、例えば、データ記憶媒に追加される実行可能プログラムの数、またはタイプに基づく料金モデルを採用した用法の導入が可能となる。
【発明を実施するための最良の形態】
【００１６】
以下、図を参照しながら本発明の例について詳細に説明する。
【００１７】
図１はプログラマブル携帯データ記憶媒体用プログラムを分散生成するシステムの基本構成図である。携帯データ記憶媒体１０との間でデータ交換を行う第１コンピュータ２０が、データ・リンク２８を介して、第２コンピュータ３０に接続されている。
【００１８】
第１コンピュータは、ユーザ、例えば、銀行、保険会社、小売店、医療施設等、あるいは前記に代わってプログラムを作成するサービス会社に所在している。前記コンピュータは、例えば、接触バンク、コイル、あるいは光信号ジェネレータから成る接触型、または非接触型の第１インタフェース２４を有しており、これによって携帯データ記憶媒体１０との間でデータ交換を行うことができる。前記コンピュータは、別のインタフェース２６を介してデータ・リンク２８に接続されている。２つのインタフェース２４、２６を介して、ユーザ・コンピュータ２０がデータ記憶媒体１０をデータ・リンク２８に接続している。前記により、ユーザ・コンピュータ２０がデータ記憶媒体１０に対し付加機能を提供する。特に、ユーザ・コンピュータ２０によって、データ記憶媒体１０用プログラムのソース・テキストの作成を可能とする編集プログラム２２（以下、略して「エディタ」という）が稼働することができる。
【００１９】
以後、プログラマブル携帯データ記憶媒体１０は、スマートカード形式のものをベースとするが、これに限定されるものではない。特定の用途に応じ、データ記憶媒体１０は、例えば、時計、筆記用具等、異なる形体にすることができる。外観には関わりなく、携帯データ記憶媒体１０は、ユーザ・コンピュータ２０のインタフェース２４に対応するインタフェース１４を備えており、ユーザ・コンピュータ２０との間でデータ交換を行うことができる。また、携帯データ記憶媒体１０は、セントラル・プロセッサ・ユニット、およびセントラル・プロセッサ・ユニットで実行可能な少なくとも１つのアプリケーション・プログラムのプログラム・コードを収容するメモリを有する集積回路１２を備えている。
【００２０】
第２コンピュータは主として携帯データ記憶媒体１０の発行者、または本明細書に述べる方法の運用を認可された運用業者に所在している。一般に、前記コンピュータは、ユーザ・コンピュータ２０、あるいは携帯データ記憶媒体１０と比較して、はるかに大きな演算能力を有している。第２コンピュータ３０は１つの構造体にする必要はない。むしろ、特別なデータ・ネットワークを介して、相互接続される分散コンポーネントから成るシステムとして構成することができる。ハードウェア・セキュリティ・モジュールを使用して、重要なセキュリティに関わる機能を記憶、あるいは実行することができる。第２コンピュータ３０は、インタフェース３４を介して、データ・リンク２８に接続されている。第２コンピュータは、特に、高水準プログラミング言語で表されたソース・テキスト・プログラムを機械語に翻訳する翻訳プログラム３１０を実行するためのコンピュータである。それ故、以後前記コンピュータをコンパイラ・サーバと呼ぶ。
【００２１】
通常、データ・リンク２８は、データ・ネットワークの形態をしており、特にインターネットで実現することができる。図１では２つのコンポーネント２０、３０のみが接続されているが、以後データ・ネットワークと呼ぶデータ・リンク２８を介して、複数のユーザ・コンピュータ２０を１つまたは複数のコンパイラ・サーバ３０に接続することができる。
【００２２】
図２はソフトウェア・ツールが半製品として供給されている、スマートカード１０の集積回路１２の構成を示す図である。集積回路１２は、セントラル・プロセッサ・ユニット１００、揮発性ワーキングメモリ１０２、および不揮発性読取専用メモリおよび不揮発性書換型メモリから成る不揮発性メモリアレイ１０４を備えるスマートカード用プロセッサの代表的なアーキテクチャを有している。一般に、揮発性ワーキングメモリ１０２はＲＡＭ、不揮発性読取専用メモリはＲＯＭ、不揮発性書換型メモリはＥＥＰＲＯＭである。前記の他に、同様の機能を有するメモリを使用することができる。セントラル・プロセッサ・ユニット１００は、更にインタフェース１４に接続されている。
【００２３】
不揮発性メモリアレイ１０４には、データ記憶媒体１０がユーザに渡される以前の半製品化の段階で作成されたデータ記憶媒体１０に必要なソフトウェア・ツールが含まれている。本明細書において、ソフトウェア・ツールは、ユーザが変更することができず、かつ一定のデータ処理を行うのに必要なすべてのプログラム、ルーチン、あるいはレコードを意味する。半製品化の段階で、プログラムの実行に関係なく常に変わらない基本カード構成１１０が最初に作成される。基本カード構成１１０には、少なくともオペレーティング・システム１１１、ユーザに渡されたとき既にスマートカード１０に含まれているアプリケーションを起動するための基本プログラム・コード１１２、および後でダウンロードされる実行可能プログラム・コードを記憶するための記憶領域１１３が含まれている。
【００２４】
次に、特定の実施の形態に合わせて次のようなソフトウェア・ツールが選択される。集積回路１２に固有の、従ってスマートカード１０に固有の、例えば、製造番号といった個別識別情報１１４、非対称暗号アルゴリズムを実行するプログラム１１６、対称暗号アルゴリズムを実行するプログラム１１８、Ｓｅｃｕｒｅ  Ｍｅｓｓａｇｉｎｇ方式に基づいてデータ交換を行うプログラム１２０、ネットワーク２８を介してＳＳＬプロトコルに基づいてデータ・データ交換を行うプログラム１２２、スマートカード固有の署名キー１２４、スマートカード固有の対称キー１２６、スマートカード１０に関連するコンパイラ・サーバ３０のパブリック・キー１２８、非対称暗号方式に用いられるプライベート・カード・キー１３０、パブリック・カード・キーと発行者の署名を含む識別情報との一致を確認する証明書１３２、セッション・キーを記憶する記憶領域１３４（このキーはこれまでのキーと異なり、コンパイラ・サーバとデータ交換を開始する度に新たに生成される）、およびシーケンス・カウンタ１３６。前記各々のソフトウェア・ツールは数回にわたり使用することもできる。特に、キー、証明書、およびシーケンス・カウンタがこれに該当する。
【００２５】
図３は、プログラム生成時に使用されるプログラムおよびソフトウェア・ツールを備えるコンパイラ・サーバ３０の構成を示す図である。コンパイラ・サーバ３０の中心をなすのは、インタフェース３４を介してデータ・ネットワーク２８に接続され、ユーザ・コンピュータ２０、従ってスマートカード１０とデータ交換を行うセントラル・プロセッサ・ユニット３００である。また、セントラル・プロセッサ・ユニット３００は、対応する一般にＲＡＭタイプの揮発性ワーキングメモリ３０２、および通常は読取専用メモリ（ＲＯＭ）と、例えばハード・ディスクなどの大容量記憶装置とから成る不揮発性メモリアレイ３０４を備えている。
【００２６】
メモリアレイ３０４が、本発明の方法を実行するのに必要なソフトウェア・ツールを記憶している。図３は、説明を簡単にするため、本発明の方法に用いることができるすべてのソフトウェア・ツールの概要を示している。実際に必要なソフトウェア・ツールは、スマートカード同様、本発明の方法を実現するための具体的な実施の形態によって決定される。一般に、メモリアレイ３０４には、プログラム・ソース・テキストをプログラム・コードに変換する、図３ではコンパイラと記されている翻訳プログラム３１０、既に生成されたプログラム・コードを新規作成プログラムの文脈に沿ってリンクする、図３ではリンカと記されているリンク・プログラム３１２、既に存在するプログラムおよびプログラム・パーツのプログラム・コードを包含しているコード・ライブラリ３１８、特定のユーザに対応するプログラム・コードを記憶するデータベース３２０、生成したプログラムの実行可能性をテストするデバッグ・プログラム３１６、生成したプログラムおよび/またはソース・テキストの形式を検証するプログラム３２１、スマートカード固有の対称キー、即ちキー１２６に対応する１つ以上の主要キー３２４、データ保護コード、特にＭＡＣを構成するためのスマートカード固有キー１２４に対応する１つ以上の主要キー３２６、非対称暗号アルゴリズムを実行するための１つ以上のパブリック・サーバ・キー３２８、１つ以上の対応するプライベート・サーバ・キー３３０、非対称アルゴリズムを実行するための１つ以上のパブリック・カード・キー３３２、１つ以上のサーバ証明書３３４、１つ以上のシーケンス・カウンタ３３８、およびスマートカード１０の半製品化の段階で生成し、スマートカードの領域１３２に記憶されている証明書リストなどのソフトウェア・ツールを含めることができる。また、メモリアレイ３０４には、スマートカードを一意に識別することができる識別情報を含むユーザ・リストが記憶されている。スマートカード１０を識別する識別情報として、例えばスマートカード１０の製造番号を用いることができる。
【００２７】
便宜上、前記ソフトウェア・ツールの中から、実際に必要なツールのみをコンパイラ・サーバ３０にセットアップし、必要でないツールはセットアップしない。
【００２８】
以下、半製品化されたスマートカード１０、またはコンパイラ・サーバ３０に存在するソフトウェア・ツールの重要性および用途について、分散プログラム生成の基本的なシーケンスを示す図４、および分散プログラム生成に関わる３つの実施の形態を図解した図５〜７を参照しながら説明する。
【００２９】
まず、図４は分散プログラム生成の基本的なシーケンスを示している。準備段階において、エディタ２２とソフトウェア・ツールが組み込まれている半製品化されたスマートカード１０がユーザに供給される（ステップ４００）。ユーザはエディタ２２を使用して、ユーザ・コンピュータ２０上でプログラム・ソース・テキストＱを作成する（ステップ４０２）。適切な暗号化技術を用いることにより、前記テキストＱにトランスポート・セキュリティ・メカニズムが施され（ステップ４０４）、トランスポート・コードＴ、ＴＱ、およびＴＱＳＳＬに変換される（ステップ４０６）。前記トランスポート・コードＴ、ＴＱ、およびＴＱＳＳＬが、コンパイラ・サーバ３０に転送される（ステップ４０８）。
【００３０】
コンパイラ・サーバは、前記コードを復号することにより、トランスポート・セキュリティ・メカニズムを除去し（ステップ４１０）、トランスポート・コードＴ、ＴＱ、およびＴＱＳＳＬに含まれているソース・テキストＱを復元する（ステップ４１２）。次に、コンパイラ・サーバは、プログラム・テキストＱのコンパイル、リンク、および検証を行う（ステップ４１４）。その結果、実行可能コードＣが生成され（ステップ４１６）、その後、再度トランスポート・セキュリティ・メカニズムが施される（ステップ４１８）。このため、実行可能コードＣは、適切な暗号メカニズムによって、一時フォーマットＵ、ＵＳＭ、ＵＳＳＬに変換される（ステップ４２０）。前記暗号メカニズムは、先にユーザ・コンピュータ２０によって施された暗号メカニズムと同じである必要はない。一時フォーマット形式に変換された実行可能コードが、ユーザ・コンピュータ２０を介して、スマートカード１０に転送される（ステップ４２２）。
【００３１】
スマートカード１０は、半製品化の段階で組み込まれたソフトウェア・ツールを用いて再度トランスポート・コードＵ、ＵＳＭ、ＵＳＳＬを復号し、実行可能プログラム・コードＣを割り出し、その後メモリにロードする。
【００３２】
図５は、スマートカード１０が備える手段を使用して、コンパイラ・サーバ３０との対話を通してデータのセキュリティを確保する分散プログラム生成のシーケンスを示す図である。図５の実施の形態は、特に対称暗号化方式のみが可能であるスマートカード１０を用いたシステムに適している。
【００３３】
図６は、データ・ネットワーク２８を介した、ユーザ・コンピュータ２０とコンパイラ・サーバ３０との間のデータ転送が、ＳＳＬプロトコルによって保護される一方、スマートカード１０とコンパイラ・サーバ３０との間で直接行われるデータ伝送がＳｅｃｕｒｅ  Ｍｅｓｓａｇｉｎｇメカニズムに基づいて行われる実施の形態を示す図である。本実施の形態も、対称暗号化方式のみが可能であるスマートカード１０を用いたシステムに適している。
【００３４】
図７は、ユーザ・コンピュータ２０が、実質的にスマートカード１０とコンパイラ・サーバ３０との間の仲介役を果たすに過ぎない実施の形態を示す図である。スマートカード１０とコンパイラ・サーバ３０との間で移送されるデータは、ＳＳＬプロトコルを用いて、直接スマートカード１０とコンパイラ・サーバ３０との間にエンドツーエンドの安全なリンクをセットアップすることによって保護される。
【００３５】
表１は図５、６、および７を参照しながら以下に述べるデータ転送方式、スマートカード１０の構成要件、およびトランスポート・セキュリティに依存する３つの実施の形態の適応性を体系的に示したものである。
【表１】
2004528632.tif 000003
【００３６】
図５、６、および７の左欄はコンパイラ・サーバ３０の動作を表し、右欄はユーザ・コンピュータ２０（“Ｎ”で示す）、またはスマートカード１０（“Ｋ”で示す）の動作を表している。
【００３７】
（実施の形態１）
図５において、プログラムの生成に先立つ準備段階がある。この段階において、ユーザはスマートカード発行者から半製品化されたスマートカード１０（ステップ５００）、およびユーザ・コンピュータ２０にセットアップされるエディタ２２（ステップ５０２）が供給される。半製品化されたスマートカード１０は基本構成１１３の他に、記憶領域１１４に識別情報ＩＤ、例えば“３ＤＥＳ”アルゴリズムなどの対称暗号アルゴリズムを実行するプログラム１１８、記憶領域１２４にデータ保護コード（好ましくはＭＡＣ形式）を構成するための少なくとも１つのカード固有キーＫＭＡＣ、記憶領域１２６に対称暗号用の少なくとも１つのキーＫＥＮＣ、少なくとも２つのセッション・キーＳＫＥＮＣおよびＳＫＭＡＣを収容する記憶域１３４を含んでいる。更に、前記スマートカード１０は、ＳＥＱＣおよびＳＥＱＨという値がセットアップされている、少なくとも２つのシーケンス・カウンタ１３６を備えている。シーケンス・カウンタＳＥＱＣは、プログラム・ソース・テキストＱをユーザ・コンピュータ２０からコンパイラ・サーバ３０に安全に移送するセッション・キーＳＫＥＮＣおよびＳＫＭＡＣを算出するのに用いられ、シーケンス・カウンタＳＥＱＨは、プログラム・コードＣをコンパイラ・サーバ３０からユーザ・コンピュータ２０に安全に移送するセッション・キーＳＫＥＮＣおよびＳＫＭＡＣを算出するのに用いられる。
【００３８】
コンパイラ・サーバ３０は、各々の発行済みスマートカード１０に対し、ＳＥＱＣおよびＳＥＱＨという値がセットアップされている２つのシーケンス・カウンタ３３８を有している。値ＳＥＱＣおよびＳＥＱＨは対応するスマートカード１０の対応するシーケンス・カウンタ１３６の値と一致しているので、コンパイラ・サーバ３０は、スマートカード１０と同じ演算ルールを用いてセッション・キーＳＫＥＮＣおよびＳＫＭＡＣを算出することができる。セキュリティを強化するため、プログラム・ソース・テキストＱ、あるいはプログラム・コードＣを転送する度に、異なるセッション・キーＳＫＥＮＣおよびＳＫＭＡＣが使用される。このため、スマートカード１０およびコンパイラ・サーバ３０は、セッション・キーＳＫＥＮＣおよびＳＫＭＡＣを算出する前に、シーケンス・カウンタ１３６および１３８の値ＳＥＱＣおよびＳＥＱＨをインクリメントする。
【００３９】
エディタ２２によって、例えば高水準プログラミング言語によるプログラム・ソース・テキストの作成が可能となる。エディタ２２は、グラフィックをベースにした対話式の入力ガイドをサポートし、例えば構文チェック、あるいはプログラム・インタフェースのコード・ライブラリへの結合など、直接役立つ開発支援プログラムを提供することが好ましい。
【００４０】
半製品化されたスマートカード１０とユーザ・コンピュータ２０の準備が整うと、ユーザは、エディタ２２を用いて、スマートカード１０に組み込みたいと思うプログラムのプログラム・ソース・テキストＱを作成する（ステップ５０４）。プログラム・ソース・テキストＱは、高水準プログラミング言語で作成することが好ましいが、前記以外のフォーマットで作成することもできる。プログラム・ソース・テキストＱを作成し終えると、ユーザはエディタ２２を介して、スマートカード１０に対し、プログラム・ソース・テキストＱを暗号化し、ＭＡＣによる改竄防止手段を講じる命令を下す。そのため、スマートカード１０は、まずシーケンス・カウンタ値ＳＥＱＣをインクリメントして、例えば、対称３ＤＥＳアルゴリズムを用いて、セッション・キーＳＫＥＮＣおよびＳＫＭＡＣを生成する（ステップ５０６）。次に、スマートカード１０は、インタフェース２４および１４を介して、エディタ２２から得たプログラム・ソース・テキストＱ、およびセッション・キーＳＫＥＮＣを暗号化して中間コードＱ’とし、セッション・キーＳＫＭＡＣ付きＱのＭＡＣを算出する（ステップ５０８）。次に、スマートカード１０は、インタフェース２４および１４を介して、中間コードＱ’およびＭＡＣをエディタ２２に戻す。
【００４１】
エディタ２２は、更にスマートカード１０の記憶領域１１４内に生成されるカード識別情報ＩＤを決定し（ステップ５０９）、中間コードＱ’およびＭＡＣと結合してトランスポート・コードＴを形成する。ユーザ・コンピュータ２０は、データ・ネットワーク２８を介して、こうして形成されたトランスポート・コードＴをコンパイラ・サーバ３０に転送する（ステップ５１０）。この場合、トランスポート・コードＴは、安全対策が施されていない媒体を介して転送することができる。例えば、トランスポート・コードＴは電子メールによって、あるいはフロッピー（登録商標）・ディスクに記憶して、前記カード発行者に郵送することができる。更に、トランスポート・コードＴは、データ・ネットワーク２８を介して、オンラインでコンパイラ・サーバに転送することができる。転送されたトランスポート・コードＴのプライバシーおよび保全性は、スマートカード１０の前記暗号化およびＭＡＣ演算によって保証される。
【００４２】
コンパイラ・サーバ３０は、前記トランスポート・コードＴを受信すると、まずそこに含まれている識別情報ＩＤが、コンパイラ・サーバ３０が維持している識別リスト３４０（カスタマ・リストであることが好ましい）にも含まれているかどうかチェックする（ステップ５１２）。識別情報ＩＤが識別リスト３４０に含まれている場合には、コンパイラ・サーバは、まず前記識別情報ＩＤを基に、記憶領域３２４および３２６にロードされているマスタ・キーＭＫＥＮＣおよびＭＫＭＡＣから適切なカード固有キーＫＥＮＣおよびＫＭＡＣを取得する（ステップ５１４）。前記キーおよびインクリメントされたシーケンス・カウンタＳＥＱＣを基に、コンパイラ・サーバ３０は、スマートカード１０が先に用いたのと同じ演算ルールに従って、セッション・キーＳＫＥＮＣおよびＳＫＭＡＣを算出する。次に、コンパイラ・サーバ３０は、セッション・キーＳＫＭＡＣを用いて、ＭＡＣ’を算出し（ステップ５１６）、トランスポート・コードＴに含まれているＭＡＣと比較する。前記両者が一致した場合、コンパイラ・サーバ３０は、トランスポート・コードＴを本物、即ち識別情報ＩＤを有するスマートカード１０から送付され、保全性が維持された、即ち、転送中に改竄されていないコードであると認知する。
【００４３】
コンパイラ・サーバ３０がトランスポート・コードＴを本物であると認知すると、前記コードに含まれているプログラム・ソース・テキストＱ’をセッション・キーＳＫＥＮＣを用いて復号する。トランスポート・コードＴの保全性は先に確認されているので、復号されたフォーマットは、ユーザ・コンピュータ２０上で最初に作成されたプログラム・ソース・テキストＱと一致する。
【００４４】
コンパイラ・サーバ３０は、翻訳プログラム３１０を用いて、復元したプログラム・ソース・テキストＱを中間フォーマットに変換し、次にコード・ライブラリ３１８を参照しながら、リンキング・プログラム３１２によって、既存プログラム・コードと連結する（ステップ５１８）。
【００４５】
翻訳プログラム３１０およびリンキング・プログラム３１２は、翻訳およびリンク機能、処理済みプログラム・データの暗号化および復号機能、書名の作成およびチェック機能、並びに認証機能を備えるハードウェア・セキュリティ・モジュール内で実行される。すべての処理済みプログラム・データ、特に入力プログラム・ソース・テキストＱ、および生成された実行可能プログラム・コードＣは、前記ハードウェア・セキュリティ・モジュールの外部には暗号化された形でしか現れない。このようにして、ユーザのアプリケーション固有のノウハウが、コンパイラ・サーバ３０を介して、閲覧およびアクセスされるのを防止している。
【００４６】
また、コード・ライブラリ３１８へのアクセスを便宜的に禁止する機能をコンパイラ・サーバにセットアプし、例えば、リンキング・プログラム３１２による既存プログラム・コードの新規生成コードへのリンクを禁止することができる。
【００４７】
コンパイルおよびリンクによって作成されたプログラム・コードＣは、検証プログラム３２１によって形式が検証される。プログラム・コードＣは明らかなエラー、例えば、アドレス空間制御エラー、所定のメモリ・サイズに対する配慮不足、形式違反、あるいは攻撃性がないかどうかチェックされる（ステップ５２０）。
【００４８】
次に、プログラム・ソース・テキストＱから生成されたプログラム・コードＣが使用可能、即ち、スマートカード１０で実行可能な場合には、トランスポート・コードＵに変換され逆方向に転送される。このため、まずシーケンス・カウンタの値ＳＥＱＨがインクリメントされる。次に、前記インクリメントされたシーケンス・カウンタ値ＳＥＱＨに基づき、カード固有キーＫＥＮＣおよびＫＭＡＣが、マスタ・キーＭＫＥＮＣおよびＭＫＭＡＣから取得されると共に、識別情報ＩＤが取得され、セッション・キーＳＫＥＮＣおよびＳＫＭＡＣが再度算出される（ステップ５２２）。コンパイラ・サーバ３０によるセッション・キーＳＫＥＮＣおよびＳＫＭＡＣの算出は、シーケンス・カウンタ値ＳＥＱＣの代わりにシーケンス・カウンタ値ＳＥＱＨが使用される点が異なるだけで、先にユーザ・コンピュータ２０がステップ５０６で行った方法と同じ方法で行われる。
【００４９】
その後、プログラム・コードＣは、セッション・キーＳＫＥＮＣと共に中間コードＣ’に変換され、中間コードＣ’を介して、セッション・キーＳＫＭＡＣに基づき、更にＭＡＣ”が算出される（ステップ５２４）。中間コードＣ’およびＭＡＣ”は、直ちにトランスポート・コードＵとして結合され、コンパイラ・サーバによって、ユーザ・コンピュータ２０に送られる（ステップ５２６）。トランスポート・コードＵの送付は、トランスポート・コードＴの送付時同様、どのような伝送媒体、特に「フロッピー」・ディスク、あるいは電子メールのような基本的に安全ではない媒体を通じて送付することができる。勿論、データ・ネットワーク２８を介してオンラインで送信することもできる。オンライン接続を使用する場合には、１つのオンライン・セッションで注文、即ちトランスポート・コードに含まれるプログラム・ソース・テキストＱをコンパイラ・サーバ３０に送信し、結果、即ちプログラム・コードＣ’を含むトランスポート・コードＵを受信することができる。
【００５０】
ユーザ・コンピュータ２０は受信したトランスポート・コードＵを、インタフェース２１および１４を介して、スマートカード１０にパスする（ステップ５２８）。スマートカード１０は、シーケンス・カウンタ１３６の値ＳＥＱＨをインクメントし、前記カウンタの値を基に、先にコンパイラ・サーバ３０がステップ５２２で行ったのと同じ方法でセッション・キーＳＫＥＮＣおよびＳＫＭＡＣを生成し、トランスポート・コードＵと一緒に転送されてきたＭＡＣ”が、スマートカード１０がトランスポート・コードＵを基に、キーＳＫＭＡＣによって自ら算出することができるＭＡＣと同じであるかチェックする（ステップ５３０）。ＭＡＣ”とＭＡＣとが一致した場合には、トランスポート・コードＵのＭＡＣ”が無事確認されたことになる。何故なら、スマートカード１０の他に、キーＳＫＭＡＣを使用する可能性があるのは、コンパイラ・サーバ３０のみであり、トランスポート・コードＵとして転送されてきたプログラム・コードＣ’を復号して得たプログラム・コードＣは本物、即ち同一のスマートカード１０によってトランスポート・セキュリティ・メカニズムが施されたプログラム・ソース・テキストＱを基に、コンパイラ・サーバ３０によって生成されたプログラム・コードである。本物であると認定されたプログラム・コードＣは、スマートカード１０により、カード・メモリ１１３にロードされる（ステップ５３２）。
【００５１】
（実施の形態２）
図６は、データ・ネットワーク２８を介した、ユーザ・コンピュータ２０とコンパイラ・サーバ３０との間のデータ転送がＳＳＬによって保護され、スマートカード１０とコンパイラ・サーバ３０との間の直接データ伝送が、Ｓｅｃｕｒｅ  Ｍｅｓｓａｇｉｎｇメカニズムを用いて行われる、分散プログラム生成の１つの実施の形態を示すフローチャートである。本実施の形態は、図５の実施の形態同様、対称暗号化方式のみが可能であるスマートカード１０を用いた、オンライン・システムに特に適している。
【００５２】
第２の実施の形態を実行する半製品化されたスマートカード１０は、オペレーティング・システム１１１、基本プログラム・コード１１２、および完成プログラム・コード用の記憶域１１３を有する基本構成１１０の他に、Ｓｅｃｕｒｅ  Ｍｅｓｓａｇｉｎｇを実行するルーチン１２０、プライベート・カード・キー１３０、およびパブリック・サーバ・キー１２８を備えている。更に、ユーザ・コンピュータ２０は、スマートカードの認証を受けずにＳＳＬプロトコルを実行することができるプログラム機能を備えている。
【００５３】
第２の実施の形態におけるプログラム生成の過程は、当初、図５の第１の実施の形態のステップ５００〜５０４と同様である。
【００５４】
プログラム・ソース・テキストＱを作成し終えると、ユーザはユーザ・コンピュータ２０とカード発行者のコンパイラ・サーバ３０との間に、データ・ネットワークを介して、コネクションをセットアップする（ステップ６００）。
【００５５】
コンパイラ・サーバとの間に物理的な接続が確立した後、ユーザ・コンピュータ２０とコンパイラ・サーバ３０との間でＳＳＬプロトコルが開始される。ユーザ・コンピュータ２０およびコンパイラ・サーバ３０は、それぞれセッション・キーＳＫＳＳＬを決定する（ステップ６０１および６０２）。次に、Ｓｅｃｕｒｅ  Ｍｅｓｓａｇｉｎｇを実行するために、ＳＳＬプロトコル内において、コンパイラ・サーバ３０とスマートカード１０との間に、所謂ＩＰトンネルがセットアップされる（ステップ６０４）。ユーザ・コンピュータ２０において、スマートカード１０が実行したＳｅｃｕｒｅ  Ｍｅｓｓａｇｉｎｇプロトコルが、ユーザ・コンピュータ２０とコンパイラ・サーバ３０との間のみで使用されるＳＳＬプロトコルに埋め込まれる。その後、スマートカード１０とコンパイラ・サーバ３０との間において、スマートカード固有のレコード、好ましくはＡＰＤＵｓ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｔｏｃｏｌ  Ｄａｔａ  Ｕｎｉｔｓ）形式のレコードがＩＰトンネル内を直接伝送される。Ｓｅｃｕｒｅ  Ｍｅｓｓａｇｉｎｇに関しては、ユーザ・コンピュータ２０は単なる仲介手段に過ぎない。
【００５６】
次に、Ｓｅｃｕｒｅ  Ｍｅｓｓａｇｉｎｇに基づいて、まずカード１０が対向するコンパイラ・サーバ３０を認証し（ステップ６０６）、次にコンパイラ・サーバ３０が対向するカード１０を認証する（ステップ６０８）相互認証が行われる。スマートカード１０とコンパイラ・サーバ３０との間の相互認証が無事終了すると、ユーザ・コンピュータ２０が使用するコンパイラ・サーバのすべての機能がリリースされる（ステップ６１０）。
【００５７】
ユーザ・コンピュータ２０は、前記リリースされた機能を受信すると、先に決定したセッション・キーＳＫSESを用いて、作成したプログラム・ソース・テキストＱを暗号化し、暗号化されたトランスポート・コードＴＱをコンパイラ・サーバ３０に転送する（ステップ６１２）。
【００５８】
コンパイラ・サーバ３０がトランスポート・コードＴＱを受信すると、コンパイラ・サーバ３０が先に生成したセッション・キーＳＫＳＳＬを用いてトランスポート・コードＴＱを復号し、ユーザ・コンピュータ２０が作成したソース・テキストＱに変換する（ステップ６１４）。ステップ６１０、６１２、および６１４は、ユーザ・コンピュータ２０とコンパイラ・サーバ３０との間の連続したデータ交換として適切に実行されるので、コンパイラ・サーバ３０におけるソース・テキストＱの復元は、ユーザ・コンピュータ２０からの最終の暗号化されたソース・テキスト・レコードの受信を終了すると直ちに完了する。
【００５９】
コンパイラ・サーバ３０は、ソース・テキストＱを基に、図５のステップ５１８、および５２０を直ちに実行し、実行可能コードＣを生成する。
【００６０】
コンパイラ・サーバ３０は、Ｓｅｃｕｒｅ  Ｍｅｓｓａｇｉｎｇメカニズムを適用して、実行可能プログラム・コードＣをセキュア・プログラム・コードＣＳＭに変換する（ステップ６２０）。次いで、コンパイラ・サーバ３０は、セッション・キーＳＫSESを用いて暗号化することにより、前記セキュア・プログラム・コードＣＳＭを一時フォーマット形式のトランスポート・コードＵＣＳＭに変換する（ステップ６２２）。セッション・キーＳＫSESを用いて暗号化することにより、一般にＡＰＤＵｓ形式のセキュア・プログラム・コードＣＳＭは、データ・ネットワーク２８を介した、コンパイラ・サーバ３０とユーザ・コンピュータ２０との間のデータ転送におけるセキュリティ・メカニズムに埋め込まれる。
【００６１】
コンパイラ・サーバ３０は、一時フォーマット形式のトランスポート・コードＵＣＳＭをユーザ・コンピュータ２０に転送する。ユーザ・コンピュータ２０は、セッション・キーＳＫSESを用いて、前記ＵＣＳＭを復号し（ステップ６２６）、コンパイラ・サーバ３０とユーザ・コンピュータ２０との間のデータ転送を保護するセキュリティ・メカニズムを除去する。次に、ユーザ・コンピュータ２０は、Ｓｅｃｕｒｅ  Ｍｅｓｓａｇｉｎｇによって保護されている復号プログラム・コードＣＳＭをスマートカード１０にパスする（ステップ６２４）。
【００６２】
スマートカード１０において、逆Ｓｅｃｕｒｅ  Ｍｅｓｓａｇｉｎｇメカニズムを適用することにより、セキュア・プログラム・コードＣＳＭが実行可能プログラム・コードＣに戻され（ステップ６２８）、最終的に、完成プログラム・コード受信用のメモリアレイ１０４の領域１１３にロードされる（ステップ６３０）。
【００６３】
説明を分かり易くするため、これまで図６の手順を独立した一連のステップとして説明してきたが、実際には、スマートカード１０、ユーザ・コンピュータ２０、およびコンパイラ・サーバ間のデータ転送は、一般に双方向で行われる。更に、コンパイラ・サーバ３０およびユーザ・コンピュータ２０、またはスマートカード１０が時間的に重複して実行することができるステップおよび処理プロセスを連続する準平行データ交換の形で実行することが得策である。例えば、ステップ６２０〜６３０がこれに該当する。前記のステップは、コンパイラ・サーバ３０とユーザ・コンピュータ２０との間の連続したデータ交換として適切に実行することができる。コンパイラ・サーバ３０がプログラム・コードＣをＳｅｃｕｒｅ  Ｍｅｓｓａｇｉｎｇに従って変換している間に、トランスポート・コードＵＣＳＭのレコードが既にユーザ・コンピュータ２０に転送され、ユーザ・コンピュータ２０を介して、コンパイラ・サーバ３０からスマートカード１０に転送されたレコードが、記憶領域１１３にロードされる直前にスマートカード１０によって復号される、即ち完全に受信が終了するまで記憶されないように適切に実行することができる。
【００６４】
（実施の形態３）
図７は、図４を参照して説明したプログラム生成の更なる実施の形態を示す図であり、本実施の形態では、ユーザ・コンピュータ２０は実質的に、スマートカード１０とコンパイラ・サーバ３０との間の単なる仲介役を努めるに過ぎない。スマートカード１０とコンパイラ・サーバ３０との間で転送されるデータは、ＳＳＬプロトコルを用いたエンドツーエンドの安全な直接リンクをコンパイラ・サーバ３０とスマートカード１０との間に確立することによって保護される。
【００６５】
本実施の形態を実行するのに適する半製品化されたスマートカード１０には、オペレーティング・システム１１１、基本プログラム・コード１１２、および完成プログラム・コード用の記憶域１１３を有する基本構成１１０がセットアップされている他に、ＳＳＬプロトコルの実行、並びに証明書１３２、プライベート・カード・キー１３０、およびパブリック・サーバ・キー１２８をセットする生成プログラム１２２がセットアップされている。
【００６６】
図７の実施の形態におけるプログラム生成の過程は、当初、図５の実施の形態のステップ５００〜５０４と同様であり、それに引き続き、ユーザ・コンピュータ２０を介して、スマートカード１０とコンパイラ・サーバ３０との間にコネクションが確立される（ステップ７００）。
【００６７】
本実施の形態においては、スマートカード１０およびコンパイラ・サーバ３０は完全なＳＳＬプロトコルを実行する。まずコンパイラ・サーバ証明書３３２がスマートカード１０によってチェックされ（ステップ７０１）、次にスマートカード１０内に作成されている証明書１３２がコンパイラ・サーバ３０によってチェックされる（ステップ７０２）ことにより、ハンドシェーク手順の中で相互認証が実施される。前記相互認証の後、引き続きデータ交換が可能な場合には、スマートカード１０およびコンパイラ・サーバ３０はそれぞれセッション・キーを生成する（ステップ７０４および７０６）。
【００６８】
図７の実施の形態は、オンラインでの実施に特に適している。従って、スマートカード１０とコンパイラ・サーバ３０との間に安全なデータ・リンクが確立された後、ユーザが幾つかのオペレーティング・オプションから処理を選択することができる。この場合、安全なデータ・リンクが確立された後、コンパイラ・サーバ３０が、可能なオペレーティング・オプションを示すメッセージをユーザ・コンピュータ２０に送信する（ステップ７０８）。ユーザは、ユーザ・コンピュータ２０を介して、前記オプションの中から、希望する処理、例えば、オンライン翻訳によるプログラムの生成（ステップ７１０）、あるいは新たに生成したプログラムの実行可能性がオンラインで検証される、デバッグ・モードによるプログラムの生成を選択する。
【００６９】
コンパイラ・サーバ３０に対するデータ転送のセキュリティを強化するため、その後、スマートカードによって、プログラム・ソース・テキストＱの署名を随意提供することができる（ステップ７１１）。前記署名は、スマートカード１０がソース・テキストＱにハッシュ値を形成し、スマートカード１０のプライベート・キー１３０を用いて暗号化する、当業者周知の方法で作成される。ハッシュ値は、特にスマートカード１０のハードウェア・リソースが不十分な場合、ユーザ・コンピュータ２０によって形成される。
【００７０】
スマートカード１０は、先に決定したセッション・キーＳＫＳＳＬを用いて随意署名したプログラム・ソース・テキスト・コードをトランスポート・コードＴＱＳＳＬに変換し（ステップ７１２）、ユーザ・コンピュータ２０を介して、コンパイラ・サーバ３０に送信する（ステップ７１４）。
【００７１】
コンパイラ・サーバ３０は、セッション・キーＳＫSESを用いて、受信したトランスポート・コードＴＱＳＳＬを復号し（ステップ７１６）、プログラム・ソース・テキストＱを復元する。署名がある場合には、パブリック・カード・キーを用いて、再度ハッシュ値を形成して、署名が正しいかどうかをチックする。
【００７２】
次に、コンパイラ・サーバ３０は、復元したプログラム・ソース・テキストＱを基に、ステップ５１８および５２０を実行して実行可能プログラム・コードを生成する。
【００７３】
コンパイラ・サーバ３０は、ハッシュ値を形成し、それをコンパイラ・サーバ３０のプライベート・キー３３０で暗号化することによって生成した署名を、前記生成したプログラム・コードＣに付与する。その後直ちに前記署名入りコードをスマートカード１０のパブリック・キー３３２を用いて暗号化する（ステップ７１８）。その後、コンパイラ・サーバ３０は、セッション・キーＳＫSESを用いて前記暗号文を暗号化することにより、一時フォーマット形式のＣＳＳＬに変換し（ステップ７２０）、トランスポート・コードとして最終的にユーザ・コンピュータ２０に転送する（ステップ７２２）。
【００７４】
ユーザ・コンピュータ２０は受信したトランスポート・コードＣＳＳＬをスマートカード１０にパスし（ステップ７２４）、スマートカード１０は、セッション・キーＳＫSESを用いて前記ＣＳＳＬを復号することにより、実行可能コードの暗号文を再度生成する（ステップ７２５）。コンパイラ・サーバ３０によって、プログラム・コードＣに署名がなされている場合には、スマートカード１０は、スマートカード１０のプライベート・キー１３０を用いて前記暗号文を更に復号し、前記署名がコンパイラ・サーバのパブリック・キー１２８と符合するか否かチェックする（ステップ７２６）。前記署名が符合した場合、スマートカード１０は、前記の結果得られた実行可能プログラム・コードを完成プログラム・コード受信用のメモリアレイ１０４の記憶領域１１３にロードする（ステップ７２８）。
【００７５】
図５の実施の形態同様、説明を分かり易くするため、図７の手順を順次説明してきたが、実際には、コンパイラ・サーバ３０およびスマートカード１０が、時間的に重複して実行することができるステップを準平行的に実行することが得策である。例えば、ステップ７１２〜７１６、即ちスマートカードによる暗号化とコンパイラ・サーバによるプログラム・ソース・テキストＱの復元がこれに該当する。前記ステップは連続する準平行データ交換および処理プロセスとして適切に実行することができるので、実質的にスマートカード１０が最終レコードを送信した直後に、プログラム・ソース・テキストＱがコンパイラ・サーバ３０に存在することになる。プログラム・ソース・テキストＱを完全に受信し終えるまで、中間記憶装置は必要ない。また、連続する準平行データ交換および処理プロセスは、ステップ７１８〜７２８、即ちコンパイラ・サーバ３０による実行可能コードＣの暗号化、スマートカード１０による前記コードの復元、およびスマートカード１０の記憶域１１３へのローディングに対し推奨できる。前記ステップは、中間記憶装置を必要とせずに、コンパイラ・サーバ３０およびスマートカード１０によって、直接レコード単位で適切に実行されるので、実質的にコンパイラ・サーバ３０がトランスポート・コードの最終レコードを送信した直後に、実行可能プログラム・コードＣがスマートカード１０のメモリに存在することになる。
【００７６】
これまで説明してきたいずれの実施の形態によるプログラム生成においても、デバッグ・ルーチンを供給することができる。前記デバッグ・ルーチンは、スマートカード１０にロードされる前に、コンパイラ・サーバ３０が生成したプログラム・コードＣの実行可能性をチェックするものである。かかるデバッグ・ルーチンの基本的動作を図８に示す。図８においては、説明を簡単にするため、データ転送の保護手段、特に様々な暗号方式は省略してある。
【００７７】
デバッグ・ルーチンは、プログラム３１６としてコンパイラ・サーバ３０内で生成され実行される。プログラム３１６は、データ記憶媒体の技術的制約の下で、生成されたプログラムをコンパイラ・サーバ３０上でエミュレートするために、データ記憶媒体をシミュレートするハード・ウェアおよび/またはソフトウェアを付加物またはその一部として備えている。プログラム３１６は、対応するオペレーティング・モードがコンパイラ・サーバ３０にセットされた後、ユーザ・コンピュータ２０内のエディタ２２を介して制御される。オペレーティング・モードは、例えば、図６の実施の形態によるプログラム生成の場合には、ステップ７０８および７１０におけるオペレーティング・オプションの選択時にセットすることができる。デバッグ・オペレーティング・モードでは、例えば、コンパイラ・サーバ３０が生成したプログラムの開始、停止マークのセット、記憶域の表示、変数の読込みおよびセットなど、すべてユーザ・コンピュータ２０から行うことができる。前記デバッグ・ルーチンを実行するには、まずプログラム・ソース・テキストＱを通常の方法で作成し（ステップ５０４）、コンパイラ・サーバ３０とのコネクションをセットアップする（ステップ７００）。次にこれまで説明してきた実施の形態のいずれかによって、前記ソース・テキストＱをコンパイラ・サーバ３０に転送する（ステップ８００）。
【００７８】
コンパイラ・サーバ３０が前記ソース・テキストＱを受信すると、ユーザに対しデバッグ・オペレーティング・モードによるプログラム・コードＣの生成を提案する（ステップ８０２）。デバッグ・オペレーティング・モードが選択されると、コンパイラ・サーバ３０は、受信したプログラム・ソース・テキストＱを基に、ステップ５２６および５２８を実行して、コンパイラ・サーバ３０のシミュレーションおよび/またはエミュレーション環境下において、実行可能な仮プログラム・コードＣＶを生成する。コンパイラ・サーバ３０は、仮プログラム・コードＣＶを一時記憶装置に記憶する（ステップ８０６）。次に、コンパイラ・サーバ３０は、作成したメッセージをユーザ・コンピュータ２０に転送し（ステップ８０８）、ユーザ・コンピュータ２０は前記メッセージを表示する（ステップ８１０）。
【００７９】
これにより、ユーザはユーザ・コンピュータ２０を用いて、ソース・テキスト・プログラムＱにデバッグ命令、即ち、停止マークのセット、プログラムのステップ単位の実行、あるいは変数表示などの命令を下すことができる（ステップ８１２）。前記デバッグ命令はコンパイラ・サーバ３０に伝達される。
【００８０】
その後、仮プログラム・コードＣＶは、ユーザ・コンピュータ２０を介して、コンパイラ・サーバ３０上で起動することができる（ステップ８１４）。コンパイラ・サーバ３０は、前もって伝達されたデバッグ命令を考慮しつつ、直ちに前記プログラムを実行する（ステップ８１６）。前記デバッグ命令によって規定されたプログラム区域の実行が終了すると、コンパイラ・サーバ３０は実施結果に関するメッセージをユーザ・コンピュータ２０に伝達し（ステップ８１８）、ユーザ・コンピュータ２０はそれを表示する（ステップ８２０）。デバッグ命令に応じて、ユーザは、例えば、変数の入力、あるいは新たなデバッグ命令をセットすることにより、実行中のプログラムに介入することができる（ステップ８２２）。ユーザ・コンピュータ２０は、プログラム・ソース・テキストＱに対して行ったすべての介入、あるいは新たなデバッグ命令をコンパイラ・サーバ３０に伝達する。前記デバッグ命令の実行が終了すると、ユーザ・コンピュータ２０は継続信号をコンパイラ・サーバ３０に伝達し（ステップ８２４）、コンパイラ・サーバ３０は、ステップ８１４を繰り返すことにより、次のプログラム区域の実行を開始する。コンパイラ・サーバ３０は、プログラム・ソース・テキストＱに対してなされたすべての介入、あるいは新たなデバッグ命令を確認する。コンパイラ・サーバ３０が、仮プログラム・コードＣＶによるプログラムの実行が完全に終了するまで、ステップ８１４〜８２４が繰り返される。
【００８１】
プログラムにエラーがなく、実行可能であると最終的に立証されると、ユーザは、ユーザ・コンピュータ２０を介して、オペレーティング・モードを標準モードに変更する（ステップ８２６）。コンパイラ・サーバ３０は、その時点で存在しているプログラム・ソース・テキストを基に、直ちに実行可能プログラム・コードＣを生成し、図４〜６を参照して説明したように、ユーザ・コンピュータ２０を介して、スマートカード１０に転送する（ステップ８２８）。更に、コンパイラ・サーバ３０は、一時的に記憶されていた仮プログラム・コードＣＶを消去する。
【００８２】
これまで説明してきたシーケンスの例は、いずれの場合においても、具体的に本発明の方法を実現するための基本的要素であると理解されるべきである。半製品化されたデータ記憶媒体を用いて安全にプログラムを生成するという基本的な手法を維持しつつ、前記の例は、それぞれ幅広い範囲において、精緻化することができる。このことは、特に、構成要素、即ち、スマートカード、ユーザ・コンピュータ、データ・ネットワーク、およびコンパイラ・サーバに当てはまる。また、前記暗号方式および認証方式は、勿論、同様のセキュリティ効果を有する別の方式に置き換えることができる。前記すべての実施の形態において、特に、更なるキー、シーケンス・カウンタ、あるいはその他の暗号アルゴリズムを用いることにより、セキュリティ・レベルを更に強化することができる。技術上あるいはセキュリティ上の理由から、更なる再フォーマット化の導入も可能である。従って、特にメモリ空間に限りがあるプログラマブル・スマートカードにおいては、コンパイラ・サーバ３０上で生成された実行可能プログラム・コードをスマートカードにロードする前、またはロード中に、例えば、シンボルによる参照を実際のアドレスに置き換えることにより、再フォーマット化してメモリを最適化するのが通例である。更に、説明を分かり易くするため、エラーのない場合についてのみ説明したが、エラーが生じた場合には、従来の標準問題解決手法によって解決することができる。
【図面の簡単な説明】
【００８３】
【図１】プログラムを作成するためのシステムを示す図。
【図２】プログラマブル携帯データ記憶媒体の集積回路の構成を示す図。
【図３】第２コンピュータの構成を示す図。
【図４】基本的な分散プログラム生成のシーケンスを示す図。
【図５Ａ】プログラム生成のシーケンスを表すフローチャートを示す図。
【図５Ｂ】プログラム生成のシーケンスを表すフローチャートを示す図。
【図６】プログラム生成のシーケンスを表すフローチャートを示す図。
【図７】プログラム生成のシーケンスを表すフローチャートを示す図。
【図８】作成したプログラムの実行可能性オンライン・チェックの原理を示す図。
【符号の説明】
【００８４】
１０    プログラマブル携帯データ記憶媒体
１２    集積回路
１４、２４、２６、３４    インタフェース
２０    ユーザ・コンピュータ
２２    エディタ
２８    データ・ネットワーク
３０    コンパイラ・サーバ
１０４    不揮発性メモリアレイ
１１０    基本カード構成
【図１】
2004528632.tif 000004
【図２】
2004528632.tif 000005
【図３】
2004528632.tif 000006
【図４】
2004528632.tif 000007
【図５Ａ】
2004528632.tif 000008
【図５Ｂ】
2004528632.tif 000009
【図６】
2004528632.tif 000010
【図７】
2004528632.tif 000011
【図８】
2004528632.tif 000012
【国際公開パンフレット】
2004528632.tif 000013
2004528632.tif 000014
2004528632.tif 000015
2004528632.tif 000016
2004528632.tif 000017
2004528632.tif 000018
2004528632.tif 000019
2004528632.tif 000020
2004528632.tif 000021
2004528632.tif 000022
2004528632.tif 000023
2004528632.tif 000024
2004528632.tif 000025
2004528632.tif 000026
2004528632.tif 000027
2004528632.tif 000028
2004528632.tif 000029
2004528632.tif 000030
2004528632.tif 000031
2004528632.tif 000032
2004528632.tif 000033
2004528632.tif 000034
2004528632.tif 000035
2004528632.tif 000036
2004528632.tif 000037
2004528632.tif 000038
2004528632.tif 000039
2004528632.tif 000040
2004528632.tif 000041
2004528632.tif 000042
2004528632.tif 000043
2004528632.tif 000044
2004528632.tif 000045
2004528632.tif 000046
2004528632.tif 000047
2004528632.tif 000048
2004528632.tif 000049
2004528632.tif 000050
2004528632.tif 000051
2004528632.tif 000052
2004528632.tif 000053
2004528632.tif 000054
2004528632.tif 000055
2004528632.tif 000056
2004528632.tif 000057
2004528632.tif 000058
2004528632.tif 000059
2004528632.tif 000060
【国際公開パンフレット（コレクトバージョン）】
2004528632.tif 000061
2004528632.tif 000062
【国際調査報告】
2004528632.tif 000063
2004528632.tif 000064
2004528632.tif 000065
2004528632.tif 000066
2004528632.tif 000067
2004528632.tif 000068
2004528632.tif 000069
2004528632.tif 000070
2004528632.tif 000071
2004528632.tif 000072