(57)【要約】【課題】マイクロコントローラのセキュア状態の維持性能を向上させる。【解決手段】マイクロコントローラは、ＣＰＵと暗号処理回路とを備え、第１のプログラムが暗号処理回路を使用するとき、第２のプログラムが第１のプログラムのインストール情報と予め暗号化されたプログラムインストール情報とを暗号処理回路に送信する。暗号処理回路は、暗号化されたプログラムインストール情報を復号し、第１のプログラムのインストール情報と比較する。一致した場合は、第１のプログラムによる暗号処理回路の使用を許可する。【選択図】図６
2020098506.tif 000002
【特許請求の範囲】
【請求項１】
ＣＰＵと、
暗号処理回路と、を備えたマイクロコントローラであって、
前記ＣＰＵは、
前記暗号処理回路を使用する第１のプログラムと、
前記第１のプログラムが前記暗号処理回路を使用するときに、前記第１のプログラムのインストール情報と、予め暗号化されたプログラムインストール情報とを前記暗号処理回路に送信する第２のプログラムと、
を実行し、
前記暗号処理回路は、前記暗号化されたプログラムインストール情報を復号し、当該復号したプログラムインストール情報と、前記第１のプログラムのインストール情報とを比較し、比較の結果、一致した場合は前記第１のプログラムによる前記暗号処理回路の使用を許可する、
マイクロコントローラ。
【請求項２】
前記ＣＰＵはオペレーティングシステムを動作させ、
前記プログラムインストール情報には、前記オペレーティングシステムの特権ユーザがプログラムをインストールすることができるディレクトリ情報が含まれる、請求項１に記載のマイクロコントローラ。
【請求項３】
前記暗号処理回路は、ＨＡＳＨ回路、乱数生成回路、電子証明検証回路のうち少なくとも１つを備え、前記比較で一致した場合に使用可能となる、請求項２に記載のマイクロコントローラ。
【請求項４】
前記暗号処理回路は、前記比較が不一致だった場合は、以降のアクセスを禁止するアクセス管理回路を備える、請求項３に記載のマイクロコントローラ。
【請求項５】
前記第２のプログラムは、プログラムのインストールが行われたとき、インストールされたプログラムのインストール情報と、前記暗号化されたプログラムインストール情報とを前記暗号処理回路に送信し、
前記暗号処理回路は、前記暗号化されたプログラムインストール情報を復号し、当該復号されたプログラムインストール情報に前記プログラムのインストール情報を追加し、当該インストール情報が追加されたプログラムインストール情報を暗号化して前記第２のプログラムへ通知する、請求項３に記載のマイクロコントローラ。
【請求項６】
前記第２のプログラムは、前記暗号処理を制御するためのドライバである、請求項３に記載のマイクロコントローラ。
【請求項７】
前記第２のプログラムは、複数のドライバを有し、
前記ＣＰＵは、前記複数のドライバが予め決められた順序で実行されなかった場合は異常処理と判断する、請求項６に記載のマイクロコントローラ。
【請求項８】
バスインターフェースと、
暗号処理回路と、を備える半導体装置であって、
前記暗号処理回路は、
前記バスインターフェースを介してプログラムインストール情報と、暗号化されたプログラムインストール情報とを受信し、
前記暗号化されたプログラムインストール情報を復号し、当該復号されたプログラムインストール情報と前記プログラムインストール情報とを比較し、一致した場合は前記プログラムインストール情報に対応するプログラムからのリクエストを許可する、
半導体装置。
【請求項９】
演算処理回路を更に備え、
前記比較で一致となった場合に前記演算処理回路を使用するリクエストを許可する、請求項８に記載の半導体装置。
【請求項１０】
前記演算処理回路は、ＨＡＳＨ生成、乱数生成、電子証明検証のうち少なくとも１つを処理可能である、請求項９に記載の半導体装置。
【請求項１１】
前記バスインターフェースと前記暗号処理回路との間にアクセス管理回路を更に備え、
前記アクセス管理回路は、前記比較が不一致だった場合は、以降の前記暗号処理回路へのアクセスを禁止する、請求項９に記載の半導体装置。
【請求項１２】
ＣＰＵと、
暗号処理回路と、
予め暗号化されたインストール情報を格納したメモリと、
前記ＣＰＵで実行するタスクの切り替えを管理するタスク管理回路と、を備えるマイクロコントローラであって、
前記タスク管理回路は、
第1のタスクに対応するインストール情報を格納する記憶回路を有し、
前記ＣＰＵで実行するタスクを前記第１のタスクに切り替えるとき、前記インストール情報を前記暗号処理回路に送信し、
前記暗号処理回路は、前記暗号化されたインストール情報を復号し、当該復号されたインストール情報と前記インストール情報とを比較し、一致した場合は前記第１のタスクによる暗号処理回路の使用を許可する、
マイクロコントローラ。
【請求項１３】
前記タスク管理回路は、前記ＣＰＵが前記第１のタスクを処理中にタスク切り替えのリクエストを受けた場合は、前記第１のタスクに対応するインストール情報を前記記憶回路に格納する、請求項１２に記載のマイクロコントローラ。
【請求項１４】
タスクの切り替え時にタスクに必要なコンテキストを退避するための退避レジスタを更に備える、請求項１３に記載のマイクロコントローラ。
【請求項１５】
前記タスク管理回路は、タスク毎に設定されている優先度に応じてタスクの切り替えを行う、請求項１３に記載のマイクロコントローラ。
【請求項１６】
前記暗号処理回路は、ＨＡＳＨ生成、乱数生成、電子証明検証のうちの少なくとも１つを処理可能である、請求項１３に記載のマイクロコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイクロコントローラ及び半導体装置におけるセキュリティ技術に関する。
【背景技術】
【０００２】
マイクロコントローラにおいて、悪意のあるプログラムによるデータ改竄や、セキュリティデータ処理に使われる暗号鍵の漏洩を防止するため、様々な対策が行われている。
【０００３】
マイクロコントローラで実行されるプログラムは、一般に、ファームウェア、オペレーティングシステム（ＯＳ）、ドライバ、ミドルウェア（ライブラリとも呼ばれる）、アプリケーションといった階層構造が取られるが、セキュリティ対策もこの階層構造を考慮して行う必要がある。
【０００４】
特許文献１には、ソフトウェアの階層構造を考慮したセキュリティ対策に関する技術が記載されている。より具体的には、メインプログラムと、メインプログラムから呼び出されるサブプログラムとで構成されるプログラムを実行する時、サブプログラムからメインプログラムに戻る時の戻り先アドレスを取得する。取得した戻り先アドレスに基づいて、メインプログラムが実行可能状態のメモリ領域にあるか、予め登録されている属性情報と一致するかどうかを、ＯＳを使って判断する。実行可能状態のメモリ領域にあり、属性情報も一致した場合は、そのメインプログラムは正規のものと判断され、そうでなければ不正のものとして、プログラムの実行が中止される。
【０００５】
ここで、サブプログラムとは、例えばセキュリティ機能を提供するプラグインである。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００７−１４８９６２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、メインプログラムが正規なものであるかどうかを、ＯＳを含めたソフトウェアで実現しているため、セキュリティ対策が十分とは言えない。ソフトウェアの場合、ソフトウェアの不具合を利用した情報改竄、漏洩の技術が知られているからである。
【０００８】
その他の課題および新規な特徴は、本明細書および図面の記載から明らかになる。
【課題を解決するための手段】
【０００９】
一実施の形態に係るマイクロコントローラは、ＣＰＵと暗号処理回路とを備え、第１のプログラムが暗号処理回路を使用するとき、第２のプログラムが第１のプログラムのインストール情報と予め暗号化されたプログラムインストール情報とを暗号処理回路に送信する。暗号処理回路は、暗号化されたプログラムインストール情報を復号し、第１のプログラムのインストール情報と比較する。一致した場合は、第１のプログラムによる暗号処理回路の使用を許可する。
【００１０】
他の実施の形態に係るマイクロコントローラは、ＣＰＵと、暗号処理回路と、予め暗号化されたインストール情報を格納したメモリと、タスク管理回路とを備え、タスク管理回路はタスク切り替え時にタスクに対応するインストール情報を暗号処理回路に送信する。暗号処理回路は、暗号化されたインストール情報を復号し、インストール情報と比較する。一致した場合は切り替わったタスクによる暗号処理回路の使用を許可する。
【発明の効果】
【００１１】
一実施の形態に係るマイクロコントローラでは、マイクロコントローラのセキュリティ能力を向上させることができる。
【図面の簡単な説明】
【００１２】
【図１】実施の形態１に係るマイクロコントローラの構成を示すブロック図である。
【図２】実施の形態１に係るマイクロコントローラ上のソフトウェアスタックのブロック図である。
【図３】実施の形態１に係る暗号ドライバと暗号処理回路のブロック図である。
【図４】実施の形態１に係るディレクトリ構成図である。
【図５】実施の形態１に係るプログラムのインストール及び登録方法を示すフローチャートである。
【図６】実施の形態１に係るプログラムの動作を示すフローチャートである。
【図７】実施の形態１に係るプログラムのインストールディレクトリを取得するためのコードの一例である。
【図８】実施の形態１の変形例に係る暗号処理ライブラリの構成例を示すブロック図である。
【図９】実施の形態１の変形例に係る動作例を示すフローチャートである。
【図１０】実施の形態２に係るマイクロコントローラの構成を示すブロック図である。
【図１１】実施の形態２に係るＣＰＵコアとハードウェアＯＳのブロック図である。
【図１２】実施の形態２に係るプログラムの動作を示すフローチャートである。
【発明を実施するための形態】
【００１３】
以下、一実施の形態に係るマイクロコントローラについて、図面を参照して詳細に説明する。なお、明細書および図面において、同一の構成要件または対応する構成要件には、同一の符号を付し、重複する説明は省略する。また、図面では、説明の便宜上、構成を省略または簡略化している場合もある。また、各実施の形態の少なくとも一部は、互いに任意に組み合わされてもよい。
【００１４】
［実施の形態１］
（マイクロコントローラの構成）
図１は、実施の形態１に係るマイクロコントローラの構成を示すブロック図である。
【００１５】
図１に示されるように、マイクロコントローラ１０は、ＣＰＵ（Central Processing Unit）コア２０、プログラムメモリ４０、メモリ５０、内部バス７０、暗号処理回路３０、周辺回路６０を有する。マイクロコトンローラ１０は好ましくは１つの半導体チップ上で構成されるが、プログラムメモリやメモリは別の半導体チップであっても構わない。
【００１６】
ＣＰＵコア２０は、プログラムメモリ４０に格納されているＯＳ（Operating System）、アプリケーションプログラム、ミドルウェア、暗号処理回路用ドライバソフトウェア、Ｉ／Ｏ用ドライバソフトウェア等の各種ソフトウェアを実行する。プログラムメモリ４０としては、フラッシュメモリ、ＲＯＭ（Read Only Memory）が利用可能である。また、プログラムメモリ４０に格納されているプログラムをＣＰＵコア２０が実行する際、フラッシュメモリあるいはＲＯＭから直接プログラムを読み出しても良いし、一旦、ＳＲＡＭ（Static Random Access Memory）にプログラムを展開し、ＳＲＡＭからプログラムを読み出すようにしても良い。
【００１７】
メモリ５０は、ＣＰＵコア２０や暗号処理回路３０の処理用データや処理結果データを格納するものである。ＳＲＡＭやＤＲＡＭ（Dynamic Random Access Memory）で構成される。
【００１８】
内部バス７０は、ＣＰＵコア２０、プログラムメモリ４０、メモリ５０、暗号処理回路３０、周辺回路６０が所定のプロトコルに基づいて通信を行うためのバスである。内部バス７０には、アドレス、データ、制御信号が含まれる。図１では、１つの内部バスが示されているが、複数のバスで構成することも可能である。例えば、ＣＰＵコア２０とプログラムメモリ４０とを接続するバスと、ＣＰＵコア２０と暗号処理回路３０とを接続するバスとを別のバスにすることも可能である。
【００１９】
周辺回路６０は、有線または無線の通信インターフェース、シリアル通信インターフェースや表示装置等を接続するための回路である。図１では１つの周辺回路を示しているが、複数の周辺回路を搭載可能である。
【００２０】
暗号処理回路３０は、暗号処理を行うためのハードウェアであり、バスインターフェース３１、アクセスマネジメント３２、暗号エンジン３３、ＡＬＵ（Arithmetic and Logic Unit）３４、汎用レジスタ３５、乱数生成回路３６、ＨＡＳＨ回路３７を有する。
【００２１】
バスインターフェース３１は内部バス７０との通信を行うためのものであり、暗号処理回路３０宛てのリクエストの取得と、暗号処理回路３０の処理結果の返送を行う。
【００２２】
アクセスマネジメント３２は、特定のリクエストだけが暗号エンジン３３、ＡＬＵ３４、汎用レジスタ３５にアクセスできるように管理を行う。詳細は後述する。
【００２３】
暗号エンジン３３は、指定された情報に対して特定のアルゴリズムの暗号化または復号を行うハードウェアである。暗号化・復号のアルゴリズムとしては、共通鍵方式や公開鍵方式が使用可能である。具体的には、共通鍵方式としてＡＥＳ（Advanced Encryption Standard）、ＤＥＳ（Data Encryption Standard）、公開鍵方式としてＲＳＡ（Rivest-Shamir-Adleman cryptosystem）が広く知られており、本実施の形態でも利用可能である。
【００２４】
ＡＬＵ３４は、暗号処理に関する演算処理を行うハードウェアである。具体的には、暗号エンジン３３、乱数生成回路３６、ＨＡＳＨ回路３７が処理した結果に対して、追加の演算や、比較を行う。
【００２５】
汎用レジスタ３５は、暗号処理を行うための処理用データや、処理結果データが格納される。好ましくは、汎用レジスタ３５へのアクセスは、アクセスマネジメント３２により、暗号エンジン３３とＡＬＵ３４のみが許可される。
【００２６】
乱数生成回路３６は乱数を生成する回路であり、好ましくは真性乱数を生成する。ＨＡＳＨ回路３７は、入力されたデータに対して特定のアルゴリズムでハッシュ値を生成する回路である。アルゴリズムとして、ＳＨＡ（Secure Hash Algorithm）のＳＨＡ−０、ＳＨＡ−１、ＳＨＡ−２、ＳＨＡ−３が広く知られており、本実施の形態でも利用可能である。
【００２７】
（ソフトウェアの構成）
次いで、本実施の形態に係るマイクロコントローラ１０上で動作するソフトウェアについて説明する。
【００２８】
図２は実施の形態１に係るマイクロコントローラ上のソフトウェアスタックのブロック図であり、マイクロコントローラ１０のＯＳとしてＬｉｎｕｘ（登録商標）を用いた例である。Ｌｉｎｕｘ（登録商標）は大別するとカーネルとユーザランド（カーネル以外の部分）で構成される。カーネルもユーザランドも、実際には非常に多くの要素で構成されるが、ここでは本実施の形態に直接関連する部分のみを記載している。カーネルには、システムコール１３０、プロセス管理１４０、ファイルシステム１５０といった機能が含まれ、ユーザランドにはプログラム８０および９０、インストーラ１００、暗号ライブラリ１１０が含まれる。
【００２９】
システムコール１３０は、アプリケーションプログラム（プロセス）がＯＳの機能を使うときに呼び出される機能である。アプリケーションが別のアプリケーションを呼び出すときにも使われる。プロセス管理１４０は、プロセスの生成や、プロセスごとに設定される優先度に応じてプロセスの管理を行うものである。ファイルシステム１５０は、実行ファイル、データファイルをディレクトリで管理するものである。
【００３０】
暗号ライブラリ１１０は、暗号処理を行うためのプログラム・ライブラリ（関数群）である。マイクロコントローラ１０を使用するユーザが、ハードウェアによる暗号処理を行うアプリケーションプログラムを開発する場合は、この暗号処理ライブラリを呼び出すことで実現できる。暗号ライブラリ１１０は、暗号ドライバ１２０を介して暗号処理回路３０の機能を使うことができる。暗号ライブラリ１１０は、ユーザプログラムからのリクエストに応じて、暗号処理回路３０へ送信するデータの加工と、暗号処理回路３０からのレスポンスをユーザプログラムに返すための処理を行う。
【００３１】
図３は、実施の形態１に係る暗号ドライバと暗号処理回路のブロック図であり、暗号ドライバ１２０の一例である。暗号ドライバ１２０には、暗号化処理１２１、復号処理１２２、乱数生成処理１２３、ＨＡＳＨ計算処理１２４、証明書検証処理１２５、登録処理１２６、照合処理１２７が含まれる。それぞれの処理は関数の形で定義され、暗号処理ライブラリ１１０からの呼び出しを受けて、暗号処理回路３０内の対応する回路、すなわち、暗号エンジン３３、ＡＬＵ３４、汎用レジスタ３５、乱数生成回路３６、ＨＡＳＨ回路３７に処理のリクエストを出す。また、各回路の処理結果を、暗号ライブラリ１１０を介してアプリケーションプログラムに返す。
【００３２】
暗号化処理１２１は、特定の暗号化処理を行うものであり、暗号処理回路３０の暗号エンジン３３を使って処理を行う。上述したように、暗号エンジン３３はＡＥＳ、ＤＥＳ、ＲＳＡなどの暗号化アルゴリズムに対応しており、どの暗号化アルゴリズムを使うかは、アプリケーションプログラムで指定する。あるいは予め設定したルールに基づいて決めれば良い。また、復号処理１２２も暗号化処理１２１と同様に、暗号エンジン３３が暗号データに対して指定されたアルゴリズムで復号を行うものである。
【００３３】
乱数生成処理１２３は、暗号処理１２１に関わる乱数を生成するためのものであり、暗号処理回路３０の乱数生成回路３６を使って処理を行う。乱数生成回路３６が出力した乱数をＡＬＵ３４で加工しても良い。乱数は、例えば鍵の元データとして使用される。ＨＡＳＨ計算処理１２４は、入力データに対するハッシュ値を生成するためのものであり、ＨＡＳＨ回路３７を使って処理を行う。ハッシュ値は、例えば認証用に使用される。ＨＡＳＨ回路３７が出力敷いたハッシュ値をＡＬＵ３４で加工しても良い。
【００３４】
証明書検証処理１２５は、入手した証明書が正当なものかどうかを検証するものであり、暗号処理回路３０の暗号エンジン３３、ＡＬＵ３４、ＨＡＳＨ回路３７を使って処理を行う。例えば、通信相手が本物かどうかを確認するために、通信相手から入手した証明書と、当該証明書を発行した認証局から入手した証明書（ルート証明書）とを用いて検証を行う。より具体的に説明すると、まず、証明書が正規なものである場合、その証明書には公開鍵と、認証局の署名とが入っている。署名とは、証明書の内容のハッシュ値に対して認証局の秘密鍵を用いて暗号化したデータのことである。マイクロコントローラ１０は予めルート証明書を入手しておき、ルート証明書に入っている公開鍵を使って通信相手から入手した証明書内の署名を復号する。ここで復号できなければ通信相手の証明書は正規のものではないことになる。更に、マイクロコントローラ１０は、通信相手から入手した証明書の内容からハッシュ値を計算し、当該ハッシュ値と復号した署名（すなわちハッシュ値）とを比較する。証明書が正規なものであればこれらの値は一致するため、通信相手が本物であることがわかる。
【００３５】
登録処理１２６は、暗号処理回路３０の使用が許可されたプログラムを登録するための処理である。登録されたプログラムの情報は登録リストとしてメモリ５０に格納されるが、メモリ５０に格納される前に、暗号処理回路３０の暗号エンジン３３を使って暗号化される。また、登録リストへのプログラムの情報追加は、暗号化された登録リストをメモリ５０から読み出し、暗号エンジン３３を使って復号してから行われる。登録リストは、プログラム情報追加後、再度暗号エンジン３３を使って暗号化されてからメモリ５０に格納される。換言すると、メモリ５０には必ず暗号化された登録リストが格納されるため、あるプログラムが登録リストに直接アクセスしても、その内容を知ることも、情報を追加することもできない。
【００３６】
照合処理１２７は、暗号処理回路３０を使おうとしているプログラムが、予め登録リストに登録されたプログラムであるかどうかを照合するための処理である。プログラムが暗号化処理１２１、復号処理１２２、乱数生成処理１２３、ＨＡＳＨ計算処理１２４、証明書検証処理１２５を行うに先立ち、まず照合処理１２７によって、そのプログラムが登録リストに登録されているかどうかが照合される。照合の結果、登録リストに登録されているプログラムならば、暗号処理回路３０による暗号処理の実行が許可される。登録リストに登録されていないプログラムの場合は、そのプログラムの以降の処理は中止される。
【００３７】
再び図２に戻って説明する。プログラム８０は、マイクロコントローラ１０を使用するユーザが開発したアプリケーションプログラムであり、暗号処理回路３０を使用するものである。本実施の形態では、このプログラム８０はマイクロコントローラ１０の正規のユーザが開発したプログラムとして説明する。一方、プログラム９０は、プログラム８０と同様に暗号処理回路３０を使用するアプリケーションプログラムであるが、正規のユーザではなく、悪意のあるユーザが秘匿情報の取得や、マイクロコントローラ１０の正常動作を妨害するために準備したプログラムであるとして説明する。
【００３８】
インストーラ１００は、アプリケーションプログラムをマイクロコントローラ１０にインストールするためのプログラムである。ここで、インストーラ１００によるプログラムのインストールは、特別に権限が与えられたユーザ（特権ユーザやスーパユーザと呼ばれる）のみが実行可能である。
【００３９】
図４は、実施の形態１に係るディレクトリ構成図であり、ＯＳとしてＬｉｎｕｘ（登録商標）を使用した場合のディレクトリ構造の一例である。本実施の形態では、正規ユーザがインストーラ１００を使ってインストールしたプログラムは、ディレクトリ“/usr/trustbin”に格納される。従って、正規のプログラムであるプログラム８０は、/usr/trustbinに格納されている。一方、悪意のあるユーザが作成したプログラム９０は、/usr/trustbinではなく、/usr/binに格納されているとする。
【００４０】
（インストーラ実行時のマイクロコントローラの動作）
次いで、本実施の形態に係るインストーラ１００を実行した時のマイクロコントローラ１０の動作例について説明する。
【００４１】
図５は、実施の形態１に係るプログラムのインストール及び登録方法を示すフローチャートであり、インストーラ１００実行時のマイクロコントローラの動作フローである。
【００４２】
まず、正規ユーザのプログラム８０をインストールする場合を説明する。スーパユーザはインストーラ１００を起動し、プログラム８０のインストール処理を開始する（ステップＳ００）。インストーラ１００は、プログラム８０を/usr/trustbinにインストールすると共に、暗号ライブラリ１１０を介して暗号ドライバ１２０の登録処理１２６の関数を呼びだす（ステップＳ１０）。登録処理１２６の関数呼び出し時の引数はプログラム８０のインストール情報である、/usr/trustbin/program80である。
【００４３】
暗号ドライバ１２０の登録処理１２６の関数は、呼び出しに応じてメモリ５０に格納されている暗号化された登録リストを取得する（ステップＳ２０）。そして、取得した登録リストと、プログラム８０のインストール情報である/usr/trustbin/program80とを暗号処理回路３０に送信し、登録リストの復号、登録リストへのプログラム８０のインストール情報の登録、及び登録リストの暗号化をリクエストする。
【００４４】
暗号処理回路３０は、受信した登録リストを復号し（ステップＳ３０）、復号した登録リストに/usr/trustbin/program80を登録する（ステップＳ４０）。登録後、登録リストを暗号化し、暗号化した登録リストを暗号ドライバ１２０に送信する（ステップＳ５０）。暗号ドライバ１２０は暗号化された登録リストをメモリ５０に格納する（ステップＳ６０）。暗号化された登録リストのメモリ５０への格納が正常終了したかどうかを判断し（ステップＳ７０）、正常終了した場合は、暗号ドライバ１２０はインストーラに正常終了したことを知らせ（ステップＳ８０）、インストーラ１００はプログラム８０のインストールを正常終了する。異常終了した場合は、インストーラは異常終了し、エラー通知を行う（ステップＳ９０）。
【００４５】
ここで悪意のあるユーザのプログラム９０のインストールについて説明する。スーパユーザになる方法を知り得ない悪意のあるユーザは、インストーラ１００を起動できない。従って、何らかの不正行為によりプログラム９０をインストールすることになる。この結果、例えば、ディレクトリ“/usr/bin”にプログラム９０が格納されたとする。しかし、例え不正行為によってプログラムがインストールできたとしても、インストーラ１００を起動できていないため、登録リストにプログラム９０のインストール情報、すなわち/usr/bin/program90を登録することはできない。
【００４６】
以上のプログラム８０、プログラム９０のインストールの結果、メモリ５０に格納されている暗号化された登録情報には、プログラム８０のインストール情報である/usr/trustbin/program80は格納されているが、プログラム９０のインストール情報は何も格納されていない状態となる。
【００４７】
（ユーザプログラム実行時のマイクロコントローラの動作）
次いで、本実施の形態に係るユーザプログラム実行時のマイクロコントローラ１０の動作例について説明する。
【００４８】
図６は、実施の形態１に係るプログラムの動作を示すフローチャートであり、ユーザプログラム実行時のマイクロコントローラ１０の動作を説明するためのフローチャートである。
【００４９】
まず、正規ユーザのプログラム８０を実行する場合を説明する。ここでプログラム８０は、例えば所定の情報に対して暗号化処理を行う機能を有し、プログラム８０の実行時には暗号ドライバ１２０の暗号化処理１２１の関数が呼び出され、暗号処理回路３０が使われるものとする。
【００５０】
プログラム８０が実行されると（ステップＳ１００）、暗号ライブラリ１１０が呼び出される。呼び出された暗号ライブラリ１１０は、暗号化処理関数を実行するのに先立ち、呼び出し元であるプログラム８０のインストールディレクトリを確認するために、システムコール１３０を行い、インストールディレクトリのフルパスの情報を取得する（ステップＳ１１０）。図７は、実施の形態１に係るプログラムのインストールディレクトリを取得するためのコードの一例であり、フルパスの情報を得るための処理プログラムコードの一例である。このコードを実行することにより実行中のプロセス情報と実行ファイル名を元にフルパスの情報を得ることができる。暗号ライブラリ１１０は取得したフルパスの情報を引数として、暗号ドライバ１２０の照合処理１２７の関数を呼び出す（ステップＳ１２０）。
【００５１】
暗号ドライバ１２０の照合処理１２７の関数は、呼び出しに応じてメモリ５０に格納されている暗号化された登録リストを取得する。そして、取得した登録リストと、プログラム８０のインストール情報である/usr/trustbin/program80とを暗号処理回路３０に送信し、登録リストの復号と、復号された登録リストとプログラム８０のインストール情報との照合とをリクエストする（ステップＳ１３０）。
【００５２】
暗号処理回路３０は、受信した登録リストを復号し（ステップＳ１４０）、復号した登録リストにプログラム８０のインストール情報/usr/trustbin/program80が登録されているかどうかを照合し（ステップＳ１５０）、一致するかどうか判断する（ステップＳ１６０）。照合の結果、プログラム８０は登録されているので照合一致の結果を暗号ドライバ１２０に通知する（ステップＳ１７０）。
【００５３】
暗号ドライバ１２０は、暗号処理回路３０からの照合一致の結果を受信後、プログラム８０による暗号処理回路３０を使った暗号処理の実行を許可する（ステップＳ１９０、Ｓ２１０）。
【００５４】
ここで悪意のあるユーザのプログラム９０の実行について説明する。プログラム９０の場合、前述した通り、インストーラ１００を使ってインストールされていないため、登録リストにインストール情報が登録されていない。従って、暗号処理回路３０の照合処理において、照合不一致の結果となる（ステップＳ１８０）。照合不一致の結果を受け、暗号ドライバ１２０はプログラム９０の以降の処理を中止する（ステップＳ２００）。更に好ましくは、照合不一致が発生した場合には、アクセスマネジメント３２は、以降の暗号処理回路３０へのアクセスを受けないようにする。
【００５５】
（効果）
以上のように、本実施の形態に係るマイクロコントローラでは、ユーザプログラムが暗号処理回路を使った暗号処理を実行する際に、そのプログラムが正規ユーザの物なのかどうかを、暗号処理回路を使って判定を行っている。これにより、悪意のあるユーザのプログラムによる暗号処理回路の使用を制限でき、マイクロコントローラをセキュアな状態に保つことができる。
【００５６】
［変形例］
図８は、実施の形態１の変形例に係る暗号ライブラリ１１０の構成例を示すブロック図である。本変形例においては、暗号ライブラリ１１０が状態遷移確認処理を持っていることに特徴がある。暗号ライブラリ１１０は、ユーザプログラムからの呼び出しにより動作する関数群であるが、図８はそのうちの１つの関数を例示している。この関数は暗号ドライバ１２０の中の３つの暗号ドライバ処理を呼び出す構成になっており、３つの暗号ドライバ処理のそれぞれは、暗号ドライバ１２０の暗号化処理１２１、復号処理１２２、乱数生成処理１２３、ＨＡＳＨ計算処理１２４、証明書検証処理１２５のうちのいずれかに相当する。
【００５７】
状態遷移確認処理１（Ｓ３１０）は、暗号ドライバ処理２（Ｓ３２０）が暗号ドライバ処理１（Ｓ３００）の処理後に起動されているかどうかを確認するものである。同様に、状態遷移確認処理２（Ｓ３３０）は、暗号ドライバ処理３（Ｓ３４０）が暗号ドライバ処理２（Ｓ３２０）の処理後に起動されているかどうかを確認するためのものである。状態遷移確認処理１（Ｓ３１０）は、暗号ドライバ処理２（Ｓ３２０）が暗号ドライバ処理１（Ｓ３００）の処理後以外のタイミングで起動された場合は、当該暗号ドライバ処理２の呼び出し元であるユーザプログラムを不正アクセスしているものとして異常終了させる。状態遷移確認処理２（Ｓ３３０）についても同様である。なお、暗号ドライバ処理１や暗号ドライバ処理２の処理が終わっているかどうかは、それぞれの処理が終わったときにフラグを立てることで実現可能である。
【００５８】
図９を用いてより具体的に説明する。図９は、実施の形態１の変形例に係る動作例を示すフローチャートであり、インターネットのセキュア通信でよく使われるＴＳＬ（Transport Layer Security）を使った通信を例にしたフローチャートである。ユーザプログラムがＴＳＬを使って通信を行うように構成されており、ＴＳＬに必要な暗号化や証明書の検証が暗号処理回路３０を使って行われる例である。
【００５９】
まず、ＴＳＬを使うユーザプログラムが、正規なユーザのプログラムであるかを照合処理（Ｓ４００）で確認するが、照合処理（ステップＳ４００）は、実施の形態１で説明したプログラムの照合処理と同じ内容のものであるため説明を省略する。照合処理以降の処理（ステップＳ４１０〜Ｓ４９０）は、照合処理（ステップＳ４００）で照合一致となった場合に実行されるものである。照合処理（ステップＳ４００）で照合不一致となった場合は、ＴＳＬを使ったプログラムが悪意のあるユーザのものであるとして、以降の処理（ステップＳ４１０〜Ｓ４９０）は実行されない。
【００６０】
図９の通信開始（ステップＳ４１０）、証明書検証（ステップＳ４３０）、乱数発生（ステップＳ４４０）、暗号化（ステップＳ４５０）、セッション鍵生成（ステップＳ４６０）、セッション鍵による通信（ステップＳ４７０）は、それぞれ暗号ドライバ１２０による処理であり、暗号ライブラリ１１０がアプリケーションプログラムからＴＳＬ通信のリクエストを受けると、図９に示すフローで暗号ドライバ１２０の各処理が起動される。そして図８で説明した通り、暗号ドライバ１２０の各処理が起動される前に、所定の暗号ドライバ処理が終わっているかどうかを確認する状態遷移確認処理が実行される（図９では状態遷移確認処理部分は不図示）。
【００６１】
ＴＳＬ通信開始が起動されると、マイクロコントローラ１０は通信先のサーバ１６０に対してＴＳＬ通信開始のメッセージを送信する（ステップＳ４１０）。ＴＳＬ通信開始のメッセージを受信したサーバ１６０は、サーバ証明書をクライアントであるマイクロコントローラ１０に送信する（ステップＳ４２０）。このサーバ証明書には公開鍵が添付されている。なお、送信するメッセージには、これ以降で実行する暗号化、乱数発生、ＨＡＳＨ計算でどのアルゴリズムを使うかを指定する情報も含まれている。
【００６２】
マイクロコントローラ１０はサーバ１６０からサーバ証明書を受信すると、証明書検証の処理を開始するが、その前に、通信開始処理が実行されたかどうかを確認する（ステップＳ４３０）。通信開始処理が実行されていれば証明書検証の処理を開始する。通信開始処理が実行されていなければ以降の処理は中止する。証明書検証では、サーバ証明書が正当なものであるかどうかを検証するが、これはサーバ証明書を発行した認証局からルート証明書を入手し、ルート証明書を使って行われる。
【００６３】
次に、乱数処理が開始されるが、その前に、証明書検証処理が実行されたかどうかを確認する（ステップＳ４４０）。証明書検証処理が実行されていなければ以降の処理を中止する。
【００６４】
次に、暗号化処理が開始されるが、その前に、乱数発生処理が実行されたかどうかを確認する（ステップＳ４５０）。乱数発生処理が実行されていなければ以降の処理を中止する。暗号化処理では、乱数発生処理で作成した乱数を、サーバ証明書に添付されていた公開鍵を使って暗号化を行う。暗号化された乱数はサーバにも送信され、クライアントであるマイクロコントローラ１０とサーバ１６０とで共有される。
【００６５】
次に、セッション鍵生成処理が開始されるが、その前に、暗号化処理が実行されたかどうかを確認する（ステップＳ４６０）。暗号化処理が実行されていなければ以降の処理を中止する。セッション鍵生成処理では、乱数発生処理で作成した乱数を使ってＨＡＳＨ計算を行うことでセッション鍵を生成する。サーバ１６０側でも、マイクロコントローラ１０から送信された暗号化された乱数を復号し、復号された乱数を使ってＨＡＳＨ計算を行うことで、マイクロコントローラ１０と同じセッション鍵を生成することができる。生成されたセッション鍵は以降のマイクロコントローラ１０とサーバ１６０との暗号通信で使われることになる。
【００６６】
（効果）
以上のように、本変形例では、ある暗号ドライバ処理を起動する前に実行状態、すなわち予め決められた他の暗号ドライバの処理が実行された状態であるかどうかを確認する。これにより、実施の形態１で説明したユーザプログラムの登録と照合処理を、悪意のあるプログラムがたとえ通過してしまった場合であっても、そのプログラムは予め定められた暗号ドライバ処理のフロー、すなわちセキュア状態を維持するための処理フローを守らなければならず、マイクロコントローラ１０のセキュア状態を維持することが可能となる。
【００６７】
［実施の形態２］
図１０は、本実施の形態２に係るマイクロコントローラの構成を示すブロック図である。図１との違いは、ハードウェアＯＳ１７０が追加されていることである。なお、図１０では、ハードウェアＯＳ１７０は内部バス７０に接続されているが、内部バス７０ではなく専用バスでＣＰＵコア２０と接続しても良い。図１１は、図１０のＣＰＵコア２０とハードウェアＯＳ１７０の構成を示すブロック図である。ＣＰＵコア２０とハードウェアＯＳ１７０以外のブロックは、図１と同じであるため省略してある。
【００６８】
ＣＰＵコア２０は、実行制御回路１８０、プログラムカウンタ１９０、スタックポインタ２００、汎用レジスタ２１０（Ｒ０〜Ｒｍ）、ＡＬＵ２２０、退避レジスタ２３０（Ｒ０〜Ｒｎ）を備えている。実行制御回路１８０は、プログラムカウンタ１９０、汎用レジスタ２１０（Ｒ０〜Ｒｍ）、メモリ５０、ＡＬＵ２２０を管理・制御することでタスクの実行を制御する。ここでＣＰＵコア２０はマルチタスク対応のＣＰＵコアである。
【００６９】
スタックポインタ２００と退避レジスタ２３０（Ｒ０〜Ｒｎ）はタスクの切り替えが発生した時に使われる。実行制御回路１８０がシステムコールを実行した時や外部からの割り込みでタスクの切り替えが発生した場合は、現在実行中のタスク処理を中断し、中断した時のタスクの情報（コンテキスト）をスタックポインタ２００で示される退避レジスタ２３０に退避する。ここで、コンテキストの中には、プログラムカウンタ１９０の値や汎用レジスタ２１０の値だけではなく、本実施の形態ではタスク（プログラム）のインストールディレクトリのフルパス情報と、タスクの種別情報も含まれる。タスクの種別情報とは、そのタスクが暗号ライブラリ１１０の処理であるかを示す情報である。インストールディレクトリのフルパス情報と暗号ライブラリ１１０については、実施の形態１で説明したものと同じであるためここでは説明を省略する。
【００７０】
また、退避レジスタ２３０にコンテキストを退避したタスクに切り替えるときは、退避レジスタ２３０に退避したタスクのコンテキストが、プログラムカウンタ１９０、汎用レジスタ２１０に戻され、そのタスクを中断した時点から再開される。なお、コンテキストの退避先は退避レジスタ２３０ではなく、メモリ５０でも構わない。
【００７１】
ハードウェアＯＳ１７０は、ソフトウェアで構成されるＯＳの機能の一部を回路としてハードウェア化したものである。より具体的には、ハードウェア化された機能としてプロセス管理が含まれる。従って、ハードウェアＯＳ１７０のことは、プロセス管理回路、あるいはタスク管理回路とも呼ぶ。ハードウェアＯＳ１７０は、タスク管理回路２４０、セマフォ管理回路２５０、イベント管理回路２６０、タスク選択回路２７０、タスク情報用メモリ２８０（０〜ｎ）を備える。
【００７２】
タスク情報用メモリ２８０（０〜ｎ）には、ＣＰＵコア２０で実行可能なタスク、すなわち実行中のタスクあるいは実行待ちのタスクに関するコンテキスト情報のうち、タスクの優先度に関する情報、タスクの種別情報、タスク（プログラム）のインストールディレクトリのフルパス情報が格納されている。タスクの優先度は、プログラム設計者が予め設定するものであり、この優先度に基づいてタスクが選択され、タスクの切り替えが行われる。
【００７３】
タスク管理回路２４０は、実行制御回路１８０がタスクの切り替えを意味するシステムコールを実行した時、あるいは外部から割り込み要求を受ける（不図示）とタスクの切り替えを行う。タスク管理回路２４０は、タスク切り替えをリクエストされたら、タスク選択回路２７０に対してタスクの選択を指示する。タスク選択回路２７０は、タスク情報用メモリ２８０（０〜ｎ）に格納されている各タスクの優先度、セマフォ管理回路２５０のセマフォ情報、イベント管理回路２６０のイベント情報に基づいて次に実行すべきタスクを選択し、選択したタスクの情報をタスク管理回路２４０に通知する。
【００７４】
また、タスク選択回路２７０は、選択したタスクが暗号処理タスク、すなわち暗号ライブラリ１１０を使った処理であるかどうかも、タスク種別情報で判断する。選択したタスクが暗号処理タスクであった場合は、暗号処理タスクを呼び出したタスク（プログラム）がインストールされているディレクトリのフルパス情報もタスク管理回路２４０に通知する。
【００７５】
タスク管理回路２４０は、タスク選択回路２７０が選択したタスクと、フルパス情報とに基づいてＣＰＵコア２０にタスクの切り替えを実行させる。
【００７６】
ここで、セマフォ管理回路２５０とイベント管理回路２６０について説明する。
【００７７】
セマフォ管理回路２５０は、複数のタスク間で共有の資源（メモリ５０、汎用レジスタ２１０、周辺回路６０）を使うときに排他制御を行うための回路である。共有の資源にはセマフォが設定され、セマフォがあるタスクによって獲得されている時は、そのセマフォが解放されるまで他のタスクはその共有の資源は使用できず、処理が待ち状態となる。このセマフォの設定・管理が、セマフォ管理回路２５０で行われる。より具体的には、実行制御回路１８０で実行中のあるタスクがセマフォを獲得する場合は、セマフォ獲得用のシステムコールを実行し、セマフォを開放する場合はセマフォ解放用のシステムコールを実行する。これらのシステムコールに基づき、セマフォ管理回路２５０はどのタスクがセマフォを獲得しているのか、どのタスクがセマフォを獲得待ちになっているのか、を管理する。
【００７８】
イベント管理回路２６０は、複数のタスク間の同期を取るための回路である。例えば、３つのタスクＡ、タスクＢ、タスクＣがあるとする。タスクＡ、Ｂ、Ｃの順番で実行したい場合、各タスクが終了したことを知らせるイベントフラグを設定・管理することで実現できる。つまり、タスクＢはタスクＡが実行終了したことを示すイベントフラグをチェックすることで実行タイミングを知ることができる。タスクＣについても同様である。このイベントフラグの設定・管理が、イベント管理回路２６０で行われる。より具体的には、実行制御回路１８０で実行中のあるタスクがイベントフラグをセットする場合には、イベントフラグセット用のシステムコールを実行する。このシステムコールに基づき、イベント管理回路２６０はイベントフラグを設定・管理する。
【００７９】
（マイクロコントローラの動作）
次いで、本実施の形態２に係るマイクロコントローラの動作例について説明する。
【００８０】
図１２は、実施の形態２に係るプログラムの動作を示すフローチャートであり、ユーザプログラム実行時のマイクロコントローラ１０の動作を説明するためのフローチャートである。全体の動きとしては実施の形態１の動作と同じであるため、本実施の形態２の特徴であるハードウェアＯＳ１７０に関連した部分を中心に説明する。
【００８１】
まず、正規ユーザのプログラム８０あるいは悪意のあるユーザのプログラム９０が実行され、暗号ライブラリ１１０が呼び出される（ステップＳ５００）。呼び出された暗号ライブラリ１１０は、システムコールを行って呼び出し元のプログラム８０あるいはプログラム９０のインストールディレクトリのフルパス情報を取得する（ステップＳ５１０）。暗号ライブラリ１１０はフルパス情報取得後、暗号ドライバ１２０を呼び出す（ステップＳ５２０）。
【００８２】
実施の形態１で説明した通り、暗号ドライバ１２０は呼び出された後、暗号処理回路３０にフルパス情報の照合を実行させるが、その前に、外部からの割り込みによってタスクの切り替えが発生（ステップＳ５３０）した場合で説明する。この場合、ハードウェアＯＳ１７０は、ＣＰＵコア２０で実行中のプログラム８０のコンテキスト情報を退避レジスタ２３０に退避させる（ステップＳ５４０）。更に、ハードウェアＯＳ１７０は、プログラム８０が暗号処理のタスクを含んでいることを示す情報と、プログラム８０のインストールディレクトリのフルパス情報とをタスク情報用メモリ２８０に保存する（ステップＳ５５０）。プログラム９０の場合も同様である。
【００８３】
次いで、割り込みによるタスクの処理が終了し、プログラム８０に復帰する場合を説明する（ステップＳ５６０）。ハードウェアＯＳ１７０は、ＣＰＵコア２０で実行中のタスクのコンテキストを退避レジスタ２３０に退避させる。タスク選択回路２７０が、セマフォ、イベント及びタスク優先度を考慮した結果、ステップＳ５４０、Ｓ５５０で退避したタスクへの切り替えを選択した場合、ハードウェアＯＳ１７０（タスク管理回路２４０）は、退避レジスタ２３０に退避してあったプログラム８０のコンテキストをプログラムカウンタ１９０、汎用レジスタ２１０に戻す（ステップＳ５７０）。ハードウェアＯＳ１７０は、更にタスク情報用メモリ２８０に保存したフルパス情報、暗号処理のタスクであることを示す情報を取得することで（ステップＳ５８０）、ＣＰＵコアにプログラム８０の実行、すなわち暗号ドライバ１２０の実行を再開させる。プログラム９０の場合も同様である。
【００８４】
プログラム８０の再開により、暗号ドライバ１２０がメモリから暗号リストを取得し（ステップＳ５９０）、暗号処理回路がフルパス情報の照合を実行するが（ステップＳ６００）、ここからは実施の形態１と同じであるため説明を省略する。プログラム８０の場合は、暗号リストにフルパス情報が登録されているため、暗号処理回路３０による処理が正常に実行される（ステップＳ６７０）。一方、プログラム９０の場合は、登録リストに登録されていないため、暗号処理回路３０による処理は実行されない（ステップＳ６６０）。
【００８５】
本実施の形態２において、プログラムのインストールディレクトリのフルパス情報をタスク情報用メモリに格納したが、退避レジスタに格納しても良い。
【００８６】
（効果）
以上のように、本実施の形態２では、従来ソフトウェアで構成していたＯＳの一部をハードウェア化し、インストールされたプログラムが正規のユーザの物なのかどうかを、ハードウェアＯＳを使って検証を行っている。これにより、マイクロコントローラのプログラム処理の高速化とセキュア状態の維持とを両立することが可能となる。
【００８７】
なお、本発明は、上記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更され得る。例えば、ＯＳの一部であるファイルシステムをハードウェア化、すなわち回路で実現しても良い。
【符号の説明】
【００８８】
１０  マイクロコントローラ
２０  ＣＰＵコア
３０  暗号処理回路
４０  プログラムメモリ
５０  メモリ
６０  周辺回路
７０  内部バス
８０、９０  プログラム
１００  インストーラ
１１０  暗号ライブラリ
１２０  暗号ドライバ
１３０  システムコール
１４０  プロセス管理
１５０  ファイルシステム
１６０  サーバ
１７０  ハードウェアＯＳ
１８０  実行制御回路
１９０  プログラムカウンタ
２００  スタックポインタ
２１０  汎用レジスタ
２２０  ＡＬＵ
２３０  退避レジスタ
２４０  タスク管理回路
２５０  セマフォ管理回路
２６０  イベント管理回路
２７０  タスク選択回路
２８０  タスク情報用メモリ
【図１】
2020098506.tif 000003
【図２】
2020098506.tif 000004
【図３】
2020098506.tif 000005
【図４】
2020098506.tif 000006
【図５】
2020098506.tif 000007
【図６】
2020098506.tif 000008
【図７】
2020098506.tif 000009
【図８】
2020098506.tif 000010
【図９】
2020098506.tif 000011
【図１０】
2020098506.tif 000012
【図１１】
2020098506.tif 000013
【図１２】
2020098506.tif 000014