(57)【要約】      （修正有）【課題】送信ノードと受信ノードが接続される通信ネットワークシステムにおけるメッセージ検査性能を向上させる通信ネットワークシステム及びメッセージ検査方法を提供する。【解決手段】送信ノードにおいて、ＭＡＣ生成部は送信データと送信カウンタ値と秘密情報に基づいて第１ＭＡＣを生成し、送信部は送信データと第１ＭＡＣのうち送信カウンタ値で特定される抽出場所から抽出された抽出値とを有するメッセージを送信する。受信ノードにおいて、ＭＡＣ検査部は受信したメッセージから取得した受信データと受信カウンタ値と秘密情報とに基づいて第２ＭＡＣを生成し、第２ＭＡＣのうち前記抽出場所から取得した検査値と、受信したメッセージから取得した抽出値とが一致するかを検査し、検査の結果が不一致である場合に、第２ＭＡＣから検査値を取得する取得場所を変えながら、第２ＭＡＣから検査値を取得して抽出値と一致するか否かを再検査する。【選択図】図２
2018026822.tif 000002
【特許請求の範囲】
【請求項１】
メッセージを送信する送信ノードと前記メッセージを受信する受信ノードが接続される通信ネットワークシステムであり、
前記送信ノードは、
前記メッセージの送信毎に所定のカウント値だけ増加させる送信カウンタ値を保持する送信カウンタ部と、
秘密情報を記憶する秘密情報記憶部と、
前記メッセージ中のデータ部に格納される送信データと前記保持されている送信カウンタ値と前記秘密情報とに基づいて第１メッセージ認証コードを生成するメッセージ認証コード生成部と、
前記送信データと、前記第１メッセージ認証コードのビット列うち、前記送信カウンタ値で特定される抽出場所から抽出された一部分のビット列である抽出値とを有する前記メッセージを送信する送信部と、を備え、
前記受信ノードは、
前記メッセージの受信毎に前記カウント値だけ増加させる受信カウンタ値を保持する受信カウンタ部と、
前記秘密情報を記憶する秘密情報記憶部と、
前記受信したメッセージ中のデータ部から取得した受信データと前記保持されている受信カウンタ値と前記秘密情報とに基づいて第２メッセージ認証コードを生成し、前記第２メッセージ認証コードのビット列うち、前記抽出場所から取得した一部分のビット列である検査値と、前記受信したメッセージから取得した抽出値とが一致するかを検査するメッセージ認証コード検査部と、を備え、
前記メッセージ認証コード検査部は、前記検査の結果が不一致である場合に、前記第２メッセージ認証コードから検査値を取得する取得場所を変えながら、前記第２メッセージ認証コードから検査値を取得して前記抽出値と一致するか否かを再検査する、
通信ネットワークシステム。
【請求項２】
前記受信カウンタ部は、前記再検査の結果が一致である場合に、当該一致した検査値が前記第２メッセージ認証コードから取得された取得場所で特定される値に基づいて受信カウンタ値を変更する、
請求項１に記載の通信ネットワークシステム。
【請求項３】
前記送信部は、送信する前記メッセージに対して、前記抽出場所を示す情報を格納する、
請求項１又は２のいずれか１項に記載の通信ネットワークシステム。
【請求項４】
メッセージを送信する送信ノードと前記メッセージを受信する受信ノードが接続される通信ネットワークシステムにおけるメッセージ検査方法であり、
前記送信ノード及び前記受信ノードが同じ秘密情報を記憶し、
前記送信ノードが、前記メッセージの送信毎に所定のカウント値だけ増加させる送信カウンタ値を保持する送信カウンタステップと、
前記送信ノードが、前記メッセージ中のデータ部に格納される送信データと前記保持されている送信カウンタ値と前記秘密情報とに基づいて第１メッセージ認証コードを生成するメッセージ認証コード生成ステップと、
前記送信ノードが、前記送信データと、前記第１メッセージ認証コードのビット列うち、前記送信カウンタ値で特定される抽出場所から抽出された一部分のビット列である抽出値とを有する前記メッセージを送信する送信ステップと、
前記受信ノードが、前記メッセージの受信毎に前記カウント値だけ増加させる受信カウンタ値を保持する受信カウンタステップと、
前記受信ノードが、前記受信したメッセージ中のデータ部から取得した受信データと前記保持されている受信カウンタ値と前記秘密情報とに基づいて第２メッセージ認証コードを生成し、前記第２メッセージ認証コードのビット列うち、前記抽出場所から取得した一部分のビット列である検査値と、前記受信したメッセージから取得した抽出値とが一致するかを検査するメッセージ認証コード検査ステップと、
前記受信ノードが、前記検査の結果が不一致である場合に、前記第２メッセージ認証コードから検査値を取得する取得場所を変えながら、前記第２メッセージ認証コードから検査値を取得して前記抽出値と一致するか否かを再検査する再検査ステップと、
を含むメッセージ検査方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信ネットワークシステム及びメッセージ検査方法に関する。
【背景技術】
【０００２】
従来、車両に搭載される通信ネットワークの一つとして知られているＣＡＮ（Controller Area Network）が、車両内の各種ＥＣＵ（Electronic Control Unit）間の通信に用いられている。そのＣＡＮにおいてメッセージの認証を可能にする技術として、例えば非特許文献１，２、特許文献１に記載の技術が知られている。
【０００３】
非特許文献１に記載の従来技術では、ＣＡＮに接続された偽のＥＣＵからなりすましメッセージを発信する攻撃に対して、本物のＥＣＵが、自己のＩＤが付与されたなりすましメッセージを検知すると、自己のＩＤを付与した異常を知らせるメッセージを発信することで、受信側ＥＣＵに対して異常を報知している。
【０００４】
非特許文献２に記載の従来技術では、ＣＡＮフレーム中の誤り訂正（Cyclic Redundancy Check：CRC）フィールドに格納する情報をＭＡＣ（Message Authentication Code）に変更している。この従来技術では、送信側は、Ｎ番目からＮ＋３番目までの４つのＣＡＮフレーム中のデータフィールドのデータ（６４×４＝２５６ビット）から６４ビットのＭＡＣを生成し、該ＭＡＣを１６ビットずつに４分割して、Ｎ＋４番目からＮ＋７番目までの４つのＣＡＮフレーム中のＣＲＣフィールド（１６ビット）にそれぞれ格納して各ＣＡＮフレームを送信する。受信側では、Ｎ＋４番目からＮ＋７番目までのＣＡＮフレーム中のＣＲＣフィールドからＭＡＣを取得し、Ｎ番目からＮ＋３番目までのＣＡＮフレーム中のデータフィールドから生成されるＭＡＣと一致するか否かによってＮ番目からＮ＋３番目までのＣＡＮフレームが正当であるか否かを判断する。これにより、ＣＲＣフィールドから得られるＭＡＣと、データフィールドから算出されるＭＡＣとが異なる場合には、Ｎ番目からＮ＋３番目までのＣＡＮフレームのいずれかが不正であると判断できる。
【０００５】
特許文献１に記載の技術では、各ＥＣＵにおいてＣＡＮＩＤごとにメッセージが送信された回数をカウントする。そして、メインメッセージを送信した送信ノードは、メインメッセージのデータフィールドおよびＣＡＮＩＤと、ＣＡＮＩＤに対応するカウンタ値とから生成したＭＡＣを含むＭＡＣメッセージを送信する。メインメッセージを受信した受信ノードは、メインメッセージに含まれるデータフィールドおよびＣＡＮＩＤと、ＣＡＮＩＤに対応するカウンタ値とからＭＡＣを生成して、受信したＭＡＣメッセージに含まれるＭＡＣと一致するかを判断する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】国際公開第２０１３／０６５６８９号
【非特許文献】
【０００７】
【非特許文献１】畑正人、田邉正人、吉岡克成、大石和臣、松本勉、“不正送信阻止：CANではそれが可能である”、情報処理学会、コンピュータセキュリティシンポジウム（CSS2011）、pp.624-629、2011年10月．
【非特許文献２】AKIRA YOSHIOKA ET AL.: “Kosei Shomei Kino o Motsu Shanai Tsushin Protocol no Teian” SYMPOSIUM ON MULTIMEDIA, DISTRIBUTED, COOPERATIVE AND MOBILE SYSTEMS (DICOM02008) RONBUNSHU vol. 2008, no. 1, 02 July 2008, pages 1270 - 1275
【非特許文献３】RFC 2104 HMAC: Keyed-Hashing for Message Authentication、［２０１４年５月２６日検索］、インターネット＜ＵＲＬ：http://www.rfc-editor.org/rfc/rfc2104.txt＞
【非特許文献４】RFC 2104 HMAC：メッセージ認証のための鍵付ハッシング、［２０１４年５月２６日検索］、インターネット＜ＵＲＬ：http://www.ipa.go.jp/security/rfc/RFC2104JA.html＞
【非特許文献５】竹森敬祐、川端秀明、窪田歩、“ARM＋SIM/UIMによるセキュアブート”、電子情報通信学会、暗号と情報セキュリティシンポジウム（SCIS2014）、1B1-2、2014年1月．
【非特許文献６】Trusted Computing Group、［２０１４年１２月２６日検索］、インターネット＜ＵＲＬ：http://www.trustedcomputinggroup.org/＞
【非特許文献７】“CAN通信におけるデータ送信の仕組みとは？”、［２０１４年１２月２６日検索］、インターネット＜ＵＲＬ：http://monoist.atmarkit.co.jp/mn/articles/0807/09/news140.html＞
【非特許文献８】“はじめての診断― Diagnostic Communication入門―”、［２０１４年１２月２６日検索］、インターネット＜ＵＲＬ：http://download.vector-japan.co.jp/pdf/HajimetenoD_ver101.pdf＞
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかし、上述した非特許文献１に記載の従来技術では、通信を監視する本物のＥＣＵが取り外された場合に異常を報知できない。また、非特許文献２に記載の従来技術では、Ｎ番目からＮ＋３番目までのＣＡＮフレームの正当性を確認するためには、Ｎ＋４番目からＮ＋７番目までのＣＡＮフレームを受信するまで待たなければならないので、該正当性の確認に時間がかかる。このため、特にリアルタイム制御が求められる場合には適していない。また、特許文献１に記載の従来技術では、メインメッセージとは別にＭＡＣメッセージを送信するので通信量が２倍以上になる。さらに、メインメッセージの認証を行うためには、ＭＡＣメッセージを受信するまで待たなければならないので、該認証に時間がかかる。このため、ＣＡＮの通信帯域の圧迫と即時性の低下という問題がある。
【０００９】
本発明は、このような事情を考慮してなされたものであり、メッセージを送信する送信ノードと該メッセージを受信する受信ノードが接続される通信ネットワークシステムにおけるメッセージ検査性能を向上させることができる、通信ネットワークシステム及びメッセージ検査方法を提供することを課題とする。
【課題を解決するための手段】
【００１０】
（１）本発明の一態様は、メッセージを送信する送信ノードと前記メッセージを受信する受信ノードが接続される通信ネットワークシステムであり、前記送信ノードは、前記メッセージの送信毎に所定のカウント値だけ増加させる送信カウンタ値を保持する送信カウンタ部と、秘密情報を記憶する秘密情報記憶部と、前記メッセージ中のデータ部に格納される送信データと前記保持されている送信カウンタ値と前記秘密情報とに基づいて第１メッセージ認証コードを生成するメッセージ認証コード生成部と、前記送信データと、前記第１メッセージ認証コードのビット列うち、前記送信カウンタ値で特定される抽出場所から抽出された一部分のビット列である抽出値とを有する前記メッセージを送信する送信部と、を備え、前記受信ノードは、前記メッセージの受信毎に前記カウント値だけ増加させる受信カウンタ値を保持する受信カウンタ部と、前記秘密情報を記憶する秘密情報記憶部と、前記受信したメッセージ中のデータ部から取得した受信データと前記保持されている受信カウンタ値と前記秘密情報とに基づいて第２メッセージ認証コードを生成し、前記第２メッセージ認証コードのビット列うち、前記抽出場所から取得した一部分のビット列である検査値と、前記受信したメッセージから取得した抽出値とが一致するかを検査するメッセージ認証コード検査部と、を備え、前記メッセージ認証コード検査部は、前記検査の結果が不一致である場合に、前記第２メッセージ認証コードから検査値を取得する取得場所を変えながら、前記第２メッセージ認証コードから検査値を取得して前記抽出値と一致するか否かを再検査する、通信ネットワークシステムである。
（２）本発明の一態様は、前記受信カウンタ部は、前記再検査の結果が一致である場合に、当該一致した検査値が前記第２メッセージ認証コードから取得された取得場所で特定される値に基づいて受信カウンタ値を変更する、通信ネットワークシステムである。
（３）本発明の一態様は、前記送信部は、送信する前記メッセージに対して、前記抽出場所を示す情報を格納する、通信ネットワークシステムである。
【００１１】
（４）本発明の一態様は、メッセージを送信する送信ノードと前記メッセージを受信する受信ノードが接続される通信ネットワークシステムにおけるメッセージ検査方法であり、前記送信ノード及び前記受信ノードが同じ秘密情報を記憶し、前記送信ノードが、前記メッセージの送信毎に所定のカウント値だけ増加させる送信カウンタ値を保持する送信カウンタステップと、前記送信ノードが、前記メッセージ中のデータ部に格納される送信データと前記保持されている送信カウンタ値と前記秘密情報とに基づいて第１メッセージ認証コードを生成するメッセージ認証コード生成ステップと、前記送信ノードが、前記送信データと、前記第１メッセージ認証コードのビット列うち、前記送信カウンタ値で特定される抽出場所から抽出された一部分のビット列である抽出値とを有する前記メッセージを送信する送信ステップと、前記受信ノードが、前記メッセージの受信毎に前記カウント値だけ増加させる受信カウンタ値を保持する受信カウンタステップと、前記受信ノードが、前記受信したメッセージ中のデータ部から取得した受信データと前記保持されている受信カウンタ値と前記秘密情報とに基づいて第２メッセージ認証コードを生成し、前記第２メッセージ認証コードのビット列うち、前記抽出場所から取得した一部分のビット列である検査値と、前記受信したメッセージから取得した抽出値とが一致するかを検査するメッセージ認証コード検査ステップと、前記受信ノードが、前記検査の結果が不一致である場合に、前記第２メッセージ認証コードから検査値を取得する取得場所を変えながら、前記第２メッセージ認証コードから検査値を取得して前記抽出値と一致するか否かを再検査する再検査ステップと、を含むメッセージ検査方法である。
【発明の効果】
【００１２】
本発明によれば、メッセージを送信する送信ノードと該メッセージを受信する受信ノードが接続される通信ネットワークシステムにおけるメッセージ検査性能を向上させることができるという効果が得られる。
【図面の簡単な説明】
【００１３】
【図１】本発明の第１実施形態に係る通信ネットワークシステム１の構成を示すブロック図である。
【図２】本発明の第１実施形態に係るＭＣＵ＿２（ノード）の構成を示すブロック図である。
【図３】本発明の第１実施形態に係るデータフレームの構成を示す図である。
【図４】本発明の第１実施形態に係る送信処理の手順を示す図である。
【図５】本発明の第１実施形態に係る受信処理の手順を示す図である。
【図６】本発明の第１実施形態に係る受信処理の手順を示す図である。
【図７】本発明の第２実施形態に係る通信ネットワークシステム１の構成を示すブロック図である。
【図８】本発明の第２実施形態に係るブート処理のシーケンスチャートである。
【図９】本発明の第２実施形態に係る暗号処理のシーケンスチャートである。
【図１０】本発明の第２実施形態に係るＭＡＣ生成処理およびＭＡＣ検査処理を説明するためのシーケンスチャートである。
【図１１】本発明の一実施形態に係るデータフレームの他の例を示す構成図である。
【図１２】ＣＡＮにおける拡張フォーマットのデータフレームを示す構成図である。
【図１３】本発明の一実施形態に係るＭＡＣ格納方法の例１を示す説明図である。
【図１４】本発明の一実施形態に係るＭＡＣ格納方法の例２を示す説明図である。
【図１５】本発明の一実施形態に係るＭＡＣ格納方法の例３を示す説明図である。
【図１６】本発明の一実施形態に係るデータフレームの他の例を示す構成図である。
【図１７】本発明の一実施形態に係るデータフレームに格納するＭＡＣデータの他の例を示す説明図である。
【図１８】本発明の一実施形態に係るデータフレームに格納するＭＡＣデータの他の例を示す説明図である。
【図１９】本発明の一実施形態に係る暗号処理のシーケンスチャートである。
【図２０】本発明の一実施形態に係る暗号処理のシーケンスチャートである。
【図２１】本発明の一実施形態に係る暗号処理のシーケンスチャートである。
【図２２】本発明の一実施形態に係るＭＡＣ生成処理およびＭＡＣ検査処理を説明するためのシーケンスチャートである。
【発明を実施するための形態】
【００１４】
以下、図面を参照し、本発明の実施形態について説明する。
【００１５】
［第１実施形態］
本実施形態では、本発明に係る通信ネットワークシステムの一態様として、車両に搭載される通信ネットワークシステムとしてのＣＡＮを例に挙げて説明する。図１は、本発明の第１実施形態に係る通信ネットワークシステム１の構成を示すブロック図である。図１において、通信ネットワークシステム１は、複数のＭＣＵ（Micro Computing Unit）＿２を有する。ＭＣＵ＿２は、ＣＰＵ（Central Processing Unit：中央演算処理装置）及びメモリ等から構成されるものであって、コンピュータの一種である。ＭＣＵ＿２は、自己のＣＰＵがコンピュータプログラムを実行することにより、該コンピュータプログラムに該当する機能を実現する。各ＭＣＵ＿２は、車両内の機器を制御する電子制御ユニット（ＥＣＵ）として利用される。
【００１６】
ＭＣＵ＿２はＣＡＮの通信バス３に接続されている。本実施形態では、説明の便宜上、通信ネットワークシステム１は３台のＭＣＵ＿２を有するものとし、該３台のＭＣＵ＿２が通信バス３に接続されている。通信バス３は、各ＭＣＵ＿２の間で交換されるメッセージを伝送する。各ＭＣＵ＿２は、通信バス３を介して、相互にメッセージを送受する。ＣＡＮでは、所定のフレーム形式でメッセージの伝送が行われる。ＭＣＵ＿２は、ＣＡＮにおけるノード（通信装置）として機能する。本実施形態では、ＭＣＵ＿２は、メッセージを送信する送信ノードの機能と該メッセージを受信する受信ノードの機能とを有する。図１中に示されるように、３台の各ＭＣＵ＿２には、ＣＡＮにおける識別子（ＩＤ）として、ＩＤ１、ＩＤ２、ＩＤ３がそれぞれ付与されている。
【００１７】
図２は、本発明の第１実施形態に係るＭＣＵ＿２（ノード）の構成を示すブロック図である。図２において、ＭＣＵ＿２は、送信部１１１と受信部１１２とフレーム受信処理部１１３とＭＡＣ（メッセージ認証コード）生成部１１４とカウンタ部１１５とＭＡＣ（メッセージ認証コード）検査部１１６と秘密情報記憶部１１７を備える。
【００１８】
送信部１１１は、所定のフレーム形式のメッセージを通信バス３に送信する。受信部１１２は、該所定のフレーム形式のメッセージを通信バス３から受信する。図３は、本発明の第１実施形態に係るデータフレームの構成を示す図である。図３のデータフレームにおいて、各フィールド中に示されるカッコ内の数字は、当該フィールドに格納される情報のビット数を示している。図３に示されるデータフレームの構成は、ＣＡＮにおける標準フォーマットのデータフレームの構成に対して、一部変更している。本実施形態では、データフレーム中のＣＲＣフィールド（ＣＲＣ部）に格納する情報をメッセージ認証コード（ＭＡＣ）に変更する。該データフレームにおいてＣＲＣ部以外の部分は、ＣＡＮにおける標準フォーマットから変更なしである。以下、図３に示される本実施形態に係るデータフレームのことをＣＡＮフレームと称する。
【００１９】
説明を図２に戻す。
送信部１１１には、ＣＡＮフレームに格納する送信データ等のデータが入力される。送信部１１１は、該入力されたデータをＣＡＮフレーム中の該当部分に格納したＣＡＮフレームを、通信バス３へ送信する。送信データは、図３中のデータフィールド（Data Field：データ部）に格納される。フレーム受信処理部１１３は、受信部１１２により通信バス３から受信されたＣＡＮフレームについての受信処理を行う。ＭＡＣ生成部１１４は、ＣＡＮフレーム中のデータ部に格納される送信データ等に基づいてＭＡＣを生成する。
【００２０】
カウンタ部１１５は、送信カウンタ部としての機能と、受信カウンタ部としての機能とを有する。カウンタ部１１５は、送信カウンタ部の機能として、送信部１１１によるＣＡＮフレームの送信毎に所定のカウント値だけ増加させる送信カウンタ値を保持する。本実施形態では、該カウント値は１とする。したがって、カウンタ部１１５は、送信部１１１によるＣＡＮフレームの送信毎に１だけ増加させる送信カウンタ値を保持する。この送信カウンタ値は、自己のＭＣＵ＿２（ノード）がＣＡＮフレームを送信する毎に１ずつ増やされる。
【００２１】
カウンタ部１１５は、受信カウンタ部の機能として、受信部１１２によるＣＡＮフレームの受信毎に送信カウンタ部と同じ所定のカウント値だけ増加させる受信カウンタ値を保持する。本実施形態では、該カウント値は１となる。したがって、カウンタ部１１５は、受信部１１２によるＣＡＮフレームの受信毎に１だけ増加させる受信カウンタ値を保持する。この受信カウンタ値は、ＣＡＮフレーム中のＩＤ毎に設けられる。該ＩＤは、ＣＡＮフレームを送信したＭＣＵ＿２（ノード）に付与されているＩＤであり、図３中のＩＤフィールド（ＩＤ部）に格納される。
【００２２】
本実施形態では、３台のＭＣＵ＿２（ＩＤがそれぞれ、ＩＤ１、ＩＤ２、ＩＤ３である）が存在するので、図２に示されるように、カウンタ部１１５は該３台の各ＭＣＵ＿２（各ＩＤであるＩＤ１、ＩＤ２、ＩＤ３）に対応する３つのカウンタ値（ＩＤ１カウンタ値、ＩＤ２カウンタ値、ＩＤ３カウンタ値）を保持する。カウンタ部１１５において、自己のＭＣＵ＿２のＩＤに対応するカウンタ値が送信カウンタ値であり、他のＭＣＵ＿２のＩＤに対応するカウンタ値が受信カウンタ値である。例えば、ＩＤ１のＭＣＵ＿２においては、ＩＤ１カウンタ値が送信カウンタ値であり、ＩＤ２カウンタ値がＩＤ２に対応する受信カウンタ値であり、ＩＤ３カウンタ値がＩＤ３に対応する受信カウンタ値である。
【００２３】
ＭＡＣ検査部１１６は、受信部１１２により通信バス３から受信されたＣＡＮフレームから取得されたＭＡＣについての検査を行う。秘密情報記憶部１１７は、各ＭＣＵ＿２において同じ秘密情報を記憶する。この秘密情報は、ＭＣＵ＿２の製造時などに、安全に、ＭＣＵ＿２に設定される。
【００２４】
次に、本実施形態に係るＭＣＵ＿２（ノード）の動作を説明する。
【００２５】
［送信ノードの動作］
はじめに図４を参照して、ＭＣＵ＿２の送信ノードとしての動作を説明する。図４は、本発明の第１実施形態に係る送信処理の手順を示す図である。図４の送信処理は、送信部１１１から送信されるＣＡＮフレームを作成する際に開始される。
【００２６】
（ステップＳ１１１）ＭＡＣ生成部１１４は、カウンタ部１１５から送信カウンタ値を取得する。ＭＡＣ生成部１１４は、該取得した送信カウンタ値のビット列（ビット数がＬである）から、所定の抽出ビット数分（Ｌ−ｎビット分）の上位ビットのみを上位抽出ビット（ビット数が「Ｌ−ｎ」である）として取得する。
【００２７】
（ステップＳ１１２）ＭＡＣ生成部１１４は、ＣＡＮフレーム中のデータ部に格納される送信データと、ステップＳ１１１で取得した上位抽出ビットと、秘密情報記憶部１１７に記憶されている秘密情報とを使用して、ＭＡＣを生成する。ＭＡＣとして、例えば、ハッシュ（Hash）値を算出する。ハッシュ値の算出方法として、例えば、SHA-256が挙げられる。なお、ハッシュ値の算出方法については、例えば非特許文献３，４に記載されている。
【００２８】
（ステップＳ１１３）ＭＡＣ生成部１１４は、ステップＳ１１２で生成したＭＡＣのビット列（ＭＡＣ値）から、ＣＡＮフレーム中のＣＲＣ部に格納するビット列（１５ビット）を抽出する。この抽出されるビット列は、ステップＳ１１１で取得した送信カウンタ値のビット列（ビット数がＬである）のうち上位抽出ビット以外の所定の下位ビット（ビット数がｎである）の値で特定される。図４に示される例では、該下位ビット（ビット数がｎである）の値は「３」である。これにより、ＭＡＣ値のビット列中において、該値「３」で特定される一部分（１５ビット分）を抽出する。
【００２９】
本実施形態においてＣＡＮフレーム中のＣＲＣ部は１５ビットであるので、該ＣＲＣ部に格納する情報として、ＭＡＣ値のビット列から該値「３」で特定される１５ビット分を抽出している。このため、ＭＡＣ値のビット列に対して１５ビットずつの区間を定め、どの区間の１５ビットをＣＡＮフレーム中のＣＲＣ部に格納するのかを、送信カウンタ値の下位ビット（ビット数がｎである）の値で特定している。なお、図４の例では、ＭＡＣ値の総ビット数に応じたＫ個の区間（１区間は１５ビット）が定められている。
【００３０】
送信部１１１は、ＣＡＮフレームに対して、送信データ（ステップＳ１１２でＭＡＣ生成に使用されたもの）をデータ部に格納し、ステップＳ１１３でＭＡＣ値のビット列中から抽出された１５ビットのビット列をＣＲＣ部に格納する。送信部１１１は、該ＣＡＮフレームを通信バス３へ送信する。カウンタ部１１５は、該ＣＡＮフレームの送信により送信カウンタ値を１だけ増加させて保持する。
【００３１】
以上が送信ノードの動作の説明である。
【００３２】
［受信ノードの動作］
次に図５、図６を参照して、ＭＣＵ＿２の受信ノードとしての動作を説明する。図５、図６は、本発明の第１実施形態に係る受信処理の手順を示す図である。図５の受信処理は、受信部１１２によりＣＡＮフレームを受信した際に開始される。
【００３３】
（ステップＳ１２１）ＭＡＣ検査部１１６は、受信部１１２により受信したＣＡＮフレーム中のＩＤ部に格納されているＩＤに対応する受信カウンタ値を、カウンタ部１１５から取得する。ＭＡＣ検査部１１６は、該取得した受信カウンタ値のビット列（ビット数がＬである）から、所定の抽出ビット数分（Ｌ−ｎビット分）の上位ビットのみを上位抽出ビット（ビット数が「Ｌ−ｎ」である）として取得する。この上位抽出ビットの取得方法は、上述したＭＡＣ生成部１１４の処理（ステップＳ１１１）と同じである。
【００３４】
（ステップＳ１２２）ＭＡＣ検査部１１６は、受信部１１２により受信したＣＡＮフレーム中のデータ部から取得した受信データと、ステップＳ１２１で取得した上位抽出ビットと、秘密情報記憶部１１７に記憶されている秘密情報とを使用して、ＭＡＣを生成する。このＭＡＣの値（算出ＭＡＣ値）は、上述したＭＡＣ生成部１１４と同じ算出方法（例えば、SHA-256によるハッシュ値の算出）で算出される。
【００３５】
（ステップＳ１２３）ＭＡＣ検査部１１６は、ステップＳ１２２で生成したＭＡＣのビット列（算出ＭＡＣ値）から、検査の対象にする検査対象ビット列（１５ビット）を抽出する。この検査対象ビット列の抽出方法は、上述したＭＡＣ生成部１１４での、ＣＡＮフレーム中のＣＲＣ部に格納するビット列（１５ビット）の抽出方法（ステップＳ１１３）と同様である。つまり、該検査対象ビット列は、算出ＭＡＣ値のビット列のうち、ステップＳ１２１で取得した受信カウンタ値のビット列（ビット数がＬである）のうち上位抽出ビット以外の所定の下位ビット（ビット数がｎである）の値で特定される一部分（１５ビット分）である。図５に示される例では、該下位ビット（ビット数がｎである）の値は「３」である。これにより、算出ＭＡＣ値のビット列中において、該値「３」で特定される一部分（１５ビット分）を抽出する。
【００３６】
本実施形態では、ＣＡＮフレーム中のＣＲＣ部（１５ビット）に格納されている情報と、算出ＭＡＣ値のビット列から抽出された検査対象ビット列（１５ビット）との一致を検査する。このため、上述した送信処理と同様に、算出ＭＡＣ値のビット列に対して１５ビットずつの区間を定め、どの区間の１５ビットを検査対象ビット列とするのかを、受信カウンタ値の下位ビット（ビット数がｎである）の値で特定している。なお、図５の例では、算出ＭＡＣ値の総ビット数に応じたＫ個の区間（１区間は１５ビット）が定められている。
【００３７】
ＭＡＣ検査部１１６は、受信部１１２により受信したＣＡＮフレーム中のＣＲＣ部から取得したＭＡＣ値（受信ＭＡＣ値（１５ビット））と、算出ＭＡＣ値のビット列から抽出された検査対象ビット列（１５ビット）とが一致するか否かを判定する。
【００３８】
該判定の結果、受信ＭＡＣ値と検査対象ビット列とが一致である場合には、ＭＡＣ検査部１１６は、フレーム受信処理部１１３に対して、検査合格を通知する。これにより、フレーム受信処理部１１３は、受信部１１２により受信したＣＡＮフレームに対して、正常に受信したＣＡＮフレームに対する所定の受信処理を行う。また、ＭＡＣ検査部１１６は、カウンタ部１１５に対して、検査合格を通知する。これにより、カウンタ部１１５は、該当する受信カウンタ値を１だけ増加させて保持する。このカウント対象の受信カウンタ値は、受信部１１２により受信したＣＡＮフレーム中のＩＤ部に格納されているＩＤに対応する受信カウンタ値である。
【００３９】
一方、該判定の結果、受信ＭＡＣ値と検査対象ビット列とが不一致である場合には、ＭＡＣ検査部１１６は、図６に示される再検査処理を行う。以下、図６を参照して該再検査処理を説明する。
【００４０】
（ステップＳ１３１）ＭＡＣ検査部１１６は、ステップＳ１２２で生成した算出ＭＡＣ値のビット列から、再検査の対象にする再検査対象ビット列（１５ビット）を抽出する。この再検査対象ビット列の抽出処理は、上述した検査対象ビット列の抽出処理と同様であるが、ステップＳ１２１で取得した受信カウンタ値を増加させた値（増加受信カウンタ値）を使用する。具体的には、まず、ステップＳ１２１で取得した受信カウンタ値に１を加える。そして、算出ＭＡＣ値のビット列のうち、該受信カウンタ値に１を加算した値である増加受信カウンタ値のビット列における下位ビット（ビット数がｎである）の値で特定される一部分（１５ビット分）を、再検査対象ビット列として抽出する。
【００４１】
ＭＡＣ検査部１１６は、該抽出した再検査対象ビット列と受信ＭＡＣ値との一致を判定する。この判定の結果が不一致である場合には、現在の増加受信カウンタ値に対してさらに１を加算した値を新たな増加受信カウンタ値とする。そして、算出ＭＡＣ値のビット列のうち、該新たな増加受信カウンタ値のビット列における下位ビット（ビット数がｎである）の値で特定される一部分（１５ビット分）を、新たな再検査対象ビット列として抽出する。そして、該抽出された新たな再検査対象ビット列と受信ＭＡＣ値との一致を判定する。この再検査は、判定の結果が一致となるまで繰り返される。但し、算出ＭＡＣ値のビット列の端の区間（下位ビットの値「Ｋ−１」で特定される区間）までで当該再検査は終了とする。この理由は、下位ビットの値が桁上げされて、算出ＭＡＣ値の生成に使用される上位抽出ビットの値が変わるからである。
【００４２】
したがって、算出ＭＡＣ値のビット列のうち、下位ビットの値「Ｋ−１」で特定される区間まで検査を行っても、受信ＭＡＣ値と一致とならない場合には、下位ビットの値の桁上げ後の上位抽出ビットを使用して算出ＭＡＣ値を再計算し、該再計算した新たな算出ＭＡＣ値を使用して、上述した再検査と同様に、受信ＭＡＣ値との一致の判定を行う。
【００４３】
（ステップＳ１３２）ＭＡＣ検査部１１６は、ステップＳ１３１の再検査の結果、再検査対象ビット列と受信ＭＡＣ値とが一致した場合に、カウンタ部１１５に対して、当該再検査対象ビット列に係る下位ビットの値を通知してカウンタ同期を指示する。カウンタ部１１５は、該カウンタ同期の指示により、該当する受信カウンタ値の下位ビット（ビット数がｎである）の値を、通知された下位ビットの値に変更する。このカウンタ同期対象の受信カウンタ値は、受信部１１２により受信したＣＡＮフレーム中のＩＤ部に格納されているＩＤに対応する受信カウンタ値である。これにより、当該ＩＤに対応する送信ノードの送信カウンタ値と、本受信ノードの当該ＩＤに対応する受信カウンタ値との同期が取られることになる。
【００４４】
図６に示される例では、ステップＳ１２１で取得した受信カウンタ値における下位ビット（ビット数がｎである）の値は「３」である。この値「３」で特定された検査対象ビット列では受信ＭＡＣ値と不一致であった。このため、ステップＳ１２１で取得した受信カウンタ値に１を加算した増加受信カウンタ値のビット列における下位ビット（ビット数がｎである）の値「４」で特定される部分を再検査対象ビット列として、受信ＭＡＣ値との一致を判定する。図６の例では、該値「４」で特定された再検査対象ビット列でも、受信ＭＡＣ値と不一致であった。このため、現在の増加受信カウンタ値に１を加算した新たな増加受信カウンタ値のビット列における下位ビット（ビット数がｎである）の値「５」で特定される部分を再検査対象ビット列として、受信ＭＡＣ値との一致を判定する。図６の例では、該値「５」で特定された再検査対象ビット列では、受信ＭＡＣ値と一致であった。これにより、カウンタ部１１５において該当する受信カウンタ値の下位ビット（ビット数がｎである）の値が「３」から「５」に変更される。
【００４５】
ＭＡＣ検査部１１６は、所定回数だけ再検査を繰り返しても、再検査対象ビット列と受信ＭＡＣ値とが不一致である場合には、フレーム受信処理部１１３に対して、検査不合格を通知する。これにより、フレーム受信処理部１１３は、受信部１１２により受信したＣＡＮフレームを破棄する。これは、通信エラー、又はなりすましメッセージを発信する攻撃が発生したと考えられるからである。なお、検査不合格の場合、ＭＡＣ検査部１１６は、カウンタ部１１５に対して、検査合格を通知しない。これにより、カウンタ部１１５は、受信部１１２により受信したＣＡＮフレーム中のＩＤ部に格納されているＩＤに対応する受信カウンタ値に対して、受信カウンタ値の増加を行わない。
【００４６】
なお、受信ノードは、同一ＩＤのＣＡＮフレームにおいて、同じＭＡＣ値を有するＣＡＮフレームを２回以上連続して受信した場合には、リプレイ攻撃が発生したと判断する。この場合、当該ＩＤのＣＡＮフレームについては、受信処理を行わないようにする対処が挙げられる。
【００４７】
以上が受信ノードの動作の説明である。
【００４８】
本実施形態によれば、送信ノードから送信されるＣＡＮフレームには、当該ＣＡＮフレームのデータ部に格納される送信データを使用して生成されたＭＡＣがＣＲＣ部に格納される。そして、受信ノードでは、受信したＣＡＮフレームのデータ部から取得した受信データを使用して生成したＭＡＣと、当該ＣＡＮフレームのＣＲＣ部から取得したＭＡＣとを使用して、当該ＣＡＮフレームの検査を行う。これにより、送信ノードから、送信データのＣＡＮフレームとは別にＭＡＣのＣＡＮフレームを送信する必要がないので、ＭＡＣのＣＡＮフレームによりＣＡＮの通信帯域が圧迫される問題を解消できる。さらに、送信データとＭＡＣを同じＣＡＮフレームで受信できるので、検査の即時性を実現できる。
【００４９】
さらに、送信ノードと受信ノードで共通の秘密情報を使用してＭＡＣが生成されるので、該秘密情報を有さない送信ノードが生成したＭＡＣではＣＡＮフレームの検査が不合格となる。これにより、ＣＡＮフレームの検査に対する信頼性が向上する。
【００５０】
また、生成されたＭＡＣのビット列のうち、送信カウンタ値の下位ビットで特定される区間をＣＡＮフレームに格納することにより、送信されるＣＡＮフレーム毎に格納されているＭＡＣ値が異なる。これにより、同じＣＡＮフレームを繰り返し送信するリプレイ攻撃を容易に検出できる。また、送信ノードではＣＡＮフレーム中のデータ部の送信データを使用してＭＡＣを生成するので、受信ノードで送信データの改竄を検出できる。
【００５１】
また、本実施形態では、ＭＡＣの生成にはカウンタ値の上位抽出ビットを使用し、カウンタ値の上位抽出ビット以外の下位ビットによって、該ＭＡＣのどの部分をＣＲＣ部に格納するのかを決める。このため、ＭＡＣの再検査において、該下位ビットの桁上げが発生するまでは、ＭＡＣの再計算を行う必要がなく、同じＭＡＣの中から再検査対象ビット列を変えながら再検査を繰り返し行うことができる。これにより、検査時の演算量を低減でき、検査時間の短縮に寄与できる。
【００５２】
また、本実施形態によれば、ＣＡＮの既存のフレーム形式に対する変更が少ないという効果も得られる。
【００５３】
なお、本実施形態では、生成されたＭＡＣのうち一部分のみをＣＡＮフレーム中のＣＲＣ部に格納することから、ＭＡＣ同士の衝突が発生する可能性がある。例えば、ハッシュ値の衝突は「１／２」の１５乗（＝１／３２７６８）で発生する可能性がある。しかしながら、もしハッシュ値の衝突が発生しても、さらに次のハッシュ値の衝突が発生する確率はまた１／３２７６８であるため、連続してハッシュ値の衝突が発生する確率は非常に小さくなる。例えば、同じ送信データを有する複数のＣＡＮフレーム（各ＣＡＮフレームのＭＡＣは異なる）を連続して送信すれば、該複数のＣＡＮフレームのいずれかではＭＡＣ（ハッシュ値）の衝突が発生せず、正常に受信できると考えられるので、ハッシュ値の衝突による通信品質への影響は少ないと考えられる。
【００５４】
また、上述した実施形態では、ＣＡＮフレーム中のＣＲＣ部にＭＡＣを格納したが、データ部に格納するようにしてもよい。図１１は、本発明の一実施形態に係るデータフレームの他の例を示す構成図である。図１１のデータフレームにおいて、各フィールド中に示されるカッコ内の数字は、当該フィールドに格納される情報のビット数を示している。図１１に示されるデータフレームの構成は、ＣＡＮにおける標準フォーマットのデータフレームの構成に対して、一部限定している。図１１に示されるデータフレームでは、データフレーム中のデータ部（Data Field：データフィールド）に、ＭＡＣを格納する。ＭＡＣは、データ部内の所定の場所に格納される。例えば、データ部の先頭部分又は最後方部分に格納することが挙げられる。但し、最後方部分に格納する方が、データ部の既存の使用方法に対する影響が少ないと考えられる。図１１の例では、ＭＡＣは、データ部内の最後の部分に格納される。図１１の例では、ＭＡＣのデータ長は１６ビットである。このため、データ部に格納されるＭＡＣ以外のデータのデータ長の最大値は、図１１中に記載されるように、４８ビットである。図１１に示されるデータフレームにおいてデータ部にＭＡＣを格納する点以外は、ＣＡＮにおける標準フォーマットと同じである。なお、データ部のサイズは６４ビットであるので、ＣＲＣ部（１５ビット）に比して、生成されたＭＡＣのうちデータフレームに格納する部分を多くできる。但し、生成されたＭＡＣのうちデータフレームに格納する部分を多くすると、その分だけ、送信データのサイズが小さくなるので、データ部に格納するＭＡＣのサイズは、ＭＡＣの衝突による影響が許容される程度に小さく抑えることが好ましい。なお、データ部にＭＡＣを格納する場合には、ＣＲＣ部にはＣＲＣを格納することにより、ＣＲＣ機能を活用できる。
【００５５】
［第２実施形態］
第２実施形態は、上述した第１実施形態において、ＭＣＵ＿２が秘密情報を安全に保持するための構成例である。図７は、本発明の第２実施形態に係る通信ネットワークシステム１の構成を示すブロック図である。図７に示される通信ネットワークシステム１は車両に搭載される。図７に示される通信ネットワークシステム１において、ＣＡＮの通信バス３には、複数のＭＣＵ＿２−ａ，２−ｂが接続されている。第２実施形態においても、上述した第１実施形態と同様に、説明の便宜上、３台のＭＣＵ＿２−ａ，２−ｂが通信バス３に接続されているとする。図７中に示されるように、３台の各ＭＣＵ＿２−ａ，２−ｂには、ＣＡＮにおける識別子（ＩＤ）として、ＭＣＵ＿２−ａにはＩＤ１が付与され、各ＭＣＵ＿２−ｂにはＩＤ２、ＩＤ３がそれぞれ付与されている。
【００５６】
ＭＣＵ＿２−ａは、通信バス３に接続されるＭＣＵ＿２−ｂを認証する処理においてマスタとして動作する。以下、ＭＣＵ＿２−ａのことを「マスタＭＣＵ＿２−ａ」と称する。また、ＭＣＵ＿２−ｂのことを「エンドＭＣＵ＿２−ｂ」と称する。また、ＭＣＵ＿２−ａ，２−ｂを特に区別しないときは「ＭＣＵ＿２」と称する。
【００５７】
次に、図７を参照して、マスタＭＣＵ＿２−ａとエンドＭＣＵ＿２−ｂの構成を説明する。マスタＭＣＵ＿２−ａとエンドＭＣＵ＿２−ｂとは同様の構成であるので、以下、ＭＣＵ＿２として、マスタＭＣＵ＿２−ａとエンドＭＣＵ＿２−ｂの構成を説明する。
【００５８】
ＭＣＵ＿２は、ＣＰＵ＿１０と、フラッシュメモリ（flash memory）１１と、ＲＡＭ（ランダムアクセスメモリ）＿１２と、ブートローダ（boot loader）１３と、セキュアエレメント（secure element）１４を有する。セキュアエレメント１４は、セキュアＲＡＭ＿２１と、セキュアＲＯＭ（Read Only Memory：リードオンリメモリ）＿２２と、検証部２３と、暗号処理部２４を有する。
【００５９】
ＣＰＵ＿１０は、コンピュータプログラムを実行することにより、車両内の機器を制御するＥＣＵとしての機能およびＣＡＮにおけるノードとして機能を実現する。フラッシュメモリ１１は、ＣＰＵ＿１０で実行されるコンピュータプログラムと該コンピュータプログラムについての署名とを記憶する。ＲＡＭ＿１２はデータを記憶する。ＲＡＭ＿１２は、ＣＰＵ＿１０がコンピュータプログラムを実行する際の実行領域となる。
【００６０】
ブートローダ１３は、ＭＣＵ＿２の電源投入によりブート処理を行う。ブートローダ１３は、該ブート処理の内容を変更できないようにＲＯＭ化されている。
【００６１】
セキュアエレメント１４は、セキュアエレメント１４内部で保持されるデータに対してセキュアエレメント１４外部からアクセスできない安全な要素として構成される。セキュアＲＡＭ＿２１は、セキュアエレメント１４内部で保持されるデータの一時記憶領域である。セキュアＲＡＭ＿２１に対してセキュアエレメント１４外部からはアクセスできないように構成される。セキュアＲＯＭ＿２２は、セキュアエレメント１４内部で使用される鍵を記憶する。セキュアＲＯＭ＿２２に対してセキュアエレメント１４外部からはアクセスできないように構成される。セキュアＲＯＭ＿２２には、ＭＣＵ＿２の製造時などに、予め安全に鍵が書き込まれる。
【００６２】
検証部２３は、ブートローダ１３によるブート処理におけるプログラム正当性検証処理を、セキュアＲＯＭ＿２２に保持される署名検証鍵を使用して行う。検証部２３は、該プログラム正当性検証処理において、セキュアＲＡＭ＿２１を一時記憶領域として使用する。
【００６３】
暗号処理部２４は、自己のＭＣＵ＿２と他のＭＣＵ＿２との間で交換される情報についての暗号処理を、セキュアＲＯＭ＿２２に保持される暗号鍵を使用して行う。該暗号処理は、暗号化処理または復号化処理である。暗号処理部２４は、該暗号処理において、セキュアＲＡＭ＿２１を一時記憶領域として使用する。
【００６４】
次に、図８を参照して、本実施形態に係るブート処理を説明する。図８は、本実施形態に係るブート処理のシーケンスチャートである。ＭＣＵ＿２の電源投入により図８の処理が開始される。
【００６５】
（ステップＳ１）ブートローダ１３が、フラッシュメモリ１１からコンピュータプログラムと署名とを読み込む。次いで、ブートローダ１３が、該読み込んだコンピュータプログラムのハッシュ（hash）値を算出する。
【００６６】
（ステップＳ２）ブートローダ１３が、該算出したハッシュ値と、フラッシュメモリ１１から読み込んだ署名とをセキュアエレメント１４へ送信する。
【００６７】
（ステップＳ３）セキュアエレメント１４において検証部２３が、セキュアＲＯＭ＿２２に保持される署名検証鍵を使用して、ブートローダ１３から受信した署名に含まれる値とブートローダ１３から受信したハッシュ値との一致を検証する。この検証処理では、セキュアＲＡＭ＿２１が、検証処理におけるデータの一時記憶領域として使用される。該検証が成功した場合には、セキュアエレメント１４はブートローダ１３へ検証成功を通知する。
【００６８】
（ステップＳ４）ブートローダ１３は、セキュアエレメント１４から検証成功の通知を受信した場合に、ステップＳ１でフラッシュメモリ１１から読み込んだコンピュータプログラムをＲＡＭ＿１２へロードする。これにより、ＣＰＵ＿１０はＲＡＭ＿１２にロードされたコンピュータプログラムを実行することができる。
【００６９】
一方、ブートローダ１３は、セキュアエレメント１４からの検証成功の通知がない場合には（例えば、ステップＳ２の送信後から所定時間が経過してもセキュアエレメント１４から検証成功の通知を受信しなかったり、セキュアエレメント１４から検証失敗の通知を受信したりした場合）、ステップＳ１でフラッシュメモリ１１から読み込んだコンピュータプログラムをＲＡＭ＿１２へロードしない。この場合、ブートローダ１３がＭＣＵ＿２の起動を停止する。
【００７０】
上述した本実施形態に係るブート処理によれば、セキュアエレメント１４による署名検証によって、ＣＰＵ＿１０で実行されるコンピュータプログラムの正当性検証が安全に行われる。これにより、ＣＰＵ＿１０の実行領域であるＲＡＭ＿１２には正しいコンピュータプログラムがロードされ、該ＲＡＭ＿１２にロードされたコンピュータプログラムをＣＰＵ＿１０が実行することにより、ＭＣＵ＿２が正常に起動する。よって、本実施形態に係る通信ネットワークシステム１では、ＭＣＵ＿２の個々において、ＭＣＵ＿２の起動時に当該ＭＣＵ＿２のコンピュータプログラム（例えば、オペレーティングシステム（Operating System：ＯＳ）など）の正当性を検証するセキュアブート（Secure Boot）が実現される。なお、セキュアブートについては、例えば非特許文献５に記載されている。
【００７１】
次に、図９を参照して、本実施形態に係る暗号処理を説明する。図９は、本実施形態に係る暗号処理のシーケンスチャートである。所定の契機により図９の処理が開始される。ここでは、秘密の情報である乱数を、マスタＭＣＵ＿２−ａからエンドＭＣＵ＿２−ｂへ安全に通知する場面を例に挙げて説明する。なお、マスタＭＣＵ＿２−ａとエンドＭＣＵ＿２−ｂとの間のデータの送受は通信バス３を介して行われる。
【００７２】
（ステップＳ１１）マスタＭＣＵ＿２−ａが、自己のＲＡＭ＿１２に保持される初期乱数をチャレンジとしてエンドＭＣＵ＿２−ｂへ送信する。また、マスタＭＣＵ＿２−ａは、該エンドＭＣＵ＿２−ｂへチャレンジとして送信した初期乱数を、自己のセキュアエレメント１４へ渡す。
【００７３】
（ステップＳ１２）エンドＭＣＵ＿２−ｂは、マスタＭＣＵ＿２−ａから受信したチャレンジである初期乱数を、自己のセキュアエレメント１４に渡す。エンドＭＣＵ＿２−ｂの暗号処理部２４は、該渡された初期乱数を、自己のセキュアＲＯＭ＿２２に保持される秘密鍵Ｋｓを使用して暗号化する。この暗号化処理では、エンドＭＣＵ＿２−ｂのセキュアＲＡＭ＿２１が、暗号化処理におけるデータの一時記憶領域として使用される。次いで、エンドＭＣＵ＿２−ｂは、暗号化された初期乱数である暗号化データＫｓ（初期乱数）をレスポンスとしてマスタＭＣＵ＿２−ａへ送信する。
【００７４】
（ステップＳ１３）マスタＭＣＵ＿２−ａは、エンドＭＣＵ＿２−ｂから受信したレスポンスである暗号化データＫｓ（初期乱数）を、自己のセキュアエレメント１４に渡す。マスタＭＣＵ＿２−ａの暗号処理部２４は、該渡された暗号化データＫｓ（初期乱数）を、自己のセキュアＲＯＭ＿２２に保持される該当エンドＭＣＵ＿２−ｂの公開鍵Ｋｐを使用して復号化する。次いで、マスタＭＣＵ＿２−ａの暗号処理部２４は、該復号化により得られた復号化データと、ステップＳ１１でチャレンジとしてエンドＭＣＵ＿２−ｂへ送信された初期乱数との一致を検証する。それら復号化処理および検証処理では、マスタＭＣＵ＿２−ａのセキュアＲＡＭ＿２１が、復号化処理および検証処理におけるデータの一時記憶領域として使用される。該検証の成功により、当該エンドＭＣＵ＿２−ｂの認証が成功したと判断できる。
【００７５】
該検証が成功した場合には、マスタＭＣＵ＿２−ａの暗号処理部２４は、秘密の情報である乱数を生成し、生成した乱数を、自己のセキュアＲＯＭ＿２２に保持される該当エンドＭＣＵ＿２−ｂの公開鍵Ｋｐを使用して暗号化する。それら乱数生成処理および暗号化処理では、マスタＭＣＵ＿２−ａのセキュアＲＡＭ＿２１が、乱数生成処理および暗号化処理におけるデータの一時記憶領域として使用される。次いで、マスタＭＣＵ＿２−ａは、暗号化された秘密の情報（乱数）である暗号化データＫｐ（乱数）をエンドＭＣＵ＿２−ｂへ送信する。
【００７６】
エンドＭＣＵ＿２−ｂは、マスタＭＣＵ＿２−ａから受信した暗号化データＫｐ（乱数）を、自己のセキュアエレメント１４に渡す。エンドＭＣＵ＿２−ｂの暗号処理部２４は、該渡された暗号化データＫｐ（乱数）を、自己のセキュアＲＯＭ＿２２に保持される秘密鍵Ｋｓを使用して復号化する。この復号化処理では、エンドＭＣＵ＿２−ｂのセキュアＲＡＭ＿２１が、復号化処理におけるデータの一時記憶領域として使用される。該復号化処理によって暗号化データＫｐ（乱数）から、秘密の情報である乱数が取得される。該取得された乱数は、エンドＭＣＵ＿２−ｂのセキュアＲＡＭ＿２１で安全に保持される。
【００７７】
上述した本実施形態に係る暗号処理によれば、セキュアエレメント１４による暗号処理によって、ＭＣＵ＿２間（上述した例ではマスタＭＣＵ＿２−ａとエンドＭＣＵ＿２−ｂの間）で交換される情報の暗号処理（暗号化処理、復号化処理）が安全に行われる。これにより、ＭＣＵ＿２間で交換される情報の安全性が保たれる。
【００７８】
さらに、当該暗号処理に基づいたチャレンジ・レスポンスによって、マスタＭＣＵ＿２−ａがエンドＭＣＵ＿２−ｂの確かな認証を行うことができる。そして、マスタＭＣＵ＿２−ａから認証済みのエンドＭＣＵ＿２−ｂに対して、当該暗号処理に基づいて秘密の情報を安全に送信することができる。この秘密の情報は、上述した第１実施形態における秘密情報として利用できる。上述した例では、マスタＭＣＵ＿２−ａからエンドＭＣＵ＿２−ｂに対して、安全に、秘密の情報である乱数が伝達される。
【００７９】
次に、図１０を参照して、本実施形態に係るＭＡＣ生成処理およびＭＡＣ検査処理を説明する。図１０は、本実施形態に係るＭＡＣ生成処理およびＭＡＣ検査処理を説明するためのシーケンスチャートである。上述した図９に係る暗号処理によって、マスタＭＣＵ＿２−ａから認証済みのエンドＭＣＵ＿２−ｂに対して、秘密の情報である乱数が安全に送信されている。マスタＭＣＵ＿２−ａ及びエンドＭＣＵ＿２−ｂは、該秘密の情報である乱数をセキュアＲＡＭ＿２１に格納する。このセキュアＲＡＭ＿２１は、上述した第１実施形態における秘密情報記憶部１１７として、該乱数（秘密情報）を安全に保持する。
【００８０】
図１０において、送信側ＭＣＵ＿２は送信ノードとして動作する。送信側ＭＣＵ＿２はマスタＭＣＵ＿２−ａであってもよく、又は、エンドＭＣＵ＿２−ｂであってもよい。受信側ＭＣＵ＿２は受信ノードとして動作する。受信側ＭＣＵ＿２はマスタＭＣＵ＿２−ａであってもよく、又は、エンドＭＣＵ＿２−ｂであってもよい。送信側ＭＣＵ＿２は、ＲＡＭ＿１２に送信カウンタ値および送信データを保持している。受信側ＭＣＵ＿２は、ＲＡＭ＿１２に受信カウンタ値を保持している。図１０の処理は、送信側ＭＣＵ＿２から送信されるＣＡＮフレームを作成する際に開始される。
【００８１】
（ステップＳ２１）送信側ＭＣＵ＿２は、ＲＡＭ＿１２からセキュアＲＡＭ＿２１へ、送信データおよび送信カウンタ値を渡す。送信側ＭＣＵ＿２のセキュアエレメント１４は、セキュアＲＡＭ＿２１に保持される、乱数（秘密情報）と送信データと送信カウンタ値を使用して、ＭＡＣの生成を行う。このＭＡＣの生成方法は、上述した第１実施形態と同様である。但し、該ＭＡＣの生成は、セキュアＲＡＭ＿２１において安全に行われる。このＭＡＣの生成の結果としてＭＡＣ値のビット列中から抽出された１５ビットのビット列（ＣＲＣ部用抽出ＭＡＣビット列）は、セキュアＲＡＭ＿２１からＲＡＭ＿１２へ渡される。
【００８２】
（ステップＳ２２）送信側ＭＣＵ＿２は、ＣＡＮフレームに対して、ステップＳ２１でＲＡＭ＿１２からセキュアＲＡＭ＿２１へ渡した送信データをデータ部に格納し、ステップＳ２１でセキュアＲＡＭ＿２１からＲＡＭ＿１２へ渡されたＣＲＣ部用抽出ＭＡＣビット列をＣＲＣ部に格納する。送信側ＭＣＵ＿２は、該ＣＡＮフレームを通信バス３へ送信する。このＣＡＮフレームは、通信バス３を介して受信側ＭＣＵ＿２で受信される。
【００８３】
（ステップＳ２３）受信側ＭＣＵ＿２は、通信バス３から受信したＣＡＮフレームをＲＡＭ＿１２に保持する。受信側ＭＣＵ＿２は、ＲＡＭ＿１２に保持されるＣＡＮフレーム中のデータ部から取得した受信データとＣＲＣ部から取得した受信ＭＡＣ値とをセキュアＲＡＭ＿２１へ渡す。さらに、受信側ＭＣＵ＿２は、ＲＡＭ＿１２に保持されるＣＡＮフレーム中のＩＤ部に格納されているＩＤに対応する受信カウンタ値を、ＲＡＭ＿１２からセキュアＲＡＭ＿２１へ渡す。
【００８４】
次いで、受信側ＭＣＵ＿２のセキュアエレメント１４は、セキュアＲＡＭ＿２１に保持される、乱数（秘密情報）と受信データと受信カウンタ値を使用して、ＭＡＣの生成を行う。このＭＡＣの生成方法は、上述した第１実施形態と同様である。但し、該ＭＡＣの生成は、セキュアＲＡＭ＿２１において安全に行われる。このＭＡＣの生成の結果として算出ＭＡＣ値のビット列中から１５ビットの検査対象ビット列が抽出される。次いで、受信側ＭＣＵ＿２のセキュアエレメント１４は、セキュアＲＡＭ＿２１に保持される受信ＭＡＣ値と検査対象ビット列との一致を判定する。この判定の結果が不一致である場合には、上述した第１実施形態と同様に再検査が行われる。
【００８５】
上述したように本実施形態によれば、セキュアＲＡＭ＿２１に安全に保持される乱数（秘密情報）を使用してＭＡＣの生成および検査が行われる。これにより、ＣＡＮフレームの検査に対する信頼性が向上する。
【００８６】
以上、本発明の実施形態について図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の設計変更等も含まれる。
【００８７】
例えば、上述した実施形態では、１台のＭＣＵ＿２が送信ノードの機能と受信ノードの機能とを有したが、１台のＭＣＵ＿２が送信ノードの機能のみを有してもよく、又は、１台のＭＣＵ＿２が受信ノードの機能のみを有してもよい。
【００８８】
また、一つのＭＣＵ＿２が一つの半導体装置として構成されてもよい。一つのＭＣＵ＿２が一つの半導体集積回路としてワンチップ化されることにより、安全性がさらに向上する。
【００８９】
また、セキュアエレメントとして、例えば、無線通信に使用されるｅＳＩＭ（Embedded Subscriber Identity Module）又はＳＩＭ（Subscriber Identity Module）を使用してもよい。ｅＳＩＭおよびＳＩＭは、コンピュータの一種であり、コンピュータプログラムによって所望の機能を実現する。又は、セキュアエレメントとして、例えば、耐タンパー性（Tamper Resistant）のある暗号処理チップを使用してもよい。耐タンパー性のある暗号処理チップとして、例えば、ＴＰＭ（Trusted Platform Module）と呼ばれる暗号処理チップが知られている。ＴＰＭについては、例えば非特許文献６に記載されている。
【００９０】
また、上述した実施形態は、車両として、例えば、自動車、原動機付自転車、鉄道車両等に適用可能である。
【００９１】
また、上述した実施形態では、本発明に係る通信ネットワークシステムの一態様として、車両に搭載される通信ネットワークシステムを例に挙げて説明したが、本発明に係る通信ネットワークシステムは様々な分野に適用可能である。例えば、家電製品を制御するコンピュータとしてＭＣＵ＿２を適用し、宅内の各家電製品のＭＣＵ＿２を宅内ネットワークで接続するように構成してもよい。また、スマートメーターとしてＭＣＵ＿２を適用し、各スマートメーターのＭＣＵ＿２を通信ネットワークで接続するように構成してもよい。
【００９２】
［データフレームの構成の他の実施例１］
データフレームの構成の他の実施例１を説明する。図１２は、ＣＡＮにおける拡張フォーマットのデータフレームを示す構成図である（例えば、非特許文献７参照）。図１２に示されるように、ＣＡＮにおける拡張フォーマットのデータフレームは、１１ビット長のベースＩＤ（Base ID）フィールドと、１８ビット長の拡張ＩＤ（Extend ID）フィールドと、を有する。この拡張フォーマットでは、ＩＤの格納領域として、ベースＩＤフィールドと拡張ＩＤフィールドとを合わせた最大２９ビットが使用可能である。本実施例１では、ベースＩＤフィールドと拡張ＩＤフィールドとを合わせた２９ビット長の領域にＭＡＣを格納する。以下に、ベースＩＤフィールドと拡張ＩＤフィールドとを合わせた２９ビット長の領域にＭＡＣを格納するＭＡＣ格納方法の例１，２，３を説明する。
【００９３】
（ＭＡＣ格納方法の例１）
ＭＡＣ格納方法の例１では、図１３に示されるように、１８ビット長の拡張ＩＤフィールドをＭＡＣ格納領域に使用する。ベースＩＤフィールドはＩＤを格納する領域に使用される。図１３の例では、ベースＩＤフィールドに、データフレームの送信元のＭＣＵ＿２のアドレスである送信元アドレスを格納する。
【００９４】
（ＭＡＣ格納方法の例２）
ＭＡＣ格納方法の例２は、ベースＩＤフィールドと拡張ＩＤフィールドとを合わせた２９ビット長の領域に、データフレームの送信元のＭＣＵ＿２のアドレスである送信元アドレスと、データフレームの送信先のＭＣＵ＿２のアドレスである送信先アドレスと、送信先タイプと、を格納する場合（例えば、非特許文献８参照）において、当該２９ビット長の領域にＭＡＣを格納する方法である。図１４は、本発明の一実施形態に係るＭＡＣ格納方法の例２を示す説明図である。
【００９５】
図１４に示されるように、８ビット長の送信元アドレスを、変換・圧縮テーブルを使用して７ビット長の送信元アドレスに変換する。同様に、８ビット長の送信先アドレスを、変換・圧縮テーブルを使用して７ビット長の送信先アドレスに変換する。同様に、８ビット長の送信先タイプを、変換・圧縮テーブルを使用して２ビット長の送信先タイプに変換する。元の送信元アドレスは８ビット長であるが、実際に使用される送信元アドレスは７ビットで表現できることが前提である。同様に、元の送信先アドレスは８ビット長であるが、実際に使用される送信先アドレスは７ビットで表現できることが前提である。同様に、元の送信先タイプは８ビット長であるが、実際に使用される送信先タイプは２ビットで表現できることが前提である。各変換・圧縮テーブルは予め設けられる。
【００９６】
８ビット長の送信元アドレスが７ビット長に、８ビット長の送信先アドレスが７ビット長に、８ビット長の送信先タイプが２ビット長に、それぞれ変換されることによって、合計８ビットが未使用になる。この未使用の８ビットと元々の空き領域の５ビットとを合わせた１３ビットを、図１４に示されるように、ＭＡＣ格納領域に使用する。
【００９７】
なお、受信側には、各変換・圧縮テーブルに対応する逆変換・拡張テーブルが予め設けられる。受信側は、各逆変換・拡張テーブルを使用して、受信した７ビット長の送信元アドレスを８ビット長に、受信した７ビット長の送信先アドレスを８ビット長に、受信した２ビット長の送信先タイプを８ビット長に、それぞれ逆変換する。
【００９８】
（ＭＡＣ格納方法の例３）
ＭＡＣ格納方法の例３は、上述したＭＡＣ格納方法の例２と同様に、ベースＩＤフィールドと拡張ＩＤフィールドとを合わせた２９ビット長の領域に、データフレームの送信元のＭＣＵ＿２のアドレスである送信元アドレスと、データフレームの送信先のＭＣＵ＿２のアドレスである送信先アドレスと、送信先タイプと、を格納する場合において、当該２９ビット長の領域にＭＡＣを格納する方法である。図１５は、本発明の一実施形態に係るＭＡＣ格納方法の例３を示す説明図である。
【００９９】
ＭＡＣ格納方法の例３では、図１４に示されるように、８ビット長の送信元アドレスと８ビット長の送信先アドレスとは、そのまま格納される。８ビット長の送信先タイプは、変換・圧縮テーブルを使用して２ビット長の送信先タイプに変換される。元の送信先タイプは８ビット長であるが、実際に使用される送信先タイプは２ビットで表現できることが前提である。変換・圧縮テーブルは予め設けられる。
【０１００】
８ビット長の送信先タイプが２ビット長に変換されることによって、６ビットが未使用になる。この未使用の６ビットと元々の空き領域の５ビットとを合わせた１１ビットを、図１５に示されるように、ＭＡＣ格納領域に使用する。
【０１０１】
なお、受信側には、送信先タイプの変換・圧縮テーブルに対応する逆変換・拡張テーブルが予め設けられる。受信側は、逆変換・拡張テーブルを使用して、受信した２ビット長の送信先タイプを８ビット長に逆変換する。
【０１０２】
［データフレームの構成の他の実施例２］
データフレームの構成の他の実施例２を説明する。図１６は、本発明の一実施形態に係るデータフレームの他の例を示す構成図である。図１６のデータフレームにおいて、各フィールド中に示されるカッコ内の数字は、当該フィールドに格納される情報のビット数を示している。図１６に示されるデータフレームの構成は、ＣＡＮにおける拡張フォーマットのデータフレームの構成に対して、一部限定している。図１６に示されるデータフレームでは、データフレーム中のデータ部（Data Field：データフィールド）に、ＭＡＣを格納する。ＭＡＣは、データ部内の所定の場所に格納される。例えば、データ部の先頭部分又は最後方部分に格納することが挙げられる。但し、最後方部分に格納する方が、データ部の既存の使用方法に対する影響が少ないと考えられる。図１６の例では、ＭＡＣは、データ部内の最後の部分に格納される。図１６の例では、ＭＡＣのデータ長は１６ビットである。このため、データ部に格納されるＭＡＣ以外のデータのデータ長の最大値は、図１６中に記載されるように、４８ビットである。図１６に示されるデータフレームにおいてデータ部にＭＡＣを格納する点以外は、ＣＡＮにおける拡張フォーマットと同じである。
【０１０３】
［データフレームに格納するＭＡＣデータの他の例］
図１７及び図１８は、本発明の一実施形態に係るデータフレームに格納するＭＡＣデータの他の例を示す説明図である。データフレームの構成としては、例えば、上述した図３に示されるＣＡＮフレームである。はじめに図１７を参照して、送信ノードがＣＡＮフレームにＭＡＣデータを格納する動作を説明する。図１７において、上述の図４の各ステップに対応する部分には同一の符号を付け、その説明を省略する。
【０１０４】
図１７の送信処理は、送信部１１１から送信されるＣＡＮフレームを作成する際に開始される。まずステップＳ１１１，Ｓ１１２が実行される。ステップＳ１１１，Ｓ１１２は上述の図４と同じである。ステップＳ１１１，Ｓ１１２によってＭＡＣ値が算出される。次いで、ＭＡＣ生成部１１４は、ステップＳ１１２で算出したＭＡＣ値から、ＣＡＮフレームに格納する所定ビット数のビット列（ＭＡＣ抽出値）を抽出する。このＭＡＣ抽出値は、ステップＳ１１１で取得した送信カウンタ値のビット列（ビット数がＬである）のうち上位抽出ビット以外の所定の下位ビット（ビット数がｎである）の値で特定される。図１７に示される例では、該下位ビット（ビット数がｎである）の値は「３」である。これにより、ＭＡＣ値のビット列中において、該値「３」で特定される一部分（ＭＡＣ抽出値）を抽出する。
【０１０５】
次いで、ＭＡＣ生成部１１４は、ＭＡＣ値から抽出したＭＡＣ抽出値と、該ＭＡＣ抽出値に関するＭＡＣ値内の位置情報とから、送信ＭＡＣデータを生成する。図１７の例では、ＭＡＣ抽出値に関するＭＡＣ値内の位置情報は、ステップＳ１１１で取得した送信カウンタ値のビット列のうち上位抽出ビット以外の所定の下位ビットの値「３」である。また、図１７の例では、送信ＭＡＣデータは、ＭＡＣ抽出値の後ろに下位ビットの値「３」が付加される。送信ＭＡＣデータは、ＣＡＮフレームに格納される。上述した図３に示されるＣＡＮフレームの場合、送信ＭＡＣデータはＣＲＣ部に格納される。
【０１０６】
なお、送信ＭＡＣデータの構成は予め定められる。図３に示されるＣＡＮフレームの場合、送信ＭＡＣデータの格納場所であるＣＲＣ部は１５ビット長であるので、送信ＭＡＣデータのデータ長は１５ビットである。また、送信ＭＡＣデータは、ＭＡＣ抽出値の前に、ＭＡＣ抽出値に関するＭＡＣ値内の位置情報が付加されてもよい。また、ＭＡＣ抽出値に関するＭＡＣ値内の位置情報は、ステップＳ１１１で取得した送信カウンタ値のビット列のうち上位抽出ビット以外の所定の下位ビットの全部であってもよく、又は、該下位ビット中の最下位側の一部であってもよい。
【０１０７】
次いで、送信部１１１は、ＣＡＮフレームに対して、送信データ（ステップＳ１１２でＭＡＣ値の算出に使用されたもの）をデータ部に格納し、送信ＭＡＣデータをＣＲＣ部に格納する。送信部１１１は、該ＣＡＮフレームを通信バス３へ送信する。カウンタ部１１５は、該ＣＡＮフレームの送信により送信カウンタ値を１だけ増加させて保持する。
【０１０８】
次に図１８を参照して、受信ノードがＣＡＮフレームを受信したときの動作を説明する。図１８において、上述の図５の各ステップに対応する部分には同一の符号を付け、その説明を省略する。
【０１０９】
図１８の受信処理は、受信部１１２によりＣＡＮフレームを受信した際に開始される。まずステップＳ１２１，Ｓ１２２が実行される。ステップＳ１２１，Ｓ１２２は上述の図５と同じである。ステップＳ１２１，Ｓ１２２によってＭＡＣ値が算出される。次いで、ＭＡＣ検査部１１６は、受信部１１２により受信したＣＡＮフレーム中のＣＲＣ部からＭＡＣデータ（受信ＭＡＣデータ）を取得する。ＭＡＣ検査部１１６は、受信ＭＡＣデータから、ＭＡＣ抽出値とＭＡＣ抽出値に関するＭＡＣ値内の位置情報とを取得する。図１７の例では、ＭＡＣ抽出値に関するＭＡＣ値内の位置情報は「３」である。
【０１１０】
次いで、ＭＡＣ検査部１１６は、受信ＭＡＣデータから取得した位置情報「３」に基づいて、ステップＳ１２２で算出されたＭＡＣ値のビット列（算出ＭＡＣ値）から、ＭＡＣ検査に使用するＭＡＣ検査値を取得する。次いで、ＭＡＣ検査部１１６は、受信ＭＡＣデータから取得したＭＡＣ抽出値と、算出ＭＡＣ値から取得したＭＡＣ検査値とを比較し、両者が一致するか否かを判定する。この判定の結果、両者が一致しない場合、ＭＡＣ検査部１１６は、算出ＭＡＣ値からＭＡＣ検査値を取得する取得場所を変えながら、算出ＭＡＣ値からＭＡＣ検査値を取得してＭＡＣ抽出値と一致するか否かを調べる。例えば、算出ＭＡＣ値からＭＡＣ検査値を取得する取得場所を１ビットずつずらしながら、算出ＭＡＣ値からＭＡＣ検査値を取得してＭＡＣ抽出値と一致するか否かを調べる。
【０１１１】
ＭＡＣ検査部１１６は、ＭＡＣ抽出値とＭＡＣ検査値とが一致した場合、該一致したＭＡＣ検査値を算出ＭＡＣ値から取得した取得場所に対応するビット値（下位ビット値）を、カウンタ部１１５に通知して、カウンタ同期を指示する。カウンタ部１１５は、該カウンタ同期の指示により、該当する受信カウンタ値の下位ビットの値を、通知された下位ビット値に変更する。図１８の例では、ＭＡＣ抽出値と一致したＭＡＣ検査値を算出ＭＡＣ値から取得した取得場所に対応する下位ビット値は「３」である。したがって、ＭＡＣ検査部１１６は、下位ビット値「３」をカウンタ部１１５に通知してカウンタ同期を指示する。カウンタ部１１５は、該カウンタ同期の指示により、該当する受信カウンタ値の下位ビットの値を、通知された下位ビット値「３」に変更する。このカウンタ同期対象の受信カウンタ値は、受信部１１２により受信したＣＡＮフレーム中のＩＤ部に格納されているＩＤに対応する受信カウンタ値である。これにより、当該ＩＤに対応する送信ノードの送信カウンタ値と、本受信ノードの当該ＩＤに対応する受信カウンタ値との同期が取られることになる。
【０１１２】
上述した図１７及び図１８に係るデータフレームに格納するＭＡＣデータの例によれば、受信ノードにおいて算出ＭＡＣ値からＭＡＣ検査値を取得する取得場所の情報が送信ノードから受信ノードに通知されるので、受信ノードにおけるＭＡＣ検査の効率が向上する。これにより、例えば、ＭＣＵ＿２間の通信に要する時間の短縮を図ることができる等の効果が得られる。
【０１１３】
［ＭＡＣの他の例］
ＭＡＣとして、例えば、Code MAC（CMAC）を算出することが挙げられる。ＣＭＡＣは共通鍵暗号ベースのＭＡＣである。
【０１１４】
［暗号処理の他の実施例１］
図１９は、本発明の一実施形態に係る暗号処理のシーケンスチャートである。図１９を参照して、暗号処理の他の実施例１を説明する。暗号処理の他の実施例１は、上述した第２実施形態の変形例である。暗号処理の他の実施例１に係る通信ネットワークシステムは、上述した第２実施形態に係る図７の通信ネットワークシステム１の構成と同じであり、例えば自動車に搭載される。但し、暗号処理の他の実施例１では、マスタＭＣＵ＿２−ａ及びエンドＭＣＵ＿２−ｂの各セキュアＲＯＭ＿２２は、同じ共通鍵Ｋｃｏｍを記憶する。共通鍵は対称鍵とも呼ばれる。
【０１１５】
所定の契機により図１９の処理が開始される。ここでは、秘密の情報である乱数を、マスタＭＣＵ＿２−ａからエンドＭＣＵ＿２−ｂへ安全に通知する場面を例に挙げて説明する。なお、マスタＭＣＵ＿２−ａとエンドＭＣＵ＿２−ｂとの間のデータの送受は通信バス３を介して行われる。
【０１１６】
（ステップＳ２０１）マスタＭＣＵ＿２−ａが、生成して自己のＲＡＭ＿１２に保持される初期乱数をチャレンジとしてエンドＭＣＵ＿２−ｂへ送信する。また、マスタＭＣＵ＿２−ａは、該エンドＭＣＵ＿２−ｂへチャレンジとして送信した初期乱数を、自己のセキュアエレメント１４へ渡す。
【０１１７】
（ステップＳ２０２）エンドＭＣＵ＿２−ｂは、マスタＭＣＵ＿２−ａから受信したチャレンジである初期乱数を、自己のセキュアエレメント１４に渡す。エンドＭＣＵ＿２−ｂの暗号処理部２４は、該渡された初期乱数を、自己のセキュアＲＯＭ＿２２に保持される共通鍵Ｋｃｏｍを使用して暗号化する。この暗号化処理では、エンドＭＣＵ＿２−ｂのセキュアＲＡＭ＿２１が、暗号化処理におけるデータの一時記憶領域として使用される。次いで、エンドＭＣＵ＿２−ｂは、暗号化された初期乱数である暗号化データＫｃｏｍ（初期乱数）をレスポンスとしてマスタＭＣＵ＿２−ａへ送信する。
【０１１８】
（ステップＳ２０３）マスタＭＣＵ＿２−ａは、エンドＭＣＵ＿２−ｂから受信したレスポンスである暗号化データＫｃｏｍ（初期乱数）を、自己のセキュアエレメント１４に渡す。マスタＭＣＵ＿２−ａの暗号処理部２４は、該渡された暗号化データＫｃｏｍ（初期乱数）を、自己のセキュアＲＯＭ＿２２に保持される共通鍵Ｋｃｏｍを使用して復号化する。次いで、マスタＭＣＵ＿２−ａの暗号処理部２４は、該復号化により得られた復号化データと、ステップＳ２０１でチャレンジとしてエンドＭＣＵ＿２−ｂへ送信された初期乱数との一致を検証する。それら復号化処理および検証処理では、マスタＭＣＵ＿２−ａのセキュアＲＡＭ＿２１が、復号化処理および検証処理におけるデータの一時記憶領域として使用される。該検証の成功により、当該エンドＭＣＵ＿２−ｂの認証が成功したと判断できる。
【０１１９】
なお、マスタＭＣＵ＿２−ａは、レスポンスである暗号化データＫｃｏｍ（初期乱数）を復号化する代わりに、ステップＳ２０１でチャレンジとしてエンドＭＣＵ＿２−ｂへ送信された初期乱数を共通鍵Ｋｃｏｍで暗号化し、この暗号化データＫｃｏｍ（初期乱数）とレスポンスである暗号化データＫｃｏｍ（初期乱数）との一致を検証してもよい。それら暗号化処理および検証処理では、マスタＭＣＵ＿２−ａのセキュアＲＡＭ＿２１が、暗号化処理および検証処理におけるデータの一時記憶領域として使用される。該検証の成功により、当該エンドＭＣＵ＿２−ｂの認証が成功したと判断できる。
【０１２０】
該検証が成功した場合には、マスタＭＣＵ＿２−ａの暗号処理部２４は、秘密の情報である乱数を生成し、生成した乱数を、自己のセキュアＲＯＭ＿２２に保持される共通鍵Ｋｃｏｍを使用して暗号化する。それら乱数生成処理および暗号化処理では、マスタＭＣＵ＿２−ａのセキュアＲＡＭ＿２１が、乱数生成処理および暗号化処理におけるデータの一時記憶領域として使用される。次いで、マスタＭＣＵ＿２−ａは、暗号化された秘密の情報（乱数）である暗号化データＫｃｏｍ（乱数）をエンドＭＣＵ＿２−ｂへ送信する。
【０１２１】
エンドＭＣＵ＿２−ｂは、マスタＭＣＵ＿２−ａから受信した暗号化データＫｃｏｍ（乱数）を、自己のセキュアエレメント１４に渡す。エンドＭＣＵ＿２−ｂの暗号処理部２４は、該渡された暗号化データＫｃｏｍ（乱数）を、自己のセキュアＲＯＭ＿２２に保持される共通鍵Ｋｃｏｍを使用して復号化する。この復号化処理では、エンドＭＣＵ＿２−ｂのセキュアＲＡＭ＿２１が、復号化処理におけるデータの一時記憶領域として使用される。該復号化処理によって暗号化データＫｃｏｍ（乱数）から、秘密の情報である乱数が取得される。
【０１２２】
（ステップＳ２０４）エンドＭＣＵ＿２−ｂは、自己のセキュアエレメント１４が取得した秘密の情報である乱数を自己のＲＡＭ１２に記憶する。マスタＭＣＵ＿２−ａは、エンドＭＣＵ＿２−ｂへ送信した秘密の情報である乱数を自己のＲＡＭ１２に記憶する。マスタＭＣＵ＿２−ａとエンドＭＣＵ＿２−ｂとは、同じ秘密の情報である乱数を保持する。
【０１２３】
上述した暗号処理の他の実施例１によれば、セキュアエレメント１４による暗号処理によって、ＭＣＵ＿２間（上述した例ではマスタＭＣＵ＿２−ａとエンドＭＣＵ＿２−ｂの間）で交換される情報の暗号処理（暗号化処理、復号化処理）が安全に行われる。これにより、ＭＣＵ＿２間で交換される情報の安全性が保たれる。
【０１２４】
さらに、当該暗号処理に基づいたチャレンジ・レスポンスによって、マスタＭＣＵ＿２−ａがエンドＭＣＵ＿２−ｂの確かな認証を行うことができる。そして、マスタＭＣＵ＿２−ａから認証済みのエンドＭＣＵ＿２−ｂに対して、当該暗号処理に基づいて秘密の情報を安全に送信することができる。この秘密の情報は、上述した第１実施形態における秘密情報として利用できる。上述した暗号処理の他の実施例１では、マスタＭＣＵ＿２−ａからエンドＭＣＵ＿２−ｂに対して、安全に、秘密の情報である乱数が伝達される。
【０１２５】
［暗号処理の他の実施例２］
図２０は、本発明の一実施形態に係る暗号処理のシーケンスチャートである。図２０を参照して、暗号処理の他の実施例２を説明する。暗号処理の他の実施例２は、上述した第２実施形態の変形例である。暗号処理の他の実施例２に係る通信ネットワークシステムは、上述した第２実施形態に係る図７の通信ネットワークシステム１の構成と同じであり、例えば自動車に搭載される。但し、暗号処理の他の実施例２では、マスタＭＣＵ＿２−ａ及びエンドＭＣＵ＿２−ｂの各セキュアＲＯＭ＿２２は、同じ共通鍵Ｋｃｏｍを記憶する。
【０１２６】
所定の契機により図２０の処理が開始される。ここでは、秘密の情報である乱数を、マスタＭＣＵ＿２−ａからエンドＭＣＵ＿２−ｂへ安全に通知する場面を例に挙げて説明する。なお、マスタＭＣＵ＿２−ａとエンドＭＣＵ＿２−ｂとの間のデータの送受は通信バス３を介して行われる。
【０１２７】
（ステップＳ２１１）マスタＭＣＵ＿２−ａが、生成して自己のＲＡＭ＿１２に保持される初期乱数をチャレンジとしてエンドＭＣＵ＿２−ｂへ送信する。また、マスタＭＣＵ＿２−ａは、該エンドＭＣＵ＿２−ｂへチャレンジとして送信した初期乱数を、自己のセキュアエレメント１４へ渡す。
【０１２８】
（ステップＳ２１２）エンドＭＣＵ＿２−ｂは、マスタＭＣＵ＿２−ａから受信したチャレンジである初期乱数を、自己のセキュアエレメント１４に渡す。エンドＭＣＵ＿２−ｂの暗号処理部２４は、該渡された初期乱数を、自己のセキュアＲＯＭ＿２２に保持される共通鍵Ｋｃｏｍを使用して暗号化する。この暗号化処理では、エンドＭＣＵ＿２−ｂのセキュアＲＡＭ＿２１が、暗号化処理におけるデータの一時記憶領域として使用される。次いで、エンドＭＣＵ＿２−ｂは、暗号化された初期乱数である暗号化データＫｃｏｍ（初期乱数）をレスポンスとしてマスタＭＣＵ＿２−ａへ送信する。
【０１２９】
マスタＭＣＵ＿２−ａは、エンドＭＣＵ＿２−ｂから受信したレスポンスである暗号化データＫｃｏｍ（初期乱数）を、自己のセキュアエレメント１４に渡す。マスタＭＣＵ＿２−ａの暗号処理部２４は、該渡された暗号化データＫｃｏｍ（初期乱数）を、自己のセキュアＲＯＭ＿２２に保持される共通鍵Ｋｃｏｍを使用して復号化する。次いで、マスタＭＣＵ＿２−ａの暗号処理部２４は、該復号化により得られた復号化データと、ステップＳ２１１でチャレンジとしてエンドＭＣＵ＿２−ｂへ送信された初期乱数との一致を検証する。それら復号化処理および検証処理では、マスタＭＣＵ＿２−ａのセキュアＲＡＭ＿２１が、復号化処理および検証処理におけるデータの一時記憶領域として使用される。該検証の成功により、当該エンドＭＣＵ＿２−ｂの認証が成功したと判断できる。
【０１３０】
なお、マスタＭＣＵ＿２−ａは、レスポンスである暗号化データＫｃｏｍ（初期乱数）を復号化する代わりに、ステップＳ２１１でチャレンジとしてエンドＭＣＵ＿２−ｂへ送信された初期乱数を共通鍵Ｋｃｏｍで暗号化し、この暗号化データＫｃｏｍ（初期乱数）とレスポンスである暗号化データＫｃｏｍ（初期乱数）との一致を検証してもよい。それら暗号化処理および検証処理では、マスタＭＣＵ＿２−ａのセキュアＲＡＭ＿２１が、暗号化処理および検証処理におけるデータの一時記憶領域として使用される。該検証の成功により、当該エンドＭＣＵ＿２−ｂの認証が成功したと判断できる。
【０１３１】
（ステップＳ２１３）エンドＭＣＵ＿２−ｂが、生成して自己のＲＡＭ＿１２に保持される初期乱数をチャレンジとしてマスタＭＣＵ＿２−ａへ送信する。また、エンドＭＣＵ＿２−ｂは、該マスタＭＣＵ＿２−ａへチャレンジとして送信した初期乱数を、自己のセキュアエレメント１４へ渡す。
【０１３２】
（ステップＳ２１４）マスタＭＣＵ＿２−ａは、エンドＭＣＵ＿２−ｂから受信したチャレンジである初期乱数を、自己のセキュアエレメント１４に渡す。マスタＭＣＵ＿２−ａの暗号処理部２４は、該渡された初期乱数を、自己のセキュアＲＯＭ＿２２に保持される共通鍵Ｋｃｏｍを使用して暗号化する。この暗号化処理では、マスタＭＣＵ＿２−ａのセキュアＲＡＭ＿２１が、暗号化処理におけるデータの一時記憶領域として使用される。次いで、マスタＭＣＵ＿２−ａは、暗号化された初期乱数である暗号化データＫｃｏｍ（初期乱数）をレスポンスとしてエンドＭＣＵ＿２−ｂへ送信する。
【０１３３】
エンドＭＣＵ＿２−ｂは、マスタＭＣＵ＿２−ａから受信したレスポンスである暗号化データＫｃｏｍ（初期乱数）を、自己のセキュアエレメント１４に渡す。エンドＭＣＵ＿２−ｂの暗号処理部２４は、該渡された暗号化データＫｃｏｍ（初期乱数）を、自己のセキュアＲＯＭ＿２２に保持される共通鍵Ｋｃｏｍを使用して復号化する。次いで、エンドＭＣＵ＿２−ｂの暗号処理部２４は、該復号化により得られた復号化データと、ステップＳ２１３でチャレンジとしてマスタＭＣＵ＿２−ａへ送信された初期乱数との一致を検証する。それら復号化処理および検証処理では、エンドＭＣＵ＿２−ｂのセキュアＲＡＭ＿２１が、復号化処理および検証処理におけるデータの一時記憶領域として使用される。該検証の成功により、当該マスタＭＣＵ＿２−ａの認証が成功したと判断できる。
【０１３４】
なお、エンドＭＣＵ＿２−ｂは、レスポンスである暗号化データＫｃｏｍ（初期乱数）を復号化する代わりに、ステップＳ２１３でチャレンジとしてマスタＭＣＵ＿２−ａへ送信された初期乱数を共通鍵Ｋｃｏｍで暗号化し、この暗号化データＫｃｏｍ（初期乱数）とレスポンスである暗号化データＫｃｏｍ（初期乱数）との一致を検証してもよい。それら暗号化処理および検証処理では、エンドＭＣＵ＿２−ｂのセキュアＲＡＭ＿２１が、暗号化処理および検証処理におけるデータの一時記憶領域として使用される。該検証の成功により、当該マスタＭＣＵ＿２−ａの認証が成功したと判断できる。
【０１３５】
上述したマスタＭＣＵ＿２−ａとエンドＭＣＵ＿２−ｂとの間の相互認証が成功した場合には、ステップＳ２１５において、マスタＭＣＵ＿２−ａからエンドＭＣＵ＿２−ｂに対して、秘密の情報である乱数が伝達される。
【０１３６】
（ステップＳ２１５）マスタＭＣＵ＿２−ａの暗号処理部２４は、秘密の情報である乱数を生成し、生成した乱数を、自己のセキュアＲＯＭ＿２２に保持される共通鍵Ｋｃｏｍを使用して暗号化する。それら乱数生成処理および暗号化処理では、マスタＭＣＵ＿２−ａのセキュアＲＡＭ＿２１が、乱数生成処理および暗号化処理におけるデータの一時記憶領域として使用される。次いで、マスタＭＣＵ＿２−ａは、暗号化された秘密の情報（乱数）である暗号化データＫｃｏｍ（乱数）をエンドＭＣＵ＿２−ｂへ送信する。
【０１３７】
エンドＭＣＵ＿２−ｂは、マスタＭＣＵ＿２−ａから受信した暗号化データＫｃｏｍ（乱数）を、自己のセキュアエレメント１４に渡す。エンドＭＣＵ＿２−ｂの暗号処理部２４は、該渡された暗号化データＫｃｏｍ（乱数）を、自己のセキュアＲＯＭ＿２２に保持される共通鍵Ｋｃｏｍを使用して復号化する。この復号化処理では、エンドＭＣＵ＿２−ｂのセキュアＲＡＭ＿２１が、復号化処理におけるデータの一時記憶領域として使用される。該復号化処理によって暗号化データＫｃｏｍ（乱数）から、秘密の情報である乱数が取得される。
【０１３８】
（ステップＳ２１６）エンドＭＣＵ＿２−ｂは、自己のセキュアエレメント１４が取得した秘密の情報である乱数を自己のＲＡＭ１２に記憶する。マスタＭＣＵ＿２−ａは、エンドＭＣＵ＿２−ｂへ送信した秘密の情報である乱数を自己のＲＡＭ１２に記憶する。マスタＭＣＵ＿２−ａとエンドＭＣＵ＿２−ｂとは、同じ秘密の情報である乱数を保持する。
【０１３９】
上述した暗号処理の他の実施例２によれば、セキュアエレメント１４による暗号処理によって、ＭＣＵ＿２間（上述した例ではマスタＭＣＵ＿２−ａとエンドＭＣＵ＿２−ｂの間）で交換される情報の暗号処理（暗号化処理、復号化処理）が安全に行われる。これにより、ＭＣＵ＿２間で交換される情報の安全性が保たれる。
【０１４０】
さらに、当該暗号処理に基づいたチャレンジ・レスポンスによって、マスタＭＣＵ＿２−ａとエンドＭＣＵ＿２−ｂとが確かな相互認証を行うことができる。そして、相互認証済みのマスタＭＣＵ＿２−ａとエンドＭＣＵ＿２−ｂとの間で、マスタＭＣＵ＿２−ａからエンドＭＣＵ＿２−ｂに対して、当該暗号処理に基づいて秘密の情報を安全に送信することができる。この秘密の情報は、上述した第１実施形態における秘密情報として利用できる。上述した暗号処理の他の実施例２では、マスタＭＣＵ＿２−ａからエンドＭＣＵ＿２−ｂに対して、安全に、秘密の情報である乱数が伝達される。
【０１４１】
［暗号処理の他の実施例３］
図２１は、本発明の一実施形態に係る暗号処理のシーケンスチャートである。図２１を参照して、暗号処理の他の実施例３を説明する。暗号処理の他の実施例３は、上述した第２実施形態の変形例である。暗号処理の他の実施例３に係る通信ネットワークシステムは、上述した第２実施形態に係る図７の通信ネットワークシステム１の構成と同じであり、例えば自動車に搭載される。但し、暗号処理の他の実施例３では、マスタＭＣＵ＿２−ａ及びエンドＭＣＵ＿２−ｂの各セキュアＲＯＭ＿２２は、同じ共通鍵Ｋｃｏｍを記憶する。共通鍵は対称鍵とも呼ばれる。
【０１４２】
所定の契機により図２１の処理が開始される。ここでは、秘密の情報である乱数を、マスタＭＣＵ＿２−ａからエンドＭＣＵ＿２−ｂへ安全に通知する場面を例に挙げて説明する。なお、マスタＭＣＵ＿２−ａとエンドＭＣＵ＿２−ｂとの間のデータの送受は通信バス３を介して行われる。
【０１４３】
（ステップＳ２２１）マスタＭＣＵ＿２−ａの暗号処理部２４は、初期乱数を生成する。この乱数生成処理では、マスタＭＣＵ＿２−ａのセキュアＲＡＭ＿２１が、乱数生成処理におけるデータの一時記憶領域として使用される。生成された初期乱数は、マスタＭＣＵ＿２−ａのセキュアＲＡＭ＿２１に保持される。マスタＭＣＵ＿２−ａは、自己のセキュアＲＡＭ＿２１に保持される初期乱数をチャレンジとしてエンドＭＣＵ＿２−ｂへ送信する。
【０１４４】
（ステップＳ２２２）エンドＭＣＵ＿２−ｂは、マスタＭＣＵ＿２−ａから受信したチャレンジである初期乱数を、自己のセキュアエレメント１４に渡す。エンドＭＣＵ＿２−ｂの暗号処理部２４は、該渡された初期乱数を、自己のセキュアＲＯＭ＿２２に保持される共通鍵Ｋｃｏｍを使用して暗号化する。この暗号化処理では、エンドＭＣＵ＿２−ｂのセキュアＲＡＭ＿２１が、暗号化処理におけるデータの一時記憶領域として使用される。次いで、エンドＭＣＵ＿２−ｂは、暗号化された初期乱数である暗号化データＫｃｏｍ（初期乱数）をレスポンスとしてマスタＭＣＵ＿２−ａへ送信する。
【０１４５】
（ステップＳ２２３）マスタＭＣＵ＿２−ａは、エンドＭＣＵ＿２−ｂから受信したレスポンスである暗号化データＫｃｏｍ（初期乱数）を、自己のセキュアエレメント１４に渡す。マスタＭＣＵ＿２−ａの暗号処理部２４は、該渡された暗号化データＫｃｏｍ（初期乱数）を、自己のセキュアＲＯＭ＿２２に保持される共通鍵Ｋｃｏｍを使用して復号化する。次いで、マスタＭＣＵ＿２−ａの暗号処理部２４は、該復号化により得られた復号化データと、自己のマスタＭＣＵ＿２−ａのセキュアＲＡＭ＿２１に保持される初期乱数との一致を検証する。それら復号化処理および検証処理では、マスタＭＣＵ＿２−ａのセキュアＲＡＭ＿２１が、復号化処理および検証処理におけるデータの一時記憶領域として使用される。該検証の成功により、当該エンドＭＣＵ＿２−ｂの認証が成功したと判断できる。
【０１４６】
なお、マスタＭＣＵ＿２−ａは、レスポンスである暗号化データＫｃｏｍ（初期乱数）を復号化する代わりに、自己のセキュアＲＡＭ＿２１に保持される初期乱数を共通鍵Ｋｃｏｍで暗号化し、この暗号化データＫｃｏｍ（初期乱数）とレスポンスである暗号化データＫｃｏｍ（初期乱数）との一致を検証してもよい。それら暗号化処理および検証処理では、マスタＭＣＵ＿２−ａのセキュアＲＡＭ＿２１が、暗号化処理および検証処理におけるデータの一時記憶領域として使用される。該検証の成功により、当該エンドＭＣＵ＿２−ｂの認証が成功したと判断できる。
【０１４７】
該検証が成功した場合には、マスタＭＣＵ＿２−ａの暗号処理部２４は、秘密の情報である乱数を生成し、生成した乱数を、自己のセキュアＲＯＭ＿２２に保持される共通鍵Ｋｃｏｍを使用して暗号化する。それら乱数生成処理および暗号化処理では、マスタＭＣＵ＿２−ａのセキュアＲＡＭ＿２１が、乱数生成処理および暗号化処理におけるデータの一時記憶領域として使用される。次いで、マスタＭＣＵ＿２−ａは、暗号化された秘密の情報（乱数）である暗号化データＫｃｏｍ（乱数）をエンドＭＣＵ＿２−ｂへ送信する。
【０１４８】
エンドＭＣＵ＿２−ｂは、マスタＭＣＵ＿２−ａから受信した暗号化データＫｃｏｍ（乱数）を、自己のセキュアエレメント１４に渡す。エンドＭＣＵ＿２−ｂの暗号処理部２４は、該渡された暗号化データＫｃｏｍ（乱数）を、自己のセキュアＲＯＭ＿２２に保持される共通鍵Ｋｃｏｍを使用して復号化する。この復号化処理では、エンドＭＣＵ＿２−ｂのセキュアＲＡＭ＿２１が、復号化処理におけるデータの一時記憶領域として使用される。該復号化処理によって暗号化データＫｃｏｍ（乱数）から、秘密の情報である乱数が取得される。
【０１４９】
（ステップＳ２２４）エンドＭＣＵ＿２−ｂは、自己のセキュアエレメント１４が取得した秘密の情報である乱数を自己のＲＡＭ１２に記憶する。マスタＭＣＵ＿２−ａは、エンドＭＣＵ＿２−ｂへ送信した秘密の情報である乱数を自己のＲＡＭ１２に記憶する。マスタＭＣＵ＿２−ａとエンドＭＣＵ＿２−ｂとは、同じ秘密の情報である乱数を保持する。
【０１５０】
上述した暗号処理の他の実施例３によれば、セキュアエレメント１４による暗号処理によって、ＭＣＵ＿２間（上述した例ではマスタＭＣＵ＿２−ａとエンドＭＣＵ＿２−ｂの間）で交換される情報の暗号処理（暗号化処理、復号化処理）が安全に行われる。これにより、ＭＣＵ＿２間で交換される情報の安全性が保たれる。
【０１５１】
さらに、当該暗号処理に基づいたチャレンジ・レスポンスによって、マスタＭＣＵ＿２−ａがエンドＭＣＵ＿２−ｂの確かな認証を行うことができる。そして、マスタＭＣＵ＿２−ａから認証済みのエンドＭＣＵ＿２−ｂに対して、当該暗号処理に基づいて秘密の情報を安全に送信することができる。この秘密の情報は、上述した第１実施形態における秘密情報として利用できる。上述した暗号処理の他の実施例３では、マスタＭＣＵ＿２−ａからエンドＭＣＵ＿２−ｂに対して、安全に、秘密の情報である乱数が伝達される。
【０１５２】
なお、上述した暗号処理の他の実施例３において、上述した暗号処理の他の実施例２と同様に、マスタＭＣＵ＿２−ａとエンドＭＣＵ＿２−ｂとの間で相互認証を行うようにし、相互認証が成功した場合に、マスタＭＣＵ＿２−ａからエンドＭＣＵ＿２−ｂに対して、秘密の情報である乱数が伝達されるようにしてもよい。
【０１５３】
［ＭＡＣ生成処理およびＭＡＣ検査処理の他の実施例］
図２２は、本発明の一実施形態に係るＭＡＣ生成処理およびＭＡＣ検査処理を説明するためのシーケンスチャートである。図２２を参照して、ＭＡＣ生成処理およびＭＡＣ検査処理の他の実施例を説明する。ＭＡＣ生成処理およびＭＡＣ検査処理の他の実施例は、上述した第２実施形態の変形例である。ＭＡＣ生成処理およびＭＡＣ検査処理の他の実施例に係る通信ネットワークシステムは、上述した第２実施形態に係る図７の通信ネットワークシステム１の構成と同じであり、例えば自動車に搭載される。但し、ＭＡＣ生成処理およびＭＡＣ検査処理の他の実施例では、上述した暗号処理の他の実施例１，２，３のいずれかによって、マスタＭＣＵ＿２−ａから認証済みのエンドＭＣＵ＿２−ｂに対して、秘密の情報である乱数が安全に送信されている。マスタＭＣＵ＿２−ａ及びエンドＭＣＵ＿２−ｂは、該秘密の情報である乱数をＲＡＭ１２に格納する。このＲＡＭ１２は、上述した第１実施形態における秘密情報記憶部１１７として、該秘密の情報である乱数を秘密情報として保持する。
【０１５４】
図２２において、送信側ＭＣＵ＿２は送信ノードとして動作する。送信側ＭＣＵ＿２はマスタＭＣＵ＿２−ａであってもよく、又は、エンドＭＣＵ＿２−ｂであってもよい。受信側ＭＣＵ＿２は受信ノードとして動作する。受信側ＭＣＵ＿２はマスタＭＣＵ＿２−ａであってもよく、又は、エンドＭＣＵ＿２−ｂであってもよい。送信側ＭＣＵ＿２は、ＲＡＭ＿１２に、秘密情報と送信カウンタ値と送信データとを保持している。受信側ＭＣＵ＿２は、ＲＡＭ＿１２に、秘密情報と受信カウンタ値とを保持している。図２２の処理は、送信側ＭＣＵ＿２から送信されるＣＡＮフレームを作成する際に開始される。
【０１５５】
（ステップＳ２３１）送信側ＭＣＵ＿２のＣＰＵ＿１０は、ＲＡＭ＿１２に保持される秘密情報と送信データと送信カウンタ値とを使用して、ＭＡＣの生成を行う。このＭＡＣの生成方法は、上述した第１実施形態等と同様である。
【０１５６】
（ステップＳ２３２）送信側ＭＣＵ＿２のＣＰＵ＿１０は、ステップＳ２３１でＭＡＣ生成に使用された送信データと、ステップＳ２３１で生成されたＭＡＣとが格納されたＣＡＮフレームを通信バス３へ送信する。このＣＡＮフレームは、通信バス３を介して受信側ＭＣＵ＿２で受信される。
【０１５７】
（ステップＳ２３３）受信側ＭＣＵ＿２のＣＰＵ＿１０は、通信バス３から受信したＣＡＮフレームをＲＡＭ＿１２に保持する。受信側ＭＣＵ＿２のＣＰＵ＿１０は、ＲＡＭ＿１２に保持されるＣＡＮフレームから受信データと受信ＭＡＣとを取得する。さらに、受信側ＭＣＵ＿２のＣＰＵ＿１０は、ＲＡＭ＿１２に保持されるＣＡＮフレーム中のＩＤ部に格納されているＩＤに対応する受信カウンタ値を、ＲＡＭ１２から取得する。さらに、受信側ＭＣＵ＿２のＣＰＵ＿１０は、秘密情報をＲＡＭ＿１２から取得する。
【０１５８】
次いで、受信側ＭＣＵ＿２のＣＰＵ＿１０は、取得した秘密情報と受信データと受信カウンタ値とを使用して、ＭＡＣの生成を行う。このＭＡＣの生成方法は、上述した送信側ＭＣＵ＿２と同様である。次いで、受信側ＭＣＵ＿２のＣＰＵ＿１０は、生成したＭＡＣと、ＲＡＭ＿１２に保持されるＣＡＮフレームから取得した受信ＭＡＣとの一致を判定する。この判定の結果が不一致である場合には、上述した第１実施形態等と同様に再検査が行われる。
【０１５９】
上述したＭＡＣ生成処理およびＭＡＣ検査処理の他の実施例によれば、ＲＡＭ１２に保持される秘密情報を使用して、ＣＰＵ＿１０がＭＡＣ生成処理およびＭＡＣ検査処理を実行する。これにより、ＭＡＣ生成処理およびＭＡＣ検査処理の処理時間を短縮できる可能性がある。上述した図１０に示される第２実施形態では、秘密情報をセキュアエレメント１４のセキュアＲＡＭ＿２１に保持し、セキュアエレメント１４においてＭＡＣ生成処理およびＭＡＣ検査処理を実行していた。このため、例えば、ＣＡＮフレームの送信の度に、毎回、ＣＰＵ＿１０は、送信データおよび送信カウンタ値をセキュアエレメント１４へ渡して、セキュアエレメント１４から生成されたＭＡＣを受け取る。このＣＰＵ＿１０とセキュアエレメント１４との間のデータの交換には一定の時間がかかり、ＭＡＣ生成処理におけるオーバーヘッドとなる。これはＭＡＣ検査処理でも同様である。一方、上述したＭＡＣ生成処理およびＭＡＣ検査処理の他の実施例によれば、ＣＰＵ＿１０のみでＭＡＣ生成処理およびＭＡＣ検査処理を実行するので、ＣＰＵ＿１０とセキュアエレメント１４との間のデータの交換は発生せず、該オーバーヘッド分の時間を短縮できる。
【０１６０】
また、上述したＭＣＵ＿２の機能を実現するためのコンピュータプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータに読み込ませ、実行するようにしてもよい。
また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ＲＯＭ、フラッシュメモリ等の書き込み可能な不揮発性メモリ、ＤＶＤ（Digital Versatile Disk）等の可搬媒体、コンピュータに内蔵されるハードディスク等の記憶装置のことをいう。
【０１６１】
さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムが送信された場合のサーバやクライアントとなるコンピュータ内部の揮発性メモリ（例えばＤＲＡＭ（Dynamic Random Access Memory））のように、一定時間プログラムを保持しているものも含むものとする。
また、上記プログラムは、このプログラムを記憶装置等に格納したコンピュータから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク（通信網）や電話回線等の通信回線（通信線）のように情報を伝送する機能を有する媒体のことをいう。
また、上記プログラムは、前述した機能の一部を実現するためのものであっても良い。さらに、前述した機能をコンピュータにすでに記録されているプログラムとの組み合わせで実現できるもの、いわゆる差分ファイル（差分プログラム）であっても良い。
【符号の説明】
【０１６２】
１…通信ネットワークシステム、２，２−ａ，２−ｂ…ＭＣＵ、３…通信バス、１０…ＣＰＵ、１１…フラッシュメモリ、１２…ＲＡＭ、１３…ブートローダ、１４…セキュアエレメント、２１…セキュアＲＡＭ、２２…セキュアＲＯＭ、２３…検証部、２４…暗号処理部、１１１…送信部、１１２…受信部、１１３…フレーム受信処理部、１１４…ＭＡＣ（メッセージ認証コード）生成部、１１５…カウンタ部、１１６…ＭＡＣ（メッセージ認証コード）検査部、１１７…秘密情報記憶部
【図１】
2018026822.tif 000003
【図２】
2018026822.tif 000004
【図３】
2018026822.tif 000005
【図４】
2018026822.tif 000006
【図５】
2018026822.tif 000007
【図６】
2018026822.tif 000008
【図７】
2018026822.tif 000009
【図８】
2018026822.tif 000010
【図９】
2018026822.tif 000011
【図１０】
2018026822.tif 000012
【図１１】
2018026822.tif 000013
【図１２】
2018026822.tif 000014
【図１３】
2018026822.tif 000015
【図１４】
2018026822.tif 000016
【図１５】
2018026822.tif 000017
【図１６】
2018026822.tif 000018
【図１７】
2018026822.tif 000019
【図１８】
2018026822.tif 000020
【図１９】
2018026822.tif 000021
【図２０】
2018026822.tif 000022
【図２１】
2018026822.tif 000023
【図２２】
2018026822.tif 000024