(57)【要約】 【課題】  コントローラの動作プログラムの一部を不揮発性メモリ上の修正済みプログラムに置き換え可能にする技術において、不揮発性メモリ及びコントローラ内の記憶情報に対する改ざんや漏洩を防止する。【解決手段】  パワーオンリセットに際して暗号化された代替プログラム（ＳＭＤＬｋ）があればこれを不揮発性メモリ（４）から揮発性メモリ（１２）に転送し、その代替プログラムを復号するのは実際に代替プログラムを実行するときとする。リセット処理から抜けてデータプロセッサ（１０）によるデータ処理が可能にされるまでに長い待ち時間を要しない。一旦復号された代替プログラムは再利用可能に揮発性メモリに保持するから実行する度に復号を行なことを要しない。代替プログラムは暗号化されているので不揮発性メモリをコントローラ（３）から物理的に分離して代替プログラムが不正にダンプされてもデータの解析は困難とされる。【選択図】        図１
2005332221.tif 000002
【特許請求の範囲】
【請求項１】
データ処理を行うコントローラと、前記コントローラの制御を受けて書き換え可能に情報を記憶する第１の不揮発性メモリとを有し、
前記コントローラは、データプロセッサと、データプロセッサによってアクセスされる書き換え不可能な第２の不揮発性メモリと、データプロセッサによってアクセスされる書き換え可能な揮発性メモリとを有し、
前記第２の不揮発性メモリは前記データプロセッサの処理プログラムを保有し、
第１の不揮発性メモリは前記処理プログラムの一部を代替する暗号化された代替プログラムの格納領域を有し、
前記データプロセッサは、パワーオンリセットに際して前記暗号化された代替プログラムがあればこれを前記揮発性メモリに転送し、転送後前記暗号化された代替プログラムを実行するとき当該代替プログラムを復号し、復号した代替プログラムをそれ以降再利用可能に前記揮発性メモリに格納する記憶装置。
【請求項２】
前記代替プログラムを復号するタイミングは、揮発性メモリに転送された前記代替プログラムを初めて実行するときである請求項１記載の記憶装置。
【請求項３】
前記第２の不揮発性メモリは前記処理プログラムを実行するとき使用される第１のジャンプテーブルを有し、前記第１の不揮発性メモリは前記代替プログラムにより一部が代替された処理プログラムを実行するとき使用される第２のジャンプテーブルの格納領域を有し、前記格納領域は暗号化された第２のジャンプテーブルの格納に利用され、
前記データプロセッサは、パワーオンリセット解除後に暗号化された代替プログラムを前記揮発性メモリに転送するとき、第２のジャンプテーブルを復号し、復号した第２のジャンプテーブルをそれ以降前記第１のジャンプテーブルの代わりに利用可能に前記揮発性メモリに格納する、請求項１記載の記憶装置。
【請求項４】
前記第２の不揮発性メモリは、夫々暗号化された前記代替プログラム及び第２のジャンプテーブルを前記第１の不揮発性メモリに書き込む書き込み制御プログラムを保有する請求項３記載の記憶装置。
【請求項５】
前記第２の不揮発性メモリは、暗号化された前記代替プログラム及び暗号化された第２のジャンプテーブルを復号するための復号処理プログラムを有する請求項３記載の記憶装置。
【請求項６】
前記第２ジャンプテーブルは、前記処理プログラムの中で参照される第１テーブル領域と、前記復号処理プログラムの中で参照される第２テーブル領域とを有し、
前記第１テーブル領域内で前記代替プログラムの配置アドレス情報を参照するのに割当てられる第１参照領域には前復号処理プログラムの配置アドレス情報が記憶され、前記第２テーブル領域内で前記第１参照領域に対応する第２参照領域には前記第１参照領域に割当てられる前記代替プログラムの配置アドレス情報が記憶され、
前記データプロセッサは、前記第１参照領域が保有するアドレス情報を参照してそのアドレスに配置された前記復号処理プログラムを実行することにより、対応する第２参照領域のアドレス情報のアドレスから代替プログラムを取得し、取得した代替プログラムを復号すると共に、当該第１参照領域が保有するアドレス情報を対応する第２領域が保有するアドレス情報に変更する請求項５記載の記憶装置。
【請求項７】
前記データプロセッサは前記第２の不揮発性メモリ及び揮発性メモリをアドレス信号によりランダムアクセス可能であり、前記第１の不揮発性メモリを論理セクタ単位でファイルアクセス可能である、請求項６記載の記憶装置。
【請求項８】
前記コントローラは所定のメモリカード規格に準拠するホストインタフェースを有する請求項７記載の記憶装置。
【請求項９】
データ処理を行うコントローラと、前記コントローラの制御を受けて書き換え可能に情報を記憶する第１の不揮発性メモリとを有し、
前記コントローラは、データプロセッサと、データプロセッサによってアクセスされる書き換え不可能な第２の不揮発性メモリと、データプロセッサによってアクセスされる書き換え可能な揮発性メモリとを有し、
前記第２の不揮発性メモリは前記データプロセッサの処理プログラムと前記処理プログラムを実行するとき使用される第１のジャンプテーブルとを保有し、
第１の不揮発性メモリは前記処理プログラムの一部を代替する暗号化された代替プログラムの格納領域及び前記代替プログラムを実行するとき使用される第２のジャンプテーブルの格納領域を有し、前記格納領域は暗号化された第２のジャンプテーブルの格納に利用され、
前記データプロセッサは、パワーオンリセットに際して前記暗号化された代替プログラムがあればこれを前記揮発性メモリに転送すると共に、第２のジャンプテーブルを復号し、復号した第２のジャンプテーブルをそれ以降前記第１のジャンプテーブルの代わりに利用可能に前記揮発性メモリに格納する記憶装置。
【請求項１０】
前記データプロセッサは、前記揮発性メモリに転送された前記暗号化されている代替プログラムを実行するとき当該代替プログラムを復号し、復号した代替プログラムをそれ以降再利用可能に前記揮発性メモリに格納する請求項９記載の記憶装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コントローラと不揮発性メモリを有する記憶装置においてコントローラの動作プログラムの一部を不揮発性メモリ上の修正済みプログラムと置き換える技術、例えばメモリカードに適用して有効な技術に関する。
【背景技術】
【０００２】
メモリカードコントローラとフラッシュメモリとを有するメモリカードにおいてそのメモリカードコントローラ内のＲＯＭのプログラムを容易に修正する方法として特許文献１に記載の方法がある。これは、フラッシュメモリに修正プログラムを置き、パワーオンでその修正プログラムをメモリカードコントローラ内のＲＡＭに転送し、ＲＯＭ上の修正対象になったプログラムに代えてＲＡＭ上の修正プログラムを実行可能にする。
【０００３】
また、フラッシュメモリに格納された記憶情報の改ざんや漏洩を防止するには、そのような情報を暗号化してフラッシュメモリに記憶する技術が有る。特許文献２には、フラッシュメモリに格納され、格納用暗号処理部で暗号化した個人情報管理用アプリケーション（高いセキュリティーを必要とする。）を格納鍵で復号して読み出せるようにしたフラッシュメモリーカードについて記載があり、記憶データが不正にダンプされてもそのままではデータを解析することを困難にするものである。特許文献３にはＩＣカードチップに実行させる為のアプリケーションプログラム（銀行取り引き、クレジット決済）の一部をフラッシュメモリチップ内のコマンド処理モジュールに暗号化して格納するメモリカードについて記載が有る。特許文献４には秘匿性の高い小容量データ（重要個人情報）をパンタレジスタントモジュール（表面保護膜を剥離した場合に下の配線相等も破壊されて回路の分解調査を不可能とするデバイス構造）の不揮発性メモリへ、秘匿性の低いデータ（ＣＰＵが実行するアプリケーション）はそのままフラッシュメモリへ記録するようにした技術が示される。
【０００４】
【特許文献１】特開平１１−２６５２８３号公報
【特許文献２】特開２００３−２５６２８２号公報
【特許文献３】特開２００３−９１７０４号公報
【特許文献４】特開２００２−２２９８６１号公報（対応米国特許出願１０／０６２４５１）
【発明の開示】
【発明が解決しようとする課題】
【０００５】
本発明者は、メモリカードコントローラとフラッシュメモリを有するメモリカードにおいてメモリカードコントローラの動作プログラムの一部をフラッシュメモリ上の修正済みプログラムに置き換える可能にする技術において、フラッシュメモリ上の修正済みプログラムはもとより、メモリカードコントローラ内のプログラムやデータに対しても改ざんや漏洩を防止することについて検討した。メモリカードコントローラのオンチップマスクＲＯＭに比べてフラッシュメモリは直接そのアクセス端子がチップに露出するから、メモリカードが分解されたとき、前者に比べて後者の方がその記憶情報に対する改ざんや漏洩を受け易い。このとき、上記特許文献２乃至４に記載されるように秘匿性の高いデータやプログラムは暗号化してフラッシュメモリに格納するのがよい。しかしながら、それだけでは、メモリカードのＲＯＭ内のプログラムに対して自由に修正を行うことができない。そのため、文献１に記載されるようにＲＯＭ内の全てのプログラムに対してジャンプテーブルを持つ必要があるが、この場合にはフラッシュメモリに格納されているジャンプテーブルに対する不正な改ざんや解析によってメモリカードコントローラのオンチップマスクＲＯＭ上のプログラム等に対する改ざんや漏洩の虞のあることが明らかにされた。例えば、ジャンプテーブルを改ざんしてメモリカードコントローラに不正なプログラムを実行させることによってメモリカードコントローラ内の秘匿性の高いデータを外部から参照可能にする等の不正アクセスが行なわれる虞がある。また、パワーオンリセット時にフラッシュメモリコントローラからメモリカードコントローラのＲＡＭに転送された暗号化状態のプログラムは実行前に復号されなければならないが、ＲＡＭへの転送と併せて復号も行なうと、プログラム容量が大きい場合にはリセット処理時間が長くなり過ぎてしまう。
【０００６】
本発明の目的は、コントローラの動作プログラムの一部を不揮発性メモリ上の修正済みプログラムに置き換え可能にする技術において、不揮発性メモリ上の修正済みプログラムはもとより、コントローラ内のプログラムやデータに対しても改ざんや漏洩の防止に資することができる記憶装置を提供することにある。
【０００７】
本発明の別の目的は、コントローラの動作プログラムの一部を不揮発性メモリ上の修正済みプログラムに置き換え可能にする技術におい、修正済みプログラムの容量が大きい場合にも置き換えの為の処理によってリセット処理後の動作開始の遅れが大きくならないようにすることにある。
【０００８】
本発明の前記並びにその他の目的と新規な特徴は本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【０００９】
本願において開示される発明のうち代表的なものの概要を簡単に説明すれば下記の通りである。
【００１０】
〔１〕記憶装置はデータ処理を行うコントローラ（３）と、前記コントローラの制御を受けて書き換え可能に情報を記憶する第１の不揮発性メモリ（４）とを有する。前記コントローラは、データプロセッサ（１０）と、データプロセッサによってアクセスされる書き換え不可能な第２の不揮発性メモリ（１１）と、データプロセッサによってアクセスされる書き換え可能な揮発性メモリ（１２）とを有する。前記第２の不揮発性メモリは前記データプロセッサの処理プログラム（ＰＧＭ）を保有し、前記第１の不揮発性メモリは前記処理プログラムの一部を代替する暗号化された代替プログラム（ＳＭＤＬｋ）の格納領域（２０）を有する。前記データプロセッサは、パワーオンリセットに際して前記暗号化された代替プログラムがあればこれを前記揮発性メモリに転送し、転送後前記暗号化された代替プログラムを実行するとき当該代替プログラムを復号し、復号した代替プログラムをそれ以降再利用可能に前記揮発性メモリに格納する。
【００１１】
上記によれば、パワーオンリセットに際して前記暗号化された代替プログラムがあればこれを前記揮発性メモリに転送するが、その代替プログラムを復号するのは実際に代替プログラムを実行するときである。従って、リセット処理から抜けてデータプロセッサによるデータ処理が可能にされるまでに長い時間待つことを要しない。一旦復号された代替プログラムは再利用可能に揮発性メモリに保持されるから代替プログラムを実行する度に毎回その復号を行なう煩わしさはない。尚、代替プログラムは暗号化されているので第1の不揮発性メモリをコントローラから物理的にもしくは電気的に分離して代替プログラムを不正にダンプしてもそのままではデータを解析することは困難とされている。
【００１２】
前記代替プログラムを復号するタイミングは、揮発性メモリに転送された前記代替プログラムを初めて実行するときであるのが望ましい。一度も実行されずに動作電源が遮断される場合もあるからである。また、高速の処理速度を要求されるプログラムを代替する場合には予めパワーオンリセット中に復号しておくように、パワーオンリセットの処理を変更することも可能である。
【００１３】
ジャンプテーブルを利用して前記処理プログラムを実行するプログラムの実行形態に着目する。例えば、前記第２の不揮発性メモリは前記処理プログラムを実行するとき使用される第１のジャンプテーブル（ＴＢＬ）を有し、前記第１の不揮発性メモリは前記代替プログラムにより一部が代替された処理プログラムを実行するとき使用される第２のジャンプテーブル（ＳＴＢＬ）の格納領域（２１）を有し、前記格納領域は暗号化された第２のジャンプテーブルの格納に利用される。前記データプロセッサは、パワーオンリセット解除後に暗号化された代替プログラムを前記揮発性メモリに転送するとき、第２のジャンプテーブルを復号し、復号した第２のジャンプテーブルをそれ以降前記第１のジャンプテーブルの代わりに利用可能に前記揮発性メモリに格納する。これによれば、代替プログラムにより修正された処理プログラムの実行に使用される第２のジャンプテーブルは暗号化されて第１の不揮発性メモリに格納されているから、第１の不揮発性メモリをメモリカードコントローラから物理的にもしくは電気的に分離してジャンプテーブルを不正にダンプできても、その内容を解析したり不正目的のために改ざんすることは困難とされる。仮にジャンプテーブルを改ざんしてコントローラに不正なプログラムを実行させることができれば、コントローラ内の秘匿性の高いデータを外部から参照可能にする等の不正アクセスが行なわれる虞がある。
【００１４】
本発明の具体的な形態として、前記第２の不揮発性メモリは、夫々暗号化された前記代替プログラム及び第２のジャンプテーブルを前記第１の不揮発性メモリに書き込む書き込み制御プログラム（ＭＤＬ（ＰＭ・ＥＲ））を保有する。記憶装置が適用システムに搭載された状態でもプログラムやジャンプテーブルを容易に更新することが可能になる。
【００１５】
本発明の具体的な形態として、復号処理プログラムは、復号演算モジュール（ハードウェア）を使用して復号する。なお、復号処理プログラムが処理全てを行っても良い。
【００１６】
本発明の具体的な形態では、前記ジャンプテーブルを書き換えて前記復号処理プログラムの起動と代替プログラムの起動を切り換え制御する。すなわち、前記第２ジャンプテーブルは、前記処理プログラムの中で参照される第１テーブル領域（３１）と、前記復号処理プログラムの中で参照される第２テーブル領域（３２）とを有し、前記第１テーブル領域内で前記代替プログラムの配置アドレス情報を参照するのに割当てられる第１参照領域（３３）には前復号処理プログラムの配置アドレス情報が記憶され、前記第２テーブル領域内で前記第１参照領域に対応する第２参照領域（３４）には前記第１参照領域に割当てられる前記代替プログラムの配置アドレス情報が記憶される。前記データプロセッサは、前記第１参照領域が保有するアドレス情報を参照してそのアドレスに配置された前記復号処理プログラムを実行することにより、対応する第２参照領域のアドレス情報のアドレスから代替プログラムを取得し、取得した代替プログラムを復号すると共に、当該第１参照領域が保有するアドレス情報を対応する第２領域が保有するアドレス情報に変更する。これにより、代替プログラムを最初の実行タイミングで復号でき、それ以降復号された代替プログラムを直接実行可能になる。
【００１７】
前記データプロセッサは例えば前記第２の不揮発性メモリ及び揮発性メモリをアドレス信号によりランダムアクセス可能であり、前記第１の不揮発性メモリを論理セクタ単位でファイルアクセス可能である。前記コントローラは所定のメモリカード規格に準拠するホストインタフェースを有する。
【００１８】
〔２〕暗号化されたジャンプテーブルの復号に着目すると、記憶装置はデータ処理を行うコントローラと、前記コントローラの制御を受けて書き換え可能に情報を記憶する第１の不揮発性メモリとを有し、前記コントローラは、データプロセッサと、データプロセッサによってアクセスされる書き換え不可能な第２の不揮発性メモリと、データプロセッサによってアクセスされる書き換え可能な揮発性メモリとを有し、前記第２の不揮発性メモリは前記データプロセッサの処理プログラムと前記処理プログラムを実行するとき使用される第１のジャンプテーブルとを保有する。前記第１の不揮発性メモリは前記処理プログラムの一部を代替する暗号化された代替プログラムの格納領域及び前記代替プログラムを実行するとき使用される第２のジャンプテーブルの格納領域を有する。前記格納領域は暗号化された第２のジャンプテーブルの格納に利用される。前記データプロセッサは、パワーオンリセットに際して前記暗号化された代替プログラムがあればこれを前記揮発性メモリに転送すると共に、第２のジャンプテーブルを復号し、復号した第２のジャンプテーブルをそれ以降前記第１のジャンプテーブルの代わりに利用可能に前記揮発性メモリに格納する。
【００１９】
代替プログラムは暗号化されているので第1の不揮発性メモリをコントローラから物理的にもしくは電気的に分離して代替プログラムを不正にダンプしてもそのままではデータを解析することは困難とされる。更に、代替プログラムにより修正された処理プログラムの実行に使用される第２のジャンプテーブルは暗号化されて第１の不揮発性メモリに格納されているから、第１の不揮発性メモリをコントローラから物理的にもしくは電気的に分離してジャンプテーブルを不正にダンプできても、その内容を解析したり不正目的のために改ざんすることは困難とされる。よって、ジャンプテーブルを改ざんしてコントローラに不正なプログラムを実行することは困難になり、コントローラ内の秘匿性の高いデータを外部から参照可能にする等の不正アクセスが行なわれる虞を未然に防止することができる。
【００２０】
前記データプロセッサは、前記揮発性メモリに転送された前記暗号化されている代替プログラムを実行するとき当該代替プログラムを復号し、復号した代替プログラムをそれ以降再利用可能に前記揮発性メモリに格納してよい。パワーオンリセット処理から抜けてデータプロセッサによるデータ処理が可能にされるまでに長い時間待つことを要しない。一旦復号された代替プログラムは再利用可能に揮発性メモリに保持されるから代替プログラムを実行する度に毎回その復号を行なう煩わしさはない。
【発明の効果】
【００２１】
本願において開示される発明のうち代表的なものによって得られる効果を簡単に説明すれば下記の通りである。
【００２２】
すなわち、コントローラの動作プログラムの一部を不揮発性メモリ上の修正済みプログラムに置き換え可能にする技術において、不揮発性メモリ上の修正済みプログラムはもとより、コントローラ内のプログラムやデータに対しても改ざんや漏洩の防止に資することができる。
【００２３】
コントローラの動作プログラムの一部を不揮発性メモリ上の修正済みプログラムに置き換え可能にする技術におい、修正済みプログラムの容量が大きい場合にも置き換えの為の処理によってリセット処理後の動作開始の遅れが大きくならないようにすることができる。
【発明を実施するための最良の形態】
【００２４】
図１には本発明の一例に係るメモリカードが示される。メモリカード（ＭＣＲＤ）１はカード基板に、データ処理を行うコントローラとしてのメモリカードコントローラ（ＭＣＮＴ）３と前記メモリカードコントローラ３の制御を受けて書き換え可能に情報を記憶する第１の不揮発性メモリとしてのフラッシュメモリ（ＦＬＡＳＨ）４とを有する。フラッシュメモリ４は１個又は複数個のフラッシュメモリチップによって構成される。メモリカードコントローラ３は例えばシングルチップで構成される。前記メモリカードコントローラ３は、例えばデータプロセッサ（ＭＰＵ）１０、データプロセッサ１０によってアクセスされる書き換え不可能な第２の不揮発性メモリとしてのマスクＲＯＭ（ＭｓｋＲＯＭ）１１、データプロセッサ１０によってアクセスされる書き換え可能な揮発性メモリとしてのＲＡＭ（ランダムアクセスメモリ）１２、インタフェース回路（ＨＭＩＦ）１３及びデータバッファ（ＤＢＵＦ）１４を有する。
【００２５】
前記インタフェース回路１３はホスト機器（ＨＯＳＴ）１５及び前記フラッシュメモリ４とインタフェースされる。メモリカードコントローラ３とホスト機器１５とのインタフェース形態はメモリカード１のカード仕様によって決まり、そのカード仕様に準拠したメモリカードコマンドに応答する処理を行う。例えば、マルチメディアカード（ＭｕｌｔｉＭｅｄｉａＣａｒｄ）の仕様に準拠する。ＭｕｌｔｉＭｅｄｉａＣａｒｄは、ＩｎｆｉｎｅｏｎＴｅｃｈｎｏｌｏｇｉｅｓＡＧの登録商標である。フラッシュメモリ４とのインタフェース形態はファイルアクセス形態とされる。すなわち、メモリカードコントローラ３がフラッシュメモリ４をファイルストレージとしてアクセス制御する。前記メモリカードコントローラ３は、ホスト機器１５から与えられるアクセスコマンドでアクセス対象論理アドレス（論理セクタアドレス）が指定されると、それに対応する物理アドレスを生成し、フラッシュメモリ４の仕様にしたがったメモリアクセスコマンドをフラッシュメモリ４に発行して、フラッシュメモリ４をアクセス制御する。
【００２６】
前記マスクＲＯＭ１１は前記データプロセッサ１０の処理プログラムＰＧＭ及び前記処理プログラムＰＧＭを実行するときに使用する第１のジャンプテーブル（初期ジャンプテーブル）ＴＢＬ等を有する。データプロセッサ１０はその処理プログラムＰＧＭを実行することによって前記ホストインタフェース動作及フラッシュメモリインタフェース動作などを制御する。処理プログラムＰＧＭは、例えば機能単位にモジュール化されたプログラムモジュールＭＤＬｉ（ｉ＝１〜ｎ）の集合として構成され、リセット解除の直後に所定のプログラムモジュールＭＤＬ１が実行開始され、プログラムモジュールＭＤＬｉ内で他のプログラムモジュールＭＤＬｘにジャンプしながら処理を継続するようになっている。ジャンプ元プログラムモジュールにはジャンプテーブルの参照に用いるテーブルアドレスが記述され、そのテーブルアドレスで参照される領域にはジャンプ先プログラムモジュールの先頭アドレス情報が保持されている。データプロセッサ１０はジャンプ命令をデコードすると、その命令のアドレスフィールドに記述されているテーブルアドレスのジャンプテーブル領域からアドレス情報を取得し、そのアドレス情報が示すアドレスにプログラムの実行アドレスを切り換える。これによって、そのプログラムアドレスで指定される別のプログラムモジュールに実行アドレスが遷移される。
【００２７】
メモリカードコントローラ３は前記処理プログラムＰＧＭの部分的な修正に対応するためにＦＯＦ（ファーム・オン・フラッシュ）機能を有する。このＦＯＦ機能について説明する。
【００２８】
フラッシュメモリ４は前記処理プログラムの一部を代替する暗号化された代替プログラムとしての修正プログラムモジュールＳＭＤＬｋ（ｋ＝１〜ｎの任意の数）の格納領域２０と、前記修正プログラムモジュールＳＭＤＬｋにより一部が代替された処理プログラムを実行するとき使用される暗号化された第２のジャンプテーブル（修正ジャンプテーブル）ＳＴＢＬの格納領域２１と、前記領域２０，２１に修正モジュールＳＭＤＬｋ及び修正ジャンプテーブルＳＴＢＬが格納されたか否かを示すためのフラグ情報ＦＬＧの格納領域２２を有する。
【００２９】
図２には前記領域２０，２１に修正プログラムモジュールＳＭＤＬｋ及び修正ジャンプテーブルＳＴＢＬが格納されていないときの処理プログラムの実行態様が例示される。パワーオンリセットに際して、動作電源電圧とクロック発振周波数が安定した後、データプロセッサ１０は、先ず前記領域２２のフラグ情報ＦＬＧを参照し、前記領域２０，２１に修正プログラムモジュールＳＭＤＬｋ及び修正ジャンプテーブルＳＴＢＬが格納されていないときは、ＲＯＭ１１上の初期ジャンプテーブルＴＢＬをＲＡＭ１２の所定記憶領域に転送する（ＴＲＳ）。その後の処理プログラムの実行では例えばプログラムモジュールＭＤＬ１から他のプログラムモジュールＭＤＬｉへジャンプするには、ＲＡＭ１２上の初期ジャンプテーブルＴＢＬを参照して当該他のプログラムモジュールＭＤＬｉのプログラムアドレスを取得して、命令実行順序を変更する（ＢＲＣ）。
【００３０】
図３にはホスト機器１５からメモリカード１へのデータ書き込み態様が例示される。ホスト機器１５からメモリカード１に安全にデータを転送するために転送データは暗号化される。セキュアモジュールとしての修正プログラムモジュールＳＭＤＬｋ及び修正ジャンプテーブルＳＴＢＬは製造者鍵で暗号化され且つメモリカード１の公開鍵で暗号化された状態でホスト機器１５から転送されてくる。その他の非セキュアモジュールとしてのデータなどはメモリカード１の公開鍵で暗号化された状態でホスト機器１５から転送されてくる。ホスト機器１５から転送されたデータは一時的にデータバッファ１４に蓄積され、その後データプロセッサ１０がメモリカード１の秘密鍵でそれらを復号することにより、製造者鍵で暗号化されているセキュアモジュールと平文の非セキュアモジュールを取り出すことができる。セキュアモジュールとしての修正プログラムモジュールＳＭＤＬｋに及び修正ジャンプテーブルＳＴＢＬは暗号化された状態でフラッシュメモリ４に保存される。これにより、フラッシュメモリ４をメモリカード１から分離してその記憶情報が不正にダンプされることがあっても、その内容は容易に解析され難い。特に、修正ジャンプテーブルＳＴＢＬも暗号化されているので、修正ジャンプテーブルＳＴＢＬの内容を解析してこれを不正目的のために改ざんすることも困難であり、修正ジャンプテーブルＳＴＢＬを改ざんしてデータプロセッサ１０に不正なプログラムを実行させることが抑制でき、修正ジャンプテーブルＳＴＢＬの改ざんによってメモリカードコントローラ３内に保持されている秘匿性の高いデータやプログラムが外部から参照可能にされる等の不正アクセスが行なわれる虞も未然に防止することが可能である。尚、修正プログラムモジュールＳＭＤＬｋに及び修正ジャンプテーブルＳＴＢＬをフラッシュメモリ４に書き込み制御するプログラムＭＤＫ（ＰＭ・ＥＲ）は例えば一つのプログラムモジュールＭＤＬｍとして処理プログラムＰＧＭに含まれている。
【００３１】
図４には前記領域２０，２１に修正プログラムモジュールＳＭＤＬｋ及び修正ジャンプテーブルＳＴＢＬが格納されているときのパワーオンリセット時における動作態様が例示される。パワーオンリセットに際して、動作電源電圧とクロック発振周波数が安定した後、データプロセッサ１０は、先ず前記領域２２のフラグ情報ＦＬＧを参照し、前記領域２０，２１に修正プログラムモジュールＳＭＤＬｋ及び修正ジャンプテーブルＳＴＢＬが格納されているときは、フラッシュメモリ４上の修正ジャンプテーブルＳＴＢＬ及び修正プログラムモジュールＳＭＤＬｋをＲＡＭ１２の所定記憶領域に転送する。このとき、データプロセッサ１０は修正ジャンプテーブルＳＴＢＬに対しては復号し、修正プログラムモジュールＳＭＤＬｋに対しては暗号状態のまま、ＲＡＭ１２への転送を行う。暗号化された修正プログラムモジュールに対して一度に全て復号するとその処理時間が長くなるので、パワーオンリセット時の処理時間が大幅に増えないように考慮されている。
【００３２】
図５には図４の処理後における修正プログラムモジュールの実行動作形態が例示される。ＲＡＭ１２に転送された修正プログラムモジュールＳＭＤＬｋはデータプロセッサ１０が最初に実行する時に復号する。復号された修正プログラムモジュールＳＭＤＬｋはそれ以降再利用可能にＲＡＭ１２に保持される。ＲＡＭに転送された修正プログラムモジュールＳＭＤＬｋを復号するのは実際にその修正プログラムモジュールを実行するときである。従って、リセット処理から抜けてデータプロセッサ１０によるデータ処理が可能にされるまでに長い時間待つことを要しない。一旦復号された修正プログラムモジュールは再利用可能にフラッシュメモリ４に保持されるから修正プログラムモジュールＳＭＤＬｋを実行する度に毎回その復号を行なう煩わしさはない。
【００３３】
前記修正プログラムモジュールＳＭＤＬｋ及び修正ジャンプテーブルＳＴＢＬに対する復号処理はデータプロセッサ１０が復号処理プログラムＭＤＬ（ＤＥＣ）を実行することによって行われる。前記復号処理プログラムＭＤＬ（ＤＥＣ）は、例えば一つのプログラムモジュールＭＤＬｈとして処理プログラムＰＧＭに含まれている。
【００３４】
図６には暗号化されている修正プログラムモジュールを初めての実行する時に復号しそれ以降再利用可能にＲＡＭに保持させる処理手順が例示される。ここでは、前記修正ジャンプテーブルＳＴＢＬを書き換えて前記復号処理プログラムの起動と修正プログラムモジュールの起動を切り換え制御する。すなわち、前記修正ジャンプテーブルＳＴＢＬは、前記処理プログラムの中で参照される第１テーブル領域３１と、前記復号処理プログラムＭＤＬ（ＤＥＣ）の中で参照される第２テーブル領域３２とを有する。第１テーブル領域３１にはプログラムモジュールＭＤＬ０〜ＭＤＬｎの順番にそのプログラムモジュールの配置アドレス情報（プログラムモジュールの先頭アドレス）を保持するための領域が割り当てられている。ＭＤＬｉ＿ＳＡＤＲはプログラムモジュールＭＤＬｉの先頭アドレスを意味する。特にパワーオン時に復号されてＲＡＭ１４に転送された状態では、前記第１テーブル領域３１内において前記修正プログラムモジュールの配置アドレス情報を参照するのに割当てられる第１参照領域３３には復号処理プログラムＭＤＬ（ＤＥＣ）の配置アドレス情報としてその先頭アドレスＭＤＬ（ＤＥＣ）＿ＳＡＤＲが保持されている。前記第２テーブル領域３２内には前記第１参照領域３３に対応する第２参照領域３４を有し、第２参照領域３４には対応する前記第１参照領域３３に割当てられる前記修正プログラムモジュールの配置アドレス情報としてその先頭アドレスが記憶される。具体的には、図６の修正プログラムモジュール復号前の修正ジャンプテーブルＳＴＢＬにおいて、修正箇所１、修正箇所ｍに対応される第１参照領域３３には復号処理プログラムＭＤＬ（ＤＥＣ）の先頭アドレスＭＤＬ（ＤＥＣ）＿ＳＡＤＲが保持されている。このとき、修正箇所１の第１参照領域３３に対応される第２参照領域３４には修正プログラムモジュールＳＭＤＬ３の先頭アドレスＳＭＤＬ３＿ＳＡＤＲが保持されている。修正箇所ｍの第１参照領域３３に対応される第２参照領域３４には修正プログラムモジュールＳＭＤＬｋの先頭アドレスＳＭＤＬｋ＿ＳＡＤＲが保持されている。特に図示はしないが、第１参照領域３３はそれが修正プログラムモジュールの先頭アドレスの格納に割り当てられるときテーブルの先頭から何番目の修正プログラムモジュールであるかを示す識別コードを付随する。この識別コードは復号処理モジュールＭＤＬ（ＤＥＣ）で認識される。
【００３５】
前記データプロセッサ１０は、前記第１テーブル領域３１が保有するアドレス情報を参照しながらプログラム処理を進めていくとき、そのアドレス情報で示されるアドレスに復号処理プログラムが配置されていると、復号処理プログラムはそのとき参照された第１参照領域３３が保有するアドレス情報に付随する識別コードを用いて第２テーブル領域３２の対応する第２参照領域３４が保有する修正プログラムモジュールの配置アドレスを取得する。例えばデータプロセッサ１０が現在実行中のプログラムモジュール中におけるプログラムジャンプの命令によるジャンプ先の指示が修正ジャンプテーブルＳＴＢＬの修正箇所１のアドレスで与えられるとき、データプロセッサ１０はそこから復号処理プログラムモジュールの先頭アドレスＭＤＬ（ＤＥＣ）＿ＳＡＤＲを取得して復号処理プログラムモジュールの実行に遷移する。このときデータプロセッサ１０は直前のジャンプ命令で参照した第１参照領域３３が保有するアドレス情報に付随する識別コードを読み込む。図６の例では第１番目になっている。データプロセッサ１０はその識別コードに基づいて、第２テーブル領域３２の第１番目に対応する第２参照領域３４が保有する修正プログラムモジュールの配置アドレスＳＭＤＬ３＿ＳＡＤＲを取得する。データプロセッサ１０はそのアドレスＳＭＤＬ３＿ＳＡＤＲで指定される暗号化状態の修正プログラムモジュールを復号する。復号した修正プログラムモジュールは、同じアドレスＳＭＤＬ３＿ＳＡＤＲで指定される領域に上書きされる。その後、今回の復号処理プログラムモジュールの参照に用いた第１参照領域３３の配置アドレス情報ＭＤＬ（ＤＥＣ）＿ＳＡＤＲを対応する第２参照領域３４の配置アドレス情報ＳＭＤＬ３＿ＳＡＤＲに書き換える。この書き換えが完了されたときの修正ジャンプテーブルＳＴＢＬの状態は図６における修正プログラムモジュール復号後の状態として図示される。第１参照領域３３の書き換え完了後、データプロセッサ１０の処理は復号処理モジュールへのジャンプ前に戻って修正箇所１で指定された修正プログラムモジュールの先頭アドレスＳＭＤＬ３＿ＳＡＤＲに遷移される。上記復号処理は修正プログラムモジュール毎にそれが最初に実行されるときだけ行われる。これにより、暗号化された修正プログラムモジュールを最初の実行タイミングで復号でき、それ以降復号された修正プログラムモジュールを直接実行可能になる。
【００３６】
図７には前記領域２０，２１に修正プログラムモジュールＳＭＤＬｋ及び修正ジャンプテーブルＳＴＢＬが格納されているときの処理プログラムの実行態様が例示される。パワーオンリセットに際して、動作電源電圧とクロック発振周波数が安定した後、データプロセッサ１０は、前記領域２２のフラグ情報ＦＬＧを参照し、前記領域２０，２１に修正プログラムモジュールＳＭＤＬｋ及び修正ジャンプテーブルＳＴＢＬが格納されているときは、フラッシュメモリ４上の修正ジャンプテーブルＳＴＢＬ及び修正プログラムモジュールＳＭＤＬｋがＲＡＭ１２の所定記憶領域に転送され、前述の如く復号される。その後の処理プログラムの実行で例えばプログラムモジュールＭＤＬ１が修正ジャンプテーブルＳＴＢＬを参照したとき、ジャンプ先がＲＡＭ１２上のアドレスであれば、そのアドレスで指定されるＲＡＭ１２上の修正プログラム、例えば修正プログラムモジュールＳＭＤＬｋが実行される。
【００３７】
図８には前記パワーオンリセット時の動作手順がフローチャートで示される。電源投入（Ｓ１）によって初期化処理（リセット処理）が開始される（Ｓ２）。これによってデータプロセッサが命令実行可能にされると、先ず、ジャンプテーブルＴＢＬがＲＡＭ１２に転送される（Ｓ３）。そして、フラッシュメモリ４に修正ファームウェアが存在するか判別される（Ｓ４）。修正ファームウェアとは修正ジャンプテーブルＳＴＢＬ及び修正プログラムモジュールＳＭＤＬｋである。その判定は前記フラグＦＬＧを用いて行えばよい。修正ファームウェアが存在しているときは修正ジャンプテーブルＳＴＢＬ及び修正プログラムモジュールＳＭＤＬｋをＲＡＭ１２に読み込む（Ｓ５）。読み込んだ修正ジャンプテーブルＳＴＢＬ及び修正プログラムモジュールＳＭＤＬｋに対してデータ検証を行う（Ｓ６）。例えば、ＣＲＣ（Cyclic Redundancy Check）コードやハッシュ値の計算などにより改ざんされていないかの検証を行う。検証後、暗号化されている修正ジャンプテーブルＳＴＢＬを復号する（Ｓ７）。復号後又は修正ファームウェアがないときは次の処理に移る。特に図示はしないが、データ検証の結果、改ざんされている虞があるときはカード使用禁止などのエラー処理を行えばよい。
【００３８】
図９にはハッシュ値が付加された修正ジャンプテーブル及び修正プログラムモジュールを示す。暗号化された状態におけるハッシュ値を付加しておけばよい。ハッシュ値を取得したときの関数を用いて当該データのハッシュ値を演算し、取得されたハッシュ値と、データに付随されたハッシュ値とを比較し、相違していればデータが改ざんを受けた虞があるということになる。
【００３９】
図１０には修正プログラムモジュールを用いたデータ処理手順が例示される。別のプログラムモジュールにジャンプするとき、修正ジャンプテーブルを参照し（Ｓ１１）、ジャンプ先アドレスを取得し（Ｓ１２）、そのジャンプ先アドレスのプログラムが復号処理プログラムモジュールＭＤＬ（ＤＥＣ）であれば、前述の如く領域３４から復号対象とされる修正プログラムモジュールＳＭＤＬｋの配置アドレスを取得し（Ｓ１３）、そこから取得した修正プログラムモジュールＳＭＤＬｋを復号して、復号前の修正プログラムモジュールを復号後の修正プログラムモジュールに置き換える（Ｓ１４）。その後、修正ジャンプテーブルに格納された当該復号処理プログラムモジュールの配置アドレスＭＤＬ（ＤＥＣ）＿ＳＡＤＲを修正プログラムモジュールの配置アドレスＳＭＤＬｋ＿ＳＡＤＲに変更して（Ｓ１５）、当該修正プログラムモジュールＳＭＤＬｋを実行する（Ｓ１６）。Ｓ１２においてそのジャンプ先アドレスのプログラムが修正プログラムモジュールＳＭＤＬｋであれば、そのまま当該修正プログラムモジュールＳＭＤＬｋを実行すればよい（Ｓ１６）。
【００４０】
図１１には修正プログラムモジュールを用いたデータ処理手順の別のが例示される。ここでは、修正ジャンプテーブルにおいてジャンプ先アドレスを指定する領域には復号の未完及び完了の何れにおいてもジャンプ先アドレスが指定されている。ジャンプ先アドレスで指定される修正プログラムモジュールに対する復号の有無は復号判別テーブルが保有する情報に基づいて判別する。復号判別テーブルは修正プログラムモジュールの配置アドレス情報に対応して復号の有無を示す情報を保有する。
【００４１】
別のプログラムモジュールにジャンプするとき、修正ジャンプテーブルを参照し（Ｓ２１）、ジャンプ先アドレスを取得し（Ｓ２２）、そのジャンプ先アドレスのプログラムが復号済か否かを前記復号判別テーブルを用いて判定する（Ｓ２３）。これにより、ジャンプ先の修正プログラムモジュールが復号済でなければ、暗号化されている修正プログラムモジュールＳＭＤＬｋをＲＡＭ１２から読み込み（Ｓ２４）、これを復号して、復号前の修正プログラムモジュールを復号後の修正プログラムモジュールに置き換え（Ｓ２５）、置き換えた修正プログラムモジュールに関する復号判別テーブルの対応フラグを復号済に変更し（Ｓ２６）、置き換えた修正プログラムモジュールＳＭＤＬｋを実行する（Ｓ２７）。ジャンプ先の修正プログラムモジュールＳＭＤＬｋが復号済の場合には復号処理をスキップして、当該修正プログラムモジュールＳＭＤＬｋを実行すればよい（Ｓ２７）。
【００４２】
以上説明したメモリカードによれば以下の作用効果を得ることができる。
【００４３】
修正プログラムモジュールＳＭＤＬｋは暗号化されているので、フラッシュメモリ４をメモリカードコントローラ３から物理的にもしくは電気的に分離して修正プログラムモジュールＳＭＤＬｋを不正にダンプしてもそのままではデータを解析することは困難とされている。
【００４４】
パワーオンリセットに際して前記暗号化された修正プログラムモジュールＳＭＤＬｋがあればこれをフラッシュメモリ４からＲＡＭ１２に転送するが、その修正プログラムモジュールＳＭＤＬｋを復号するのは実際に修正プログラムモジュールＳＭＤＬｋを実行するときである。従って、リセット処理から抜けてデータプロセッサ１０によるデータ処理が可能にされるまでに長い時間待つことを要しない。一旦復号された修正プログラムモジュールＳＭＤＬｋは再利用可能にＲＡＭ１２に保持されるから修正プログラムモジュールＳＭＤＬｋを実行する度に毎回その復号を行なう煩わしさはない。
【００４５】
前記修正プログラムモジュールＳＭＤＬｋを復号するタイミングは、ＲＡＭ１２に転送された前記修正プログラムモジュールＳＭＤＬｋを初めて実行するときとされる。一度も実行されずに動作電源が遮断される場合に無駄な復号処理を行なわずに済む。
【００４６】
修正プログラムモジュールＳＭＤＬｋにより修正された処理プログラムＰＧＭの実行に使用される修正ジャンプテーブルＳＴＢＬは暗号化されてフラッシュメモリ４に格納されているから、フラッシュメモリ４をメモリカードコントローラ３から物理的にもしくは電気的に分離して修正ジャンプテーブルＳＴＢＬＫを不正にダンプできても、その内容を解析したり不正目的のために改ざんすることは困難とされる。仮に修正ジャンプテーブルＳＴＢＬを改ざんしてメモリカードコントローラ３に不正なプログラムを実行させることができれば、メモリカードコントローラ３内の秘匿性の高いデータを外部から参照可能にする等の不正アクセスが行なわれる虞があるからである。
【００４７】
データプロセッサ１０は、前記第１参照領域３３が保有するアドレス情報を参照してそのアドレスに配置された前記復号処理プログラムＭＤＬ（ＤＥＣ）を実行することにより、対応する第２参照領域３４のアドレス情報のアドレスから修正プログラムモジュールＳＭＤＬｋを取得し、取得した修正プログラムモジュールＳＭＤＬｋを復号すると共に、当該第１参照領域３３が保有するアドレス情報を対応する第２領域３４が保有するアドレス情報に変更する。これにより、修正プログラムモジュールＳＭＤＬｋを最初の実行タイミングで復号でき、それ以降復号された修正プログラムモジュールＳＭＤＬｋを直接実行可能になる。
【００４８】
以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
【００４９】
例えば、ＲＡＭ上おける復号された修正プログラムモジュールは暗号化された修正プログラムモジュールと同じアドレス範囲に格納することに限定されない。相互に異なるアドレス配置を与えてもよい。
【００５０】
また第１領域に対応する第２領域のアドレスマッピングは修正ジャンプテーブル上において何番目の修正プログラムモジュールであるかというオフセットによって決定する方法に限定されない。
【００５１】
第１の不揮発性メモリはフラッシュメモリに限定されない。ＥＥＰＲＯＭなどその他の記憶形式を有するものであってもよい。
【００５２】
メモリカードインタフェースはＭＭＣに限定されない。その他のメモリカード仕様に準拠してもよい。
【００５３】
修正ジャンプテーブルの復号処理モジュールと修正プログラムモジュールの復号処理モジュールは完全に相違してもよいし、復号アルゴリズムの手順制御部分を共通化した一部共通の個別プログラムモジュールであってもよい。
【図面の簡単な説明】
【００５４】
【図１】本発明の一例に係るメモリカードを示すブロック図である。
【図２】フラッシュメモリの所定領域に修正プログラムモジュールＳＭＤＬｋ及び修正ジャンプテーブルＳＴＢＬが格納されていないときの処理プログラムの実行態様を例示する説明図である。
【図３】ホスト機器からメモリカードへのデータ書き込み態様を例示する説明図である。
【図４】フラッシュメモリの所定領域に修正プログラムモジュールＳＭＤＬｋ及び修正ジャンプテーブルＳＴＢＬが格納されているときのパワーオンリセット時における動作態様を例示する説明図である。
【図５】図４の処理後における修正プログラムモジュールの実行動作形態を例示する説明図である。
【図６】暗号化されている修正プログラムモジュールを初めての実行する時に復号しそれ以降再利用可能にＲＡＭに保持させる処理手順を例示する説明図である。
【図７】フラッシュメモリの所定領域に修正プログラムモジュールＳＭＤＬｋ及び修正ジャンプテーブルＳＴＢＬが格納されているときの処理プログラムの実行態様を例示する説明図である。
【図８】パワーオンリセット時の動作手順を示すフローチャートである。
【図９】ハッシュ値が付加された修正ジャンプテーブル及び修正プログラムモジュールを示す説明図である。
【図１０】修正プログラムモジュールを用いたデータ処理手順を例示するフローチャートである。
【図１１】修正プログラムモジュールを用いたデータ処理手順の別の例を示すフローチャートである。
【符号の説明】
【００５５】
１  メモリカード
３  メモリカードコントローラ
４  フラッシュメモリ
１０  ＭＰＵ
１１  マスクＲＯＭ
１２  ＲＡＭ
１３  インタフェース回路
１４  データバッファ
２０  修正プログラムモジュールの格納領域
２１  修正ジャンプテーブルの格納領域
２２  フラグ情報の格納領域
ＰＧＭ  処理プログラム
ＴＢＬ  初期ジャンプテーブル
ＭＤＬｉ  初期プログラムモジュール
ＳＴＢＬ  修正ジャンプテーブル
ＳＭＤＬｋ  修正プログラムモジュール
ＭＤＬ（ＤＥＣ）  復号処理プログラム
ＭＤＬ（ＰＧ・ＥＲ）  書き込み制御プログラム
３１  第１テーブル領域
３２  第２テーブル領域
３３  第１参照領域
３４  第２参照領域
ＭＤＬ（ＤＥＣ）＿ＳＡＤＲ  復号処理プログラムの先頭アドレス
ＳＭＤＬｋ＿ＳＡＤＲ  修正プログラムモジュールの先頭アドレス
【図１】
2005332221.tif 000003
【図２】
2005332221.tif 000004
【図３】
2005332221.tif 000005
【図４】
2005332221.tif 000006
【図５】
2005332221.tif 000007
【図６】
2005332221.tif 000008
【図７】
2005332221.tif 000009
【図８】
2005332221.tif 000010
【図９】
2005332221.tif 000011
【図１０】
2005332221.tif 000012
【図１１】
2005332221.tif 000013