(57)【要約】【課題】ＣＰＵの実行対象とするプログラムを記憶するメモリに悪意のあるプログラムが書き込まれてしまったとしても、そのＣＰＵによるその悪意のあるプログラムの実行を抑止し得る暗号化装置を提供する。【解決手段】メモリ２０に書き込む信号を暗号化する暗号化装置１０であって、記録媒体４０から出力された、ＣＰＵ３０が実行する命令を含むプログラムを、メモリ２０のアドレス単位で、暗号文と平文とが可逆的に１対１に対応する第１暗号化方式で暗号化する暗号化部１１と、メモリ２０から読み出された信号を、前記メモリのアドレス単位で、第１暗号化方式の逆変換である第１復号化方式で復号化する復号化部１２と、を備える。【選択図】図２
2019161389.tif 000002
【特許請求の範囲】
【請求項１】
メモリに書き込む信号を暗号化する暗号化装置であって、
記録媒体から出力された、ＣＰＵが実行する命令を含むプログラムを、前記メモリのアドレス単位で、暗号文と平文とが可逆的に１対１に対応する第１暗号化方式で暗号化する暗号化部と、
前記メモリから読み出された信号を、前記メモリのアドレス単位で、前記第１暗号化方式の逆変換である第１復号化方式で復号化する復号化部と、を備える
暗号化装置。
【請求項２】
前記第１暗号化方式は、前記アドレス単位の循環シフトである
請求項１に記載の暗号化装置。
【請求項３】
前記ＣＰＵの命令セットと前記第１暗号化方式との関係は、前記ＣＰＵによって実行可能な任意の前記プログラムが、前記第１復号化方式によって復号化された場合に、復号化された信号が、前記ＣＰＵによって実行不能な信号となる関係である
請求項１又は２に記載の暗号化装置。
【請求項４】
さらに、前記メモリの各アドレスに対応する第１フラグと第２フラグとを更新するフラグ更新部とを備え、
前記暗号化部は、さらに、ＣＰＵから出力された信号を、前記メモリのアドレス単位で、暗号文と平文とが可逆的に１対１に対応する、前記第１暗号化方式とは異なる第２暗号化方式で暗号化し、
前記フラグ更新部は、（１）前記記録媒体から出力された前記プログラムの、前記第１暗号化方式による暗号文が前記メモリに書き込まれる場合に、書き込まれるアドレスに対応する前記第１フラグを活性状態とし、（２）前記ＣＰＵから出力された信号の、前記第２暗号化方式による暗号文が前記メモリに書き込まれる場合に、書き込まれるアドレスに対応する前記第２フラグを活性状態とし（３）前記第２フラグが活性状態である場合において、前記記録媒体から出力された前記プログラムの、前記第１暗号化方式による暗号文が前記メモリに書き込まれるときに、書き込まれるアドレスに対応する前記第２フラグを非活性状態とし、（４）前記第２フラグが活性状態である場合において、前記ＣＰＵから出力された信号の、前記第２暗号化方式による暗号文が前記メモリに書き込まれるときに、書き込まれるアドレスに対応する前記第１フラグを非活性状態とし、
前記復号化部は、（１）前記メモリから信号が読み出された場合において、当該信号のアドレスに対応する前記第１フラグが活性状態で、かつ、当該アドレスに対応する前記第２フラグが非活性状態であるときに、当該信号を、前記第１復号化方式で復号化し、（２）前記メモリから信号が読み出された場合において、当該信号のアドレスに対応する前記第１フラグが活性状態で、かつ、当該アドレスに対応する前記第２フラグが活性状態であるときに、当該信号の読み出し先が前記ＣＰＵであれば、当該信号を第１復号化方式で復号化し、当該信号の読み出し先が前記記録媒体であれば、当該信号を、前記第２暗号化方式の逆変換である第２復号化方式で復号化し、（３）前記メモリから信号が読み出された場合において、当該信号のアドレスに対応する前記第１フラグが非活性状態で、かつ、当該アドレスに対応する前記第２フラグが活性状態であるときに、当該信号を、前記第２復号化方式で復号化する
請求項１又は２に記載の暗号化装置。
【請求項５】
前記第２暗号化方式は、前記アドレス単位の循環シフトである
請求項４に記載の暗号化装置。
【請求項６】
前記ＣＰＵの命令セットと前記第１暗号化方式と前記第２暗号化方式との関係は、前記ＣＰＵによって実行可能な任意の前記プログラムが、前記第２暗号化方式によって暗号化された後に前記第１復号化方式によって復号化された場合に、復号化された信号が、前記ＣＰＵによって実行不能な信号となる関係である
請求項４又は５に記載の暗号化装置。
【請求項７】
さらに、外部からの操作を受け付け、当該操作に応じて、前記第１暗号化方式及び前記第１復号化方式、又は、前記第２暗号化方式及び前記第２復号化方式を設定する暗号化方式設定部を備える
請求項４〜６のいずれか１項に記載の暗号化装置。
【請求項８】
前記暗号化方式設定部が受け付ける操作には、前記ＣＰＵによる操作が含まれない
請求項７に記載の暗号化装置。
【請求項９】
ＣＰＵと、メモリと、記録媒体と、前記メモリに書き込む信号を暗号化する暗号化装置とを備え、
前記暗号化装置は、
前記記録媒体から出力された、前記ＣＰＵが実行する命令を含むプログラムを、前記メモリのアドレス単位で、暗号文と平文とが１対１に対応する第１暗号化方式で暗号化する暗号化部と、
前記メモリから読み出された信号を、前記メモリのアドレス単位で、前記第１暗号化方式の逆変換である第１復号化方式で復号化する復号化部と、を含む
暗号化システム。
【請求項１０】
メモリに書き込む信号を暗号化する暗号化方法であって、
記録媒体から出力された、ＣＰＵが実行する命令を少なくとも含むプログラムを、前記メモリの単位で、暗号文と平文とが１対１に対応する第１暗号化方式で暗号化する暗号化ステップと、
前記メモリから読み出された信号を、前記メモリのアドレス単位で、前記第１暗号化方式の逆変換である第１復号化方式で復号化する復号化ステップと、を含む
暗号化方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリに書き込む信号を暗号化する暗号化装置、暗号化システム、及び暗号化方法に関する。
【背景技術】
【０００２】
従来、プログラムを暗号化する暗号化技術が知られている。例えば、特許文献１には、対象とするプログラムに対して新たなジャンプ命令を挿入し、ジャンプ命令挿入後のプログラムに対して暗号ブロック連鎖モードによる暗号化を行う暗号化技術が記載されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００９−２１１２９２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ＣＰＵ（Central Processing Unit）の実行対象とするプログラムを記憶するメモリに悪意のあるプログラムが書き込まれてしまうと、そのＣＰＵは、その悪意のあるプログラムを実行してしまうことがある。
【０００５】
そこで、本発明は、ＣＰＵの実行対象とするプログラムを記憶するメモリに悪意のあるプログラムが書き込まれてしまったとしても、そのＣＰＵによるその悪意のあるプログラムの実行を抑止し得る暗号化装置、暗号化システム、及び暗号化方法を提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明の一態様に係る暗号化装置は、メモリに書き込む信号を暗号化する暗号化装置であって、記録媒体から出力された、ＣＰＵが実行する命令を含むプログラムを、前記メモリのアドレス単位で、暗号文と平文とが可逆的に１対１に対応する第１暗号化方式で暗号化する暗号化部と、前記メモリから読み出された信号を、前記メモリのアドレス単位で、前記第１暗号化方式の逆変換である第１復号化方式で復号化する復号化部と、を備える。
【０００７】
また、本発明の一態様に係る暗号化システムは、ＣＰＵと、メモリと、記録媒体と、前記メモリに書き込む信号を暗号化する暗号化装置とを備え、前記暗号化装置は、前記記録媒体から出力された、前記ＣＰＵが実行する命令を含むプログラムを、前記メモリのアドレス単位で、暗号文と平文とが１対１に対応する第１暗号化方式で暗号化する暗号化部と、前記メモリから読み出された信号を、前記メモリのアドレス単位で、前記第１暗号化方式の逆変換である第１復号化方式で復号化する復号化部と、を含む。
【０００８】
また、本発明の一態様に係る暗号化方法は、メモリに書き込む信号を暗号化する暗号化方法であって、記録媒体から出力された、ＣＰＵが実行する命令を少なくとも含むプログラムを、前記メモリの単位で、暗号文と平文とが１対１に対応する第１暗号化方式で暗号化する暗号化ステップと、前記メモリから読み出された信号を、前記メモリのアドレス単位で、前記第１暗号化方式の逆変換である第１復号化方式で復号化する復号化ステップと、を含む。
【発明の効果】
【０００９】
本発明によれば、ＣＰＵの実行対象とするプログラムを記憶するメモリに悪意のあるプログラムが書き込まれてしまったとしても、そのＣＰＵによるその悪意のあるプログラムの実行を抑止し得る。
【図面の簡単な説明】
【００１０】
【図１】図１は、実施の形態１に係る暗号化システムの構成を示すブロック図である。
【図２】図２は、実施の形態１に係る暗号化装置構成を示すブロック図である。
【図３Ａ】図３Ａは、第１暗号化方式における、暗号文と平文との関係を示す模式図である。
【図３Ｂ】図３Ｂは、第２暗号化方式における、暗号文と平文との関係を示す模式図である。
【図４Ａ】図４Ａは、第１復号化方式における、暗号文と平文との関係を示す模式図である。
【図４Ｂ】図４Ｂは、第２復号化方式における、暗号文と平文との関係を示す模式図である。
【図５】図５は、ケース１における暗号化システム１の動作を示す模式図である。
【図６】図６は、ケース２における暗号化システム１の動作を示す模式図である。
【図７】図７は、ケース３における暗号化システム１の動作を示す模式図である。
【図８】図８は、ケース４における暗号化システム１の動作を示す模式図である。
【図９】図９は、ケース５における暗号化システム１の動作を示す模式図である。
【図１０】図１０は、ケース６における暗号化システム１の動作を示す模式図である。
【発明を実施するための形態】
【００１１】
（本発明の一態様を得るに至った経緯）
発明者は、ＣＰＵの実行対象とするプログラムを記憶するメモリに悪意のあるプログラムが書き込まれてしまったとしても、そのＣＰＵによるその悪意のあるプログラムの実行を抑止し得る方法について検討した。その結果、発明者は、上記抑止には、ＣＰＵの実行対象となるプログラムを、一旦、直接ＣＰＵが実行できない形式の信号に変換（例えば、暗号化）してからメモリに記憶させておき、ＣＰＵがプログラムを実行する際には、その信号を逆変換（例えば、復号化）してＣＰＵが実行できる形式のプログラムに戻してからそのプログラムをＣＰＵに実行させることが有効である知見を得た。そして、発明者は、その知見に基づいて、本発明の一態様に係る暗号化装置に想到した。
【００１２】
すなわち、発明者が想到した本発明の一態様に係る暗号化装置は、メモリに書き込む信号を暗号化する暗号化装置であって、記録媒体から出力された、ＣＰＵが実行する命令を含むプログラムを、前記メモリのアドレス単位で、暗号文と平文とが可逆的に１対１に対応する第１暗号化方式で暗号化する暗号化部と、前記メモリから読み出された信号を、前記メモリのアドレス単位で、前記第１暗号化方式の逆変換である第１復号化方式で復号化する復号化部と、を備える。
【００１３】
上記暗号化装置によると、メモリに悪意のあるプログラムが書き込まれてしまったとしても、上記暗号化装置は、メモリから読み出された悪意のあるプログラムに対して、第１復号化方式で復号化する。このため、ＣＰＵが、メモリから読み出された悪意のあるプログラムに対して第１復号化方式で復号化された信号を実行しようとしても、悪意のあるプログラムとして実行されることはない。
【００１４】
従って、上記暗号化装置によると、ＣＰＵの実行対象とするプログラムを記憶するメモリに、悪意のあるプログラムが書き込まれてしまったとしても、そのＣＰＵによるその悪意のあるプログラムの実行を抑止し得る。
【００１５】
また、上記暗号化装置は、例えば、特許文献１に記載された従来のプログラムを暗号化する暗号化技術に比べて、より平易な方法で、プログラムに対する暗号化を行う。
【００１６】
このため、上記暗号化装置によると、従来の暗号化技術を利用する場合よりも、より回路規模が少ない暗号化装置を実現し得る。
【００１７】
以下、本発明の一態様に係る暗号化装置の具体例について、図面を参照しながら説明する。ここで示す実施の形態は、いずれも本発明の一具体例を示すものである。従って、以下の実施の形態で示される数値、形状、構成要素、構成要素の配置及び接続形態、並びに、ステップ（工程）及びステップの順序等は、一例であって本発明を限定するものではない。以下の実施の形態における構成要素のうち、独立請求項に記載されていない構成要素については、任意に付加可能な構成要素である。また、各図は、模式図であり、必ずしも厳密に図示されたものではない。
【００１８】
（実施の形態）
［１．構成］
図１は、本実施の形態に係る暗号化装置１０を含む、本実施の形態に係る暗号化システム１の構成を示すブロック図である。
【００１９】
図１に示されるように、暗号化システム１は、暗号化装置１０と、メモリ２０と、ＣＰＵ３０と、記録媒体４０とを含んで構成される。
【００２０】
ＣＰＵ３０は、いわゆるプロセッサと呼ばれる情報処理装置であって、例えば、半導体集積回路によって実現される。ＣＰＵ３０は、例えば、ＣＰＵコアとキャッシュメモリとを含んで構成されてもよい。
【００２１】
記録媒体４０は、ＣＰＵ３０によって利用されるプログラム、データ等を記録する記録媒体である。記録媒体４０は、ＣＰＵ３０によって利用されるプログラム、データ等を記録することができれば、どのような記録媒体であってもよい。記録媒体４０は、例えば、ハードディスクドライブ（ＨＤＤ：Hard Disk Drive）であってもよいし、ブルーレイディスク（登録商標）であってもよい。ここでは、記録媒体４０が記憶するプログラムには、ＣＰＵ３０が実行する命令が、少なくとも１つ含まれている。
【００２２】
メモリ２０は、ＣＰＵ３０のメインメモリとして利用されるメモリである。メモリ２０は、例えば、半導体集積回路によって実現される。メモリ２０は、ＣＰＵ３０のメインメモリとして利用されるものであれば、どのようなメモリであってもよい。メモリ２０は、例えば、ＤＲＡＭ（Dynamic Random Access Memory）であってもよいし、ＳＲＡＭ（Static Random Access Memory）であってもよい。
【００２３】
メモリ２０は、例えば、記録媒体４０に記録されているプログラムがロードされるプログラム記憶領域として機能する。また、メモリ２０は、例えば、ＣＰＵが一時的に利用するデータのワークエリアとして機能する。また、メモリ２０は、例えば、記録媒体４０に記録されているデータのディスクキャッシュとして機能する。
【００２４】
暗号化装置１０は、メモリ２０に書き込む信号を暗号化し、メモリ２０から読み出された信号を復号化する。暗号化装置１０は、例えば、専用ハードウエアからなる半導体集積回路によって実現されてもよいし、プロセッサとメモリとを含み、メモリに記憶されるプログラムをプロセッサが実行することによって実現されてもよい。
【００２５】
以下、暗号化装置１０について、図面を用いて詳細に説明する。
【００２６】
図２は、暗号化装置１０の構成を示すブロック図である。
【００２７】
図２に示されるように、暗号化装置１０は、暗号化部１１と、復号化部１２と、フラグ記憶部１３と、フラグ更新部１４と、暗号化方式設定部１５とを含んで構成される。
【００２８】
暗号化部１１は、記録媒体４０から出力された信号を、メモリ２０のアドレス単位で、暗号文と平文とが可逆的に１対１に対応する第１暗号化方式で暗号化する。
【００２９】
図３Ａは、第１暗号化方式における、暗号文と平文との関係を示す模式図である。
【００３０】
ここでは、第１暗号化方式は、メモリ２０のアドレス単位の循環シフト（ローテート）であるとする。しかしながら、第１暗号化方式は、メモリ２０のアドレス単位で、暗号文と平文とが可逆的に１対１に対応する暗号化方式であれば、必ずしも、循環シフトである構成に限定される必要はない。例えば、奇数ビットとその１ビット上位ビット側の偶数ビットとがそれぞれ置換される暗号化方式であってもよい。また、ここでは、メモリ２０のワード長が３２ビットである場合の例となっているが、メモリ２０のワード長は、必ずしも３２ビットに限定される必要はない。例えば、メモリ２０のワード長が１６ビットである例もあり得る。
【００３１】
図３Ａに示されるように、ここでは、第１暗号化方式は、メモリ２０のアドレス単位である３２ビット単位で行われる、左２ビットの循環シフトとなっている。
【００３２】
以下では、説明をわかりやすくするために、第１暗号化前の信号である３２ビットの値をＸとした場合における、第１暗号化後の信号である３２ビットの値をＦ（Ｘ）として表現する。
【００３３】
また、暗号化部１１は、ＣＰＵ３０から出力された信号を、メモリ２０のアドレス単位で、暗号文と平文とが可逆的に１対１に対応する、第１暗号化方式とは異なる第２暗号化方式で暗号化する。
【００３４】
図３Ｂは、第２暗号化方式における、暗号文と平文との関係を示す模式図である。
【００３５】
ここでは、第２暗号化方式は、メモリ２０のアドレス単位の循環シフト（ローテート）であるとする。しかしながら、第２暗号化方式は、メモリ２０のアドレス単位で、暗号文と平文とが可逆的に１対１に対応する、第１暗号化方式とは異なる暗号化方式であれば、必ずしも、循環シフトである構成に限定される必要はない。例えば、ビットの並び順を反転させる暗号化方式であってもよい。また、ここでは、メモリ２０のワード長が３２ビットである場合の例となっているが、メモリ２０のワード長は、必ずしも３２ビットに限定される必要はない。例えば、メモリ２０のワード長が１６ビットである例もあり得る。
【００３６】
図３Ｂに示されるように、ここでは、第２暗号化方式は、メモリ２０のアドレス単位である３２ビット単位で行われる、左３ビットの循環シフトとなっている。
【００３７】
以下では、説明をわかりやすくするために、第２暗号化前の信号である３２ビットの値をＹとした場合における、第２暗号化後の信号である３２ビットの値をＧ（Ｙ）として表現する。
【００３８】
フラグ記憶部１３は、メモリ２０の各アドレスに対応する、１ビットからなる第１フラグと、１ビットからなる第２フラグとを記憶する。ここでは、第１フラグの論理値が１のときに第１フラグは活性状態であり、第１フラグの論理値が０のときに第１フラグは非活性状態であるとするが、この逆、すなわち、第１フラグの論理値が０のときに第１フラグは活性状態であり、第１フラグの論理値が１のときに第１フラグは非活性状態であるとしてもよい。また、同様に、ここでは、第２フラグの論理値が１のときに第２フラグは活性状態であり、第２フラグの論理値が０のときに第２フラグは非活性状態であるとするが、この逆、すなわち、第２フラグの論理値が０のときに第２フラグは活性状態であり、第２フラグの論理値が１のときに第２フラグは非活性状態であるとしてもよい。
【００３９】
ここでは、第１フラグ及び第２フラグは、初期状態において非活性状態であるとする。
【００４０】
なお、ここでは、フラグ記憶部１３は、暗号化装置１０の内部に含まれるとして説明するが、必ずしも暗号化装置１０の内部に含まれる構成に限定される必要はない。例えば、フラグ記憶部１３は、メモリ２０の記憶領域の一部として実現されてもよい。
【００４１】
フラグ更新部１４は、メモリ２０の各アドレスに対応する第１フラグと第２フラグとを更新する。
【００４２】
より具体的には、フラグ更新部１４は、（１）記録媒体４０から出力されたプログラムの、第１暗号化方式による暗号文がメモリ２０に書き込まれる場合に、書き込まれるアドレスに対応する第１フラグを活性状態とする。また、フラグ更新部１４は、（２）ＣＰＵ３０から出力された信号の、第２暗号化方式による暗号文がメモリ２０に書き込まれる場合に、書き込まれるアドレスに対応する第２フラグを活性状態とする。また、フラグ更新部１４は、（３）第２フラグが活性状態である場合において、記録媒体４０から出力されたプログラムの、第１暗号化方式による暗号文がメモリ２０に書き込まれるときに、書き込まれるアドレスに対応する第２フラグを非活性状態とする。そして、フラグ更新部１４は、（４）第２フラグが活性状態である場合において、ＣＰＵ３０から出力された信号の、第２暗号化方式による暗号文がメモリ２０に書き込まれるときに、書き込まれるアドレスに対応する第１フラグを非活性状態とする。
【００４３】
復号化部１２は、メモリ２０から出力された信号を、メモリ２０のアドレス単位で、第１暗号化方式の逆変換である第１復号化方式、又は第２暗号化方式の逆変換である第２復号化方式で復号化する。
【００４４】
図４Ａは、第１復号化方式における、暗号文と平文との関係を示す模式図である。
【００４５】
上述したように、第１復号化方式は、第１暗号化方式の逆変換である。このため、ここでは、第１復号化方式は、メモリ２０のアドレス単位である３２ビット単位で行われる、右２ビットの循環シフトとなっている。
【００４６】
以下では、説明をわかりやすくするために、第１復号化前の信号である３２ビットの値をＸとした場合における、第１復号化後の信号である３２ビットの値をＦ−１（Ｘ）として表現することもある。
【００４７】
また、第１復号化方式は、第１暗号化方式の逆変換であることから、
Ｆ−１｛Ｆ（Ｘ）｝  ＝  Ｘ
となる。
【００４８】
図４Ｂは、第２復号化方式における、暗号文と平文との関係を示す模式図である。
【００４９】
上述したように、第２復号化方式は、第２暗号化方式の逆変換である。このため、ここでは、第２復号化方式は、メモリ２０のアドレス単位である３２ビット単位で行われる、右３ビットの循環シフトとなっている。
【００５０】
以下では、説明をわかりやすくするために、第２復号化前の信号である３２ビットの値をＹとした場合における、第２復号化後の信号である３２ビットの値をＧ−１（Ｙ）として表現することもある。
【００５１】
また、第２復号化方式は、第２暗号化方式の逆変換であることから、
Ｇ−１｛Ｇ（Ｙ）｝  ＝  Ｙ
となる。
【００５２】
より具体的には、復号化部１２は、（１）メモリ２０から信号が読み出された場合において、当該信号のアドレスに対応する第１フラグが活性状態で、かつ、当該アドレスに対応する第２フラグが非活性状態であるときに、当該信号を、第１復号化方式で復号化する。また、復号化部１２は、（２）メモリ２０から信号が読み出された場合において、当該信号のアドレスに対応する第１フラグが活性状態で、かつ、当該アドレスに対応する第２フラグが活性状態であるときに、当該信号の読み出し先がＣＰＵ３０であれば、当該信号を第１復号化方式で復号化し、当該信号の読み出し先が記録媒体４０であれば、当該信号を第２復号化方式で復号化する。そして、復号化部１２は、（３）メモリ２０から信号が読み出された場合において、当該信号のアドレスに対応する第１フラグが非活性状態で、かつ、当該アドレスに対応する第２フラグが活性状態であるときに、当該信号を、第２復号化方式で復号化する。
【００５３】
暗号化方式設定部１５は、外部からの操作を受け付け、受け付けた操作に応じて、第１暗号化方式及び第１復号化方式、又は、第２暗号化方式及び第２復号化方式を設定する。
【００５４】
暗号化方式設定部１５は、例えば、タッチパネルを含み、暗号化装置１０を利用するユーザからのタッチ操作を受け付けることで外部からの操作を受け付けるとしてもよい。また、暗号化方式設定部１５は、例えば、外部機器（例えば、スマートフォン）と通信可能な通信回路を含み、外部機器による操作信号を受信することで外部からの操作を受け付けるとしてもよい。また、暗号化方式設定部１５は、例えば、ディップスイッチを含み、暗号化装置１０を利用するユーザからのスイッチ切り替え操作を受け付けることで外部からの操作を受け付けるとしてもよい。
【００５５】
但し、暗号化方式設定部１５が受け付ける操作には、ＣＰＵ３０による操作が含まれないことが望ましい。これは、ＣＰＵ３０による悪意のある操作を受け付けてしまうことにより発生し得る、暗号化システム１におけるセキュリティホールを未然に防止するためである。
【００５６】
以下、上記構成の暗号化システム１が行う動作について、図面を参照しながら説明する。
【００５７】
［２．動作］
まず、記録媒体４０からメモリ２０にロードされたプログラムを、ＣＰＵ３０が実行しようとする場合（以下、「ケース１」と呼ぶ。）における暗号化システム１の動作について説明する。
【００５８】
図５は、ケース１における暗号化システム１の動作を示す模式図である。
【００５９】
図５に示されるように、記録媒体４０から値がＸとなる信号（プログラム）が出力されると、暗号化部１１は、その信号に対して第１暗号化方式による暗号化を行い、値がＦ（Ｘ）となる信号を生成する。そして、メモリ２０の書き込みアドレス（以下、「アドレスＡ」と呼ぶ。）に、値がＦ（Ｘ）となる信号が書き込まれる。一方で、フラグ更新部１４は、そのアドレスＡに対応する第１フラグ、第２フラグを、初期状態である（０、０）から（１、０）に更新する。
【００６０】
その後、ＣＰＵ３０によって利用されるために、メモリ２０のアドレスＡから、値がＦ（Ｘ）となる信号が読み出されると、復号化部１２は、アドレスＡに対応する第１フラグ、第２フラグが（１、０）であるため、その信号に対して、第１復号化方式による復号化を行い、値がＦ−１｛Ｆ（Ｘ）｝、すなわち、Ｘとなる信号を生成する。このため、ＣＰＵ３０は、元々記録媒体４０に記録されていた状態に復元された信号（プログラム）を利用することとなる。
【００６１】
このように、ケース１において、ＣＰＵ３０は、記録媒体４０からメモリ２０にロードされたプログラムを、正しく実行することができる。
【００６２】
次に、記録媒体４０からメモリ２０のディスクキャッシュ領域に書き込まれたデータを、値を更新することなく、記録媒体４０へライトバックしようとする場合（以下、「ケース２」呼ぶ。）における暗号化システム１の動作について説明する。
【００６３】
図６は、ケース２における暗号化システム１の動作を示す模式図である。
【００６４】
図６に示されるように、記録媒体４０から値がＸとなる信号（データ）が出力されると、暗号化部１１は、その信号に対して第１暗号化方式による暗号化を行い、値がＦ（Ｘ）となる信号を生成する。そして、メモリ２０の書き込みアドレス（以下、「アドレスＢ」と呼ぶ。）に、値がＦ（Ｘ）となる信号が書き込まれる。一方で、フラグ更新部１４は、そのアドレスＢに対応する第１フラグ、第２フラグを、初期状態である（０、０）から（１、０）に更新する。
【００６５】
その後、記録媒体４０にライトバックするために、メモリ２０のアドレスＡから、値がＦ（Ｘ）となる信号が読み出されると、復号化部１２は、アドレスＡに対応する第１フラグ、第２フラグが（１、０）であるため、その信号に対して、第１復号化方式による復号化を行い、値がＦ−１｛Ｆ（Ｘ）｝、すなわち、Ｘとなる信号を生成する。これにより、記録媒体４０は、元々記録媒体４０に記録されていた状態に復元された信号（データ）がライトバックされることとなる。
【００６６】
このように、ケース２において、記録媒体４０は、正しくライトバックされることとなる。
【００６７】
次に、記録媒体４０からメモリ２０のディスクキャッシュ領域に書き込まれたデータを、ＣＰＵ３０が値を更新した後に、記録媒体４０へライトバックしようとする場合（以下、「ケース３」呼ぶ。）における暗号化システム１の動作について説明する。
【００６８】
図７は、ケース３における暗号化システム１の動作を示す模式図である。
【００６９】
図７に示されるように、記録媒体４０から値がＸとなる信号（データ）が出力されると、暗号化部１１は、その信号に対して第１暗号化方式による暗号化を行い、値がＦ（Ｘ）となる信号を生成する。そして、メモリ２０の書き込みアドレス（以下、「アドレスＣ」と呼ぶ。）に、値がＦ（Ｘ）となる信号が書き込まれる。一方で、フラグ更新部１４は、そのアドレスＣに対応する第１フラグ、第２フラグを、初期状態である（０、０）から（１、０）に更新する。
【００７０】
その後、ＣＰＵ３０から値がＹとなる信号（データ）が出力されると、暗号化部１１は、その信号に対して第２暗号化方式による暗号化を行い、値がＧ（Ｙ）となる信号を生成する。そして、アドレスＣに、値がＧ（Ｙ）となる信号が書き込まれる。すなわち、値がＧ（Ｙ）となる信号で上書き更新される。一方で、フラグ更新部１４は、そのアドレスＣに対応する第１フラグ、第２フラグを（１、０）から（１、１）に更新する。
【００７１】
その後、記録媒体４０にライトバックするために、メモリ２０のアドレスＣから、値がＧ（Ｙ）となる信号が読み出されると、復号化部１２は、アドレスＣに対応する第１フラグ、第２フラグが（１、１）であり、読み出し先が記録媒体４０であるため、その信号に対して、第２復号化方式による復号化を行い、値がＧ−１｛Ｇ（Ｙ）｝、すなわち、Ｙとなる信号を生成する。これにより、記録媒体４０は、元々ＣＰＵ３０から出力された状態に復元された信号（データ）がライトバックされることとなる。
【００７２】
このように、ケース３において、記録媒体４０は、正しくライトバックされることとなる。
【００７３】
次に、記録媒体４０からメモリ２０にロードされたプログラムを、ＣＰＵ３０が不正なプログラムに書き換えた後に、ＣＰＵ３０がその不正なプログラムを実行しようとする場合（以下、「ケース４」と呼ぶ。）における暗号化システム１の動作について説明する。
【００７４】
図８は、ケース４における暗号化システム１の動作を示す模式図である。
【００７５】
図８に示されるように、記録媒体４０から値がＸとなる信号（プログラム）が出力されると、暗号化部１１は、その信号に対して第１暗号化方式による暗号化を行い、値がＦ（Ｘ）となる信号を生成する。そして、メモリ２０の書き込みアドレス（以下、「アドレスＤ」と呼ぶ。）に、値がＦ（Ｘ）となる信号が書き込まれる。一方で、フラグ更新部１４は、そのアドレスＤに対応する第１フラグ、第２フラグを、初期状態である（０、０）から（１、０）に更新する。
【００７６】
その後、ＣＰＵ３０から値がＹとなる信号（不正なプログラム）が出力されると、暗号化部１１は、その信号に対して第２暗号化方式による暗号化を行い、値がＧ（Ｙ）となる信号を生成する。そして、アドレスＤに、値がＧ（Ｙ）となる信号が書き込まれる。すなわち、値がＧ（Ｙ）となる信号で上書き更新される。一方で、フラグ更新部１４は、そのアドレスＤに対応する第１フラグ、第２フラグを（１、０）から（１、１）に更新する。
【００７７】
その後、ＣＰＵ３０によって利用されるために、メモリ２０のアドレスＤから、値がＧ（Ｙ）となる信号が読み出されると、復号化部１２は、アドレスＤに対応する第１フラグ、第２フラグが（１、１）であり、読み出し先がＣＰＵ３０であるため、その信号に対して、第１復号化方式による復号化を行い、値がＦ−１｛Ｇ（Ｙ）｝となる信号を生成する。
【００７８】
このＦ−１｛Ｇ（Ｙ）｝となる信号は、値がＹとなる不正なプログラムとは異なる信号である。これにより、ＣＰＵ３０は、値がＹとなる不正なプログラムを実行しない。
【００７９】
このように、ケース４において、ＣＰＵ３０は、不正なプログラムを実行しない。
【００８０】
なお、このとき、値がＦ−１｛Ｇ（Ｙ）｝となる信号が、ＣＰＵ３０によって実行されることのない信号であることが望ましい。すなわち、ＣＰＵ３０の命令セットと第１暗号化方式と第２暗号化方式との関係は、ＣＰＵ３０によって実行可能な任意のプログラムが、第２暗号化方式によって暗号化された後に第１復号化方式によって復号化された場合に、復号化された信号が、ＣＰＵ３０によって実行不能な信号となる関係であることが望ましい。
【００８１】
次に、ＣＰＵ３０がメモリ２０に不正なプログラムを書き込んだ後に、その不正なプログラムを記録媒体４０からメモリ２０にロードされたプログラムで更新し、さらにその後、ＣＰＵ３０がその更新されたプログラムを実行しようとする場合（以下、「ケース５」と呼ぶ。）における暗号化システム１の動作について説明する。
【００８２】
図９は、ケース５における暗号化システム１の動作を示す模式図である。
【００８３】
図９に示されるように、ＣＰＵ３０から値がＹとなる信号（不正なプログラム）が出力されると、暗号化部１１は、その信号に対して第２暗号化方式による暗号化を行い、値がＧ（Ｙ）となる信号を生成する。そして、メモリ２０の書き込みアドレス（以下、「アドレスＥ」と呼ぶ。）に、値がＧ（Ｙ）となる信号が書き込まれる。一方で、フラグ更新部１４は、そのアドレスＥに対応する第１フラグ、第２フラグを、初期状態である（０、０）から（０、１）に更新する。
【００８４】
その後、記録媒体４０から値がＸとなる信号（プログラム）が出力されると、暗号化部１１は、その信号に対して第１暗号化方式による暗号化を行い、値がＦ（Ｘ）となる信号を生成する。そして、アドレスＥに、値がＦ（Ｘ）となる信号が書き込まれる。すなわち、値がＦ（Ｘ）となる信号で上書き更新される。一方で、フラグ更新部１４は、そのアドレスＥに対応する第１フラグ、第２フラグを（０、１）から（１、０）に更新する。
【００８５】
その後、ＣＰＵ３０によって利用されるために、メモリ２０のアドレスＥから、値がＦ（Ｘ）となる信号が読み出されると、復号化部１２は、アドレスＥに対応する第１フラグ、第２フラグが（１、０）であり、読み出し先がＣＰＵ３０であるため、その信号に対して、第１復号化方式による復号化を行い、値がＦ−１｛Ｆ（Ｘ）｝、すなわち、Ｘとなる信号を生成する。
【００８６】
このように、ケース５において、ＣＰＵ３０は、記録媒体４０からメモリ２０にロードされたプログラムを、正しく実行することができる。
【００８７】
次に、記録媒体４０からメモリ２０にロードされたプログラムを、ＣＰＵ３０が初期化した後に、ＣＰＵ３０によって、ワークエリアとしてデータが書き込まれ、さらにその後、ＣＰＵ３０によってそのデータ利用しようとする場合（以下、「ケース６」と呼ぶ。）における暗号化システム１の動作について説明する。
【００８８】
図１０は、ケース６における暗号化システム１の動作を示す模式図である。
【００８９】
図１０に示されるように、記録媒体４０から値がＸとなる信号（プログラム）が出力されると、暗号化部１１は、その信号に対して第１暗号化方式による暗号化を行い、値がＦ（Ｘ）となる信号を生成する。そして、メモリ２０の書き込みアドレス（以下、「アドレスＦ」と呼ぶ。）に、値がＦ（Ｘ）となる信号が書き込まれる。一方で、フラグ更新部１４は、そのアドレスＦに対応する第１フラグ、第２フラグを、初期状態である（０、０）から（１、０）に更新する。
【００９０】
その後、ＣＰＵ３０から値がＹとなる信号（初期化データ）が出力されると、暗号化部１１は、その信号に対して第２暗号化方式による暗号化を行い、値がＧ（Ｙ）となる信号を生成する。そして、アドレスＦに、値がＧ（Ｙ）となる信号が書き込まれる。すなわち、値がＧ（Ｙ）となる信号で上書き更新される。一方で、フラグ更新部１４は、そのアドレスＦに対応する第１フラグ、第２フラグを（１、０）から（１、１）に更新する。
【００９１】
その後、ＣＰＵ３０から値がＺとなる信号（ワークデータ）が出力されると、暗号化部１１は、その信号に対して第２暗号化方式による暗号化を行い、値がＧ（Ｚ）となる信号を生成する。そして、アドレスＦに、値がＧ（Ｚ）となる信号が書き込まれる。すなわち、値がＧ（Ｚ）となる信号で上書き更新される。一方で、フラグ更新部１４は、そのアドレスＦに対応する第１フラグ、第２フラグを（１、１）から（０、１）に更新する。
【００９２】
その後、ＣＰＵ３０によって利用されるために、メモリ２０のアドレスＦから、値がＧ（Ｚ）となる信号が読み出されると、復号化部１２は、アドレスＦに対応する第１フラグ、第２フラグが（０、１）であり、読み出し先がＣＰＵ３０であるため、その信号に対して、第２復号化方式による復号化を行い、値がＧ−１｛Ｇ（Ｚ）｝、すなわち、Ｚとなる信号を生成する。
【００９３】
このように、ケース６において、ＣＰＵ３０は、ワークエリアとして書き込まれたデータを、正しく利用することができる。
【００９４】
［３．効果］
上記構成の暗号化装置１０によると、ケース４、ケース５に示されるように、ＣＰＵ３０の実行対象とするプログラムを記憶するメモリ２０に悪意のあるプログラムが書き込まれてしまったとしても、そのＣＰＵに３０よるその悪意のあるプログラムの実行を抑止し得る。
【００９５】
また、上記構成の暗号化装置１０によると、ケース１、ケース２、ケース３、ケース６に示されるように、ＣＰＵ３０の実行対象とするプログラムを記憶するメモリ２０に悪意のあるプログラムが書き込まれない場合には、ＣＰＵ３０は、正常な動作を行う。
【００９６】
（補足）
以上のように、本出願において開示する技術の例示として、実施の形態について説明した。しかしながら本発明による技術は、これらに限定されず、適宜、変更、置き換え、付加、省略等を行った実施の形態にも適用可能である。
【００９７】
以下に、本発明における変形例の一例について説明する。
【００９８】
実施の形態では、暗号化部１１は、ＣＰＵ３０から出力された信号を、メモリ２０のアドレス単位で、暗号文と平文とが可逆的に１対１に対応する、第１暗号化方式とは異なる第２暗号化方式で暗号化する構成の例であるとして説明した。
【００９９】
これに対して、本変形例では、変形例に係る暗号化部は、ＣＰＵ３０から出力された信号に対して、何も変換を行わない構成の例となっている。言い換えれば、変形例に係る暗号化部は、第２暗号化方式として、暗号文と平文とが等しくなる変換を行う構成の例となっている。
【０１００】
ここでは、第２暗号化方式は、暗号文と平文とが等しいため、第２暗号化前の信号である３２ビットの値をＹとした場合における、第２暗号化後の信号である３２ビットの値をＧ（Ｙ）として表現すると、
Ｇ（Ｙ）  =  Ｙ
となる。
【０１０１】
また、ここでは、第２復号化方式は、第２暗号化方式の逆変換であるため、第２復号化前の信号である３２ビットの値をＹとした場合における、第２復号化後の信号である３２ビットの値をＧ−１（Ｙ）として表現すると
Ｇ−１（Ｙ）  ＝  Ｙ
となる。
【０１０２】
すなわち、本変形例では、変形例に係る復号化部は、（１）メモリ２０から信号が読み出された場合において、当該信号のアドレスに対応する第１フラグが活性状態で、かつ、当該アドレスに対応する第２フラグが非活性状態であるときに、当該信号を、第１復号化方式で復号化する。また、変形例に係る復号化部は、（２）メモリ２０から信号が読み出された場合において、当該信号のアドレスに対応する第１フラグが活性状態で、かつ、当該アドレスに対応する第２フラグが活性状態であるときに、当該信号の読み出し先がＣＰＵ３０であれば、当該信号を第１復号化方式で復号化し、当該信号の読み出し先が記録媒体４０であれば、当該信号に対して何も変換しない。そして、実施の形態に係る復号化部は、（３）メモリ２０から信号が読み出された場合において、当該信号のアドレスに対応する第１フラグが非活性状態で、かつ、当該アドレスに対応する第２フラグが活性状態であるときに、当該信号に対して何も変換しない。
【０１０３】
暗号化部１１の替わりに上記変形例に係る暗号化部を備え、復号化部１２の替わりに上記変形例に係る復号化部を備える変形例に係る暗号化装置によると、暗号化装置１０と同様に、ケース４、ケース５に示されるように、ＣＰＵ３０の実行対象とするプログラムを記憶するメモリ２０に悪意のあるプログラムが書き込まれてしまったとしても、そのＣＰＵに３０よるその悪意のあるプログラムの実行を抑止し得る。
【０１０４】
また、この変形例に係る暗号化装置によると、暗号化装置１０と同様に、ケース１、ケース２、ケース３、ケース６に示されるように、ＣＰＵ３０の実行対象とするプログラムを記憶するメモリ２０に悪意のあるプログラムが書き込まれない場合には、ＣＰＵ３０は、正常な動作を行う。
【０１０５】
以下、ケース１〜ケース６のそれぞれについて、暗号化装置１０の替わりに上記変形例に係る暗号化装置を備える、変形例に係る暗号化システムの行う動作について説明する。
【０１０６】
ケース１、ケース２の場合には、第２暗号化方式による暗号化、及び第２復号化方式による復号化は行われない。このため、変形例に係る暗号化システムは、暗号化システム１と同様の動作を行う。
【０１０７】
ケース３の場合には、記録媒体４０から値がＸとなる信号（データ）が出力されると、変形例に係る暗号化部は、その信号に対して第１暗号化方式による暗号化を行い、値がＦ（Ｘ）となる信号を生成する。そして、メモリ２０の書き込みアドレスＣに、値がＦ（Ｘ）となる信号が書き込まれる。一方で、フラグ更新部１４は、そのアドレスＣに対応する第１フラグ、第２フラグを、初期状態である（０、０）から（１、０）に更新する。
【０１０８】
その後、ＣＰＵ３０から値がＹとなる信号（データ）が出力されると、変形例に係る暗号化部は、暗号化を行わない。そして、アドレスＣに、値がＹとなる信号が書き込まれる。すなわち、値がＹとなる信号で上書き更新される。一方で、フラグ更新部１４は、そのアドレスＣに対応する第１フラグ、第２フラグを（１、０）から（１、１）に更新する。
【０１０９】
その後、記録媒体４０にライトバックするために、メモリ２０のアドレスＣから、値がＹとなる信号が読み出されると、変形例に係る復号化部は、アドレスＣに対応する第１フラグ、第２フラグが（１、１）であり、読み出し先が記録媒体４０であるため、その信号に対して、復号化を行わない。これにより、記録媒体４０は、元々ＣＰＵ３０から出力された値がＹとなる信号（データ）がライトバックされることとなる。
【０１１０】
このように、ケース３において、記録媒体４０は、正しくライトバックされることとなる。
【０１１１】
ケース４の場合には、記録媒体４０から値がＸとなる信号（プログラム）が出力されると、変形例に係る暗号化部は、その信号に対して第１暗号化方式による暗号化を行い、値がＦ（Ｘ）となる信号を生成する。そして、メモリ２０の書き込みアドレスＤに、値がＦ（Ｘ）となる信号が書き込まれる。一方で、フラグ更新部１４は、そのアドレスＤに対応する第１フラグ、第２フラグを、初期状態である（０、０）から（１、０）に更新する。
【０１１２】
その後、ＣＰＵ３０から値がＹとなる信号（不正なプログラム）が出力されると、変形例に係る暗号化部は、暗号化を行わない。そして、アドレスＤに、値がＹとなる信号が書き込まれる。すなわち、値がＹとなる信号で上書き更新される。一方で、フラグ更新部１４は、そのアドレスＤに対応する第１フラグ、第２フラグを（１、０）から（１、１）に更新する。
【０１１３】
その後、ＣＰＵ３０によって利用されるために、メモリ２０のアドレスＤから、値がＹとなる信号が読み出されると、変形例に係る復号化部は、アドレスＤに対応する第１フラグ、第２フラグが（１、１）であり、読み出し先がＣＰＵ３０であるため、その信号に対して、第１復号化方式による復号化を行い、値がＦ−１（Ｙ）となる信号を生成する。
【０１１４】
このＦ−１（Ｙ）となる信号は、値がＹとなる不正なプログラムとは異なる信号である。これにより、ＣＰＵ３０は、値がＹとなる不正なプログラムを実行しない。
【０１１５】
このように、ケース４において、ＣＰＵ３０は、不正なプログラムを実行しない。
【０１１６】
なお、このとき、値がＦ−１（Ｙ）となる信号が、ＣＰＵ３０によって実行されることのない信号であることが望ましい。すなわち、ＣＰＵ３０の命令セットと第１暗号化方式との関係は、ＣＰＵ３０によって実行可能な任意のプログラムが、第１復号化方式によって復号化された場合に、復号化された信号が、ＣＰＵ３０によって実行不能な信号となる関係であることが望ましい。
【０１１７】
ケース５の場合には、ＣＰＵ３０から値がＹとなる信号（不正なプログラム）が出力されると、変形例に係る暗号化部は、暗号化を行わない。そして、メモリ２０の書き込みアドレスＥに、値がＹとなる信号が書き込まれる。一方で、フラグ更新部１４は、そのアドレスＥに対応する第１フラグ、第２フラグを、初期状態である（０、０）から（０、１）に更新する。
【０１１８】
その後、記録媒体４０から値がＸとなる信号（プログラム）が出力されると、変形例に係る暗号化部は、その信号に対して第１暗号化方式による暗号化を行い、値がＦ（Ｘ）となる信号を生成する。そして、アドレスＥに、値がＦ（Ｘ）となる信号が書き込まれる。すなわち、値がＦ（Ｘ）となる信号で上書き更新される。一方で、フラグ更新部１４は、そのアドレスＥに対応する第１フラグ、第２フラグを（０、１）から（１、０）に更新する。
【０１１９】
その後、ＣＰＵ３０によって利用されるために、メモリ２０のアドレスＥから、値がＦ（Ｘ）となる信号が読み出されると、変形例に係る復号化部は、アドレスＥに対応する第１フラグ、第２フラグが（１、０）であり、読み出し先がＣＰＵ３０であるため、その信号に対して、第１復号化方式による復号化を行い、値がＦ−１｛Ｆ（Ｘ）｝、すなわち、Ｘとなる信号を生成する。
【０１２０】
このように、ケース５において、ＣＰＵ３０は、記録媒体４０からメモリ２０にロードされたプログラムを、正しく実行することができる。
【０１２１】
ケース６の場合には、記録媒体４０から値がＸとなる信号（プログラム）が出力されると、変形例に係る暗号化部は、その信号に対して第１暗号化方式による暗号化を行い、値がＦ（Ｘ）となる信号を生成する。そして、メモリ２０の書き込みアドレスＦに、値がＦ（Ｘ）となる信号が書き込まれる。一方で、フラグ更新部１４は、そのアドレスＦに対応する第１フラグ、第２フラグを、初期状態である（０、０）から（１、０）に更新する。
【０１２２】
その後、ＣＰＵ３０から値がＹとなる信号（初期化データ）が出力されると、変形例に係る暗号化部は、暗号化を行わない。そして、アドレスＦに、値がＹとなる信号が書き込まれる。すなわち、値がＹとなる信号で上書き更新される。一方で、フラグ更新部１４は、そのアドレスＦに対応する第１フラグ、第２フラグを（１、０）から（１、１）に更新する。
【０１２３】
その後、ＣＰＵ３０から値がＺとなる信号（ワークデータ）が出力されると、変形例に係る暗号化部１１は、暗号化を行わない。そして、アドレスＦに、値がＺとなる信号が書き込まれる。すなわち、値がＺとなる信号で上書き更新される。一方で、フラグ更新部１４は、そのアドレスＦに対応する第１フラグ、第２フラグを（１、１）から（０、１）に更新する。
【０１２４】
その後、ＣＰＵ３０によって利用されるために、メモリ２０のアドレスＦから、値がＺとなる信号が読み出されると、復号化部１２は、アドレスＦに対応する第１フラグ、第２フラグが（０、１）であり、読み出し先がＣＰＵ３０であるため、復号化を行わない。
【０１２５】
このように、ケース６において、ＣＰＵ３０は、ワークエリアとして書き込まれたデータを、正しく利用することができる。
【産業上の利用可能性】
【０１２６】
本発明は、メモリに書き込む信号を暗号化する暗号化装置、暗号化システム、及び暗号化方法に広く利用可能である。
【符号の説明】
【０１２７】
１  暗号化システム
１０  暗号化装置
１１  暗号化部
１２  復号化部
１３  フラグ記憶部
１４  フラグ更新部
１５  暗号化方式設定部
２０  メモリ
３０  ＣＰＵ
４０  記録媒体
【図１】
2019161389.tif 000003
【図２】
2019161389.tif 000004
【図３Ａ】
2019161389.tif 000005
【図３Ｂ】
2019161389.tif 000006
【図４Ａ】
2019161389.tif 000007
【図４Ｂ】
2019161389.tif 000008
【図５】
2019161389.tif 000009
【図６】
2019161389.tif 000010
【図７】
2019161389.tif 000011
【図８】
2019161389.tif 000012
【図９】
2019161389.tif 000013
【図１０】
2019161389.tif 000014