(57)【要約】【課題】暗号化プログラムの秘匿性を十分確保できるようにしたマイクロコントローラを提供する。【解決手段】暗号化したプログラムを格納するメモリ１２と、第１の経路を通じて前記メモリから読み出した前記プログラムを実行するＣＰＵ１１とを備える。暗号化プログラムを復号するために利用する復号情報を、前記第１の信号経路とは異なる第２の経路を通じて読み込み、且つ前記ＣＰＵ１１から物理的に読み出し不可能に保持するレジスタを有する復号ブロック１３を備える。該復号ブロック１３は、前記第１の経路を通じて前記メモリから読み出した前記暗号化プログラムを、前記レジスタに保持した前記復号情報を利用して復号する。【選択図】図１
2008217579.tif 000002
【特許請求の範囲】
【請求項１】
プログラムをその少なくとも一部は暗号化プログラムとして格納したメモリと、第１の経路を通じて前記メモリから読み出した前記プログラムを実行するＣＰＵとを備えるマイクロコントローラにおいて、
前記暗号化プログラムを復号するために利用する復号情報を、前記第１の信号経路とは異なる第２の経路を通じて読み込み、且つ前記ＣＰＵから物理的に読み出し不可能に保持する記憶手段を有する復号ブロックを備え、該復号ブロックは、前記第１の経路を通じて前記メモリから読み出した前記暗号化プログラムを、前記記憶手段に保持した前記復号情報を利用して復号し、前記ＣＰＵに供給することを特徴とするマイクロコントローラ。
【請求項２】
前記記憶手段への前記復号情報の格納が完了したときに、前記ＣＰＵから読み出し可能な復号化準備完了信号を生成する通知回路をさらに備えることを特徴とする請求項１に記載のマイクロコントローラ。
【請求項３】
前記第２の経路を通じて接続されたホストに対して、前記復号情報の送信を要求するとともに、前記ホストから前記復号情報を受け取り、前記復号ブロックに送るインターフェース回路をさらに備え、該インターフェース回路内の前記復号情報は前記ＣＰＵから物理的に読み出し不可能であることを特徴とする請求項１又は２に記載のマイクロコントローラ。
【請求項４】
前記暗号化プログラムは、前記メモリの複数の領域のそれぞれに分割して格納され、
前記復号情報が、前記メモリの前記複数の領域のそれぞれに格納された前記暗号化プログラムを復号するために利用する領域復号情報と、該それぞれの領域を識別する領域識別情報とを含み、
前記記憶手段は、前記複数の領域のそれぞれの前記領域復号情報を保持する領域復号情報記憶手段と、前記複数の領域のそれぞれを指定する前記領域識別情報を保持する領域識別情報記憶手段とを有することを特徴とする請求項１乃至３のいずれか１つに記載のマイクロコントローラ。
【請求項５】
前記メモリは前記ＣＰＵと同一の半導体集積回路内に設けられており、前記第２の経路は、前記半導体集積回路外からの信号を受信する外部端子を通じた経路であることを特徴とする請求項１乃至４のいずれか１つに記載のマイクロコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムの内容を第三者に知られないように、そのプログラムの少なくとも一部を暗号化してメモリ内に記憶させたマイクロコントローラに関するものである。
【背景技術】
【０００２】
所定のプログラムを実行するマイクロコントローラとして、プログラムの少なくとも一部を暗号化し、その暗号化プログラムの復号化に必要な鍵やその他数値情報（暗号化開始アドレス、終了アドレス等を含む）等の復号情報と共に、プログラム全体をメモリに格納する構成が提案されている。この場合、暗号化プログラムの領域がアクセスされた際には、同一のメモリに格納された復号情報を用いて復号化し、復号化プログラムデータをＣＰＵに出力する（例えば、特許文献１参照）。このように、従来の秘匿機構では、ＣＰＵと同一チップ上にあるメモリに復号情報を予め記録して、使用していた。
【０００３】
また、プロセッサチップ内の鍵管理部に秘密鍵を格納しておき、外部メモリから外部バスインターフェースを介して、まず、プログラムの復号に必要な命令鍵を公開鍵で暗号化した配布鍵を受け取り、その配布鍵を前記秘密鍵で復号して得た命令鍵を、鍵管理部の鍵テーブルに保持する構成が提案されている。この場合、鍵登録の完了をプロセッサコアに通知した後に、前記外部バスインターフェースを介してプログラムを受け取り、前記命令鍵を用いて復号する（例えば、特許文献２参照）。
【特許文献１】特開２００４−０２３３５１号公報
【特許文献２】特開２００２−２３２４１７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかし、前者では、メモリに復号情報を予め記録しておくので、メモリチップ（若しくは、ＣＰＵおよびメモリをワンチップ化した場合はそのチップ）を入手すれば、その復号情報を解読可能であり、復号情報の秘匿性が失われやすい。一旦秘匿性が失われると、暗号化プログラムの内容が第三者に容易に知られることとなる。特に、そのメモリがマスクＲＯＭのように、顕微鏡を使用することで「０」、「１」が観測可能なデバイスの場合は、その解読が容易である。よって、ＩＣカード等の個人情報などの重要情報が蓄積されるマイクロコンピュータシステムにおいては、データの改変等の不正行為につながる可能性がある。そこで、重要情報流出の際には、チップ自体を新しいものに交換する必要が生じ、時間とコストの損失が著しい。
【０００５】
後者においても、暗号化プログラムと、その復号に必要な命令鍵を公開鍵で暗号化した配布鍵が同一のメモリ上にあるので、プロセッサチップとメモリチップとを（両者がワンチップ化されていれば、そのチップを）入手すれば、プロセッサチップから解読した秘密鍵を利用して、メモリチップ上の配布鍵を復号し、得られた命令鍵で、暗号化プログラムを復号することが可能となる。
【０００６】
本発明の目的は、暗号化プログラムを復号する際に必要とされる復号情報を外部から取り込む形式とし、且つ取り込んだ復号情報がＣＰＵで読み込み不可能となるようにして、暗号化プログラムの秘匿性を十分確保できるようにしたマイクロコントローラを提供することである。
【課題を解決するための手段】
【０００７】
上記目的を達成するために、請求項１にかかる発明のマイクロコントローラは、プログラムをその少なくとも一部は暗号化プログラムとして格納したメモリと、第１の経路を通じて前記メモリから読み出した前記プログラムを実行するＣＰＵとを備えるマイクロコントローラにおいて、前記暗号化プログラムを復号するために利用する復号情報を、前記第１の信号経路とは異なる第２の経路を通じて読み込み、且つ前記ＣＰＵから物理的に読み出し不可能に保持する記憶手段を有する復号ブロックを備え、該復号ブロックは、前記第１の経路を通じて前記メモリから読み出した前記暗号化プログラムを、前記記憶手段に保持した前記復号情報を利用して復号し、前記ＣＰＵに供給することを特徴とする。
請求項２にかかる発明は、請求項１に記載のマイクロコントローラにおいて、前記記憶手段への前記復号情報の格納が完了したときに、前記ＣＰＵから読み出し可能な復号化準備完了信号を生成する通知回路をさらに備えることを特徴とする。
請求項３にかかる発明は、請求項１又は２に記載のマイクロコントローラにおいて、前記第２の経路を通じて接続されたホストに対して、前記復号情報の送信を要求するとともに、前記ホストから前記復号情報を受け取り、前記復号ブロックに送るインターフェース回路をさらに備え、該インターフェース回路内の前記復号情報は前記ＣＰＵから物理的に読み出し不可能であることを特徴とする。
請求項４にかかる発明は、請求項１乃至３のいずれか１つに記載のマイクロコントローラにおいて、前記暗号化プログラムは、前記メモリの複数の領域のそれぞれに分割して格納され、前記復号情報が、前記メモリの前記複数の領域のそれぞれに格納された前記暗号化プログラムを復号するために利用する領域復号情報と、該それぞれの領域を識別する領域識別情報とを含み、前記記憶手段は、前記複数の領域のそれぞれの前記領域復号情報を保持する領域復号情報記憶手段と、前記複数の領域のそれぞれを指定する前記領域識別情報を保持する領域識別情報記憶手段とを有することを特徴とする。
請求項５にかかる発明は、請求項１乃至４のいずれか１つに記載のマイクロコントローラにおいて、前記メモリは前記ＣＰＵと同一の半導体集積回路内に設けられており、前記第２の経路は、前記半導体集積回路外からの信号を受信する外部端子を通じた経路であることを特徴とする。
【発明の効果】
【０００８】
本発明によれば、暗号化プログラムの復号に必要な復号情報を、マイクロコントローラの外部から、ＣＰＵとプログラムが格納されたメモリとの間の第１の信号経路とは別の第２の信号経路を介して取り込み、ＣＰＵから読み出し不可能な記憶手段に保持し、暗号化プログラムの復号に供するので、暗号化プログラムの秘匿性の確保が確実となる。
【発明を実施するための最良の形態】
【０００９】
図１は本発明の１つの実施例のマイクロコントローラの構成を示すブロック図である。マイクロコントローラ１０は、プログラムを実行するＣＰＵ１１、一部が暗号化されたプログラム等が格納されるメモリ１２、メモリ１２内のプログラムの内の暗号化プログラムを復号する復号ブロック１３、外部端子を通じて外部のホスト２０との間で通信を行うインターフェース回路１４、復号ブロック１３における復号化準備が完了したときフラグを立てる復号化準備完了フラグ回路１５を備える。ホスト２０は、マイクロコントローラ１０に対して復号化データを供給する外部接続のパーソナルコンピュータ等からなる。メモリ１２には「復号化準備手順」のプログラムも格納されている。
【００１０】
なお、ＣＰＵ１１とメモリ１２との間の信号経路は請求項の「第１の信号経路」に対応し、インターフェース回路１４とホスト回路２０との間の信号経路は請求項の「第２の信号経路」に対応し、復号化準備完了フラグ回路１５は請求項の「通知回路」に対応する。
【００１１】
ＣＰＵ１１は、メモリ１２に対しては読出し信号ＲＤ、書込み信号ＷＲ、データ信号ＤＡＴＡＯ、アドレス信号ＡＤＲ等を送信し、復号化準備完了フラグ回路１５からの復号化準備完了フラグおよび復号ブロック１３からの復号データを取り込むが、インターフェース回路１４との間ではデータの通信は不可能となっている。
【００１２】
メモリ１２は、実行すべき所望プログラムの領域を含む。この領域は非暗号化プログラムの領域と暗号化プログラムの領域とに分かれ、暗号化プログラムの領域はｍ個に分かれている。
【００１３】
復号ブロック１３は、図２に示すように、領域選択回路１３１と復号回路１３２からなり、インターフェース回路１４から入力するセレクト信号ＣＳ１がイネーブルのときに動作する。領域選択回路１３１は、図３に示すように、メモリ１２の暗号化プログラムのデータを復号するための復号化用データを格納するｍ個の「複合化用データレジスタ１」〜「複合化用データレジスタｍ」からなる複合化用データレジスタ群１３１１と、その複合化用データレジスタ群１３１１のデータとデータ「０」との内から１つの復号化用データを選択するマルチプレクサ１３１２と、メモリ１２の暗号化プログラムのデータが格納されるｍ個の領域のアドレス範囲を示すｍ個の「領域識別アドレスレジスタ１」〜「領域識別アドレスレジスタｍ」からなる領域識別アドレスレジスタ群１３１３と、ＣＰＵ１１からメモリ１２に入力する現在のアドレスＡＤＲが領域識別アドレスレジスタ群１３１３内のいずれの「領域識別アドレスレジスタ」のアドレスに含まれるかにより現在のアドレスＡＤＲの領域を判定する領域判定回路１３１４とを備える。
【００１４】
そして、マルチプレクサ１３１２は、領域判定回路１３１４で識別された領域に応じて、復号化用データレジスタ１３１１の内の１つのデータを復号化用データＳＥＬ＿ＣＯＤＥとして選択する。一方、領域判定回路１３１４で領域が判定されなかった場合は、現在のアドレスＡＤＲは非暗号化プログラムのデータ領域のアドレスであるとして、データ「０」を復号化用データＳＥＬ＿ＣＯＤＥとして選択する。
【００１５】
復号ブロック１３の復号回路１３２は、図４に示すように、前記した所望プログラムのデータのビット数に応じた数のＸＯＲ回路１３２１を備え、各ビットのＸＯＲ回路１３２１は、メモリ１２から読み出されたプログラムデータＤＡＴＡＩ（暗号化されれいるデータおよびされていないデータ）の各ビット値と、領域選択回路１３１から出力する復号化用データＳＥＬ＿ＣＯＤＥ（データ「０」も含む）の各ビット値を入力することにより復号して、ＣＰＵ１１に送信すべき復号データＣＰＵ＿ＤＡＴＡＩを生成する。
【００１６】
インターフェース回路１４は、ＲＳ２３２Ｃに代表されるＵＡＲＴ等からなり、ホスト２０との間において、メモリ１２の暗号化プログラムのデータが格納された領域の情報の要求／取得、その暗号化プログラムのデータを復号するための復号化用データの要求／取得を行う。つまり、ホスト２０に対する復号情報の要求／取得を行う。
【００１７】
復号化準備完了フラグ回路１５は、図５に示すように、マルチプレクサ１５１とフリップフロップ１５２とからなる。フリップフロップ１５２は、ハードウエアリセット信号ＨＷ＿ＲＥＳＥＴＮが「１」になってリセットが解除されているとき、インターフェース回路１４から送信する書込み信号ＷＲとセレクト信号ＣＳ２が「１」になる、つまりイネーブルになることにより、「１」がセットされ、フラグ「１」が立ち、ＣＰＵ１１に復号化準備完了を通知する。
【００１８】
次に、図６の「復号化準備手順」のフローチャートに従って、本実施例のマイクロコントローラ１０のプログラム実行のための前準備手順動作を説明する。本実施例では、ＩＦ回路１４がＣＰＵ１１とは独立に「復号化準備手順」を実行する。
【００１９】
ハードウェア・リセットが解除されると、インターフェース回路１４は接続されたホスト２０に対して、「領域情報の要求」を行う（ステップＳ１）。ただし、この時、ＣＰＵ１１は、リセットが入ったままとするか、「復号化準備完了フラグ」がセットされるのを常にポーリングしているように構成する。
【００２０】
ホスト２０は、インターフェース回路１４からの「領域情報の要求」を受けて、メモリ１２内のいくつの領域を使用するかを示す領域数ｍを送信する（ステップＳ２）。インターフェース回路１４は、これを受信し、領域数ｍを領域選択回路１３１内の「領域数レジスタ」（図示せず）にセットし、「領域識別アドレス設定手順」に移行する。この「領域識別アドレス設定手順」および後記する「復号化用デ−タ設定手順」の間、書込み信号ＷＲとセレクト信号ＣＳ１はイネーブルに、つまり「１」となる。
【００２１】
インターフェース回路１４は、領域識別アドレスをｉ＝０にセットして（ステップＳ３）から、「領域識別アドレス１」の要求をホスト２０に対して行う（ステップＳ４）。ここでは、例えば、アドレスの上位数ビットを指定することである範囲の領域指定を行う。ホスト２０は「領域識別アドレス１」を送信し（ステップＳ５）、これをインターフェース回路１４が受け取ると、上位数ビットのアドレス値を領域選択回路１３１内の領域識別アドレスレジスタ群１３１３の「領域識別アドレスレジスタ１」にセットする。この後に、この領域識別アドレスレジスタ群１３１３へのアドレス値の設定手順を先に受信した領域数ｍだけ繰り返す（ステップＳ６，Ｓ７）。例えば、領域数ｍが２であれば、領域識別アドレスレジスタ群１３１３の設定手順は２回行い終了する。
【００２２】
その後、インターフェース回路１４は「復号化用デ−タ設定手順」に移行する。インターフェース回路１４は、復号化用データをｉ＝０にセットして（ステップＳ８）から、ホスト２０に対し、復号化用データの要求を行う（ステップＳ９）。ホスト２０はこの要求を受けて復号化用データ１を送信し（ステップＳ１０）、インターフェース回路２０はこれを受け取り、復号化用データレジスタ１３１１内の「復号化用データレジスタ１」にその値を設定する。この手順を先に設定した「領域数ｍ」の数だけ繰り返し（ステップＳ１１，Ｓ１２）、この「復号化データ設定手順」が完了したところで、セレクト信号ＣＳ２を「１」にし、復号化準備完了フラグ回路１５のフラグを「１」にセットする（ステップＳ１３）。
【００２３】
以上の手順で設定された復号ブロック１３の復号化用データレジスタ群１３１１内のレジスタの内容および領域識別アドレスレジスタ群１３１３内のレジスタの内容は、ＣＰＵ１１から読み出すことができない。復号化準備完了フラグ回路１５のフラグは、ＣＰＵ１１から読み出すことができる。
【００２４】
ＣＰＵ１１が復号化準備完了フラグ回路１５にフラグ「１」が立ったことを確認すると、メモリ１２内の非暗号化プログラムは復号ブロック１３をそのまま通過し、暗号化プログラムは復号ブロック１３で復号され、それぞれＣＰＵ１１に取り込まれ、プログラムが実行される。
【００２５】
すなわち、プログラムが実行される際は、メモリ１２のアドレスＡＤＲの指定により、その上位アドレスと先に設定された領域識別アドレスレジスタ群１３１３のアドレスの値との一致性の確認が、領域選択回路１３１内の領域判定回路１３１４で実施される。上位アドレスが「領域識別アドレスレジスタ１」のアドレス値に一致するときは、領域判定回路１３１４によって、マルチプレクサ１３１４は、復号化用データレジスタ群１３１１内の「復号化用データレジスタ１」を選択し、そこに格納されている復号化用データを復号回路１３２に出力する。同様に、上位アドレスが「領域識別アドレスレジスタ２」のアドレス値に一致するときは、「復号化用データレジスタ２」を選択し、そこに格納されている復号化用データを復号回路１３２に出力する。また、上位アドレスが領域識別アドレスレジスタ群１３１３内の「領域識別アドレスレジスタ１」〜「領域識別アドレスレジスタｍ」のいずれのアドレス値とも一致しないときは、データ「０」を選択し、これを復号回路１３２に出力する。以上により、ＣＰＵ１１には、メモリ１２から読み出されたプログラムのデータについて、暗号化されたものは復号回路１３２で復号化されて取り込まれ、暗号化されていないものはそのまま取り込まれ、プログラマの想定していた動作を行うことが可能となる。
【００２６】
以上から、本実施例のマイクロコントローラによれば、復号ブロック１３は、復号情報（復号化用データや領域識別アドレス）をＣＰＵ１１から物理的に読み出し不可能に保持する。すなわち、ＣＰＵ１１が復号ブロック１３に保持された復号情報を読み出すことができる経路が物理的に存在しない。具体的には、ＣＰＵ１１と復号ブロック１３との間には、復号回路１３２によって復号されたプログラムデータをＣＰＵ１１が取り込むための経路は存在するものの、復号ブロック１３に保持された復号情報を読み出すことができる経路は存在しない。同様に、インターフェース回路１４内に一時的に存在する復号情報についても、ＣＰＵ１１は、物理的に読み出し不可能である。このため、ソフトウェアデバッグ装置をマイクロコントローラ１０に接続したとしても、これらのインターフェース回路１４や復号ブロック１３内に存在する復号化用データや領域識別アドレス、つまり復号情報を外部に読み出すことができず、その復号情報の秘匿性が高くなる。
【００２７】
なお、以上の実施例において、外部のホスト２０から受け取る復号情報として、復号化用データの代わりに、鍵データを受け取り、復号ブロック１３がこれを用いて別途復号化アルゴリズムにより処理を行い、最終的に前記の復号化用データに相当するデータを生成し、これを使用して復号を行うようにしてもよい。
【００２８】
また、領域選択回路１３１内の各レジスタは、不揮発性メモリ等のその他の記憶手段でも代用できる。不揮発性メモリを使用するときは、電源投入時に毎回「復号化準備手順」の実行を行う必要がなくなり有益である。
【００２９】
また、領域識別アドレスレジスタ群１３１３は、上位アドレスを指定する代わりに、開始アドレスと終了アドレスを指定して各領域を指定すれば、より細かく領域を分割することができ、復号情報の秘匿性がより高度となる。また、「復号化準備手順」の実行にＣＰＵ１１を介在させても良い。但し、ＣＰＵ１１はＩＦ回路１４から復号情報を物理的に読み出せないように構成する。
【図面の簡単な説明】
【００３０】
【図１】本発明の実施例のマイクロコントローラの構成を示すブロック図である。
【図２】図１のマイクロコントローラ内の復号ブロックの構成を示すブロック図である。
【図３】図２の復号ブロック内の領域選択回路の構成を示すブロック図である。
【図４】図２の復号ブロック内の復号回路の構成を示すブロック図である。
【図５】図１のマイクロコントローラ内の復号化準備完了フラグ回路の構成を示すブロック図である。
【図６】復号化準備手順の処理のフローチャートである。
【符号の説明】
【００３１】
１０：マイクロコントローラ
１１：ＣＰＵ
１２：メモリ
１３：復号ブロック、１３１：領域選択回路、１３２：復号回路
１４：インターフェース回路
１５：復号化準備完了フラグ回路
２０：ホスト
【図１】
2008217579.tif 000003
【図２】
2008217579.tif 000004
【図３】
2008217579.tif 000005
【図４】
2008217579.tif 000006
【図５】
2008217579.tif 000007
【図６】
2008217579.tif 000008