以下、図面を参照し、本発明の実施形態について説明する。なお、以下に示す実施形態では、車両として自動車を例に挙げて説明する。
[第1実施形態]
図1は、本実施形態に係る自動車1001の構成例を示す図である。本実施形態では、自動車1001に搭載されるECU(電子制御装置)に対して、更新プログラム等のデータを適用する場合を例に挙げて説明する。
図1において、自動車1001は、第1のECU1010と複数の第2のECU1020とを備える。第1のECU1010及び第2のECU1020は、自動車1001に備わる車載コンピュータである。第1のECU1010は、自動車1001に搭載されたECUのうち、ゲートウェイ機能を有するECUである。第2のECU1020は、自動車1001に搭載されたECUのうち、エンジン制御等の機能を有するECUである。第2のECU1020として、例えば、エンジン制御機能を有するECU、ハンドル制御機能を有するECU、ブレーキ制御機能を有するECUなどがある。
第1のECU1010と複数の第2のECU1020は、自動車1001に備わるCAN(Controller Area Network)1030に接続される。CAN1030は通信ネットワークである。CANは車両に搭載される通信ネットワークの一つとして知られている。
第1のECU1010は、CAN1030を介して、各第2のECU1020との間でデータを交換する。第2のECU1020は、CAN1030を介して、他の第2のECU1020との間でデータを交換する。
なお、車両に搭載される通信ネットワークとして、CAN以外の通信ネットワークを自動車1001に備え、CAN以外の通信ネットワークを介して、第1のECU1010と第2のECU1020との間のデータの交換、及び、第2のECU1020同士の間のデータの交換が行われてもよい。例えば、LIN(Local Interconnect Network)を自動車1001に備えてもよい。また、CANとLINとを自動車1001に備えてもよい。また、自動車1001において、LINに接続する第2のECU1020を備えてもよい。また、第1のECU1010は、CANとLINとに接続されてもよい。また、第1のECU1010は、CANを介して該CANに接続される第2のECU1020との間でデータを交換し、また、LINを介して該LINに接続される第2のECU1020との間でデータを交換してもよい。また、第2のECU1020同士が、LINを介してデータを交換してもよい。
自動車1001は診断ポート1060を備える。診断ポート1060として、例えばOBD(On-board Diagnostics)ポートを使用してもよい。診断ポート1060には診断端末1065を接続可能である。診断ポート1060は第1のECU1010に接続される。第1のECU1010と診断ポート1060に接続された診断端末1065とは、診断ポート1060を介して、データを交換する。
自動車1001はインフォテイメント(Infotainment)機器1040を備える。インフォテイメント機器1040として、例えば、ナビゲーション機能、位置情報サービス機能、音楽や動画などのマルチメディア再生機能、音声通信機能、データ通信機能、インターネット接続機能などを有するものが挙げられる。インフォテイメント機器1040は第1のECU1010に接続される。第1のECU1010は、インフォテイメント機器1040から入力された情報を第2のECU1020へ送信する。
自動車1001は、TCU(Tele Communication Unit)1050を備える。TCU1050は通信装置である。TCU1050は通信モジュール1051を備える。通信モジュール1051は、無線通信ネットワークを利用して無線通信を行う。通信モジュール1051は、SIM(Subscriber Identity Module)1052を備える。SIM1052は、無線通信ネットワークを利用するための情報が書き込まれたSIMである。通信モジュール1051は、SIM1052を使用することにより該無線通信ネットワークに接続して無線通信を行うことができる。なお、SIM1052として、eSIM(Embedded Subscriber Identity Module)を使用してもよい。
TCU1050は第1のECU1010に接続される。第1のECU1010は、TCU1050の通信モジュール1051とデータを交換する。
なお、図1の構成では第1のECU1010とTCU1050を直接接続することにより第1のECU1010と通信モジュール1051の間でデータを交換するが、これに限定されない。例えば、TCU1050をインフォテイメント機器1040に接続し、第1のECU1010が、インフォテイメント機器1040を介して、TCU1050の通信モジュール1051とデータを交換してもよい。又は、診断端末1065の代わりにTCU1050を診断ポート1060に接続し、第1のECU1010が、診断ポート1060を介して、該診断ポート1060に接続されたTCU1050の通信モジュール1051とデータを交換してもよい。又は、第1のECU1010が、SIM1052を含む通信モジュール1051を備えてもよい。第1のECU1010がSIM1052を含む通信モジュール1051を備える場合には、自動車1001はTCU1050を備えなくてもよい。
第1のECU1010は、メイン演算器1011とHSM(Hardware Security Module)1012を備える。メイン演算器1011は、第1のECU1010の機能を実現させるためのコンピュータプログラムを実行する。HSM1012は暗号処理機能等を有する。HSM1012は耐タンパー性(Tamper Resistant)を有する。HSM1012はセキュアエレメント(Secure Element:SE)の例である。HSM1012は、鍵等のデータを記憶する記憶部1013を備える。メイン演算器1011はHSM1012を使用する。
第2のECU1020は、メイン演算器1021とSHE(Secure Hardware Extension)1022を備える。メイン演算器1021は、第2のECU1020の機能を実現させるためのコンピュータプログラムを実行する。SHE1022は暗号処理機能等を有する。SHE1022は耐タンパー性を有する。SHE1022はセキュアエレメントの例である。SHE1022は、鍵等のデータを記憶する記憶部1023を備える。メイン演算器1021はSHE1022を使用する。
自動車1001に備わる車載コンピュータシステム1002は、第1のECU1010と複数の第2のECU1020とがCAN1030に接続されて構成される。第1のECU1010は、ゲートウェイ機能を有し、車載コンピュータシステム1002の内部と外部の間の通信を監視する。本実施形態において、車載コンピュータシステム1002は、自動車1001の車載制御システムとして機能する。
以下の説明において、第1のECU1010と第2のECU1020とを特に区別しないときは単にECUと称する。
サーバ装置1300は、通信回線を介して、自動車1001のTCU1050の通信モジュール1051とデータを送受する。サーバ装置1300は、自動車1001のTCU1050の通信モジュール1051が利用する無線通信ネットワークを介して、該通信モジュール1051とデータを送受する。又は、サーバ装置1300は、インターネット等の通信ネットワークと該無線通信ネットワークとを介して、該通信モジュール1051とデータを送受してもよい。また、例えば、サーバ装置1300と通信モジュール1051との間をVPN(Virtual Private Network)回線等の専用回線で接続し、該専用回線でデータを送受してもよい。例えば、SIM1052に対応する無線通信ネットワークによって、VPN回線等の専用回線が提供されてもよい。
サーバ装置1300は、ECUに適用されるECUコード(ECU code)を自動車1001へ提供する。ECUコードは、ECUに適用されるデータの例である。ECUコードは、ECUにインストールされる更新プログラム等のコンピュータプログラムであってもよく、又は、ECUに設定されるパラメータ設定値などの設定データであってもよい。
図2は、サーバ装置1300の構成例を示す図である。図2において、サーバ装置1300は、通信部11と記憶部12と期待値計算部13と検証部14と初期鍵生成部15とを備える。通信部11は、通信回線を介して、他の装置と通信を行う。記憶部12は、鍵等のデータを記憶する。期待値計算部13は、ECUコードについての期待値を計算する。検証部14は、電子署名等の検証を行う。初期鍵生成部15は、ECUの初期鍵を生成する。
サーバ装置1300の機能は、該サーバ装置1300が備えるCPUがコンピュータプログラムを実行することにより実現される。なお、サーバ装置1300として、汎用のコンピュータ装置を使用して構成してもよく、又は、専用のハードウェア装置として構成してもよい。
図3は、第1のECU1010の構成例を示す図である。図3において、第1のECU1010は、メイン演算器1011とHSM1012とインタフェース部20とを備える。メイン演算器1011は、制御部21と記憶部22とを備える。HSM1012は、記憶部1013と期待値計算部31と検証部32とを備える。
インタフェース部20は、CAN1030を介してデータを送受するインタフェースと、インフォテイメント機器1040とデータを送受するインタフェースと、TCU1050とデータを送受するインタフェースと、診断ポート1060を介してデータを送受するインタフェースとを備える。メイン演算器1011は、インタフェース部20を介して、第1のECU1010以外の他の装置とデータの送受を行う。
制御部21は、第1のECU1010の制御を行う。記憶部22は、データを記憶する。記憶部1013は、鍵等のデータを記憶する。期待値計算部31は、ECUコード等のデータの期待値を計算する。検証部32は、期待値の検証を行う。
図4は、第2のECU1020の構成例を示す図である。図4において、第2のECU1020は、メイン演算器1021とSHE1022とインタフェース部40とを備える。メイン演算器1021は、制御部41と記憶部42とを備える。SHE1022は、記憶部1023と期待値計算部51と検証部52とを備える。
インタフェース部40は、CAN1030を介してデータを送受するインタフェースを備える。メイン演算器1021は、インタフェース部40を介して、自第2のECU1020以外の他の装置とデータの送受を行う。
制御部41は、第2のECU1020の制御を行う。記憶部42は、データを記憶する。記憶部1023は、鍵等のデータを記憶する。期待値計算部51は、ECUコード等のデータの期待値を計算する。検証部52は、期待値の検証を行う。
次に図5を参照して、本実施形態に係るECUコードの提供の手順の例を説明する。図5は、ECUコードの提供手順の例を示すシーケンスチャートである。なお、図5に示されるECUコード提供手順の例では、第2のECU1020に適用されるECUコードを例に挙げるが、第1のECU1010に適用されるECUコードについても、ECUコードの適用先が第1のECU1010になるのみで同様の手順を適用可能である。
図5において、サーバ装置1300は、マスタ鍵Master_Secretとサーバ公開鍵証明書Cert_svとを備える。マスタ鍵Master_Secretとサーバ公開鍵証明書Cert_svとは、記憶部12に格納されている。但し、マスタ鍵Master_Secretは、記憶部12の記憶領域のうちセキュアな記憶領域に格納されることが好ましい。
第2のECU1020のSHE1022は、該第2のECU1020の初期鍵Key_ecuを備える。第2のECU1020の初期鍵Key_ecuは、該第2のECU1020のSHE1022の記憶部1023に格納される。第2のECU1020の初期鍵Key_ecuは、予め、該第2のECU1020のSHE1022に書き込まれる。例えば、第2のECU1020の製造時などに、初期鍵Key_ecuが該第2のECU1020のSHE1022に書き込まれる。
初期鍵Key_ecuの生成方法は、予め決められている。本実施形態では、初期鍵Key_ecuの生成方法の一例として、マスタ鍵Master_Secretと、ECUの識別子(ECU識別子)ECU_IDとからダイジェスト値を算出する。本実施形態では、第2のECU1020の初期鍵Key_ecuは、マスタ鍵Master_Secretと、該第2のECU1020のECU識別子ECU_IDとを使用して算出されるダイジェスト値である。ダイジェスト値として、例えば、ハッシュ(hash)関数により算出される値や排他的論理和演算により算出される値などが挙げられる。
なお、第1のECU1010の初期鍵Key_ecuについても、第2のECU1020と同様に、予め、該第1のECU1010のHSM1012に格納される。第1のECU1010の初期鍵Key_ecuは、該第1のECU1010のHSM1012の記憶部1013に格納される。
(ステップS101)自動車1001へ提供するECUコードには、予め、サーバ公開鍵証明書Cert_svに対応する秘密鍵によって電子署名が付される。サーバ装置1300の検証部14は、自動車1001へ提供するECUコードに付されている電子署名を、記憶部12に格納されているサーバ公開鍵証明書Cert_svを使用して検証する。サーバ装置1300は、該電子署名の検証が合格である場合にステップS102以降に処理を進める。一方、サーバ装置1300は、該電子署名の検証が不合格である場合には当該ECUコードの提供を停止する。なお、自動車1001へ提供するECUコードの正当性が確かである場合には、該電子署名の検証はなくてもよい。
(ステップS102)サーバ装置1300の通信部11は、ECUコードの適用先の第2のECU1020のECU識別子ECU_IDの要求メッセージ(ECU識別子要求メッセージ)を、自動車1001へ送信する。自動車1001において、通信モジュール1051により受信されたECU識別子要求メッセージは、第1のECU1010を介してECUコードの適用先の第2のECU1020へ転送される。
(ステップS103)第2のECU1020の制御部41は、ECU識別子要求メッセージを受信すると、自己のECU識別子ECU_IDを返信する。該第2のECU1020のECU識別子ECU_IDは、第1のECU1010を介して通信モジュール1051へ転送される。通信モジュール1051は、該転送されたECU識別子ECU_IDをサーバ装置1300へ送信する。サーバ装置1300は、該通信モジュール1051から送信されたECU識別子ECU_ID、すなわちECUコードの適用先の第2のECU1020のECU識別子ECU_IDを、通信部11によって受信する。
なお、サーバ装置1300が、予め、ECUコードの適用先の第2のECU1020のECU識別子ECU_IDを取得する場合には、上述したステップS102とステップS103は不要である。例えば、サーバ装置1300が自動車1001の第2のECU1020のECU識別子ECU_IDのリストを管理している場合には、サーバ装置1300は、該リストから、ECUコードの適用先の第2のECU1020のECU識別子ECU_IDを取得してもよい。
(ステップS104)サーバ装置1300の初期鍵生成部15は、記憶部12に格納されているマスタ鍵Master_Secretと、ECUコードの適用先の第2のECU1020のECU識別子ECU_IDとを使用して、該ECUコードの適用先の第2のECU1020の初期鍵Key_ecuを生成する。
(ステップS105)サーバ装置1300の期待値計算部13は、初期鍵生成部15が生成した初期鍵Key_ecuを使用して、自動車1001へ提供するECUコードの期待値を計算する。本実施形態では、期待値の一例として、CMAC(Cipher-based Message Authentication Code)を使用する。よって、期待値計算部13は、初期鍵生成部15が生成した初期鍵Key_ecuを使用して、自動車1001へ提供するECUコードのCMACを計算する。
(ステップS106)サーバ装置1300の通信部11は、ECUコードと期待値計算部13が計算した該ECUコードのCMACとを、自動車1001へ送信する。自動車1001において、通信モジュール1051により受信されたECUコードと該ECUコードのCMACとは、第1のECU1010を介してECUコードの適用先の第2のECU1020へ転送される。
(ステップS107)第2のECU1020の制御部41は、ECUコードと該ECUコードのCMACとを受信すると、該ECUコードをSHE1022へ渡してCMACの計算を要求する。SHE1022の期待値計算部51は、記憶部1023に格納されている初期鍵Key_ecuを使用して、該ECUコードのCMACを計算する。SHE1022は、期待値計算部51が計算したCMACを制御部41へ渡す。
(ステップS108)第2のECU1020の制御部41は、第1のECU1010を介してECUコードと共に受信したCMACと、SHE1022によって計算したCMACとを比較する。この比較の結果、両者が一致する場合にはCMACの検証が合格であり、両者が一致しない場合にはCMACの検証が不合格である。制御部41は、該CMACの検証が合格である場合にステップS109以降に処理を進める。一方、制御部41は、該CMACの検証が不合格である場合には当該ECUコードの適用を停止する。
(ステップS109)第2のECU1020の制御部41は、第1のECU1010を介して受信したECUコードを適用する。また、制御部41は、第1のECU1010を介して該ECUコードと共に受信したCMACをSHE1022へ渡し、該CMACをセキュアブート期待値に登録することを要求する。SHE1022は、該要求に応じて、該CMACをセキュアブート期待値に登録する。
(ステップS110)第2のECU1020の制御部41は、ECUコードの適用後に、セキュアブートを実行する。このセキュアブートでは、制御部41は、ECUコードをSHE1022に渡してセキュアブートにおけるCMACの検証を要求する。SHE1022の検証部52は、記憶部1023に格納されている初期鍵Key_ecuを使用して、該ECUコードのCMACを計算する。次いで、SHE1022の検証部52は、該計算結果のCMACと、セキュアブート期待値とを比較する。この比較の結果、両者が一致する場合にはセキュアブートにおけるCMACの検証が合格であり、両者が一致しない場合にはセキュアブートにおけるCMACの検証が不合格である。SHE1022は、該セキュアブートにおけるCMACの検証結果を制御部41へ応答する。制御部41は、該セキュアブートにおけるCMACの検証が合格である場合に当該ECUコードの実行を進める。一方、制御部41は、該セキュアブートにおけるCMACの検証が不合格である場合には当該ECUコードの実行を停止する。
(ステップS111)第2のECU1020の制御部41は、セキュアブートにおけるCMACの検証結果を第1のECU1010へ送信する。該セキュアブートにおけるCMACの検証結果は、第1のECU1010を介して通信モジュール1051へ転送される。通信モジュール1051は、該転送されたセキュアブートにおけるCMACの検証結果をサーバ装置1300へ送信する。サーバ装置1300は、該通信モジュール1051から送信されたセキュアブートにおけるCMACの検証結果を、通信部11によって受信する。
(ステップS112)サーバ装置1300の検証部14は、自動車1001の通信モジュール1051から受信したセキュアブートにおけるCMACの検証結果に基づいて、該自動車1001へ提供したECUコードの適用の成否を判定する。セキュアブートにおけるCMACの検証結果が合格である場合には該ECUコードの適用が成功であり、セキュアブートにおけるCMACの検証結果が不合格である場合には該ECUコードの適用が失敗である。
なお、第2のECU1020の制御部41は、セキュアブートにおけるCMACの検証結果に、ステップS107でSHE1022によって計算したCMACを含めてもよい。この場合、サーバ装置1300の検証部14は、セキュアブートにおけるCMACの検証結果に含まれるCMACと、ステップS106で自動車1001へECUコードと共に送信した該ECUコードのCMACとを比較し、この比較結果に基づいて該自動車1001へ提供したECUコードの適用の成否を判定してもよい。該比較結果が一致である場合には該ECUコードの適用が成功であり、該比較結果が一致しない場合には該ECUコードの適用が失敗である。
上述した第1実施形態によれば、サーバ装置1300がECUコードの適用先のECUの初期鍵を生成し、該生成した初期鍵を使用してECUコードの期待値を生成し、ECUコードと該生成した期待値とを自動車1001へ提供する。自動車1001のECUは、ECUコードと共に受信した期待値を自己の初期鍵を使用して検証する。これにより、自動車1001のECUに適用されるECUコードの信頼性を向上させることができる。
第1実施形態において、サーバ装置1300はデータ提供装置に対応し、通信部11は提供部に対応する。また、上述した図5の例において、第2のECU1020の制御部41は期待値検証部に対応する。
[第2実施形態]
図6は、本実施形態に係る自動車1001の構成例を示す図である。本実施形態では、自動車1001に搭載されるECU(電子制御装置)に対して、更新プログラム等のデータを適用する場合を例に挙げて説明する。
図6において、図1の各部に対応する部分には同一の符号を付け、その説明を省略する。図6に示す自動車の構成例において、診断ポート1060にはメンテナンスツール(maintenance tool)1200を接続可能である。第1のECU1010と診断ポート1060に接続されたメンテナンスツール1200とは、診断ポート1060を介して、データを交換する。メンテナンスツール1200は、OBDポートに接続される従来の診断端末の機能を有していてもよい。
メンテナンスツール1200は、制御モジュール1201を備える。制御モジュール1201は、IC(Integrated Circuit)チップ1202を備える。ICチップ1202は、鍵等のデータを記憶する記憶部1203を備える。ICチップ1202は耐タンパー性を有する。ICチップ1202はセキュアエレメントの例である。ICチップ1202は、コンピュータの一種であり、コンピュータプログラムによって所望の機能を実現する。
サーバ装置1300は、通信回線を介して、メンテナンスツール1200とデータを送受する。例えば、サーバ装置1300とメンテナンスツール1200との間をVPN回線等の専用回線で接続し、該専用回線でデータを送受してもよい。
サーバ装置1300は、ECUに適用されるECUコードを、メンテナンスツール1200へ提供する。ECUコードは、ECUに適用されるデータの例である。ECUコードは、ECUにインストールされる更新プログラム等のコンピュータプログラムであってもよく、又は、ECUに設定されるパラメータ設定値などの設定データであってもよい。
図7は、メンテナンスツール1200の構成例を示す図である。図7において、メンテナンスツール1200は、通信部61と診断ポートインタフェース62と制御モジュール1201とを備える。制御モジュール1201は、制御部71とICチップ1202とを備える。ICチップ1202は、記憶部1203と期待値計算部73と検証部74と初期鍵生成部75とを備える。通信部61は、通信回線を介して、他の装置と通信を行う。診断ポートインタフェース62は、自動車1001の診断ポート1060を介して他の装置とデータを送受する。
制御部71は、メンテナンスツール1200の制御を行う。記憶部1203は、鍵等のデータを記憶する。期待値計算部73は、ECUコードについての期待値を計算する。検証部74は、電子署名等の検証を行う。初期鍵生成部75は、ECUの初期鍵を生成する。
制御部71の機能は、該制御部71が備えるCPUがコンピュータプログラムを実行することにより実現される。ICチップ1202の機能は、該ICチップ1202が備えるCPUがコンピュータプログラムを実行することにより実現される。
次に図8を参照して、本実施形態に係るECUコードの提供の手順の例を説明する。図8は、ECUコードの提供手順の例を示すシーケンスチャートである。なお、図8に示されるECUコード提供手順の例では、第2のECU1020に適用されるECUコードを例に挙げるが、第1のECU1010に適用されるECUコードについても、ECUコードの適用先が第1のECU1010になるのみで同様の手順を適用可能である。
図8において、サーバ装置1300は、サーバ秘密鍵Key_sv_sを備える。サーバ秘密鍵Key_sv_sは、記憶部12に格納されている。制御モジュール1201のICチップ1202は、マスタ鍵Master_Secretとサーバ公開鍵証明書Cert_svとを備える。サーバ公開鍵証明書Cert_svはサーバ秘密鍵Key_sv_sに対応する公開鍵証明書である。マスタ鍵Master_Secretとサーバ公開鍵証明書Cert_svとは、記憶部1203に格納されている。
第2のECU1020のSHE1022は、該第2のECU1020の初期鍵Key_ecuを備える。第2のECU1020の初期鍵Key_ecuは、該第2のECU1020のSHE1022の記憶部1023に格納される。第2のECU1020の初期鍵Key_ecuは、予め、該第2のECU1020のSHE1022に書き込まれる。例えば、第2のECU1020の製造時などに、初期鍵Key_ecuが該第2のECU1020のSHE1022に書き込まれる。初期鍵Key_ecuの生成方法は、上述の第1実施形態と同じである。
なお、第1のECU1010の初期鍵Key_ecuについても、第2のECU1020と同様に、予め、該第1のECU1010のHSM1012に格納される。第1のECU1010の初期鍵Key_ecuは、該第1のECU1010のHSM1012の記憶部1013に格納される。
(ステップS200)サーバ装置1300は、自動車1001へ提供するECUコードに対して、サーバ秘密鍵Key_sv_sを使用して電子署名を付する。サーバ装置1300の通信部11は、電子署名付きECUコードをメンテナンスツール1200へ送信する。メンテナンスツール1200は、通信部61によって該電子署名付きECUコードを受信する。
(ステップS201)メンテナンスツール1200の制御モジュール1201の制御部71は、通信部61によって受信した電子署名付きECUコードをICチップ1202に渡して電子署名の検証を要求する。ICチップ1202の検証部74は、該電子署名付きECUコードの電子署名を、記憶部1203に格納されているサーバ公開鍵証明書Cert_svを使用して検証する。ICチップ1202は、該電子署名の検証結果を制御部71へ応答する。制御部71は、該電子署名の検証が合格である場合にステップS202以降に処理を進める。一方、制御部71は、該電子署名の検証が不合格である場合には当該ECUコードの提供を停止する。なお、自動車1001へ提供するECUコードの正当性が確かである場合には、該電子署名の検証はなくてもよい。
(ステップS202)メンテナンスツール1200の制御モジュール1201の制御部71は、ECUコードの適用先の第2のECU1020のECU識別子ECU_IDの要求メッセージ(ECU識別子要求メッセージ)を、診断ポートインタフェース62を介して自動車1001へ送信する。自動車1001において、診断ポート1060を介して第1のECU1010により受信されたECU識別子要求メッセージは、第1のECU1010を介してECUコードの適用先の第2のECU1020へ転送される。
(ステップS203)第2のECU1020の制御部41は、ECU識別子要求メッセージを受信すると、自己のECU識別子ECU_IDを返信する。該第2のECU1020のECU識別子ECU_IDは、第1のECU1010を介して診断ポート1060からメンテナンスツール1200へ送信される。メンテナンスツール1200の制御モジュール1201の制御部71は、診断ポート1060を介して自動車1001から送信されたECU識別子ECU_ID、すなわちECUコードの適用先の第2のECU1020のECU識別子ECU_IDを、診断ポートインタフェース62を介して受信する。
なお、メンテナンスツール1200が、予め、ECUコードの適用先の第2のECU1020のECU識別子ECU_IDを取得する場合には、上述したステップS202とステップS203は不要である。例えば、サーバ装置1300が自動車1001の第2のECU1020のECU識別子ECU_IDのリストを管理している場合には、メンテナンスツール1200は、サーバ装置1300の該リストから、ECUコードの適用先の第2のECU1020のECU識別子ECU_IDを取得してもよい。
(ステップS204)メンテナンスツール1200の制御モジュール1201の制御部71は、ECUコードの適用先の第2のECU1020のECU識別子ECU_IDをICチップ1202に渡して初期鍵Key_ecuの生成を要求する。ICチップ1202の初期鍵生成部75は、記憶部1203に格納されているマスタ鍵Master_Secretと、ECUコードの適用先の第2のECU1020のECU識別子ECU_IDとを使用して、該ECUコードの適用先の第2のECU1020の初期鍵Key_ecuを生成する。
(ステップS205)制御部71は、自動車1001へ提供するECUコードをICチップ1202へ渡して期待値の計算を要求する。ICチップ1202の期待値計算部73は、初期鍵生成部75が生成した初期鍵Key_ecuを使用して、自動車1001へ提供するECUコードの期待値を計算する。本実施形態では、期待値の一例として、CMACを使用する。よって、期待値計算部73は、初期鍵生成部75が生成した初期鍵Key_ecuを使用して、自動車1001へ提供するECUコードのCMACを計算する。ICチップ1202は、期待値計算部73が計算したCMACを制御部71へ渡す。
(ステップS206)メンテナンスツール1200の制御モジュール1201の制御部71は、ECUコードとICチップ1202が計算した該ECUコードのCMACとを、診断ポートインタフェース62を介して自動車1001へ送信する。自動車1001において、診断ポート1060を介して第1のECU1010により受信されたECUコードと該ECUコードのCMACとは、第1のECU1010を介してECUコードの適用先の第2のECU1020へ転送される。
次いでステップS107からステップS110までが実行される。ステップS107からステップS110までは、上述した第1実施形態に係る図5のECUコード提供手順の例と同じである。ステップS110に次いでステップS211が実行される。
(ステップS211)第2のECU1020の制御部41は、セキュアブートにおけるCMACの検証結果を第1のECU1010へ送信する。該セキュアブートにおけるCMACの検証結果は、第1のECU1010を介して診断ポート1060からメンテナンスツール1200へ送信される。メンテナンスツール1200の制御モジュール1201の制御部71は、診断ポート1060を介して自動車1001から送信されたセキュアブートにおけるCMACの検証結果を、診断ポートインタフェース62を介して受信する。
(ステップS212)メンテナンスツール1200の制御モジュール1201の制御部71は、自動車1001から受信したセキュアブートにおけるCMACの検証結果に基づいて、該自動車1001へ提供したECUコードの適用の成否を判定する。セキュアブートにおけるCMACの検証結果が合格である場合には該ECUコードの適用が成功であり、セキュアブートにおけるCMACの検証結果が不合格である場合には該ECUコードの適用が失敗である。
なお、第2のECU1020の制御部41は、セキュアブートにおけるCMACの検証結果に、ステップS107でSHE1022によって計算したCMACを含めてもよい。この場合、メンテナンスツール1200の制御モジュール1201の制御部71は、セキュアブートにおけるCMACの検証結果に含まれるCMACをICチップ1202へ渡してCMACの検証を実施させてもよい。ICチップ1202の検証部74は、セキュアブートにおけるCMACの検証結果に含まれるCMACと、ステップS206で自動車1001へECUコードと共に送信した該ECUコードのCMACとを比較し、この比較結果を制御部71へ応答する。制御部71は、この比較結果に基づいて該自動車1001へ提供したECUコードの適用の成否を判定する。該比較結果が一致である場合には該ECUコードの適用が成功であり、該比較結果が一致しない場合には該ECUコードの適用が失敗である。
(ステップS213)メンテナンスツール1200の通信部61は、自動車1001へ提供したECUコードの適用の成否の判定結果を、サーバ装置1300へ送信する。
なお、メンテナンスツール1200は、セキュアブートにおけるCMACの検証結果に含まれるCMACをサーバ装置1300へ送信してもよい。また、サーバ装置1300は、該セキュアブートにおけるCMACの検証結果に含まれるCMACの検証を行ってもよい。
上述した第2実施形態によれば、メンテナンスツール1200がECUコードの適用先のECUの初期鍵を生成し、該生成した初期鍵を使用してECUコードの期待値を生成し、ECUコードと該生成した期待値とを自動車1001へ提供する。自動車1001のECUは、ECUコードと共に受信した期待値を自己の初期鍵を使用して検証する。これにより、自動車1001のECUに適用されるECUコードの信頼性を向上させることができる。
第2実施形態において、メンテナンスツール1200はデータ提供装置に対応し、制御部71及び診断ポートインタフェース62は提供部に対応する。また、上述した図8の例において、第2のECU1020の制御部41は期待値検証部に対応する。
[第3実施形態]
図9は、本実施形態に係る自動車1001の構成例を示す図である。本実施形態では、自動車1001に搭載されるECU(電子制御装置)に対して、更新プログラム等のデータを適用する場合を例に挙げて説明する。
図9において、図1の各部に対応する部分には同一の符号を付け、その説明を省略する。図9に示す自動車の構成例において、TCU1050の通信モジュール1051のSIM1052は、鍵等のデータを記憶する記憶部1053を備える。なお、SIM1052として、eSIMを使用してもよい。SIM及びeSIMは耐タンパー性を有する。SIM及びeSIMはセキュアエレメントの例である。セキュアエレメントは耐タンパー性を有する。SIM及びeSIMは、コンピュータの一種であり、コンピュータプログラムによって所望の機能を実現する。
サーバ装置1300は、上述の第1実施形態と同様に、通信回線を介して、自動車1001のTCU1050の通信モジュール1051とデータを送受する。例えば、サーバ装置1300と通信モジュール1051との間をVPN回線等の専用回線で接続し、該専用回線でデータを送受してもよい。例えば、SIM1052に対応する無線通信ネットワークによって、VPN回線等の専用回線が提供されてもよい。
サーバ装置1300は、ECUに適用されるECUコードを、TCU1050へ提供する。ECUコードは、ECUに適用されるデータの例である。ECUコードは、ECUにインストールされる更新プログラム等のコンピュータプログラムであってもよく、又は、ECUに設定されるパラメータ設定値などの設定データであってもよい。
図10は、TCU1050の構成例を示す図である。図10において、TCU1050は、インタフェース部82と通信モジュール1051とを備える。通信モジュール1051は、無線通信部91とSIM1052とを備える。SIM1052は、記憶部1053と期待値計算部93と検証部94と初期鍵生成部95とを備える。インタフェース部82は、第1のECU1010とデータを送受するインタフェースを備える。無線通信部91は、無線通信回線を介して、他の装置と通信を行う。
記憶部1053は、鍵等のデータを記憶する。期待値計算部93は、ECUコードについての期待値を計算する。検証部94は、電子署名等の検証を行う。初期鍵生成部95は、ECUの初期鍵を生成する。
無線通信部91の機能は、該無線通信部91が備えるCPUがコンピュータプログラムを実行することにより実現される。SIM1052の機能は、該SIM1052が備えるCPUがコンピュータプログラムを実行することにより実現される。
次に図11を参照して、本実施形態に係るECUコードの提供の手順の例を説明する。図11は、ECUコードの提供手順の例を示すシーケンスチャートである。なお、図11に示されるECUコード提供手順の例では、第2のECU1020に適用されるECUコードを例に挙げるが、第1のECU1010に適用されるECUコードについても、ECUコードの適用先が第1のECU1010になるのみで同様の手順を適用可能である。
図11において、サーバ装置1300は、サーバ秘密鍵Key_sv_sを備える。サーバ秘密鍵Key_sv_sは、記憶部12に格納されている。通信モジュール1051のSIM1052は、マスタ鍵Master_Secretとサーバ公開鍵証明書Cert_svとを備える。サーバ公開鍵証明書Cert_svはサーバ秘密鍵Key_sv_sに対応する公開鍵証明書である。マスタ鍵Master_Secretとサーバ公開鍵証明書Cert_svとは、記憶部1053に格納されている。
第2のECU1020のSHE1022は、該第2のECU1020の初期鍵Key_ecuを備える。第2のECU1020の初期鍵Key_ecuは、該第2のECU1020のSHE1022の記憶部1023に格納される。第2のECU1020の初期鍵Key_ecuは、予め、該第2のECU1020のSHE1022に書き込まれる。例えば、第2のECU1020の製造時などに、初期鍵Key_ecuが該第2のECU1020のSHE1022に書き込まれる。初期鍵Key_ecuの生成方法は、上述の第1実施形態と同じである。
なお、第1のECU1010の初期鍵Key_ecuについても、第2のECU1020と同様に、予め、該第1のECU1010のHSM1012に格納される。第1のECU1010の初期鍵Key_ecuは、該第1のECU1010のHSM1012の記憶部1013に格納される。
(ステップS300)サーバ装置1300は、自動車1001へ提供するECUコードに対して、サーバ秘密鍵Key_sv_sを使用して電子署名を付する。サーバ装置1300の通信部11は、電子署名付きECUコードを自動車1001の通信モジュール1051へ送信する。自動車1001の通信モジュール1051は、無線通信部91によって該電子署名付きECUコードを受信する。
(ステップS301)通信モジュール1051の無線通信部91は、サーバ装置1300から受信した電子署名付きECUコードをSIM1052に渡して電子署名の検証を要求する。SIM1052の検証部94は、該電子署名付きECUコードの電子署名を、記憶部1053に格納されているサーバ公開鍵証明書Cert_svを使用して検証する。SIM1052は、該電子署名の検証結果を無線通信部91へ応答する。無線通信部91は、該電子署名の検証が合格である場合にステップS302以降に処理を進める。一方、無線通信部91は、該電子署名の検証が不合格である場合には当該ECUコードの提供を停止する。なお、自動車1001へ提供するECUコードの正当性が確かである場合には、該電子署名の検証はなくてもよい。
(ステップS302)通信モジュール1051の無線通信部91は、ECUコードの適用先の第2のECU1020のECU識別子ECU_IDの要求メッセージ(ECU識別子要求メッセージ)を、インタフェース部82を介して第1のECU1010へ送信する。第1のECU1010により受信されたECU識別子要求メッセージは、第1のECU1010を介してECUコードの適用先の第2のECU1020へ転送される。
(ステップS303)第2のECU1020の制御部41は、ECU識別子要求メッセージを受信すると、自己のECU識別子ECU_IDを返信する。該第2のECU1020のECU識別子ECU_IDは、第1のECU1010を介してTCU1050へ送信される。通信モジュール1051の無線通信部91は、インタフェース部82を介してECU識別子ECU_ID、すなわちECUコードの適用先の第2のECU1020のECU識別子ECU_IDを受信する。
なお、TCU1050が、予め、ECUコードの適用先の第2のECU1020のECU識別子ECU_IDを取得する場合には、上述したステップS302とステップS303は不要である。例えば、サーバ装置1300が自動車1001の第2のECU1020のECU識別子ECU_IDのリストを管理している場合には、TCU1050は、サーバ装置1300の該リストから、ECUコードの適用先の第2のECU1020のECU識別子ECU_IDを取得してもよい。
(ステップS304)通信モジュール1051の無線通信部91は、ECUコードの適用先の第2のECU1020のECU識別子ECU_IDをSIM1052に渡して初期鍵Key_ecuの生成を要求する。SIM1052の初期鍵生成部95は、記憶部1053に格納されているマスタ鍵Master_Secretと、ECUコードの適用先の第2のECU1020のECU識別子ECU_IDとを使用して、該ECUコードの適用先の第2のECU1020の初期鍵Key_ecuを生成する。
(ステップS305)無線通信部91は、自動車1001へ提供するECUコードをSIM1052へ渡して期待値の計算を要求する。SIM1052の期待値計算部93は、初期鍵生成部95が生成した初期鍵Key_ecuを使用して、自動車1001へ提供するECUコードの期待値を計算する。本実施形態では、期待値の一例として、CMACを使用する。よって、期待値計算部93は、初期鍵生成部95が生成した初期鍵Key_ecuを使用して、自動車1001へ提供するECUコードのCMACを計算する。SIM1052は、期待値計算部93が計算したCMACを無線通信部91へ渡す。
(ステップS306)無線通信部91は、ECUコードとSIM1052が計算した該ECUコードのCMACとを、インタフェース部82を介して第1のECU1010へ送信する。第1のECU1010により受信されたECUコードと該ECUコードのCMACとは、第1のECU1010を介してECUコードの適用先の第2のECU1020へ転送される。
次いでステップS107からステップS110までが実行される。ステップS107からステップS110までは、上述した第1実施形態に係る図5のECUコード提供手順の例と同じである。ステップS110に次いでステップS311が実行される。
(ステップS311)第2のECU1020の制御部41は、セキュアブートにおけるCMACの検証結果を第1のECU1010へ送信する。該セキュアブートにおけるCMACの検証結果は、第1のECU1010を介してTCU1050へ送信される。TCU1050の通信モジュール1051の無線通信部91は、第1のECU1010から送信されたセキュアブートにおけるCMACの検証結果を、インタフェース部82を介して受信する。
(ステップS312)TCU1050の通信モジュール1051の無線通信部91は、第1のECU1010から受信したセキュアブートにおけるCMACの検証結果に基づいて、自動車1001へ提供したECUコードの適用の成否を判定する。セキュアブートにおけるCMACの検証結果が合格である場合には該ECUコードの適用が成功であり、セキュアブートにおけるCMACの検証結果が不合格である場合には該ECUコードの適用が失敗である。
なお、第2のECU1020の制御部41は、セキュアブートにおけるCMACの検証結果に、ステップS107でSHE1022によって計算したCMACを含めてもよい。この場合、無線通信部91は、セキュアブートにおけるCMACの検証結果に含まれるCMACをSIM1052へ渡してCMACの検証を実施させてもよい。SIM1052の検証部94は、セキュアブートにおけるCMACの検証結果に含まれるCMACと、ステップS306でECUコードと共に送信した該ECUコードのCMACとを比較し、この比較結果を無線通信部91へ応答する。無線通信部91は、この比較結果に基づいて自動車1001へ提供したECUコードの適用の成否を判定する。該比較結果が一致である場合には該ECUコードの適用が成功であり、該比較結果が一致しない場合には該ECUコードの適用が失敗である。
(ステップS313)無線通信部91は、自動車1001へ提供したECUコードの適用の成否の判定結果を、サーバ装置1300へ送信する。
なお、無線通信部91は、セキュアブートにおけるCMACの検証結果に含まれるCMACをサーバ装置1300へ送信してもよい。また、サーバ装置1300は、該セキュアブートにおけるCMACの検証結果に含まれるCMACの検証を行ってもよい。
上述した第3実施形態によれば、通信モジュール1051がECUコードの適用先のECUの初期鍵を生成し、該生成した初期鍵を使用してECUコードの期待値を生成し、ECUコードと該生成した期待値とを自動車1001へ提供する。自動車1001のECUは、ECUコードと共に受信した期待値を自己の初期鍵を使用して検証する。これにより、自動車1001のECUに適用されるECUコードの信頼性を向上させることができる。
第3実施形態において、TCU1050はデータ提供装置に対応し、無線通信部91及びインタフェース部82は提供部に対応する。また、上述した図11の例において、第2のECU1020の制御部41は期待値検証部に対応する。
[第4実施形態]
本実施形態において、自動車1001の構成例は図1を適用できる。図12は、本実施形態に係る第1のECU1010の構成例を示す図である。図12において、図3の各部に対応する部分には同一の符号を付け、その説明を省略する。図12に示す第1のECU1010において、HSM1012は、図3の構成に加えてさらに初期鍵生成部33を備える。初期鍵生成部33は、ECUの初期鍵を生成する。
次に図13を参照して、本実施形態に係るECUコードの提供の手順の例を説明する。図13は、ECUコードの提供手順の例を示すシーケンスチャートである。なお、図13に示されるECUコード提供手順の例では、第2のECU1020に適用されるECUコードを例に挙げるが、第1のECU1010に適用されるECUコードについても、ECUコードの適用先が第1のECU1010になるのみで同様の手順を適用可能である。
図13において、サーバ装置1300は、サーバ秘密鍵Key_sv_sを備える。サーバ秘密鍵Key_sv_sは、記憶部12に格納されている。第1のECU1010のHSM1012は、マスタ鍵Master_Secretとサーバ公開鍵証明書Cert_svとを備える。サーバ公開鍵証明書Cert_svはサーバ秘密鍵Key_sv_sに対応する公開鍵証明書である。マスタ鍵Master_Secretとサーバ公開鍵証明書Cert_svとは、記憶部1013に格納されている。
第2のECU1020のSHE1022は、該第2のECU1020の初期鍵Key_ecuを備える。第2のECU1020の初期鍵Key_ecuは、該第2のECU1020のSHE1022の記憶部1023に格納される。第2のECU1020の初期鍵Key_ecuは、予め、該第2のECU1020のSHE1022に書き込まれる。例えば、第2のECU1020の製造時などに、初期鍵Key_ecuが該第2のECU1020のSHE1022に書き込まれる。初期鍵Key_ecuの生成方法は、上述の第1実施形態と同じである。
なお、第1のECU1010の初期鍵Key_ecuについても、第2のECU1020と同様に、予め、該第1のECU1010のHSM1012に格納される。第1のECU1010の初期鍵Key_ecuは、該第1のECU1010のHSM1012の記憶部1013に格納される。
(ステップS400)サーバ装置1300は、自動車1001へ提供するECUコードに対して、サーバ秘密鍵Key_sv_sを使用して電子署名を付する。サーバ装置1300の通信部11は、電子署名付きECUコードを自動車1001の通信モジュール1051へ送信する。自動車1001の通信モジュール1051は、該サーバ装置1300から受信した電子署名付きECUコードを第1のECU1010へ転送する。
(ステップS401)第1のECU1010の制御部21は、通信モジュール1051から受信した電子署名付きECUコードをHSM1012に渡して電子署名の検証を要求する。HSM1012の検証部32は、該電子署名付きECUコードの電子署名を、記憶部1013に格納されているサーバ公開鍵証明書Cert_svを使用して検証する。HSM1012は、該電子署名の検証結果を制御部21へ応答する。制御部21は、該電子署名の検証が合格である場合にステップS402以降に処理を進める。一方、制御部21は、該電子署名の検証が不合格である場合には当該ECUコードの提供を停止する。なお、自動車1001へ提供するECUコードの正当性が確かである場合には、該電子署名の検証はなくてもよい。
(ステップS402)第1のECU1010の制御部21は、ECUコードの適用先の第2のECU1020のECU識別子ECU_IDの要求メッセージ(ECU識別子要求メッセージ)を、インタフェース部20を介して該ECUコードの適用先の第2のECU1020へ送信する。
(ステップS403)第2のECU1020の制御部41は、ECU識別子要求メッセージを受信すると、自己のECU識別子ECU_IDを第1のECU1010へ返信する。第1のECU1010の制御部21は、インタフェース部20を介してECU識別子ECU_ID、すなわちECUコードの適用先の第2のECU1020のECU識別子ECU_IDを受信する。
なお、第1のECU1010が、予め、ECUコードの適用先の第2のECU1020のECU識別子ECU_IDを取得する場合には、上述したステップS402とステップS403は不要である。例えば、サーバ装置1300が自動車1001の第2のECU1020のECU識別子ECU_IDのリストを管理している場合には、第1のECU1010は、サーバ装置1300の該リストから、ECUコードの適用先の第2のECU1020のECU識別子ECU_IDを取得してもよい。
(ステップS404)第1のECU1010の制御部21は、ECUコードの適用先の第2のECU1020のECU識別子ECU_IDをHSM1012に渡して初期鍵Key_ecuの生成を要求する。HSM1012の初期鍵生成部33は、記憶部1013に格納されているマスタ鍵Master_Secretと、ECUコードの適用先の第2のECU1020のECU識別子ECU_IDとを使用して、該ECUコードの適用先の第2のECU1020の初期鍵Key_ecuを生成する。
(ステップS405)制御部21は、自動車1001へ提供するECUコードをHSM1012へ渡して期待値の計算を要求する。HSM1012の期待値計算部31は、初期鍵生成部33が生成した初期鍵Key_ecuを使用して、自動車1001へ提供するECUコードの期待値を計算する。本実施形態では、期待値の一例として、CMACを使用する。よって、期待値計算部31は、初期鍵生成部33が生成した初期鍵Key_ecuを使用して、自動車1001へ提供するECUコードのCMACを計算する。HSM1012は、期待値計算部31が計算したCMACを制御部21へ渡す。
(ステップS406)制御部21は、ECUコードとHSM1012が計算した該ECUコードのCMACとを、インタフェース部20を介して該ECUコードの適用先の第2のECU1020へ送信する。
次いでステップS107からステップS110までが実行される。ステップS107からステップS110までは、上述した第1実施形態に係る図5のECUコード提供手順の例と同じである。ステップS110に次いでステップS411が実行される。
(ステップS411)第2のECU1020の制御部41は、セキュアブートにおけるCMACの検証結果を第1のECU1010へ送信する。
(ステップS412)第1のECU1010の制御部21は、第2のECU1020から受信したセキュアブートにおけるCMACの検証結果に基づいて、自動車1001へ提供したECUコードの適用の成否を判定する。セキュアブートにおけるCMACの検証結果が合格である場合には該ECUコードの適用が成功であり、セキュアブートにおけるCMACの検証結果が不合格である場合には該ECUコードの適用が失敗である。
なお、第2のECU1020の制御部41は、セキュアブートにおけるCMACの検証結果に、ステップS107でSHE1022によって計算したCMACを含めてもよい。この場合、第1のECU1010の制御部21は、セキュアブートにおけるCMACの検証結果に含まれるCMACをHSM1012へ渡してCMACの検証を実施させてもよい。HSM1012の検証部32は、セキュアブートにおけるCMACの検証結果に含まれるCMACと、ステップS406でECUコードと共に送信した該ECUコードのCMACとを比較し、この比較結果を制御部21へ応答する。制御部21は、この比較結果に基づいて自動車1001へ提供したECUコードの適用の成否を判定する。該比較結果が一致である場合には該ECUコードの適用が成功であり、該比較結果が一致しない場合には該ECUコードの適用が失敗である。
(ステップS413)第1のECU1010の制御部21は、自動車1001へ提供したECUコードの適用の成否の判定結果を、TCU1050の通信モジュール1051を介してサーバ装置1300へ送信する。
なお、第1のECU1010の制御部21は、セキュアブートにおけるCMACの検証結果に含まれるCMACをサーバ装置1300へ送信してもよい。また、サーバ装置1300は、該セキュアブートにおけるCMACの検証結果に含まれるCMACの検証を行ってもよい。
上述した第4実施形態によれば、第1のECU1010がECUコードの適用先のECUの初期鍵を生成し、該生成した初期鍵を使用してECUコードの期待値を生成し、ECUコードと該生成した期待値とを自動車1001へ提供する。自動車1001のECUは、ECUコードと共に受信した期待値を自己の初期鍵を使用して検証する。これにより、自動車1001のECUに適用されるECUコードの信頼性を向上させることができる。
第4実施形態において、第1のECU1010はデータ提供装置に対応し、制御部21及びインタフェース部20は提供部に対応する。また、上述した図13の例において、第2のECU1020の制御部41は期待値検証部に対応する。
以上、本発明の実施形態について図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の設計変更等も含まれる。
なお、第1のECU1010が備える暗号処理部は、HSM1012に限定されない。第1のECU1010が備える暗号処理部として、例えば「TPM(Trusted Platform Module)f」と呼ばれる暗号処理チップを使用してもよい。TPMfは耐タンパー性を有する。TPMfはセキュアエレメントの例である。
また、第2のECU1020が備える暗号処理部は、SHE1022に限定されない。第2のECU1020が備える暗号処理部として、例えば「TPMt」と呼ばれる暗号処理チップを使用してもよい。TPMtは耐タンパー性を有する。TPMtはセキュアエレメントの例である。
上述した実施形態では、車両として自動車を例に挙げたが、原動機付自転車や鉄道車両等の自動車以外の他の車両にも適用可能である。
また、上述したサーバ装置、メンテナンスツール、又は自動車に備わる各装置の機能を実現するためのコンピュータプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行するようにしてもよい。なお、ここでいう「コンピュータシステム」とは、OSや周辺機器等のハードウェアを含むものであってもよい。
また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ROM、フラッシュメモリ等の書き込み可能な不揮発性メモリ、DVD(Digital Versatile Disc)等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。
さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムが送信された場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリ(例えばDRAM(Dynamic Random Access Memory))のように、一定時間プログラムを保持しているものも含むものとする。
また、上記プログラムは、このプログラムを記憶装置等に格納したコンピュータシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータシステムに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク(通信網)や電話回線等の通信回線(通信線)のように情報を伝送する機能を有する媒体のことをいう。
また、上記プログラムは、前述した機能の一部を実現するためのものであっても良い。さらに、前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるもの、いわゆる差分ファイル(差分プログラム)であっても良い。