(57)【要約】【課題】情報処理装置に含まれる機器が記憶するプログラムコードや設定値等のデータを、信頼できる発信元から入手したものに制限することを課題とする。【解決手段】第１機器と、当該第１機器よりも耐タンパ性が高い第２機器とを含む情報処理装置であって、第１機器は、所定のデータに対して、第１暗号鍵を用いる第１暗号化処理と、第２暗号鍵を用いる第２暗号化処理と、を行うことにより得られた暗号化データを外部装置から受信し、暗号化データにおける第１暗号化処理により暗号化されたデータに対して、第１暗号化処理により暗号化されたデータを復号可能な第１復号鍵を用いた第１復号処理を行う。第２機器は、暗号化データにおける第２暗号化処理により暗号化されたデータに対して、第２暗号化処理により暗号化されたデータを復号可能な第２復号鍵を用いた第２復号処理を行う。【選択図】図４
2020150310.tif 000002
【特許請求の範囲】
【請求項１】
第１機器と、当該第１機器よりも耐タンパ性が高い第２機器とを含む情報処理装置であって、
前記第１機器は、
所定のデータに対して、第１暗号鍵を用いる第１暗号化処理と、第２暗号鍵を用いる第２暗号化処理と、を行うことにより得られた暗号化データを外部装置から受信する受信手段と、
前記受信した暗号化データにおける前記第１暗号化処理により暗号化されたデータに対して、前記第１暗号化処理により暗号化されたデータを復号可能な第１復号鍵を用いた第１復号処理を行う第１復号手段と、を備え、
前記第２機器は、
前記受信した暗号化データにおける前記第２暗号化処理により暗号化されたデータに対して、前記第２暗号化処理により暗号化されたデータを復号可能な第２復号鍵を用いた第２復号処理を行う第２復号手段を備えることを特徴とする情報処理装置。
【請求項２】
請求項１に記載の情報処理装置であって、
前記第１機器は、前記第１復号処理及び前記第２復号処理により得られた前記所定のデータを記憶するデータ記憶手段を更に備えることを特徴とする情報処理装置。
【請求項３】
請求項２に記載の情報処理装置であって、
前記暗号化データは、前記所定のデータにおける第１の部分に対して前記第２暗号化処理を行って得られた第１暗号化データと、前記所定のデータにおける前記第１の部分を除いた残りの部分である第２の部分に対して前記第１暗号化処理を行って得られた第２暗号化データと、で構成され、
前記第１復号手段は、前記受信した前記暗号化データにおける前記第２暗号化データに対して前記第１復号処理を行い、
前記第２復号手段は、前記受信した前記暗号化データにおける前記第１暗号化データに対して前記第２復号処理を行い、
前記データ記憶手段は、前記第２復号処理により得られた前記第１の部分と、前記第１復号処理により得られた前記第２の部分と、で構成される前記所定のデータを記憶することを特徴とする情報処理装置。
【請求項４】
請求項３に記載の情報処理装置であって、
前記受信手段は、前記第１暗号化データと前記第２の部分とで構成される一部暗号化データに対する第１生成処理により生成されたメッセージダイジェストと、秘密鍵と、を用いて生成されたデジタル署名を前記外部装置から更に受信し、
前記第２機器は、
前記秘密鍵に対応する公開鍵を用いて前記デジタル署名を復号することによりメッセージダイジェストを取得する取得手段と、
前記受信手段が受信した前記暗号化データにおける前記第１暗号化データと、前記第１復号処理により得られた前記第２の部分と、で構成される一部暗号化データに対する前記第１生成処理により生成されたメッセージダイジェストと、前記取得手段が取得したメッセージダイジェストと、を比較する第１比較手段を更に備え、
前記第２復号手段は、前記第１比較手段による比較の結果が一致であった場合に、前記第２復号処理を行うことを特徴とする情報処理装置。
【請求項５】
請求項２に記載の情報処理装置であって、
前記暗号化データは、前記所定のデータにおける第１の部分に対して前記第２暗号化処理を行って得られた第１暗号化データと、前記所定のデータにおける前記第１の部分を除いた残りの部分である第２の部分と、で構成される一部暗号化データに対して前記第１暗号化処理を行って得られたデータであり、
前記第１復号手段は、前記受信した前記暗号化データに対して前記第１復号処理を行い、
前記第２復号手段は、前記第１復号処理により得られた一部暗号化データにおける前記第１暗号化データに対して前記第２復号処理を行い、
前記データ記憶手段は、前記第２復号処理により得られた前記第１の部分と、前記第１復号処理により得られた前記一部暗号化データにおける前記第２の部分と、で構成される前記所定のデータを記憶することを特徴とする情報処理装置。
【請求項６】
請求項５に記載の情報処理装置であって、
前記受信手段は、前記第１暗号化データと前記第２の部分とで構成される一部暗号化データに対する第１生成処理により生成されたメッセージダイジェストと、秘密鍵と、を用いて生成されたデジタル署名を前記外部装置から更に受信し、
前記第２機器は、
前記秘密鍵に対応する公開鍵を用いて前記デジタル署名を復号することによりメッセージダイジェストを取得する取得手段と、
前記第１復号処理により得られた一部暗号化データに対する前記第１生成処理により生成されたメッセージダイジェストと、前記取得手段が取得したメッセージダイジェストと、を比較する第１比較手段を更に備え、
前記第２復号手段は、前記第１比較手段による比較の結果が一致であった場合に、前記第２復号処理を行うことを特徴とする情報処理装置。
【請求項７】
請求項４又は６に記載の情報処理装置であって、
前記所定のデータはプログラムコードであり、
前記第２機器は、
前記第１比較手段による比較の結果が一致であった場合に、前記比較したメッセージダイジェストを記憶するメッセージダイジェスト記憶手段を更に備え、
前記第１機器は、
前記プログラムコードを実行するプログラムコード実行手段と、
前記プログラムコード実行手段による前記プログラムコードの実行が初回である場合におけるその実行前に、前記データ記憶手段に記憶されている前記プログラムコードを、前記第２機器に送信するプログラムコード送信手段を更に備え、
前記第２機器は、
前記プログラムコード送信手段により送信されたプログラムコードを受信するプログラムコード受信手段と、
前記プログラムコード受信手段が受信したプログラムコードにおける前記第１の部分に対して前記第２暗号化処理を行うことにより第１暗号化データを取得し、当該第１暗号化データと、当該プログラムコードにおける前記第２の部分と、で構成される一部暗号化データに対する前記第１生成処理によりメッセージダイジェストを生成するメッセージダイジェスト生成手段と、
前記メッセージダイジェスト記憶手段が記憶するメッセージダイジェストと、前記メッセージダイジェスト生成手段が生成したメッセージダイジェストと、を比較する第２比較手段と、
前記第２比較手段による比較の結果が一致であった場合に、その旨を前記第１機器に通知する通知手段を更に備え、
前記プログラムコード実行手段は、前記プログラムコード送信手段が前記プログラムコードを送信した場合には、前記第２比較手段による比較の結果が一致であった旨の通知を受けた後に前記プログラムコードを実行することを特徴とする情報処理装置。
【請求項８】
請求項７に記載の情報処理装置であって、
前記第２機器は、
前記第２比較手段による比較の結果が一致であった場合に、前記プログラムコード受信手段が受信したプログラムコードに対する第２生成処理によりチェックコードを生成するチェックコード生成手段と、
前記チェックコード生成手段により生成されたチェックコードを記憶するチェックコード記憶手段を更に備え、
前記第１機器は、
前記プログラムコード実行手段による前記プログラムコードの実行が２回目以降である場合におけるその実行前に、前記データ記憶手段に記憶されている前記プログラムコードに対する前記第２生成処理によりチェックコードを生成し、前記第２機器に送信するチェックコード送信手段を更に備え、
前記第２機器は、
前記チェックコード送信手段により送信されたチェックコードを受信するチェックコード受信手段と、
前記チェックコード受信手段が受信したチェックコードと、前記チェックコード記憶手段が記憶するチェックコードと、を比較する第３比較手段と、
前記第３比較手段による比較の結果が一致であった場合に、その旨を前記第１機器に通知する第２通知手段を更に備え、
前記プログラムコード実行手段は、前記チェックコード送信手段が前記チェックコードを送信した場合には、前記第３比較手段による比較の結果が一致であった旨の通知を受けた後に前記プログラムコードを実行することを特徴とする情報処理装置。
【請求項９】
請求項１乃至８の何れか一項に記載の情報処理装置であって、
前記第１機器は、非セキュアエレメントであり、
前記第２機器は、セキュアエレメントであることを特徴とする情報処理装置。
【請求項１０】
請求項１乃至９の何れか一項に記載の情報処理装置であって、
前記第２機器は、前記第２復号鍵を記憶する鍵記憶手段を更に備えることを特徴とする情報処理装置。
【請求項１１】
請求項１乃至１０の何れか一項に記載の情報処理装置であって、
前記所定のデータはプログラムコードであり、
前記第１の部分は、前記プログラムコードにおける先頭の実行アドレスを特定するためのアドレス情報を含むことを特徴とする情報処理装置。
【請求項１２】
第１機器と、当該第１機器よりも耐タンパ性が高い第２機器を含む情報処理装置における暗号化データの復号方法であって、
前記第１機器が、所定のデータに対して、第１暗号鍵を用いる第１暗号化処理と、第２暗号鍵を用いる第２暗号化処理と、を行うことにより得られた暗号化データにおける前記第１暗号化処理により暗号化されたデータに対して、前記第１暗号化処理により暗号化されたデータを復号可能な第１復号鍵を用いた第１復号処理を行う第１復号工程と、
前記第２機器が、前記暗号化データにおける前記第２暗号化処理により暗号化されたデータに対して、前記第２暗号化処理により暗号化されたデータを復号可能な第２復号鍵を用いた第２復号処理を行う第２復号工程と、
を含むことを特徴とする暗号化データの復号方法。
【請求項１３】
所定のデータに対して、第１暗号鍵を用いる第１暗号化処理と、第２暗号鍵を用いる第２暗号化処理と、を行うことにより得られた暗号化データを外部装置から受信する受信手段と、前記受信した暗号化データにおける前記第１暗号化処理により暗号化されたデータに対して、前記第１暗号化処理により暗号化されたデータを復号可能な第１復号鍵を用いた第１復号処理を行う第１復号手段と、を備える所定の機器よりも耐タンパ性が高い電子機器であって、
前記所定の機器から、前記暗号化データにおける前記第２暗号化処理により暗号化されたデータを受け取る受取手段と、
当該受取手段が受け取った前記第２暗号化処理により暗号化されたデータに対して、前記第２暗号化処理により暗号化されたデータを復号可能な第２復号鍵を用いた第２復号処理を行う第２復号手段と、
前記第２復号処理により取得したデータを前記所定の機器に受け渡す受渡手段と、
を備えることを特徴とする電子機器。
【発明の詳細な説明】
【技術分野】
【０００１】
ＩｏＴ（Internet of Things）機器等の情報処理装置の技術分野に関する。
【背景技術】
【０００２】
ＩｏＴ機器は、インターネットを介して、ＩｏＴ機器が備えるセンサーで測定したデータをサーバで取得すること、ＩｏＴ機器をサーバにより遠隔管理することなどを目的として利用される。ＩｏＴ機器はインターネットを介してサーバと接続されるため安全性が求められることから、ＩｏＴ機器にセキュアエレメント（Secure Element）を設けて、鍵などの秘密情報を管理する動きがある。特許文献１には、鍵情報を保持するセキュリティチップとサーバとの間で安全な通信経路を確立して秘密情報を送受信するシステムが開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００６−１２９１４３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
また、ＩｏＴ機器の普及に伴い、ＩｏＴ機器が攻撃対象になることが増えており、コンピュータウィルスが不正にインストールされることなどが社会問題になっている。また、ＩｏＴ機器に設定されている値が改竄されて異常な動作をすることも懸念される。その一方で、ＩｏＴ機器に使用されるマイコン等の機器はＩｏＴ機器を制御するために最低限必要な性能しか有しておらず、ＰＣ（Personal Computer）のように常駐のウイルス対策ソフト等を導入することは現実的ではないという問題がある。
【０００５】
こうした事情に鑑み、ＩｏＴ機器等の情報処理装置に含まれるマイコン等の機器が記憶するプログラムコードや設定値等のデータを、信頼できる発信元から入手したものに制限することができる当該情報処理装置等を提供することを課題とする。
【課題を解決するための手段】
【０００６】
上記課題を解決するために、請求項１に記載の発明は、第１機器と、当該第１機器よりも耐タンパ性が高い第２機器とを含む情報処理装置であって、前記第１機器は、所定のデータに対して、第１暗号鍵を用いる第１暗号化処理と、第２暗号鍵を用いる第２暗号化処理と、を行うことにより得られた暗号化データを外部装置から受信する受信手段と、前記受信した暗号化データにおける前記第１暗号化処理により暗号化されたデータに対して、前記第１暗号化処理により暗号化されたデータを復号可能な第１復号鍵を用いた第１復号処理を行う第１復号手段と、を備え、前記第２機器は、前記受信した暗号化データにおける前記第２暗号化処理により暗号化されたデータに対して、前記第２暗号化処理により暗号化されたデータを復号可能な第２復号鍵を用いた第２復号処理を行う第２復号手段を備えることを特徴とする。
【０００７】
請求項２に記載の発明は、請求項１に記載の情報処理装置であって、前記第１機器は、前記第１復号処理及び前記第２復号処理により得られた前記所定のデータを記憶するデータ記憶手段を更に備えることを特徴とする。
【０００８】
請求項３に記載の発明は、請求項２に記載の情報処理装置であって、前記暗号化データは、前記所定のデータにおける第１の部分に対して前記第２暗号化処理を行って得られた第１暗号化データと、前記所定のデータにおける前記第１の部分を除いた残りの部分である第２の部分に対して前記第１暗号化処理を行って得られた第２暗号化データと、で構成され、前記第１復号手段は、前記受信した前記暗号化データにおける前記第２暗号化データに対して前記第１復号処理を行い、前記第２復号手段は、前記受信した前記暗号化データにおける前記第１暗号化データに対して前記第２復号処理を行い、前記データ記憶手段は、前記第２復号処理により得られた前記第１の部分と、前記第１復号処理により得られた前記第２の部分と、で構成される前記所定のデータを記憶することを特徴とする。
【０００９】
請求項４に記載の発明は、請求項３に記載の情報処理装置であって、前記受信手段は、前記第１暗号化データと前記第２の部分とで構成される一部暗号化データに対する第１生成処理により生成されたメッセージダイジェストと、秘密鍵と、を用いて生成されたデジタル署名を前記外部装置から更に受信し、前記第２機器は、前記秘密鍵に対応する公開鍵を用いて前記デジタル署名を復号することによりメッセージダイジェストを取得する取得手段と、前記受信手段が受信した前記暗号化データにおける前記第１暗号化データと、前記第１復号処理により得られた前記第２の部分と、で構成される一部暗号化データに対する前記第１生成処理により生成されたメッセージダイジェストと、前記取得手段が取得したメッセージダイジェストと、を比較する第１比較手段を更に備え、前記第２復号手段は、前記第１比較手段による比較の結果が一致であった場合に、前記第２復号処理を行うことを特徴とする。
【００１０】
請求項５に記載の発明は、請求項２に記載の情報処理装置であって、前記暗号化データは、前記所定のデータにおける第１の部分に対して前記第２暗号化処理を行って得られた第１暗号化データと、前記所定のデータにおける前記第１の部分を除いた残りの部分である第２の部分と、で構成される一部暗号化データに対して前記第１暗号化処理を行って得られたデータであり、前記第１復号手段は、前記受信した前記暗号化データに対して前記第１復号処理を行い、前記第２復号手段は、前記第１復号処理により得られた一部暗号化データにおける前記第１暗号化データに対して前記第２復号処理を行い、前記データ記憶手段は、前記第２復号処理により得られた前記第１の部分と、前記第１復号処理により得られた前記一部暗号化データにおける前記第２の部分と、で構成される前記所定のデータを記憶することを特徴とする。
【００１１】
請求項６に記載の発明は、請求項５に記載の情報処理装置であって、前記受信手段は、前記第１暗号化データと前記第２の部分とで構成される一部暗号化データに対する第１生成処理により生成されたメッセージダイジェストと、秘密鍵と、を用いて生成されたデジタル署名を前記外部装置から更に受信し、前記第２機器は、前記秘密鍵に対応する公開鍵を用いて前記デジタル署名を復号することによりメッセージダイジェストを取得する取得手段と、前記第１復号処理により得られた一部暗号化データに対する前記第１生成処理により生成されたメッセージダイジェストと、前記取得手段が取得したメッセージダイジェストと、を比較する第１比較手段を更に備え、前記第２復号手段は、前記第１比較手段による比較の結果が一致であった場合に、前記第２復号処理を行うことを特徴とする。
【００１２】
請求項７に記載の発明は、請求項４又は６に記載の情報処理装置であって、前記所定のデータはプログラムコードであり、前記第２機器は、前記第１比較手段による比較の結果が一致であった場合に、前記比較したメッセージダイジェストを記憶するメッセージダイジェスト記憶手段を更に備え、前記第１機器は、前記プログラムコードを実行するプログラムコード実行手段と、前記プログラムコード実行手段による前記プログラムコードの実行が初回である場合におけるその実行前に、前記データ記憶手段に記憶されている前記プログラムコードを、前記第２機器に送信するプログラムコード送信手段を更に備え、前記第２機器は、前記プログラムコード送信手段により送信されたプログラムコードを受信するプログラムコード受信手段と、前記プログラムコード受信手段が受信したプログラムコードにおける前記第１の部分に対して前記第２暗号化処理を行うことにより第１暗号化データを取得し、当該第１暗号化データと、当該プログラムコードにおける前記第２の部分と、で構成される一部暗号化データに対する前記第１生成処理によりメッセージダイジェストを生成するメッセージダイジェスト生成手段と、前記メッセージダイジェスト記憶手段が記憶するメッセージダイジェストと、前記メッセージダイジェスト生成手段が生成したメッセージダイジェストと、を比較する第２比較手段と、前記第２比較手段による比較の結果が一致であった場合に、その旨を前記第１機器に通知する通知手段を更に備え、前記プログラムコード実行手段は、前記プログラムコード送信手段が前記プログラムコードを送信した場合には、前記第２比較手段による比較の結果が一致であった旨の通知を受けた後に前記プログラムコードを実行することを特徴とする。
【００１３】
請求項８に記載の発明は、請求項７に記載の情報処理装置であって、前記第２機器は、前記第２比較手段による比較の結果が一致であった場合に、前記プログラムコード受信手段が受信したプログラムコードに対する第２生成処理によりチェックコードを生成するチェックコード生成手段と、前記チェックコード生成手段により生成されたチェックコードを記憶するチェックコード記憶手段を更に備え、前記第１機器は、前記プログラムコード実行手段による前記プログラムコードの実行が２回目以降である場合におけるその実行前に、前記データ記憶手段に記憶されている前記プログラムコードに対する前記第２生成処理によりチェックコードを生成し、前記第２機器に送信するチェックコード送信手段を更に備え、前記第２機器は、前記チェックコード送信手段により送信されたチェックコードを受信するチェックコード受信手段と、前記チェックコード受信手段が受信したチェックコードと、前記チェックコード記憶手段が記憶するチェックコードと、を比較する第３比較手段と、前記第３比較手段による比較の結果が一致であった場合に、その旨を前記第１機器に通知する第２通知手段を更に備え、前記プログラムコード実行手段は、前記チェックコード送信手段が前記チェックコードを送信した場合には、前記第３比較手段による比較の結果が一致であった旨の通知を受けた後に前記プログラムコードを実行することを特徴とする。
【００１４】
請求項９に記載の発明は、請求項１乃至８の何れか一項に記載の情報処理装置であって、前記第１機器は、非セキュアエレメントであり、前記第２機器は、セキュアエレメントであることを特徴とする。
【００１５】
請求項１０に記載の発明は、請求項１乃至９の何れか一項に記載の情報処理装置であって、前記第２機器は、前記第２復号鍵を記憶する鍵記憶手段を更に備えることを特徴とする。
【００１６】
請求項１１に記載の発明は、請求項１乃至１０の何れか一項に記載の情報処理装置であって、前記所定のデータはプログラムコードであり、前記第１の部分は、前記プログラムコードにおける先頭の実行アドレスを特定するためのアドレス情報を含むことを特徴とする。
【００１７】
請求項１２に記載の発明は、第１機器と、当該第１機器よりも耐タンパ性が高い第２機器を含む情報処理装置における暗号化データの復号方法であって、前記第１機器が、所定のデータに対して、第１暗号鍵を用いる第１暗号化処理と、第２暗号鍵を用いる第２暗号化処理と、を行うことにより得られた暗号化データにおける前記第１暗号化処理により暗号化されたデータに対して、前記第１暗号化処理により暗号化されたデータを復号可能な第１復号鍵を用いた第１復号処理を行う第１復号工程と、前記第２機器が、前記暗号化データにおける前記第２暗号化処理により暗号化されたデータに対して、前記第２暗号化処理により暗号化されたデータを復号可能な第２復号鍵を用いた第２復号処理を行う第２復号工程と、を含むことを特徴とする。
【００１８】
請求項１３に記載の発明は、所定のデータに対して、第１暗号鍵を用いる第１暗号化処理と、第２暗号鍵を用いる第２暗号化処理と、を行うことにより得られた暗号化データを外部装置から受信する受信手段と、前記受信した暗号化データにおける前記第１暗号化処理により暗号化されたデータに対して、前記第１暗号化処理により暗号化されたデータを復号可能な第１復号鍵を用いた第１復号処理を行う第１復号手段と、を備える所定の機器よりも耐タンパ性が高い電子機器であって、前記所定の機器から、前記暗号化データにおける前記第２暗号化処理により暗号化されたデータを受け取る受取手段と、当該受取手段が受け取った前記第２暗号化処理により暗号化されたデータに対して、前記第２暗号化処理により暗号化されたデータを復号可能な第２復号鍵を用いた第２復号処理を行う第２復号手段と、前記第２復号処理により取得したデータを前記所定の機器に受け渡す受渡手段と、を備えることを特徴とする。
【発明の効果】
【００１９】
本発明によれば、暗号化データを外部機器から受信した場合に、第１機器が当該暗号化データにおける第１暗号化処理により暗号化されたデータに対して、第１復号鍵を用いた第１復号処理を行い、第２機器が当該暗号化データにおける第２暗号化処理により暗号化されたデータに対して第２復号鍵を用いた第２復号処理を行う。すなわち、信頼できる発信元以外の発信元から入手したデータは適切に復号できないため、情報処理装置に含まれる機器は暗号化データから正常に復号できたデータのみを記憶することにより、記憶するデータを信頼できる発信元から入手したものに制限することができる。
【図面の簡単な説明】
【００２０】
【図１】第１実施形態における通信システム構成例を示す図である。
【図２】（Ａ）は第１実施形態におけるＩｏＴ端末１の構成例を示すブロック図であり、（Ｂ）は第１実施形態におけるサーバＳの構成例を示すブロック図である。
【図３】第１実施形態におけるプログラムコードの暗号化の概要を示す図である。
【図４】第１実施形態におけるプログラムコードの暗号化及び復号の流れの概要を示す図である。
【図５】第１実施形態におけるサーバＳによる処理例を示すフローチャートである
【図６】第１実施形態におけるプログラムコードインストール時のサーバＳとＩｏＴ端末１の処理例を示すフローチャートである。
【図７】第１実施形態におけるプログラムコード初回実行時のＩｏＴ端末１の処理例を示すフローチャートである。
【図８】第１実施形態におけるプログラムコード２回目以降実行時のＩｏＴ端末１の処理例を示すフローチャートである。
【図９】第２実施形態におけるプログラムコードの暗号化の概要を示す図である。
【図１０】第２実施形態におけるプログラムコードの暗号化及び復号の流れの概要を示す図である。
【図１１】第２実施形態におけるサーバＳによる処理例を示すフローチャートである。
【図１２】第２実施形態におけるプログラムコードインストール時のサーバＳとＩｏＴ端末１の処理例を示すフローチャートである。
【発明を実施するための形態】
【００２１】
［１．第１実施形態］
以下、図面を参照して本発明の第１実施形態について詳細に説明する。第１実施形態は、インターネットなどのネットワークを介してサーバと接続するＩｏＴ端末に対して本発明を適用した場合の実施形態である。
【００２２】
図１に示すように、通信システムはサーバＳとＩｏＴ端末１を備える。ＩｏＴ端末１は、自らが実行するプログラムコード（パッチファイルを含む）をサーバＳから受信する。サーバＳとＩｏＴ端末１は、暗号化や復号に使用する鍵をそれぞれが記憶しており、サーバＳはプログラムコードを暗号化してＩｏＴ端末１に送信し、ＩｏＴ端末１はこれを復号した上で記憶し、実行する。
【００２３】
［１．１．ＩｏＴ端末１の構成］
図２（Ａ）を用いて、ＩｏＴ端末１の構成について説明する。図２（Ａ）は、ＩｏＴ端末１のハードウェア構成例を示す図である。ＩｏＴ端末１は、マイコン１１、通信部１２、入力部１３、出力部１４及びセキュアエレメント２を備えて構成される。
【００２４】
マイコン１１は、ＣＰＵ（Central Processing Unit）１１１、ＲＡＭ（Random Access Memory）１１２、ＲＯＭ（Read Only Memory）１１３、Ｉ／Ｏ回路１１４及び不揮発性メモリ１１５を含んで構成され、ＩｏＴ端末１全体を制御する。例えば、マイコン１１は、入力部１３に入力された入力データや入力情報に基づいて処理を行い、出力部１４に出力データや出力情報を出力する。通信部１２は、無線通信のためのアンテナを有し、ネットワークＮを介してサーバＳと通信を行うための処理を行う。入力部１３は、マイコン１１に入力データや入力情報を入力する。例えば、入力部１３がセンサーであれば検出データを入力し、タイマーであれば一定時間が経過したことを示す入力データを入力し、入力部１３がキーボードやボタンなどの操作部であれば、操作部に対する操作内容を示す入力情報を入力する。出力部１４は、マイコン１１から出力された出力データや出力情報に基づいて出力を行う。例えば、出力部１４がＬＥＤ（Light Emitting Diode）であれば発光し、音声出力装置であれば音声を出力する。
【００２５】
ＲＡＭ１１２には、例えばＯＳ（Operating System）や各種アプリケーションが機能する上で一時的に必要となるデータが記憶される。ＲＯＭ１１３には、ＯＳ、各種アプリケーション等が記憶される。Ｉ／Ｏ回路１１４は、セキュアエレメント２との通信インターフェイスを担う。不揮発性メモリ１１５には、例えばフラッシュメモリ又は「Electrically Erasable Programmable Read-Only Memory」などを適用することができる。不揮発性メモリ１１５は、後述する処理を実行するためのプログラム等を記憶する。
【００２６】
セキュアエレメント２は、ＣＰＵ２１、ＲＡＭ２２、不揮発性メモリ２３及びＩ／Ｏ回路２４を備えて構成される。セキュアエレメント２は、高い耐タンパ性を有する。耐タンパ性が高いとは、暗号化、復号、署名検証のための鍵をはじめとする秘密情報や秘密情報の処理メカニズムを外部から不当に観測・改変することや秘密情報を処理するメカニズムを不当に改変することの困難さが極めて高いことを意味する。なお、本実施形態において、セキュアエレメント２は非セキュアエレメントであるマイコン１１よりも耐タンパ性が高い。
【００２７】
ＲＡＭ２２には、例えばＯＳ、各種アプリケーションが機能する上で一時的に必要となるデータが記憶される。
【００２８】
不揮発性メモリ２３には、例えばフラッシュメモリ又は「Electrically Erasable Programmable Read-Only Memory」などを適用することができる。不揮発性メモリ２３は、ＯＳ、各種アプリケーション、後述する処理を実行するためのプログラム、鍵等を記憶する。
【００２９】
Ｉ／Ｏ回路２４は、マイコン１１との通信インターフェイスを担う。
【００３０】
［１．２．サーバ装置Ｓの構成］
次に、図２（Ｂ）を用いて、サーバＳの構成について説明する。図２（Ｂ）に示すように、サーバＳは、制御部３１、記憶部３２、通信部３３、表示部３４及び操作部３５を含んで構成されている。
【００３１】
記憶部３２は、例えばＨＤＤ（Hard Disk Drive）やＳＳＤ(Solid State Drive)等により構成されており、ＯＳや、後述する処理を実行するためのプログラム、その他各種データ及び鍵等を記憶する。
【００３２】
通信部３３は、ＩｏＴ端末１との通信を制御する。
【００３３】
表示部３４は、例えば、液晶ディスプレイ等により構成されており、文字や画像等の情報を表示するようになっている。
【００３４】
操作部３５は、例えば、キーボード、マウス等により構成されており、オペレータからの操作指示を受け付け、その指示内容を指示信号として制御部３１に出力するようになっている。
【００３５】
制御部３１は、制御部３１全体を制御するＣＰＵと、制御部３１を制御する制御プログラム等が予め記憶されているＲＯＭと、各種データを一時的に格納するＲＡＭと、により構成されている。そして、ＣＰＵが、ＲＯＭや記憶部３２に記憶された各種プログラムを読み出し実行することにより各種機能を実現する。
【００３６】
［１．３．プログラムコードのインストールからインストール後の処理］
次に、図３−図８を用いて、サーバＳがＩｏＴ端末１に暗号化したプログラムコードを送信し、ＩｏＴ端末１がこれを復号してプログラムコードをインストールするまでの処理と、ＩｏＴ端末１がインストールしたプログラムコードを実行する際の処理について説明する。
【００３７】
なお、サーバＳとＩｏＴ端末１は、共通鍵暗号方式の鍵のペア（共通鍵のペア）を２組と、公開鍵暗号方式の鍵のペア（公開鍵と秘密鍵のペア）を１組、それぞれ共有する。具体的には、サーバＳが共通鍵１（「鍵１」という場合がある）と共通鍵３（「鍵３」という場合がある）と秘密鍵２（「鍵２」という場合がある）を保持し、ＩｏＴ端末１が共通鍵１（「鍵１」という場合がある）と共通鍵３（「鍵３」という場合がある）と公開鍵２（「鍵２」という場合がある）を保持する。すなわち、サーバＳが、自らが保持する鍵１（又は鍵３）を用いて暗号化したデータを、ＩｏＴ端末１は自らが保持する鍵１（又は鍵３）を用いて復号することができる。また、サーバＳが、自らが保持する鍵２を用いて暗号化したデータを、ＩｏＴ端末１は自らが保持する鍵２を用いて復号することができる。更に、サーバＳが、自らが保持する鍵２（秘密鍵）を用いて生成したデジタル署名を、ＩｏＴ端末１は自らが保持する鍵２（公開鍵）を用いて検証することができる。なお、サーバＳは鍵１、鍵２、鍵３を記憶部３２に記憶し、ＩｏＴ端末１は鍵１、鍵２、鍵３をセキュアエレメント２の不揮発性メモリ２３に記憶する。また、サーバＳ及びＩｏＴ端末１がそれぞれ記憶する鍵１、鍵２、鍵３はセッションキー（一定時間有効な鍵）である。
【００３８】
［１．３．１．サーバＳによる暗号化］
まず、図３を用いて、サーバＳの制御部３１がＩｏＴ端末１にインストールさせるプログラムコードを暗号化する流れについて説明する。
【００３９】
制御部３１は、ＩｏＴ端末１がインストールするプログラムコード３００を暗号化するに際し、プログラムコード３００をプログラムコード（ＰＡＲＴ１）３０１とプログラムコード（ＰＡＲＴ２）３０２に分割する。分割の方法や分割する際のデータサイズの割合は任意である。
【００４０】
次に、制御部３１は、プログラムコード（ＰＡＲＴ１）３０１を鍵１（共通鍵）で暗号化し、暗号化プログラムコード（ＰＡＲＴ１）３０１Ｅを生成する。
【００４１】
次に、制御部３１は、暗号化プログラムコード（ＰＡＲＴ１）３０１Ｅと、プログラムコード（ＰＡＲＴ２）３０２を合体させて一部暗号化プログラムコード３００Ｈを生成する。次いで、制御部３１は、一部暗号化プログラムコード３００Ｈと、所定の暗号的ハッシュ関数を用いてメッセージダイジェスト（ハッシュ値）３１０を取得する。
【００４２】
次に、制御部３１は、メッセージダイジェストを鍵２（秘密鍵）で暗号化することによりデジタル署名３１１を生成する。
【００４３】
また、制御部３１は、プログラムコード（ＰＡＲＴ２）３０２を鍵３（共通鍵）で暗号化し、暗号化プログラムコード（ＰＡＲＴ２）３０２Ｅを生成する。
【００４４】
次に、制御部３１は、暗号化プログラムコード（ＰＡＲＴ１）３０１Ｅと、暗号化プログラムコード（ＰＡＲＴ２）３０２Ｅを合体させて暗号化データ３００Ｅを生成する。
【００４５】
なお、後述するように、暗号化プログラムコード（ＰＡＲＴ２）３０２Ｅは、ＩｏＴ端末１におけるマイコン１１により復号され、暗号化プログラムコード（ＰＡＲＴ１）３０１Ｅは、ＩｏＴ端末１におけるセキュアエレメント２により復号される。プログラムコード３００における重要な部分は、マイコン１１より耐タンパ性の高いセキュアエレメント２に復号させることが好ましい。そこで、プログラムコード３００を分割する際には、当該重要な部分がプログラムコード（ＰＡＲＴ１）３０１に含まれるように分割することとする。プログラムコード３００における重要な部分とは、例えば、プログラムコードにおける先頭の実行アドレスを特定するためのアドレス情報が記述されている部分である。一般的にアドレス情報は、プログラムコードの先頭部分に記述されているため、当該部分がプログラムコード（ＰＡＲＴ１）３０１に含まれるようにプログラムコード３００を分割するのが好ましい。
【００４６】
［１．３．２．ＩｏＴ機器１によるプログラムコードのインストール］
次に、図４を用いて、ＩｏＴ機器１がサーバＳから暗号化プログラムコード３００Ｅをダウンロードし、マイコン１１の不揮発性メモリ１１５にインストールする（記憶させる）までの流れについて説明する。
【００４７】
ＩｏＴ機器１のマイコン１１（ＣＰＵ１１１）は、サーバＳから暗号化プログラムコード３００Ｅとデジタル署名３１１を受信すると、暗号化プログラムコード（ＰＡＲＴ１）３０１Ｅと暗号化プログラムコード（ＰＡＲＴ２）３０２Ｅとに分割する。なお、暗号化プログラムコード３００Ｅやプログラムコード３００における何れの部分が暗号化プログラムコード（ＰＡＲＴ１）３０１Ｅやプログラムコード（ＰＡＲＴ１）３０１であるかは、予めサーバＳと取り決めておいてもよいし、別途、それを示す情報をサーバＳから受信しておくこととしてもよい。
【００４８】
次に、マイコン１１（ＣＰＵ１１１）は、暗号化プログラムコード（ＰＡＲＴ２）３０２Ｅを鍵３（共通鍵）で復号し、プログラムコード（ＰＡＲＴ２）３０２を取得する。なお、鍵３（共通鍵）は、セキュアエレメント２から取得しておき、復号が完了したら削除する。
【００４９】
次に、マイコン１１（ＣＰＵ１１１）は、暗号化プログラムコード（ＰＡＲＴ１）３０１Ｅとプログラムコード（ＰＡＲＴ２）３０２（すなわち、一部暗号化プログラムコード３００Ｈ）から、所定の暗号的ハッシュ関数を用いてメッセージダイジェスト（ハッシュ値）３１０Ｓを取得する。
【００５０】
次に、マイコン１１（ＣＰＵ１１１）は、暗号化プログラムコード（ＰＡＲＴ１）３０１Ｅと、メッセージダイジェスト３１０Ｓと、デジタル署名３１１と、をセキュアエレメント２に受け渡す。
【００５１】
セキュアエレメント２（制御部２１）は、暗号化プログラムコード（ＰＡＲＴ１）３０１Ｅと、メッセージダイジェスト３１０Ｓと、デジタル署名３１１と、を受け取ると、デジタル署名３１１を鍵２（公開鍵）（不揮発性メモリ２３に記憶されている鍵２）で復号し、メッセージダイジェスト３１０を取得する。
【００５２】
次に、セキュアエレメント２（制御部２１）は、メッセージダイジェスト３１０Ｓとメッセージダイジェスト３１０を比較検証する。セキュアエレメント２（制御部２１）は、メッセージダイジェスト３１０Ｓとメッセージダイジェスト３１０が一致した場合には検証成功と判定し、一致しなかった場合には検証失敗と判定する。
【００５３】
セキュアエレメント２（制御部２１）は、検証成功と判定した場合には、暗号化プログラムコード（ＰＡＲＴ１）３０１Ｅを鍵３（共通鍵）（不揮発性メモリ２３に記憶されている鍵３）で復号し、プログラムコード（ＰＡＲＴ１）３０１を取得する。
【００５４】
次に、セキュアエレメント２（制御部２１）は、プログラムコード（ＰＡＲＴ１）３０１をマイコン１１に受け渡す。
【００５５】
マイコン１１（ＣＰＵ１１１）は、プログラムコード（ＰＡＲＴ１）３０１をセキュアエレメント２から受け取ると、プログラムコード（ＰＡＲＴ１）３０１とプログラムコード（ＰＡＲＴ２）３０２を合体させたプログラムコード３００を不揮発性メモリ１１５にインストールする（記憶させる）。
【００５６】
［１．３．３．サーバＳによる暗号化処理］
まず、図５のフローチャートを用いて、サーバＳの制御部３１による暗号化処理について説明する。
【００５７】
サーバＳの制御部３１は、プログラムコード３００をプログラムコード（ＰＡＲＴ１）３０１とプログラムコード（ＰＡＲＴ２）３０２に分割する（ステップＳ１０１）。
【００５８】
次に、制御部３１は、プログラムコード（ＰＡＲＴ１）３０１を鍵１（共通鍵）で暗号化し、暗号化プログラムコード（ＰＡＲＴ１）３０１Ｅを取得する（ステップＳ１０２）。
【００５９】
次に、制御部３１は、暗号化プログラムコード（ＰＡＲＴ１）３０１Ｅとプログラムコード（ＰＡＲＴ２）３０２からなる一部暗号化プログラムコード３００Ｈから所定の暗号的ハッシュ関数を用いてメッセージダイジェスト３１０を算出する（ステップＳ１０３）。
【００６０】
次に、制御部３１は、鍵２（秘密鍵）を用いて、ステップＳ１０３の処理で算出したメッセージダイジェスト３１０を暗号化することによりデジタル署名３１１を生成する（ステップＳ１０４）。
【００６１】
次に、制御部３１は、プログラムコード（ＰＡＲＴ２）３０２を鍵３（共通鍵）で暗号化し、暗号化プログラムコード（ＰＡＲＴ２）３０２Ｅを取得する（ステップＳ１０５）。
【００６２】
次に、制御部３１は、ステップＳ１０２の処理で取得した暗号化プログラムコード（ＰＡＲＴ１）３０１ＥとステップＳ１０５の処理で取得した暗号化プログラムコード（ＰＡＲＴ２）３０２Ｅからなる暗号化プログラムコード３００Ｅと、ステップＳ１０４の処理で生成したデジタル署名３１１と、をＩｏＴ端末１に送信し（ステップＳ１０６）、暗号化処理を終了する。
【００６３】
［１．３．４．ＩｏＴ端末１によるインストール処理］
まず、図６のフローチャートを用いて、ＩｏＴ端末１のマイコン１１とセキュアエレメント２によるインストール処理について説明する。
【００６４】
マイコン１１（ＣＰＵ１１１）は、サーバＳから暗号化プログラムコード３００Ｅとデジタル署名３１１と、を受信すると（ステップＳ２０１）、セキュアエレメント２にその旨を通知する。これに対してセキュアエレメント２（ＣＰＵ２１）は、不揮発性メモリ２３に記憶されている鍵３（共通鍵）をマイコン１１に送信する（ステップＳ３０１）。
【００６５】
マイコン１１（ＣＰＵ１１１）は、セキュアエレメント２から鍵３（共通鍵）を受信すると（ステップＳ２０２）、暗号化プログラムコード３００Ｅにおける暗号化プログラムコード（ＰＡＲＴ２）３０２Ｅを鍵３で復号し、プログラムコード（ＰＡＲＴ２）３０２を取得する。そして、暗号化プログラムコード３００Ｅにおける暗号化プログラムコード（ＰＡＲＴ１）３０１Ｅとプログラムコード（ＰＡＲＴ２）３０２からなる一部暗号化プログラムコード３００Ｈを取得する（ステップＳ２０３）。
【００６６】
次に、マイコン１１（ＣＰＵ１１１）は、ステップＳ２０３の処理で取得した一部暗号化プログラムコード３００Ｈから、所定の暗号的ハッシュ関数（図５のステップＳ１０３の処理でサーバＳの制御部３１が用いたのと同じ関数）を用いてメッセージダイジェスト３１０Ｓを算出する（ステップＳ２０４）。
【００６７】
次に、マイコン１１（ＣＰＵ１１１）は、暗号化プログラムコード３００Ｅにおける暗号化プログラムコード（ＰＡＲＴ１）３０１Ｅと、ステップＳ２０４の処理で算出したメッセージダイジェスト３１０Ｓと、サーバＳから受信したデジタル署名３１１と、をセキュアエレメント２に送信する（ステップＳ２０５）。
【００６８】
セキュアエレメント２（ＣＰＵ２１）は、マイコン１１から暗号化プログラムコード（ＰＡＲＴ１）３０１Ｅと、メッセージダイジェスト３１０Ｓと、デジタル署名３１１と、を受信すると（ステップＳ３０２）、次いで、鍵２（公開鍵）を用いてデジタル署名３１１を復号することにより、デジタル署名３１１からメッセージダイジェスト３１０を抽出する（ステップＳ３０３）。
【００６９】
セキュアエレメント２（ＣＰＵ２１）は、ステップＳ３０２の処理で受信したメッセージダイジェスト３１０Ｓと、ステップＳ３０３の処理で抽出したメッセージダイジェスト３１０とを比較する（ステップＳ３０４）。セキュアエレメント２（ＣＰＵ２１）は、比較の結果、一致しないと判定した場合には（ステップＳ３０５：ＮＯ）、インストール処理を終了する。なお、セキュアエレメント２（ＣＰＵ２１）は、エラー処理を行ってからインストール処理を終了することとしてもよい。例えば、署名検証に失敗したことを示すエラー通知をマイコン１１に送信することとしてもよい。マイコン１１は、エラー通知をＩｏＴ端末１から受信した場合には、インストール処理を終了することとし、更に、インストール処理に失敗したことをサーバＳに通知することとしてもよい。
【００７０】
一方、セキュアエレメント２（ＣＰＵ２１）は、メッセージダイジェストの比較の結果、一致したと判定した場合には（ステップＳ３０５：ＹＥＳ）、メッセージダイジェスト３１０（メッセージダイジェスト３１０Ｓ）を、不揮発性メモリ２３に保存する（ステップＳ３０６）。不揮発性メモリ２３に保存するのは、後述するプログラムコードの初回実行時に利用するためである。
【００７１】
次に、セキュアエレメント２（ＣＰＵ２１）は、ステップＳ３０２の処理で受信した暗号化プログラムコード（ＰＡＲＴ１）３０１Ｅを鍵１（共通鍵）で復号し、プログラムコード（ＰＡＲＴ１）３０１を取得する（ステップＳ３０７）。
【００７２】
次に、セキュアエレメント２（ＣＰＵ２１）は、ステップＳ３０７の処理で取得したプログラムコード（ＰＡＲＴ１）３０１をマイコン１１に送信し（ステップＳ３０８）、インストール処理を終了する。
【００７３】
マイコン１１（ＣＰＵ１１１）は、セキュアエレメント２からプログラムコード（ＰＡＲＴ１）３０１を受信すると（ステップＳ２０６）、プログラムコード（ＰＡＲＴ１）３０１と、ステップＳ２０３の処理で取得したプログラムコード（ＰＡＲＴ２）３０２からなるプログラムコード３００を不揮発性メモリ１１５に記憶させ（ステップＳ２０７）、インストール処理を終了する。
【００７４】
［１．３．５．ＩｏＴ端末１によるプログラムコード初回実行時処理］
次に、図７のフローチャートを用いて、ＩｏＴ端末１のプログラムコード初回実行時処理について説明する。なお、マイコン１１によるプログラムコードの初回実行は、一般的に、インストール処理が完了した直後に行われる。
【００７５】
まず、マイコン１１（ＣＰＵ１１１）は、不揮発性メモリ１１５に記憶させたプログラムコード３００を初めて実行する前に、プログラムコード３００をセキュアエレメント２に送信する（ステップＳ２３１）。
【００７６】
セキュアエレメント２（ＣＰＵ２１）は、プログラムコード３００を受信すると（ステップＳ３３１）、プログラムコード３００におけるプログラムコード（ＰＡＲＴ１）３０１を鍵１（共通鍵）で暗号化し、暗号化プログラムコード（ＰＡＲＴ１）３０１Ｅを取得する（ステップＳ３３２）。
【００７７】
次に、セキュアエレメント２（ＣＰＵ２１）は、暗号化プログラムコード（ＰＡＲＴ１）３０１Ｅと、プログラムコード３００におけるプログラムコード（ＰＡＲＴ２）３０２とからなる一部暗号化プログラムコード３００Ｈから所定の暗号的ハッシュ関数（図６のステップＳ３０３の処理で用いた関数と同じ関数）によりメッセージダイジェストを算出する（ステップＳ３３３）。
【００７８】
次に、セキュアエレメント２（ＣＰＵ２１）は、図６のステップＳ３０６の処理で保存したメッセージダイジェストと、ステップＳ３３３の処理で算出したメッセージダイジェストを比較する（ステップＳ３３４）。セキュアエレメント２（ＣＰＵ２１）は、比較の結果、一致しないと判定した場合には（ステップＳ３３５：ＮＯ）、プログラムコード初回実行時処理を終了する。なお、セキュアエレメント２（ＣＰＵ２１）は、エラー処理を行ってからプログラムコード初回実行時処理を終了することとしてもよい。例えば、メッセージダイジェストの検証に失敗したことを示すエラー通知をマイコン１１に送信することとしてもよい。マイコン１１は、エラー通知をＩｏＴ端末１から受信した場合には、プログラムコード初回実行時処理を終了することとする。
【００７９】
一方、セキュアエレメント２（ＣＰＵ２１）は、メッセージダイジェストの比較の結果、一致したと判定した場合には（ステップＳ３３５：ＹＥＳ）、プログラムコード３００からチェックコードを算出する（ステップＳ３３６）。チェックコードの算出方法は任意であるが、上述した所定の暗号的ハッシュ関数や他の暗号的ハッシュ関数を用いることとしてもよい。
【００８０】
次に、セキュアエレメント２（ＣＰＵ２１）は、Ｓ３３６の処理で算出したチェックコードを不揮発性メモリ２３に保存する（ステップＳ３３７）。不揮発性メモリ２３に保存するのは、後述するプログラムコードの２回目以降実行時に利用するためである。
【００８１】
次に、セキュアエレメント２（ＣＰＵ２１）は、図６のステップＳ３０６の処理で保存したメッセージダイジェストを無効化し（ステップＳ３３８）、メッセージダイジェストの検証が成功した旨の通知をマイコン１１に送信し（ステップＳ３３９）、プログラムコード初回実行時処理を終了する。
【００８２】
マイコン１１（ＣＰＵ１１１）は、セキュアエレメント２から検証が成功した旨の通知を受信すると（ステップＳ２３２）、不揮発性メモリ１１５に記憶されているプログラムコード３００を実行し（ステップＳ２３３）、プログラムコード初回実行時処理を終了する。
【００８３】
［１．３．６．ＩｏＴ端末１によるプログラムコード２回目以降実行時処理］
次に、図８のフローチャートを用いて、ＩｏＴ端末１のプログラムコード２回目以降実行時処理について説明する。
【００８４】
まず、マイコン１１（ＣＰＵ１１１）は、不揮発性メモリ１１５に記憶させたプログラムコード３００について２回目以降の実行をする前に、プログラムコード３００からチェックコードを算出する（ステップＳ２５１）。チェックコードの算出には、図７のステップＳ３３６の処理でセキュアエレメント２が用いた算出方法と同一の算出方法を用いることとする。
【００８５】
次に、マイコン１１（ＣＰＵ１１１）は、ステップＳ２５１の処理で算出したチェックコードをセキュアエレメント２に送信する（ステップＳ２５２）。
【００８６】
セキュアエレメント２（ＣＰＵ２１）は、マイコン１１からチェックコードを受信すると（ステップＳ３５１）、図７のステップＳ３３７の処理で保存したチェックコードと比較する（ステップＳ３５２）。セキュアエレメント２（ＣＰＵ２１）は、比較の結果、一致しないと判定した場合には（ステップＳ３５３：ＮＯ）、プログラムコード２回目以降実行時処理を終了する。なお、セキュアエレメント２（ＣＰＵ２１）は、エラー処理を行ってからプログラムコード２回目以降実行時処理を終了することとしてもよい。例えば、チェックコードの検証に失敗したことを示すエラー通知をマイコン１１に送信することとしてもよい。マイコン１１は、エラー通知をＩｏＴ端末１から受信した場合には、プログラムコード２回目以降実行時処理を終了することとする。
【００８７】
一方、セキュアエレメント２（ＣＰＵ２１）は、チェックコードの比較の結果、一致したと判定した場合には（ステップＳ３５３：ＹＥＳ）、チェックコードの検証が成功した旨の通知をマイコン１１に送信し（ステップＳ３５４）、プログラムコード２回目以降実行時処理を終了する。
【００８８】
マイコン１１（ＣＰＵ１１１）は、セキュアエレメント２から検証が成功した旨の通知を受信すると（ステップＳ２５３）、不揮発性メモリ１１５に記憶されているプログラムコード３００を実行し（ステップＳ２５４）、プログラムコード２回目以降実行時処理を終了する。
【００８９】
なお、鍵１、鍵２、鍵３はセッションキー（一定時間有効な鍵）であると説明したが、少なくとも図６のステップＳ１０２の処理から図７のステップＳ３３２の処理が完了するまでの間は有効であることとする。
【００９０】
［２．第２実施形態］
次に、図面を参照して本発明の第２実施形態について説明する。第２実施形態は、第１実施形態とプログラムコードの暗号化及び復号の方法が相違する。なお、第２実施形態は、第１実施形態と共通する部分が多いのでその差異点を中心に説明し、共通する部材や処理については説明を省略する。
【００９１】
［２．１．ＩｏＴ端末１及びサーバ装置Ｓの構成］
第２実施形態におけるＩｏＴ端末１及びサーバ装置Ｓの構成は、第１実施形態と同様であるので説明を省略する。
【００９２】
［２．２．プログラムコードのインストールからインストール後の処理］
［２．２．１．サーバＳによる暗号化］
図９を用いて、第２実施形態におけるサーバＳの制御部３１がＩｏＴ端末１にインストールさせるプログラムコードを暗号化する流れについて説明する。
【００９３】
まず、制御部３１が、プログラムコード３００から一部暗号化プログラムコード３００Ｈとデジタル署名３１１を生成するまでの流れは第１実施形態と同様である。
【００９４】
第２実施形態では、一部暗号化プログラムコード３００Ｈを鍵３（共通鍵）で暗号化し、暗号化プログラムコード３２０Ｅを生成する。
【００９５】
なお、後述するように、暗号化プログラムコード３２０Ｅは、ＩｏＴ端末１におけるマイコン１１により復号され、暗号化プログラムコード（ＰＡＲＴ１）３０１Ｅは、ＩｏＴ端末１におけるセキュアエレメント２により復号される。第１実施形態と同様に、プログラムコード３００における重要な部分はマイコン１１より耐タンパ性が高いセキュアエレメント２に復号させることが好ましい。そこで、プログラムコード３００を分割する際には、当該重要な部分がプログラムコード（ＰＡＲＴ１）３０１に含まれるように分割することとする。プログラムコード３００における重要な部分とは、例えば、プログラムコードにおける先頭の実行アドレスを特定するためのアドレス情報が記述されている部分である。一般的にアドレス情報は、プログラムコードの先頭部分に記述されているため、当該部分がプログラムコード（ＰＡＲＴ１）３０１に含まれるようにプログラムコード３００を分割するのが好ましい。
【００９６】
［２．２．２．ＩｏＴ機器１によるプログラムコードのインストール］
次に、図１０を用いて、第２実施形態におけるＩｏＴ機器１がサーバＳから暗号化プログラムコード３２０Ｅをダウンロードし、復号したプログラムコード３００をマイコン１１の不揮発性メモリ１１５にインストールする（記憶させる）までの流れについて説明する。
【００９７】
ＩｏＴ機器１のマイコン１１（ＣＰＵ１１１）は、サーバＳから暗号化プログラムコード３２０Ｅとデジタル署名３１１を受信すると、暗号化プログラムコード３２０Ｅを鍵３（共通鍵）で復号し、暗号化プログラムコード（ＰＡＲＴ１）３０１Ｅとプログラムコード（ＰＡＲＴ２）３０２からなる一部暗号化プログラムコード３００Ｈを取得する。
【００９８】
次に、マイコン１１（ＣＰＵ１１１）は、一部暗号化プログラムコード３００Ｈから、所定の暗号的ハッシュ関数を用いてメッセージダイジェスト（ハッシュ値）３１０Ｓを取得する。
【００９９】
以降、マイコン１１（ＣＰＵ１１１）が、暗号化プログラムコード（ＰＡＲＴ１）３０１Ｅと、メッセージダイジェスト３１０Ｓと、デジタル署名３１１と、をセキュアエレメント２に受け渡し、セキュアエレメント２（ＣＰＵ２１）がデジタル署名３１１を検証し、暗号化プログラムコード（ＰＡＲＴ１）３０１Ｅを復号して取得したプログラムコード（ＰＡＲＴ１）３０１をマイコン１１に差し戻し、マイコン１１（ＣＰＵ１１１）が、プログラムコード（ＰＡＲＴ１）３０１とプログラムコード（ＰＡＲＴ２）３０２とからなるプログラムコード３００を不揮発性メモリ１１５にインストールする（記憶させる）までの流れは第１実施形態と同様であるので説明を省略する。
【０１００】
［２．２．３．サーバＳによる暗号化処理］
次に、図１１のフローチャートを用いて、第２実施形態におけるサーバＳの制御部３１による暗号化処理について説明する。
【０１０１】
サーバＳの制御部３１によるステップＳ１０１からステップＳ１０４の処理は第１実施形態と同様であるので説明を省略する。
【０１０２】
制御部３１は、ステップＳ１０４の処理を終えると、次いで、一部暗号化プログラムコード３００Ｈを鍵３（共通鍵）で暗号化し、暗号化プログラムコード３２０Ｅを取得する（ステップＳ１０５Ａ）。
【０１０３】
次に、制御部３１は、ステップＳ１０５Ａの処理で取得した暗号化プログラムコード３２０Ｅと、ステップＳ１０４の処理で生成したデジタル署名３１１と、をＩｏＴ端末１に送信し（ステップＳ１０６）、暗号化処理を終了する。
【０１０４】
［２．２．４．ＩｏＴ端末１によるインストール処理］
次に、図１２のフローチャートを用いて、第２実施形態におけるＩｏＴ端末１のマイコン１１とセキュアエレメント２によるインストール処理について説明する。
【０１０５】
マイコン１１（ＣＰＵ１１１）によるステップＳ２０１からステップＳ２０２の処理と、セキュアエレメント２（ＣＰＵ２１）によるステップＳ３０１の処理は第１実施形態と同様であるので説明を省略する。
【０１０６】
マイコン１１（ＣＰＵ１１１）は、ステップＳ２０２の処理を終えると、次いで、ステップＳ２０１の処理で受信した暗号化プログラムコード３２０Ｅを鍵３（共通鍵）で復号し、一部暗号化プログラムコード３００Ｈを取得する（ステップＳ２０３Ａ）。
【０１０７】
以降、マイコン１１（ＣＰＵ１１１）によるステップＳ２０４からステップＳ２０７の処理と、セキュアエレメント２（ＣＰＵ２１）によるステップＳ３０２からステップＳ３０８の処理は第１実施形態と同様であるので説明を省略する。
【０１０８】
［２．２．５．ＩｏＴ端末１によるプログラムコード実行時処理］
第２実施形態におけるＩｏＴ端末１によるプログラムコード初回実行時処理及びＩｏＴ端末１によるプログラムコード２回目以降実行時処理は、第１実施形態と同様であるので説明を省略する。
【０１０９】
以上説明したように、第１実施形態及び第２実施形態のＩｏＴ端末１は、マイコン１１（「第１機器」の一例）と、マイコン１１よりも耐タンパ性が高いセキュアエレメント２（「第２機器」の一例）とを含み、マイコン１１のＣＰＵ１１１（「受信手段」、「第１復号手段」の一例）が、プログラムコード３００（「所定のデータ」の一例）に対して、鍵３（共通鍵）（「第１暗号鍵」の一例）を用いる暗号化処理（「第１暗号化処理」の一例）と、鍵１（共通鍵）（「第２暗号鍵」の一例）を用いる暗号化処理（「第２暗号化処理」の一例）と、を行うことにより得られた暗号化プログラムコード３００Ｅ（「暗号化データ」の一例）をサーバＳ（「外部装置」の一例）から受信し、受信した暗号化プログラムコード３００Ｅにおける鍵３（共通鍵）を用いた暗号化処理により暗号化されたデータに対して、鍵３（共通鍵）（「第１復号鍵」の一例）を用いた復号処理（「第１復号処理」の一例）を行い、セキュアエレメント２のＣＰＵ２１（「第２復号手段」の一例）は、受信した暗号化プログラムコード３００Ｅにおける鍵１（共通鍵）を用いた暗号化処理により暗号化されたデータに対して、鍵１（共通鍵）（「第２復号鍵」の一例）を用いた復号処理（「第２復号処理」の一例）を行う。
【０１１０】
したがって、第１実施形態及び第２実施形態のＩｏＴ端末１によれば、暗号化プログラムコード３００Ｅをサーバ装置Ｓから受信した場合に、マイコン１１が暗号化プログラムコード３００Ｅにおける鍵３（共通鍵）を用いた暗号化処理により暗号化されたデータに対して、鍵３（共通鍵）を用いた復号処理を行い、セキュアエレメント２が暗号化プログラムコード３００Ｅにおける鍵１（共通鍵）を用いた暗号化処理により暗号化されたデータに対して鍵１（共通鍵）を用いた復号処理を行う。すなわち、信頼できる発信元以外の発信元から入手したデータは適切に復号できないため、マイコン１１は暗号化プログラムコード３００Ｅから正常に復号できたデータのみを記憶することにより、記憶するデータを信頼できる発信元から入手したものに制限することができる。
【０１１１】
また、第１実施形態及び第２実施形態におけるＩｏＴ端末１において、マイコン１１の不揮発性メモリ１１５（「データ記憶手段」の一例）は、鍵３（共通鍵）を用いた復号処理及び鍵１（共通鍵）を用いた復号処理により得られたプログラムコード３００を記憶する。これにより、マイコン１１は暗号化プログラムコード３００Ｅ（暗号化プログラムコード３２０Ｅ）から正常に復号できたデータ、すなわち、信頼できる発信元から入手したデータのみを記憶することができる。
【０１１２】
更に、第１実施形態におけるＩｏＴ端末１において、暗号化プログラムコード３００Ｅは、プログラムコード３００におけるプログラムコード（ＰＡＲＴ１)３０１(「第１の部分」の一例）に対して鍵１（共通鍵）を用いた暗号化処理を行って得られた暗号化プログラムコード（ＰＡＲＴ１)３０１Ｅと、プログラムコード３００におけるプログラムコード（ＰＡＲＴ２)３０２(「第２の部分」の一例）に対して鍵３（共通鍵）を用いた暗号化処理を行って得られた暗号化プログラムコード（ＰＡＲＴ２)３０２Ｅと、で構成され、マイコン１１のＣＰＵ１１１は、暗号化プログラムコード３００Ｅにおける暗号化プログラムコード（ＰＡＲＴ２)３０２Ｅに対して鍵３（共通鍵）を用いた復号処理を行い、セキュアエレメント２のＣＰＵ２１は、暗号化プログラムコード３００Ｅにおける暗号化プログラムコード（ＰＡＲＴ１)３０１Ｅに対して鍵１（共通鍵）を用いた復号処理を行い、マイコン１１の不揮発性メモリ１１５は、鍵１（共通鍵）を用いた復号処理により得られたプログラムコード（ＰＡＲＴ１)３０１と、鍵３（共通鍵）を用いた復号処理により得られたプログラムコード（ＰＡＲＴ２)３０２とからなるプログラムコード３００を記憶する。これにより、マイコン１１の不揮発性メモリ１１５は、マイコン１１で復号されたプログラムコード（ＰＡＲＴ１)３０１と、セキュアエレメント２で復号されたプログラムコード（ＰＡＲＴ２)３０２とからなるプログラムコード３００（すなわち、信頼できる発信元から入手したデータ）を記憶することができる。
【０１１３】
更にまた、第１実施形態におけるＩｏＴ端末１のマイコン１１のＣＰＵ１１１は、暗号化プログラムコード（ＰＡＲＴ１)３０１Ｅとプログラムコード（ＰＡＲＴ２)３０２とで構成される一部暗号化プログラムコード３００Ｈ（「一部暗号化データ」の一例）に対する所定の暗号的ハッシュ関数を用いた処理（「第１生成処理」の一例）により生成されたメッセージダイジェスト３１０と、秘密鍵２と、を用いて生成されたデジタル署名３１１をサーバＳから更に受信し、セキュアエレメント２のＣＰＵ２１（「取得手段」、「第１比較手段」の一例）は、秘密鍵２に対応する公開鍵２を用いてデジタル署名３１１を復号することによりメッセージダイジェスト３１０を取得し、マイコン１１が受信した暗号化プログラムコード３００Ｅにおける暗号化プログラムコード（ＰＡＲＴ１)３０１Ｅと、鍵３（共通鍵）を用いた復号処理により得られたプログラムコード（ＰＡＲＴ２)３０２と、で構成される一部暗号化プログラムコード３００Ｈに対する所定の暗号的ハッシュ関数を用いた処理により生成されたメッセージダイジェスト３１０Ｓと比較し、比較の結果が一致であった場合に、鍵１（共通鍵）を用いた復号処理を行う。これにより、デジタル署名の検証が成功した場合にのみ、鍵１（共通鍵）を用いた復号処理及びプログラムコード３００をマイコン１１の不揮発性メモリ１１５に記憶させる処理が実行されるため、マイコン１１は信頼できる発信元から入手したプログラムコード３００を記憶することができる。
【０１１４】
更にまた、第２実施形態におけるＩｏＴ端末１において、暗号化プログラムコード３２０Ｅは、プログラムコード３００におけるプログラムコード（ＰＡＲＴ１）３０１に対して鍵１（共通鍵）を用いた暗号化処理を行って得られた暗号化プログラムコード（ＰＡＲＴ１）３０１Ｅと、プログラムコード３００におけるプログラムコード（ＰＡＲＴ２）３０２と、で構成される一部暗号化プログラムコード３００Ｈに対して鍵３（共通鍵）を用いた暗号化処理（「第１暗号化処理」の一例）を行って得られたデータであり、マイコン１１のＣＰＵ１１１は、暗号化プログラムコード３２０Ｅに対して鍵３（共通鍵）を用いた復号処理を行い、セキュアエレメント２のＣＰＵ２１は、一部暗号化プログラムコード３００Ｈにおける暗号化プログラムコード（ＰＡＲＴ１）３０１Ｅに対して鍵１（共通鍵）を用いた復号処理を行い、マイコン１１の不揮発性メモリ１１５は、鍵３（共通鍵）を用いた復号処理により得られたプログラムコード（ＰＡＲＴ１）３０１と、鍵３（共通鍵）を用いた復号処理により得られた一部暗号化プログラムコード３００Ｈにおけるプログラムコード（ＰＡＲＴ２）３０２と、で構成されるプログラムコード３００を記憶する。これにより、マイコン１１の不揮発性メモリ１１５は、マイコン１１で復号されたプログラムコード（ＰＡＲＴ１)３０１と、セキュアエレメント２で復号されたプログラムコード（ＰＡＲＴ２)３０２とからなるプログラムコード３００（すなわち、信頼できる発信元から入手したデータ）を記憶することができる。
【０１１５】
更にまた、第２実施形態におけるＩｏＴ端末１のマイコン１１のＣＰＵ１１１は、暗号化プログラムコード（ＰＡＲＴ１)３０１Ｅとプログラムコード（ＰＡＲＴ２)３０２とで構成される一部暗号化プログラムコード３００Ｈに対する所定の暗号的ハッシュ関数を用いた処理（「第１生成処理」の一例）により生成されたメッセージダイジェスト３１０と、秘密鍵２と、を用いて生成されたデジタル署名３１１をサーバＳから更に受信し、セキュアエレメント２のＣＰＵ２１（「取得手段」、「第１比較手段」の一例）は、秘密鍵２に対応する公開鍵２を用いてデジタル署名３１１を復号することによりメッセージダイジェスト３１０を取得し、鍵３（共通鍵）を用いた復号処理により得られた一部暗号化プログラムコード３００Ｈに対する所定の暗号的ハッシュ関数を用いた処理により生成されたメッセージダイジェスト３１０Ｓと比較し、比較の結果が一致であった場合に、鍵１（共通鍵）を用いた復号処理を行う。これにより、デジタル署名の検証が成功した場合にのみ、鍵１（共通鍵）を用いた復号処理及びプログラムコード３００をマイコン１１の不揮発性メモリ１１５に記憶させる処理が実行されるため、マイコン１１は信頼できる発信元から入手したプログラムコード３００を記憶することができる。
【０１１６】
更にまた、第１実施形態及び第２実施形態におけるＩｏＴ端末１のセキュアエレメント２の不揮発性メモリ２３（「メッセージダイジェスト記憶手段」の一例）は、メッセージダイジェスト３１０Ｓとメッセージダイジェスト３１０の比較（図６のステップＳ３０４）の結果が一致であった場合に、比較したメッセージダイジェスト３１０（メッセージダイジェスト３１０Ｓ）を記憶し、マイコン１１のＣＰＵ１１１（「プログラムコード実行手段」、「プログラムコード送信手段」の一例）は、プログラムコード３００の実行が初回である場合におけるその実行前に、不揮発性メモリ１１５に記憶されているプログラムコード３００をセキュアエレメント２に送信し、セキュアエレメント２のＣＰＵ２１（「プログラムコード受信手段」、「メッセージダイジェスト生成手段」、「第２比較手段」、「通知手段」の一例）はマイコン１１により送信されたプログラムコード３００を受信し、プログラムコード３００におけるプログラムコード（ＰＡＲＴ１)３０１に対して鍵１（共通鍵）を用いた暗号化処理を行うことにより暗号化プログラムコード（ＰＡＲＴ１)３０１Ｅを取得し、暗号化プログラムコード（ＰＡＲＴ１)３０１Ｅと、プログラムコード３００Ｈにおけるプログラムコード（ＰＡＲＴ２)３０２と、で構成される一部暗号化プログラムコード３００Ｈに対する所定の暗号的ハッシュ関数を用いた処理により生成されたメッセージダイジェストを生成し、不揮発性メモリ２３が記憶するメッセージダイジェストと比較し（図７のステップＳ３３４）、比較の結果が一致であった場合に、その旨をマイコン１１に通知し、マイコン１１のＣＰＵ１１１は、プログラムコード３００をセキュアエレメント２に送信した場合には、比較の結果が一致であった旨の通知をセキュアエレメント２から受けた後にプログラムコード３００を実行する。これにより、例えば、図６のステップＳ２０７の処理で不揮発性メモリ１１５に記憶されたプログラムコード３００が攻撃により改変されている場合には、セキュアエレメント２による比較（図７のステップＳ３３４）の結果が不一致となるためプログラムコード３００が実行されることはない。すなわち、不揮発性メモリ１１５が記憶するプログラムコード３００が改変されている場合には、マイコン１１のＣＰＵ１１１がプログラムコード３００を実行することを防ぐことができる。
【０１１７】
更にまた、第１実施形態及び第２実施形態におけるＩｏＴ端末１のセキュアエレメント２の不揮発性メモリ２３（「チェックコード生成手段」の一例）は、図７のステップＳ３３４の処理における比較の結果が一致であった場合に、図７のステップＳ３３１の処理において受信したプログラムコード３００に対する暗号的ハッシュ関数（「第２生成処理」の一例）によりチェックコードを生成し、セキュアエレメント２の不揮発性メモリ２３（「チェックコード記憶手段」の一例）が当該生成されたチェックコードを記憶する。マイコン１１のＣＰＵ１１１（「チェックコード送信手段」の一例）は、不揮発性メモリ１１５に記憶されているプログラムコード３００の実行が２回目以降である場合におけるその実行前に、当該プログラムコード３００に対する暗号的ハッシュ関数（「第２生成処理の一例）によりチェックコードを生成し、セキュアエレメント２に送信し、セキュアエレメント２のＣＰＵ２１（「チェックコード受信手段」、「第３比較手段」、「第２通知手段」の一例）は、マイコン１１から送信されたチェックコードを受信し、不揮発性メモリ２３が記憶するチェックコードと比較し（図８のステップＳ３５２）、比較の結果が一致であった場合に、その旨をマイコン１１に通知する。マイコン１１のＣＰＵ１１１は、チェックコードをセキュアエレメント２に送信した場合には、セキュアエレメント２によるチェックコードの比較の結果が一致であった旨の通知を受けた後にプログラムコード３００を実行する。これにより、例えば、不揮発性メモリ１１５に記憶されたプログラムコード３００が図７のステップＳ２３３の処理で実行された後に攻撃により改変されている場合には、セキュアエレメント２による比較（図８のステップＳ３５２）の結果が不一致となるためプログラムコード３００が実行されることはない。すなわち、不揮発性メモリ１１５が記憶するプログラムコード３００が改変されている場合には、マイコン１１のＣＰＵ１１１がプログラムコード３００を実行することを防ぐことができる。また、チェックコードは、メッセージダイジェストのように鍵１（共通鍵）を用いることなく算出することができるため、チェックコードの比較検証に要する時間はメッセージダイジェストの比較検証に要する時間より短い。すなわち、ＣＰＵ１１１がプログラムコード３００を実行するに当たり、プログラムコード３００の改変チェックを短時間で済ませることができ、プログラムコード３００の実行までの時間を短縮することができる。
【０１１８】
更にまた、第１実施形態及び第２実施形態におけるＩｏＴ端末１のセキュアエレメント２の不揮発性メモリ２３（「鍵記憶手段」の一例）は、鍵１（共通鍵）を記憶する。これにより、マイコン１１の不揮発性メモリ１１５に記憶させるよりも安全に鍵１（共通鍵）を保持することができる。
【０１１９】
更にまた、第１実施形態及び第２実施形態におけるＩｏＴ端末１において、プログラムコード（ＰＡＲＴ１）３０１がプログラムコード３００における先頭の実行アドレスを特定するためのアドレス情報を含むこととすることにより、マイコン１１よりも耐タンパ性の高いセキュアエレメント２にプログラムコード３００における重要な部分であるアドレス情報を含む暗号化プログラムコード（ＰＡＲＴ１）３０１Ｅを復号させることができる。
【０１２０】
更にまた、第１実施形態及び第２実施形態におけるＩｏＴ端末１のセキュアエレメント２（「電子機器」の一例）は、プログラムコード３００（「所定のデータ」の一例）に対して、鍵３（共通鍵）（「第１暗号鍵」の一例）を用いる暗号化処理（「第１暗号化処理」の一例）と、鍵１（共通鍵）（「第２暗号鍵」の一例）を用いる暗号化処理（「第２暗号化処理」の一例）と、を行うことにより得られた暗号化プログラムコード３００Ｅ（暗号化プログラムコード３２０Ｅ）（「暗号化データ」の一例）をサーバＳ（「外部装置」の一例）から受信し、暗号化プログラムコード３００Ｅ（暗号化プログラムコード３２０Ｅ）における鍵３（共通鍵）を用いた暗号化処理により暗号化されたデータに対して、鍵３（共通鍵）（「第１復号鍵」の一例）を用いた復号処理（「第１復号処理」の一例）を行うＣＰＵ１１１（「受信手段」、「第１復号手段」の一例）を備えるマイコン１１（「所定の機器」の一例）よりも耐タンパ性が高く、ＣＰＵ２１（「受取手段」、「第２復号手段」、「受渡手段」の一例）は、マイコン１１から、暗号化プログラムコード３００Ｅにおける鍵１（共通鍵）を用いた暗号化処理により暗号化されたデータを受け取り、当該データに対して、鍵１（共通鍵）を用いた暗号化処理により暗号化されたデータを復号可能な鍵１（共通鍵）（「第２復号鍵」の一例）を用いた復号処理（「第２復号処理」の一例）を行い、当該復号処理により取得したデータをマイコン１１に受け渡す。
【０１２１】
したがって、第１実施形態及び第２実施形態のセキュアエレメント２によれば、暗号化プログラムコード３００Ｅをサーバ装置Ｓから受信した場合に、マイコン１１が暗号化プログラムコード３００Ｅにおける鍵３（共通鍵）を用いた暗号化処理により暗号化されたデータに対して、鍵３（共通鍵）を用いた復号処理を行い、セキュアエレメント２が暗号化プログラムコード３００Ｅにおける鍵１（共通鍵）を用いた暗号化処理により暗号化されたデータに対して鍵１（共通鍵）を用いた復号処理を行う。すなわち、信頼できる発信元以外の発信元から入手したデータは適切に復号できないため、マイコン１１は暗号化プログラムコード３００Ｅから正常に復号できたデータのみを記憶することにより、記憶するデータを信頼できる発信元から入手したものに制限することができる。
【０１２２】
なお、マイコン１１とセキュアエレメント２とでは、一般的にセキュアエレメント２の方が処理速度が遅いので、サーバＳがプログラムコード３００を分割する際に、プログラムコード（ＰＡＲＴ１）３０１を、プログラムコード（ＰＡＲＴ２）３０２よりも小さくすることにより、ＩｏＴ機器１における暗号化プログラムコード３００Ｅの復号処理に要する時間を短縮することができる。
【０１２３】
［３．変形例］
次に、本実施例の変形例について説明する。なお、以下に説明する変形例は適宜組み合わせることができる。
【０１２４】
［３．１．変形例１］
第１実施形態及び第２実施形態では、鍵３（共通鍵）をセキュアエレメント２の不揮発性メモリ２３に記憶させておき、マイコン１１がサーバＳから暗号化プログラムコード３００Ｅ及びデジタル署名３１１を受信した場合に、セキュアエレメント２から鍵３（共通鍵）を受信して復号処理を行うこととしたが、鍵３（共通鍵）をマイコン１１の不揮発性メモリ１１５に記憶させておき、復号処理の際には不揮発性メモリ１１５に記憶されている鍵３（共通鍵）を用いることとしてもよい。
【０１２５】
［３．２．変形例２］
第１実施形態及び第２実施形態では、サーバＳから受信し、復号して記憶する対象がプログラムコード３００である場合について説明したが、当該対象は種類を問わず、例えば、ＩｏＴ機器１の制御に用いられる設定値等であってもよい。
【０１２６】
［３．３．変形例３］
第１実施形態及び第２実施形態では、図６（図１２）のステップＳ２０４の処理でマイコン１１のＣＰＵ１１１が一部暗号化プログラムコード３００Ｈからメッセージダイジェスト３１０Ｓを算出することとしたが、セキュアエレメント２のＣＰＵ２１がマイコン１１から一部暗号化プログラムコード３００Ｈを取得して算出することとしてもよい。
【符号の説明】
【０１２７】
１  ＩｏＴ端末
１１  マイコン
１１１  ＣＰＵ
１１２  ＲＡＭ
１１３  ＲＯＭ
１１４  Ｉ／Ｏ回路
１１５  不揮発性メモリ
１２  通信部
１３  入力部
１４  出力部
２  セキュアエレメント
２１  ＣＰＵ
２２  ＲＡＭ
２３  不揮発性メモリ
２４  Ｉ／Ｏ回路
Ｓ  サーバ
３１  制御部
３２  記憶部
３３  通信部
３４  表示部
３５  操作部
Ｎ  ネットワーク
【図１】
2020150310.tif 000003
【図２】
2020150310.tif 000004
【図３】
2020150310.tif 000005
【図４】
2020150310.tif 000006
【図５】
2020150310.tif 000007
【図６】
2020150310.tif 000008
【図７】
2020150310.tif 000009
【図８】
2020150310.tif 000010
【図９】
2020150310.tif 000011
【図１０】
2020150310.tif 000012
【図１１】
2020150310.tif 000013
【図１２】
2020150310.tif 000014