(57)【特許請求の範囲】
【請求項１】
鍵発行サーバの公開鍵と、初期化プログラムを記憶する記憶部と、
外部から入力される前記鍵発行サーバの公開鍵と初期化プログラムを前記記憶部に書き込むデバッグ部と、
前記記憶部に記憶された初期化プログラムを読み出して、実行する命令実行ユニットと、
乱数を発生させる乱数発生部と、
前記初期化プログラムが実行されることにより、前記デバッグ部を無効にするデバックポート無効化部と、
前記初期化プログラムが実行されることにより、前記デバッグ部の無効後に前記乱数発生部により発生させられた乱数を、前記記憶部内の前記公開鍵で暗号化する公開鍵暗号化部と、
前記初期化プログラムが実行されることにより、暗号化された乱数を、前記鍵発行サーバに送信する送信部と、
前記初期化プログラムが実行されることにより、前記鍵発行サーバから、前記乱数により暗号化された個別鍵を受信する受信部と、
前記初期化プログラムが実行されることにより、前記暗号化された個別鍵を前記乱数で復号して個別鍵を取得し、前記個別鍵を前記記憶部に書き込む個別鍵書込み部とを
を有することを特徴とする通信装置。
【請求項２】
前記受信部は、前記鍵発行サーバの秘密鍵による前記乱数の署名データを、前記鍵発行サーバから受信し、
前記個別鍵書込み部は、前記乱数と前記公開鍵に基づき前記署名データの検証を行い、検証が成功したときのみ、前記個別鍵を前記記憶部に書き込む
ことを特徴とする請求項1に記載の通信装置。
【請求項３】
一意識別子を記憶する一意識別子レジスタをさらに備え、
前記公開鍵暗号化部は、前記乱数と前記一意識別子の結合データを、前記公開鍵で暗号化し、
前記送信部は、暗号化した結合データを、前記鍵発行サーバに出力する
ことを特徴とする請求項1または2に記載の通信装置。
【請求項４】
前記記憶部は、アプリケーションプログラムを記憶し、
前記命令実行ユニットは、前記アプリケーションプログラムを実行することにより、前記記憶部に記憶された前記個別鍵を用いて、所定のアプリケーションサーバと暗号化通信を行う
ことを特徴とする請求項1ないし3のいずれか一項に記載の通信装置。
【請求項５】
外部から入力される、鍵発行サーバの公開鍵と、初期化プログラムをデバッグ部が受け取って、記憶部に書き込む書き込みステップと、
前記記憶部に書き込まれた前記初期化プログラムを読み出して、実行する実行ステップと、
前記初期化プログラムが実行されることにより、前記デバッグ部を無効にするステップと、
前記初期化プログラムが実行されることにより、前記デバッグの無効後に発生させた乱数を前記記憶部内の前記公開鍵で暗号化するステップと、
前記初期化プログラムが実行されることにより、暗号化された乱数を、前記鍵発行サーバに送信するステップと、
前記初期化プログラムが実行されることにより、前記鍵発行サーバから、前記乱数により暗号化された個別鍵を受信するステップと、
前記初期化プログラムが実行されることにより、前記暗号化された個別鍵を前記乱数で復号して個別鍵を取得し、前記個別鍵を前記記憶部に書き込むステップと
を備えた通信方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、通信装置および通信方法に関し、特に鍵発行サーバから個別鍵を安全に取得する技術に関する。
【背景技術】
【０００２】
組み込み機器向けワンチップマイコンに置いて、書き込まれたソフトウェアのノウハウの流出防止や第3者による不正改造防止を目的として、マイコンオンチップメモリのプログラム書き込み兼デバッグポートを、プログラム書き込み後に無効化するプログラム保護機能をもった製品が知られている。
【０００３】
また、セキュリティ機器向けのCPUとして、チップ内部に鍵情報と暗号ハードウェアを持つ製品が知られているが、このような製品は鍵管理コストと生産数の少なさにより一般に高価である。また、開発工程において開発者がメモリダンプやデバッグ機能を用いることで機密情報を不正に取得する行為を防止する機構が知られている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開2007−249996号公報
【非特許文献】
【０００５】
【非特許文献１】“PIC32MX Flash Programming Specification”, Microchip Technology Inc., 2010, ISBN: 978-1-60932-150-5
【非特許文献２】“DS5250 High-Speed Secure Microcontroller Data Sheet”, Maxim Integrated Products, Inc.,  2010
【非特許文献３】“Extensible Authentication Protocol (EAP) and IEEE 802.1x: Tutorial and Empirical Experience”, IEEE Radio Communications・December 2005
【発明の概要】
【発明が解決しようとする課題】
【０００６】
認証向け秘密鍵（個別鍵）を持つ機器について、上記プログラム保護機能を持った製品を適用した場合、ソフトウェアとともに秘密鍵をチップ内蔵メモリに書き込んだ後デバッグポートを無効化すれば、その後秘密鍵はチップ解析のような特殊技術を適用しない限り安全である。
【０００７】
だが、上記方法を単純に適用した場合、製造工程では秘密鍵が平文で扱われるため内部不正者の脅威に対して安全ではない。低価格のマイコンにおいては、ICカードの製造工程で採用される多段階の鍵管理はもとより,そもそもまったく秘密鍵をもたないため、書込みデータを単に暗号化する方法は適用できない。このようなマイコンを適用したシステムにも秘密鍵書き込みを安全に行える方法が求められている。
【０００８】
本発明の一観点は、上記課題を解決するためになされたものであり、製造工程において秘密鍵（個別鍵）を安全に書き込むことを目的とする。
【課題を解決するための手段】
【０００９】
本発明の一態様としての通信装置は、鍵発行サーバと通信する通信装置であって、記憶部と、デバッグ部と、命令実行ユニットと、乱数発生部と、ポート無効化部と、公開鍵暗号化部と、送信部と、受信部と、個別鍵書込み部とを備える。
【００１０】
前記記憶部は、鍵発行サーバの公開鍵と、初期化プログラムを記憶する。
【００１１】
前記デバッグ部は、外部から入力される前記鍵発行サーバの公開鍵と初期化プログラムを前記記憶部に書き込む。
【００１２】
前記命令実行ユニットは、前記記憶部に記憶された初期化プログラムを読み出して、実行する。
【００１３】
前記乱数発生部は、乱数を発生させる乱数発生部。
【００１４】
前記デバッグポート無効化部は、前記初期化プログラムが実行されることにより、前記デバッグ部を無効にする。
【００１５】
前記公開鍵暗号化部は、前記初期化プログラムが実行されることにより、前記デバッグ部の無効後に前記乱数発生部により発生させられた乱数を、前記記憶部内の前記公開鍵で暗号化する。
【００１６】
前記送信部は、前記初期化プログラムが実行されることにより、暗号化された乱数を、前記鍵発行サーバに送信する。
【００１７】
前記受信部は、前記初期化プログラムが実行されることにより、前記鍵発行サーバから、前記乱数により暗号化された個別鍵を受信する。
【００１８】
前記個別鍵書込み部は、前記初期化プログラムが実行されることにより、前記暗号化された個別鍵を前記乱数で復号して個別鍵を取得し、前記個別鍵を前記記憶部に書き込む。
【図面の簡単な説明】
【００１９】
【図１】実施形態に係るメータ装置のハードウェア構成を示すブロック図である。
【図２】実施形態に係る鍵書き込みシステムの構成を示す図である。
【図３】実施形態に係るメータ装置がサーバと通信するシステムの構成を示す図である。
【図４】実施形態に係るCPU（マイコン）のハードウェア構成を示すブロック図である。
【図５】実施形態に係る個別鍵書込み手順の概要を示すフローチャートである。
【図６】実施形態に係るメータ装置の機能構成を示すブロック図である。
【発明を実施するための形態】
【００２０】
本実施形態は、エンドユーザの家に設置されるメータ装置の製造工程において、電力会社側のサーバとの通信（暗号化、認証）に用いる個別鍵を、安全に埋め込み且つ保持する仕組みを提供するものである。
【００２１】
メータ装置は、製造工程において本実施形態により安全に個別鍵を書き込まれた後、最終的に製造者の手を離れて、エンドユーザの家に設置される。家に設置されたメータ装置は、家内の機器の消費電力を計測して、ネットワーク経由でメータ計量結果を電力計量サーバに通知する運用や、電力計量サーバからの制御メッセージに基づいて供給電力量を調整する等の運用がなされる。
【００２２】
メータ装置に書き込まれる個別鍵は、これらのサーバとメータ装置との間の通信における相互認証での信頼の起点（Root of trust）として機能する。たとえばLANにおけるクライアント認証の方式として802.1x/TLS （非特許文献3）を利用する場合、メータ装置の個別鍵に基づいて認証を行えば、正規の個別鍵を持たない不正な装置がネットワークに侵入したり、不正な装置が別のメータ装置になりすます攻撃を排除することができる。
【００２３】
したがって、このような個別鍵には、秘匿性が要求される。
【００２４】
CPU内の不揮発メモリに格納された個別鍵は、メータ装置がユーザエンドの家に配置された後の運用中は、外部からの攻撃に対して安全である。
【００２５】
すなわち、運用中にメータ装置が攻撃者の手に渡ったとしても、背景技術の欄で述べたようにデバッガ機能を禁止しておくことで、内部メモリ（不揮発性メモリ）への直接アクセスが不能な状態とすることができる。この状態では、内部に書き込まれた秘密鍵を取得するにはチップ物理解析やサイドチャネルアタックなどの高度の技術が必要であり、信頼の起点となる個別鍵は攻撃から安全である。ネットワークインタフェースを経由した通信はあるが、外部との通信プロトコルの選択と実装が適切であれば個別鍵が漏れる危険はない。
【００２６】
だが、製造工程を見た場合大きな危険がある。製造工程はコスト要因により、安全性レベルは、実施が容易で効率のよい攻撃方法への対策のみにとどめられていることが多く、安全性に対する対策がなされていても不十分でなことが多い。
【００２７】
攻撃の性格によっても対策のしやすさは異なる。装置にデータを書き込む完全性（改ざん防止）と機密性の保護については次のような性質がある。まず製造工程での装置毎の書込み処理の記録は品質管理の目的で管理されており記録が残されることが多い。情報の改ざんは記録が残ってしまうため、攻撃が発覚する可能性が高い。情報の改ざんは情報の窃取よりは実行が困難である。一方、鍵書き込み装置の上でファイル操作が必要な場合に、ファイルの中身について一部複写を作成したり、ファイル全体の複製をする操作が作業員による非定形処理として行われる場合、この情報を持ち去る攻撃は比較的簡単に実行でき、かつ非定形処理のため記録が残されないことがしばしばある。このようなファイル持ち出しを防止する手法はいくつかあるが、コストがかかるうえに高い水準の人的管理が必須である。たとえばUSBメモリ接続禁止と言ったルールを定めたり、装置側にUSBメモリ接続禁止の設定をしたとしても、それが現場の要望によって変更されてしまうことは非常に多い。装置の生産は労働集約的な工程であり工程再編により別の工場に移設されることも多いため、生産現場の人的管理を高い水準で管理することは困難である。
【００２８】
そこで、本実施形態は、このような管理水準の低い製造工程においても、メータ装置に、安全に個別鍵を書き込み、書き込んだ個別鍵を安全に保持する仕組みを提供しようとするものである。
【００２９】
図1に、本発明の実施形態に係る通信装置を備えたメータ装置のハードウェア構成を示す。
【００３０】
メータ装置100は、当該通信装置としてのCPU101と、電力計測装置230と、無線IF220と、EEPROM（Electrically Erasable Programmable Read-Only Memory）210と、デバッグポート111と、ネットワークポート112、ADポート115とを備える。CPU101は、ワンチップのマイコンである。
【００３１】
電力計測装置230は、ユーザエンドの家やビル等の施設内に設けられた機器による消費電力を計測する。
【００３２】
無線IF220は、所定の規格に従って、無線通信を実行する。IEEE802．11やZigbee規格に準拠した無線通信でもよいし、3G移動通信システム等による地上系の通信でもよい。
【００３３】
ネットワークポート112は、LANケーブル等のネットワークケーブルを接続するためのポートであり、CPU101内の有線IFに電気的に接続されている。本実施形態では有線通信として、イーサネット（登録商標）を行うとするが、これに限定されるものではない。
【００３４】
CPU101は、メータ装置の製造工程で行われる初期化処理（後述）により鍵発行サーバから個別鍵（共通鍵）を取得し、内部の記憶部（不揮発性メモリ）に書き込む。ユーザエンド宅に配置された後の運用中は、この個別鍵でアプリケーションサーバ（電力計量サーバや電力管理サーバなど）との間で、暗号化または認証された通信を行う。たとえば電力計量サーバと認証を行い、電力消費の計測結果データを暗号化して、電力計量サーバに送信する。
【００３５】
EEPROM210は、機器の設定情報（たとえば有線IFの設定情報など）や、計測結果データ等を記憶する。
【００３６】
デバッグポート111は、製造工程においてソフトウェアおよびハードウェアのデバッグを行うために、メータ装置へデバッグ装置を接続するためのポートである。デバッグポート111は、CPUが備えるデバッグ機能（デバッグ部）への指示・データの信号を入力する部分となる。デバッグポート111は、CPUの端子（デバッグ端子）を介して、CPU内部のデバッグ部に電気的に接続されている。デバッグポート111およびデバッグ部を利用することで、CPU101の不揮発メモリにアクセス（書き込み、読み出し）したり、命令実行ユニットに指示したりすることが可能である。
【００３７】
ADポート115は、メータ装置の製造工程において、外部の雑音発生装置を接続して、乱数生成用の雑音信号を入力するためのポートである。入力された信号は、CPU101が備えるADCによりデジタル信号に変換される。
【００３８】
図示の例ではポート111、115、112がメータ装置のボード上に配置されているが、配置位置はこれに限定されず、たとえばメータ装置を格納する筐体に配置されてもよい。
【００３９】
本実施形態のメータ装置は、その製造工程において、鍵管理サーバ2から安全に個別鍵を取得して、CPU101の不揮発メモリに書き込み、書き込んだ個別鍵を安全に保持することを特徴とする。
【００４０】
図2に、本発明の実施形態に係るメータ装置へ個別鍵を安全に書き込むための鍵書き込みシステムの全体構成を示す。
【００４１】
この鍵書き込みシステム1は、図1のメータ装置100と、初期化プログラム書き込み装置10と、雑音発生装置20と、VPN終端装置30と、FW書き込み装置40と、ローカルネットワーク50とを含む。鍵書き込みシステム1はインターネット等の広域ネットワーク3を介して、鍵発行サーバ2に接続される。鍵発行サーバ2は、メータ装置に対する個別鍵を発行する。鍵発行サーバ2は、安全な場所で管理されている。
【００４２】
VPN終端装置30により、鍵発行サーバ2との間でVPN論理接続4が形成され、鍵書き込みシステム1と鍵発行サーバ2との間の通信は、VPN論理接続4を利用して行われる。以下、メータ装置100が、鍵発行サーバ2から個別鍵を安全に受信および保持する動作の概略を説明する。
【００４３】
はじめに初期化プログラム書き込み装置 10が、メータ装置100のデバッグポート111に接続される。初期化プログラム書き込み装置100は、初期化プログラム12および鍵交換サーバ2の公開鍵を、メータ装置100のデバッグ部を介して、メータ装置100の不揮発メモリに書き込む。続いて、書き込み装置とメータ装置との接続を解除して、メータ装置100に初期化用プログラムを実行させる。これにより初期化処理が行われる。初期化処理の動作例の概略を、以下に示す。
【００４４】
まずデバッグポート111を無効化し、次に雑音発生装置200からの雑音信号を利用して乱数を生成する。生成した乱数およびメータ装置の一意識別子の結合データを、鍵交換サーバ2の公開鍵で暗号化し、暗号化されたデータを、イーサネット50およびVPN4を介して、鍵交換サーバ2に送る。
【００４５】
鍵交換サーバ2では、公開鍵に対応する秘密鍵で、暗号化されたデータを復号するとともに、メータ装置100に個別鍵を割り当てる。そして、秘密鍵により上記乱数の署名を生成し、個別鍵と署名データとの結合データを、上記乱数で暗号化し、暗号化したデータを、メータ装置100に送る。
【００４６】
メータ装置100では、上記の乱数で、暗号化されたデータを復号して個別鍵と署名を取り出し、公開鍵と上記乱数に基づき署名の正当性を検証し、正当と判断したとき、復号された個別鍵を、不揮発メモリに書き込む。
【００４７】
この後、イーサネット50を介してFW書き込み装置40に接続し、仕向け先毎にカスタマイズされた機能を実現するFW（ソフトウェア）をダウンロードし、ダウンロードしたFWを、メータ装置の不揮発メモリに書き込む。なお、FWは、本実施形態では、メータ装置100の電力計測装置230で計測された計測結果データを収集し、計測結果データを個別鍵で暗号化して、電力計量サーバに送る機能を有するアプリケーションプログラム、または、電力管理サーバからの制御メッセージに基づいて供給電力量を調整するアプリケーションプログラムを含む。
【００４８】
製造工程を経たメータ装置は出荷され、図3のように、ユーザエンドの家や、ビル等の施設に配置される。メータ装置100は、スマートグリッド網500を介して、電力計量サーバ501または電力管理サーバ502と通信する。電力計量サーバ501または電力管理サーバ502は、メータ装置100の個別鍵と同じ鍵（共通鍵もしくは認証用公開鍵ペア）をもっている。この個別鍵を利用して、メータ装置100およびサーバ間で、暗号、復号、および認証が行われる。なお電力計量サーバ501または電力管理サーバ502は、物理的に鍵発行サーバ2と同じ装置内にあってもよい。
【００４９】
以下、初期化処理により個別鍵を安全に取得および保持するメータ装置100の構成および動作について、さらに詳細に説明する。
【００５０】
図4に、図1のメータ装置100が備えるCPU101(マイコン)のハードウェア構成を示す。
【００５１】
CPU101は、デバッグ部190、制御レジスタ150、命令実行ユニット120、不揮発メモリ130、RAM140、一意識別子レジスタ180、UART（Universal Asynchronous Receiver Transmitter）184、I2C（Inter-Integrated Circuit）183、有線IF182、乱数発生部（RNG：Random Number Generator）160、ADC170、バス185を備える。要素150、160、170、180、184、183、182は、バスを介して、相互接続されている。なおここでは単一バス構造が示されるが、コントローラを介して複数のバスが相互結合されてもよい。
【００５２】
デバッグ部190は、外部のデバッグポート111から入力される指示・データの信号に応じて、不揮発メモリ130にアクセスする。
【００５３】
制御レジスタ150は、デバッグ部190の動作を制御する値を格納する。制御レジスタ150に所定の値を書き込むことによって、デバッグ部190の機能を無効にして、デバッグポート111からの入力をデバッグ部190に受け付けなくすることができる。このようにデバッグ部190の機能を無効にすることを、デバッグポート111を無効化すると表現することもある。
【００５４】
命令実行ユニット120は、プログラムに含まれる命令コードを実行する。命令実行ユニット120は、不揮発メモリ130から、指定のプログラムを読み出し、RAM140に展開して、実行する。RAM140は、プログラム実行中に発生する作業データも記憶する。
【００５５】
一意識別子レジスタ180は、CPUの一意識別子（ChipID）を記憶している。一意識別子は、たとえば所定ビット数により表される数値である。
【００５６】
ADC170は、雑音発生装置20（図2参照）からADポート115を介して入力される雑音信号を、デジタル信号に変換する。たとえば雑音の振幅信号を、8ビットまたは16ビット等のビット値に変換する。雑音発生装置20は、雑音信号の生成にあたり、たとえば内部で発生する熱雑音を利用してもよい。
【００５７】
有線IF182（送信部、受信部）は、所定の規格に従って有線通信を行う。本実施形態では有線IF182が、イーサネットコントローラである例が示される。図2の鍵組み込みシステム例の場合では有線IF182は、ローカルネットワーク50上の装置と、イーサネットによる通信を行う。なお無線IF220（送信部、受信部）は、図１の例ではチップの外側に設けられているが、チップ内に設けられても良い。
【００５８】
乱数発生部160は、命令実行ユニット120の指示に応じて、乱数を生成する。乱数発生部160は、疑似乱数方式をとる場合入力パラメータに基づいて所定の疑似乱数列を生成する関数を保持している。入力パラメータとして、ADC170により得られたビット信号の値である雑音値を与えても良いし、RAM140や不揮発メモリ130上の事前に指定したアドレスまたはランダムに決定したアドレスの値を与えても良い。また、疑似乱数列ではなく、内部で発生する熱雑音を乱数に変換する回路を持つ構成でもおい。
【００５９】
乱数は、乱数発生部160を用いて生成する他、ADC170により得られたビット信号の値である雑音値をそのまま乱数として用いてもよい。この場合、ADC170が乱数発生部として機能することになる。
【００６０】
このように雑音値を利用することで、第3者に推測されにくい、乱数を得る。
【００６１】
I2C 183は、図1のEEPROM210とシリアル通信を行い、EEPROM210に対し、データの読み出しおよび書き込みを行う。
【００６２】
UART 184は、図1の無線IF220へ送る信号をパラレル・シリアル変換し、また無線IF220からの信号をシリアル・パラレル変換する。
【００６３】
図5にメータ装置100による初期化処理の流れの例を示す。
【００６４】
まず、メータ装置 100 が、デバッグポート111  を通じて、図2の初期化プログラム書き込み装置 10と接続される（ステップ S501）。
【００６５】
続いて、デバッグポート111から、初期化プログラム 12が、CPUチップ101内の不揮発性メモリ 130 に書き込まれる(ステップ S502)。初期化プログラム12は、鍵発行サーバ2の公開鍵を含んでいる。
【００６６】
続いて、メータ装置100と、書き込み装置10との接続を解除し、メータ装置100の命令実行ユニット120に、初期化プログラムを実行させる(ステップ S503)。初期化プログラムの起動は、再起動のためのリセットスイッチがあるときは、そのリセットスイッチを押下することで行い、リセットスイッチがないときは、装置の電源をいったん切断し、その後電源を再投入することで行えばよい。
【００６７】
本初期化用プログラムの実行により、以下のステップS504〜S511が行われる。
【００６８】
まず、メータ装置100のデバッグポート111が無効化（すなわちデバッグ部190が無効に）される（ステップ S504）。具体的に、CPU101の制御レジスタ 150に、命令実行ユニット120から所定の値を書き込むことによって、デバッグポート111を無効化する。これにより、デバッグポート111を介した、不正者による不揮発メモリへのアクセスを防止できる。
【００６９】
続いて、初期化プログラムに一部として含まれる通信ソフトウェアの実行により、イーサネットコントローラ182に、所定の値（MACアドレスや、受信パケットの格納先メモリアドレスなど）を書き込む。これによりイーサネットコントローラ182を介したLAN通信が、可能とされる (ステップ S505)。
【００７０】
次に、乱数 R を発生させる(ステップ S506)。乱数は、乱数発生部160、 あるいはADC 170による雑音信号の変換結果を利用する。発生させられた乱数は、鍵発行サーバとの通信の一時鍵として用いられる。
【００７１】
ここで、以下の説明で用いる暗号処理及び定数を説明しておく。
・Z = EP_Kp[A]: 公開鍵 KpによるデータAの非対称暗号化(RSAなど)。出力はZ。
・I= V_Kp[Msg, Sig] メッセージ Msg と署名 Sig に対する公開鍵 Kpによる署名検証。PSS等の所定のパディングを用いることが望ましい。Iは検証結果(1は検証成功、0は検証失敗)。
・Sig = S_Ks[Msg]: Msgに対するKsによる署名生成。
・Y=E_S[X] : 秘密鍵Sによる Xの共通鍵ブロック暗号化。Yを計算する。S,X,Y全てのデータサイズはブロック長に一致。以下の実施例ではAES128を例にとりブロック長が128ビット(16バイト)として説明するがそのほかの暗号アルゴリズムを用いても差し支えない。
・X=D_S[Y]: 秘密鍵Sによる Xの共通鍵ブロック復号。
・ChipID: チップの一意識別番号。一意識別子レジスタ 180から取得できる。
【００７２】
次に、鍵発行サーバ 2 への個別鍵発行を要求するメッセージ M1を、以下の式1に従って作成する。そして、作成したメッセージM1を、イーサネットコントローラ182を介して、鍵発行サーバ2に送信する(ステップ S507) 。
M1 = EP_Kp[ChipID ||R]  ・・・式1
【００７３】
式1は以下を意味する。すなわち一意識別子レジスタ180に記憶されたチップの一意識別番号（ChipID）と、生成した乱数Rとを結合し、結合データを得る。そして、結合データを鍵発行サーバ2の公開鍵で暗号化する。これによりメッセージM1を得る。
【００７４】
鍵発行サーバ2では、メッセージM1を受信し、公開鍵 Kp に対応する秘密鍵 Ks によってメッセージM1を復号する。これにより、ChipIDと、乱数Rを取り出す。鍵発行サーバ2は、ChipIDに対し、個別鍵 Krootを割り当てて、ChipIDと個別鍵Krootとの対応を、自身のデータベースに記録する。個別鍵はメータ装置間で同じ値が重複しないように割り当てる。鍵発行サーバ2は、記録した個別鍵KrootとChipIDとの対応を、別途のサーバ（電力計量サーバや電力管理サーバ）にセキュアな方法で、送ってもよい。
【００７５】
そして、鍵発行サーバ2では、下記の式2により、メッセージ M2を生成して、メータ装置100に送信する。これにより、個別鍵Kroot を安全に、メータ装置100に送信する。
Sig = S_Ks[R] 
M2 = E_R[ Kroot|| Sig]     ・・・式2  
【００７６】
式2は以下を意味する。すなわち、乱数Rを、鍵発行サーバ2の秘密鍵Ksにより署名し、署名Sigを作成する。署名の方法は、従来から知られている任意のアルゴリズムを用いればよい。一例を挙げると、乱数Rとハッシュ関数によりハッシュ値を計算し、ハッシュ値を秘密鍵Ksで暗号化することにより、署名Sigを得る。
【００７７】
そして、個別鍵Krootと署名Sigとを結合して結合データを取得し、結合データを乱数Rで暗号化する。これによりメッセージM2を得る。
【００７８】
メッセージM2を受信したメータ装置100は、保持している乱数Rで、メッセージM2を復号する（ステップS508）。復号により個別鍵Krootと、署名Sigが取り出される。
【００７９】
続いて、署名 Sigの検証を行う（ステップS509）。上記の例により署名が生成された場合は、検証は次のように行われる。まず署名Sigを公開鍵Kpで復号し、復号値を得る。また乱数Rから、所定のハッシュ関数（鍵発行サーバ2で使用したのと同じ）を用いて、ハッシュ値を計算する。計算したハッシュ値が、復号値と一致するか検査し、一致するときは、検証が成功、一致しないときは失敗と判断する。
【００８０】
検証に成功した場合、内部の不揮発メモリ 130に、個別鍵 Kroot を書き込む（ステップS510）。検証に失敗した場合、検証失敗の旨を表示する(S521)。検証失敗の表示方法としては、たとえばイーサネットコントローラ182または無線IF220を介して、管理者の端末に異常状態を示すデータフレームを送信することで行ってもよいし、スピーカを備えるならばブザーを鳴らしても良い。
【００８１】
個別鍵が書き込まれたメータ装置はその後、仕向け先毎に個別機能を実現するFW（ソフトウェア）がFW書込み装置 40によって書き込まれる。より詳細には、初期化プログラムがFW書き込み40からFWのデータを受信し、RAM140に格納する。FWの内容が署名検証で正しいことを確認した上で、FWのデータを不揮発メモリ130の書き込み単位（ブロック〜512バイトなど）ごとに、転送元のRAMアドレスと、転送先の不揮発メモリのアドレス、ブロックサイズを指定して書き込み専用のDMAコントローラ（図示せず）に転送指示を出して書き込む。このような書き込みのインタフェースは何種類か存在し、特定の方法に限定されるものではない。書き込みが終わったメータ装置は、その後、工場から出荷される。
【００８２】
以上の処理では、メータ装置100は、イーサネットを介して鍵交換サーバ2と通信したが、無線IF220を用いて無線通信より鍵交換サーバ2と通信してもよい。ただし、無線IFを通した場合は、この無線ネットワークに第3者が侵入しないような仕組み（電波暗室のような設備や、暗号による一般の無線LANセキュリティ）が必要である。
【００８３】
図6は、本実施形態に係わるメータ装置の機能構成を示す機能ブロック図である。
【００８４】
デバッグ部190は、デバッグポート111を通じて、図2の初期化プログラム書き込み装置 10から初期化プログラムおよび鍵発行サーバの公開鍵の書き込み指示を受ける。デバック部190は、これら初期化プログラムおよび公開鍵を、不揮発メモリ130に書き込む。
【００８５】
初期化プログラムの実行により初期化手段410が実体化される。初期化手段410のデバッグポート無効化手段404は、デバッグ部190を無効にし、これによりデバッグポートが無効化される。
【００８６】
LAN有効化手段405が、所定の初期化動作を行い、イーサネットコントローラ182に、所定の値（MACアドレスなど）が書き込み、イーサネット通信を可能にする。
【００８７】
乱数発生手段406は、乱数発生部 160、 あるいは雑音発生装置20による雑音信号のAD変換結果を利用して、乱数 R を発生させる。
【００８８】
送信メッセージ作成・送信手段407は、鍵発行サーバ 2 への個別鍵発行を要求するメッセージ M1（たとえば前述したM1 = EP_Kp[ChipID ||R]）を作成して、イーサネットコントローラ182を介して、鍵発行サーバ2に送信する。公開鍵Kpによる暗号化は、公開鍵暗号化手段421で行う。公開鍵暗号化手段421は、ChipID ||R（ChipIDと乱数Rの結合）を、公開鍵Kpで暗号化し、暗号化されたデータを、送信メッセージ作成・送信手段407に返す。
【００８９】
受信メッセージ復号・検証手段408は、鍵発行サーバ2からメッセージM2（たとえば前述したM2 = E_R[ Kroot|| Sig]、Sig = S_Ks[R] ）を受信し、メッセージM2を復号する。復号は、共通鍵復号手段423を用いて行い、共通鍵復号手段423では、乱数R（共通鍵あるいは一時鍵）により、メッセージM2を復号する。復号により個別鍵Krootと、署名Sigが取り出される。
【００９０】
受信メッセージ復号・検証手段408は、公開鍵検証手段424を用いて、乱数Rに対する署名 Sigの検証を行う。公開鍵検証手段424では、乱数Rと公開鍵Kpを用いて、署名Sigの検証を行う。
【００９１】
個別鍵保存手段409は、検証が成功した場合、内部の不揮発メモリ 130に、個別鍵 Kroot を書き込み、検証に失敗した場合、検証失敗の旨を表示する。
【００９２】
運用時手段431は、メータ装置の運用時において、公開鍵暗号化手段421，共通鍵暗号化手段422、共通鍵復号手段423、公開鍵検証手段424を利用して、該当するサーバ（たとえば電力計量サーバ、電力管理サーバなど）との間で、通信を行う。たとえば、共通鍵暗号化手段422を用いて、図1の電力計測装置230により得られた計測結果データを、個別鍵で暗号化して、電力計量サーバに送る。この際、公開鍵暗号化手段421を用いて当該サーバの公開鍵による暗号化を行ってもよいし、公開鍵検証手段424および共通鍵復号手段423を利用して、サーバ認証を行ってもよい。
【００９３】
上記実施形態ではメッセージM1の作成にあたり、ChipIDと、乱数Rとの結合を、公開鍵により暗号化したが、乱数Rのみを公開鍵で暗号化し、ChipIDは暗号化せずに送信してもよい。
【００９４】
また、乱数Rのみを公開鍵で暗号化して送信し、ChipIDの送信は行わない構成も可能である。この場合、鍵発行サーバでは、メータ装置と、個別鍵との対応を別の方法でとればよい。たとえば、メータ装置から受信したフレームに記載されている送信元アドレスと、発行した個別鍵とを対応づけてもよい。
【００９５】
以上に述べた本実施形態によれば、メータ装置の製造工程中においても、個別鍵を安全に取得でき、不正者または攻撃者へ個別鍵が漏洩するのを防止することが可能となる。
【００９６】
すなわち、ネットワークインタフェースを通じて送受信されるメッセージM1,M2は、それぞれ公開鍵 Kp および一時鍵(乱数) Rにより暗号化されているため、傍受者はそこから有効な情報を得ることは困難である。また、攻撃者が正しい検証サーバになりすましてメッセージM2を偽造し、メータ装置に不正な鍵を送りつける攻撃に対しては、メッセージM2にあらかじめ秘匿されて送信されたRに対する署名が含まれ、この検証が行われる(図5のS509)ため、乱数Rを知らない攻撃者が偽造したメッセージは、この検証ステップで検証が通らず、メータ装置には受け入れられない。
【００９７】
ただし、鍵発行サーバ2に対して、メータ装置になりすまして、鍵発行要求をすることは、上記の通信手順の上では可能である。これは製造工程で書き込まれる初期化プログラム 12の秘匿が、上記の管理上の理由で困難であることにより、初期化プログラムで正しいメータ装置であることを確認することが、難しいためである。
【００９８】
このことから、たとえば攻撃者がデバッグ部の無効化をもたないような不正装置を独自に作成し、上記生産システムに持ち込み、鍵発行サーバ2から個別鍵の発行を受けた上で、同不正装置を生産システムから持ち出し、デバッグ部を利用して個別鍵を暴くような攻撃は、上記の仕組み単体では阻止できない。
【００９９】
しかしながら、CPUにはデバッグ部の無効化をもたないバリエーションが存在する場合もあるが、そのような場合はデバッグ部の無効化を実施するにあたって、初期化ソフトウェアで同機能の有無を確認し、同機能を持たない装置では、以後の処理を中止することにより回避が可能である。
【０１００】
また、メッセージM1にはCPU個体毎のChipID（一意識別子）が含まれており、鍵発行サーバ2ではそれを記録している。したがって、鍵発行サーバ2でChipIDが記録済みか否かを確認することで、当該ChipIDが、正しい過程で生産されたメータ装置のものかどうかを照合することもできる。
【０１０１】
また、初期化プログラム 12が不正なものに置き換えられる可能性も、論理的にはありうる。ただし初期化プログラム書き込み装置上のプログラムを不正なものに置き換えた場合、不正操作の証拠が残る。また、書込み装置自体を不正なものに置き換えることは、初期化プログラムの書込みは、1対1接続のデバッグポートを経由しており、この工程で不正な書込み装置の接続を行う不正は外観でわかるため、困難である。
【０１０２】
本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
【図１】
0005225412.tif 000002
【図２】
0005225412.tif 000003
【図３】
0005225412.tif 000004
【図４】
0005225412.tif 000005
【図５】
0005225412.tif 000006
【図６】
0005225412.tif 000007