(57)【特許請求の範囲】
【請求項１】
外部メモリが接続された制御ユニットを有し、その外部メモリに対して前記制御ユニットによって暗号化されたデータを書き込み又はその暗号化データの読み出しを行なうプロセッサ装置であって、
前記制御ユニットは、
前記外部メモリに対して書き込み又は読み出しのためのアクセス信号を発生するＣＰＵと、
前記アクセス信号の指定アドレスが第１アドレス領域でありかつ前記アクセス信号が書き込み用のとき前記ＣＰＵによって指定されたアドレスを暗号化して前記第１アドレス領域とは異なりかつ前記外部メモリに割り当てられた第２アドレス領域の書き込みアドレスを生成しかつ前記アクセス信号に含まれる書き込みデータを暗号化して書き込み用暗号化データを生成し、前記アクセス信号の指定アドレスが第１アドレス領域でありかつ前記アクセス信号が読み出し用のとき前記ＣＰＵによって指定されたアドレスを暗号化して前記第２アドレス領域のアドレスを生成しかつ前記外部メモリから読み出された暗号化データを復号して平文データを生成する暗号化及び復号化手段と、
前記第２アドレス領域の前記書き込みアドレスで指定される前記外部メモリの位置に前記書き込み用暗号化データの書き込みを行い、前記第２アドレス領域の前記読み出しアドレスで指定される前記外部メモリの位置から前記暗号化データを読み出してそれを復号のために前記暗号化及び復号化手段に供給する外部制御手段と、を備え、
前記ＣＰＵによって発生された前記アクセス信号の指定アドレスが前記第２アドレス領域であるとき前記アクセス信号は前記暗号化及び復号化手段に供給されることなく前記外部制御手段に直接供給されて前記第２アドレス領域の指定アドレスで指定される前記外部メモリの位置に前記アクセス信号に含まれる書き込みデータが書き込まれ、又は前記第２アドレス領域の指定アドレスで指定される前記外部メモリの位置からデータが読み出され、これにより前記ＣＰＵは前記第１アドレス領域と前記第２アドレス領域とのいずれか一方を選択して前記外部メモリの暗号化データ格納領域にアクセス可能にされていることを特徴とするプロセッサ装置。
【請求項２】
前記暗号化及び復号化手段は、鍵をデータとして保持する鍵保持部を有し、前記書き込みデータをブロック毎に前記鍵を使用して暗号化して前記書き込み用暗号化データを生成し、前記外部メモリから読み出された暗号化データをブロック毎に前記鍵を使用して暗号化して復号して平文データを生成することを特徴とする請求項１記載のプロセッサ装置。
【請求項３】
前記外部メモリは不揮発性ＲＯＭを備え、
前記不揮発性ＲＯＭへのデータ書き込み用のアクセス信号が前記ＣＰＵによって発生されたときには、前記暗号化及び復号化手段は前記データ書き込み用のアクセス信号に応じて前記ＣＰＵによって指定されたアドレスを暗号化して書き込みアドレスを生成しかつ前記データ書き込み命令に含まれる書き込みデータを暗号化して書き込み用暗号化データを生成し、その書き込みアドレス及び書き込み用暗号化データを前記ＣＰＵに供給し、
前記ＣＰＵは前記暗号化及び復号化手段から得た前記書き込みアドレス及び書き込み用暗号化データを含むアクセス信号を前記暗号化及び復号化手段を介することなく前記外部制御手段に供給して前記不揮発性ＲＯＭの前記書き込みアドレスで指定される位置に書き込み用暗号化データを書き込ませることを特徴とする請求項１記載のプロセッサ装置。
【請求項４】
前記暗号化及び復号化手段によるデータの暗号化においては、１ブロック分の平文データと、そのブロックの先頭アドレスとのＸＯＲ（排他的論理和）を演算し、その演算結果にブロック暗号のためのＥＣＢモード暗号化を実施し、データの復号化においては、前記暗号化データの１ブロックに対して、ブロック暗号のためのＥＣＢモード復号を実施し、その復号結果と該ブロックの先頭アドレスとのＸＯＲを演算することにより、平文データを得ることを特徴とする請求項１記載のプロセッサ装置。
【請求項５】
前記暗号化及び復号化手段によるアドレスの暗号化においては、前記ＣＰＵによって指定されたアドレスを１対１の所定の対応関係で前記外部メモリに割り当てられたアドレス範囲内のアドレスに変換し、その変換後のアドレスを前記書き込みアドレス又は前記読み出しアドレスとすることを特徴とする請求項１記載のプロセッサ装置。
【請求項６】
前記データはプログラムを含むことを特徴とする請求項１記載のプロセッサ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＭＣＵ（マイクロコントローラ）等の制御ユニット及びそれに外部接続された外部メモリを備えたプロセッサ装置に関する。
【背景技術】
【０００２】
ＭＣＵを用いた規模の大きい組込みシステムでは、システム全体のプログラムサイズが大きくなるため、プログラム及びデータを単一のＬＳＩ（大規模集積回路）からなるＭＣＵ内部のメモリ(ＲＯＭ, ＲＡＭ)に収めることができなくなり、ＭＣＵの外部にフラッシュＲＯＭ、ＲＡＭ等のメモリを接続し、そこにプログラム及びデータを格納することが多い。
【０００３】
このようにプログラム及びデータが外部メモリに格納されている場合には、外部メモリには内蔵メモリに比べて機密性がないため、そのプログラム及びデータに対する第三者による読み出し、解析、及び改竄が容易になるという可能性がある。
【０００４】
これに対してプログラム及びデータを解析や改竄から保護するために、プログラム自体を暗号化して、プログラムの変造につながる解析を難しくする方法が考え出されている（特許文献１及び２参照）。例えば、その方法においては、外部ＲＯＭには暗号化されたプログラムを格納して置き、プログラムの起動時に機密性が確保された内蔵ＲＯＭに格納された復号プログラムを実行して、外部ＲＯＭ内の暗号化されたプログラムを復号してそれを外部ＲＡＭに展開する。その後、外部ＲＡＭのプログラムを実行することによりシステムを作動させる。
【特許文献１】特開２００１−２３０７７０号公報
【特許文献２】特開２００６−１７９０２９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、かかる方法では、プログラムを展開するために十分な外部ＲＡＭが必要であり、システムのコストアップにつながるだけでなく、外部ＲＡＭ上に展開されたプログラムは暗号化されていないので、プログラム実行時に基板上のアドレス信号とデータ信号とがモニタされると、容易にプログラムを含むデータを入手できるという問題があった。
【０００６】
そこで、本発明の目的は、制御ユニットの外部メモリにプログラム等のデータを格納しておいてもそのデータの入手及び解析を容易にできないようにしたプロセッサ装置を提供することである。
【課題を解決するための手段】
【０００７】
本発明のプロセッサ装置は、外部メモリが接続された制御ユニットを有し、その外部メモリに対して前記制御ユニットによって暗号化されたデータを書き込み又はその暗号化データの読み出しを行なうプロセッサ装置であって、前記制御ユニットは、前記外部メモリに対して書き込み又は読み出しのためのアクセス信号を発生するＣＰＵと、前記アクセス信号の指定アドレスが第１アドレス領域でありかつ前記アクセス信号が書き込み用のとき前記ＣＰＵによって指定されたアドレスを暗号化して前記第１アドレス領域とは異なりかつ前記外部メモリに割り当てられた第２アドレス領域の書き込みアドレスを生成しかつ前記アクセス信号に含まれる書き込みデータを暗号化して書き込み用暗号化データを生成し、前記アクセス信号の指定アドレスが第１アドレス領域でありかつ前記アクセス信号が読み出し用のとき前記ＣＰＵによって指定されたアドレスを暗号化して前記第２アドレス領域のアドレスを生成しかつ前記外部メモリから読み出された暗号化データを復号して平文データを生成する暗号化及び復号化手段と、前記第２アドレス領域の前記書き込みアドレスで指定される前記外部メモリの位置に前記書き込み用暗号化データの書き込みを行い、前記第２アドレス領域の前記読み出しアドレスで指定される前記外部メモリの位置から前記暗号化データを読み出してそれを復号のために前記暗号化及び復号化手段に供給する外部制御手段と、を備え、前記ＣＰＵによって発生された前記アクセス信号の指定アドレスが前記第２アドレス領域であるとき前記アクセス信号は前記暗号化及び復号化手段に供給されることなく前記外部制御手段に直接供給されて前記第２アドレス領域の指定アドレスで指定される前記外部メモリの位置に前記アクセス信号に含まれる書き込みデータが書き込まれ、又は前記第２アドレス領域の指定アドレスで指定される前記外部メモリの位置からデータが読み出され、これにより前記ＣＰＵは前記第１アドレス領域と前記第２アドレス領域とのいずれか一方を選択して前記外部メモリの暗号化データ格納領域にアクセス可能にされていることを特徴としている。
【発明の効果】
【０００８】
かかる本発明のプロセッサ装置によれば、外部メモリへのデータ書き込みのためのアクセス信号が発生された場合には、暗号化及び復号化手段によって指定アドレスが暗号化されて書き込みアドレスとされると共に書き込みデータが暗号化されて書き込み用暗号化データとされ、その書き込みアドレスで指定された外部メモリの位置に書き込み用暗号化データが書き込まれる。外部メモリからのデータ読み出しのためのアクセス信号が発生された場合には、暗号化及び復号化手段によって指定アドレスが暗号化されて読み出しアドレスとされ、その読み出しアドレスで指定された外部メモリの位置から暗号化データが読み出され、その読み出された暗号化データは暗号化及び復号化手段による復号によって平文データとされる。よって、外部メモリと制御ユニットとの間においてはデータ及びアドレスは暗号化された状態で伝送されるので、アドレス信号とデータ信号とがモニタされても容易にプログラム等のデータを適切な状態で入手することができない。これにより、第三者による不正な読み出し、改竄につながる解析を防止することができる。
【発明を実施するための最良の形態】
【０００９】
以下、本発明の実施例を図面を参照しつつ詳細に説明する。
【００１０】
図１は本発明の実施例として組み込みシステムに用いられるプロセッサ装置を示している。このプロセッサ装置は、制御ユニットに対応するＭＣＵ部１と、外部ＲＯＭ２と、外部ＲＡＭ３と、外部バス４とを備えている。外部バス４はＭＣＵ部１、外部ＲＯＭ２及び外部ＲＡＭ３を互いに接続する共通バスである。
【００１１】
外部ＲＯＭ２には暗号化されたプログラムが格納される。外部ＲＡＭ３には暗号化されたデータが格納される。
【００１２】
ＭＣＵ部１は、ＬＳＩからなり、ＣＰＵ（中央処理装置）１１、キャッシュメモリ１２、暗号化/復号化制御部１３、鍵保持部１４、外部バスコントローラ１５及び内部バス１６を備えている。内部バス１６はキャッシュメモリ１２、暗号化/復号化制御部１３、及び外部バスコントローラ１５を互いに接続する共通バスである。
【００１３】
キャッシュメモリ１２はＣＰＵ１１の一部として設けられており、ＣＰＵ１１はキャッシュメモリ１２を介してプログラムやデータを入出力する。キャッシュメモリ１２は、復号された平文のプログラムやデータを一時的に格納する。
【００１４】
外部バスコントローラ１５は、外部制御手段であり、ＣＰＵ１１又は暗号化/復号化制御部１３によって指定された外部ＲＯＭ２又は外部ＲＡＭ３のアドレスへの書き込みデータ又はアドレスからの読み出しデータを中継供給する。
【００１５】
暗号化/復号化制御部１３は、鍵保持部１４と共に暗号化及び復号化手段をなし、外部メモリである外部ＲＯＭ２又は外部ＲＡＭ３へのアクセスの毎に、アドレススクランブルと鍵保持部１４に格納されている鍵を使用してブロック単位で暗号化/復号化処理を行う。暗号化/復号化制御部１３と外部バスコントローラ１５との間には、スクランブルアドレス、書き込み暗号化データ及び読み出し暗号化データを送受信するバスラインが設けられている。
【００１６】
かかる構成のプロセッサ装置においては、外部ＲＯＭ２及び外部ＲＡＭ３の物理アドレスに対してＣＰＵ１１からは異なるアドレス領域でアクセスすることができる。すなわち、暗号化/復号化制御部１３を介して外部ＲＯＭ２又は外部ＲＡＭ３に対してアクセスする場合の第１アドレス領域と、暗号化/復号化制御部１３を介することなく外部ＲＯＭ２又は外部ＲＡＭ３に対して直接アクセスする場合の第２アドレス領域とが存在する。
【００１７】
ＣＰＵ１１が命令する際のアクセス先のアドレスが上記の２つのアドレス領域のいずれかに属するかによって、暗号化/復号化制御部１３を介するか否かを選択できるようになっている。更に、暗号化/復号化制御部１３を介する場合には、動作状態が暗号化結果出力モードに設定されて、書き込みアクセスが外部メモリコントローラ１５を経由してメモリ書き込みせず、暗号化/復号化制御部１３の暗号化及びアドレススクランブル結果を特定のアドレス（暗号化/復号化制御部１３の暗号化結果出力）からＣＰＵ１１が読み出すことが可能にされている。
【００１８】
ＣＰＵ１１はプログラムを実行するために、命令フェッチ、データ読み出しアクセス、データ書き込みアクセス等のアクセス信号を生成する。
【００１９】
ＣＰＵ１１は命令フェッチを外部ＲＯＭ２に対して行う場合には、図２に示すように、先ず、命令フェッチのアクセス信号を暗号化/復号化制御部１３に供給する（ステップＳ１）。この暗号化/復号化制御部１３への供給はＣＰＵ１１による指令アドレスによって行われる。すなわち、指定アドレスが第１アドレス領域であればアクセス信号は暗号化/復号化制御部１３に内部バス１６を介して指定アドレスと共に供給されるが、第１アドレス領域以外の第２アドレス領域であれば、暗号化/復号化制御部１３を介することなく、内部バス１６及び外部バスコントローラ１５を介して外部ＲＯＭ２又は外部ＲＡＭ３に供給される。ステップＳ１の指定アドレスは暗号化/復号化制御部１３に割り当てられた第１アドレス領域に含まれる。命令フェッチ等のアクセス信号送出の際にＣＰＵ１１からその第１アドレス領域に含まれるアドレスが指定されると、そのアクセス信号は暗号化/復号化制御部１３に供給されることになる。暗号化/復号化制御部１３はＣＰＵ１１から受け取った指令アドレスに対して、アドレススクランブル（暗号化）を行って外部ＲＯＭ２のスクランブルアドレスを生成する（ステップＳ２）。ステップＳ２で得られるスクランブルアドレスは第２アドレス領域に属する。
【００２０】
次に、暗号化/復号化制御部１３は、そのスクランブルアドレスで外部ＲＯＭ２にアクセスし、プログラムを読み出す（ステップＳ３）。読み出したプログラムを鍵保持部１４に格納されている鍵を使用して暗号化/復号化制御部１３が復号し（ステップＳ４）、復号後の平文のプログラムがキャッシュメモリ１２に一時的に格納される（ステップＳ５）。そして、ＣＰＵ１１はキャッシュメモリ１２に格納された平文のプログラムを読み出す（ステップＳ６）。
【００２１】
ＣＰＵ１１がデータ読み出しアクセスを外部ＲＡＭ３に対して行う場合には、上記のステップＳ１〜Ｓ６と同様の手順で、図３に示すように、データの読み出しが行われる。データ読み出しアクセスを外部ＲＯＭ２に対して行う場合も同様である。
【００２２】
ＣＰＵ１１は、外部ＲＡＭ３に対して書き込みアクセスを行う場合には、図４に示すように、先ず、書き込みアクセスのアクセス信号を外部ＲＡＭ３の書き込みアドレスに対応した指定アドレスで暗号化/復号化制御部１３に供給する（ステップＳ１１）。ステップＳ１１の指令アドレスは上記の第１アドレス領域に含まれる。暗号化/復号化制御部１３はＣＰＵ１１から受け取った指定アドレスに対し、アドレススクランブルを行って、外部メモリのスクランブルアドレスを生成する（ステップＳ１２）。次に、そのスクランブルアドレスで外部ＲＡＭ３にアクセスして該当アドレスを含むブロックのデータを読み出し（ステップＳ１３）、読み出したデータを復号し（ステップＳ１４）、その復号した平文データをキャッシュメモリ１２に一旦格納する（ステップＳ１５）。ＣＰＵ１１はその平文データを書き換える。暗号化/復号化制御部１３は、その書き換えられた平文データを所定のタイミングで、鍵保持部１４に格納されている鍵を使用して暗号化し（ステップＳ１６）、暗号化データを外部ＲＡＭ３のスクランブルアドレスに書き込む（ステップＳ１７）。
【００２３】
このように、外部メモリ２，３と外部バスコントローラ１５との間においてはデータ及びアドレスは暗号化された状態で伝送されるので、アドレス信号とデータ信号とがモニタされても容易にプログラム等のデータを適切な状態で入手することができない。よって、第三者による不正な読み出し、改竄につながる解析を防止することができる。
【００２４】
暗号化/復号化制御部１３によるステップＳ１６の暗号化は、１ブロック分の平文のプログラム/データに、そのブロックの先頭アドレスをＸＯＲし、その結果にブロック暗号のＥＣＢモード暗号化を実施する。ステップＳ１４の復号は、暗号化されたプログラム/データの１ブロックに対し、ブロック暗号のＥＣＢモード復号を実施し、その結果にそのブロックの先頭アドレスをＸＯＲすることで、平文プログラム/データを得る。
【００２５】
また、ステップＳ２，Ｓ１２のアドレススクランブルは、暗号化/復号のブロック単位、例えば、１６バイト単位で、ＣＰＵ１１から出力されるアドレスが、別のアドレスに変換される。また、スクランブルされる範囲があり、例えば、４Ｍバイトの範囲内でスクランブルが行われる。スクランブル後のアドレスが重複することはなく、スクランブル前のアドレス（上記の指定アドレス）とスクランブル後のアドレスは、図５(a)に示すように、１対１の所定の対応関係がある。スクランブル前のアドレスとスクランブル後のアドレスとの間においては、例えば、図５(b)に示すように４〜２１のビット範囲でスクランブルが施され、それ以外のビットでは内容がそのまま維持される。また、スクランブルされる範囲を１単位として、より大きいスクランブル範囲内でスクランブルをカスケードに行っても良い。
【００２６】
なお、書き込みアクセスがブロック間にまたがる場合には、暗号化前にブロック単位に分割し、各ブロックに対して暗号化/復号化とメモリ書き込みとが行われる。
【００２７】
また、ＣＰＵ１１からの指令アドレス範囲のうちの暗号化/復号化制御部１３を使用しないでバイパスする第２アドレス領域では、暗号化/復号及びアドレススクランブルは行われない。
【００２８】
このような暗号化方法を取ることにより、プログラム/データを先頭から順に暗号化する必要がなく、ブロック単位で自由な順序で暗号化処理を行うことが可能になる。
【００２９】
次に、プログラムを含むデータを暗号化及びアドレスクランブルして、外部ＲＯＭ２に書き込む方法について説明する。ここで、外部ＲＯＭ２は不揮発性メモリのフラッシュＲＯＭである。
【００３０】
外部ＲＯＭ２にデータを書き込む場合においてＣＰＵ１１は、外部ＲＯＭ２に対し、書き込みコマンド、書き込みアドレス、書き込みデータを送り、書き込みが完了したかを確認する必要がある。
【００３１】
ＣＰＵ１１から外部ＲＯＭ２に書き込みアクセスをする場合には、暗号化/復号化制御部１３を用いるための第１アドレス領域と、暗号化/復号化制御部１３を使用しないでＣＰＵ１１から外部ＲＯＭ２への直接的なアドレス指定となる第２アドレス領域とを選択的に用いる。
【００３２】
図６に示すように、ＣＰＵ１１は、先ず、外部メモリへのアクセス信号が暗号化/復号化制御部１３を通過するアドレス領域（第１アドレス領域）を用いる暗号化結果出力モードに設定する（ステップＳ２１）。暗号化結果出力モードは暗号化/復号化制御部１３によるアドレスのスクランブル及びデータの暗号化の結果を外部バスコントローラに出力せず、その結果をＣＰＵ１１が得るモードである。
【００３３】
次に、暗号化/復号化制御部１３を通過する第１アドレス領域で１ブロック分の平文データを書き込みを行う（ステップＳ２２）。このとき、外部ＲＯＭ２の書き込みを行いたいアドレスに書き込みを行いたいデータを書き込む。これにより、暗号化/復号化制御部１３の暗号化結果出力に対応したアドレスを指定してスクランブルアドレスと暗号化結果を読み取る（ステップＳ２３）。得られるスクランブルアドレスは第２アドレス領域のアドレスである。
【００３４】
ＣＰＵ１１は外部ＲＯＭ２への書き込みコマンドを、暗号化/復号化制御部１３をバイパスする第２アドレス領域から発行する（ステップＳ２４）。これにより、外部ＲＯＭ２への書き込みコマンドが暗号化/復号化制御部１３によって暗号化及びアドレススクランブルされてしまうことがなく、外部バスコントローラ１５を介して外部ＲＯＭ２に対するコマンドとして発行される。続いて、上記で得られたスクランブルアドレスと暗号化データを、外部ＲＯＭ２への第２アドレス領域の書き込みアドレス及び書き込みデータとして発行する（ステップＳ２５）。ステップＳ２５により外部ＲＯＭ２のスクランブルアドレスで指定される位置に１ブロックの暗号化データが書き込まれる。
【００３５】
最後に、暗号化/復号化制御部１３をバイパスする第２アドレス領域から、外部ＲＯＭ２への書き込み完了を確認する（ステップＳ２６）。
【００３６】
上記を繰り返すことで、外部ＲＯＭ２に暗号化及びアドレススクランブルされたプログラム及びデータを書き込むことができる。よって、プログラムのバージョンアップ等で外部ＲＯＭ２に格納されたプログラムを含むデータを更新する場合に装置毎に異なる鍵で暗号化することができるので、装置毎に異なる暗号化データが格納される。これにより暗号化データを不正に読み出したとしても他の装置では利用できないという利点があり、データ保護の安全性をより高めることができる。
【００３７】
なお、上記した実施例におけるアドレスの暗号化では、ＣＰＵ１１によって指定された第１アドレス領域のアドレスを１対１の所定の対応関係で前記外部メモリに割り当てられた第２アドレス領域のアドレスに変換し、その変換後のアドレスをスクランブルアドレスとしているが、これに限定されず、他の方法で暗号化しても良い。
【図面の簡単な説明】
【００３８】
【図１】本発明の実施例を示すを示すブロック図である。
【図２】図１の装置において命令フェッチを外部ＲＯＭに対して行う場合の動作を示すフローチャートである。
【図３】図１の装置においてデータ読み出しアクセスを外部ＲＡＭに対して行う場合の動作を示すフローチャートである。
【図４】図１の装置においてデータ書き込みアクセスを外部ＲＡＭに対して行う場合の動作を示すフローチャートである。
【図５】アドレススクランブルを説明する図である。
【図６】図１の装置においてデータ書き込みアクセスをフラッシュＲＯＭからなる外部ＲＯＭに対して行う場合の動作を示すフローチャートである。
【符号の説明】
【００３９】
１  ＭＣＵ部
２  外部ＲＯＭ
３  外部ＲＡＭ
１１  ＣＰＵ
１３  暗号化/復号化制御部
１４  鍵保持部
【図１】
0004865694.tif 000002
【図２】
0004865694.tif 000003
【図３】
0004865694.tif 000004
【図４】
0004865694.tif 000005
【図５】
0004865694.tif 000006
【図６】
0004865694.tif 000007