(57)【要約】【課題】信頼性を向上させることが可能なネットワークシステム及びその異常検出方法を提供すること。【解決手段】一実施の形態によれば、ネットワークシステムＳＹＳ１は、更新コード１０１を送信する開発環境２と、開発環境２から送信された更新コード１０１に少なくともデジタル署名を付与して送信する配送センタ３と、配送センタ３から送信された更新コード１０１を受信する端末装置１と、を備え、端末装置１は、プログラムが記憶されたメモリ１１と、メモリ１１の記憶領域のうちプログラム１１０の更新対象コード１１１が記憶された記憶領域と、更新コード１０１が記憶される予定の記憶領域と、の少なくとも一部が重複する場合に、更新コード１０１に異常があると判定する検査部１２と、を備える。【選択図】図２
2020181446.tif 000002
【特許請求の範囲】
【請求項１】
更新コードを送信する開発装置と、
前記開発装置から送信された前記更新コードに少なくともデジタル署名を付与して送信する配送センタと、
前記配送センタから送信された前記更新コードを受信する端末装置と、
を備え、
前記端末装置は、
プログラムが記憶されたメモリと、
前記メモリの記憶領域のうち前記プログラムの更新対象コードが記憶された記憶領域と、前記更新コードが記憶される予定の記憶領域と、の少なくとも一部が重複する場合に、前記更新コードに異常があると判定する検査部と、
を備えた、ネットワークシステム。
【請求項２】
前記検査部は、前記メモリの記憶領域のうち前記プログラムの更新対象コードが記憶された記憶領域と、前記更新コードが記憶される予定の記憶領域と、の全てが重複する場合には、前記配送センタから送信された前記更新コードが、前記メモリの記憶領域に書き込まれた別の更新コードと同じである、Ｒｅｐｌａｙ攻撃であると判定するように構成されている、
請求項１に記載のネットワークシステム。
【請求項３】
前記検査部は、前記更新コードに含まれる分岐命令及びジャンプ命令の移動先アドレスが当該更新コード内を指定するアドレスでない場合、前記更新コードに異常があると判定するように構成されている、
請求項１に記載のネットワークシステム。
【請求項４】
前記検査部は、前記更新コード及び前記更新対象コードのそれぞれにおいて定義された共通部分が一致しない場合、前記更新コードに異常があると判定するように構成されている、
請求項１に記載のネットワークシステム。
【請求項５】
前記検査部によって前記更新コードが異常であると判定された場合、前記メモリへの前記更新コードの書き込みを停止させる更新制御部をさらに備えた、
請求項１に記載のネットワークシステム。
【請求項６】
前記開発装置は、
前記端末装置と共に保有している共通鍵を用いて、前記更新コードに対する署名発行処理を行う署名生成手段をさらに備え、
前記端末装置は、
前記共通鍵を用いて、前記更新コードに対する署名検証処理を行う署名検証手段をさらに備えた、
請求項１に記載のネットワークシステム。
【請求項７】
前記開発装置は、
乱数を生成する第１乱数生成手段をさらに備え、
前記署名生成手段は、前記第１乱数生成手段によって生成された乱数を用いて生成された前記共通鍵を用いて、前記更新コードに対する署名発行処理を行うように構成され、
前記端末装置は、
前記第１乱数生成手段と同じ乱数を生成する第２乱数生成手段をさらに備え、
前記署名検証手段は、前記第２乱数生成手段によって生成された乱数を用いて生成された前記共通鍵を用いて、前記更新コードに対する署名検証処理を行うように構成されている、
請求項６に記載のネットワークシステム。
【請求項８】
前記開発装置において、
前記署名生成手段は、保有している前記更新対象コードを用いて生成された前記共通鍵を用いて、前記更新コードに対する署名発行処理を行うように構成され、
前記端末装置において、
前記署名検証手段は、前記メモリに記憶された前記更新対象コードを用いて生成された前記共通鍵を用いて、前記更新コードに対する署名検証処理を行うように構成されている、
請求項６に記載のネットワークシステム。
【請求項９】
前記開発装置は、
乱数を生成する第１乱数生成手段をさらに備え、
前記署名生成手段は、前記第１乱数生成手段によって生成された乱数と、保有している前記更新対象コードと、を用いて生成された共通鍵を用いて、前記更新コードに対する署名発行処理を行うように構成され、
前記端末装置において、前記署名検証手段は、前記開発装置から暗号通信によって送信された前記乱数と、前記メモリに記憶された前記更新対象コードと、を用いて生成された共通鍵を用いて、前記更新コードに対する署名検証処理を行うように構成されている、
請求項８に記載のネットワークシステム。
【請求項１０】
前記開発装置は、
乱数を生成する第１乱数生成手段をさらに備え、
前記署名生成手段は、前記第１乱数生成手段によって生成された乱数と、保有している前記更新対象コードと、を用いて生成された共通鍵を用いて、前記更新コードに対する署名発行処理を行うように構成され、
前記端末装置は、
前記第１乱数生成手段と同じ乱数を生成する第２乱数生成手段をさらに備え、
前記署名検証手段は、前記第２乱数生成手段によって生成された乱数と、前記メモリに記憶された前記更新対象コードと、を用いて生成された共通鍵を用いて、前記更新コードに対する署名検証処理を行うように構成されている、
請求項８に記載のネットワークシステム。
【請求項１１】
前記署名検証手段によって不合格と判定された場合、前記メモリへの前記更新コードの書き込みを停止させる更新制御部をさらに備えた、
請求項６に記載のネットワークシステム。
【請求項１２】
前記開発装置は、
前記更新コードを、前記更新対象コードを用いて符号化する符号化手段をさらに備え、
前記端末装置は、
前記開発装置から前記配送センタを介して送信された符号化された前記更新コードを、前記更新対象コードを用いて復号化する復号化手段をさらに備えた、
請求項１に記載のネットワークシステム。
【請求項１３】
前記開発装置において、
前記符号化手段は、前記更新対象コードと前記更新コードとの排他的論理和演算を実行することによって、前記更新コードの符号化を行うように構成され、
前記端末装置において、
前記復号化手段は、前記更新対象コードと前記更新コードとの排他的論理和演算を実行することによって、前記更新コードの復号化を行うように構成されている、
請求項１２に記載のネットワークシステム。
【請求項１４】
前記開発装置において、
前記符号化手段は、前記端末装置と共に保有する共有乱数に基づいて前記更新対象コードをバイト置換したうえで、バイト置換された前記更新対象コードと前記更新コードとの排他的論理和演算を実行することによって、前記更新コードの符号化を行うように構成され、
前記端末装置において、
前記復号化手段は、前記共有乱数に基づいて前記更新対象コードをバイト置換したうえで、バイト置換された前記更新対象コードと前記更新コードとの排他的論理和演算を実行することによって、前記更新コードの復号化を行うように構成されている、
請求項１２に記載のネットワークシステム。
【請求項１５】
前記開発装置において、
前記符号化手段は、前記端末装置と共に保有する共有乱数及び共通鍵のそれぞれに基づいて前記更新対象コードをバイト置換したうえで、バイト置換された前記更新対象コードと前記更新コードとの排他的論理和演算を実行することによって、前記更新コードの符号化を行うように構成され、
前記端末装置において、
前記復号化手段は、前記共有乱数及び前記共通鍵のそれぞれに基づいて前記更新対象コードをバイト置換したうえで、バイト置換された前記更新対象コードと前記更新コードとの排他的論理和演算を実行することによって、前記更新コードの復号化を行うように構成されている、
請求項１２に記載のネットワークシステム。
【請求項１６】
開発装置から更新コードを送信し、
配送センタにおいて前記更新コードに少なくともデジタル署名を付与し、
端末装置において前記デジタル署名が付与された前記更新コードを受信し、
前記端末装置において、メモリの記憶領域のうちプログラムの更新対象コードが記憶された記憶領域と、前記更新コードが記憶される予定の記憶領域と、の少なくとも一部が重複する場合に、前記更新コードに異常があると判定する、
ネットワークシステムの異常検出方法。
【請求項１７】
前記更新コードに異常があるか否かを判定するステップでは、前記更新コード及び前記更新対象コードのそれぞれにおいて定義された共通部分が一致しない場合、前記更新コードに異常があると判定する、
請求項１６に記載のネットワークシステムの異常検出方法。
【請求項１８】
前記開発装置から前記更新コードを送信するステップでは、前記端末装置と共に保有している共通鍵を用いて、前記更新コードに対する署名発行処理を行ったうえで、当該更新コードを送信し、
前記端末装置において、前記共通鍵を用いて前記更新コードに対する署名検証処理をさらに行う、
請求項１６に記載のネットワークシステムの異常検出方法。
【請求項１９】
前記開発装置から前記更新コードを送信するステップでは、前記更新コードを、前記更新対象コードを用いて符号化したうえで送信し、
前記端末装置において、さらに、符号化された前記更新コードを、前記更新対象コードを用いて復号化する、
請求項１６に記載のネットワークシステムの異常検出方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はネットワークシステム及びその異常検出方法に関し、例えば信頼性を向上させるのに適したネットワークシステム及びその異常検出方法に関する。
【背景技術】
【０００２】
近年、自動車等の車両に搭載された端末装置のソフトウェアプログラムの更新を無線で行うＯＴＡ（Ｏｖｅｒ−Ｔｈｅ−Ａｉｒ）技術の開発が進められている。ＯＴＡ技術が採用されたネットワークシステムは、例えば、各車両に搭載された端末装置と、開発環境と、配送センタと、によって構成されている。開発環境では、端末装置に書き込まれたソフトウェアプログラムの更新プログラムが作成される。配送センタは、開発環境において作成された更新プログラムに対して、暗号化プロトコルに従って暗号化処理及び署名発行処理を実行したうえで、端末装置に無線で配送する。端末装置では、更新プログラムの署名検証及び復号が行われ、更新プログラムに異常が無い（即ち、更新プログラムが改ざん等されていない）と判定された場合、ソフトウェアプログラムの更新が行われる。
【０００３】
このネットワークシステムでは、例えば、暗号プロトコルに従って更新プログラムの暗号化処理及び署名発行処理が行われた後に当該更新プログラムの改ざん等が行われた場合、端末装置は、受信した更新プログラムが改ざん等されていると判定することができる。即ち、端末装置は、受信した更新プログラムに異常があることを検出することができる。
【０００４】
プログラムの暗号化に関する技術は、例えば、非特許文献１に開示されている。非特許文献１には、事前共通鍵Ｋ１，Ｋ２と、非可換演算を用いた軽量暗号手法と、によって実現される、固定鍵長を用いたバーナム暗号化手法が開示されている。送信側は、事前共通鍵Ｋ１を用いてセッション鍵を暗号化して受信側に送信することにより、送信側及び受信側においてセッション鍵が共有される。また、送信側及び受信側のそれぞれには、事前共通鍵Ｋ２を用いてセッション鍵を暗号化することによって第２のセッション鍵が構築されている。送信側は、第２のセッション鍵と平文とのＥＯＲ（排他的論理和）演算結果を暗号文として出力し、受信側は、受信した暗号文と第２のセッション鍵とのＥＯＲ演算を実施することによって平文を取得する。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】金子 秀彦、「センサネットワークに向けた小型暗号回路」、東京大学大学院、平成１７年１月３１日、p.1-58
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、関連技術のネットワークシステムでは、例えば開発環境又は配送センタにおいて、更新プログラムの暗号化処理及び署名発行処理が行われる前に、当該更新プログラムの改ざん、すり替え、又は取り違えが発生した場合、端末装置は、受信した更新プログラムに異常があることを検出することができないという問題があった。換言すると、関連技術のネットワークシステムでは、更新プログラムの信頼性を向上させることができないという問題があった。その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【０００７】
一実施の形態によれば、ネットワークシステムは、更新コードを送信する開発装置と、前記開発装置から送信された前記更新コードに少なくともデジタル署名を付与して送信する配送センタと、前記配送センタから送信された前記更新コードを受信する端末装置と、を備え、前記端末装置は、プログラムが記憶されたメモリと、前記メモリの記憶領域のうち前記プログラムの更新対象コードが記憶された記憶領域と、前記更新コードが記憶される予定の記憶領域と、の少なくとも一部が重複する場合に、前記更新コードに異常があると判定する検査部と、を備える。
【０００８】
また、一実施の形態によれば、ネットワークシステムの異常検出方法は、開発装置から更新コードを送信し、配送センタにおいて前記更新コードに少なくともデジタル署名を付与し、端末装置において前記デジタル署名が付与された前記更新コードを受信し、前記端末装置において、メモリの記憶領域のうちプログラムの更新対象コードが記憶された記憶領域と、前記更新コードが記憶される予定の記憶領域と、の少なくとも一部が重複する場合に、前記更新コードに異常があると判定する。
【発明の効果】
【０００９】
前記一実施の形態によれば、信頼性を向上させることが可能なネットワークシステム及びその異常検出方法を提供することができる。
【図面の簡単な説明】
【００１０】
【図１】実施の形態１にかかるネットワークシステムの概要を示す図である。
【図２】図１に示すネットワークシステムの具体的な構成例を示すブロック図である。
【図３】更新対象コード及び更新コードのそれぞれの先頭アドレス及びサイズを示す概念図である。
【図４】差分更新コード塊の生成方法を示すフローチャートである。
【図５】更新対象コード及び差分更新コード塊のそれぞれの先頭アドレス及びサイズを示す概念図である。
【図６】コメント付き更新コードの生成方法を示すフローチャートである。
【図７】コメント付き差分更新コード塊の生成方法を示すフローチャートである。
【図８】開発環境における署名生成処理を示すフローチャートである。
【図９】乱数シードに基づく鍵生成方法を示すフローチャートである。
【図１０】更新対象コードに基づく鍵生成方法を示すフローチャートである。
【図１１】乱数シード及び更新対象コードに基づく鍵生成方法を示すフローチャートである。
【図１２】配送センタへの問い合わせによる共通鍵設定方法を示す図である。
【図１３】端末装置における署名検証処理を示すフローチャートである。
【図１４】開発環境における差分更新コード塊の第１のエンコード方法を示す図である。
【図１５】端末装置における差分更新コード塊の第１のデコード方法を示す図である。
【図１６】開発環境における差分更新コード塊の第２のエンコード方法を示すフローチャートである。
【図１７】端末装置における差分更新コード塊の第２のデコード方法を示すフローチャートである。
【図１８】Ｐｅｒｍｕｔｅ関数ｐ（ｘ，ｙ）の処理内容を示すフローチャートである。
【図１９】逆Ｐｅｒｍｕｔｅ関数ｉｎｖ＿ｐ（ｘ，ｙ）の処理内容を示すフローチャートである。
【図２０】組み換え関数ｓｈｕｆｆｌｅ（ｎ，Ｋ）の処理内容を示すフローチャートである。
【図２１】エンコード関数ｅｎｃ（ｎ，ｋｘ［］，ｋｙ［］，ｍ）の処理内容を示すフローチャートである。
【図２２】デコード関数ｄｅｃ（ｎ，ｋｘ［］，ｋｙ［］，ｃ）の処理内容を示すフローチャートである。
【図２３】符号化処理の処理内容を示すフローチャートである。
【図２４】パラメータｎを伴う符号化関数ｇｅｎｃ（ｎ，Ｋ，ｍ）の処理内容を示すフローチャートである。
【図２５】パラメータｎを伴う復号化関数ｇｄｅｃ（ｎ，Ｋ，ｃ）の処理内容を示すフローチャートである。
【図２６】バイト置換処理の処理内容を示すフローチャートである。
【図２７】開発環境における第３のエンコード方式を示すフローチャートである。
【図２８】端末装置における第３のデコード方式を示すフローチャートである。
【図２９】第１の符号化の処理内容を示すフローチャートである。
【図３０】第２の符号化の処理内容を示すフローチャートである。
【図３１】２Ｍビット列の生成処理内容を示すフローチャートである。
【図３２】エンコード演算の処理内容を示すフローチャートである。
【図３３】デコード演算の処理内容を示すフローチャートである。
【発明を実施するための形態】
【００１１】
説明の明確化のため、以下の記載及び図面は、適宜、省略、及び簡略化がなされている。また、様々な処理を行う機能ブロックとして図面に記載される各要素は、ハードウェア的には、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、メモリ、その他の回路で構成することができ、ソフトウェア的には、メモリにロードされたプログラムなどによって実現される。したがって、これらの機能ブロックがハードウェアのみ、ソフトウェアのみ、またはそれらの組合せによっていろいろな形で実現できることは当業者には理解されるところであり、いずれかに限定されるものではない。なお、各図面において、同一の要素には同一の符号が付されており、必要に応じて重複説明は省略されている。
【００１２】
また、上述したプログラムは、様々なタイプの非一時的なコンピュータ可読媒体を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体（例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ）、光磁気記録媒体（例えば光磁気ディスク）、ＣＤ−ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＣＤ−Ｒ、ＣＤ−Ｒ／Ｗ、半導体メモリ（例えば、マスクＲＯＭ、ＰＲＯＭ（Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）、ＥＰＲＯＭ（Ｅｒａｓａｂｌｅ  ＰＲＯＭ）、フラッシュＲＯＭ、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ））を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【００１３】
＜実施の形態１＞
図１は、実施の形態１にかかるネットワークシステムＳＹＳ１の概要を示す図である。
図１に示すように、ネットワークシステムＳＹＳ１は、ＯＴＡ（Ｏｖｅｒ−Ｔｈｅ−Ａｉｒ）技術が採用されたネットワークシステムであって、例えば、自動車などの車両に搭載された端末装置１と、開発環境（開発装置）２と、配送センタ３と、によって構成されている。
【００１４】
開発環境２では、端末装置１に書き込まれたソフトウェアプログラムの更新コード（更新プログラム）が作成される。配送センタ３は、開発環境２において作成された更新コードに対して、暗号化プロトコルに従って暗号化処理及びデジタル署名の発行処理を実行したうえで、端末装置１に無線で配送する。端末装置１では、更新コードの署名検証及び復号が行われ、更新コードに異常が無い（即ち、更新プログラムが改ざん等されていない）と判定された場合、ソフトウェアプログラムの更新が行われる。なお、プログラムの更新では、更新失敗時のフォールバックのために更新対象コード及びデフォルトコードが、更新後もそのまま配置されていることが一般的である。
【００１５】
続いて、図２を用いて、ネットワークシステムＳＹＳ１の詳細について説明する。
図２は、ネットワークシステムＳＹＳ１の具体的な構成例を示すブロック図である。なお、本実施の形態では、開発環境２と配送センタ３との間の通信、及び、配送センタ３と端末装置１との間の通信は、暗号化プロトコルに従って暗号化処理及び署名発行処理が行われることによってセキュア保護されているものとする。
【００１６】
図２に示すように、端末装置１は、ソフトウェアを実行するためのプログラム１１０が格納されたメモリ１１と、配送センタ３から配送された更新コード１０１に改ざん等がないか検査する検査部１２と、検査部１２による検査結果に基づいてプログラム１１０の更新を制御する更新制御部１３と、を備える。
【００１７】
≪全部更新の場合のネットワークシステムＳＹＳ１の動作≫
まず、端末装置１のメモリ１１に記憶されたプログラム１１０のうち更新対象コード１１１の全てが更新される場合のネットワークシステムＳＹＳ１の動作について説明する。以下、更新対象コード１１１の全てが更新されることを、便宜的に“全部更新”とも称す。
【００１８】
このとき、開発環境２には、以下に示す手段が設けられている。まず、開発環境２には、更新対象コード１１１の先頭アドレス及びサイズ、及び、更新コード１０１のサイズを取得する手段が設けられている。また、開発環境２には、更新コード１０１のサイズを取得する手段が設けられている。さらに、開発環境２には、更新コード１０１の先頭アドレスが矛盾なく指定されているかを確認する手段が設けられている。
【００１９】
また、端末装置１には、以下に示す手段が設けられている。まず、端末装置１には、更新コード１０１のサイズと、更新コード１０１に付帯して送付されたサイズ情報と、が一致しているか否かの確認を行い、不一致の場合には、更新コード１０１に異常がある（即ち、更新コード１０１が改ざん等された）と判定する手段が設けられている。また、端末装置１には、更新コード１０１の先頭アドレスから、当該先頭アドレスに更新コード１０１のサイズを追加することによって得られる配置終端アドレスまで、のアドレス空間（コード記憶領域）と、更新対象コード１１１の対応するアドレス空間と、に重なりがあるか否かの確認を行い、少なくとも一部が重なる場合には、更新コード１０１に異常があると判定する手段が設けられている。さらに、端末装置１には、更新コード１０１に含まれる分岐命令及びジャンプ命令のそれぞれによって指定された移動先のアドレス（相対アドレス及び絶対アドレス）が更新コード１０１内を指定するアドレスであるか否かの確認を行い、更新コード１０１内を指定するアドレスでない場合には、更新コード１０１に異常があると判定する手段が設けられている。なお、本実施の形態では、検査部１２がこれらの手段を実現している。
【００２０】
具体的には、開発環境２では、更新対象コード１１１の先頭アドレスａｄｒ１、サイズｓ１及び更新コード１０１のサイズｓ２が取得される（図３参照）。また、開発環境２では、例えばユーザによって指定された更新コード１０１の先頭アドレスａｄｒ２が取得される（図３参照）。ここで、アドレスの区間［ａｄｒ１，ａｄｒ１＋ｓ１］と、アドレスの区間［ａｄｒ２，ａｄｒ２＋ｓ２］と、に重なりがあるか否かの確認が行われ、少なくとも一部が重なる場合には、ユーザに対して指定違反が通知される。その後、指定違反が解消されると、（（ａｄｒ１，ｓ１），（ａｄｒ２，ｓ２））の情報が構築され、この情報が付加された更新コード１０１が配送センタ３に送付される。
【００２１】
端末装置１において、検査部１２は、まず、開発環境２から配送センタ３を経由して端末装置１に配送された更新コード１０１のサイズを取得し、更新コード１０１に付帯して送付されたサイズ情報と、が一致しているか否かの確認を行い、不一致の場合、更新コード１０１に異常があると判定する。また、検査部１２は、付随データである（（ａｄｒ１，ｓ１），（ａｄｒ２，ｓ２））の情報を参照して、アドレスの区間［ａｄｒ１，ａｄｒ１＋ｓ１］と、アドレスの区間［ａｄｒ２，ａｄｒ２＋ｓ２］と、に重なりがあるか否かの確認を行い、少なくとも一部が重なる場合、更新コード１０１に異常があると判定する。さらに、検査部１２は、更新コード１０１に含まれる分岐命令及びジャンプ命令のそれぞれによって指定された移動先のアドレスが更新コード１０１内を指定するアドレスであるか否かの確認を行い、更新コード１０１内を指定するアドレスでない場合には、更新コード１０１に異常があると判定する。なお、この判定処理は、一部の分岐命令やジャンプ命令のみを対象に行われるように実装されても良い。
【００２２】
更新制御部１３は、検査部１２によって更新コード１０１に異常がない（即ち、更新コード１０１が改ざん等されていない）と判定された場合、メモリ１１の空き領域に更新コード１０１の書き込みを行う。他方、更新制御部１３は、検査部１２によって更新コード１０１に異常がある（即ち、更新コード１０１が改ざん等されている）と判定された場合、メモリ１１の空き領域に更新コード１０１の書き込みを行わない。
【００２３】
それにより、本実施の形態にかかるネットワークシステムＳＹＳ１は、更新コード１０１の暗号化処理及び署名発行処理が行われた後に更新コード１０１の改ざん等が行われた場合のみならず、更新コード１０１の暗号化処理及び署名発行処理が行われる前に、例えば開発環境２又は配送センタ３において更新コード１０１の改ざん、すり替え、又は取り違えが発生した場合でも、更新コード１０１に異常があることを検出することができる。そのため、本実施の形態にかかるネットワークシステムＳＹＳ１は、更新コード１０１の信頼性を向上させることができる。
【００２４】
≪差分更新の場合のネットワークシステムＳＹＳ１の動作≫
続いて、端末装置１のメモリ１１に記憶されたプログラム１１０の更新対象コード１１１のうち、更新コード１０１との差分のみが更新される場合のネットワークシステムＳＹＳ１の動作について説明する。以下、更新対象コード１１１のうち更新コード１０１との差分のみが更新されることを、便宜的に“差分更新”とも称す。
【００２５】
このとき、開発環境２には、以下に示す手段が設けられている。まず、開発環境２には、更新対象コード１１１と更新コード１０１との差分である差分更新コード塊１０２を生成する手段が設けられている。また、開発環境２には、差分更新コード塊１０２の総数を取得する手段が設けられている。また、開発環境２には、更新対象コード１１１の先頭アドレス及びサイズ、及び、各差分更新コード塊１０２のサイズを取得する手段が設けられている。さらに、開発環境２には、各差分更新コード塊１０２の先頭アドレスが矛盾なく指定されているかを確認する手段が設けられている。
【００２６】
また、端末装置１には、以下に示す手段が設けられている。まず、端末装置１には、差分更新コード塊１０２の総数と、指定数と、が一致しているか否かの確認を行い、不一致の場合には、少なくとも何れかの差分更新コード塊１０２に異常がある（即ち、少なくとも何れかの差分更新コード塊１０２が改ざん等された）と判定する手段が設けられている。また、端末装置１には、各差分更新コード塊１０２のサイズと、指定サイズと、が一致しているか否かの確認を行い、不一致の場合には、少なくとも何れかの差分更新コード塊１０２に異常があると判定する手段が設けられている。また、端末装置１には、各差分更新コード塊１０２の先頭アドレスから、当該先頭アドレスに差分更新コード塊１０２のサイズを追加することによって得られる配置終端アドレスまで、のアドレス空間（コード記憶領域）と、更新対象コード１１１の対応するアドレス空間と、に重なりがあるか否かの確認を行い、少なくとも一部が重なる場合には、少なくとも何れかの差分更新コード塊１０２に異常があると判定する手段が設けられている。また、端末装置１には、各差分更新コード塊１０２の先頭アドレスから、当該先頭アドレスに差分更新コード塊１０２のサイズを追加することによって得られる配置終端アドレスまで、のアドレス空間と、別の差分更新コード塊１０２のアドレス空間と、に重なりがあるか否かの確認を行い、少なくとも一部が重なる場合には、少なくとも何れかの差分更新コード塊１０２に異常があると判定する手段が設けられている。さらに、端末装置１には、各差分更新コード塊１０２に含まれる分岐命令及びジャンプ命令のそれぞれによって指定された移動先のアドレス（相対アドレス）が、当該差分更新コード塊１０２内を指定するアドレスであるか否かの確認を行い、当該差分更新コード塊１０２内を指定するアドレスでない場合には、少なくとも何れかの差分更新コード塊１０２に異常があると判定する手段が設けられている。なお、本実施の形態では、検査部１２によってこれらの手段が実現されている。
【００２７】
具体的には、開発環境２では、図４に示すように、入力されたＥＬＦ形式の更新対象コード１１１及び更新コード１０１のそれぞれをＩＳＳ（Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ｓｉｍｕｌａｔｏｒ：命令シミュレータ）を用いること等によって逆アセンブルすることにより、２つのアセンブルファイルが生成される。その後、各アセンブルファイルの中から制御依存関係が抽出され、制御フローグラフ（Ｃｏｎｔｒｏｌ  Ｆｌｏｗ  Ｇｒａｐｈ（ＣＦＧ））及び関数呼び出しグラフ（Ｃａｌｌ  Ｇｒａｐｈ（ＣＧ））が構築される。その後、更新対象コード１１１のアセンブラファイルを基に構築されたＣＦＧと、更新コード１０１のアセンブラファイルを基に構築されたＣＦＧと、の間で共通する基本ブロックやハイパーブロックが抽出され、それら基本ブロック同士を照合することにより、基本ブロック単位で差分（差分更新コード）が取得される。またここで、対応する基本ブロックが存在しない場合は、ハイパーブロック同士を照合することにより、ハイパーブロック単位での差分（差分更新コード）が取得される。取得した差分更新コードは、例えば、それに前後する差分更新コード、及び、その間に含まれる共通コードとともに差分更新コード塊１０２として纏められる。開発環境２では、差分更新コード塊１０２が生成されるとともに、差分更新コード塊１０２の数Ｎの情報が出力される。
【００２８】
また、開発環境２では、更新対象コード１１１の先頭アドレスａｄｒ１、サイズｓ１及び各差分更新コード塊１０２のサイズｓ２＿ｉ（ｉは１〜Ｎの何れかの整数）が取得される（図５参照）。また、開発環境２では、例えばユーザによって指定された各差分更新コード塊１０２の先頭アドレスａｄｒ２＿ｉが取得される（図５参照）。ここで、アドレスの区間［ａｄｒ１，ａｄｒ１＋ｓ１］と、アドレスの区間［ａｄｒ２＿ｉ，ａｄｒ２＿ｉ＋ｓ２＿ｉ］（ｉは１〜Ｎの何れかの整数）と、に重なりがあるか否かの確認が行われ、少なくとも一部が重なる場合には、ユーザに対して指定違反が通知される。また、アドレスの区間［ａｄｒ２＿ｉ，ａｄｒ２＿ｉ＋ｓ２＿ｉ］と、アドレスの区間［ａｄｒ２＿ｊ，ａｄｒ２＿ｊ＋ｓ２＿ｊ］（ｊは１〜Ｎの何れかの整数かつｉとは異なる整数）と、に重なりがあるか否かの確認が行われ、少なくとも一部が重なる場合には、ユーザに対して指定違反が通知される。その後、指定違反が解消されると、（（ａｄｒ１，ｓ１），Ｎ，（ａｄｒ２＿１，ｓ２＿１），・・・，（ａｄｒ２＿Ｎ，ｓ２＿Ｎ））の情報が構築され、この情報が付加された差分更新コード塊１０２が配送センタ３に送付される。
【００２９】
端末装置１において、検査部１２は、まず、開発環境２から配送センタ３を経由して端末装置１に配送された差分更新コード塊１０２の総数と、指定数Ｎと、が一致しているか否かの確認を行い、不一致の場合、少なくとも何れかの差分更新コード塊１０２に異常があると判定する。また、検査部１２は、各差分更新コード塊１０２のサイズと、指定サイズと、が一致しているか否かの確認を行い、少なくとも一つが不一致の場合、少なくとも何れかの差分更新コード塊１０２に異常があると判定する。また、検査部１２は、付随データである（（ａｄｒ１，ｓ１），Ｎ，（ａｄｒ２＿１，ｓ２＿１），・・・，（ａｄｒ２＿Ｎ，ｓ２＿Ｎ））の情報を参照して、アドレスの区間［ａｄｒ１，ａｄｒ１＋ｓ１］と、アドレスの区間［ａｄｒ２＿ｉ，ａｄｒ２＿ｉ＋ｓ２＿ｉ］と、に重なりがあるか否かの確認を行い、少なくとも一部が重なる場合、少なくとも何れかの差分更新コード塊１０２に異常があると判定する。また、検査部１２は、アドレスの区間［ａｄｒ２＿ｉ，ａｄｒ２＿ｉ＋ｓ２＿ｉ］と、アドレスの区間［ａｄｒ２＿ｊ，ａｄｒ２＿ｊ＋ｓ２＿ｊ］と、に重なりがあるか否かの確認を行い、少なくとも一部が重なる場合、少なくとも何れかの差分更新コード塊１０２に異常があると判定する。さらに、検査部１２は、先頭アドレスａｄｒ２＿ｉ及びサイズｓ２＿ｉの差分更新コード塊１０２に含まれる分岐命令及びジャンプ命令のそれぞれによって指定された移動先のアドレスが、差分更新コード塊１０２のアドレスの区間［ａｄｒ２＿ｉ，ａｄｒ２＿ｉ＋ｓ２＿ｉ］内を指定するアドレスであるか否かの確認を行い、当該差分更新コード塊１０２のアドレスの区間［ａｄｒ２＿ｉ，ａｄｒ２＿ｉ＋ｓ２＿ｉ］内を指定するアドレスでない場合、少なくとも何れかの差分更新コード塊１０２に異常があると判定する。なお、この判定処理は、一部の分岐命令やジャンプ命令のみを対象に行われるように実装されても良い。
【００３０】
更新制御部１３は、検査部１２によって各差分更新コード塊１０２に異常がない（即ち、各差分更新コード塊１０２が改ざん等されていない）と判定された場合、メモリ１１の空き領域に各差分更新コード塊１０２の書き込みを行う。他方、更新制御部１３は、検査部１２によって何れかの差分更新コード塊１０２に異常がある（即ち、何れかの差分更新コード塊１０２が改ざん等されている）と判定された場合、メモリ１１の空き領域に各差分更新コード塊１０２の書き込みを行わない。
【００３１】
それにより、本実施の形態にかかるネットワークシステムＳＹＳ１は、差分更新コード塊１０２の暗号化処理及び署名発行処理が行われた後に当該差分更新コード塊１０２の改ざん等が行われた場合のみならず、差分更新コード塊１０２の暗号化処理及び署名発行処理が行われる前に、例えば開発環境２又は配送センタ３において差分更新コード塊１０２の改ざん、すり替え、又は取り違えが発生した場合でも、差分更新コード塊１０２に異常があることを検出することができる。そのため、本実施の形態にかかるネットワークシステムＳＹＳ１は、差分更新コード塊１０２（更新コード１０１）の信頼性を向上させることができる。
【００３２】
このように、本実施の形態にかかるネットワークシステムＳＹＳ１では、開発環境２が、更新コード１０１（又は差分更新コード塊１０２）の開発段階において、更新コード１０１（又は差分更新コード塊１０２）に対して更新対象コード１１１と重なりなく配置可能な配置アドレスが与えられているかを確認することができる。それにより、更新対象コード１１１を破壊するような不正な更新コード１０１（又は差分更新コード塊１０２）が開発されるのを防ぐことができる。
【００３３】
また、本実施の形態にかかるネットワークシステムＳＹＳ１では、端末装置１が、更新対象コード１１１と更新コード１０１（又は差分更新コード塊１０２）との間に矛盾がないかどうかを確認し、矛盾がある場合、メモリ１１への更新コード１０１（又は差分更新コード塊１０２）の書き込みを停止させる。それにより、更新対象コード１１１を破壊するような不正な更新コード１０１（又は差分更新コード塊１０２）が、メモリ１１に書き込まれるのを防ぐことができる。
【００３４】
また、本実施の形態にかかるネットワークシステムＳＹＳ１は、Ｒｅｐｌａｙ攻撃によって同じ更新コード１０１が繰り返し同じ端末装置１に配送された場合でも、当該更新コード１０１の配置領域が更新対象コード１１１の配置領域の全てと重なるため、不正を検知して、端末装置１のメモリ１１への当該更新コード１０１の書き込みを停止させることができる。
【００３５】
さらに、本実施の形態にかかるネットワークシステムＳＹＳ１では、端末装置１が、更新コード１０１（又は差分更新コード塊１０２）に含まれる分岐命令及びジャンプ命令のそれぞれによって指定された移動先のアドレスが、更新コード１０１（又は差分更新コード塊１０２）内を指定するアドレスであるか否かの確認を行い、違反がある場合、不正なアドレスへのアクセスによる攻撃を含むコードである可能性があるため、メモリ１１への更新コード１０１（又は差分更新コード塊１０２）の書き込みを停止させる。それにより、攻撃を含む可能性のあるコードがメモリ１１に書き込まれるのを防ぐことができる。
【００３６】
＜実施の形態２＞
実施の形態１にかかるネットワークシステムＳＹＳ１では、更新コード１０１（又は差分更新コード塊１０２；以下、特に断りが無い限り、差分更新コード塊１０２を含む）及び更新対象コード１１１のそれぞれの記憶領域に重なりがあるか否かによって異常が検知されていた。或いは、更新コード１０１に含まれる分岐命令及びジャンプ命令のそれぞれによって指定された移動先のアドレスが、更新コード１０１内を指定するアドレスであるか否かによって異常が検知されていた。
【００３７】
しかしながら、ネットワークシステムＳＹＳ１では、更新コード１０１の取り違えが起きた場合、完全には異常が検知されない可能性がある。ここで、取り違えとは、例えば、開発環境２等において管理されている更新対象コード１１１及び更新コード１０１の組み合わせに齟齬が生じることを意味する。
【００３８】
それに対し、実施の形態２にかかるネットワークシステムＳＹＳ２では、更新対象コード１１１と更新コード１０１との間の共通コードが一致するか否かを判定する手段が設けられている。それにより、更新コード１０１の取り違えが起きた場合でも異常の検知が可能である。以下、具体的に説明する。
【００３９】
なお、本実施の形態では、開発環境２と配送センタ３との間の通信、及び、配送センタ３と端末装置１との間の通信は、暗号化プロトコルに従って暗号化処理及び署名発行処理が行われることによってセキュア保護されているものとする。
【００４０】
≪全部更新の場合のネットワークシステムＳＹＳ２の動作≫
まず、端末装置１のメモリ１１に記憶されたプログラム１１０のうち更新対象コード１１１の全てが更新される場合（即ち、全部更新の場合）におけるネットワークシステムＳＹＳ１の動作について説明する。
【００４１】
このとき、開発環境２には、以下に示す手段が設けられている。まず、開発環境２には、更新対象コード１１１と更新コード１０１との間で共通するコード（共通コード）を識別する手段が設けられている。また、開発環境２には、更新コード１０１のうち共通コードとそれ以外のコードとの境界にコメント（フラグ）を挿入する手段が設けられている。
【００４２】
また、端末装置１には、以下に示す手段が設けられている。まず、端末装置１には、更新対象コード１１１と更新コード１０１とを比較することによって、更新コード１０１のコメント挿入部分が、共通コードとそれ以外のコードとの境界（一致不一致の境界）であるか否かの確認を行い、一致不一致の境界でない場合、更新コード１０１に異常があると判定する手段が設けられている。換言すると、端末装置１には、更新コード１０１のコメント挿入部分が、更新対象コード１１１と更新コード１０１との間で交互に繰り返される一致及び不一致の切り替わり部分と一致するか否かの確認を行い、一致不一致の切り替わり部分と一致しない場合、更新コード１０１に異常があると判定する手段が設けられている。また、端末装置１には、更新コード１０１が分割転送される場合でも、更新コード１０１の一部が転送されるたびに、分割単位を考慮しつつコメント挿入部分が一致不一致の境界であるか否かの確認を行い、一致不一致の境界でない場合、更新コード１０１に異常があると判定する手段が設けられている。さらに、端末装置１には、各差分更新コード塊１０２に異常がないと判定された場合、各差分更新コード塊１０２をメモリ１１に書き込む前にコメントを削除する手段が設けられている。なお、本実施の形態では、検査部１２によってこれらの手段が実現されている。
【００４３】
具体的には、開発環境２では、図６に示すように、入力されたＥＬＦ形式の更新対象コード１１１及び更新コード１０１のそれぞれをＩＳＳを用いること等によって逆アセンブルすることにより、２つのアセンブルファイルが生成される。その後、各アセンブルファイルの中から制御依存関係が抽出され、制御フローグラフ（Ｃｏｎｔｒｏｌ  Ｆｌｏｗ  Ｇｒａｐｈ（ＣＦＧ））及び関数呼び出しグラフ（Ｃａｌｌ  Ｇｒａｐｈ（ＣＧ））が構築される。その後、更新対象コード１１１のアセンブラファイルを基に構築されたＣＦＧと、更新コード１０１のアセンブラファイルを基に構築されたＣＦＧと、の間で共通する基本ブロックやハイパーブロックが抽出され、それら基本ブロック同士を照合することにより、基本ブロック単位で差分が識別される。基本ブロック同士の対応関係がない場合、当該基本ブロックを含むハイパーブロックを識別し、ハイパーブロック同士を照合することにより、ハイパーブロック単位で差分が識別される。その後、更新コード１０１のうち、更新対象コード１１１と共通するコード部分と、それ以外のコード部分と、の境界にコメント（フラグ）が挿入される。つまり、開発環境２では、コメント付きの更新コード１０１が生成される。なお、コメントには、例えば境界部分より上側のコードが共通コード及び差分コードの何れであるかを示す識別子が付加されても良い。
【００４４】
端末装置１において、検査部１２は、まず、メモリ１１から読み出されたプログラム１１０の更新対象コード１１１と、開発環境２から配送センタ３を経由して端末装置１に配送されたコメント付きの更新コード１０１と、を比較する。そして、検査部１２は、更新コード１０１のコメント挿入部分が、共通コードとそれ以外のコードとの境界（一致不一致の境界）であるか否かの確認を行い、一致不一致の境界でない場合、更新コード１０１に異常があると判定する。また、検査部１２は、更新コード１０１が分割転送される場合でも、分割単位を考慮しつつコメント挿入部分が一致不一致の境界であるか否かの確認を行い、一致不一致の境界でない場合、更新コード１０１に異常があると判定する。
【００４５】
なお、更新対象コード１１１と更新コード１０１とが一致するか否かの判定は、例えば、バイナリ列として見た更新対象コード１１１及び更新コード１０１を３２ビット単位でビット毎にＸＮＯＲ（否定排他的論理和）演算することにより行われる。例えば、演算結果が３２’ｈｆｆｆｆを示す場合は、一致と判定され、演算結果がそれ以外を示す場合は、不一致と判定される。
【００４６】
更新制御部１３は、検査部１２によって更新コード１０１に異常がない（即ち、更新コード１０１が改ざん等されていない）と判定された場合、メモリ１１の空き領域に更新コード１０１の書き込みを行う。なお、コメントはメモリ１１への書き込み前に削除される。他方、更新制御部１３は、検査部１２によって更新コード１０１に異常がある（即ち、更新コード１０１が改ざん等されている）と判定された場合、メモリ１１の空き領域に更新コード１０１の書き込みを行わない。
【００４７】
それにより、本実施の形態にかかるネットワークシステムＳＹＳ２は、更新コード１０１の暗号化処理及び署名発行処理が行われる前に、例えば開発環境２において更新コード１０１の取り違えが発生した場合でも、更新コード１０１に異常があることを検出することができる。そのため、本実施の形態にかかるネットワークシステムＳＹＳ２は、更新コード１０１の信頼性を向上させることができる。
【００４８】
≪差分更新の場合のネットワークシステムＳＹＳ２の動作≫
続いて、端末装置１のメモリ１１に記憶されたプログラム１１０の更新対象コード１１１のうち、更新コード１０１との差分のみが更新される場合（即ち、全部更新の場合）におけるネットワークシステムＳＹＳ２の動作について説明する。
【００４９】
このとき、開発環境２には、以下に示す手段が設けられている。まず、開発環境２には、差分更新コード塊１０２を生成する手段が設けられている。また、開発環境２には、各差分更新コード塊１０２と更新対象コード１１１との間で共通するコード（共通コード）を識別し、各差分更新コード塊１０２のうち共通コードとそれ以外のコードとの境界にコメント（フラグ）を挿入する手段が設けられている。
【００５０】
また、端末装置１には、以下に示す手段が設けられている。まず、端末装置１には、更新対象コード１１１と各差分更新コード塊１０２とを比較することによって、差分更新コード塊１０２のコメント挿入部分が、共通コードとそれ以外のコードとの境界（一致不一致の境界）であるか否かの確認を行い、一致不一致の境界でない場合、少なくとも何れかの差分更新コード塊１０２に異常があると判定する手段が設けられている。また、端末装置１には、各差分更新コード塊１０２に異常がないと判定された場合、各差分更新コード塊１０２をメモリ１１に書き込む前にコメントを削除する手段が設けられている。なお、本実施の形態では、検査部１２によってこれらの手段が実現されている。
【００５１】
具体的には、開発環境２では、図７に示すように、入力されたＥＬＦ形式の更新対象コード１１１及び更新コード１０１のそれぞれをＩＳＳを用いること等によって逆アセンブルすることにより、２つのアセンブルファイルが生成される。その後、各アセンブルファイルの中から制御依存関係が抽出され、制御フローグラフ（Ｃｏｎｔｒｏｌ  Ｆｌｏｗ  Ｇｒａｐｈ（ＣＦＧ））及び関数呼び出しグラフ（Ｃａｌｌ  Ｇｒａｐｈ（ＣＧ））が構築される。その後、更新対象コード１１１のアセンブラファイルを基に構築されたＣＦＧと、更新コード１０１のアセンブラファイルを基に構築されたＣＦＧと、の間で共通する基本ブロックやハイパーブロックが抽出され、それら基本ブロック同士を照合することにより、基本ブロック単位で差分（差分更新コード）が取得される。基本ブロック同士の対応関係がない場合、当該基本ブロックを含むハイパーブロックを識別し、ハイパーブロック同士を照合することにより、ハイパーブロック単位で差分が識別される。その後、更新コード１０１のうち、更新対象コード１１１と共通するコード部分と、それ以外のコード部分と、の境界にコメント（フラグ）が挿入される。取得した差分更新コードは、例えば、それに前後する差分更新コード、及び、その間に含まれる共通コードとともに差分更新コード塊１０２として纏められる。つまり、開発環境２では、コメント付きの差分更新コード塊１０２が生成される。
【００５２】
端末装置１において、検査部１２は、まず、メモリ１１から読み出されたプログラム１１０の更新対象コード１１１と、開発環境２から配送センタ３を経由して端末装置１に配送されたコメント付きの差分更新コード塊１０２と、を比較する。そして、検査部１２は、差分更新コード塊１０２のコメント挿入部分が、共通コードとそれ以外のコードとの境界（一致不一致の境界）であるか否かの確認を行い、一致不一致の境界でない場合、更新コード１０１に異常があると判定する。
【００５３】
なお、更新対象コード１１１と各差分更新コード塊１０２とが一致するか否かの判定は、例えば、バイナリ列として見た更新対象コード１１１及び各差分更新コード塊１０２を３２ビット単位でビット毎にＸＮＯＲ（否定排他的論理和）演算することにより行われる。例えば、演算結果が３２’ｈｆｆｆｆを示す場合は、一致と判定され、演算結果がそれ以外を示す場合は、不一致と判定される。
【００５４】
更新制御部１３は、検査部１２によって各差分更新コード塊１０２に異常がない（即ち、各差分更新コード塊１０２が改ざん等されていない）と判定された場合、メモリ１１の空き領域に各差分更新コード塊１０２の書き込みを行う。なお、コメントはメモリ１１への書き込み前に削除される。他方、更新制御部１３は、検査部１２によって何れかの差分更新コード塊１０２に異常がある（即ち、何れかの差分更新コード塊１０２が改ざん等されている）と判定された場合、メモリ１１の空き領域に各差分更新コード塊１０２の書き込みを行わない。
【００５５】
それにより、本実施の形態にかかるネットワークシステムＳＹＳ２は、差分更新コード塊１０２の暗号化処理及び署名発行処理が行われる前に、例えば開発環境２において差分更新コード塊１０２の取り違えが発生した場合でも、差分更新コード塊１０２に異常があることを検出することができる。そのため、本実施の形態にかかるネットワークシステムＳＹＳ２は、差分更新コード塊１０２（更新コード１０１）の信頼性を向上させることができる。
【００５６】
このように、本実施の形態にかかるネットワークシステムＳＹＳ２では、端末装置１が、更新コード１０１（又は差分更新コード塊１０２）に含まれる共通コードと、更新対象コード１１１の共通コードと、が一部でも異なる場合、不正があると判断する。そのため、本実施の形態にかかるネットワークシステムＳＹＳ２は、更新コード１０１（又は差分更新コード塊１０２）の取り違えを検出することができる。
【００５７】
また、本実施の形態にかかるネットワークシステムＳＹＳ２では、端末装置１が、更新コード１０１（又は差分更新コード塊１０２）に含まれる共通コードと、更新対象コード１１１の共通コードと、が一部でも異なる場合、メモリ１１への更新コード１０１（又は差分更新コード塊１０２）の書き込みを停止させる。それにより、本実施の形態にかかるネットワークシステムＳＹＳ２は、取り違えられたコードが、書き込み対象でない端末装置１に意図せず書き込まれるのを防ぐことができる。
【００５８】
なお、本実施の形態にかかるネットワークシステムＳＹＳ２は、実施の形態１の手法を組み合わせて用いられても良い。
【００５９】
＜実施の形態３＞
実施形態２にかかるネットワークシステムＳＹＳ２では、更新コード１０１（又は差分更新コード塊１０２）の取り違えへの対応が概ね可能となったが、巧妙な改ざんの検知が依然として困難である。
【００６０】
そこで、本実施の形態にかかるネットワークシステムＳＹＳ３では、少なくとも改ざん耐性のある暗号プロトコルに従って配送センタ３から端末装置１にデータが配送されていることを前提として、暗号プロトコル処理対象のデータに対して、開発環境２において暗号プロトコルとは別に署名を付加し、かつ、端末装置１において当該別に付加された署名の検証を行うことにより、配送センタ３でのデータの取り違え及び内部犯行による改ざんへの耐性を強化している。以下、具体的に説明する。
【００６１】
なお、本実施の形態では、共通鍵が、開発環境２と端末装置１との間に保有され、開発環境２には保有されていないものとする。また、本実施の形態では、開発環境２と配送センタ３との間の通信、及び、配送センタ３と端末装置１との間の通信は、暗号化プロトコルに従って暗号化処理及び署名発行処理が行われることによってセキュア保護されているものとする。
【００６２】
開発環境２には、以下に示す手段が設けられている。まず、開発環境２には、更新コード１０１（又は差分更新コード塊１０２；以下、差分更新コード塊１０２を含む）の空き領域への乱数埋め込み手段が設けられている。また、開発環境２には、更新コード１０１に対するハッシュ値及び署名の生成に必要となるパディング手段が設けられている。さらに、開発環境２では、更新コード１０１に対する署名生成手段が設けられている。
【００６３】
また、端末装置１には、以下に示す手段が設けられている。具体的には、端末装置１には、署名検証手段と、検証不合格の場合に不正検知を通知する手段と、が設けられている。
【００６４】
さらに、開発環境２及び端末装置１には、共有鍵設定手段として、例えば、以下に示す手段の何れかが設けられている。具体的には、開発環境２及び端末装置１には、乱数シードを用いた共通鍵生成手段と、更新対象コード１１１を用いた共通鍵生成手段と、乱数シード及び更新対象コード１１１を用いた共通鍵生成手段と、配送センタ３への問い合わせによる共通鍵設定手段と、の何れかが設けられている。なお、配送センタ３への問い合わせによる共通鍵設定手段では、端末事前登録鍵が鍵管理サーバ４によって保持されているものとする。
【００６５】
特に、乱数シードを用いた共通鍵生成手段の場合、開発環境２には、乱数生成器が秘匿搭載され、端末装置１には、開発環境２と同一の乱数生成器が秘匿搭載されている。また、更新対象コード１１１を用いた共通鍵生成手段の場合、端末装置１には、開発環境２に保有されたコードと同一の更新対象コード１１１が配置されている。また、乱数シード及び更新対象コード１１１を用いた共通鍵生成手段の場合、開発環境２には、乱数生成器が秘匿搭載され、端末装置１には、開発環境２と同一の乱数生成器が秘匿搭載されるとともに、開発環境２に保有されたコードと同一の更新対象コード１１１が配置されている。なお、この場合、開発環境２にのみ、乱数生成器が秘匿搭載され、開発環境２から暗号通信によって端末装置１に、乱数生成器によって生成された乱数が送付されても良い。さらに、配送センタ３への問い合わせによる共通鍵設定手段の場合、端末装置１には、特定の鍵が保有されている。そして、これら端末装置１と開発環境２との間で、共通鍵設定が行われる。
【００６６】
具体的には、開発環境２では、更新コード１０１の空き容量を識別する。その後、当該空き容量には、ＮＯＰと、移動先アドレスとして奇数アドレスの絶対アドレスを指定するジャンプ命令とが、ＮＯＰ、ジャンプ命令の順番に配置される。ここで、奇数アドレスには、乱数生成することによって得られたジャンプ命令に指定可能な奇数が用いられる。その後、空き容量に乱数が埋め込まれた更新コード１０１に対する署名生成の前に、更新コード１０１のサイズが１２８ビットの整数倍となるように、ＮＯＰと、移動先アドレスとして奇数アドレス２ｋ＋１の絶対アドレスを指定するジャンプ命令とが、ＮＯＰ、ジャンプ命令の順番に配置される。ここで、ｋは、例えば０から１つずつ順番にインクリメントされる。その後、開発環境２では、更新コード１０１が配置された端末装置１との間で共通鍵の設定が独自に行われることにより、図８に示すように、乱数が埋め込まれた更新コード１０１に対して、共通鍵を用いた署名の生成が行われる。
【００６７】
なお、開発環境２における当該開発環境２と端末装置１との間の共通鍵の設定は、事前に行われても良いし、以下に示す方法で行われても良い。
【００６８】
例えば、図９に示すように、疑似乱数生成器を用いることにより、乱数シードを基にして共通鍵が生成されてもよい。ここで、疑似乱数生成器の実装の仕方については、開発環境２及び端末装置１のそれぞれにおいて秘匿にされているものとする。
【００６９】
或いは、図１０に示すように、更新対象コード１１１の先頭アドレスから開始して１２８ビットのＮ（Ｎは正の整数）倍のビット列を取り出したのち、取り出したビット列を基にして、疑似ランダム関数又は圧縮関数を用いることによって共通鍵が生成されても良い。具体的には、疑似ランダム関数又は圧縮関数をＰＲＦとし、最後の１２８ビットを鍵ｋ１とし、残りの１２８×（Ｎ−１）ビットを引数ａｒｇとすると、ＰＲＦ（ｋ１，ａｒｇ）の計算結果が共通鍵として生成される。なお、圧縮関数としてハフマン符号などの通常の圧縮アルゴリズムが用いられる場合、例えば、ｋ１｜｜ａｒｇが圧縮される。ここで、記号“｜｜”はビット連結を表している。
【００７０】
或いは、図１１に示すように、乱数シードに基づいて疑似乱数生成器から出力された値ｋ１と、更新対象コード１１１の先頭アドレスから開始して１２８ビットのＮ倍のビット列ａｒｇと、を基にして、疑似ランダム関数又は圧縮関数を用いることによって共通鍵が生成されても良い。ここで、圧縮関数としては、例えばＭｉｙａｇｕｃｈｉ−Ｐｒｅｎｅｅｌ圧縮関数が用いられても良い。
【００７１】
或いは、図１２に示すように、配送センタ３を介した開発環境２と鍵管理サーバ４の間の２者間に、直接、ＴＬＳ等を用いてセキュリティセッションを張ったうえで、当該セキュリティセッション内において、更新対象の端末装置１のＩＤを用いて鍵管理サーバ４から端末事前登録鍵を取得し、開発環境２に設定されても良い。ここで、セキュリティセッションの張り方から、配送センタ３は、端末事前登録鍵を取得することができない。
【００７２】
開発環境２において、乱数が埋め込まれた更新コード１０１は、生成署名が付加されたうえで、配送センタ３に送付される。なお、共通鍵設定により乱数シードが生成された場合には、乱数シードがさらに付加され、更新対象コード１１１が用いられた場合には、整数Ｎがさらに付加され、配送センタ３を介して共通鍵設定された場合には、端末事前登録鍵の鍵ＩＤがさらに付加される。
【００７３】
端末装置１では、開発環境２との間で共通鍵の設定が独自に行われることにより、配送センタ３から暗号プロトコルに従って送付されたデータから、当該暗号プロトコル処理結果のデータが取得され、当該取得したデータの中から更新コード１０１と署名とが識別される。そして、図１３に示すように、独自設定された共通鍵を用いて署名検証が実施される。検証不合格の場合、端末装置１のメモリ１１への更新コード１０１の書き込みは中止される。
【００７４】
なお、端末装置１における開発環境２と当該端末装置１との間の共通鍵の設定は、事前に行われても良いし、以下に示す方法で行われても良い。例えば、端末装置１では、鍵生成方式を示すコードが予め秘匿配置されており、これを用いて、以下に示す何れかの方法で共通鍵の設定が行われる。
【００７５】
例えば、図９に示すように、暗号プロトコル処理結果のデータから取得された乱数シードを基にして、疑似乱数生成器を用いることによって開発環境２と共通する共通鍵が生成されても良い。
【００７６】
或いは、図１０に示すように、暗号プロトコル処理結果のデータから値Ｎを取得したうえで、更新対象コード１１１の先頭アドレスから開始して１２８ビットのＮ倍のビット列を取り出したのち、取り出したビット列を基にして、疑似ランダム関数又は圧縮関数を用いることによって共通鍵が生成されても良い。具体的には、疑似ランダム関数又は圧縮関数をＰＲＦとし、最後の１２８ビットを鍵ｋ１とし、残りの１２８×（Ｎ−１）ビットを引数ａｒｇとすると、ＰＲＦ（ｋ１，ａｒｇ）の計算結果が開発環境２と共通する共通鍵として生成される。なお、圧縮関数としてハフマン符号などの通常の圧縮アルゴリズムが用いられる場合、例えば、ｋ１｜｜ａｒｇが圧縮される。ここで、記号“｜｜”はビット連結を表している。
【００７７】
或いは、図１１に示すように、暗号プロトコル処理結果のデータから値Ｎを取得したうえで、乱数シードに基づいて疑似乱数生成器から出力された値ｋ１と、更新対象コード１１１の先頭アドレスから開始して１２８ビットのＮ倍のビット列ａｒｇと、を基にして、疑似ランダム関数又は圧縮関数を用いることによって開発環境２と共通する共通鍵が生成されても良い。ここで、圧縮関数としては、例えばＭｉｙａｇｕｃｈｉ−Ｐｒｅｎｅｅｌ圧縮関数が用いられても良い。
【００７８】
或いは、暗号プロトコル処理結果のデータから端末事前登録鍵の鍵ＩＤを取得し、当該鍵を開発環境２と共通する共通鍵としても良い。
【００７９】
本実施の形態にかかるネットワークシステムＳＹＳ３では、端末装置１及び開発環境２の各々において乱数生成器が秘匿実装されているため、当該乱数生成器を用いて共通鍵設定が行われた場合、配送センタ３では本共通鍵を取得することができない。そのため、開発環境２において生成された署名の改ざんが抑止される。
【００８０】
また、本実施の形態にかかるネットワークシステムＳＹＳ３では、配送センタ３を介した開発環境２と鍵管理サーバ４との間の２者間においてセキュアセッションが直接張られることにより、開発環境２のみにおいて端末事前登録鍵の取得が可能になり、配送センタ３では本共通鍵を取得することができないため、開発環境２において生成された署名の改ざんが抑止される。
【００８１】
また、本実施の形態にかかるネットワークシステムＳＹＳ３は、開発環境２と配送センタ３との間のデータ通信が、少なくとも改ざん耐性を持つ暗号プロトコルによって保護されており、配送センタ３と端末装置１との間のデータ通信も、同様に少なくとも改ざん耐性を持つ暗号プロトコルによって保護されている。そのため、これら転送路上での中間者による更新コードの改ざんの抑止が可能である。
【００８２】
また、本実施の形態にかかるネットワークシステムＳＹＳ３は、署名検証において不合格になった場合、端末装置１のメモリ１１への更新コード１０１の書き込みを停止させることができる。そのため、端末装置１において、改ざんされた更新コード１０１が誤って実行されるのを防ぐことができる。
【００８３】
また、本実施の形態にかかるネットワークシステムＳＹＳ３は、実施の形態１の手法と組み合わせることにより、Ｒｅｐｌａｙ攻撃によって同じ更新コード１０１が繰り返し同じ端末装置１に配送された場合でも、当該更新コード１０１の配置領域が更新対象コード１１１の配置領域の全てと重なるため、不正を検知して、端末装置１のメモリ１１への当該更新コード１０１の書き込みを停止させることができる。
【００８４】
さらに、本実施の形態にかかるネットワークシステムＳＹＳ３は、実施の形態２の手法と組み合わせることにより、更新対象コード１１１のみから共通鍵が構成されている場合でも、改ざんの困難性を向上させることができる。
【００８５】
＜実施の形態４＞
実施の形態４にかかるネットワークシステムＳＹＳ４について説明する。
【００８６】
本実施の形態では、開発環境２と端末装置１との間の共通鍵設定手段として、実施の形態３の場合と同様に、例えば、下記に示す何れかの手段が設けられている。具体的には、開発環境２及び端末装置１には、例えば、乱数シードを用いた共通鍵生成手段が設けられている。或いは、開発環境２及び端末装置１には、例えば、更新対象コード１１１を用いた共通鍵設定手段が設けられている。或いは、開発環境２及び端末装置１には、乱数シード及び更新対象コード１１１を用いた共通鍵設定手段が設けられている。或いは、開発環境２及び端末装置１には、配送センタ３への問い合わせによる共通鍵設定手段が設けられている。なお、乱数シード及び更新対象コード１１１を用いた共通鍵設定手段では、端末事前登録鍵が鍵管理サーバによって保持されているものとする。
【００８７】
特に、乱数シードを用いた共通鍵生成手段の場合、開発環境２には、乱数生成器が秘湯搭載され、かつ、端末装置１には、開発環境２と同一の乱数生成器が秘匿搭載されている。また、更新対象コード１１１を用いた共通鍵設定手段の場合、端末装置１には、開発環境２において保有されている更新対象コード１１１と同一の更新対象コード１１１が配置されている。また、乱数シード及び更新対象コード１１１を用いた共通鍵設定手段の場合、開発環境２には、乱数生成器が秘匿搭載され、かつ、端末装置１には、開発環境２と同一の乱数生成器が秘匿搭載されるとともに、開発環境２において保有されている更新対象コード１１１と同一の更新対象コード１１１が配置されている。配送センタ３への問い合わせによる共通鍵設定手段の場合、端末装置１には、特定の鍵が保有されている。このような条件のもと、開発環境２と端末装置１との間で共通鍵の設定が行われる。以下、共通鍵設定手段によって設定された共通鍵を設定共通鍵と称す。
【００８８】
なお、開発環境２及び端末装置１には共通の乱数設定手段が設けられているものとする。具体的には、開発環境２において生成された乱数は、少なくとも改ざん耐性のある暗号通信を介して、配送センタ３に送付される。また、配送センタ３の乱数は、少なくとも改ざん耐性のある暗号通信を介して、端末装置１に配送される。それにより、開発環境２及び端末装置１には共通の乱数設定手段が設けられる。以下、共通乱数設定手段によって設定された乱数を共有乱数と称す。この共有乱数は、配送センタ３及び端末装置１間の暗号通信に用いられても良い。
【００８９】
≪第１のエンコード・デコード手法≫
まず、第１のエンコード・デコード手法について説明する。この手法は、更新対象コード１１１のバイナリ列の長さが更新コード１０１のバイナリ列の長さ以上である場合に利用可能である。なお、差分更新の場合、この条件が成立つ。
【００９０】
図１４は、開発環境２でのエンコード方式を示す図である。図１４に示すように、開発環境２では、更新対象コード１１１及び差分更新コード塊１０２を読み出し、これらのバイナリ列のＥＯＲ（排他的論理和）演算を実行することにより、エンコード後の差分更新コード塊１０２のバイナリ列が生成される。エンコード後の差分更新コード塊１０２のバイナリ列は、先頭に６４ビットで表現される更新対象コード１１１の読み出し先頭アドレス及びサイズの情報が付加されたうえで、配送センタ３を経由して、更新対象である端末装置１に配送される。
【００９１】
更新対象の端末装置１では、受け取ったデータから更新対象コード１１１の読み出し先頭アドレス及びサイズ、及び、エンコード後の差分更新コード塊１０２のバイナリ列が識別される。図１５は、端末装置１でのデコード方式を示す図である。図１５に示すように、端末装置１では、更新対象コード１１１を読み出し、更新対象コード１１１とエンコード後の差分更新コード塊１０２のバイナリ列とのＥＯＲ演算を実行することにより、差分更新コード塊１０２のバイナリ列が得られる。
【００９２】
本実施の形態にかかるネットワークシステムＳＹＳ３では、第１のエンコード・デコード手法が実施の形態１及び実施の形態２の少なくとも何れかにかかる手法と併用して用いられることにより、差分更新コード塊１０２の取り違えや改ざんなどの検知が可能となる。第１のエンコード・デコード手法が実施の形態１にかかる手法と併用して用いられる場合、開発環境２において、エンコード対象のコードの先頭部にアドレス及びサイズの情報が例えば６４ビット区切りで配置された後、エンコードが実施され、端末装置１においてデコードが実施される。第１のエンコード・デコード手法が実施の形態２にかかる手法と併用して用いられる場合、開発環境２において、コメントが挿入されたコードに対してエンコードが実施され、端末装置１においてデコードが実施される。また、エンコード結果を差分更新コードと見立てて第１のエンコード・デコード手法が実施の形態３にかかる手法と併用して用いられることも可能である。この場合、開発環境２において署名発行処理が実施され、端末装置１において署名検証処理が実施される。
【００９３】
≪第２のエンコード・デコード手法≫
続いて、第２のエンコード・デコード手法について説明する。この手法は、更新対象コード１１１のバイナリ列の長さが更新コード１０１のバイナリ列の長さ以上である場合に利用可能である。なお、差分更新の場合、この条件が成立つ。
【００９４】
図１６は、開発環境２でのエンコード方式を示すフローチャートである。図１６に示すように、開発環境２では、共有乱数を設定共通鍵で符号化することによって符号化列が生成される。なお、符号化には、ＥＯＲ演算が用いられても良いし、後述する図２３に示す手法が用いられても良い。更新対象コード１１１のバイナリ列は、この符号化列に従ってバイト置換（後述する図２６参照）される。その後、バイト置換後の更新対象コード１１１のバイナリ列と、差分更新コード塊１０２のバイナリ列と、のＥＯＲ演算を実行することにより、エンコード後の差分更新コード塊１０２のバイナリ列が生成される。エンコード後の差分更新コード塊１０２のバイナリ列は、先頭に６４ビットで表現される更新対象コード１１１の読み出し先頭アドレス及びサイズの情報が付加されたうえで、配送センタ３を経由して、更新対象である端末装置１に配送される。
【００９５】
更新対象の端末装置１では、受け取ったデータから更新対象コード１１１の読み出し先頭アドレス及びサイズ、及び、エンコード後の差分更新コード塊１０２のバイナリ列が識別される。図１７は、端末装置１でのデコード方式を示すフローチャートである。図１７に示すように、端末装置１では、共有乱数を設定共通鍵で符号化することによって符号化列が生成される。なお、符号化には、ＥＯＲ演算が用いられても良いし、後述する図２３に示す手法が用いられても良い。更新対象コード１１１のバイナリ列は、この符号化列に従ってバイト置換される（後述する図２６参照）。その後、バイト置換後の更新対象コード１１１のバイナリ列と、エンコード後の差分更新コード塊１０２のバイナリ列と、のＥＯＲ演算を実行することにより、差分更新コード塊１０２のバイナリ列が生成される。
【００９６】
本実施の形態にかかるネットワークシステムＳＹＳ３では、第２のエンコード・デコード手法が実施の形態１及び実施の形態２の少なくとも何れかにかかる手法と併用して用いられることにより、差分更新コード塊１０２の取り違えや改ざんなどの検知が可能となる。第２のエンコード・デコード手法が実施の形態１にかかる手法と併用して用いられる場合、開発環境２において、エンコード対象のコードの先頭部にアドレス及びサイズの情報が例えば６４ビット区切りで配置された後、エンコードが実施され、端末装置１においてデコードが実施される。第２のエンコード・デコード手法が実施の形態２にかかる手法と併用して用いられる場合、開発環境２において、コメントが挿入されたコードに対してエンコードが実施され、端末装置１においてデコードが実施される。また、エンコード結果を差分更新コードと見立てて第２のエンコード・デコード手法が実施の形態３にかかる手法と併用して用いられることも可能である。この場合、開発環境２において署名発行処理が実施され、端末装置１において署名検証処理が実施される。
【００９７】
続いて、符号化及びバイト置換の詳細について説明する前に、まず、それらの処理を構成する処理群について説明する。
【００９８】
≪Ｐｅｒｍｕｔｅ関数ｐ（ｘ，ｙ）の処理内容≫
図１８は、Ｐｅｒｍｕｔｅ関数ｐ（ｘ，ｙ）の処理内容を示すフローチャートである。なお、図１８の例では、ｌｅｎｇｔｈ（ａ）が、ビット列ａのビット長を取得する処理を表し、ｘ＜ｉ＞が、ビット列ｘの右からｉビット目を取得する処理を表し、ｙ＜ｉ＞が、ビット列ｙの右からｉビット目を取得する処理を表している。
【００９９】
まず、ステップＳ４０１では、変数ｘ，ｙの読み込みが行われる。その後、ステップＳ４０２に処理が移行する。
【０１００】
ステップＳ４０２では、ｉ：＝０、ｎ：＝ｌｅｎｇｔｈ（ｙ）のように初期化が行われる。その後、ステップＳ４０３に処理が移行する。
【０１０１】
ステップＳ４０３では、ｉ＜ｎが成り立つか否かが判定される。例えば、ｉ＜ｎが成り立つ場合（ステップＳ４０３のＹＥＳ）、ステップＳ４０４に処理が移行し、ｉ＜ｎが成り立たない場合（ステップＳ４０３のＮＯ）、ステップＳ４０７に処理が移行する。
【０１０２】
ステップＳ４０４では、ｘ＜ｉ＞＝１が成り立つか否かが判定される。例えば、ｘ＜ｉ＞＝１が成り立つ場合（ステップＳ４０４のＹＥＳ）、ステップＳ４０５に処理が移行し、ｘ＜ｉ＞＝１が成り立たない場合（ステップＳ４０４のＮＯ）、ステップＳ４０６に処理が移行する。
【０１０３】
ステップＳ４０５では、ｙの“ｙ＜ｉ  ｍｏｄ  ｎ＞”と“ｙ＜（ｉ＋１）  ｍｏｄ  ｎ＞”とが置換される。即ち、ステップＳ４０５では、下記の代入が実施される。なお、ｍｏｄは、剰余演算を表している。
【０１０４】
ｔｍｐ＝ｙ＜ｉ＞；
ｙ＜ｉ＞＝ｙ＜（ｉ＋１）  ｍｏｄ  ｎ＞；
ｙ＜（ｉ＋１）  ｍｏｄ  ｎ＞＝ｔｍｐ；
【０１０５】
ステップＳ４０６では、ｉ：＝ｉ＋１が実行される。つまり、ｉの値が１つインクリメントされる。その後、ステップＳ４０３に処理が移行する。
【０１０６】
ステップＳ４０７では、結果として得られたｙの値が出力され、処理が終了する。
【０１０７】
≪逆Ｐｅｒｍｕｔｅ関数ｉｎｖ＿ｐ（ｘ，ｙ）の処理内容≫
図１９は、Ｐｅｒｍｕｔｅ関数ｐ（ｘ，ｙ）の逆関数である逆Ｐｅｒｍｕｔｅ関数ｉｎｖ＿ｐ（ｘ，ｙ）の処理内容を示すフローチャートである。なお、図１９の例では、ｙ＝ｉｎｖ＿ｐ（ｘ，ｐ（ｘ，ｙ））と、ｙ＝ｐ（ｘ，ｉｎｖ＿ｐ（ｘ，ｙ））と、が成り立つ。
【０１０８】
まず、ステップＳ４１１では、変数ｘ，ｙの読み込みが行われる。その後、ステップＳ４１２に処理が移行する。
【０１０９】
ステップＳ４１２では、ｎ：＝ｌｅｎｇｔｈ（ｙ）、ｉ：＝ｎのように初期化が行われる。その後、ステップＳ４１３に処理が移行する。
【０１１０】
ステップＳ４１３では、ｉ＝０が成り立つか否かが判定される。例えば、ｉ＝０が成り立たない場合（ステップＳ４１３のＮＯ）、ステップＳ４１４に処理が移行し、ｉ＝０が成り立つ場合（ステップＳ４１３のＹＥＳ）、ステップＳ４１７に処理が移行する。
【０１１１】
ステップＳ４１４では、ｘ＜ｉ＞＝１が成り立つか否かが判定される。例えば、ｘ＜ｉ＞＝１が成り立つ場合（ステップＳ４１４のＹＥＳ）、ステップＳ４１５に処理が移行し、ｘ＜ｉ＞＝１が成り立たない場合（ステップＳ４１４のＮＯ）、ステップＳ４１６に処理が移行する。
【０１１２】
ステップＳ４１５では、ｙの“ｙ＜（ｉ＋１）  ｍｏｄ  ｎ＞”と“ｙ＜ｉ  ｍｏｄ  ｎ＞”とが置換される。即ち、ステップＳ４１５では、下記の代入が実施される。なお、ｍｏｄは、剰余演算を表している。
【０１１３】
ｔｍｐ＝ｙ＜（ｉ＋１）  ｍｏｄ  ｎ＞；
ｙ＜（ｉ＋１）  ｍｏｄ  ｎ＞＝ｙ＜ｉ＞；
ｙ＜ｉ＞＝ｔｍｐ；
【０１１４】
ステップＳ４１６では、ｉ：＝ｉ−１が実行される。つまり、ｉの値が１つデクリメントされる。その後、ステップＳ４１３に処理が移行する。
【０１１５】
ステップＳ４１７では、結果として得られたｙの値が出力され、処理が終了する。
【０１１６】
≪ビット列の組み換え関数ｓｈｕｆｆｌｅ（ｎ，Ｋ）の処理内容≫
図２０は、ビット列の組み換え関数ｓｈｕｆｆｌｅ（ｎ，Ｋ）の処理内容を示すフローチャートである。なお、演算記号“｜｜”は、ビット連接を表している。例えば、０ｘ０１｜｜０ｘ０２＝０ｘ０１０２となる。また、演算記号Ｓｉ（）は、左ローテートシフト演算を表している。例えば、Ｓ３（０ｘ０００１）＝０ｘ０００８となり、Ｓ−４（０ｘ０００１）＝０ｘ２０００となる。また、図２０の例では、ｌｅｎｇｔｈ（Ｋ）が４の倍数である必要がある。
【０１１７】
まず、ステップＳ４２１では、変数ｎ，Ｋが読み込まれ、ｉ：＝１、＿Ｋ：＝Ｋ、ｋｙｘ：＝Φ（空集合）のように初期化が行われる。その後、ステップＳ４２２に処理が移行する。
【０１１８】
ステップＳ４２２では、ｉ≦ｎが成り立つか否かが判定される。例えば、ｉ≦ｎが成り立つ場合（ステップＳ４２２のＹＥＳ）、ステップＳ４２３に処理が移行し、ｉ≦ｎが成り立たない場合（ステップＳ４２２のＮＯ）、ステップＳ４２８に処理が移行する。
【０１１９】
ステップＳ４２３では、＿Ｋのビット列が４分割される。具体的には、Ｋｂｂ｜｜Ｋｂａ｜｜Ｋａｂ｜｜Ｋａａ：＝＿Ｋが成り立つように４分割される。その後、ステップＳ４２４に処理が移行する。
【０１２０】
ステップＳ４２４では、ｉが奇数か否かが判定される。例えば、ｉが奇数である場合（ステップＳ４２４のＹＥＳ）、ステップＳ４２５に処理が移行し、ｉが奇数でない場合（ステップＳ４２４のＮＯ）、ステップＳ４２６に処理が移行する。
【０１２１】
ステップＳ４２５では、ビット列の組み換え処理が実施される。即ち、下記の演算処理が実施される。その後、ステップＳ４２７に処理が移行する。
【０１２２】
ｋｘ［ｉ］：＝ｐ（（Ｋｂａ  ＥＮＯＲ  Ｋａｂ），Ｋｂｂ）｜｜
ｉｎｖ＿ｐ（（Ｋｂｂ  ＥＯＲ  Ｋａａ），Ｋｂａ）
ｋｙ［ｉ］：＝ｉｎｖ＿ｐ（（Ｋｂａ  ＥＮＯＲ  Ｋａａ），Ｋａｂ）｜｜
ｐ（（Ｋｂｂ  ＥＯＲ  Ｋａｂ），Ｋａａ）
【０１２３】
ステップＳ４２６では、ビット列の別の組み換え処理が実施される。即ち、下記の演算処理が実施される。その後、ステップＳ４２７に処理が移行する。
【０１２４】
ｔｍｐ：＝Ｓｉ（Ｋｘ［ｉ］）  ＥＯＲ  Ｓｉ＋ｌｅｎｇｔｈ（ｋａ）／２（０ｘ０．．．０１）；
ｋｘ［ｉ］：＝Ｓ−ｉ（Ｋｙ［ｉ］）  ＥＯＲ  Ｓｉ（０ｘ０．．．０１）；
ｋｙ［ｉ］：＝ｔｍｐ；
【０１２５】
ステップＳ４２７では、下記の代入が実施される。なお、∪は集合演算の和集合を算出する演算処理を表している。その後、ステップＳ４２２に処理が移行する。
【０１２６】
ｋｙｘ：＝ｋｙｘ∪（ｋｙ［ｉ］，ｋｘ［ｉ］）；
＿Ｋ：＝ｋｙ［ｉ］｜｜ｋｘ［ｉ］；ｉ：＝ｉ＋１；
【０１２７】
ステップＳ４２８では、処理結果ｋｙｘが出力され、処理が終了する。
【０１２８】
≪エンコード関数ｅｎｃ（ｎ，ｋｘ［］，ｋｙ［］，ｍ）の処理内容≫
図２１は、エンコード関数ｅｎｃ（ｎ，ｋｘ［］，ｋｙ［］，ｍ）の処理内容を示すフローチャートである。ここで、エンコード関数ｅｎｃの引数ｋｘ［］、ｋｙ［］は、ビット組み換え関数ｓｈｕｆｆｌｅ（ｎ，Ｋ）の出力ｋｙｘ＝｛（ｋｙ［ｉ］，ｋｘ［ｉ］）｜１≦ｉ≦ｎ｝から取り出し構成された２つの配列に対応するものとする。また、ｌｅｎｇｔｈ（ｍ）は２の倍数である必要があり、かつ、ｌｅｎｇｔｈ（ｍ）＝ｌｅｎｇｔｈ（ｋｙ［ｉ］｜｜ｋｘ［ｉ］）  （１≦ｉ≦ｎ）が成り立つ必要がある。
【０１２９】
まず、ステップＳ４３１では、変数ｎ，ｋｘ［］，ｋｙ［］，ｍが読み込まれる。また、ｍを２分割することによってＬｘ［１］｜｜ＲＸ［１］：＝ｍとされる。また、ｉ：＝１のように初期化が行われる。その後、ステップＳ４３２に処理が移行する。
【０１３０】
ステップＳ４３２では、ｉ≦ｎが成り立つか否かが判定される。例えば、ｉ≦ｎが成り立つ場合（ステップＳ４３２のＹＥＳ）、ステップＳ４３３に処理が移行し、ｉ≦ｎが成り立たない場合（ステップＳ４３２のＮＯ）、ステップＳ４３８に処理が移行する。
【０１３１】
ステップＳ４３３では、下記の演算が実施される。その後、ステップＳ４３４に処理が移行する。
【０１３２】
ｔ（ｉ）：＝（Ｓ１（ｋｘ［ｉ］））＆Ｓ８（ｋｘ［ｉ］））  ＥＯＲ  Ｓ２（ｋｘ［ｉ］））；
Ｒｘ（ｉ＋１）：＝Ｌｘ（ｉ）  ＥＯＲ  ｔ（ｉ）；
【０１３３】
ステップＳ４３４では、ｉが奇数か否かが判定される。例えば、ｉが奇数である場合（ステップＳ４３４のＹＥＳ）、ステップＳ４３５に処理が移行し、ｉが奇数でない場合（ステップＳ４３４のＮＯ）、ステップＳ４３６に処理が移行する。
【０１３４】
ステップＳ４３５では、ビット列の組み換え処理が実施される。即ち、下記の演算処理を実施される。その後、ステップＳ４３７に処理が移行する。
【０１３５】
Ｌｘ（ｉ＋１）：＝Ｒｘ（ｉ）  ＥＯＲ  ｐ（ｋｙ［ｉ］，Ｒｘ（ｉ＋１））
【０１３６】
ステップＳ４３６では、ビット列の別の組み換え処理が実施される。即ち、下記の演算処理が実施される。その後、ステップＳ４３７に処理が移行する。
【０１３７】
Ｌｘ（ｉ＋１）：＝Ｒｘ（ｉ）  ＥＯＲ  ｉｎｖ＿ｐ（ｋｙ［ｉ］，Ｒｘ（ｉ＋１））
【０１３８】
ステップＳ４３７では、ｉ：＝ｉ＋１が実行される。つまり、ｉの値が１つインクリメントされる。その後、ステップＳ４３２に処理が移行する。
【０１３９】
ステップＳ４３８では、処理結果ｃ：＝Ｌｘ［ｎ］｜｜ＲＸ［ｎ］が出力され、処理が終了する。
【０１４０】
≪デコード関数ｄｅｃ（ｎ，ｋｘ［］，ｋｙ［］，ｃ）の処理内容≫
図２２は、デコード関数ｄｅｃ（ｎ，ｋｘ［］，ｋｙ［］，ｃ）の処理内容を示すフローチャートである。ここで、デコード関数ｄｅｃの引数ｋｘ［］、ｋｙ［］は、ビット組み換え関数ｓｈｕｆｆｌｅ（ｎ，Ｋ）の出力ｋｙｘ＝｛（ｋｙ［ｊ］，ｋｘ［ｊ］）｜１≦ｊ≦ｎ｝から取り出し構成された２つの配列に対応するものとする。また、ｌｅｎｇｔｈ（ｍ）は２の倍数である必要があり、かつ、ｌｅｎｇｔｈ（ｍ）＝ｌｅｎｇｔｈ（ｋｙ［ｊ］｜｜ｋｘ［ｊ］）  （１≦ｊ≦ｎ）が成り立つ必要がある。
【０１４１】
まず、ステップＳ４４１では、変数ｎ，ｋｘ［］，ｋｙ［］，ｃが読み込まれる。また、ｃを２分割することによってＬｘ［ｎ］｜｜ＲＸ［ｎ］：＝ｃとされる。また、ｊ：＝ｎのように初期化が行われる。その後、ステップＳ４４２に処理が移行する。
【０１４２】
ステップＳ４４２では、ｊ＝０が成り立つか否かが判定される。例えば、ｊ＝０が成り立たない場合（ステップＳ４４２のＮＯ）、ステップＳ４４３に処理が移行し、ｊ＝０が成り立つ場合（ステップＳ４４２のＹＥＳ）、ステップＳ４４８に処理が移行する。
【０１４３】
ステップＳ４４３では、下記の演算が実施される。その後、ステップＳ４４４に処理が移行する。
【０１４４】
ｔ（ｊ）：＝（Ｓ１（ｋｘ［ｊ］））＆Ｓ８（ｋｘ［ｊ］））  ＥＯＲ  Ｓ２（ｋｘ［ｊ］））；
Ｒｘ（ｊ＋１）：＝Ｌｘ（ｊ）  ＥＯＲ  ｔ（ｊ）；
【０１４５】
ステップＳ４４４では、ｊが奇数か否かが判定される。例えば、ｊが奇数である場合（ステップＳ４４４のＹＥＳ）、ステップＳ４４５に処理が移行し、ｊが奇数でない場合（ステップＳ４４４のＮＯ）、ステップＳ４４６に処理が移行する。
【０１４６】
ステップＳ４４５では、ビット列の組み換え処理が実行される。即ち、下記の演算処理が実行される。その後、ステップＳ４４７に処理が移行する。
【０１４７】
Ｒｘ（ｊ）：＝Ｌｘ（ｊ＋１）  ＥＯＲ  ｐ（ｋｙ［ｊ］，Ｒｘ（ｊ＋１））
【０１４８】
ステップＳ４４６では、ビット列の別の組み換え処理が実施される。即ち、下記の演算処理が実施される。その後、ステップＳ４４７に処理が移行する。
【０１４９】
Ｒｘ（ｊ）：＝Ｌｘ（ｊ＋１）  ＥＯＲ  ｉｎｖ＿ｐ（ｋｙ［ｊ］，Ｒｘ（ｊ＋１））
【０１５０】
ステップＳ４４７では、ｊ：＝ｊ−１が実行される。つまり、ｊの値が１つデクリメントされる。その後、ステップＳ４４２に処理が移行する。
【０１５１】
ステップＳ４４８では、処理結果ｍ：＝Ｌｘ［１］｜｜ＲＸ［１］が出力され、処理が終了する。
【０１５２】
≪符号化処理の処理内容≫
図２３は、符号化処理の処理内容を示すフローチャートである。なお、ｌｅｎｇｔｈ（Ｋ）は４の倍数である必要があり、かつ、ｌｅｎｇｔｈ（ｍ）＝＝ｌｅｎｇｔｈ（Ｋ）が成り立つ必要がある。
【０１５３】
まず、設定共通鍵及び共有乱数が読み込まれ、Ｋ：＝設定共通鍵、ｍ：＝共有乱数、のように初期化が行われる。その後、関数ｓｈｕｆｆｌｅ（１，Ｋ）を実行することにより、出力ｋｙｘ＝（ｋｙ［１］，ｋｘ［１］）が取得される。その後、関数ｅｎｃ（１，ｋｘ［１］，ｋｙ［１］，ｍ）を実行することにより、出力ｃが取得される。その後、処理結果ｃが出力され、処理が終了する。
【０１５４】
図２４は、パラメータｎを伴う符号化関数ｇｅｎｃ（ｎ，Ｋ，ｍ）の処理内容を示すフローチャートである。なお、ｌｅｎｇｔｈ（Ｋ）は４の倍数である必要があり、かつ、ｌｅｎｇｔｈ（ｍ）＝＝ｌｅｎｇｔｈ（Ｋ）が成り立つ必要がある。
【０１５５】
まず、変数Ｋ，ｍ，及びパラメータｎが読み込まれる。その後、関数ｓｈｕｆｆｌｅ（ｎ，Ｋ）を実行することにより、出力ｋｙｘ＝｛（ｋｙ［ｉ］，ｋｘ［ｉ］）｜１≦ｉ≦ｎ｝が取得される。その後、関数ｅｎｃ（ｎ，ｋｘ［］，ｋｙ［］，ｍ）を実行することにより、出力ｃが取得される。その後、処理結果ｃが出力され、処理が終了する。
【０１５６】
図２５は、パラメータｎを伴う復号化関数ｇｄｅｃ（ｎ，Ｋ，ｃ）の処理内容を示すフローチャートである。なお、ｌｅｎｇｔｈ（Ｋ）は４の倍数である必要があり、かつ、ｌｅｎｇｔｈ（ｍ）＝＝ｌｅｎｇｔｈ（Ｋ）が成り立つ必要がある。
【０１５７】
まず、変数Ｋ，ｃ，及びパラメータｎが読み込まれる。その後、関数ｓｈｕｆｆｌｅ（ｎ，Ｋ）を実行することにより、出力ｋｙｘ＝｛（ｋｙ［ｉ］，ｋｘ［ｉ］）｜１≦ｉ≦ｎ｝が取得される。その後、関数ｄｅｃ（ｎ，ｋｘ［］，ｋｙ［］，ｃ）を実行することにより、出力ｍが取得される。その後、処理結果ｍが出力され、処理が終了する。
以上が、符号化処理の処理内容である。
【０１５８】
≪バイト置換処理の処理内容≫
図２６は、バイト置換処理の処理内容を示すフローチャートである。
【０１５９】
まず、ステップＳ４５１では、符号化の結果ｃと、更新対象コード１１１のバイナリ列と、が読み込まれる。その後、ステップＳ４５２に処理が移行する。
【０１６０】
ステップＳ４５２では、ｓ：＝Φ（空集合）、ｉ：＝０、ｌ：＝ｌｅｎｇｔｈ（ｃ）となるように初期化が行われる。その後、ステップＳ４５３に処理が移行する。
【０１６１】
ステップＳ４５３では、更新対象コード１１１の全てに対して処理が完了したか否かが判定される。例えば、更新対象コード１１１の全てに対して処理が完了していない場合（ステップＳ４５３のＮＯ）、ステップＳ４５４に処理が移行し、更新対象コード１１１の全てに対して処理が完了している場合（ステップＳ４５３のＹＥＳ）、ステップＳ４６２に処理が移行する。
【０１６２】
ステップＳ４５４では、符号化の結果ｃからｔ：＝ｃ［ｉ＋１  ｍｏｄ  ｌ，ｉ  ｍｏｄ  ｌ］が取得される。その後、ステップＳ４５５に処理が移行する。
【０１６３】
ステップＳ４５５では、ｓ［ｉ］：＝更新対象コードのバイナリ列の先頭からｉ番目の３２ビットとする。その後、ステップＳ４５６に処理が移行する。
【０１６４】
ステップＳ４５６では、ｔ＝００又はｔ＝１１であるか否かが判定される。ｔ＝００又はｔ＝１１である場合（ステップＳ４５６のＹＥＳ）、ステップＳ４５７に処理が移行し、ｔ＝００又はｔ＝１１でない場合（ステップＳ４５６のＮＯ）、ステップＳ４５８に処理が移行する。
【０１６５】
ステップＳ４５７では、ｓ［ｉ］：＝ｓ［７：０］｜｜ｓ［１５：８］｜｜ｓ［２３：１６］｜｜ｓ［３１：２４］の演算処理が実行される。その後、ステップＳ４６１に処理が移行する。
【０１６６】
ステップＳ４５８では、ｔ＝０１であるか否かが判定される。ｔ＝０１である場合（ステップＳ４５８のＹＥＳ）、ステップＳ４５９に処理が移行し、ｔ＝０１でない場合（ステップＳ４５８のＮＯ）、ステップＳ４６０に処理が移行する。
【０１６７】
ステップＳ４５９では、ｓ［ｉ］：＝ｓ［２３：１６］｜｜ｓ［３１：２４］｜｜ｓ［７：０］｜｜ｓ［１５：８］の演算処理が実行される。その後、ステップＳ４６１に処理が移行する。
【０１６８】
ステップＳ４６０では、ｓ［ｉ］：＝ｓ［１５：０］｜｜ｓ［３１：１６］の演算処理が実行される。その後、ステップＳ４６１に処理が移行する。
【０１６９】
ステップＳ４６１では、ｓ：＝ｓ  ∪  ｓ［ｉ］及びｉ：＝ｉ＋１が実行される。その後、ステップＳ４５３に処理が移行する。
【０１７０】
ステップＳ４６２では、結果ｓが出力され、処理が終了する。
以上が、バイト置換処理の処理内容である。
【０１７１】
≪第３のエンコード・デコード手法≫
第１及び第２のエンコード・デコード手法は、更新対象コード１１１のバイナリ列の長さが、更新コード１０１のバイナリ列の長さ以上である場合に利用可能な手法であった。それに対し、第３のエンコード・デコード手法は、その制限を不要とする手法である。以下、具体的に説明する。
【０１７２】
図２７は、開発環境２でのエンコード方式を示すフローチャートである。図２７に示すように、開発環境２では、共有乱数に対して生成乱数を用いて第１の符号化（後述する図２９参照）を行うことにより、符号化列が生成される。その後、生成された符号化列と、更新対象コード１１１のバイナリ列と、によって２Ｍビット列が生成される（後述する図３１参照）。その後、２Ｍビット列、第１の符号化の生成乱数、設定共通鍵、及び、更新コード１０１（又は差分更新コード塊１０２；以下、差分更新コード塊１０２を含む）のバイナリ列に対してエンコード演算（後述する図３２参照）を実行することにより、エンコード後の更新コード１０１のバイナリ列が生成される。エンコード後の更新コード１０１のバイナリ列は、先頭に６４ビットで表現される更新対象コード１１１の読み出し先頭アドレス及びサイズの情報が付加されたうえで、配送センタ３を経由して、更新対象である端末装置１に配送される。なお、更新コード１０１は、ハフマン符号等の可逆圧縮アルゴリズムを用いて圧縮されてもよい。その場合、エンコード後の更新コード１０１のバイナリ列は、解凍に必要な情報も付加されたうえで、配送センタ３を経由して、更新対象である端末装置１に配送される。
【０１７３】
更新対象の端末装置１では、受け取ったデータから更新対象コード１１１の読み出し先頭アドレス及びサイズ、及び、エンコード後の更新コード１０１のバイナリ列が識別される。図２８は、端末装置１でのデコード方式を示すフローチャートである。図２８に示すように、端末装置１では、配送センタ３からのエンコードされた乱数が復号される。そして、この復号化された乱数を用いて共有乱数に対して第２の符号化（後述する図３０参照）を行うことにより、符号化列が生成される。その後、この符号化列と、更新対象コード１１１のバイナリ列と、によって２Ｍビット列が生成される（後述する図３１参照）。その後、２Ｍビット列、第１の符号化の生成乱数、設定共通鍵、エンコード後の更新コード１０１のバイナリ列に対してデコード演算（後述する図３３参照）を実行することにより、更新コード１０１のバイナリ列が生成される。なお、更新コード１０１が圧縮されている場合には、デコード後に解消処理が実行される。
【０１７４】
本実施の形態にかかるネットワークシステムＳＹＳ３では、第１のエンコード・デコード手法が実施の形態１及び実施の形態２の少なくとも何れかにかかる手法と併用して用いられることにより、更新コード１０１の取り違えや改ざんなどの検知が可能となる。第１のエンコード・デコード手法が実施の形態１にかかる手法と併用して用いられる場合、開発環境２において、エンコード対象のコードの先頭部にアドレス及びサイズの情報が例えば６４ビット区切りで配置された後、エンコードが実施され、端末装置１においてデコードが実施される。第１のエンコード・デコード手法が実施の形態２にかかる手法と併用して用いられる場合、開発環境２において、コメントが挿入されたコードに対してエンコードが実施され、端末装置１においてデコードが実施される。また、エンコード結果を更新コードと見立てて、２Ｍビット列を鍵として、第１のエンコード・デコード手法が実施の形態３にかかる手法と併用して用いられることも可能である。この場合、開発環境２において署名発行処理が実施され、端末装置１において署名検証処理が実施される。
【０１７５】
≪第１の符号化処理の処理内容≫
図２９は、第１の符号化処理の処理内容を示すフローチャートである。なお、ｌｅｎｇｔｈ（Ｋ１），ｌｅｎｇｔｈ（Ｋ２）は何れも４の倍数である必要があり、かつ、ｌｅｎｇｔｈ（ｍ）＝＝ｌｅｎｇｔｈ（Ｋ１）、ｌｅｎｇｔｈ（ｒ）＝＝ｌｅｎｇｔｈ（Ｋ２）が成り立つ必要がある。
【０１７６】
まず、パラメータｎ１，ｎ２、設定共通鍵、及び、共有乱数が読み込まれ、２Ｍビット乱数ｒが生成され、Ｋ１：＝ｒの上位Ｍビット、ｍ：＝共有乱数、Ｋ２：＝設定共通鍵のように初期化が行われる。その後、ｃ：＝ｇｅｎｃ（ｎ１，ｒ［２Ｍ−１：Ｍ］，ｍ）；ｅｎｃ＿ｒ：＝ｇｅｎｃ（ｎ２，Ｋ２，ｒ）が実行される。その後、生成乱数ｒ、及び、処理結果であるｅｎｃ＿ｒ、ｃが出力され、処理が終了する。
【０１７７】
なお、演算数削減のため、ｃ：＝ｇｅｎｃ（ｎ１，ｒ［２Ｍ−１：Ｍ］，ｍ）を実行する代わりに、ｃ：＝ｒ［２Ｍ−１：Ｍ］  ＥＯＲ  ｍ、又は、ｃ：＝ｒ［Ｍ−１：０］  ＥＯＲ  ｍが実行されても良いし、ｅｎｃ＿ｒ：＝ｇｅｎｃ（ｎ２，Ｋ２，ｒ）を実行する代わりにｅｎｃ＿ｒ：＝Ｋ２  ＥＯＲ  ｒが実行されても良い。
【０１７８】
≪第２の符号化処理の処理内容≫
図３０は、第２の符号化処理の処理内容を示すフローチャートである。なお、ｌｅｎｇｔｈ（Ｋ２）は４の倍数である必要があり、かつ、ｌｅｎｇｔｈ（ｍ）＝＝ｌｅｎｇｔｈ（ｒ）、ｌｅｎｇｔｈ（ｅｎｃ＿ｒ）＝＝ｌｅｎｇｔｈ（Ｋ２）が成り立つ必要がある。
【０１７９】
まず、パラメータｎ１，ｎ２、設定共通鍵、共有乱数、及び、第１の符号化の出力ｅｎｃ＿ｒが読み込まれ、ｍ：＝共有乱数，Ｋ２：＝設定共通鍵のように初期化が行われる。その後、ｒ：＝ｇｄｅｃ（ｎ２，Ｋ２，ｅｎｃ＿ｒ）；ｃ：＝ｇｅｎｃ（ｎ１，ｒ［２Ｍ−１：Ｍ］，ｍ）が実行される。その後、処理結果ｒ、ｃが出力され、処理が終了する。
【０１８０】
なお、演算数削減のため、ｒ：＝ｇｄｅｃ（ｎ２，Ｋ２，ｅｎｃ＿ｒ）を実行する代わりに、ｒ：＝Ｋ２  ＥＯＲ  ｅｎｃ＿ｒが実行されても良いし、ｃ：＝ｇｅｎｃ（ｎ１，ｒ［２Ｍ−１：Ｍ］，ｍ）を実行する代わりに、ｃ：＝ｒ［２Ｍ−１：Ｍ］  ＥＯＲ  ｍ、又は、ｃ：＝ｒ［Ｍ−１：０］  ＥＯＲ  ｍが実行されても良い。
【０１８１】
≪２Ｍビット列の生成処理内容≫
図３１は、２Ｍビット列の生成処理内容を示すフローチャートである。
図３１に示すように、まず、第１及び第２の符号化の何れかの出力ｃと、更新対象コード１１１のバイナリ列ＯｒｇＣｏｄｅと、が読み込まれる。その後、ｃ｜｜ＯｒｇＣｏｄｅを圧縮符号化することによって、処理結果ｈが生成される。なお、圧縮符号化には、例えばハフマン符号又はブロックハフマン符号等の可逆圧縮アルゴリズムが用いられる。その後、ｌ：＝ｌｅｎｇｔｈ（ｈ）が実行され、２Ｍビットｋ１：＝ｈ［ｌ−１，ｌ−２Ｍ］が出力され、処理が終了する。
【０１８２】
≪エンコード演算の処理内容≫
図３２は、エンコード演算の処理内容を示すフローチャートである。なお、更新コード１０１のバイナリ列ＮｅｗＣｏｄｅには、必要に応じてパディングが付加されているものとする。また、ｌｅｎｇｔｈ（Ｋ）＝＝２Ｍ，ｌｅｎｇｔｈ（ｍ）＝＝Ｍが成り立つ必要がある。
【０１８３】
まず、ステップＳ５０１では、パラメータｎ３，ｎ４、事前共通鍵Ｋ、第１の符号化の出力ｒ、２Ｍビット生成結果ｋ１、共有乱数ｍ、及び、更新コード１０１のバイナリ列ＮｅｗＣｏｄｅが読み込まれる。その後、ステップＳ５０２に処理が移行する。
【０１８４】
ステップＳ５０２では、更新コード１０１のバイナリ列ＮｅｗＣｏｄｅが２ＭビットＮＣ［ｉ］毎に区切られることにより、区切り数ｇが取得される。また、ｉ：＝０；ｊ：＝０、ＥＮＣ：＝Φ（空集合）のように初期化が行われる。その後、ステップＳ５０３に処理が移行する。
【０１８５】
ステップＳ５０３では、ｉ＜ｑが成り立つか否かが判定される。例えば、ｉ＜ｑが成り立つ場合（ステップＳ５０３のＹＥＳ）、ステップＳ５０４に処理が移行し、ｉ＜ｑが成り立たない場合（ステップＳ５０３のＮＯ）、ステップＳ５１０に処理が移行する。
【０１８６】
ステップＳ５０４では、ｋ１：＝ｋ１  ＥＯＲ  ｒ；ｒ＝Ｓ１（ｒ）；の演算処理が実行される。その後、ステップＳ５０５に処理が移行する。
【０１８７】
ステップＳ５０５では、ｊ＝Ｍが成り立つか否かが判定される。例えば、Ｊ＝Ｍが成り立つ場合（ステップＳ５０５のＹＥＳ）、ステップＳ５０６に処理が移行し、Ｊ＝Ｍが成り立たない場合（ステップＳ５０５のＮＯ）、ステップＳ５０７に処理が移行する。
【０１８８】
ステップＳ５０６では、ｒ：＝ｇｅｎｃ（ｎ３，ｒ［Ｍ−１：０］，ｍ）｜｜ｇｅｎｃ（ｎ３，ｋ３［２Ｍ−１：Ｍ］，ｍ）；の演算処理を実行することにより、乱数ｒが更新される。また、ｊ：＝０でｊの初期化が行われる。その後、ステップＳ５０７に処理が移行する。
【０１８９】
ステップＳ５０７では、ｋ３：＝ｇｅｎｃ（ｎ４，Ｋ，ｋ１）；ＥＮＣ［ｉ］：＝ＮＣ［ｉ］  ＥＯＲ  ｋ３；の演算処理を実行することにより、ＮＣ［ｉ］がエンコードされる。その後、ステップＳ５０８に処理が移行する。
【０１９０】
ステップＳ５０８では、エンコード結果の結合処理が実行される。具体的には、ＥＮＣ：＝ＥＮＣ  ∪  ＥＮＣ［ｉ］；の処理が実行される。その後、ステップＳ５０９に処理が移行する。
【０１９１】
ステップＳ５０９では、ｉ：＝ｉ＋１；ｊ：＝ｊ＋１；が実行される。つまり、変数ｉ，ｊの値がそれぞれ１つインクリメントされる。その後、ステップＳ５０３に処理が移行する。
【０１９２】
ステップＳ５１０では、処理結果ＥＮＣが出力され、処理が終了する。
以上が、エンコード演算の処理内容である。
【０１９３】
≪デコード演算の処理内容≫
図３３は、デコード演算の処理内容を示すフローチャートである。なお、更新コード１０１のバイナリ列ＮｅｗＣｏｄｅには、必要に応じてパディングが付加されているものとする。また、ｌｅｎｇｔｈ（Ｋ）＝＝２Ｍ，ｌｅｎｇｔｈ（ｍ）＝＝Ｍが成り立つ必要がある。
【０１９４】
まず、ステップＳ５２１では、パラメータｎ３，ｎ４、事前共通鍵Ｋ、第２の符号化の出力ｒ、２Ｍビット生成結果ｋ１、共有乱数ｍ、及び、更新コード１０１のバイナリ列のエンコード結果ＥＮＣが読み込まれる。その後、ステップＳ５２２に処理が移行する。
【０１９５】
ステップＳ５２２では、更新コード１０１のバイナリ列のエンコード結果ＥＮＣが２ＭビットＥＮＣ［ｉ］毎に区切られることにより、区切り数ｑが取得される。また、ｉ：＝０；ｊ：＝０；ＮＣ：＝Φ（空集合）；のように初期化が行われる。その後、ステップＳ５２３に処理が移行する。
【０１９６】
ステップＳ５２３では、ｉ＜ｑが成り立つか否かが判定される。例えば、ｉ＜ｑが成り立つ場合（ステップＳ５２３のＹＥＳ）、ステップＳ５２４に処理が移行し、ｉ＜ｑが成り立たない場合（ステップＳ５２３のＮＯ）、ステップＳ５３０に処理が移行する。
【０１９７】
ステップＳ５２４では、ｋ１：＝ｋ１  ＥＯＲ  ｒ；ｒ＝Ｓ１（ｒ）；の演算処理が実行される。その後、ステップＳ５２５に処理が移行する。
【０１９８】
ステップＳ５２５では、ｊ＝Ｍが成り立つか否かが判定される。例えば、Ｊ＝Ｍが成り立つ場合（ステップＳ５２５のＹＥＳ）、ステップＳ５２６に処理が移行し、Ｊ＝Ｍが成り立たない場合（ステップＳ５２５のＮＯ）、ステップＳ５２７に処理が移行する。
【０１９９】
ステップＳ５２６では、ｒ：＝ｇｅｎｃ（ｎ３，ｒ［Ｍ−１：０］，ｍ）｜｜ｇｅｎｃ（ｎ３，ｋ３［２Ｍ−１：Ｍ］，ｍ）；の演算処理を実行することにより、乱数ｒが更新される。また、ｊ：＝０でｊの初期化が行われる。その後、ステップＳ５２７に処理が移行する。
【０２００】
ステップＳ５２７では、ｋ３：＝ｇｅｎｃ（ｎ４，Ｋ，ｋ１）；ＮＣ［ｉ］：＝ＥＮＣ［ｉ］  ＥＯＲ  ｋ３；の演算処理を実行することにより、ＮＣ［ｉ］がエンコードされる。その後、ステップＳ５２８に処理が移行する。
【０２０１】
ステップＳ５２８では、エンコード結果の結合処理が実行される。具体的には、ＮＣ：＝ＮＣ  ∪  ＮＣ［ｉ］；の処理が実行される。その後、ステップＳ５２９に処理が移行する。
【０２０２】
ステップＳ５２９では、ｉ：＝ｉ＋１；ｊ：＝ｊ＋１；が実行される。つまり、変数ｉ，ｊの値がそれぞれ１つインクリメントされる。その後、ステップＳ５２３に処理が移行する。
【０２０３】
ステップＳ５３０では、処理結果ＮＣが出力され、処理が終了する。
以上が、デコード演算の処理内容である。
【０２０４】
本実施の形態にかかるネットワークシステムＳＹＳ４は、端末装置１の演算性能及びメモリ性能が低い場合でも、更新コードの改ざん等を防ぐことにより信頼性を向上させることができる。また、端末装置１に最初に配置されたコードが配送センタ３において秘匿されており盗聴不可であるという前提が成り立つのであれば、配送センタ３での盗聴の抑止が可能である。
【０２０５】
また、本実施の形態にかかるネットワークシステムＳＹＳ４では、開発環境２と配送センタ３との間のデータ通信が、少なくとも改ざん耐性を持つ暗号プロトコルによって保護されており、配送センタ３と端末装置１との間のデータ通信も、同様に少なくとも改ざん耐性を持つ暗号プロトコルによって保護されている。そのため、これら転送路上での中間者による更新コードの改ざんの抑止が可能である。加えて、秘匿性も向上する。
【０２０６】
また、本実施の形態にかかるネットワークシステムＳＹＳ４は、実施の形態１の手法と組み合わせることにより、Ｒｅｐｌａｙ攻撃によって同じ更新コード１０１が繰り返し同じ端末装置１に配送された場合でも、当該更新コード１０１の配置領域が更新対象コード１１１の配置領域の全てと重なるため、不正を検知して、端末装置１のメモリ１１への当該更新コード１０１の書き込みを停止させることができる。
【０２０７】
また、本実施の形態にかかるネットワークシステムＳＹＳ４は、実施の形態２の手法と組み合わせることにより、更新対象コード１１１のみから共通鍵が構成されている場合でも、改ざんの困難性を向上させることができる。
【０２０８】
さらに、本実施の形態にかかるネットワークシステムＳＹＳ４は、実施の形態３の手法と組み合わせることにより、署名検証において不合格になった場合、端末装置１のメモリ１１への更新コード１０１の書き込みを停止させることができる。そのため、端末装置１において、改ざんされた更新コード１０１が誤って実行されるのを防ぐことができる。
【０２０９】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は既に述べた実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において種々の変更が可能であることはいうまでもない。例えば、実施の形態１乃至４の一部又は全部の手法が組み合わせて用いられてもよい。
【符号の説明】
【０２１０】
ＳＹＳ１  ネットワークシステム
ＳＹＳ２  ネットワークシステム
ＳＹＳ３  ネットワークシステム
ＳＹＳ４  ネットワークシステム
１  端末装置
２  開発環境
３  配送センタ
４  鍵管理サーバ
１１  メモリ
１２  検査部
１３  更新制御部
１０１  更新コード
１０２  差分更新コード塊
１１０  プログラム
１１１  更新対象コード
【図１】
2020181446.tif 000003
【図２】
2020181446.tif 000004
【図３】
2020181446.tif 000005
【図４】
2020181446.tif 000006
【図５】
2020181446.tif 000007
【図６】
2020181446.tif 000008
【図７】
2020181446.tif 000009
【図８】
2020181446.tif 000010
【図９】
2020181446.tif 000011
【図１０】
2020181446.tif 000012
【図１１】
2020181446.tif 000013
【図１２】
2020181446.tif 000014
【図１３】
2020181446.tif 000015
【図１４】
2020181446.tif 000016
【図１５】
2020181446.tif 000017
【図１６】
2020181446.tif 000018
【図１７】
2020181446.tif 000019
【図１８】
2020181446.tif 000020
【図１９】
2020181446.tif 000021
【図２０】
2020181446.tif 000022
【図２１】
2020181446.tif 000023
【図２２】
2020181446.tif 000024
【図２３】
2020181446.tif 000025
【図２４】
2020181446.tif 000026
【図２５】
2020181446.tif 000027
【図２６】
2020181446.tif 000028
【図２７】
2020181446.tif 000029
【図２８】
2020181446.tif 000030
【図２９】
2020181446.tif 000031
【図３０】
2020181446.tif 000032
【図３１】
2020181446.tif 000033
【図３２】
2020181446.tif 000034
【図３３】
2020181446.tif 000035