説明

記憶装置

【課題】本発明は、不正コピーを適切に防止することが可能な記憶装置を提供することを目的とする。
【解決手段】本発明に係る記憶装置において、アドレスのインクリメント動作が行われているか否かを検出するアドレス解析部203は、メモリ100に供給された前回のアドレス信号ADDをラッチするアドレスラッチ部1と;アドレスラッチ部1でラッチされた前回のアドレス信号ADDをインクリメントして出力するアドレス加算部2aと;メモリ100に供給されている現在のアドレス信号ADD(出力信号A1)とアドレス加算部2aの出力信号B1とを比較し、両者が一致していればアドレスのインクリメント動作が行われていると判断するアドレス比較部3と;を有して成る構成とされている。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、不正コピー防止機能を備えた記憶装置に関するものである。
【背景技術】
【0002】
従来より、不正コピー防止機能を備えた記憶装置が種々開示・提案されている(例えば特許文献1や特許文献2を参照)。なお、従来の記憶装置の多くは、所定の鍵情報を用いて暗号化されたデータを格納する構成とされていた。
【特許文献1】特開2003−59178号公報
【特許文献2】特開2002−373320号公報
【発明の開示】
【発明が解決しようとする課題】
【0003】
確かに、上記従来の記憶装置であれば、格納されたデータが不正コピーされた場合であっても、所定の鍵情報を用いた暗号解読処理が行われない限り、その内容は不明なものとなるため、不正コピーされたデータの利用は困難であった。
【0004】
しかしながら、上記従来の記憶装置は、あくまで、不正コピーされたデータの利用を困難とするものであって、格納されたデータの読み出しは自由であった。そのため、高速なコンピュータを用いて不正コピーされたデータが解析され、その暗号が解読されてしまった場合には、以後、その内容を自由にコピーされてしまうという問題があった。
【0005】
本発明は、上記の問題点に鑑み、不正コピーを適切に防止することが可能な記憶装置を提供することを目的とする。
【課題を解決するための手段】
【0006】
上記目的を達成すべく、本発明に係る記憶装置は、データを格納するメモリと;前記メモリから読み出されたデータにアドレスのジャンプ動作を伴う所定の監視対象コードが含まれているか否かを検出するコード解析部と;アドレスのインクリメント動作が行われているか否かを検出するアドレス解析部と;前記コード解析部と前記アドレス解析部の解析結果を参照してエラーフラグを生成するエラー検出部と;前記エラー検出部の判定結果に基づいて、前記メモリに格納されたデータの出力を禁止する出力制御部と;を有して成る記憶装置であって、前記アドレス解析部は、前記メモリに供給された前回のアドレス信号をラッチするアドレスラッチ部と;前記アドレスラッチ部でラッチされた前回のアドレス信号をインクリメントして出力するアドレス加算部と;前記メモリに供給されている現在のアドレス信号と前記アドレス加算部の出力信号とを比較し、両者が一致していればアドレスのインクリメント動作が行われていると判断するアドレス比較部と;を有して成る構成(第1の構成)とされている。
【0007】
また、上記目的を達成すべく、本発明に係る記憶装置は、データを格納するメモリと;前記メモリから読み出されたデータにアドレスのジャンプ動作を伴う所定の監視対象コードが含まれているか否かを検出するコード解析部と;アドレスのインクリメント動作が行われているか否かを検出するアドレス解析部と;前記コード解析部と前記アドレス解析部の解析結果を参照してエラーフラグを生成するエラー検出部と;前記エラー検出部の判定結果に基づいて、前記メモリに格納されたデータの出力を禁止する出力制御部と;を有して成る記憶装置であって、前記アドレス解析部は、前記メモリに供給された前回のアドレス信号をラッチするアドレスラッチ部と;前記メモリに供給されている現在のアドレス信号をデクリメントして出力するアドレス減算部と;前記アドレスラッチ部の出力信号と前記アドレス減算部の出力信号とを比較し、両者が一致していればアドレスのインクリメント動作が行われていると判断するアドレス比較部と;を有して成る構成(第2の構成)としてもよい。
【0008】
なお、上記第1または第2の構成から成る記憶装置において、前記エラー検出部は、前記コード解析部で前記監視対象コードが検出されたにも関わらず、前記アドレス解析部でアドレスのインクリメント動作が検出されたときに前記エラーフラグを生成する構成(第3の構成)にするとよい。
【0009】
或いは、上記第1または第2の構成から成る記憶装置において、前記エラー検出部は、前記コード解析部で前記監視対象コードが検出されていないにも関わらず、前記アドレス解析部でアドレスのインクリメント動作が検出されなかったときに、前記エラーフラグを生成する構成(第4の構成)にするとよい。
【発明の効果】
【0010】
本発明に係る記憶装置であれば、不正コピーを適切に防止することが可能となる。
【発明を実施するための最良の形態】
【0011】
まず、本発明に係る記憶装置の第1実施形態について、図1を参照しながら詳細に説明する。図1は、本発明に係る記憶装置の第1実施形態を示すブロック図である。
【0012】
図1に示すように、本実施形態の記憶装置は、読み出し専用のメモリ100(図1ではROM[Random Access Memory]と標記)と、不正コピー防止回路200と、を有して成る。また、不正コピー防止回路200は、コードチェック部201と、タイミング制御部202と、インクリメントチェック部203と、エラー検出部204と、初期アドレスチェック部205と、論理和演算器206と、セレクタ207と、を有して成る。
【0013】
メモリ100は、データD(CPU[Central Processing Unit]に読み出されて実行されるプログラムなど)を不揮発的に格納する手段である。
【0014】
コードチェック部201は、メモリ100から読み出されたデータDに含まれるコードを解析するコード解析部である。より具体的に述べると、コードチェック部201は、メモリ100から読み出されたデータDをモニタして、実行時にアドレスのジャンプ動作を伴う所定の監視対象コード(ジャンプ命令のほか、コール命令やアドレス指定付きのロード命令などを含む)を検出し、その解析結果をタイミング制御部202やエラー検出部204に伝達する。なお、メモリ100に格納されたデータDに対して暗号化処理や圧縮処理が施されている場合、コードチェック部201は、上記したコード解析機能に加えて、データDの暗号解読処理機能や伸長処理機能を具備する必要がある。
【0015】
タイミング制御部202は、データDの読み出しを指示するリード信号RDの入力を受けて動作し、コードチェック部201で得られた解析結果に基づいて、上記した監視対象コードの実行タイミングをインクリメントチェック部203やエラー検出部204に伝達する手段である。
【0016】
インクリメントチェック部203は、メモリ100に対するアドレス動作を解析するアドレス解析部である。より具体的に述べると、インクリメントチェック部203は、メモリ100に与えられるアドレス信号ADDをモニタして、前のアドレスと現在のアドレスを比較し、アドレスのインクリメント動作(ここでは、アドレスを1つだけインクリメントする動作を指すものとする)が行われたか否かを検出する。
【0017】
エラー検出部204は、コードチェック部201とインクリメントチェック部203の解析結果を参照し、コードに合致したアドレス動作が行われているか否かを判定する手段である。より具体的に述べると、エラー検出部204は、前記監視対象コードの実行時にアドレスのインクリメント動作が検出された場合にエラーフラグを立てる。すなわち、エラー検出部204は、アドレスのジャンプ動作が行われるべきタイミングでアドレスのインクリメント動作が行われたことを検出したときに、不正コピーのおそれがあると判断して、論理和演算器206への出力信号をローレベルからハイレベルに変遷する。
【0018】
初期アドレスチェック部205は、メモリ100に与えられるアドレス信号ADDをモニタして、メモリ100の読み出し開始時における初期アドレスが予め設定された所定値と一致しているか否かを判定し、その不一致が検出された場合にエラーフラグを立てる手段である。すなわち、初期アドレスチェック部205は、所定値以外のアドレスからデータDの読み出しが開始されたことを検出したときに、不正コピーのおそれがあると判断して、論理和演算器206への出力信号をローレベルからハイレベルに変遷する。
【0019】
論理和演算器206は、エラー検出部204の出力信号と初期アドレスチェック部205の出力信号の論理和演算を行い、その演算結果をセレクタ207の制御信号として出力する手段である。すなわち、セレクタ207の制御信号は、エラー検出部204の出力信号と初期アドレスチェック部205の出力信号の両方がローレベルであるときにのみローレベルとなり、その余の場合にはハイレベルとなる。
【0020】
セレクタ207は、論理和演算器206の出力信号に基づいて、メモリ100に格納されたデータDの出力を禁止する出力制御部である。より具体的に述べると、セレクタ207は、論理和演算器206の出力信号がローレベルであるときには、メモリ100から読み出されたデータDを選択して出力する一方、論理和演算器206の出力信号がハイレベルであるときには、所定のダミーデータDDを選択して出力する。なお、ダミーデータDDは、固定値としてもよいし、乱数値としてもよい。
【0021】
次に、上記構成から成る記憶装置のデータ読み出し時における不正コピー防止回路200のプロテクト動作について詳細な説明を行う。
【0022】
メモリ100に対して正当なアクセスが行われている場合には、予め設定された所定値を初期アドレスとしてデータDの読み出しが開始され、メモリ100に対するアドレス動作についても、データDに含まれるコードに合致したものとなる。従って、エラー検出部204と初期アドレスチェック部205の出力信号は、いずれもローレベルに維持されるので、論理和演算器206の出力信号はローレベルとなり、セレクタ207は、メモリ100から読み出されたデータDを選択して出力する状態(すなわち、データDの出力許可状態)となる。
【0023】
一方、メモリ100に格納されたデータDの不正コピーが行われている場合には、データDに含まれるコードの内容とは何ら関係なく、アドレスのインクリメント動作が行われて、メモリ100に格納されたデータDがそのアドレス順に連続して読み出されていく。すなわち、データDの不正コピー時には、先述の監視対象コードに基づいてアドレスのジャンプ動作が行われるべきタイミングであっても、これを無視してアドレスのインクリメント動作が行われるので、メモリ100に対するアドレス動作がコードに合致したものではなくなる。このような場合、エラー検出部204の出力信号は、ローレベルからハイレベルに遷移されるので、論理和演算器206の出力信号はハイレベルとなり、セレクタ207は、メモリ100から読み出されたデータDではなく、所定のダミーデータDDを選択して出力する状態(データDの出力禁止状態)となる。
【0024】
また、メモリ100に格納されたデータDの不正コピーが行われる場合、予め設定された所定値以外のアドレスからデータDの読み出しが開始されることもあり得る。このような場合、初期アドレスチェック部205の出力信号は、ローレベルからハイレベルに遷移されるので、論理和演算器206の出力信号はハイレベルとなり、セレクタ207は、エラー検出部204の検出結果を待つことなく、所定のダミーデータDDを選択して出力する状態となる。
【0025】
このように、本実施形態の記憶装置であれば、データDの不正コピーが疑われる状況下において、メモリ100に格納されたデータDの出力自体を禁止することができるので、従来構成に比べて、データDの不正コピーをより適切に防止することが可能となる。
【0026】
なお、上記構成から成る記憶装置において、コードチェック部201は、前記監視対象コードのうち、実行時の条件に応じてアドレスのジャンプ動作を伴うか否かが不明であるものを検出した場合、エラー検出部204に対して、その監視対象コードの実行時に得られるエラーフラグをマスクするように指示する構成にするとよい。
【0027】
このような構成とすることにより、メモリ100に対して正当なアクセスが行われているにも関わらず、監視対象コードが実行時の条件に応じてアドレスのジャンプ動作を伴わなかった場合であっても、これを誤ってエラーと判断することがなくなるので、データDの不必要な出力禁止を回避することが可能となる。
【0028】
ただし、コードチェック部201は、エラー検出部204に対するマスク指示が所定値に達した場合、以後のマスク指示を中止する構成にするとよい。このような構成とすることにより、例えば、実行時の条件に応じてアドレスのジャンプ動作を伴うか否かが不明であるコードの記述回数に上限値が定められているにも関わらず、その上限値を超えてエラー検出部204のエラーフラグが過度にマスクされることを回避することができるので、エラーの誤検出を低減しつつ、データDの不正コピーを防止することが可能となる。
【0029】
次に、本発明に係る記憶装置の第2実施形態について、図2を参照しながら詳細に説明する。図2は、本発明に係る記憶装置の第2実施形態を示すブロック図である。
【0030】
図2に示すように、本実施形態の記憶装置は、先出の第1実施形態とほぼ同様の構成から成り、セレクタ207に代えて、デコーダ208を有する点に特徴を有している。そこで、第1実施形態と同様の構成要素については、図1と同一の符号を付すことで重複した説明を省略し、以下では、本実施形態の特徴部分であるデコーダ208を中心に詳細な説明を行うことにする。
【0031】
本実施形態の記憶装置において、メモリ100には、暗号化されたデータDが格納されている。なお、データDに施される暗号化処理については、1重であっても、2重以上であっても構わない。
【0032】
デコーダ208は、論理和演算器206の出力信号に基づいて、メモリ100に格納されたデータDの出力を禁止する出力制御部である。より具体的に述べると、デコーダ208は、メモリ100から読み出されたデータDを出力する際に、論理和演算器206の出力信号に基づいて、所定の鍵情報を用いて正しい暗号解読処理を行うか、ダミーの鍵情報を用いて意図的にでたらめな暗号解読処理を行うかを決定する。
【0033】
このような構成とすることにより、データDの不正コピーが疑われる状況下において、デコーダ208は、メモリ100から読み出されたデータDに対して、全くでたらめな暗号解読処理を施して出力する。従って、記憶装置から不正に出力されたデータ(ここでは第1実施形態に倣ってダミーデータDDと称する)の内容は不明なものとなるため、これを利用することは不可能となる。
【0034】
また、ダミーデータDDは、デコーダ208によるでたらめな暗号解読処理を経て作成されたものであるため、メモリ100に格納されたデータDとは全く別物となっており、データDの暗号化処理に用いた鍵情報では、もはやその暗号解読処理を行うことができなくなっている。そのため、ダミーデータDDを高速なコンピュータで解析したとしても、データDの内容を読み取ることは非常に困難となっている。特に、デコーダ208でダミーの鍵情報を複数切り替えながらでたらめな暗号解読処理を行う構成とすれば、事実上、ダミーデータDDの解析処理は不可能なものとなる。
【0035】
このように、本実施形態の記憶装置であれば、メモリ100に格納されたデータDの出力自体を禁止することができるので、従来構成に比べて、データDの不正コピーをより適切に防止することが可能となる。
【0036】
なお、上記では、意図的にでたらめな暗号解読処理を行う構成を例に挙げて説明を行ったが、本発明の構成はこれに限定されるものではなく、正しい暗号解読処理とは異なる暗号解読処理を行う構成であれば、いかなる構成であっても構わない。
【0037】
次に、本発明に係る記憶装置の第3実施形態について、図3を参照しながら詳細に説明する。図3は、本発明に係る記憶装置の第3実施形態を示すブロック図である。
【0038】
図3に示すように、本実施形態の記憶装置は、先出の第1実施形態とほぼ同様の構成から成り、セレクタ207に代えて、エンコーダ209を有する点に特徴を有している。そこで、第1実施形態と同様の構成要素については、図1と同一の符号を付すことで重複した説明を省略し、以下では、本実施形態の特徴部分であるエンコーダ209を中心に詳細な説明を行うことにする。
【0039】
エンコーダ209は、論理和演算器206の出力信号に基づいて、メモリ100に格納されたデータDの出力を禁止する出力制御部である。より具体的に述べると、エンコーダ209は、メモリ100から読み出されたデータDを出力する際に、論理和演算器206の出力信号に基づいて、所定の鍵情報を用いて正しい暗号化処理を行うか、ダミーの鍵情報を用いて意図的にでたらめな暗号化処理を行うかを決定する。
【0040】
このような構成とすることにより、データDの不正コピーが疑われる状況下において、エンコーダ209は、メモリ100から読み出されたデータDに対して、全くでたらめな暗号化処理(言い換えればその可逆性を前提としない暗号化処理)を施して出力する。従って、記憶装置から不正に出力されたデータ(ここでは第1実施形態に倣ってダミーデータDDと称する)の内容は不明なものとなるため、これを利用することは不可能となる。特に、エンコーダ209でダミーの鍵情報を複数切り替えながらでたらめな暗号化処理を行う構成とすれば、事実上、ダミーデータDDの暗号解読処理は不可能なものとなる。
【0041】
このように、本実施形態の記憶装置であれば、メモリ100に格納されたデータDの出力自体を禁止することができるので、従来構成に比べて、データDの不正コピーをより適切に防止することが可能となる。
【0042】
なお、上記では、意図的にでたらめな暗号化処理を行う構成を例に挙げて説明を行ったが、本発明の構成はこれに限定されるものではなく、正しい暗号化処理とは異なる暗号化処理を行う構成であれば、いかなる構成であっても構わない。
【0043】
次に、本発明に係る記憶装置の第4実施形態について、図4を参照しながら詳細に説明する。図4は、本発明に係る記憶装置の第4実施形態を示すブロック図である。
【0044】
図4に示すように、本実施形態の記憶装置は、先出の第1実施形態とほぼ同様の構成から成り、セレクタ207に代えてアドレス制御部210を有する点に特徴を有している。そこで、第1実施形態と同様の構成要素については、図1と同一の符号を付すことで重複した説明を省略し、以下では、本実施形態の特徴部分であるアドレス制御部210を中心に詳細な説明を行うことにする。
【0045】
アドレス制御部210は、論理和演算器206の出力信号に基づいて、メモリ100に格納されたデータDの出力を禁止する出力制御部である。より具体的に述べると、アドレス制御部210は、論理和演算器206の出力信号がローレベルであるときには、メモリ100に対するアドレス動作を許可する一方、論理和演算器206の出力信号がハイレベルであるときには、メモリ100に対するアドレス動作を禁止する。
【0046】
このような構成とすることにより、データDの不正コピーが疑われる状況下において、アドレス制御部210は、メモリ100に対するアドレス動作を禁止して、メモリ100に格納されたデータDの読み出し自体を禁止することができるので、従来構成に比べて、データDの不正コピーをより適切に防止することが可能となる。
【0047】
次に、インクリメントチェック部203、及び、エラー検出部204の第1構成例について、図5を参照しながら詳細に説明する。図5は、インクリメントチェック部203、及び、エラー検出部204の第1構成例を示すブロック図である。なお、以下で説明する回路構成は、一のデータDにコードとアドレスの両方が含まれていること(いわゆるCPUダイレクトコマンドがデータDとして格納されていること)を前提とするものである。
【0048】
図5に示したように、第1構成例のインクリメントチェック部203は、アドレスラッチ部1と、アドレス加算部2aと、アドレス比較部3と、を有して成り、エラー検出部204は、Dフリップフロップ4及び5と、論理積演算器6と、を有して成る。
【0049】
アドレスラッチ部1は、リード信号RDの立上がりエッジをトリガとして、メモリ100に供給された前回のアドレス信号ADDをラッチする手段である。
【0050】
アドレス加算部2aは、アドレスラッチ部1でラッチされた前回のアドレス信号ADDを1つだけインクリメントして出力する手段である。
【0051】
アドレス比較部3は、メモリ100に供給されている現在のアドレス信号ADD(以下では適宜、出力信号A1と呼ぶ)とアドレス加算部2aの出力信号B1とを比較し、両者が一致していればアドレスのインクリメント動作が行われていると判断する手段である。
【0052】
Dフリップフロップ4は、リード信号RDの立下がりエッジをトリガとして、コードチェック部201の出力信号をラッチ出力する手段である。なお、コードチェック部201の出力信号は、例えば、データDに先述の監視対象コードが含まれていればハイレベルとなり、含まれていなければローレベルとなる2値信号である。
【0053】
Dフリップフロップ5は、リード信号RDの立下がりエッジをトリガとして、インクリメントチェック部203の出力信号をラッチ出力する手段である。なお、インクリメントチェック部203の出力信号は、例えば、出力信号A1、B1のアドレス値が一致していればハイレベルとなり、一致していなければローレベルとなる2値信号である。
【0054】
論理積演算器6は、Dフリップフロップ4の出力信号X1とDフリップフロップ5の出力信号Y1との論理積演算を行い、その演算結果をエラーフラグERRとして論理和演算器206(図5では不図示)に出力する手段である。すなわち、エラーフラグERRは、出力信号X1、Y1の両方がハイレベルであればハイレベルとなり、その余の場合にはローレベルとなる。
【0055】
なお、図5では、タイミング制御部202が独立の回路ブロックとして明示されていないが、先出のアドレスラッチ部1やDフリップフロップ4、5の動作は、いずれもリード信号RDに基づいて同期されている。すなわち、図5に例示した構成において、タイミング制御部202は、インクリメントチェック部203とエラー検出部204の同期機能を実現する手段として、これらの回路ブロック内に包含されていると言える。
【0056】
次に、上記構成から成るインクリメントチェック部203及びエラー検出部204の第1動作例について、図6を参照しながら詳細に説明する。図6は、上記構成から成るインクリメントチェック部203及びエラー検出部204の第1動作例を説明するタイミングチャートであり、リード信号RD、アドレス信号ADD、出力信号A1、B1、X1、Y1、及び、エラーフラグERRが描写されている。なお、図6の上段には、正規アクセス時の挙動が示されており、図6の下段には、不正コピー時の挙動が示されている。
【0057】
まず、メモリ100に対して正当なアクセスが行われている場合について、図6の上段を参照しながら説明する。
【0058】
メモリ100から読み出されるデータDに監視対象コードが含まれていなければ、メモリ100に供給されるアドレス信号ADDは、ホスト(CPU)によって1つずつインクリメントされていくので、アドレス比較部3で比較される出力信号A1、B1は、Dフリップフロップ5のラッチタイミング(リード信号RDの立下がりエッジ)において互いに一致する形となり、アドレス比較部3の出力信号、延いては、Dフリップフロップ5の出力信号Y1がハイレベルとされる。一方、コードチェック部201では、データDに監視対象コードが含まれていないという判断の下、その出力信号がローレベルとされ、延いては、Dフリップフロップ4の出力信号X1がローレベルとされる。その結果、論理積演算器5で生成されるエラーフラグERRは、出力信号Y1の論理レベルに依ることなく、ローレベルとなる(時刻t1〜t4を参照)。
【0059】
また、図6中のハッチング部分で示した通り、メモリ100から読み出されるデータDに監視対象コードが含まれていた場合、そのコード実行時においてメモリ100に供給されるアドレス信号ADD(出力信号A1)は、ホスト(CPU)によって所定のアドレス値(図6ではアドレス値「b」)にジャンプされる。一方、アドレス比較部3においてアドレスジャンプ後の出力信号A1と比較される出力信号B1は、アドレスジャンプ前に供給されていた前回のアドレス信号ADD(図6ではアドレス値「a+2」)を1つだけインクリメントして得られるため、そのアドレス値は「a+3」となる。このように、メモリ100から読み出されるデータDに監視対象コードが含まれていた場合、アドレス比較部3で比較される出力信号A1、B1は、Dフリップフロップ5のラッチタイミング(リード信号RDの立下がりエッジ)において互いに不一致となり、アドレス比較部3の出力信号、延いては、Dフリップフロップ5の出力信号Y1がローレベルとされる。一方、コードチェック部201では、データDに監視対象コードが含まれているという判断の下、その出力信号がハイレベルとされ、延いては、Dフリップフロップ4の出力信号X1がハイレベルとされる。その結果、論理積演算器5で生成されるエラーフラグERRは、出力信号Y1の論理レベルに応じてローレベルとなる(時刻t4〜t5を参照)。
【0060】
このように、メモリ100に対して正当なアクセスが行われている場合には、メモリ100から読み出されるデータDのコードに合致したアドレス動作が行われて、出力信号X1、Y1のいずれか一方がローレベルとなるため、エラーフラグERRは常にローレベルに維持される。
【0061】
次に、メモリ100に格納されたデータDの不正コピーが疑われる場合について、図6の下段を参照しながら説明する。
【0062】
先にも述べたように、メモリ100に格納されたデータDの不正コピーが行われている場合には、データDに含まれるコードの内容とは何ら関係なく、アドレスのインクリメント動作が行われて、メモリ100に格納されたデータDがそのアドレス順に連続して読み出されていく。すなわち、データDの不正コピー時には、先述の監視対象コードに基づいてアドレスのジャンプ動作が行われるべきタイミングであっても、これを無視してアドレスのインクリメント動作が行われる。その結果、アドレス比較部3で比較される出力信号A1、B1は、Dフリップフロップ5のラッチタイミング(リード信号RDの立下がりエッジ)において互いに一致する形となり、アドレス比較部3の出力信号、延いては、Dフリップフロップ5の出力信号Y1が常にハイレベルに維持される。一方、コードチェック部201では、データDに監視対象コードが含まれているという判断の下、その出力信号がハイレベルとされ、延いては、Dフリップフロップ4の出力信号X1がハイレベルとされる。その結果、論理積演算器5で生成されるエラーフラグERRは、出力信号Y1の論理レベルに応じてハイレベルとなる(時刻t4〜t5を参照)。
【0063】
このように、メモリ100に格納されたデータDの不正コピーが疑われる場合には、メモリ100から読み出されるデータDのコードに合致したアドレス動作が行われず、出力信号X1、Y1の両方がハイレベルとなるため、エラーフラグERRはハイレベルに遷移される。
【0064】
すなわち、上記の第1動作例では、コードチェック部201で監視対象コードが検出されたにも関わらず、インクリメントチェック部203でアドレスのインクリメント動作が検出されたとき、エラー検出部204でエラーフラグERRが生成されることになる。
【0065】
次に、上記構成から成るインクリメントチェック部203及びエラー検出部204の第2動作例について、図7を参照しながら詳細に説明する。図7は、上記構成から成るインクリメントチェック部203及びエラー検出部204の第2動作例を説明するタイミングチャートであり、リード信号RD、アドレス信号ADD、出力信号A1、B1、X1’、Y1’、及び、エラーフラグERRが描写されている。ここで、出力信号X1’、Y1’は、先に述べた出力信号X1、Y1の論理反転信号であり、例えば、Dフリップフロップ4、5を反転出力形式とすることにより、容易に実現することが可能である。若しくは、コードチェック部201やインクリメントチェック部203の出力論理自体を反転させておくことにより、出力信号X1’、Y1’を実現することも可能である。なお、図7の上段には、正規アクセス時の挙動が示されており、図7の下段には、不正コピー時の挙動が示されている。
【0066】
まず、メモリ100に対して正当なアクセスが行われている場合について、図7の上段を参照しながら説明する。
【0067】
メモリ100から読み出されるデータDに監視対象コードが含まれていなければ、メモリ100に供給されるアドレス信号ADDは、ホスト(CPU)によって1つずつインクリメントされていくので、アドレス比較部3で比較される出力信号A1、B1は、Dフリップフロップ5のラッチタイミング(リード信号RDの立下がりエッジ)において互いに一致する形となり、アドレス比較部3の出力信号、延いては、Dフリップフロップ5の出力信号Y1’がローレベルとされる。一方、コードチェック部201では、データDに監視対象コードが含まれていないという判断の下、その出力信号がハイレベルとされ、延いては、Dフリップフロップ4の出力信号X1’がハイレベルとされる。その結果、論理積演算器5で生成されるエラーフラグERRは、出力信号Y1’の論理レベルに応じてローレベルとなる(時刻t1〜t4を参照)。
【0068】
また、図7中のハッチング部分で示した通り、メモリ100から読み出されるデータDに監視対象コードが含まれていた場合、そのコード実行時においてメモリ100に供給されるアドレス信号ADD(出力信号A1)は、ホスト(CPU)によって所定のアドレス値(図7ではアドレス値「b」)にジャンプされる。一方、アドレス比較部3においてアドレスジャンプ後の出力信号A1と比較される出力信号B1は、アドレスジャンプ前に供給されていた前回のアドレス信号ADD(図7ではアドレス値「a+2」)を1つだけインクリメントして得られるため、そのアドレス値は「a+3」となる。このように、メモリ100から読み出されるデータDに監視対象コードが含まれていた場合、アドレス比較部3で比較される出力信号A1、B1は、Dフリップフロップ5のラッチタイミング(リード信号RDの立下がりエッジ)において互いに不一致となり、アドレス比較部3の出力信号、延いては、Dフリップフロップ5の出力信号Y1’がハイレベルとされる。一方、コードチェック部201は、データDに監視対象コードが含まれているという判断の下、その出力信号をローレベルとし、延いては、Dフリップフロップ4の出力信号X1’がローレベルとされる。その結果、論理積演算器5で生成されるエラーフラグERRは、出力信号Y1’の論理レベルに依ることなく、ローレベルとなる(時刻t4〜t5を参照)。
【0069】
このように、メモリ100に対して正当なアクセスが行われている場合には、メモリ100から読み出されるデータDのコードに合致したアドレス動作が行われて、出力信号X1’、Y1’のいずれか一方がローレベルとなるため、エラーフラグERRは常にローレベルに維持される。
【0070】
次に、メモリ100に格納されたデータDの不正コピーが疑われる場合について、図7の下段を参照しながら説明する。
【0071】
データDの不正コピー時には、メモリ100から読み出されたデータDに監視対象コードが含まれていなくても、アドレスのジャンプ動作が行われる場合がある。例えば、図7では、アドレス値「a+2」からアドレス値「b」に不正なジャンプ動作が生じている。一方、アドレス比較部3においてアドレスジャンプ後の出力信号A1と比較される出力信号B1は、アドレスジャンプ前に供給されていた前回のアドレス信号ADD(図7ではアドレス値「a+2」)を1つだけインクリメントして得られるため、そのアドレス値は、「a+3」となる。このように、アドレスの不正なジャンプ動作が行われた場合、アドレス比較部3で比較される出力信号A1、B1は、Dフリップフロップ5のラッチタイミング(リード信号RDの立下がりエッジ)において互いに不一致となり、アドレス比較部3の出力信号、延いては、Dフリップフロップ5の出力信号Y1’がハイレベルとされる。一方、コードチェック部201では、データDに監視対象コードが含まれていないという判断の下、その出力信号がハイレベルに維持され、延いては、Dフリップフロップ4の出力信号X1’がハイレベルに維持される。その結果、論理積演算器5で生成されるエラーフラグERRは、出力信号Y1’の論理レベルに応じてハイレベルとなる(時刻t4〜t5を参照)。
【0072】
このように、メモリ100に格納されたデータDの不正コピーが疑われる場合には、メモリ100から読み出されるデータDのコードに合致したアドレス動作が行われず、出力信号X1’、Y1’の両方がハイレベルとなるため、エラーフラグERRはハイレベルに遷移される。
【0073】
すなわち、上記の第2動作例では、コードチェック部201で監視対象コードが検出されていないにも関わらず、インクリメントチェック部203でアドレスのインクリメント動作が検出されなかったとき(言い換えれば不正なジャンプ動作が検出されたとき)に、エラー検出部204でエラーフラグERRが生成されることになる。
【0074】
次に、インクリメントチェック部203、及び、エラー検出部204の第2構成例について、図8を参照しながら詳細に説明する。図8は、インクリメントチェック部203、及び、エラー検出部204の第2構成例を示すブロック図である。なお、以下で説明する回路構成は、一のデータDにコードとアドレスの両方が含まれていること(いわゆるCPUダイレクトコマンドがデータDとして格納されていること)を前提とするものである。
【0075】
図8に示したように、第2構成例のインクリメントチェック部203は、アドレスラッチ部1と、アドレス減算部2bと、アドレス比較部3と、を有して成り、エラー検出部204は、Dフリップフロップ4及び5と、論理積演算器6と、を有して成る。
【0076】
アドレスラッチ部1は、リード信号RDの立上がりエッジをトリガとして、メモリ100に供給された前回のアドレス信号ADDをラッチする手段である。
【0077】
アドレス減算部2bは、メモリ100に供給されている現在のアドレス信号ADDを1つだけデクリメントして出力する手段である。
【0078】
アドレス比較部3は、アドレス減算部2aの出力信号A2とアドレスラッチ部1の出力信号B2とを比較し、両者が一致していればアドレスのインクリメント動作が行われていると判断する手段である。
【0079】
Dフリップフロップ4は、リード信号RDの立下がりエッジをトリガとして、コードチェック部201の出力信号をラッチ出力する手段である。なお、コードチェック部201の出力信号は、例えば、データDに先述の監視対象コードが含まれていればハイレベルとなり、含まれていなければローレベルとなる2値信号である。
【0080】
Dフリップフロップ5は、リード信号RDの立下がりエッジをトリガとして、インクリメントチェック部203の出力信号をラッチ出力する手段である。なお、インクリメントチェック部203の出力信号は、例えば、出力信号A2、B2の論理レベルが一致していればハイレベルとなり、一致していなければローレベルとなる2値信号である。
【0081】
論理積演算器6は、Dフリップフロップ4の出力信号X2とDフリップフロップ5の出力信号Y2との論理積演算を行い、その演算結果をエラーフラグERRとして論理和演算器206(図8では不図示)に出力する手段である。すなわち、エラーフラグERRは、出力信号X2、Y2の両方がハイレベルであればハイレベルとなり、その余の場合にはローレベルとなる。
【0082】
なお、図8では、タイミング制御部202が独立の回路ブロックとして明示されていないが、先出のアドレスラッチ部1やDフリップフロップ4、5の動作は、いずれもリード信号RDに基づいて同期されている。すなわち、図8に例示した構成において、タイミング制御部202は、インクリメントチェック部203とエラー検出部204の同期機能を実現する手段として、これらの回路ブロック内に包含されていると言える。
【0083】
次に、上記構成から成るインクリメントチェック部203及びエラー検出部204の第1動作例について、図9を参照しながら詳細に説明する。図9は、上記構成から成るインクリメントチェック部203及びエラー検出部204の第1動作例を説明するタイミングチャートであり、リード信号RD、アドレス信号ADD、出力信号A2、B2、X2、Y2、及び、エラーフラグERRが描写されている。なお、図9の上段には、正規アクセス時の挙動が示されており、図9の下段には、不正コピー時の挙動が示されている。
【0084】
まず、メモリ100に対して正当なアクセスが行われている場合について、図9の上段を参照しながら説明する。
【0085】
メモリ100から読み出されるデータDに監視対象コードが含まれていなければ、メモリ100に供給されるアドレス信号ADDは、ホスト(CPU)によって1つずつインクリメントされていくので、アドレス比較部3で比較される出力信号A2、B2は、Dフリップフロップ5のラッチタイミング(リード信号RDの立下がりエッジ)において互いに一致する形となり、アドレス比較部3の出力信号、延いては、Dフリップフロップ5の出力信号Y2がハイレベルとされる。一方、コードチェック部201では、データDに監視対象コードが含まれていないという判断の下、その出力信号がローレベルとされ、延いては、Dフリップフロップ4の出力信号X2がローレベルとされる。その結果、論理積演算器5で生成されるエラーフラグERRは、出力信号Y2の論理レベルに依ることなく、ローレベルとなる(時刻t1〜t4を参照)。
【0086】
また、図9中のハッチング部分で示した通り、メモリ100から読み出されるデータDに監視対象コードが含まれていた場合、そのコード実行時においてメモリ100に供給されるアドレス信号ADDは、ホスト(CPU)によって所定のアドレス値(図9ではアドレス値「b」)にジャンプされるので、アドレス減算部2bで生成される出力信号A2のアドレス値は「b−1」となる。一方、アドレス比較部3においてアドレスジャンプ後の出力信号A2と比較される出力信号B2は、アドレスジャンプ前に供給されていた前回のアドレス信号ADD(図9ではアドレス値「a+2」)をラッチして得られるため、そのアドレス値は「a+2」となる。このように、メモリ100から読み出されるデータDに監視対象コードが含まれていた場合、アドレス比較部3で比較される出力信号A2、B2は、Dフリップフロップ5のラッチタイミング(リード信号RDの立下がりエッジ)において互いに不一致となり、アドレス比較部3の出力信号、延いては、Dフリップフロップ5の出力信号Y2がローレベルとされる。一方、コードチェック部201では、データDに監視対象コードが含まれているという判断の下、その出力信号がハイレベルとされ、延いては、Dフリップフロップ4の出力信号X2がハイレベルとされる。その結果、論理積演算器5で生成されるエラーフラグERRは、出力信号Y2の論理レベルに応じてローレベルとなる(時刻t4〜t5を参照)。
【0087】
このように、メモリ100に対して正当なアクセスが行われている場合には、メモリ100から読み出されるデータDのコードに合致したアドレス動作が行われて、出力信号X2、Y2のいずれか一方がローレベルとなるため、エラーフラグERRは常にローレベルに維持される。
【0088】
次に、メモリ100に格納されたデータDの不正コピーが疑われる場合について、図9の下段を参照しながら説明する。
【0089】
先にも述べたように、メモリ100に格納されたデータDの不正コピーが行われている場合には、データDに含まれるコードの内容とは何ら関係なく、アドレスのインクリメント動作が行われて、メモリ100に格納されたデータDがそのアドレス順に連続して読み出されていく。すなわち、データDの不正コピー時には、先述の監視対象コードに基づいてアドレスのジャンプ動作が行われるべきタイミングであっても、これを無視してアドレスのインクリメント動作が行われる。その結果、アドレス比較部3で比較される出力信号A2、B2は、Dフリップフロップ5のラッチタイミング(リード信号RDの立下がりエッジ)において互いに一致する形となり、アドレス比較部3の出力信号、延いては、Dフリップフロップ5の出力信号Y2が常にハイレベルに維持される。一方、コードチェック部201では、データDに監視対象コードが含まれているという判断の下、その出力信号がハイレベルとされ、延いては、Dフリップフロップ4の出力信号X2がハイレベルとされる。その結果、論理積演算器5で生成されるエラーフラグERRは、出力信号Y2の論理レベルに応じてハイレベルとなる(時刻t4〜t5を参照)。
【0090】
このように、メモリ100に格納されたデータDの不正コピーが疑われる場合には、メモリ100から読み出されるデータDのコードに合致したアドレス動作が行われず、出力信号X2、Y2の両方がハイレベルとなるため、エラーフラグERRはハイレベルに遷移される。
【0091】
すなわち、上記の第1動作例では、コードチェック部201で監視対象コードが検出されたにも関わらず、インクリメントチェック部203でアドレスのインクリメント動作が検出されたとき、エラー検出部204でエラーフラグERRが生成されることになる。
【0092】
次に、上記構成から成るインクリメントチェック部203及びエラー検出部204の第2動作例について、図10を参照しながら詳細に説明する。図10は、上記構成から成るインクリメントチェック部203及びエラー検出部204の第2動作例を説明するタイミングチャートであって、リード信号RD、アドレス信号ADD、出力信号A2、B2、X2’、Y2’、及び、エラーフラグERRが描写されている。ここで、出力信号X2’、Y2’は、先に述べた出力信号X2、Y2の論理反転信号であり、例えば、Dフリップフロップ4、5を反転出力形式とすることにより、容易に実現することが可能である。若しくは、コードチェック部201やインクリメントチェック部203の出力論理自体を反転させておくことにより、出力信号X2’、Y2’を実現することも可能である。なお、図10の上段には、正規アクセス時の挙動が示されており、図10の下段には、不正コピー時の挙動が示されている。
【0093】
まず、メモリ100に対して正当なアクセスが行われている場合について、図10の上段を参照しながら説明する。
【0094】
メモリ100から読み出されるデータDに監視対象コードが含まれていなければ、メモリ100に供給されるアドレス信号ADDは、ホスト(CPU)によって1つずつインクリメントされていくので、アドレス比較部3で比較される出力信号A2、B2は、Dフリップフロップ5のラッチタイミング(リード信号RDの立下がりエッジ)において互いに一致する形となり、アドレス比較部3の出力信号、延いては、Dフリップフロップ5の出力信号Y2’がローレベルとされる。一方、コードチェック部201では、データDに監視対象コードが含まれていないという判断の下、その出力信号がハイレベルとされ、延いては、Dフリップフロップ4の出力信号X2’がハイレベルとされる。その結果、論理積演算器5で生成されるエラーフラグERRは、出力信号Y2’の論理レベルに応じてローレベルとなる(時刻t1〜t4を参照)。
【0095】
また、図10中のハッチング部分で示した通り、メモリ100から読み出されるデータDに監視対象コードが含まれていた場合、そのコード実行時においてメモリ100に供給されるアドレス信号ADDは、ホスト(CPU)によって所定のアドレス値(図10ではアドレス値「b」)にジャンプされるので、アドレス減算部2bで生成される出力信号A2のアドレス値は「b−1」となる。一方、アドレス比較部3でアドレスジャンプ後の出力信号A2と比較される出力信号B2は、アドレスジャンプ前に供給されていた前回のアドレス信号ADD(図10ではアドレス値「a+2」)をラッチして得られるため、そのアドレス値は「a+2」となる。このように、メモリ100から読み出されるデータDに監視対象コードが含まれていた場合、アドレス比較部3で比較される出力信号A2、B2は、Dフリップフロップ5のラッチタイミング(リード信号RDの立下がりエッジ)において互いに不一致となり、アドレス比較部3の出力信号、延いては、Dフリップフロップ5の出力信号Y2’がハイレベルとされる。一方、コードチェック部201では、データDに監視対象コードが含まれているという判断の下、その出力信号がローレベルとされ、延いては、Dフリップフロップ4の出力信号X2’がローレベルとされる。その結果、論理積演算器5で生成されるエラーフラグERRは、出力信号Y2’の論理レベルに依ることなく、ローレベルとなる(時刻t4〜t5を参照)。
【0096】
このように、メモリ100に対して正当なアクセスが行われている場合には、メモリ100から読み出されるデータDのコードに合致したアドレス動作が行われて、出力信号X2’、Y2’のいずれか一方がローレベルとなるため、エラーフラグERRは常にローレベルに維持される。
【0097】
次に、メモリ100に格納されたデータDの不正コピーが疑われる場合について、図10の下段を参照しながら説明する。
【0098】
データDの不正コピー時には、メモリ100から読み出されたデータDに監視対象コードが含まれていなくても、アドレスのジャンプ動作が行われる場合がある。例えば、図10の例では、アドレス値「a+2」からアドレス値「b」に不正なジャンプ動作が生じており、アドレス減算部2bで生成される出力信号A2のアドレス値は「b−1」となる。一方、アドレス比較部3でアドレスジャンプ後の出力信号A2と比較される出力信号B2は、アドレスジャンプ前に供給されていた前回のアドレス信号ADD(図10ではアドレス値「a+2」)をラッチして得られるため、そのアドレス値は「a+2」となる。このように、アドレスの不正なジャンプ動作が行われた場合、アドレス比較部3で比較される出力信号A2、B2は、Dフリップフロップ5のラッチタイミング(リード信号RDの立下がりエッジ)において互いに不一致となり、アドレス比較部3の出力信号、延いては、Dフリップフロップ5の出力信号Y2’がハイレベルとされる。一方、コードチェック部201では、データDに監視対象コードが含まれていないという判断の下、その出力信号がハイレベルに維持され、延いては、Dフリップフロップ4の出力信号X2’がハイレベルに維持される。その結果、論理積演算器5で生成されるエラーフラグERRは、出力信号Y2’の論理レベルに応じてハイレベルとなる(時刻t4〜t5を参照)。
【0099】
このように、メモリ100に格納されたデータDの不正コピーが疑われる場合には、メモリ100から読み出されるデータDのコードに合致したアドレス動作が行われず、出力信号X2’、Y2’の両方がハイレベルとなるため、エラーフラグERRはハイレベルに遷移される。
【0100】
すなわち、上記の第2動作例では、コードチェック部201で監視対象コードが検出されていないにも関わらず、インクリメントチェック部203でアドレスのインクリメント動作が検出されなかったとき(言い換えれば不正なジャンプ動作が検出されたとき)に、エラー検出部204でエラーフラグERRが生成されることになる。
【0101】
なお、本発明の構成は、上記実施形態のほか、発明の主旨を逸脱しない範囲で種々の変更を加えることが可能である。
【0102】
例えば、上記実施形態では、コードに合致したアドレス動作が行われているか否かを判定する手法として、アドレスのジャンプ動作を伴うコードの実行時に、アドレスのインクリメント動作が行われたか否かを検出する構成を例に挙げて説明を行ったが、本発明の構成はこれに限定されるものではなく、その余の手法を用いても構わない。
【0103】
また、上記実施形態では、データDの格納手段として、読み出し専用のメモリ100を用いた構成を例示して説明を行ったが、本発明の構成はこれに限定されるものではなく、データDの読み書きが可能なフラッシュメモリやEEPROM[Electrically Erasable and Programmable Read Only Memory]などを用いても構わない。
【産業上の利用可能性】
【0104】
本発明は、ゲームカートリッジ、ICカード、セキュリティ機器などに用いられる記憶装置の不正コピーを防止する技術として利用することが可能である。
【図面の簡単な説明】
【0105】
【図1】は、本発明に係る記憶装置の第1実施形態を示すブロック図である。
【図2】は、本発明に係る記憶装置の第2実施形態を示すブロック図である。
【図3】は、本発明に係る記憶装置の第3実施形態を示すブロック図である。
【図4】は、本発明に係る記憶装置の第4実施形態を示すブロック図である。
【図5】は、インクリメントチェック部203、及び、エラー検出部204の第1構成例を示すブロック図である。
【図6】は、第1構成例の第1動作例を説明するタイミングチャートである。
【図7】は、第1構成例の第2動作例を説明するタイミングチャートである。
【図8】は、インクリメントチェック部203、及び、エラー検出部204の第2構成例を示すブロック図である。
【図9】は、第2構成例の第1動作例を説明するタイミングチャートである。
【図10】は、第2構成例の第2動作例を説明するタイミングチャートである。
【符号の説明】
【0106】
100 読み出し専用メモリ(ROM)
200 不正コピー防止回路
201 コードチェック部(コード解析部)
202 タイミング制御部
203 インクリメントチェック部(アドレス解析部)
204 エラー検出部
205 初期アドレスチェック部
206 論理和演算器
207 セレクタ
208 デコーダ
209 エンコーダ
210 アドレス制御部
1 アドレスラッチ部
2a アドレス加算部
2b アドレス減算部
3 アドレス比較部
4、5 Dフリップフロップ
6 論理積演算器

【特許請求の範囲】
【請求項1】
データを格納するメモリと;
前記メモリから読み出されたデータにアドレスのジャンプ動作を伴う所定の監視対象コードが含まれているか否かを検出するコード解析部と;
アドレスのインクリメント動作が行われているか否かを検出するアドレス解析部と;
前記コード解析部と前記アドレス解析部の解析結果を参照してエラーフラグを生成するエラー検出部と;
前記エラー検出部の判定結果に基づいて、前記メモリに格納されたデータの出力を禁止する出力制御部と;
を有して成る記憶装置であって、
前記アドレス解析部は、
前記メモリに供給された前回のアドレス信号をラッチするアドレスラッチ部と;
前記アドレスラッチ部でラッチされた前回のアドレス信号をインクリメントして出力するアドレス加算部と;
前記メモリに供給されている現在のアドレス信号と前記アドレス加算部の出力信号とを比較し、両者が一致していればアドレスのインクリメント動作が行われていると判断するアドレス比較部と;
を有して成ることを特徴とする記憶装置。
【請求項2】
データを格納するメモリと;
前記メモリから読み出されたデータにアドレスのジャンプ動作を伴う所定の監視対象コードが含まれているか否かを検出するコード解析部と;
アドレスのインクリメント動作が行われているか否かを検出するアドレス解析部と;
前記コード解析部と前記アドレス解析部の解析結果を参照してエラーフラグを生成するエラー検出部と;
前記エラー検出部の判定結果に基づいて、前記メモリに格納されたデータの出力を禁止する出力制御部と;
を有して成る記憶装置であって、
前記アドレス解析部は、
前記メモリに供給された前回のアドレス信号をラッチするアドレスラッチ部と;
前記メモリに供給されている現在のアドレス信号をデクリメントして出力するアドレス減算部と;
前記アドレスラッチ部の出力信号と前記アドレス減算部の出力信号とを比較し、両者が一致していればアドレスのインクリメント動作が行われていると判断するアドレス比較部と;
を有して成ることを特徴とする記憶装置。
【請求項3】
前記エラー検出部は、前記コード解析部で前記監視対象コードが検出されたにも関わらず、前記アドレス解析部でアドレスのインクリメント動作が検出されたときに、前記エラーフラグを生成することを特徴とする請求項1または請求項2に記載の記憶装置。
【請求項4】
前記エラー検出部は、前記コード解析部で前記監視対象コードが検出されていないにも関わらず、前記アドレス解析部でアドレスのインクリメント動作が検出されなかったときに、前記エラーフラグを生成することを特徴とする請求項1または請求項2に記載の記憶装置。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate


【公開番号】特開2010−33123(P2010−33123A)
【公開日】平成22年2月12日(2010.2.12)
【国際特許分類】
【出願番号】特願2008−191613(P2008−191613)
【出願日】平成20年7月25日(2008.7.25)
【出願人】(000116024)ローム株式会社 (3,539)
【Fターム(参考)】