(57)【特許請求の範囲】
【請求項１】
バスとの間でデータの入出力を行う第１のメモリと、
前記バスとの間でデータの入出力を行う第２のメモリと、
秘密鍵を保持する秘密鍵保持部と、
外部からの前記バスへのアクセスを制御するバスポートと、
前記バスポートを経由して暗号化されたプログラムと復号プログラムとを前記第１のメモリに格納させ、前記復号プログラムと前記秘密鍵とを用いて前記暗号化されたプログラムの復号を行い、復号化されたプログラムを実行するＣＰＵと、
前記暗号化されたプログラムと前記復号プログラムとが前記第１のメモリに格納されると、前記バスポートに対して外部からのアクセスを禁止させ、前記第１及び第２のメモリへのアクセスを許可して前記暗号化されたプログラムと前記復号プログラムとの前記第１のメモリから前記第２のメモリへの転送を行い、
前記転送が終了すると、前記第１のメモリへのアクセスを禁止し、
前記復号及び前記復号化されたプログラムの実行が終了すると、前記第２のメモリへのアクセスを禁止する制御部とを備える
ことを特徴とする半導体集積回路装置。
【請求項２】
請求項１に記載の半導体集積回路装置において、
前記ＣＰＵから前記秘密鍵保持部へのアクセスを制御する秘密鍵アクセスポートをさらに備え、
前記秘密鍵アクセスポートは、
前記転送が終了すると前記秘密鍵保持部へのアクセスを許可し、前記復号化されたプログラムの実行が終了すると前記秘密鍵保持部へのアクセスを禁止するものである
ことを特徴とする半導体集積回路装置。
【請求項３】
請求項１に記載の半導体集積回路装置において、
前記ＣＰＵは、
レジスタを含み、
前記復号化されたプログラムの実行が終了すると、前記レジスタに格納されたデータを消去するものである
ことを特徴とする半導体集積回路装置。
【請求項４】
請求項１に記載の半導体集積回路装置において、
前記制御部は、
前記第１及び第２のメモリへのチップセレクト信号を制御することによって、前記第１及び第２のメモリへのアクセスを制御するものである
ことを特徴とする半導体集積回路装置。
【請求項５】
請求項１に記載の半導体集積回路装置において、
前記制御部は、
第１のフラグと第２のフラグとを格納するフラグ格納部を含み、
前記第１のフラグがセットされているときには前記第１のメモリ及び前記第２のメモリへのアクセスを許可し、前記第１のフラグがリセットされ、前記第２のフラグがセットされているときには前記第１のメモリへのアクセスを禁止し、前記第１及び第２のフラグのいずれもがリセットされているときには、前記第２のメモリへのアクセスを禁止するものであり、
前記バスポートは、
前記第１または第２のフラグのうち少なくとも１つがセットされているときに、外部からのアクセスを禁止するものであり、
前記ＣＰＵは、
前記暗号化されたプログラム及び前記復号プログラムが前記第１のメモリに入力されると前記第１のフラグ及び前記第２のフラグをセットし、前記転送が終了すると前記第１のフラグをリセットし、前記復号化されたプログラムの実行が終了すると前記第２のフラグをリセットするものである
ことを特徴とする半導体集積回路装置。
【請求項６】
バスとの間でデータの入出力を行う第１のメモリと、
前記バスとの間でデータの入出力を行う第２のメモリと、
前記バスと前記第１のメモリとの間に接続され、前記バスからの前記第１のメモリへのアクセスを制御する第１のメモリポートと、
前記バスと前記第２のメモリとの間に接続され、前記バスからの前記第２のメモリへのアクセスを制御する第２のメモリポートと、
秘密鍵を保持する秘密鍵保持部と、
外部からの前記バスへのアクセスを制御するバスポートと、
レジスタを有し、前記バスポートを経由して暗号化されたプログラムと復号プログラムとの前記第１のメモリへの書き込みを行い、前記復号プログラムと前記秘密鍵とを用いて前記暗号化されたプログラムの復号を行い、復号化されたプログラムの前記第２のメモリへの書き込みを行い、復号化されたプログラムを実行するＣＰＵと、
前記第１のメモリへの書き込みが終了すると、前記バスポートに対して外部からの前記バスへのアクセスを禁止させ、前記第１のメモリポートに対して前記第１のメモリへの書き込みを禁止させ、前記第２のメモリポートに対して前記第２のメモリへのアクセスを許可させ、
前記復号化されたプログラムの実行が終了すると、前記ＣＰＵに対して前記レジスタに格納されたデータを消去させ、前記秘密鍵保持部へのアクセスを禁止させるとともに、前記第２のメモリポートに対して前記第２のメモリへのアクセスを禁止させる制御部とを備える
ことを特徴とする半導体集積回路装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、暗号化されたプログラムを復号して実行する機能を有する情報機器等に搭載される半導体ＬＳＩに関する。また、プログラムを暗号化してプログラム所有者側の機器からプログラム使用者側の機器へ引き渡す処理システム及びその方法に関する。
【０００２】
【従来の技術】
近年、プログラムの書き換えが可能な、またはユーザプログラムの実行が可能な情報機器の普及に伴い、ソフトウエアの違法なコピーを防止する仕組みが考えられている。プログラムを暗号化して配信する方式においては、暗号化されたプログラムを復号するプログラム（以下、「復号プログラム」という）をコピーされないような工夫がなされている。例えば、復号プログラムを外部から読み出すことができないＬＳＩ内部のメモリに配置し、さらに、復号化されたプログラムを外部から読み出すことができないようにしている（例えば、特許文献１参照）。
【０００３】
図１８は、暗号化されたプログラムを実行する従来の半導体集積回路装置を示すブロック図である。
【０００４】
図１８に示す半導体集積回路装置１は、ＣＰＵ３と、内部バス７を介してデータの入出力を行う内蔵ＲＯＭ４及び内蔵ＲＡＭ５と、外部バス２を通じて外部とのデータの入出力を制御するバスポート６と、ＣＰＵ３にＩＯバス８を介して接続されたＩＯポート９と、内蔵ＲＡＭ５を制御するメモリポート１０と、メモリポート１０を制御する制御レジスタ１１とを有している。
【０００５】
暗号化されたプログラムを復号する復号プログラムは内蔵ＲＯＭ４に格納されている。暗号化されたプログラムは内蔵ＲＡＭ５に読み込まれ、復号プログラムによって復号される。復号化されたプログラムは内蔵ＲＡＭ５に書き出される。内蔵ＲＡＭ５に書き出された復号化されたプログラムは制御レジスタ１１からの制御によって、メモリポート１０から外部へ読み出されることを防ぐ。
【０００６】
【特許文献１】
特開平８−３０５５８号公報
【０００７】
【発明が解決しようとする課題】
しかしながら、上記のように、復号プログラムをＬＳＩ内部に保持するため、不揮発性メモリをＬＳＩに内蔵しなければならない。したがって、ＬＳＩに要するコストが高くなる。
【０００８】
また、悪意のあるプログラムを暗号化してＬＳＩ内部に読み込ませ、プログラムを実行するときに、そのプログラムが復号プログラムを外部に転送することによって、復号プログラムがハッキングされる可能性がある。その結果、ハッキングされた復号プログラムを用いることによって、暗号化されたプログラムのハッキングが可能になる。さらに、復号プログラムを変更することはできないので、一度ハッキングされるとそのＬＳＩは使えなくなる。
【０００９】
さらに、暗号化されたプログラムを転送する側で暗号プログラムや暗号強度の選択ができないといった問題が生じている。
【００１０】
そこで、本発明の目的は、コストを低減し、暗号化されたプログラムがハッキングされる可能性を低減した半導体集積回路装置を提供することである。
【００１１】
【課題を解決するための手段】
上記課題を解決するために、第１に、本発明の請求項１に係る半導体集積回路装置は、バスとの間でデータの入出力を行う第１のメモリと、前記バスとの間でデータの入出力を行う第２のメモリと、秘密鍵を保持する秘密鍵保持部と、外部からの前記バスへのアクセスを制御するバスポートと、前記バスポートを経由して暗号化されたプログラムと復号プログラムとを前記第１のメモリに格納させ、前記復号プログラムと前記秘密鍵とを用いて前記暗号化されたプログラムの復号を行い、復号化されたプログラムを実行するＣＰＵと、前記暗号化されたプログラムと前記復号プログラムとが前記第１のメモリに格納されると、前記バスポートに対して外部からのアクセスを禁止させ、前記第１及び第２のメモリへのアクセスを許可して前記暗号化されたプログラムと前記復号プログラムとの前記第１のメモリから前記第２のメモリへの転送を行い、前記転送が終了すると、前記第１のメモリへのアクセスを禁止し、前記復号及び前記復号化されたプログラムの実行が終了すると、前記第２のメモリへのアクセスを禁止する制御部とを備えるものである。
【００１２】
請求項１の発明によると、復号プログラムを保持するための不揮発性のメモリを半導体集積回路装置の内部に備える必要がなり、コストを低減することができる。また、復号中のプログラム及びデータを外部から観測されることなく、暗号化されたプログラムを復号し実行することができ、暗号化されたプログラムがハッキングされる可能性を低減できる。
【００１３】
また、請求項２の発明は、請求項１に記載の半導体集積回路装置において、前記ＣＰＵから前記秘密鍵保持部へのアクセスを制御する秘密鍵アクセスポートをさらに備え、前記秘密鍵アクセスポートは、前記転送が終了すると前記秘密鍵保持部へのアクセスを許可し、前記復号化されたプログラムの実行が終了すると前記秘密鍵保持部へのアクセスを禁止するものである。
【００１４】
また、請求項３の発明は、請求項１に記載の半導体集積回路装置において、前記ＣＰＵは、レジスタを含み、前記復号化されたプログラムの実行が終了すると、前記レジスタに格納されたデータを消去するものである。
【００１５】
また、請求項４の発明は、請求項１に記載の半導体集積回路装置において、前記制御部は、前記第１及び第２のメモリへのチップセレクト信号を制御することによって、前記第１及び第２のメモリへのアクセスを制御するものである。
【００１６】
また、請求項５の発明は、請求項１に記載の半導体集積回路装置において、前記制御部は、第１のフラグと第２のフラグとを格納するフラグ格納部を含み、前記第１のフラグがセットされているときには前記第１のメモリ及び前記第２のメモリへのアクセスを許可し、前記第１のフラグがリセットされ、前記第２のフラグがセットされているときには前記第１のメモリへのアクセスを禁止し、前記第１及び第２のフラグのいずれもがリセットされているときには、前記第２のメモリへのアクセスを禁止するものであり、前記バスポートは、前記第１または第２のフラグのうち少なくとも１つがセットされているときに、外部からのアクセスを禁止するものであり、前記ＣＰＵは、前記暗号化されたプログラム及び前記復号プログラムが前記第１のメモリに入力されると前記第１のフラグ及び前記第２のフラグをセットし、前記転送が終了すると前記第１のフラグをリセットし、前記復号化されたプログラムの実行が終了すると前記第２のフラグをリセットするものである。
【００１７】
上記課題を解決するために、第２に、本発明の請求項６に係る発明は、バスとの間でデータの入出力を行う第１のメモリと、前記バスとの間でデータの入出力を行う第２のメモリと、前記バスと前記第１のメモリとの間に接続され、前記バスからの前記第１のメモリへのアクセスを制御する第１のメモリポートと、前記バスと前記第２のメモリとの間に接続され、前記バスからの前記第２のメモリへのアクセスを制御する第２のメモリポートと、秘密鍵を保持する秘密鍵保持部と、外部からの前記バスへのアクセスを制御するバスポートと、レジスタを有し、前記バスポートを経由して暗号化されたプログラムと復号プログラムとの前記第１のメモリへの書き込みを行い、前記復号プログラムと前記秘密鍵とを用いて前記暗号化されたプログラムの復号を行い、復号化されたプログラムの前記第２のメモリへの書き込みを行い、復号化されたプログラムを実行するＣＰＵと、前記第１のメモリへの書き込みが終了すると、前記バスポートに対して外部からの前記バスへのアクセスを禁止させ、前記第１のメモリポートに対して前記第１のメモリへの書き込みを禁止させ、前記第２のメモリポートに対して前記第２のメモリへのアクセスを許可させ、前記復号化されたプログラムの実行が終了すると、前記ＣＰＵに対して前記レジスタに格納されたデータを消去させ、前記秘密鍵保持部へのアクセスを禁止させるとともに、前記第２のメモリポートに対して前記第２のメモリへのアクセスを禁止させる制御部とを備えるものである。
【００１８】
請求項６の発明によると、復号プログラムを保持するための不揮発性のメモリを半導体集積回路装置の内部に備える必要がなり、コストを低減することができる。また、復号中のプログラム及びデータを外部から観測されることなく、暗号化されたプログラムを復号し実行することができ、暗号化されたプログラムがハッキングされる可能性を低減できる。
【００１９】
【発明の実施の形態】
以下、本発明の各実施形態について図面を参照しながら説明する。
【００２０】
（第１の実施形態）
図１は、本発明の第１の実施形態における半導体集積回路装置１０１の構成を説明するためのブロック図である。
【００２１】
図１に示すように、暗号化されたプログラムが、プログラムの開発者側の機器たるＰＣ１２８ａ（第１の装置に対応する）からＰＣ１２６を介して、プログラムの使用者側へ転送される。使用者側の情報機器１４０内の半導体集積回路装置１０１（第２の装置に対応する）において、秘密鍵と復号プログラムを用いて暗号化されたプログラムを復号し実行する。
【００２２】
ＰＣ１２８ａは、プログラム開発者側の機器であり、プログラムＤ１２８ａとプログラムを暗号化するための暗号プログラム１２８ｂとを保持している。
【００２３】
情報機器１４０は、プログラム使用者側の機器であり、半導体集積回路装置１０１と、復号プログラムＤ１２３ａを保持するフラッシュメモリ１２３ａと、ＵＳＢアップストリームポート１２４と、周辺機器１５０とを有している。なお、外部バス１０２によって、半導体集積回路装置１０１とフラッシュメモリ１２３ａとＵＳＢアップストリームポート１２４とが接続されている。
【００２４】
半導体集積回路装置１０１は、ＣＰＵ１０３ａと、内蔵ＲＡＭ１０４（第１のメモリに対応する）及び１０５（第２のメモリに対応する）と、公開鍵格納レジスタ１０６と、秘密鍵格納レジスタ１０７と、秘密鍵アクセスポート１０８ａと、バスポート１１０ａと、セキュリティコントローラ１１１ａと、ＩＯポート１２２とを有している。なお、内部バス１０９は、図示するように接続されている。
【００２５】
ＣＰＵ１０３ａは、汎用レジスタコントローラ１１９ａと汎用レジスタ１２０ａとを有している。
【００２６】
セキュリティコントローラ１１１ａは、プログラム復号実行フラグ１１２Ｆ（第２のフラグに対応する）及びＲＡＭコピーフラグ１１３Ｆ（第１のフラグに対応する）とを格納するフラグ格納部１１３ａと、チップセレクトディスパッチャ１１４ａと、ＤＭＡ１１８ａとを有している。
【００２７】
以下に、各要素の内容及び動作について具体的に説明する。
【００２８】
外部バス１０２は、公開鍵格納レジスタ１０６に格納された公開鍵のパソコン１２８ａへの転送や、その公開鍵と暗号プログラムＤ１２８ｂとを用いて暗号化されたプログラムの半導体集積回路装置１０１への転送に用いられるものである。
【００２９】
ＣＰＵ１０３ａは、内蔵ＲＡＭ１０４や１０５、またはフラッシュメモリ１２３ａ上に格納されたプログラムによって動作する。通常のプログラムを動作させるほか、暗号化されたプログラムの復号や復号化されたプログラムを実行する。また、外部から入力される暗号化されたプログラムや復号プログラムＤ１２３ａを内蔵ＲＡＭ１０４に転送する。
【００３０】
内蔵ＲＡＭ１０４は、通常時、すなわち、復号プログラムＤ１２３ａ、復号化されたプログラムのいずれもが実行されていないときに使用されるメモリである。公開鍵と暗号プログラムＤ１２８ｂとを用いて暗号化されたプログラムを復号して実行する場合について説明する。まず、バスポート１１０ａが外部バス１０２と内部バス１０９とを接続した状態で、ＣＰＵ１１０ａによって、暗号化されたプログラムとフラッシュメモリ１２３ａ内の復号プログラムＤ１２３ａとが内蔵ＲＡＭ１０４に転送される。次に、バスポート１１０ａが外部バス１０２と内部バス１０９とを分離してから、ＤＭＡ１１８ａによって、暗号化されたプログラムと復号プログラムＤ１２３ａとが内蔵ＲＡＭ１０４から内蔵ＲＡＭ１０５に転送される。その後は、復号されたプログラムの実行が終了するまでの間、セキュリティコントローラ１１１ａによって、内部バス１０９から内蔵ＲＡＭ１０４へのアクセスが禁止される。
【００３１】
内蔵ＲＡＭ１０５は、復号プログラムＤ１２３ａの実行時、及び復号化されたプログラムの実行時に使用される。暗号化されたプログラムを復号して実行する場合について説明する。バスポート１１０ａが外部バス１０２と内部バス１０９とを分離した後に、ＤＭＡ１１８ａによって、暗号化されたプログラムと復号プログラムＤ１２３ａとが内蔵ＲＡＭ１０４から内蔵ＲＡＭ１０５に転送される。また、バスポート１１０ａが外部バス１０２と内部バス１０９とを接続している状態では、セキュリティコントローラ１１１ａによって、内部バス１０９から内蔵ＲＡＭ１０５へのアクセスが禁止される。したがって、内蔵ＲＡＭ１０５に一時的に記憶される復号化されたプログラムや、復号処理の実行途中のデータが外部から観測されることはない。
【００３２】
公開鍵格納レジスタ１０６は、公開鍵を格納した読み出し専用のレジスタである。公開鍵は、半導体集積回路装置１０１の外部にあるパソコン１２８ａに転送され、暗号プログラムＤ１２８ｂによってプログラムＤ１２８ａを暗号化する際に用いられる鍵である。
【００３３】
秘密鍵格納レジスタ１０７は、秘密鍵を格納した読み出し専用のレジスタである。秘密鍵は、復号プログラムＤ１２３ａによって暗号化されたプログラムを復号する際に用いられる鍵である。
【００３４】
秘密鍵アクセスポート１０８ａは、ＲＡＭコピーフラグ１１３Ｆがリセットされている間にのみ、ＣＰＵ１０３ａが秘密鍵格納レジスタ１０７から秘密鍵を読み出すことを可能にする。すなわち、復号プログラムＤ１２３ａが開始され、内蔵ＲＡＭ１０４から内蔵ＲＡＭ１０５への暗号化されたプログラムと復号プログラムＤ１２３ａの転送が完了し、ＲＡＭコピーフラグ１１３Ｆがリセットされて、その後プログラムを復号している間と復号化されたプログラムを実行している間にのみ、ＣＰＵ１０３ａが秘密鍵格納レジスタ１０７から秘密鍵を読み出すことを可能にし、それ以外のときは秘密鍵の読み出しを禁止する。
【００３５】
内部バス１０９は、半導体集積回路装置１０１内部におけるプログラムやデータの転送に使用される。
【００３６】
バスポート１１０ａは、プログラム復号実行フラグ１１２Ｆ、ＲＡＭコピーフラグ１１３Ｆのうちの少なくとも１つがセットされているときに、内部バス１０９と外部バス１０２とを分離する。このため、暗号化されたプログラムと復号プログラムＤ１２３ａの転送中、復号プログラムＤ１２３ａや復号化されたプログラムの実行中において、内部バス１０９及び内蔵ＲＡＭ１０５が外部から観測されることがない。その他の場合は内部バス１０９と外部バス１０２とを接続する。
【００３７】
セキュリティコントローラ１１１ａは、プログラム復号実行フラグ１１２Ｆ及びＲＡＭコピーフラグ１１３Ｆを保持するフラグ格納部１１３ａ、チップセレクトディスパッチャ１１４ａ、ＤＭＡコントローラ１１８（以下、「ＤＭＡ」という）を内蔵する。そして、暗号プログラムＤ１２８ｂと公開鍵格納レジスタ１０６に格納された公開鍵によって暗号化されたプログラムを復号し、復号化されたプログラムを実行する際に、バスポート１１０ａ、秘密鍵アクセスポート１０８ａ、チップセレクト信号１１６Ｓ及び１１７Ｓ、汎用レジスタコントローラ１１９ａの制御を行うものである。
【００３８】
暗号プログラムＤ１２８ｂによって暗号化されたプログラムを復号して実行する場合について説明する。まず、バスポート１１０ａが外部バス１０２と内部バス１０９とを接続した状態で、ＣＰＵ１０３ａによって、暗号化されたプログラム及び復号プログラムＤ１２３ａが内蔵ＲＡＭ１０４に転送されると、次に、バスポート１１０ａが外部バス１０２と内部バス１０９とを分離する。次に、チップセレクトディスパッチャ１１４ａはチップセレクト信号１１６Ｓ及び１１７Ｓをアサートさせて、ＤＭＡ１１８ａによって暗号化されたプログラム及び復号プログラムＤ１２３ａを内蔵ＲＡＭ１０４から内蔵ＲＡＭ１０５に転送させる。転送が終了すると、チップセレクトディスパッチャ１１４ａはチップセレクト信号１１６Ｓをネゲートし、その後は、ＣＰＵ１０３ａの制御に移る。そして、ＣＰＵ１０３ａにおいてプログラムが復号され、復号化されたプログラムの実行が終了するとチップセレクトディスパッチャ１１４ａに終了通知がなされる。通知を受けるとチップセレクトディスパッチャ１１４ａはチップセレクト信号１１７Ｓをネゲートし、汎用レジスタコントローラ１１９ａに汎用レジスタ１２０ａを初期化させ、ＣＰＵ１０３ａからのチップセレクト信号１１５Ｓをチップセレクト信号１１６Ｓとして出力する。その後、バスポート１１０ａは内部バス１０９と外部バス１０２とを接続する。
【００３９】
プログラム復号実行フラグ１１２Ｆは、復号プログラムＤ１２３ａの開始時にＣＰＵ１０３ａからセットされ、復号化されたプログラムの実行終了時にＣＰＵ１０３ａからリセットされる。復号プログラムＤ１２３ａが開始され、内蔵ＲＡＭ１０４から内蔵ＲＡＭ１０５への暗号化されたプログラムと復号プログラムＤ１２３ａの転送が完了し、ＲＡＭコピーフラグ１１３Ｆがリセットされる。その後、暗号化されたプログラムを復号している間と復号化されたプログラムが実行されている間は、内蔵ＲＡＭ１０４へのアクセスが禁止され、内蔵ＲＡＭ１０５及び秘密鍵格納レジスタ１０７へのアクセスを可能にする。プログラム復号実行フラグ１１２Ｆがリセットされると、内蔵ＲＡＭ１０５及び秘密鍵格納レジスタ１０７へのアクセスが禁止される。
【００４０】
ＲＡＭコピーフラグ１１３Ｆは、復号プログラムＤ１２３ａの開始時にＣＰＵ１０３ａからセットされ、内蔵ＲＡＭ１０４から内蔵ＲＡＭ１０５へのデータ転送の終了時にリセットされる。内蔵ＲＡＭ１０４及び１０５はメモリマップ上は同一なので、通常は双方へのチップセレクトが同時にアサートされることはない。ただし、暗号化されたプログラムなどを内蔵ＲＡＭ１０５に転送するために、内蔵ＲＡＭ１０４から内蔵ＲＡＭ１０５への転送時にＲＡＭコピーフラグ１１３Ｆをセットすることで、内蔵ＲＡＭ１０４、１０５それぞれへの、チップセレクトディスパッチャ１１４ａからのチップセレクト信号１１６Ｓ、１１７Ｓをそれぞれアサートする。
【００４１】
チップセレクトディスパッチャ（以下、「ＣＳディスパッチャ」とする）１１４ａは、ＲＡＭコピーフラグ１１３Ｆがセットされているとき、チップセレクト信号１１６Ｓ及び１１７Ｓをともにアサートする。これにより、ＤＭＡ１１８ａによる内蔵ＲＡＭ１０４から内蔵ＲＡＭ１０５への暗号化されたプログラムと復号プログラムＤ１２３ａの転送を可能にする。プログラム復号実行フラグ１１２Ｆがセットされ、かつＲＡＭコピーフラグ１１３Ｆがリセットされているとき、チップセレクト信号１１６Ｓをネゲートにするとともにチップセレクト信号１１５Ｓをチップセレクト信号１１７Ｓとして転送する。これにより、暗号化されたプログラムの復号時、復号化されたプログラムの実行時に内蔵ＲＡＭ１０５へのアクセスを可能にする。いずれにもあてはまらないとき、チップセレクト信号１１５Ｓをチップセレクト信号１１６Ｓとして転送するとともにチップセレクト信号１１７Ｓをネゲートする。これにより、通常時、すなわち、復号プログラムＤ１２３ａ、復号化されたプログラムのいずれもが実行されていないとき、内蔵ＲＡＭ１０５へのアクセスを禁止する。
【００４２】
チップセレクト信号１１５Ｓは、ＣＰＵ１０３ａから出力され、内蔵ＲＡＭ１０４または内蔵ＲＡＭ１０５にアクセスするときにアサートされる。
【００４３】
チップセレクト信号１１６Ｓ及び１１７Ｓは、ＣＳディスパッチャ１１４ａから出力され、チップセレクト信号１１６Ｓは内蔵ＲＡＭ１０４にアクセスするときにアサートされ、チップセレクト信号１１７Ｓは内蔵ＲＡＭ１０５にアクセスするときにアサートされる。
【００４４】
ＤＭＡコントローラ１１８ａは、ＲＡＭコピーフラグ１１３Ｆがセットされたとき、内蔵ＲＡＭ１０４から内蔵ＲＡＭ１０５への暗号化されたプログラムと復号プログラムＤ１２３ａの転送を行う。なお、転送が終了するとＲＡＭコピーフラグ１１３はリセットされる。
【００４５】
汎用レジスタコントローラ１１９ａは、プログラム復号実行フラグ１１２Ｆがリセットされるときに、汎用レジスタ１２０ａをリセットする。したがって、暗号化されたプログラムの復号中、復号化されたプログラムの実行中に汎用レジスタ１２０ａに生成されたデータが外部から観測されることはない。
【００４６】
ＩＯポート１２２は、ＩＯバス１２１を介してＣＰＵ１０３ａに接続されている。また、周辺機器１５０におけるサウンドモジュール１５１やビデオモジュール１５２などの外付けの回路と接続されている。
【００４７】
フラッシュメモリ１２３ａは、復号プログラムＤ１２３ａを保持する。
【００４８】
復号プログラムＤ１２３ａは、半導体集積回路装置１０１内部の内蔵ＲＡＭ１０４を経由して内蔵ＲＡＭ１０５に転送され、暗号化されたプログラムを復号する際に、秘密鍵格納レジスタ１０７に格納された秘密鍵とともに用いられるものである。
【００４９】
ＵＳＢアップストリームポート１２４は、ＵＳＢケーブル１２５を介してパソコン１２６に接続し、暗号化されたプログラムを半導体集積回路装置１０１に転送するのに用いられるものである。
【００５０】
ＵＳＢケーブル１２５は、パソコン１２６からＵＳＢアップストリームポート１２４への暗号化されたプログラムの転送に用いられるものである。
【００５１】
パソコン１２６は、パソコン１２８ａから暗号化されたプログラムを受け取り、半導体集積回路装置１０１を搭載した情報機器１４０に暗号化されたプログラムを転送するものである。
【００５２】
ネットワーク回線１２７は、パソコン１２８からパソコン１２６に暗号化されたプログラムを転送するために使用されるものである。
【００５３】
パソコン１２８は、ネットワーク回線１２７を介してパソコン１２６から公開鍵格納レジスタ１０６に格納された公開鍵を受け取り、プログラムＤ１２８ａを暗号プログラムＤ１２８ｂと公開鍵とを用いて暗号化し、ネットワーク回線１２７を介してパソコン１２６に転送するものである。
【００５４】
プログラム１２８ａは、暗号プログラムＤ１２８ｂと公開鍵格納レジスタ１０６に格納された公開鍵を用いて暗号化され、ネットワーク回線１２７、パソコン１２６、ＵＳＢケーブル１２５、ＵＳＢアップストリームポート１２４、外部バス１０２を介して半導体集積回路装置１０１に転送される。そして、半導体集積回路装置１０１内で、復号プログラムＤ１２３ａと秘密鍵格納レジスタ１０７に格納された秘密鍵とを用いて復号されるものである。
【００５５】
Ｄ１２８ｂは暗号プログラムであり、公開鍵格納レジスタ１０６に格納された公開鍵を用いてプログラムＤ１２８ａを暗号化するものである。
【００５６】
情報機器１４０は、半導体集積回路装置１０１、周辺機器１５０、フラッシュメモリ１２３ａ、及びＵＳＢアップストリームポート１２４を有している。
【００５７】
周辺機器１５０は、サウンドモジュール１５１、ビデオモジュール１５２を有しており、半導体集積回路装置１０１内のＩＯポート１２２に接続されている。
【００５８】
サウンドモジュール１５１は、半導体集積回路装置１０１のＩＯポート１２２に接続され、データ転送の送受信、制御信号の受信を通じて、サウンドの再生、記録等を行う。
【００５９】
ビデオモジュール１５２は、半導体集積回路装置１０１のＩＯポート１２２に接続され、データ転送の送受信、制御信号の受信を通じて、動画像の再生を行う。
【００６０】
次に、図２を用いて、暗号化されたプログラムを復号してプログラムＤ１２８ａを生成し、プログラムＤ１２８ａを実行する手順について概説する。
【００６１】
図２は、第１の実施形態における暗号化されたプログラムの復号の手順を示すフローチャートである。
【００６２】
まず、ステップＳＴ２０１において、ＣＰＵ１０３ａは復号プログラムＤ１２３ａと暗号化されたプログラムとを内蔵ＲＡＭ１０４への転送を行う。
【００６３】
次に、その転送が終了すると、ステップＳＴ２０２に進んで、ＣＰＵ１０３ａはプログラム復号実行フラグ１１２ＦとＲＡＭコピーフラグ１１３Ｆとをセットする。このとき、バスポート１１０ａは内部バス１０９と外部バス１０２との分離を行う。
【００６４】
次に、その分離後、ステップＳＴ２０３に進んで、ＤＭＡコントローラ１１８ａは内蔵ＲＡＭ１０４上の復号プログラムＤ１２３ａと暗号化されたプログラムとの内蔵ＲＡＭ１０５への転送を行う。
【００６５】
次に、その転送が終了すると、ステップＳＴ２０４に進んで、ＣＰＵ１０３ａはＲＡＭコピーフラグ１１３Ｆをリセットする。ここから、後述するステップＳＴ２０６が終了するまで、ＣＳディスパッチャ１１４ａはチップセレクト信号１１６Ｓをアサートしない。
【００６６】
次に、ステップＳＴ２０５に進んで、ＣＰＵ１０３ａは復号プログラムＤ１２３ａを実行し、秘密鍵格納レジスタ１０７に格納された秘密鍵を用いて暗号化されたプログラムを復号してプログラムＤ１２８ａを生成する。そして、生成されたプログラムＤ１２８ａを内蔵ＲＡＭ１０５に書き込む。
【００６７】
次に、ステップＳＴ２０６に進んで、ＣＰＵ１０３ａはプログラムＤ１２８ａを実行する。
【００６８】
最後に、ステップＳＴ２０７に進んで、ＣＰＵ１０３ａはプログラム復号実行フラグ１１２Ｆをリセットする。プログラム復号実行フラグ１１２Ｆがリセットされるとき、汎用レジスタコントローラ１１９ａは汎用レジスタ１２０ａをリセットする。プログラム復号実行フラグ１１２ａがリセットされると、バスポート１１０ａは内部バス１０９と外部バス１０２とを接続する。また、ＣＳディスパッチャ１１４ａはチップセレクト信号１１５Ｓをチップセレクト信号１１６Ｓとして出力し、チップセレクト信号１１７Ｓをネゲートする。
【００６９】
チップセレクト信号１１６Ｓは、復号プログラムＤ１２３ａが実行されプログラムＤ１２８ａの生成がなされているときはアサートされないので、復号中のデータやプログラムＤ１２８ａが内蔵ＲＡＭ１０４に記憶されることはない。さらに、チップセレクト信号１１７Ｓは、バスポート１１０ａが外部バス１０２と内部バス１０９とを接続しているときはネゲートされるので、復号中のデータやプログラムＤ１２８ａが外部から観測されることはない。
【００７０】
以上のように第１の実施形態によると、復号プログラムを保持するための不揮発性のメモリを半導体集積回路装置の内部に備える必要がなり、コストを低減することができる。また、復号中のプログラム及びデータを外部から観測されることなく、暗号化されたプログラムを復号し実行することができ、暗号化されたプログラムがハッキングされる可能性を低減できる。
【００７１】
（第２の実施形態）
図３は第２の実施形態に係る半導体集積回路装置３０１の構成を説明するためのブロック図である。
【００７２】
図３に示した半導体集積回路３０１は、図１に示した半導体集積回路装置１０１と比べ、メモリポート３０２（第１のメモリポートに対応する）及び３０３（第２のメモリポートに対応する）をさらに備えている点で相違する。また、セキュリティコントローラ１１１ｂは、プログラム復号実行フラグ１１２Ｆを格納するフラグ格納部１１３ｂのみを有している点で、図１に示したセキュリティコントローラ１１１ａと相違する。なお、その他の要素は、図１に示した要素と同様の動作を行うので、その説明は繰り返さない。
【００７３】
メモリポート３０２は、プログラム復号実行フラグ１１２Ｆがセットされているとき、セキュリティコントローラからの制御により内蔵ＲＡＭ１０４への書き込みを停止する。すなわち、プログラムの復号中、復号化されたプログラムの実行中は内蔵ＲＡＭ１０４へデータを書き込むことはできない。
【００７４】
メモリポート３０３は、プログラム復号実行フラグ１１２Ｆがリセットされているとき、セキュリティコントローラ１１１ｂにより内蔵ＲＡＭ１０５へのアクセスを停止する。すなわち、バスポート１１０ｂが内部バス１０９と外部バス１０２とを接続している間は内蔵ＲＡＭ１０５へのアクセスはできない。したがって、内蔵ＲＡＭ１０５に書き込まれる復号化されたプログラムや復号処理の実行中のデータが外部から観測されることはない。
【００７５】
次に、図４を用いて、暗号化されたプログラムを復号してプログラムＤ１２８ａを生成し、プログラムＤ１２８ａを実行する手順について説明する。
【００７６】
図４は、第２の実施形態における暗号化されたプログラムの復号の手順を示すフローチャートである。
【００７７】
まず、ステップＳＴ２０１において、ＣＰＵ１０３ｂは復号プログラムＤ１２３ａと暗号化されたプログラムとの内蔵ＲＡＭ１０４への転送を行う。
【００７８】
次に、その転送が終了すると、ステップＳＴ４０２に進んで、ＣＰＵ１０３ｂはプログラム復号実行フラグ１１２Ｆをセットする。このとき、バスポート１１０ｂは内部バス１０９と外部バス１０２との分離を行う。また、メモリポート３０２は内蔵ＲＡＭ１０４への書き込みを停止し、メモリポート３０３は内蔵１０５へのアクセスを許可する。
【００７９】
次に、ステップＳＴ２０５に進んで、ＣＰＵ１０３ｂは復号プログラムＤ１２３ａを実行し、秘密鍵格納レジスタ１０７に格納された秘密鍵を用いて暗号化されたプログラムを復号してプログラムＤ１２８ａを生成し、内蔵ＲＡＭ１０５に書き込む。
【００８０】
次に、ステップＳＴ２０６に進んで、ＣＰＵ１０３ｂはプログラムＤ１２８ａを実行する。
【００８１】
最後に、プログラムＤ１２８ａの実行が終了すると、ステップＳＴ２０７に進んで、プログラム復号実行フラグ１１２Ｆをリセットする。プログラム復号実行フラグ１１２Ｆがリセットされるとき、汎用レジスタコントローラ１１９ｂはセキュリティコントローラ１１１ｂからの制御により汎用レジスタ１２０ｂをリセットする。プログラム復号実行フラグ１１２Ｆがリセットされると、バスポート１１０ｂは内部バス１０９と外部バス１０２とを接続する。また、メモリポート３０２は、内蔵ＲＡＭ１０４への書き込みを許可し、メモリポート３０３は内蔵ＲＡＭ１０５へのアクセスを停止する。
【００８２】
半導体集積回路装置３０１では、メモリポート３０２は、復号プログラムＤ１２３ａを実行し、プログラムＤ１２８ａを生成しているときは内蔵ＲＡＭ１０４への書き込みを停止しているので、復号中のデータやプログラムＤ１２８ａが内蔵ＲＡＭ１０４に記憶されることはない。さらに、メモリポート３０３は、バスポート１１０が外部バス１０２と内部バス１０９とを接続しているときは内蔵ＲＡＭ１０５へのアクセスを停止しているので、復号中のデータやプログラムＤ１２８ａが外部に出力されることはない。
【００８３】
以上のように第２の実施形態によると、復号プログラムを保持するための不揮発性のメモリを半導体集積回路装置の内部に備える必要がなり、コストを低減することができる。また、復号中のプログラム及びデータを外部から観測されることなく、暗号化されたプログラムを復号し実行することができ、暗号化されたプログラムがハッキングされる可能性を低減できる。
【００８４】
（第３の実施形態）
図５は、第３の実施形態に係る半導体集積回路装置５０１の構成を説明するためのブロック図である。
【００８５】
図５に示す半導体集積回路装置５０１は、図１に示した半導体集積回路装置１０１と比べ、メモリポート４０２をさらに備えた点で相違する。また、セキュリティコントローラ１１１ｃは、プログラム復号実行フラグ１１２Ｆを格納するフラグ格納部１１３ｃと、ＲＡＭ初期化部５０２（メモリ初期化部に対応する）とを有する点で、図１に示したセキュリティコントローラ１１１ａと相違する。なお、その他の要素は、図１に示した要素と同様の動作を行うので、その説明は繰り返さない。
【００８６】
ＲＡＭ初期化部５０２は、プログラム復号実行フラグ１１２Ｆがリセットされる直前に、内蔵ＲＡＭ１０５上のすべての領域に”１”を書き込んでデータを消去する。これにより、内蔵ＲＡＭ１０５に書き込まれた復号されたプログラムや復号中のデータが外部から観測できないようにする。
【００８７】
次に、図６を用いて、暗号化されたプログラムを復号してプログラムＤ１２８ａを生成し、プログラムＤ１２８ａを実行する手順について説明する。
【００８８】
図６は、第３の実施形態における暗号化されたプログラムの復号の手順を示すフローチャートである。
【００８９】
まず、ステップＳＴ２０１において、ＣＰＵ１０３ｃは復号プログラムＤ１２３ａと暗号化されたプログラムとの内蔵ＲＡＭ１０４への転送を行う。
【００９０】
次に、その転送が終了すると、ステップＳＴ４０２に進んで、ＣＰＵ１０３ｃはプログラム復号実行フラグ１１２Ｆをセットする。このとき、バスポート１１０ｃは内部バス１０９と外部バス１０２との分離を行う。また、このとき、メモリポート４０２は、セキュリティコントローラ１１１ｃからの制御によって内蔵ＲＡＭ１０４への書き込みを停止する。
【００９１】
次に、ステップＳＴ２０５に進んで、ＣＰＵ１０３ｃは復号プログラムＤ１２３ａを実行し、秘密鍵格納レジスタ１０７に格納された秘密鍵を用いて暗号化されたプログラムを復号してプログラムＤ１２８ａを生成し、内蔵ＲＡＭ１０５に書き込む。
【００９２】
次に、生成されたプログラムＤ１２８ａが内蔵ＲＡＭ１０５に書き込まれると、ステップＳＴ２０６に進んで、ＣＰＵ１０３ｃはプログラムＤ１２８ａを実行する。
【００９３】
次に、ステップＳＴ６０７に進んで、ＲＡＭ初期化部５０２は内蔵ＲＡＭ１０５上のすべての領域に”１”を書き込んでデータを消去する。
【００９４】
最後に、内蔵ＲＡＭ１０５上のデータが消去されると、ステップＳＴ２０７に進んで、プログラム復号実行フラグ１１２Ｆをリセットする。プログラム復号実行フラグ１１２Ｆがリセットされるとき、汎用レジスタコントローラ１１９ｃは、セキュリティコントローラ１１１ｃからの制御により汎用レジスタ１２０ｃをリセットする。プログラム復号実行フラグ１１２Ｆがリセットされるとバスポート１１０ｃは内部バス１０９と外部バス１０２とを接続する。またこのとき、メモリポート４０２は、セキュリティコントローラ１１１ｃからの制御によって内蔵ＲＡＭ１０４への書き込みを許可する。
【００９５】
半導体集積回路装置５０１では、メモリポート４０２は、復号プログラムＤ１２３ａを実行し、プログラムＤ１２８ａを生成しているときは内蔵ＲＡＭ１０４への書き込みを停止しているので、復号中のデータやプログラムＤ１２８ａが内蔵ＲＡＭ１０４に記憶されることはない。さらに、ＲＡＭ初期化部５０２によって、バスポート１１０が外部バス１０２と内部バス１０９を分離状態から接続状態に変える直前に内蔵ＲＡＭ１０５上のデータをすべて消去しているので、復号中のデータやプログラムＤ１２８ａが外部に出力されることはない。
【００９６】
以上のように第３の実施形態によると、復号プログラムを保持するための不揮発性のメモリを半導体集積回路装置の内部に備える必要がなり、コストを低減することができる。また、復号中のプログラム及びデータを外部から観測されることなく、暗号化されたプログラムを復号し実行することができ、暗号化されたプログラムがハッキングされる可能性を低減できる。
【００９７】
（第４の実施形態）
図７は第４の実施形態に係る半導体集積回路装置７０１の構成を説明するためのブロック図である。
【００９８】
図７に示す半導体集積回路装置７０１は、図１に示した半導体集積回路装置１０１に比べて、復号鍵アクセスポート７０３及び復号鍵格納レジスタ７０２をさらに備えている点で相違する。また、ＰＣ１２８ｄは、プログラムＤ７２８ａ及び暗号プログラムＤ７２８ｂに加え、復号鍵暗号プログラムＤ７２８ｃ、暗号鍵Ｄ７２８ｄ、及び復号鍵Ｄ７２８ｅを保持する点で、図１に示したＰＣ１２８ａと相違する。フラグ格納部１１３ｄは、プログラム復号実行フラグ１１２Ｆ及びＲＡＭコピーフラグ１１３Ｆに加え、復号鍵復号フラグ７０４Ｆを保持する点で、図１に示したフラグ格納部１１３ａと相違する。フラッシュメモリ１２３ｄは、復号プログラム７２３ａに加えて復号鍵復号プログラムＤ７２３ｂを保持する点で相違する。なお、その他の要素は、図１に示した要素と同様の動作を行うが、図１の場合と相違する部分を中心に説明する。
【００９９】
ＣＰＵ１０３ｄは、内蔵ＲＡＭ１０４や１０５、またはフラッシュメモリ１２３ｄ上に格納されたプログラムによって動作する。通常のプログラムを動作させるほか、暗号化された復号鍵、暗号化されたプログラムの復号や復号化されたプログラムを実行する。また、外部から入力される暗号化された復号鍵、暗号化されたプログラムや復号鍵復号プログラムＤ７２３ｂ、復号プログラムＤ７２３ａを内蔵ＲＡＭ１０４に転送する。
【０１００】
内蔵ＲＡＭ１０４は、通常時、すなわち、復号プログラムＤ７２３ａ、復号鍵復号プログラムＤ７２３ｂ、復号化されたプログラムのいずれもが実行されていないときに使用されるメモリである。暗号化された復号鍵を復号して復号鍵格納レジスタ７０２に保存する場合について説明する。まず、バスポート１１０ｄが外部バス１０２と内部バス１０９とを接続した状態で、ＣＰＵ１０３ｄによって、暗号化された復号鍵とフラッシュメモリ１２３ｄ内の復号鍵復号プログラムＤ７２３ｂとが、外部バス１０２及び内部バス１０９を経由して内蔵ＲＡＭ１０４に転送される。次に、バスポート１１０ｄが外部バス１０２と内部バス１０９とを分離してから、ＤＭＡ１１８ｄによって、暗号化された復号鍵と復号鍵復号プログラムＤ７２３ｂとが内蔵ＲＡＭ１０４から内蔵ＲＡＭ１０５に転送される。その後は、復号鍵復号プログラムＤ７２３ｂが終了するまでの間、セキュリティコントローラ１１１ｄによって、内部バス１０９から内蔵ＲＡＭ１０４へのアクセスが禁止される。
【０１０１】
続いて、暗号化されたプログラムを復号して実行する場合について説明する。まず、バスポート１１０ｄが外部バス１０２と内部バス１０９とを接続した状態で、ＣＰＵ１０３ｄによって、暗号化されたプログラムと復号プログラムＤ７２３ａとが内蔵ＲＡＭ１０４に転送される。次に、バスポート１１０ｄが外部バス１０２と内部バス１０９とを分離してから、ＤＭＡ１１８ｄによって、暗号化されたプログラムと復号プログラムＤ７２３ａとが内蔵ＲＡＭ１０４から内蔵ＲＡＭ１０５に転送される。その後は、復号化されたプログラムの実行が終了するまでの間、セキュリティコントローラ１１１ｄによって、内部バス１０９から内蔵ＲＡＭ１０４へのアクセスが禁止される。
【０１０２】
内蔵ＲＡＭ１０５は、復号鍵復号プログラムＤ７２３ｂ、復号プログラムＤ７２３ａ、及び復号化されたプログラムＤ７２８ｂの実行時に使用される。暗号化された復号鍵を復号して復号鍵格納レジスタ７０２に保存する場合について説明する。バスポート１１０ｄが外部バス１０２と内部バス１０９とを分離した後に、ＤＭＡ１１８ｄによって、暗号化された復号鍵と復号鍵復号プログラムＤ７２３ｂが内蔵ＲＡＭ１０４から内蔵ＲＡＭ１０５に転送される。そして、暗号化された復号鍵の復号中、ＣＰＵ１０３ｄは内蔵ＲＡＭ１０５を使用してその復号を行う。また、暗号化されたプログラムを復号して実行する場合について説明する。バスポート１１０ｄが外部バス１０２と内部バス１０９とを分離した後に、暗号化されたプログラムと復号プログラムＤ７２３ａが内蔵ＲＡＭ１０４から内蔵ＲＡＭ１０５に転送される。暗号化されたプログラムの復号中及び復号化されたプログラムの実行中、ＣＰＵ１０３ｄは内蔵ＲＡＭ１０５を使用して暗号化されたプログラムの復号及び復号化されたプログラムの実行を行う。バスポート１１０ｄが外部バス１０２と内部バス１０９とを接続しているとき、内部バス１０９から内蔵ＲＡＭ１０５へのアクセスが禁止される。したがって、内蔵ＲＡＭ１０５に一時的に記憶される復号化された復号鍵Ｄ７２８ｅや復号化されたプログラムＤ７２８ａ、これらの復号処理の実行途中のデータが外部から観測されることはない。
【０１０３】
公開鍵格納レジスタ１０６は、公開鍵を格納した読み出し専用のレジスタである。公開鍵は、半導体集積回路装置７０１の外部にあるパソコン１２８ｄに転送され、復号鍵暗号プログラムＤ７２８ｃとともに復号鍵Ｄ７２８ｅを暗号化するために用いられる鍵である。暗号化された復号鍵は、復号鍵復号プログラムＤ７２３ｂと秘密鍵格納レジスタ１０７に格納された秘密鍵とを用いて復号される。
【０１０４】
秘密鍵格納レジスタ１０７は、秘密鍵を格納した読み出し専用のレジスタである。秘密鍵は、公開鍵を用いて暗号化された復号鍵を復号するときに用いられる鍵である。
【０１０５】
復号鍵格納レジスタ７０２は、復号鍵Ｄ７２８ｅを格納する書き込み及び読み出しが可能なレジスタである。復号鍵Ｄ７２８ｅは復号鍵復号プログラムＤ７２３ｂとともに、暗号化されたプログラムの復号に用いられる鍵である。
【０１０６】
秘密鍵アクセスポート１０８ｄは、復号鍵復号フラグ７０４ＦがセットされＲＡＭコピーフラグ１１３Ｆがリセットされている間にのみ、ＣＰＵ１０３ｄが秘密鍵格納レジスタ１０７から秘密鍵を読み出すことを可能にする。すなわち、復号鍵復号プログラムＤ７２３ｂが開始され、内蔵ＲＡＭ１０４から内蔵ＲＡＭ１０５への暗号化された復号鍵及び復号鍵復号プログラムＤ７２３ｂの転送が完了し、ＲＡＭコピーフラグ１１３Ｆがリセットされて、その後暗号化された復号鍵を復号している間にのみ、ＣＰＵ１０３ｄが秘密鍵格納レジスタ１０７から秘密鍵を読み出すことを可能にし、それ以外のときは秘密鍵の読み出しを禁止する。
【０１０７】
復号鍵アクセスポート７０３は、復号鍵復号フラグ７０４Ｆがセットされ、かつＲＡＭコピーフラグ１１３がリセットされている間は、復号鍵Ｄ７２８ｅの書き込みを可能にする。また、プログラム復号実行フラグ１１２Ｆがセットされ、かつＲＡＭコピーフラグ１１３Ｆがリセットされている間は、復号鍵Ｄ７２８ｅを読み出すことを可能にする。それ以外のときは書き込み、読み出しをともに禁止する。すなわち、復号鍵復号プログラムＤ７２３ｂが開始され、内蔵ＲＡＭ１０４から内蔵ＲＡＭ１０５への暗号化された復号鍵と復号鍵復号プログラムＤ７２３ｂの転送が完了し、ＲＡＭコピーフラグ１１３Ｆがリセットされて、その後暗号化された復号鍵を復号している間は復号鍵Ｄ７２８ｅの書き込みを可能にする。また、復号プログラムＤ７２３ａが開始され、内蔵ＲＡＭ１０４から内蔵ＲＡＭ１０５への暗号化されたプログラムと復号プログラムＤ７２３ａの転送が完了し、ＲＡＭコピーフラグ１１３Ｆがリセットされて、その後暗号化されたプログラムを復号している間は復号鍵Ｄ７２８ｅの読み出しを可能にする。
【０１０８】
バスポート１１０ｄは、復号鍵復号フラグ７０４Ｆ、プログラム復号実行フラグ１１２Ｆ、ＲＡＭコピーフラグ１１３Ｆの少なくとも１つがセットされているときに、内部バス１０９と外部バス１０２とを分離する。このため、復号鍵復号プログラムＤ７２３ｂ、復号プログラムＤ７２３ａ、復号化されたプログラムＤ７２８ａの実行中は、内部バス１０９及び内蔵ＲＡＭ１０５が外部から観測されることがない。その他の場合は内部バス１０９と外部バス１０２とを接続する。
【０１０９】
セキュリティコントローラ１１１ｄは、復号鍵復号フラグ７０４Ｆ、プログラム復号実行フラグ１１２Ｆ、及びＲＡＭコピーフラグ１１３Ｆを保持するフラグ格納部と、ＣＳディスパッチャ１１４ｄと、ＤＭＡ１１８ｄとを内蔵する。
【０１１０】
復号鍵復号フラグ７０４Ｆは、復号鍵復号プログラムＤ７２３ｂの開始時にＣＰＵ１０３からセットされ、復号鍵の復号終了時にＣＰＵ１０３からリセットされる。復号鍵復号プログラムＤ７２３ｂが開始され、内蔵ＲＡＭ１０４から内蔵ＲＡＭ１０５への暗号化された復号鍵と復号鍵復号プログラムＤ７２３ｂの転送が完了し、ＲＡＭコピーフラグ１１３Ｆがリセットされる。その後、暗号化された復号鍵を復号している間は、内蔵ＲＡＭ１０４へのアクセスを禁止し、内蔵ＲＡＭ１０５、秘密鍵格納レジスタ１０７、及び復号鍵格納レジスタ７０２へのアクセスを可能にする。復号鍵復号フラグ７０４Ｆがリセットされると、内蔵ＲＡＭ１０５、秘密鍵格納レジスタ１０７、及び復号鍵格納レジスタ７０２へのアクセスが禁止される。
【０１１１】
プログラム復号実行フラグ１１２Ｆは、復号プログラムＤ７２３ａの開始時にＣＰＵ１０３ｄからセットされ、復号化されたプログラムの実行終了時にＣＰＵ１０３ｄからリセットされる。復号プログラムＤ７２３ａが開始され、内蔵ＲＡＭ１０４から内蔵ＲＡＭ１０５への暗号化されたプログラムと復号プログラムＤ７２３ａの転送が完了し、ＲＡＭコピーフラグ１１３Ｆがリセットされる。その後、暗号化されたプログラムを復号している間と復号化されたプログラムを実行している間は、内蔵ＲＡＭ１０４へのアクセスを禁止し、内蔵ＲＡＭ１０５及び復号鍵格納レジスタ７０２へのアクセスを可能にする。プログラム復号実行フラグ１１２Ｆがリセットされると、内蔵ＲＡＭ１０５、秘密鍵格納レジスタ１０７及び復号鍵格納レジスタ７０２へのアクセスが禁止される。
【０１１２】
ＲＡＭコピーフラグ１１３Ｆは、復号鍵復号プログラムＤ７２３ｂまたは復号プログラムＤ７２３ａの開始時にＣＰＵ１０３ｄからセットされ、内蔵ＲＡＭ１０４から内蔵ＲＡＭ１０５へのデータの転送終了時にＣＰＵ１０３ｄからリセットされる。
【０１１３】
ＣＳディスパッチャ１１４ｄは、ＲＡＭコピーフラグ１１３Ｆがセットされているとき、チップセレクト信号１１６Ｓ及び１１７Ｓをともにアサートする。これにより、ＤＭＡ１１８ｄによる内蔵ＲＡＭ１０４から内蔵ＲＡＭ１０５への暗号化された復号鍵、復号鍵復号プログラムＤ７２３ｂ、暗号化されたプログラム、及び復号プログラムＤ７２３ａの転送を可能にする。また、復号鍵復号フラグ７０４Ｆまたはプログラム復号実行フラグ１１２Ｆがセットされ、かつＲＡＭコピーフラグ１１３Ｆがリセットされているとき、チップセレクト信号１１６Ｓをネゲートするとともにチップセレクト信号１１５Ｓをチップセレクト信号１１７Ｓとして転送する。これにより、暗号化された復号鍵の復号時、暗号化されたプログラムの復号時、及び復号化されたプログラムの実行時に内蔵ＲＡＭ１０５へのアクセスを可能にする。いずれにもあてはまらないとき、チップセレクト信号１１５Ｓをチップセレクト信号１１６Ｓとして転送するとともにチップセレクト信号１１７Ｓをネゲートする。これにより、通常時、すなわち、復号鍵復号プログラムＤ７２３ｂ、復号プログラムＤ７２３ａ、復号化されたプログラムＤ７２８ａのいずれもが実行されていないとき、内蔵ＲＡＭ１０５へのアクセスを禁止する。
【０１１４】
ＤＭＡ１１８ｄは、ＲＡＭコピーフラグ１１３Ｆがセットされたとき、内蔵ＲＡＭ１０４から内蔵ＲＡＭ１０５への暗号化された復号鍵、復号鍵復号プログラムＤ７２３ｂ、暗号化されたプログラム、復号プログラムＤ７２３ａの転送を行い、転送が終了するとＲＡＭコピーフラグ１１３Ｆをリセットする。
【０１１５】
汎用レジスタコントローラ１１９ｄは、復号鍵復号フラグ７０４Ｆまたはプログラム復号実行フラグ１１２Ｆがリセットされるとき汎用レジスタ１２０ｄをリセットする。したがって、暗号化された復号鍵の復号中、暗号化されたプログラムの復号中、及び復号化されたプログラムの実行中に汎用レジスタ１２０ｄに生成されたデータが外部から観測されることはない。
【０１１６】
復号鍵復号プログラムＤ７２３ｂは、フラッシュメモリ１２３ｄに保持されている。復号鍵暗号プログラムＤ７２８ｃと公開鍵とによって暗号化された復号鍵を復号する際に、半導体集積回路装置７０１内部の内蔵ＲＡＭ１０４を経由して内蔵ＲＡＭ１０５に転送され、秘密鍵格納レジスタ１０７に格納された秘密鍵とともに暗号化された復号鍵を復号するものである。
【０１１７】
復号プログラムＤ７２３ａは、フラッシュメモリ１２３ｄに保持されている。暗号プログラムＤ７２８ｂと暗号鍵Ｄ７２８ｄとによって暗号化されたプログラムを復号する際に、半導体集積回路装置７０１内部の内蔵ＲＡＭ１０４を経由して内蔵ＲＡＭ１０５に転送され、復号鍵格納レジスタ７０２に格納された復号鍵とともに暗号化されたプログラムを復号するものである。
【０１１８】
プログラムＤ７２８ａは、暗号プログラムＤ７２８ｂと暗号鍵Ｄ７２８ｄとを用いて暗号化され、ネットワーク回線１２７、パソコン１２６、ＵＳＢケーブル１２５、ＵＳＢアップストリームポート１２４、外部バス１０２を介して半導体集積回路装置７０１に転送される。そして、半導体集積回路装置７０１内において、復号プログラムＤ７２３ａと復号鍵格納レジスタ１０７に格納された復号鍵Ｄ７２８ｅを用いて復号されるものである。
【０１１９】
暗号プログラムＤ７２８ｂは、暗号鍵Ｄ７２８ｄを用いてプログラムＤ７２８ａを暗号化するものである。
【０１２０】
復号鍵暗号プログラムＤ７２８ｃは、公開鍵格納レジスタ１０６に格納された公開鍵とともに復号鍵Ｄ７２８ｅを暗号化するものである。
【０１２１】
暗号鍵Ｄ７２８ｄは、暗号プログラムＤ７２８ｂとともにプログラムＤ７２８ａを暗号化するものである。
【０１２２】
復号鍵Ｄ７２８ｅは、復号プログラムＤ７２３ａとともに、暗号鍵Ｄ７２８を用いて暗号化されたプログラムを復号するものである。
【０１２３】
情報機器７４０は、半導体集積回路装置７０１、周辺機器１５０、フラッシュメモリ１２３ｄ、ＵＳＢアップストリームポート１２４とを有している。
【０１２４】
次に、図８を用いて、暗号化された復号鍵を復号して復号鍵Ｄ７２８ｅを復号鍵格納レジスタ７０２に格納する手順について説明する。
【０１２５】
図８は、第４の実施形態における暗号化された復号鍵の復号の手順を示すフローチャートである。
【０１２６】
まず、ステップＳＴ８０１において、ＣＰＵ１０３ｄは復号鍵復号プログラムＤ７２３ｂと暗号化された復号鍵とを内蔵ＲＡＭ１０４への転送を行う。
【０１２７】
次に、その転送が終了すると、ステップＳＴ８０２に進んで、ＣＰＵ１０３ｄは復号鍵復号フラグ７０４ＦとＲＡＭコピーフラグ１１３Ｆとをセットする。このとき、バスポート１１０ｄは内部バス１０９と外部バス１０２との分離を行う。
【０１２８】
次に、その分離後、ステップＳＴ８０３に進んで、ＤＭＡ１１８ｄは内蔵ＲＡＭ１０４上の復号鍵復号プログラムＤ７２３ｂと暗号化された復号鍵との内蔵ＲＡＭ１０５への転送を行う。
【０１２９】
次に、その転送が終了すると、ステップＳＴ８０４に進んで、ＣＰＵ１０３ｄはＲＡＭコピーフラグ１１３Ｆをリセットする。ここから、後述するステップＳＴ８０５が終了するまで、ＣＳディスパッチャ１１４ｄはチップセレクト信号１１６Ｓをアサートしない。
【０１３０】
次に、ステップＳＴ８０５に進んで、ＣＰＵ１０３ｄは秘密鍵格納レジスタ１０７に格納された秘密鍵を用いて復号鍵復号プログラムＤ７２３ｂを実行し、暗号化された復号鍵を復号して復号鍵Ｄ７２８ｅを生成し、復号鍵格納レジスタ７０２へ書き込む。
【０１３１】
最後に、ステップＳＴ８０６に進んで、復号鍵復号フラグ７０４Ｆをリセットする。復号鍵復号フラグ７０４Ｆがリセットされるとき、汎用レジスタコントローラ１１９ｄは汎用レジスタ１２０ｄをリセットする。復号鍵復号フラグ７０４Ｆがリセットされると、バスポート１１０ｄは内部バス１０９と外部バス１０２とを接続する。また、ＣＳディスパッチャ１１４ｄはチップセレクト信号１１５Ｓをチップセレクト信号１１６Ｓとして転送し、チップセレクト信号１１７Ｓをネゲートする。
【０１３２】
図９は、復号鍵復号フラグ７０４Ｆ、プログラム復号実行フラグ１１２Ｆ、及びＲＡＭコピーフラグ１１３Ｆの状態に対応するバスポート１１０ｄ、秘密鍵アクセスポート１０８ｄ、復号鍵アクセスポート７０３、チップセレクト信号１１６Ｓ及び１１７Ｓの状態を示す。
【０１３３】
図９において、バスポート１１０ｄ、秘密鍵アクセスポート１０８ｄ、復号鍵アクセスポート７０３がデータの転送を可能にする場合にはオープンと表記し、そのデータの転送が可能でない場合にはクローズと表記している。また、チップセレクト信号１１６Ｓ及び１１７Ｓとしてチップセレクト信号１１５Ｓ上の信号を転送する場合、ＣＳ１１５と表記している。
【０１３４】
図９に示すように、バスポート１１０ｄが外部バス１０２と内部バス１０９とを接続しているときは、秘密鍵格納レジスタ１０７及び復号鍵格納レジスタ７０２へのアクセスはできない。また、チップセレクト信号１１６Ｓは、復号鍵復号プログラムＤ７２３ｂが実行され、復号鍵Ｄ７２８ｅを生成しているときはアサートされない。このため、復号中のデータや秘密鍵、復号鍵Ｄ７２８ｅが内蔵ＲＡＭ１０４に記憶されることはない。さらに、チップセレクト信号１１７Ｓは、バスポート１１０ｄが外部バス１０２と内部バス１０９とを接続しているときはネゲートされているので、復号中のデータや秘密鍵、復号鍵Ｄ７２８ｅが外部に出力されることはない。
【０１３５】
次に、図１０を用いて、暗号化されたプログラムを復号してプログラムＤ７２８ａを生成し、プログラムＤ７２８ａを実行する手順について説明する。
【０１３６】
図１０は、第４の実施形態における暗号化されたプログラムの復号の手順を示すフローチャートである。
【０１３７】
まず、ステップＳＴ１００１において、ＣＰＵ１０３ｄは復号プログラムＤ７２３ａと暗号化されたプログラムとを内蔵ＲＡＭ１０４に転送する。
【０１３８】
次に、その転送が終了すると、ステップＳＴ１００２に進んで、ＣＰＵ１０３ｄはプログラム復号実行フラグ１１２Ｆ、ＲＡＭコピーフラグ１１３Ｆをセットする。このとき、バスポート１１０ｄは内部バス１０９と外部バス１０２との分離を行う。
【０１３９】
次に、その分離後、ステップＳＴ１００３に進んで、ＤＭＡ１１８ｄは内蔵ＲＡＭ１０４上の復号プログラムＤ７２３ａと暗号化されたプログラムとの内蔵ＲＡＭ１０５への転送を行う。
【０１４０】
次に、その転送が終了すると、ステップＳＴ１００４に進んで、ＣＰＵ１０３ｄはＲＡＭコピーフラグ１１３Ｆをリセットする。ここから、後述するステップＳＴ１００６が終了するまで、ＣＳディスパッチャ１１４ｄはチップセレクト信号１１６Ｓをアサートしない。
【０１４１】
次に、ステップＳＴ１００５に進んで、ＣＰＵ１０３ｄは復号鍵Ｄ７２８ｅを用いて復号プログラムＤ７２３ａを実行し、暗号化されたプログラムを復号してプログラムＤ７２８ａを生成する。そして、生成されたプログラムＤ７２８ａを内蔵ＲＡＭ１０５に書き込む。
【０１４２】
次に、ステップＳＴ１００６に進んで、ＣＰＵ１０３ｄはプログラムＤ７２８ａを実行する。
【０１４３】
最後に、ステップＳＴ１００７に進んで、ＣＰＵ１０３ｄはプログラム復号実行フラグ１１２Ｆをリセットする。プログラム復号実行フラグ１１２Ｆがリセットされるとき、汎用レジスタコントローラ１１９ｄは汎用レジスタ１２０ｄをリセットする。プログラム復号実行フラグ１１２Ｆがリセットされると、バスポート１１０ｄは内部バス１０９と外部バス１０２とを接続する。また、ＣＳディスパッチャ１１４ｄはチップセレクト信号１１５Ｓをチップセレクト信号１１６Ｓとして転送し、チップセレクト信号１１７Ｓをネゲートする。
【０１４４】
上記図９で示したように、チップセレクト信号１１６Ｓは、復号プログラムＤ７２３ａを実行し、プログラムＤ７２８ａを生成しているときはアサートされない。このため、復号中のデータや復号鍵Ｄ７２８ｅ、プログラムＤ７２８ａが内蔵ＲＡＭ１０４に記憶されることはない。さらに、チップセレクト信号１１７Ｓは、バスポート１１０ｄが外部バス１０２と内部バス１０９とを接続しているときはネゲートされるので、復号中のデータや復号鍵Ｄ７２８ｅ、プログラムＤ７２８ａが外部に出力されることはない。
【０１４５】
このように、復号プログラムを保持するための不揮発性のメモリを半導体集積回路装置の内部に備える必要がなり、コストを低減することができる。また、復号中のプログラム及びデータを外部から観測されることなく、暗号化されたプログラムを復号し実行することができ、暗号化されたプログラムがハッキングされる可能性を低減できる。
【０１４６】
さらに、暗号化されたプログラムを転送する側で暗号プログラムや暗号強度の選択することができる。
【０１４７】
＜プログラムの引き渡し方法及びシステム＞
図１１〜図１７は、プログラム引き渡しシステム及びその方法を説明するための図であって、本実施形態である第４の実施形態を例にして以下に説明する。
【０１４８】
図１１〜図１７は、プログラムの使用者側が用いる情報機器内の半導体集積回路装置７０１（第２の装置に対応する）と、プログラムの開発者側が用いるＰＣ１２８ｄ（第１の装置に対応する）との間で、プログラムを暗号化し、暗号化されたプログラムを復号するまでのデータのやりとりを示している。
【０１４９】
まず、図１１に示すように、使用者側の半導体集積回路装置７０１は、公開鍵格納レジスタ１０６に格納された公開鍵Ｄ１０６を開発者側のＰＣ１２８ｄに転送する。
【０１５０】
次に、図１２に示すように、開発者側のＰＣ１２８ｄは公開鍵Ｄ１０６と復号鍵暗号プログラムＤ７２８ｃとを用いて復号鍵Ｄ７２８ｅを暗号化し、暗号化された復号鍵１２０１を生成する。
【０１５１】
次に、図１３に示すように、開発者側のＰＣ１２８ｄは暗号化された復号鍵１２０１を使用者側の半導体集積回路装置７０１に転送する。
【０１５２】
次に、図１４に示すように、使用者側の半導体集積回路装置７０１は、秘密鍵格納レジスタ１０７に格納された秘密鍵Ｄ１０７と復号鍵復号プログラムＤ７２３ｂとを用いて、暗号化された復号鍵１２０１を復号し、復号鍵Ｄ７２８ｅを復号鍵格納レジスタ７０２に格納する。
【０１５３】
次に、図１５に示すように、開発者側のＰＣ１２８ｄは暗号鍵Ｄ７２８ｄと暗号プログラムＤ７２８ｂとを用いてプログラムＤ７２８ａを暗号化し、暗号化されたプログラム１５０１を生成する。
【０１５４】
次に、図１６に示すように、開発者側のＰＣ１２８ｄは暗号化されたプログラム１５０１を使用者側の半導体集積回路装置７０１に転送する。
【０１５５】
最後に、図１７に示すように、使用者側の半導体集積回路装置７０１は、暗号化されたプログラム１５０１を復号鍵Ｄ７２８ｅと復号プログラムＤ７２３ａとを用いて復号し、そして、復号化されたプログラムＤ７２８ａを実行する。
【０１５６】
このようにすることで、暗号化されたプログラムは、プログラム開発者側の所有する暗号鍵により暗号化されて使用者側に渡され、プログラム開発者側の所有する復号鍵により復号化することができるので、プログラム開発者側の所望する暗号強度によりプログラムを暗号化して渡すことが可能になる。
【０１５７】
なお、以上で説明した第１〜第４の実施形態における半導体集積回路では、内蔵ＲＡＭ１０４、内蔵ＲＡＭ１０５の制御をチップセレクト信号を用いて行う場合について説明したが、ライトイネーブル信号・リードイネーブル信号を用いた場合であっても、同様に、各実施形態において本発明は実施可能であることは言うまでもない。
【０１５８】
【発明の効果】
以上のように、本発明に係る半導体集積回路装置によると、復号プログラムを保持するための不揮発性のメモリを半導体集積回路装置の内部に備える必要がなくなり、コストを低減することができる。また、復号中のプログラム及びデータを外部から観測されることなく、暗号化されたプログラムを復号し実行することができ、暗号化されたプログラムがハッキングされる可能性を低減できる。
【図面の簡単な説明】
【図１】  第１の実施形態における半導体集積回路装置の構成を説明するためのブロック図である。
【図２】  暗号化されたプログラムの復号の手順を示すフローチャートである。
【図３】  第２の実施形態における半導体集積回路装置の構成を説明するためのブロック図である。
【図４】  暗号化されたプログラムの復号の手順を示すフローチャートである。
【図５】  第３の実施形態における半導体集積回路装置の構成を説明するためのブロック図である。
【図６】  暗号化されたプログラムの復号の手順を示すフローチャートである。
【図７】  第４の実施形態における半導体集積回路装置の構成を説明するためのブロック図である。
【図８】  暗号化された復号鍵の復号の手順を示すフローチャートである。
【図９】  フラグの状態、バスポート、及びチップセレクト信号の状態の相関を示す図である。
【図１０】  暗号化されたプログラムの復号の手順を示すフローチャートである。
【図１１】  使用者側からプログラム開発者側への公開鍵の転送を示す図である。
【図１２】  復号鍵の暗号化を示す図である。
【図１３】  プログラム開発者側から使用者側への暗号化された復号鍵の転送を示す図である。
【図１４】  暗号化された復号鍵の復号を示す図である。
【図１５】  プログラムの暗号化を示す図である。
【図１６】  プログラム開発者側から使用者側への暗号化されたプログラムの転送を示す図である。
【図１７】  暗号化されたプログラムの復号を示す図である。
【図１８】  従来の半導体集積回路装置の構成を示すブロック図である。
【符号の説明】
１０１    半導体集積回路（第２の装置）
３０１、４０１  半導体集積回路
７０１  半導体集積回路装置（第２の装置）
１０２  外部バス
１０３ａ〜１０３ｄ  ＣＰＵ
１０４  内蔵ＲＡＭ（第１のメモリ）
１０５  内蔵ＲＡＭ（第２のメモリ）
１０６  公開鍵格納レジスタ
１０７  秘密鍵格納レジスタ
１０８ａ、１０８ｄ  秘密鍵アクセスポート
１０９  内部バス
１１０ａ〜１１０ｄ  バスポート
１１１ａ〜１１１ｄ  セキュリティコントローラ
１１３ａ、１１３ｄ  フラグ格納部
１１４ａ、１０４ｄ  チップセレクトディスパッチャ
１１５Ｓ〜１１７Ｓ  チップセレクト信号
１１８ａ、１１８ｄ  ＤＭＡコントローラ
１１９ａ〜１１９ｄ  汎用レジスタコントローラ
１２０ａ〜１２０ｄ  汎用レジスタ
１２１  ＩＯバス
１２２  ＩＯポート
１２３ａ、１２３ｄ  フラッシュメモリ
１２４  ＵＳＢアップストリームポート
１２５  ＵＳＢケーブル
１２６  パソコン
１２７  ネットワーク回線
１２８ａ、１２８ｄ  パソコン（第１の装置）
１４０、７４０  情報機器
１５０  周辺機器
１５１  サウンドモジュール
１５２  ビデオモジュール
３０２  メモリポート（第１のメモリポート）
３０３  メモリポート（第２のメモリポート）
５０２  ＲＡＭ初期化部（メモリ初期化部）
７０２  復号鍵格納レジスタ
７０３  復号鍵アクセスポート
Ｄ１２３ａ  復号プログラム
Ｄ１２３ｂ  復号鍵復号プログラム
Ｄ１２８ａ、Ｄ７２８ａ  プログラム
Ｄ１２８ｂ、Ｄ７２８ｂ  暗号プログラム
Ｄ１２８ｃ、Ｄ７２８ｃ  復号鍵暗号プログラム
Ｄ７２８ｄ  暗号鍵
Ｄ７２８ｅ  復号鍵
１１２Ｆ  プログラム復号実行フラグ（第２のフラグ）
１１３Ｆ  ＲＡＭコピーフラグ（第１のフラグ）
７０４Ｆ  復号鍵復号フラグ
【図１】
0004349788.tif 000002
【図２】
0004349788.tif 000003
【図３】
0004349788.tif 000004
【図４】
0004349788.tif 000005
【図５】
0004349788.tif 000006
【図６】
0004349788.tif 000007
【図７】
0004349788.tif 000008
【図８】
0004349788.tif 000009
【図９】
0004349788.tif 000010
【図１０】
0004349788.tif 000011
【図１１】
0004349788.tif 000012
【図１２】
0004349788.tif 000013
【図１３】
0004349788.tif 000014
【図１４】
0004349788.tif 000015
【図１５】
0004349788.tif 000016
【図１６】
0004349788.tif 000017
【図１７】
0004349788.tif 000018
【図１８】
0004349788.tif 000019