IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ ルネサスエレクトロニクス株式会社の特許一覧

<>
  • 特許-半導体装置、及び情報アクセス方法 図1
  • 特許-半導体装置、及び情報アクセス方法 図2
  • 特許-半導体装置、及び情報アクセス方法 図3
  • 特許-半導体装置、及び情報アクセス方法 図4
  • 特許-半導体装置、及び情報アクセス方法 図5
  • 特許-半導体装置、及び情報アクセス方法 図6
  • 特許-半導体装置、及び情報アクセス方法 図7
  • 特許-半導体装置、及び情報アクセス方法 図8
  • 特許-半導体装置、及び情報アクセス方法 図9
  • 特許-半導体装置、及び情報アクセス方法 図10
  • 特許-半導体装置、及び情報アクセス方法 図11
  • 特許-半導体装置、及び情報アクセス方法 図12
  • 特許-半導体装置、及び情報アクセス方法 図13
  • 特許-半導体装置、及び情報アクセス方法 図14
  • 特許-半導体装置、及び情報アクセス方法 図15
  • 特許-半導体装置、及び情報アクセス方法 図16
  • 特許-半導体装置、及び情報アクセス方法 図17
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-11-17
(45)【発行日】2022-11-28
(54)【発明の名称】半導体装置、及び情報アクセス方法
(51)【国際特許分類】
   G06F 12/14 20060101AFI20221118BHJP
【FI】
G06F12/14 510A
【請求項の数】 17
(21)【出願番号】P 2019136088
(22)【出願日】2019-07-24
(65)【公開番号】P2021021966
(43)【公開日】2021-02-18
【審査請求日】2022-01-07
(73)【特許権者】
【識別番号】302062931
【氏名又は名称】ルネサスエレクトロニクス株式会社
(74)【代理人】
【識別番号】100103894
【弁理士】
【氏名又は名称】家入 健
(72)【発明者】
【氏名】八木 浩司
【審査官】宮司 卓佳
(56)【参考文献】
【文献】特開2009-163738(JP,A)
【文献】特開2004-303315(JP,A)
【文献】特開2017-041145(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 12/00-12/14
G06F 21/60-21/62
(57)【特許請求の範囲】
【請求項1】
動作プログラム、及び前記動作プログラムから読み出される1以上の情報を記憶する第1のメモリと、
前記第1のメモリと電気的に接続され、前記動作プログラムに従って処理を実行するプロセッサと、を有し、
前記第1のメモリは、前記動作プログラムによって使用されない未使用領域に前記1以上の情報を記憶し、
前記プロセッサは、前記動作プログラムの実行時に、
前記第1のメモリ内のアドレスを示す第1のアドレス情報を記憶する第2のメモリから前記第1のアドレス情報を取得し、
前記第1のアドレス情報を用いて前記第1のメモリから前記情報を読み出す、半導体装置。
【請求項2】
前記第1のメモリは前記半導体装置の外部からアクセス可能なメモリ、前記第2のメモリは前記半導体装置の外部からアクセスできないメモリである請求項1に記載の半導体装置。
【請求項3】
前記動作プログラム及び前記情報は前記半導体装置の外部から書き換え可能である請求項1に記載の半導体装置。
【請求項4】
前記第1のメモリは、前記動作プログラムを記憶するアドレス範囲に包含される未使用領域に前記情報を記憶する請求項1に記載の半導体装置。
【請求項5】
前記第1のアドレス情報は、前記第1のメモリにおいて前記情報が記憶されるアドレスを示す請求項1に記載の半導体装置。
【請求項6】
前記第1のアドレス情報は、先頭アドレス、及び前記情報のデータ長を含む請求項1に記載の半導体装置。
【請求項7】
前記プロセッサは、前記第1のアドレス情報に対して所定の演算を行うことにより、前記第1のメモリにおいて前記情報が記憶されるアドレス範囲を特定する請求項1に記載の半導体装置。
【請求項8】
前記第1のメモリは、前記情報を記憶する未使用領域にダミーデータを更に記憶する請求項1に記載の半導体装置。
【請求項9】
前記第1のアドレス情報は、先頭アドレス、前記情報のデータ長、及び前記ダミーデータのデータ長を含む請求項8に記載の半導体装置。
【請求項10】
前記第1のメモリは前記情報を複数記憶する請求項1に記載の半導体装置。
【請求項11】
前記第2のメモリは、前記複数の情報のそれぞれに対応した複数の前記第1のアドレス情報を記憶する請求項10に記載の半導体装置。
【請求項12】
前記第1のメモリは、更に前記第1のメモリにおいて前記情報が記憶されるアドレスを示す第2のアドレス情報を前記未使用領域に記憶し、かつ、前記第1のアドレス情報は、前記第1のメモリにおいて前記第2のアドレス情報が記憶されるアドレスを示し、
前記プロセッサは、前記第1のアドレス情報を用いて前記第1のメモリから前記第2のアドレス情報を取得し、前記第2のアドレス情報を用いて前記第1のメモリから前記情報を読み出す請求項1に記載の半導体装置。
【請求項13】
前記第2のメモリを更に有する請求項1に記載の半導体装置。
【請求項14】
前記第2のメモリは外部メモリである請求項1に記載の半導体装置。
【請求項15】
動作プログラム、及び該動作プログラムから読み出される1以上の情報を記憶する第1のメモリ内のアドレスを示す第1のアドレス情報を記憶する第2のメモリから前記第1のアドレス情報を取得し、
前記第1のアドレス情報を用いて、前記第1のメモリから前記情報を読み出し、
前記第1のメモリは、前記動作プログラムによって使用されない未使用領域に前記1以上の情報を記憶している、情報アクセス方法。
【請求項16】
前記情報を読み出すことは、前記第1のアドレス情報に対して所定の演算を行うことにより、前記第1のメモリにおいて前記情報が記憶されるアドレス範囲を特定することを含む請求項15に記載の情報アクセス方法。
【請求項17】
前記第1のメモリは、更に前記第1のメモリにおいて前記情報が記憶されるアドレスを示す第2のアドレス情報を前記未使用領域に記憶し、かつ、前記第1のアドレス情報は、前記第1のメモリにおいて前記第2のアドレス情報が記憶されるアドレスを示し、
前記情報を読み出すことは、前記第1のアドレス情報に基づいて前記第1のメモリから前記第2のアドレス情報を取得すること、及び、前記第2のアドレス情報に基づいて前記第1のメモリから前記情報を読み出すことを含む請求項15に記載の情報アクセス方法。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、半導体装置及び情報アクセス方法に関し、例えばプログラム制御により情報を使用した処理を実行する半導体装置、及び半導体装置における情報アクセス方法に関する。
【背景技術】
【0002】
マイクロコントローラ(MCU:Micro Controller Unit)には、フラッシュメモリが搭載される場合が多い。マイクロコントローラは、そのフラッシュメモリに格納されたプログラムに従って動作する。非特許文献1に記載されるように、フラッシュメモリのメモリ空間は、エキストラ領域を含む場合がある。エキストラ領域は、外部から読み書きが困難なメモリ領域である。エキストラ領域には、MCUを識別するためのユニークID(identifier)が格納される。
【0003】
MCUは、フラッシュ領域選択レジスタとフラッシュ制御レジスタとを有する。フラッシュ領域選択レジスタは、エキストラ領域選択ビットを有する。エキストラ領域選択ビットは、エキストラ領域に対するソフトウェアコマンドの発行前に「1」にセットされる。フラッシュ制御レジスタは、ソフトウェアコマンド設定ビットを有する。ソフトウェアコマンド設定ビットは、ソフトウェアコマンドを設定する。ソフトウェアコマンドは、ユニークIDのリードを含む。ソフトウェアコマンド設定ビットに所定のビット列がセットされることで、ユニークIDのリードが実行される。
【先行技術文献】
【非特許文献】
【0004】
【文献】「ユーザーズマニュアル ハードウェア編 ルネサス32ビットマイクロコンピュータ RXファミリ/RX100シリーズ」、Rev.1.02、2014年12月、p.1301-1322
【発明の概要】
【発明が解決しようとする課題】
【0005】
上記エキストラ領域は、外部のプログラムからリード又はライトできない領域である。エキストラ領域に格納されるデータは、メモリダンプによって解析することができない。このため、秘匿したい秘密情報がエキストラ領域に格納される場合、秘密情報の漏洩が防止できる。しかしながら、エキストラ領域は、外部プログラム書き込み装置を利用してユーザが書き換えることができないメモリ領域である。従って、ユーザは、自身によって秘密情報をエキストラ領域に書き込みことはできない。
【0006】
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【0007】
一実施の形態によれば、半導体装置において、第1のメモリは、動作プログラムと、その動作プログラムに読み出される1以上の情報とを記憶する。第1のメモリにおいて、上記情報は、動作プログラムによって使用されない未使用領域に記憶される。プロセッサは、第2のメモリからアドレス情報を取得し、アドレス情報を用いて第1のメモリから情報を読み出す。
【発明の効果】
【0008】
前記一実施の形態によれば、半導体装置、及び情報アクセス方法は、情報の秘匿性を確保しつつ、ユーザにより外部の書き込み装置から情報の書き込みが可能である。
【図面の簡単な説明】
【0009】
図1】実施形態1に係る半導体装置を示すブロック図。
図2】メモリ配置を示すブロック図。
図3】ソースコードにおける変数定義の記述例と、メモリ上に作成される変数領域とを示す図。
図4】ソースコードの別例と、メモリ上に作成される変数領域とを示す図。
図5】メモリマップを示す図。
図6】未使用領域における秘密情報の配置を示す図。
図7】アドレス情報の具体例を示す図。
図8】マイコンに秘密情報を記憶する際の手順を示すフローチャート。
図9】秘密情報を使用する場合のマイコンの動作手順を示すフローチャート。
図10】実施形態2におけるメモリ配置を示すブロック。
図11】実施形態2におけるアドレス情報の具体例を示す図。
図12】実施形態3における秘密情報の配置を示す図。
図13】実施形態3において用いられるアドレス情報の具体例を示す図。
図14】実施形態4に係る半導体装置の構成を示すブロック図。
図15】実施形態5におけるメモリ配置を示す図。
図16】動作プログラム更新時のメモリ配置を示すブロック図。
図17】動作プログラム更新後のメモリ配置を示すブロック図。
【発明を実施するための形態】
【0010】
本開示の実施の形態の説明に先立って、本発明者が検討した事項が説明される。一般に、マイクロコントローラ(以下、マイコンとも呼ぶ)は、中央演算処理部(プロセッサ)、記憶部、及び周辺モジュールなどを有する。マイコンのメモリは、マイコンを動作させるプログラム(以下、動作プログラムとも呼ぶ)、及び、秘匿したい重要な情報(以下、秘密情報とも呼ぶ)を記憶する。秘密情報は、鍵情報、個人情報、及び他の秘匿したい情報を含む。秘密情報は、例えば認証及び暗号化などに利用される。動作プログラムは、検証のためにも、外部から読み書き可能なメモリ領域に記憶される。これに対し、秘密情報は、動作プログラム別のアクセス手段を持つメモリ領域、つまり、外部から読み書きできないメモリ領域に記憶されることが多い。
【0011】
秘密情報を、外部から読み書きできない領域、又は特定の領域に記憶する場合、ユーザは、自身によって、外部の書き込み装置を利用して、その領域に秘密情報を自由に書き込むことができない。このため、ユーザは、マイコンを製造するデバイスメーカに秘密情報を提供し、秘密情報の書き込みを依頼する。デバイスメーカは、特定領域に、ユーザから提供された秘密情報を書き込む。この場合、秘密情報はユーザとデバイスメーカとで共有される。情報の秘匿性の観点では、秘密情報を共有することは、大きなリスクとなり得る。本発明者は、上記した問題を検討した結果、下記の実施の形態を想到するに至った。
【0012】
以下、図面を参照しつつ、上記課題を解決するための手段を適用した実施形態を詳細に説明する。説明の明確化のため、以下の記載及び図面は、適宜、省略、及び簡略化がなされている。また、様々な処理を行う機能ブロックとして図面に記載される各要素は、ハードウェア的には、CPU(Central Processing Unit)、メモリ、又はその他の回路で構成することができ、ソフトウェア的には、メモリにロードされたプログラムなどによって実現される。したがって、これらの機能ブロックがハードウェアのみ、ソフトウェアのみ、又はそれらの組合せによっていろいろな形で実現できることは当業者には理解されるところであり、何れかに限定されるものではない。なお、各図面において、同一の要素には同一の符号が付されており、必要に応じて重複説明は省略されている。
【0013】
上述したプログラムは、様々なタイプの非一時的なコンピュータ可読媒体を用いて格納され、マイコンに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体(例えばフレキシブルディスク、磁気テープ、ハードディスク)、光磁気記録媒体(例えば光磁気ディスク)、CD-ROM(Compact Disk - Read Only Memory)、CD-R(recordable)、CD-R/W(ReWritable)、及び半導体メモリ(例えば、マスクROM、PROM(Programmable ROM)、EPROM(Erasable PROM)、フラッシュROM、RAM(Random Access Memory))を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体によってマイコンに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の優先通信路、又は無線通信路を介して、プログラムをマイコンに供給できる。
【0014】
以下の実施の形態においては便宜上その必要があるときは、複数のセクション又は実施の形態に分割して説明するが、特に明示した場合を除き、それらはお互いに無関係なものではなく、一方は他方の一部又は全部の変形例、応用例、詳細説明、又は補足説明等の関係にある。また、以下の実施の形態において、要素の数等(個数、数値、量、範囲等を含む)に言及する場合、特に明示した場合および原理的に明らかに特定の数に限定される場合等を除き、その特定の数に限定されるものではなく、特定の数以上でも以下でもよい。
【0015】
さらに、以下の実施の形態において、その構成要素(動作ステップ等も含む)は、特に明示した場合及び原理的に明らかに必須であると考えられる場合等を除き、必ずしも必須のものではない。同様に、以下の実施の形態において、構成要素等の形状、又は位置関係等に言及するときは、特に明示した場合および原理的に明らかにそうでないと考えられる場合等を除き、実質的にその形状等に近似または類似するもの等を含むものとする。このことは、上記数等(個数、数値、量、範囲等を含む)についても同様である。
【0016】
[実施形態1]
図1は、実施形態1に係る半導体装置を示す。本実施形態において、半導体装置はマイコンである。マイコン10は、中央処理演算部(CPU)11、記憶部(メモリ)20、周辺モジュールA51、周辺モジュールB52、及び周辺モジュールC53を有する。マイコン10において、これらの要素はバスを介して相互に接続される。
【0017】
CPU11は、動作プログラムに従って処理を実行する。メモリ20は、メモリ領域21、及びメモリ領域22を有する。メモリ20には、例えばフラッシュメモリが使用される。メモリ領域21は、マイコン10の外部のデバイスからアクセス可能なメモリ領域である。一方、メモリ領域22は、外部から読み書きできないメモリ領域である。
【0018】
図2は、メモリ20におけるメモリ配置を示す。メモリ領域21は、動作プログラムを記憶する。また、メモリ領域21は、ユーザの秘密情報23を記憶する。メモリ領域21は、例えば動作プログラムを記憶するアドレス範囲内の所定のアドレスに、秘密情報を記憶する。動作プログラム及び秘密情報23は、マイコン10の外部から書き換え可能である。
【0019】
メモリ領域22は、アドレス情報24を記憶する。アドレス情報24は、秘密情報23の配置場所を示す。具体的には、本実施形態において、アドレス情報24は、メモリ領域21において秘密情報が記憶されるアドレス(その範囲)を示す情報である。アドレス情報24は、マイコン10の外部からアクセスすることができない。アドレス情報24は、例えばマイコン10の製造メーカによってメモリ領域22に書き込まれる。
【0020】
CPU11は、動作プログラムの動作中に秘密情報23を使用した処理を実行する。その場合、CPU11は、動作プログラムに従って、メモリ領域22からアドレス情報24を取得する。CPU11は、動作プログラムに従って、アドレス情報24が示すアドレスから秘密情報23を取得する。例えば、CPU11は、アドレス情報24に対して所定の演算を行うことにより、メモリ領域21において秘密情報23が記憶されるアドレス範囲を特定する。CPU11は、特定したアドレス範囲から秘密情報23を取得する。
【0021】
CPU11は、動作プログラムに従って、秘密情報23を使用した処理を実行する。秘密情報23は、例えば鍵情報である。CPU11は、例えば鍵情報を使用して、暗号化などの処理を実行する。
【0022】
[未使用領域]
マイコン10のユーザは、動作プログラムの作成時に、動作プログラムが格納されるアドレス範囲内に未使用領域を作成する。未使用領域は、アドレス情報24が示すアドレスを含む。未使用領域は、動作プログラムによって使用されない領域を意味する。具体的には、未使用領域は、変数の値(データ)を格納するためには使用されない。また、未使用領域は、動作プログラムの命令コードを格納するためには使用されない。秘密情報23は、未使用領域に記憶される。
【0023】
動作プログラムは、例えば、ソースコードをコンパイルすることで作成される。ソースコードは、例えばC言語などの言語を用いて記述される。C言語のソースコードは、機能記述と制御命令(レイアウト他)とを含む。レイアウトとはアラインメントのことである。通常、コンパイラは、最適化を行って命令コードなどを作成する。ユーザは、制御命令を用いることで、メモリ配置構造などを、コンパイラに指定することができる。コンパイラは、制御命令がある場合、その制御命令に従って命令コードを作成し、制御命令にアドレス指定がある場合は、そのアドレスに変数などを配置する。そのようなコンパイラの仕組みを利用することによって、動作プログラム中に、意図的に未使用領域を作成することができる。
【0024】
未使用領域の作成を、具体例を用いて説明する。図3は、ソースコードにおける変数定義の記述例と、メモリ上に作成される変数領域とを示す。例えば、構造体sampleは、変数A、変数B、及び変数Cから成る。変数A及び変数Cはbyte型の変数であり、変数Bはlong型の変数である。変数A、変数B、及び変数Cは、ソースコードをコンパイラを用いてコンパイルすることにより、メモリ領域21内に割り当てられる。
【0025】
ソースコードは、コンパイラに対する命令(制御命令)を含む。図3の例では、#program packがコンパイラに対する命令である。コンパイラは、#program packが記述されている場合、変数A、変数B、及び変数Cを、メモリ領域21内にこの順で割り当てる。変数A及び変数Cは1バイト変数である。一方、変数Bは4バイト変数である。この場合、図3に示されるように、変数Aと変数Bとの間の3バイトは未使用領域となる。また、変数Cの後方の3バイトは未使用領域となる。これら未使用領域は、秘密情報23の格納に使用できる。
【0026】
仮に、ソースコードが#program packが含まない場合、コンパイラは構造体の最適化を行う。その場合、4バイトの変数B、1バイトの変数A、及び1バイトの変数Cがこの順でメモリ領域21に割り当てられる。構造体sampleの後ろのアドレスが未使用となるか否かは不明である。ユーザは、ソースコードに#program packを記述することで、構造体内に意図的に未使用領域を作成できる。
【0027】
図4は、ソースコードの別例と、メモリ上に作成される変数領域とを示す。この例では、ソースコードは、変数Xをint型で生成するコードを含む。また、ソースコードは、#pragma address X=0x7f00を含む。この場合、ソースコードに記述される変数Xは、#pragma addressによって指定されるアドレス0x7f00に割り当てられる。この場合、コンパイラによって変数Xの作成前に既に使用されたアドレスと、アドレス0x7f00との間は未使用領域となる。また、変数Xの後方は未使用領域となる。これら未使用領域は、秘密情報23の格納に使用できる。
【0028】
[秘密情報の配置]
図5は、メモリ領域21のメモリマップを示す。メモリ領域21は、プログラム領域25、未使用領域26、及び未使用領域27を含む。プログラム領域25は、動作プログラムの命令コード、及び変数が格納される領域である。未使用領域26及び27は、動作プログラムによって使用されない領域である。未使用領域27は、プログラム領域25のアドレス範囲の外部に存在する未使用領域である。未使用領域26は、プログラム領域25のアドレス範囲の内部に存在する未使用領域である。未使用領域26は、上記した手法を用いて、コンパイル時に意図的に作成できる。図3の例では、未使用領域26は、アドレス22番地、及びアドレス23番地に作成されている。
【0029】
図6は、未使用領域における秘密情報の配置を示す。ユーザは、コンパイラを用いてメモリ領域21(プログラム領域25)に動作プログラムを書き込んだ後、未使用領域26に秘密情報を書き込むことができる。ここでは、秘密情報23は1バイトのデータ(情報)であるとする。未使用領域26のアドレスは、22番地と23番地である。ユーザは、外部のデバイスから、メモリ領域21のアドレス23番地に秘密情報23を書き込むことができる。アドレス23番地に秘密情報23が書き込まれる場合、秘密情報23はプログラム領域25に紛れ込む。このため、秘密情報23の秘匿性を高めることができる。ユーザは、未使用領域27に秘密情報を書き込んでもよい。
【0030】
[アドレス情報]
図7は、アドレス情報の具体例を示す。アドレス情報24は、メモリ領域22(図2を参照)に格納される。アドレス情報24は、例えば先頭アドレスi、及びデータ長jを含む。先頭アドレスiは、データを取得する場合の先頭アドレスを示す。データ長jは、秘密情報23のデータ長を示す。
【0031】
CPU11は、先頭アドレスiに基づいて、データ取得の先頭アドレスを決定する。CPU11は、先頭アドレスを、例えばi×4-1[番地]によって決定する。CPU11は、メモリ領域21において、先頭アドレスからデータ長jが示すデータ長分のデータを取得する。CPU11は、例えば、先頭アドレスから2j+3[bit]分のアドレス範囲のデータを取得する。アドレス情報24から秘密情報23を取得するための処理手順及び計算式などは、動作プログラムに記述される。
【0032】
具体的に、アドレス情報24が「60」である場合を考える。つまり、i=6、及びj=0の場合を考える。CPU11は、i=6であるから、6×4-2=22[番地]を先頭アドレスとする。CPU11は、j=0であるから、データ長を2=8[bit]と計算する。その場合、CPU11は、アドレス23番地から1バイトのデータを取得する。図6を参照すると、秘密情報23はアドレス23番地に記憶されている。従って、CPU11は、アドレス情報「60」を用いて、アドレス23番地から秘密情報23を取得できる。
【0033】
[手順]
次いで、処理手順を説明する。図8は、マイコン10に秘密情報を記憶する際の手順を示す。ユーザは、メモリ領域21のどのアドレスに秘密情報23を記憶するかを決定する。ユーザは、決定したアドレス及び秘密情報23のデータ長に基づいて、アドレス情報24の内容を決定する(ステップA1)。例えば、ユーザは、秘密情報23のデータ長が1バイトで、秘密情報の記憶するアドレスが23番地である場合、アドレス情報を「610」と決定する。
【0034】
ユーザは、決定したアドレス情報24の内容をマイコン10の製造メーカに通知する。製造メーカは、ユーザから通知されたアドレス情報24の内容を、マイコン10のメモリ領域22に書き込む(ステップA2)。その後、製造メーカは、アドレス情報24が書き込まれたマイコン10をユーザに納品する(ステップA3)。このとき、製造メーカが取り扱うのは単なるアドレスの情報である。本実施形態において、ユーザと製造メーカとで秘密情報は共有されない。
【0035】
ユーザは、マイコン10の動作プログラムを作成する(ステップA4)。ユーザは、ステップA4では、動作プログラムのソースコードを作成する。ソースコードは、例えばC言語、又はC言語の派生言語を用いて記述される。ソースコードは、コンパイラ型の言語を用いて記述されていればよい。ソースコードの記述に用いられる言語は、特に限定されない。ソースコードは、コンパイラよって解釈され、プログラム領域25内に意図的に未使用領域26を作成するための制御命令を含む。ユーザは、ステップA1で決定したアドレス情報が示すアドレスが未使用領域26に含まれるようにするための制御命令を、ソースコードに記述する。
【0036】
ユーザは、コンパイラを用いて、ソースコードをコンパイルする(ステップA5)。ソースコードをコンパイルすることにより、意図的に作成された未使用領域26が確定する。ユーザは、製造メーカからマイコン10を受領する。ユーザは、コンパイルによって生成されたプログラムコード(動作プログラム)を、マイコン10のメモリ領域21に書き込む(ステップA6)。
【0037】
ユーザは、動作プログラムによって使用される秘密情報23の内容を決定し、秘密情報をメモリ領域21に書き込む(ステップA7)。ユーザは、ステップA7では、ステップA1で決定したアドレス情報が示すアドレスに、秘密情報23を書き込む。本実施形態では、動作プログラムの書き込みと、秘密情報23の書き込みとを同時に行う必要はない。このため、プログラムと秘密情報とを、分離して管理することができる。ここまでの手順で、マイコン10を使用する準備ができる。
【0038】
なお、ステップA1のアドレス情報の決定と、ステップA4のソースプログラムの作成及びステップA5のコンパイルとは、どちらを先に実行してもよい。例えば、ユーザは、プログラムの作成とコンパイルとを先に行い、プログラム領域25(図5を参照)における未使用領域26のアドレスを調べてもよい。ユーザは、その後、未使用領域26のアドレスに基づいてアドレス情報を決定してもよい。
【0039】
次いで、マイコン10における動作手順を説明する。図9は、秘密情報を使用する場合のマイコン10の動作手順を示す。CPU11は、動作プログラムに従って、メモリ領域22からアドレス情報24を読み出す(ステップB1)。CPU11は、ステップB1では、例えば特定のレジスタにフラグをセットし、別のレジスタにアドレス情報の読み出しを示すコマンドを設定することにより、アドレス情報24を読み出す。
【0040】
CPU11は、読み出したアドレス情報24に基づいて、データ取得のアドレス範囲を決定する(ステップB2)。CPU11は、ステップB2では、例えば動作プログラムに従って、アドレス情報24に含まれる情報に対して所定の演算を行うことにより、アドレス範囲を決定する。CPU11は、ステップB2で決定したアドレス範囲から、秘密情報23を読み出す(ステップB3)。その後、CPU11は、動作プログラムに従って、秘密情報23を用いた処理を実行する。
【0041】
[まとめ]
本実施形態では、メモリ領域22は、アドレス情報24を記憶する。CPU11は、秘密情報23が必要な場合、メモリ領域22からアドレス情報24を読み出す。CPU11は、アドレス情報24に基づいて、秘密情報23を読み出す。メモリ領域21は、秘密情報23を、アドレス情報24が示すアドレスに記憶する。メモリ領域21は、ユーザによって読み書きが可能なメモリ領域である。このため、ユーザは、自身によって秘密情報23をメモリ領域21に書き込むことができる。また、ユーザは、秘密情報23の内容を、自身によって更新することができる。このため、ユーザは、製造メーカと秘密情報を共有する必要がない。
【0042】
本実施形態では、アドレス情報24は、外部から読み書きができないメモリ領域22に記憶される。このため、ユーザ以外の他者は、アドレス情報24を読み出すことができない。秘密情報をメモリ領域22に記憶する場合、ユーザは、秘密情報を製造メーカと共有する必要がある。これに対し、本実施形態において、ユーザと製造メーカとで共有される情報はアドレス情報24である。アドレス情報24は単なるアドレスの情報でしかない。このため、秘密情報がユーザと製造メーカとで共有される場合に比べて、セキュリティ上のリスクを低減できる。
【0043】
本実施形態では、秘密情報23が記憶されるメモリ領域21は、外部から読み書きが可能である。ユーザ以外の他者は、メモリ領域21にアクセスして、その内容を解析することができる。しかしながら、本実施形態において、秘密情報23は、プログラム領域25の内部に作成された未使用領域26に記憶される。未使用領域26は、例えばコンパイラに対する制御命令を用いて作成される。コンパイラに対する制御命令は、コンパイル後のプログラムコードには残らない。従って、プログラムコードが解析された場合でも、他者は、意図的に未使用領域が作成されたかどうかを判断することができない。本実施形態では、秘密情報23はプログラム領域25に紛れ込む。このため、他者によってメモリ領域21の内容が解析された場合でも、秘密情報23が外部に漏洩する可能性は低い。
【0044】
[実施形態2]
次いで、本開示の実施形態2を説明する。本実施形態に係る半導体装置の構成は、図1に示される実施形態1に係る半導体装置の構成と同様でよい。本実施形態において、メモリ領域21は、複数の秘密情報を記憶する。他の点は、実施形態1と同様でよい。
【0045】
図10は、メモリ20におけるメモリ配置を示す。メモリ領域21は、動作プログラムと、秘密情報(秘密情報A)23A及び秘密情報(秘密情報B)23Bとを記憶する。秘密情報23A及び23Bは、それぞれ単独で利用可能な情報であってもよい。あるいは、秘密情報23A及び23Bは、組み合わせることによって1つの情報として利用されてもよい。秘密情報23A及び23Bのデータ長は必ずしも一致している必要はない。例えば、秘密情報23Aは、例えばデータ長が8ビット(1バイト)の情報であってもよい。一方、秘密情報23Bは、例えばデータ長が32ビット(4バイト)の情報であってもよい。なお、秘密情報の数は2つには限定されない。メモリ領域21は、3以上の秘密情報を記憶していてもよい。
【0046】
図11は、アドレス情報24の具体例を示す。本実施形態において、アドレス情報24は、複数の秘密情報のそれぞれに対応したアドレス情報を含んでいてもよい。アドレス情報24は、例えば、秘密情報23Aに対応したアドレス情報として、先頭アドレスi1、及びデータ長j1を含む。また、アドレス情報24は、例えば、秘密情報23Bに対応したアドレス情報として、先頭アドレスi2、及びデータ長j2を含む。
【0047】
秘密情報23Aに対応したアドレス情報が「60」である場合を考える。つまり、i1=6、及びj1=0である場合を考える。CPU11は、i1=6であるから、6×4-2=22[番地]を先頭アドレスとする。また、CPU11は、j1=0であるから、データ長を2=8[bit]と計算する。その場合、CPU11は、アドレス23番地から1バイトのデータを取得する。この場合、秘密情報23Aをアドレス23番地に記憶しておくことで、CPU11は、アドレス情報「60」を使用して、秘密情報23Aを取得できる。
【0048】
また、秘密情報23Bに対応したアドレス情報が「92」である場合を考える。つまり、i2=9、及びj2=2である場合を考える。CPU11は、i2=9であるから、9×4-2=34[番地]を先頭アドレスとする。また、CPU11は、j2=2であるから、データ長を2=32[bit]と計算する。その場合、CPU11は、アドレス34番地から4バイトのデータを取得する。この場合、秘密情報23Bをアドレス34番地に記憶しておくことで、CPU11は、アドレス情報「92」を使用して、秘密情報23Bを取得できる。
【0049】
なお、上記では、アドレス情報24が、複数の秘密情報のそれぞれに対応したアドレス情報を含む例を説明したが、本実施形態はこれには限定されない。例えば、CPU11は、1つのアドレス情報を用いて、複数の秘密情報を取得してもよい。例えば、1バイトの秘密情報Aがアドレス23番地に記憶され、1バイトの秘密情報Bはアドレス35番地に記憶されているとする。CPU11は、メモリ領域22からアドレス情報「60」を取得する。CPU11は、取得する秘密情報が1つ目の秘密情報(秘密情報A)である場合、アドレス情報が示すアドレス23番地から秘密情報23Aを取得する。CPU11は、取得する秘密情報が2つ目の秘密情報(秘密情報B)である場合、アドレス情報が示すアドレスにオフセット値「12」を加算する。この場合、CPU11は、アドレス35番地から秘密情報23Bを取得する。このように、何個目の秘密情報であるかに応じてオフセット値を加算することで、CPU11は、1つのアドレス情報を用いて複数の秘密情報を取得できる。
【0050】
[まとめ]
本実施形態では、メモリ領域21は複数の秘密情報を記憶する。この場合、動作プログラムは、複数の秘密情報を読み出して処理に利用することができる。他の効果は、実施形態1における効果と同様である。
【0051】
[実施形態3]
続いて、本開示の実施形態3を説明する。本実施形態に係る半導体装置の構成は、図1に示される実施形態1に係る半導体装置の構成と同様でよい。本実施形態において、メモリ領域21は、秘密情報を記憶する未使用領域は、プログラムとは無関係な情報(以下、ダミーデータとも呼ぶ)を更に記憶する。他の点は、実施形態1又は実施形態2と同様でよい。
【0052】
[ダミーデータ]
図12は、未使用領域における秘密情報の配置を示す。ユーザは、コンパイラを用いてメモリ領域21(プログラム領域25)に動作プログラムを書き込んだ後、未使用領域26に秘密情報23を書き込む。ユーザは、例えばアドレス23番地に秘密情報23を書き込む。また、ユーザは、未使用のアドレス22番地には、プログラム及び秘密情報23と無関係なダミーデータ28を書き込む。ダミーデータ28の内容は、ユーザが任意に決定できる。
【0053】
[アドレス情報]
図13は、本実施形態において用いられるアドレス情報の具体例を示す。本実施形態において、アドレス情報24は、秘密情報23とダミーデータ28を識別するための情報を含む。アドレス情報24は、例えば先頭アドレスi、及びデータ長jに加えて、ダミービット長kを含む。先頭アドレスi及びデータ長jは、実施形態1におけるそれらと同様である。ダミービット長kは、秘密情報23とダミーデータ28を識別するための情報である。ダミーデータ28のデータ長(ビット長)は、例えばk×8[bit]により計算される。
【0054】
本実施形態において、CPU11は、先頭アドレスから、データ長jが示すデータ長とダミービット長kが示すデータ長との和のアドレス範囲のデータをメモリ領域21から取得する。つまり、CPU11は、秘密情報23とダミーデータ28とをメモリ領域21から取得する。CPU11は、取得したデータのうち、ダミービット長kが示すビットを無効とすることにより、秘密情報23を取り出す。
【0055】
具体的に、アドレス情報24において、i=6、j=0、及びk=1の場合を考える。CPU11は、i=6であるから、6×4-2=22[番地]を先頭アドレスとする。また、CPU11は、j=0であるから、秘密データのデータ長を2=8[bit]と計算する。さらに、CPU11は、k=1であるから、1×8[bit]をダミーデータのデータ長とする。その場合、CPU11は、アドレス22番地から2バイトのデータを取得する。CPU11は、取得したデータのうち、先頭側から8ビットを無効とする。このようにすることで、CPU11は、アドレス情報「601」を用いて秘密情報23を取得できる。
【0056】
なお、上記ではダミーデータ28が秘密情報23の前に配置される例を説明したが、ダミーデータ28の位置は特に限定されない。ダミーデータ28は、秘密情報23の後ろに配置されてもよいし、秘密情報23の途中に挿入されてもよい。あらかじめダミーデータ28が配置される位置を決めておくことで、アドレス情報24を用いてメモリ領域21から読み出されたデータから、秘密情報23を取り出すことができる。また、ダミーデータ28の数は、特に1つには限定されない。未使用領域には、複数のダミーデータ28が記憶されてもよい。
【0057】
[まとめ]
本実施形態では、未使用領域26は、秘密情報23とダミーデータ28とを記憶する。CPU11は、秘密情報23とダミーデータ28とを含むデータをメモリ領域21から読み出す。CPU11は、読み出したデータから、秘密情報23を取り出す。ダミーデータ28が記憶されることにより、他者は、秘密情報23の配置場所を特定しにくくなる。これにより、CPU11が取得したデータから秘密情報23を取り出すための処理が指数関数的に増加し、悪意のある解析に対して難読性を向上させることができる。他の効果は、実施形態1又は実施形態2における効果と同様である。
【0058】
[実施形態4]
本開示の実施形態4を説明する。図14は、実施形態4に係る半導体装置の構成を示す。本実施形態において、メモリ領域22は、マイコン10に接続される外部メモリである。他の点は、実施形態1、実施形態2、又は実施形態3と同様でよい。
【0059】
外部記憶部であるメモリ領域22は、外部から読み書きできないメモリ領域である。外部記憶部は、マイコン10からアクセスする場合も、セキュアなアクセスが可能なメモリである。本実施形態においても、マイコン10とメモリ領域22との間で送受信される情報は、アドレス情報であり、マイコン10とメモリ領域22との間で秘密情報は送受信されない。
【0060】
[まとめ]
本実施形態では、CPU11は、外部のメモリ領域22から取得したアドレス情報を用いて、メモリ領域21に記憶される秘密情報を取得する。本実施形態では、メモリ領域22をマイコン10に対して外付けとすることにより、物理的な実装が容易となる。他の効果は、実施形態1、実施形態2、又は実施形態3における効果と同様である。
【0061】
[実施形態5]
本開示の実施形態5を説明する。本実施形態に係る半導体装置の構成は、図1に示される実施形態1に係る半導体装置の構成と同様でよい。図15は、本実施形態におけるメモリ配置を示す。本実施形態において、メモリ領域22は、アドレス情報(アドレス情報A)24を記憶する。メモリ領域21は、秘密情報23とアドレス情報(アドレス情報B)29を記憶する。本実施形態では、CPU11は、アドレス情報24を用いてメモリ領域21からアドレス情報29を取得する。CPU11は、アドレス情報29を用いてメモリ領域21から秘密情報を取得する。他の点は、実施形態1、実施形態2、実施形態3、又は実施形態4と同様でよい。
【0062】
アドレス情報29は、メモリ領域21において秘密情報23が記憶されるアドレスを示す。アドレス情報29の内容は、実施形態1又は実施形態3で説明されたアドレス情報の内容と同様でよい。アドレス情報29は、秘密情報23と同様に、プログラム領域25の内部に意図的に作成された未使用領域に記憶される。本実施形態において、アドレス情報24は、メモリ領域21においてアドレス情報29が記憶されるアドレスを示す。
【0063】
CPU11は、秘密情報を使用する場合、動作プログラムに従って、メモリ領域22からアドレス情報24を読み出す。CPU11は、アドレス情報24が示すアドレスから、アドレス情報29を読み出す。CPU11は、読み出したアドレス情報29に基づいて、データ取得のアドレス範囲を決定する。CPU11は、決定したアドレス範囲から、秘密情報23を読み出す。その後、CPU11は、動作プログラムに従って、秘密情報23を用いた処理を実行する。
【0064】
[まとめ]
本実施形態では、CPU11は、アドレス情報24を用いてアドレス情報29を取得し、アドレス情報29を用いて秘密情報23を取得する。アドレス情報24は、製造メーカによりメモリ領域22に記憶され、ユーザ側で書き換えることができない。これに対し、ユーザは、メモリ領域21に記憶されるアドレス情報29を書き換えることができる。従って、ユーザは、アドレス情報29の内容を変更することにより、秘密情報23を記憶する未使用領域(アドレス)などを変更できる。他の効果は、実施形態1、実施形態2、実施形態3、又は実施形態4における効果と同様である。
【0065】
[実施形態6]
実施形態6を説明する。本実施形態では、動作プログラム及び秘密情報の更新が説明される。図16は、動作プログラム更新時のメモリ領域21のメモリ配置を示す。メモリ領域21のプログラム領域25には、既に動作プログラム(現プログラム)が記憶されている。また、プログラム領域25内の未使用領域26には、秘密情報(現秘密情報)23が記憶されている。
【0066】
上記状態で、新プログラム30がメモリ領域21にロードされる。新プログラム30は、例えばメモリ領域21にデータを書き込む装置を用いて、メモリ領域21に書き込まれる。あるいは、CPU11が、通信により新プログラム30を取得し、取得した新プログラム30をメモリ領域21に書き込んでもよい。新プログラム30は、意図的に作成された未使用領域26を含む。新プログラム30における未使用領域26の位置は、現プログラムにおける未使用領域26の位置と対応している。新プログラム30は、現プログラムとは全く異なる処理を行うプログラムであってもよい。
【0067】
図17は、動作プログラム更新後のメモリ配置を示す。現行のプログラムが新プログラム30によって上書きされることにより、新プログラム30は、メモリ領域21の先頭アドレスから記憶される。プログラムの更新後、新たな秘密情報(新秘密情報)23が、新プログラム30の未使用領域26内に書き込まれる。更新後のメモリ配置において、秘密情報23が記憶されるアドレスは、更新前に秘密情報が記憶されていたアドレスと変わらない。
【0068】
[まとめ]
本実施形態では、秘密情報23はメモリ領域21に記憶される。このため、秘密情報23は、マイコン10の製造後でも更新可能である。これにより、ユーザの利便性が向上する。
【0069】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は既に述べた実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において種々の変更が可能であることはいうまでもない。
【符号の説明】
【0070】
10:マイコン
11:中央処理演算部(CPU)
20:記憶部(メモリ)
21、22:メモリ領域
23:秘密情報
24、29:アドレス情報
25:プログラム領域
26、27:未使用領域
28:ダミーデータ
29:アドレス情報
30:新プログラム
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17