JP2007026231A - マイクロコンピュータ - Google Patents

マイクロコンピュータ Download PDF

Info

Publication number
JP2007026231A
JP2007026231A JP2005209331A JP2005209331A JP2007026231A JP 2007026231 A JP2007026231 A JP 2007026231A JP 2005209331 A JP2005209331 A JP 2005209331A JP 2005209331 A JP2005209331 A JP 2005209331A JP 2007026231 A JP2007026231 A JP 2007026231A
Authority
JP
Japan
Prior art keywords
address
signal
data
program
built
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2005209331A
Other languages
English (en)
Inventor
Yutaka Ito
裕 伊藤
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Panasonic Holdings Corp
Original Assignee
Matsushita Electric Industrial Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Matsushita Electric Industrial Co Ltd filed Critical Matsushita Electric Industrial Co Ltd
Priority to JP2005209331A priority Critical patent/JP2007026231A/ja
Publication of JP2007026231A publication Critical patent/JP2007026231A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Storage Device Security (AREA)
  • Microcomputers (AREA)

Abstract

【課題】内蔵不揮発性メモリプログラム又はデータの訂正を可能としながら、プログラム又はデータの読み出しに対するセキュリティ向上を図る。
【解決手段】マイクロコンピュータ100において、比較部160は内蔵不揮発性メモリ120の訂正したいアドレスを記憶する訂正アドレス記憶手段140の値とCPU110がアクセス中のアドレスとを比較する。比較結果記憶手段170は前記比較手段が出力する比較結果を記憶する。データ変換部180は、前記比較結果記憶手段が記憶する比較結果が一致の場合、内蔵不揮発性メモリ120から読み出されるプログラム又はデータを無効化する。
【選択図】図1

Description

本発明はマイクロコンピュータに関し、特に、不揮発性メモリを内蔵したマイクロコンピュータに格納されたプログラムの訂正に関するものである。
従来、この種のプログラム訂正は、下記の(特許文献1)に記載されるように、予め外部メモリから内蔵揮発性メモリに訂正プログラムを転送しておき、訂正したいプログラムを、内蔵揮発性メモリに格納しておいた訂正プログラムにサブルーチン分岐するプログラムに置換することで実現するものである。
特開平3−186927号公報
しかしながら、従来のプログラム訂正回路では、訂正したいプログラムを外部メモリから内蔵揮発性メモリに転送するため、外部メモリを改変された場合には内蔵揮発性メモリに格納したプログラムを簡単に読み出されてしまうという問題がある。
本発明はかかる課題に鑑み、その目的は、内蔵不揮発性メモリのプログラム訂正を可能にしつつ、不正ユーザに読み出されたくないプログラムおよびデータについては、その読み出しを不可能にするようにして、セキュリティ向上を図ることにある。
前記目的を達成するために、本発明では、内蔵不揮発性メモリのプログラムを訂正している状態を記憶し、その間、内蔵不揮発メモリからの読み出しを禁止する。
具体的には、本発明の請求項1記載のマイクロコンピュータは、プログラムおよびデータを格納する記憶領域を有する不揮発性メモリと、前記不揮発性メモリに格納されるデータから訂正したいデータに該当するアドレスを記憶する訂正アドレス記憶手段と、前記不揮発性メモリに格納されるデータから訂正したいデータを記憶する訂正データ記憶手段と、現在アクセスされる前記不揮発性メモリのアドレスと前記訂正アドレス記憶手段とが記憶する訂正アドレスと一致するか否かを比較する比較手段と、前記比較手段の比較結果を記憶する比較結果記憶手段と、前記比較手段の比較結果および、前記比較結果記憶手段が記憶する比較結果を受け、前記比較手段の比較結果が一致であるときには、前記不揮発性メモリの記憶領域から読み出されるプログラム又はデータを前記訂正データ記憶手段が記憶する訂正データに変換し、前記比較結果記憶手段が記憶する比較結果が一致であるときには、前記不揮発性メモリの記憶領域から読み出されるプログラム又はデータを無効化するデータ変換手段と、前記不揮発性メモリにアクセスし、この不揮発性メモリが格納するプログラム又はデータを前記データ変換手段を介して読み出す制御部とを備えたことを特徴とする。
この構成によると、内蔵不揮発性メモリのプログラムを訂正するときに、その状態を保持し、その間の内蔵不揮発性メモリからのプログラムやデータの読み出しが無効化されセキュリティを実現できる。
本発明の請求項2記載のマイクロコンピュータは、請求項1において、前記不揮発メモリは複数個の記憶領域を有し、前記実行しているプログラムが前記不揮発性メモリの特定の記憶領域に格納されたプログラムであるか否かを判定する空間判定手段を備え、前記データ変換手段は、前記空間判定手段の判定結果を受け、この判定結果が前記不揮発性メモリの特定の記憶領域に格納されたプログラムである場合には、前記比較結果記憶手段が記憶する比較結果が一致であるときにも、前記不揮発性メモリの記憶領域から読み出されるプログラム又はデータを無効化しないよう構成したことを特徴とする。
この構成によると、内蔵不揮発性メモリを複数個の記憶領域で構成し、特定記憶領域については、プログラム訂正中にもプログラムやデータの読み出しが可能とすることで、訂正プログラム中で内蔵不揮発性メモリに格納されるデータの参照が可能となる。
本発明の請求項3記載のマイクロコンピュータは、請求項1において、前記制御部のアクセスがオペランドフェッチであるか否かを判定するフェッチ判定手段を備え、前記比較結果記憶手段は、前記フェッチ判定手段の判定結果を受け、この判定結果がオペランドフェッチであるとき、前記比較手段の比較結果が一致であっても、一致であることを記憶しないよう構成したことを特徴とする。
本発明の請求項4記載のマイクロコンピュータは、請求項1において、前記制御部は、前記データ変換手段を介して読み出したデータがサブルーチン分岐命令であるか否かを解読する解読手段を備え、前記比較結果記憶手段は、前記解読手段の解読結果を受け、この解読結果がサブルーチン分岐命令でないとき、前記比較手段の比較結果が一致であっても、一致であることを記憶しないよう構成したことを特徴とする。
この構成によると、内蔵不揮発性メモリからのプログラムやデータの読み出しを無効化する状態を記憶するための条件を、プログラム訂正時に加えることで、本当に必要な場合のみ、内蔵不揮発性メモリからのプログラムやデータの読み出しが無効化することで、不必要な無効化の解除をする必要がなく、コードサイズを削減できる。
本発明の請求項5記載のマイクロコンピュータは、請求項1において、前記制御部の実行しているプログラムが前記不揮発性メモリに格納されたプログラムであるか否かを判定する空間判定手段と、前記制御部のアクセスがオペランドフェッチであるか否かを判定するフェッチ判定手段とを備え、前記比較結果記憶手段は前記比較手段の比較結果を記憶し、前記空間判定手段の判定結果および前記フェッチ判定手段の判定結果を受け、前記空間判定手段の判定結果が前記不揮発性メモリに格納されたプログラムでなく、かつ、前記フェッチ判定手段の判定結果がオペランドフェッチであったときには、記憶する比較結果を無効化して出力し、それ以外のときには、記憶する比較結果をそのまま出力するよう構成したことを特徴とする。
この構成によると、内蔵不揮発性メモリからのプログラムやデータの読み出しを無効化する条件を、プログラム訂正時に加えることで、プログラム訂正中にも、内蔵不揮発性メモリ内のルーチンを実行可能となる。
本発明の請求項6記載のマイクロコンピュータは、請求項1において、前記制御部は、前記データ変換手段を介して読み出したデータがサブルーチン復帰命令であるか否かを解読する解読手段を備え、前記比較結果記憶手段は、前記解読手段の解読結果を受け、この解読結果がサブルーチン復帰命令のときには記憶する比較結果をリセットするよう構成したことを特徴とする。
本発明の請求項7記載のマイクロコンピュータは、請求項1において、前記制御部が、前記不揮発性メモリに格納されるデータから訂正したいデータに該当するアドレスを実行した直後に、実行(復帰)する前記不揮発性メモリに該当するアドレスを記憶する復帰アドレス記憶手段と、前記制御部が前記不揮発性メモリに対してアクセスするときに出力するアドレスと、前記復帰アドレス記憶手段が記憶するアドレスとを比較する第2の比較手段を備え、前記比較結果記憶手段は、前記第2の比較手段の比較結果を受け、この比較結果が一致したとき、記憶する比較結果をリセットするよう構成したことを特徴とする。
この構成によると、特定の条件を満たした場合に自動的に、内蔵不揮発性メモリからのプログラムやデータの読み出しの無効化を解除できることで、無効化解除のためのコードサイズを削減できる。
本発明の請求項8記載のマイクロコンピュータは、請求項7において、前記制御部のアクセスがオペランドフェッチであるか否かを判定するフェッチ判定手段を備え、前記比較結果記憶手段は、前記フェッチ判定手段の判定結果を受け、この判定結果がオペランドフェッチであるときには、記憶する比較結果をリセットしないよう構成したことを特徴とする。
この構成によると、無効化の解除を命令読み出しでしかできなくすることで、さらにセキュリティを向上させることができる。
本発明の請求項9記載のマイクロコンピュータは、請求項1において、随時バス制御に介入して、アクセスしたいアドレスを記憶する読み出しアドレス記憶手段が記憶するアドレスに該当する前記不揮発性メモリに格納されるプログラム又はデータの読み出しを行うダイレクトメモリアクセス手段と、前記読み出しアドレス記憶手段は、前記比較結果記憶手段が記憶する比較結果を受け、前記比較手段の比較結果が一致であるときには、前記書き換えを行わないよう構成したことを特徴とする。
本発明の請求項10記載のマイクロコンピュータは、請求項1において、随時バス制御に介入して、アクセスしたいアドレスを記憶する読み出しアドレス記憶手段が記憶するアドレスに該当する、前記不揮発性メモリに格納されるプログラム又はデータの読み出しを行うダイレクトメモリアクセス手段と、前記読み出しアドレス記憶手段の書き換え時に、前記比較結果記憶手段が記憶する比較結果を記憶する書き換え条件記憶手段とを備え、前記データ変換手段は、前記ダイレクトメモリアクセス手段が読み出しを行う際には、前記書き換え条件記憶手段の記憶する比較結果を受け、前記書き換え条件記憶手段の記憶する比較結果が一致の場合にも、前記不揮発性メモリの記憶領域から読み出されるプログラム又はデータを無効化するよう構成したことを特徴とする。
この構成によると、マイクロコンピュータにダイレクトメモリアクセス手段を備える場合に、内蔵不揮発性メモリのプログラムを訂正するときに、その状態を保持し、その間のダイレクトメモリアクセス手段内の読み出しアドレス記憶手段にアドレスを設定することを禁止することで、セキュリティを実現できる。
本発明のマイクロコンピュータによれば、内蔵不揮発性メモリのプログラムを訂正するときに、その状態を保持し、その間の内蔵不揮発性メモリからのプログラムやデータの読み出しが無効化されるため、内蔵不揮発性メモリのプログラム訂正を可能にしつつ、不正ユーザに読み出されたくないプログラムおよびデータについては、その読み出しを不可能にするようにして、セキュリティを向上させることができる。
以下、本発明の各実施の形態を図1〜図9に基づいて詳細に説明する。
(実施の形態1)
図1は本発明の(実施の形態1)のマイクロコンピュータを示す。
マイクロコンピュータ100は、制御部としてのCPU110と、内蔵不揮発性メモリ120と、内蔵揮発性メモリ130と、訂正アドレス記憶手段としての訂正アドレスレジスタ140と、訂正データ記憶手段としての訂正データレジスタ150と、比較手段160と、比較結果記憶手段170と、データ変換手段180とによって構成されている。また、190は前記マイクロコンピュータ100の外部に接続された外部メモリである。
アドレスバスB101は、CPU110と内蔵不揮発性メモリ120と内蔵揮発性メモリ130と比較手段160と外部メモリ190とを各々接続する。データバスB102は、CPU110と内蔵揮発性メモリ130と訂正アドレスレジスタ140と訂正データレジスタ150とデータ変換手段180と外部メモリ190とを各々接続する。
CPU110の出力の訂正アドレス書込み信号S107は、訂正アドレスレジスタ140に入力されている。訂正アドレスレジスタ140の出力の訂正アドレス信号S103は、比較手段160の一方に入力されている。
CPU110の出力の訂正データ書込み信号S108は、訂正データレジスタ150に入力されている。 訂正データレジスタ150の出力の訂正データ信号S104は、データ変換手段180に入力されている。比較手段160の出力の一致信号S105は、比較結果記憶手段170とデータ変換手段180に入力されている。比較結果記憶手段170の出力の一致状態保持信号S106は、データ変換手段180に入力されている。
CPU110の出力のリセット信号S109は、比較結果記憶手段170に入力されている。リード信号S112は、CPU110から出力されて内蔵不揮発性メモリ120と内蔵揮発性メモリ130および外部メモリ190に入力されている。ライト信号S113は、CPU110から出力されて内蔵揮発性メモリ130に入力されている。
内蔵不揮発性メモリ120とデータ変換手段180とは、ROMバスB111で接続されている。内蔵不揮発性メモリ120はプログラムおよびデータを格納しており、リード信号S112が‘1’であれば、アドレスバスB101のアドレスで指定されるメモリ領域に格納されているプログラムおよびデータをROMバスB111に出力する。
内蔵揮発性メモリ130はプログラムおよびデータを格納しており、リード信号S112が‘1’であれば、アドレスバスB101のアドレスで指定されるメモリ領域に格納されているプログラムおよびデータをデータバスB102に出力する。さらに、この内蔵揮発性メモリ130は、ライト信号S113が‘1’ならば、データバスB102のプログラムおよびデータを、アドレスバスB101のアドレスで指定されるメモリ領域に格納保持する。
訂正アドレスレジスタ140は、訂正アドレス書込み信号S107が‘1’であれば、データバスB102のデータを格納保持し、保持したデータを訂正アドレス信号S103として出力する。なお、訂正アドレスレジスタ140の初期値は、内蔵不揮発性メモリ120に該当しないアドレスの値とする。
訂正データレジスタ150は、訂正データ書込み信号S108が‘1’であれば、データバスB102のデータを格納保持し、保持したデータを訂正データ信号S104として出力する。
比較手段160は、アドレスバスB101のアドレスと訂正アドレス信号S103の値とを比較し、一致した場合には‘1’を、一致しない場合には‘0’を一致信号S105に出力する。
比較結果記憶手段170は、一致信号S105の値が‘1’であれば‘1’の値を格納保持し、リセット信号S109の値が‘1’であれば、‘0’の値を格納保持し、保持した値を一致状態保持信号S106に出力する。この比較結果記憶手段170の初期値は‘0’とする。
データ変換手段180は、一致信号S105が‘1’であれば、内蔵不揮発性メモリ120からROMバスB111に出力された読み出しデータを訂正データ信号S104の値に変換してデータバスB102に出力する。また、一致信号S105が‘0’で、かつ一致状態保持信号S106が‘1’であれば、内蔵不揮発性メモリ120からROMバスB111に出力された読み出しデータを無効化してデータバスB102に何も出力しない。更に、一致信号S105が‘0’で、かつ一致状態保持信号S106が‘0’であれば内蔵不揮発性メモリ120からROMバスB111に出力された読み出しデータをデータバスB102に乗せ換えて出力する。
プログラムおよびデータを格納した外部メモリ190は、リード信号S112が‘1’であれば、アドレスバスB101のアドレスで指定されるアドレスに格納されているプログラムおよびデータをデータバスB102に出力する。
CPU110は、アドレスバスB101に内蔵揮発性メモリ120に該当するアドレスを出力すると共に、リード信号S112に‘1’を出力し、順次、内蔵不揮発性メモリ120に格納されているプログラムを、ROMバスB111とデータ変換手段180を介してデータバスB102から読み出し、解読した結果に従い各種制御を行う。なお、内蔵不揮発性メモリ120から読み出したプログラムが、内蔵揮発性メモリ130又は外部メモリ180への分岐命令である場合には、CPU110は、アドレスバスB101に内蔵揮発性メモリ130又は外部メモリ180の該当するアドレスを出力すると共に、リード信号S112に‘1’を出力し、内蔵揮発性メモリ130又は外部メモリ180に格納されているプログラムを、データバスB102から読み出し、解読した結果に従い各種制御を行う。
CPU110は、この他に下記の動作を実行できるように構成されている。
CPU110は、ライト信号S113に‘1’、アドレスバスB101に内蔵揮発性メモリ130に該当するアドレスを各々出力すると共に、データバスB102にデータを出力し、内蔵揮発性メモリ130に任意の値を書き込むことができる。また、CPU110は、データバスB102にデータを出力すると共に訂正アドレス書込み信号S107に‘1’を出力し、訂正アドレスレジスタ140を任意の値に書き換えることができる。また、CPU110は、データバスB102にデータを出力すると共に訂正データ書込み信号S108に‘1’を出力し、訂正データレジスタ150を任意の値に書き換えることができる。また、CPU110は、リセット信号S109に‘1’を出力し、比較結果記憶手段170の値を‘0’にリセットすることができる。
次に、内蔵不揮発性メモリ120に格納されたプログラムおよびデータを訂正しつつ、読み出し保護を行う動作に基づいて、図1の構成を詳しく説明する。
先ず、プログラムスタート時のCPU110は、アドレスバスB101に内蔵不揮発性メモリ120に該当するアドレスを出力すると共に、リード信号S112に‘1’を出力し、内蔵不揮発性メモリ120に格納されているプログラムを読み出そうとする。
この時、訂正アドレスレジスタ140は、初期値として格納している内蔵不揮発性メモリ120に該当しないアドレスの値を、訂正アドレス信号S103に出力する。比較手段160は、アドレスバスB101に出力されている内蔵不揮発性メモリ120に該当するアドレスと、訂正アドレス信号103に出力されている内蔵不揮発性メモリ120に該当しないアドレスとを比較し、一致しないため一致信号S105に‘0’を出力する。比較結果記憶手段170は、一致信号S105の値が‘0’のため、一致状態保持信号S106に‘0’を出力し続ける。データ変換手段180は、一致信号S105が‘0’かつ一致状態保持信号S106が‘0’のため、内蔵不揮発性メモリ120からROMバスB111に出力された読み出しデータを、データバスB102に乗せ換えて出力する。
このように、CPU110は、内蔵不揮発性メモリ120の該当アドレスに格納されているプログラムを、ROMバスB111およびデータ変換手段180を介してデータバスB102から順次読み出し、解読した結果に従い各種制御を行う。
次に、CPU110は、内蔵不揮発性メモリ120が格納するプログラムの任意のアドレスから始まるプログラムを訂正するため、以下に示すプログラム(A)(B)(C)を初期化プログラムとして実行する。
プログラム(A)は、外部メモリ190から、内蔵不揮発性メモリ120に格納された訂正するべきプログラム(以下、被訂正プログラムという)の先頭アドレス値を読み出し、訂正アドレスレジスタ140に設定する。
プログラム(B)は、外部メモリ190から、被訂正プログラムの先頭アドレスに該当する命令コードを置換する命令コードを読み出し、訂正データ設定レジスタに設定する。置換する命令コードは、後述する、内蔵揮発性メモリ130に外部メモリ190から転送する代替プログラムルーチンの先頭にサブルーチン分岐する命令であるものとする。
プログラム(C)は、外部メモリ190から、被訂正プログラムを代替するプログラム(以下、代替プログラムという)を内蔵揮発性メモリ130に転送する。
先ず、CPU110がプログラム(A)を読み出すと、CPU110は、アドレスバスB101に、外部メモリ190に該当するアドレスを出力すると共に、リード信号S112に‘1’を出力し、外部メモリ190に予め格納された、被訂正プログラムの先頭アドレス値を読み出す。更にCPU110は、設定アドレス書込み信号S107に‘1’を出力するとともに、データバスB101に先ほど読み出した、被訂正プログラムの先頭アドレスを出力し、訂正アドレスレジスタ140に設定する。
次に、CPU110がプログラム(B)を読み出すと、CPU110は、アドレスバスB101に、外部メモリ190に該当するアドレスを出力すると共に、リード信号S112に‘1’を出力し、外部メモリ190に予め格納された、被訂正プログラムの先頭アドレスに該当する命令コードを置換する命令コードを読み出す。更にCPU110は、訂正データ書込み信号S108に‘1’を出力するとともに、データバスB101に先ほど読み出した、被訂正プログラムの先頭アドレスに格納されている命令コードを置換する命令コードを出力し、訂正データレジスタ150に設定する。
次に、CPU110がプログラム(C)を読み出すと、CPU110は、アドレスバスB101に、外部メモリ190に該当するアドレスを出力すると共に、リード信号S112に‘1’を出力し、外部メモリ190に予め格納された、代替プログラムを順次読み出す。更にCPU110は、ライト信号S113に‘1’を、アドレスバスB101に内蔵揮発性メモリ130に該当するアドレスを各々出力するとともに、データバスB102に先ほど読み出した代替プログラムを出力し、内蔵揮発性メモリ130に書き込む。
プログラム(C)を繰り返すことで、外部メモリ190から順次、代替プログラムを内蔵揮発性メモリ130に転送する。
以上のように、初期化プログラム(A)(B)(C)でプログラム訂正の準備が完了した状態で、CPU110が被訂正プログラムの先頭アドレスを実行しようとしたときの動作を説明する。
CPU110は、アドレスバスB101に被訂正プログラムの先頭アドレスを出力すると共に、リード信号S112に‘1’を出力する。比較手段160はアドレスバスB101の値と、訂正アドレス信号S103の値がともに被訂正プログラムの先頭アドレスのため、一致信号S105にアドレスバスB101のアドレスと訂正アドレス信号S103の値とが一致したことを示す‘1’を出力する。比較結果記憶手段170は、一致信号S105の値‘1’を受けて‘1’の値を格納保持し、一致状態保持信号S106に‘1’を出力する。
データ変換手段180は、一致信号S105が‘1’であるため、訂正データ信号S104の値をデータバスB102に出力する。
次にCPU110はデータバスB102に出力された訂正データ信号の値が、予め内蔵揮発性メモリ130に外部メモリ190から転送された代替プログラムの先頭にサブルーチン分岐する命令であるため、プログラムの読み出し先を内蔵揮発性メモリ130の該当アドレスへと変更し、アドレスバスB101に該当アドレスを出力すると共に、リード信号S112に‘1’を出力し順次、内蔵揮発性メモリ130の該当アドレスに格納されている代替プログラムをデータバスB102から読み出し、代替プログラム実行する。
更に、代替プログラムの実行を終えるときには、CPU110は、リセット信号S109に‘1’を出力する。比較結果記憶手段170は、リセット信号S109の値‘1’を受けて、‘0’の値を格納保持し一致状態保持信号S106に‘0’を出力する。データ変換手段180は、一致信号S105が‘0’かつ一致状態保持信号S106が‘0’のため、内蔵不揮発性メモリ120からROMバスB111に出力された読み出しデータを、データバスB102に乗せ換えて出力する。このようにして、再び内蔵不揮発性メモリ120からプログラムおよびデータを読み出すことが可能となる。
ここで、不正ユーザが外部メモリ190に格納されたプログラムを改変し、代替プログラムを、内蔵不揮発性メモリ120からデータおよびプログラムを読み出す記述にしたとする。
CPU110が内蔵揮発性メモリ130から、改変された代替プログラムを読み出すと、CPU110は、アドレスバスB101に、内蔵不揮発性メモリ120に該当するアドレスを出力すると共に、リード信号S112に‘1’を出力する。
内蔵不揮発性メモリ120は、リード信号S112が‘1’であるため、アドレスバスB101の値が示すアドレスに該当するデータをROMバスB111に出力する。
比較手段160はアドレスバスB101の値と、訂正アドレス信号S103の値が異なるため一致信号S105に‘0’を出力する。比較結果記憶手段170は、一致信号S105の値が‘0’であるため、状態を保持し一致状態保持信号S106に‘1’を出力し続ける。
データ変換手段180は、一致信号S105が‘0’で、かつ一致状態保持信号S106が‘1’であるため、内蔵不揮発性メモリ120からROMバスB111に出力されたプログラムおよびデータを、データバスB102に出力しない。これにより、内蔵不揮発性メモリ120の保護エリアに格納されたプログラムおよびデータは、データバスB102等から、マイクロコンピュータ100の外部へ出力されることはない。
以上のように、マイクロコンピュータを、内蔵不揮発性メモリ120と、内蔵揮発性メモリ130と、訂正アドレスレジスタ140と、訂正データ設定レジスタ150と、比較手段160と、比較結果記憶手段170と、データ変換手段180とで構成することで、内蔵不揮発性メモリ120のプログラムを訂正しつつ、不正ユーザが外部メモリ190を改変し、内蔵不揮発性メモリ120に格納されたプログラムおよびデータを読み出そうと試みても、代替プログラムの実行中には、内蔵不揮発性メモリ120に格納されたデータは読み出すことができずセキュリティが向上する。
なお、前記説明において、データ変換手段180は、データ無効化の方法として、内蔵不揮発性メモリ120から読み出したプログラムおよびデータをデータバスB102に何も出力しないとしたが、他に、リード信号S112に‘1’を出力しない、アドレスバスB101に該当アドレスを与えない、データバスB102に任意のデータを出力するなどといった、該当するアドレスに格納されたプログラムおよびデータが読み出されない構成であれば良い。
(実施の形態2)
図2は本発明の(実施の形態2)のマイクロコンピュータを示し、図1と比べた場合には全体的なレイアウトは同じであるが、図2では、図1における内蔵不揮発性メモリ120に相当する内蔵不揮発性メモリ1020には複数個の記憶領域が形成されており、それに応じて図1におけるCPU110に相当するCPU1010の構成などが変更されている。
なお、図2では、図1と同一名称であっても異なる符号を付しているが、特に説明しない場合には、同一の動作をする。
マイクロコンピュータ1000は、CPU1010と、内部不揮発性メモリ1020と、内部揮発性メモリ1030と、訂正アドレスレジスタ1040と、訂正データレジスタ1050と、比較手段1060と、比較結果記憶手段1070と、データ変換手段1080と、2入力1出力のアンドゲート1100とによって構成されている。前記CPU1010は内部に空間判定手段1110を備えている。1090は前記マイクロコンピュータ1000の外部に接続される外部メモリである
アドレスバスB1001は、CPU1010と内蔵不揮発性メモリ1020と内蔵揮発性メモリ1030と比較手段1060とデータ変換手段1080と外部メモリ1090とを各々接続する。データバスB1002は、CPU1010と内蔵揮発性メモリ1030と訂正アドレスレジスタ1040と訂正データレジスタ1050とデータ変換手段1080と外部メモリ1090とを各々接続する。
CPU1010の出力の訂正アドレス書込み信号S1007は、訂正アドレスレジスタ1040に入力されている。訂正アドレスレジスタ1040の出力の訂正アドレス信号S1003は、比較手段1060の一方に入力されている。
CPU1010の出力の訂正データ書込み信号S1008は、訂正データレジスタ1050に入力されている。訂正データレジスタ1050の出力の訂正データ信号S1004は、データ変換手段1080に入力されている。
比較手段1060の出力の一致信号S1005は、比較結果記憶手段1070とデータ変換手段1080に入力されている。比較結果記憶手段1070の出力の一致状態保持信号S1006は、データ変換手段1080に入力されている。CPU1010から出力された原リセット信号S1014と内蔵不揮発性メモリ信号S1015とが入力に供給されたアンドゲート1100の出力に発生したリセット信号1009は、比較結果記憶手段1070に入力されている。リード信号S1012は、CPU1010から出力されて内蔵不揮発性メモリ1020と内蔵揮発性メモリ1030および外部メモリ1090に入力されている。ライト信号S1013は、CPU1010から出力されて内蔵揮発性メモリ1030に入力されている。内蔵不揮発性メモリ1020とデータ変換手段1080とは、ROMバスB1011で接続されている。
内蔵不揮発性メモリ1020はプログラムおよびデータを格納しており、リード信号S1012が‘1’であれば、アドレスバスB1001のアドレスで指定されるメモリ領域に格納されているプログラムおよびデータをROMバスB1011に出力する。
また、この内蔵不揮発性メモリ1020は、アドレスに応じてn個の領域に分割されている。ここでは、説明を簡単にするために、‘メモリ領域1’と‘メモリ領域2’との2つの領域に分割されているものとする。
データ変換手段1080は、一致信号S1005が‘1’であれば、内蔵不揮発性メモリ1020からROMバスB1011に出力された読み出しデータを訂正データ信号S1004の値に変換してデータバスB1002に出力する。また、一致信号S1005が‘0’で、かつ一致状態保持信号S1006が‘1’で、かつアドレスバスB1001が内蔵不揮発性メモリ1020内のメモリ領域1に該当するアドレスであれば、内蔵不揮発性メモリ1020からROMバスB1011に出力された読み出しデータを無効化し、データバスB1002に何も出力しない。また、一致信号S1005が‘0’で、かつ一致状態保持信号S1006が‘1’で、かつアドレスバスB1001が内蔵不揮発性メモリ1020内の‘メモリ領域2’に該当するアドレスであれば、内蔵不揮発性メモリ1020からROMバスB1011に出力された読み出しデータをデータバスB1002に載せ換えて出力する。更に、一致信号S1005が‘0’で、かつ一致状態保持信号S1006が‘0’であれば内蔵不揮発性メモリ1020からROMバスB1011に出力された読み出しデータを、データバスB1002に乗せ換えて出力する。
CPU1010の空間判定手段1110は、CPU1010が現在実行中のプログラムが、どのメモリ空間に格納されているかを判定し、内蔵不揮発性メモリ1020に格納されているプログラムを実行中の場合には、‘1’を、それ以外の場合には、‘0’を内蔵不揮発性メモリ信号S1015に出力する。また、CPU1010は、原リセット信号S1014に‘1’を出力して、アンドゲート1110を介して比較結果記憶手段1070の値を‘0’にリセットすることができる。
アンドゲート1110は、CPU1010が出力する原リセット信号S1014と空間判定手段1110が出力する不揮発性メモリ信号S1015との論理積をリセット信号S1009として出力する。すなわち、アンドゲート1110は、内蔵不揮発性メモリ信号S1015が‘1’で、かつ原リセット信号S1014が‘1’のときに、リセット信号に‘1’を出力し、比較結果記憶手段1070の値を‘0’にリセットする。
次に、内蔵不揮発性メモリ1020に格納されたプログラムおよびデータを訂正しつつ、読み出し保護を行うマイクロコンピュータ1000の動作に基づいて、図2の構成を詳しく説明する。
プログラムスタート時および以下に示すプログラム(A)(B)(C)を初期化プログラムとして実行する動作については、(実施の形態1)と同一である。
プログラム(A)は、外部メモリ1090から内蔵不揮発性メモリ1020に格納された訂正するべきプログラム(以下、被訂正プログラムという)の先頭アドレス値を読み出し、訂正アドレスレジスタ1040に設定する。
プログラム(B)は、外部メモリ1090から被訂正プログラムの先頭アドレスに該当する命令コードを置換する命令コードを読み出し、訂正データ設定レジスタに設定する。置換する命令コードは、内蔵揮発性メモリ1030に外部メモリ1090から転送する代替プログラムルーチンの先頭にサブルーチン分岐する命令であるものとする。
プログラム(C)は、外部メモリ1090から被訂正プログラムを代替するプログラム(以下、代替プログラムという)を内蔵揮発性メモリ1030に転送する。
以上の初期化プログラム(A)(B)(C)でプログラム訂正の準備が完了した状態で、CPU1010が被訂正プログラムの先頭アドレスを実行しようとしたときの動作を説明する。
CPU1010は、アドレスバスB1001に被訂正プログラムの先頭アドレスを出力すると共に、リード信号S1012に‘1’を出力する。比較手段1060はアドレスバスB1001の値と、訂正アドレス信号S1003の値がともに被訂正プログラムの先頭アドレスのため、一致信号S1005にアドレスバスB1001のアドレスと訂正アドレス信号S1003の値とが一致したことを示す‘1’を出力する。比較結果記憶手段1070は、一致信号S1005の値‘1’を受けて‘1’の値を格納保持し、一致状態保持信号S1006に‘1’を出力する。
データ変換手段1080は、一致信号S1005が‘1’であるため、訂正データ信号S1004の値をデータバスB1002に出力する。
次にCPU1010はデータバスB1002に出力された訂正データ信号の値が、予め内蔵揮発性メモリ1030に、外部メモリ1090から転送された代替プログラムの先頭にサブルーチン分岐する命令であるため、プログラムの読み出し先を内蔵揮発性メモリ1030の該当アドレスへと変更し、アドレスバスB1001に該当アドレスを出力すると共に、リード信号S1012に‘1’を出力し、内蔵揮発性メモリ1030の該当アドレスに格納されている代替プログラムを順次、データバスB1002から読み出し、代替プログラム実行する。
この代替プログラム実行中に、内蔵不揮発性メモリ1020に格納されているデータを参照する場合には、予め参照データを内蔵不揮発性メモリ1020内の‘メモリ領域2’に格納してくことで実現可能となる。以下にこのときの動作を説明する。
CPU1010は、アドレスバスB1001に内蔵不揮発性メモリ1020内の‘メモリ領域2’に該当するアドレスを出力するとともに、リード信号S1012に‘1’を出力する。この時、アドレスバスB1001に出力されるアドレスは、訂正アドレスレジスタ1040に設定されているアドレスとは異なるものとする。内蔵不揮発性メモリ1020は、リード信号S1012が‘1’のため、アドレスバスB1001のアドレスに該当するデータをROMバスB1011に出力する。比較手段1060は、アドレスバスB1001のアドレスと訂正アドレス信号S1003の値を比較し、値が異なるため一致信号S1005に‘0’を出力する。比較結果記憶手段1070は、代替プログラム実行時にセットされた‘1’の値を保持し、一致状態保持信号S1006に‘1’を出力し続けている。データ変換手段1080は、一致信号S1005が‘0’で、かつ一致状態保持信号S1006が‘1’で、かつアドレスバスB1001のアドレスが‘メモリ領域2’に該当するため、内蔵不揮発性メモリ1020からROMバスB1011に出力された読み出しデータを、データバスB1002に乗せ換えて出力する。
このように、‘メモリ領域2’にデータおよびプログラムを予め格納しておくことで、代替プログラムを実行中でも内蔵不揮発性メモリ1020からデータおよびプログラムを読み出し可能となる。
更に、代替プログラムの実行を終えるときには、CPU1010は、リセット原信号S1014に‘1’を出力する。このときCPU1010が原リセット信号S1014に‘1’を出力する処理を実行するためのプログラムは、内蔵不揮発性メモリ1020の‘メモリ領域2’に格納してあるものとする。
‘メモリ領域2’に格納してあるプログラムの実行は、上記と同様にCPU1010が順次、内蔵不揮発性メモリ1020の該当アドレスに格納されているプログラムを、ROMバスB1011およびデータ変換手段1080を介してデータバスB1002から読み出すことで実現できる。空間判定手段1110は、‘メモリ領域2’に格納されている、原リセット信号S1014に‘1’を出力する処理を実行するためのプログラムを実行中のため、内蔵揮発性メモリ信号S1015に‘1’を出力する。アンドゲート1100は、原リセット信号S1014の値‘1’と内蔵不揮発性メモリ信号S1015の値‘1’との論理積‘1’をリセット信号S1009として出力する。比較結果記憶手段1070は、リセット信号S1009の値‘1’を受けて、‘0’の値を格納保持し一致状態保持信号S1006に‘0’を出力する。データ変換手段1080は、一致信号S1005が‘0’かつ一致状態保持信号S1006が‘0’のため、内蔵不揮発性メモリ1020からROMバスB1011に出力された読み出しデータを、データバスB1002に乗せ換えて出力する。このようにして、再び内蔵不揮発性メモリ1020からプログラムおよびデータを読み出すことが可能となる。
ここで、不正ユーザが外部メモリ1090に格納されたプログラムを改変し、代替プログラムを、内蔵不揮発性メモリ1020からデータおよびプログラムを読み出す記述にしたと仮定する。
CPU1010が内蔵揮発性メモリ1030から、改変された代替プログラムを読み出すと、CPU1010はアドレスバスB1001に、内蔵不揮発性メモリ1020に該当するアドレスを出力すると共に、リード信号S1012に‘1’を出力する。
内蔵不揮発性メモリ1020は、リード信号S1012が‘1’であるため、アドレスバスB1001の値が示すアドレスに該当するデータをROMバスB1011に出力する。
比較手段1060はアドレスバスB1001の値と、訂正アドレス信号S1003の値が異なるため一致信号S1005に‘0’を出力する。比較結果記憶手段1070は、一致信号S1005の値が‘0’であるため、状態を保持し一致状態保持信号S1006に‘1’を出力し続ける。
データ変換手段1080は、一致信号S1005が‘0’で、かつ一致状態保持信号S1006が‘1’であるため、アドレスバスB1001のアドレスが‘メモリ領域1’に該当するアドレスか、‘メモリ領域2’に該当するアドレスかによって動作が異なる。‘メモリ領域2’に該当するアドレスの場合には、内蔵不揮発性メモリ1020からROMバスB1011に出力されたプログラムおよびデータを、データバスB1002に載せ換えて出力するため、‘メモリ領域2’に格納されたデータおよびプログラムは読み出されてしまう。しかしながら、‘メモリ領域1’に該当するアドレスの場合には、内蔵不揮発性メモリ1020からROMバスB1011に出力されたプログラムおよびデータを、データバスB1002に出力しないため、内蔵不揮発性メモリ1020の記憶領域1に格納されたプログラムおよびデータは、データバスB1002等から、マイクロコンピュータ1000の外部へ出力されることはない。
次に、不正ユーザが外部メモリ1090に格納されたプログラムを改変し、代替プログラムを、CPU1010が原リセット信号S1014に‘1’を出力する記述にしたと仮定する。
CPU1010は、原リセット信号S1014に‘1’を出力する。空間判定手段1110は、内蔵不揮発性メモリ1030に転送された代替プログラム内にある、原リセット信号S1014に‘1’を出力する処理を実行中のため、内蔵揮発性メモリ信号S1015に‘0’を出力する。アンドゲート1100は、原リセット信号S1014の値‘1’と内蔵不揮発性メモリ信号S1015の値‘0’との論理積‘0’をリセット信号S1009として出力する。
比較結果記憶手段1070は、リセット信号S1009の値が‘0’のため、代替プログラムを実行するときに格納保持された‘1’の値を保持し続け、一致状態保持信号S1006に‘1’を出力し続ける。データ変換手段1080は、一致信号S1005が‘0’かつ一致状態保持信号S1006が‘1’のため、上記と同様に、‘メモリ領域2’に格納したデータは読み出し可能だが、‘メモリ領域1’に格納したデータは読み出し不可能のままである。
このように、マイクロコンピュータ1000を、内蔵不揮発性メモリ1020と、複数のメモリ領域から構成される内蔵揮発性メモリ1030と、訂正アドレスレジスタ1040と、訂正データレジスタ1050と、比較手段1060と、比較結果記憶手段1070と、データ変換手段1080とで構成することで、内蔵不揮発性メモリ1020のプログラムを訂正しつつ、不正ユーザが外部メモリ1090を改変して内蔵不揮発性メモリ1020に格納されたプログラムおよびデータを読み出そうと試みても、代替プログラムの実行中には、内蔵不揮発性メモリ1020に格納されたデータは読み出すことができない一方で、‘メモリ領域2’に格納されたデータについては、代替プログラム実行中にもデータの参照が可能となる。さらに、比較結果記憶手段1070のリセットを内蔵不揮発性メモリ1020内に格納されたプログラムからしか実行できないことで、代替プログラムから読み出しの解除が行えないためセキュリティが向上する。
前記の説明においてデータ変換手段1080は、データ無効化の方法として、内蔵不揮発性メモリ1020から読み出したプログラムおよびデータをデータバスB1002に何も出力しないとしたが、他にリード信号S1012に‘1’を出力しない、アドレスバスB1001に該当アドレスを与えない、データバスB1002に任意のデータを出力するなどといった、該当するアドレスに格納されたプログラムおよびデータが読み出されない構成であれば良い。
前記の説明において、内蔵不揮発性メモリ1020は、2つのメモリ領域から構成されているとしたが、内蔵不揮発性メモリ1020はn個(nは2以上の整数)のメモリ領域で構成し、各領域毎に代替プログラム中の読み出しが可能か否かを設定できる構成であっても良い。
(実施の形態3)
図3は本発明の(実施の形態3)のマイクロコンピュータを示し、図1と比べた場合には全体的なレイアウトは同じであるが、図3では、図1におけるCPU110に相当するCPU2010に、CPU2010のアクセスがオペランドフェッチであるか否かを判定すフェッチ判定手段2110を備え、図1における比較結果記憶手段170に相当する比較結果記憶手段2070の入力回路などが変更されている。
なお、図3では、図1と同一名称であっても異なる符号を付しているが、特に説明しない場合には、同一の動作をする。
マイクロコンピュータ2000は、CPU2010と、内部不揮発性メモリ2020と、内部揮発性メモリ2030と、訂正アドレスレジスタ2040と、訂正データレジスタ2050と、比較手段2060と、比較結果記憶手段2070と、データ変換手段2080と、2入力1出力のアンドゲート2100とによって構成されている。また、前記CPU2010は内部にフェッチ判定手段2110を備えている。2090は前記マイクロコンピュータ2000の外部に接続される外部メモリである。
アドレスバスB2001は、CPU2010と内蔵不揮発性メモリ2020と内蔵揮発性メモリ2030と比較手段2060と外部メモリ2090とを各々接続する。データバスB2002は、CPU2010と内蔵揮発性メモリ2030と訂正アドレスレジスタ2040と訂正データレジスタ2050とデータ変換手段2080と外部メモリ2090とを各々接続する。
CPU2010の出力の訂正アドレス書込み信号S2007は、訂正アドレスレジスタ2040に入力されている。訂正アドレスレジスタ2040の出力の訂正アドレス信号S2003は、比較手段2060の一方に入力されている。
CPU2010の出力の訂正データ書込み信号S2008は、訂正データ設定レジスタ2050に接続されている。 訂正データレジスタ2050の出力の訂正データ信号S2004は、データ変換手段2080に入力されている。
比較手段2060の出力の一致信号S2005は、データ変換手段2080とアンドゲート2100に入力されている。アンドゲート2100のもう一方の入力にはフェッチ判定手段2110から出力されたオペコードフェッチ信号S2015が入力されており、アンドゲート2100の出力のセット信号S2014は比較結果記憶手段2070に入力されている。比較結果記憶手段2070にはCPU2010からリセット信号2009が入力されている。比較結果記憶手段2070の出力の一致状態保持信号S2006は、データ変換手段2080に入力されている。内蔵不揮発性メモリ2020とデータ変換手段2080はROMバスB2011で接続されている。
CPU2010が出力するリード信号S2012は、内蔵不揮発性メモリ2020と内蔵揮発性メモリ2030と外部メモリ2090に入力されている。CPU2010が出力するライト信号S2013は、内蔵揮発性メモリ2030に入力されている。
比較結果記憶手段2070は、セット信号S2014の値が‘1’であれば、‘1’の値を格納保持し、リセット信号S2009の値が‘1’であれば、‘0’の値を格納保持し、保持した値を一致状態保持信号S2006に出力する。また、比較結果記憶手段の初期値は‘0’とする。
フェッチ判定手段2110は、CPU2010が実行中のアクセスがオペランドフェッチかオペコードフェッチかを判定し、オペランドフェッチの場合には‘0’を、オペコードフェッチの場合には‘1’をオペコードフェッチ信号S2015に出力する。
アンドゲート2110は、フェッチ判定手段2110が出力するオペコードフェッチ信号S1015と比較手段2060が出力する一致信号S2005との論理積をセット信号S2014として出力する。すなわち、アンドゲート2110は、オペコードフェッチ信号が‘0’のときにはセット信号に‘0’を出力し、比較結果記憶手段2070の値を‘1’にセットすることを回避する。
次に、内蔵不揮発性メモリ2020に格納されたプログラムおよびデータを訂正しつつ、読み出し保護を行うマイクロコンピュータの動作に基づいて、図3の構成を詳しく説明する。なお、プログラムスタート時および、以下に示すプログラムを初期化プログラムとして実行する動作については、(実施の形態1)と同一であるので説明を省略する。
ここでは、下記の(A)(B)(C)の初期化プログラムでプログラム訂正の準備が完了した状態で、CPU2010が被訂正プログラムの先頭アドレスを実行しようとしたときの動作を説明する。
プログラム(A)は、外部メモリ2090から内蔵不揮発性メモリ2020に格納された訂正するべきプログラム(以下、被訂正プログラムという)の先頭アドレス値を読み出し、訂正アドレスレジスタ2040に設定する。
プログラム(B)は、外部メモリ2090から被訂正プログラムの先頭アドレスに該当する命令コードを置換する命令コードを読み出し、訂正データ設定レジスタ2050に設定する。通常、置換する命令コードは、後述する、内蔵揮発性メモリ2030に外部メモリ2090から転送する代替プログラムルーチンの先頭にサブルーチン分岐する命令である。
プログラム(C)は、外部メモリ2090から被訂正プログラムを代替するプログラム(以下、代替プログラムという)を内蔵揮発性メモリ2030に転送する。
CPU2010は、アドレスバスB2001に被訂正プログラムの先頭アドレスを出力すると共に、リード信号S2012に‘1’を出力する。比較手段2060は、アドレスバスB2001の値と訂正アドレス信号S2003の値が、ともに被訂正プログラムの先頭アドレスのため、一致信号S2005にアドレスバスB2001のアドレスと訂正アドレス信号S2003の値とが一致したことを示す‘1’を出力する。フェッチ判定手段2110は、CPU2010が実行中のアクセスがオペコードフェッチのため、オペコードフェッチ信号S2015に‘1’を出力する。アンドゲート2100は、一致信号S2005の値‘1’とオペコードフェッチ信号S2015の値‘1’の論理積‘1’をセット信号S2014として出力する。比較結果記憶手段2070は、セット信号S2014の値‘1’を受けて‘1’の値を格納保持し、一致状態保持信号S2006に‘1’を出力する。データ変換手段2080は、一致信号S2005が‘1’であるため、訂正データ信号S2004の値をデータバスB2002に出力する。
次にCPU2010は、データバスB2002に出力された訂正データ信号の値が、予め内蔵揮発性メモリ2030に外部メモリ2090から転送された代替プログラムの先頭にサブルーチン分岐する命令であるため、プログラムの読み出し先を内蔵揮発性メモリ2030の該当アドレスへと変更し、アドレスバスB2001に該当アドレスを出力すると共に、リード信号S2012に‘1’を出力し、内蔵揮発性メモリ2030の該当アドレスに格納されている代替プログラムをデータバスB2002から順次読み出し、代替プログラム実行する。
以上は、前記プログラム(B)で、置換する命令コードが内蔵揮発性メモリ2030に外部メモリ2090から転送する代替プログラムルーチンの先頭にサブルーチン分岐する命令である場合についての動作であるが、置換する命令コードがテーブルデータなどのオペランドフェッチとしてアクセスする場合もある。以下にオペランドフェッチデータを置換する場合の動作を説明する。
この場合のCPU2010は、アドレスバスB2001に被訂正プログラムの先頭アドレスを出力すると共に、リード信号S2012に‘1’を出力する。比較手段2060はアドレスバスB2001の値と、訂正アドレス信号S2003の値がともに被訂正プログラムの先頭アドレスのため、一致信号S2005にアドレスバスB2001のアドレスと訂正アドレス信号S2003の値とが一致したことを示す‘1’を出力する。フェッチ判定手段2110は、CPU2010が実行中のアクセスがオペランドフェッチのため、オペコードフェッチ信号S2015に‘0’を出力する。アンドゲート2100は、一致信号S2005の値‘1’とオペコードフェッチ信号S2015の値‘0’の論理積‘0’をセット信号S2014として出力する。比較結果記憶手段2070は、セット信号S2014の値‘0’を受けて、一致状態保持信号S2006に‘0’を出力し続ける。データ変換手段2080は、一致信号S2005が‘1’であるため、訂正データ信号S2004の値をデータバスB2002に出力する。
このように、一致状態保持信号S2006が‘1’にセットされないため、CPU2010が引き続きプログラムを実行する場合でも、内蔵不揮発性メモリ2020に格納されたデータの読み出しが保護されることはないが、オペランドフェッチデータを訂正する場合には、前記プログラム(C)にある、内蔵揮発性メモリ2030に代替プログラムを転送することもないため、不正ユーザにプログラムを改変されることもないため、セキュリティが損なわれることはない。逆に、オペランドフェッチデータを訂正する場合、比較結果記憶手段2070をリセットして、セキュリティを解除する手間を省くことができる。
(実施の形態4)
図4は本発明の(実施の形態4)のマイクロコンピュータを示し、図1と比べた場合には全体的なレイアウトは同じであるが、図4では、図1におけるCPU110に相当するCPU3010は、図1におけるデータ変換手段180に相当するデータ変換手段3080を介して読み出したデータが、サブルーチン分岐命令であるか否かを解読する解読手段3110を備え、図1における比較結果記憶手段170に相当する比較結果記憶手段3070の入力回路などが変更されている。なお、図4では、図1と同一名称であっても異なる符号を付しているが、特に説明しない場合には、同一の動作をする。
マイクロコンピュータ3000は、CPU3010と内部不揮発性メモリ3020と内部揮発性メモリ3030と訂正アドレスレジスタ3040と訂正データレジスタ3050と比較手段3060と比較結果記憶手段3070とデータ変換手段3080および2入力1出力のアンドゲート3100とによって構成されている。また、CPU3010は内部に解読手段3110を備えている。3090はマイクロコンピュータ3000の外部に接続される外部メモリである。
アドレスバスB3001は、CPU3010と内蔵不揮発性メモリ3020と内蔵揮発性メモリ3030と比較手段3060と外部メモリ3090とを各々接続する。データバスB3002は、CPU3010と内蔵揮発性メモリ3030と訂正アドレスレジスタ3040と訂正データレジスタ3050とデータ変換手段3080と外部メモリ3090とを各々接続する。
CPU3010の出力の訂正アドレス書込み信号S3007は、訂正アドレスレジスタ3040に入力されている。訂正アドレスレジスタ3040の出力の訂正アドレス信号S3003は、比較手段3060の一方に入力されている。
CPU3010の出力の訂正データ書込み信号S3008は、訂正データ設定レジスタ3050に入力されている。訂正データレジスタ3050の出力の訂正データ信号S3004は、データ変換手段3080に入力されている。
比較手段3060の出力の一致信号S3005は、データ変換手段3080とアンドゲート3100の一方の入力とに入力されている。CPU3010の出力するサブルーチン分岐信号S3015は、アンドゲート3100のもう一方の入力に入力されている。アンドゲート3100の出力のセット信号S3014は、比較結果記憶手段3070に入力されている。CPU3010の出力のリセット信号3009は、比較結果記憶手段3070に入力されている。比較結果記憶手段3070の出力の一致状態保持信号S3006は、データ変換手段3080に入力されている。
内蔵不揮発性メモリ3020とデータ変換手段3080とは、ROMバスB3011によって接続されている。
CPU3010の出力するリード信号S3012は、内蔵不揮発性メモリ3020と内蔵揮発性メモリ3030および外部メモリ3090に入力されている。CPU3010の出力するライト信号S3013は、内蔵揮発性メモリ3030に入力されている。
比較結果記憶手段3070は、セット信号S3014の値が‘1’であれば、‘1’の値を格納保持し、リセット信号S3009の値が‘1’であれば、‘0’の値を格納保持し、保持した値を一致状態保持信号S3006に出力する。また、比較結果記憶手段3070の初期値は‘0’とする。
CPU3010の解読手段2110は、CPU3010がデータバスB3002から読み込んだ命令コードを解読し、命令コードがサブルーチン分岐命令か否かを判定し、サブルーチン分岐命令の場合には‘1’を、それ以外の場合には‘0’をサブルーチン分岐信号S3015に出力する。
前記アンドゲート3110は、解読手段3110が出力するサブルーチン分岐信号S3015と比較手段3060が出力する一致信号S3005との論理積をセット信号S3014として出力する。すなわち、アンドゲート3110は、サブルーチン分岐信号が‘0’のときにはセット信号に‘0’を出力し、比較結果記憶手段3070の値を‘1’にセットすることを回避する。
次に、内蔵不揮発性メモリ3020に格納されたプログラムおよびデータを訂正しつつ、読み出し保護を行うマイクロコンピュータ2000の動作に基づいて説明する。なお、プログラムスタート時および、以下に示すプログラム(A)(B)(C)を初期化プログラムとして実行する動作については、(実施の形態1)と同一である。
プログラム(A)は、外部メモリ3090から内蔵不揮発性メモリ3020に格納された訂正するべきプログラム(以下、被訂正プログラムという)の先頭アドレス値を読み出し、訂正アドレスレジスタ2040に設定する。
プログラム(B)は、外部メモリ3090から被訂正プログラムの先頭アドレスに該当する命令コードを置換する命令コードを読み出し、訂正データ設定レジスタに設定する。通常、置換する命令コードは、後述する、内蔵揮発性メモリ3030に外部メモリ3090から転送する代替プログラムルーチンの先頭にサブルーチン分岐する命令である。
プログラム(C)は、外部メモリ3090から被訂正プログラムを代替するプログラム(以下、代替プログラムという)を内蔵揮発性メモリ3030に転送する。
以上の(A)(B)(C)の初期化プログラムでプログラム訂正の準備が完了した状態で、CPU3010が被訂正プログラムの先頭アドレスを実行しようとしたときの動作を説明する。
CPU3010は、アドレスバスB3001に被訂正プログラムの先頭アドレスを出力すると共に、リード信号S3012に‘1’を出力する。比較手段3060はアドレスバスB3001の値と、訂正アドレス信号S3003の値がともに被訂正プログラムの先頭アドレスのため、一致信号S3005にアドレスバスB3001のアドレスと訂正アドレス信号S3003の値とが一致したことを示す‘1’を出力する。
データ変換手段3080は、一致信号S3005が‘1’であるため、訂正データ信号S3004の値をデータバスB3002に出力する。
次にCPU3010は、データバスB3002を介して訂正データレジスタ3050に格納されている、予め内蔵揮発性メモリ3030に外部メモリ3090から転送された代替プログラムの先頭にサブルーチン分岐する命令コードを読み込む。
解読手段3110は、CPU3010がデータバスB3002から読み込んだ命令コードを解読し、命令コードがサブルーチン分岐命令のため、サブルーチン分岐信号S3015に‘1’を出力する。アンドゲート3100は、一致信号S2005の値‘1’とサブルーチン分岐信号S3015の値‘1’の論理積‘1’をセット信号S3014として出力する。比較結果記憶手段3070は、セット信号S3014の値‘1’を受けて‘1’の値を格納保持し、一致状態保持信号S3006に‘1’を出力する。
次にCPU3010は、データバスB3002を介して読み込んだ命令コードが、予め内蔵揮発性メモリ3030に外部メモリ3090から転送された代替プログラムの先頭にサブルーチン分岐する命令コードであるため、プログラムの読み出し先を内蔵揮発性メモリ3030の該当アドレスへと変更し、アドレスバスB3001に該当アドレスを出力すると共に、リード信号S3012に‘1’を出力し順次、内蔵揮発性メモリ3030の該当アドレスに格納されている代替プログラムをデータバスB3002から読み出し、代替プログラム実行する。
以上は、前記プログラム(B)で、置換する命令コードが内蔵揮発性メモリ3030に外部メモリ2090から転送する代替プログラムルーチンの先頭にサブルーチン分岐する命令である場合についての動作であるが、置換する命令コードがテーブルデータなどのオペランドフェッチとしてアクセスする場合もある。以下にオペランドフェッチデータを置換する場合の動作を説明する。
CPU3010は、アドレスバスB3001に被訂正プログラムの先頭アドレスを出力すると共に、リード信号S3012に‘1’を出力する。比較手段3060はアドレスバスB3001の値と、訂正アドレス信号S3003の値がともに被訂正プログラムの先頭アドレスのため、一致信号S3005にアドレスバスB3001のアドレスと訂正アドレス信号S3003の値とが一致したことを示す‘1’を出力する。
データ変換手段3080は、一致信号S3005が‘1’であるため、訂正データ信号S3004の値をデータバスB3002に出力する。
次にCPU3010は、データバスB3002を介して訂正データレジスタ3050に格納されている、テーブルデータを読み込む。
解読手段3110は、CPU3010がデータバスB3002から読み込んだ命令コードを解読し、命令コードがテーブルデータのため、サブルーチン分岐信号S3015に‘0’を出力する。アンドゲート3100は、一致信号S3005の値‘1’とサブルーチン分岐信号S3015の値‘0’の論理積‘0’をセット信号S3014として出力する。比較結果記憶手段3070は、セット信号S3014の値‘0’を受けて、一致状態保持信号S3006に‘0’を出力し続ける。
このように、一致状態保持信号S3006が‘1’にセットされないため、CPU3010が引き続きプログラムを実行する場合でも、内蔵不揮発性メモリ3020に格納されたデータの読み出しが保護されることはないが、オペランドフェッチデータを訂正する場合には、前記プログラム(C)にある、内蔵揮発性メモリ3030に代替プログラムを転送することもないため、不正ユーザにプログラムを改変されず、セキュリティが損なわれることはない。逆に、オペランドフェッチデータを訂正する場合、比較結果記憶手段3070をリセットしてセキュリティを解除する手間を省くことができる。
(実施の形態5)
図5は本発明の(実施の形態5)のマイクロコンピュータを示し、図1と比べた場合には全体的なレイアウトは同じであるが、図5では、図1におけるCPU110に相当するCPU4010は、実行しているプログラムが図1における内蔵不揮発性メモリ120に相当する不揮発性メモリ4020に格納されたプログラムであるか否かを判定する空間判定手段4110と、CPU4010のアクセスがオペランドフェッチであるか否かを判定するフェッチ判定手段4120とを備え、図1におけるデータ変換手段180に相当するデータ変換手段4080の入力回路などが変更されている。なお、図5では、図1と同一名称であっても異なる符号を付しているが、特に説明しない場合には、同一の動作をする。
マイクロコンピュータ4000は、CPU4010と内部不揮発性メモリ4020と内部揮発性メモリ4030と訂正アドレスレジスタ4040と訂正データレジスタ4050と比較手段4060と比較結果記憶手段4070とデータ変換手段4080および3入力1出力のアンドゲート4100とによって構成されている。また、CPU4010は内部に空間判定手段4110とフェッチ判定手段4120を備えている。4090はマイクロコンピュータ4000の外部に接続される外部メモリである。
アドレスバスB4001は、CPU4010と内蔵不揮発性メモリ4020と内蔵揮発性メモリ4030と比較手段4060と外部メモリ4090とを各々接続する。データバスB4002は、CPU4010と内蔵揮発性メモリ4030と訂正アドレスレジスタ4040と訂正データレジスタ4050とデータ変換手段4080と外部メモリ4090とを各々接続する。
CPU4010の出力する訂正アドレス書込み信号S4007は、訂正アドレスレジスタ4040に入力されている。訂正アドレスレジスタ4040の出力の訂正アドレス信号S4003は、比較手段4060のもう一方の入力に入力されている。CPU4010の出力する訂正データ書込み信号S4008は、訂正データ設定レジスタ4050に入力されている。訂正データレジスタ4050の出力の訂正データ信号S4004は、データ変換手段4080に入力されている。
比較手段4060の出力の一致信号S4005は、比較結果記憶手段4070とデータ変換手段4080とに入力されている。CPU4010の出力するリセット信号4009は、比較結果記憶手段4070に入力されている。比較結果記憶手段2070の出力の一致状態保持信号S4006は、アンドゲート4100に入力されている。アンドゲート4100の入力にはこの他に、空間判定手段4110の出力する内蔵揮発性メモリ信号S4015と、フェッチ判定手段4120の出力するオペランドフェッチ信号S4016とが入力されている。 アンドゲート4100の出力の無効化信号S4014は、データ変換手段4080に有力されている。
内蔵不揮発性メモリ4020とデータ変換手段4080とはROMバスB4011で接続されている。CPU4010の出力するリード信号S4012は、内蔵不揮発性メモリ4020と内蔵揮発性メモリ4030と外部メモリ4090に入力されている。CPU4010の出力するライト信号S4013は、内蔵揮発性メモリ4030に入力されている。
データ変換手段4080は、一致信号S4005が‘1’であれば、内蔵不揮発性メモリ4020からROMバスB4011に出力された読み出しデータを訂正データ信号S4004の値に変換してデータバスB4002に出力する。また、一致信号S4005が‘0’かつ、無効化信号S4014が‘1’であれば、内蔵不揮発性メモリ4020からROMバスB4011に出力された読み出しデータを無効化し、データバスB4002に何も出力しない。また、一致信号S4005が‘0’で、かつ無効化信号S4014が‘0’であれば内蔵不揮発性メモリ4020からROMバスB4011に出力された読み出しデータを、データバスB4002に乗せ換えて出力する。
空間判定手段4110は、CPU4010が実行中のプログラムが、どのメモリ空間に格納されているかを判定し、内蔵揮発性メモリ4030に格納されているプログラムを実行中の場合には、‘1’を、それ以外の場合には、‘0’を内蔵揮発性メモリ信号S4015に出力する。
フェッチ判定手段4120は、CPU4010が実行中のアクセスがオペランドフェッチかオペコードフェッチかを判定し、オペランドフェッチの場合には‘1’を、オペコードフェッチの場合には‘0’をオペランドフェッチ信号S4015に出力する。
次に、内蔵不揮発性メモリ4020に格納されたプログラムおよびデータを訂正しつつ、読み出し保護を行うマイクロコンピュータ3000の動作に基づいて説明する。なお、プログラムスタート時および、以下に示すプログラム(A)(B)(C)を初期化プログラムとして実行する動作については、(実施の形態1)と同一である。
プログラム(A)は、外部メモリ4090から内蔵不揮発性メモリ4020に格納された訂正するべきプログラム(以下、被訂正プログラムという)の先頭アドレス値を読み出し、訂正アドレスレジスタ3040に設定する。
プログラム(B)は、外部メモリ4090から被訂正プログラムの先頭アドレスに該当する命令コードを置換する命令コードを読み出し、訂正データ設定レジスタに設定する。通常、置換する命令コードは、後述する、内蔵揮発性メモリ4030に外部メモリ4090から転送する代替プログラムルーチンの先頭にサブルーチン分岐する命令である。
プログラム(C)は、外部メモリ4090から被訂正プログラムを代替するプログラム(以下、代替プログラムという)を内蔵揮発性メモリ4030に転送する。
以上の(A)(B)(C)の初期化プログラムでプログラム訂正の準備が完了した状態で、CPU4010が被訂正プログラムの先頭アドレスを実行しようとしたときの動作を説明する。
CPU4010は、アドレスバスB4001に被訂正プログラムの先頭アドレスを出力すると共に、リード信号S4012に‘1’を出力する。比較手段4060はアドレスバスB4001の値と、訂正アドレス信号S4003の値がともに被訂正プログラムの先頭アドレスのため、一致信号S4005にアドレスバスB4001のアドレスと訂正アドレス信号S4003の値とが一致したことを示す‘1’を出力する。
データ変換手段4080は、一致信号S4005が‘1’であるため、訂正データ信号S4004の値をデータバスB2002に出力する。
次にCPU4010はデータバスB4002に出力された訂正データ信号の値が、予め内蔵揮発性メモリ4030に外部メモリ4090から転送された代替プログラムの先頭にサブルーチン分岐する命令であるため、プログラムの読み出し先を内蔵揮発性メモリ4030の該当アドレスへと変更し、アドレスバスB4001に該当アドレスを出力すると共に、リード信号S4012に‘1’を出力し順次、内蔵揮発性メモリ4030の該当アドレスに格納されている代替プログラムをデータバスB4002から読み出し、代替プログラム実行する。
ここで、不正ユーザが外部メモリ4090に格納されたプログラムを改変し、代替プログラムを、内蔵不揮発性メモリ4020からデータおよびプログラムを読み出す記述にしたとする。
CPU4010が内蔵揮発性メモリ4030から、改変された代替プログラムを読み出すと、CPU4010は、アドレスバスB4001に、内蔵不揮発性メモリ4020に該当するアドレスを出力すると共に、リード信号S4012に‘1’を出力する。
内蔵不揮発性メモリ4020は、リード信号S4012が‘1’であるため、アドレスバスB4001の値が示すアドレスに該当するデータをROMバスB4011に出力する。
比較手段4060は、アドレスバスB4001の値と訂正アドレス信号S4003の値が異なるため一致信号S4005に‘0’を出力する。比較結果記憶手段4070は、一致信号S4005の値が‘0’であるため、状態を保持し一致状態保持信号S4006に‘1’を出力し続ける。
空間判定手段4110は、CPU4010が内蔵揮発性メモリ4030に格納されている代替プログラムを実行中のため、内蔵揮発性メモリ信号S4015に‘1’を出力する。
フェッチ判定手段4120は、CPU4010が内蔵不揮発性メモリ4030に対して行おうとしているアクセスは、データ読み出しを行うオペランドフェッチであるため、オペランドフェッチ信号S4016に‘1’を出力する。アンドゲート4100は、一致状態保持信号S4006の値‘1’と内蔵揮発性メモリ信号S4015の値‘1’とオペランドフェッチ信号S4016の値‘1’の論理積‘1’を無効化信号S4014として出力する。
データ変換手段4080は、一致信号S4005が‘0’で、かつ無効化信号S4014が‘1’であるため、内蔵不揮発性メモリ4020からROMバスB4011に出力されたプログラムおよびデータを、データバスB4002に出力しない。これにより、内蔵不揮発性メモリ4020に格納されたプログラムおよびデータは、データバスB4002等から、マイクロコンピュータ4000の外部へ出力されることはない。
以上は、前記プログラム(C)で、内蔵揮発性メモリ4030に転送しておく代替プログラムが内蔵揮発性メモリ4030の空間から分岐することがないことを前提としているが、以下に代替プログラムが内蔵不揮発性メモリ4020に格納されたサブルーチンを実行するときの動作を説明する。
CPU4010が、内蔵揮発性メモリ4030に格納された代替プログラム中の、内蔵不揮発性メモリ4020へサブルーチン分岐する命令コードを読み込むと、プログラムの読み出し先を内蔵不揮発性メモリ4020の該当アドレスへと変更し、アドレスバスB4001に該当アドレスを出力すると共に、リード信号S4012に‘1’を出力する。空間判定手段4110は、CPU4010が内蔵揮発性メモリ4030に格納されている代替プログラム中の内蔵不揮発性メモリ4020へサブルーチン分岐する命令コードを実行中のため、内蔵揮発性メモリ信号S4015に‘1’を出力する。フェッチ判定手段4120は、CPU4010が内蔵不揮発性メモリ4030に対して行おうとしているアクセスは、命令読み出しを行うオペコードフェッチであるため、オペランドフェッチ信号S4016に‘0’を出力する。アンドゲート4100は、一致状態保持信号S4006の値‘1’と内蔵揮発性メモリ信号S4015の値‘1’とオペランドフェッチ信号S4016の値‘0’の論理積‘1’を無効化信号S4014として出力する。
データ変換手段4080は、一致信号S4005が‘0’で、かつ無効化信号S4014が‘0’であるため、内蔵不揮発性メモリ4020からROMバスB4011に出力されたデータをデータバスB4002に載せ換えて出力する。
次にCPU4010は、データバスB4002を介して読み出した、内蔵不揮発性メモリ4030の該当アドレスに格納されているプログラムを解読した結果に従い各種制御を行う。以降、CPU4010は、内蔵不揮発性メモリ4030に格納されているプログラムを順次実行するため、空間判定手段4120は内蔵揮発性メモリ信号S4015に‘0’を出力する。アンドゲート4100は内蔵揮発性メモリ信号S4015の値が‘0’であるため、一致状態保持信号S4006および、オペランドフェッチ信号S4016の値に依らず、無効化信号S4014に‘0’を出力する。
このように、内蔵不揮発性メモリ4020へのサブルーチン分岐時には、内蔵揮発性メモリ空間4030で実行する命令であるが、命令読み出しを行うオペコードフェッチのため、内蔵不揮発性メモリ4020に格納された、サブルーチン分岐先のアドレスに該当する命令コードを読み出すことが可能となる。さらに内蔵不揮発性メモリ4020にサブルーチン分岐した後は、内蔵不揮発性メモリ4030に格納されたプログラムを実行することになるため、代替プログラム中で内蔵不揮発性メモリ4020へのサブルーチン分岐が可能となる。
(実施の形態6)
図6は本発明の(実施の形態6)のマイクロコンピュータを示し、図1と比べた場合には全体的なレイアウトは同じであるが、図6では、図1におけるCPU110に相当するCPU5010は、データ変換手段180に相当するデータ変換手段5080を介して読み出したデータがサブルーチン復帰命令であるか否かを解読する解読手段5110を備えている。なお、図6では、図1と同一名称であっても異なる符号を付しているが、特に説明しない場合には、同一の動作をする。
マイクロコンピュータ5000は、CPU5010と内部不揮発性メモリ5020と内部揮発性メモリ5030と訂正アドレスレジスタ5040と訂正データレジスタ5050と比較手段5060と比較結果記憶手段5070およびデータ変換手段5080とによって構成されている。また、前記CPU5010は、内部に解読手段5110を備えている。5090はマイクロコンピュータ5000の外部に接続される外部メモリである。
アドレスバスB5001は、CPU5010と内蔵不揮発性メモリ5020と内蔵揮発性メモリ5030と比較手段5060と外部メモリ5090とを各々接続する。データバスB5002は、CPU5010と内蔵揮発性メモリ5030と訂正アドレスレジスタ5040と訂正データレジスタ5050とデータ変換手段5080と外部メモリ5090とを各々接続する。
CPU5010から出力された訂正アドレス書込み信号S5007は、訂正アドレスレジスタ5040に入力されている。訂正アドレスレジスタ5040から出力された訂正アドレス信号S5003は、比較手段5060のもう一方に入力されている。
CPU5010から出力された訂正データ書込み信号S5008は、訂正データレジスタ5050に入力されている。訂正データレジスタ5050から出力された訂正データ信号S5004は、データ変換手段5080に入力されている。
比較手段5060の出力の一致信号S5005は、比較結果記憶手段5070とデータ変換手段3080に入力されている。
解読手段5110から出力されたサブルーチン復帰信号5009は、比較結果記憶手段5070に入力されている。比較結果記憶手段5070の出力の一致状態保持信号S5006は、データ変換手段5080に入力されている。
内蔵不揮発性メモリ5020とデータ変換手段5080とは、ROMバスB5011で接続されている。
CPU5010の出力するリード信号S5012は、内蔵不揮発性メモリ5020と、内蔵揮発性メモリ5030と、外部メモリ5090に入力されている。CPU5010の出力するライト信号S5013は、内蔵揮発性メモリ5030に入力されている。
比較結果記憶手段5070は、一致信号S5005の値が‘1’であれば、‘1’の値を格納保持し、サブルーチン復帰信号S5009の値が‘1’であれば、‘0’の値を格納保持し、保持した値を一致状態保持信号S5006に出力する。また、比較結果記憶手段3070の初期値は‘0’とする。
解読手段5110は、CPU5010がデータバスB5002から読み込んだ命令コードを解読し、命令コードがサブルーチン復帰命令か否かを判定し、サブルーチン復帰命令の場合には‘1’を、それ以外の場合には‘0’をサブルーチン復帰信号S5009に出力する。
次に、内蔵不揮発性メモリ5020に格納されたプログラムおよびデータを訂正しつつ、読み出し保護を行うマイクロコンピュータ5000の動作に基づいて説明する。なお、プログラムスタート時および、以下に示すプログラム(A)(B)(C)を初期化プログラムとして実行する動作については、(実施の形態1)と同一である。
プログラム(A)は、外部メモリ5090から、内蔵不揮発性メモリ5020に格納された訂正するべきプログラム(以下、被訂正プログラムという)の先頭アドレス値を読み出し、訂正アドレスレジスタ5040に設定する。
プログラム(B)は、外部メモリ5090から、被訂正プログラムの先頭アドレスに該当する命令コードを置換する命令コードを読み出し、訂正データレジスタに設定する。通常、置換する命令コードは、後述する、内蔵揮発性メモリ5030に外部メモリ5090から転送する代替プログラムルーチンの先頭にサブルーチン分岐する命令である。
プログラム(C)は、外部メモリ5090から、被訂正プログラムを代替するプログラム(以下、代替プログラムという)を内蔵揮発性メモリ5030に転送する。
以上の(A)(B)(C)の初期化プログラムでプログラム訂正の準備が完了した状態で、CPU5010が被訂正プログラムの先頭アドレスを実行しようとしたときの動作についても、(実施の形態1)と同一である。
この実施の形態では、代替プログラムを実行した後にデータの無効化を解除する方法が、(実施の形態1)と異なるため、以下にデータの無効化を解除するときの動作を説明する。
代替プログラムの実行は、通常、被訂正プログラムの先頭アドレスの命令コードを代替プログラムの先頭アドレスにサブルーチン分岐することで実現する。そこで、代替プログラムの完了時にはサブルーチン復帰する命令を実行するものとする。またサブルーチン復帰命令で復帰するアドレスは、内蔵不揮発性メモリ5020に該当するアドレスであるものとする。
CPU5010は、データバスB5002から内蔵揮発性メモリ5030に格納されているサブルーチン復帰する命令コードを読み出す。解読手段5110は、CPU5010がデータバスB5002から読み込んだ命令コードを解読し、命令コードがサブルーチン復帰命令であるため、‘1’をサブルーチン復帰信号S5009に出力する。比較結果記憶手段5070は、サブルーチン復帰信号S5009の値が‘1’であるため、‘0’の値を格納保持し、保持した値‘0’を一致状態保持信号S5006に出力する。
次にCPU5010は、サブルーチン復帰命令を実行し、アドレスバスB5001に復帰先である内蔵不揮発性メモリ5020の該当するアドレスを出力すると共に、リード信号S5012に‘1’を出力する。内蔵不揮発性メモリ5020は、リード信号の値が‘1’であるため、アドレスバスB5001のアドレスに該当するデータをROMバスB5011に出力する。比較手段5060はアドレスバスB5001の値と、訂正アドレス信号S5003の値が異なるため、一致信号S5005に ‘0’を出力する。比較結果記憶手段は、一致信号S5005の値が‘0’であるため、一致状態保持信号に引き続き‘0’を出力する。データ変換手段5080は、一致信号S5005の値が‘0’で、かつ一致状態保持信号S5006の値が’0‘であるため、ROMバスB5011のデータをデータバスB5002に載せ換えて出力する。
このように、サブルーチン復帰命令で代替プログラムを完了すると、解読手段5110がサブルーチン復帰信号S5009に‘1’を出力し、比較結果記憶手段5070の値を‘0’にリセットするため、再び内蔵不揮発性メモリ5020から、データを読み出すことが可能となる。
また、データの読み出し保護を解除するための命令を実行する必要がないため、セキュリティを解除する手間を省くことができる。
(実施の形態7)
図7は本発明の(実施の形態7)のマイクロコンピュータを示し、図1と比べた場合には全体的なレイアウトは同じであるが、図7では、図1におけるCPU110に相当するCPU6010は、アクセスがオペランドフェッチであるか否かを判定するフェッチ判定手段6130を備えている。また、図1における訂正アドレスレジスタ140に相当する訂正アドレスレジスタ6040とは別に、復帰アドレス記憶手段としての復帰アドレスレジスタ6120が設けられている。また、図1における比較手段160に相当する比較手段6060とは別に、第2の比較手段としての比較手段6100が設けられている。2入力1出力アンドゲート6110も追加されている。なお、図7では、図1と同一名称であっても異なる符号を付しているが、特に説明しない場合には、同一の動作をする。
マイクロコンピュータ6000は、CPU6010と内部不揮発性メモリ6020と内部揮発性メモリ6030と訂正アドレスレジスタ6040と訂正データレジスタ6050と第1の比較手段としての比較手段6060と比較結果記憶手段6070とデータ変換手段6080と第2の比較手段としての比較手段6100と2入力1出力のアンドゲート6110と復帰アドレス記憶手段としての復帰アドレスレジスタ6120によって構成されている。6090は前記マイクロコンピュータ5000の外部に接続される外部メモリである。
アドレスバスB6001は、CPU6010と内蔵不揮発性メモリ6020と内蔵揮発性メモリ6030と比較手段6060,6120と外部メモリ6090とを各々接続する。データバスB6002は、CPU6010と内蔵揮発性メモリ6030と訂正アドレスレジスタ6040と訂正データレジスタ6050とデータ変換手段6080と復帰アドレスレジスタ6120と外部メモリ6090とを各々接続する。
CPU6010が出力する訂正アドレス書込み信号S6007は、訂正アドレスレジスタ6040に入力されている。訂正アドレスレジスタ6040の出力の訂正アドレス信号S6003は、比較手段6060のもう一方の入力に入力されている。比較手段6060の出力の一致信号S6005は、比較結果記憶手段6070とデータ変換手段6080に入力されている。CPU6010が出力する訂正データ書込み信号S6008は、訂正データレジスタ6050に入力されている。訂正データレジスタ6050の出力の訂正データ信号S6004は、データ変換手段6080に入力されている。
CPU6010の出力の復帰アドレス書込み信号6009は、復帰アドレスレジスタ6120に入力されている。復帰アドレスレジスタ6120の出力の復帰アドレス信号S6014は、比較手段6100のもう一方の入力に入力されている。比較手段6100の出力の復帰アドレス一致信号S6015は、2入力1出力アンドゲート6110の一方の入力に入力されている。2入力1出力アンドゲート6110の他方の入力には、フェッチ判定手段6130の出力のオペコードフェッチ信号S6016が入力されている。2入力1出力アンドゲート6110の出力のリセット信号S6017は、比較結果記憶手段6070に入力されている。比較結果記憶手段6070の出力の一致状態保持信号S6006は、データ変換手段6080に入力されている。
内蔵不揮発性メモリ6020とデータ変換手段6080とは、ROMバスB6011で接続されている。
CPU6010の出力したリード信号S6012は、内蔵不揮発性メモリ6020と内蔵揮発性メモリ6030と外部メモリ6090とを各々接続する。CPU6010の出力したライト信号S6013は、内蔵揮発性メモリ6030に入力されている。
比較手段6040は、アドレスバスB6001のアドレスと訂正アドレス信号S6003の値とを比較し、一致した場合には‘1’を、一致しない場合には‘0’を一致信号S6005に出力する。
復帰アドレスレジスタ6120は、復帰アドレス書込み信号S6009が‘1’であれば、データバスB6002のデータを格納保持し、保持したデータを復帰アドレス信号S6014として出力する。また、復帰アドレスレジスタ6120の初期値は、内蔵不揮発性メモリ6020に該当しないアドレスの値とする。
比較手段6100は、アドレスバスB6001のアドレスと復帰アドレス信号S6014の値とを比較し、一致した場合には‘1’を、一致しない場合には‘0’を復帰アドレス一致信号S6015に出力する。
アンドゲート6110は、復帰アドレス一致信号S6015の値と、オペコードフェッチ信号S6016の値との論理積を、リセット信号S6107に出力する。
CPU6010は、アドレスバスB6001に内蔵揮発性メモリ6020に該当するアドレスを出力すると共に、リード信号S6012に‘1’を出力し、順次、内蔵不揮発性メモリ6020に格納されているプログラムを、ROMバスB6011、データ変換手段6080を介してデータバスB6002から読み出し、解読した結果に従い各種制御を行う。また、内蔵不揮発性メモリ6020から読み出したプログラムが、内蔵揮発性メモリ6030又は外部メモリ6090への分岐命令である場合には、アドレスバスB6001に内蔵揮発性メモリ6030又は外部メモリ6090の該当するアドレスを出力すると共に、リード信号S6012に‘1’を出力し、内蔵揮発性メモリ6030又は外部メモリ6090に格納されているプログラムを、データバスB6002から読み出し、解読した結果に従い各種制御を行う。
また、CPU6010は、ライト信号S6013に‘1’、アドレスバスB6001に内蔵揮発性メモリ6030に該当するアドレスを各々出力すると共に、データバスB6002にデータを出力し、内蔵揮発性メモリ6030に任意の値を書き込むことができる。また、CPU6010は、データバスB6002にデータを出力すると共に訂正アドレス書込み信号S6007に‘1’を出力し、訂正アドレスレジスタ6040を任意の値に書き換えることができる。同様にCPU6010は、データバスB6002にデータを出力すると共に訂正データ書込み信号S6008に‘1’を出力し、訂正データレジスタ6050を任意の値に書き換えることができる。同様にCPU6010は、データバスB6002にデータを出力すると共に復帰アドレス書込み信号S6009に‘1’を出力し、復帰アドレスレジスタ6120を任意の値に書き換えることができる。
次に、内蔵不揮発性メモリ6020に格納されたプログラムおよびデータを訂正しつつ、読み出し保護を行うマイクロコンピュータの動作に基づいて説明する。
先ず、プログラムスタート時のCPU6010は、アドレスバスB6001に内蔵不揮発性メモリ6020に該当するアドレスを出力すると共に、リード信号S6012に‘1’を出力し、内蔵不揮発性メモリ6020に格納されているプログラムを読み出そうとする。
この時、訂正アドレスレジスタ6040は、初期値として格納している内蔵不揮発性メモリ6020に該当しないアドレスを訂正アドレス信号S6003に出力する。第1の比較手段6050は、アドレスバスB6001に出力されている内蔵不揮発性メモリ6020に該当するアドレスと、訂正アドレス信号6003に出力されている内蔵不揮発性メモリ6020に該当しないアドレスとを比較し、一致しないため一致信号S6005に‘0’を出力する。復帰アドレスレジスタ6120は、初期値として格納している内蔵不揮発性メモリ6020に該当しないアドレスを復帰アドレス信号に出力する。比較手段6100は、アドレスバスB6001に出力されている内蔵不揮発性メモリ6020に該当するアドレスと、復帰アドレス信号6014に出力されている内蔵不揮発性メモリ6020に該当しないアドレスとを比較し、一致しないため復帰アドレス一致信号S6015に‘0’を出力する。比較結果記憶手段6070は、一致信号S6015の値が‘0’のため、一致状態保持信号S6006に‘0’を出力し続ける。
フェッチ判定手段6130は、CPU6010が行っているアクセスが命令コードを読み出すオペコードフェッチのため、オペコードフェッチ信号S6016に‘1’を出力する。アンドゲート6110は、オペコードフェッチ信号S6016の値‘1’と復帰アドレス一致信号の値‘0’との論理積‘0’をリセット信号に出力する。
比較結果記憶手段6070は、一致信号S6005の値が‘0’で、かつリセット信号S6015の値が‘0’のため、一致状態保持信号S6006に初期値‘0’を出力し続ける。データ変換手段6080は、一致信号S6005が‘0’で、かつ一致状態保持信号S6006が‘0’のため、内蔵不揮発性メモリ6020からROMバスB6011に出力された読み出しデータを、データバスB6002に乗せ換えて出力する。
このように、CPU6010は順次、内蔵不揮発性メモリ6020の該当アドレスに格納されているプログラムを、ROMバスB6011およびデータ変換手段6080を介してデータバスB6002から読み出し、解読した結果に従い各種制御を行う。
次に、CPU6010は、内蔵不揮発性メモリ6020が格納するプログラムの任意のアドレスから始まるプログラムを訂正するため、以下に示すプログラム(A)(B)(C)(D)を初期化プログラムとして実行する。
プログラム(A)は、外部メモリ6090から、内蔵不揮発性メモリ6020に格納された訂正するべきプログラム(以下、被訂正プログラムという)の先頭アドレス値を読み出し、訂正アドレスレジスタ6040に設定する。
プログラム(B)は、外部メモリ6090から、被訂正プログラムの先頭アドレスに該当する命令コードを置換する命令コードを読み出し、訂正データ設定レジスタに設定する。通常、置換する命令コードは、後述する、内蔵揮発性メモリ6030に外部メモリ6090から転送する代替プログラムルーチンの先頭にサブルーチン分岐する命令である。
プログラム(C)は、外部メモリ6090から、後述する代替プログラムを実行した後に、内蔵不揮発性メモリ6020へとサブルーチン復帰する復帰先のアドレス値(以下、復帰アドレスという)を読み出し、復帰アドレスレジスタに設定する。
プログラム(D)は、外部メモリ6090から、被訂正プログラムを代替するプログラム(以下、代替プログラムという)を内蔵揮発性メモリ6030に転送する。
先ず、CPU6010がプログラム(A)を読み出すと、CPU6010はアドレスバスB6001に、外部メモリ6090に該当するアドレスを出力すると共に、リード信号S6012に‘1’を出力し、外部メモリ6090に予め格納された、被訂正プログラムの先頭アドレス値を読み出す。更にCPU6010は、設定アドレス書込み信号S6007に‘1’を出力するとともに、データバスB6001に先ほど読み出した、被訂正プログラムの先頭アドレスを出力し、訂正アドレスレジスタ6040に設定する。
次に、CPU6010がプログラム(B)を読み出すと、CPU6010はアドレスバスB6001に、外部メモリ6090に該当するアドレスを出力すると共に、リード信号S6012に‘1’を出力し、外部メモリ6090に予め格納された、被訂正プログラムの先頭アドレスに該当する命令コードを置換する命令コードを読み出す。更にCPU6010は、設定データ書込み信号S6008に‘1’を出力するとともに、データバスB6001に先ほど読み出した、被訂正プログラムの先頭アドレスに格納されている命令コードを置換する命令コードを出力し、訂正データレジスタ6050に設定する。この時、置換する命令コードは、内蔵揮発性メモリ6030に外部メモリ6090から転送する後述の代替プログラムルーチンの先頭にサブルーチン分岐する命令であるとする。
次に、CPU6010がプログラム(C)を読み出すと、CPU6010はアドレスバスB6001に、外部メモリ6090に該当するアドレスを出力すると共に、リード信号S6012に‘1’を出力し、外部メモリ6090に予め格納された、復帰アドレス値を読み出す。更にCPU6010は、復帰アドレス書込み信号S6009に‘1’を出力するとともに、データバスB6001に先ほど読み出した復帰アドレスを出力し、復帰アドレスレジスタ6120に設定する。
次に、CPU6010がプログラム(D)を読み出すと、CPU6010はアドレスバスB6001に、外部メモリ6090に該当するアドレスを出力すると共に、リード信号S6012に‘1’を出力し、外部メモリ6090に予め格納された、代替プログラムを順次読み出す。更にCPU6010はライト信号S6013に‘1’を、アドレスバスB6001に内蔵揮発性メモリ6030に該当するアドレスを各々出力するとともに、データバスB6002に先ほど読み出した代替プログラムを出力し、内蔵揮発性メモリ6030に書き込む。
プログラム(D)を繰り返すことで、外部メモリ6090から代替プログラムを内蔵揮発性メモリ6030に順次転送する。
以上の(A)(B)(C)(D)の初期化プログラムでプログラム訂正の準備が完了した状態で、CPU6010が被訂正プログラムの先頭アドレスを実行しようとしたときの動作を説明する。
CPU6010は、アドレスバスB6001に被訂正プログラムの先頭アドレスを出力すると共に、リード信号S6012に‘1’を出力する。比較手段6060はアドレスバスB6001の値と、訂正アドレス信号S6003の値がともに被訂正プログラムの先頭アドレスのため、一致信号S6005にアドレスバスB6001のアドレスと訂正アドレス信号S6003の値とが一致したことを示す‘1’を出力する。比較結果記憶手段6070は、一致信号S6005の値‘1’を受けて‘1’の値を格納保持し、一致状態保持信号S6006に‘1’を出力する。
データ変換手段6080は、一致信号S6005が‘1’であるため、訂正データ信号S6004の値をデータバスB6002に出力する。
次にCPU6010はデータバスB6002に出力された訂正データ信号の値が、予め内蔵揮発性メモリ6030に外部メモリ6090から転送された代替プログラムの先頭にサブルーチン分岐する命令であるため、プログラムの読み出し先を内蔵揮発性メモリ6030の該当アドレスへと変更し、アドレスバスB6001に該当アドレスを出力すると共に、リード信号S6012に‘1’を出力し、内蔵揮発性メモリ6030の該当アドレスに格納されている代替プログラムをデータバスB6002から順次読み出し、代替プログラム実行する。
更に、代替プログラムの実行を終えるときには、CPU6010は、内蔵揮発性メモリ6030の該当アドレスに格納されている代替プログラムの末尾で内蔵不揮発性メモリ6020にサブルーチン復帰する命令をデータバスB6002から読み出す。CPU6010は、前記命令を解読しアドレスバスB6001を内蔵不揮発性4030の復帰アドレスに切り替えて出力すると共に、リード信号S6012に‘1’を出力する。フェッチ判定手段6130は、内蔵不揮発性メモリ6030へのアクセスが命令コードを読み出すオペコードフェッチであるため、オペコードフェッチ信号S6016に‘1’を出力する。比較手段6060は、アドレスバスB6001に出力されている復帰アドレスと、訂正アドレス信号に出力されている訂正アドレスとを比較し、一致しないことを示す‘0’の値を一致信号S6005に出力する。比較手段6120は、アドレスバスB6001に出力されているアドレスと、復帰アドレス信号S6014に出力されているアドレスが共に復帰アドレスであるため、復帰アドレス一致信号に‘1’を出力する。アンドゲート6110は、オペコードフェッチ信号S6016の値‘1’と復帰アドレス一致信号S6015の値‘1’との論理積‘1’をリセット信号S6007に出力する。比較結果記憶手段6070は、一致信号S6005の値が‘0’、リセット信号の値‘1’を受けて、‘0’の値を格納保持し、一致状態保持信号S6006に‘0’を出力する。データ変換手段6080は、一致信号S6005が‘0’で、かつ一致状態保持信号S6006が‘0’のため、内蔵不揮発性メモリ6020からROMバスB6011に出力された読み出しデータを、データバスB6002に乗せ換えて出力する。このようにして、再び内蔵不揮発性メモリ6020からプログラムおよびデータを読み出すことが可能となる。
ここで、不正ユーザが外部メモリ6090に格納されたプログラムを改変し、代替プログラムを、復帰アドレスからデータを読み出すアクセスを行う記述にして、比較結果記憶手段6070の値をリセットしようとしたとする。
CPU6010が内蔵揮発性メモリ6030から、改変された代替プログラムを読み出すと、CPU6010は、アドレスバスB6001に、内蔵不揮発性メモリ6020に該当する復帰アドレスを出力すると共に、リード信号S6012に‘1’を出力する。フェッチ判定手段6130は、復帰アドレスへのアクセスがデータを読み出すオペランドフェッチのため、オペコードフェッチ信号に‘0’を出力する。比較手段6060はアドレスバスB6001の値と、訂正アドレス信号S6003の値が異なるため一致信号S6005に‘0’を出力する。比較手段6120は、アドレスバスB6001に出力されているアドレスと、復帰アドレス信号S6014に出力されているアドレスが共に復帰アドレスであるため、復帰アドレス一致信号に‘1’を出力する。アンドゲート6110は、オペコードフェッチ信号S6016の値‘0’と復帰アドレス一致信号S6015の値‘1’との論理積‘0’をリセット信号S6007に出力する。比較結果記憶手段6070は、一致信号S6005の値が‘0’、リセット信号の値‘0’を受けて、一致状態保持信号S6006に‘1’を出力し続ける。データ変換手段6080は、一致信号S6005が‘0’で、かつ一致状態保持信号S6006が‘1’のため、内蔵不揮発性メモリ6020からROMバスB6011に出力された読み出しデータを、無効化して何も出力しない。
このようにして、代替プログラムを復帰アドレスからデータを読み出すアクセスを行う記述にして、比較結果記憶手段6070の値をリセットしようとしても、データを読み出すアクセスでは、フェッチ判定手段6130がオペコード信号S6016に‘0’を出力し、アンドゲート6110は、オペコード信号S6016の値‘0’を受けてリセット信号S6017に‘0’を出力するため、比較結果記憶手段6070の値はリセットされず、データ変換手段6080は、一致信号S6005が‘0’で、かつ一致状態保持信号S6006が‘1’であるため、内蔵不揮発性メモリ6020からROMバスB6011に出力されたプログラムおよびデータを、データバスB6002に出力しない。これにより、内蔵不揮発性メモリ6020の保護エリアに格納されたプログラムおよびデータは、データバスB6002等から、マイクロコンピュータ6000の外部へ出力されることはない。
また、不正ユーザが外部メモリ6090に格納されたプログラムを改変し、代替プログラムを、復帰アドレスへの分岐命令として、命令を読み出すアクセスを行う記述にしても、プログラムの読み出し先自体が内蔵不揮発性メモリ6020へと移行してしまい、内蔵揮発性メモリ6030に格納した、代替プログラムから内蔵不揮発性メモリ6020の値を読み出すことはできない。
このようにマイクロコンピュータ6000を、内蔵不揮発性メモリ6020と、内蔵揮発性メモリ6030と、訂正アドレスレジスタ6040と、訂正データレジスタ6050と、比較手段6060と、比較結果記憶手段6070と、データ変換手段6080と、比較手段6100と、アンドゲート6110とで構成することで、内蔵不揮発性メモリ6020のプログラムを訂正しつつ、不正ユーザが外部メモリ6090を改変し、内蔵不揮発性メモリ6020に格納されたプログラムおよびデータを読み出そうと試みても、代替プログラムの実行中には、内蔵不揮発性メモリ6020に格納されたデータは読み出すことができずセキュリティが向上する。
また、セキュリティの解除は、内蔵揮発性メモリ6030に格納されている代替プログラムの末尾で、内蔵不揮発性メモリ6020に格納されているプログラムへ分岐命令などを使って復帰すればよく、安全にセキュリティの解除を行うことが可能となる。
なお、データ変換手段6080は、データ無効化の方法として、内蔵不揮発性メモリ6020から読み出したプログラムおよびデータをデータバスB6002に何も出力しないとしたが、他に、リード信号S6012に‘1’を出力しない、アドレスバスB6001に該当アドレスを与えない、データバスB6002に任意のデータを出力するなどといった、該当するアドレスに格納されたプログラムおよびデータが読み出されない構成であれば良い。
(実施の形態8)
図8は本発明の(実施の形態8)のマイクロコンピュータを示し、図1と比べた場合には全体的なレイアウトは同じであるが、図8では、ダイレクトメモリアクセスコントローラ7100(以下、DMAC7100という)と、アンドゲート7110と、インバータ7120が追加されている。なお、図8では、図1と同一名称であっても異なる符号を付しているが、特に説明しない場合には、同一の動作をする。
マイクロコンピュータ7000は、CPU7010と、内蔵不揮発性メモリ7020と、内蔵揮発性メモリ7030と、訂正アドレスレジスタ7040と、訂正データレジスタ7050と、比較手段7060と、比較結果記憶手段7070と、データ変換手段7080と、DMAC7100と、アンドゲート7110と、インバータ7120とによって構成されている。前記DMAC7100は、内部に読み出しアドレス記憶手段としてのソースレジスタ7130を備えている。また、7090は前記マイクロコンピュータ7000の外部に接続される外部メモリである。
アドレスバスB7001は、CPU7010と内蔵不揮発性メモリ7020と内蔵揮発性メモリ7030と比較手段7060と外部メモリ7090とDMAC7100とを各々接続する。データバスB7002は、CPU7010と内蔵揮発性メモリ7030と訂正アドレスレジスタ7040と訂正データレジスタ7050とデータ変換手段7080と外部メモリ7090とDMAC7100とを各々接続する。
CPU7010が出力する訂正アドレス書込み信号S7007は、訂正アドレスレジスタ7040に入力されている。 訂正アドレスレジスタ7040の出力の訂正アドレス信号S7003は、比較手段7060のもう一方の入力に入力されている。
CPU7010が出力する訂正データ書込み信号S7008は、訂正データレジスタ7050に入力されている。訂正データレジスタ7050の出力の訂正データ信号S7004は、データ変換手段7080に入力されている。
比較手段7060の出力する一致信号S7005は、比較結果記憶手段7070とデータ変換手段7080に入力されている。CPU7010が出力するセット信号S7009は、比較結果記憶手段7070に入力されている。比較結果記憶手段7070の出力の一致状態保持信号S7006は、データ変換手段7080と、インバータ7120の入力に入力されている。
内蔵不揮発性メモリ7020とデータ変換手段7080は、ROMバスB7011で接続されている。CPU7010が出力するリード信号S7012は、内蔵不揮発性メモリ7020と、内蔵揮発性メモリ7030と、外部メモリ7090と、DMAC7100とを各々接続する。CPU7010が出力するライト信号S7013は、内蔵揮発性メモリ7030と、DMAC7100とを接続する。
インバータ7120は、一致状態保持信号S7006の値を反転して反転一致状態保持信号S7016としてアンドゲート7110の一方の入力に入力する。アンドゲート7110の他方の入力には、CPU7010が出力する原ソースアドレス書込み信号S7014が入力されており、アンドゲート7110の出力のソースアドレス書込み信号S7015は、ソースレジスタ7130に入力されている。起動信号S7017は、マイクロコンピュータ7000の外部からDMAC7100に入力される。DMAC7100は、起動信号S7017が‘1’ならば、アクティブ信号S7113に‘1’を出力する。このアクティブ信号S7113は、CPU7010に入力されている。
DMAC7100は、ソースアドレス書込み信号S7015が‘1’であれば、データバスB7002のデータを ソースレジスタ7130に格納保持し、起動信号S7017が‘1’になれば、ソースレジスタ7130に格納されたアドレスに該当するメモリ領域から、任意のメモリ領域へ、CPU7010を介さずにプログラムおよびデータを転送する。次にDMAC7100は、ソースレジスタ7130に格納されたアドレスをアドレスバスB7001に出力すると共に、リード信号7012に‘1’を出力し、該当アドレスに格納されたプログラムおよびデータをデータバスB7001から読み出す。
続いて、DMAC7100は、読み出したデータおよびプログラムをデータバスB7002に出力し、アドレスバスB7001に任意のアドレスを出力すると共に、ライト信号S7013に‘1’を出力し、該当アドレスにデータを書き込む。書込みが完了するとアクティブ信号に‘0’を出力する。
アンドゲート7110は、反転一致状態保持信号S7016の値と、原ソースアドレス書込み信号S7014の値との論理積をソースアドレス書込み信号S7015に出力する。すなわち、反転一致状態保持信号S7016が‘0’のときに、ソースアドレス書込み信号S7015に‘0’を出力し、原ソースアドレス書込み信号S7014の値を無効化する。
CPU7010は、アドレスバスB7001に内蔵揮発性メモリ7020に該当するアドレスを出力すると共に、リード信号S7012に‘1’を出力し、順次、内蔵不揮発性メモリ7020に格納されているプログラムを、ROMバスB7011、データ変換手段7080を介してデータバスB7002から読み出し、解読した結果に従い各種制御を行う。また、内蔵不揮発性メモリ7020から読み出したプログラムが、内蔵揮発性メモリ7030又は外部メモリ7080への分岐命令である場合には、アドレスバスB7001に内蔵揮発性メモリ7030又は外部メモリ7080の該当するアドレスを出力すると共に、リード信号S7012に‘1’を出力し、内蔵揮発性メモリ7030又は外部メモリ7080に格納されているプログラムを、データバスB7002から読み出し、解読した結果に従い各種制御を行う。
また、CPU7010は、ライト信号S7013に‘1’、アドレスバスB7001に内蔵揮発性メモリ7030に該当するアドレスを各々出力すると共に、データバスB7002にデータを出力し、内蔵揮発性メモリ7030に任意の値を書き込むことができる。また、CPU7010は、データバスB7002にデータを出力すると共に訂正アドレス書込み信号S7007に‘1’を出力し、訂正アドレスレジスタ7040を任意の値に書き換えることができる。同様にCPU7010は、データバスB7002にデータを出力すると共に訂正データ書込み信号S7008に‘1’を出力し、訂正データレジスタ7050を任意の値に書き換えることができる。更にCPU7010は、リセット信号S7009に‘1’を出力し、比較結果記憶手段7070の値を‘0’にリセットすることができる。加えて、CPU7010は、データバスB7002にデータを出力すると共に原ソースアドレス書込み信号S7014に‘1’を出力し、アンドゲート7110を介して、ソースアドレスレジスタ7120を任意の値に書き換えることができる。また、CPU7010は、アクティブ信号S7113が‘1’のときには各種制御を停止する。
次に、内蔵不揮発性メモリ7020に格納されたプログラムおよびデータを訂正しつつ、読み出し保護を行うマイクロコンピュータ7000の動作を説明する。なお、プログラムスタート時および以下に示すプログラム(A)(B)(C)を初期化プログラムとして実行する動作については、(実施の形態1)と同一である。
プログラム(A)は、外部メモリ7090から内蔵不揮発性メモリ7020に格納された訂正するべきプログラム(以下、被訂正プログラムという)の先頭アドレス値を読み出し、訂正アドレスレジスタ7040に設定する。
プログラム(B)は、外部メモリ7090から被訂正プログラムの先頭アドレスに該当する命令コードを置換する命令コードを読み出し、訂正データ設定レジスタに設定する。置換する命令コードは、後述する、内蔵揮発性メモリ7030に外部メモリ7090から転送する代替プログラムルーチンの先頭にサブルーチン分岐する命令であるものとする。
プログラム(C)は、外部メモリ7090から被訂正プログラムを代替するプログラム(以下、代替プログラムという)を内蔵揮発性メモリ7030に転送する。
以上のように、(A)(B)(C)の初期化プログラムでプログラム訂正の準備が完了した状態で、CPU7010が被訂正プログラムの先頭アドレスを実行しようとしたときの動作を説明する。
CPU7010は、アドレスバスB7001に被訂正プログラムの先頭アドレスを出力すると共に、リード信号S7012に‘1’を出力する。比較手段7060はアドレスバスB7001の値と、訂正アドレス信号S7003の値がともに被訂正プログラムの先頭アドレスのため、一致信号S7005にアドレスバスB7001のアドレスと訂正アドレス信号S7003の値とが一致したことを示す‘1’を出力する。比較結果記憶手段7070は、一致信号S7005の値‘1’を受けて‘1’の値を格納保持し、一致状態保持信号S7006に‘1’を出力する。
データ変換手段7080は、一致信号S7005が‘1’であるため、訂正データ信号S7004の値をデータバスB7002に出力する。
次にCPU7010は、データバスB7002に出力された訂正データ信号の値が、予め内蔵揮発性メモリ7030に外部メモリ7090から転送された代替プログラムの先頭にサブルーチン分岐する命令であるため、プログラムの読み出し先を内蔵揮発性メモリ7030の該当アドレスへと変更し、アドレスバスB7001に該当アドレスを出力すると共に、リード信号S7012に‘1’を出力し、内蔵揮発性メモリ7030の該当アドレスに格納されている代替プログラムをデータバスB8002から順次読み出し、代替プログラム実行する。
ここで、不正ユーザが外部メモリ7090に格納されたプログラムを改変し、代替プログラムを、ソースアドレスレジスタ7130に内蔵不揮発性メモリ7020に該当するアドレスを設定し、代替プログラムの実行を完了した状態で、起動信号S7017を‘1’にすることで、DAMC7100のデータ転送機能を利用してデータおよびプログラムを読み出す記述にしたとする。
CPU7010が内蔵揮発性メモリ7030から、改変された代替プログラムを読み出すと、CPU7010は、原ソースレジスタ書込み信号に‘1’を出力するとともに、データバスB7002に内蔵不揮発性メモリ7020に該当するアドレスを出力して、ソースレジスタ7130に内蔵不揮発性メモリ7020に該当するアドレスを設定しようとする。このとき、比較結果記憶手段7070は、一致状態保持信号S7006に‘1’を出力し続けている。
インバータ7120は、一致状態保持信号S7006の値‘1’を反転した‘0’を反転一致信号S7016に出力する。アンドゲート7110は、反転一致信号S7016の値が‘0’のため、原ソースアドレス書込み信号S7014の値‘1’を無効化して、ソースアドレス信号S7015に‘0’を出力する。
ソースアドレスレジスタ7130は、ソースアドレス書込み信号S7015が‘0’のため、データバスB7002に出力されている、内蔵不揮発性メモリ7020に該当するアドレスを格納することができない。これにより、DMAC7100の転送機能を用いて内蔵不揮発性メモリ7020に格納されたプログラムおよびデータを読み出されることはない。
このように、マイクロコンピュータ7000を、内蔵不揮発性メモリ7020と、内蔵揮発性メモリ7030と、訂正アドレスレジスタ7040と、訂正データレジスタ7050と、比較手段7060と、比較結果記憶手段7070と、データ変換手段7080と、DMAC7100と、アンドゲート7110と、インバータ7120とで構成することで、内蔵不揮発性メモリ7020のプログラムを訂正しつつ、不正ユーザが外部メモリ7090を改変し、DMAC7100の転送機能を用いて内蔵不揮発性メモリ7020に格納されたプログラムおよびデータを読み出そうと試みても、代替プログラムの実行中には、ソースアドレスレジスタ7130に読み出しアドレスを設定することができないため、内蔵不揮発性メモリ7020に格納されたデータは読み出すことができずセキュリティが向上する。
(実施の形態9)
図9は本発明の(実施の形態9)のマイクロコンピュータを示し、図1と比べた場合には全体的なレイアウトは同じであるが、図9では、ダイレクトメモリアクセスコントローラ8100(以下、DMAC8100という)と、アンドゲート8110と、インバータ8120と、2入力1出力オアゲート8130が追加されている。なお、図8では、図1と同一名称であっても異なる符号を付しているが、特に説明しない場合には、同一の動作をする。
DMAC8100には、アクセスしたいアドレスを記憶する読み出しアドレス記憶手段としてのソースレジスタ8140と、ソースレジスタ8140の書き換え時に、比較結果記憶手段8070が記憶する比較結果を記憶する書き換え条件記憶手段としてのソースレジスタ設定条件記憶手段8150を備えている。
マイクロコンピュータ8000は、CPU8010と、内蔵不揮発性メモリ8020と、内蔵揮発性メモリ8030と、訂正アドレス記憶手段としての訂正アドレスレジスタ8040と、訂正データ記憶手段としての訂正データレジスタ8050と、比較手段8060と、比較結果記憶手段8070と、データ変換手段8080と、DMAC8100と、2入力1出力アンドゲート8110と、2入力1出力アンドゲート8120と、2入力1出力オアゲート8130とによって構成されている。また、8090はマイクロコンピュータ8000の外部に接続される外部メモリである。
アドレスバスB8001は、CPU8010と、内蔵不揮発性メモリ8020と、内蔵揮発性メモリ8030と、比較手段8060と、外部メモリ8090と、DMAC8100とを各々接続する。データバスB8002は、CPU8010と、内蔵揮発性メモリ8030と、訂正アドレスレジスタ8040と、訂正データレジスタ8050と、データ変換手段8080と、外部メモリ8090と、DMAC8100とを各々接続する。
CPU8010が出力する訂正アドレス書込み信号S8007は、訂正アドレスレジスタ8040に入力されている。
訂正アドレスレジスタ8040が出力する訂正アドレス信号S8003は、比較手段8060のもう一方の入力に入力されている。比較手段8060が出力する一致信号S8005は、比較結果記憶手段8070とデータ変換手段8080に入力されている。
CPU8010の出力する訂正データ書込み信号S8008は、訂正データレジスタ8050に入力されている。訂正データレジスタ8050の出力する訂正データ信号S8004は、データ変換手段8080に入力されている。
CPU8010の出力するリセット信号S8009は、比較結果記憶手段8070に入力されている。比較結果記憶手段8070の出力する一致状態保持信号S8006は、アンドゲート8110の入力と、オアゲート8130の入力に入力されている。アンドゲート8110のもう一方の入力には、CPU8010の出力するソースアドレス書込み信号S8014が入力されている。また、ソースアドレス書込み信号S8014は、ソースレジスタ8140にも入力されている。アンドゲート8110の出力のソースアドレス設定条件信号S8015は、ソースレジスタ設定条件記憶手段8150に入力されている。ソースレジスタ設定条件記憶手段8150の出力する
ソースアドレス設定条件保持信号S8017は、アンドゲート8120の一方の入力に入力され、アンドゲート8120の他方の入力には、DMAC8100がCPU8010へ出力するアクティブ信号S8113が入力されている。アンドゲート8120の出力のDMA無効化信号S8016は、オアゲート8130の入力に入力されている。オアゲート8130の出力の無効化信号S8018は、データ変換手段8080に入力されている。
内蔵不揮発性メモリ8020とデータ変換手段8080は、ROMバスB8011で接続されている。CPU8010の出力するリード信号S8012は、内蔵不揮発性メモリ8020と内蔵揮発性メモリ8030と外部メモリ8090とDMAC8100とを各々接続する。CPU8010の出力するライト信号S8013は、内蔵揮発性メモリ8030とDMAC8100とを接続する。マイクロコンピュータ8000の外部からDMAC8100には、起動信号S8019が入力されている。
データ変換手段8080は、一致信号S8005が‘1’であれば、内蔵不揮発性メモリ8020からROMバスB8011に出力された読み出しデータを訂正データ信号S8004の値に変換してデータバスB8002に出力する。また、一致信号S8005が‘0’で、かつ無効化信号S8006が‘1’であれば、内蔵不揮発性メモリ8020からROMバスB8011に出力された読み出しデータを無効化し、データバスB8002に何も出力しない。更に一致信号S8005が‘0’で、かつ一致状態保持信号S8006が‘0’であれば内蔵不揮発性メモリ8020からROMバスB8011に出力された読み出しデータを、データバスB8002に乗せ換えて出力する。
DMAC8100は、起動信号S8019が‘1’になれば、ソースレジスタ8140に格納されたアドレスに該当するメモリ領域から、任意のメモリ領域へ、CPU8010を介さずにプログラムおよびデータを転送する。
DMAC8100は、プログラムおよびデータを読み出すアドレスを格納するソースレジスタ8140および、ある特定の条件でソースアドレスを設定したことを記憶するソースアドレス設定条件記憶手段8150を備えている。
ソースレジスタ8140は、ソースアドレス書込み信号S8014が‘1’であれば、データバスB8002のデータを格納保持する。また、ソースアドレス設定条件記憶手段8150は、ソースアドレス設定条件信号S8015が‘1’ならば、‘1’の値を格納保持し、ソースアドレス設定条件保持信号S8017に‘1’を出力する。
また、DMAC8100は、起動信号S8019が‘1’ならば、アクティブ信号S8113に‘1’を出力する。DMAC8100は、ソースレジスタ8120に格納されたアドレスをアドレスバスB8001に出力すると共に、リード信号8012に‘1’を出力し、該当アドレスに格納されたプログラムおよびデータをデータバスB8001から読み出す。
続いて、DMAC8100は、読み出したデータおよびプログラムをデータバスB8002に出力し、アドレスバスB8001に任意のアドレスを出力すると共に、ライト信号S8013に‘1’を出力し、該当アドレスにデータを書き込む。書込みが完了するとアクティブ信号S8113に‘0’を出力する。
アンドゲート8110は、比較結果保持信号S8006の値と、ソースアドレス書込み信号S8014の値との論理積をソースアドレス設定条件信号S8015に出力する。アンドゲート8120は、アクティブ信号S8113の値とソースアドレス設定条件保持信号S8017の値との論理積をDMA無効化信号S8016に出力する。オアゲート8130は、比較結果保持信号S8006の値とDMA無効化信号S8016の値との論理和を無効化信号S8018に出力する。
CPU8010は、アドレスバスB8001に内蔵揮発性メモリ8020に該当するアドレスを出力すると共に、リード信号S8012に‘1’を出力し、内蔵不揮発性メモリ8020に格納されているプログラムを、ROMバスB8011、データ変換手段8080を介してデータバスB8002から順次読み出し、解読した結果に従い各種制御を行う。また、内蔵不揮発性メモリ8020から読み出したプログラムが、内蔵揮発性メモリ8030又は外部メモリ8090への分岐命令である場合には、アドレスバスB8001に内蔵揮発性メモリ8030又は外部メモリ8090の該当するアドレスを出力すると共に、リード信号S8012に‘1’を出力し、内蔵揮発性メモリ8030又は外部メモリ8090に格納されているプログラムを、データバスB8002から読み出し、解読した結果に従い各種制御を行う。
またCPU8010は、ライト信号S8013に‘1’、アドレスバスB8001に内蔵揮発性メモリ8030に該当するアドレスを各々出力すると共に、データバスB8002にデータを出力し、内蔵揮発性メモリ8030に任意の値を書き込むことができる。また、CPU8010は、データバスB8002にデータを出力すると共に訂正アドレス書込み信号S8007に‘1’を出力し、訂正アドレスレジスタ8040を任意の値に書き換えることができる。同様にCPU8010は、データバスB8002にデータを出力すると共に訂正データ書込み信号S8008に‘1’を出力し、訂正データレジスタ8050を任意の値に書き換えることができる。更にCPU8010は、リセット信号S8009に‘1’を出力し、比較結果記憶手段8070の値を‘0’にリセットすることができる。加えて、CPU8010は、データバスB8002にデータを出力すると共に原ソースアドレス書込み信号S8014に‘1’を出力し、ソースアドレスレジスタ8140を任意の値に書き換えることができる。また、CPU8010は、アクティブ信号S8113が‘1’のときには各種制御を停止する。
次に、内蔵不揮発性メモリ8020に格納されたプログラムおよびデータを訂正しつつ、読み出し保護を行うマイクロコンピュータの動作を説明する。なお、マイクロコンピュータ8000の外部から入力される起動信号S8019は、‘0’のままであるとする。
先ず、プログラムスタート時のCPU8010は、アドレスバスB8001に、内蔵不揮発性メモリ8020に該当するアドレスを出力すると共に、リード信号S8012に‘1’を出力し、内蔵不揮発性メモリ8020に格納されているプログラムを読み出そうとする。この時、訂正アドレスレジスタ8040は、初期値として格納している内蔵不揮発性メモリ8020に該当しないアドレスの値を訂正アドレス信号S8003に出力する。比較手段8050は、アドレスバスB8001に出力されている内蔵不揮発性メモリ8020に該当するアドレスと、訂正アドレス信号8003に出力されている内蔵不揮発性メモリ8020に該当しないアドレスとを比較し、一致しないため一致信号S8005に‘0’を出力する。比較結果記憶手段8070は、一致信号S8005の値が‘0’のため、一致状態保持信号S8006に‘0’を出力し続ける。DMA8100は、起動信号S8019が‘0’のままであるため、アクティブ信号S8113に‘0’を出力する。アンドゲート8120は、起動信号S8019が‘0’のため、DMA無効化信号S8106に‘0’を出力する。オアゲート8130は、一致状態保持信号S8006の値‘0’とDMA無効化信号S8016の値‘0’との論理和‘0’を無効化信号S8018に出力する。データ変換手段8080は、一致信号S8005が‘0’かつ無効化信号S8018が‘0’のため、内蔵不揮発性メモリ8020からROMバスB8011に出力された読み出しデータを、データバスB8002に乗せ換えて出力する。
このように、CPU8010は、内蔵不揮発性メモリ8020の該当アドレスに格納されているプログラムを、ROMバスB8011およびデータ変換手段8080を介してデータバスB8002から順次読み出し、解読した結果に従い各種制御を行う。
次に、CPU8010は、内蔵不揮発性メモリ8020が格納するプログラムの任意のアドレスから始まるプログラムを訂正するため、以下に示すプログラム(A)(B)(C)を初期化プログラムとして実行する。
プログラム(A)は、外部メモリ8090から、内蔵不揮発性メモリ8020に格納された訂正するべきプログラム(以下、被訂正プログラムという)の先頭アドレス値を読み出し、訂正アドレスレジスタ8040に設定する。
プログラム(B)は、外部メモリ8090から、被訂正プログラムの先頭アドレスに該当する命令コードを置換する命令コードを読み出し、訂正データ設定レジスタに設定する。置換する命令コードは、後述する、内蔵揮発性メモリ8030に外部メモリ8090から転送する代替プログラムルーチンの先頭にサブルーチン分岐する命令であるものとする。
プログラム(C)は、外部メモリ8090から、被訂正プログラムを代替するプログラム(以下、代替プログラムという)を内蔵揮発性メモリ8030に転送する。
先ず、CPU8010がプログラム(A)を読み出すと、CPU8010は、アドレスバスB8001に、外部メモリ8090に該当するアドレスを出力すると共に、リード信号S8012に‘1’を出力し、外部メモリ8090に予め格納された、被訂正プログラムの先頭アドレス値を読み出す。更にCPU8010は、設定アドレス書込み信号S8007に‘1’を出力するとともに、データバスB8001に先ほど読み出した、被訂正プログラムの先頭アドレスを出力し、訂正アドレスレジスタ8040に設定する。
次に、CPU8010がプログラム(B)を読み出すと、CPU8010は、アドレスバスB8001に、外部メモリ8090に該当するアドレスを出力すると共に、リード信号S8012に‘1’を出力し、外部メモリ8090に予め格納された、被訂正プログラムの先頭アドレスに該当する命令コードを置換する命令コードを読み出す。更にCPU8010は、訂正データ書込み信号S8008に‘1’を出力するとともに、データバスB8001に先ほど読み出した、被訂正プログラムの先頭アドレスに格納されている命令コードを置換する命令コードを出力し、訂正データレジスタ8050に設定する。
次に、CPU8010がプログラム(C)を読み出すと、CPU8010は、アドレスバスB8001に、外部メモリ8090に該当するアドレスを出力すると共に、リード信号S8012に‘1’を出力し、外部メモリ8090に予め格納された、代替プログラムを順次読み出す。更にCPU8010は、ライト信号S8013に‘1’を、アドレスバスB8001に内蔵揮発性メモリ8030に該当するアドレスを各々出力するとともに、データバスB8002に先ほど読み出した代替プログラムを出力し、内蔵揮発性メモリ8030に書き込む。プログラム(C)を繰り返すことで、外部メモリ8090から、代替プログラムを内蔵揮発性メモリ8030に順次転送する。
以上のように、(A)(B)(C)の初期化プログラムでプログラム訂正の準備が完了した状態で、CPU8010が被訂正プログラムの先頭アドレスを実行しようとしたときの動作を説明する。
CPU8010は、アドレスバスB8001に被訂正プログラムの先頭アドレスを出力すると共に、リード信号S8012に‘1’を出力する。比較手段8060はアドレスバスB8001の値と、訂正アドレス信号S8003の値がともに被訂正プログラムの先頭アドレスのため、一致信号S8005にアドレスバスB8001のアドレスと訂正アドレス信号S8003の値とが一致したことを示す‘1’を出力する。比較結果記憶手段8070は、一致信号S8005の値‘1’を受けて‘1’の値を格納保持し、一致状態保持信号S8006に‘1’を出力する。
オアゲート8130は、一致状態保持信号S8006の値が‘1’のため、無効化信号S8018に‘1’を出力する。
データ変換手段8080は、一致信号S8005が‘1’であるため、訂正データ信号S8004の値をデータバスB8002に出力する。
次にCPU8010は、データバスB8002に出力された訂正データ信号の値が、予め内蔵揮発性メモリ8030に外部メモリ8090から転送された代替プログラムの先頭にサブルーチン分岐する命令であるため、プログラムの読み出し先を内蔵揮発性メモリ8030の該当アドレスへと変更し、アドレスバスB8001に該当アドレスを出力すると共に、リード信号S8012に‘1’を出力し順次、内蔵揮発性メモリ8030の該当アドレスに格納されている代替プログラムをデータバスB8002から読み出し、代替プログラム実行する。
更に、代替プログラムの実行を終えるときには、CPU8010は、リセット信号S8009に‘1’を出力する。比較結果記憶手段8070は、リセット信号S8009の値‘1’を受けて、‘0’の値を格納保持し一致状態保持信号S8006に‘0’を出力する。起動信号S8019が‘0’のため、DMAC8100は、アクティブ信号S8113に‘0’を出力する。アンドゲート8120は、アクティブ信号S8113が‘0’のため、DMA無効化信号S8016に‘0’を出力する。オアゲート8130は、一致状態保持信号S8006の値‘0’とDMA無効化信号S8016の値‘0’との論理和‘0’を無効化信号S8018に出力する。データ変換手段8080は、一致信号S8005が‘0’かつ無効化信号S8006が‘0’のため、内蔵不揮発性メモリ8020からROMバスB8011に出力された読み出しデータを、データバスB8002に乗せ換えて出力する。このようにして、再び内蔵不揮発性メモリ8020からプログラムおよびデータを読み出すことが可能となる。
ここで、不正ユーザが外部メモリ8090に格納されたプログラムを改変し、代替プログラムを、ソースアドレスレジスタ8140に内蔵不揮発性メモリ8020に該当するアドレスを設定し、代替プログラムの実行を完了した状態で、起動信号S8019を‘1’にすることで、DAMC8100のデータ転送機能を利用して内蔵不揮発性メモリ8020に格納されたデータおよびプログラムを読み出す記述にしたとする。
CPU8010が内蔵揮発性メモリ8030から、改変された代替プログラムを読み出すと、CPU8010は、ソースアドレス書込み信号S8014に‘1’を出力するとともに、データバスB8002に内蔵不揮発性メモリ8020に該当するアドレスを出力して、ソースレジスタ8140に内蔵不揮発性メモリ8020に該当するアドレスを設定しようとする。ソースアドレスレジスタ8140は、ソースアドレス書込み信号S8014の値が‘1’なので、データバスB8002に出力されている内蔵不揮発性メモリ8020に該当するアドレスを格納保持する。このとき、比較結果記憶手段8070は、一致状態保持信号S8006に‘1’を出力し続けている。アンドゲート8110は、一致状態保持信号S8006の値‘1’と、ソースアドレス書込み信号S8014の値‘1’の論理積‘1’をソースアドレス設定条件信号S8015に出力する。ソースアドレス設定条件保持手段8150は、ソースアドレス設定条件信号S8015が‘1’のため、‘1’の値を格納、保持する。
以上のDMACの設定を完了すると、代替プログラムの完了手順を実行するため、CPU8010は、リセット信号S8009に‘1’を出力する。比較結果記憶手段8070は、リセット信号S8009の値‘1’を受けて、‘0’の値を格納保持し一致状態保持信号S8006に‘0’を出力する。起動信号S8019が‘0’のため、DMAC8100は、アクティブ信号S8113に‘0’を出力する。アンドゲート8120は、アクティブ信号S8113が‘0’のため、DMA無効化信号S8016に‘0’を出力する。オアゲート8130は、一致状態保持信号S8006の値‘0’とDMA無効化信号S8016の値‘0’との論理和‘0’を無効化信号S8018に出力する。データ変換手段8080は、一致信号S8005が‘0’かつ無効化信号S8006が‘0’のため、内蔵不揮発性メモリ8020からROMバスB8011に出力された読み出しデータを、データバスB8002に乗せ換えて出力する。このようにして、内蔵不揮発性メモリ8020からプログラムおよびデータを再び読み出すことが可能となる。
次に、不正ユーザはマイクロコンピュータ8000の外部から入力される、起動信号S8019を‘1’にして、DMAC8100を起動して、内蔵不揮発性メモリ8020に格納されたデータおよびプログラムを読み出そうとする。
DMAC8100は、起動信号S8019が‘1’のため、アクティブ信号S8113に‘1’を出力する。CPU8010は、アクティブ信号S8113が‘1’のため、各種制御を停止する。
次に、DMAC8100は、ソースレジスタ8140に格納された内蔵不揮発性メモリ8020に該当するアドレスをアドレスバスB8001に出力すると共に、リード信号8012に‘1’を出力し、内蔵不揮発性メモリ8020に格納されたプログラムおよびデータをデータバスB8001から読み出そうとする。
内蔵不揮発性メモリ8020は、リード信号S8012が‘1’のため、アドレスバスB8001のアドレスに該当するデータをROMバスB8011に出力する。
アンドゲート8120は、アクティブ信号S8113の値‘1’とソースアドレス設定条件保持信号S8017の値‘1’との論理積‘1’をDMA無効化信号に出力する。オアゲート8130は、一致状態保持信号S8006の値‘0’とDMA無効化信号S8017の値‘1’の論理和を‘1’を無効化信号S8018に出力する。
データ変換手段8080は、一致信号S8005が‘0’で、かつ無効化信号S8006が‘1’のため、内蔵不揮発性メモリ8020からROMバスB8011に出力された読み出しデータを無効化し、データバスB8002に何も出力しない。これにより、内蔵不揮発性メモリ8020に格納されたプログラムおよびデータは、データバスB8002等から、マイクロコンピュータ8000の外部へ出力されることはない。
以上のように、マイクロコンピュータ8000を内蔵不揮発性メモリ8020と、内蔵揮発性メモリ8030と、訂正アドレスレジスタ8040と、訂正データレジスタ8050と、比較手段8060と、比較結果記憶手段8070と、データ変換手段8080と、DMAC8100と、アンドゲート8110,8120と、オアゲート8130とで構成することで、内蔵不揮発性メモリ8020のプログラムを訂正しつつ、不正ユーザが外部メモリ8090を改変し、DMAC8100の転送機能を利用して、内蔵不揮発性メモリに格納されたプログラムおよびデータを読み出そうと試みても、代替プログラムの実行中にソースアドレスを設定したDMAC8100による内蔵不揮発性メモリに格納されたデータの読み出しができずセキュリティが向上する。また、代替プログラムの実行中にソースアドレスの設定を禁止するものではないため、内蔵不揮発性メモリ8020以外からのDMAC8100の転送設定の訂正は可能となる。
本発明のマイクロコンピュータは、内蔵不揮発性メモリに格納されたプログラムやデータの訂正を可能にしつつ、訂正プログラムを実行中には、不正ユーザが前記不許可領域に格納された秘匿が必要なプログラムやデータを読み出そうと試みても、その読み出しを不可能にできるので、セキュリティを向上したマイクロコンピュータ等として有用である。
本発明の(実施の形態1)におけるマイクロコンピュータのブロック図 本発明の(実施の形態2)におけるマイクロコンピュータのブロック図 本発明の(実施の形態3)におけるマイクロコンピュータのブロック図 本発明の(実施の形態4)におけるマイクロコンピュータのブロック図 本発明の(実施の形態5)におけるマイクロコンピュータのブロック図 本発明の(実施の形態6)におけるマイクロコンピュータのブロック図 本発明の(実施の形態7)におけるマイクロコンピュータのブロック図 本発明の(実施の形態8)におけるマイクロコンピュータのブロック図 本発明の(実施の形態9)におけるマイクロコンピュータのブロック図
符号の説明
100,1000,2000,3000,4000,5000,6000,7000,8000 マイクロコンピュータ
110,1010,2010,3010,4010,5010,6010,7010,8010 CPU(制御部)
120,1020,2020,3020,4020,5020,6020,7020,8020 内蔵不揮発性メモリ
130,1030,2030,3030,4030,5030,6030,7030,8030 内蔵揮発性メモリ
140,1040,2040,3040,4040,5040,6040,7040,8040 訂正アドレスレジスタ(訂正アドレス記憶手段)
150,1050,2050,3050,4050,5050,6050,7050,8050 訂正データレジスタ(訂正データ記憶手段)
160,1060,2060,3060,4060,5060,6060,6100,7060,8060 比較手段
170,1070,2070,3070,4070,5070,6070,7070,8070 比較結果記憶手段
180,1080,2080,3080,4080,5080,6080,7080,8080 データ変換手段
190,1090,2090,3090,4090,5090,6090,7090,8090 外部メモリ
1110,4110 空間判定手段
2110,4120,6130 フェッチ判定手段
1100,2100,3100,6110,7110,8110,8120 2入力1出力アンドゲート
3110,5110 解読手段
4100 3入力1出力アンドゲート
6120 復帰アドレスレジスタ(復帰アドレス記憶手段)
7100,8100 DMAC(ダイレクトメモリアクセス手段)
7120 インバータ
7130 ソースレジスタ
8130 オアゲート
8150 ソースアドレス設定条件記憶手段
B101,B1001,B2001,B3001,B4001,B5001,B6001,B7001,B8001 アドレスバス
B102,B1002,B2002,B3002,B4002,B5002,B6002,B7002,B8002 データバス
S103,S1003,S2003,S3003,S4003,S5003,S6003,S7003,S8003 訂正アドレス信号
S104,S1004,S2004,S3004,S4004,S5004,S6004,S7004,S8004 訂正データ信号
S105,S1005,S2005,S3005,S4005,S5005,S6005,S7005,S8005 一致信号
S106,S1006,S2006,S3006,S4006,S5006,S6006,S7006,S8006 一致状態保持信号
S107,S1007,S2007,S3007,S4007,S5007,S6007,S7007,S8007 訂正アドレス書込み信号
S108,S1008,S2008,S3008,S4008,S5008,S6008,S7008,S8008 訂正データ書込み信号
S109,S1009,S2009,S3009,S4009,S6017,S7009 リセット信号
B111,B1011,B2011,B3011,B4011,B5011,B6011,B7011,B8011 ROMバス
S112,S1012,S2012,S3012,S4012,S5012,S6012,S7012,S8012 リード信号
S113,S1013,S2013,S3013,S4013,S5013,S6013,S7013,S8013 ライト信号
S114 原リセット信号
S1015 内蔵不揮発性メモリ信号
S2014,S3014 セット信号
S2015,S6016 オペコードフェッチ信号
S3015 サブルーチン分岐信号
S4014,S8018 無効化信号
S4015 内蔵揮発性メモリ信号
S4016 オペランドフェッチ信号
S5009 サブルーチン復帰信号
S6009 復帰アドレス書込み信号
S6014 復帰アドレス信号
S6015 復帰アドレス一致信号
S7113,S8113 アクティブ信号
S7014 原ソースアドレス書込み信号
S7015,S8014 ソースアドレス書込み信号
S7016 反一致状態保持信号
S7017,S8019 起動信号
S8015 ソースアドレス設定条件信号
S8016 DMA無効化信号
S8017 ソースアドレス設定条件保持信号

Claims (10)

  1. プログラムおよびデータを格納する記憶領域を有する不揮発性メモリと、
    前記不揮発性メモリに格納されるデータから訂正したいデータに該当するアドレスを記憶する訂正アドレス記憶手段と、
    前記不揮発性メモリに格納されるデータから訂正したいデータを記憶する訂正データ記憶手段と、
    現在アクセスされる前記不揮発性メモリのアドレスと前記訂正アドレス記憶手段とが記憶する訂正アドレスと一致するか否かを比較する比較手段と、
    前記比較手段の比較結果を記憶する比較結果記憶手段と、
    前記比較手段の比較結果および、前記比較結果記憶手段が記憶する比較結果を受け、前記比較手段の比較結果が一致であるときには、前記不揮発性メモリの記憶領域から読み出されるプログラム又はデータを前記訂正データ記憶手段が記憶する訂正データに変換し、前記比較結果記憶手段が記憶する比較結果が一致であるときには、前記不揮発性メモリの記憶領域から読み出されるプログラム又はデータを無効化するデータ変換手段と、
    前記不揮発性メモリにアクセスし、この不揮発性メモリが格納するプログラム又はデータを前記データ変換手段を介して読み出す制御部と
    を備えたマイクロコンピュータ。
  2. 請求項1記載のマイクロコンピュータにおいて、
    前記不揮発メモリは複数個の記憶領域を有し、
    前記実行しているプログラムが前記不揮発性メモリの特定の記憶領域に格納されたプログラムであるか否かを判定する空間判定手段を備え、
    前記データ変換手段は、前記空間判定手段の判定結果を受け、この判定結果が前記不揮発性メモリの特定の記憶領域に格納されたプログラムである場合には、前記比較結果記憶手段が記憶する比較結果が一致であるときにも、前記不揮発性メモリの記憶領域から読み出されるプログラム又はデータを無効化しないよう構成した
    マイクロコンピュータ。
  3. 請求項1記載のマイクロコンピュータにおいて、
    前記制御部のアクセスがオペランドフェッチであるか否かを判定するフェッチ判定手段を備え、
    前記比較結果記憶手段は、前記フェッチ判定手段の判定結果を受け、この判定結果がオペランドフェッチであるとき、前記比較手段の比較結果が一致であっても、一致であることを記憶しないよう構成した
    マイクロコンピュータ。
  4. 請求項1記載のマイクロコンピュータにおいて、
    前記制御部は、前記データ変換手段を介して読み出したデータがサブルーチン分岐命令であるか否かを解読する解読手段を備え、
    前記比較結果記憶手段は、前記解読手段の解読結果を受け、この解読結果がサブルーチン分岐命令でないとき、前記比較手段の比較結果が一致であっても、一致であることを記憶しないよう構成した
    マイクロコンピュータ。
  5. 請求項1記載のマイクロコンピュータにおいて、
    前記制御部の実行しているプログラムが前記不揮発性メモリに格納されたプログラムであるか否かを判定する空間判定手段と、
    前記制御部のアクセスがオペランドフェッチであるか否かを判定するフェッチ判定手段とを備え、
    前記比較結果記憶手段は前記比較手段の比較結果を記憶し、前記空間判定手段の判定結果および前記フェッチ判定手段の判定結果を受け、前記空間判定手段の判定結果が前記不揮発性メモリに格納されたプログラムでなく、かつ、前記フェッチ判定手段の判定結果がオペランドフェッチであったときには、記憶する比較結果を無効化して出力し、それ以外のときには、記憶する比較結果をそのまま出力するよう構成した
    マイクロコンピュータ。
  6. 請求項1記載のマイクロコンピュータにおいて、
    前記制御部は、前記データ変換手段を介して読み出したデータがサブルーチン復帰命令であるか否かを解読する解読手段を備え、
    前記比較結果記憶手段は、前記解読手段の解読結果を受け、この解読結果がサブルーチン復帰命令のときには記憶する比較結果をリセットするよう構成した
    マイクロコンピュータ。
  7. 請求項1記載のマイクロコンピュータにおいて、
    前記制御部が、前記不揮発性メモリに格納されるデータから訂正したいデータに該当するアドレスを実行した直後に、実行(復帰)する前記不揮発性メモリに該当するアドレスを記憶する復帰アドレス記憶手段と、
    前記制御部が前記不揮発性メモリに対してアクセスするときに出力するアドレスと、前記復帰アドレス記憶手段が記憶するアドレスとを比較する第2の比較手段を備え、
    前記比較結果記憶手段は、前記第2の比較手段の比較結果を受け、この比較結果が一致したとき、記憶する比較結果をリセットするよう構成した
    マイクロコンピュータ。
  8. 請求項7記載のマイクロコンピュータにおいて、
    前記制御部のアクセスがオペランドフェッチであるか否かを判定するフェッチ判定手段を備え、
    前記比較結果記憶手段は、前記フェッチ判定手段の判定結果を受け、この判定結果がオペランドフェッチであるときには、記憶する比較結果をリセットしないよう構成した
    マイクロコンピュータ。
  9. 請求項1記載のマイクロコンピュータにおいて、
    随時バス制御に介入して、アクセスしたいアドレスを記憶する読み出しアドレス記憶手段が記憶するアドレスに該当する前記不揮発性メモリに格納されるプログラム又はデータの読み出しを行うダイレクトメモリアクセス手段と、
    前記読み出しアドレス記憶手段は、前記比較結果記憶手段が記憶する比較結果を受け、前記比較手段の比較結果が一致であるときには、前記書き換えを行わないよう構成した
    マイクロコンピュータ。
  10. 請求項1記載のマイクロコンピュータにおいて、
    随時バス制御に介入して、アクセスしたいアドレスを記憶する読み出しアドレス記憶手段が記憶するアドレスに該当する、前記不揮発性メモリに格納されるプログラム又はデータの読み出しを行うダイレクトメモリアクセス手段と、
    前記読み出しアドレス記憶手段の書き換え時に、前記比較結果記憶手段が記憶する比較結果を記憶する書き換え条件記憶手段とを備え、
    前記データ変換手段は、前記ダイレクトメモリアクセス手段が読み出しを行う際には、前記書き換え条件記憶手段の記憶する比較結果を受け、前記書き換え条件記憶手段の記憶する比較結果が一致の場合にも、前記不揮発性メモリの記憶領域から読み出されるプログラム又はデータを無効化するよう構成した
    マイクロコンピュータ。
JP2005209331A 2005-07-20 2005-07-20 マイクロコンピュータ Pending JP2007026231A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2005209331A JP2007026231A (ja) 2005-07-20 2005-07-20 マイクロコンピュータ

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2005209331A JP2007026231A (ja) 2005-07-20 2005-07-20 マイクロコンピュータ

Publications (1)

Publication Number Publication Date
JP2007026231A true JP2007026231A (ja) 2007-02-01

Family

ID=37786876

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005209331A Pending JP2007026231A (ja) 2005-07-20 2005-07-20 マイクロコンピュータ

Country Status (1)

Country Link
JP (1) JP2007026231A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010041154A (ja) * 2008-07-31 2010-02-18 Ricoh Co Ltd 画像処理装置、画像処理制御方法、画像処理制御プログラム及び記録媒体
JP2014164412A (ja) * 2013-02-22 2014-09-08 Toshiba Corp マイクロプロセッサ

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010041154A (ja) * 2008-07-31 2010-02-18 Ricoh Co Ltd 画像処理装置、画像処理制御方法、画像処理制御プログラム及び記録媒体
JP2014164412A (ja) * 2013-02-22 2014-09-08 Toshiba Corp マイクロプロセッサ

Similar Documents

Publication Publication Date Title
US9875193B2 (en) Cache structure for a computer system providing support for secure objects
US9262341B2 (en) Microcomputer and method for controlling memory access
US7874009B2 (en) Data processing device
US10691482B2 (en) Systems, methods, and apparatus for securing virtual machine control structures
JP5000573B2 (ja) 保護された関数呼び出し
JP4220476B2 (ja) 安全ドメインおよび非安全ドメインを有するシステム内での仮想−物理メモリアドレスマッピング
JP5571201B2 (ja) ハードウェアモードおよびセキュリティフラグに基づく、読み出される命令用のメモリエリアの制限
JP2008257734A (ja) メモリドメインを基にしたデータ処理システム内のセキュリティ制御
TW201729137A (zh) 用以容許保護容器記憶體與輸入/輸出裝置間之安全通訊的處理器、方法、系統、及指令
US20040187019A1 (en) Information processing apparatus
US11641272B2 (en) Seamless one-way access to protected memory using accessor key identifier
US20060010447A1 (en) Task management system
JPWO2003104948A1 (ja) メモリ管理ユニット、コード検証装置およびコード復号装置
JP2007026231A (ja) マイクロコンピュータ
JP2017010347A (ja) 情報処理装置
KR102432451B1 (ko) 반도체 장치 및 반도체 장치의 동작 방법
US9501667B2 (en) Security domain prediction
JP2021157766A (ja) シャドウスタックを効率的に管理および処理するための装置および方法
JPH0731619B2 (ja) 変数を含まない関数型言語コードを用いる2進有向グラフとしてストアされたプログラムを評価する縮小プロセッサのためのシステムアロケータ
JP3642533B2 (ja) プログラムカード及びこれを用いた計算機
JPS6161413B2 (ja)
JP2005157740A (ja) マイクロコンピュータ
JPS63318654A (ja) 中間バッファリプレ−ス決定方式
JP2524376B2 (ja) 命令フェッチ方式
TWI334572B (en) Method for performing jump and translation state change at the same time