(57)【要約】【課題】互いに協調して動作するプログラムの機密性を保護できるシステムを提供する。【解決手段】記録システムは、第１の平文データを暗号化して第１暗号化データとして出力する第１データ生成部と、第１暗号化データと連結した連結プログラムを出力する第２データ生成部と、連結プログラムを格納するデータ記録部とを備える。第２データ生成部は、第２の平文データを生成するコンパイラ部と、第２の平文データを暗号化して第２暗号化データとして出力する暗号化処理部と、第１暗号化データと第２暗号化データとを連結するリンカ部と、連結した連結プログラムをデータ記録部に出力するデバッガ部とを含む。コンパイラ部は、第１のプログラムのヘッダファイルに基づいて、第１のプログラムが有する関数モジュールのアドレスをプログラム実行時にデータ記録部に格納されている情報に基づいて設定するためのプログラムコードを生成する。【選択図】図２
2020181522.tif 000002
【特許請求の範囲】
【請求項１】
第１のプログラムに対して、コンパイルした第１の平文データを暗号化して第１暗号化データとして出力する第１データ生成部と、
前記第１のプログラムと協働して動作する第２のプログラムに対して、前記第１暗号化データと連結した連結プログラムを出力する第２データ生成部と、
前記第２データ生成部から出力された前記連結プログラムを格納するデータ記録部とを備え、
前記第２データ生成部は、
前記第２のプログラムをコンパイルした第２の平文データを生成するコンパイラ部と、
前記第２の平文データを暗号化して第２暗号化データとして出力する暗号化処理部と、
前記第１暗号化データと、前記第２暗号化データとを連結するリンカ部と、
前記リンカ部で連結した連結プログラムを前記データ記録部に出力するデバッガ部とを含み、
前記コンパイラ部は、前記第２の平文データに対して、前記第１暗号化データとは別に送付される前記第１のプログラムのヘッダファイルに基づいて、前記第２のプログラムが参照する、前記第１のプログラムが有する関数モジュールのアドレスをプログラム実行時に前記データ記録部に格納されている情報に基づいて設定するためのプログラムコードを生成し、
前記データ記録部は、
前記連結プログラムを復号化する復号化処理部と、
復号化された第１および第２の平文データをブロック毎に格納する記憶部と、
前記記憶部に格納された前記第１および第２の平文データのアドレス情報を記録するアドレス情報記憶部とを含む、記録システム。
【請求項２】
前記データ記録部は、前記記憶部に格納された前記第１および第２の平文データを実行する実行部をさらに含み、
前記実行部は、前記プログラムコードに従って、前記アドレス情報記憶部に格納されている前記第１の平文データの先頭アドレスと、前記ヘッダファイルに含まれている関数プロトタイプ宣言データに基づいて前記関数モジュールのエントリアドレスを設定する、請求項１記載の記録システム。
【請求項３】
前記第１および第２の暗号化データは、公開鍵に基づいて暗号化され、
前記復号化処理部は、前記公開鍵と対を成す秘密鍵に基づいて前記連結プログラムに含まれる前記第１および第２の暗号化データを復号化する、請求項１記載の記録システム。
【請求項４】
前記アドレス情報記憶部は、前記第１および第２の平文データにそれぞれ対応する認証情報を格納する、請求項１記載の記録システム。
【請求項５】
前記データ記録部は、前記アドレス情報記憶部に格納されている認証情報に基づいて前記記憶部に格納されている前記第１および第２の平文データに対するアクセスの可否を判断する開示制御部をさらに含む、請求項４記載の記録システム。
【請求項６】
前記コンパイラ部は、
前記第１のプログラムのヘッダファイルに基づいて、前記第２のプログラムが参照する、前記第１のプログラムが有する関数モジュールが前記第１暗号化データに含まれるか否かを判断し、
前記関数モジュールが含まれると判断した場合に、前記第１のプログラムの登録順位および前記関数モジュールの順位に基づいて、前記第２のプログラムが参照する、前記第１のプログラムが有する関数モジュールのアドレスをプログラム実行時に前記データ記録部に格納されている情報に基づいて設定するためのプログラムコードを生成する、請求項１記載の記録システム。
【発明の詳細な説明】
【技術分野】
【０００１】
この開示は、記録システムに関し、暗号化されたプログラムの記録処理に関する。
【背景技術】
【０００２】
近年では、マルチタスク環境でソリューションを複数社のプログラムを組み合わせて解決する手法が主流となっている。
【０００３】
一方で、各社のプログラムが互いに協調してソリューションを解決する場合には、プログラムが扱う情報の著作権や、プログラム自体の著作権を保護するために、プログラムの秘密を守る仕組みが必要となってくる。
【０００４】
マルチタスク環境で、プログラムとそれが扱う情報の覗き見や改変を防止するために、暗号化する手法がとられている。
【０００５】
しかしながら、互いに協調して動作するプログラムの場合には、相手プログラムが暗号化されていると、容易に取り扱うことはできない。
【０００６】
したがって、耐タンパのマイクロプロセッサ等の内部で暗号化したプログラムを復号化しながら動作させる方式等が提案されている（特許文献１および２）。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００３−２８０９８９号公報
【特許文献２】特許第６０４８７１０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、特許文献１および２に記載の方式では、ハードウェアの内部処理中に復号処理や秘密保護判定処理等の処理が必要となり、処理負荷が大きいという課題がある。
【０００９】
また、当該処理の動作きっかけとして、ＯＳからのタスク呼び出し時に解決するため、使用可能なのがマルチタスク環境下に限られるという問題も存在する。
【００１０】
本開示は、上記の課題を解決するためになされたものであって、簡易な方式で互いに協調して動作するプログラムの機密性を保護することが可能な記録システムを提供する。
【００１１】
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１２】
ある局面に従う記録システムは、第１データ生成部と、第２データ生成部と、データ記録部とを備える。第１データ生成部は、第１のプログラムに対して、コンパイルした第１の平文データを暗号化して第１暗号化データとして出力する。第２データ生成部は、第１のプログラムと協働して動作する第２のプログラムに対して、第１暗号化データと連結した連結プログラムを出力する。データ記録部は、第２データ生成部から出力された連結プログラムを格納する。第２データ生成部は、第２のプログラムをコンパイルした第２の平文データを生成するコンパイラ部と、第２の平文データを暗号化して第２暗号化データとして出力する暗号化処理部と、第１暗号化データと、第２暗号化データとを連結するリンカ部と、リンカ部で連結した連結プログラムをデータ記録部に出力するデバッガ部とを含む。コンパイラ部は、第２の平文データに対して、第１暗号化データとは別に送付される第１のプログラムのヘッダファイルに基づいて、第２のプログラムが参照する、第１のプログラムが有する関数モジュールのアドレスをプログラム実行時にデータ記録部に格納されている情報に基づいて設定するためのプログラムコードを生成する。データ記録部は、連結プログラムを復号化する復号化処理部と、復号化された第１および第２の平文データをブロック毎に格納する記憶部と、記憶部に格納された第１および第２の平文データのアドレス情報を記録するアドレス情報記憶部とを含む。
【発明の効果】
【００１３】
一実施例によれば、本開示のデータ記録システムは、簡易な方式で互いに協調して動作するプログラムの機密性を保護することが可能である。
【図面の簡単な説明】
【００１４】
【図１】実施形態に従うデータ記録システム１の概略構成を説明する図である。
【図２】実施形態に従うデータ生成装置２Ａおよび２Ｂの機能ブロック図である。
【図３】実施形態に従うデータ生成装置２Ａおよび２Ｂの具体的処理を説明する図である。
【図４】実施形態に従うデータ記録装置の機能ブロック図である。
【図５】実施形態に従うコンパイラ部３０の処理について説明する図である。
【図６】実施形態に基づくコンパイラ部２０の処理を説明するフロー図である。
【図７】実施形態に従うデータ記録装置１０のデータ格納処理について説明するフロー図である。
【図８】実施形態に従うデータ記録装置１０のデータ読出処理について説明するフロー図である。
【発明を実施するための形態】
【００１５】
実施形態について図面を参照しながら詳細に説明する。なお、図中同一または相当部分には同一符号を付し、その説明は繰り返さない。
【００１６】
図１は、実施形態に従うデータ記録システム１の概略構成を説明する図である。
図１を参照して、データ記録システム１は、データ生成装置２Ａ，２Ｂと、データ記録装置１０とを含む。本例においては、データ記録装置１０は、一例としてＭＣＵ（Micro Controller Unit）である。
【００１７】
データ生成装置２Ａは、プログラムＡの入力およびデータ生成装置２ＢからのプログラムＢの暗号化データの入力に基づいてデータ記録装置１０に格納するプログラムＡおよびＢの連結プログラムを出力する。なお、プログラムＡは、プログラムＢと協働して動作し、プログラムＡは、プログラムＢに含まれる関数モジュールを参照する。データ生成装置２Ａは、データ生成装置２Ｂからの暗号化データとは別に送付されるプログラムＢのヘッダファイルを取得する。
【００１８】
データ生成装置２Ｂは、データ生成装置２ＡにプログラムＢの暗号化データを出力する。
【００１９】
なお、本例においては、２つのプログラムＡおよびＢの連結プログラムについて説明するが、特にこれに限られず２つ以上であれば良くその個数は限定されない。
【００２０】
図２は、実施形態に従うデータ生成装置２Ａおよび２Ｂの機能ブロック図である。
図２を参照して、本例においては、Ｘ社およびＹ社がそれぞれプログラムＡおよびＢを作成する場合について説明する。
【００２１】
データ生成装置２Ａは、コンパイラ部２０と、暗号化処理部２２と、リンカ部２４と、デバッガ部２５とを含む。
【００２２】
データ生成装置２Ｂは、コンパイラ部３０と、暗号化処理部３２とを含む。
コンパイラ部２０は、本例においては、Ｘ社のプログラムＡを平文データ（プログラムコードＡ）にコンパイルする。
【００２３】
コンパイラ部３０は、Ｙ社のプログラムＢを平文データ（プログラムコードＢ）にコンパイルする。
【００２４】
暗号化処理部２２は、コンパイラ部２０でコンパイルされた平文データ（プログラムコードＡ）を暗号化処理する。本例においては、プログラムコードＡが暗号化された状態であることがハッチングにより示されている。
【００２５】
暗号化処理部３２は、コンパイラ部３０でコンパイルされた平文データ（プログラムコードＢ）を暗号化処理する。本例においては、プログラムコードＢが暗号化された状態であることがハッチングにより示されている。
【００２６】
リンカ部２４は、暗号化処理部２２，３２から出力される暗号化データをそれぞれ受けて、連結プログラムを生成する。
【００２７】
デバッガ部２６は、生成した連結プログラムをデータ記録装置１０に出力する。
なお、本例においては、データ生成装置２Ａにおいて、リンカ部２４およびデバッガ部２６を設けた構成について説明するが、特にこれに限らずデータ生成装置２Ｂがリンカ部２４およびデバッガ部２６を有する構成としても良い。
【００２８】
図３は、実施形態に従うデータ生成装置２Ａおよび２Ｂの具体的処理を説明する図である。
【００２９】
図３を参照して、本例においては、Ｘ社およびＹ社がそれぞれプログラムＡおよびＢを作成する場合が示されている。一例として、プログラムＡは、プログラムＢと協働して動作し、プログラムＡは、プログラムＢに含まれるＡＰＩ（Application Programming Interface）（関数モジュール）を参照する。
【００３０】
コンパイラ部２０および３０は、それぞれプログラムＡおよびＢを平文データ（プログラムコード）にコンパイルする。
【００３１】
暗号化処理部２２，３２は、認証情報を含めた状態で平文データを暗号化処理する。暗号化処理は、公開鍵暗号方式を用いる。公開鍵は、Ｘ社およびＹ社に提供されており、公開鍵と対を成す秘密鍵はデータ記録装置１０にあらかじめ格納されている。
【００３２】
リンカ部２４は、暗号化処理部２２，３２で暗号化処理されたプログラムＡの暗号化データと、プログラムＢの暗号化データとを連結して１つの連結プログラムとしてデバッガ部２５に出力する。
【００３３】
デバッガ部２５は、当該連結プログラムをデータ記録装置１０に出力する。
図４は、実施形態に従うデータ記録装置の機能ブロック図である。
【００３４】
図４を参照して、データ記録装置１０は、Ｉ／Ｆ１００と、コマンド解析部１１０と、復号処理部１０２と、書込部１０４と、実行部１１１と、読出部１１２と、開示制御部１１４と、プログラムメモリ１０６と、領域管理部１０８とを含む。
【００３５】
Ｉ／Ｆ１００は、外部からのデータの授受を実行する。
Ｉ／Ｆ１００は、データ生成装置２Ａからの連結プログラムを受信した場合には、コマンド解析部１１０に出力する。
【００３６】
コマンド解析部１１０は、格納命令とともに連結プログラムを受信した場合には、復号処理部１０２に出力する。
【００３７】
復号処理部１０２は、秘密鍵により連結プログラムを構成する暗号化データを復号処理する。
【００３８】
復号処理部１０２は、復号処理した平文データを書込部１０４に出力する。
書込部１０４は、プログラムメモリ１０６に平文データを書き込む。書込部１０４は、プログラムメモリ１０６に平文データを書き込んだ際のプログラムメモリ１０６のアドレス情報を領域管理部１０８に登録する。また、書込部１０４は、平文データに対応する認証情報を領域管理部１０８に登録する。当該認証情報は、データ読出の際に用いられる。
【００３９】
コマンド解析部１１０は、Ｉ／Ｆ１００を介して読出命令を受信した場合には、開示制御部１１４に出力する。
【００４０】
開示制御部１１４は、領域管理部１０８に格納されている認証情報に基づいてプログラムメモリ１０６に格納されている平文データのデータ読出の可否を判断する。
【００４１】
開示制御部１１４は、データ読出が可能であると判断した場合にはデータ読出処理を実行するように読出部１１２に指示する。読出部１１２は、プログラムメモリ１０６に格納されている平文データを読み出して、開示制御部１１４に出力する。開示制御部１１４は、Ｉ／Ｆ１００を介して外部に出力する。
【００４２】
コマンド解析部１１０は、Ｉ／Ｆ１００を介して実行命令を受信した場合には、実行部１１１に出力する。
【００４３】
実行部１１１は、コマンド解析部１１０からの実行指示に従ってプログラムメモリ１０６に格納されている平文データを実行する。
【００４４】
当該方式により、データ生成装置２Ａは、データ記録装置１０に格納する前段階において、プログラムＡおよびＢについて、それぞれ暗号化処理された暗号化データを連結する。そして、データ生成装置２Ａは、連結プログラムをデータ記録装置１０に出力する。
【００４５】
したがって、機密性が担保されている。すなわち、Ｙ社は、Ｘ社にＹ社のプログラムＢの暗号化データを提供するのみであり、平文データを提供していない。
【００４６】
また、データ記録装置１０内部において、プログラムメモリ１０６には、プログラムＡの平文データと、プログラムＢの平文データとが格納されている。
【００４７】
実行部１１１は、プログラムメモリ１０６に格納されている平文データに基づいて所定の処理を実行することが可能である。したがって、実行部１１１がプログラムを実行する際には、復号処理や秘密保護判定処理等の処理が不要であり、高速な処理が可能である。
【００４８】
次に、実施形態に従うコンパイラ部２０のコンパイルについて説明する。
図５は、実施形態に従うコンパイラ部２０の処理の具体例について説明する図である。
【００４９】
図５（Ａ）は、比較例として従来のコンパイルの一例について説明する図である。
本例においては、関数読み出し側（プログラムＡ）と、関数の被読み出し側（プログラムＢ）とがともに平文データとして示されている。
【００５０】
従来、リンカ部でプログラムＡおよびＢの連結処理を実行する場合、参照関係が規定された状態で連結処理が実行される。すなわち、プログラムＡおよびＢの平文データが入力されて、リンカ部でその参照関係を構築する結合処理を実行していた。
【００５１】
したがって、従来、リンカ部では平文データの結合処理を実行する必要があるためＹ社は、Ｘ社に対してプログラムＢの平文データを提供する必要があった。
【００５２】
実施形態に従うリンカ部２４には、プログラムＡの暗号化データと、プログラムＢの暗号化データが入力される。したがって、リンカ部２４においては、参照関係を構築する結合処理は実行できない。
【００５３】
リンカ部２４は、プログラムＡの暗号化データと、プログラムＢの暗号化データとを纏めた１つの連結プログラムを生成することができず，プログラム開発者に対してエラーを通知するのみであった。
【００５４】
図５（Ｂ）は、実施形態に従うコンパイラ部２０の処理の一例について説明する図である。
【００５５】
コンパイラ部２０は、プログラムＡのコンパイルの前にデータ生成装置２Ｂからの暗号化データとは別に送付されるプログラムＢのヘッダファイルを取得する。
【００５６】
プログラムＢのヘッダファイルは、プログラムＢに含まれるＡＰＩ（Application Programming Interface）関数のインタフェース仕様の明示にあたる「プロトタイプ宣言」を記載したものである。
【００５７】
また、プログラムＢのヘッダファイルには、プログラムＢに含まれるＡＰＩ関数のデータが暗号化されていることを示す記述が記載されている。
【００５８】
ＡＰＩ関数が暗号化されていることをコンパイラ部２０が知り得る必要が有るため、「#pragma」記述等を用いて「プロトタイプ宣言」の開始/終了点を明示したヘッダファイルが提供される。
【００５９】
一例として、ヘッダファイルには、下記の如く記述されている。
「#pragma crypted_api start
void api_XYZ0()
void api_XYZ1()
#pragma crypted_api end」
また、Ｘ社は、データ生成装置２Ａに対して、ビルド情報を提供している。
【００６０】
具体的には、プログラムＡをコンパイルし、プログラムＢとリンカで連結する旨のビルド情報が提供されている。当該ビルド情報に基づいて、データ記録装置１０内部のプログラムメモリ１０６に平文データを格納する際の登録順序を把握することが可能である。
【００６１】
具体的には、プログラムＡの平文データが最初に登録される。そして、次に、プログラムＢの平文データが登録される。
【００６２】
Ｙ社は、プログラムＢのＡＰＩ関数のエントリテーブルを設けている。
一例として、下記の如く記述されている。
「_api_xyz0:jmp_entitiy_XYZ0
_api_xyz1:jmp_entitiy_XYZ1」
コンパイラ部２０は、ヘッダファイルの「#pragma」記述により開始/終了点に宣言されたＡＰＩ関数が暗号化されている点を認識する。
【００６３】
コンパイラ部２０は、「api_XYZ1()関数」を呼び出す際に、「api_XYZ1()関数」を直接呼び出すと「api_XYZ1()関数」のラベル名称がＸ社の平文データに残存し、リンカ部２４はこのラベルを解決できないためリンクエラーとなる。
【００６４】
したがって、コンパイラ部２０は、コンパイルの際に「api_XYZ1()関数」の呼び出しを検出すると、ヘッダファイルに格納されている「プロトタイプ宣言」から、Ｙ社のプログラムＢの暗号化データ内に当該参照するＡＰＩ関数が存在することを識別する。
【００６５】
コンパイラ部２０は、Ｙ社のプログラムＢの平文データが最終的に配置されるアドレスは分からない。一方で、データ生成装置２Ａに対するビルド情報からＹ社のプログラムＢの平文データが２番目に配置される平文データであることを識別する。さらに、コンパイラ部２０は、プログラムＢのヘッダファイルに格納されている「プロトタイプ宣言」から「api_XYZ1()関数」がＹ社のプログラムＢの２番目のＡＰＩ関数であることを識別する。
【００６６】
コンパイラ部２０は、上記識別結果に基づいて、領域管理部１０８に２番目に格納されたデータのアドレス情報をプログラムＢのエントリテーブルの先頭アドレスと認識する。
【００６７】
コンパイラ部２０は、プログラムＢのヘッダファイルの「プロトタイプ宣言」において、「api_XYZ1()」が２番目に宣言されていることに従って、エントリテーブル内の２つ目が「api_XYZ1()」に到達する分岐命令が書かれている場所と認識する。
【００６８】
コンパイラ部２０は、上記２つの認識結果に基づいて、エントリテーブル内の２つ目の配置アドレスを「api_XYZ1()」のエントリアドレスとして関数呼び出しを行うプログラムコードを生成する。
【００６９】
一例として、下記の如く生成する。
「mov Base，エントリテーブル開始番地
CALL[Base+Offset1]」
コンパイラ部２０により生成されたプログラムコードは、実行部１１１によるプログラムメモリ１０６上での動作時に領域管理部１０８からＹ社の平文データのエントリテーブルの開始アドレスを読み出し、エントリテーブル内のオフセットアドレスOffset1を加算した値を「api_XYZ1()関数」のエントリアドレスとして関数呼び出しを実行する。
【００７０】
このように、「api_XYZ1()関数」の開始アドレス値は、動作時における算出により設定される。
【００７１】
図６は、実施形態に基づくコンパイラ部２０の処理を説明するフロー図である。
図６を参照して、ソースの記述は、ＡＰＩ関数の呼び出しであるか否かを判断する（ステップＳ２）。
【００７２】
ステップＳ２において、ソースの記述が、ＡＰＩ関数の呼び出しであると判断した場合（ステップＳ２においてＹＥＳ）には、呼び出す関数の実体は、ヘッダファイルに基づいて暗号化データに含まれるか否かを判断する（ステップＳ４）。ヘッダファイルの「#pragma」記述により開始/終了点に宣言されたＡＰＩ関数が含まれているか否かを判断する。
【００７３】
ステップＳ４において、呼び出す関数の実体は、ヘッダファイルに基づいて暗号化データに含まれると判断した場合（ステップＳ４においてＹＥＳ）には、ＡＰＩ関数を間接的に呼び出すプログラムコードを生成する（ステップＳ６）。
【００７４】
具体的には、平文データからプログラムコードを生成する際に「Base」「Offset」を規定して生成する。
【００７５】
「Base」は、領域管理部１０８から取得するエントリテーブルの開始番地となる。
「Offset」は、「api_XYZ1()関数」のプロトタイプ宣言順位にエントリテーブルで使用している分岐命令の命令長を乗じた値となる。
【００７６】
「FunctionEntryAddress」は、実施形態の一例として説明用に設けた「Base＋Offset」の値を示す用語である。「FunctionEntryAddress」の値は、エントリテーブルに書かれた「api_XYZ1()関数」の仮のエントリアドレスとなる。
【００７７】
「FunctionEntryAddress」を呼び出すプログラムコードを生成する。
そして、次に、ファイル終端か否かを判断する（ステップＳ１０）。
【００７８】
ステップＳ１０において、ファイル終端であると判断した場合（ステップＳ１０においてＹＥＳ）には、処理を終了する（エンド）。
【００７９】
一方、ステップＳ１０において、ファイル終端で無いと判断した場合（ステップＳ１０においてＮＯ）には、解析対象を次の行に変更する（ステップＳ１２）。
【００８０】
そして、ステップＳ２に進み、上記処理を繰り返す。
一方、ステップＳ２において、ソースの記述がＡＰＩ関数の呼び出しでないと判断した場合（ステップＳ２においてＮＯ）あるいは、ステップＳ４において、呼び出す関数の実体は、ヘッダファイルに基づいて暗号化データに含まれないと判断した場合（ステップＳ４においてＮＯ）には、通常の平文データを生成する（ステップＳ８）。
【００８１】
そして、ステップＳ１０に進む。
図７は、実施形態に従うデータ記録装置１０のデータ格納処理について説明するフロー図である。
【００８２】
図７を参照して、データ記録装置１０は、データを取得する（ステップＳ２０）。具体的には、Ｉ／Ｆ１００は、データ生成装置２Ａから連結プログラムを受信する。Ｉ／Ｆ１００は、受信した連結プログラムをコマンド解析部１１０に出力する。コマンド解析部１１０は、格納命令に従って復号処理部１０２に連結プログラムを出力する。
【００８３】
次に、データ記録装置１０は、復号処理を実行する（ステップＳ２２）。復号処理部１０２は、秘密鍵に基づいて復号処理する。そして、復号処理部１０２は、書込部１０４に復号処理した連結プログラムの平文データを出力する。
【００８４】
次に、データ記録装置１０は、データ書込を実行する（ステップＳ２４）。書込部１０４は、復号処理部１０２から出力された平文データをプログラムメモリ１０６に格納するデータ書込を実行する。具体的には、復号処理された連結プログラムは、プログラムＡおよびＢの平文データを含む。したがって、書込部１０４は、プログラムＡおよびＢの平文データをそれぞれブロック単位でプログラムメモリ１０６に格納するデータ書込を実行する。
【００８５】
次に、データ記録装置１０は、管理情報を書き込む（ステップＳ２６）。書込部１０４は、プログラムＡおよびＢの平文データをブロック単位でプログラムメモリ１０６に格納する際に書き込んだ開始番地および終了番地に関する管理情報を領域管理部１０８に格納する。また、書込部１０４は、プログラムＡおよびＢの認証情報を管理情報として領域管理部１０８に格納する。
【００８６】
次に、データ記録装置１０は、他に書き込むデータがあるか否かを判断する（ステップＳ３０）。
【００８７】
ステップＳ３０において、データ記録装置１０は、他に書き込むデータがあると判断した場合（ステップＳ３０においてＹＥＳ）には、ステップＳ２０に戻り、上記処理を繰り返す。一方、ステップＳ３０において、データ記録装置１０は、他に書き込むデータが無いと判断した場合（ステップＳ３０においてＮＯ）には、処理を終了する（エンド）。
【００８８】
図８は、実施形態に従うデータ記録装置１０のデータ読出処理について説明するフロー図である。
【００８９】
図８を参照して、データ記録装置１０は、読出指示があるか否かを判断する（ステップＳ４０）。具体的には、Ｉ／Ｆ１００は、外部からコマンドを受信した場合には、コマンド解析部１１０に出力する。コマンド解析部１１０は、外部からのコマンドが読出指示であるか否かを判断する。
【００９０】
ステップＳ４０において、データ記録装置１０は、読出指示があると判断した場合（ステップＳ４０においてＹＥＳ）には、認証情報を取得する（ステップＳ４２）。コマンド解析部１１０は、外部からのコマンドが読出指示であると判断した場合には、開示制御部１１４に通知する。開示制御部１１４は、コマンド解析部１１０からの通知に従って認証情報を取得する。具体的には、外部からのコマンドに認証情報が含まれている場合には、当該認証情報を取得しても良いし、あるいは、開示制御部１１４が読出指示を出力した外部装置に対して認証情報を要求し、当該要求に対して外部装置から認証情報を取得しても良い。
【００９１】
次に、データ記録装置１０は、認証情報が一致するか否かを判断する（ステップＳ４４）。開示制御部１１４は、読出指示に含まれているデータ読出のデータの認証情報が一致するか否かを判断する。具体的には、プログラムＡのデータ読出の場合には、領域管理部１０８に格納されている認証情報を読み出して、それが取得した認証情報と一致するか否かを判断する。あるいは、プログラムＢのデータ読出の場合には、領域管理部１０８に格納されている認証情報を読み出して、それが取得した認証情報と一致するか否かを判断する。
【００９２】
ステップＳ４４において、データ記録装置１０は、認証情報が一致すると判断した場合（ステップＳ４４においてＹＥＳ）には、データ読出を許可する（ステップＳ４６）。開示制御部１１４は、認証情報が一致すると判断した場合には、データ読出を許可して読出部１１２に通知する。読出部１１２は、開示制御部１１４からの指示に従ってプログラムメモリ１０６に格納されている指定されたプログラムの平文データを読み出す。そして、開示制御部１１４に出力する。開示制御部１１４は、読出部１１２から読み出されたデータをＩ／Ｆ１００を介して外部装置に出力する。
【００９３】
そして、処理を終了する（エンド）
一方、ステップＳ４４において、データ記録装置１０は、認証情報が一致しないと判断した場合（ステップＳ４４においてＮＯ）には、データ読出を不許可とする（ステップＳ４８）。開示制御部１１４は、認証情報が一致しないと判断した場合には、データ読出を不許可として読出部１１２に通知しない。
【００９４】
そして、処理を終了する（エンド）。
実施形態に従う方式により、データ記録装置１０の外部においては、暗号化データとして機密性が保護される。
【００９５】
また、データ記録装置１０の内部においては、平文データとしてプログラムメモリ１０６に格納されるためデータの取り扱いが容易であり処理負荷を軽減することが可能である。
【００９６】
また、認証情報が一致する場合にデータ読出が許可されるためプログラムメモリ１０６に格納される平文データの機密性を担保することが可能である。
【００９７】
以上、本開示を実施形態に基づき具体的に説明したが、本開示は、実施形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【符号の説明】
【００９８】
１  データ記録システム、２Ａ，２Ｂ  データ生成装置、１０  データ記録装置、２０，３０  コンパイラ部、２２，３２  暗号化処理部、２４  リンカ部、２５  デバッガ部、１０２  復号処理部、１０４  書込部、１０６  プログラムメモリ、１０８  領域管理部、１１０  コマンド解析部、１１１  実行部、１１２  読出部、１１４  開示制御部。
【図１】
2020181522.tif 000003
【図２】
2020181522.tif 000004
【図３】
2020181522.tif 000005
【図４】
2020181522.tif 000006
【図５】
2020181522.tif 000007
【図６】
2020181522.tif 000008
【図７】
2020181522.tif 000009
【図８】
2020181522.tif 000010