(57)【要約】【課題】外部の記憶部にプログラムを保存する構成において、当該プログラムのセキュリティをより高める。【解決手段】プログラム格納装置は、受信したプログラムをブロック単位で記憶する内部記憶部を備え、外部に設けられる外部記憶部に、前記内部記憶部に記憶すべき前記プログラムを格納し、前記内部記憶部に書き込むべき前記プログラムを構成するブロックの数であるブロック数を取得し、前記内部記憶部の記憶領域および前記外部記憶部の記憶領域の各々における前記ブロック数分の記憶領域において、前記内部記憶部における各前記ブロックのアドレスである複数の第１アドレスと前記外部記憶部における各前記ブロックのアドレスである複数の第２アドレスとの少なくとも一部が異なり、かつ前記複数の第１アドレスと前記複数の第２アドレスとが１対１で対応するように所定の変換式を用いて前記第２アドレスを決定する変換処理を行う処理部を備える。【選択図】図１
2018206006.tif 000002
【特許請求の範囲】
【請求項１】
受信したプログラムをブロック単位で記憶する内部記憶部を備え、外部に設けられる外部記憶部に、前記内部記憶部に記憶すべき前記プログラムを格納するプログラム格納装置であって、
前記内部記憶部に書き込むべき前記プログラムを構成するブロックの数であるブロック数を取得し、前記内部記憶部の記憶領域および前記外部記憶部の記憶領域の各々における前記ブロック数分の記憶領域において、前記内部記憶部における各前記ブロックのアドレスである複数の第１アドレスと前記外部記憶部における各前記ブロックのアドレスである複数の第２アドレスとの少なくとも一部が異なり、かつ前記複数の第１アドレスと前記複数の第２アドレスとが１対１で対応するように所定の変換式を用いて前記第２アドレスを決定する変換処理を行う処理部を備える、プログラム格納装置。
【請求項２】
前記処理部は、前記プログラムが更新されるたびに、更新されるべき前記プログラムの前記ブロック数を取得して前記変換処理を行う、請求項１に記載のプログラム格納装置。
【請求項３】
前記処理部は、前記変換式におけるパラメータの値であって前記プログラム格納装置において保存されている値を用いて前記変換処理を行う、請求項１または請求項２に記載のプログラム格納装置。
【請求項４】
前記変換式は、以下の式である、
【数１】
2018206006.tif 000005
但し、ｋは前記値であり、Ａｉは前記第１アドレスであり、Ｎｂは前記ブロック数であり、Ａｅは前記第２アドレスであり、ｍｏｄ（ｘ，ｙ）はｘをｙで除したときの余りを与える演算である、請求項３に記載のプログラム格納装置。
【請求項５】
前記値は、前記ブロック数より小さい素数であり、前記素数および前記ブロック数の間において１以外の公約数が存在しない、請求項４に記載のプログラム格納装置。
【請求項６】
受信したプログラムをブロック単位で記憶する内部記憶部を備え、外部に設けられる外部記憶部に、前記内部記憶部に記憶すべき前記プログラムを格納するプログラム格納装置におけるプログラム格納方法であって、
前記内部記憶部に書き込むべき前記プログラムを構成するブロックの数であるブロック数を取得するステップと、
前記内部記憶部の記憶領域および前記外部記憶部の記憶領域の各々における前記ブロック数分の記憶領域において、前記内部記憶部における各前記ブロックのアドレスである複数の第１アドレスと前記外部記憶部における各前記ブロックのアドレスである複数の第２アドレスとの少なくとも一部が異なり、かつ前記複数の第１アドレスと前記複数の第２アドレスとが１対１で対応するように所定の変換式を用いて前記第２アドレスを決定する変換処理を行うステップとを含む、プログラム格納方法。
【請求項７】
受信したプログラムをブロック単位で記憶する内部記憶部を備え、外部に設けられる外部記憶部に、前記内部記憶部に記憶すべき前記プログラムを格納するプログラム格納装置において用いられるプログラム格納プログラムであって、
コンピュータを、
前記内部記憶部に書き込むべき前記プログラムを構成するブロックの数であるブロック数を取得し、前記内部記憶部の記憶領域および前記外部記憶部の記憶領域の各々における前記ブロック数分の記憶領域において、前記内部記憶部における各前記ブロックのアドレスである複数の第１アドレスと前記外部記憶部における各前記ブロックのアドレスである複数の第２アドレスとの少なくとも一部が異なり、かつ前記複数の第１アドレスと前記複数の第２アドレスとが１対１で対応するように所定の変換式を用いて前記第２アドレスを決定する変換処理を行う処理部、
として機能させるための、プログラム格納プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム格納装置、プログラム格納方法およびプログラム格納プログラムに関する。
【背景技術】
【０００２】
従来、対象装置の外部に設けられるメモリに保存されたデータのセキュリティを高めるための技術が開発されている。
【０００３】
たとえば、特許文献１（特開平５−３２４４８４号公報）には、以下のようなシステムが開示されている。すなわち、外部メモリのセキュリティシステムは、汎用ＣＰＵと、この汎用ＣＰＵに外付けされた外部メモリを備えて構成された特定用途向けの１チップＣＰＵにおける前記外部メモリのセキュリティシステムであって、前記汎用ＣＰＵと外部メモリ間に配置されると共に前記外部メモリに格納されているデータのアドレス及びデータ内容を示すビット配列の変換機能を有する変換手段を有する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平５−３２４４８４号公報
【特許文献２】特開２００２−３２２６８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
特許文献１に記載の外部メモリのセキュリティシステムでは、汎用ＣＰＵのアドレスと外部メモリのアドレスとを任意に対応付ける変換テーブルが外部メモリに格納される。
【０００６】
このように、変換テーブルが外部メモリに格納される場合、変換テーブルへの不正アクセスがより容易になるため、変換テーブルの内容が解析されることがある。変換テーブルの内容が解析されてしまうと、変換テーブルの内容に基づいて、外部メモリに格納されたプログラムの内容等が解析される可能性が高まり、セキュリティ上好ましくない。
【０００７】
この発明は、上述の課題を解決するためになされたもので、その目的は、外部の記憶部にプログラムを保存する構成において、当該プログラムのセキュリティをより高めることが可能なプログラム格納装置、プログラム格納方法およびプログラム格納プログラムを提供することである。
【課題を解決するための手段】
【０００８】
（１）上記課題を解決するために、この発明のある局面に係わるプログラム格納装置は、受信したプログラムをブロック単位で記憶する内部記憶部を備え、外部に設けられる外部記憶部に、前記内部記憶部に記憶すべき前記プログラムを格納するプログラム格納装置であって、前記内部記憶部に書き込むべき前記プログラムを構成するブロックの数であるブロック数を取得し、前記内部記憶部の記憶領域および前記外部記憶部の記憶領域の各々における前記ブロック数分の記憶領域において、前記内部記憶部における各前記ブロックのアドレスである複数の第１アドレスと前記外部記憶部における各前記ブロックのアドレスである複数の第２アドレスとの少なくとも一部が異なり、かつ前記複数の第１アドレスと前記複数の第２アドレスとが１対１で対応するように所定の変換式を用いて前記第２アドレスを決定する変換処理を行う処理部を備える。
【０００９】
（６）上記課題を解決するために、この発明のある局面に係わるプログラム格納方法は、受信したプログラムをブロック単位で記憶する内部記憶部を備え、外部に設けられる外部記憶部に、前記内部記憶部に記憶すべき前記プログラムを格納するプログラム格納装置におけるプログラム格納方法であって、前記内部記憶部に書き込むべき前記プログラムを構成するブロックの数であるブロック数を取得するステップと、前記内部記憶部の記憶領域および前記外部記憶部の記憶領域の各々における前記ブロック数分の記憶領域において、前記内部記憶部における各前記ブロックのアドレスである複数の第１アドレスと前記外部記憶部における各前記ブロックのアドレスである複数の第２アドレスとの少なくとも一部が異なり、かつ前記複数の第１アドレスと前記複数の第２アドレスとが１対１で対応するように所定の変換式を用いて前記第２アドレスを決定する変換処理を行うステップとを含む。
【００１０】
（７）上記課題を解決するために、この発明のある局面に係わるプログラム格納プログラムは、受信したプログラムをブロック単位で記憶する内部記憶部を備え、外部に設けられる外部記憶部に、前記内部記憶部に記憶すべき前記プログラムを格納するプログラム格納装置において用いられるプログラム格納プログラムであって、コンピュータを、前記内部記憶部に書き込むべき前記プログラムを構成するブロックの数であるブロック数を取得し、前記内部記憶部の記憶領域および前記外部記憶部の記憶領域の各々における前記ブロック数分の記憶領域において、前記内部記憶部における各前記ブロックのアドレスである複数の第１アドレスと前記外部記憶部における各前記ブロックのアドレスである複数の第２アドレスとの少なくとも一部が異なり、かつ前記複数の第１アドレスと前記複数の第２アドレスとが１対１で対応するように所定の変換式を用いて前記第２アドレスを決定する変換処理を行う処理部、として機能させるためのプログラムである。
【００１１】
本発明は、このような特徴的な処理部を備えるプログラム格納装置として実現することができるだけでなく、プログラム格納装置を備えるプログラム格納システムとして実現することができる。また、本発明は、プログラム格納装置の一部または全部を実現する半導体集積回路として実現することができる。
【発明の効果】
【００１２】
本発明によれば、外部の記憶部にプログラムを保存する構成において、当該プログラムのセキュリティをより高めることができる。
【図面の簡単な説明】
【００１３】
【図１】図１は、本発明の実施の形態に係る通信システムおよび通信装置の構成を示す図である。
【図２】図２は、本発明の実施の形態に係る内部記憶部および外部記憶部における初期状態の記憶領域の一例を示す図である。
【図３】図３は、本発明の実施の形態に係る通信装置における処理部が用いる変換式により作成可能なアドレス対応表の一例を示す図である。
【図４】図４は、本発明の実施の形態に係る外部記憶部に更新プログラムが保存された状態の記憶領域の一例を示す図である。
【図５】図５は、本発明の実施の形態に係る通信装置における処理部が用いる変換式により作成可能なアドレス対応表の一例を示す図である。
【図６】図６は、本発明の実施の形態に係る外部記憶部に更新プログラムが保存された状態の記憶領域の一例を示す図である。
【図７】図７は、本発明の実施の形態に係る外部記憶部に更新プログラムが保存された状態の比較例を示す図である。
【図８】図８は、本発明の実施の形態に係る通信装置が更新対象プログラムを更新プログラムに更新する更新処理を行う際の動作手順を定めたフローチャートである。
【図９】図９は、本発明の実施の形態に係る通信装置が一時保存処理を行う際の動作手順を定めたフローチャートである。
【図１０】図１０は、本発明の実施の形態に係る通信装置が再構成処理を行う際の動作手順を定めたフローチャートである。
【発明を実施するための形態】
【００１４】
最初に、本発明の実施形態の内容を列記して説明する。
【００１５】
（１）本発明の実施の形態に係るプログラム格納装置は、受信したプログラムをブロック単位で記憶する内部記憶部を備え、外部に設けられる外部記憶部に、前記内部記憶部に記憶すべき前記プログラムを格納するプログラム格納装置であって、前記内部記憶部に書き込むべき前記プログラムを構成するブロックの数であるブロック数を取得し、前記内部記憶部の記憶領域および前記外部記憶部の記憶領域の各々における前記ブロック数分の記憶領域において、前記内部記憶部における各前記ブロックのアドレスである複数の第１アドレスと前記外部記憶部における各前記ブロックのアドレスである複数の第２アドレスとの少なくとも一部が異なり、かつ前記複数の第１アドレスと前記複数の第２アドレスとが１対１で対応するように所定の変換式を用いて前記第２アドレスを決定する変換処理を行う処理部を備える。
【００１６】
このように、変換式を用いる構成により、外部記憶部に変換テーブルを保存することなく第１アドレスと第２アドレスとを対応付けることができるので、第１アドレスと第２アドレスとの対応関係が解析されてしまう可能性を低下させることができる。また、たとえば、受信したプログラムを内部記憶部に保存する場合における各ブロックの順番と異なる順番で、当該各ブロックを外部記憶部に保存することができるので、外部記憶部に保存された各ブロックにより構成されるプログラムの解析を困難にすることができる。したがって、外部の記憶部にプログラムを保存する構成において、当該プログラムのセキュリティをより高めることができる。
【００１７】
（２）好ましくは、前記処理部は、前記プログラムが更新されるたびに、更新されるべき前記プログラムの前記ブロック数を取得して前記変換処理を行う。
【００１８】
このような構成により、更新されるべきプログラムのブロック数に応じて変換処理の内容を変更することができるので、たとえば外部記憶部に保存されたプログラムの解析をより困難にすることができる。
【００１９】
（３）好ましくは、前記処理部は、前記変換式におけるパラメータの値であって前記プログラム格納装置において保存されている値を用いて前記変換処理を行う。
【００２０】
このように、上記値をプログラム格納装置に保存する構成により、たとえば、外部記憶部が不正アクセスされても、上記値が漏えいしてしまうことを防ぐことができるので、第１アドレスと第２アドレスとの対応関係が解析されてしまう可能性をより低下させることができる。また、上記値を保存するための記憶領域のサイズが小さいので、プログラム格納装置における記憶領域を節約することができる。
【００２１】
（４）より好ましくは、前記変換式は、以下の式である、
【数１】
2018206006.tif 000003
但し、ｋは前記値であり、Ａｉは前記第１アドレスであり、Ｎｂは前記ブロック数であり、Ａｅは前記第２アドレスであり、ｍｏｄ（ｘ，ｙ）はｘをｙで除したときの余りを与える演算である。
【００２２】
このような構成により、上記値およびブロック数に応じて第１アドレスと第２アドレスとの対応関係を簡易に異ならせることができる。
【００２３】
（５）より好ましくは、前記値は、前記ブロック数より小さい素数であり、前記素数および前記ブロック数の間において１以外の公約数が存在しない。
【００２４】
このような構成により、第１アドレスと第２アドレスとの対応関係を簡易に異ならせることができるとともに、対応関係を複雑にすることができる。
【００２５】
（６）本発明の実施の形態に係るプログラム格納方法は、受信したプログラムをブロック単位で記憶する内部記憶部を備え、外部に設けられる外部記憶部に、前記内部記憶部に記憶すべき前記プログラムを格納するプログラム格納装置におけるプログラム格納方法であって、前記内部記憶部に書き込むべき前記プログラムを構成するブロックの数であるブロック数を取得するステップと、前記内部記憶部の記憶領域および前記外部記憶部の記憶領域の各々における前記ブロック数分の記憶領域において、前記内部記憶部における各前記ブロックのアドレスである複数の第１アドレスと前記外部記憶部における各前記ブロックのアドレスである複数の第２アドレスとの少なくとも一部が異なり、かつ前記複数の第１アドレスと前記複数の第２アドレスとが１対１で対応するように所定の変換式を用いて前記第２アドレスを決定する変換処理を行うステップとを含む。
【００２６】
このように、変換式を用いる構成により、外部記憶部に変換テーブルを保存することなく第１アドレスと第２アドレスとを対応付けることができるので、第１アドレスと第２アドレスとの対応関係が解析されてしまう可能性を低下させることができる。また、たとえば、受信したプログラムを内部記憶部に保存する場合における各ブロックの順番と異なる順番で、当該各ブロックを外部記憶部に保存することができるので、外部記憶部に保存された各ブロックにより構成されるプログラムの解析を困難にすることができる。したがって、外部の記憶部にプログラムを保存する構成において、当該プログラムのセキュリティをより高めることができる。
【００２７】
（７）本発明の実施の形態に係るプログラム格納プログラムは、受信したプログラムをブロック単位で記憶する内部記憶部を備え、外部に設けられる外部記憶部に、前記内部記憶部に記憶すべき前記プログラムを格納するプログラム格納装置において用いられるプログラム格納プログラムであって、コンピュータを、前記内部記憶部に書き込むべき前記プログラムを構成するブロックの数であるブロック数を取得し、前記内部記憶部の記憶領域および前記外部記憶部の記憶領域の各々における前記ブロック数分の記憶領域において、前記内部記憶部における各前記ブロックのアドレスである複数の第１アドレスと前記外部記憶部における各前記ブロックのアドレスである複数の第２アドレスとの少なくとも一部が異なり、かつ前記複数の第１アドレスと前記複数の第２アドレスとが１対１で対応するように所定の変換式を用いて前記第２アドレスを決定する変換処理を行う処理部、として機能させるためのプログラムである。
【００２８】
このように、変換式を用いる構成により、外部記憶部に変換テーブルを保存することなく第１アドレスと第２アドレスとを対応付けることができるので、第１アドレスと第２アドレスとの対応関係が解析されてしまう可能性を低下させることができる。また、たとえば、受信したプログラムを内部記憶部に保存する場合における各ブロックの順番と異なる順番で、当該各ブロックを外部記憶部に保存することができるので、外部記憶部に保存された各ブロックにより構成されるプログラムの解析を困難にすることができる。したがって、外部の記憶部にプログラムを保存する構成において、当該プログラムのセキュリティをより高めることができる。
【００２９】
以下、本発明の実施の形態について図面を用いて説明する。なお、図中同一または相当部分には同一符号を付してその説明は繰り返さない。また、以下に記載する実施の形態の少なくとも一部を任意に組み合わせてもよい。
【００３０】
［構成および基本動作］
図１は、本発明の実施の形態に係る通信システムおよび通信装置の構成を示す図である。
【００３１】
図１を参照して、通信システム３０１は、通信装置（プログラム格納装置）１０１と、スマートメータ１５１とを備える。
【００３２】
通信装置１０１は、処理部２１と、内部記憶部２２とを備える。また、通信装置１０１は、たとえば、測定情報等をスマートメータ１５１と送受信するための通信回路１０と、処理部２１において用いられるプログラムを外部サーバから受信するための通信回路１１と、外部サーバから受信したプログラムを外部記憶部３２に一時的に転送するための通信回路１２とを有する。
【００３３】
通信装置１０１は、たとえば、スマートメータ１５１における通信部として用いられる。なお、通信装置１０１は、図１に示すようにスマートメータ１５１の外部に設けられる構成に限らず、スマートメータ１５１の内部に設けられる構成であってもよい。また、通信装置１０１は、スマートメータ１５１以外の装置における通信部として用いられてもよい。
【００３４】
より詳細には、通信装置１０１における内部記憶部２２は、たとえばフラッシュメモリであり、通信装置１０１が受信したプログラムをブロック単位で記憶する。内部記憶部２２には、たとえば通信装置１０１が用いるプログラムが保存される。
【００３５】
外部記憶部３２は、通信装置１０１の外部に設けられる。より詳細には、外部記憶部３２は、たとえばフラッシュメモリである。外部記憶部３２には、通信装置１０１において用いられる予定のプログラムである更新プログラムが一時的に保存される。外部記憶部３２における記憶領域のサイズは、たとえば内部記憶部２２における記憶領域のサイズと異なっており、ここでは内部記憶部２２における記憶領域のサイズの２倍である。
【００３６】
処理部２１は、内部記憶部２２に保存されたプログラム（以下、更新対象プログラムとも称する。）を更新する。
【００３７】
より詳細には、処理部２１は、更新対象プログラムを更新する処理（以下、更新処理とも称する。）を行う場合、更新処理を行うためのプログラム（以下、実行プログラムとも称する。）を取得する。
【００３８】
たとえば実行プログラムが内部記憶部２２に予め保存されており、処理部２１は、内部記憶部２２から実行プログラムを取得する。
【００３９】
処理部２１は、通信回路１２たとえばＳＰＩ（Ｓｅｒｉａｌ  Ｐｅｒｉｐｈｅｒａｌ  Ｉｎｔｅｒｆａｃｅ）を介して外部記憶部３２と通信を行うことが可能である。
【００４０】
また、処理部２１は、通信回路１１たとえばＰＬＣ（Ｐｏｗｅｒ  Ｌｉｎｅ  Ｃｏｍｍｕｎｉｃａｔｉｏｎ）重畳線を介して外部サーバと通信を行うことが可能である。
【００４１】
また、処理部２１は、通信回路１０たとえばＵＡＲＴ（Ｕｎｉｖｅｒｓａｌ  Ａｓｙｎｃｈｒｏｎｏｕｓ  Ｒｅｃｅｉｖｅｒ／Ｔｒａｎｓｍｉｔｔｅｒ）を介してスマートメータ１５１と通信を行うことが可能である。処理部２１は、スマートメータ１５１と測定情報等のやり取りを行う。
【００４２】
外部サーバは、たとえば、更新プログラムを含む情報を通信装置１０１へ送信する。
【００４３】
より詳細には、外部サーバは、たとえば、サイズの大きい更新プログラムを通信装置１０１へ送信する場合、当該更新プログラムを複数のブロック（以下、プログラムブロックとも称する。）に分割する。プログラムブロックのサイズは、たとえば１２８バイトである。
【００４４】
外部サーバは、プログラムブロックのブロック数Ｎｂを示す個数情報、および複数のプログラムブロックを先頭から順に含むブロック情報を作成する。
【００４５】
この例では、外部サーバは、たとえば、更新プログラムを１０個のプログラムブロックに分割する。ここで、分割された１０個のプログラムブロックを、先頭から順にプログラムブロックＢｐ［０］〜Ｂｐ［９］と定義する。
【００４６】
外部サーバは、ブロック数Ｎｂとして１０を示す個数情報、およびプログラムブロックＢｐ［ｊ］をインデックスｊの順に含むブロック情報を作成する。ここで、インデックスｊはゼロ〜９までの整数である。
【００４７】
外部サーバは、作成した個数情報およびブロック情報をこの順に通信回路１１経由で通信装置１０１へ送信する。
【００４８】
処理部２１は、内部記憶部２２に書き込むべきプログラムを構成するプログラムブロックの数であるブロック数Ｎｂを取得する。
【００４９】
より詳細には、処理部２１は、通信回路１１経由で外部サーバから個数情報を受信すると、更新処理を開始し、受信した個数情報に含まれるブロック数Ｎｂを取得する。この例では、処理部２１は、ブロック数Ｎｂとして１０を取得する。
【００５０】
図２は、本発明の実施の形態に係る内部記憶部および外部記憶部における初期状態の記憶領域の一例を示す図である。
【００５１】
図１および図２を参照して、内部記憶部２２は、たとえば１６個の内部ブロック領域を含む。内部ブロック領域のサイズは、たとえばプログラムブロックのサイズと同じである。１６個の内部ブロック領域は、先頭から順に、それぞれゼロ〜１５を示す内部アドレスＡｉが割り当てられている。ここでは、内部記憶部２２の一部または全部において、更新対象プログラムが保存されている。
【００５２】
処理部２１は、たとえば、内部記憶部２２のサイズと同じサイズを有する作業領域Ｒｗｒｋを、外部記憶部３２の先頭からオフセットＯｆｔ分シフトした位置に設定する。
【００５３】
作業領域Ｒｗｒｋは、内部ブロック領域と同様の外部ブロック領域を有する。より詳細には、作業領域Ｒｗｒｋは、１６個の外部ブロック領域を含む。外部ブロック領域のサイズは、プログラムブロックのサイズと同じである。
【００５４】
１６個の外部ブロック領域は、先頭から順に、それぞれゼロ〜１５を示す外部アドレスＡｅが割り当てられている。１６個の外部ブロック領域の物理アドレスは、たとえば、外部アドレスＡｅにオフセットＯｆｔを加えることにより算出可能である。
【００５５】
処理部２１は、設定した作業領域Ｒｗｒｋに書き込まれているデータを消去する。これにより、作業領域Ｒｗｒｋにおける各外部ブロック領域のデータは、フラッシュメモリの特性により各ビットが１であるブロックデータＢｉになる。
【００５６】
そして、処理部２１は、ブロック数Ｎｂ分のプログラムブロックを一時的に保存するために、外部記憶部３２の記憶領域におけるブロック数Ｎｂ分の記憶領域（以下、一時保存領域Ｒｔｍｐとも称する。）を確保する。
【００５７】
具体的には、処理部２１は、外部記憶部３２において、外部アドレスＡｅがゼロである先頭の外部ブロック領域から、外部アドレスＡｅが９である１０番目の外部ブロック領域までを一時保存領域Ｒｔｍｐとして確保する。
【００５８】
なお、処理部２１は、作業領域Ｒｗｒｋに書き込まれているデータを消去する構成に限らず、一時保存領域Ｒｔｍｐに書き込まれているデータを消去する構成であってもよい。
【００５９】
処理部２１は、後述するプログラム保存領域および一時保存領域Ｒｔｍｐにおいて、内部記憶部２２における各プログラムブロックの保存先のアドレスである複数の内部アドレスＡｉと外部記憶部３２における各プログラムブロックの保存先のアドレスである複数の外部アドレスＡｅとの少なくとも一部が異なり、かつ複数の内部アドレスＡｉと複数の外部アドレスＡｅとが１対１で対応するように所定の変換式を用いて外部アドレスＡｅを決定する変換処理を行う。
【００６０】
より詳細には、処理部２１は、たとえば、上記変換式におけるパラメータの値であって通信装置１０１において保存されている値（以下、保存値とも称する。）ｋを用いて変換処理を行う。
【００６１】
ここでは、保存値ｋは、処理部２１において保存されている。なお、保存値ｋは、内部記憶部２２において保存されてもよい。
【００６２】
保存値ｋは、たとえば、ブロック数Ｎｂより小さい素数（以下、対象素数とも称する。）に基づく値である。ここで、たとえば、対象素数およびブロック数Ｎｂの間において１以外の公約数が存在しない。
【００６３】
詳細には、保存値ｋは、たとえば対象素数である。より好ましくは、保存値ｋは、たとえばブロック数Ｎｂを２で除した値より小さい素数である。
【００６４】
なお、保存値ｋは、たとえば、対象素数または上記素数に、ブロック数Ｎｂと正の整数とを乗じた値を加えた値であってもよい。
【００６５】
具体的には、上記変換式は、たとえば、以下の式（１）である。
【数２】
2018206006.tif 000004
【００６６】
ここで、ｍｏｄ（ｘ，ｙ）は、たとえば、ｘをｙで除したときの余りを与える演算である。
【００６７】
図３は、本発明の実施の形態に係る通信装置における処理部が用いる変換式により作成可能なアドレス対応表の一例を示す図である。
【００６８】
図３には、内部アドレスＡｉ、ブロック数Ｎｂの一例である１０、および保存値ｋの一例である７を式（１）に代入して算出される外部アドレスＡｅと内部アドレスＡｉとの対応関係が示される。
【００６９】
図４は、本発明の実施の形態に係る外部記憶部に更新プログラムが保存された状態の記憶領域の一例を示す図である。
【００７０】
図１、図３および図４を参照して、処理部２１は、内部記憶部２２に記憶すべき更新プログラムを外部記憶部３２に一時的に格納する。より詳細には、処理部２１は、更新プログラム全体を外部記憶部３２における一時保存領域Ｒｔｍｐに保存する一時保存処理を行う。
【００７１】
このように、受信した更新プログラムを内部記憶部２２に直接書き込まずに一時保存処理を行う構成により、一時保存処理が無事完了するまで内部記憶部２２に更新対象プログラムを残すことができる。これにより、たとえば、更新プログラムのダウンロードに失敗した場合においても、通信装置１０１は内部記憶部２２に残した更新対象プログラムを用いて動作することができる。
【００７２】
より詳細には、処理部２１は、保存値ｋとして、たとえば７を設定する。処理部２１は、ブロック情報の一部として、１番目のプログラムブロックＢｐ［０］を通信回路１１経由で外部サーバから受信すると、プログラムブロックＢｐ［０］の内部記憶部２２における保存先の内部アドレスＡｉがゼロであると認識し、以下の処理を行う。
【００７３】
すなわち、処理部２１は、内部アドレスＡｉ、保存値ｋおよびブロック数Ｎｂとしてそれぞれゼロ、７および１０を式（１）に代入することにより、プログラムブロックＢｐ［０］を保存すべき外部ブロック領域の外部アドレスＡｅとしてゼロを算出する。処理部２１は、外部アドレスＡｅがゼロの外部ブロック領域にプログラムブロックＢｐ［０］を保存する。
【００７４】
そして、処理部２１は、ブロック情報の一部として、２番目のプログラムブロックＢｐ［１］を通信回路１１経由で外部サーバから受信すると、プログラムブロックＢｐ［１］の内部記憶部２２における保存先の内部アドレスＡｉが１であると認識し、以下の処理を行う。
【００７５】
すなわち、処理部２１は、内部アドレスＡｉ、保存値ｋおよびブロック数Ｎｂとしてそれぞれ１、７および１０を式（１）に代入することにより、プログラムブロックＢｐ［１］を保存すべき外部ブロック領域の外部アドレスＡｅとして７を算出する。処理部２１は、外部アドレスＡｅが７の外部ブロック領域にプログラムブロックＢｐ［１］を保存する。
【００７６】
そして、処理部２１は、ブロック情報の一部として、３番目のプログラムブロックＢｐ［２］を通信回路１１経由で外部サーバから受信すると、プログラムブロックＢｐ［２］の内部記憶部２２における保存先の内部アドレスＡｉが２であると認識し、以下の処理を行う。
【００７７】
すなわち、処理部２１は、内部アドレスＡｉ、保存値ｋおよびブロック数Ｎｂとしてそれぞれ２、７および１０を式（１）に代入することにより、プログラムブロックＢｐ［２］を保存すべき外部ブロック領域の外部アドレスＡｅとして４を算出する。処理部２１は、外部アドレスＡｅが４の外部ブロック領域にプログラムブロックＢｐ［２］を保存する。
【００７８】
同様に、処理部２１は、４番目のプログラムブロックＢｐ［３］〜１０番目のプログラムブロックＢｐ［９］を通信回路１１経由で外部サーバからそれぞれ受信すると、以下のように各プログラムブロックを外部記憶部３２における外部ブロック領域に保存する。
【００７９】
すなわち、処理部２１は、プログラムブロックＢｐ［３］，Ｂｐ［４］，Ｂｐ［５］，Ｂｐ［６］，Ｂｐ［７］，Ｂｐ［８］，Ｂｐ［９］を、外部記憶部３２における外部アドレスＡｅが１，８，５，２，９，６，３の外部ブロック領域にそれぞれ保存する。
【００８０】
このような構成により、外部記憶部３２における一時保存領域Ｒｔｍｐでは、更新プログラムが先頭からＢｐ［０］〜Ｂｐ［９］の順番で保存されないので、たとえば、一時保存領域Ｒｔｍｐに対して不正にアクセスされた場合においても、更新プログラムの内容が容易に解析される可能性を低下させることができる。
【００８１】
また、一時保存領域Ｒｔｍｐにおいて各プログラムブロックが１つの塊として保存されるので、一見すると各プログラムブロックがＢｐ［０］〜Ｂｐ［９］の順番で保存されているように見えるので、一時保存領域Ｒｔｍｐに対して不正にアクセスされた場合において、Ｂｐ［０］〜Ｂｐ［９］の順番で保存されていないことが容易に認識されてしまうことを防ぐことができる。
【００８２】
処理部２１は、一時保存処理が無事に完了すると、更新プログラム全体を内部記憶部２２に保存する再構成処理を行う。
【００８３】
より詳細には、処理部２１は、たとえば内部記憶部２２に書き込まれているデータを消去する。これにより、内部記憶部２２における各内部ブロック領域のデータは、各ビットが１であるブロックデータＢｉになる。
【００８４】
そして、処理部２１は、更新プログラムを最終的に保存するための、内部記憶部２２の記憶領域におけるブロック数Ｎｂ分の記憶領域（以下、プログラム保存領域Ｒｐｒｇとも称する。）を確保する。
【００８５】
具体的には、処理部２１は、内部記憶部２２において、内部アドレスＡｉがゼロである先頭の内部ブロック領域から、内部アドレスＡｉが９である１０番目の内部ブロック領域までをプログラム保存領域Ｒｐｒｇとして確保する。
【００８６】
なお、処理部２１は、内部記憶部２２全体に書き込まれているデータを消去する構成に限らず、プログラム保存領域Ｒｐｒｇに書き込まれているデータを消去する構成であってもよい。
【００８７】
処理部２１は、たとえば、内部記憶部２２における内部アドレスＡｉがゼロの内部ブロック領域に保存すべきプログラムブロックについて、外部記憶部３２における保存位置を、式（１）を用いて算出する。
【００８８】
具体的には、処理部２１は、内部アドレスＡｉ、保存値ｋおよびブロック数Ｎｂとしてそれぞれゼロ、７および１０を式（１）に代入することにより、内部アドレスＡｉがゼロの内部ブロック領域に保存すべきプログラムブロックについて、外部記憶部３２における保存位置の外部アドレスＡｅとしてゼロを算出する。
【００８９】
処理部２１は、外部アドレスＡｅがゼロの外部ブロック領域に保存されているプログラムブロックすなわちＢｐ［０］を、内部記憶部２２における内部アドレスＡｉがゼロの内部ブロック領域に保存する。
【００９０】
また、処理部２１は、たとえば、内部記憶部２２における内部アドレスＡｉが１の内部ブロック領域に保存すべきプログラムブロックについて、外部記憶部３２における保存位置の外部アドレスＡｅを、式（１）を用いて７と算出する。
【００９１】
処理部２１は、外部アドレスＡｅが７の外部ブロック領域に保存されているプログラムブロックすなわちＢｐ［１］を、内部記憶部２２における内部アドレスＡｉが１の内部ブロック領域に保存する。
【００９２】
また、処理部２１は、たとえば、内部記憶部２２における内部アドレスＡｉが２の内部ブロック領域に保存すべきプログラムブロックについて、外部記憶部３２における保存位置の外部アドレスＡｅを、式（１）を用いて４と算出する。
【００９３】
処理部２１は、外部アドレスＡｅが４の外部ブロック領域に保存されているプログラムブロックすなわちＢｐ［２］を、内部記憶部２２における内部アドレスＡｉが２の内部ブロック領域に保存する。
【００９４】
同様に、処理部２１は、内部記憶部２２における内部アドレスＡｉが３，４，５，６，７，８，９の内部ブロック領域に保存すべきプログラムブロックについて、それぞれ、外部記憶部３２における保存位置の外部アドレスＡｅを、式（１）を用いて１，８，５，２，９，６，３と算出する。
【００９５】
処理部２１は、外部アドレスＡｅが１，８，５，２，９，６，３の外部ブロック領域に保存されているプログラムブロックＢｐ［３］，Ｂｐ［４］，Ｂｐ［５］，Ｂｐ［６］，Ｂｐ［７］，Ｂｐ［８］，Ｂｐ［９］を、それぞれ、内部記憶部２２における内部アドレスＡｉが３，４，５，６，７，８，９の内部ブロック領域に保存する。
【００９６】
このような構成により、内部記憶部２２におけるプログラム保存領域Ｒｐｒｇでは、更新プログラムが先頭からＢｐ［０］〜Ｂｐ［９］の順番で保存されるので、通信装置１０１は、内部記憶部２２の先頭の内部アドレスＡｉから命令の読み出しを行うことで、更新プログラムを正しく実行することができる。
【００９７】
そして、処理部２１は、外部記憶部３２における一時保存領域Ｒｔｍｐに書き込まれているデータを消去する。これにより、外部記憶部３２における各外部ブロック領域のデータは、各ビットが１であるブロックデータＢｉになる。
【００９８】
［新たな更新プログラムを受信した場合］
図５は、本発明の実施の形態に係る通信装置における処理部が用いる変換式により作成可能なアドレス対応表の一例を示す図である。
【００９９】
図５には、内部アドレスＡｉ、ブロック数Ｎｂの一例である１５、および保存値ｋの一例である７を式（１）に代入して算出される外部アドレスＡｅと内部アドレスＡｉとの対応関係が示される。
【０１００】
図６は、本発明の実施の形態に係る外部記憶部に更新プログラムが保存された状態の記憶領域の一例を示す図である。
【０１０１】
図１、図５および図６を参照して、処理部２１は、たとえば、更新対象プログラムが更新されるたびに、更新されるべき更新プログラムのブロック数Ｎｂを取得して変換処理を行う。
【０１０２】
より詳細には、処理部２１は、ブロック数Ｎｂとして１５を示す新たな個数情報を通信回路１１経由で外部サーバから受信すると、外部記憶部３２の先頭からオフセットＯｆｔ分シフトした位置に作業領域Ｒｗｒｋを設定し、設定した作業領域Ｒｗｒｋに書き込まれているデータを消去する。
【０１０３】
処理部２１は、外部記憶部３２において、外部アドレスＡｅがゼロである先頭の外部ブロック領域から、外部アドレスＡｅが１４である１５番目の外部ブロック領域までを一時保存領域Ｒｔｍｐとして確保する。
【０１０４】
そして、処理部２１は、新たな更新プログラム全体を外部記憶部３２における一時保存領域Ｒｔｍｐに保存する一時保存処理を行う。
【０１０５】
より詳細には、処理部２１は、保存値ｋとして、たとえば７を設定する。この保存値ｋは、ブロック数Ｎｂである１５を２で除した値より小さい好ましい保存値である。なお、処理部２１は、保存値ｋを、前回の更新処理に用いた値と同じ値に設定する構成に限らず、前回の更新処理に用いた値と異なる値に設定する構成であってもよい。
【０１０６】
処理部２１は、１番目のプログラムブロックＢｐ［０］〜１５番目のプログラムブロックＢｐ［１４］を通信回路１１経由で外部サーバからそれぞれ受信すると、式（１）を用いて、以下のように各プログラムブロックを外部記憶部３２における外部ブロック領域に保存する。
【０１０７】
すなわち、処理部２１は、プログラムブロックＢｐ［０］，Ｂｐ［１］，Ｂｐ［２］，Ｂｐ［３］，Ｂｐ［４］，Ｂｐ［５］，Ｂｐ［６］，Ｂｐ［７］，Ｂｐ［８］，Ｂｐ［９］，Ｂｐ［１０］，Ｂｐ［１１］，Ｂｐ［１２］，Ｂｐ［１３］，Ｂｐ［１４］を、外部アドレスＡｅが０，７，１４，６，１３，５，１２，４，１１，３，１０，２，９，１，８の外部ブロック領域にそれぞれ保存する。
【０１０８】
処理部２１は、一時保存処理が無事に完了すると、更新プログラム全体を内部記憶部２２に保存する再構成処理を行う。
【０１０９】
より詳細には、処理部２１は、たとえば内部記憶部２２に書き込まれているデータを消去する。
【０１１０】
そして、処理部２１は、内部記憶部２２において、内部アドレスＡｉがゼロである先頭の内部ブロック領域から、内部アドレスＡｉが１４である１５番目の内部ブロック領域までをプログラム保存領域Ｒｐｒｇとして確保する。
【０１１１】
より詳細には、内部記憶部２２における内部アドレスＡｉが０，１，２，３，４，５，６，７，８，９，１０，１１，１２，１３，１４の内部ブロック領域に保存すべきプログラムブロックについて、それぞれ、外部記憶部３２における保存位置の外部アドレスＡｅを、式（１）を用いて０，７，１４，６，１３，５，１２，４，１１，３，１０，２，９，１，８と算出する。
【０１１２】
処理部２１は、外部アドレスＡｅが０，７，１４，６，１３，５，１２，４，１１，３，１０，２，９，１，８の外部ブロック領域に保存されているプログラムブロックＢｐ［０］，Ｂｐ［１］，Ｂｐ［２］，Ｂｐ［３］，Ｂｐ［４］，Ｂｐ［５］，Ｂｐ［６］，Ｂｐ［７］，Ｂｐ［８］，Ｂｐ［９］，Ｂｐ［１０］，Ｂｐ［１１］，Ｂｐ［１２］，Ｂｐ［１３］，Ｂｐ［１４］を、それぞれ、内部記憶部２２における内部アドレスＡｉが０，１，２，３，４，５，６，７，８，９，１０，１１，１２，１３，１４の内部ブロック領域に保存する。
【０１１３】
そして、処理部２１は、外部記憶部３２における一時保存領域Ｒｔｍｐに書き込まれているデータを消去する。これにより、外部記憶部３２における各外部ブロック領域のデータは、各ビットが１であるブロックデータＢｉになる。
【０１１４】
［プログラムブロック保存の比較例］
図７は、本発明の実施の形態に係る外部記憶部に更新プログラムが保存された状態の比較例を示す図である。
【０１１５】
図１、図５および図７を参照して、処理部２１は、たとえば、ブロック数Ｎｂとして１０を示す個数情報を通信回路１１経由で外部サーバから受信して、外部記憶部３２の先頭からオフセットＯｆｔ分シフトした位置に作業領域Ｒｗｒｋを設定し、設定した作業領域Ｒｗｒｋに書き込まれているデータを消去する。
【０１１６】
この比較例では、ブロック数Ｎｂは１０であるが、１５個分の外部ブロック領域を含む一時保存領域Ｒｔｍｐが外部記憶部３２に設けられる。すなわち、処理部２１は、外部記憶部３２において、外部アドレスＡｅがゼロである先頭の外部ブロック領域から、外部アドレスＡｅが１４である１５番目の外部ブロック領域までを一時保存領域Ｒｔｍｐとして確保する。
【０１１７】
処理部２１は、たとえば、式（１）におけるＮｂとして、１０ではなく１５を代入する。また、処理部２１は、保存値ｋとして、たとえば７を設定する。
【０１１８】
この場合、式（１）から得られる外部アドレスＡｅと内部アドレスＡｉとの対応関係は、図５に示す関係となる。
【０１１９】
処理部２１は、１番目のプログラムブロックＢｐ［０］〜１０番目のプログラムブロックＢｐ［９］を通信回路１１経由で外部サーバからそれぞれ受信すると、式（１）を用いて、以下のように各プログラムブロックを外部記憶部３２における外部ブロック領域に保存する。
【０１２０】
すなわち、処理部２１は、プログラムブロックＢｐ［０］，Ｂｐ［１］，Ｂｐ［２］，Ｂｐ［３］，Ｂｐ［４］，Ｂｐ［５］，Ｂｐ［６］，Ｂｐ［７］，Ｂｐ［８］，Ｂｐ［９］を、外部アドレスＡｅが０，７，１４，６，１３，５，１２，４，１１，３の外部ブロック領域にそれぞれ保存する。
【０１２１】
処理部２１は、たとえば内部記憶部２２に書き込まれているデータを消去する。
【０１２２】
そして、処理部２１は、内部記憶部２２において、内部アドレスＡｉがゼロである先頭の内部ブロック領域から、内部アドレスＡｉが９である１０番目の内部ブロック領域までをプログラム保存領域Ｒｐｒｇとして確保する。
【０１２３】
処理部２１は、式（１）を用いて、外部アドレスＡｅが０，７，１４，６，１３，５，１２，４，１１，３の外部ブロック領域に保存されているプログラムブロックＢｐ［０］，Ｂｐ［１］，Ｂｐ［２］，Ｂｐ［３］，Ｂｐ［４］，Ｂｐ［５］，Ｂｐ［６］，Ｂｐ［７］，Ｂｐ［８］，Ｂｐ［９］を、それぞれ、内部記憶部２２における内部アドレスＡｉが０，１，２，３，４，５，６，７，８，９の内部ブロック領域に保存する。
【０１２４】
図７に示す場合では、一時保存領域Ｒｔｍｐに対して不正にアクセスされた場合において、一時保存領域ＲｔｍｐにおけるブロックデータＢｉの配置に基づいて、各プログラムブロックが複数の塊となって保存されていることが容易に認識されてしまう。このため、各プログラムブロックがランダムに保存されていることが容易に認識されてしまう。したがって、たとえば図４に示すように、一見すると各プログラムブロックがＢｐ［０］〜Ｂｐ［９］の順番で保存されているように見えるが、実際にはＢｐ［０］〜Ｂｐ［９］の順番で保存されていない構成が好ましい。
【０１２５】
［動作の流れ］
通信装置１０１は、コンピュータを備え、当該コンピュータにおけるＣＰＵ等の演算処理部は、以下に示すフローチャートの各ステップの一部または全部を含むプログラムを図示しないメモリから読み出して実行する。この装置のプログラムは、外部からインストールすることができる。この装置のプログラムは、記録媒体に格納された状態で流通する。
【０１２６】
図８は、本発明の実施の形態に係る通信装置が更新対象プログラムを更新プログラムに更新する更新処理を行う際の動作手順を定めたフローチャートである。
【０１２７】
図８を参照して、まず、通信装置１０１は、個数情報を外部サーバから受信するまで待機する（ステップＳ１０２でＮＯ）。
【０１２８】
そして、通信装置１０１は、個数情報を外部サーバから受信すると（ステップＳ１０２でＹＥＳ）、受信した個数情報に基づいてブロック数Ｎｂを取得する（ステップＳ１０４）。
【０１２９】
次に、通信装置１０１は、外部記憶部３２において作業領域Ｒｗｒｋを設定し、設定した作業領域Ｒｗｒｋに書き込まれているデータを消去する（ステップＳ１０６）。
【０１３０】
次に、通信装置１０１は、外部記憶部３２に設定した作業領域Ｒｗｒｋにおいて、ブロック数Ｎｂ分の外部ブロック領域を有する一時保存領域Ｒｔｍｐを確保する（ステップＳ１０８）。
【０１３１】
次に、通信装置１０１は、一時保存処理を行う（ステップＳ１１０）。
【０１３２】
次に、通信装置１０１は、内部記憶部２２に書き込まれているデータを消去する（ステップＳ１１２）。
【０１３３】
次に、通信装置１０１は、内部記憶部２２において、ブロック数Ｎｂ分の内部ブロック領域を有するプログラム保存領域Ｒｐｒｇを確保する（ステップＳ１１４）。
【０１３４】
次に、通信装置１０１は、再構成処理を行う（ステップＳ１１６）。
【０１３５】
なお、通信装置１０１は、上記ステップＳ１１０において一時保存処理に失敗した場合、一時保存処理をやり直してもよいし、更新処理を中止してもよい。
【０１３６】
図９は、本発明の実施の形態に係る通信装置が一時保存処理を行う際の動作手順を定めたフローチャートである。図９は、図８のステップＳ１１０における動作の詳細を示している。
【０１３７】
図９を参照して、まず、通信装置１０１は、保存値ｋを設定する（ステップＳ２０２）。
【０１３８】
次に、通信装置１０１は、インデックスｊをゼロに初期化する（ステップＳ２０４）。
【０１３９】
次に、通信装置１０１は、内部アドレスＡｉとしてのｊ、保存値ｋおよびブロック数Ｎｂを式（１）に代入することにより、外部アドレスＡｅを算出する（ステップＳ２０６）。
【０１４０】
次に、通信装置１０１は、ブロック情報の一部として、プログラムブロックＢｐ［ｊ］を通信回路１１経由で外部サーバから受信するまで待機する（ステップＳ２０８でＮＯ）。
【０１４１】
そして、通信装置１０１は、プログラムブロックＢｐ［ｊ］を通信回路１１経由で外部サーバから受信すると（ステップＳ２０８でＹＥＳ）、算出した外部アドレスＡｅの外部ブロック領域に、受信したプログラムブロックＢｐ［ｊ］を保存する（ステップＳ２１０）。
【０１４２】
次に、通信装置１０１は、インデックスｊをインクリメントする（ステップＳ２１２）。
【０１４３】
次に、通信装置１０１は、インデックスｊがブロック数Ｎｂより小さい場合（ステップＳ２１４でＹＥＳ）、内部アドレスＡｉとしてのインクリメントしたｊ、保存値ｋおよびブロック数Ｎｂを式（１）に代入することにより、外部アドレスＡｅを算出する（ステップＳ２０６）。
【０１４４】
一方、通信装置１０１は、インデックスｊがブロック数Ｎｂ以上である場合（ステップＳ２１４でＮＯ）、一時保存処理を終了する。
【０１４５】
なお、上記ステップＳ２０２およびＳ２０４の順番は、上記に限らず、順番を入れ替えてもよい。
【０１４６】
また、上記ステップＳ２０６およびＳ２０８の順番は、上記に限らず、順番を入れ替えてもよい。
【０１４７】
図１０は、本発明の実施の形態に係る通信装置が再構成処理を行う際の動作手順を定めたフローチャートである。図１０は、図８のステップＳ１１６における動作の詳細を示している。
【０１４８】
図１０を参照して、まず、通信装置１０１は、インデックスｊをゼロに初期化する（ステップＳ３０２）。
【０１４９】
次に、通信装置１０１は、内部アドレスＡｉとしてのｊ、保存値ｋおよびブロック数Ｎｂを式（１）に代入することにより、外部アドレスＡｅを算出する（ステップＳ３０４）。
【０１５０】
次に、通信装置１０１は、算出した外部アドレスＡｅの外部ブロック領域に保存されたプログラムブロックＢｐ［ｊ］を取得する（ステップＳ３０６）。
【０１５１】
次に、通信装置１０１は、取得したプログラムブロックＢｐ［ｊ］を、内部アドレスＡｉがｊの内部ブロック領域に保存する（ステップＳ３０８）。
【０１５２】
次に、通信装置１０１は、インデックスｊをインクリメントする（ステップＳ３１０）。
【０１５３】
次に、通信装置１０１は、インデックスｊがブロック数Ｎｂより小さい場合（ステップＳ３１２でＹＥＳ）、内部アドレスＡｉとしてのインクリメントしたｊ、保存値ｋおよびブロック数Ｎｂを式（１）に代入することにより、外部アドレスＡｅを算出する（ステップＳ３０４）。
【０１５４】
一方、通信装置１０１は、インデックスｊがブロック数Ｎｂ以上である場合（ステップＳ３１２でＮＯ）、再構成処理を終了する。
【０１５５】
なお、本発明の実施の形態に係る通信装置では、処理部２１は、更新対象プログラムを更新プログラムに更新する更新処理を行う構成であるとしたが、これに限定するものではない。処理部２１は、所定の変換式を用いて外部アドレスＡｅを決定する変換処理を行う構成であってもよい。具体的には、プログラムブロックＢｐ［ｊ］の受信および保存等を行うプログラムブロック処理部が通信装置１０１の外部に設けられ、処理部２１は、プログラムブロックＢｐ［ｊ］のインデックスｊに応じて外部アドレスＡｅを決定し、決定した外部アドレスＡｅを当該プログラムブロック処理部へ出力する。
【０１５６】
また、本発明の実施の形態に係る通信装置では、処理部２１は、変換式として式（１）を用いる構成であるとしたが、これに限定するものではない。処理部２１は、式（１）とは別の変換式を用いる構成であってもよい。
【０１５７】
また、本発明の実施の形態に係る通信装置では、処理部２１は、個数情報およびブロック情報を外部サーバから取得する構成であるとしたが、これに限定するものではない。たとえば、更新プログラムのブロック数Ｎｂが固定されている場合において、処理部２１は、個数情報を外部サーバから取得せずに、ブロック情報を外部サーバから取得する構成であってもよい。この場合、処理部２１は、たとえば、固定値として使用可能なブロック数Ｎｂを保持しておき、更新対象プログラムを更新するたびに、保持するブロック数Ｎｂを用いて変換処理を行う。
【０１５８】
また、本発明の実施の形態に係る通信装置では、処理部２１は、保存している保存値ｋを用いて変換処理を行う構成であるとしたが、これに限定するものではない。処理部２１は、通信装置１０１の外部から保存値ｋを取得し、取得した保存値ｋを用いて変換処理を行う構成であってもよい。
【０１５９】
また、本発明の実施の形態に係る通信装置では、処理部２１は、ブロック数Ｎｂを式（１）に代入して外部アドレスＡｅを算出する構成であるとしたが、これに限定するものではない。処理部２１は、たとえば、ブロック数Ｎｂの代わりに、ブロック数Ｎｂより小さい整数を式（１）に代入して外部アドレスＡｅを算出する構成であってもよい。この場合、当該整数個分の内部アドレスＡｉと外部アドレスＡｅとの対応関係を算出することが可能である。また、対応関係の算出対象外の内部アドレスＡｉおよび外部アドレスＡｅについては、たとえば固定的な対応関係を用いる。
【０１６０】
また、本発明の実施の形態に係る通信装置では、保存値ｋは、ブロック数Ｎｂより小さい素数すなわち対象素数、およびブロック数Ｎｂを２で除した値より小さい素数である構成であるとしたが、これに限定するものではない。保存値ｋは、対象素数または当該素数に、ブロック数Ｎｂを正の整数倍した値を加えた値である構成であってもよい。具体的には、保存値ｋおよびブロック数Ｎｂが１５である図５に示す場合において、保存値ｋは、７にブロック数Ｎｂを加えた２２であってもよいし、７にブロック数Ｎｂの２倍を加えた３７であってもよい。このような保存値ｋでも、図５に示す外部アドレスＡｅと内部アドレスＡｉとの対応関係が得られる。
【０１６１】
また、保存値ｋは、ブロック数Ｎｂより小さい、素数以外の数値であってもよい。具体的には、保存値ｋおよびブロック数Ｎｂが１５である図５に示す場合において、保存値ｋは、４および８であってもよい。このような保存値ｋでも、式（１）を用いて、１５個の内部アドレスＡｉと１５個の外部アドレスＡｅとの少なくとも一部が異なり、かつ１５個の内部アドレスＡｉと１５個の外部アドレスＡｅとが１対１で対応する対応関係を算出することが可能である。しかしながら、このような対応関係は、図５に示す対応関係と比べて複雑性が低下するので、対象素数、またはブロック数Ｎｂを２で除した値より小さい素数を保存値ｋとして用いる構成が好ましい。
【０１６２】
ところで、特許文献１に記載の外部メモリのセキュリティシステムでは、汎用ＣＰＵのアドレスと外部メモリのアドレスとを任意に対応付ける変換テーブルが外部メモリに格納される。
【０１６３】
このように、変換テーブルが外部メモリに格納される場合、変換テーブルへの不正アクセスがより容易になるため、変換テーブルの内容が解析されることがある。変換テーブルの内容が解析されてしまうと、変換テーブルの内容に基づいて、外部メモリに格納されたプログラムの内容等が解析される可能性が高まり、セキュリティ上好ましくない。
【０１６４】
これに対して、本発明の実施の形態に係る通信装置は、受信した更新プログラムをブロック単位で記憶する内部記憶部２２を備え、外部に設けられる外部記憶部３２に、内部記憶部２２に記憶すべき更新プログラムを格納する。処理部２１は、内部記憶部２２に書き込むべき更新プログラムを構成するプログラムブロックの数であるブロック数Ｎｂを取得する。そして、処理部２１は、内部記憶部２２の記憶領域および外部記憶部３２の記憶領域の各々におけるブロック数Ｎｂ分の記憶領域において、内部記憶部２２における各プログラムブロックのアドレスである複数の内部アドレスＡｉと外部記憶部３２における各プログラムブロックのアドレスである複数の外部アドレスＡｅとの少なくとも一部が異なり、かつ複数の内部アドレスＡｉと複数の外部アドレスＡｅとが１対１で対応するように所定の変換式を用いて外部アドレスＡｅを決定する変換処理を行う。
【０１６５】
このように、上記変換式を用いる構成により、外部記憶部３２に変換テーブルを保存することなく内部アドレスＡｉと外部アドレスＡｅとを対応付けることができるので、内部アドレスＡｉと外部アドレスＡｅとの対応関係が解析されてしまう可能性を低下させることができる。また、たとえば、受信した更新プログラムを内部記憶部２２に保存する場合における各プログラムブロックの順番と異なる順番で、当該各プログラムブロックを外部記憶部３２に保存することができるので、外部記憶部３２に保存された各プログラムブロックにより構成される更新プログラムの解析を困難にすることができる。したがって、外部の記憶部にプログラムを保存する構成において、当該プログラムのセキュリティをより高めることができる。
【０１６６】
また、本発明の実施の形態に係る通信装置では、処理部２１は、更新対象プログラムが更新されるたびに、更新されるべき更新プログラムのブロック数Ｎｂを取得して変換処理を行う。
【０１６７】
このような構成により、更新されるべき更新プログラムのブロック数Ｎｂに応じて変換処理の内容を変更することができるので、たとえば外部記憶部３２に保存された更新プログラムの解析をより困難にすることができる。
【０１６８】
また、本発明の実施の形態に係る通信装置では、処理部２１は、上記変換式におけるパラメータの値であって通信装置１０１において保存されている保存値ｋを用いて変換処理を行う。
【０１６９】
このように、保存値ｋを通信装置１０１に保存する構成により、たとえば、外部記憶部３２が不正アクセスされても、保存値ｋが漏えいしてしまうことを防ぐことができるので、内部アドレスＡｉと外部アドレスＡｅとの対応関係が解析されてしまう可能性をより低下させることができる。また、保存値ｋを保存するための記憶領域のサイズが小さいので、通信装置１０１における記憶領域を節約することができる。
【０１７０】
また、本発明の実施の形態に係る通信装置では、上記変換式は、上記式（１）である。
【０１７１】
このような構成により、保存値ｋおよびブロック数Ｎｂに応じて内部アドレスＡｉと外部アドレスＡｅとの対応関係を簡易に異ならせることができる。
【０１７２】
また、本発明の実施の形態に係る通信装置では、保存値ｋは、ブロック数Ｎｂより小さい素数であり、当該素数およびブロック数Ｎｂの間において１以外の公約数が存在しない。
【０１７３】
このような構成により、内部アドレスＡｉと外部アドレスＡｅとの対応関係を簡易に異ならせることができるとともに、対応関係を複雑にすることができる。
【０１７４】
上記実施の形態は、すべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は、上記説明ではなく特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【０１７５】
以上の説明は、以下に付記する特徴を含む。
【０１７６】
［付記１］
受信したプログラムをブロック単位で記憶する内部記憶部を備え、外部に設けられる外部記憶部に、前記内部記憶部に記憶すべき前記プログラムを格納するプログラム格納装置であって、
前記内部記憶部に書き込むべき前記プログラムを構成するブロックの数であるブロック数を取得し、前記内部記憶部の記憶領域および前記外部記憶部の記憶領域の各々における前記ブロック数分の記憶領域において、前記内部記憶部における各前記ブロックのアドレスである複数の第１アドレスと前記外部記憶部における各前記ブロックのアドレスである複数の第２アドレスとの少なくとも一部が異なり、かつ前記複数の第１アドレスと前記複数の第２アドレスとが１対１で対応するように所定の変換式を用いて前記第２アドレスを決定する変換処理を行う処理部を備え、
前記内部記憶部および前記外部記憶部は、フラッシュメモリであり、
前記各ブロックのサイズは、同じであり、
外部サーバは、前記各ブロックを先頭から順番に前記プログラム格納装置へ送信し、
前記処理部は、前記ブロックを前記外部サーバから受信するごとに、前記ブロックの受信の順番を前記第１アドレスとして取得し、前記変換式を用いて、取得した前記第１アドレスから前記第２アドレスを決定し、決定した前記第２アドレスの記憶領域に受信した前記ブロックを保存し、
前記処理部は、前記変換式を用いて前記第１アドレスから決定される前記第２アドレスの記憶領域に保存された前記ブロックが、前記内部記憶部における前記第１アドレスの記憶領域に保存されるように、前記外部記憶部に保存した各前記ブロックを前記内部記憶部に保存する、プログラム格納装置。
【符号の説明】
【０１７７】
１０  通信回路
１１  通信回路
１２  通信回路
２１  処理部
２２  内部記憶部
３２  外部記憶部
１０１  通信装置（プログラム格納装置）
１５１  スマートメータ
３０１  通信システム
【図１】
2018206006.tif 000006
【図２】
2018206006.tif 000007
【図３】
2018206006.tif 000008
【図４】
2018206006.tif 000009
【図５】
2018206006.tif 000010
【図６】
2018206006.tif 000011
【図７】
2018206006.tif 000012
【図８】
2018206006.tif 000013
【図９】
2018206006.tif 000014
【図１０】
2018206006.tif 000015