(57)【要約】【課題】本発明は、電子機器を起動するための所定の情報に対する要求変更に柔軟に対応し得、かつ所定の情報に基づいて起動装置を正常に起動させることができるようにする。【解決手段】電子機器を起動するために必要な所定の情報に対して一方向性関数により算出した計算値に秘密鍵で暗号化することにより生成した正しい署名データと、一方向性関数と、秘密鍵に対応した公開鍵と、所定の情報が正しいことを検証するための署名検証関数とを検証データ記憶手段に記憶しておき、記憶手段に記憶された所定の情報を読み出した時点におけるデータに対して一方向性関数により算出した現在の計算値と、公開鍵と、正しい署名データとを用いて署名検証関数により所定の情報の真偽を判定し、その判定結果に基づいて所定の情報を用いた電子機器の起動を制御するようにする。【選択図】        図１
2004355561.tif 000002
【特許請求の範囲】
【請求項１】
電子機器を起動するために必要な所定の情報に対して一方向性関数により算出した計算値に秘密鍵で暗号化することにより生成した正しい署名データと、上記一方向性関数と、上記秘密鍵に対応した公開鍵と、上記所定の情報が正しいことを検証するための署名検証関数とを記憶する検証データ記憶手段と、
上記所定の情報を記憶しておく記憶手段と、
上記所定の情報を読み出した時点におけるデータに対して上記一方向性関数により算出した現在の計算値と、上記公開鍵と、上記正しい署名データとを用いて上記署名検証関数により上記所定の情報の真偽を判定する判定手段と、
上記判定手段による判定結果に基づいて上記所定の情報を用いた上記電子機器の起動を制御する制御手段と
を具えることを特徴とする起動装置。
【請求項２】
上記記憶手段及び上記検証データ記憶手段は、不揮発性メモリでなる
ことを特徴とする請求項１に記載の起動装置。
【請求項３】
上記一方向関数とは、ハッシュ計算関数である
ことを特徴とする請求項１に記載の起動装置。
【請求項４】
上記判定手段は、上記記憶手段から上記所定の情報をブロック単位で読み出し、当該ブロック単位で上記一方向性関数により上記現在の計算値を順次算出する
ことを特徴とする請求項１に記載の起動装置。
【請求項５】
電子機器を起動するために必要な所定の情報に対して一方向性関数により算出した計算値に秘密鍵で暗号化することにより生成した正しい署名データと、上記一方向性関数と、上記秘密鍵に対応した公開鍵と、上記所定の情報が正しいことを検証するための署名検証関数とを検証データ記憶手段に記憶する検証データ記憶ステップと、
記憶手段に記憶された上記所定の情報を読み出した時点におけるデータに対して上記一方向性関数により算出した現在の計算値と、上記公開鍵と、上記正しい署名データとを用いて上記署名検証関数により上記所定の情報の真偽を判定する判定ステップと、
上記判定ステップによる判定結果に基づいて上記所定の情報を用いた上記電子機器の起動を制御する制御ステップと
を具えることを特徴とする起動方法。
【請求項６】
電子機器に対して、
電子機器を起動するために必要な所定の情報に対して一方向性関数により算出した計算値に秘密鍵で暗号化することにより生成した正しい署名データと、上記一方向性関数と、上記秘密鍵に対応した公開鍵と、上記所定の情報が正しいことを検証するための署名検証関数とを記憶する検証データ記憶ステップと、
記憶手段に記憶された上記所定の情報を読み出した時点におけるデータに対して上記一方向性関数により算出した現在の計算値と、上記公開鍵と、上記正しい署名データとを用いて上記署名検証関数により上記所定の情報の真偽を判定する判定ステップと、
上記判定ステップによる判定結果に基づいて上記所定の情報を用いた上記電子機器の起動を制御する制御ステップと
を実行させることを特徴とする起動プログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は起動装置に関し、例えば電源投入時に電子機器を起動する場合に適用して好適なものである。
【０００２】
【従来の技術】
従来、ＴＶ（Ｔｅｌｅｖｉｓｉｏｎ）、セットトップボックス、ディジタルスチールカメラ等の電子機器においては、当該電子機器に搭載されている起動装置によりＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）に記憶されたブートプログラムに従ってハードディスクや不揮発性メモリに格納されたＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）等の基本プログラムをＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）上に読み出すことにより起動し、当該基本プログラムに従って基本動作やメイン処理を実行するようになされている。
【０００３】
ところで起動装置においては、ハードディスク等から基本プログラムを起動することができなければ電子機器を動作させることができないため、当該基本プログラムを正確に読み出して正常に起動することが非常に重要である。
【０００４】
従って起動装置では、基本プログラムを正常に起動するためのブートプログラムについてデータの一部が壊されていたり、改竄等が施されていたりすると、基本プログラムを正確に起動することができないばかりか、仮に起動したとしても電子機器が予測の付かない異常な動作をしかねず、故障の原因にもなってしまう。
【０００５】
そこで起動装置では、基本プログラムを正常に起動するためのブートプログラムに関して、一切改竄等が行われることが無いように読み出し専用のＲＯＭに格納しておくことが一般的に行われている（例えば、特許文献１参照）。
【０００６】
【特許文献１】
特開平７−２１０３７５号公報
【０００７】
【発明が解決しようとする課題】
ところでかかる構成の起動装置においては、ブートプログラムを読み出し専用のＲＯＭに格納してしまっているため、開発や設計側で基本プログラムに対する要求変更があった場合には当該ＲＯＭを新しく購入し直し、かつ当該起動装置に対してハードウェア的な改修作業が必要になってくるという問題があった。
【０００８】
本発明は以上の点を考慮してなされたもので、電子機器を起動するための所定の情報に対する要求変更に柔軟に対応し得、かつ所定の情報に基づいて起動装置を正常に起動させ得る起動装置を提案しようとするものである。
【０００９】
【課題を解決するための手段】
かかる課題を解決するため本発明においては、電子機器を起動するために必要な所定の情報に対して一方向性関数により算出した計算値に秘密鍵で暗号化することにより生成した正しい署名データと、一方向性関数と、秘密鍵に対応した公開鍵と、所定の情報が正しいことを検証するための署名検証関数とを検証データ記憶手段に記憶しておき、記憶手段に記憶された所定の情報を読み出した時点におけるデータに対して一方向性関数により算出した現在の計算値と、公開鍵と、正しい署名データとを用いて署名検証関数により所定の情報の真偽を判定し、その判定結果に基づいて所定の情報を用いた電子機器の起動を制御するようにする。
【００１０】
これにより、電子機器を起動する際の時点における所定の情報が真正なものであるか否かを検証することができると共に、その検証結果に基づいて所定の情報が真正なものであると判断した場合に限って当該電子機器を起動させることができるので、当該電子機器の誤動作を確実に防止することができる。
【００１１】
【発明の実施の形態】
以下、図面について、本発明の一実施の形態を詳述する。
【００１２】
図１に示すように起動装置１は、ブートプログラムＢＰを例えばＮＡＮＤ型フラッシュメモリでなる不揮発性メモリ３を使用し、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）２によって当該不揮発性メモリ３からブートプログラムＢＰをＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）に読み出した後、当該ブートプログラムＢＰに従って起動するようになされている。
【００１３】
ここで不揮発性メモリ３には、通常のデータ記憶領域３１にブートプログラムＢＰが格納されていると共に、当該データ記憶領域３１に格納する前の改竄等が施される可能性の無い正確なブートプログラムＢＰに対して所定の秘密鍵（後述する）を用いて暗号化することにより生成した正しい署名データＳＤが格納されている。
【００１４】
また不揮発性メモリ３は、上述のデータ記憶領域３１以外にＲＯＭ領域３２を有しており、当該ＲＯＭ領域３２に当該ブートプログラムＢＰのデータが壊されていないか、或いは改竄等が施されていないかを検証するために必要なハッシュ計算関数ＨＦ、上述の秘密鍵に対応した公開鍵ＫＤ１及びブートプログラムＢＰが改竄等の施されていない真正なものであるか否かを検証するための楕円曲線署名検証アルゴリズムと呼ばれる署名検証関数ＳＦがデータとして予め格納されている。
【００１５】
この場合、起動装置１はハッシュ計算関数ＨＦ、公開鍵ＫＤ１及び署名検証関数ＳＦを読み出し専用のＲＯＭ領域３２に格納していることにより、当該ハッシュ計算関数ＨＦ、公開鍵ＫＤ１及び署名検証関数ＳＦのデータが不正に改竄等されることを未然に防止し得るようになされている。
【００１６】
また不揮発性メモリ３には、上述のハッシュ計算関数ＨＦ、公開鍵ＫＤ１及び署名検証関数ＳＦの格納されているＲＯＭ領域３２のアドレスや、ハッシュ計算関数の種類（例えばＭＤ５）や署名検証関数ＳＦを実行するのに必要な各種情報等がヘッダ情報ＨＤとしてヘッダ領域３３に予め格納されている。
【００１７】
起動装置１のＣＰＵ２は、電源の投入がされたことを認識すると、当該不揮発性メモリ３のＲＯＭ領域３２に格納された署名検証関数ＳＦを用いて現時点でデータ記憶領域３１に格納されているブートプログラムＢＰが改竄等の施されていない正確なデータであるか否かを検証し、その結果ブートプログラムＢＰが真正であると確認できたときに限って当該ブートプログラムＢＰに従って起動するようになされている。
【００１８】
ここで、署名検証関数ＳＦを用いて現時点でデータ記憶領域３１に格納されている現在のブートプログラムＢＰが改竄等の施されていない真正なものであるか否かについて検証する原理について説明する。
【００１９】
なお起動装置１は、署名検証関数ＳＦを用いてブートプログラムＢＰが真正なものであるか否かの検証を行うための起動プログラム（図示せず）が不揮発性メモリ３のＲＯＭ領域３２に格納されており、当該起動プログラムに従ってブートプログラムＢＰの検証を行うようになされている。
【００２０】
まず図２（Ａ）に示すように、上述した正しい署名データＳＤは、改竄等が施されていない状態の正確なブートプログラムＢＰに対してハッシュ計算関数ＨＦでハッシュ値ＨＦＤ１を算出し、当該ハッシュ値ＨＦＤ１に対してユーザのみが所有する秘密鍵ＳＫ１で暗号化を施すことにより生成されるものであり、これが不揮発性メモリ３のデータ記憶領域３１に予め格納されている。
【００２１】
ここでハッシュ計算関数ＨＦには、例えばＭＤ５と呼ばれるアルゴリズムが用いられ、当該ＭＤ５のアルゴリズムに従ってブートプログラムＢＰに基づくハッシュ値ＨＦＤ１が算出される。
【００２２】
このハッシュ計算関数ＨＦにより算出したハッシュ値ＨＦＤ１は、元のブートプログラムＢＰが例え１ビットでもデータに変更があった場合には異なった値を示すものであり、すなわち改竄等が行われていない場合と改竄等が行われていた場合とではハッシュ値ＨＦＤ１が異なったものになってしまう。従って、本発明の起動装置１においてはハッシュ計算関数ＨＦを用いることはブートプログラムＢＰが真正なものであるか否かを検証するための非常に有用な手段となっている。
【００２３】
またハッシュ値ＨＦＤ１は、元のブートプログラムＢＰと比較してそのデータ量が１２８ビットと小さく、ＣＰＵ２にとっても大きなデータ量のブートプログラムＢＰそのものを扱うよりも負荷が小さくて済むというメリットがある。
【００２４】
ところで、この正しい署名データＳＤは、不揮発性メモリ３のデータ記憶領域３１に格納されているため誰でもが容易に読み出すことができるが、通常の公開鍵暗号方式とは逆に秘密鍵ＳＫ１によって暗号化を施す非対称暗号化方式を採用しているので、図２（Ｂ）に示すように当該秘密鍵ＳＫ１に対応する公開鍵ＫＤ１を不正なユーザが用いたとしても正しい署名データＳＤを基にハッシュ値ＨＦＤ１を復元することはできないようになされている。
【００２５】
また図２（Ｃ）に示すように、仮にハッシュ値ＨＦＤ１が復元できた場合であって、ハッシュ計算関数ＨＦやその他の関数を用いたとしても当該ハッシュ計算関数ＨＦが一方向性関数であるため、当該ハッシュ値ＨＦＤ１に基づいて元のブートプログラムＢＰを復元することはできないようになされている。
【００２６】
すなわち、正しい署名データＳＤが不揮発性メモリ３のデータ記憶領域３１に格納されていて、誰でもが読み出すことができるとしても、当該ブートプログラムＢＰの秘匿性は確実に保証されているのである。
【００２７】
図３に示すように、ＣＰＵ２は現時点でデータ記憶領域３１に格納されているブートプログラムＢＰが改竄等の施されていない真正なものであるかを検証するに当っては、上述の正しい署名データＳＤと、秘密鍵ＳＫ１に対応する公開鍵ＫＤ１と、現時点のブートプログラムＢＰを基にハッシュ計算関数ＨＦを用いて算出した現在のハッシュ値ＨＦＤ２を署名検証関数ＳＦに代入することにより、当該署名検証関数ＳＦに従って検証データＣＫ１を算出する。
【００２８】
ここで検証データＣＫ１は、そのデータサイズが正しい署名データＳＤの約半分であり、ＣＰＵ２はその検証データＣＫ１と正しい署名データＳＤの対応する一部分とを比較した結果、一致或いは不一致によって現時点におけるブートプログラムＢＰが真正なものであるか否かを判定し得るようになされている。
【００２９】
この場合、ＣＰＵ２は検証データＣＫ１のデータサイズが正しい署名データＳＤの約半分であり、当該検証データＣＫ１と正しい署名データＳＤの対応する一部分とを比較するだけで済むので、データ処理量の負担を軽減すると共に短時間でブートプログラムＢＰが真正なものであるか否かを判定することができる。
【００３０】
すなわちＣＰＵ２は、この検証データＣＫ１と正しい署名データＳＤの一部分とが完全に一致している場合には現時点でデータ記憶領域３１に格納されているブートプログラムＢＰには改竄等が施されていない真正なものであると判断し得、そうでないときにはブートプログラムＢＰには改竄等が施されている可能性が高いと判断し得るようになされている。
【００３１】
その結果、ＣＰＵ２はブートプログラムＢＰが真正であると判断した場合に限って当該ブートプログラムＢＰに従って電子機器を起動させ、そうでないときには電子機器に異常動作が起きるようなことを未然に防ぐために当該ブートプログラムＢＰに従って電子機器を起動させることを中止するようになされている。
【００３２】
なお起動装置１では、現時点のブートプログラムＢＰが真正なものであって、仮に正しい署名データＳＤが改竄等されてしまった場合には、検証データＣＫ１と正しい署名データＳＤの一部分とが一致することは有り得ず、あくまで現時点のブートプログラムＢＰが真正なものであって、かつ正しい署名データＳＤが改竄等の施されていない場合に限って検証データＣＫ１と正しい署名データＳＤの一部分とが一致することになる。
【００３３】
かくして起動装置１は、正しい署名データＳＤが改竄等されたものでなく、かつ現時点におけるブートプログラムＢＰが真正である場合に限って、当該ブートプログラムＢＰに従って電子機器を起動し得、当該電子機器の誤動作を確実に防止し得るようになされている。
【００３４】
因みに起動装置１においては、検証データＣＫ１のデータサイズが正しい署名データＳＤの約半分であり、決して正しい署名データＳＤに相当するデータサイズの検証データＣＫ１を出力することはなく、あくまで現時点におけるブートプログラムＢＰが真正なものであるか否かを判定するだけであるため、正しい署名データＳＤに相当するデータサイズの検証データＣＫ１を出力してしまうことによって当該正しい署名データＳＤの改竄等を助長することを未然に防止し得るようになされている。
【００３５】
実際上、図４に示すように、起動装置１のＣＰＵ２はルーチンＲＴ１の開始ステップから入ってステップＳＰ１へ移り、ブートプログラムＢＰのＲＡＭ４への読み込みが全て終了しているか否かを判定する。
【００３６】
ここで否定結果が得られると、このことはブートプログラムＢＰのＲＡＭ４への読み込みが全て終了していないことを表しており、このときＣＰＵ２は次のステップＳＰ２へ移る。
【００３７】
ステップＳＰ２においてＣＰＵ２は、ブートプログラムＢＰを所定データ量でなるブロック単位で順次読み出し、次のステップＳＰ３へ移る。
【００３８】
ステップＳＰ３においてＣＰＵ２は、ブートプログラムＢＰをブロック単位で読み出した際、そのブロック単位でハッシュ計算関数ＨＦによりブロック単位のハッシュ値ＢＨＤを算出し、上述のステップＳＰ１へ戻る。
【００３９】
ステップＳＰ１においてＣＰＵ２は、再度ブートプログラムＢＰのＲＡＭ４への読み込みが全て終了しているか否かを判定し、ステップＳＰ２及びステップＳＰ３の処理を繰り返し実行する。
【００４０】
このときＣＰＵ２は、ブロック単位でブートプログラムＢＰを順次読み出す毎にそれまで読み出したブロックのハッシュ値ＢＨＤを含めた新たなハッシュ値ＢＨＤを算出するようになされており、これによりブロック単位でのブートプログラムＢＰの読み込みが全て終了したと同時に当該ブートプログラムＢＰ全体に対する現在のハッシュ値ＨＦＤ２が算出し終わっていることになる。
【００４１】
これに対して、ステップＳＰ１において肯定結果が得られると、このことはブートプログラムＢＰのＲＡＭ４への読み込みが全ブロックに対して終了していること、すなわち現時点におけるブートプログラムＢＰ全体に対する現在のハッシュ値ＨＦＤ２が算出し終えていることを表しており、このときＣＰＵ２は次のステップＳＰ４へ移る。
【００４２】
ステップＳＰ４においてＣＰＵ２は、ブートプログラムＢＰに対する現在のハッシュ値ＨＦＤ２が計算されたので、データ記憶領域３１に格納されている正しい署名データＳＤ、ＲＯＭ領域３２に格納されている公開鍵ＫＤ１を読み出し、次のステップＳＰ５へ移る。
【００４３】
ステップＳＰ５においてＣＰＵ２は、ステップＳＰ４で読み出した正しい署名データＳＤ、公開鍵ＫＤ１及び現在のハッシュ値ＨＦＤ２を署名検証関数ＳＦに代入することにより、当該署名検証関数ＳＦを用いて現時点におけるブートプログラムＢＰが改竄等の施されていない真正なデータであるか否かを検証し、次のステップＳＰ６へ移る。
【００４４】
ステップＳＰ６においてＣＰＵ２は、署名検証関数ＳＦによって検出した検証データＣＫ１と正しい署名データＳＤの一部とが一致しないときには検証結果が正しくないことを表しており、このときＣＰＵ２は次のステップＳＰ７へ移る。
【００４５】
ステップＳＰ７においてＣＰＵ２は、検証結果が正しくないためブートプログラムＢＰに改竄等が施されている可能性があると判断し、当該ブートプログラムＢＰに従って電子機器を起動することは行わず、次のステップＳＰ１０へ移って処理を終了する。
【００４６】
これに対してステップＳＰ６で肯定結果が得られると、このことは検証結果が正しいので現時点におけるブートプログラムＢＰについて改竄等が施されている可能性はないことを表しており、このときＣＰＵ２は次のステップＳＰ８へ移る。
【００４７】
ステップＳＰ８においてＣＰＵ２は、現時点におけるブートプログラムＢＰが真正なものであると判断し、当該ブートプログラムＢＰに従って電子機器を起動した後、次のステップＳＰ９でメイン処理へ移行し、次のステップＳＰ１０へ移って処理を終了する。
【００４８】
以上の構成において、起動装置１のＣＰＵ２は予め正しい署名データＳＤを不揮発性メモリ３のデータ記憶領域３１に格納しておき、当該正しい署名データＳＤと、現時点におけるブートプログラムＢＰを基にハッシュ計算関数ＨＦにより算出した現在のハッシュ値ＨＦＤ２と、正しい署名データＳＤを生成する際に用いた秘密鍵ＳＫ１に対応した公開鍵ＫＤ１とを用いて署名検証関数ＳＦで検証データＣＫ１を算出し、これを正しい署名データＳＤの対応する一部分と比較する。
【００４９】
その結果、ＣＰＵ２は検証データＣＫ１と正しい署名データＳＤの対応する一部分とが一致したときに限りブートプログラムＢＰが真正なものであると判断して電子機器を起動することにより当該電子機器の正常な動作を保証することができる。
【００５０】
またＣＰＵ２は、現時点におけるブートプログラムＢＰのデータが壊れていた場合や改竄されていた場合のみならず、正しい署名データＳＤのデータが壊れていた場合や改竄されていた場合にも、検証データＣＫ１と正しい署名データＳＤの対応する一部分とが一致することはなく、電子機器の起動を行わないので当該電子機器の誤動作を未然に防止することができる。
【００５１】
また起動装置１は、不揮発性メモリ３のデータ記憶領域３１に正しい署名データＳＤを格納してあるため、仮にブートプログラムＢＰを変更する必要が生じた場合でも、従来のように正しい署名データＳＤをＲＯＭに格納しておいた場合と比較して当該ＲＯＭを新しく購入し直したり、かつハードウェア的な改修作業を必要とせず、データ記憶領域３１の正しい署名データＳＤを書き換えるだけの簡易な修正作業だけでブートプログラムＢＰの変更要求に対して柔軟に対応することができる。
【００５２】
さらに起動装置１は、そのような場合であっても、ブートプログラムＢＰに対してハッシュ計算関数ＨＦという一方向性関数を用いてハッシュ値ＨＦＤ１を算出し、そのハッシュ値ＨＦＤ１に対して秘密鍵ＳＫ１で暗号化を施すという非対称暗号方式を用いて正しい署名データＳＤを生成することができるので、当該正しい署名データＳＤからブートプログラムＢＰを逆算して復元することを確実に防止して当該ブートプログラムＢＰの秘匿性を保証することができる。
【００５３】
以上の構成によれば、起動装置１のＣＰＵ２は不揮発性メモリ３のデータ記憶領域３１に予め算出しておいた正しい署名データＳＤを格納しておくと共に、ＲＯＭ領域３２に現時点におけるブートプログラムＢＰが改竄等の施されていない真正なものであるか否かを検証して判定するために最低限必要なハッシュ計算関数ＨＦ、公開鍵ＫＤ１及び署名検証関数ＳＦのデータを格納しておくことにより、電子機器を起動させる際に現時点におけるブートプログラムＢＰが真正なものであるか否かを確実に検証することができると共に、その検証結果に応じて電子機器の起動を制御することができ、かくして当該起動装置１を搭載している電子機器の誤動作を防止して正常に起動させることができる。
【００５４】
また起動装置１は、正しい署名データＳＤに関してはＲＯＭ領域３２ではなくデータ記憶領域３１に格納しておくようにしたことにより、ブートプログラムＢＰの変更要求に対して正しい署名データＳＤの内容を書き換えることが可能であり、電子機器の使用変更等に対して簡易かつ柔軟に対応することができる。
【００５５】
なお上述の実施の形態においては、検証データ記憶手段としての不揮発性メモリ３のＲＯＭ領域３２にハッシュ計算関数ＨＦ、公開鍵ＫＤ１及び署名検証関数ＳＦのデータを格納するようにした場合について述べたが、本発明はこれに限らず、例えば図１との対応部分に同一符号を付した図５に示すように、不揮発性メモリ３のＲＯＭ領域３２ではなく、別個に設けられたＲＯＭ５にこれらのデータを格納するようにしても良い。
【００５６】
また上述の実施の形態においては、正しい署名データＳＤ、ハッシュ計算関数ＨＦ、公開鍵ＫＤ１及び署名検証関数ＳＦのデータを不揮発性メモリ３に格納するようにした場合について述べたが、本発明はこれに限らず、例えば図１との対応部分に同一符号を付した図６に示すように、これら全てのデータを不揮発性メモリ３ではなく読み出し専用のＲＯＭ５に格納するようにしても良い。
【００５７】
さらに上述の実施の形態においては、現時点におけるブートプログラムＢＰが真正なものであるか否かを検証するために必要な情報としてハッシュ計算関数ＨＦ、公開鍵ＫＤ１及び署名検証関数ＳＦを用いるようにした場合について述べたが、本発明はこれに限らず、図１との対応部分に同一符号を付した図７に示すように、ハッシュ計算関数ＨＦ、公開鍵ＫＤ１及び署名検証関数ＳＦのデータの誤りを検出するためのＣＲＣ（Ｃｙｃｌｉｃ  Ｒｅｄｕｎｄａｎｃｙ  Ｃｈｅｃｋ）をＲＯＭ領域３２に格納しておき、当該ＣＲＣを用いるようにしても良い。
【００５８】
この場合、図８に示すように起動装置１のＣＰＵ２は、ルーチンＲＴ２の開始ステップから入ってステップＳＰ２１へ移る。ステップＳＰ２１においてＣＰＵ２は、不揮発性メモリ３のＲＯＭ領域３２に格納されたハッシュ計算関数ＨＦ、公開鍵ＫＤ１及び署名検証関数ＳＦを読み出すと共にＣＲＣを読み出し、当該ＣＲＣを用いてハッシュ計算関数ＨＦ、公開鍵ＫＤ１及び署名検証関数ＳＦが全て正しいデータであるかを検出する。
【００５９】
ここで否定結果が得られると、ＲＯＭ領域３２に格納されていたハッシュ計算関数ＨＦ、公開鍵ＫＤ１及び署名検証関数ＳＦが正しくなかったことを表しており、このときＣＰＵ２は次のステップＳＰ２２へ移り、これらのハッシュ計算関数ＨＦ、公開鍵ＫＤ１及び署名検証関数ＳＦを用いたブートプログラムＢＰの検証を中止し、ステップＳＰ３２へ移って処理を中止する。
【００６０】
なおステップＳＰ２３〜ステップＳＰ３１までの処理については、ルーチンＲＴ１におけるステップＳＰ１〜ステップＳＰ９までの処理と同様であるため、その説明は省略する。
【００６１】
これにより起動装置１は、常時正しいハッシュ計算関数ＨＦ、公開鍵ＫＤ１及び署名検証関数ＳＦを用いてブートプトグラムＢＰの検証を実行することができるので、正しい検証結果に基づいて電子機器を起動させることができ、かくして電子機器の誤動作を確実に低減することができる。
【００６２】
さらに上述の実施の形態においては、正しい署名データＳＤを記憶手段としての不揮発性メモリ３のデータ記憶領域３１に格納するようにした場合について述べたが、本発明はこれに限らず、署名検証関数ＳＦの中にデータとして埋め込むようにしても良い。この場合、正しい署名データＳＤに対して改竄等が施されることを確実に防止することができる。
【００６３】
さらに上述の実施の形態においては、一方向性関数としてハッシュ計算関数（ＭＤ５）を用いると共に、非対称暗号方式として楕円曲線検証アルゴリズムでなる署名検証関数ＳＦを用いるようにした場合について述べたが、本発明はこれに限らず、ＭＤ４等の一方向性関数や他の種類の署名検証関数を用いるようにしても良い。
【００６４】
さらに上述の実施の形態においては、判定手段及び制御手段としてのＣＰＵ２が署名検証関数ＳＦに従って正しい署名データＳＤの約半分のデータサイズでなる検証データＣＫ１を生成し、当該検証データＣＫ１と正しい署名データＳＤの対応する一部分とを比較することにより現時点におけるブートプログラムＢＰが真正なものであるか否かを判定し得るようにした場合について述べたが、本発明はこれに限らず、正しい署名データＳＤと同サイズでなければ、正しい署名データＳＤの約１／４のデータサイズでなる検証データＣＫ１を生成し、当該検証データＣＫ１と正しい署名データＳＤの対応する一部分とを比較することにより現時点におけるブートプログラムＢＰが真正なものであるか否かを判定するようにしても良い。
【００６５】
さらに上述の実施の形態においては、電子機器を起動させるために必要な情報としてブートプログラムＢＰを対象とするようにした場合について述べたが、本発明はこれに限らず、電子機器を起動させるために必要な個人情報、内部情報等のその他種々の情報を対象とするようにしても良い。
【００６６】
【発明の効果】
上述のように本発明によれば、電子機器を起動する際の時点における所定の情報が真正なものであるか否かを検証することができると共に、その検証結果に基づいて所定の情報が真正なものであると判断した場合に限って当該電子機器を起動させることができるので、当該電子機器の誤動作を確実に防止することができ、かくして電子機器を起動するための所定の情報に対する要求変更に柔軟に対応し得、かつ所定の情報に基づいて起動装置を正常に起動させることができる。
【図面の簡単な説明】
【図１】本発明における起動装置の構成を示す略線的ブロック図である。
【図２】非対称暗号方式及び一方向性関数による特性の説明に供する略線図である。
【図３】署名検証関数を用いた署名検証アルゴリズムの原理の説明に供する略線図である。
【図４】署名検証関数を用いた起動処理手順を示すフローチャートである。
【図５】他の実施の形態における起動装置の構成（１）を示す略線的ブロック図である。
【図６】他の実施の形態における起動装置の構成（２）を示す略線的ブロック図である。
【図７】他の実施の形態における起動装置の構成（３）を示す略線的ブロック図である。
【図８】他の実施の形態におけるＣＲＣ及び署名検証関数を用いた起動処理手順を示すフローチャートである。
【符号の説明】
１……起動装置、２……ＣＰＵ、３……不揮発性メモリ、４……ＲＡＭ、５……ＲＯＭ、３１……データ記憶領域、３２……ＲＯＭ領域、３３……ヘッダ領域。
【図１】
2004355561.tif 000003
【図２】
2004355561.tif 000004
【図３】
2004355561.tif 000005
【図４】
2004355561.tif 000006
【図５】
2004355561.tif 000007
【図６】
2004355561.tif 000008
【図７】
2004355561.tif 000009
【図８】
2004355561.tif 000010