しかしながら、ファームウエアの秘匿性が失われた場合、更新後のファームウエアであっても同様に秘匿性を失うことがあり、さらなるセキュリティの向上が求められる。
それ故に、本発明の目的は、ファームウエア等の外部から読み込まれるプログラムに対する秘匿性を向上することが可能なブートプログラム、情報処理装置、情報処理システム、情報処理方法、半導体装置、およびプログラムを提供することである。
上記目的を達成するために、本発明は例えば以下のような構成を採用し得る。なお、特許請求の範囲の記載を解釈する際に、特許請求の範囲の記載によってのみその範囲が解釈されるべきであることが理解され、特許請求の範囲の記載と本欄の記載とが矛盾する場合には、特許請求の範囲の記載が優先する。
本発明のブートプログラムの一構成例は、ファームウエアの起動前に情報処理装置のコンピュータによって実行される。ブートプログラムは、識別情報取得手段および鍵使用可否設定手段としてコンピュータを機能させる。識別情報取得手段は、ファームウエアの識別情報を取得する。鍵使用可否設定手段は、ファームウエアに関して使用される複数の鍵データのうち、識別情報に応じた範囲における鍵データの使用可否を設定する。
上記によれば、ファームウエアの起動前に実行されるブートプログラムにより、複数の鍵データが、ファームウエアの識別情報に応じた範囲で利用可能となるため、当該識別情報に応じてファームウエアの秘匿性を確保することができる。
また、上記ブートプログラムは、ファームウエアを読み出す読出手段として、コンピュータを、さらに機能させてもよい。この場合、上記識別情報取得手段は、読み出したファームウエアの識別情報を取得してもよい。
上記によれば、読み出したファームウエアによって鍵データの秘匿性を管理することができる。
また、上記識別情報取得手段は、現時点までに起動したファームウエアの識別情報を取得してもよい。
上記によれば、現時点までに起動したファームウエアの識別情報に応じて、鍵データの秘匿性を管理することができる。
また、上記識別情報は、ファームウエアに設定されているバージョンでもよい。
上記によれば、ファームウエアのバージョンによって鍵データの秘匿性を管理することができる。
また、上記鍵データは、バージョン毎に異なってもよい。上記鍵使用可否設定手段は、複数の鍵データのうち、識別情報取得手段が取得したバージョンより新しいバージョンに対応する鍵データを使用不可に設定してもよい。
上記によれば、新しいファームウエアのバージョンに対応する鍵データの秘匿性を確保することができる。
また、上記鍵使用可否設定手段は、ファームウエアを起動した後では、鍵データを少なくとも使用不可から使用可に設定変更ができなくてもよい。
上記によれば、ファームウエアを起動した後は、鍵データが使用不可から使用可に設定変更できないため、鍵データの秘匿性をさらに向上させることができる。
また、上記鍵使用可否設定手段は、複数の鍵データのうち、識別情報取得手段が取得したバージョンに対応する鍵データを使用可に設定し、当該バージョンより古いバージョンに対応する鍵データの少なくとも1つを使用可に設定してもよい。
上記によれば、古いバージョンに対応するプログラムの復号に用いる鍵データを使用可能に設定することができ、当該プログラムの復号等の処理が可能となる。
また、上記識別情報取得手段は、読出手段が読み出したファームウエアのヘッダに記述された識別情報を、取得したファームウエアの識別情報として取得してもよい。上記鍵使用可否設定手段は、ヘッダに記述された識別情報に応じて鍵データの使用可否を設定してもよい。
上記によれば、ファームウエアのヘッダ情報を利用して、鍵データの秘匿性を管理することができる。
また、上記ブートプログラムは、ファームウエア復号手段として、コンピュータをさらに機能させてもよい。ファームウエア復号手段は、鍵使用可否設定手段が鍵データの使用可否を設定する前に、複数の鍵データの何れかを用いて、識別情報取得手段が取得した識別情報に対応するファームウエアを復号する。
上記によれば、秘匿性が確保された鍵データを用いてファームウエアが復号されるため、当該ファームウエアの秘匿性も向上させることができる。
本発明の情報処理装置の一構成例は、鍵データ記憶手段、実行手段、識別情報取得手段、鍵使用可否設定手段、および起動手段を備える。鍵データ記憶手段は、ファームウエアに関して使用される複数の鍵データを記憶する。実行手段は、ブートプログラムを実行する。識別情報取得手段は、ブートプログラムの実行にしたがって、ファームウエアの識別情報を取得する。鍵使用可否設定手段は、複数の鍵データのうち、識別情報に応じた範囲における鍵データの使用可否を設定する。起動手段は、鍵データの使用可否が設定された後、識別情報取得手段が取得した識別情報に対応したファームウエアを起動する。
上記によれば、ファームウエアの起動前に実行されるブートプログラムにより、複数の鍵データが、ファームウエアの識別情報に応じた範囲で利用可能となるため、当該識別情報に応じてファームウエアの秘匿性を確保することができる。
また、上記情報処理装置は、起動識別情報記憶制御手段を、さらに備えてもよい。起動識別情報記憶制御手段は、起動手段が起動したファームウエアの識別情報を不揮発性メモリに記憶する。この場合、上記識別情報取得手段は、不揮発性メモリに記憶されている識別情報を、ファームウエアの識別情報として取得してもよい。上記鍵使用可否設定手段は、不揮発性メモリに記憶されている識別情報に応じて鍵データの使用可否を設定してもよい。
上記によれば、現時点までに起動したファームウエアの識別情報に応じて、鍵データの秘匿性を管理することができる。
また、上記鍵使用可否設定手段は、不揮発性メモリに記憶されている識別情報が更新された場合、当該更新後に鍵データの使用可否を再設定してもよい。
上記によれば、不揮発性メモリにおいて更新された識別情報に基づいて、即時ファームウエアを起動することができる。
また、上記情報処理装置は、暗号化/復号手段を、さらに備えてもよい。暗号化/復号手段は、起動手段がファームウエアを起動した後、使用可に設定された鍵データを用いて入力データを暗号化または復号する。
上記によれば、秘匿性が確保された鍵データを用いてファームウエア以外の入力データも暗号化または復号されるため、当該入力データの秘匿性も向上させることができる。
また、上記情報処理装置は、プログラム復号手段を、さらに備えてもよい。プログラム復号手段は、起動手段がファームウエアを起動した後、使用可に設定された鍵データを用いて他のプログラムを復号する。
上記によれば、秘匿性が確保された鍵データを用いてファームウエア以外のプログラムも復号されるため、当該プログラムの秘匿性も向上させることができる。
また、本発明は、上記各手段を備える情報処理システムや上記各手段で行われる動作を含む情報処理方法の形態で実施されてもよい。
また、本発明の半導体装置の一構成例は、プロセッサ、第1のメモリ、および第2のメモリを備える。第1のメモリは、ブートプログラムを記憶する。第2のメモリは、複数の鍵データを記憶する。プロセッサは、第1のメモリに記憶されているブートプログラムの実行により、識別情報取得手段、鍵使用可否設定手段、および起動手段として機能する。識別情報取得手段は、ファームウエアの識別情報を取得する。鍵使用可否設定手段は、第2のメモリに複数の鍵データが記憶されている場合、当該鍵データのうち、識別情報に応じた範囲における鍵データの使用可否を設定する。起動手段は、鍵データの使用可否が設定された後、識別情報取得手段が取得した識別情報に対応するファームウエアを起動する。
上記によれば、ファームウエアの起動前に実行されるブートプログラムにより、複数の鍵データが、ファームウエアの識別情報に応じた範囲で利用可能となるため、当該識別情報に応じてファームウエアの秘匿性を確保することができる。
また、本発明の情報処理装置の他の構成例は、内部プログラムを記憶するメモリを有し、当該内部プログラムの実行に続けて外部プログラムを実行する。情報処理装置は、鍵データ記憶手段、外部プログラム取得手段、識別情報取得手段、鍵使用可否設定手段、および起動手段を備える。鍵データ記憶手段は、複数の鍵データを記憶する。外部プログラム取得手段は、外部プログラムを情報処理装置の外部から取得する。識別情報取得手段は、外部プログラムの識別情報を取得する。鍵使用可否設定手段は、鍵データ記憶手段に記憶された鍵データのうち、識別情報に応じた範囲における鍵データの使用可否を設定する。起動手段は、鍵データの使用可否が設定された後、取得した外部プログラムを起動する。
上記によれば、外部プログラムの起動前に実行される内部プログラムにより、複数の鍵データが、情報処理装置の外部から読み込まれる外部プログラムの識別情報に応じた範囲で利用可能となるため、当該識別情報に応じて外部プログラムの秘匿性を確保することができる。
また、本発明のプログラムの一構成例は、更新可能なプログラムの起動前に情報処理装置のコンピュータによって実行されて更新不可能である。プログラムは、取得手段および鍵使用可否設定手段として、コンピュータを機能させる。取得手段は、更新可能なプログラムのバージョン情報を取得する。鍵使用可否設定手段は、取得したバージョン情報に基づいて、更新可能なプログラムに関して使用される複数の鍵データのうち、当該バージョン情報に応じた範囲における鍵データの使用可否を設定する。
上記によれば、複数の鍵データが、更新可能なプログラムのバージョン情報に応じた範囲で更新不可能なプログラムの実行によって利用可能となるため、当該バージョン情報に応じて更新可能なプログラムの秘匿性を確保することができる。
本発明のブートプログラムの他の構成例は、ファームウエアの起動前に情報処理装置のコンピュータによって実行される。ブートプログラムは、識別情報取得手段、鍵データ生成手段、ファームウエア復号手段、鍵データ生成無効化手段、およびファームウエア起動手段として、コンピュータを機能させる。識別情報取得手段は、ファームウエアの識別情報を取得する。鍵データ生成手段は、予めメモリに記憶されている鍵データと識別情報とに基づいて、新たな鍵データを生成する。ファームウエア復号手段は、生成された鍵データに基づいて、識別情報に対応したファームウエアを復号する。鍵データ生成無効化手段は、鍵データ生成手段による鍵データの生成を無効化する。ファームウエア起動手段は、復号されたファームウエアを起動させる。
上記によれば、ファームウエアの起動前に実行されるブートプログラムにより、ファームウエアを復号するための鍵データが当該ファームウエアの識別情報に応じて生成されて当該ファームウエアが復号されるとともに、当該鍵データを生成する機能が無効化されるため、ファームウエアに対する秘匿性を向上することができる。
上記ファームウエア起動手段は、鍵データ生成無効化手段が鍵データの生成を無効化した後に復号されたファームウエアを起動させてもよい。
上記によれば、ファームウエアを復号するための鍵データを生成する機能が無効化された後に当該ファームウエアが復号されるため、鍵データの秘匿性を確保することができる。
上記鍵データ生成無効化手段は、鍵データ生成手段による鍵生成機能を1回のみ利用可能に設定することによって、鍵データ生成手段による鍵データの生成を無効化してもよい。
上記によれば、ファームウエアを復号するための鍵データを生成する機能を1回のみ利用可能に設定することによって、鍵データの秘匿性を確保することができる。
上記鍵データ生成無効化手段は、ファームウエアが復号された後にメモリが記憶している鍵データを使用不可に設定することによって、当該鍵データを用いた新たな鍵データの生成を無効化してもよい。
上記によれば、ファームウエアが復号された後にメモリが記憶している鍵データを使用不可に設定することによって、秘匿性を確保した状態で新たな鍵データの生成を無効化することができる。
上記鍵データ生成無効化手段は、ファームウエアが復号された後に鍵データ生成手段へのアクセスを不可に設定することによって、鍵データ生成手段による鍵データの生成を無効化してもよい。
上記によれば、鍵データを生成する機能へのアクセスを不可に設定することによって、秘匿性を確保した状態で新たな鍵データの生成を無効化することができる。
上記メモリには、鍵データを生成するための単一の鍵データが記憶されてもよい。この場合、上記鍵データ生成手段は、メモリに記憶されている単一の鍵データと識別情報とに基づいて、新たな鍵データを生成してもよい。
上記によれば、単一の鍵データを用いて、識別情報が異なる複数のファームウエアの復号が可能となる。
上記ブートプログラムは、鍵データ無効化手段として、コンピュータを、さらに機能させてもよい。鍵データ無効化手段は、鍵データ生成手段が生成した新たな鍵データを無効化する。
上記によれば、新たに生成された鍵データを無効化することによって、当該鍵データの秘匿性を確保することができる。
上記ブートプログラムは、ファームウエアを読み出す読出手段として、コンピュータを、さらに機能させてもよい。この場合、上記識別情報取得手段は、読み出したファームウエアの識別情報を取得してもよい。
上記によれば、読み出したファームウエアに応じた鍵データを生成することができる。
上記識別情報取得手段は、現時点までに起動したファームウエアの識別情報を取得してもよい。
上記によれば、現時点までに起動したファームウエアの識別情報に応じた鍵データを生成することができる。
上記識別情報は、ファームウエアに設定されているバージョンでもよい。
上記によれば、ファームウエアのバージョンに応じた鍵データを生成することができる。
上記識別情報取得手段は、読出手段が読み出したファームウエアのヘッダに記述された識別情報を、取得したファームウエアの識別情報として取得してもよい。上記鍵データ生成手段は、予めメモリに記憶されている鍵データとヘッダに記述された識別情報とに基づいて、新たな鍵データを生成してもよい。
上記によれば、ファームウエアのヘッダ情報を利用して、当該ファームウエアに応じた鍵データを生成することができる。
また、本発明は、上記各手段を備える情報処理装置および情報処理システムや上記各手段で行われる動作を含む情報処理方法の形態で実施されてもよい。
また、本発明の半導体装置の他の構成例は、プロセッサ、第1のメモリ、および第2のメモリを備える。第1のメモリは、ブートプログラムを記憶する。第2のメモリは、鍵データを記憶する。プロセッサは、第1のメモリに記憶されているブートプログラムの実行により、識別情報取得手段、鍵データ生成手段、ファームウエア復号手段、鍵データ生成無効化手段、およびファームウエア起動手段として機能する。識別情報取得手段は、ファームウエアの識別情報を取得する。鍵データ生成手段は、第2のメモリに記憶されている鍵データと識別情報とに基づいて、新たな鍵データを生成する。ファームウエア復号手段は、生成された鍵データに基づいて、識別情報に対応したファームウエアを復号する。鍵データ生成無効化手段は、鍵データ生成手段による鍵データの生成を無効化する。ファームウエア起動手段は、復号されたファームウエアを起動させる。
上記によれば、ファームウエアの起動前に実行されるブートプログラムにより、ファームウエアを復号するための鍵データが当該ファームウエアの識別情報に応じて生成されて当該ファームウエアが復号されるとともに、当該鍵データを生成する機能が無効化されるため、ファームウエアに対する秘匿性を向上することができる。
また、本発明の情報処理装置の他の構成例は、内部プログラムを記憶するメモリを有し、当該内部プログラムの実行に続けて外部プログラムを実行する。情報処理装置は、鍵データ記憶手段、実行手段、外部プログラム取得手段、識別情報取得手段、鍵データ生成手段、復号手段、鍵データ生成無効化手段、および起動手段を備える。鍵データ記憶手段は、外部プログラムに関して使用される鍵データを記憶する。実行手段は、内部プログラムを実行する。外部プログラム取得手段は、外部プログラムを情報処理装置の外部から取得する。識別情報取得手段は、内部プログラムの実行にしたがって、外部プログラムの識別情報を取得する。鍵データ生成手段は、鍵データ記憶手段に記憶されている鍵データと識別情報とに基づいて、新たな鍵データを生成する。復号手段は、生成された鍵データに基づいて、識別情報に対応した外部プログラムを復号する。鍵データ生成無効化手段は、鍵データ生成手段による鍵データの生成を無効化する。起動手段は、復号された外部プログラムを起動させる。
上記によれば、外部プログラムの起動前に実行される内部プログラムにより、外部プログラムを復号するための鍵データが当該外部プログラムの識別情報に応じて生成されて当該外部プログラムが復号されるとともに、当該鍵データを生成する機能が無効化されるため、外部プログラムに対する秘匿性を向上することができる。
また、本発明のプログラムの他の構成例は、更新可能なプログラムの起動前に情報処理装置のコンピュータによって実行されて更新不可能である。プログラムは、取得手段、鍵データ生成手段、復号手段、鍵データ生成無効化手段、および起動手段として、コンピュータを機能させる。取得手段は、更新可能なプログラムのバージョン情報を取得する。鍵データ生成手段は、予めメモリに記憶されている鍵データと取得したバージョン情報とに基づいて、新たな鍵データを生成する。復号手段は、生成された鍵データに基づいて、バージョン情報に対応した更新可能なプログラムを復号する。鍵データ生成無効化手段は、鍵データ生成手段による鍵データの生成を無効化する。起動手段は、復号された更新可能なプログラムを起動させる。
上記によれば、更新不可能なプログラムの実行によって、更新可能なプログラムのバージョン情報に応じた鍵データが生成されるため、当該バージョン情報に応じた鍵データを生成することができるとともに、当該鍵データを生成する機能が無効化されるため、更新可能なプログラムに対する秘匿性を向上することができる。
本発明によれば、複数の鍵データが、ファームウエアの識別情報や外部から読み込まれる外部プログラムの識別情報に応じた範囲で利用可能となるため、当該識別情報に応じて鍵データの秘匿性を確保することができる。
(第1の実施形態)
図1を参照して、本発明の第1の実施形態に係る情報処理装置について説明する。なお、図1は、集積回路1を含む情報処理装置の一例を示すブロック図である。
例えば、上記情報処理装置は、集積回路1を含んでいる。ここで、上記情報処理装置は、交換可能なメモリカードや光ディスク等の記録媒体内に記憶された、または、サーバや他の装置から受信されたプログラムを実行可能である。なお、上記情報処理装置は、1以上の装置によって構成されてもよく、集積回路1は、複数の装置に分散して設けられてもよい。
上記情報処理装置は、集積回路1の他に、NAND9等が設けられている。また、集積回路1は、例えばSoC(System on a Chip)によって、1つの半導体チップ上にCPU2、暗号処理部3、ROM4、SRAM5、鍵データ記憶部6、バージョン情報記憶部7、およびNAND I/F8等が構成される。そして、CPU2は、暗号処理部3、ROM4、SRAM5、バージョン情報記憶部7、およびNAND9(NAND I/F8)との間で、データ、コマンド、アドレス等を送受信する。
CPU2は、各種の情報処理を実行するための情報処理手段(コンピュータ)の一例である。CPU2は、各種の情報処理の1つとして、ROM(Read Only Memory)4内に設定されているデータ(ブートプログラム)を用いて、鍵データ記憶部6やバージョン情報記憶部7に対する初期設定を行う処理等を実行する機能を有する。また、CPU2は、各種の情報処理の1つとして、NAND(NAND型フラッシュメモリ)9内に設定されているデータ(ファームウエア)を用いて、バージョン情報記憶部7に対する初期設定を行う処理等を実行する機能を有する。例えば、CPU2が所定のプログラム(ブートプログラム、ファームウエア等)を実行することによって、上記機能が実現される。ROM4およびSRAM(Static Random Access Memory)5、NAND9は、それぞれCPU2がアクセス可能なメモリであり、それぞれCPU2が上記処理を実行する際に用いる各種のデータを記憶する。なお、CPU2が実行するプログラムは、CPU2がアクセス可能な記憶装置(記憶媒体)であればどのようなものに格納されていてもよく、一例としてROM4やNAND9に格納される。上記プログラムは、CPU2を含む情報処理装置内に設けられる他の記憶装置に格納されてもよいし、CPU2を含む情報処理装置に着脱自在に装着される記憶媒体に格納されてもよい。また、上記プログラムは、CPU2とネットワークを介して接続される記憶装置(サーバ等)に格納されてもよい。CPU2は、上記プログラムの一部または全部を適宜のタイミングでSRAM5に読み出し、読み出されたプログラムを実行するようにしてもよい。
暗号処理部3は、暗号処理部3が用いる複数の鍵データ(例えば、共通鍵データ)を保持する鍵データ記憶部6を備えている。鍵データ記憶部6は、暗号処理部3の暗号回路内に設けられてもよいし、暗号処理部3の暗号回路外に設けられてもよい。何れの場合であっても、鍵データ記憶部6は、CPU2から隠蔽された状態で構成される。暗号処理部3は、例えば共通鍵暗号方式を用いて入力データを暗号化および/または復号する暗号処理装置として機能する。例えば、暗号処理部3は、鍵データ記憶部6に保持された鍵データを用いて、AES(Advanced Encryption Standard)暗号方式に基づいた暗号化および/または復号が可能であり、一例としてCBC(Cipher Block Chaining)動作モード、CTR(Counter)動作モード、ECB(Electronic CodeBook)動作モード、CFB(Cipher FeedBack)動作モード、OFB(Output FeedBack)動作モード等で動作する。なお、暗号処理部3は、AES暗号方式に限らず、他の暗号化方式に基づいて暗号化および/または復号する暗号処理装置であってもよい。
次に、図2を参照して、鍵データ記憶部6の一例について説明する。なお、図2は、鍵データ記憶部6の一例を示すブロック図である。
図2において、鍵データ記憶部6は、鍵データ保持部61、使用制限レジスタ62、および鍵選択レジスタ63を備えている。鍵データ保持部61は、物理解析困難なROMマクロを用いる等、耐タンパ性の高い方式を用いてn個の鍵データ(共通鍵データ)1〜nを保持する。一例として、鍵データ保持部61は、集積回路1の製造時に鍵データ1〜nが保持されてもよいし、当該製造後に鍵データ1〜nが書き込まれる場合、eFuse(エレクトリカルフューズ)等で構成されてもよい。なお、上記nは、想定されるファームウエアのバージョン数に応じて設定してもよく、例えばn=32に設定してもよい。また、鍵データ保持部61に保持されるデータは、暗号化または復号に用いられる鍵データを生成するための種となる暗号種データでもよい。
使用制限レジスタ62は、鍵データ保持部61が保持している鍵データ毎に使用可/使用不可を設定して保持する。一例として、使用制限レジスタ62は、上記鍵データ毎に設けられたSticky bitで構成される。Sticky bitは、リセット解除時に0に初期設定され、他の装置からのコマンドに応じて1を書き込むことはできるが、次のハードウエアリセットまで0に戻せないレジスタである。この場合、使用制限レジスタ62の各ビットが0に設定されることよって当該使用制限レジスタ62に対応する鍵データが使用可能であることを示し、各ビットが1に設定されることよって当該使用制限レジスタ62に対応する鍵データが使用不可であることを示す。これによって、鍵データ保持部61が保持している鍵データの設定が使用可から使用不可への変更が可能となり、ハードウエアリセットしない限り使用不可から使用可への変更ができない。
他の例として、使用制限レジスタ62は、使用可/使用不可を設定して保持する上記鍵データ毎のレジスタと、当該レジスタへの書き込み可否を制限する設定完了レジスタとで構成される。例えば、設定未完了を意味するデータ(例えば、数値0を示すデータ)が設定完了レジスタに書き込まれている場合、上記鍵データ毎の設定を保持するレジスタへの書き込みは可能となるが、設定完了を意味するデータ(例えば、数値1を示すデータ)の書き込みが設定完了レジスタに行われると、それ以降、上記鍵データ毎の設定を保持するレジスタ全てへの書き込みができなくなる。そして、設定完了レジスタは、設定完了を意味するデータが書き込まれると、当該設定完了の解除はできない構成になっている。
鍵選択レジスタ63は、暗号処理部3が選択した鍵データの種別(鍵番号)を保持する。そして、鍵選択レジスタ63によって選択された鍵データが、使用制限レジスタ62によって使用可に設定されている場合、暗号処理部3は、当該鍵データを鍵データ記憶部6から読み出して入力データの暗号化および/または復号する処理を行う。
バージョン情報記憶部7は、鍵データ記憶部6が保持している鍵データ(共通鍵データ)の数より1つ少ないビット数(すなわち、n−1ビット)を有する不揮発性メモリで構成される。そして、バージョン情報記憶部7は、情報処理装置で起動した最新のファームウエアのバージョン情報(バージョン番号Yであり、鍵番号Yに対応する)を管理する。具体的には、バージョン情報記憶部7は、OTP(One Time Programmable)メモリで構成され、eFuseやanti−Fuse(アンチフューズ)等、各ビットが0>1に書き込み可能に構成される。例えば、バージョン情報記憶部7は、4ビットの不揮発性メモリで構成される場合、0b0000>0b0001>0b0011>0b0111>0b1111の順に一方端から順に0>1に書き換えていく。これによって、バージョン情報記憶部7は、ファームウエアのバージョンアップによって使用可能となっている鍵番号を示すことができ、1に書き換えられたビット数によって当該鍵番号Y(バージョン番号Y)が示される。例えば、上述した書き換えによって、バージョン情報記憶部7は、鍵番号0>鍵番号1>鍵番号2>鍵番号3>鍵番号4を示すことができ、4ビット数で5つの鍵データの鍵番号を示すことができる。また、バージョン情報記憶部7は、各ビットが0>1に書き込み可能に構成されることによって、バージョン情報のバージョンを古いものに戻すことができない。
次に、図3を参照して、情報処理装置で行われる動作概要の第1の例について説明する。なお、図3は、情報処理装置で行われる動作概要の第1の例を時間軸に沿って表現した図である。
図3において、ユーザが電源スイッチを手動でオンにする操作等を行うことにより情報処理装置の電源が投入されると、ROM4に格納されたブートプログラム(ブートROM)によるCPU2の処理(以下、ブートROMによる処理と記載する)が開始される。ここで、ブートプログラムは、他のソフトウエアからアクセスできないソフトウエアであり、情報処理装置の起動時に自動的にCPU2によって実行されるソフトウエアである。例えば、起動時に自動的に実行されるソフトウエアは、情報処理装置の電源投入後、クロック信号が安定するまで入力されるリセット信号が解除された後に最初に実行されるプログラムである。
ブートROMは、指定されたペリフェラル(例えば、NAND9)からファームウエアのヘッダと署名とを読み込み、当該ファームウエアの認証を行う。そして、ブートROMは、上記ファームウエアが認証された場合、認証済みのファームウエアのヘッダに記述されている鍵番号Xを読み取る。例えば、ブートROMは、NAND9に格納されている最新バージョンの認証済ファームウエアから鍵番号Xを取得する。ここで、上記ファームウエアは、最初に集積回路1(SoC)の外部から読み込まれるプログラムの一例である。また、上記ファームウエアは、上記ブートプログラムの実行に続けて実行されるプログラムであってもよい。鍵番号Xは、ファームウエアを復号するための暗号鍵の種類を示す値であり、当該ファームウエアのバージョンを示す値としても対応させることが可能である。また、鍵番号Xは、鍵データ記憶部6に予め保持されている鍵データに対応している。
なお、後述するように、鍵データ記憶部6に予め保持されている鍵データは、ファームウエアを復号するためだけでなく、その後に実行されるプログラム(例えば、ユーザアプリケーションプログラム)や処理に用いられる入力データの復号や暗号化等に用いられてもよい。例えば、上記プログラムを復号処理するための入力データが暗号処理部3に入力された場合、暗号処理部3は、鍵番号Xに対応する鍵データを鍵データ記憶部6から取得し、当該鍵データを用いて入力データを復号処理して復号されたデータを出力する。
次に、ブートROMは、バージョン情報記憶部7から鍵番号Yを読み取る。上述したように、バージョン情報記憶部7は、1に書き換えられたビット数によって鍵番号Yを管理しており、CPU2が1に書き換えられたビット数を検出することによって、鍵番号Yを求めることができる。
次に、ブートROMは、鍵番号Xと鍵番号Yとを比較して、上記認証済ファームウエアが最新バージョンであるか否かを判定する。例えば、ブートROMは、X<Yの場合、上記認証済ファームウエアが最新バージョンでないと判定する。そして、上記認証済ファームウエアが最新バージョンでない場合、ブートROMは、当該ファームウエアの復号処理や当該ファームウエアを用いた処理への移行を禁止する。一方、ブートROMは、X≧Yの場合、上記認証済ファームウエアが最新バージョンであると判定する。そして、上記認証済ファームウエアが最新バージョンである場合、ブートROMは、NAND9から当該ファームウエアを読み込んで当該ファームウエアを鍵番号Xに対応する鍵データで復号する指示を暗号処理部3に対して行う。
情報処理装置が電源投入された直後の状態では、使用制限レジスタ62が全て0に初期設定されているため、鍵データ保持部61が保持している全ての鍵データが使用可能状態になっている。暗号処理部3は、ブートROMによる復号指示に応じて、鍵データ保持部61に保持されている鍵番号Xに対応する鍵データを用いて、上記認証済ファームウエアの復号処理を行う。
次に、ブートROMは、鍵番号Xと鍵番号Yとを比較してX>Yの場合、すなわち現在までに情報処理装置で起動した最新のファームウエアより新しいバージョンが認証された場合(例えば、ファームウエアがアップデートされたりバージョンアップされたりした場合)、鍵番号Xをバージョン情報記憶部7が管理する鍵番号として更新する。これによって、バージョン情報記憶部7は、OTPメモリによって鍵番号Xを最新のバージョン情報として管理することになる。
次に、ブートROMは、鍵データ記憶部6で保持されている鍵番号X+1以降のバージョンに対応する鍵データを無効(使用不可)に設定する。具体的には、ブートROMは、鍵番号X+1以降の鍵データ、すなわち現時点で認証済みの最新のファームウエアに対応する鍵データより新しいバージョンで用いられる鍵データに対応する使用制限レジスタ62に全て1を書き込むことによって、当該鍵データを全て無効化する。なお、上述したように、ブートROMによって設定された使用制限レジスタ62の情報は、ハードウエアリセットをしない限り変更できない仕様になっている。
そして、ブートROMは、暗号処理部3において復号された認証済ファームウエアによる処理へ移行する。以降、CPU2は、当該ファームウエアによる処理を行うことになる。
次に、図4を参照して、情報処理装置で行われる動作概要の第2の例について説明する。なお、図4は、情報処理装置で行われる動作概要の第2の例を時間軸に沿って表現した図である。
図4において、情報処理装置の電源が投入されると、上記第1の例と同様に、ブートROMによる処理が開始される。ブートROMは、例えばNAND9に格納されている最新バージョンのファームウエアの認証を行い、認証済ファームウエアのヘッダに記述されている鍵番号Xを読み取る。そして、ブートROMは、バージョン情報記憶部7から鍵番号Yを読み取る。
次に、ブートROMは、鍵番号Xと鍵番号Yとを比較して、上記認証済ファームウエアが最新バージョンであるか否かを判定する。そして、上記認証済ファームウエアが最新バージョンでない場合(X<Yの場合)、ブートROMは、当該ファームウエアの復号処理や当該ファームウエアを用いた処理への移行を禁止する。一方、上記認証済ファームウエアが最新バージョンである場合(X≧Yの場合)、ブートROMは、NAND9から当該ファームウエアを読み込んで当該ファームウエアを鍵番号Xに対応する鍵データで復号する指示を暗号処理部3に対して行う。
次に、ブートROMは、鍵データ記憶部6で保持されている鍵番号Y+1以降のバージョンに対応する鍵データを無効(使用不可)に設定する。上述した第1の例と比較すると明らかなように、ブートROMは、第2の例において、バージョン情報記憶部7が管理する鍵番号を更新することなく鍵データの無効化処理を行っている。また、ブートROMは、ファームウエアのヘッダに記述された鍵番号情報を用いるのではなく、バージョン情報記憶部7が管理しているバージョン情報、すなわち情報処理装置で起動した最新のファームウエアのバージョン情報(バージョン番号Y、鍵番号Y)に基づいて、鍵データを無効化する範囲を決定している。
そして、ブートROMは、暗号処理部3において復号された認証済ファームウエアによる処理へ移行し、CPU2が当該ファームウエアによる処理(以下、ファームウエアによる処理と記載する)を開始する。
ファームウエアは、当該ファームウエアのヘッダに記述されている鍵番号Xとバージョン情報記憶部7が管理している鍵番号Yとを比較して、X>Yの場合、すなわち現在までに情報処理装置で起動した最新のファームウエアより新しいバージョンのファームウエアが起動されている場合、鍵番号Xをバージョン情報記憶部7が管理する鍵番号として更新する。ここで、X>Yとなる場合は、ファームウエアがアップデートされたりバージョンアップされたりすることによって、今回初めて最新バージョンのファームウエアが起動されている場合(例えば、X=Y+1の場合)である。しかしながら、鍵データ記憶部6で保持されている鍵番号Y+1以降のバージョンに対応する鍵データを無効化されているため、当該最新バージョンX(すなわち、鍵番号Xであり、鍵番号Y+1)に対応する鍵データが使用不可に設定されている。したがって、CPU2は、一旦ハードウエアリセットを行う。
ハードウエアリセットが行われた場合、上述した電源投入時からの処理を再度行う。この場合、鍵番号Xに対応する最新バージョンのファームウエアが再度起動されるが、バージョン情報記憶部7が管理している鍵番号も鍵番号Xに更新されているため、鍵データ記憶部6で保持されている鍵番号X+1以降のバージョンに対応する鍵データが無効化される。したがって、ファームウエア再起動後においては、当該ファームウエアの最新バージョンX(すなわち、鍵番号X)に対応する鍵データも使用可に設定されることになる。
このように、上述した第1の例および第2の例による情報処理装置の動作によれば、鍵データ記憶部6に保持されている鍵データが、ファームウエアの識別情報(バージョン情報)に応じた範囲で利用可能となるため、当該識別情報に応じて鍵データの秘匿性を確保することができる。例えば、鍵データ記憶部6に保持されている鍵データは、起動するファームウエアのバージョンより新しいバージョンに対応する鍵データが利用不可となるため、まだ起動可能となっていないファームウエアのバージョンで用いられる鍵データの秘匿性を確保することができる。また、ファームウエアのアップデートやバージョンアップが完了するまで利用できない鍵データが、当該アップデートやバージョンアップによって利用可能に設定されるため、当該アップデートやバージョンアップ前に失われていた秘匿性の回復が可能となる。さらに、ファームウエアのアップデートやバージョンアップが完了後は、当該アップデートやバージョンアップ前のバージョンのファームウエアの起動ができなくなり、秘匿性が失われたファームウエアによる処理を防止することができる。
なお、上述した実施例では、これから起動するファームウエアまたは現時点までに起動したファームウエアのバージョン情報に応じた範囲を用いて、鍵データの使用可否を設定したが、当該範囲は様々な態様で設定可能である。第1の例として、上記バージョン情報より新しいバージョンに対応する鍵データ全てを使用不可に設定し、上記バージョン情報に対応するバージョンおよび当該バージョンより古いバージョンに対応する鍵データ全てを使用可能に設定する。第2の例として、上記バージョン情報より新しいバージョンに対応する鍵データ全てと所定の鍵番号に対応する鍵データ(例えば、開発用や製造用として鍵データ記憶部6に保持されている鍵データ)を使用不可に設定し、当該所定の鍵番号に対応する鍵データを除いて上記バージョン情報に対応するバージョンおよび当該バージョンより古いバージョンに対応する鍵データを使用可能に設定する。第3の例として、上記バージョン情報に対応するバージョンに対応する鍵データのみ使用可能に設定し、他の鍵データ全てを使用不可に設定する。第4の例として、上記バージョン情報より新しいバージョンに対応する鍵データ全てを使用不可および上記バージョン情報に対応するバージョンより古いバージョンに対応する鍵データ全てを使用不可に設定し、上記バージョン情報に対応するバージョンに対応する鍵データを使用可能に設定する。なお、上記バージョン情報に対応するバージョンより古いバージョンに対応する鍵データの少なくとも1つを使用不可に設定する場合、使用不可に設定する鍵データに対応する使用制限レジスタ62を使用不可に設定してもいいし、鍵データ記憶部6で保持されている鍵データのうち、使用不可に設定する鍵データ自体をダミーデータに上書きしてもよい。後者の場合、上記バージョン情報が更新される毎に、対応する鍵データをダミーデータに上書きしていくことが考えられる。
上述した実施例では、これから起動するファームウエアまたは現時点までに起動したファームウエアのバージョン情報を用いて、鍵データを使用可能にする範囲、鍵データを使用不可する範囲を設定したが、ファームウエアの他の識別情報を用いて当該範囲を設定してもかまわない。例えば、鍵データ毎に有効日時を予め設定しておき、ファームウエアに設定されている日時情報を用いて上記範囲を設定してもよい。
また、上述した実施例では、リセット解除時に使用制限レジスタ62を0に初期設定することによって、当該初期設定状態において鍵データ保持部61が保持している鍵データ全てを使用可に設定した後、ブートROMによってファームウエアの識別情報に応じた範囲の鍵データを使用不可に設定している。しかしながら、上記初期設定状態において、鍵データ保持部61が保持している鍵データ全てを使用不可に設定してもよい。この場合、リセット解除時に鍵データ保持部61が保持している鍵データ全てを使用不可に設定した後、ブートROMによってファームウエアの識別情報に応じた範囲の鍵データを使用可に設定する。例えば、上記設定完了レジスタを有する使用制限レジスタ62を用いる場合、後者の設定態様であっても同様の処理が可能となる。
なお、暗号処理部3は、集積回路1(SoC)の外部から最初に読み込まれるファームウエア(第1ファームウエアとする)以外のプログラム(例えば、当該ファームウエアの後に復号されて利用される別のファームウエア;第2ファームウエアとする)の復号を行ってもよい。この場合、第2ファームウエアは、第1ファームウエアを復号するための鍵データ(基準鍵データ)を利用して復号可能に構成することもできる。一例として、第1ファームウエア内にも別の鍵データ(第1鍵データ)を保持しておき、上記基準鍵データと当該第1鍵データとを用いて、第1拡張鍵データを生成する。そして、第2ファームウエアは、基準鍵データと第1鍵データとから生成される第1拡張鍵データを用いて、暗号処理部3で復号される。このように、上記基準鍵データを種として生成される鍵データを用いて他のプログラムも復号可能に構成することによって、上記基準鍵データの秘匿性向上対策の効果を、第1ファームウエアに対してだけでなく他のプログラムに対しても得ることができる。また、上記基準鍵データだけで全てのプログラムを復号可能に構成する場合、当該基準鍵データを解読されるだけで当該全てのプログラムの復号が可能となるが、上述したように別の鍵データも用いることによって、連鎖的に秘匿性が失われることを防止することもできる。なお、起動するファームウエアのバージョンより古いバージョンに対応する鍵データを使用可能に設定する場合、当該古いバージョンのファームウエアの起動はできなくても、当該古いバージョンに対応する他のプログラム(例えば、旧バージョンのゲームプログラム)の復号および当該プログラムを用いた処理は可能とすることができる。なお、上述した鍵データの利用は、プログラムだけでなく、当該プログラムで用いられる各種データの復号に用いられてもよい。
また、バージョン情報記憶部7がOTPメモリで構成される場合、データ書き込みに対する信頼性が低いことがあり得る。このような場合、バージョン情報記憶部7は、複数ビットを組として鍵番号を示してもかまわない。例えば、2つのビットを組として鍵番号を示す場合、バージョン情報記憶部7は、2つのビットともに0の場合に0であると定義され、少なくとも一方のビットが1の場合に1であると定義される。そして、上記ビットの組に1を設定する場合、CPU2は、当該ビットの組を構成する2つのビットに対してそれぞれ1を書き込む。このように複数ビットの組が定義されることによって、バージョン情報記憶部7に1を書き込む際にいずれかのビットで書き損じが生じたとしても、他のビットに1が書き込まれれば当該書き損じによる誤動作を防止することができる。
また、上述した集積回路1単体を汎用的に用いられる製品形態で製造することが考えられる。この場合、製造された集積回路1を利用する利用者によって、鍵データが書き込まれることが考えられるため、鍵データ保持部61に鍵データを書き込んでいない状態で出荷されてもよい。このような製品形態であっても、利用者側で複数の鍵データを鍵データ保持部61に書き込むことによって、上述した情報処理を実現することが可能となる。
また、上述した説明では、暗号処理部3において、鍵データ記憶部6で管理されている鍵データを用いて、プログラム(例えば、ファームウエア)を復号する例を用いたが、当該鍵データを用いてプログラムを暗号化してもよい。プログラムを暗号化する場合であっても、上述した鍵データの管理やプログラムの識別情報(バージョン情報)による管理を行うことによって、同様の効果を得ることができる。
(第2の実施形態)
図5を参照して、本発明の第2の実施形態に係る情報処理装置について説明する。なお、図5は、ゲームカード用集積回路11を含む情報処理装置の一例を示すブロック図である。
例えば、上記情報処理装置は、ゲームカード用集積回路11を含んでいる。ここで、上記情報処理装置は、交換可能なメモリカードや光ディスク等の記録媒体内に記憶された、または、サーバや他の装置から受信されたプログラムを実行可能である。なお、上記情報処理装置は、1以上の装置によって構成されてもよく、ゲームカード用集積回路11は、複数の装置に分散して設けられてもよい。
上記情報処理装置は、ゲームカード用集積回路11の他に、SoC等によって構成される集積回路20およびNAND21等が設けられている。また、情報処理装置は、交換可能なゲームカード10を装着することが可能となっている。また、ゲームカード用集積回路11は、例えばASIC(Application Specific Integrated Circuit:特定用途向け集積回路)によって、1つの半導体チップ上にCPU12、復号処理部13、ROM14、SRAM15、鍵データ記憶部16、バージョン情報記憶部17、SoC I/F18、およびカードI/F19等が構成される。そして、CPU12は、復号処理部13、ROM14、SRAM15、バージョン情報記憶部17、NAND21、およびゲームカード10との間で、データ、コマンド、アドレス等を送受信する。なお、本実施例においては、CPU12は、SoC I/F18および集積回路20を介して、NAND21との間の送受信を行い、カードI/F19を介して、ゲームカード10との間の送受信を行う。例えば、ゲームカード用集積回路11は、ゲームカード10に格納されているカードデータを復号して集積回路20へ出力したり、集積回路20(のCPU)からの指示に応じたデータを暗号化してゲームカード10に書き込んだりする機能を有し、情報処理装置とゲームカード10との間のデータ送受信を管理する特定用途に利用される。なお、ゲームカード用集積回路11は、特定用途向け集積回路の一例であって、他の用途に用いられるASICであってもよい。
CPU12は、各種の情報処理を実行するための情報処理手段(コンピュータ)の一例である。CPU12は、各種の情報処理の1つとして、ROM14内に設定されているデータ(ブートプログラム)を用いて、鍵データ記憶部16やバージョン情報記憶部17に対する初期設定を行う処理等を実行する機能を有する。また、CPU12は、各種の情報処理の1つとして、NAND21内に設定されているデータ(ファームウエア)を用いて、バージョン情報記憶部17に対する初期設定を行う処理等を実行する機能を有する。例えば、CPU12が所定のプログラム(ブートプログラム、ファームウエア等)を実行することによって、上記機能が実現される。ROM14およびSRAM15、NAND21は、それぞれCPU12がアクセス可能なメモリであり、それぞれCPU12が上記処理を実行する際に用いる各種のデータを記憶する。なお、CPU12が実行するプログラムは、CPU12がアクセス可能な記憶装置(記憶媒体)であればどのようなものに格納されていてもよく、一例としてROM14やNAND21に格納される。上記プログラムは、CPU12を含む情報処理装置内に設けられる他の記憶装置に格納されてもよいし、CPU12を含む情報処理装置に着脱自在に装着される記憶媒体に格納されてもよい。また、上記プログラムは、CPU12とネットワークを介して接続される記憶装置(サーバ等)に格納されてもよい。CPU12は、上記プログラムの一部または全部を適宜のタイミングでSRAM15に読み出し、読み出されたプログラムを実行するようにしてもよい。
鍵データ記憶部16は、復号処理部13が用いる単一の鍵データを保持している。鍵データ記憶部16は、復号処理部13の暗号回路内に設けられてもよいし、復号処理部13の暗号回路外に設けられてもよい。何れの場合であっても、鍵データ記憶部16は、CPU12から隠蔽された状態で構成される。
バージョン情報記憶部17は、不揮発性メモリで構成され、情報処理装置で起動した最新のファームウエアのバージョン情報(例えば、バージョン番号Nに対応する)を管理する。一例として、バージョン情報記憶部17は、OTPメモリで構成され、eFuseやanti−Fuse等、各ビットが0>1に書き込み可能に構成される。例えば、バージョン情報記憶部17は、4ビットの不揮発性メモリで構成される場合、0b0000>0b0001>0b0011>0b0111>0b1111の順に一方端から順に0>1に書き換えていく。これによって、バージョン情報記憶部17は、ファームウエアのバージョンアップによって使用可能となっているバージョン番号を示すことができ、1に書き換えられたビット数によって当該バージョン番号Nが示される。例えば、上述した書き換えによって、バージョン情報記憶部17は、バージョン番号0>バージョン番号1>バージョン番号2>バージョン番号3>バージョン番号4を示すことができ、4ビット数で5つのバージョン番号を示すことができる。また、バージョン情報記憶部17は、各ビットが0>1に書き込み可能に構成されることによって、バージョン情報のバージョンを古いものに戻すことができない。
復号処理部13は、例えば暗号化されたファームウエアを復号する復号処理装置として機能する。例えば、復号処理部13は、鍵データ記憶部16に保持された単一の鍵データと復号する最新のファームウエアのバージョン情報(例えば、バージョン番号N)とを用いて新たな復号鍵データを生成し、生成した復号鍵データを用いて当該ファームウエアを復号する。例えば、復号処理部13は、SHA(Secure Hash Algorithm:セキュアハッシュアルゴリズム)回路を含み、鍵データ記憶部16に保持された単一の鍵データとバージョン番号とをSHA回路に入力することによって、新たな復号鍵データを生成する。なお、上記復号鍵データを生成する際、AES回路を用いてもよい。なお、復号処理部13は、SHA方式やAES暗号方式に限らず、他の方式に基づいて復号する復号処理装置であってもよい。
次に、図6を参照して、鍵データ記憶部16の一例について説明する。なお、図6は、鍵データ記憶部16の一例を示すブロック図である。
図6において、鍵データ記憶部16は、鍵データ保持部161および使用可否レジスタ162を備えている。鍵データ保持部161は、物理解析困難なROMマクロを用いる等、耐タンパ性の高い方式を用いて単一の鍵データ(共通鍵データ)を保持する。一例として、鍵データ保持部161は、ゲームカード用集積回路11の製造時に鍵データが保持されてもよいし、当該製造後に鍵データが書き込まれる場合、eFuse等で構成されてもよい。なお、後述により明らかとなるが、鍵データ保持部161に保持される鍵データは、ファームウエアの復号に用いられる復号鍵データを生成するための種となる暗号種データとして機能する。
使用可否レジスタ162は、鍵データ保持部161が保持している鍵データに対して使用可/使用不可を設定して保持する。一例として、使用可否レジスタ162は、上記鍵データに対して設けられたSticky bitで構成される。使用可否レジスタ162におけるSticky bitは、情報処理装置の電源投入時やリセット解除時に0に初期設定され、他の装置からのコマンドに応じて1を書き込むことはできるが、次の電源投入時やハードウエアリセットまで0に戻せないレジスタである。この場合、使用可否レジスタ162のビットが0に設定されることよって鍵データ保持部161が保持している鍵データが使用可能であることを示し、当該ビットが1に設定されることよって当該鍵データが使用不可であることを示す。これによって、鍵データ保持部161が保持している鍵データの設定が使用可から使用不可への変更が可能となり、電源OFFして電源投入したりハードウエアリセットしたりしない限り使用不可から使用可への変更ができない。
他の例として、使用可否レジスタ162は、使用可/使用不可を設定して保持する上記鍵データに対応するレジスタと、当該レジスタへの書き込み可否を制限する設定完了レジスタとで構成される。例えば、設定未完了を意味するデータ(例えば、数値0を示すデータ)が設定完了レジスタに書き込まれている場合、上記鍵データの設定を保持するレジスタへの書き込みは可能となるが、設定完了を意味するデータ(例えば、数値1を示すデータ)の書き込みが設定完了レジスタに行われると、それ以降、上記鍵データの設定を保持するレジスタ全てへの書き込みができなくなる。そして、設定完了レジスタは、設定完了を意味するデータが書き込まれると、次の電源投入時やハードウエアリセットまで当該設定完了の解除ができない構成になっている。
次に、図7を参照して、情報処理装置で行われる動作概要の第3の例について説明する。なお、図7は、情報処理装置で行われる動作概要の第3の例を時間軸に沿って表現した図である。
図7において、ユーザが電源スイッチを手動でオンにする操作等を行うことにより情報処理装置の電源が投入されると、ROM14に格納されたブートプログラム(ブートROM)によるCPU12の処理(以下、ブートROMによる処理と記載する)が開始される。ここで、ブートプログラムは、他のソフトウエアからアクセスできないソフトウエアであり、情報処理装置の起動時に自動的にCPU12によって実行されるソフトウエアである。例えば、起動時に自動的に実行されるソフトウエアは、情報処理装置の電源投入後、クロック信号が安定するまで入力されるリセット信号が解除された後に最初に実行されるプログラムである。
ブートROMは、指定されたペリフェラル(例えば、NAND21)からファームウエアのヘッダと署名とともに当該ファームウエアを読み込み、当該ファームウエアの認証を行う。そして、ブートROMは、上記ファームウエアが認証された場合、認証済みのファームウエアのヘッダに記述されているバージョン番号Mを読み取る。例えば、ブートROMは、集積回路20およびSoC I/F18を介して、NAND21に格納されている最新バージョンの認証済ファームウエアからバージョン番号Mを取得する。ここで、上記ファームウエアは、最初にゲームカード用集積回路11(ASIC)の外部から読み込まれるプログラムの一例である。また、上記ファームウエアは、上記ブートプログラムの実行に続けて実行されるプログラムであってもよい。この場合、上記バージョン番号Mは、当該プログラムのバージョンを示す値であってもよい。
次に、ブートROMは、バージョン情報記憶部17からバージョン番号Nを読み取る。上述したように、バージョン情報記憶部17は、1に書き換えられたビット数によってバージョン番号Nを管理しており、CPU12が1に書き換えられたビット数を検出することによって、バージョン番号Nを求めることができる。
次に、ブートROMは、バージョン番号Mとバージョン番号Nとを比較して、上記認証済ファームウエアが最新バージョンであるか否かを判定する。例えば、ブートROMは、M<Nの場合、上記認証済ファームウエアが最新バージョンでないと判定する。そして、上記認証済ファームウエアが最新バージョンでない場合、ブートROMは、当該ファームウエアの復号処理や当該ファームウエアを用いた処理への移行を禁止する。一方、ブートROMは、M≧Nの場合、上記認証済ファームウエアが最新バージョンであると判定する。
次に、ブートROMは、バージョン番号Mとバージョン番号Nとを比較してM>Nの場合、すなわち現在までに情報処理装置で起動した最新のファームウエアより新しいバージョンが認証された場合(例えば、ファームウエアがアップデートされたりバージョンアップされたりした場合)、バージョン番号Mをバージョン情報記憶部17が管理するバージョン番号として更新する。そして、バージョン番号が更新された後、バージョン情報記憶部17に設けられているレジスタの設定等によって、以降の処理においてバージョン情報記憶部17への書き込みを不可に設定してもよい。これによって、バージョン情報記憶部17は、OTPメモリによってバージョン番号Mを最新のバージョン情報として管理することになる。
なお、バージョン番号Mとバージョン番号Nとを比較する処理においてM≦Nの場合、バージョン情報記憶部17に設けられているレジスタの設定等によって、以降の処理においてバージョン情報記憶部17への書き込みを不可に設定してもよい。これによって、バージョン情報記憶部17に格納されている情報が他の装置によって書き換えられることを防止することができる。後述により明らかとなるが、バージョン番号Mとバージョン番号Nとを比較する処理においてM>Nの場合は、後の処理においてバージョン情報記憶部17への書き込みが不可に設定される。
次に、上記認証済ファームウエアが最新バージョンである場合、ブートROMは、バージョン番号Mを用いて復号鍵データを生成する指示を復号処理部13に対して行う。情報処理装置が電源投入された直後の状態では、使用可否レジスタ162が0に初期設定されているため、鍵データ保持部161が保持している鍵データが使用可能状態になっている。復号処理部13は、ブートROMによる復号鍵生成指示に応じて、鍵データ保持部161に保持されている鍵データとバージョン番号MとをSHA回路に入力することによって復号鍵データを生成し、復号処理部13内(例えば、SHA回路内)の記憶領域に書き込む。
次に、ブートROMは、生成された復号鍵データを用いて、上記認証済ファームウエアの復号する指示を復号処理部13に対して行う。そして、復号処理部13は、ブートROMによる復号指示に応じて、復号処理部13内に書き込まれている復号鍵データを用いて、上記認証済ファームウエアの復号処理を行う。
次に、ブートROMは、復号鍵データを生成する鍵生成機能を無効化する指示を復号処理部13に対して行う。そして、復号処理部13は、ブートROMによる鍵生成機能無効化指示に応じて、使用可否レジスタ162に1を書き込むことによって、当該鍵データを用いた鍵生成機能を無効化する。なお、上述したように、ブートROMによって設定された使用可否レジスタ162の情報は、電源再投入やハードウエアリセットをしない限り変更できない仕様になっている。また、復号処理部13は、復号処理部13内の記憶領域に書き込まれた復号鍵データに他のデータを上書きすることによって、当該復号鍵データを消去する。なお、ブートROMは、復号処理部13に設けられているレジスタの設定等によって、以降の処理において復号処理部13へのアクセスを不可に設定することによって、復号鍵データを生成する鍵生成機能を無効化してもよい。何れの無効化処理においても、復号処理部13において復号鍵を生成する回路(例えば、SHA回路)がハードウエア的にリセットされない限り1回のみ使用できることになり、復号鍵生成処理の秘匿性を確保することが可能となる。なお、復号処理部13において復号鍵を生成する回路が1回のみ使用できる他の方法によって、復号鍵データを生成する鍵生成機能を無効化してもよい。
そして、ブートROMは、復号処理部13において復号された認証済ファームウエアによる処理へ移行する。以降、CPU12は、当該ファームウエアによる処理を行うことになる。
このように、上述した第3の例による情報処理装置の動作によれば、鍵データ記憶部16に保持されている鍵データが1つであっても、上述した第1の例および第2の例と同様にファームウエア等の外部から読み込まれるプログラムに対する秘匿性を向上することが可能となる。また、上述した第3の例による情報処理装置は、ファームウエアがバージョンアップされた場合であっても当該ファームウエアを復号するための鍵データを1つ管理するだけとなるため、鍵データを保管するためのハードウエアコストを削減することが可能となる。また、ファームウエアを復号するための鍵を生成する機能が当該ファームウエアを復号した後に当該ファームウエアを起動する前に無効化され、生成された復号鍵も消去されるため、鍵データの秘匿性も確保することができる。また、ファームウエアのアップデートやバージョンアップが完了するまで生成されない復号鍵データが、当該アップデートやバージョンアップによって新たに生成されるため、当該アップデートやバージョンアップ前に失われていた秘匿性の回復が可能となる。さらに、ファームウエアのアップデートやバージョンアップが完了後は、当該アップデートやバージョンアップ前のバージョンのファームウエアの起動ができなくなり、秘匿性が失われたファームウエアによる処理を防止することができる。
なお、上述した第3の例では、鍵データ記憶部16に単一の鍵データを保持して複数バージョンのファームウエアに対応する例を用いたが、鍵データ記憶部16に複数の鍵データを保持してもよい。例えば、複数の鍵データ毎に有効日時や用途を予め設定しておき、当該鍵データを用いる日時や用途に応じて使用する鍵データを切り替えることが考えられる。
また、上述した第3の例では、ファームウエアを復号した後であってファームウエアを起動する前となる期間において、当該ファームウエアの復号に用いた復号鍵データを生成するための鍵生成機能を無効化したが、他のタイミングで当該鍵生成機能を無効化してもよい。例えば、ファームウエアを起動した後に、当該ファームウエアの復号に用いた復号鍵データを生成するための鍵生成機能を無効化してもよい。また、ファームウエアを復号するための復号鍵を生成した後であって当該ファームウエアを復号する前となる期間において、当該ファームウエアの復号に用いた復号鍵データを生成するための鍵生成機能を無効化してもよい。後者では、使用可否レジスタ162の設定によって鍵データ保持部161が保持している鍵データを使用不可にして鍵生成機能を無効化する場合、当該無効化後も生成された復号鍵データの利用は可能となるため、当該無効化方式を用いることによって当該ファームウエアを復号する前に鍵生成機能の無効化を行うことが可能となる。
なお、上述した実施例では、電源投入時やリセット解除時に使用可否レジスタ162を0に初期設定することによって、当該初期設定状態において鍵データ保持部161が保持している鍵データを使用可に設定した後、ブートROMによってファームウエアを復号した後で鍵データを使用不可する例を記載している。しかしながら、上記初期設定状態において、鍵データ保持部161が保持している鍵データを使用不可に設定してもよい。この場合、電源投入時やリセット解除時に鍵データ保持部161が保持している鍵データを使用不可に設定した後、ブートROMによって鍵データ保持部161が保持している鍵データを使用可に設定する。例えば、上記設定完了レジスタを有する使用可否レジスタ162を用いる場合、後者の設定態様であってもファームウエアを復号した後で鍵データを使用不可にする処理が可能となる。
また、バージョン情報記憶部17がOTPメモリで構成される場合、データ書き込みに対する信頼性が低いことがあり得る。このような場合、バージョン情報記憶部17は、上述したバージョン情報記憶部7と同様に複数ビットを組としてバージョン番号を示してもかまわない。
また、上述したゲームカード用集積回路11単体を汎用的に用いられる製品形態で製造することが考えられる。この場合、製造されたゲームカード用集積回路11を利用する利用者によって、鍵データが書き込まれることが考えられるため、鍵データ保持部161に鍵データを書き込んでいない状態で出荷されてもよい。このような製品形態であっても、利用者側で複数の鍵データを鍵データ保持部161に書き込むことによって、上述した情報処理を実現することが可能となる。
また、上述した説明では、復号処理部13において、鍵データ記憶部16で管理されている鍵データを用いて、プログラム(例えば、ファームウエア)を復号する例を用いたが、当該鍵データを用いてプログラムを暗号化してもよい。プログラムを暗号化する場合であっても、上述した鍵データの管理やプログラムの識別情報(バージョン情報)による管理を行うことによって、同様の効果を得ることができる。
また、上述した集積回路1を用いた処理と上述したゲームカード用集積回路11とを同じ情報処理装置内で同時または異なるタイミングでそれぞれ行ってもよい。例えば、図5に示した集積回路20において、第1の実施形態で説明した情報処理や暗号処理を行うことによって、ゲームカード用集積回路11と集積回路20とにおいて、NAND21に格納されているファームウエアを用いた情報処理および暗号処理を並列して行うことが可能となる。
また、上述した説明では、回路やレジスタ等のハードウエア(集積回路)によって情報処理や暗号処理を制御する手段を構成したが、いわゆるソフトウエアによって当該手段を構成してもよい。例えば、上記情報処理動作や暗号処理動作を実現するプログラムを実行する制御部(CPU)を備える手段によって、上記情報処理や暗号処理を制御する手段を構成してもよい。この場合、上記プログラムは、外部メモリ等の外部記憶媒体を通じて情報処理装置に供給されるだけでなく、有線または無線の通信回線を通じて情報処理装置に供給されてもよい。また、上記プログラムは、情報処理装置内部の不揮発性記憶装置に予め記録されていてもよい。なお、上記プログラムを記憶する情報記憶媒体としては、不揮発性メモリの他に、CD−ROM、DVD、あるいはそれらに類する光学式ディスク状記憶媒体、フレキシブルディスク、ハードディスク、光磁気ディスク、磁気テープ、などでもよい。また、上記プログラムを記憶する情報記憶媒体としては、上記プログラムを記憶する揮発性メモリでもよい。このような記憶媒体は、コンピュータ等が読み取り可能な記録媒体ということができる。例えば、コンピュータ等に、これらの記録媒体のプログラムを読み込ませて実行させることにより、上述で説明した各種機能を提供させることができる。
また、上述では、1つの集積回路1や1つのゲームカード用集積回路11で情報処理や暗号処理を行う場合の動作を説明しているが、当該処理における動作の少なくとも一部を他の装置で行ってもかまわない。例えば、情報処理装置が他の装置(例えば、別のサーバ、他のゲーム装置、他の携帯端末)と通信可能に構成されている場合、上記処理における各動作は、当該他の装置が協働することによって実行してもよい。このように、上記処理における動作の少なくとも一部を他の装置で行うことによって、上述した処理と同様の処理が可能となる。
ここで、上述した変形例によれば、いわゆるクラウドコンピューティングのシステム形態や分散型の広域ネットワークおよびローカルネットワークのシステム形態でも本発明を実現することが可能となる。例えば、分散型のローカルネットワークのシステム形態では、据置型の情報処理装置(据置型のゲーム装置)と携帯型の情報処理装置(携帯型のゲーム装置)との間で上記動作を協働により実行することも可能となる。なお、これらのシステム形態では、上述した動作をどの装置で行うかについては特に限定されず、どのような分担をしたとしても本発明を実現できることは言うまでもない。
また、上述した情報処理装置は、携帯ゲーム装置や据置型ゲーム装置であってもよく、一般的なパーソナルコンピュータ、携帯電話機、PDA(Personal Digital Assistant)等のデバイスであってもかまわない。
また、本発明は、以下に示す構成の情報処理装置であってもよい。
本発明の情報処理装置は、ブートプログラムによって起動するファームウエアを起動して動作する。情報処理装置は、不揮発性メモリ、ファームウエア取得手段、バージョン情報取得手段、起動バージョン記憶制御手段、比較手段、および起動手段を備える。不揮発性メモリは、ビット単位で1回だけ書き換え可能である。ファームウエア取得手段は、ファームウエアを取得する。バージョン情報取得手段は、取得したファームウエアのバージョン情報を取得する。起動バージョン記憶制御手段は、起動したファームウエアの最新のバージョンを示す情報を不揮発性メモリに記憶する。比較手段は、バージョン情報取得手段が取得したバージョンと不揮発性メモリに記憶されている最新のバージョンとを比較する。起動手段は、比較手段による比較結果に基づいて、取得したファームウエアを起動する。
上記によれば、起動するファームウエアのバージョンを制御することができる。
また、上記起動手段は、ファームウエア取得手段が取得したファームウエアのバージョンが不揮発性メモリに記憶されている最新のバージョンと同じまたは最新のバージョンより新しいことを比較手段による比較結果が示す場合にのみ、当該ファームウエアを起動してもよい。
上記によれば、古いバージョンのファームウエアが起動することを防止することができる。
また、上記起動バージョン記憶制御手段は、ブートプログラムを実行するコンピュータによって実現されてもよい。
また、上記起動バージョン記憶制御手段は、ファームウエアを実行するコンピュータによって実現されてもよい。
また、上記不揮発性メモリは、記憶されているバージョンより新しいことを示すバージョンを示す情報のみ書換可能に構成されてもよい。
また、本発明のブートプログラムは、ファームウエアの起動前に情報処理装置のコンピュータによって実行される。ブートプログラムは、第1バージョン情報取得手段、第2バージョン情報取得手段、バージョン情報比較手段、バージョン情報記憶制御手段、およびファームウエア起動手段として、コンピュータを機能させる。第1バージョン情報取得手段は、今回起動する第1ファームウエアに設定されているバージョンを示す第1バージョン情報を取得する。第2バージョン情報取得手段は、前回までに起動した最新の第2ファームウエアに設定されているバージョンを示す第2バージョン情報を不揮発性メモリから取得する。バージョン情報比較手段は、第1バージョン情報と第2バージョン情報とを比較する。バージョン情報記憶制御手段は、第1バージョン情報が第2バージョン情報より新しいことを示す場合、第1バージョン情報を不揮発性メモリに記憶されている第2バージョン情報に上書きして記憶する。ファームウエア起動手段は、第1バージョン情報が第2バージョン情報以上のバージョンを示す場合、第1ファームウエアを起動する。
また、上述した暗号復号処理で用いられる処理順序、設定値、判定に用いられる条件等は、単なる一例に過ぎず他の順序、値、条件であっても、本実施例を実現できることは言うまでもない。
以上、本発明を詳細に説明してきたが、前述の説明はあらゆる点において本発明の例示に過ぎず、その範囲を限定しようとするものではない。本発明の範囲を逸脱することなく種々の改良や変形を行うことができることは言うまでもない。本発明は、特許請求の範囲によってのみその範囲が解釈されるべきであることが理解される。また、当業者は、本発明の具体的な実施形態の記載から、本発明の記載および技術常識に基づいて等価な範囲を実施することができることが理解される。また、本明細書において使用される用語は、特に言及しない限り、当該分野で通常用いられる意味で用いられることが理解されるべきである。したがって、他に定義されない限り、本明細書中で使用される全ての専門用語および技術用語は、本発明の属する分野の当業者によって一般的に理解されるのと同じ意味を有する。矛盾する場合、本明細書(定義を含めて)が優先する。